【文献】
インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・マニュアル 中巻 命令セット・リファレンス,インテル株式会社,1997年,初版,Pages:2-1〜2-6
【文献】
吉田幸作,SH7045Fの命令セットとアセンブラ・プログラミング (SH7045の命令の特徴)と(SH7045の命令セット),トランジスタ技術SPECIAL,CQ出版株式会社,2003年 1月 1日,No:81,Pages:43〜53
(58)【調査した分野】(Int.Cl.,DB名)
前記複数のメモリアクセスサイズは、1バイト、2バイト、4バイト、8バイト、16バイト、32バイト及び64バイトである、請求項1乃至11何れか一項記載の装置。
【発明を実施するための形態】
【0012】
以下の説明では、ロジック実現形態、オペコード、オペランド指定方法、リソースパーティション化/共有化/複製実現形態、システムコンポーネントのタイプ及び相互関係並びにロジックパーティション化/統合選択などの多数の具体的詳細が、本発明のより完全な理解を提供するため与えられる。しかしながら、本発明はこのような具体的な詳細なしに実施されてもよいことが当業者に理解されるであろう。他の例では、本発明を不明りょうにしないため、制御構造、ゲートレベル回路及びフルソフトウェア命令シーケンスは図示されていない。当業者は、包含された説明によって過度の実験なく適切な機能を実現可能であろう。
【0013】
本明細書を通じた“一実施例”、“実施例”又は“1以上の実施例”などの表現は、ある特徴が本発明の実施例の実現に含まれてもよいが、すべての実施例が当該特徴を必ずしも含む必要がないことを意味することがまた、理解されるべきである。同様に、本説明における各種特徴は、本開示を簡素化し、様々な発明の特徴の理解に資するため、単一の実施例、図面又はその説明に一緒にグループ化されることもある。さらに、ある特徴、構成又は特性がある実施例に関して説明されるとき、明示的に説明されているか否かにかかわらず、他の実施例に関して当該特徴、構成又は特性を実行することは当業者の知識の範囲内であることが主張される。しかしながら、この開示の方法は、各請求項に明示的に記載されるよりも本発明がより多くの特徴を要求する意図を反映するものとして解釈されるべきでない。むしろ、以下の請求項が反映するように、発明の態様は単一の開示された実施例のすべての特徴より少ないものであってもよい。従って、詳細な説明に後続する請求項はこの詳細な説明に明示的に含まれ、各請求項が本発明の独立した実施例として自立する。
【0014】
以下の説明及び請求項では、“結合”及び“接続”という用語が、それらの派生語と共に利用されてもよい。これらの用語は互いに同義語として意図されてないことが理解されるべきである。“結合”は、互いに直接的な物理的又は電気的セッション状態にあってもよいし、又はなくてもよい2以上の要素が互いに連係又はやりとりすることを示すのに利用される。“接続”は、互いに結合された2以上の要素の間の通信の確立を示すのに利用される。
【0015】
フロー図の処理は、ブロック図の例示的な実施例を参照して説明される。しかしながら、フロー図の処理はブロック図を参照して説明された以外の本発明の実施例により実行可能であり、ブロック図を参照して説明される実施例はフロー図を参照して説明されたものと異なる処理を実行可能であることが理解されるべきである。
【0016】
理解を容易にするため、破線はあるアイテムの任意的な性質(例えば、本発明の所与の実現形態によりサポートされていない特徴、所与の実現形態によりサポートされているが、ある状況では利用されるが、他の状況では利用されない特徴など)を示すため図面において利用されている。
【0017】
ベクトルフレンドリ命令フォーマット−図1〜16
ベクトルフレンドリ命令フォーマットは、ベクトル命令に適した命令である(例えば、ベクトル処理に特有のフィールドがあるなど)。ベクトル処理とスカラ処理との双方がベクトルフレンドリ命令フォーマットを介しサポートされる実施例が説明されるが、他の実施例はベクトルフレンドリ命令フォーマットによるベクトル処理のみを利用する。
[命令フォーマットの個数−
図1A〜1B]
・1つの命令フォーマット−
図1A
図1Aは、本発明の一実施例によるベクトルフレンドリ命令フォーマットによる命令のみを有する命令ストリームを示すブロック図である。命令ストリームは、すべてがベクトルフレンドリフォーマット100A〜100JによるJ個の命令のシーケンスを含む。本発明の一実施例では、プロセッサは、ベクトル命令フォーマットのみをサポートし、当該命令ストリームを実行可能である。
・複数の命令フォーマット−
図1B
図1Bは、本発明の一実施例による複数の命令フォーマットによる命令を有する命令ストリームを示すブロック図である。命令ストリームの各命令は、ベクトルフレンドリ命令フォーマット、第2フォーマット又は第3フォーマットにより表現される。命令ストリームは、J個の命令110A〜110Jを有する。本発明の一実施例では、プロセッサは、複数の命令フォーマット(
図1Bに示されるフォーマットを含む)をサポートし、
図1A〜1Bの双方の命令ストリームを実行可能である。
[例示的な汎用的ベクトルフレンドリ命令フォーマット−
図2A〜B]
図2A〜Bは、本発明の実施例による汎用的ベクトルフレンドリ命令フォーマット及びそれの命令テンプレートを示すブロック図である。
図2Aは、本発明の実施例による汎用的ベクトルフレンドリ命令フォーマット及びそのクラスA命令テンプレートを示すブロック図であり、
図2Bは、本発明の実施例による汎用的ベクトルフレンドリ命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスA及びクラスB命令テンプレートとして定義される汎用的ベクトルフレンドリ命令フォーマット200は、その双方が非メモリアクセス205の命令テンプレートとメモリアクセス220の命令テンプレートとを含む。ベクトルフレンドリ命令フォーマットに関する汎用的という用語は、何れか特定の命令セットに結び付けされていない命令フォーマットを参照する。ベクトルフレンドリ命令フォーマットの命令がレジスタ(非メモリアクセス205の命令テンプレート)又はレジスタ/メモリ(メモリアクセス220の命令テンプレート)をソースとするベクトルに対して実行される実施例が説明される一方、本発明の他の実施例はこれらの1つしかサポートしなくてもよい。また、ベクトル命令フォーマットによるロード及びストア命令がある本発明の実施例が説明される一方、他の実施例はさらに又は代わりに、レジスタに及びレジスタからベクトルを移動する異なる命令フォーマットによる命令を有する(メモリからレジスタへ、レジスタからメモリへ、レジスタ間など)。さらに、2つのクラスの命令テンプレートをサポートする本発明の実施例が説明される一方、他の実施例はこれらの1つのみ又は2より多くをサポートしてもよい。
【0018】
ベクトルフレンドリ命令フォーマットが、32ビット(4バイト)又は64ビット(8バイト)データ要素幅(又はサイズ)を有する64バイトベクトルオペランド長(又はサイズ)(及び64バイトベクトルは16ダブルワードサイズ要素又は8クワドワードサイズ要素から構成される)、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バイトベクトルオペランドなど)をサポートしてもよい。
【0019】
図2AのクラスA命令テンプレートは、1)非メモリアクセス205の命令テンプレート内には、非メモリアクセスフルラウンド制御タイプ処理210の命令テンプレートと、非メモリアクセスデータ変換タイプ処理215の命令テンプレートとが示され、2)メモリアクセス220の命令テンプレート内には、メモリアクセス一時的225命令テンプレートとメモリアクセス非一時的230命令テンプレートとが示される、ことを含む。
図2BのクラスB命令テンプレートは、1)非メモリアクセス205命令テンプレート内には、非メモリアクセスライトマスク制御パーシャルラウンド制御タイプ処理212命令テンプレートと、非メモリアクセスライトマスク制御vsizeタイプ処理212命令テンプレートと、非メモリアクセスライトマスク制御vsizeタイプ処理217命令テンプレートとが示され、2)メモリアクセス220命令テンプレート内には、メモリアクセスライトマスク制御227命令テンプレートが示される、ことを含む。
・フォーマット
汎用的ベクトルフレンドリ命令フォーマット200は、
図2A〜Bに示される順序により以下でリストされたフィールドを含む。
【0020】
フォーマットフィールド240−当該フィールドの特定の値(命令フォーマット識別子の値)は、ベクトルフレンドリ命令フォーマットと、命令ストリームのベクトルフレンドリ命令フォーマットの命令の発生とを一意的に特定する。従って、フォーマットフィールド240のコンテンツは、第1命令フォーマットの命令の発生と他の命令フォーマットの命令の発生とを区別し、これにより、ベクトルフレンドリ命令フォーマットの他の命令フォーマットを有する命令セットへの導入を可能にする。また、当該フィールドは、それが汎用的ベクトルフレンドリ命令フォーマットしか有さない命令セットについて不要であるという点で任意的である。
【0021】
ベース処理フィールド242−それのコンテンツは、異なるベース処理を区別する。後述されるように、ベース処理フィールド242は、オペコードフィールドを含み、及び/又はその一部であってもよい。
【0022】
レジスタインデックスフィールド244−それのコンテンツは、直接的又はアドレス生成を介し、レジスタ又はメモリにある場合、ソース及びデスティネーションオペランドの位置を特定する。これらは、P×Q(32×512など)レジスタファイルからN個のレジスタを選択するのに十分な個数のビットを含む。一実施例では、Nは3個までソースレジスタと1つのデスティネーションレジスタとであってもよいが、他の実施例は、より多く又はより少ないソース及びデスティネーションレジスタをサポートしてもよい(例えば、2つまでのソースをサポートしてもよく、これらのソースの1つがまたデスティネーションとして機能し、3つまでのソースをサポートしてもよく、これらのソースの1つがまたデスティネーションとして機能し、2つまでのソースと1つのデスティネーションをサポートしてもよい)。一実施例では、P=32であるが、他の実施例は、より多くの又はより少ないレジスタ(16個など)をサポートしてもよい。一実施例では、Q=512ビットであるが、他の実施例は、より多く又はより少ないビット(128、1024など)をサポートしてもよい。
【0023】
モディファイアフィールド246−それのコンテンツは、メモリアクセスを指定する汎用的ベクトル命令フォーマットの命令の発生と、それを指定しないものとを、すなわち、非メモリアクセス205命令テンプレートとメモリアクセス220命令テンプレートとの間を区別する。メモリアクセス処理はメモリ階層との間でリード及びライトを実行するが(いくつかのケースでは、レジスタの値を用いたソース及び/又はデスティネーションアドレス)、非メモリアクセス処理はこれらを実行しない(例えば、ソース及びデスティネーションはレジスタである)。一実施例では、当該フィールドはまたメモリアドレス計算を実行するための3つの異なる方法を選択するが、他の実施例は、メモリアドレス計算を実行するためのより多く、より少なく又は異なる方法をサポートしてもよい。
【0024】
拡張処理フィールド250−それのコンテンツは、ベース処理に加えて実行される各種の異なる処理の何れかを区別する。当該フィールドは、コンテクストに特有のものである。本発明の一実施例では、当該フィールドは、クラスフィールド268、アルファフィールド252及びベータフィールド254に分割される。拡張処理フィールドは、共通する処理グループが2、3又は4個の命令でなく単一の命令により実行されることを可能にする。拡張フィールド250を利用して要求される命令の個数を低減するいくつかの命令の例(これらの名称は以降でより詳細に説明される)が後述される。
【0025】
【表1】
ただし、[rax]はアドレス生成用の利用されるベースポインタであり、{}はデータ操作フィールドにより指定される変換処理を示す(以下でより詳細に説明される)
スケールフィールド260−それのコンテンツは、メモリアドレス生成のためのインデックスフィールドのコンテンツのスケーリングを可能にする(例えば、2
scale*index+baseを利用するアドレス生成のためなど)。
【0026】
ディスプレースメントフィールド262A−それのオンテンツは、メモリアドレス生成の一部として利用される(例えば、2
scale*index+base+displacementを利用するアドレス生成のためなど)。
【0027】
ディスプレースメントファクタフィールド262B(ディスプレースメントファクタフィールド262B上の直接的なディスプレースメントフィールド262Aの並置は、一方又は他方が利用されることを示すことに留意されたい)−それのコンテンツはアドレス生成の一部として利用され、それはメモリアクセスのサイズ(N)によってスケーリングされるべきディスプレースメントファクタを指定する−ただし、Nはメモリアドレスにおけるバイト数である(例えば、2
scale*index+base+scaled displacementを利用したアドレス生成のためなど)。冗長な低オーダビットは無視され、ディスプレースメントファクタフィールドのコンテンツが、有効アドレスを計算するのに利用される最終的なディスプレースメントを生成するため、メモリオペランドのトータルサイズ(N)と乗算される。Nの値は、後述されるフルオペコードフィールド274(後述される)及びデータ操作フィールド254Cに基づきランタイム時にプロセッサハードウェアにより決定される。ディスプレースメントフィールド262A及びディスプレースメントファクタフィールド262Bは、それらが非メモリアクセス205命令テンプレートのため利用されず、及び/又は異なる実施例がこれら2つの1つしか又は何れも実現しなくてもよいという意味で任意的である。
【0028】
データ要素幅フィールド264−それのコンテンツは、データ要素幅の何れの数が利用されるべきか区別する(いくつかの実施例では、すべての命令について、他の実施例では、命令の一部のみについて)。当該フィールドは、1つのデータ要素幅しかサポートされていない場合、及び/又はオペコードのある態様を利用してデータ要素幅がサポートされる場合、それは不要であるという意味で任意的である。
【0029】
ライトマスクフィールド270−それのコンテンツは、データ要素位置単位で。デスティネーションベクトルオペランドのデータ要素位置がベース処理及び拡張処理の結果を反映するか制御する。クラスA命令テンプレートは、マージング−ライトマスキングをサポートする一方、クラスB命令テンプレートは、マージング−ライトマスキングとゼロ化−ライトマスキングとの双方をサポートする。マージングすると、ベクトルマスクは、デスティネーションの何れかの要素セットが(ベース処理及び拡張処理により指定される)何れかの処理の実行中に更新からプロテクトされることを可能にし、他の実施例では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保存する。他方、ゼロ化のとき、ベクトルマスクは、デスティネーションの何れかの要素セットが(ベース処理及び拡張処理により指定される)何れかの処理の実行中にゼロ化されることを可能にし、一実施例では、デスティネーションの要素は、対応するマスクビットが0の値を有するとき、0に設定される。この機能のサブセットは、実行される処理のベクトル長を制御する能力である(すなわち、要素のスパンが最初から最後まで変更される)。しかしながら、変更される要素は連続的であることは必要でない。従って、ライトマスクフィールド270は、ロード、ストア、算術的、論理的などを含むパーシャルベクトル処理を可能にする。また、当該マスキングは、フォルト抑制に利用可能である(すなわち、フォルトを生じさせる可能性のある/生じさせるであろう何れかの処理の結果の受信を防ぐためのデスティネーションのデータ要素位置をマスキングすることによって、−例えば、メモリのベクトルがページ境界をクロスし、第2ページでなく第1ページがページフォルトを生じさせることを仮定すると、第1ページにあるベクトルのすべてのデータ要素がライトマスクによりマスキングされる場合、ページフォルトは無視できる)。さらに、ライトマスクは、特定タイプの条件ステートメントを含む“ループのベクトル化”を可能にする。ライトマスクフィールド270のコンテンツが利用すべきライトマスクを含む複数のライトマスクレジスタの1つを選択する本発明の実施例が説明されるが(及びライトマスクフィールド270のコンテンツは、実行されるマスキングを間接的に特定する)、他の実施例はさらに又は代わりに、マスクライトフィールド270のコンテンツが実行されるマスキングを間接的に指定することを可能にする。さらに、1)レジスタリネーミングパイプライン段階中、デスティネーションはもはやインプリシットなソースでないため、デスティネーションオペランドがまたソースでない命令(非三項命令とも呼ぶ)に対して利用され(処理結果でない何れかのデータ要素(何れかのマスクされたデータ要素)がゼロ化されるため、現在のデスティネーションレジスタからのデータ要素はリネームされたデスティネーションレジスタにコピーされる必要はなく、又は当該処理と共に搬送される必要もない)、2)ライトバック段階中、ゼロが書き込まれているとき、ゼロ化はパフォーマンスの向上を可能にする。
【0030】
即時(Immediate)フィールド272−それのコンテンツは即時の指定を可能にする。当該フィールドは、それが即時をサポートしない汎用的ベクトルフレンドリフォーマットの実現形態に存在せず、即時を利用しない命令に存在しないという意味で任意的である。
・命令テンプレートクラス選択
クラスフィールド268−それのコンテンツは命令の異なるクラスを区別する。
図2A〜Bを参照して、当該フィールドのコンテンツはクラスA命令とクラスB命令との間で選択する。
図2A〜Bでは、丸められた四隅が、特定の値がフィールドにあることを示すのに利用される(例えば、
図2A〜Bにおけるクラスフィールド268のクラスA268A及びクラスB268Bなど)。
・クラスAの非メモリアクセス命令テンプレート
クラスAの非メモリアクセス205命令テンプレートのケースでは、アルファフィールド252はRSフィールド252Aとして解釈され、それのコンテンツは、異なる拡張処理タイプの何れが実行されるべきか区別し(例えば、ラウンド252A.1及び変換252A.2がそれぞれ非メモリアクセスラウンドタイプ処理210命令テンプレートと非メモリアクセスデータ変換タイプ処理215命令テンプレートとのそれぞれについて指定される)、ベータフィールド254は、指定されたタイプの処理の何れが実行されるべきか区別する。
図2において、丸められたコーナーブロックは、指定された値が存在することを示すのに利用される(例えば、モディファイアフィールド246の非メモリアクセス246A、アルファフィールド252/rsフィールド252Aのラウンド252A.1及びデータ変換252A.2など)。非メモリアクセス205命令テンプレートでは、スケールフィールド260、ディスプレースメントフィールド262A及びディスプレースメントスケールフィールド262Bは存在しない。
・非メモリアクセス命令テンプレート−フルラウンド制御タイプ処理
非メモリアクセスフルラウンド制御タイプ処理210命令テンプレートでは、ベータフィールド254はラウンド制御フィールド254Aとして解釈され、それのコンテンツはスタティックなラウンド化を提供する。本発明の説明される実施例では、ラウンド制御フィールド254Aは、SAE(Suppress All floating point Exceptions)フィールド256及びラウンド処理制御フィールド258を含むが、他の実施例は、これらのコンセプトを同一のフィールドに符号化することをサポートか、又はこれらのコンセプト/フィールドの一方又は他方のみを有することをサポートしてもよい(例えば、ラウンド処理制御フィールド258のみを有してもよい)。
【0031】
SAEフィールド256−それのコンテンツは、例外イベント報告を不可にするか否か区別する。抑制が有効化されていることをSAEフィールド256のコンテンツが示すとき、所与の命令は何れのタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを起動しない。
【0032】
ラウンド処理制御フィールド258−それのコンテンツは、ラウンド処理のグループの何れが実行されるか区別する(Round−up、Round−down、Round−toward−zero、Round−to−nearestなど)。従って、ラウンド処理制御フィールド258は、命令単位でラウンド化モードの変更を可能にし、これが要求されるときに特に有用である。プロセッサがラウンド化モードを指定するための制御レジスタを有する本発明の一実施例では、ラウンド処理制御フィールド250のコンテンツは、当該レジスタ値を上書きする(当該制御レジスタに対して保存−変更―復元を実行する必要なくラウンド化モードを選択可能であることが効果的である)。
・非メモリアクセス命令テンプレート−データ変換タイプ処理
非メモリアクセスデータ変換タイプ処理215命令テンプレートでは、ベータフィールド254はデータ変換フィールド254Bとして解釈され、それのコンテンツは、複数のデータ変換の何れが実行されるべきか区別する(例えば、非データ変換、スウィズル(swizzle)、ブロードキャストなど)。
・クラスAのメモリアクセス命令テンプレート
クラスAのメモリアクセス220命令テンプレートのケースでは、アルファフィールド252はイビクトヒントフィールド252Bとして解釈され、それのコンテンツは、イビクトヒントの何れが利用されるべきか区別し(
図2Aでは、一時的252B.1及び非一時的252B.2がそれぞれ、メモリアクセス一時的225命令テンプレートとメモリアクセス非一時的230命令テンプレートとについて指定される)、ベータフィールド254がデータ操作フィールド254Cとして解釈され、それのコンテンツは、複数のデータ操作処理(プリミティブとして知られる)の何れが実行されるべきか区別する(例えば、非操作、ブロードキャスト、ソースのアップ変換及びデスティネーションのダウン変換など)。メモリアクセス220命令テンプレートは、スケールフィールド260と、任意的にはディスプレースメントフィールド262A又はディスプレースメントスケールフィールド262Bとを含む。
【0033】
ベクトルメモリ命令は、変換サポートによるメモリからのベクトルロードとメモリへのベクトルストアとを実行する。通常のベクトル命令について、ベクトルメモリ命令はデータ要素毎にメモリとの間でデータを転送し、実際の転送される要素は、ライトマスクとして選択されたベクトルマスクのコンテンツにより指示される。
図2Aにおいて、丸められた四隅は、特定の値がフィールドに存在することを示すのに利用される(例えば、モディファイアフィールド246のメモリアクセス246B、アルファフィールド252/イビクトヒントフィールド252Bの一時的252B.1及び非一時的252B.2など)。
・メモリアクセス命令テンプレート−一時的
一時的データは、キャッシュ処理から利益を享受するのに十分すぐに再利用される可能性のあるデータである。すなわち、しかしながら、ヒント及び異なるプロセッサは、ヒントを完全に無視することを含む異なる方法によりそれを実現してもよい。
・メモリアクセス命令テンプレート−非一時的
非一時的データは、第1レベルキャッシュへのキャッシュ処理から利益を享受するのに十分すぐに再利用される可能性のあるデータであり、イビクションについてプライオリティが与えられるべきである。すなわち、しかしながら、ヒント及び異なるプロセッサは、ヒントを完全に無視することを含む異なる方法によりそれを実現してもよい。
・クラスBの命令テンプレート
クラスBの命令テンプレートのケースでは、アルファフィールド252はライトマスク制御(Z)フィールド252Cとして解釈され、それのコンテンツは、ライトマスクフィールド270により制御されるライトマスキングがマージング又はゼロ化であるべきであるか区別する。
・クラスBの非メモリアクセス命令テンプレート
クラスBの非メモリアクセス205命令テンプレートのケースでは、ベータフィールド254の一部はRLフィールド257Aとして解釈され、それのコンテンツは、異なる拡張処理タイプの何れが実行されるべきか区別し(例えば、ラウンド257A.1及びベクトル長(VSIZE)257A.2はそれぞれ、非メモリアクセスライトマスク制御パーシャルラウンド制御タイプ処理212命令テンプレートと、非メモリアクセスライトマスク制御VSIZEタイプ処理217命令テンプレートとについて指定される)、ベータフィールド254の残りは、指定されたタイプの処理の何れが実行されるべきか区別する。
図2において、丸められたコーナーブロックは、特定の値が存在することを示すのに利用される(例えば、モディファイアフィールド246の非メモリアクセス246A、RLフィールド257Aのラウンド257A.1及びVSIZE257A.2など)。非メモリアクセス205命令テンプレートでは、スケールフィールド260、ディスプレースメントフィールド262A及びディスプレースメントスケールフィールド262Bはない。
・非メモリアクセス命令テンプレート−ライトマスク制御パーシャルラウンド制御タイプ処理
非メモリアクセスライトマスク制御パーシャルラウンド制御タイプ処理210命令テンプレートでは、ベータフィールド254の残りはラウンド処理フィールド259Aとして解釈され、例外イベント報告は不可とされる(所与の命令は何れのタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを起動しない)。
【0034】
ラウンド処理制御フィールド259A−ラウンド処理制御フィールド258と同様に、それのコンテンツはラウンド又は丸め処理のグループの何れが実行されるべきか区別する(例えば、Round−up、Round−down、Round−toward−zero及びRound−to−nearestなど)。従って、ラウンド処理制御フィールド259Aは、命令単位でラウンド化モードの変更を可能にし、これが要求されるときに特に有用である。プロセッサがラウンド化モードを指定するため制御レジスタを有する本発明の一実施例では、ラウンド処理制御フィールド250のコンテンツは、レジスタ値を無効にする。(制御レジスタに対して保存・変更・復元を実行する必要なくラウンド化モードを選択できることが効果的である。)
・非メモリアクセス命令テンプレート−ライトマスク制御VSIZEタイプ処理
非メモリアクセスライトマスク制御VSIZEタイプ処理217命令テンプレートでは、ベータフィールド254の残りはベクトル長フィールド259Bとして解釈され、それのコンテンツは実行対象の複数のデータベクトル長が何れであるか区別する(例えば、128、256又は512バイトなど)。
・クラスBのメモリアクセス命令テンプレート
クラスAのメモリアクセス220命令テンプレートのケースでは、ベータフィールド254の一部はブロードキャストフィールド257Bとして解釈され、それのコンテンツはブロードキャストタイプデータ操作処理が実行されるべきか区別し、ベータフィールド254の残りはベクトル長フィールド259Bとして解釈される。メモリアクセス220命令テンプレートは、スケールフィールド260と、任意的にはディスプレースメントフィールド262A又はディスプレースメントスケールフィールド262Bとを有する。
[フィールドに関する追加コメント]
汎用的ベクトルフレンドリ命令フォーマット200に関して、フォーマットフィールド240、ベース処理フィールド242及びデータ要素幅フィールド264を含むフルオペコードフィールド274が示される。フルオペコードフィールド274がこれらのフィールドのすべてを含む一実施例が示されるが、フルオペコードフィールド274は、それらのすべてを必ずしもサポートしない実施例においては、これらのフィールドのすべてより少なくしか有さない。フルオペコードフィールド274は、処理コードを提供する。
【0035】
拡張処理フィールド250、データ要素幅フィールド264及びライトマスクフィールド270は、これらの特徴が汎用的ベクトルフレンドリ命令フォーマットによる命令単位で指定されることを可能にする。
【0036】
ライトマスクフィールドとデータ要素幅フィールドとの組み合わせは、異なるデータ要素幅に基づきマスクが適用されることを可能にするという点で、タイプ化された命令を生成する。
【0037】
命令フォーマットは、他のフィールドのコンテンツに基づき異なる目的のため異なるフィールドを再利用するため、相対的に少数のビットしか必要としない。例えば、1つの観点は、モディファイアフィールドのコンテンツは
図2A〜Bの非メモリアクセス205命令テンプレートとメモリアクセス2250命令テンプレートとの間で選択する一方、クラスフィールド268のコンテンツは、これらの非メモリアクセス205命令テンプレート内で
図2Aの命令テンプレート210/215と
図2Bの212/217との間で選択し、クラスフィールド268のコンテンツは、これらのメモリアクセス220命令テンプレート内で
図2Aの命令テンプレート225/230と
図2Bの227との間で選択する。他の観点から、クラスフィールド268のコンテンツは、
図2A及び2BのクラスAとクラスBとの命令テンプレートの間で選択し、モディファイアフィールドのコンテンツは、これらのクラスA命令テンプレート内で
図2Aの命令テンプレート205と220との間で選択し、モディファイアフィールドのコンテンツは、これらのクラスB命令テンプレート内で
図2Bの命令テンプレート205と220との間で選択する。クラスA命令テンプレートを示すクラスフィールドのコンテンツのケースでは、モディファイアフィールド246のコンテンツは、アルファフィールド252の解釈を選択する(rsフィールド252AとEHフィールド252Bとの間で)。関連する方法では、モディファイアフィールド246とクラスフィールド268とのコンテンツは、アルファフィールドがrsフィールド252A、EHフィールド252B又はライトマスク制御(Z)フィールド252Cとして解釈されるか選択した。クラスA非メモリアクセス処理を示すクラス及びモディファイアフィールドのケースでは、拡張フィールドのベータフィールドの解釈は、rsフィールドのコンテンツに基づき変化し、クラスB非メモリアクセス処理を示すクラス及びモディファイアフィールドのケースでは、ベータフィールドの解釈はRLフィールドのコンテンツに依存する。クラスAメモリアクセス処理を示すクラス及びモディファイアフィールドのケースでは、拡張フィールドのベータフィールドの解釈はベース処理フィールドのコンテンツに基づき変化し、クラスBメモリアクセス処理を示すクラス及びモディファイアフィールドのケースでは、拡張フィールドのベータフィールドのブロードキャストフィールド257Bの解釈は、ベース処理フィールドのコンテンツに基づき変化する。従って、ベース処理フィールド、モディファイアフィールド及び拡張処理フィールドの組み合わせは、より広範な拡張処理が指定されることを可能にする。
【0038】
クラスA及びクラスB内に検出される各種命令テンプレートは、異なる状況において有用である。クラスBは、ゼロ化・ライトマスキング又はより小さなベクトル長がパフォーマンスの理由により所望されるときに有用である。例えば、ゼロ化は、デスティネーションと人工的にマージする必要がもはやなくなるため、リネーム処理が利用されるときの偽の従属性を回避することを可能にし、他の例として、ベクトル長制御は、ベクトルマスクによってより短いベクトルサイズをエミュレートするとき、ストア・ロード転送問題を容易にする。クラスAは、1)ラウンド化モード制御を同時に使用しながら浮動小数点例外を可能にし(すなわち、SAEフィールドのコンテンツがnoを示すとき)、2)アップ変換、スウィズル、スワップ及び/又はダウン変換を利用可能であり、3)グラフィックスデータタイプに対して実行されることが所望されるときに有用である。例えば、アップ変換、スウィズル、スワップ、ダウン変換及びグラフィックデータタイプは、異なるフォーマットによりソースと動作するときに要求される命令数を低減し、他の例として、例外を可能にすることは、指示されたラウンド化モードとの完全なIEEE準拠性を提供する。また、本発明のいくつかの実施例では、異なるプロセッサ又はプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ又は双方のクラスをサポートしてもよい。例えば、汎用的な計算に対して意図されたハイパフォーマンス汎用的アウト・オブ・オーダコアはクラスBのみをサポートし、グラフィック及び/又は科学的(スループット)計算に対して主として意図されたコアは、クラスAのみをサポートし、双方に対して意図されたコアは双方をサポートしてもよい(もちろん、双方のクラスカラのテンプレートと命令とのある混合を有するが、双方のクラスカラのすべてのテンプレートと命令とを必ずしも有さないコアは、本発明の範囲内である)。また、単一のプロセッサが複数のコアを有してもよく、そのすべてが同一のクラスをサポートするか、又は異なるコアが異なるクラスをサポートしてもよい。例えば、別個のグラフィックコア及び汎用コアを備えたプロセッサにおいて、グラフィック及び/又は科学的計算に対して主として意図されたグラフィックコアの1つはクラスAしかサポートせず、汎用コアの1以上は、クラスBのみをサポートする汎用計算に対して意図されたアウト・オブ・オーダ例外及びレジスタリネーム処理を備えたハイパフォーマンス汎用コアであってもよい。別個のグラフィックコアを有しない他のプロセッサは、クラスAとクラスBとの双方をサポートする1以上の汎用的なイン・オーダ又はアウト・オブ・オーダコアを有してもよい。もちろん、1つのクラスカラの特徴はまた、本発明の異なる実施例では他のクラスにおいて実現されてもよい。ハイレベル言語により記述されたプログラムは、1)実行用のターゲットプロセッサによりサポートされるクラスの命令のみを有するフォーム、又は2)すべてのクラスの命令の異なる組み合わせを利用して記述された他のルーチンを有し、現在コードを実行中のプロセッサによりサポートされる命令に基づき実行すべきルーチンを選択する制御フローコードを有するフォームを含む各種実行可能なフォームに配置される(例えば、ジャストインタイムでコンパイルされるか、又は静的にコンパイルされるなど)。
・例示的な特定のベクトルフレンドリ命令フォーマット−
図3A〜D
図3Aは、本発明の実施例による例示的な特定のベクトルフレンドリ命令フォーマットを示すブロック図である。
図3Aは、それがフィールドの位置、サイズ、解釈及び順序と共に、フィールドの一部の値を指定するという点で特有の特定のベクトルフレンドリ命令フォーマット300を示す。特定のベクトルフレンドリ命令フォーマット300は、x86命令セットを拡張するのに利用され、フィールドの一部は既存のx86命令セット及びその拡張(AVXなど)に利用されるものと類似又は同一である。このフォーマットは、拡張を有する既存のx86命令セットのプリフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、ディスプレースメントフィールド及び即値フィールドと整合される。
図3Aからのフィールドがマップする
図2からのフィールドが示される。
【0039】
本発明の実施例が例示的に汎用的ベクトルフレンドリ命令フォーマット200に関して特定のベクトルフレンドリ命令フォーマット300を参照して説明されるが、本発明は、請求される場合を除き、当該特定のベクトルフレンドリ命令フォーマット300に限定されるものでない。例えば、汎用的ベクトルフレンドリ命令フォーマット200は、各種フィールドについて可能な様々なサイズを想定する一方、特定のベクトルフレンドリ命令フォーマット300は、特定サイズのフィールドを有するとして示される。具体例として、データ要素幅フィールド264が特定のベクトルフレンドリ命令フォーマット300における1ビットのフィールドとして示される一方、本発明はこれに限定されるものでない(すなわち、汎用的ベクトルフレンドリ命令フォーマット200は、データ要素幅フィールド264の他のサイズを想定する)。
・フォーマット−
図3
汎用的ベクトルフレンドリ命令フォーマット200は、
図3Aに示される順序により後述される以下のフィールドを含む。
【0040】
EVEXプリフィックス(バイト0〜3)
EVEXプリフィックス302は4バイト形式に符号化される。
【0041】
フォーマットフィールド240(EVEXバイト0,ビット[7:0])−第1バイト(EVEXバイト0)はフォーマットフィールド240であり、それは0×62を含む(本発明の一実施例ではベクトルフレンドリ命令フォーマットを区別するのに利用される一意的な値)。
【0042】
第2〜4バイト(EVEXバイト1−3)は、特定の能力を提供する複数のビットフィールドを含む。
【0043】
REXフィールド305(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)及び257BEXバイト1、ビット[5]―B)から構成される。EVEX.R、EVEX.X及びEVEX.Bビットフィールドは、対応するVEXビットと同じ機能を提供し、1の補完形式を利用して符号化され、すなわち、ZMM0は1111Bと符号化され、ZMM15は0000Bと符号化される。命令の他のフィールドは、Rrrr、Xxxx及びBbbbがEVEX.R、EVEX.X及びEVEX.Bを加えることによって形成されるように、当該分野で知られるようにレジスタインデックスの下位の3ビットを符号化する(rrr、xxx及びbbb)。
【0044】
REX’フィールド310−これはREX’フィールド310の最初の部分であり、拡張された32レジスタセットの上位16又は下位16を符号化するのに利用されるEVEX.R’ビットフィールド(EVEXバイト1、ビット[4]−R’)である。本発明の一実施例では、当該ビットは、後述されるような他のビットと共に、BOUND命令と区別するためビット反転フォーマットにより格納され(周知のx86の32ビットモードによる)、そのリアルオペコードバイトは62であるが、MODフィールドの11の値をMOD R/Mフィールド(後述される)を受け付けない。本発明の他の実施例は、当該ビット及び他の指摘されたビットを反転形式により格納しない。1の値は下位の16レジスタを符号化するのに利用される。すなわち、R’Rrrrは、EVEX.R’、EVEX.R及び他のRRRと他のフィールドとを合成することによって形成される。
【0045】
オペコードマップフィールド315(EVEXバイト1、ビット[3:0]−mmmm)−それのコンテンツは、暗示されたリーディングオペコードバイト(0F、0F38又は0F3A)を符号化する。
【0046】
データ要素幅フィールド264(EVEXバイト2、ビット[7]−W)は、EVEX.Wという記号により表現される。EVEX.Wは、データタイプの粒度(サイズ)を規定するのに利用される(32ビットデータ要素又は64ビットデータ要素)。
【0047】
EVEX.vvvv320(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、1)EVEX.vvvvは、反転(1の補完)形式により指定された第1ソースレジスタオペランドを符号化し、2以上のソースオペランドを有する命令について有効であり、2)EVEX.vvvvは、特定のベクトルシフトについて1の補完形式により指定されたデスティネーションレジスタオペランドを符号化し、又は3)EVEX.vvvvは、オペランドを符号化せず、当該フィールドはリザーブされ、1111bを含むべくであることを含むものであってもよい。従って、EVEX.vvvvフィールド320は、反転(1の補完)形式により格納されている第1ソースレジスタ指定子の4つの下位ビットを符号化する。命令に依存して、さらなる異なるEVEXビットフィールドが、指定子のサイズを32レジスタに拡張するのに利用される。
【0048】
EVEX.U268クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合、それはクラスA又はEVEX.U0を示し、EVEX.U=1である場合、それはクラスB又はEVEX.U1を示す。
【0049】
プリフィックス符号化フィールド325(EVEXバイト2、ビット[1:0]−pp)は、ベース処理フィールドについて追加的なビットを提供する。EVEXプリフィックスフォーマットによる従来のSSE命令のサポートを提供するのに加えて、これはまたSIMDプリフィックスをコンパクト化する効果を有する(SIMDプリフィックスを表現するためバイトを要求するのでなく、EVEXプリフィックスは2ビットしか要求しない)。一実施例では、従来のフォーマットとEVEXプリフィックスフォーマットとの双方によるSIMDプリフィックス(66H、F2H、F3H)を利用する従来のSSE命令をサポートするため、これらの従来のSIMDプリフィックスはSIMDプリフィックス符号化フィールドに符号化され、デコーダのPLAに提供される前にランタイム時に従来のSIMDプリフィックスに拡張される(従って、PLAは変更なくこれらの従来の命令の従来のフォーマットとEVEXフォーマットとの双方を実行可能である)。より新たな命令はオペコードの拡張としてEVEXプリフィックス符号化フィールドのコンテンツを直接利用可能であるが、特定の実施例は整合性のため同様の方法により拡張するが、これら従来のSIMDプリフィックスにより異なる意味が指定されることを可能にする。他の実施例は、2ビットのSIMDプリフィックス符号化をサポートするようPLAを再設計してもよいが、当該拡張を要求しない。
【0050】
アルファフィールド252(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEXライトマスク制御及びEVEX.Nとしても知られ、αにより示される)−上述されるように、当該フィールドはコンテクストに固有のものである。以降において追加的な説明が与えられる。
【0051】
ベータフィールド254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s
2−0、EVEX.r
2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、βββにより示される)−上述されるように、当該フィールドはコンテクストに固有のものである。以降において追加的な説明が与えられる。
【0052】
REX’フィールド310−これは、REX’フィールドの残りであり、拡張された32レジスタセットの上位16又は下位16を符号化するのに利用可能なEVEX.V’ビットフィールド(EVEXバイト3、ビット[3]−V’)である。当該ビットは、ビット反転形式により格納される。1の値が、下位16レジスタを符号化するのに利用される。すなわち、V’VVVVが、EVEX.V’、EVEX.vvvvを合成することによって構成される。
【0053】
ライトマスクフィールド270(EVEXバイト3、ビット[2:0]−kkk)−それのコンテンツは、上述されたようなライトマスクレジスタにおいてレジスタのインデックスを指定する。本発明の一実施例では、特定の値EVEX.kkk=000は、特定の命令に対してライトマスクが利用されないことを意味する特別な動作を有する(これは、マスキングハードウェアをバイパスするハードウェア又はすべて1に配線化されたライトマスクの利用を含む各種方法により実現されてもよい)。
・リアルオペコードフィールド330(バイト4)
これはまた、オペコードバイトとして知られる。オペコードの一部は当該フィールドにおいて指定される。
・MOD R/Mフィールド340(バイト5)
モディファイアフィールド246(MODR/M.MOD、ビット[7−6]−MODフィールド342)−上述されるように、MODフィールド342のコンテンツは、メモリアクセス処理と非メモリアクセス処理とを区別する。当該フィールドは、さらに後述される。
【0054】
MODR/M.regフィールド344、ビット[5−3]−ModR/M.regフィールドの役割は、2つの状況に要約できる。ModR/M.regは、デスティネーションレジスタオペランド又はソースレジスタオペランドを符号化するか、又はModR/M.regは、オペコードの拡張として扱われ、命令オペランドを符号化するのに利用されない。
【0055】
MODR/M.r/mフィールド346,ビット[2−0]−ModR/M.r/mフィールドの役割は、ModR/M.r/mがメモリアドレスを参照する命令オペランドを符号化するか、又はModR/M.r/mは、デスティネーションレジスタオペランド又はソースレジスタオペランドを符号化する。
・スケール、インデックス、ベース(SIB)バイト(バイト6)
スケールフィールド260(SIB.SS、bit6と[7−6])−上述されるように、スケールフィールド260のコンテンツは、メモリアドレス生成に利用される。当該フィールドは、さらに後述される。
【0056】
SIB.xxx354(ビット[5−3]及びSIB.bbb356(ビット[2−0])−これらのフィールドのコンテンツは、レジスタインデックスXxxx及びBbbbに関して上述された。
【0057】
ディスプレースメントバイト(バイト7又はバイト7〜10)
ディスプレースメントフィールド262A(バイト7−10)−MODフィールド342が10を有するとき、バイト7−10はディスプレースメントフィールド22Aであり、それは従来の32ビットディスプレースメントと同様に機能し(disp32)、バイト粒度により機能する。
【0058】
ディスプレースメントファクタフィールド262B(バイト7)−MODフィールド342が01を有するとき、バイト7はディスプレースメントファクタフィールド262Bである。当該フィールドの位置は、バイト粒度で機能する従来のx86命令セットの8ビットディスプレースメントと同じである。disp8は符号拡張されているため、それは−128〜127バイトオフセットの間のみをアドレス指定でき、64バイトキャッシュラインに関して、disp8は、−128、−64、0及び64の実際に有用な4つの値のみに設定可能な8ビットを利用する。より大きなレンジがしばしば必要とされるため、disp32が利用されるが、disp32は4バイトしか必要としない。disp8及びdisp32と対照的に、ディスプレースメントファクタフィールド262Bは、disp8の再解釈であり、ディスプレースメントファクタフィールド262Bを利用するとき、実際のディスプレースメントは、メモリオペランドアクセスのサイズ(N)と乗算されるディスプレースメントファクタフィールドのコンテンツにより決定される。このタイプのディスプレースメントは、disp8*Nとして参照される。これは、平均的な命令長を減少させる(はるかに大きなレンジによりディスプレースメントのため利用される単一のバイト)。このような圧縮されたディスプレースメントは、有効なディスプレースメントがメモリアクセスの粒度の乗数であるという仮定に基づくものであり、アドレスオフセットの冗長な下位ビットは符号化される必要はない。すなわち、ディスプレースメントファクタフィールド262Bは、従来のx86命令セットの8ビットディスプレースメントを置換する。従って、ディスプレースメントファクタフィールド262Bは、disp8がdisp8*Nにオーバロードされるという例外のみによって、x86命令セットの8ビットディスプレースメントと同様に符号化される(ModRM/SIB符号化ルールの変更はない)。すなわち、符号化ルール又は符号化長の変更はないが、ハードウェアによるディスプレースメント値の解釈のみの変更となる(バイト単位のアドレスオフセットを取得するため、メモリオペランドのサイズによりディスプレースメントをスケーリングすることを必要とする)。
【0059】
即値(Immediate)
即値フィールド272は上述されたように機能する。
【0060】
フルオペコードフィールド−
図3B
図3Bは、本発明の一実施例によるフルオペコードフィールド274を構成する特定のベクトルフレンドリ命令フォーマット300のフィールドを示すブロック図である。具体的には、フルオペコードフィールド274は、フォーマットフィールド240、ベース処理フィールド242及びデータ要素幅(W)フィールド264を有する。ベース処理フィールド242は、プリフィックス符号化フィールド325、オペコードマップフィールド315及びリアルオペコードフィールド330を有する。
【0061】
レジスタインデックスフィールド−
図3C
図3Cは、本発明の一実施例によるレジスタインデックスフィールド244を構成する特定のベクトルフレンドリ命令フォーマット300のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド244は、REXフィールド305、REX’フィールド310、MODR/M.regフィールド344、MODR/M.r/mフィールド346、VVVVフィールド320、xxxフィールド354及びbbbフィールド356を有する。
【0062】
拡張処理フィールド−
図3D
図3Dは、本発明の一実施例による拡張処理フィールド250を構成する特定のベクトルフレンドリ命令フォーマット300のフィールドを示すブロック図である。クラス(U)フィールド268が0を有するとき、それはEVEX.U0(クラスA268A)を示し、それは1を有するとき、それはEVEX.U1(クラスB268B)を示す。U=0及びMODフィールド342が11を有するとき(非メモリアクセス処理を示す)、アルファフィールド252(EVEXバイト3、ビット[7]―EH)はrsフィールド252Aとして解釈される。rsフィールド252Aが1を有するとき(ラウンド252A.1)、ベータフィールド254(EVEXバイト3、ビット[6:4]−SSS)はラウンド制御フィールド254Aとして解釈される。ラウンド制御フィールド254Aは、1ビットのSAEフィールド256と2ビットのラウンド処理フィールド258とを有する。rsフィールド252Aが0を有するとき(データ変換252A),ベータフィールド254(EVEXバイト3、ビット[6:4]−SSS)は、3ビットデータ変換フィールド254Bとして解釈される。U=0及びMODフィールド342が00、01又は10(メモリアクセス処理を示す)を有するとき、アルファフィールド252(EVEXバイト3、ビット[7]−EH)はイビクションヒント‘EH)フィールド252Bとして解釈され、ベータフィールド254(EVEXバイト3、ビット[6:4]−SSS)は3ビットデータ操作フィールド254Cとして解釈される。
【0063】
U=1であるとき、アルファフィールド252(EVEXバイト3、ビット[7]−EH)はライトマスク制御(Z)フィールド252Cとして解釈される。U=1及びMODフィールド342が11(非メモリアクセス処理を示す)を有するとき、ベータフィールド254の一部(EVEXバイト3、ビット[4]−S
0)はRLフィールド257Aとして解釈され、それが1を有するとき(ラウンド257A.1)、ベータフィールド254の残り(EVEXバイト3、ビット[6−5]−S
2−1)はラウンド処理フィールド259Aとして解釈され、RLフィールド257Aが0(VSIZE257.A2)を有するとき、ベータフィールド254の残り(EVEXバイト3、ビット[6−5]−S
2−1)はベクトル長フィールド259B(EVEXバイト3、ビット[6−5]−L
1−0)として解釈される。U=1及びMODフィールド342が00、01又は10(メモリアクセス処理を示す)を有するとき、ベータフィールド254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド259B(EVEXバイト3、ビット[6−5]−L
1−0)及びブロードキャストフィールド257B(EVEXバイト3、ビット[4]−B)として解釈される。
【0064】
いくつかの追加的なポイント
ベクトルフォーマットは、レジスタの個数を32(REX’)に拡張する。
【0065】
非破壊的ソースレジスタ符号化(3及び4オペランドシンタックスに適用可能):
これは、命令シンタックスにおける最初のソースオペランドである。それはEVEX.vvvvの表記によって表現される。当該フィールドは、1の補完形式(反転形式)を用いて符号化され、すなわち、ZMM0は1111Bとして符号化され、ZMM15は0000Bとして符号化される。EVEXの追加的なビットフィールドはソースを32レジスタに拡張するのに必要とされることに留意されたい。
【0066】
EVEX.Wは、ある命令についてデータタイプサイズ(32ビット又は64ビット)を定義する。
【0067】
32拡張レジスタセット符号化:EVEXプリフィックスは、以下の専用のビットフィールド、すなわち、EVEX.R’及びEVEX.V’(レジスタ・レジスタフォーマットのEVEX.Xと共に)によりソース単位で32レジスタを符号化するための追加的なビットフィールドを提供する。
【0068】
SIMDプリフィックスのコンパクト化:従来のSSE命令は、オペコード拡張bフィールドとしてSIMDプリフィックス(66H、F2H、F3H)を効果的に利用する。EVEXプリフィックス符号化は、512ビットベクトル長を利用して従来のSSE命令の機能的能力を可能にする。
【0069】
2バイト及び3バイトオペコードのコンパクト化:最近紹介された従来のSSE命令は、2バイト及び3バイトオペコードを利用する。1又は2のリーディングバイトは、0FH及び0FH 3AH/0FH 38Hである。1バイトエスケープ(0FH)及び2バイトエスケープ(0FH 3AH,0FH 38H)がまた、オペコード拡張フィールドとして解釈できる。EVEX.mmmフィールドは、多数の従来の命令が一定バイトのシーケンス0FH、0FH 3AH、0FH 38Hなしに符号化されることを可能にするためのコンパクト化を提供する。
[ベクトルフレンドリ命令フォーマットのフィールドの一部の相互関係を示す例示的なフロー図−
図4A〜4E]
図4A〜4Dは、本発明の一実施例によるベクトルフレンドリ命令フォーマットのフィールドの一部の相互関係を示すフロー図を示し、
図4Eは、本発明の一実施例によるブロック415A〜Hのそれぞれの分解図である。ブロック400において、初期的なフィールド値がベクトルフレンドリ命令フォーマット(0x62など)を示しているか判断される。初期的なフィールド値がベクトルフレンドリ命令フォーマットを示していない場合、制御はブロック402に移行し、当該命令は命令セットの他のフォーマットの1つに従って処理される。初期的なフィールド値がベクトルフレンドリ命令フォーマットを示している場合、制御はブロック492に移行する。
【0070】
ブロック492において、クラス(U)フィールドのコンテンツがクラスA又はクラスB命令テンプレートを示しているか判断される。クラスAのケースでは、制御は2つの別々のブロック404A及び490に移行する。そうでない場合、制御は、サークルBを介し
図4Cの2つの別々のブロック404B及び493に移行する。
【0071】
ブロック404Aにおいて、モディファイアフィールドのコンテンツが非メモリアクセス処理又はメモリアクセス処理を示しているか判断される。非メモリアクセス処理(MODフィールド342=11など)のケースでは、制御はブロック406及び408に移行する。メモリアクセス処理(MODフィールド342=00、01又は10など)のケースでは、制御は(サークルAを介し
図4B上の)ブロック422、430及び440Aのそれぞれに移行する。
【0072】
アルファフィールド252とラベル付けされたラウンド化されたコーナーボックスは、アルファフィールド252の異なる解釈を表現するため、ブロック408及び422を含む。具体的には、ブロック408はアルファフィールド252の解釈をrsフィールド252Aとして表現する一方、ブロック422はアルファ252の解釈をイビクションヒントフィールド252Bとして表現する。
【0073】
ブロック406において、レジスタインデックスフィールド244のコンテンツは、
図6Aに示されるように利用される。
【0074】
ブロック408において、rsフィールド252Aのコンテンツがラウンドタイプ処理(rsフィールド252A=1など)又はデータ変換タイプ処理(rsフィールド252A=0など)を示すか判断される。前者では、制御はブロック410、412A及び414のそれぞれに移行する。後者のケースでは、制御はブロック416に移行する。
【0075】
ベータ(ラウンド制御)フィールド254Aとラベル付けされたラウンド化されたコーナーボックスは、ブロック410及び412Aを含む。ブロック410はSAEフィールド256のコンテンツに関する判定を示し(浮動小数点例外を抑制するか否か)、ブロック412Aはラウンド処理フィールド258のコンテンツに基づく判定を示す(可能なラウンド化処理のグループの1つを区別)。ブロック410及び412Aにおいて行われる判定が、
図7Aに示される。
【0076】
ブロック414、416、442、448、454、460、468及び474はすべて、データ要素幅(w)フィールド264のコンテンツに関する判定を示す。
図4に示されるように、データ要素幅フィールド264は、
図3Aの特定のベクトルフレンドリ命令フォーマット300における1ビットフィールドである。また、これらのブロックは、データ要素幅が64ビット(1など)又は32ビット(0など)であるか判定する。ブロック414に関して、当該判定はフローの当該ブランチのエンドをマーク付けする。他方、制御は64ビットデータ要素幅と32ビットデータ要素幅とについてそれぞれブロック416からブロック418又は420に移行する。
【0077】
ベータ(データ変換)フィールド254Bとラベル付けされたラウンド化されたコーナーボックスは、ブロック418と420との双方を含み、ベータフィールド254がデータ変換フィールド254Bとして解釈されるケースを表す。ブロック418及び420において、データ変換フィールド254Bのコンテンツが、複数のデータ変換処理の何れが実行されるべきか区別するのに利用される。ブロック418、420の可能なデータ変換処理のグループはそれぞれ、
図8A及び8Bに示される。
【0078】
ブロック422において、イビクションヒントフィールド252Bのコンテンツは、可能なイビクションヒントオプションのグループの何れが利用されるべきか区別するのに利用される。
図4は、特定のベクトルフレンドリ命令フォーマット300からの1ビットイビクションヒントフィー0ルド252Bの利用を示す。具体的には、イビクションヒントオプションは、非一時的(1)及び一時的(0)である。これは、フロー図の当該ブランチのエンドをマーク付けする。
【0079】
ブロック430において、
図6Bに示されるように、レジスタインデックスフィールド244、スケールフィールド260及びディスプレースメントフィールド262A又はディスプレースメントファクタフィールド262Bのコンテンツが利用される。
【0080】
ブロック440Aにおいて、ベース処理フィールド242のコンテンツが、異なるメモリアクセス処理のグループの何れが実行されるべきか区別するのに利用される。以下のテーブルは、本発明の一実施例によるサポートされたメモリアクセス処理のグループと共に、それぞれのブロック440Aからの制御フローを示す。本発明の他の実施例は、より多く、より少ない又は異なるメモリアクセス処理をサポートしてもよい。
【0081】
【表2】
上述されるように、ブロック442、448、454、460、468、474は、データ要素幅に基づき制御フローの変更を決定する。制御フローは以下のテーブルに示される。
【0082】
【表3】
同様に、ブロック480、482及び484の判定が、
図15A、15B及び15Cにそれぞれ示される。ベータ(データ操作)フィールド254Cにラベル付けされたラウンド化されたコーナーボックスは、ブロック444A、446A、450A、452A、456、458、462、464、470、472、476、478、480、482、484を含み、これにより、データ操作フィールド254Cのコンテンツは可能なデータ操作処理のグループの何れが実行されるべきか区別することを示す。
【0083】
ブロック490において、ライトマスク(k)フィールド270のコンテンツとデータ要素幅(w)フィールド264のコンテンツとは、当該処理に使用するライトマスクを決定するのに利用される。
図4は、8つのライトマスクレジスタがあって、レジスタ000はライトマスクが利用されるべきでないことを示す実施例を示す。ライトマスクフィールド270のコンテンツが000以外を示す場合、制御は
図16A〜Dに移行する。
【0084】
ブロック404Bにおいて、モディファイアフィールドのコンテンツが非メモリアクセス処理又はメモリアクセス処理を示すか判断される。非メモリアクセス処理のケースでは(MODフィールド342=11など)、制御はブロック406(
図4AのサークルEを介し)及び495に移行する。メモリアクセス処理のケースでは(MODフィールド342=00、01又は10など)、制御はブロック498、430(
図4AのサークルDを介し)及び440B(
図4DのサークルC7を介し)。
【0085】
ベータフィールド254のラウンド化されたコーナーボックスの一部は、ベータフィールド254の一部の異なる解釈を表すため、ブロック495、412B及び498を含む。具体的には、ブロック495は、RLフィールド257Aとしてベータフィールド254の解釈の一部を表し、
図4Dのラウンド化されたコーナーボックスによりラベル付けされたブロードキャストフィールド257Bは、ブロードキャストフィールド257Bとしてベータフィールド254の当該部分の解釈を表す。
【0086】
ブロック495において、RLフィールド257Aのコンテンツはラウンドタイプ処理(例えば、RLフィールド257A=1)又はベクトル長タイプ処理(例えば、RLフィールド257=0)を示す。前者では、制御はブロック412B及び415Aのそれぞれに移行する。後者のケースでは、制御はブロック498及び415Bのそれぞれに移行する。
【0087】
ブロック412Bは、ラウンド処理フィールド259Bのコンテンツに基づく判定を示す(可能なラウンド化処理のグループの1つを示す)。ブロック412Bにおいて行われる判定が、
図7Bに示される。
【0088】
ブロック415A〜Hは、処理対象のデータ要素の幅に関する判定を示す。図示されるように、クラスBのサポートされるデータ要素(U=1のとき)は64ビット、32ビット、16ビット及び8ビットである。これらのブロックを実行する例示的な方法が、
図4Eを参照して後述される。ブロック415A〜Bはそれぞれフロー図のブランチのエンドをマーク付けする。図の415Aに関して、16ビット及び8ビットのデータ要素幅へのラインは、本発明の一実施例では、これらがサポートされていないため破線により示される。16ビット又は8ビットデータ要素に対して実行されるクラスBの非メモリアクセスタイプ処理がある場合、RLフィールド257Aのコンテンツは0であると予想され、ブロック495からブロック415B及び498に制御を移行させる(すなわち、パーシャルラウンド化は利用可能でない)。
【0089】
ブロック498において、ベクトル長(LL)フィールド268のコンテンツは、処理対象のベクトルのサイズを決定するのに利用される。
図4は、1)128ビット(00)、2)256ビット(01)、512ビット(10)がサポートされる実施例を示す。ただし、(11)はリザーブされる。リザーブされた11は、本発明の異なる実施例について又は異なるタイプの処理について異なる目的のため利用されてもよい。例えば、11は、1)1024ビットのベクトル長を示すか、2)ダイナミックベクトル長レジスタが利用されるべきであることを示すのに利用可能である。異なる実施例は、プログラムにより可読及び書き込み可能なベクトル長を符号化するのに利用される特別なレジスタを含む、ダイナミックベクトル長レジスタを異なって実現してもよい。ダイナミックベクトル長レジスタは、命令のベクトル長に利用される値を格納する。異なる実施例はダイナミックベクトル長レジスタを介し複数の異なるベクトル長をサポートしてもよいが、本発明の一実施例は、128ビットの倍数(128、256、512、1024、2048、...など)をサポートする。ダイナミックベクトル長レジスタとして機能する1以上のレジスタのセットがある場合、本発明の異なる実施例は、異なる技術(命令のタイプなどに基づく)を利用してこれらのレジスタから選択してもよい。
【0090】
ブロック440Bにおいて、ベース処理フィールド242のコンテンツは、異なるメモリアクセス処理のグループの何れが実行されるべきか示すのに利用される。以下のテーブルは、本発明の一実施例によるサポートされたメモリアクセス処理グループと共に、それぞれについてブロック440Bからの制御フローを示す。本発明の他の実施例は、より多く、より少なく又は異なるメモリアクセス処理をサポートしてもよい。
【0091】
【表4】
上述されるように、ブロック415C〜Hは、データ要素幅に基づく制御フローの変化を決定し、制御フローが以下のテーブルに示される。
【0092】
【表5】
ラウンド化されたコーナーボックスによりラベル付けされたブロードキャストフィールド257Bは、ブロック444B、446B、450B及び452Bを含む。これにより、ブロードキャストフィールド257Bのコンテンツは、ブロードキャスト処理が実行されるべきか区別することを示す。図示されるように、本発明の一実施例は、ブロードキャスト(b)フィールド257Bのコンテンツがブロードキャスト処理が64ビット及び32ビットのデータ要素幅について実行されるべきか選択することを可能にする。それは、16ビット及び8ビットデータ要素幅のオプションではない。むしろ、16ビット又は8ビットデータ要素に対して実行されるクラスBのメモリアクセスタイプ処理がある場合、ブロードキャスト(B)フィールド257Bのコンテンツは0であると予想される。
【0093】
ブロック493において、アルファフィールド252(ライトマスク制御(Z)フィールド252Cのコンテンツ)、ライトマスク(k)フィールド270のコンテンツ及びデータ要素幅の判定が、実行すべきライトマスク処理(マージング又はゼロ化)と処理に利用されるべきライトマスクとを決定するのに利用される。本発明のいくつかの実施例では、アルファフィールド252(ライトマスク制御(Z)フィールド252C)は、ストアを実行するメモリアクセス処理に対してゼロになるよう予想される(ゼロマスキングのため)。データ要素幅の判定は、ブロック415と同じように実行される。
図4は、8つのライトマスクレジスタがあって、ライトマスクが利用されるべきでないことをレジスタ000が示す実施例を示す。ライトマスクフィールド270のコンテンツが000以外を示す場合、制御は
図16D〜Eに移行する。
【0094】
図4Eは、本発明の一実施例によるブロック415A〜Hのぞれぞれの分解図である。具体的には、ブロック415A〜Hのそれぞれのフローを示す1つのフロー415が示される。ブロック417Aにおいて、リードオペコードフィールド330のコンテンツの一部又はすべてが、第1セット417A.1(64ビットと32ビットなどを含む)と第2セット417A.2(16ビットと8ビットなど)との2つのデータ要素幅のセットの間で選択するのに利用される。データ要素幅が、ブロック417Bに示されるようなデータ要素幅(w)フィールド264に基づき第1セット417A.1について決定される一方、第2セット471A.2内には、データ要素幅417A.2.1(リアルオペコードフィールド330のみに基づく)及び417A.2.2(ブロック417Cに示されるようなデータ要素幅(w)フィールド264に基づく)を決定する2つの方法がある。
図4に示されるように、データ要素幅フィールド264は、
図3Aの特定のベクトルフレンドリ命令フォーマット300における1ビットフィールドである。また、これらのブロック417Bは、データ要素幅が64ビット(1など)又は32ビット(0など)であるか決定し、ブロック417Cは、データ要素幅が16ビット(1など)又は8ビット(0など)であるか決定する。
図4Eはデータ要素幅を決定する際にリアルオペコードフィールド417Aの関与を示すが、他の実施例は、wフィールドのみを利用するため実現されてもよい(1ビットのwフィールドを有し、2つのみのデータ要素サイズをサポートし、2ビットのwフィールドを有し、4つのデータ要素サイズをサポートするなど)
本発明の実施例が
図4を参照して説明されたが、他の実施例は異なるフローを利用してもよい。例えば、ブロック480、482及び484により示されるように、1つのみのデータ要素幅をサポートする処理はデータ要素幅の判定を有する必要はなく(ブロック442Aなど)、2つのベータフィールド判定を必要としない(ブロック444A及び446Aなど)。他の実施例は、これらすべての処理について1つのデータ要素のみをサポートし、すべてのタイプの処理に対して双方のデータ要素幅をサポートしてもよく(ロードグラフィック、ロードPackedグラフィック及びストアグラフィック処理に対するデータ要素幅及び追加的なベータフィールド判定を要求する)、又はその他の処理のいくつかに対する異なるデータ要素幅をサポートしない(例えば、ロード/op処理について異なるデータ要素幅をサポートしないなど)。同様に、他の実施例は、非メモリアクセスラウンドタイプ処理及び非メモリアクセスデータ変換タイプ処理の1以上に対して異なるデータ要素幅をサポートしなくてもよい。(前者では、ブロック414及び415Aは存在せず、後者では、ブロック415Bは存在しないが、ブロック416は存在せず、ブロック418及び420はマージされる。)他の例として、本発明の異なる実施例は、クラス(U)フィールド268を含まず、クラスA又はB命令テンプレートの一方しかサポートせず、SAEフィールド256を含むが、ラウンド処理フィールド258を含まず、ラウンド処理フィールド259Aを含まず、イビクションヒットフィールド252Bを含まず、クラスA及びB命令テンプレートの一方又は双方にラウンドタイプ処理を含まず、データ変換タイプ処理を含まず、非メモリアクセス205及びメモリアクセス220の一方又は双方にベクトル長フィールド259Bを含まず、ロード/op及びロード処理の一方又は他方のみをサポートし、マスクライトフィールド270を含まず、ライトマスク制御(Z)フィールド252Cを含まず、及び/又はベクトル長フィールド268を含まなくてもよい。
[例示的なレジスタアーキテクチャ−
図5]
図5は、本発明の一実施例によるレジスタアーキテクチャ500のブロック図である。レジスタアーキテクチャのレジスタファイルファイル及びレジスタが以下に列記される。
【0095】
ベクトルレジスタファイル510−図示された実施例では、512ビット幅の32このベクトルレジスタがあり、これらのレジスタはzmm0〜zmm31として参照される。下位の16このzmmレジスタの下位の256ビットはレジスタymm0〜16にオーバレイされる。下位の16個のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15にオーバレイされる。特定のベクトルフレンドリ命令フォーマット300は、以下のテーブルに示されるようなオーバレイされたレジスタに対して実行される。
【0096】
【表6】
すなわち、ベクトル長フィールド259Bは、最大長と1以上の他のより短い長さとの間で選択する。このようなより短い各長さは先行する長さの1/2であり、ベクトル長フィールド259Bのない命令テンプレートは最大ベクトル長に対して実行される。さらに、一実施例では、特定のベクトルフレンドリ命令フォーマット300のクラスBの命令テンプレートが、Packed又はスカラシングル/ダブル精度浮動小数点データ及びPacked又はスカラ整数データに対して実行される。スカラ処理は、zmm/ymm/xmmレジスタにおける下位のデータ要素位置に対して実行される処理であり、上位のデータ要素位置は、命令前と同様に左方にあるか、実施例に応じてゼロ化される。
【0097】
ライトマスクレジスタ515−図示された実施例では、それぞれが64ビットのサイズの8つのライトマスクレジスタ(k0〜k7)がある。上述されたように、本発明の一実施例では、ベクトルマスクレジスタk0はライトマスクとして利用できず、k0がライトマスクに利用されることを符号化が通常示すとき、それは0xFFFFの配線化されたライトマスクを選択し、当該命令のライトマスキングを有効に不可にする。
【0098】
マルチメディア拡張制御ステータスレジスタ(MXCSR)520−図示された実施例では、当該32ビットレジスタは、浮動小数点処理において利用される7ステータス及び制御ビットを提供する。
【0099】
汎用レジスタ525−図示された実施例では、メモリオペランドをアドレッシングするため既存のx86アドレッシングモードと共に利用される16個の64ビットの汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及びR8〜R15の名称によって参照される。
【0100】
拡張フラグ(EFLAGS)レジスタ530−図示された実施例では、当該32ビットレジスタが、多数の命令の結果を記録するのに利用される。
【0101】
浮動小数点制御ワード(FCW)レジスタ535及び浮動小数点ステータスワード(FSW)レジスタ540−図示された実施例では、これらのレジスタは、FCWのケースではラウンド化モード、例外マスク及びフラグを設定し、FSWのケースでは例外を追跡するため、x87命令セット拡張により利用される。
【0102】
MMXPacked整数フラットレジスタファイル550にエイリアシングされるスカラ浮動小数点スタックレジスタファイル(x87スタック)545−図示された実施例では、x87スタックは、x87命令セット拡張を利用して32/64/80ビット浮動小数点データに対してスカラ浮動小数点処理を実行するのに利用される8要素スタックであり、MMXレジスタは、64ビットPacked整数データに対して処理を実行すると共に、MMXとXMMレジスタとの間で実行される処理についてオペランドを保持するのに利用される。
【0103】
セグメントレジスタ555−図示された実施例では、セグメント化されたアドレス生成について利用されるデータをストアするための6つの16ビットレジスタがある。
【0104】
RIPレジスタ565−図示された実施例では、当該64ビットレジスタは命令ポインタを格納する。
【0105】
本発明の他の実施例は、より広い又はより狭いレジスタを利用してもよい。さらに、本発明の他の実施例は、より多く、より少なく又は異なるレジスタファイル及びレジスタを利用してもよい。
[レジスタインデックスフィールド、スケールフィールド、ディスプレースメントフィールド、及びディスプレースメントファクタフィールドフロー−
図6A〜6C]
・モディファイアフィールド=非メモリアクセス−
図6A
図6Aは、本発明の実施例による非メモリアクセスタイプ処理のためのレジスタインデックスフィールド244のフロー図である。
図6Aは、modフィールド342(=11)に従ってレジスタ間のアドレッシングが実行中であることを示す楕円600からスタートする。ブロック600から、制御はブロック605に移行する。
【0106】
ブロック605において、レジスタをアドレッシングするため、レジスタインデックスフィールド244からビットが選択される。特定のベクトルフレンドリ命令フォーマット300に関して、拡張を有する既存のx86命令セットは、REXフィールド305、regフィールド344、r/mフィールド346、VVVVフィールド320、xxxフィールド354及びbbbフィールド356に基づき広範な異なるレジスタアドレッシングオプションを可能にする。REX’フィールド310は、これらのオプションを拡張する。ブロック605から、制御はブロック610に移行する。
【0107】
ブロック610において、レジスタAが選択され(zmm20など)、制御はブロック615に移行する。ブロック615において、レジスタBが選択され(zmm5など)、制御は任意的にブロック620に移行する。ブロック620において、レジスタCが選択される(zmm7など)。レジスタAはソースオペランドレジスタであってもよく、レジスタBはソースオペランドレジスタ、デスティネーションオペランドレジスタ又はソース/デスティネーションオペランドレジスタであってもよく、レジスタCは、ソースオペランドレジスタ、デスティネーションオペランドレジスタ又はソース/デスティネーションオペランドであってもよい。
・モディファイアフィールド=メモリアクセス−
図6B
図6Bは、本発明の実施例によるメモリアクセスタイプ処理のためのレジスタインデックスフィールド244、スケールフィールド260、ディスプレースメントフィールド262A及びディスプレースメントファクタフィールド262Bの利用を示すフロー図である。
図6Bは、レジスタ・メモリ間のアドレッシングを示す楕円630から始まる(modフィールド342=00、01又は10)。630から、制御はブロック635に移行する。
【0108】
ブロック635において、レジスタをアドレッシングするためのビットがレジスタインデックスフィールドから選択され、制御はブロック640に移行する。
【0109】
ブロック640において、レジスタAが選択され(zmm20など)、制御は任意的にはブロック645に移行する。ブロック645において、レジスタBが選択され(zmm31など)、制御はブロック650に移行する。ブロック645」が利用されないケースでは、制御はブロック6407からブロック650に直接移行する。
【0110】
ブロック650において、REXフィールド305、REX’フィールド310、mod r/mフィールド340、SIBバイト350及びディスプレースメントフィールド262A又はディスプレースメントファクタフィールド262Bのコンテンツが、メモリをアドレッシングするのに利用される。具体的には、インデックス及びベースが、REXフィールド305及びSIBバイト350からプルされ、スケールフィールド260(ssフィールド352)のコンテンツが、SIBバイト350からプルされる。ブロック650から、制御はブロック660に移行する。
【0111】
ブロック660において、メモリアクセスモードが決定される(modフィールド342のコンテンツなどに基づき)。メモリアクセスモードが非ディスプレースメントモードである場合(modフィールド342=00)、制御は、アドレスが2
ss*インデックス+ベースとなるように生成されるブロック665に移行する。
【0112】
メモリアクセスモードが非スケール化ディスプレースメントモードである場合(modフィールド342=10)、制御は、アドレスが2
ss*インデックス+ベース+disp32のように生成されるブロック670に移行する。メモリアクセスモードがスケール化ディスプレースメントモードである場合(modフィールド342=01)、制御は、アドレスが2
ss*インデックス+ベース+スケール化ディスプレースメントのように生成されるブロック675に移行し、スケール化ディスプレースメント(disp8*n)=ディスプレースメントファクタフィールド262Bとメモリアクセスサイズ(N)との乗算のコンテンツであり、Nはフルオペコードフィールド274(ベース処理フィールド及び/又はデータ要素幅フィールド)及び拡張処理フィールド250(クラスフィールド268及びデータ操作フィールド254C、ベクトル長フィールド259B及び/又はブロードキャストフィールド257Bなど)のコンテンツに依存する。
・スケール化ディスプレースメント−
図6C
図6Cは、本発明の実施例によるdisp8、disp32及びスケール化ディスプレースメントの変形の間の相違を示すテーブルである。テーブルのカラムは、1)バイトでインクリメントされるアドレスを示す“バイト”、2)−128〜127をストアするのに利用される1バイトフィールドである“disp8フィールド”、3)−2
31〜2
31−1をストアするのに利用される4バイトフィールドである“disp32フィールド”、4)−128〜127をストアするのに利用される1バイトフィールドである“disp32*Nフィールド”であり、当該カラムは“N=1”、“N=2”及び“N=64”のサブカラムを有する。
【0113】
“バイト”カラムのローの値はカラムの下方に増加する。第2カラム、第3カラム及び各サブカラムは、当該フィールドにより生成可能なアドレスのローにおける黒色のサークルを含む。disp8フィールド及びdisp32フィールドが、N=1である場合、当該フィールドがバイトの粒度によりインクリメントすることを示すそれらのレンジによって、すべてのバイトについて黒色のドットを有することは注目すべきである。他方、N=2のカラムは、2バイトだけインクリメントし、従ってそれのレンジ内の1つおきのバイトについて黒色のドットしか有さず、また、それはdisp8フィールドと比較してより広いレンジとより粗い粒度とを有する一方、同時にそれはdisp32フィールドのバイトの1/4しか必要としない。N=64のカラムは、64バイトだけインクリメントし、従ってそれのレンジ内で64バイト毎に黒色のドットしか有さず、また、それはdisp8フィールドと比較してより広いレンジとより粗い粒度とを有する一方、同時にそれは再びdisp32フィールドの1/4バイトしか必要としない。
・ラウンド化フィールドテーブル−
図7A〜B
図7Aは、本発明の実施例によるラウンド制御フィールド254Aにより指定されうる可能な処理のグループを示すテーブルである。
図7Aは、第1カラムがベータフィールド254の可能なコンテンツを有することを示す(ラウンド制御フィールド254Aとして機能し、SAEフィールド256及びラウンド処理フィールド258に分割される)。
【0114】
同様に、
図7Bは、本発明の実施例によるラウンド制御フィールド259Aにより指定されうる可能な処理のグループを示すテーブルである。クラスB命令テンプレートのケースでは、SAEフィールド356はなく、浮動小数点例外抑制が常にアクティブである。
【0115】
いくつかの命令がすでに中間ビットを介しラウンド化モードの指定を静的に可能にする一実施例では、中間ビットはラウンド化モード処理フィールド258及び259Aに対して優先する。
・データタイプ
以下のテーブルは、ここで用いられる例示的なデータタイプをリストする(その一部は、Miscrosoft(登録商標)のDirectX(登録商標)10に説明されている(Microsoft(登録商標)、DirectX(登録商標)、データ変換ルール(2010年8月17日)を参照)。
【0116】
【表7】
UNORMは、nビット数について、すべて0が0.0fを意味し、すべて1が1.0fを意味することを示す符号なしの正規化された整数を示す。0.0fから1.0fまでの均等に離間した浮動小数値のシーケンスが表され、例えば、2ビットUNORMは0.0f、1/3、2/3及び1.0fを表す。
【0117】
SNORMは、nビット2の補数について、最大値が1.0fを意味し(例えば、5ビット値01111は1.0fにマップする)、最小値は−1.0fを意味する(例えば、5ビット値10000は−1.0fにマップする)ことを示す符号付き正規化された整数を示す。さらに、第2最小数は−1.0fにマップする(例えば、5ビット値10001は−1.0fにマップする)。従って、−1.0fについて2つの整数表現がある。0.0fについて1つの表現があり、1.0fについて1つの表現がある。これは、レンジ(−1.0f...0.0f)において均等に離間した浮動小数値の整数表現のセットをもたらし、また、レンジ(0.0f...1.0f)における数の補完的な表現セットをもたらす。
【0118】
上述されるように、SIMD技術は、レジスタのビットを各データ要素が別個の値を表す複数の固定的/サイズ化されたデータ要素に論理的に分割可能なプロセッサに特に適している。このタイプのデータは、Packedデータタイプ又はベクトルデータタイプと呼ばれ、当該データタイプのオペランドはPackedデータオペランド又はベクトルオペランドと呼ばれる。典型的には、ベクトルオペランドのデータ要素は、同じデータタイプを有し、所与のデータ要素のデータタイプは、データ要素データタイプと呼ばれる。データ要素のすべてのデータ要素データタイプが同じである場合、ベクトルオペランドは当該データタイプを有するとして参照されてもよい。(例えば、ベクトルオペランドのデータ要素のすべてが32ビット浮動小数データ要素データタイプを有する場合、ベクトルオペランドは、32ビット浮動小数点ベクトルオペランドと呼ばれる。)
シングル値データ要素データタイプとマルチ値データ要素データタイプとをサポートする本発明の実施例が説明される。シングル値データ要素データタイプは、各データ要素にシングル値を格納し、本発明のいくつかの実施例において用いられるシングル値データ要素データタイプの具体例は、32ビット浮動小数点、64ビット浮動小数点、32ビット符号なし整数、64ビット符号なし整数、32ビット符号付き整数、及び64ビット符号付き整数である。マルチ値データ要素データタイプは、各データ要素位置に複数の値を有するパケットを格納し、本発明のいくつかの実施例において使用される複数値データ要素データタイプの具体例は、後述されるPackedグラフィックデータ要素データタイプである。
【0119】
UNORM10A10B10C2D:3つのUNORM10値と1つのUNORM2値の32ビットパケットは、32bフィールドの最上位ビットにある最後の2b(10b)フィールドから始まる(例えば、UNORM2D[31−30]フロート10C[29−20]フロート10B[20−10]フロート10A[9−0]、ただし、D〜Aはスロット位置を示し、先行する名称/数字はフォーマットを示す。)
FLOAT11A11B10C:2つのFLOAT11値と1つのFLOAT10値との32ビットパケットは、より上位のビットにある最後を開始する(例えば、フロート10C[31−22]フロート11B[21−11]フロート11A[10−0]など)。
【0120】
上記のマルチ値データ要素データタイプのパケットの異なる値は異なる個数のビットにより表現され、他の実施例は異なるコンフィギュレーションを有してもよいことに留意すべきである。(例えば、異なる個数のビットにより表現される値のより多く、同数のビットにより表される値のすべてなど)。
【0121】
シングル値データ要素データタイプとマルチ値データ要素データタイプとの双方をサポートする実施例が説明されたが、他の実施例は一方又は他方をサポートしてもよい。さらに、特定のデータタイプを利用する本発明の実施例が説明されるが、本発明の他の実施例はより多く、より少なく又は異なるデータタイプを利用してもよい。
・データ変換フィールドテーブル−
図8A及び8B
図8A〜8Bは、本発明の実施例によるデータ変換フィールドにより指定されうる可能なデータ変換処理のグループを示すテーブルである。双方のテーブルの第1カラムは、データ変換フィールド254Bのコンテンツの可能な値を示し、第2カラムはファンクションを示し、第3カラムは利用を示す。
・データ要素サイズフィールド=64ビット−
図8A
図8Aは、本発明の実施例によるデータ要素幅が64ビットであるとき、データ変換フィールドにより指定されうる可能なデータ変換処理のグループを示すテーブルである。当該テーブルは、64ビットレジスタスウィズルアップ変換スウィズルプリミティブと呼ばれ、ブロック418の表現である。記号:dcbaはソースにおいて1つの256ビットブロックを形成する64ビット要素を示し(“a”は最下位及び“d”は最上位)、aaaaは、ソースの256ビットブロックの最下位要素がデスティネーションにおける同じ256ビットブロックの4つすべての要素に複製され、図示されたパターンは、そのときソース及びデスティネーションにおいて2つの256ビットブロックについて繰り返されることを意味する。ただし、“a”は最下位要素であり、“h”は最上位要素である。しかしながら、各256ビットブロックはレジスタスウィズルについて同じ順列を実行するため、最下位ブロックのみが示される。
・データ要素サイズフィールド=32ビット−
図8B
図8Bは、本発明の実施例によるデータ要素幅が32ビットであるときデータ変換フィールドにより指定されうる可能なデータ変換処理のグループを示すテーブルである。当該テーブルは、32ビットレジスタスウィズルアップ変換スウィズルプリミティブと呼ばれ、ブロック420の表現である。記号:dcbaはソースにおいて1つの128ビットブロックを形成する32ビット要素を示し(“a”は最下位及び“d”は最上位)、aaaaは、ソースにおける128ビットブロックの最下位要素がデスティネーションにおける同じ128ビットブロックの4つすべての要素に複製され、図示されたパターンは、このときソース及びデスティネーションにおける4つすべての128ビットブロックについて繰り返される。“ponm lkji hgfe dcba”はソースレジスタを示すのに利用され、“a”は最下位要素であり、“p”は最上位要素である。しかしながら、各128ビットブロックはレジスタスウィズルについて同じ順列を実行するため、最下位ブロックのみが示される。
【0122】
図8Bは、
図8A〜8Bに示される処理のすべての意味をさらに説明するため2つの例示的な処理を呼び出す。
図9において、クロスプロダクトスウィズル815が示され、
図10Aにおいて、4要素パケット820におけるブロードキャスト要素が示される。
・例示的なスウィズル処理−
図9
図9は、本発明の実施例によるクロスプロダクトスウィズル815を示すブロック図である。
図9は、双方が512ビット幅であり、連続する128個のブロックに分割される(パケット位置3−0と呼ばれる)ソースオペランド900及びデスティネーションオペランド910を示し、各ブロックは4つの32ビットデータ要素に分割される。(例えば、ソースオペランド900のパケット位置0のコンテンツはD0C0B0A0であり、デスティネーションオペランド910のパケット位置0のコンテンツはD0A0C0B0である。
・例示的なブロードキャスト処理−
図10A〜10C
図10Aは、本発明の実施例による4要素パケット820にわたる要素のブロードキャストを示すブロック図である。
図10Aは、双方が512ビット幅であり、連続する128個のブロック(パケット位置3〜0として参照される)に分割されるソースオペランド1000及びデスティネーションオペランド1010を示し、各ブロックは4つの32ビットデータ要素に分割される。(例えば、ソースオペランド1000のパケット位置0のコンテンツはD0C0B0A0である一方、デスティネーションオペランド910のパケット位置0のコンテンツはA0A0A0A0であり、ソースオペランド1000のパケット位置1のコンテンツはD1C1B1A1であり、デスティネーションオペランド1010のパケット位置1のコンテンツはA1A1A1A1である。)
図10Aは非メモリアクセス処理の一例となるブロードキャストであるが、
図10B〜10Cはメモリアクセス処理のための一例となるブロードキャストである。ソースメモリオペランドは要素の合計数より少なく含むとき、それは有効なソースオペランドの完全数の要素を形成するためブロードキャスト(繰り返し)可能である(32ビット命令について16、64ビット命令について8)。これらのタイプのブロードキャスト処理は
図12A〜12Dにおいて参照される。2つのブロードキャスト粒度がある。
【0123】
ソースメモリオペランドの1要素が、フル16要素有効ソースオペランド(32ビット命令について)を形成するため16回ブロードキャストされ、又はフル8要素有効ソースオペランド(64ビット命令について)を形成するため8回ブロードキャストされる。
図10Bは、本発明の実施例による32ビットデータ要素幅の1の要素粒度のブロードキャストを示すブロック図である。当該処理の具体例は、
図12Bにおいて1210によりラベル付けされる。
図10Bは、1つの32ビットデータ要素(A0)を有するメモリをソースとするソースオペランド1020と、512ビット幅であり、16個の32ビットデータ要素を含むデスティネーションオペランド1030とを示す。(データ要素のすべてがデスティネーションオペランド1030においてA0である。)1の要素のブロードキャストは、ソースの1つが異なる処理に対して共通している場合、ベクトルソースとスカラソースとを混合した命令について有用である。
【0124】
ソースメモリオペランドの4要素が、フル16要素有効ソースオペランド(32ビット命令について)を形成するため4回ブロードキャストされるか、又はフル8要素有効ソースオペランド(64ビット命令について)を形成するため2回ブロードキャストされる4要素粒度である。
図10Cは、本発明の実施例による32ビットデータ要素のブロードキャスト4要素粒度を示すブロック図である。
図12Bにおいて、当該処理の具体例が1220によりラベル付けされる。
図10Cは、4つの32ビットデータ要素(D0C0B0A0)を有するメモリをソースとするソースオペランド1040と、512ビット幅であり、連続する128個のブロックに分割される(パケット位置3〜0として参照される)デスティネーションオペランド1050とを示し、各ブロックは4つの32ビットデータ要素に分割される。(例えば、デスティネーションオペランド1050のパケット位置3〜0のそれぞれにおけるコンテンツはD0C0B0A0などである。)4〜16回のブロードキャストは、計算が(カラーコンポーネントRGBAと同様に)Packed値のアレイに対して実行されるAOS(Array Of Structure)にとって大変有用であり、この場合、ベクトル命令の異なる処理に対して共通のパケットが利用されるとき(16要素ベクトルは4つの要素の4つのパケットのアレイとみなされる)、4〜16が効果的である。
・ベース処理フィールドテーブル−
図11A及び11B
・オペコードマップフィールド−
図11A
図11Aは、本発明の実施例によるオペコードマップフィールドにより指定されうる可能なオペコードマップのグループを示すテーブルである。第1カラムは、オペコードマップフィールド315のコンテンツの可能な値を示し、第2カラムは、インプライされるリーディングオペコードバイトを示し、第3カラムは、即値があるか示す。
・プリフィックス符号化フィールド−
図11B
図11Bは、本発明の実施例によるオペコードマップフィールドにより指定されうる可能なプリフィックス符号化のグループを示すテーブルである。第1カラムは、プリフィックス符号化フィールド325のコンテンツの可能な値を示し、第2カラムは、当該プリフィックスの意味を示す。
・データ操作フィールドテーブル−
図12〜15
図12〜15は、本発明の実施例によるデータ操作フィールド254Cと、
図12A〜Dについてブロードキャストフィールド257Bとによりそれぞれ指定されうる可能なデータ操作処理とブロードキャスト処理とのグループを示すテーブルである。テーブルの第1カラムは、データ操作フィールド254Cのコンテンツの可能な値を示し、第2カラムはファンクションを示し、第3カラムは利用を示す。
・ロード/OPのためのデータ操作フィールドテーブル−
図12A〜12D
図12A〜12Dは、本発明の実施例によるロード/op命令のためのデータ操作フィールド254C及びブロードキャストフィールド257Bによりそれぞれ指定されうる可能なデータ操作処理及びブロードキャスト処理のグループを示すテーブルである。
図3A〜Dにおける例示的な特定のベクトルフレンドリ命令フォーマットのケースでは、データ操作フィールド254Cは3ビットフィールドであり、ブロードキャストフィールド257Bは1ビットフィールドである。図示された実施例では、ブロードキャストフィールド257Bのコンテンツは、
図12A〜Dに示されるテーブルの最初の2つのローの間で選択し、すなわち、それのコンテンツは、データ操作フィールド254Cにおける000及び001の等価なものの間で選択する。これは、テーブルの最初の2つのローしか含まないブラケットを利用して
図12A〜Dに示される。
・ロード/OP整数及びデータ要素サイズフィールド=64ビット−
図12A
図12Aは、本発明の実施例によるデータ要素幅が64ビットであるロード/op整数についてデータ操作フィールド254C及びブロードキャストフィールド257Bにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、64ビットIntegerLoad−opSwizzUpConv
i64(クワドワード)スウィズル/変換プリミティブと呼ばれ、ブロック444A及び444Bの表現である。
・ロード/OP整数及びデータ要素サイズフィールド=32ビット−
図12B
図12Bは、本発明の実施例によるデータ要素幅が32ビットであるロード/op整数のデータ操作フィールド254C及びブロードキャストフィールド257Bにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、32ビットIntegerLoad−opSwizzUpConv
i32スウィズル/変換プリミティブとして参照され、ブロック446A及び446Bの表現である。
・ロード/OP浮動小数点及びデータ要素サイズフィールド=64ビット−
図12C
図12Cは、本発明の実施例によるデータ要素幅が64ビットであるロード/op浮動小数点のデータ操作フィールド254C及びブロードキャストフィールド257Bにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、64ビットFloating−pointLoad−opSwizzUpConv
f64スウィズル/変換プリミティブとして参照され、ブロック450A及び450Bの表現である。
・ロード/OP浮動小数点及びデータ要素サイズフィールド=32ビット−
図12D
図12Dは、本発明の実施例によるデータ要素幅が32ビットであるロード/op浮動小数点のデータ操作フィールド254C及びブロードキャストフィールド257Bにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、32ビットFloating−pointLoad−opSwizzUpConv
f32スウィズル/変換プリミティブとして参照され、ブロック452A及び452Bの表現である。
・ロードのためのデータ操作フィールドテーブル−
図13A〜13D
図13A〜13Dは、本発明の実施例によるロード命令のためのデータ操作フィールドにより指定されうる可能なデータ操作処理のグループを示すテーブルである。
・ロード整数及びデータ要素サイズフィールド=64ビット−
図13A
図13Aは、本発明の実施例によるデータ要素幅が64ビットであるロード整数のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
i64として参照され、ブロック456の表現である。
・ロード整数及びデータ要素サイズフィールド=32ビット−
図13B
図13Bは、本発明の実施例によるデータ要素幅が32ビットであるロード整数のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
i32として参照され、ブロック458の表現である。
・ロード浮動小数点及びデータ要素サイズフィールド=64ビット−
図13C
図13Cは、本発明の実施例によるデータ要素幅が64ビットであるロード浮動小数点のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
f64として参照され、ブロック462の表現である。
・ロード浮動小数点及びデータ要素サイズフィールド=32ビット−
図13D
図13Dは、本発明の実施例によるデータ要素幅が32ビットであるロード浮動小数点のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
f32として参照され、ブロック464の表現である。
・追加的ポイント
図13A〜13D(ロード/opテーブル)のそれぞれにおいて指定される可能なデータ操作処理のグループは、対応する
図12A〜12D(ロードテーブル)のもののサブセットである。具体的には、当該サブセットはブロードキャスト処理を含まない。これは、フルオペコードフィールド274の特定の値(ギャザー又はブロードキャスト処理を指定するものなど)が、データ操作フィールド254Cにおおいて指定されたブロードキャストと共に利用できず、フルオペコードフィールド274の当該値は、
図12A〜12D(ロードテーブル)のロードによってのみ利用可能である。より具体的な例として、ブロードキャスト処理を指定するフルオペコードフィールド274に値がある場合、データ操作フィールド254Cはまたブロードキャスト処理を示すことができない。本発明の特定の実施例は別々のロード/opテーブルとロードテーブルとを有する別々のロード/op及びロード処理を含むが、他の実施例は、当該実施機構を有する必要はない(例えば、それらは、ロード/opのみをサポートし、ロードのみをサポートし、フルオペコードフィールド274のブロードキャストはデータ操作フィールド254Cのブロードキャストを無視させることを判断してもよい)。
・ストアのためのデータ操作フィールドテーブル−
図14A〜14D
図14A〜14Dは、本発明の実施例によるストア命令のためのデータ操作フィールドにより指定されうる可能なデータ操作処理のグループを示すテーブルである。
・ストア整数及びデータ要素サイズフィールド=64ビット−
図14A
図14Aは、本発明の実施例によるデータ要素幅が64ビットであるストア整数のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、DownConv
i64として参照され、ブロック470の表現である。
・ストア整数及びデータ要素サイズフィールド=32ビット−
図14B
図14Bは、本発明の実施例によるデータ要素幅が32ビットであるストア整数のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、DownConv
i32として参照され、ブロック472の表現である。
・ストア浮動小数点及びデータ要素サイズフィールド=64ビット−
図14C
図14Cは、本発明の実施例によるデータ要素幅が64ビットであるストア浮動小数点のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、DownConv
f64として参照され、ブロック476の表現である。
・ストア浮動小数点及びデータ要素サイズフィールド=32ビット−
図14D
図14Dは、本発明の実施例によるデータ要素幅が32ビットであるストア浮動小数点のためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、DownConv
f32として参照され、ブロック478の表現である。
・グラフィックデータタイプのためのデータ操作フィールドテーブル−
図15A〜15C
図15A〜15Cは、本発明の実施例によるグラフィックスデータタイプに対して実行される命令のためのデータ操作フィールドにより指定されうる可能なデータ操作処理のグループを示すテーブルである。
・ロードグラフィック−
図15A
図15Aは、本発明の実施例によるデータ要素幅が32ビットであるロードグラフィックのためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
g32として参照され、ブロック480の表現である。
・ロードPackedグラフィック−
図15B
図15Bは、本発明の実施例によるデータ要素幅が32ビットであるロードPackedグラフィックのためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
pg32として参照され、ブロック482の表現である。
・ストアグラフィック−
図15C
図15Cは、本発明の実施例によるデータ要素幅が32ビットであるストアグラフィックのためのデータ操作フィールド254Cにより指定されうる可能なデータ操作処理のグループを示すテーブルである。当該テーブルは、UpConv
g32として参照され、ブロック484の表現である。
・ライトマスクフィールド−
図16A〜D
図16A〜16Bは、本発明の実施例による異なるライトマスクと、同一の第2ソース及びデスティネーションとにより実行される2つのマージング処理を示す。
図16Aは、本発明の実施例によるライトマスクレジスタK1においてライトマスクを利用してマージする一例となる処理1600を示すブロック図であり、データ要素幅は32ビットであり、第2ソース及びデスティネーションが同一である。
図16Aは、ソースオペランド1605、ソース/デスティネーションオペランド1610、マスクレジスタK1 1615のコンテンツ(下位16ビットは1と0との混合を含む)、及びデスティネーションオペランド1620を示す。マスクレジスタK1の下位16ビット位置のそれぞれは、データ要素位置の1つに対応する(K1[0]はデータ要素位置0に、K1[1]はデータ要素位置1などに対応する)。デスティネーションオペランド1620の各データ要素位置について、それは、マスクレジスタK1の対応するビット位置がそれぞれ0又は1であるか否かに依存して、ソース/デスティネーション1610のデータ要素位置のコンテンツ又は処理結果(加算として示される)を含む。他の実施例では、ソース/デスティネーションオペランド1610は、第2ソースオペランドに置換される。これらの実施例では、デスティネーションオペランド1620は、マスクレジスタK1の対応するビット位置が0である(存在する場合)データ要素位置に処理前からのデスティネーションオペランド1620のコンテンツを含み、マスクレジスタK1の対応するビット位置が1である(存在する場合)データ要素位置に処理結果を含む。
【0125】
上述されるように、本発明の一実施例はK0を用いて、マスキングが実行されるべきでないことを示す。
図16Bは、本発明の実施例によるすべて1の配線化されたマスクを用いてマージする一例となる処理1625を示すブロック図であり(配線化されたライトマスクは、ライトマスクレジスタk0を指定する命令により利用される)、データ要素幅は32ビットであり、第2ソース及びデスティネーションは同じである。
図16Bは、K1 1615が配線化されたマスク1630と置換され、デスティネーションオペランド1620がデスティネーションオペランド1635と置換されることを除き、
図16Aと同じである。配線化されたマスク1630はすべて1であり、デスティネーションオペランド1635は、処理結果を表すデータ要素を含む。
【0126】
図16Cは、本発明の実施例による8、16、32及び64ビットデータ要素幅の512ビットベクトルのデータ要素位置とライトマスクレジスタのビットとの対応関係を示すブロック図である。具体的には、64ビットレジスタK
N1640が示され、データ要素幅が8ビットであるとき、64ビットすべてが利用され、データ要素幅が16ビットであるとき、最下位の32ビットのみが利用され、データ要素幅が32ビットであるとき、最下位16ビットのみが利用され、データ要素幅が64ビットであるとき、最下位8ビットのみが利用される。256ビットベクトルについて、データ要素幅が8ビットであるとき、最下位32ビットのみが利用され、データ要素幅が16ビットであるとき、最下位16ビットが利用され、データ要素幅が32ビットであるとき、最下位8ビットのみが利用され、データ要素幅が64ビットであるとき、最下位4ビットのみが利用される。128ビットベクトルについて、データ要素幅が8ビットであるとき、最下位16びっとのみが利用され、データ要素幅が16ビットであるとき、最下位8ビットのみが利用され、データ要素幅が32ビットであるとき、最下位2ビットのみが利用され、データ要素幅が64ビットであるとき、最下位2ビットのみが利用される。
【0127】
所与のマスクレジスタの値は、GPレジスタから転送されるか、又は2つのマスクの間の論理処理の直接的な結果として計算されるベクトル比較命令の直接的な結果として設定可能である。
【0128】
図16Dは、本発明の実施例によるライトマスクレジスタK1におけるライトマスクを利用してマージする一例となる処理1660を示すブロック図であり、データ要素幅は32ビットであり、第2ソース及びデスティネーションは異なる。
【0129】
図16Eは、本発明の実施例によるライトマスクレジスタK1におけるライトマスクを利用してゼロ化する一例となる処理1666を示すブロック図であり、データ要素幅は32ビットであり、第2ソース及びデスティネーションは異なる。ゼロ化処理はデスティネーションがソースと異なる処理に対してのみ示されるが、ゼロ化はまた、第2ソース及びデスティネーションが同一である場合に機能する。
・例示的なテンプレート及び命令−
図17〜18
以下の記号は、
図17〜18への導入により提供される。
【0132】
【表10】
・EVEX.U0のための例示的な命令符号化−
図17A〜D
図17Aは、本発明の実施例による一例となる特定のベクトルフレンドリ命令フォーマットからのフィールドのサブセットを示す。具体的には、
図17Aは、EVEXプリフィックス302、リアルオペコードフィールド330及びMOD R/Mフィールド340を示す。本実施例では、フォーマットフィールド240は、命令フォーマットがベクトルフレンドリ命令フォーマットであることを示すための0×62を含む。
【0133】
図17B〜17Dはそれぞれ、本発明の実施例による
図17Aの特定のベクトルフレンドリ命令フォーマットに符号化される一例となる特定のベクトルフレンドリ命令からのフィールドのサブセットを示す。
図17B〜17Dの説明では、VADDPS命令の各種の例示的なコンフィギュレーションのための一部のフィールドの可能な符号化を示すため、一部のフィールドの具体的な利用が説明される。
図17B〜17Dのそれぞれにおいて、フォーマットフィールド240は、命令がベクトルフレンドリ命令フォーマットにより符号化されていることを示すための0×62を含み、リアルオペコードフィールド330はVADDPSオペコードを含む。
図17B〜17Dはそれぞれ、本発明の実施例によるEVEX.U0クラスへのVADDPS命令の符号化を示し、
図17B及び17Cはそれぞれ、非メモリアクセス205命令テンプレートへのVADDPSのEXEV.U0符号化を示し、
図17Dは、メモリアクセス220命令テンプレートへのVADDPSのEVEX.U0符号化を示す。VADDPS命令は、第1レジスタ又はメモリオペランド(zmm3など)から第2レジスタ(zmm2など)へのPackedシングル精度浮動小数点値を加算し、結果をライトマスク(k1など)に従って第3レジスタ(zmm1など)に格納する。当該命令は、命令の符号化に応じて各種のラウンド処理、データ変換処理又はデータ操作処理を可能にする。当該命令は、以下の命令ニーモニック、EVEX.U0.NDS.512.0F 58/r VADDPS zmm1{k1},zmm2,S
f32(zmm/mV){eh}により記述されてもよい。
【0134】
図17Bは、非メモリアクセスフルラウンド制御タイプ処理210命令テンプレートにおけるVADDPS命令の符号化を示す。データ要素幅フィールド264は、32ビットデータ要素幅を示すため0となる。クラスフィールド268(すなわち、EVEX.U)は、EVEX.U0クラスを示すため0に設定される。アルファフィールド252は、RSフィールド252A(すなわち、EVEX.rs)として解釈され、ラウンド制御タイプ処理を選択するため1(すなわち、RSフィールド252A.1)に設定される。アルファフィールド252がRSフィールド252A.1として機能しているため、ベータフィールド254はラウンド処理フィールド258(すなわち、EVEX.r
2−0)として解釈される。具体的には、EVEX.r
2はSAEフィールド256として解釈され、EVEX.r
1−0はラウンド制御フィールド254Aとして機能する。モディファイアフィールド246(すなわち、MODR/M.MOD342)は、非メモリアクセスを示すため11に設定される。(すなわち、レジスタzmm3は、メモリオペランドの代わりに第1ソースオペランドとなる。)
図17Cは、非メモリアクセスデータ変換タイプ処理215命令テンプレートにおけるVADDPS命令の符号化を示す。
図17Cの符号化は、アルファフィールド252及びベータフィールド254を除き
図17Bと同一である。アルファフィールド252はRSフィールド252A(すなわち、EVEX.rs)として解釈され、データ変換タイプ処理を選択するため0に設定される(すなわち、RSフィールド252A.2)。アルファフィールド252はRSフィールド252A.2として機能するため、ベータフィールド254は、データ変換フィールド254B(すなわち、EVEX.s
2−0)として解釈される。
【0135】
図17Dは、メモリアクセス220命令テンプレートにおけるVADDPS命令の符号化を示す。データ要素幅フィールド264は、32ビットデータ要素幅を示すため0である。クラスフィールド268(すなわち、EVEX.U)は、EVEX.U0を示すため0に設定される。アルファフィールド252は、イビクションヒントフィールド252B(すなわち、EVEX.EH)として解釈される。ベータフィールド254は、データ操作フィールド254C(すなわち、EVEX.s
2−0)として解釈される。モディファイアフィールド246(すなわち、MODR/M.MOD342)は、第1ソースオペランドがメモリオペランドであることを示すため、00、01又は10に設定される。これは、
図17Dにおいて、
【0136】
【数1】
(すなわち、11を除く任意の入力)として示される。
・EVEX.U1のための例示的な命令符号化−
図18A〜18F
図18Aは、本発明の実施例による一例となる特定のベクトルフレンドリ命令フォーマットからのフィールドのサブセットを示す。具体的には、
図1*Aは、EVEXプリフィックス302、リアルオペコードフィールド330及びMOD R/Mフィールド340を示す。本実施例では、フォーマットフィールド240は、命令フォーマットがベクトルフレンドリ命令フォーマットであることを示すため0×62を含む。
【0137】
図18B〜18Fはそれぞれ、本発明の実施例による
図18Aの特定のベクトルフレンドリ命令フォーマットに符号化された一例となる特定のベクトルフレンドリ命令からのフィールドのサブセットを示す。
図18B〜18Fの説明では、一部のフィールドの特定の利用は、VADDPS命令の各種の例示的なコンフィギュレーションのため一部のフィールドの可能な符号化を示すため説明される。
図18B〜18Fのそれぞれでは、フォーマットフィールド240は、当該命令がベクトルフレンドリ命令フォーマットに符号化されていることを示すための0×62を含み、リアルオペコードフィールド330は、VADDPSオペコードを含む、
図18B〜18Fはそれぞれ、本発明の実施例によるEVEX.U1クラスにおけるVADDPS命令の符号化を示し、
図18B〜18Eはそれぞれ、非メモリアクセス205命令テンプレートにおけるVADDPSのEVEX.U1符号化を示し、
図18Fは、メモリアクセス220命令テンプレートにおけるVADDPSのEVEX.U1符号化を示す。
【0138】
図18Bは、非メモリアクセスライトマスク制御パーシャルラウンド制御タイプ処理212命令テンプレートにおけるVADDPS命令の符号化を示す。データ要素幅フィールド264は、32ビットデータ要素幅を示すため0である。クラスフィールド268(すなわち、EVEX.U)は、EVEX.U1クラスを示すため1に設定される。アルファフィールド252は、ライトマスク制御フィールド252Cとして解釈される(マージング又はゼロ化ライトマスクとの間の選択)。ベータフィールド254の最下位ビットは、RLフィールド257Aとして解釈され、パーシャルラウンドタイプ処理(すなわち、ラウンド257A.1)を示すため1に設定される。ベータフィールド254の2つの最上位ビットは、ラウンド処理フィールド259Aとして解釈される。モディファイアフィールド246(すなわち、MODR/M.MOD342)は、非メモリアクセスを示すため11に設定される。(すなわち、レジスタzmm3はメモリオペランドの代わりの第1ソースオペランドである。)この符号化では、VADDPS命令は、第1レジスタ(zmm3など)から第2レジスタ(zmm2など)へのPackedシングル精度浮動小数点値を加算し、ライトマスク(k1など)に従ってラウンド化された結果を第3レジスタ(zmm3など)に格納する。これは、以下のニーモニックにより示される。すなわち、マージング・ライトマスキングのための{z}のないゼロ化・ライトマスキング及び同じためのEVEX.U1.NDS.512.0F.W058/rVADDPS zmm1である。その他のニーモニックは、このセクションでは、すべてが{z}を含むことを示すが、{z}のない同じニーモニックがまた同様に可能であることが理解されるべきである。
【0139】
図18C〜18Eはそれぞれ非メモリアクセスライトマスク制御VSIZEタイプ処理217命令テンプレートにおけるVADDPS命令の符号化を示す。
図18C〜18Eの符号化は、ベータフィールドを除き
図17Bと同一である。
図18C〜18Eのそれぞれにおいて、ベータフィールド254の最下位ビットはRLフィールド257Aとして解釈され、VSIZEタイプ処理257A.2を示すため0に設定される。ベータフィールド254の2つの最上位ビットは、ベクトル長フィールド259Bとして解釈される。
【0140】
図18Cにおいて、ベクトル長フィールド259Bは、512ビットのベクトルサイズを示すため10に設定される。
図18Dにおいて、ベクトル長フィールド259Bは、256ビットのベクトルサイズを示すため01に設定される。
図18Eにおいて、ベクトル長フィールド259Bは、128ビットのベクトルサイズを示すため00に設定される。この符号化では、VADDPS命令は、第1レジスタ(zmm3など)から第2レジスタ(zmm2など)へのPackedシングル精度浮動小数点値を加算し、ライトマスク(k1など)に従って当該結果を第3レジスタ(zmm1など)に格納する。
図18Cは、以下のニーモニックにより示される。EVEX.U1.NDS.512.0F.W0 58/r VADDPS zmm1{k1}{z},zmm2,zmm3である。
図18Dは、以下のニーモニックにより示される。EVEX.U1.NDS.256.0F.W0 58/r VADDPS ymm1{k1}{z},ymm2,ymm3である。
図18Eは、以下のニーモニックにより示される。EVEX.U1.NDS.128.0F.W0 58/r VADDPS xmm1{k1}{z},xmm2,xmm3である。
【0141】
図18Fは、メモリアクセスライトマスク制御227命令テンプレートにおけるVADDPS命令の符号化を示す。データ要素幅フィールド264は、32ビットデータ要素幅を示すため0である。クラスフィールド268(すなわち、EVEX.U)は、EVEX.U1クラスを示すため1に設定される。アルファフィールド252は、ライトマスク制御フィールド252Cとして解釈される(マージングライトマスク又はゼロ化ライトマスクとの間で選択)。ベータフィールド254の最下位ビットは、ブロードキャストフィールド257Bとして解釈される。ベータフィールド254の2つの最下位ビットは、ベクトル長フィールド259Bとして解釈される。モディファイアフィールド246(すなわち、MODR/M.MOD342)は、第1ソースオペランドがメモリオペランドであることを示すため00、01又は10に設定される。これは、
図17Dにおいて、
【0142】
【数2】
として(すなわち、11以外の任意の入力)示される。この符号化では、VADDPS命令は、第1レジスタ(zmm2など)にロードに応答してブロードキャスト可能なメモリオペランドからのPackedシングル精度浮動小数転置を加算し、ライトマスク(k1など)に従って第2レジスタ(zmm1など)に結果を格納する。ベクトル長フィールドが512ビットのベクトルを示すとき、これは、以下のニーモニックにより示されてもよい。
EVEX.U1.NDS.512.0F.W0 58/r VADDPS zmm1{k1}{z},zmm2,B
32(mV) ベクトル長フィールドが256ビットのベクトルを示すとき、これは、以下のニーモニックにより示されてもよい。
EVEX.U1.NDS.256.0F.W0 58/r VADDPS ymm1{k1}{z},ymm2,B
32(mV) ベクトル長フィールドが128ビットのベクトルを示すとき、これは、以下のニーモニックにより示されてもよい。
EVEX.U1.NDS.128.0F.W0 58/r VADDPS xmm1{k1}{z},xmm2,B
32(mV)
・例示的なディスプレースメント8*N値
本発明の一実施例では、メモリアクセスサイズNが、使用される命令テンプレートと後述されるような他のファクタとに依存してベース処理フィールド、データ要素幅フィールド及び拡張処理フィールドの2以上のコンテンツに基づき決定される。本発明の一実施例では、U=0(クラスA)に関して、以下のテーブルは、メモリにおいてアクセスされるベクトル(又は要素)のサイズと、圧縮されたディスプレースメントのディスプレースメントファクタ(disp8*N)とを示す。いくつかの命令は、メモリのレベルにおいてフルベクトル粒度の代わりに要素粒度により機能し、以下のテーブルにおいて“要素レベル”カラムを利用するべきである。ファンクションカラムのラベル(U/S
i64など)は、ベース処理フィールド(例えば、U/S
iはロード整数及びロード/op整数を示すなど)と、データ要素幅(例えば、64は64ビットデータ要素幅である)とにより指定されるメモリアクセスタイプを示す。当該カラムの値は、
図3の実施例においてデータ操作フィールド254Cの可能な値である。
図4Bを参照して、各種メモリアクセスタイプがそれらのデータ操作
図12A〜15Cにフローして示され(いくつかのケースでは、データ要素幅判定を介し)、各種テーブル12A〜15CはNの値の選択を導出し、適切である場合、カラム2及び3に配置される。例えば、ロード/op整数64ビットデータ要素幅メモリアクセス処理は
図12Aにフローし、データ操作フィールド254Cのコンテンツは、データ操作処理(
図12Aに示されるような)とNの値(以下に示されるような)との双方を選択するのに利用される。他の例として、ロード整数64ビットデータ要素幅メモリアクセス処理(ベース処理フィールド242においてブロードキャストを示す)は
図13Aにフローし、データ操作フィールド254Cのコンテンツが、データ操作処理(
図13Aに示されるように、ブロードキャストデータ変換を含まない)とNの値(後述される)との双方を選択するため利用される。従って、第2カラムは、ベース処理フィールド242がブロードキャスト又は要素レベルメモリアクセスを指定しない命令のためのものであり、第3カラムの第1サブカラムは、ベース処理フィールド242がブロードキャストを指定するが、要素レベルメモリアクセスを指定しない命令のためのものであり、第3カラムの第2サブカラムは、ベース処理フィールド242がブロードキャスト又は要素レベルメモリアクセスを指定する命令のためのものである。
【0153】
【表21】
本発明の一実施例では、U=1(クラスB)に関して、各種命令が、ベクトル長(ベクトル長フィールド259Bのコンテンツにより決定される)、ベクトル処理のタイプ及びブロードキャストが実行されているか(ベース処理フィールド242及び/又はブロードキャストフィールド257Bの値)、並びにデータ要素幅(
図4Eに示されるように、リアルオペコードフィールド330及び/又はデータ要素幅フィールド264のコンテンツにより決定される)に基づき異なるタイプの命令について決定されるメモリアクセスサイズNに関してdisp8を利用することによって、圧縮されたディスプレースメントを利用可能である。一般に、メモリアクセスサイズNは、メモリ入力のバイト数に対応する(例えば、フル512ビットメモリベクトルにアクセスするとき64など)。本発明の一実施例では、以下の第1テーブルは、以下の第2テーブルにおける用語の利用の一部を説明し、第2テーブルは各種命令のためのNの値を与える。以下のテーブルのTupleは、メモリのデータのPacked構造である。
【0155】
【表23】
・リザービングビット
また、本発明のいくつかの実施例では、異なるプロセッサ又はプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ又は両方のクラスをサポートしてもよい。例えば、汎用計算用のハイパフォーマンス汎用オウト・オブ・オーダコアは、クラスBのみをサポートし、主としてグラフィック及び/又は科学(スループット)計算用のコアはクラスAのみをサポートし、双方用のコアは双方をサポートしてもよい(もちろん、双方のクラスカラのテンプレート及び命令の混合を有するが、双方のクラスカラの必ずしもすべてのテンプレート及び命令を有さないコアは、本発明の範囲内である。)また、シングルプロセッサは、そのすべてが同じクラスをサポートするか、又は異なるコアは異なるクラスをサポートする複数のコアを含むものであってもよい。例えば、別個のグラフィック及び汎用コアを備えたプロセッサでは、主としてグラフィック及び/又は科学計算用のグラフィックコアの1つはクラスAしかサポートせず、汎用コアの1以上は、クラスBしかサポートしない汎用計算用のハイパフォーマンス汎用アウト・オブ・オーダコアであってもよい。別個のグラフィックコアを有しない他のプロセッサは、クラスAとクラスBとの双方をサポートする1以上の汎用イン・オーダ又はアウト・オブ・オーダコアを有してもよい。もちろん、1つのクラスカラの特徴はまた、本発明の異なる実施例における他のクラスにおいて実現されてもよい。ハイレベル言語により記述されたプログラムは、1)実行用のターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、又は2)コードを現在実行中のプロセッサによりサポートされる命令に基づき実行すべきルーチンを選択する制御フローコードを有し、すべてのクラスの命令の異なる組み合わせを用いて記述された他のルーチンを有する形式を含む各種実行可能形式に置かれる(例えば、ジャストインタイムコンパイル又は静的コンパイルされるなど)。
【0156】
【表24】
ロード、ブロードキャスト及びインサートに関して、本発明の一実施例は、ベース処理フィールドによる異なるバージョンのブロードキャストを実現し、このため、ブロードキャストフィールド257Bは不要である。バイト/ワード処理について、本発明の一実施例は、当該特徴をサポートするハードウェアコストが現在は正当なものでなかっためた、ブロードキャストフィールド257Bによるブロードキャストをサポートしていない。ギャザーに関して(ロードの一タイプである)、本発明の一実施例は、ベース処理フィールドによる異なるバージョンのブロードキャストを実現し、このため、ブロードキャストフィールド257Bは不要である。スキャッタ、抽出及びストアに関して、一実施例は、これらのタイプの命令はレジスタソース(メモリソースでない)とメモリデスティネーションとを有するため、ブロードキャストフィールド257Bによるブロードキャストをサポートせず、メモリがソースであるときのみ、ブロードキャストは意味がある。ギャザー命令のマスクは、完了マスクであり、マージングライトマスク処理は現在所望の処理である。ストア、スキャッタ又は抽出に対するライトマスクのゼロ化の実行は、ベクトルストア、スキャッタ又は抽出が典型的には利用されない処理のメモリの位置をゼロ化する。比較のため、本発明の一実施例では、ライトマスキングのゼロ化は、比較結果が否定的なものである場合、比較はすでに0を書き込んでいるため不自然であり(例えば、比較された2つの要素が等価の比較のケースにおいて等しくないなど)、従って、比較結果が解釈される方法を妨げる。
【0157】
例示的なパイプライン−図19〜22
図19〜22は、本発明による4つの例示的なプロセッサパイプラインの異なるステージにおいて
図2Aの命令テンプレートの何れのフィールドが利用されるか示すブロック図である。要求される理解レベルにおいて、図示されたパイプラインステージ及びそれらのファンクションは周知であることに留意すべきである。
図19〜22のそれぞれは、非メモリアクセスフルラウンド制御タイプ処理210命令テンプレート、非メモリアクセスデータ変換タイプ処理215命令テンプレート及びメモリアクセス225/230命令テンプレートをそれぞれ示すA、B及びC図を含む。
図19〜22のそれぞれは異なる一例となるパイプラインを示すが、同一のパイプラインは各図番のA〜C図のそれぞれに示される。例えば、
図19Aは、非メモリアクセスフルラウンド制御タイプ処理210命令テンプレートと一例となる第1命令パイプラインとを示し、
図19Bは、非メモリアクセスデータ変換タイプ処理215と
図19Aと同じ例示的なパイプラインとを示し、
図20Aは非メモリアクセスフルラウンドタイプ制御処理210命令テンプレートと一例となる第2プロセッサパイプラインとを示す。
【0158】
図19〜22はそれぞれ、プロセッサパイプライン1900、2000、2100及び2200を示す。パイプラインステージ名は異なるパイプラインにわたって同一である場合、同一の参照番号が理解の容易のため利用された。しかしながら、これは、異なるパイプラインにわたって同一名のパイプラインステージが同じであることを意味するのでなく、単に類似する処理を実行することを意味する(それはより多く又はより少ないサブ処理を含むかもしれないが)。
・例示的な汎用パイプライン−
図19
プロセッサパイプライン1900は、汎用プロセッサパイプラインを表し、フェッチステージ1910、復号化ステージ1920、レジスタリード/メモリリードステージ1930、データ変換ステージ1940、実行ステージ1950及びライトバック/メモリライトステージ1960を含む。
【0159】
命令テンプレートからプロセッサパイプラインステージへのブラケット及び矢印は、パイプラインステージの異なるものによって利用されるフィールドを示す。例えば、
図19Aにおいて、フィールドのすべてが復号化ステージ1920により利用され、レジスタインデックスフィールド244がレジスタリード/メモリリードステージ1930により利用され、rsフィールド252A(ラウンド252A.1)、SAEフィールド256、ラウンド処理フィールド258及びデータ要素幅フィールド264が、実行ステージ1960により利用され、データ要素幅フィールド264はまたライトバック/ライトメモリステージ1960により利用され、ライトマスクフィールド268は実行ステージ1950又はライトバック/メモリライトステージ1960により利用される。(異なる2つのステージにおける任意的なライトマスクフィールド270の利用は、ライトマスクフィールドが実行ステージ1950におけるマスクされたデータ要素に対する処理の実行を不可にしうるか(これにより、これらのデータ要素位置がライト/メモリライトステージ1960において更新されることを防ぐ)、又は実行ステージ1950は、当該処理を実行し、ライトマスクがマスクされたデータ要素位置の更新を防ぐため、ライト/メモリライトステージ1960中に適用されることを可能にする。)
矢印は異なるフィールドにより利用されるステージのみを必ずしも表すものでなく、当該フィールドが最大のインパクトを有する可能性がある場所を表すことに留意すべきである。A図とB図との間では、拡張処理フィールド250がラウンド処理のための実行ステージ1950により利用され、拡張処理フィールド250がデータ変換タイプ処理のためデータ変換ステージ1940により利用され、データ要素幅フィールド264から実行ステージ1950へのラインがデータ変換ステージ1940に移されるという大きな相違があることに留意されたい。
図19Cは、レジスタリード/メモリリードステージ1930に移動するベース処理フィールド242、レジスタリード/メモリリードステージ1930により利用される拡張処理フィールド250のEHフィールド252B、スケールフィールド260、ディスプレースメントフィールド262A/ディスプレースメントファクタフィールド262B、ライトマスクフィールド270、及びそれがメモリリード又はメモリライト処理である否かに応じてレジスタリード/メモリリードステージ1930又はライトバック/メモリライト1960により任意的に利用されるデータ要素幅フィールド264を示す。即値フィールド272を利用するパイプラインステージは周知であるため、当該フィールドのマッピングは、本発明を不明りょうにしないように表されない。
・例示的なイン・オーダパイプライン−
図20
プロセッサパイプライン2000は、イン・オーダプロセッサパイプラインを表し、プロセッサパイプライン2000と同じ名前のパイプラインステージを有するが、フェッチステージ1910と復号化ステージ1920との間にレングス復号化ステージ2012が挿入されている。
【0160】
図20A〜20Cのマッピングは、実質的に
図19A〜19Cのものと同じである。
・例示的な第1アウト・オブ・オーダパイプライン−
図21
プロセッサパイプライン2100は、プロセッサパイプライン2000と同じ名前のパイプラインステージを有する例示的な第1アウト・オブ・オーダパイプラインを表すが、1)割当てステージ2122、リネーミングステージ2124、及び復号化ステージ1920とレジスタリード/メモリリードステージ1930との間に挿入されるスケジュールステージ2126と、2)リオーダバッファ(rob)リードステージ2162、例外処理ステージ2164、及びライトバック/メモリライトステージ1960の後に追加されるコミットステージ2166を有する。
【0161】
図21A〜21Cにおいて、マッピングは、1)レジスタインデックスフィールド244とモディファイアフィールド246とがリネーミングステージ2142により利用され、2)
図21Aのみにおいて、ライトマスクフィールド270がまた任意的にマスクされたデータ要素位置に対する例外を抑制するため、例外処理ステージ2164により任意的に利用され、3)
図21Aのみにおいて、SAEフィールド256が浮動小数点例外が抑制されているか否かに応じて実行ステージ1950及び例外処理ステージ2164により任意的に利用される、という例外はあるが、
図20A〜20Cのマッピングと全体的に同じである。
・例示的な第2オウト・オブ・オーダパイプライン−
図22
プロセッサパイプライン2200は、データ変換及び実行ステージが実行/データ変換ステージ2245を形成するようマージされていることを除き、プロセッサパイプライン2100と同じ名前のプロセッサパイプラインステージを有する例示的な第2アウト・オブ・オーダパイプラインを表す。
【0162】
図22A〜22Cのマッピングは、データ変換ステージ1940及び実行ステージ1950に別々に行われたマッピングが実行/データ変換ステージ22454に移行することを除き、
図21A〜21Cと実質的に同じである。
・例示的なパイプライン上のクラスB命令テンプレート
以下のテーブルは、本発明の実施例による
図2Bの命令テンプレートのフィールドを収容するため
図19〜22を変更する方法を示す。
【0163】
【表25】
・復号化ステージ1920
復号化ステージ1920において、各種の周知の復号化ユニットが利用可能である。例えば、復号化ユニットは、各マクロ命令をシングル幅マイクロ命令に復号化するものであってもよい。他の例として、復号化ユニットは、いくつかのマクロ命令をシングル幅マイクロ命令に復号化してもよく、他のものをマルチ幅マイクロ命令に復号化してもよい。アウト・オブ・オーダプロセッサパイプラインに特に適した他の例として、復号化ユニットは、各マクロ命令を1以上のマイクロopに復号化してもよく、各マイクロopが発行され、アウト・オブ・オーダに実行される。
【0164】
復号化ユニットは1以上のデコーダにより実現されてもよく、各デコーダは、当該分野において周知なプログラマブルロジックアレイ(PLA)として実現されてもよい。例えば、所与の復号化ユニットは、1)異なるマクロ命令を異なるデコーダに誘導するためのステアリングロジック、2)命令セットのサブセットを復号化し(第2、第3及び第4デコーダより多く)、1回に2つのマイクロopを生成する第1デコーダ、3)命令セット全体のサブセットのみを復号化し、1回に1つのマイクロopしか生成しない第2、第3及び第4デコーダ、4)命令セット全体のサブセットのみを復号化し、1回に4つのマイクロopを生成するマイクロシーケンサROM、及び5)何れの出力がマイクロopキューに提供されるか決定するマイクロシーケンサROM及びデコーダによる多重化ロジックフィードを有してもよい。デコーダの他の実施例は、より多く又はより少ない命令及び命令サブセットを復号化するより多く又はより少ないデコーダを有してもよい。例えば、一実施例は、1回に2つのマイクロopをそれぞれが生成する第2、第3及び第4デコーダを有してもよく、また1回に8つのマイクロopを生成するマイクロシーケンサROMを有してもよい。
【0165】
例示的なプロセッサアーキテクチャ−図23〜24
・例示的なイン・オーダプロセッサアーキテクチャ−
図23A〜23B
図23A〜Bは、一例となるイン・オーダプロセッサアーキテクチャのブロック図を示す。当該実施例は、ワイドベクトルプロセッサ(VPU)により拡張されたイン・オーダCPUコアの複数のインスタンス化に関して設計されている。コアは、正確なプリケーションに応じて高帯域幅インターコネクトネットワークを介し固定的なファンクションロジック、メモリI/Oインタフェース及び他の必要なI/Oロジックと通信する。例えば、本実施例のスタンドアローンGPUとしての実現は、典型的には、PCIeバスを含む。
【0166】
図23Aは、本発明の実施例によるオンダイインターコネクトネットワーク2302への接続とレベル2(L2)キャッシュ2304のローカルサブセットと共にシングルCPUコアのブロック図である。命令デコーダ2300は、特定のベクトル命令フォーマット300を含む拡張を備えたx86命令セットをサポートする。本発明の一実施例では、(設計を簡略化するため)スカラユニット2308及びベクトルユニット2310が別々のレジスタセットを利用し(それぞれスカラレジスタ2312及びベクトルレジスタ2314)、それらの間で転送されるデータは、メモリに書き込まれ、レベル1(L1)キャッシュ2306からリードバックされ、本発明の他の実施例は、異なるアプローチを利用してもよい(例えば、シングルレジスタセットを利用するか、又はライト及びリードバックなしに2つのレジスタファイルの間でデータが転送されることを可能にする通信パスを含むなど)。
【0167】
L1キャッシュ2306は、スカラユニット及びベクトルユニットへのキャッシュメモリへの低遅延アクセスを可能にする。ベクトルフレンドリ命令フォーマットのロード−op命令と共に、これは、L1キャッシュ2306が拡張されたレジスタファイルと同様に扱うことができることを意味する。これは、特にイビクションヒントフィールド252Bによる多数のアルゴリズムのパフォーマンスを有意に向上させる。
【0168】
L2キャッシュ2304のローカルサブセットは、CPUコア毎に1つである別々のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各CPUは、L2キャッシュ2304の自らのローカルサブセットへの直接的なアクセスパスを有する。CPUコアによりリードされたデータは、それのL2キャッシュサブセット2304に格納され、自らのローカルL2キャッシュサブセットにアクセスする他のCPUとパラレルに迅速にアクセス可能である。CPUコアにより書き込まれるデータは、それ自体のL2キャッシュサブセット2304に格納され、必要に応じて、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保障する。
【0169】
図23Bは、本発明の実施例による
図23AのCPUコアの一部の分解図である。
図23Bは、L1キャッシュ2304のL1データキャッシュ2306Aの部分とと共に、ベクトルユニット2310及びベクトルレジスタ2314に関するさらなる詳細を含む。具体的には、ベクトルユニット2310は、整数、シングル精度フロート及びダブル精度フロート命令を実行する16ワイドベクトル処理ユニット(VPU)である(16ワイドALU2328を参照)。VPUは、スウィズルユニット2320によるレジスタ入力のスウィズル処理、数値変換ユニット2322A〜Bによる数値変換、及びメモリ入力に対する複製ユニット2324による複製をサポートする。ライトマスクレジスタ2326は、結果としてのベクトルライトをプリディケート(predicate)することを可能にする。
【0170】
レジスタデータは、例えば、マトリックス乗算をサポートするためなど、各種方法によりスウィズル可能である。メモリからのデータは、VPUレーンにわたって複製可能である。これは、グラフィックと非グラフィックパラレルデータ処理の双方において通常の処理である、キャッシュ効率を有意に増大する。
【0171】
リングネットワークは、CPUコア、L2キャッシュ及び他のロジックブロックなどのエージェントがチップ内で互いに通信することを可能にするため双方向である。各リングデータパスは、方向毎に512ビットワイドである。
・例示的なアウト・オブ・オーダアーキテクチャ−
図24
図24は、本発明の実施例による例示的なアウト・オブ・オーダアーキテクチャを示すブロック図である。具体的には、
図24は、ベクトルフレンドリ命令フォーマット及びその実行を含むよう変更された周知の一例となるアウト・オブ・オーダアーキテクチャを示す。
図24において、矢印は2以上のユニットの間の接続を示し、矢印の方向はこれらのユニットの間のデータフローの方向を示す。
図24は、実行エンジンユニット2410及びメモリユニット2415に接続されるフロントエンドユニット2405を有し、実行エンジンユニット2410はさらに、メモリユニット2415に接続される。
【0172】
フロントエンドユニット2405は、レベル2(L2)ブランチ予測ユニット2422に接続されるレベル1(L1)ブランチ予測ユニット2420を有する。L1及びL2ブランチ予測ユニット2420、2422は、L1命令キャッシュユニット2424に接続される。L1命令キャッシュユニット2424は、命令フェッチプリデコードユニット2428にさらに接続される命令変換ルックアサイドバッファ(TLB)2426に接続される。命令フェッチプリでコードユニット2428は、デコードユニット2432にさらに接続される命令キューユニット2430に接続される。デコードユニット2432は、コンプレックスデコーダユニット2434と、3つのシンプルデコーダユニット2436、2438及び2440とを有する。デコードユニット2432は、マイクロコードROMユニット2442を有する。デコードユニット2432は、デコードステージセクションにおいて上述されたように動作してもよい。L1命令キャッシュユニット2424はさらにメモリユニット2415のL2キャッシュユニット2448に接続される。命令TLBユニット2426はさらに、メモリユニット2415において第2レベルTLBユニット2446に接続される。デコードユニット2432、マイクロコードROMユニット2442及びループストリーム検出ユニット2444はそれぞれ、実行エンジンユニット2410においてリネーム/割当ユニット2456に接続される。
【0173】
実行エンジンユニット2410は、リタイアメントユニット2474及び統合スケジューラユニット2458に接続されるリネーム/割当ユニット2456を含む。リタイアメントユニット2474はさらに、実行ユニット2460に接続され、リオーダバッファユニット2478を有する。統合スケジューラユニット2458はさらに、実行ユニット2460に接続される物理レジスタファイルユニット2476に接続される。物理レジスタファイルユニット2476は、ベクトルレジスタユニット2477A、ライトマスクレジスタユニット2477B及びスカラレジスタユニット2477Cを有し、これらのレジスタユニットは、ベクトルレジスタ510、ベクトルマスクレジスタ515及び汎用レジスタ525を提供し、物理レジスタファイルユニット2476は、図示しない追加的なレジスタファイルを有してもよい(例えば、MMX Packed整数フラットレジスタファイル550にエイリアシングされたスカラ浮動小数点スタックレジスタファイル545など)。実行ユニット2460は、3つの混合されたスカラ及びベクトルユニット2462、2464及び2472、ロードユニット2466、ストアアドレスユニット2468、ストアデータユニット2470を含む。ロードユニット2466、ストアアドレスユニット2468及びストアデータユニット2470はそれぞれ、メモリユニット2415のデータTLBユニット2452にさらに接続される。
【0174】
メモリユニット2415は、データTLBユニット2452に接続される第2レベルTLBユニット2446を有する。データTLBユニット2452は、L1データキャッシュユニット2454に接続される。L1データキャッシュユニット2454はさらに、L2キャッシュユニット2448に接続される。いくつかの実施例では、L2キャッシュユニット2448はさらに、メモリユニット2415の内部及び/又は外部においてL3及びより上位のキャッシュユニット2450に接続される。
【0175】
例えば、例示的なアウト・オブ・オーダアーキテクチャは、1)命令フェッチプリデコードユニット2428はフェッチ及び長さ復号化ステージ1910及び2012、2)デコードユニット2432はデコードステージ1920を実行し、3)リネーム/割当ユニット2456は割当ステージ2122及びリネーミングステージ2124を実行し、4)統合スケジューラ2458はスケジュールステージ2126を実行し、5)物理レジスタファイルユニット2476、リオーダバッファユニット2478及びメモリユニット2415はレジスタリード/メモリリードステージ1930を実行し、実行ユニット2460は実行/データ変換ステージ2245を実行し、6)メモリユニット2415及びリオーダバッファユニット2478はライトバック/メモリライトステージ1960を実行し、7)リタイアメントユニット2474はROBリード2162ステージを実行し、8)各種ユニットは例外処理ステージ2164に関与してもよく、9)リタイアメントユニット2474及び物理レジスタファイルユニット2476はコミットステージ2166を実行することによって、プロセスパイプライン2200を実現してもよい。
・例示的なシングルコア及びマルチコアプロセッサ−
図29
図29は、本発明の実施例による統合されたメモリコントローラ及びグラフィックを備えたシングルコアプロセッサ及びマルチコアプロセッサ2900のブロック図である。
図29における実線のボックスは、シングルコア2902A、システムエージェント2910及び1以上のバスコントローラユニット2916のセットを備えたプロセッサ2900を示し、破線のボックスの任意的な追加は、複数のコア2902A〜N、システムエージェントユニット2910における1以上の統合されたメモリコントローラユニット2914のセット及び統合されたグラフィックロジック2908を備えた他のプロセッサ2900を示す。
【0176】
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット2906のセット、及び統合されたメモリコントローラユニット2914のセットに接続される外部メモリ(図示せず)を有する。共有キャッシュユニット2906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)又は他のレベルのキャッシュなどの1以上の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)及び/又はこれらの組み合わせを含むものであってもよい。一実施例では、リングベースインターコネクトユニット2912は、統合されたグラフィックロジック2908、共有キャッシュユニット2906のセット及びシステムエージェントユニット2910を相互接続するが、他の実施例は、当該ユニットを相互接続するための何れかの個数の周知の技術を利用してもよい。
【0177】
いくつかの実施例では、コア2902A〜Nの1以上はマルチスレッド処理が可能である。システムエージェント2910は、コア2902A〜Nを調整及び実行する上記のコンポーネントを含む。システムエージェントユニット2910は、例えば、パワー制御ユニット(PCU)及びディスプレイユニットなどを含むものであってもよい。PCUは、コア2902A〜N及び統合グラフィックロジック2908の電力状態を調整するのに必要なロジック及びコンポーネントであってもよく、又は含むものであってもよい。ディスプレイユニットは、1以上の外部接続されたディスプレイを分割するためのものである。
【0178】
コア2902A〜Nは、アーキテクチャ及び/又は命令セットに関して同質又は異質であってもよい。例えば、コア2902A〜Nの一部はイン・オーダであり(例えば、
図23A及び23Bに示されるものなど)、他のものはアウト・オブ・オーダである(
図24などに示されるものなど)。他の例として、コア2902A〜Nの2以上は、同じ命令セットを実行可能であってもよく、他のものは当該命令セットのサブセットのみ又は異なる命令セットを実行可能であってもよい。コアの少なくとも1つは、ここに接続されるベクトルフレンドリ命令フォーマットを実行可能である。
【0179】
プロセッサは、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なCore
TMi3,i5,i7,2Duo及びQuad、Xeon
TM又はItaniumプロセッサなどの汎用プロセッサであってもよい。あるいは、プロセッサは、他の企業からのものであってもよい。プロセッサは、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサなどの特定用途プロセッサであってもよい。プロセッサは、1以上のチップ上に実現されてもよい。プロセッサ2900は、BiCMOS、CMOS又はNMOSなどの複数のプロセス技術の何れかを利用して1以上の基板上に実現されてもよく、及び/又はその一部であってもよい。
【0180】
例示的なコンピュータシステム及びプロセッサ−図25〜28
図25〜27は、プロセッサ2900を含むのに適した一例となるシステムであり、
図28は、コア2902の1以上を含むものであってもよい一例となるSoC(System on Chip)である。ラップトップ、デスクトップ、携帯PC、PDA(Personal Digital Assistant)、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、埋め込みプロセッサ、DSP(Digital Signal Processor)、グラフィック装置、ビデオゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、携帯装置及び他の各種電子装置について当該分野で知られる他のシステム設計及びコンフィギュレーションがまた適している。一般に、ここに開示されるようなプロセッサ及び/又は他の実行ロジックを搭載可能な各種システム又は電子装置が一般に適している。
【0181】
図25を参照して、本発明の一実施例によるシステム2500のブロック図が示される。システム2500は、GMCH(Graphics Memory Controller Hub)2520に接続される1以上のプロセッサ2510、2515を含むものであってもよい。
図25において、追加的なプロセッサ2515の任意的な性質は破線により示される。
【0182】
各プロセッサ2510、2515は、あるバージョンのプロセッサ2900であってもよい。しかしながら、統合されたグラフィックロジック及び統合されたメモリ制御ユニットはプロセッサ2510、2515に存在する可能性は低いことに留意すべきである。
【0183】
図25は、GMCHがDRAM(Dynamic Random Access Memory)などであってもよいメモリ2540に接続されてもよいことを示す。DRAMは、少なくとも1つの実施例について不揮発性キャッシュに関連付けされてもよい。
【0184】
GMCH2520は、チップセット又はチップセットの一部であってもよい。GMCH2520は、プロセッサ2510、2515と通信し、プロセッサ2510、2515とメモリ2540との間のやりとりを制御してもよい。GMCH2520はまた、プロセッサ2510、2515とシステム2500の他の要素との間のアクセラレートバスインタフェースとして機能してもよい。少なくとも1つの実施例について、GMCH2520は、フロントサイドバス(FSB)2595などのマルチドロップバスを介しプロセッサ2510、2515と通信する。
【0185】
さらに、GMCH2520は、ディスプレイ2545(フラットパネルディスプレイなど)に接続される。GMCH2520はさらに、各種周辺装置とシステム2500とを接続するのに利用されてもよい入出力(I/O)コントローラハブ(ICH)2550に接続される。
図25の実施例などにおいて、他の周辺装置2570と共にICH2550に接続される離散グラフィック装置であってもよい外部グラフィック装置2560が示される。
【0186】
あるいは、さらなる又は異なるプロセッサがまた、システム2500に存在してもよい。例えば、追加的なプロセッサ2515は、プロセッサ2510と同じ追加的なプロセッサ、プロセッサ2510について異質な又は非対称な追加的なプロセッサ、アクセラレータ(グラフィックアクセラレータ又はDSP(Digital Signal Processing)ユニットなど)、FPGA(Field Programmable Gate Array)又は他の何れかのプロセッサを含むものであってもよい。アーキテクチャ、マイクロアーキテクチャ、サーマル、電力消費特性などを含むメリットのメトリックの範囲に関して物理リソース2510、2515との間に各種装置が存在しうる。これらの相違は、処理要素2510、2515の間で非対称性及び異質性として効果的に示される。少なくとも1つの実施例について、各種処理要素2510、2515は同一のダイパッケージにあってもよい。
【0187】
図26を参照して、本発明の実施例による第2システム2600のブロック図が示される。
図26に示されるように、マルチプロセッサシステム2600はポイント・ツー・ポイントインターコネクトシステムであり、ポイント・ツー・ポイントインターコネクト2650を介し接続される第1プロセッサ2670と第2プロセッサ2680とを含む。
図26に示されるように、プロセッサ2670、2680の各々はあるバージョンのプロセッサ2900であってもよい。
【0188】
あるいは、プロセッサ2670、2680の1以上は、アクセラレータ又はFPGAなどのプロセッサ以外の要素であってもよい。
【0189】
2つのみのプロセッサ2670、2680と共に示されるが、本発明の範囲はこれに限定されるものでないことが理解されるべきである。他の実施例では、1以上の追加的な処理要素が所与のプロセッサに存在してもよい。
【0190】
プロセッサ2670は、IMC(Integrated Memory Controller)ハブ2672とポイント・ツー・ポイント(P−P)インタフェース2676、2678とを含むものであってもよい。同様に、第2プロセッサ2680はIMC2682とP−Pインタフェース2686、2688とを有してもよい。プロセッサ2670、2680は、PtPインタフェース回路2678、2688を用いてポイント・ツー・ポイント(PtP)インタフェース2650を介しデータをやりとりしてもよい。
図26に示されるように、IMC2672及び2682は、プロセッサと各自のメモリ、すなわち、各プロセッサにローカルに付属されるメインメモリの一部であってもよいメモリ2642、2644とを接続する。
【0191】
プロセッサ2670、2680はそれぞれ、ポイント・ツー・ポイントインタフェース回路2676、2694、2686、2698を用いて個別のP−Pインタフェース2652,2654を介しチップセット2690とデータをやりとりしてもよい。チップセット2690はまた、ハイパフォーマンスグラフィックインタフェース2639を介しハイパフォーマンスグラフィック回路2638とデータをやりとりしてもよい。
【0192】
共有キャッシュ(図示せず)は、プロセッサが低電力モードに置かれている場合、プロセッサのローカルキャッシュ情報が共有キャッシュに格納されるように、双方のプロセッサの外部の何れかのプロセッサに含まれてもよく、P−Pインターコネクトを介しプロセッサに接続されてもよい。
【0193】
チップセット2690は、インタフェース2696を介し第1バス2616に接続されてもよい。一実施例では、第1バス2616は、本発明の範囲はこれに限定されるものでないが、PCI(Peripheral Component Interconenct(PCI)バス、PCI Expressバスや他の第3世代I/Oインターコネクトバスなどのバスであってもよい。
【0194】
図26に示されるように、各種I/O装置2614が、第1バス2616と第2バス2620とを接続するバスブリッジ2618と共に、第1バス2616に接続されてもよい。一実施例では、第2バス2620は、LPC(Low Pin Count)バスであってもよい。キーボード/マウス2622、通信装置2626及び一実施例ではコード2630を有してもよいディスクドライブ又は他のマスストレージ装置などのデータストレージユニット2628などを含む各種装置が、第2バス2620に接続されてもよい。さらに、オーディオI/O2624が、第2バス2620に接続されてもよい。他のアーキテクチャが可能であることに留意されたい。例えば、
図26のポイント・ツー・ポイントアーキテクチャの代わりに、システムはマルチドロップバス又は他のアーキテクチャを実現してもよい。
【0195】
図27を参照して、本発明の実施例による第3システム2700のブロック図が示される。
図26及び27の同様の要素は同様の参照番号を有し、
図26の特定の態様は、
図27の他の態様を不明りょうにすることを回避するため、
図27から省略された。
【0196】
図27は、処理要素2670、2680はそれぞれ統合されたメモリ及びI/O制御ロジック(CL)2672、2682を有してもよいことを示す。少なくとも1つの実施例について、CL2672、2682は、
図29及び26に関して上述されたものなどのメモリコントローラハブロジック(IMC)を含むものであってもよい。さらに、CL2672、2682はまた、I/O制御ロジックを有してもよい。
図27は、メモリ2642、2644がCL2672、2682に接続されるだけでなく、I/O装置2714がまた制御ロジック2672、2682に接続されることを示す。従来のI/O装置2715はチップセット2690に接続される。
【0197】
図28を参照して、本発明の実施例によるSoC2800のブロック図が示される。
図29の同様の要素は同様の参照番号を有する。また、破線のボックスは、より先進的なSoCに関する任意的な特徴である。
図28において、インターコネクトユニット2802は、1以上のコア2902A〜Nのセットと共有キャッシュユニット2906を有するアプリケーションプロセッサ2810、システムエージェントユニット2910、バスコントローラユニット2916、統合されたメモリコントローラユニット2914、統合されたグラフィックロジック2908を有する1以上のメディアプロセッサ2802、スチル及び/又はビデオカメラ機能を提供する画像プロセッサ2824、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ2828、ビデオ符号化/復号化アクセラレーションを提供するビデオプロセッサ2828、SRAM(Static Random Access Memory)ユニット2830、DMA(Direct Memory Access)ユニット2832、及び1以上の外部ディスプレイに接続するためのディスプレイユニット2840に接続されてもよい。
【0198】
ここに開示される機構の実施例は、ハードウェア、ソフトウェア、ファームウェア又は当該実現形態のアプローチの組み合わせにより実現されてもよい。本発明の実施例は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つの入力装置及び少なくとも1つの出力装置を有するプログラム可能なシステム上で実行されるコンピュータプログラム又はプログラムコードとして実現されてもよい。
【0199】
図26に示されるコード2630などのプログラムコードは、ここに開示される機能を実行し、出力情報を生成するため入力データに適用されてもよい。出力情報は、既知の方法により1以上の出力装置に適用されてもよい。本出願のため、処理システムは、DSP(Digital Signal Processor)、マイクロコントローラ、ASIC(Application Specific Integrated Circuit)又はマイクロプロセッサなどのプロセッサを有する何れかのシステムを有する。
【0200】
プログラムコードは、処理システムと通信するためハイレベルな手続き型又はオブジェクト指向型プログラミング言語により実現されてもよい。プログラムコードはまた、所望される場合、アセンブリ又は機械言語により実現されてもよい。実際、ここに開示される機構は、何れか特定のプログラミング言語に範囲が限定されるものでない。何れのケースでも、言語はコンパイル又はインタープリットされた言語であってもよい。
【0201】
少なくとも1つの実施例の1以上の態様は、マシーンにより読み込まれると、当該マシーンにここに開示された技術を実行するためのロジックを構成させるプロセッサ内の各種ロジックを表すマシーン可読媒体に格納される命令により実現されてもよい。“IPコア”として知られるこのような表現は、有形なマシーン可読媒体に格納され、ロジック又はプロセッサを実際に作製する製造マシーンにロードするため各種カスタム又は製造施設に供給されてもよい。
【0202】
このようなマシーン可読記憶媒体は、限定することなく、ハードディスクなどの記憶媒体、フロッピー(登録商標)ディスク、光ディスク(CD−ROM、CD−RW)及び光磁気ディスクを含む他の何れかのタイプのディスク、ROM、RAM、DRAM、SRAM、EPROM、フラッシュメモリ、EEPROMなどの半導体装置、磁気若しくは光カード又は電子命令を格納するのに適した他の何れかのタイプの媒体を含む、マシーン又は装置により製造又は形成される非一時的で有形な物の構成を含むものであってもよい。
【0203】
従って、本発明の実施例はまた、ここに開示される構成、回路、装置、プロセッサ及び/又はシステムの特徴を規定するHDL(Hardware Description Language)などの設計データを含む又はベクトルフレンドリ命令フォーマットの命令を含む非一時的な有形のマシーン可読媒体を含む。このような実施例はまた、プログラムと呼ばれてもよい。
【0204】
いくつかのケースでは、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するため利用されてもよい。例えば、命令コンバータは、命令をコアにより処理される1以上の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換などを利用して)、モーフィング、エミュレート又はコンバートしてもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせにより実現されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、又は部分的にオン及びオフのプロセッサであってもよい。
【0205】
図30は、本発明の実施例によるソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するためのソフトウェア命令コンバータの利用を示すブロック図である。図示された実施例では、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア又はこれらの各種組み合わせにより実現されてもよいが、ソフトウェア命令コンバータである。
図30は、ハイレベル言語3002のプログラムが、少なくとも1つのx86命令セットコア3016によりプロセッサにより直接実行されてもよいx86バイナリコード3006を生成するため、x86コンパイラ3004を利用してコンパイルされてもよい。(コンパイルされた命令の一部はベクトルフレンドリ命令フォーマットによるものであることが仮定される。)少なくとも1つのx86命令セットコア3016を備えたプロセッサは、少なくとも1つのx86命令セットコアを備えたインテルプロセッサと実質的に同じ結果を実現するため、(1)インテルx86命令セットコアの命令セットの実質的な一部、又は2)少なくとも1つのx86命令セットコアを備えたインテルプロセッサ上で実行されるよう対象とされたオブジェクトコードバージョンのアプリケーション若しくは他のソフトウェアを互換的に実行又は処理することによって、少なくとも1つのx86命令セットコアを備えたインテルプロセッサと実質的に同じ機能を実行可能な何れかのプロセッサを表す。x86コンパイラ3004は、追加的なリンケージ処理によって又はなしに少なくとも1つのx86命令セットコア3016を備えたプロセッサ上で実行可能なx86バイナリコード3006(オブジェクトコードなど)を生成するよう動作可能なコンパイラを表す。同様に、
図30は、少なくとも1つのx86命令セットコア3014なしにプロセッサにより直接実行されてもよい他の命令セットバイナリコード3010を生成するため、他の命令セットコンパイラ3008を利用してコンパイルされてもよい(例えば、カリフォルニア州SunnyvaleのARM HoldingsのARM命令セットを実行する、及び/又はカリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セットを実行するコアを備えたプロセッサなど)。命令コンバータ3012は、x86バイナリコード3006をx86命令セットコア3014なしにプロセッサに直接実行されるコードに変換するのに利用される。この変換されたコードは、これが可能な命令コンバータが生成するのが困難であるため、他の命令セットバイナリコード3010と同じである可能性はないが、変換されたコードは全体処理を実行し、他の命令セットからの命令から生成されてもよい。従って、命令コンバータ3012は、エミュレーション、シミュレーション又は他の何れかのプロセスを介しx86命令セットプロセッサ又はコアを有しないプロセッサ又は他の電子装置がx86バイナリコード3006を実行することを可能にするソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを表す。
【0206】
ここに開示されるベクトルフレンドリ命令フォーマットによる命令の特定の処理は、ハードウェアコンポーネントにより実行され、当該処理を実行する命令によりプログラムされた回路又は他のハードウェアコンポーネントをもたらす又は少なくとも生じさせるのに利用されるマシーン実行可能な命令により実現されてもよい。当該回路は、2,3例をあげると、汎用又は特定用途プロセッサ又はロジック回路を含むものであってもよい。当該処理はまた、任意的にはハードウェアとソフトウェアとの組み合わせにより実行されてもよい。実行ロジック及び/又はプロセッサは、命令により指定された結果オペランドを格納するため、マシーン命令から導出されるマシーン命令又は1以上の制御信号に対応する特定の回路又は他のロジックを含むものであってもよい。例えば、ここに開示される命令の実施例は、
図25〜28の1以上のシステムにおいて実行されてもよく、ベクトルフレンドリ命令フォーマットの命令の実施例は、システムにおいて実行されるプログラムコードに格納されてもよい。さらに、これらの図の処理要素は、ここに開示される詳細なパイプライン及び/又はアーキテクチャ(例えば、イン・オーダ及びアウト・オブ・オーダアーキテクチャなど)の1つを利用してもよい。例えば、イン・オーダアーキテクチャのデコードユニットは、命令を復号化し、復号化された命令をベクトル又はスカラユニットなどにわたしてもよい。
【0207】
上記説明は、本発明の好適な実施例を示すためのものである。上記の説明から、特に成長が速く、さらなる発展が容易には予想されない当該技術エリアにおいて、本発明は、添付した請求項及びその均等の範囲内の本発明の原理から逸脱することなく当業者により構成及び詳細について変更可能である。例えば、方法の1以上の処理は組み合わせ又は分離されてもよい。
【0208】
他の実施例
ベクトルフレンドリ命令フォーマットを直接実行する実施例が説明されたが、本発明の他の実施例は、異なる命令セットを実行するプロセッサ(例えば、カリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セットを実行するプロセッサ、カリフォルニア州SunnyvaleのARM HoldingsのARM命令セットを実行するプロセッサなど)上で実行されるエミュレーションレイヤを介しベクトルフレンドリ命令フォーマットを実行してもよい。また、図のフロー図は本発明の特定の実施例により実行される処理の特定の順序を示しているが、当該順序は一例であることが理解されるべきである。(他の実施例は、異なる順序により処理を実行し、特定の処理を合成し、特定の処理をオーバラップするなどしてもよい)。
【0209】
上記説明では、説明のために多数の具体的な詳細が、本発明の実施例の完全な理解を提供するため提供されている。しかしながら、1以上の他の実施例がこれらの具体的な詳細の一部なしに実現可能であることが、当業者に明らかであろう。開示される特定の実施例は、本発明を限定するものでなく、本発明の実施例を説明するため提供される。本発明の範囲は、上述した特定の具体例でなく以下の請求項により決定される。