(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
複数のパックデータレジスタと、
命令を復号する復号ユニットであって、前記命令が、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示し、かつ前記命令が複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示し、前記第１のソースパックデータオペランドの前記複数のビット群および前記第２のソースパックデータオペランドの前記複数のビット群のそれぞれは、前記プロセッサがパックデータとして処理可能な最小サイズのパックデータ要素より小さく、前記第１の複数のデータ要素に含まれるデータ要素それぞれが、対応位置における前記第２の複数のデータ要素に含まれる別々のデータ要素に対応し、前記第１の複数のデータ要素に含まれる各データ要素のビット群がそれぞれ、前記第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する、復号ユニットと、
前記複数のパックデータレジスタおよび前記復号ユニットに連結される実行ユニットであって、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきのビット群を、前記第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む結果パックデータオペランドを、前記命令に示される宛先記憶位置に記憶する実行ユニットと、を備えるプロセッサ。
【請求項２】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドの奇数位置のビット群のみを前記第２のソースパックデータオペランドの奇数位置の対応ビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項１に記載のプロセッサ。
【請求項３】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドの偶数位置のビット群のみを前記第２のソースパックデータオペランドの偶数位置の対応ビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項１に記載のプロセッサ。
【請求項４】
前記復号ユニットは、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのどちらが前記結果パックデータオペランドに含まれるかを示す少なくとも１つの偶数奇数表示ビットを有する前記命令を復号し、前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドの前記対応偶数位置のビット群と前記対応奇数位置のビット群とのうち前記示される一方のみを有する前記結果パックデータオペランドを記憶する、請求項１に記載のプロセッサ。
【請求項５】
複数のパックデータレジスタと、
命令を復号する復号ユニットであって、前記命令が、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示し、かつ前記命令が複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示し、前記第１の複数のデータ要素に含まれるデータ要素それぞれが、対応位置における前記第２の複数のデータ要素に含まれる別々のデータ要素に対応し、前記第１の複数のデータ要素に含まれる各データ要素のビット群がそれぞれ、前記第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する、復号ユニットと、
前記複数のパックデータレジスタおよび前記復号ユニットに連結される実行ユニットであって、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきのビット群を、前記第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む結果パックデータオペランドを、前記命令に示される宛先記憶位置に記憶する実行ユニットと、
を備え、
前記復号ユニットは、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのどちらが前記結果パックデータオペランドに含まれるかを示す少なくとも１つの偶数奇数表示ビットを有する前記命令を復号し、前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドの前記対応偶数位置のビット群と前記対応奇数位置のビット群とのうち前記示される一方のみを有する前記結果パックデータオペランドを記憶し、
前記結果パックデータオペランドは、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドのうちの一方の最下位のビット群と前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドのうちの他方の最下位から２番目のビット群とのどちらか一方を最下位のビット群として有し、前記最下位のビット群となるビット群は、前記少なくとも１つの偶数奇数表示ビットにより示される前記結果パックデータオペランドの前記最下位のビット群となる、
プロセッサ。
【請求項６】
前記復号ユニットは、前記少なくとも１つの偶数奇数表示ビットを有する即値を有する前記命令を復号する、請求項４に記載のプロセッサ。
【請求項７】
前記復号ユニットは、前記第１のソースパックデータオペランドの前記ビット群のサイズを示す少なくとも１つのビット群サイズ表示ビットを有する前記命令を復号する、請求項１に記載のプロセッサ。
【請求項８】
前記復号ユニットは、少なくとも２ビットサイズビット群、４ビットサイズビット群、および８ビットサイズビット群のいずれか１つであるものとして前記第１のソースパックデータオペランドの前記ビット群の前記サイズを示す前記少なくとも１つのビット群サイズ表示ビットを有する前記命令を復号する、請求項７に記載のプロセッサ。
【請求項９】
前記復号ユニットは、前記少なくとも１つのビット群サイズ表示ビットを有する即値を有する前記命令を復号する、請求項７に記載のプロセッサ。
【請求項１０】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきの１ビットサイズビット群を、前記第２のソースパックデータオペランドの１つおきの対応１ビットサイズビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１１】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきの２ビットサイズビット群を、前記第２のソースパックデータオペランドの１つおきの対応２ビットサイズビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１２】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきの４ビットサイズビット群を、前記第２のソースパックデータオペランドの１つおきの対応４ビットサイズビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１３】
前記復号ユニットは、６４ビットデータ要素および３２ビットデータ要素の一方である前記第１の複数のデータ要素を有する前記第１のソースパックデータオペランドを示す前記命令を復号する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１４】
前記復号ユニットは、複数のマスク要素を有するソースパックデータ演算マスクを示す前記命令を復号する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１５】
複数のパックデータレジスタと、
命令を復号する復号ユニットであって、前記命令が、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示し、かつ前記命令が複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示し、前記第１の複数のデータ要素に含まれるデータ要素それぞれが、対応位置における前記第２の複数のデータ要素に含まれる別々のデータ要素に対応し、前記第１の複数のデータ要素に含まれる各データ要素のビット群がそれぞれ、前記第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する、復号ユニットと、
前記複数のパックデータレジスタおよび前記復号ユニットに連結される実行ユニットであって、前記命令に応じて、前記第１のソースパックデータオペランドの１つおきのビット群を、前記第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む結果パックデータオペランドを、前記命令に示される宛先記憶位置に記憶する実行ユニットと、
を備え、
前記復号ユニットは、複数のマスク要素を有するソースパックデータ演算マスクを示し、且つ、前記ソースパックデータ演算マスクにあるマスク要素の少なくとも２倍の数のビット群を有する前記第１のソースパックデータオペランドを示す前記命令を復号する、
プロセッサ。
【請求項１６】
前記実行ユニットは、前記命令に応じて、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドの一方に含まれる隣接ビット群のすべての対の中で、互いに隣接しているビット群の位置を交換する、請求項１〜９のいずれか１項に記載のプロセッサ。
【請求項１７】
プロセッサで実行される方法であって、
複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示し、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す命令を受信することであって、前記第１のソースパックデータオペランドの前記複数のビット群および前記第２のソースパックデータオペランドの前記複数のビット群のそれぞれは、前記プロセッサがパックデータとして処理可能な最小サイズのパックデータ要素より小さく、前記第１の複数のデータ要素のデータ要素のそれぞれは、対応位置における前記第２の複数のデータ要素の別々のデータ要素と対応し、前記第１の複数のデータ要素が含む各データ要素のビット群はそれぞれ、前記第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する、命令を受信することと、
前記命令に応じて、前記命令により示される宛先記憶位置に、前記第１のソースパックデータオペランドの１つおきのビット群を、前記第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む結果パックデータオペランドを記憶することとを含む、方法。
【請求項１８】
前記記憶することが、１ビットサイズビット群、２ビットサイズビット群、４ビットサイズビット群のうちの１つである前記第１のソースパックデータオペランドの奇数位置のビット群のみを、前記第２のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む前記結果パックデータオペランドを記憶することを含む、請求項１７に記載の方法。
【請求項１９】
前記記憶することが、１ビットサイズビット群、２ビットサイズビット群、４ビットサイズビット群のうちの１つである前記第１のソースパックデータオペランドの偶数位置のビット群のみを、前記第２のソースパックデータオペランドの対応偶数位置のビット群と交互に並べて含む前記結果パックデータオペランドを記憶することを含む、請求項１７に記載の方法。
【請求項２０】
前記受信することが、前記第１のソースパックデータオペランドおよび前記第２のソースパックデータオペランドが含む対応偶数位置のビット群と対応奇数位置のビット群とのうちのどちらが前記結果パックデータオペランドに記憶されるかを示す少なくとも１つの偶数奇数表示ビットを有する前記命令を受信することを含む、請求項１７に記載の方法。
【請求項２１】
前記受信することが、１ビットサイズビット群、２ビットサイズビット群および４ビットサイズビット群から選択される少なくとも２つのサイズのいずれか一方であるものとして前記第１のソースパックデータオペランドの前記ビット群のサイズを示す少なくとも１つのサイズ表示ビットを有する前記命令を受信することを含む、請求項１７に記載の方法。
【請求項２２】
相互接続部と、
前記相互接続部に連結され、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示し、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す命令を受信するプロセッサであって、前記第１のソースパックデータオペランドの前記複数のビット群および前記第２のソースパックデータオペランドの前記複数のビット群のそれぞれは、前記プロセッサがパックデータとして処理可能な最小サイズのパックデータ要素より小さく、前記第１の複数のデータ要素のデータ要素それぞれは、対応位置における前記第２の複数のデータ要素の別々のデータ要素と対応し、前記第１の複数のデータ要素が含む各データ要素のビット群はそれぞれ、前記第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応し、前記命令は宛先記憶位置を示し、前記プロセッサは、前記命令に応じて、前記宛先記憶位置に結果パックデータオペランドを記憶し、前記結果パックデータオペランドは、前記第１のソースパックデータオペランドの１つおきのビット群を前記第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む、プロセッサと、
前記相互接続部と連結する動的ランダムアクセスメモリ（ＤＲＡＭ）であって、行列転置を実行するための１組の命令を記憶するＤＲＡＭと
を備え、
前記１組の命令は、前記プロセッサにより実行されると、
前記第１のソースパックデータオペランドの少なくとも２つの異なる行列に含まれる複数の列のうちの少なくとも２列からのビット群を記憶する手順を含む複数の演算を前記プロセッサに実行させる、複数の命令を処理するシステム。
【請求項２３】
前記プロセッサが、前記命令に応じて、前記第１のソースパックデータオペランドの奇数位置のビット群のみを前記第２のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む前記結果パックデータオペランドを記憶する、請求項２２に記載のシステム。
【請求項２４】
請求項１７〜２１のいずれか１項に記載の方法を実行する手段を備える装置。
【請求項２５】
プロセッサに、請求項１７〜２１のいずれか１項に記載の方法を実行させるためのコンピュータプログラム。
【請求項２６】
請求項２５に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に記載の実施形態は、概してプロセッサに関する。特に、本明細書に記載の実施形態は、概してプロセッサ内のビット操作に関する。
【背景技術】
【０００２】
多くのプロセッサは、単一命令多重データ（ＳＩＭＤ）アーキテクチャを採用している。複数のデータ要素を、パックデータまたはベクトルデータとして１つのレジスタまたはメモリ位置にパックすることができる。パックデータでは、レジスタまたは他の記憶位置のビットを、一連のデータ要素に論理的に分割することができる（例えば、８ビット、１６ビット、３２ビット、６４ビットのデータ要素）。例えば、１２８ビット幅のパックデータデータレジスタを、２つの６４ビット幅のデータ要素、４つの３２ビットのデータ要素、または８つの１６ビットデータ要素とすることができる。こうしたデータ要素のそれぞれは、データの個々の部分（例えば、ピクセルカラー、複素数の成分）を表すことができ、他の要素とは別におよび／または無関係に動作することができる。
【発明の概要】
【０００３】
ＳＩＭＤアーキテクチャでは、パックデータ命令、ベクトル命令またはＳＩＭＤ命令が、複数のデータ要素または複数対のデータ要素に対して同時にまたは並行して動作可能である。プロセッサは、パックデータ命令に応答する並行実行ハードウェアを備えて、データ要素または対応するデータ要素対に対して同時にまたは並行して複数の処理を実行することができる。
【図面の簡単な説明】
【０００４】
本発明は、以下の説明と実施形態を例示に使用する添付の図面とを参照することで最もよく理解することができる。図面内容は次のものである。
【０００５】
【図１】ビット群インターリーブ命令の一実施形態を実行するよう動作可能なプロセッサの一実施形態を示すブロック図である。
【図２】ビット群インターリーブ命令の一実施形態をプロセッサで実行する方法の一実施形態を示すブロック図である。
【図３】奇数位置のビット群を交互配置するよう実行可能なビット群インターリーブ処理の一実施形態を示すブロック図である。
【図４】偶数位置のビット群を交互配置するよう実行可能なビット群インターリーブ処理の一実施形態を示すブロック図である。
【図５】ビット群インターリーブ命令の一実施形態に好適な即値の例示的一実施形態を示すブロック図である。
【図６】パックデータ演算マスクを使用して偶数位置のビット群を交互配置するよう実行可能なマスクビット群インターリーブ処理の一実施形態を示すブロック図である。
【図７】ビット群インターリーブ処理と任意に組み合わせられるデータ要素ブロードキャスト処理の一実施形態を示すブロック図である。
【図８】ビット群インターリーブ命令の一実施形態を示すブロック図である。
【図９】１組の好適なパックデータデータレジスタの例示的な一実施形態を示すブロック図である。
【図１０】好適なパックデータ演算マスクレジスタ１組の例示的な一実施形態を示すブロック図である。
【図１１Ａ】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令フォーマットを示すブロック図である。
【図１１Ｂ】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令フォーマットを示すブロック図である。
【図１１Ｃ】本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびその命令フォーマットを示すブロック図である。
【図１２Ａ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよび演算コードフィールドを示すブロック図である。
【図１２Ｂ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよび演算コードフィールドを示すブロック図である。
【図１３Ａ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよびそのフィールドを示すブロック図である。
【図１３Ｂ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよびそのフィールドを示すブロック図である。
【図１３Ｃ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよびそのフィールドを示すブロック図である。
【図１３Ｄ】本発明の実施形態による、例示的な特定のベクトルフレンドリ命令フォーマットおよびそのフィールドを示すブロック図である。
【図１４】レジスタのアーキテクチャの一実施形態を示すブロック図である。
【図１５Ａ】インオーダパイプラインの一実施形態およびレジスタリネーミングアウトオブオーダ発行／実行パイプラインの一実施形態を示すブロック図である。
【図１５Ｂ】実行エンジンユニットに連結されたフロントエンドユニット連結を含み、両ユニットともがメモリユニットに連結されているプロセッサコアの一実施形態を示すブロック図である。
【図１６Ａ】単一プロセッサコア一実施形態を、そのオンダイ相互接続部ネットワークとの接続、およびそのレベル２（Ｌ２）キャッシュのローカルサブセットと共に示すブロック図である。
【図１６Ｂ】図１６Ａに示したプロセッサコアの一部の拡大図の一実施形態のブロック図である。
【図１７】２つ以上のコア、マージ型メモリコントローラ、およびマージ型グラフィックを備え得る、プロセッサの一実施形態を示すブロック図である。
【図１８】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１９】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図２０】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図２１】コンピュータアーキテクチャの第４の実施形態のブロック図である。
【図２２】本発明の複数の実施形態による、ソース命令セットの二進命令をターゲット命令セットの二進命令に変換するソフトウェア命令コンバータの使用に関するブロック図である。
【発明を実施するための形態】
【０００６】
本明細書で開示する内容は、サブデータ要素サイズのビット群インターリーブ命令、その命令を実行するプロセッサ、その命令の処理すなわち実行時にそのプロセッサが実行する方法、およびその命令を処理すなわち実行するために１つ以上のプロセッサを組み入れるシステムである。以下の記述では、数多くの具体的な詳細（例えば、特定の命令動作、データフォーマット、プロセッサ構成、マイクロアーキテクチャ上の詳細、操作シーケンス）を設定している。しかし、実施形態は、そうした詳細の設定がなくても実行可能である。他の例では、記載内容の理解を曖昧にしないように、既知の回路、構造および技術については詳細に示していない。
【０００７】
図１は、あるビット群インターリーブ命令１０２の一実施形態を実行するよう動作可能なプロセッサ１００の一実施形態を示すブロック図である。幾つかの実施形態によって、このプロセッサは汎用プロセッサ（例えば、汎用マイクロプロセッサ、またはデスクトップ、ラップトップや他のコンピュータで使用される種類の中央演算処理装置（ＣＰＵ））でよい。あるいは、このプロセッサを専用プロセッサとすることもできる。好適な専用プロセッサの例として、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、組込みプロセッサ、デジタル信号プロセッサ（ＤＰＳ）およびコントローラ（例えば、マイクロコントローラ）が挙げられるが、これに限定するものではない。このプロセッサは、種々の複合命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれを採用していても、または異なるアーキテクチャを組み合わせて採用していてもよい（例えば、コアごとに異なるアーキテクチャを採用してもよい。）。動作中、プロセッサ１００は、ビット群インターリーブ命令１０２を受信することができる。
【０００８】
例えば、この命令を相互接続部のメモリから受信してもよい。この命令は、このプロセッサのマクロ命令、アセンブリ言語命令、機械コード命令、その他の命令、または命令セットの制御信号となり得る。幾つかの実施形態によっては、このビット群インターリーブ命令は、第１のソースパックデータオペランド１１０を（例えば、１つ以上のフィールドまたは１組のビットを介して）明示的に指定または（例えば、非明示的に）示すことも、第２のソースパックデータオペランド１１４を指定または示すことも、結果パックデータオペランド１１８を記憶する宛先記憶位置を指定または示すこともできる。一例として、この命令に、ソースおよび／または宛先オペランド特定フィールドを持たせて、そのオペランドについてレジスタ、メモリ位置、その他の記憶位置を指定することができる。あるいは、これらのオペランドの１つまたは複数を任意に命令に対して暗黙（例えば、命令のオペコードに対して暗黙）にさせることができる。第１のソースパックデータオペランド１１０は、複数のサブデータ要素サイズのビット群１１２をそれぞれが有する第１の複数のデータ要素を備えることができる。第２のソースパックデータオペランドは、複数のサブデータ要素サイズのビット群１１６をそれぞれが有する第２の複数のデータ要素を備えることができる。第１の複数のデータ要素のデータ要素をそれぞれ、対応位置にある第２の複数のデータ要素の別々のデータ要素と対応させることができる。第１の複数のデータ要素に含まれる各データ要素のビット群をそれぞれ、対応する第２の複数のデータ要素のデータ要素において対応する位置にある別々のビット群に対応させることができる。様々な実施形態によって、ビット群はそれぞれ、１ビットサイズのビット群、２ビットサイズのビット群、４ビットサイズのビット群、８ビットサイズのビット群、１６ビットサイズのビット群および３２ビットサイズのビット群とすることができる。幾つかの実施形態によっては、ビット群をそれぞれ、８ビット未満（例えば、１ビット、２ビット、または４ビットサイズのビット群）とすることができるが、本発明の範囲はこれに限定されるものではない。幾つかの実施形態によっては、命令が、第１のソースパックデータオペランドのビット群のサイズを示す少なくとも１つのビット群サイズ表示ビットを有して（例えば、即値に）いてもよい。
【０００９】
図１を再度参照すると、本プロセッサは、復号部すなわちデコーダ１０４を含む。この復号部は、ビット群インターリーブ命令を受信し復号することができる。この復号部は、比較的高いレベルのビット群インターリーブ命令を反映、意味、かつ／またはこれらのインターリーブ命令から派生するものである、１つ以上の比較的低いレベルの命令または制御信号（例えば、１つ以上のマイクロ命令、マイクロ操作、マイクロコードエントリポイント、復号された命令または制御信号など）を出力することができる。幾つかの実施形態によっては、この復号部は、ビット群インターリーブ命令を受信する１つ以上の入力構造部（例えば、ポート（１つ以上）、相互接続部（１つ以上）、インタフェース）と、その構造部に連結されてそのビット群インターリーブ命令を認識および複合する命令認識復号ロジックと、同様に連結されて下位命令（単数または複数）または制御信号（単数または複数）を出力する１つ以上の出力構造部（例えば、ポート（１つ以上）、相互接続部（１つ以上）、インタフェース）とを含むことができる。この復号部は種々の異なる機構を使用して実装することができ、これらの機構には、マイクロコード読み出し専用メモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラム可能な論理アレイ（ＰＬＡ）および当技術分野で既知の復号部の実装に使用する他の機構が含まれるが、これらに限定されない。
【００１０】
幾つかの実施形態によっては、ビット群インターリーブ命令を復号部に直接提供する代わりに、命令エミュレータ、翻訳ルーチン、モーファー、インタープリタまたは他の命令変更モジュールを任意に使用してもよい。様々な種類の命令変更モジュールが当技術分野で既知であり、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせに実装可能である。したがって幾つかの実施形態によっては、命令変更モジュールを、例えば、独立したダイ上および／またはメモリ内など（例えば、静的、動的または実行時間エミュレーションモジュールとして）、プロセッサの外部に配置してもよい。例えば、命令変更モジュールは、たとえば第１の命令セットに含まれるビット群インターリーブ命令を受信し、これをエミュレート、翻訳、モーフ、解釈実行、または他の変換を実行することにより、そのビット群インターリーブ命令を第２の異なる命令セットに含まれる１つ以上の対応中間命令もしくは制御信号に変換することができる。この第２の命令セットの１つ以上の中間命令または制御信号を復号部（例えば、復号部１０４）に提供することができる。すると復号部は、それをプロセッサのネイティブハードウェア（例えば、１つ以上の実行ユニット）により実行可能な１つ以上の下位レベルの命令または制御信号に復元することができる。
【００１１】
図１を再度参照すると、本プロセッサはまた、１組のパックデータレジスタ１０８を含む。このパックデータレジスタのそれぞれを、パックデータ、ベクトルデータまたは単一命令多重データ（ＳＩＭＤ）データを記憶するように動作可能なオンダイ記憶位置とすることができる。このパックデータレジスタを、ソフトウェアおよび／またはプログラマに対して可視であるアーキテクチャ的に可視なレジスタまたはアーキテクチャレジスタを表してよく、および／または、それらは、オペランドを特定するために本プロセッサの命令セットの命令により示されるレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ（例えば、一時レジスタ、リオーダバッファ、退避レジスタ（retirement レジスタ）など）における他の非アーキテクチャレジスタとは対照的である。パックデータレジスタは、既知の技術を用いて様々なマイクロアーキテクチャに様々な方法で実装されることができるものであり、いずれかの特定種類の設計に限定されるものではない。適切な種類のレジスタの例として、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた物理レジスタ、およびこの組み合わせが挙げられるが、これに限定されない。
【００１２】
幾つかの実施形態によっては、第１のソースパックデータオペランド１１０を、任意に、第１のパックデータレジスタに記憶し、第２のソースパックデータオペランド１１４を任意に第２のパックデータレジスタに記憶し、その宛先記憶位置を、任意にパックデータレジスタ１０８の第３のパックデータレジスタにしてよい。あるいは、メモリ位置または他の記憶位置を任意に、これらのオペランドの１つ以上に使用してもよい。さらに、幾つかの実施形態によっては、ソースパックデータオペランド用に使うパックデータレジスタを、任意に、結果パックデータオペランドの宛先記憶位置として再使用してもよい。一態様では、ソース／宛先レジスタが、ソースオペランドおよび結果オペランドの両方に使用されるものと非明示的に、すなわち暗に理解され得るものである。
【００１３】
図１を再度参照すると、実行ユニット１０６は、復号部１０４およびパックデータレジスタ１０８に連結されている。本実行ユニットは、ビット群インターリーブ命令を表し、かつ／またはその命令から派生する１つ以上の復号または他の変換をされた命令または制御信号を受信することができる。また、本実行ユニットは、第１のソースパックデータオペランド１１０および第２のソースパックデータオペランド１１４を受信することができる。本実行ユニットは、ビット群インターリーブ命令に応じて（例えば、命令から復元された１つ以上の命令または制御信号に応じて）、かつ／またはビット群インターリーブ命令の結果として動作して、その命令により示された宛先記憶位置に結果パックデータオペランド１１８を記憶することが可能である。幾つかの実施形態によっては、その結果パックデータオペランドは、第１のソースパックデータオペランドの１つおき、すなわち交互に並ぶビット群に第２のソースパックデータオペランドの１つおき、すなわち交互に並ぶ対応ビット群を挟んで含むことができる。この対応するビット群は、第１のソースパックデータオペランドおよび第２のソースパックデータオペランド内において対応する相対的位置（例えば、対応するビット位置）に位置することができる。幾つかの実施形態によっては、この結果は、図３、図４または図６に図示および記載するいずれかのものになり得る。ただし、本発明の範囲はこれに制限されるものではない。
【００１４】
幾つかの実施形態によっては、結果パックデータオペランドは、第１のソースパックデータオペランドの奇数位置のビット群のみを、第２のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含むことができる。他の実施形態では、結果パックデータオペランドは、第１のソースパックデータオペランドの偶数位置のビット群のみを、第２のソースパックデータオペランドの対応偶数位置のビット群と交互に並べて含んでもよい。幾つかの実施形態によっては、ビット群インターリーブ命令は、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群のうちのどちらが結果パックデータオペランドに含まれるかを示す、少なくとも１つの偶数奇数表示ビットを（例えば、ビット群インターリーブ命令の即値に）有してもよい。
【００１５】
幾つかの実施形態によっては、結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきの１ビット、２ビット、４ビット、８ビット、１６ビットまたは３２ビットサイズのビット群を、第２のソースパックデータオペランドの１つおきの１ビット、２ビット、４ビット、８ビット、１６ビットまたは３２ビットサイズの対応ビット群と交互に並べて含むことができる。幾つかの実施形態によっては、このビット群は、１ビット、２ビット、または４ビットサイズのビット群であるが、本発明の範囲はこれに制限されるものではない。幾つかの実施形態によっては、このビット群は、３２ビットダブルワードおよび６４ビットクワドワードのどちらかであるデータ要素に含まれるが、３２ビットダブルワードまたは６４ビットクワドワードより小さい。
【００１６】
有利なことには、サブデータ要素サイズのビット群インターリーブ命令を用いてデータ要素より小さいビット群の交互配置ができる。幾つかの実施形態によっては、このビット群を、プロセッサがパックデータとして処理可能な最小サイズのパックデータ要素より小さくすることができる。幾つかの実施形態によっては、このプロセッサは、これらのパックデータ要素に飽和状態のパックデータ操作を実行できる場合もあるが、サブデータ要素サイズのビット群の少なくとも１つ以上に対しては飽和状態のパックデータ操作を実行できない場合もある。幾つかの実施形態によっては、キャリーチェーンを、パックデータ要素の境界と一致するものを除いて、ビット群の境界で壊すことはできない。
【００１７】
本実行ユニットおよび／またはプロセッサは、特定または特有のロジック（例えば、トランジスタ、集積回路、またはファームウェアとの組み合わせが可能な他のハードウェア（例えば、不揮発性メモリに記憶された命令）および／またはソフトウェア）を含むことができる。そのロジックは、ビット群インターリーブ命令を実行し、かつ／または、そのビット群インターリーブ命令に応じて、および／またはそのビット群インターリーブ命令の結果として（例えば、ビット群インターリーブ命令から復号された１つ以上の命令または制御信号に応じて）その結果を記憶するように動作可能なものである。幾つかの実施形態によっては、実行ユニットは、ソースオペランドを受信する１つ以上の入力構造部（例えば、ポート（１つ以上）、相互接続部（１つ以上）、インタフェース）と、その構造部に連結されてそのソースオペランドを受信および処理してその結果オペランドを生成する回路またはロジックと、同様に連結されてその結果オペランドを出力する１つ以上の出力構造部（例えば、ポート（１つ以上）、相互接続部（１つ以上）、インタフェース）とを含むことができる。幾つかの実施形態によっては、実行ユニットは、第１と第２のソースパックデータオペランドの一方に含まれて隣接するビット群のすべての対の中で、隣接するビット群の位置を交換するビット群スワッピングロジックと、１つおきのビット群を選択するマスキングおよび論理動作ロジックとを含むことができる。ただし、本発明の範囲はこれに制限されるものではない。
【００１８】
説明を不明瞭にしないよう、比較的単純なプロセッサ１００を図示し説明してきた。しかし、このプロセッサは、任意に他の既知のプロセッサ構成要素を含んでもよい。含められる構成要素の例として、汎用レジスタ、ステータスレジスタ（フラッグレジスタと呼ぶ場合がある）、システム制御レジスタ、命令フェッチユニット、プリフェッチバッファ、１つ以上のレベルのキャッシュ（例えば、レベル１（Ｌ１）命令キャッシュ、Ｌ１データキャッシュ、Ｌ２データ／命令キャッシュ）、命令変換索引バッファ（ＴＬＢ）、データＴＬＢ、分岐予測ユニット、アウトオブオーダ実行ユニット（例えば、命令スケジューリングユニット、レジスタリネームおよび／または割り当てユニット、命令ディスパッチユニット、リオーダバッファ（ＲＯＢ）、予約ステーション、メモリオーダバッファ、退避ユニットなど）、バスインタフェースユニット、アドレス生成ユニット、デバッグユニット、性能監視ユニット、電源管理ユニット、プロセッサに含まれる他の構成要素、およびこれらの様々な組み合わせを含むが、これに限定されない。こうした構成要素を、当技術分野で既知の様々な異なる好適な組み合わせおよび／または構成で相互に連結することができる。実施形態は、既知のそのような組み合わせまたは構成のいずれにも限定されない。さらに、実施形態を、複数のコアを備えるプロセッサであって、そのうち少なくとも１つのコアがビット群インターリーブ命令を実行するよう動作可能であるものに含めてもよい。
【００１９】
図２は、ビット群インターリーブ命令の一実施形態を実行する方法２３０の一実施形態を示すブロック流れ図である。幾つかの実施形態によっては、図２の方法は、図１のプロセッサにより、および／または図１のプロセッサ内で実行することができる。また、図１のプロセッサについて本明細書で説明する構成要素、特徴および特定の任意の詳細を必要に応じて図２の方法に適用することできる。あるいは、図２の方法は、類似のもしくは異なるプロセッサまたは装置により、および／またはその中で実行することができる。さらに、図１のプロセッサは、図２に示すものと同一の、類似の、または異なる方法を実行することができる。
【００２０】
その方法は、ブロック２３１でビット群インターリーブ命令を受信することを含む。態様によって、この命令を、プロセッサまたはその一部（例えば、命令フェッチユニット、復号部、バスインタフェースユニットなど）で受信することができる。態様によって、この命令を、オフプロセッサおよび／またはオフダイソース（例えば、メモリ、相互接続部などから）、あるいはオンプロセッサおよび／またはオンダイソース（例えば、命令キャッシュ、命令キューなど）から受信することができる。ビット群インターリーブ命令で、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを指定または示すことができる。その命令で、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを指定または示すことができる。第１の複数のデータ要素のデータ要素それぞれを、そのオペランド内で対応する相対位置（例えば、対応するビット位置）にある第２の複数のデータ要素の別々のデータ要素と対応させることができる。第１の複数のデータ要素のデータ要素それぞれに含まれる各ビット群を、第２の複数のデータ要素の対応データ要素に含まれ、対応する相対位置（例えば、対応するビット位置）にある別々のビット群と対応させることができる。
【００２１】
ブロック２３２では、結果パックデータオペランドを、ビット群インターリーブ命令に応じて、かつ／またはその結果として宛先記憶位置に記憶することができる。この宛先記憶位置を、ビット群インターリーブ命令で指定または示すことができる。幾つかの実施形態によっては、結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含むことができる。幾つかの実施形態によっては、この方法は、本明細書の他の個所で開示するビット群インターリーブ命令のいずれかを受信すること、本明細書の他の個所で開示するビット群インターリーブ処理のいずれかを実行すること、および／または本明細書の他の個所で開示するビット群インターリーブ命令に対する結果パックデータオペランドのいずれかを記憶することを含むことができる。
【００２２】
図示の方法は、アーキテクチャの動作を含む（例えば、ソフトウェア透視図から可視であるもの）。他の実施形態では、この方法に随意１つ以上のマイクロアーキテクチャの動作を含めることができる。例として、命令を取り出す、復号する、アウトオブオーダのスケジュールにする、ソースオペランドをアクセスできるようにする、実行ユニットにマイクロアーキテクチャ動作を実行させて命令を実行することができる。
【００２３】
図３は、ビット群インターリーブ命令の一実施形態に応じて、奇数位置のビット群を交互配置するよう実行可能なビット群インターリーブ処理３３４の一実施形態を示すブロック図である。この命令で、第１の複数のパックデータ要素Ａ１〜ＡＮを有する第１のソースパックデータオペランド３１０を指定または示すことができる。また、この命令で、第２の複数のパックデータ要素Ｂ１〜ＢＮを有する第２のソースパックデータオペランド３１４を指定または示すことができる。第１のソースパックデータオペランドのデータ要素それぞれを、対応する相対位置（例えば、対応ビット位置）にある第２のソースパックデータオペランドの別々のデータ要素と両オペランド内で対応させることができる。例えば、第１のソースパックデータオペランドの最下位のデータ要素Ａ１を、第２のソースパックデータオペランドの最下位のデータ要素Ｂ１と対応させ、最上位のデータ要素ＡＮを最上位のデータ要素ＢＮと対応させることができる。一般に、各ソースパックデータオペランドのデータ要素の数は、単一データ要素のビットサイズで分割される、ソースパックデータオペランドのビットのサイズに等しくてよい。様々な実施形態によっては、各ソースパックデータオペランドの幅を６４ビット、１２８ビット、２５６ビット、５１２ビット、または１０２４ビットとすることができる。ただし、本発明の範囲はこれに制限されるものではない。様々な実施形態によっては、各データ要素のサイズは、８ビット、１６ビット、３２ビット、または６４ビットでもよい。ただし、本発明の範囲はこれに制限されるものではない。また、他のパックデータオペランドのサイズおよびデータ要素の幅も適宜変更可能である。様々な実施形態によっては、各ソースパックデータオペランドのデータ要素の数を、少なくとも２個、少なくとも４個、少なくとも８個、少なくとも１６個、少なくとも３２個または３２個を超える数（例えば少なくとも６４個）というように様々に変えることができる。
【００２４】
第１のソースパックデータオペランドのデータ要素それぞれが、複数のビット群を有してよい。同様に、第２のソースパックデータオペランドのデータ要素それぞれも、複数のビット群を有してよい。図示の例では、データ要素Ａ１は、ビット群Ｇ１、Ｇ２、Ｇ３およびＧ４を有し、データ要素ＡＮは、ビット群Ｇ５、Ｇ６、Ｇ７、Ｇ８を有する。同様に、データ要素Ｂ１は、ビット群Ｈ１、Ｈ２、Ｈ３およびＨ４を有し、データ要素ＢＮは、ビット群Ｈ５、Ｈ６、Ｈ７、Ｈ８を有する。他の実施形態では、データ要素がそれぞれ別々の数のビット群を持つことができる。各ビット群は、それを含むデータ要素より少ないビット数を有する。幾つかの実施形態によっては、ビット群はそれぞれ、ビットの２乗の数を有することができる。例えば、様々な実施形態によっては、ビット群それぞれが、１ビット、２ビット、４ビット、８ビット、１６ビット、３２ビットを持つことができる。データ要素それぞれに、複数のビット群がある。例えば、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドに６４ビットのデータ要素が含まれている場合、６４ビットのデータ要素それぞれが、６４個の１ビットビット群、３２個の２ビットビット群、１６個の４ビットビット群、８個の８ビットビット群、４個の１６ビットビット群、２個の３２ビットビット群を持つことができる。あるいは、３２ビットまたは他のサイズのデータ要素を必要に応じて使用することができる。第１のソースパックデータオペランド３１０が含む第１の複数のデータ要素の各データ要素のビット群それぞれを、第２のソースパックデータオペランドが含む第２の複数のデータ要素のうち、対応する相対位置（例えば、対応ビット位置）にある別々のビット群に対応させることができる。例えば、この例示の場合、Ｇ１はＨ１に対応させることができ、Ｇ２はＨ２に対応させることができ、Ｇ７はＨ７に対応させることができる。
【００２５】
図示のビット群インターリーブ処理は、任意に一時的にグループ交換した第２のソースパックデータオペランド３３６を示す。１組の交差する矢印３３８を用いて、幾つかの実施形態によっては、１つのソースパックデータオペランド内の隣接するビット群のすべての対の中で隣接するビット群の位置をどのように交換することができるかを示す。例えば、Ｈ１をＨ２があった相対ビット位置に、Ｈ２をＨ１があった相対ビット位置に入れ替えることができる。幾つかの実施形態によっては、こうしたビット群の交換処理を必要に応じて実行することができる。実施形態によっては、こうしたビット群の交換動作を任意に省略可能である。こうしたビット群の交換動作は、結果パックデータオペランド３１８を生成する１つの可能な方法であるが、唯一の方法ではない。実施形態によっては、関連するビット群を第２のソースパックデータオペランドにあった元の位置から、結果パックデータオペランドの適切な位置に直接送ることで、こうしたビット群の交換動作を実行せずに済む。一例示として、データ要素Ｂ１およびグループ交換したデータ要素Ｂ'１は、４ビットサイズのビット群の場合、以下の通り表すことができる。Ｂ１＝    ０１００  １１１０  ０１１０  １１００Ｂ'１＝  １１１０  ０１００  １１００  ０１１０
【００２６】
こうした任意ビット群の交換処理から、この処理は任意ではあるが、いくつかの利点を得ることができる。１つには、２つのソースのビット群交互配置では、左シフトまたは右シフトのみをすればよい。しかし、任意のビット群の交換を実行する場合、第１および第２両方のソースパックデータオペランドに同一オペランドを再使用することにより、再帰式自動ビット反転処理（recursive auto bit-reversal operation）（例えば、１ビット群を右にシフトし、１ビット群を左にシフトする）をとることができる。２つ目の利点として、この交換動作を実行するかしないかにより、どちらかのソースオペランドの最下位のビット群を結果パックデータオペランドの最下位のビット群として出現させることが可能になる。
【００２７】
結果パックデータオペランド３１８を、ビット群インターリーブ命令に応じて、（例えば、実行ユニット１０６により）生成し、宛先記憶位置に記憶することができる。この宛先記憶位置を、ビット群インターリーブ命令が指定または示すことができる。様々な実施形態によっては、この宛先記憶位置を、パックデータレジスタ、メモリ位置または他の記憶位置にすることができる。この結果パックデータオペランドは、複数のパックデータ要素Ｃ１〜ＣＮを含み、要素Ｃ１〜ＣＮはそれぞれ、Ａ１〜ＡＮおよび／またはＢ１〜ＢＮのいずれか１つに対応する。任意の一時的にグループ交換した第２のソースパックデータオペランド３３６を使用する実施形態では、第１の矢印３４０が、Ｇ１を第１のオペランドから結果オペランドにどのように記憶できるかを示し、第２の矢印３４２が、Ｈ１を一時的にグループ交換したオペランドから結果オペランドにどのように記憶できるかを示し、第３の矢印３４４が、Ｇ３を第１のオペランドから結果オペランドにどのように記憶できるかを示し、第４の矢印３４６が、Ｈ３を第１のオペランドから結果オペランドにどのように記憶できるかを示す。こうした場合、ビット群を、第１と第２のオペランドから交互に、結果オペランドにおけるビット群位置それぞれにビット位置で対応する連続ビット群位置から二者択一的に選択する。
【００２８】
幾つかの実施形態によっては、結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、これに１おきに対応する第２のソースパックデータオペランドのビット群と交互に並べて含むことができる。例えば、結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきの、１ビット、２ビット、または４ビットビットサイズのビット群を、第２のソースパックデータオペランドで同じサイズの１ビット、２ビット、４ビットサイズの１つおきの対応ビット群と交互に並べて含むことができる。図示の通り、幾つかの実施形態によっては、結果パックデータオペランドは、第１のソースパックデータオペランドの奇数位置のビット群のみを、第２のソースパックデータオペランドの対応奇数位置のビット群のみと交互に並べて含むことができる。第１のソースパックデータオペランドでは、最下位から最上位のビット位置までのビット順に、Ｇ１が第１の位置（すなわち奇数位置）のビット群、Ｇ２が第２の位置（すなわち偶数位置）のビット群、Ｇ３が第３の位置（すなわち奇数位置）のビット群、Ｇ４が第４の位置（すなわち偶数位置）のビット群である。同様に、最下位から最上位のビット位置までのビット順に、第２のソースパックデータオペランドでは、Ｈ１が第１の位置（すなわち奇数位置）のビット群、Ｈ２が第２の位置（すなわち偶数位置）のビット群、Ｈ３が第３の位置（すなわち奇数位置）のビット群、Ｈ４が第４の位置（すなわち偶数位置）のビット群である。最も近い奇数位置のビット群の対それぞれを、１つの介在する／中間の偶数位置ビット群に隔てられた不連続のビット群としてもよい。図示の結果パックデータオペランドは、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのすべて奇数の位置のビット群のみ（例えば、Ｇ１、Ｈ１、Ｈ３、Ｇ５、Ｈ５、Ｇ７およびＨ７）を有し、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのいずれの偶数位置のビット群も有しない（例えば、Ｇ２、Ｈ２、Ｇ４、Ｈ４、Ｇ６、Ｈ６、Ｇ８およびＨ８）ことに留意されたい。図示の結果パックデータオペランドは、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのビット群の半分しか含んでいない。
【００２９】
幾つかの実施形態によっては、ビット群（例えば、奇数位置のビット群）の交互配置を、命令に明示的に指定し、および／またはフレキシブルにする代わりに、命令（例えば、命令のオペコード）に対して暗黙として、および／またはフィクスとすることができる。例えば、この命令が、データをシャッフルすなわち並べ替えるための広範な制御を用いる、２ソースオペランドの完全シャッフルすなわち並べ替え命令のような高度にフレキシブルな命令でなくてもよい。こうした専用または暗黙の機能を使うことで、フレキシブルな命令と併用されるように広範で明示的制御（例えば明示的制御フィールド）を生成および使用する必要を回避する一助となり得る。
【００３０】
図４は、ビット群インターリーブ命令の一実施形態に応じて偶数位置のビット群を交互に配置するよう実行可能なビット群インターリーブ処理３３４の一実施形態を示すブロック図である。図４の処理は、図３の処理と類似する部分がある。説明の混乱を避けるため、図３の処理に対して任意に類似または共通となる特徴および詳細をすべて繰り返さず、それとは異なるおよび／または図４の処理に追加された特徴を主に説明する。ただし、奇数位置のビット群の代わりに偶数位置のビット群を交互配置することに関連する特徴および詳細を除き、図３の処理に関する上述の特徴および詳細は、特に指示がないか明白でない限り、図４の処理にも適宜適用可能であることを理解されたい。上述のように、この命令は、対応する複数のビット群（例えば、Ｇ１〜Ｇ４およびＧ５〜Ｇ８）をそれぞれ含む第１の複数のパックデータ要素Ａ１〜ＡＮを有する第１のソースパックデータオペランド４１０を指定または示すことができ、この命令はまた、対応する複数のビット群（例えば、Ｈ１〜Ｈ４およびＨ５〜Ｈ８）をそれぞれ含んで対応する第２の複数のパックデータ要素Ｂ１〜ＢＮを有する第２のソースパックデータオペランド４１４を指定または示すことができる。第１のソースパックデータオペランドが含むデータ要素それぞれを、対応する相対位置（例えば、オペランド内の対応ビット位置）にある第２のソースパックデータオペランドの別々のデータ要素と対応させることができる。第１のソースパックデータオペランド４１０のデータ要素それぞれが含む各ビット群は、第２のソースパックデータオペランド４１４の対応するデータ要素において対応する相対位置（例えば、対応ビット位置）にある別々のビット群に対応させることができる。第１のソースパックデータオペランドおよび第２のソースパックデータオペランド、それらのデータ要素およびそれらのビット群は、図３のものと同一または同様であってもよく、かつ同一のバリエーションおよび代替を持つことができる。幾つかの実施形態によっては、各ビット群が、１ビット、２ビット、４ビット、８ビット、１６ビットまたは３２ビットを有し、データ要素それぞれが、少なくともその２倍かそれ以上のビット数を有してもよい。
【００３１】
結果パックデータオペランド４１８を、ビット群インターリーブ命令／処理に応じて（例えば、実行ユニット１０６により）生成し、宛先記憶位置に記憶することができる。この宛先記憶位置は、この命令が指定または示すことができる。様々な実施形態によっては、この宛先記憶位置は、パックデータレジスタ、メモリ位置または他の記憶位置でよい。この結果パックデータオペランドは、複数のパックデータ要素Ｃ１〜ＣＮを含み、この要素Ｃ１〜ＣＮはそれぞれ、Ａ１〜ＡＮおよび／またはＢ１〜ＢＮのいずれか１つに対応する。この結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、これに１つおきに対応する第２のソースパックデータオペランドのビット群と交互に並べて含むことができる。図示の通り、幾つかの実施形態によっては、この結果パックデータオペランドは、第１のソースパックデータオペランドの偶数位置のビット群のみを、第２のソースパックデータオペランドの対応偶数位置のビット群のみと交互に並べて含んでもよい。最も近い偶数位置のビット群の各対を、１つの介在する／中間の奇数位置ビット群に隔てられた不連続のビット群としてもよい。図示の結果パックデータオペランドは、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのすべて偶数位置のビット群のみ（例えば、Ｇ２、Ｈ２、Ｇ４、Ｈ４、Ｇ６、Ｈ６、Ｇ８およびＨ８）を有し、同じ第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの奇数位置のビット群（例えば、Ｇ１、Ｈ１、Ｇ３、Ｈ３、Ｇ５、Ｈ５、Ｇ７およびＨ７のすべて）をいずれも有していない。図示の結果パックデータオペランドは、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのビット群の半分しか含んでいない。この結果オペランドに含まれる偶数位置のビット群は、第１のソースパックデータオペランドおよび第２のソースパックデータオペランド長のほぼ全体に渡っている（例えば、これらのオペランドの最下位または最上位の半分に含まれているのではない）。また、図４では、結果オペランドの最下位のビット群（Ｈ２）を第２のソースオペランド４１４から取っているが、図３では、結果オペランドの最下位のビット群（Ｇ１）を第１のソースオペランド３１０から取っていることに留意されたい。幾つかの実施形態によっては、偶数と奇数の間で交換することが可能であるだけでなく、ソースオペランドの最下位のビット群を取ったソースオペランドから交換することも可能である。
【００３２】
図５は、ビット群インターリーブ命令の一実施形態に好適な即値５５０の例示的な一実施形態を示すブロック図である。図示の即値は、８ビット即値（ｉｍｍ８）である。図示の即値では、ビット５〜０が、ソースパックデータオペランドのビット群のサイズを指定または示すビット群サイズ表示フィールドおよび／または１組のビット群サイズ表示ビットである。幾つかの実施形態によっては、このフィールドまたはビットを用いて、ビット群のビットのサイズを明示的に指定する（例えば、２ビットサイズのビット群に２の値を指定する、４ビットサイズのビット群に４の値を指定する）ことができる。実施形態によっては、このフィールドまたはビットを用いて、複数の異なるサイズから選択するための任意のコードまたは任意の数字を提供することができる（例えば、１つのビットが、２ビットサイズのビット群を選択するために二進法の０の値を、または４ビットサイズのビット群を選択するために二進法の１の値を有することができる）。幾つかの実施形態によっては、このフィールドまたはビットを用いて、１ビット、２ビット、４ビット、８ビット、１６ビット、３２ビットサイズのビット群のうちのいずれか１つを示すことができる。ただし、本発明の範囲はこれに制限されるものではない。これらの各値により、ビット群に関する様々な粒度を示すことができる。
【００３３】
図示の即値では、ビット６を使用して、結果オペランドの最下位のビット群を提供するため、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのうちの一方を指定または示す。これにより、結果パックデータオペランドが、最下位のビット群として、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのうちの一方の最下位のビット群を有するのか、または第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの他方（すなわち、別の方）の最下位から２番目のビット群を有するのかを示すことができる。
【００３４】
図示の即値では、ビット７は、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの対応偶数位置のビット群または対応奇数位置のビット群のどちらが結果パックデータオペランドに含まれるのかを指定または示す、偶数または奇数（偶数奇数）表示フィールドおよび／または１組の１つ以上の偶数奇数表示ビットである。一実施形態では、１つのビットに第１の値（たとえば、利用可能な規定の１つにしたがって、二進数の１に設定）を持たせて、ソースオペランドから対応偶数位置ビット群が結果オペランドに記憶されることを示す、または、その１つのビットに第２の別の値（たとえば二進数の０に戻す）を持たせて、ソースオペランドからの対応奇数位置ビット群が結果オペランドに記憶されることを示すことができる。
【００３５】
これは、単に好適な即値の一例であることが理解されよう。実施形態によっては、これよりも長い即値（例えば、１６ビット、３２ビット）または短いビット（例えば、４ビット、６ビット）のいずれかを、８ビット即値の代わりに必要に応じて使用することができる。実施形態によっては、さらに長いフィールド、短いフィールドまたは複数組のビットのいずれかを用いて、ビット群サイズおよび／または偶数奇数表示を指定または示してもよい。さらに、この複数のフィールドまたは複数組のビットを必要に応じて様々に再配置してもよく、そこに連続したビットを含めなくてもよい。
【００３６】
図６は、マスク付ビット群インターリーブ処理６３４の一実施形態に応じて、パックデータ演算マスク６６０を施した偶数位置のビット群を交互配置するよう実行可能なマスク付ビット群インターリーブ処理６３４の一実施形態を示すブロック図である。図６のマスク付け処理は、図３のマスクなし処理と類似する部分がある。説明の混乱を避けるため、図３のマスク付なし処理と任意に類似または共通の特徴および詳細をすべて繰り返さず、異なるおよび／または図６に追加された特徴を主に説明する。しかし、図３のマスク付なし処理に関する上述の特徴および詳細は、特に指示がないか明白でない限り、図６のマスク付なし処理にも適宜適用可能であることを理解されたい。
【００３７】
このマスク付ビット群インターリーブ命令は、第１のソースパックデータオペランドの６１０および第２のソースパックデータオペランド６１４を指定または示すことができる。上記で説明した図４の処理と同様、この第１のソースパックデータオペランドは、複数のビット群をそれぞれ有する第１の複数のデータ要素を持つことができ、この第２のソースパックデータオペランドは、複数のビット群をそれぞれ有する第２の複数のデータ要素を持つことができる。この第１の複数のデータ要素のデータ要素はそれぞれ、対応位置にある第２の複数のデータ要素の別々のデータ要素と対応可能である。この第１の複数のデータ要素の各データ要素のビット群はそれぞれ、第２の複数の対応データ要素において対応位置にある別々のビット群に対応可能である。第１のソースパックデータオペランドおよび第２のソースパックデータオペランド、それらのデータ要素およびそれらのビット群は、図３のものと同一または同様であってもよく、かつ同一のバリエーションおよび代替を有してもよい。
【００３８】
また、マスク付ビット群インターリーブ命令は、ソースパックデータ演算マスク６６０を指定（例えば、明示的に指定する）または示すこともできる（例えば、非明示的に示す）。また、このパックデータ演算マスクを、本明細書では、単に演算マスク、プレディケートマスクまたはマスクと呼ぶ場合がある。このマスクは、対応する処理が実行されるかどうか、および／または対応結果が記憶されるかどうかに関わらず、プレディケート、条件付き制御、またはマスクに使用されるプレディケートオペランドあるいは条件付きの制御オペランドとすることができる。幾つかの実施形態によっては、複数の対応データ要素対に対する処理が、他とは別々におよび／または独立してプレディケートまたは条件的に制御されるように、このマスキングまたはプレディケーションをデータ要素毎の粒度とすることができる。このマスクは、マスク要素、プレディケート要素、または条件的制御要素をそれぞれ複数含むことができる。一態様では、この複数のマスク要素を、第１のソースパックデータオペランドおよび第２のソースパックデータオペランド（例えば、Ａ１およびＢ１に対応するマスク要素）が含むソースデータ要素の対応対および／または対応結果データ要素と１対１の対応関係で含むことができる。このマスクは、第１のソースパックデータオペランドの各データ要素（例えば、データ要素Ａ１用の１番目のマスク要素からデータ要素ＡＮ用のＮ番目のマスク要素）および／または各結果データ要素に対するマスク要素を持つことができる。ただし、こうした実施形態では、複数のビット群が、同じマスク要素に対応可能であり、かつ／または、ソースパックデータ演算マスクにあるマスク要素の何倍ものビット群が各ソースオペランドにあり得ることに留意されたい。図示の通り、幾つかの実施形態によっては、マスク要素それぞれが、単一マスクビットであってもよい。
【００３９】
あるいは、２つ以上のビットを必要に応じてマスク要素それぞれに使用することができる（例えば、各マスク要素が、それぞれの対応するソースデータ要素と同じビット数であってもよく、これらのビットがすべて同じ値を有していても、あるいはこのうちの１つのビットをマスクビットとして使用してもよい）。他のビット数も可能である。マスクビットそれぞれの値は、対応する処理を実行するかどうか、および／または対応結果データ要素を記憶するかどうかを制御することができる。各マスク要素またはビットに第１の値をもたせて、処理の実行および対応結果データ要素の宛先への記憶を可能にする、または、第２の別の値を持たせて、処理の実行および／または対応結果データ要素の宛先への記憶をできないようにすることができる。１つの利用可能な規定により、例示のように、バイナリ０に戻されたマスクビット（すなわち０）を、処理を実行する必要がない、かつ／またはその対応結果データ要素を記憶する必要がないマスクアウト処理を表すものとし、バイナリ１に設定されるマスクビット（すなわち１）を、対応結果データ要素が記憶されるマスクなし処理を表すものとすることができる。その逆の規定も利用可能である。
【００４０】
マスク付ビット群インターリーブ処理６３４の上記実施形態を、マスク付ビット群インターリーブ命令の上記実施形態に応じて、かつ／またはその結果として実行することができる（例えば、実行ユニット１０６により）。このマスク付処理を、ソースパックデータ演算マスク６６０のマスキング、プレディケーション、または条件制御を施すことにより実行することができる。上述の通り、結果パックデータオペランド６１８を、マスク付ビット群インターリーブ命令に応じて、（例えば、実行ユニット１０６により）生成し、宛先記憶位置に記憶することができる。この結果パックデータオペランドは、複数の結果データ要素Ｃ１〜ＣＮを含むことができる。この要素Ｃ１〜ＣＮはそれぞれ、同じ相対位置にある別のソースデータ要素対に対応する（例えばＣ１はＡ１およびＢ１に対応可能）。幾つかの実施形態によっては、マスクなしマスク要素に対応する結果データ要素が、ソースデータ要素の対応対に実行されるビット群インターリーブ処理により変化する値を備えることができる。これに対して、マスクアウトマスク要素に対応する結果データ要素は、ソースデータ要素の対応対に実行される演算に依存しない値を備えることができる。むしろ、これらの結果のデータ要素は、固定値または所定値を備えることができる。例えば、対応処理を実行する必要はない、または対応処理を実行する場合でも、その対応結果を、宛先に記憶する必要はない。それよりも、固定値または所定値を対応する結果データ要素に記憶することができる。
【００４１】
図示の例では、これは一例にすぎないが、第１のマスク要素６６２をマスクマスクなしとし（例えば、バイナリ１の値を有する）、Ｎ番目のマスク要素６６４をマスクする（例えばバイナリ０の値を有する）。結果として、データ要素Ｃ１を、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドから交互配置された対応奇数位置のビット群を含む結果のパックデータオペランドに記憶することができる。これに対して、データ要素ＣＮは、マスクアウトしたマスク要素に対応し、マスクされた値６６８を記憶できる。このマスクされた値は、固定または所定の値とすることができる。特定のマスクされた固定値または所定値は、特定の実装に使用されるマスキングの種類より変更可能である。幾つかの実施形態によっては、ゼロイングマスキング（ｚｅｒｏｉｎｇ  ｍａｓｋｉｎｇ）を使用できる。ゼロイングマスキングでは、マスクアウトした結果データ要素（例えば、ＣＮ）をゼロ設定できる（例えば、強制的にゼロ値を持たせる）。他の実施形態では、マージマスキング（ｍｅｒｇｉｎｇ  ｍａｓｋｉｎｇ）を使用することができる。マージマスキングでは、マスクアウトした結果データ要素が、対応するソースデータ要素のうちの１つの値を持つことができる（例えば、対応するソースデータ要素をマスクアウトした結果データ要素へ通過させることができる）。例えば、ＣＮはマージマスキングでＡＮかＢＮどちらかの値を記憶することができる。
【００４２】
図示の実施形態は、パックデータ演算マスク６６０を施して偶数位置のビット群を交互配置するよう実行可能なマスク付ビット群インターリーブ処理６３４を示す。別の実施形態は、パックデータ演算マスクを施して奇数位置のビット群を交互配置するよう実行可能なマスクビット群インターリーブ処理に関連する（例えば、マスキングを図３に示すものと同様または同一の実施形態と適宜組み合わせることができる）。
【００４３】
図７は、データ要素ブロードキャスト命令を含むビット群インターリーブの一実施形態に応じてビット群インターリーブ処理７３４と必要に応じて組み合わせ可能なデータ要素ブロードキャスト処理７７０の実施形態を示すブロック図である。幾つかの実施形態によっては、この命令が１組の１つ以上のビットまたはブロードキャスト表示フィールドを適宜有して、データ要素のブロードキャスト送信が実行されることを示すことができる。この他の実施形態では、データ要素ブロードキャスト処理に、必要に応じてこの命令に対して暗黙にしてもよい（例えば、オペコードに対して暗黙）。この命令は、ブロードキャストまたは複製される単一データ要素（例えば、データ要素Ｂ１）を備えるソースオペランド７７２を示すことができる。このソースオペランドは、複数のデータ要素を有するパックデータオペランドと対照的に、単一データ要素のみを有するスカラオペランドであってもよい。幾つかの実施形態によっては、この単一データ要素（例えば、Ｂ１）を、メモリ位置７７３（例えば、メインメモリに）に記憶してもよいが、必須ではない。こうした実施形態では、単一データ要素には、（たとえば、ロード、または命令から復号または導出される他のメモリアクセス動作を介して）まずメモリ位置からアクセスできる。その後、この単一データ要素を、複数回、ブロードキャスト送信または複製して７７６、この単一データ要素の複数の複写（例えば、Ｂ１−１〜Ｂ１−Ｎ）を生成することができる。幾つかの実施形態によっては、データ要素Ｂ１の別の複製または複写を、命令が示す他のソースパックデータオペランド（例えば、データ要素Ａ１〜ＡＮを有する第１のソースパックデータオペランド３１０）のデータ要素それぞれについて生成することができる。この例示では、データ要素の複数の複製または複写を、一時的ソースパックデータオペランド７７４内に一緒に示されている。この一時的ソースパックデータオペランドは破線で示して、幾つかの実施形態によっては、単一データ要素の複数の複製すなわち複写を一時レジスタまたは他の非アーキテクチャ記憶位置に一緒に記憶できることを示しているが、他の実施形態では、データ要素の複数の複製すなわち複写は、実際にはレジスタにも記憶位置にも一緒に記憶できず、単に実行ユニットに提供することだけができる場合がある。ブロードキャストまたは複製した複数のデータ要素（例えば、一時ソースパックデータオペランド）を、ビット群インターリーブ処理７３４に提供することができるが、この処理７３４は本明細書の他の個所で説明するビット群インターリーブ処理のいずれであってもよい。上述のソースパックデータオペランドについて説明してきたように、ビット群インターリーブ処理を実質的にブロードキャストデータ要素または複製データ要素に実行することができる。有利なことに、ビット群インターリーブ処理をデータ要素ブロードキャスト処理に組み入れることにより、複数のベクトル、パックデータまたはＳＩＭＤ演算インターリーブビット群それぞれに対して同じ単一データ要素または値の使用が望まれる様々な用途の効率を高める一助となり得る。
【００４４】
いくつかの概要をさらに例示するために、ＶＰＲＥＶＣＲＯＳＳＱと名付けられたビット群インターリーブ命令に関する以下の詳細な例示的実施形態を考える。表１に、この命令の幾つかの実施形態について、オペコード、符号化、および動作記述を列記する。
【表１】
0006508850.tif 000002
ＥＶＥＸは、本明細書の他の個所で説明するようにＥＶＥＸによる符号化を指す。Ｘｍｍ＊は１２８ビット、ｙｍｍ＊は２５６ビット、ｚｍｍ＊は５１２ビットのパックデータレジスタを表す。｛ｋ１｝オペランドは、ソースパックデータ演算マスクまたはプレディケーションマスクとして使用されるマスクレジスタ（例えば、マスクレジスタｋ０〜ｋ７のうちの１つ）を指定する。｛ｚ｝は、マスキングの種類（例えば、マージマスキングまたはゼロイングマスキング）を示す。ｍ６４ｂｃｓｔは、メモリからソースベクトルの複数の要素までの６４ビットデータ要素のブロードキャストを示す。
【００４５】
表２は、命令オペランドの符号化を列記したものである。ＭｏｄＲＭは、レジスタ（ｒｅｇ）、またはレジスタもしくはメモリ（ｒ／ｍ）を可能にする。（ｒ）は、読み出しを表し、（ｗ）は、書き込みを示す。
【表２】
0006508850.tif 000003
【００４６】
ＶＰＲＥＶＣＲＯＳＳＱ命令は、第２のソースからの要素内でグループ化したビットの交換または逆転を実行し、交互にビット群を選択することにより、第１のソースと組み合わせる。この即値は演算を制御する。ｉｍｍ８［５：０］は、ビット群の長さを制御し、ｉｍｍ８［７］は、２つのオペランドについて交差パターンの順序を制御する。ｉｍｍ８［６］は、現在は使われていない。ビット群は対になって、２ビットの累乗グループサイズで１〜３２サイズのビットのブロック（例えば、１ビット、２ビット、４ビット、８ビット、１６ビット、３２ビット）を形成することにより、グループすべてに対を設ける。各グループは、隣グループと対になり、その内部オペランドを交換する（入れ替える）。第１のソースオペランドはベクトルレジスタである。第２のオペランドはベクトルレジスタまたはメモリ位置である。この宛先オペランドはベクトルレジスタである。
【００４７】
ＶＰＲＥＶＣＲＯＳＳＱ命令の一実施形態に関する疑似コードの例を以下に示す。ＳＲＣ１は、第１のソースパックデータオペランドを意味し、ＳＲＣ２は、第２のソースパックデータオペランドを意味し、ＤＥＳＴは宛先を意味する。ＴＳＲＣ２は、一時レジスタを意味する。Ｑｗｏｒｄは、６４ビットのクワッドワードを意味する。ｋ１オペランドは、パックデータ演算マスクまたはプレディケーションマスクを意味する。この疑似コードでは、「ｊ」はオペランド内のクワッドワードの位置カウンタを意味し、ＫＬは、マスク長および／またはパックデータオペランド内のデータ要素位置の数を表し、ＶＬは、ベクトルまたはパックデータオペランド長を意味する。ＥＶＥＸ．ｂ＝＝１は、ＳＲＣ２がメモリのとき、埋め込みブロードキャストを構成する。パラメータ「ｈ」は、そのグループ長である。様々なパラメータを、１６進法（例えば、０ｘ５５５５５５５５５５５５５５５５ＵＬ）で示し、マイクロアーキテクチャマスクを表す。記号「｜」は、論理和を表し、記号「＆」は、論理積を表し、「＜＜２」は、２ビット左シフトを表し、「＞＞４」は、４ビット右シフトを表す。この疑似コードは、任意のビット群交換動作を反映するものではなく、こうしたビット群の交換処理を組み入れる別の実施態様が想定される。
VPREVCROSSQ DEST, SRCl, SRC2, IMM8 (EVEX 復号化バージョン)
【数１】
0006508850.tif 000004
【数２】
0006508850.tif 000005
【００４８】
これらは、好適な命令の実施形態のほんの数例にすぎないことが理解されよう。他の実施形態によっては、使用するグループサイズを上下させることができる。一代替実施形態では、図示したグループサイズのサブセットか、１つの１ビット、２ビット、４ビット、８ビット、１６ビットまたは３２ビットのグループサイズから選択した１つのグループサイズかのいずれかを使用できる。他の実施形態では、交互のパターンに対して固定された手法（例えば、ｉｍｍ８［７］ではなく）を使用することができる。実施形態によっては、より狭い（例えば、６４ビット）か、より広い（例えば、１０２４ビット）か、または別のサイズのパックデータオペランドを使用することができる。代替実施形態では、他の記憶位置（例えば、メモリ位置）をオペランド用に使用することができる。他の実施形態では、必要に応じてマスキング／プレディケーションを省くことができる。実施形態によっては必要に応じてデータ要素ブロードキャストを省くことができる。
【００４９】
図８は、ビット群インターリーブ命令８０２の一実施形態を示すブロック図である。この命令は、処理コードすなわちオペコード８８０を含むフォーマットである。このオペコードは、その命令および／または実行すべき処理（例えば、ビット群インターリーブ処理）を識別するよう動作可能な複数のビットまたは１つ以上のフィールドでよい。
【００５０】
この命令フォーマットは、第１のソースオペランドの記憶に使用するレジスタ、メモリ位置または他の記憶位置を明示的に指定するための第１のソースオペランド指定子８８１、第２のソースオペランドの記憶に使用するレジスタまたは他の記憶位置を明示的に指定するための第２のソースオペランド指定子８８２、および結果オペランドを記憶する宛先として使用するレジスタまたは他の記憶位置を明示的に指定するための宛先指定子８８３を含む。例えば、これらの指定子のそれぞれは、１組のビットまたは１つ以上のフィールドを含んで、レジスタ、メモリ位置、または他の記憶位置のアドレスを明示的に指定することができる。あるいは、これらの各記憶位置に対して明示的な指定子を備える命令の代わりに、この命令は、１つ以上のソースオペランドとその結果オペランドについて、１つ以上の暗黙の記憶位置（例えば、命令のオペコードに対して暗黙のレジスタ）を適宜備えることができる。例えば、ソースオペランドまたは結果オペランドに所定の固定レジスタを使用することを命令オペコードに暗黙にして、所定の固定レジスタを明示的に指定しなくてもよいようにできる。他の例として、ソースオペランド、続いてその結果オペランドに（例えば、暗黙のソース／宛先レジスタ）にレジスタまたは他の記憶位置（例えば、一度明示的に指定されたもの）を再使用することを暗黙にしてもよい。
【００５１】
幾つかの実施形態によっては、命令フォーマットが、任意のパックデータ演算マスク指定子８８４を含むことで、パックデータ演算マスク（例えば、パックデータ演算マスクレジスタ）を明示的に指定することができる。あるいは、このパックデータ演算マスクを示すことができる。幾つかの実施形態によっては、このパックデータ演算マスクレジスタが、ソースオペランドおよび結果オペランド（例えば、専用マスクセットまたはプレディケーションレジスタセット）に使用されるものとは別の１組のレジスタのうちの１つであってもよい。幾つかの実施形態によっては、この命令フォーマットが、また、任意の種類のマスキング処理指定子８８５を含むことで、マスキング処理の種類を指定することができる。例えば、この種のマスキング動作指定子は、マージマスキングを実行するのかゼロイングマスキングを実行するのかを指定する単一ビットを含むことができる。あるいは、マスキング処理の種類を示すことができる（例えば、暗黙の制御レジスタで、命令のオペコードに対して暗黙にする）。マスキングは、任意であり必須ではない。
【００５２】
データ要素ブロードキャストを使用する実施形態では、命令が、この命令に適宜、データ要素ブロードキャスト制御８８６を備えることができる。データ要素ブロードキャスト制御は、１つ以上のビットまたはフィールドを備えることで、命令／処理により使用される複数のソースデータ要素（例えば一時レジスタ内）に対し、記憶位置（例えば、メモリ位置）からアクセスされる単一ソースデータ要素をブロードキャスト送信するためにデータ要素ブロードキャストが実行されることを示すことができる。あるいは、データ要素ブロードキャストを、明示的に指定できる状態ではなく、命令に暗黙（例えば、オペコードに暗黙）にすることができる。上述の通り、データ要素ブロードキャストは、任意であり必須ではない。
【００５３】
ただしこれは好適なビット群インターリーブ命令の一例にすぎないあることが理解されよう。代替実施形態によっては、例示のフィールド／指定子のサブセットを含む、更なるフィールド／指定子を追加する、特定のフィールド／指定子を重ねることなどができる。さらに、このフィールド／指定子は例示通りの順序および配置である必要はない。フィールド／指定子は、様々に再配置することができる。さらに、フィールド／指定子は、連続ビット配列を含む必要はなく、むしろ、不連続または離れたビットを含んでもよい。幾つかの実施形態によっては、この命令フォーマットは、ＶＥＸ符号化、ＥＶＥＸ符号化、または命令フォーマットを有することができる。ただし、本発明の範囲はこれに限定されるものではない。ＶＥＸおよびＥＶＥＸの符号化およびフォーマットについては、下記で詳述する。
【００５４】
本明細書で開示するビット群インターリーブ命令は、汎用命令であり、多様な、および／または一般的な目的に使用することができる。幾つかの実施形態によっては、ビット群インターリーブ命令を、例えば定位置のビットの転置を使用して、行列転置（例えば、６４ビット×６４ビット行列を変換すること）に任意に使用することができる。典型的には、この転置をブロック転置により実施することができる。複数のブロック転置工程を順次それぞれの工程を異なるサイズのビット群で実行することができる（例えば、最初に１６ビット群、次いで８ビット群、その後４ビット群）。幾つかの実施形態によっては、２つ以上の６４ビット×６４ビット行列の２列以上からのビット群（例えば、全て同じソースパックデータオペランドに含まれる、第１の行列の列０、第２の行列の列０、任意で第３の行列の列０、任意で第４の行列の列０）を含むソースパックデータオペランドを、ビット群インターリーブ命令が示す、かつ／またはビット群インターリーブ命令をそのオペランドへの処理に使用することができる。他の実施形態によっては、１つの６４ビット×６４ビット行列の２列以上からのビット群（例えば、全て同じソースパックデータオペランドに含まれる、第１の行列の列０、第１の行列の列１、任意で第１の行列の列２、任意で第１の行列の列３）を含むソースパックデータオペランドを、ビット群インターリーブ命令が示す、かつ／またはビット群インターリーブ命令をそのオペランドへの処理に使用することができる。あるいは、このビット群インターリーブ命令を、例えば、一般的なビット反転処理および／またはグループ化した２の累乗型のビットを反転することなどの他の目的に必要に応じて使用することができる。これらは、ほんの一例にすぎない。
【００５５】
図９は、１組の好適なパックデータレジスタ９０８の例示的な一実施形態を示すブロック図である。このパックデータレジスタは、ＺＭＭ０〜ＺＭＭ３１のラベルを付けた３２個の５１２ビットのパックデータレジスタを含む。図示の実施形態では、低位１６個のレジスタ、すなわちＺＭＭ０〜ＺＭＭ１５の下位２５６ビットがエイリアスされるか、またはＹＭＭ０〜ＹＭＭ１５のラベルを付けた２５６ビットパックデータレジスタそれぞれに重ね合わせられる。ただし、これは必須ではない。同様に、図示の実施形態では、レジスタＹＭＭ０〜ＹＭＭ１５の下位１２８ビットがエイリアスされるか、ＸＭＭ０〜ＸＭＭ１５のラベルを付けた１２８ビットパックデータレジスタそれぞれに重ね合わせられるが、これも必須ではない。５１２ビットのレジスタＺＭＭ０〜ＺＭＭ３１は、５１２ビットのパックデータ、２５６ビットのパックデータまたは１２８ビットのパックデータを保持するよう動作可能である。２５６ビットのレジスタＹＭＭ０〜ＹＭＭ１５は、２５６ビットのパックデータまたは１２８ビットのパックデータを保持するよう動作可能である。１２８ビットのレジスタＸＭＭ０〜ＸＭＭ１５は、１２８ビットのパックデータを保持するよう動作可能である。幾つかの実施形態によっては、レジスタそれぞれをパック浮動小数点データまたはパック整数データのどちらかの記憶に使用可能である。少なくとも８ビットバイトデータ、１６ビットワードデータ、３２ビットダブルワード、３２ビット単精度浮動小数点データ、６４ビットクワッドワードおよび６４ビット倍精度浮動小数点データを含む種々のデータ要素のサイズがサポートされる。代替の実施形態によっては、異なる数のレジスタおよび／または異なるサイズのレジスタを使用することができる。さらに別の実施形態によっては、レジスタは小さいレジスタに対してそれより大きいレジスタのエイリアシングを使用してもしなくてもよく、かつ／またはレジスタを浮動小数点データの記憶に使用してもしなくてもよい。
【００５６】
図１０は、１組の好適なパックデータ演算マスクレジスタ１０２４の例示的な一実施形態を示すブロック図である。図示の実施形態では、この組は、ｋ０〜ｋ７のラベルを付けた８個のレジスタを備える。代替の実施形態によっては、８個よりレジスタが少なくても（例えば、２個、４個、６個など）、８個より多くてもよい（例えば、１６個、３２個など）。これらのレジスタそれぞれをパックデータ演算マスクの記憶に使用することができる。図示の実施形態では、レジスタのそれぞれが６４ビットである。代替の実施形態によっては、このレジスタの幅を６４ビットより広くしても（例えば、８０ビット、１２８ビットなど）、６４ビットより狭くしてもよい（例えば、８ビット、１６ビット、３２ビットなど）。これらのレジスタは、既知の技術を用いて様々な方法で実装することができるものであり、既知の特定の種類の回路に限定されるものではない。適切な種類のレジスタの例として、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた物理レジスタ、およびこの組み合わせが挙げられるが、これに限定されない。
【００５７】
幾つかの実施形態によっては、このパックデータ演算マスクレジスタ１０２４が１組の独立した専用のアーキテクチャレジスタであってもよい。幾つかの実施形態によっては、これらの命令は、他の種のレジスタ（例えば、パックデータレジスタ）の符号化や指定に使用されるものとは異なる、命令フォーマットの複数ビットまたは１つ以上のフィールドのパックデータ演算マスクレジスタを符号化または指定することができる。例えば、ある命令は、３個のビット（例えば、３ビットフィールド）を使用して、８個のパックデータ演算マスクレジスタｋ０〜ｋ７のいずれか１つを符号化または指定できる。代替の実施形態によっては、パックデータ演算マスクレジスタの数が上下するときは、それに対応して増減した数のビットを使用することも可能である。１つの具体的な実装では、パックデータ演算マスクレジスタｋ１〜ｋ７のみ（ｋ０は含まず）をプレディケートオペランドとしてアドレス指定して、マスク付パックデータ処理をプレディケートすることができる。レジスタｋ０を、通常のソースまたは宛先として使用してもよいが、プレディケートオペランドとして符号化しなくともよい（例えば、ｋ０を指定する場合、「マスクなし」（ｎｏ  ｍａｓｋ）符号になる）。ただし、これは必須ではない。
【００５８】
１つの命令のセットは、１つ以上の命令フォーマットを備える。１つの命令フォーマットが与えられると、これにより様々なフィールド（ビット数、ビット位置）が規定され、これにより特に、実行すべき演算（オペコード）とその演算を実行するオペランド（単数または複数）が指定される。命令フォーマットのなかには、命令テンプレート（またはサブフォーマット）の規定を介してさらに分解されるものがある。例えば、ある命令フォーマットが含む複数の命令テンプレートを、その命令フォーマットのフィールドの別々のサブセット（含まれるフィールドは一般に同一順であるが、含まれるフィールドの数が少ないために少なくとも一部ではビット位置が異なる）を持つように、かつ／または別の解釈をされる１つの所定フィールドを持つように規定することもある。このように、ＩＳＡ（命令セットアーキテクチャ）の命令それぞれは、所定の命令フォーマットを用いて（また、規定されていれば、その命令フォーマットが含む複数の命令テンプレートの１つに）表され、演算およびそのオペランドを指定するフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、そのオペコードを指定するオペコードフィールドと、オペランド（ソース１／宛先およびソース２）を選択するオペランドフィールドとを含む命令フォーマットとを有する。そして、命令ストリームにこのＡＤＤ命令が発生すると、特定のオペランドを選択するオペランドフィールドに特定のコンテンツが入る。Ａｄｖａｎｖｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎ  （ＡＶＸ）（ＡＶＸ１  ａｎｄ  ＡＶＸ２）と呼ばれ、Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＶＥＸ）符号化方式を使用するＳＩＭＤ拡張命令セットが、これまですでに存在しており、リリースおよび／または公開されている（例えば、２０１１年１０月のＩｎｔｅｌ（商標登録）６４およびＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｐｅｒｓ  Ｍａｎｕａｌおよび２０１１年６月のＩｎｔｅｌ（商標登録）Ａｄｖａｎｖｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ参照）。
【００５９】
例示的命令フォーマット
本明細書に記載するこの命令（単数または複数）の実施形態を様々なフォーマットで実現することができる。さらに、例示的なシステム、アーキテクチャおよびパイプラインを以下に詳述する。本明細書による命令（単数または複数）の実施形態はこうしたシステム、アーキテクチャおよびパイプラインで実行可能であるが、これらの例に限定されるものではない。
【００６０】
ＶＥＸ命令フォーマット
ＶＥＸ符号化方式により、命令に２つ以上のオペランドを持たせ、ＳＩＭＤベクトルレジスタを１２８ビットより長くすることが可能になる。ＶＥＸプリフィックスを使用することにより３オペランド（または４以上）シンタックスを提供できる。例えば、以前の２オペランド命令では、ソースオペランドを上書きするＡ＝Ａ＋Ｂなどの演算を実行していた。ＶＥＸプリフィックスを使用すると、オペランドにＡ＝Ｂ＋Ｃなどの非破壊的演算の実行が可能となる。
【００６１】
図１１Ａは、ＶＥＸプリフィックス１１０２、実オペコードフィールド１１３０、Ｍｏｄ  Ｍ／Ｒバイト１１４０、ＳＩＢバイト１１５０、変位フィールド１１６２およびＩＭＭ８  １１７２を備える例示的なＡＶＸ命令フォーマットを示す。図１１Ｂは、図１１Ａのどのフィールドが、オペコードフィールド全体１１７４およびベース演算フィールド１１４２を構成するかを示す。図１１Ｃは、図１１Ａのどのフィールドが、レジスタインデックスフィールド１１４４を構成するかを示す。
【００６２】
ＶＥＸプリフィックス（バイト０〜２）１１０２は３バイト形式で符号化される。第１のバイトは、フォーマットフィールド１１４０（ＶＥＸバイト０、ビット［７：０］）であり、明示的Ｃ４バイト値（Ｃ４命令フォーマットを区別するために使用される固有値）を持つ。第２および第３のバイト（ＶＥＸバイト１〜２）は、特定の機能を提供する複数のビットフィールドを備える。具体的には、ＲＥＸフィールド１１０５（ＶＥＸバイト１、ビット［７−５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）およびＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）からなる。この命令の他のフィールドは、同業者に既知であるように、レジスタインデックスの下位３ビット（RRR、XXX、およびBBB）を符号化し、これにＶＥＸ．Ｒ、ＶＥＸ．ＸおよびＶＥＸ．Ｂを加えて、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂを形成できるようにする。オペコードマップフィールド１１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙の先頭オペコードバイトを符号化するコンテンツを備える。Ｗフィールド１１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は表記ＶＥＸ．Ｗで表され、この命令に応じて異なる機能を提供する。ＶＥＸ．ｖｖｖｖ１１２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割として、以下を挙げることができる。１）反転した形式（１の補数）で指定される第１のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効である、２）所定のベクトルシフト用に１の補数の形式で指定される宛先レジスタオペランドを符号化する、または３）いずれのオペランドも符号化しない。ただし、このフィールドは確保されて、１１１１ｂを含む。ＶＥＸ．Ｌ１１６８サイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０の場合、これは１２８ビットベクトルを示し、ＶＥＸ．Ｌ＝１の場合、２５６ビットベクトルを示す。プリフィックス符号化フィールド１１２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベース演算フィールドに追加のビットを提供する。
【００６３】
実オペコードフィールド１１３０（バイト３）もオペコードバイトとして知られている。オペコードの一部をこのフィールドで指定する。
【００６４】
ＭＯＤ  Ｒ／Ｍフィールド１１４０（バイト４）は、ＭＯＤフィールド１１４２（ビット［７−６］、Ｒｅｇフィールド１１４４（ビット［５ー３］）およびＲ／Ｍフィールド１１４６（ビット［２ー０］）を含む。Ｒｅｇフィールド１１４４の役割として、宛先レジスタオペランドまたはソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）のいずれかを符号化すること、またはオペコード拡張として扱われ、いずれの命令オペランドの符号化にも使用されないことを挙げられる。Ｒ／Ｍフィールド１１４６の役割として、メモリアドレスを参照する命令オペランドを符号化すること、または宛先レジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを挙げられる。
【００６５】
スケール、インデックス、ベース（ＳＩＢ）−スケールフィールド１１５０（バイト５）のコンテンツは、メモリアドレス生成に使用されるＳＳＩ１５２（ビット［７−６］）を含む。ＳＩＢ．ｘｘｘ１１５４（ビット［５ー３］）およびＳＩＢ．ｂｂｂ１１５６（ビット［２ー０］）のコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関連して既に述べた。
【００６６】
変位フィールド１１６２および即値フィールド（ＩＭＭ８）１１７２は、アドレスデータを含む。
【００６７】
汎用ベクトルフレンドリ命令フォーマット
ベクトルフレンドリ命令フォーマットは、ベクトル命令（例えば、ベクトル演算に特化した所定のフィールドがある）に好適な命令フォーマットである。ベクトル演算およびスカラ演算の両方を、ベクトルフレンドリ命令フォーマットを介してサポートする実施形態を説明するが、代替として、ベクトルフレンドリ命令フォーマットによりベクトル演算のみを用いる実施形態もある。
【００６８】
図１２Ａおよび図１２Ｂは、本発明の実施形態による汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを図示するブロック図である。図１２Ａは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを図示するブロック図であり、図１２Ｂは、本発明の実施形態による、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを図示するブロック図である。具体的には、汎用ベクトルフレンドリ命令フォーマット１２００について、クラスＡおよびクラスＢ命令テンプレートが規定され、その両方が非メモリアクセス１２０５の命令テンプレートおよびメモリアクセス１２２０の命令テンプレートを含む。ベクトルフレンドリ命令フォーマットについて用いる用語「汎用」は、いずれの特定の命令セットにも紐付けされない命令フォーマットを指す。
【００６９】
ベクトルフレンドリ命令フォーマットが、３２ビット（４バイト）または６４ビット（８バイト）データ要素幅（すなわちサイズ）を備える６４バイトベクトルオペランド長（すなわちサイズ）（したがって、１６ダブルワードサイズ要素または代わりに８クアッドワードサイズ要素からなる６４バイトベクトル）と、１６ビット（２バイト）または８ビット（１バイト）データ要素幅（すなわちサイズ）を備える６４バイトベクトルオペランド長（すなわちサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（すなわちサイズ）を備える３２バイトベクトルオペランド長（すなわちサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）データ要素幅（すなわちサイズ）を備える１６バイトベクトルオペランド長（すなわちサイズ）とをサポートする本発明の実施形態を説明していくが、別の実施形態では、上記値から上下したまたは別のデータ要素幅（例えば、１２８ビット（１６バイト）データ要素幅）を備えた、やはり上記値から上下したおよび／または別のベクトルオペランドサイズ（例えば、２５６バイトベクトルオペランド）のサポートも可能である。
【００７０】
図１２ＡのクラスＡ命令テンプレートは、１）非メモリアクセス１２０５の命令テンプレート内に示す、非メモリアクセス完全丸め制御型演算１２１０の命令テンプレート、および非メモリアクセスデータ変換型演算１２１５の命令テンプレートと、２）メモリアクセス１２２０命令テンプレート内に示す、メモリアクセス一時的１２２５の命令テンプレート、およびメモリアクセス非一時的１２３０の命令テンプレートとを含む。図１２ＢのクラスＢ命令テンプレートは、１）非メモリアクセス１２０５の命令テンプレート内に示す、非メモリアクセス書き込みマスク制御部分丸め制御型演算１２１２命令テンプレート、および非メモリアクセス書き込みマスク制御ｖｓｉｚｅ型演算１２１７の命令テンプレートと、２）メモリアクセス１２２０の命令テンプレート内に示す、メモリアクセス書き込みマスク制御１２２７の命令テンプレートとを含む。
【００７１】
汎用ベクトルフレンドリ命令フォーマット１２００は、図１２Ａ〜１２Ｂに図示する順序で以下に列記するフィールドを含む。
【００７２】
フォーマットフィールド１２４０−このフィールドの特定の値（命令フォーマット識別子値）は、ベクトルフレンドリ命令フォーマットを、そしてこれにより、命令ストリームにおけるベクトルフレンドリ命令フォーマット中の命令の発生を一意に識別する。したがって、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには必要ないという意味で任意である。
【００７３】
ベース演算フィールド１２４２−このコンテンツは、種々のベース演算を区別する。
【００７４】
レジスタインデックスフィールド１２４４−このコンテンツは、直接またはアドレス生成を介して、レジスタ内であれメモリ内であれ、ソースおよび宛先オペランドの位置を指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分なビット数を含む。一実施形態では、Ｎは３つ以下のソースと１つの宛先レジスタとすることができるが、代替実施形態によっては、サポートするソースおよび宛先レジスタの数は変更可能である（例えば、２つまでのソースをサポートして、これらのソースの１つを宛先としても機能させる、３つまでのソースをサポートして、これらのソースの１つが宛先としても機能してもよく、２つまでのソースと１つの宛先をサポートすることも可能である）。
【００７５】
修飾子フィールド１２４６−このコンテンツは、メモリアクセスを特定する汎用ベクトル命令フォーマット内の命令の発生をメモリアクセスを指定しない命令の発生から区別する。すなわち、非メモリアクセス１２０５命令テンプレートとメモリアクセス１２２０命令テンプレートとの間を区別する。メモリアクセス演算は、メモリ階層への読み出しおよび／または書き込みを行う（場合によっては、レジスタ内の値を使用してソースおよび／または宛先アドレスを指定する）が、非メモリアクセス演算はこれをしない（例えば、そのソースおよび宛先はレジスタである）。また、一実施形態において、このフィールドは、メモリアドレス計算を実行するために３つの別々の方法から選択をするが、代替実施形態によっては、メモリアドレス計算の実行に３つ前後のまたは別の数の方法をサポートしてもよい。
【００７６】
オーグメンテーション演算フィールド１２５０−このコンテンツは、ベース演算に加えて様々な異なる演算のどの１つが実行されるかを区別する。このフィールドは、文脈特有のものである。本発明の一実施形態では、このフィールドを、クラスフィールド１２６８、アルファフィールド１２５２、およびベータフィールド１２５４に分ける。このオーグメンテーション演算フィールド１２５０を設けることで、共通グループの複数演算を２つ、３つ、または４つの命令ではなく１つの命令で実行することができる。
【００７７】
スケールフィールド１２６０−このコンテンツは、メモリアドレス生成のための（例えば、２スケール＊インデックス＋ベースを使用するアドレス生成のため）インデックスフィールドのコンテンツのスケーリングを可能にする。
【００７８】
変位フィールド１２６２Ａ−このコンテンツは、メモリアドレス生成（例えば、２スケール＊インデックス＋ベース＋変位を使用するアドレス生成のため）の一部として使用される。
【００７９】
変位因子フィールド１２６２Ｂ（尚、変位フィールド１２６２Ａが変位因子フィールド１２６２Ｂの真上に位置させることで、いずれか一方が使用されることを示している）−このコンテンツは、アドレス生成の一部として（例えば、２スケール＊インデックス＋ベース＋スケーリングされた変位を使用するアドレス生成のため）使用される。これはメモリアクセスのサイズ（Ｎ）によりスケーリングされる変位因子を指定する。このＮは、メモリアクセス内のバイト数である。冗長な下位ビットを無視し、したがって、実効アドレスの算出に使用する最終変位を生成するために変位因子フィールドコンテンツに、メモリオペランド総サイズ（Ｎ）を乗算する。Ｎ値は、完全オペコードフィールド１２７４（本明細書で後述）およびデータ操作フィールド１２５４Ｃに基づいて実行時にプロセッサハードウェアにより決定する。変位フィールド１２６２Ａおよび変位因子フィールド１２６２Ｂは、非メモリアクセス１２０５命令テンプレート用には使用されない、かつ／または、別の実施形態では２つのうち１つだけを実装しても、いずれも実装しなくてもよいという意味で任意である。
【００８０】
データ要素幅フィールド１２６４−このコンテンツは、複数のデータ要素幅のうちどれが使用されるかを区別する（幾つかの実施形態によってはすべての命令について、別の実施形態によっては、命令の一部のみについて）。ただしこのフィールドは、１つのデータ要素幅のみをサポートする、および／または複数のデータ要素幅をオペコードの何らかの態様を使用してサポートする場合は必要でないという意味では任意である。
【００８１】
書き込みマスクフィールド１２７０−このコンテンツは、データ要素位置毎に、そのデータ要素位置が宛先ベクトルオペランド内でベースオペランドおよびオーグメンテーション操作の結果を反映するかどうかを制御する。クラスＡ命令テンプレートはマージ書き込みマスキングをサポートし、クラスＢ命令テンプレートは、マージ書き込みマスキングおよびゼロイングマスキング−書き込みマスキングの両方をサポートする。マージ時、ベクトルマスクがあれば、宛先に含まれる要素の任意のセットをいずれの演算（ベース演算およびオーグメンテーション演算により指定される）の実行中にも更新されないように保護できる。他の一実施形態では、対応マスクビットが０を有する宛先の要素それぞれの古い値を保持しておくことができる。対照的に、ゼロイングする時、ベクトルマスクは、宛先に含まれる要素の任意のセットをいずれの演算（ベース演算およびオーグメンテーション演算により指定される）の実行中にもゼロにすることができる。したがって一実施形態では、マスクビットが０の値を有するとき、その対応宛先の要素は０に設定される。この機能のサブセットは、実行中の演算のベクトル長（最初から最後まで、修正されている要素の長さ）を制御する性能であるが、変更対象となる要素が連続している必要はない。したがって、書き込みマスクフィールド１２７０により、ロード、記憶、計算、論理などを含む部分ベクトル演算が可能となる。本発明に記載の実施形態では、書き込みマスクフィールド１２７０のコンテンツが、使用すべき書き込みマスクを含む複数の書き込みマスクレジスタのうちの１つを選択する（したがい、書き込みマスクフィールド１２７０のコンテンツが実行されるマスキングを間接的に指定する）が、代替実施形態によっては、その代わりにまたはそれに加えて、書き込みマスクフィールド１２７０のコンテンツが、実行対象であるマスキングを直接指定することが可能である。
【００８２】
即値フィールド１２７２−このコンテンツで即値の指定が可能になる。このフィールドは、即値をサポートしない汎用ベクトルフレンドリフォーマットの実装には含まれず、即値を使用しない命令にも含まれないという意味で任意である。
【００８３】
クラスフィールド１２６８−このコンテンツは、命令の異なるクラスを区別する。図１２Ａおよび図１２Ｂを参照すると、このフィールドのコンテンツは、クラスＡとクラスＢとの間を選択する。図１２Ａおよび図１２Ｂでは、角丸方形を使用して特定の値が各フィールドに存在することを示している（例えば、クラスフィールド１２６８に対して図１２ＡのクラスＡの１２６８Ａおよび図１２ＢのクラスＢの１２６８Ｂ）。
【００８４】
クラスＡの命令テンプレート
クラスＡの非メモリアクセス１２０５命令テンプレートの場合、アルファフィールド１２５２はＲＳフィールド１２５２Ａとして解釈され、そのコンテンツは、種々のオーグメンテーション演算型のうちどれが実行されるかを区別し（例えば、丸め１２５２Ａ．１は非メモリアクセス丸め型演算１２１０に対して指定され、データ変換１２５２Ａ．２は非メモリアクセスデータ変換型演算１２１５命令テンプレートに対して指定される）、ベータフィールド１２５４は、指定された型の演算のうちどれが実行されるかを区別する。非メモリアクセス１２０５命令テンプレートに、スケールフィールド１２６０、変位フィールド１２６２Ａおよび変位スケールフィールド１２６２Ｂは含まれない。
【００８５】
非メモリアクセス命令テンプレート−完全丸め制御型演算  非メモリアクセス完全丸め制御型演算１２１０命令テンプレートでは、ベータフィールド１２５４は、丸め制御フィールド１２５４Ａとして解釈され、そのコンテンツ（単数または複数）で静的丸めを提供する。本発明に記載の実施形態では、丸め制御フィールド１２５４Ａが、全浮動小数点例外抑制（ＳＡＥ）フィールド１２５６および丸め演算制御フィールド１２５８を含むが、代替実施形態によっては、これらの概念の両方をサポートして同じフィールドに符号化する、または、これらの概念／フィールドの一方または他方のみを有することができる（例えば、丸め演算制御フィールド１２５８のみを有してもよい）。
【００８６】
ＳＡＥフィールド１２５６−このコンテンツは、例外イベント報告を無効化するかしないかを区別する。したがって、抑制が有効化されていることをＳＡＥフィールド１２５６のコンテンツが示す場合、所定の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
【００８７】
丸め演算制御フィールド１２５８−このコンテンツは、丸め演算群（例えば、切り上げ、切り下げ、０への丸め、最近接丸め）のうちどれを実行するかを区別する。したがって、この丸め演算制御フィールド１２５８により、命令単位での丸めモード変更が可能になる。丸めモードを指定するために制御レジスタをプロセッサが含む本発明の一実施形態では、この丸め演算制御フィールド１２５０のコンテンツが、そのレジスタの値をオーバーライドする。
【００８８】
非メモリアクセス命令テンプレート−データ変換型演算  非メモリアクセスデータ変換型演算１２１５命令テンプレートでは、ベータフィールド１２５４はデータ変換フィールド１２５４Ｂとして解釈され、そのコンテンツは、複数のデータ変換のうちどれが実行されるかを区別する（例えば、データ変換なし、スウィズル、ブロードキャスト）。
【００８９】
クラスＡのメモリアクセス１２２０命令テンプレートの場合、アルファフィールド１２５２はエビクションヒントフィールド１２５２Ｂとして解釈され、そのコンテンツは、エビクションヒントのうちいずれが使用されるかを区別し（図１２Ａでは、一時的１２５２Ｂ．１をメモリアクセス一時的１２２５命令テンプレートに対して指定し、非一時的１２５２Ｂ．２をメモリアクセス非一時的１２３０命令テンプレートに対して指定する）、ベータフィールド１２５４はデータ操作フィールド１２５４Ｃとして解釈され、そのコンテンツは、複数のデータ操作演算（プリミティブとしても知られる）のうちのどれが実行されるかを区別する（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、および宛先のダウンコンバージョン）。メモリアクセス１２２０命令テンプレートは、スケールフィールド１２６０および、必要に応じて変位フィールド１２６２Ａまたは変位スケールフィールド１２６２Ｂを含む。
【００９０】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素ごとの方法でメモリから、またメモリへとデータを転送する。実際に転送される要素に関しては、書き込みマスクとして選択されるベクトルマスクのコンテンツによって規定される。
【００９１】
メモリアクセス命令テンプレート−一時的  一時的データは、キャッシュが有利となるレベルですぐに再利用される可能性が高いデータである。しかし、これはヒントであり、このヒントを完全に無視することも含めて、プロセッサが異なれば、異なる方法でこれを実装することは可能である。
【００９２】
メモリアクセス命令テンプレート−非一時的  非一時的データは、１次レベルキャッシャでキャッシュすることが有利であるほどにはすぐに再利用される可能性が低いデータで、優先的にエビクションされるべきである。しかし、これはヒントであり、このヒントを完全に無視することも含めて、プロセッサが異なれば、異なる方法でこれを実装することは可能である。
【００９３】
クラスＢの命令テンプレート
クラスＢの命令テンプレートの場合、アルファフィールド１２５２は書き込みマスク制御（Ｚ）フィールド１２５２Ｃとして解釈され、そのコンテンツは、書き込みマスクフィールド１２７０によって制御される書き込みマスキングがマージまたはゼロイングのいずれかであるべきかを区別する。
【００９４】
クラスＢの非メモリアクセス１２０５命令テンプレートの場合、ベータフィールド１２５４の一部はＲＬフィールド１２５７Ａとして解釈され、そのコンテンツは、複数のオーグメンテーション演算型のうちどれが実行されるかを区別し（例えば、丸め１２５７Ａ．１を非メモリアクセス書き込みマスク制御部分丸め制御型演算１２１２命令テンプレートに対して指定し、ベクトル長（ＶＳＩＺＥ）１２５７Ａ．２を非メモリアクセス書き込みマスク制御ＶＳＩＺＥ型演算１２１７命令テンプレートに対して指定する）、ベータフィールド１２５４の他の部分は、その指定された型の演算のどれが実行されるかを区別する。非メモリアクセス１２０５命令テンプレートに、スケールフィールド１２６０、変位フィールド１２６２Ａおよび変位スケールフィールド１２６２Ｂは含まれない。
【００９５】
非メモリアクセス書き込みマスク制御部分丸め制御型演算１２１０命令テンプレートでは、ベータフィールド１２５４の他の部分は丸め演算フィールド１２５９Ａとして解釈され、例外イベント報告は無効化される（所定の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない）。
【００９６】
丸め演算制御フィールド１２５９Ａ−丸め演算制御フィールド１２５８と同様に、このコンテンツは、丸め演算群（例えば、切り上げ、切り下げ、０への丸め、最近接丸め）のうちどれを実行するかを区別する。したがって、この丸め演算制御フィールド１２５９Ａにより、命令単位での丸めモード変更が可能になる。プロセッサが丸めモードを指定するために制御レジスタを含む本発明の一実施形態では、この丸め演算制御フィールド１２５０のコンテンツが、そのレジスタの値をオーバーライドする。
【００９７】
非メモリアクセス書き込みマスク制御ＶＳＩＺＥ型演算１２１７命令テンプレートでは、ベータフィールド１２５４の他の部分はベクトル長フィールド１２５９Ｂとして解釈され、そのコンテンツは、複数のデータベクトル長のうちどれ（例えば、１２８、２５６、または５１２バイト）で実行されるかを区別する。
【００９８】
クラスＢメモリアクセス１２２０命令テンプレートの場合、ベータフィールド１２５４の一部はブロードキャストフィールド１２５７Ｂとして解釈され、そのコンテンツは、ブロードキャスト型データ操作演算が実行されるかを区別するが、ベータフィールド１２５４の他の部分はベクトル長フィールド１２５９Ｂとして解釈される。メモリアクセス１２２０命令テンプレートに、スケールフィールド１２６０、および必要に応じて変位フィールド１２６２Ａまたは変位スケールフィールド１２６２Ｂが含まれる。
【００９９】
汎用ベクトルフレンドリ命令フォーマット１２００に関しては、フォーマットフィールド１２４０、ベース演算フィールド１２４２およびデータ要素幅フィールド１２６４を含むものとして、完全オペコードフィールド１２７４を示している。完全オペコードフィールド１２７４がこれらのフィールドすべてを含む一実施形態が示されているが、これらのフィールドすべてをサポートするわけではない実施形態では、完全オペコードフィールド１２７４が含むフィールドは少なくなる。完全オペコードフィールド１２７４は演算コード（オペコード）を提供する。
【０１００】
オーグメンテーション演算フィールド１２５０、データ要素幅フィールド１２６４および書き込みマスクフィールド１２７０を設けることにより、これらの特徴を命令単位で、汎用ベクトルフレンドリ命令フォーマットで指定することが可能とする。
【０１０１】
書き込みマスクフィールドとデータ要素幅フィールドを組み合わせることにより、異なるデータ要素幅に基づいてマスクを適用できるタイプ別命令を生成することができる。
【０１０２】
クラスＡおよびクラスＢ内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の幾つかの実施形態では、１つのプロセッサ内の異なるプロセッサまたは異なるコアによって、クラスＡのみ、クラスＢのみ、または両方をサポートすることができる。例えば、汎用コンピューティング向け高性能汎用アウトオブオーダコアはクラスＢのみをサポート、主としてグラフィックスおよび／または科学的（スループット）コンピューティング向けのコアはクラスＡのみをサポート、両方向けのコアは両方をサポートすることができる（もちろん、両方のクラスのテンプレートおよび命令のすべてではなくともその一部を併せて有するコアは本発明の範囲である）。また、１つのプロセッサが複数のコアを有し、そのすべてが同じクラスをサポートしても、コアが異なればサポートするクラスも異なるというようにしてもよい。例えば、複数のグラフィックスおよび汎用コアを別々に備える１つのプロセッサの中で、主としてグラフィックスおよび／または科学的コンピューティング向けのグラフィックスコアの１つにクラスＡのみをサポートさせ、汎用コアの１つ以上を、アウトオブオーダ実行および汎用コンピューティング向けのレジスタリネーミングを備える高性能汎用コアとして、クラスＢのみをサポートさせてもよい。独立したグラフィックスコアを持たない別のプロセッサは、クラスＡとクラスＢの両方をサポートする１つ以上の汎用インオーダ型またはアウトオブオーダコアを含んでもよい。もちろん、本発明の別の実施形態では、あるクラスからの特徴を他のクラスに実装させることもできる。高レベル言語で書かれたプログラムが、様々な異なる実行可能フォームに入力（例えば、ジャストインタイムコンパイルまたは静的コンパイル）される。そのフォームの例として１）実行用にターゲットプロセッサによりサポートされる１つ以上のクラスの命令のみを有するフォーム、または２）すべてのクラスの命令の複数の組み合わせを用いて書かれた代替ルーチンと、現在コードを実行しているプロセッサによりサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードとを有するフォームを挙げることができる。
【０１０３】
例示的な専用ベクトルフレンドリ命令フォーマット
図１３Ａ、図１３Ｂ、図１３Ｃおよび図１３Ｄは、本発明の実施形態による、例示的な専用ベクトルフレンドリ命令フォーマットを図示するブロック図である。図１３Ａは、位置、サイズ、解釈、フィールドの順序、そしてそのフィールドの一部の値を指定するという意味で特化した専用ベクトルフレンドリ命令フォーマット１３００を示す。この専用ベクトルフレンドリ命令フォーマット１３００を使用して、ｘ８６の命令セットを拡張することが可能である。したがって、この実施形態のフィールドの一部は既存のｘ８６命令セットおよびその拡張版（例えばＡＶＸ）で使用したものと同様、または同一である。このフォーマットは、拡張した既存のｘ８６命令セットのプリフィックスフィールド、実オペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドと一致したままである。図１３Ａ〜図１３Ｄからのフィールドを書き込んだ図１２Ａ又は図１２Ｂのフィールドを例示する。
【０１０４】
本発明の実施形態を、例示を目的として汎用ベクトルフレンドリ命令フォーマット１２００にとの関連で専用ベクトルフレンドリ命令フォーマット１３００を参照して説明するが、特許請求の範囲を除き、本発明はこの専用ベクトルフレンドリ命令フォーマット１３００に制限されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット１２００では、様々なフィールドに様々なサイズが可能であるが、専用ベクトルフレンドリ命令フォーマット１３００は特定サイズのフィールドを有するものとして示されている。例えば、データ要素幅フィールド１２６４を、特定のベクトルフレンドリ命令フォーマット１３００では１ビットフィールドとして示すが、本発明はこれに限定されるものではない（すなわち、汎用ベクトルフレンドリ命令フォーマット１２００はデータ要素幅フィールド１２６４を他のサイズで含むことができる）。
【０１０５】
汎用ベクトルフレンドリ命令フォーマット１２００は、図１３Ａに図示する順序で以下に列記するフィールドを含む。
【０１０６】
ＥＶＥＸプリフィックス（バイト０〜３）１３０２−これは４バイト形式で符号化される。
【０１０７】
フォーマットフィールド１２４０（ＥＶＥＸバイト０、ビット［７：０］−第１のバイト（ＥＶＥＸバイト０）はフォーマットフィールド１２４０であり、０×６２（本発明の一実施形態においてベクトルフレンドリ命令フォーマットを区別するため使用する固有の値）を含む。
【０１０８】
第２〜４バイト（ＥＶＥＸバイト１〜３）は、複数のビットフィールドを含んで特定の機能を提供する。
【０１０９】
ＲＥＸフィールド１３０５（ＥＶＥＸバイト１、ビット［７−５］）−これは、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）およびＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［５］−Ｂ）からなる。このＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、ＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能を提供し、１の補数形式を用いて符号化されるものである。すなわち、ＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。この命令の他のフィールドは、同業者には既知であるように、レジスタインデックスの下位３ビットを符号化し（ｒｒｒ、ｘｘｘおよびｂｂｂ）、ＥＶＥＸ．Ｒ、ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂを加えて、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂを形成することができる。
【０１１０】
ＲＥＸ'フィールド１２１０−これは、ＲＥＸ'フィールド１２１０の第１の部分であり、拡張された３２レジスタセットの上位１６個または下位１６個の符号化に使用されるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の一実施形態では、以下に示すように他のビットと一緒に、このビットをビット反転フォーマットで記憶して、ＢＯＵＮＤ命令と（既知のｘ８６  ３２ビットモードで）区別する。ＢＯＵＮＤ命令の実オペコードバイトは６２であるが、ＭＯＤフィールドの１１の値をＭＯＤＲ／Ｍフィールドでは受け付けない（以下で説明）。本発明の代替実施形態によっては、このビットおよび下記に示す反転フォーマットによる他方ビットを記憶しない。１の値を下位１６個のレジスタの符号化に使用する。言い換えると、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒおよび他のフィールドの他のＲＲＲを組み合わせて、Ｒ'Ｒｒｒｒを形成する。
【０１１１】
オペコードマップフィールド１３１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−このコンテンツは、暗黙の先頭オペコードバイト（ＯＦ、ＯＦ３８またはＯＦ３）を符号化する。
【０１１２】
データ要素幅フィールド１２６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−これは表記ＥＶＥＸ．Ｗで表される。ＥＶＥＸ．Ｗはデータタイプ（３２ビットデータ要素または６４ビットデータ要素）の粒度（サイズ）を規定するために使用される。
【０１１３】
ＥＶＥＸ．ｖｖｖｖ１３２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割として以下を挙げることができる。１）反転した形式（１の補数）で指定される第１のソースレジスタオペランドを符号化し、２つ以上のソースオペランドを有する命令に有効であること、２）所定のベクトルシフト用に１の補数の形式で指定される宛先レジスタオペランドを符号化すること、または３）いずれのオペランドも符号化しないこと。ただし、このフィールドは確保されて、１１１１ｂを含むものとする。したがって、ＥＶＥＸ．ｖｖｖｖフィールド１３２０は、反転形式（１の補数）で記憶された第１のソースレジスタ指定子の４つの下位ビットを符号化する。命令に応じて、異なるビットフィールドを追加で使用して、その指定子のサイズを３２レジスタに拡張する
【０１１４】
ＥＶＥＸ．Ｕ１２６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕは、０であれば、クラスＡまたはＥＶＥＸ．Ｕ０を示す。１であれば、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１１５】
プリフィックス符号化フィールド１３２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−これは、ベース演算フィールドの追加のビットとなる。ＥＶＥＸプリフィックスフォーマットのレガシーＳＳＥ命令にサポートを提供することに加えて、これはＳＩＭＤプリフィックスの短縮にも有用である（ＳＩＭＤプリフィックスを表すために１バイトを必要とせず、ＥＶＥＸプリフィックスは２ビットのみでよい）。一実施形態では、レガシーフォーマットとＥＶＥＸプリフィックスフォーマットとの両方で、ＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシーＳＳＥ命令をサポートするため、これらのレガシーＳＩＭＤプリフィックスをＳＩＭＤプリフィックス符号化フィールドに符号化し、実行時にはデコーダのＰＬＡに提供する前にレガシーＳＩＭＤプリフィックスに拡張する（これにより、ＰＬＡは変更なしにこれらのレガシー命令のレガシーとＥＶＥＸフォーマットの両方を実行することができる）。より新たな命令はＥＶＥＸプリフィックス符号化フィールドのコンテンツを直接オペコード拡張として使用できるであろうが、実施形態によっては、一貫性を持たせるために同様の方法で展開させたとしても、この複数のＳＩＭＤプリフィックスにより異なる意味を指定すること可能である。別の実施形態では、ＰＬＡを再設計して２ビットＳＩＭＤプリフィックス符号化をサポートし、これにより、拡張を必要なくすことができる。
【０１１６】
アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ；ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御およびＥＶＥＸ．Ｎとしても知られる；ａとも示される）−これは、上述のように、このフィールドは文脈特有である。
【０１１７】
ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２―０、ＥＶＥＸ．ｒ２―０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られる、βββとも示される）は、上述のように、このフィールドはコンテキスト特有である。
【０１１８】
ＲＥＸ'フィールド１２１０−これは、ＲＥＸ'フィールドの残りであり、拡張された３２レジスタセットの上位１６個または下位１６個いずれかを符号化するために使用可能なＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットで記憶される。１の値を用いて下位１６個のレジスタを符号化する。言い換えると、ＥＶＥＸ．Ｖ、ＥＶＥＸ．ｖｖｖｖを組み合わせてＶ'ＶＶＶＶを形成する。
【０１１９】
書き込みマスクフィールド１２７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−このコンテンツは、上述のように、書き込みマスクレジスタ中のレジスタのインデックスを指定する。本発明の一実施形態では、特定値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令に書き込みマスクを使用しないことを含意する特別な振舞を有する（これは、すべて１にハードワイヤードされる書き込みマスクまたはマスキングハードウェアをバイパスするハードウェアを使用することを含む様々な方法で実装できる）。
【０１２０】
実オペコードフィールド１３３０（バイト４）もオペコードバイトとして既知である。オペコードの一部をこのフィールドで指定する。
【０１２１】
ＭＯＤ  Ｒ／Ｍフィールド１３４０（バイト５）は、ＭＯＤフィールド１３４２、Ｒｅｇフィールド１３４４およびＲ／Ｍフィールド１３４６を含む。上述のように、ＭＯＤフィールドの１３４２のコンテンツは、メモリアクセス演算と非メモリアクセス演算とを区別する。Ｒｅｇフィールド１３４４の役割は、２つの状況に要約することができる。つまり、宛先レジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、またはオペコード拡張として扱われ、いずれの命令オペランドを符号化するためにも使用されないことである。Ｒ／Ｍフィールド１３４６の役割としては、メモリアドレスを参照する命令オペランドを符号化すること、または宛先レジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを挙げられる。
【０１２２】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−上述のように、スケールフィールド１２５０のコンテンツは、メモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ１３５４およびＳＩＢ．ｂｂｂ１３５６−これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して言及済みである。
【０１２３】
変位フィールド１２６２Ａ（バイト７〜１０）−ＭＯＤフィールド１３４２が１０を含むとき、バイト７〜１０は変位フィールド１２６２Ａであり、レガシー３２ビットの変位（ｄｉｓｐ３２）と同じ働きをし、バイト粒度で動作する。
【０１２４】
変位因子フィールド１２６２Ｂ（バイト７）−ＭＯＤフィールド１３４２が０１を含むとき、バイト７は、変位因子フィールド１２６２Ｂである。このフィールドの位置は、レガシーｘ８６命令セット８ビット変位（ｄｉｓｐ８）の位置と同じであり、バイト粒度で動作する。ｄｉｓｐ８は符号拡張されているので、−１２８バイトと１２７バイトの間のオフセットにアドレス指定できるだけであり、６４バイトのキャッシュラインに関しては、ｄｉｓｐ８は真に有用な４つの値−１２９、−６４、０および６４のみに設定可能な８ビットを使用する。これより広い範囲が必要なことも多く、この場合はｄｉｓｐ３２が使用されるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２と対照的に、変位因子フィールド１２６２Ｂは、ｄｉｓｐ８の再解釈である。変位因子フィールド１２６２Ｂを使用するとき、実際の変位は、変位因子フィールドのコンテンツにメモリオペランドアクセスのサイズ（Ｎ）を乗算することにより決定される。この変位の型をｄｉｓｐ８＊Ｎと呼ぶ。これは、平均命令長（変位に使用される１バイトであるがもっと広い範囲を有する）を短くする。こうした圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは符号化される必要がないという想定に基づいている。言い換えると、変位因子フィールド１２６２Ｂは、レガシーｘ８６命令セットの８ビット変位の代わりになる。したがい、変位因子フィールド１２６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされるという点以外は、ｘ８６命令セットの８ビット変位と同じように符号化される（つまり、ＭｏｄＲＭ／ＳＩＢ符号化規則は変更がない）。つまり、符号化規則または符号化長には変更がなく、ハードウェアによる変位値の解釈にのみ変更がある（ハードウェアはメモリオペランドのサイズにより変位をスケーリングしてバイト毎のアドレスオフセットを得る必要がある）。
【０１２５】
即値フィールド１２７２は上述のように機能する。
【０１２６】
完全オペコードフィールド
図１３Ｂは、本発明の一実施形態による、完全オペコードフィールド１２７４を構成する専用ベクトルフレンドリ命令フォーマット１３００のフィールドを図示するブロック図である。具体的には、完全オペコードフィールド１２７４は、フォーマットフィールド１２４０、ベース演算フィールド１２４２およびデータ要素幅（Ｗ）フィールド１２６４を含む。このベース演算フィールド１２４２は、プリフィックス符号化フィールド１３２５、オペコードマップフィールド１３１５および実オペコードフィールド１３３０を含む。
【０１２７】
レジスタインデックスフィールド
図１３Ｃは、本発明の一実施形態による、レジスタインデックスフィールド１２４４を構成する専用ベクトルフレンドリ命令フォーマット１３００のフィールドを図示するブロック図である。具体的には、レジスタインデックスフィールド１２４４は、ＲＥＸフィールド１３０５、ＲＥＸ'フィールド１３１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド１３４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド１３４６、ＶＶＶＶフィールド１３２０、ｘｘｘフィールド１３５４およびｂｂｂフィールド１３５６を含む。
【０１２８】
オーグメンテーション演算フィールド
図１３Ｄは、本発明の一実施形態による、オーグメンテーション演算フィールド１２５０を構成する専用ベクトルフレンドリ命令フォーマット１３００のフィールドを図示するブロック図である。クラス（Ｕ）フィールド１２６８は、０を含むとき、ＥＶＥＸ．Ｕ０（クラスＡ１２６８Ａ）を示し、１を含むとき、ＥＶＥＸ．Ｕ１（クラスＢ１２６８Ｂ）を示す。Ｕ＝０かつＭＯＤフィールド１３４２が１１を含むとき（非メモリアクセス演算を示す）、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド１２５２Ａとして解釈される。このｒｓフィールド１２５２Ａが１（丸め１２５２Ａ．１）を含むとき、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６−４］−ＳＳＳ）は、丸め制御フィールド１２５４Ａとして解釈される。この丸め制御フィールド１２５４Ａは、１ビットのＳＡＥ１２５６および２ビットの丸め演算フィールド１２５８を含む。このｒｓフィールド１２５２Ａが０（丸め１２５２Ａ．２）を含むとき、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ変換フィールド１２５４Ｂとして解釈される。Ｕ＝０かつＭＯＤフィールド１３４２が００、０１または１０を含むとき（メモリアクセス演算を示す）、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド１２５２Ｂとして解釈され、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ操作フィールド１２５４Ｃとして解釈される。
【０１２９】
Ｕ＝１のとき、アルファフィールド１２５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド１２５２Ｃとして解釈される。Ｕ＝１かつＭＯＤフィールド１３４２が１１を含むとき（非アクセス演算を示す）、ベータフィールド１２５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）がＲＬフィールド１２５７Ａとして解釈され、それが１を含むとき（丸め１２５７Ａ．１）、ベータフィールド１２５４の他の部分（ＥＶＥＸバイト３、ビット［６：５］−Ｓ２−１）は丸め演算フィールド１２５９Ａとして解釈され、ＲＬフィールド１２５７Ａが０を含むとき（ＶＳＩＺＥ１２５７．Ａ２）、ベータフィールド１２５４の他の部分（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）がベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１ー０）として解釈される。Ｕ＝１かつＭＯＤフィールド１３４２が００、０１または１０を含むとき（メモリアクセス演算を示す）、ベータフィールド１２５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド１２５９Ｂ（ＥＶＥＸバイト３、ビット［６：−５］−Ｌ１ー０）およびブロードキャストフィールド１２５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。
【０１３０】
例示的なレジスタアーキテクチャ
図１４は、本発明の一実施形態によるレジスタアーキテクチャのブロック図である。図示の実施形態では、５１２ビット幅の３２個のベクトルレジスタ１４１０があり、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１と参照符号が付けられている。低位１６個のｚｍｍの下位２５６ビットがレジスタｙｍｍ０〜１６に重ねられる。低位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）をレジスタｘｍｍ０〜１５に重ねる。専用ベクトルフレンドリ命令フォーマット１３００は、以下の表に示すようにこれらの重ねられたレジスタファイルに演算を行う。
【表３】
0006508850.tif 000006
【０１３１】
言い換えると、ベクトル長フィールド１２５９Ｂは、最大長とそれより短い１つ以上の他の長さとの間で選択する。その短い方の長さはそれぞれ、先行長さの半分の長さであり、ベクトル長フィールド１２５９Ｂを含まない命令テンプレートは最大ベクトル長に演算を行う。さらに、一実施形態では、この専用ベクトルフレンドリ命令フォーマット１３００のクラスＢ命令テンプレートは、パックまたはスカラの単精度／倍精度浮動小数点データおよびパックまたはスカラの整数データに演算を行う。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタの最下位のデータ要素位置に実行される演算であり、より上位のデータ要素位置はその実施形態に応じて命令の前と同じまま、または０にされる。
【０１３２】
書き込みマスクレジスタ１４１５−図示の実施形態では、８個の書き込みレジスタ（ｋ０〜ｋ７）があり、それぞれ６４ビットサイズである。代替実施形態では、この書き込みマスクレジスタ１４１５が１６ビットサイズである。上述のように、本発明の一実施形態では、ベクトルマスクレジスタｋ０を書き込みマスクとして使用することはできない。通常ｋ０を示す符号化を書き込みマスクに対して使用するとき、０ｘＦＦＦＦのハードワイヤードされた書き込みマスクを選択し、その命令に対する書き込みマスクを事実上無効化する。
【０１３３】
汎用レジスタ１４２５−図示の実施形態では、１６個の６４ビット汎用レジスタがあり、これらはメモリオペランドをアドレス指定するため既存のｘ８６アドレス指定モードと共に使用される。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰおよびＲ８〜Ｒ１５という名前で参照される。
【０１３４】
ＭＭＸパック整数フラットレジスタファイル１４５０をエイリアスするスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１４４５−図示の実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を使用して３２／６４／８０ビットの浮動小数点データにスカラ浮動小数点演算を実行するために使用される８要素のスタックであり、ＭＭＸレジスタは、６４ビットパック整数データに対して演算を行う、ならびにＭＭＸレジスタとＸＭＭレジスタとの間で実行される一部の演算のためのオペランドを保持するために使用される。
【０１３５】
本発明の代替実施形態によっては、レジスタの幅を増減可能である。さらに、本発明の別の実施形態によっては、数の上下する、または別のレジスタファイルおよびレジスタを用いてもよい。
【０１３６】
例示的なコアアーキテクチャ、プロセッサおよびコンピュータアーキテクチャ
プロセッサのコアを、様々な方法で、様々な目的のために、様々なプロセッサに実装することができる。例えば、こうしたコアの実装には例として、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主としてグラフィックスおよび／または科学的（スループット）コンピューティング向けの専用コアを挙げられる。様々なプロセッサの実装には例として、１）汎用コンピューティング向けの１つ以上の汎用インオーダコアおよび／または汎用コンピューティング向けの１つ以上の汎用アウトオブオーダコアを含むＣＰＵと、２）主としてグラフィックスおよび／または科学的（スループット）向けの１つ以上の専用コアを含むコプロセッサとを含むことができる。このようにプロセッサが異なれば、仕上がるコンピュータシステムアーキテクチャも様々となり、こうしたプロセッサの例として以下を挙げられる。１）ＣＰＵから独立したチップ上のコプロセッサ、２）ＣＰＵと同じパッケージにある独立したダイ上のコプロセッサ、３）ＣＰＵと同じダイ上にあるコプロセッサ（この場合、こうしたコプロセッサはマージ型グラフィックスおよび／または科学的（スループット）ロジックなどの専用ロジックあるいは専用のコアと呼ばれる場合がある）、４）同じダイ上に上述のＣＰＵ（アプリケーションコア（単数または複数）またはアプリケーションプロセッサ（単数または複数）と呼ばれる場合がある）、上述のコプロセッサ、および追加の機能を含むことができるチップ上のシステムを含むことができる。例示的なコアアーキテクチャを次に説明し、その後例示的なプロセッサおよびコンピュータアーキテクチャの説明を続ける。
【０１３７】
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアブロック図
図１５Ａは、本発明の実施形態による、例示的なインオーダパイプライン、および例示的なレジスタリネーミングアウトオブオーダ発行／実行パイプラインの両方を図示するブロック図である。図１５Ｂは、本発明の実施形態による、インオーダアーキテクチャコアの例示的な実施形態と任意のプロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行／実行アーキテクチャコアとの両方を図示するブロック図である。図１５Ａ〜図１５Ｂの実線の四角は、インオーダパイプラインおよびインオーダコアを示し、破線で追加した四角はレジスタリネーミングアウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダ態様のサブセットであると考えて、そのアウトオブオーダ態様を説明する。
【０１３８】
図１５Ａにおいて、プロセッサパイプライン１５００は、フェッチステージ１５０２、長さ復号ステージ１５０４、復号ステージ１５０６、割り当てステージ１５０８、リネーミングステージ１５１０、スケジューリング（ディスパッチまたは発行としても既知の）ステージ１５１２、レジスタ読み出し／メモリ読み出しステージ１５１４、実行ステージ１５１６、再読み出し／メモリ書き込みステージ１５１８、例外処理ステージ１５２２およびコミットステージ１５２４を含む。
【０１３９】
図１５Ｂは、実行エンジンユニット１５５０に連結されたフロントエンドユニット１５３０を含むプロセッサコア１５９０を示し、両方ともメモリユニット１５７０に連結されている。このコア１５９０は縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは別のコアの型であってもよい。さらに別の選択肢として、このコア１５９０は例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックスユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってもよい。
【０１４０】
このフロントエンドユニット１５３０は、命令キャッシュユニット１５３４に連結された分岐予測ユニット１５３２を含み、命令キャッシュユニット１５３４は命令変換索引バッファ（ＴＬＢ）ユニット１５３６に連結され、命令変換索引バッファ（ＴＬＢ）ユニット１５３６は命令フェッチユニット１５３８に連結され、命令フェッチユニット１５３８は復号ユニット１５４０に連結されている。復号ユニット１５４０（すなわちデコーダ）は命令を復号し、元の命令から複合された、元の命令を反映する、または元の命令に由来する１つ以上のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令または他の制御信号を出力として生成することができる。復号ユニット１５４０を、様々に異なる機構を用いて実装させることができる。好適な機構の例として、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）などが挙げられるが、これらに限定されるものではない。一実施形態では、コア１５９０は、マイクロコードＲＯＭまたは特定のマクロ命令用マイクロコードを記憶する他の媒体を含む（例えば、復号ユニット１５４０内またはフロントエンドユニット１５３０内に）。復号ユニット１５４０は、実行エンジンユニット１５５０内のリネーム／割り当てユニット１５５２に連結されている。
【０１４１】
実行エンジンユニット１５５０は、退避ユニット１５５４に連結されたリネーム／割り当てユニット１５５２と、１組の１つ以上のスケジューラユニット１５５６とを含む。スケジューラユニット１５５６は、予約ステーション、中央命令ウインドウなどを含む、任意の数の異なるスケジューラとすることができる。このスケジューラユニット１５５６は、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８に連結されている。物理レジスタファイルユニット（単数または複数）１５５８のそれぞれが、１つ以上の物理レジスタファイルであり、これらのそれぞれが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）などの１つ以上の別々のデータタイプを記憶する。一実施形態では、物理レジスタファイル（単数または複数）ユニット１５５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供することができる。この物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８に退避ユニット１５５４が重ねられているが、これにより、レジスタリネーミングおよびアウトオブオーダ実行を実装できる様々な方法（例えば、リオーダバッファ（単数または複数）および退避レジスタファイル（単数または複数）を使用して、フューチャファイル（単数または複数）、ヒストリバッファ（単数または複数）および退避レジスタファイル（単数または複数）を使用して、レジスタマップおよびレジスタのプールを使用して）を図示している。この退避ユニット１５５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８は、実行クラスタ（単数または複数）１５６０に連結される。実行クラスタ（単数または複数）１５６０は、１組の１つ以上の実行ユニット１５６２および１組の１つ以上のメモリアクセスユニット１５６４を含む。実行ユニット１５６２は、様々な演算（例えば、シフト、足し算、引き算、掛け算）を様々な種類のデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行できる。実施形態によっては特定の機能または組になった機能に専用の複数の実行ユニットを含むことができ、また、実施形態によっては１つだけの実行ユニットを含む、または複数の実行ユニットを含んでそのすべてにすべての機能を実行させることができる。スケジューラユニット（単数または複数）１５５６、物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８および実行クラスタ（単数または複数）１５６０を、複数でもよいものとして図示している。というのも、実施形態によっては、所定の種類のデータ／演算用に別々のパイプライン（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはそれぞれが独自のスケジューラユニット、物理レジスタファイル（単数または複数）ユニットおよび／または実行クラスタを有するメモリアクセスパイプライン。独立した１つのメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット（単数または複数）１５６４を有する所定の実施形態が実装される）を作成する場合があるためである。別々のパイプラインを使用する場合、これらのパイプラインの１つ以上がアウトオブオーダ発行／実行であり、残りのパイプラインがインオーダであってもよいことを理解されたい。
【０１４２】
このメモリアクセスユニット１５６４のセットは、メモリユニット１５７０に連結され、このメモリユニット１５７０はデータＴＬＢユニット１５７２を含み、このデータＴＬＢユニット１５７２は、レベル２（Ｌ２）キャッシュユニット１５７６に連結されるデータキャッシュユニット１５７４に連結される。一例示的な実施形態では、このメモリアクセスユニット１５６４はロードユニット、ストアアドレスユニットおよびストアデータユニットを含み、これらのそれぞれは、メモリユニット１５７０中のデータＴＬＢユニット１５７２に連結されている。この命令キャッシュユニット１５３４はさらに、メモリユニット１５７０のレベル２（Ｌ２）キャッシュユニット１５７６に連結されている。このＬ２キャッシュユニット１５７６は１つ以上の別のレベルのキャッシュに連結され、最後にはメインメモリに連結される。
【０１４３】
例えば、例示的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１５００を実装することができる。１）命令フェッチ１５３８がフェッチステージ１５０２および長さ復号ステージ１５０４を実行する、２）復号ユニット１５４０が復号ステージ１５０６を実行する、３）リネーム／割り当てユニット１５５２が割り当てステージ１５０８およびリネーミングステージ１５１０を実行する、４）スケジューラユニット（単数または複数）１５５６がスケジューリングステージ１５１２を実行する、５）物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８およびメモリユニット１５７０がレジスタ読み出し／メモリ読み出しステージ１５１４を実行し、実効クラスタ１５６０が実行ステージ１５１６を実行する、６）メモリユニット１５７０および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８が再読み出し／メモリ書き込みステージ１５１８を実行する、７）様々なユニットが例外処理ステージ１５２２に関与できる、８）退避ユニット１５５４および物理レジスタファイル（単数または複数）ユニット（単数または複数）１５５８はコミットステージ１５２４を実行する。
【０１４４】
コア１５９０は、本明細書に記載する命令（単数または複数）のほか、１つ以上の命令セット（例えば、ｘ８６命令セット（より新しいバージョンと共に追加された幾つかの拡張を備えたもの）、カリフォルニア州サニーベールのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇ社のＡＲＭ命令セット（ＮＥＯＮなどの任意の追加拡張を有する）をサポートすることができる。一実施形態では、このコア１５９０は、パックデータ命令セットの拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これにより、数多くのマルチメディアアプリケーションによる演算がパックデータを用いて実行できるようになる。
【０１４５】
尚、このコアはマルチスレッド（演算またはスレッドの２つ以上の並行セットを実行する）をサポートすることができ、そのサポートは様々な方法で可能である。例として、タイムスライスマルチスレッド、同時マルチスレッド（単一物理コアが、物理コアが同時にマルチスレッドしている各スレッドにロジックコアを提供する）またはその組み合わせ（例えば、インテル（商標登録）ハイパースレッディングテクノロジにおけるようなタイムスライスフェッチ、復号およびその後の同時マルチスレッド）を挙げられる。
【０１４６】
レジスタリネーミングをアウトオブオーダ実行との関連で記載しているが、レジスタリネーミングはインオーダアーキテクチャで使用可能であることを理解されたい。また、このプロセッサの図示した実施形態は、個別に分かれた命令データキャッシュユニット１５３４およびデータキャッシュユニット１５７４ならびに共有Ｌ２キャッシュユニット１５７６を含むが、代替実施形態によっては、例えば、レベル１（Ｌ１）内部キャッシュまたは複数レベルの内部キャッシュなど、命令およびデータ両方について単一の内部キャッシュを有することができる。幾つかの実施形態によっては、本システムは、内部キャッシュとコアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含むことができる。あるいは、キャッシュのすべてをコアおよび／またはプロセッサの外部にすることができる。
【０１４７】
具体的な例示的インオーダコアアーキテクチャ
図１６Ａ〜図１６Ｂはより具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのコアはチップ内のいくつかの論理ブロック（同一の型および／または異なる型の他のコアを含む）の１つとなるものである。この論理ブロックは、アプリケーションに応じて、ある固定の機能ロジック、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏロジックを有する高帯域幅の相互ネットワーク（例えば、リングネットワーク）を介して通信する。
【０１４８】
図１６Ａは、本発明の実施形態による単一プロセッサコアを、そのオンダイ相互接続部ネットワーク１６０２およびレベル２（Ｌ２）キャッシュ１６０４のローカルサブセットへの相互接続部と共に示すブロック図である。一実施形態では、命令デコーダ１６００がパックデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１６０６により、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットまで可能となる。一実施形態では（設計を簡潔にするため）、スカラユニット１６０８およびベクトルユニット１６１０が別々の複数のレジスタセット（スカラユニット１６０８はスカラレジスタ１６１２、ベクトルユニット１６１０はベクトルレジスタ１６１４）を使い、その間を転送されるデータはメモリに書き込まれ、その後レベル１（Ｌ１）キャッシュ１６０６から読み戻されるが、本発明の代替実施形態によっては、これとは別の手法を使うことができる（例えば、単一のレジスタセットを使う、またはデータの書き込みまたは読み戻しをせずに２つのレジスタファイルの間でデータを転送させる通信経路を含める）。
【０１４９】
Ｌ２キャッシュのローカルサブセット１６０４は、プロセッサコア当たり１つずつとなるよう複数のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。プロセッサコアはそれぞれ、自身のＬ２キャッシュのローカルサブセット１６０４への直接のアクセス経路を有する。１つのプロセッサコアに読み出されたデータはそのＬ２キャッシュのサブセット１６０４に記憶され、他のプロセッサコアがそれぞれのローカルＬ２キャッシュサブセットにアクセスするのと並行して、迅速にアクセス可能となる。１つのプロセッサコアに書き込まれたデータはそれ自身のＬ２キャッシュサブセット１６０４に記憶され、必要であれば、他の複数のサブセットからフラッシュされる。このリングネットワークは共有データのコヒーレンシを保証する。このリングネットワークは双方向であるため、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロックなどのエージェント間のチップ内通信が可能である。リングデータ経路はそれぞれ、１方向当たり１０１２ビット幅である。
【０１５０】
図１６Ｂは、本発明の実施形態による図１６Ａに示したプロセッサコアの部分展開図である。図１６Ｂは、Ｌ１キャッシュ１６０６のＬ１データキャッシュ１６０６Ａ部分ならびにベクトルユニット１６１０およびベクトルレジスタ１６１４に関するより詳細を含む。具体的には、このベクトルユニット１６１０は１６ワイドベクトル処理ユニット（ＶＰＵ）（１６ワイドＡＬＵ１６２８参照）であり、整数演算命令、単精度および倍精度の浮動小数点命令のうちの１つ以上を実行する。このＶＰＵは、スウィズルユニット１６２０によるレジスタ入力のスウィズル、数値変換ユニット１６２２Ａおよび１６２２Ｂによる数値変換、およびメモリ入力に関する複製ユニット１６２４による複製をサポートする。書き込みマスクレジスタ１６２６により、結果として生じるベクトル書き込みのプレディケートが可能になる。
【０１５１】
統合型メモリコントローラおよびグラフィックスを有するプロセッサ
図１７は、本発明の実施形態による、２つ以上のコア、１つの統合型メモリコントローラ、および複数の統合型グラフィックスを有することができるプロセッサ１７００のブロック図である。図１７の実線の四角は、単一コア１７０２Ａ、システムエージェント１７１０、１組の１つ以上のバスコントローラユニット１７１６を有するプロセッサ１７００を示し、破線の四角で任意に追加した部分は、複数のコア１７０２Ａ〜１７０２Ｎ、システムエージェントユニット１７１０内の１組の１つ以上の統合型メモリコントローラユニット１７１４および専用ロジック１７０８を有する代替のプロセッサ１７００を示す。
【０１５２】
したがって、プロセッサ１７００の様々な実装の例として、１）統合型グラフィックスおよび／または科学的（スループット）ロジック（１つ以上のコアを含むことができる）である専用ロジック１７０８と、１つ以上の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その組み合わせ）であるコア１７０２Ａ〜Ｎとを有するＣＰＵ、２）グラフィックスおよび／または科学的（スループット）を主な目的とする多数の専用コアであるコア１７０２Ａ〜Ｎを有するコプロセッサ、および３）多数の汎用インオーダコアであるコア１７０２Ａ〜Ｎを有するコプロセッサを挙げられる。このように、プロセッサ１７００は、汎用プロセッサ、コプロセッサまたは専用プロセッサでよく、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０個以上のコアを含む）、組み込みプロセッサなどでよい。このプロセッサを１つ以上のチップ上に実装することができる。このプロセッサ１７００は、１つ以上の基板の一部であっても、かつ／または、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳなどの複数の処理技術のいずれかを用いて１つ以上の基板上に実装されてもよい。
【０１５３】
そのメモリ階層は、コア内の１つ以上のキャッシュのレベル、１組または１つ以上の共有キャッシュユニット１７０６、および統合型メモリコントローラユニット１７１４のセットに連結された外部メモリ（図示せず）を含む。共有キャッシュユニットのセット１７０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他のレベル数のキャッシュなどの１つ以上の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）および／またはこれらの組み合わせを含むことができる。一実施形態では、リングベースの相互接続ユニット１７１２が、統合型グラフィックスロジック１７０８、共有キャッシュユニットセット１７０６およびシステムエージェントユニット１７１０／統合型メモリコントローラユニット（単数または複数）１７１４を相互接続するが、代替実施形態によっては、こうしたユニットの相互接続に既知の技法をいくつ使用してもよい。一実施形態では、１つ以上のキャッシュユニット１７０６とコア１７０２Ａ〜Ｎとの間でコヒーレンシが維持される。
【０１５４】
幾つかの実施形態によっては、コア１７０２Ａ〜Ｎの１つ以上はマルチスレッド機能を持つ。システムエージェント１７１０はコア１７０２Ａ〜Ｎを協調させ動作させるコンポーネントを含む。このシステムエージェント１７１０は例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。このＰＣＵは、コア１７０２Ａ〜Ｎおよび統合型グラフィックスロジック１７０８の電力状態の調整に必要なロジックおよびコンポーネントであっても、または、これらを含んでもよい。このディスプレイユニットは１つ以上の外部接続されたディスプレイを駆動するためのものである。
【０１５５】
このコア１７０２Ａ〜Ｎは、アーキテクチャ命令セットの点で同種でも異種でもよい。すなわち、コア１７０２Ａ〜Ｎの２つ以上に同じ命令を実行可能にし、その他はその命令セットの１サブセットのみまたは別の命令セットを実行可能とすることができる。
【０１５６】
例示的なコンピュータアーキテクチャ
図１８〜２１は例示的なコンピュータアーキテクチャのブロック図である。ただしこの他にも、ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイスおよび様々な他の電子装置用に当技術分野において既知であるシステム設計および構成も好適である。一般に、本明細書に開示するようにプロセッサおよび／または他の実行ロジックを組み込むことが可能な種々のシステムや電子装置であれば概して好適である。
【０１５７】
ここで図１８を参照すると、本発明の一実施形態によるシステム１８００のブロック図が示されている。このシステム１８００はコントローラハブ１８２０に連結された１つ以上のプロセッサ１８１０、１８１５を備えることができる。一実施形態では、このコントローラハブ１８２０はグラフィックスメモリコントローラハブ（ＧＭＣＨ）１８９０および入力／出力ハブ（ＩＯＨ）１８５０（これらは別々のチップ上にあってもよい）を含み、ＧＭＣＨ１８９０はメモリ１８４０およびコプロセッサ１８４５を連結するメモリおよびグラフィックスコントローラを備える。ＩＯＨ１８５０は入力／出力（Ｉ／Ｏ）デバイス１８６０をＧＭＣＨ１８９０に連結する。あるいは、メモリおよびグラフィックスコントローラの１つまたは両方はプロセッサ内に統合され（本明細書に記載のように）、メモリ１８４０およびコプロセッサ１８４５は、プロセッサ１８１０とＩＯＨ１８５０を有する単一チップ内のコントローラハブ１８２０とに直接連結される。
【０１５８】
追加プロセッサ１８１５の任意追加的特性を破線で図１８に表す。プロセッサ１８１０、１８１５はそれぞれ本明細書に記載の処理コアの１つ以上を含んでもよく、プロセッサ１７００のいずれかのバージョンとすることができる。
【０１５９】
例えば、メモリ１８４０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）またはこの２つの組み合わせであってもよい。少なくとも一実施形態では、このコントローラハブ１８２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）などのポイントツーポイントインタフェース、または類似の接続１８９５を介してプロセッサ（単数または複数）１８１０、１８１５と通信する。
【０１６０】
一実施形態では、コプロセッサ１８４５は例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサなどの専用プロセッサである。一実施形態では、コントローラハブ１８２０は統合型グラフィックスアクセラレータを含んでもよい。
【０１６１】
物理リソース１８１０、１８１５の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費などをはじめとする特徴の一連のメトリックの点から、様々な相違があり得る。
【０１６２】
一実施形態では、プロセッサ１８１０は一般的な型のデータ処理演算を制御する命令を実行する。この命令内にコプロセッサ命令を埋め込むことができる。
【０１６３】
プロセッサ１８１０はこのコプロセッサ命令を、取付けたコプロセッサ１８４５により実行されるべきタイプとして認識する。したがって、このプロセッサ１８１０はこのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサバスまたは他の相互接続手段でコプロセッサ１８４５に発行する。コプロセッサ（単数または複数）１８４５はこのコプロセッサ命令を受け入れ、受信したものを実行する。
【０１６４】
ここで図１９を参照すると、本発明の一実施形態による第１の、さらに具体的な例示的システム１９００のブロック図が示されている。図１９に示すように、マルチプロセッサシステム１９００はポイントツーポイント相互接続システムであり、第１のプロセッサ１９７０と、これにポイントツーポイント相互接続部１９５０を介して連結される第２のプロセッサ１９８０とを備える。
【０１６５】
プロセッサ１９７０および１９８０それぞれは、プロセッサ１７００のいずれかのバージョンとすることができる。本発明の一実施形態では、プロセッサ１９７０は、プロセッサ１８１０であり、プロセッサ１９８０はプロセッサ１８１５であり、コプロセッサ１９３８はコプロセッサ１８４５である。別の実施形態では、プロセッサ１９７０はプロセッサ１８１０であり、プロセッサ１９８０はコプロセッサ１８４５である。
【０１６６】
プロセッサ１９７０は統合型メモリコントローラ（ＩＭＣ）ユニット１９７２を含み、プロセッサ１９８０は統合型メモリコントローラ（ＩＭＣ）ユニット１９８２を含むものとして図示されている。プロセッサ１９７０はまた、バスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース１９７６および１９７８を含み、同様に第２のプロセッサ１９８０は、Ｐ−Ｐインタフェース１９８６および１９８８を含む。プロセッサ１９７０はＰ−Ｐインタフェース回路１９７８を使用して、プロセッサ１９８０はＰ−Ｐインタフェース回路１９８８を使用して、ポイントツーポイント（Ｐ−Ｐ）相互接続部１９５０を介しての情報交換ができる。図１９の示すように、ＩＭＣ１９７２はそのプロセッサをメモリ１９３２に連結し、ＩＭＣ１９８２はそのプロセッサをメモリ１９３４に連結している。これらのメモリをそれぞれのプロセッサにローカルに取付けられたメインメモリの一部とすることができる。
【０１６７】
プロセッサ１９７０は、ポイントツーポイントインタフェース回路１９７６、１９９４を用い、Ｐ−Ｐインタフェース１９５２を介してチップセット１９９０と情報を交換し、プロセッサ１９８０は、ポイントツーポイントインタフェース回路１９８６、１９９８を用い、Ｐ−Ｐインタフェース１９５４を介してチップセット１９９０と情報を交換することができる。チップセット１９９０は高性能インタフェース１９３９を介して必要に応じてコプロセッサ１９３８と情報交換することができる。一実施形態では、このコプロセッサ１９３８は例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサなどの専用プロセッサである。
【０１６８】
共有キャッシュ（図示せず）は、プロセッサが低電力モードにある場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶できるように、どちらかプロセッサ内、または両方のプロセッサ外に配置されながらもＰ−Ｐ相互接続部を介してプロセッサに接続された状態にすることができる。
【０１６９】
チップセット１９９０はインタフェース１９９６を介して第１のバス１９１６に連結可能である。一実施形態では、第１のバス１９１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、あるいはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは他の第３世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されるものではない。
【０１７０】
図１９に示すように、様々なＩ／Ｏデバイス１９１４を、第１のバス１９１６を第２のバス１９２０に連結するバスブリッジ１９１８と並行して、第１のバス１９１６に連結することができる。一実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵアクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイまたは他のプロセッサなどの１つ以上の追加プロセッサ１９１５を第１のバス１９１６に連結する。一実施形態では、第２のバス１９２０はローピンカウント（ＬＰＣ）バスであってもよい。様々なデバイスを、第２のバス１９２０に連結可能である。そのデバイスの例として、キーボードおよび／またはマウス１９９６、通信デバイス１９２７、ならびに一実施形態において命令／コードおよびデータ１９３０を含むことが可能なディスクドライブまたは他の大容量記憶装置などの記憶ユニット１９２８を挙げることができる。さらに、オーディオＩ／Ｏ１９２４を第２のバス１９２０に連結することができる。ただし、他のアーキテクチャも可能である。例えば、図１９のポイントツーポイントアーキテクチャの代わりに、任意のシステムでマルチドロップバスまたは他のこうしたアーキテクチャを実装することができる。
【０１７１】
ここで図２０を参照すると、本発明の一実施形態による第２の、さらに具体的な例示的システム２０００のブロック図が示されている。図１９および図２０に含まれる同様の構成要素には同様の参照符号を付し、図１９の態様のいくつかを図２０から省いて図２０の他の態様が不明確にならないようにしている。
【０１７２】
図２０は、プロセッサ１９７０が統合型メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１９７２を、プロセッサ１９８０が統合型メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１９８２を含むことができることを示す。したがって、このＣＬ１９７２および１９８２は統合型メモリコントローラユニットおよびＩ／Ｏ制御ロジックを含む。図２０はメモリ１９３２がＣＬ１９７２に連結されるだけでなく、Ｉ／Ｏデバイス２０１４も制御ロジック１９７２に連結されることを示し、またメモリ１９３４がＣＬ１９８２に連結されるだけでなく、Ｉ／Ｏデバイス２０１４も制御ロジック１９８２に連結されることを示している。レガシーＩ／Ｏデバイス２０１５はチップセット１９９０に連結されている。
【０１７３】
ここで図２１を参照すると、本発明の一実施形態によるＳｏＣ（システムオンチップ）２１００のブロック図が示されている。図１７に含まれる同様の構成要素には同様の参照符号を付している。また、破線の四角はさらに高度なＳｏＣに任意で用いられる構造体を示す。図２１では、相互接続ユニット（単数または複数）２１０２が、１組の１つ以上のコア２０２Ａ〜Ｎおよび共有キャッシュユニット（単数または複数）１７０６を含むアプリケーションプロセッサ２１１０と、システムエージェントユニット１７１０と、バスコントローラユニット（単数または複数）１７１６と、統合型メモリコントローラユニット（単数または複数）１７１４と、統合型グラフィックスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含むことができる１組または１つ以上のコプロセッサ２１２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット２１３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット２１３２と、１つ以上の外部ディスプレイに連結するためのディスプレイユニット２１４０とに連結される。一実施形態では、このコプロセッサ（単数または複数）２１２０は例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサなどの専用プロセッサを含む。
【０１７４】
本明細書に開示する機構の様々な実施形態を、ハードウェア、ソフトウェア、ファームウェアまたはこうした実装方法の組み合わせで実装することができる。本発明の様々な実施形態は、コンピュータプログラムまたはプログラムコードとして実装可能であり、このプログラムおよびコードは、少なくとも１つのプロセッサ、記憶システム（揮発ならびに不揮発メモリおよび／または記憶構成要素を含む）、少なくとも１つの入力装置および少なくとも１つの出力装置を備えるプログラム可能なシステム上で実行することができる。
【０１７５】
図１９に示すコード１９３０などのプログラムコードを入力命令に適用して、本明細書に記載する機能を実行し、出力情報を生成することができる。この出力情報を既知の方法で、１つ以上の出力装置に適用することができる。この適用を目的として、処理システムは、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１７６】
このプログラムコードは、処理システムと通信するために高水準手続き型言語またはオブジェクト指向プログラミング言語で実装可能である。また、このプログラムコードを希望であれば、アセンブリ言語または機械語で実装することができる。実際には、本明細書に記載する機構はいずれの特定のプログラミング言語にその範囲を限定されるものではない。いずれの場合においても、この言語はコンパイラ型またはインタープリタ型言語とすることができる。
【０１７７】
少なくとも一実施形態の１つ以上の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に記憶された命令表現により実装可能である。この表現は、機械によって読み出されると、この機械にロジックを作成させて本明細書に記載の技法を実行させることができる。「ＩＰコア」として知られているこうした表現は有形機械可読媒体に記憶することができ、様々な顧客または製造設備に提供して、ロジックまたはプロセッサを実際に作成する生産機械にロードすることができる。
【０１７８】
こうした機械可読記憶媒体の例として、ハードディスクおよび、その他のフロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）および磁気光ディスクを含む型のディスクと、読み出し専用メモリ（ＲＯＭ）などの半導体デバイスと、動的ランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）と、静的ランダムアクセスメモリ（ＳＲＡＭ）と、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）と、フラッシュメモリと、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）と、相変化メモリ（ＰＣＭ）と、磁気または光カード、あるいは電子的命令の記憶に好適な他の媒体とを挙げられる記憶媒体を含む、機械または装置により製造または形成される物品の非一過性で有形の構成が挙げられるが、これらに限定されない。
【０１７９】
したがって、本発明の実施形態はまた、本明細書に記載の構造、回路、装置、プロセッサ、および／またはシステムの特徴を規定するハードウェア記述言語（ＨＤＬ）などの、命令または設計データを備えた非一過性有形機械可読媒体を含む。また、こうした実施形態をプログラム製品と呼ぶことができる。
【０１８０】
エミュレーション（バイナリ変換、コードモーフィングなど）
場合によっては、命令コンバータを使用して、１つの命令を１ソース命令セットから１ターゲット命令セットへ命令を変換することができる。例えば、その命令コンバータは、ある命令を、コアにより処理される１つ以上の他の命令に翻訳する（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、モーフする、エミュレートする、またはこの他の変換を行うことができる。この命令コンバータを、ソフトウェア、ハードディスク、ファームウェアまたはその組み合わせに実装可能である。この命令コンバータは、オンプロセッサ、オフプロセッサ、またはその一部でよい。
【０１８１】
図２２は、本発明の実施形態による、ソース命令セットの二進命令をターゲット命令セットの二進命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示の実施形態では、この命令コンバータはソフトウェア命令コンバータであるが、代わりに、この命令コンバータをソフトウェア、ファームウェア、ハードウェアまたはその様々な組み合わせで実装可能である。図２２は、高水準言語２２０２のプログラムをｘ８６コンパイラ２２０４でコンパイルすることで、ｘ８６二進コード２２０６を生成可能であることを示している。このｘ８６二進コード２２０６は、少なくとも１つのｘ８６命令セットコア２２１６を備えるプロセッサによりネイティブモードで実行することができる。少なくとも１つのｘ８６命令セットコア２２１６を有するこのプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するため、（１）インテルｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサ上で実行することを目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョンを互換性モードで実行または別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表している。このｘ８６コンパイラ２２０４は、追加のリンケージ処理の有無に関わらず、少なくとも１つのｘ８６命令セットコア２２１６を有するプロセッサ上で、実行可能なｘ８６二進コード２２０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図２２は高水準言語２２０２のプログラムを代替の命令セットコンパイラ２２０８を用いてコンパイルすることで、代替の命令セット二進コード２２１０を生成可能であることを示す。この代替の命令セット二進コード２２１０は、少なくとも１つのｘ８６命令セットコア２２１４も備えないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セットおよび／またはカリフォルニア州サニーベールのＡＲＭ  Ｈｏｌｄｉｎｇｓ社のＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行可能なものである。命令コンバータ２２１２は、ｘ８６二進コード２２０６を、ｘ８６命令セットコア２２１４の搭載のないプロセッサがネイティブモードで実行可能なコードに変換するために使用するものである。この変換後のコードは代替の命令セット二進コード２２１０と同じにはなりにくい。同一コードに変換できる命令コンバータの作成が難しいためである。しかし、変換後のコードは一般動作を実行し、代替命令セットからの命令で構成されるものとなる。したがって、命令コンバータ２２１２は、エミュレーション、シミュレーションまたは他のプロセスを介して、ｘ８６命令セットプロセッサもコアも有しないプロセッサまたは他の電子デバイスにｘ８６二進コード２２０６を実行させることのできるソフトウェア、ファームウェア、ハードウェアまたはその組み合わせを表している。
【０１８２】
図３〜１０のいずれに記載のコンポーネント、特徴および詳細内容も、任意に図１および図２に適用可能である。さらに、こうした装置のいずれに記載のコンポーネント、特徴および詳細もまた、複数の実施形態においてその装置で、および／またはその装置を用いて実行可能な方法に任意に適用可能である。本明細書に記載するいずれのプロセッサも本明細書に記載するいずれのコンピュータシステムに含めることが可能である。幾つかの実施形態によっては、命令が、本明細書で開示する命令フォーマットの特徴または詳細を有してもよい（例えば、ＶＥＸまたはＥＶＥＸフォーマット）。ただし、これは必須ではない。
【０１８３】
本明細書および特許請求の範囲では、動詞の「連結」および／または「接続」をその派生語と共に使用する場合がある。これらの用語は、互いに同義語としての意図で用いているのではなく、実施形態では、「接続」により、２つ以上の構成要素が互いに、直接物理的におよび／または電気的に接触していることを示すことができる。「連結」は、２つ以上の構成要素が互いに、直接物理的におよび／または電気的に接触していることを言う。しかし、「連結」は、２つ以上の構成要素が互いに直接接触していないが、それでも互いに協働するまたは相互作用することを意味することもできる。例えば、ある実行ユニットを１つ以上の介在構成要素を介してレジスタおよび／または復号ユニットと連結することができる。複数の図にわたり、矢印を用いて接続および連結を示している。
【０１８４】
本明細書および／または特許請求の範囲では、「ロジック」、「ユニット」、「モジュール」または「コンポーネント」という用語を使用してきた可能性がある。これらの用語はそれぞれ、ハードウェア、ファームウェア、ソフトウェアまたは様々なその組み合わせを指すために使用することができる。例示的な実施形態では、これらの用語それぞれは集積回路、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイスおよび様々なその組み合わせを指すことができる。幾つかの実施形態によっては、これらは少なくとも幾つかのハードウェア（例えば、トランジスタ、ゲート、他の回路コンポーネント）を含むことができる。
【０１８５】
「および／または」という用語を使用してきた可能性がある。本明細書で使用しているように、「および／または」は、一方、他方、または両方を意味する（例えば、Ａおよび／またはＢは、Ａ、Ｂ、またはＡとＢとの両方のいずれかを意味する）。
【０１８６】
上記の説明では、本実施形態を完全に理解できるように具体的な詳細を示している。しかし、実施形態によっては、その具体的詳細内容の一部を省いても実行することができる。本発明の範囲は、上記で説明した具体例によって規定されるものではなく、特許請求の範囲によってのみ規定されるものである。他の例では、説明の理解が曖昧にならないように、詳細を付与し、および／または詳細を付与せずに、既知の回路、構造、デバイスおよび動作をブロック図の形態に示した。適切と判断した場合、参照番号または参照番号の末尾番号を複数の図にわたり繰り返し用いている。これにより、特段の指示がなければ、また指示によらずとも明白でなければ、同様または同一の特徴を任意に装備可能な対応要素または類似要素を示している。
【０１８７】
演算によっては、ハードウェア構成要素によって実行可能な場合と、機械実行可能命令または回路実行可能命令で具現化可能な場合がある。こうした命令を用いることで、その演算を実行させる命令をプログラムされた機械、回路、またはハードウェア構成要素（例えば、プロセッサ、プロセッサの一部、回路）にこの演算を実行させることや、結果としてそれらがこの演算を実行することが可能になる。またこの演算は必要に応じてハードウェアおよびソフトウェアの組み合わせにより実行することもできる。プロセッサ、機械、回路またはハードウェアは、具体的な、または特定の回路、あるいは、この命令を実行および／または処理ならびにこの命令に応じて結果を記憶するよう動作可能な他のロジック（例えば、ファームウェアおよび／またはソフトウェアと組み合わせ可能性なハードウェア）を含むことができる。
【０１８８】
実施形態によっては、機械可読媒体を含む製造物品（例えば、コンピュータプログラム製品）を含む。この媒体は、それを含む機械に可読な形式で情報を提供する、例えば記憶する機構を含んでもよい。この機械可読媒体は、１つの命令または一連の命令を提供することができる、またはそれを媒体上に記憶しておくことができる。この命令は、機械によって実行された場合および／または実行されると、その機械に本明細書に開示する１つまたは複数の演算、方法あるいは技法を実行させるように、および／または結果として機械がそれを実行するように動作可能である。
【０１８９】
幾つかの実施形態によっては、機械可読媒体は非一過性機械可読記憶媒体を含んでもよい。例えば、非一過性機械可読記憶媒体は、フロッピー（登録商標）ディスク、光記憶媒体、光ディスク、光データ記憶装置、ＣＤ−ＲＯＭ、磁気ディスク、磁気光ディスク、読み出し専用メモリ（ＲＯＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発メモリ、不揮発データ記憶装置、非一過性メモリ、非一過性データ記憶装置などでよい。非一過性機械可読媒体は一時的な伝搬信号で構成されるものではない。幾つかの実施形態によっては、この記憶媒体は固体物などの有形媒体でよい。
【０１９０】
好適な機械の例として、汎用プロセッサ、専用プロセッサ、デジタルロジック回路、集積回路などが挙げられるが、それらに限定されない。さらに、好適な機械の他の例として、コンピュータシステムまたは、プロセッサ、デジタルロジック回路または集積回路を備える他の電子装置が挙げられる。こうしたコンピュータシステムまたは電子装置の例として、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワーク装置（例えば、ルータおよびスイッチ）、モバイルインターネット装置（ＭＩＤ）、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックスおよびビデオゲームコントローラが挙げられるが、それに限定されない。
【０１９１】
本明細書全体を通して「一実施形態」、「実施形態」、「１つ以上の実施形態」、「一部の実施形態」に言及することにより、例えば、本発明の実施に当たり、具体的な特徴をそこに含めることができるが、必ずしも含めなくてもよいことを示している。同様に、その記載時には、様々な特徴を１つの実施形態、１つの図、またはその記載の中にまとめて、本開示内容の整理および種々の発明態様の理解の補助とする場合がある。しかしこの開示方法は、本発明が各請求項に明示的に記載されているより多くの特徴の有することを要件とするとの意図の反映と解釈されるものではない。むしろ、以下の請求項が反映するように、発明の態様は、開示した実施形態１つに含まれるすべての特徴より少ないものである。したがって、「発明を実施するための形態」に続く「特許請求の範囲」は、各請求項が本発明の別々の実施形態として独立した状態でこの「発明を実施するための形態」に明示的に組み入れられている。
【０１９２】
例示的な実施形態
以下の実施例はさらに実施形態に関連する。これらの例に記載の明細事項は１つ以上の実施形態のいずれにも使用可能である。
【０１９３】
実施例１は、複数のパックデータレジスタと、命令を復号する復号ユニットとを含むプロセッサである。この命令は、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示す。また、この命令は、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す。この第１の複数のデータ要素に含まれるデータ要素それぞれが、対応位置にあって第２の複数のデータ要素に含まれる別々のデータ要素に対応する。この第１の複数のデータ要素に含まれる各データ要素のビット群はそれぞれ、第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。実行ユニットが、この複数のパックデータレジスタおよび復号ユニットに連結される。この実行ユニットは、その命令に応じて、この命令が示す宛先記憶位置に結果パックデータオペランドを記憶する。この結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む。
【０１９４】
実施例２は実施例１のプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第１のソースパックデータオペランドの奇数位置のビット群のみを、第２のソースパックデータオペランドの奇数位置の対応ビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０１９５】
実施例３は実施例１のプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第１のソースパックデータオペランドの偶数位置のビット群のみを、第２のソースパックデータオペランドの偶数位置の対応ビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０１９６】
実施例４は実施例１のプロセッサを含み、この場合、その復号ユニットが、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのどちらが結果パックデータオペランドに含まれるかを示す少なくとも１つの偶数奇数表示ビットを有する命令を復号するものである。また、実行ユニットが、その命令に応じて、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドの対応偶数位置のビット群と対応奇数位置のビット群とのうち示される一方のみを有する結果パックデータオペランドを記憶する。
【０１９７】
実施例５は実施例４のプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのうちの一方の最下位のビット群と第１のソースパックデータオペランドおよび第２のソースパックデータオペランドのうちの他方の最下位から２番目のビット群とのどちらか一方を最下位のビット群として有する結果パックデータオペランドを記憶する。該最下位のビット群は、少なくとも１つの偶数奇数表示ビットにより示される結果パックデータオペランドの最下位のビット群となる。
【０１９８】
実施例６は実施例４のプロセッサを含み、この場合、その復号ユニットが、少なくとも１つの偶数奇数表示ビットを有する即値を有する命令を復号する。
【０１９９】
実施例７は実施例１のプロセッサを含み、この場合、その復号ユニットが、第１のソースパックデータオペランドのビット群のサイズを示す少なくとも１つのビット群サイズ表示ビットを有する命令を復号する。
【０２００】
実施例８は実施例７のプロセッサを含み、この場合、その復号ユニットが、少なくとも２ビットサイズビット群、４ビットサイズビット群、および８ビットサイズビット群のいずれか１つであるものとして第１のソースパックデータオペランドのビット群のサイズを示す少なくとも１つのビット群サイズ表示ビットを有する命令を復号する。
【０２０１】
実施例９は実施例７のプロセッサを含み、この場合、その復号ユニットが、少なくとも１つのビット群サイズ表示ビットを有する即値を有する命令を復号する。
【０２０２】
実施例１０は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第１のソースパックデータオペランドの１つおきの１ビットサイズビット群を、第２のソースパックデータオペランドの１つおきのこ対応１ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０２０３】
実施例１１は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第１のソースパックデータオペランドの１つおきの２ビットサイズビット群を、第２のソースパックデータオペランドの１つおきの対応２ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０２０４】
実施例１２は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その実行ユニットがその命令に応じて、第１のソースパックデータオペランドの１つおきの４ビットサイズビット群を、第２のソースパックデータオペランドの１つおきの対応４ビットサイズビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０２０５】
実施例１３は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その復号ユニットが、６４ビットデータ要素および３２ビットデータ要素のうちの一方である第１の複数のデータ要素を有する第１のソースパックデータオペランドを示す命令を復号する。
【０２０６】
実施例１４は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その復号ユニットが、複数のマスク要素を有するソースパックデータ演算マスクを示す命令を復号する。
【０２０７】
実施例１５は実施例１４のプロセッサを含み、この場合、その復号ユニットが、ソースパックデータ演算マスクにあるマスク要素の少なくとも２倍の数のビット群を有する第１のソースパックデータオペランドを示す命令を復号する。
【０２０８】
実施例１６は実施例１〜９のいずれか１つのプロセッサを含み、この場合、その実行ユニットが、その命令に応じて、第１と第２のソースパックデータオペランドの一方に含まれる隣接ビット群のすべての対の中で、互いに隣接しているビット群の位置を交換する。
【０２０９】
実施例１７は、命令を受信することを含む、プロセッサで実行される方法である。この命令は、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示す。この命令は、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す。この第１の複数のデータ要素のデータ要素それぞれは、対応位置にある第２の複数のデータ要素の別々のデータ要素と対応する。この第１の複数のデータ要素が含む各データ要素のビット群はそれぞれ、第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。また、この方法は、その命令に応じて、宛先記憶位置に結果パックデータオペランドを記憶することを含む。この宛先記憶位置は、この命令により示される。この結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む。
【０２１０】
実施例１８は実施例１７の方法を含み、この場合、記憶することが、１ビットサイズビット群、２ビットサイズビット群、４ビットサイズビット群のうちの１つである第１のソースパックデータオペランドの奇数位置のビット群のみを、第２のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶することを含む。
【０２１１】
実施例１９は実施例１７の方法を含み、この場合、記憶することが、１ビットサイズビット群、２ビットサイズビット群、４ビットサイズビット群のうちの１つである第１のソースパックデータオペランドの偶数位置のビット群のみを、第２のソースパックデータオペランドの対応偶数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶することを含む。
【０２１２】
実施例２０は実施例１７の方法を含み、この場合、受信することが、第１のソースパックデータオペランドおよび第２のソースパックデータオペランドが含む対応偶数位置のビット群と対応奇数位置のビット群とのどちらが結果パックデータオペランドに記憶されるかを示す少なくとも１つの偶数奇数表示ビットを有する命令を受信することを含む。
【０２１３】
実施例２１は実施例１７の方法を含み、この場合、受信することが、１ビットサイズビット群、２ビットサイズビット群および４ビットサイズビット群から選択される少なくとも２つのサイズのいずれか一方であるものとして第１のソースパックデータオペランドのビット群のサイズを示す少なくとも１つのサイズ表示ビットを有する命令を受信することを含む。
【０２１４】
実施例２２は、相互接続部とその相互接続部に連結するプロセッサとを含む、命令を処理するシステムである。このプロセッサは、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示す命令を受信する。この命令は、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す。この第１の複数のデータ要素のデータ要素それぞれは、対応位置にある第２の複数のデータ要素の別々のデータ要素と対応する。この第１の複数のデータ要素が含む各データ要素のビット群それぞれは、第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。また、この命令は宛先記憶位置を示す。このプロセッサはこの命令に応じて、宛先記憶位置の結果パックデータオペランドを記憶する。この結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む。また、このシステムは、相互接続部と連結する動的ランダムアクセスメモリ（ＤＲＡＭ）を含む。このＤＲＡＭは行列転置を実行する１組の命令を記憶する。この１組の命令がプロセッサにより実行されると、第１のソースパックデータオペランドの少なくとも２つの異なる行列の少なくとも２列からのビット群を記憶することを含む演算をプロセッサに実行させる。
【０２１５】
実施例２３は実施例２２のシステムを含み、この場合、プロセッサが、その命令に応じて、第１のソースパックデータオペランドの奇数位置のビット群のみを第２のソースパックデータオペランドの対応奇数位置のビット群と交互に並べて含む結果パックデータオペランドを記憶する。
【０２１６】
実施例２４は、非一過性機械可読記憶媒体を含む製造物品である。この非一過性機械可読記憶媒体は、複数のビット群をそれぞれが有する第１の複数のデータ要素を有する第１のソースパックデータオペランドを示す命令を記憶する。また、この命令は、複数のビット群をそれぞれが有する第２の複数のデータ要素を有する第２のソースパックデータオペランドを示す。この第１の複数のデータ要素に含まれるデータ要素それぞれが、対応位置にあって第２の複数のデータ要素に含まれる別々のデータ要素に対応する。この第１の複数のデータ要素に含まれる各データ要素のビット群はそれぞれ、第２の複数のデータ要素が含む対応データ要素内で対応位置にある別々のビット群に対応する。この命令が機械によって実行されると、その機械は、この命令が示す宛先記憶位置に結果パックデータオペランドを記憶することを含む処理を実行する。この結果パックデータオペランドは、第１のソースパックデータオペランドの１つおきのビット群を、第２のソースパックデータオペランドの１つおきの対応ビット群と交互に並べて含む。
【０２１７】
実施例２５は、その命令が、そのビット群のサイズを示す少なくとも１つのビット群サイズ表示ビットを有する、実施例２４の製造物品を含む。
【０２１８】
実施例２６は、実施例１７〜２１のいずれか１つの方法を実行するよう動作可能なプロセッサまたは他の装置である。
【０２１９】
実施例２７は、実施例１７〜２１のいずれか１つの方法を実行する手段を含むプロセッサまたは他の装置である。
【０２２０】
実施例２８は、実施例１７〜２１のいずれか１つの方法を実行する複数のモジュールを含むプロセッサまたは他の装置である。
【０２２１】
実施例２９は、モジュールおよび／またはユニット、および／またはロジックおよび／または回路、および／または実施例１７〜２１のいずれか１つの方法を実行する手段の任意の組み合わせを含むプロセッサである。
【０２２２】
実施例３０は、命令を適宜記憶または提供する任意に非一過性な機械可読媒体を備える製造物品であり、この命令は、プロセッサ、コンピュータシステム、電子装置または他の機械により実行された場合および／または実行されたとき、実施例１７〜２１のいずれか１つの方法をこの機械に実行させるよう動作可能なものである。
【０２２３】
実施例３１は、バスまたは他の相互接続部と、この相互接続部に連結される実施例１〜１６のいずれか１つのプロセッサと、動的ランダムアクセスメモリ（ＤＲＡＭ）、ネットワークインタフェース、グラフィックスチップ、ワイヤレス通信チップ、汎欧州デジタル移動通信電話方式（ＧＳＭ（登録商標））アンテナ、相変化メモリ、およびビデオカメラから選択され、この相互接続部に連結される少なくとも１つの構成要素とを含むコンピュータシステム、他の電子装置、あるいは他の装置である。
【０２２４】
実施例３２は、実質的に本明細書に記載した通りのプロセッサまたは他の装置である。
【０２２５】
実施例３３は、実質的に本明細書に記載した通りの方法のいずれかを実行するよう動作可能なプロセッサまたは他の装置である。
【０２２６】
実施例３４は、実質的に本明細書に記載した通りのビット群インターリーブ命令のいずれかを実行するよう動作可能なプロセッサまたは他の装置である。
【０２２７】
実施例３５は、第１の命令セットの複数の命令を復号する復号ユニットを含むプロセッサまたは他の装置である。この復号ユニットは、第１の命令をエミュレートするこの第１の命令セットの１つ以上の命令を受信する。この第１の命令は、実質的に本明細に記載する通りのいずれのビット群インターリーブ命令であってもよく、第２の異なる命令セットになるものである。また、このプロセッサまたは他の装置は、この復号ユニットと連結する１つ以上の実行ユニットを含んで、第１の命令セットの１つ以上の命令を実行する。この１つ以上の実行ユニットは、第１の命令セットの１つ以上の命令に応じて１つの宛先に１つの結果を記憶する。この結果は、第１の命令に関して実質的に本明細書に開示した通りの結果のいずれかを含むことができる。
【０２２８】
実施例３６は、第１の命令セットの複数の命令を復号する復号ユニットを有するプロセッサを含むコンピュータシステムまたは他の電子装置である。また、このプロセッサは、１つ以上の実行ユニットを有する。この電子装置はさらに、このプロセッサと連結する記憶装置を含む。この記憶装置は、第１の命令を記憶する。この命令は、実質的に本明細書に記載する通りのビット群インターリーブ命令のいずれであってもよく、これとは異なる第２の命令セットとなるものである。この記憶装置はまた、第１の命令を第１の命令セットの１つ以上の命令に変換するために複数の命令を記憶する。この第１の命令セットの１つ以上の命令は、このプロセッサにより実行されると、このプロセッサに１つの宛先に１つの結果を記憶させる。この結果は、この第１の命令について実質的に本明細書に開示した通りの結果のいずれかを含むことができる。
【図１】
0006508850.tif 000007
【図２】
0006508850.tif 000008
【図３】
0006508850.tif 000009
【図４】
0006508850.tif 000010
【図５】
0006508850.tif 000011
【図６】
0006508850.tif 000012
【図７】
0006508850.tif 000013
【図８】
0006508850.tif 000014
【図９】
0006508850.tif 000015
【図１０】
0006508850.tif 000016
【図１１Ａ】
0006508850.tif 000017
【図１１Ｂ】
0006508850.tif 000018
【図１１Ｃ】
0006508850.tif 000019
【図１２Ａ】
0006508850.tif 000020
【図１２Ｂ】
0006508850.tif 000021
【図１３Ａ】
0006508850.tif 000022
【図１３Ｂ】
0006508850.tif 000023
【図１３Ｃ】
0006508850.tif 000024
【図１３Ｄ】
0006508850.tif 000025
【図１４】
0006508850.tif 000026
【図１５Ａ】
0006508850.tif 000027
【図１５Ｂ】
0006508850.tif 000028
【図１６Ａ】
0006508850.tif 000029
【図１６Ｂ】
0006508850.tif 000030
【図１７】
0006508850.tif 000031
【図１８】
0006508850.tif 000032
【図１９】
0006508850.tif 000033
【図２０】
0006508850.tif 000034
【図２１】
0006508850.tif 000035
【図２２】
0006508850.tif 000036