(57)【要約】      （修正有）【課題】総称的に２乗乗算（ＳＱＲＭＵＬ）命令と呼ばれる命令の実施形態、および、レイテンシーを改善するために用いるシステム、アーキテクチャ、命令フォーマットを提供する。【解決手段】２つのソースレジスタ１０１、１０３はそれぞれ、値Ａ・Ｂを有する。これらの値は実行ロジック１０７により処理され、Ａ２、Ａ＊Ｂ、およびＢ２が生成される。これらの結果は、ディスティネーションレジスタ１０５に格納される。このレジスタはダブルワードサイズ等の汎用レジスタ、または計算値を格納するための専用のデータ要素位置を有するパックドデータレジスタであり得る。【選択図】図１
2014182811.tif 000002
【特許請求の範囲】
【請求項１】
第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令を復号化する復号化ロジックと、
実行ロジックと
を備え、
前記実行ロジックは、
前記第１ソースオペランドのデータ値の２乗を計算し、
前記第２ソースオペランドのデータ値の２乗を計算し、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の乗算を計算し、
前記計算の結果を前記デスティネーションオペランドに格納し、
前記計算には１つの乗算オペレーションのみが用いられる、装置。
【請求項２】
前記デスティネーションオペランドは汎用レジスタである、請求項１に記載の装置。
【請求項３】
前記第１ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第２ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、
請求項１または２に記載の装置。
【請求項４】
前記デスティネーションオペランドはパックドデータレジスタであり、
３つの前記計算の各結果は、前記パックドデータレジスタのそれぞれ異なるデータ要素に格納される、請求項１から３のいずれか１項に記載の装置。
【請求項５】
前記実行ロジックは、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成し、
前記一時変数を２乗し、
４Ｎビットだけ前記一時変数を右シフトする
ことにより前記第１ソースオペランドの前記データ値の前記２乗を計算し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１から４のいずれか１項に記載の装置。
【請求項６】
前記実行ロジックは、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成し、
前記一時変数を２乗し、
２乗された前記一時変数を、（２Ｎだけ左シフトされた２）−１）の値とＡＮＤオペレーションし、
（２Ｎ＋１）だけ右シフトする
ことにより、前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算を計算し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１から５のいずれか１項に記載の装置。
【請求項７】
前記実行ロジックは、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成し、
前記一時変数を２乗し、
２乗された前記一時変数を、（（Ｎだけ左シフトされた１）−１）の値の１の補数とＡＮＤオペレーションする
ことにより、前記第２ソースオペランドの前記データ値の前記２乗を計算し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１から６のいずれか１項に記載の装置。
【請求項８】
第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令をコンピュータプロセッサで実行する方法であり、
前記第１ソースオペランドのデータ値の２乗を計算する段階と、
前記第２ソースオペランドのデータ値の２乗を計算する段階と、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の乗算を計算する段階と、
前記計算の結果を前記デスティネーションオペランドに格納する段階と
を備え、
前記計算には１つの乗算オペレーションのみが用いられる、方法。
【請求項９】
前記デスティネーションオペランドは汎用レジスタである、請求項８に記載の方法。
【請求項１０】
前記第１ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第２ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、
請求項８または９に記載の方法。
【請求項１１】
前記デスティネーションオペランドはパックドデータレジスタであり、
３つの前記計算の各結果は、前記パックドデータレジスタのそれぞれ異なるデータ要素に格納される、請求項８から１０のいずれか１項に記載の方法。
【請求項１２】
前記第１ソースオペランドの前記データ値の前記２乗を計算する段階は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する段階と、
前記一時変数を２乗する段階と、
４Ｎビットだけ前記一時変数を右シフトする段階と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項８から１１のいずれか１項に記載の方法。
【請求項１３】
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算を計算する段階は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する段階と、
前記一時変数を２乗する段階と、
２乗された前記一時変数を、（２Ｎだけ左シフトされた１）−１）の値とＡＮＤオペレーションする段階と、
（２Ｎ＋１）だけ右シフトする段階と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項８から１２のいずれか１項に記載の方法。
【請求項１４】
前記第２ソースオペランドの前記データ値の前記２乗を計算する段階は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する段階と、
前記一時変数を２乗する段階と、
２乗された前記一時変数を、（（Ｎだけ左シフトされた２）−１）の値の１の補数とＡＮＤオペレーションする段階と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項８から１３のいずれか１項に記載の方法。
【請求項１５】
第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令を実行するための手順をコンピュータに実行させるプログラムであり、
前記手順は、
前記第１ソースオペランドのデータ値の２乗を計算する手順と、
前記第２ソースオペランドのデータ値の２乗を計算する手順と、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の乗算を計算する手順と、
前記計算の結果を前記デスティネーションオペランドに格納する手順と
を備え、
前記計算には１つの乗算オペレーションのみが用いられる、プログラム。
【請求項１６】
前記デスティネーションオペランドは汎用レジスタである、請求項１５に記載のプログラム。
【請求項１７】
前記第１ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第２ソースオペランドのデータ値の２乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、請求項１５または１６に記載のプログラム。
【請求項１８】
前記第１ソースオペランドの前記データ値の前記２乗を計算する手順は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する手順と、
前記一時変数を２乗する手順と、
４Ｎビットだけ前記一時変数を右シフトする手順と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１５から１７のいずれか１項に記載のプログラム。
【請求項１９】
前記第１ソースオペランドおよび前記第２ソースオペランドの前記データ値の前記乗算を計算する手順は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する手順と、
前記一時変数を２乗する手順と、
２乗された前記一時変数を、（２Ｎだけ左シフトされた１）−１）の値とＡＮＤオペレーションする手順と、
（２Ｎ＋１）だけ右シフトする手順と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１５から１８のいずれか１項に記載のプログラム。
【請求項２０】
前記第２ソースオペランドの前記データ値の前記２乗を計算する手順は、
２Ｎだけ前記第１ソースオペランドの前記データ値を左シフトし、前記第２ソースオペランドの前記データ値により、シフトされた前記データ値をＯＲオペレーションすることにより一時変数を生成する手順と、
前記一時変数を２乗する手順と、
２乗された前記一時変数を、（（Ｎだけ左シフトされた２）−１）の値の１の補数とＡＮＤオペレーションする手順と
を有し、
Ｎは、ｌｏｇ２（前記データ値の基数）である、請求項１５から１９のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の分野は一般的にコンピュータプロセッサアーキテクチャに関し、より詳細には、実行されると特定の結果を引き起こす命令に関する。
【背景技術】
【０００２】
命令セット、または命令セットアーキテクチャ（ＩＳＡ）は、コンピュータアーキテクチャのプログラミングに関する部分であり、ネイティブデータ型、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込み／例外処理、および外部入出力（Ｉ／Ｏ）を含みうる。なお、命令という用語は一般的に本明細書において、プロセッサの復号器がマクロ命令を復号化する結果として生じるマイクロ命令、またはマイクロｏｐとは対照的であるマクロ命令、つまり、実行のためにプロセッサに提供される命令を指す。
【図面の簡単な説明】
【０００３】
本願発明について、添付の図面中の図において限定的ではなく例示的に示す。同様の参照符号は、同様の要素を示す。
【図１】ＳＱＲＭＵＬ命令の例示的な実行を示す。
【図２】１以上の命令を実行するプロセッサ（プロセッサコア）の例示的な実施形態のブロック図である。
【図３】プロセッサにおけるＳＱＲＭＵＬ命令の実行の実施形態を示す。
【図４】ＳＱＲＭＵＬ命令を処理するための方法の実施形態を示す。
【図５】ＳＱＲＭＵＬ命令を処理するための方法の実施形態を示す。
【図６】図４および５のフローのいずれかを選択する例示的な方法を示す。
【図７】本願発明の一実施形態に係るレジスタアーキテクチャ７００のブロック図である。
【図８Ａ】本願発明の実施形態に係る、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。
【図８Ｂ】本願発明の実施形態に係る、プロセッサに含められる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。
【図９Ａ】チップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかのロジックブロックのうちの１つである、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。
【図９Ｂ】チップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかのロジックブロックのうちの１つである、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。
【図１０】本願発明の実施形態に係る、１より大きい数のコアを有し得、統合型メモリコントローラを有し得、および、統合型グラフィック処理ロジックを有し得るプロセッサ１０００のブロック図である。
【図１１】例示的なコンピュータアーキテクチャのブロック図である。
【図１２】例示的なコンピュータアーキテクチャのブロック図である。
【図１３】例示的なコンピュータアーキテクチャのブロック図である。
【図１４】例示的なコンピュータアーキテクチャのブロック図である。
【図１５】本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。
【発明を実施するための形態】
【０００４】
以下の説明において、様々な具体的な詳細の説明が明記される。しかし、本願発明の実施形態はそれら具体的な詳細の説明を用いずとも実施され得ることを理解されたい。他の例においては、本説明の理解を曖昧にしないよう、周知の回路、構造、および技術が詳細には示されていない。
【０００５】
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」などについて参照した場合、それらは、説明される実施形態が特定の特徴、構造、または特性を含み得ることを示すが、あらゆる実施形態が同特定の特徴、構造、または特性を含んでいるとは限らないことを示す。さらに、そのような文言は、同じ実施形態について言及しているとは限らない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明される場合、明示的に説明されようとされなかろうと、そのような特徴、構造、または特性を他の実施形態と関連して実装することは当業者の理解するところであるものと考えられる。
【０００６】
概要  命令セットアーキテクチャは、ＩＳＡを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有し得る。例えば、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌコアプロセッサ、および、Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，Ｉｎｃ．（カリフォルニア州サニーベール）のプロセッサは、ｘ８６命令セット（より新しいバージョンではいくつかの拡張命令が追加された）のほぼ同一のバージョンを実装するが、異なる内部設計を有する。例えば、ＩＳＡの同じレジスタアーキテクチャが周知の技術を用いる異なるマイクロアーキテクチャで異なるやり方で実装され得る。それらには、専用の物理レジスタ、レジスタリネーミングメカニズムを用いる１以上の動的に割り当てられる物理レジスタ（例えば、Ｒｅｇｉｓｔｅｒ  Ａｌｉａｓ  Ｔａｂｌｅ（ＲＡＴ）、Ｒｅｏｒｄｅｒ  Ｂｕｆｆｅｒ（ＲＯＢ）、およびリタイヤレジスタファイルの利用については、米国特許第５，４４６，９１２号に説明され、複数のマップおよびレジスタのプールの利用については米国特許第５，２０７，１３２号に説明される）などが含まれる。他に特定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタといった文言は、ソフトウェア／プログラマーにとってビジブル（ｖｉｓｉｂｌｅ）である、命令がレジスタを特定するやり方を指す。特定されることが望まれる場合、論理的な、アーキテクチャ上の、またはソフトウェアビジブルである、といった形容詞句がレジスタアーキテクチャ内のレジスタ／ファイルを指すために用いられる。他方、任意のマイクロアーキテクチャ（例えば、物理レジスタ、リオーダバッファ、リタイヤレジスタ、レジスタプール）のレジスタを指す場合には異なる形容詞句が用いられる。
【０００７】
命令セットは、１以上の命令フォーマットを含む。任意の命令フォーマットは、実行される処理、および同処理の対象であるオペランドなどを特定する様々なフィールド（ビット数、ビット位置）を規定する。任意の命令は、任意の命令フォーマットを用いて表現され、処理およびオペランドを特定する。命令ストリームは、複数の命令からなる特定のシーケンスであり、同シーケンス内の各命令は、ある命令フォーマットの命令の発生である。
【０００８】
科学、財務、自動ベクトル化された汎用、ＲＭＳ（認識、マイニング、合成）／ビジュアルおよびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィック処理、画像処理、動画圧縮／解凍、音声認識アルゴリズム、および音声操作）においては、多数のデータアイテムに対して同じ処理を行うことが必要となることが多い（「データ並列処理」と呼ばれる）。単一命令複数データ（ＳＩＭＤ）とは、プロセッサに、複数のデータアイテムに対して同じ処理を行わせるタイプの命令を指す。ＳＩＭＤ技術は、レジスタ内のビットを、それぞれが別個の値を表す多数の一定サイズのデータ要素へ論理的に分割し得るプロセッサに特に適している。例えば、６４ビットのレジスタ内のビットは、それぞれが別個の１６ビット値を表す４つの別個の１６ビットのデータ要素として処理されるソースオペランドとして特定され得る。他の例として、２５６ビットのレジスタ内のビットは、４つの別個の６４ビットのパックドデータ要素（クワドワード（Ｑ）サイズのデータ要素）、８つの別個の３２ビットのパックドデータ要素（ダブルワード（Ｄ）サイズのデータ要素）、１６の別個の１６ビットのパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、または、３２の別個の８ビットのデータ要素（バイト（Ｂ）サイズのデータ要素）として処理されるソースオペランドとして特定され得る。  このタイプのデータは、パックドデータタイプ、またはベクトルデータタイプと呼ばれ、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。  言い換えると、パックドデータアイテムまたはベクトルとは、パックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、（パックドデータ命令またはベクトル命令としても知られる）ＳＩＭＤ命令のソースまたはデスティネーションオペランドである。
【０００９】
例として、１つのタイプのＳＩＭＤ命令は、垂直方向に２つのソースベクトルオペランドに対して実行される１つのベクトル処理を特定して、同じサイズであり、データ要素の数が同じであり、データ要素の順序が同じである（結果ベクトルオペランドとも呼ばれる）デスティネーションベクトルオペランドを生成する。ソースベクトルオペランドのデータ要素はソースデータ要素と呼ばれ、デスティネーションベクトルオペランドのデータ要素は、デスティネーションまたは結果データ要素と呼ばれる。これらのソースベクトルオペランドはサイズが同じであり、同じ幅のデータ要素を含み、よって、それらは同じ数のデータ要素を含む。２つのソースベクトルオペランドの同じビット位置のソースデータ要素は、（対応するデータ要素とも呼ばれる）データ要素のペアを形成する（つまり、各ソースオペランドのデータ要素位置０のデータ要素が対応し、各ソースオペランドのデータ要素位置１のデータ要素が対応する、などである）。ＳＩＭＤ命令により特定される処理はソースデータ要素のこれらのペアのそれぞれに対して別々に実行され、対応する数の結果データ要素が生成される。よって、ソースデータ要素の各ペアは、対応する結果データ要素を有する。処理が垂直方向に実行され、結果ベクトルオペランドは同じサイズおよび同じ数のデータ要素を有し、結果データ要素は、ソースベクトルオペランドと同じデータ要素の順序で格納されるので、結果データ要素は、結果ベクトルオペランドの、ソースベクトルオペランドのソースデータ要素の対応するペアと同じビット位置にある。  この例示的なタイプのＳＩＭＤ命令に加えて、他の様々なタイプのＳＩＭＤ命令がある（例えば、１つだけの、または２より大きな数のソースベクトルオペランドを有するタイプ、水２乗向に実行されるタイプ、異なるサイズの結果ベクトルオペランド、異なるサイズのデータ要素を有する結果ベクトルオペランド、および／または異なるデータ要素の順序を有する結果ベクトルオペランドを生成するタイプ）。なお、デスティネーションベクトルオペランド（またはデスティネーションオペランド）という用語は、ある位置（レジスタ、または命令により特定されるメモリアドレス）に同デスティネーションオペランドを格納し、当該デスティネーションオペランドがソースオペランドとして他の命令により（当該他の命令による同位置の特定により）アクセスされ得るようにする処理を含む、命令により特定される処理の実行の直接的な結果として規定される。
【００１０】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサなどにより採用されるものなどＳＩＭＤ技術により、アプリケーション性能の大幅な改善が可能となった（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標、または商標である）。  Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれＶＥＸ符号化方式を用いる他のＳＩＭＤ拡張命令のセットが発表され、および／または発行されている（例えば、Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ，Ｏｃｔｏｂｅｒ  ２０１１、および、Ｉｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ，Ｊｕｎｅ  ２０１１を参照されたい）。
【００１１】
ａ２＋ａ＊ｂ＋ｂ２およびａ［ｉ］＝ｂ［ｉ］２の計算などいくつかの通常用いられている数学的オペレーションが、行列および長数の乗算（ｍａｔｒｉｘ  ａｎｄ  ｌｏｎｇ  ｎｕｍｂｅｒ  ｍｕｌｔｉｐｌｉｃａｔｉｏｎｓ）に用いられることが多い。そのような数学的オペレーションは、レイテンシーが大きく現代のＣＰＵに対する負荷が依然としてかなり大きい多くの乗算命令を用いる。例えば、ａおよびｂが基数Ｂの符号なし整数だとする。ａ２＋ａ＊ｂ＋ｂ２を計算するためのコードは、以下のようになる。１：ａ＿ｓｑ＝ａ＊ａ２：ａ＿ｔｉｍｅｓ＿ｂ＝ａ＊ｂ３：ｂ＿ｓｑ＝ｂ＊ｂ４：これら３つの乗算の加算
【００１２】
現代のＣＰＵでは各乗算は〜５サイクルを要するので、３つの乗算のレイテンシーの合計は、１５サイクルとなるであろう。
【００１３】
以下に示すのは、命令セットのうち総称的に２乗乗算（ＳＱＲＭＵＬ）命令と呼ばれる命令の実施形態、および、上記したレイテンシーを改善するために用いられ得るシステム、アーキテクチャ、命令フォーマットなどの実施形態である。ＳＱＲＭＵＬの実行により、第１ソースオペランドのデータ値の２乗と、第２ソースオペランドのデータ値の２乗と、第１および第２ソースオペランドのデータの乗算とが計算され、これら３つの計算の結果が単一のデスティネーションオペランドに格納される。
【００１４】
図１は、ＳＱＲＭＵＬ命令の例示的な実行を示す。２つのソースレジスタ１０１、１０３はそれぞれ、値Ａ、Ｂを有する。これらの値は実行ロジック１０７により処理され、Ａ２、Ａ＊Ｂ、およびＢ２が生成される。これらの結果は、デスティネーションレジスタ１０５に格納される。このレジスタは、汎用レジスタ（例えば、ダブルワードサイズのレジスタ）、または、（計算値を格納するための専用のデータ要素位置を有する）パックドデータレジスタであり得る。特定の順序が示されるが、計算値を格納するための他の何らかの順序が用いられ得る。
【００１５】
図２は、１以上のＳＱＲＭＵＬ命令２０４を実行するプロセッサ（プロセッサコア）２００の例示的な実施形態のブロック図である。いくつかの実施形態において、プロセッサは、（例えば、デスクトップ、ラップトップ、サーバ、および同様のコンピュータで用いられるタイプの）汎用プロセッサであり得る。代替的に、プロセッサは特定用途向けプロセッサであり得る。適した特定用途向けプロセッサの例には、数多くあるうちのいくつかを挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、およびコントローラが含まれるが、これらに限定されない。プロセッサは、様々な複数命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、これらの様々なハイブリッド型、または全体的に他のタイプのプロセッサのうちいずれかであり得る。
【００１６】
プロセッサ２００は、アーキテクチャ的にビジブルなレジスタ（ａｒｃｈｉｔｅｃｔｕｒａｌｌｙ−ｖｉｓｉｂｌｅ  ｒｅｇｉｓｔｅｒｓ）（例えば、アーキテクチャレジスタファイル）２０５を含む。またアーキテクチャレジスタは本明細書において単にレジスタとも呼ばれ得る。他に特定されないか、または明らかでない限り、本明細書においてアーキテクチャレジスタ、レジスタファイル、およびレジスタといった文言は、ソフトウェアおよび／またはプログラマーにとってビジブルなレジスタ、並びに／若しくは、オペランドを識別するマクロ命令またはアセンブリ言語命令により特定されるレジスタを指す。これらのレジスタは、任意のマイクロアーキテクチャ内の他のアーキテクチャ的でない、またはアーキテクチャ的にビジブルでないレジスタ（例えば、命令により用いられる一時的なレジスタ、リオーダバッファ、リタイヤレジスタなど）と対比される。レジスタは一般的にオンダイのプロセッサ格納位置を表す。示されるアーキテクチャレジスタは、パックドデータレジスタ２０６を含む。パックドデータレジスタのそれぞれは、パックドデータまたはベクトルデータを格納するよう動作可能である。また、示されるアーキテクチャレジスタは、パックドデータ処理マスクレジスタ２０７も含みうる。パックドデータ処理マスクレジスタのそれぞれは、パックドデータ処理マスクを格納するよう動作可能である。これらのレジスタは、本説明において、書き込みマスクレジスタと呼ばれ得る。パックドデータオペランドは、パックドデータレジスタ２０７に格納され得る。
【００１７】
またプロセッサは、実行ロジック２０８も含む。実行ロジックは、１以上のＳＱＲＭＵＬ命令２０４を実行または処理するよう動作可能である。いくつかの実施形態において、実行ロジックはこれらの命令を実行するための特定のロジック（例えば、場合によってはファームウェアと組み合わせられる特定の回路またはハードウェア）を含みうる。
【００１８】
ＳＱＲＭＵＬの例示的なフォーマット
この命令の例示的なフォーマットは、「ＳＱＲＭＵＬ  ＤＥＳＴ，ＳＯＵＲＣＥ  １，ＳＯＵＲＣＥ  ２」である。ここでオペランドのうち全てがレジスタである。いくつかの実施形態において、レジスタは汎用レジスタである。これらのレジスタは、８、１６、３２、６４、および１２８ビットを含むがこれらに限定されない何らかのサイズのものである。他の実施形態において、レジスタは、浮動小数点、またはパックドデータレジスタである。  他の実施形態において、ソースは汎用レジスタであり、デスティネーションはパックドデータレジスタである。殆どの実施形態において、ソースレジスタは、符号なし整数を格納する。
【００１９】
ＳＱＲＭＵＬの実行の例示的な方法  図３は、プロセッサにおけるＳＱＲＭＵＬ命令の実行の実施形態を示す。３０１において、第１および第２ソースレジスタオペランドと、デスティネーションレジスタオペランドと、命令コードとを含むＳＱＲＭＵＬ命令がフェッチされる。
【００２０】
３０３において、ＳＱＲＭＵＬ命令が、復号化ロジックにより復号化される。
【００２１】
３０５において、ソースオペランドの値が取得される／読み取られる。例えば、ソースレジスタが読み取られる。
【００２２】
３０７において、復号化されたＳＱＲＭＵＬ命令（またはマイクロ命令などの命令を含む処理）が１以上の機能ユニットなどの実行リソースにより実行され、第１ソースオペランドのデータ値の２乗と、第２ソースオペランドのデータ値の２乗と、第１および第２ソースオペランドのデータの乗算とが計算され、これら３つの計算の結果が全て単一のデスティネーションオペランドに格納される。
【００２３】
３０９において、計算値は、デスティネーションレジスタオペランドに格納される。これらの値は、重要性の最も低いものから重要性の最も高いものにかけて（Ａ２、Ａ＊Ｂ、Ｂ２）、またはその逆など特定の順序で格納され得る。いくつかの実施形態において、計算値はパックドデータレジスタのデータ要素に格納される。
【００２４】
３０７と３０９とは別々に示されたが、いくつかの実施形態において、それらは命令の実行の一部として共に実行される。
【００２５】
図４および５は、ＳＱＲＭＵＬ命令を処理するための方法の実施形態を示す。これらの実施形態において、Ｌは、ビット（３２または６４）で表される汎用レジスタのサイズとして定義され、ａおよびｂはそれぞれ、基数Ｂの第１および第２ソースオペランドの符号なし整数であり、Ｎはビットで表されるｌｏｇ２（Ｂ）に等しい。以下の例において、ａまたはＡは、第１ソースに格納されるデータを表し、ｂまたはＢは、第２ソースに格納されるデータを表す。いくつかの実施形態において、シフトなどは、ビット数単位で行われる。
【００２６】
図４は、ＳＱＲＭＵＬ命令を処理するための方法の実施形態を示す。これは、Ｌ≧６Ｎである一般的なケースである。本実施形態において、処理３０１〜３０５のうち全てではなくともいくつかが事前に実行されているものと想定されている。しかし、それらは、以下に示される詳細を曖昧にしないよう示されていない。例えば、フェッチおよび復号化は示されておらず、オペランドの取得も示されていない。
【００２７】
４０１において、一時変数ｔが構築される。  いくつかの実施形態において、この一時変数は、Ａを２Ｎだけ左シフトし、Ｂにより、そのシフトされた値をＯＲオペレーションすることにより構築される。言い換えると、ｔ＝（Ａ＜＜２＊Ｎ）｜Ｂである。典型的には、このオペレーションは、２つのクロックサイクルを要する。結果として得られるｔの値は、Ａ＊２２Ｎ＋Ｂである。
【００２８】
４０３において、一時変数の２乗が計算される。これにより、ｔ＝ｔ＊ｔ＝Ａ２＊２４Ｎ＋２ＡＢ＊２２Ｎ＋Ｂ２である第２の一時変数が生成される。いくつかの例において、この乗算は、５つのサイクルを要する。
【００２９】
４０５において、Ａ２、Ａ＊Ｂ、およびＢ２は、第２の一時変数から抽出される。Ａ２は、第２の一時変数を４Ｎだけ右シフトすることにより抽出される。言い換えると、Ａ２＝ｔ＞＞４Ｎである。Ａ＊Ｂは、第２の一時変数を、（２Ｎだけ左シフトされた１）−１）の値とＡＮＤオペレーションし、（２Ｎ＋１）だけ右シフトすることにより抽出される。言い換えると、Ａ＊Ｂ＝（ｔ＆（１＜＜２Ｎ−１））＞＞（２Ｎ＋１）である。最後に、Ｂ２は、第２の一時変数を、（（Ｎだけ左シフトされた２）−１）の値の１の補数とＡＮＤオペレーションすることにより抽出される。言い換えると、Ｂ２＝ｔ＆〜（２＜＜Ｎ−１）である。いくつかのシステムにおいて、このことは、合計２〜３サイクルを要する。
【００３０】
４０７において、抽出された値が格納される。いくつかの実施形態において、Ａ２、Ａ＊Ｂ、およびＢ２はそれぞれ、ダブルワードの下位、中位、および上位の４分の１に格納される。他の実施形態において、これらの値は、パックドデータレジスタの別個のデータ要素に格納される。
【００３１】
図５は、ＳＱＲＭＵＬ命令を処理するための方法の実施形態を示す。  これは、４Ｎ＝Ｌである一般的なケースである。本実施形態において、処理３０１〜３０５のうち全てではなくともいくつかが事前に実行されているものと想定されている。しかし、それらは、以下に示される詳細を曖昧にしないよう示されていない。例えば、フェッチおよび復号化は示されておらず、オペランドの取得も示されていない。
【００３２】
５０１において、一時変数ｔが構築される。  いくつかの実施形態において、この一時変数は、Ａを２Ｎだけ左シフトし、Ｂにより、そのシフトされた値をＯＲオペレーションすることにより構築される。言い換えると、ｔ＝（Ａ＜＜２＊Ｎ）｜Ｂである。典型的には、このオペレーションは、２つのクロックサイクルを要する。結果として得られるｔの値は、Ａ＊２２Ｎ＋Ｂである。
【００３３】
５０３において、一時変数の２乗が計算され、第１および第２の位置に格納される。これにより、Ａ２＊２４Ｎ＋２ＡＢ＊２２Ｎ＋Ｂ２を格納する位置が生成される。いくつかの例において、この乗算は、５つのサイクルを要する。いくつかの実施形態において、第１および第２の位置はレジスタである。
【００３４】
５０５において、Ａ２、Ａ＊Ｂ、およびＢ２が抽出される。Ａ２は、第１の位置に格納される値である。言い換えると、Ａ２＝位置１である。Ａ＊Ｂは、（２Ｎ＋１）だけ、第２の位置に格納されるデータを右シフトすることにより抽出される。言い換えると、Ａ＊Ｂ＝位置２＞＞（２Ｎ＋１）である。最後に、Ｂ２は、第２の位置の内容を、（２２Ｎ−１）の値の１の補数とＡＮＤオペレーションすることにより抽出される。言い換えると、Ｂ２＝位置２＆〜（２＜＜２Ｎ−１）。いくつかのシステムにおいて、このことは、合計１サイクルを要する。
【００３５】
５０７において、抽出された値が格納される。いくつかの実施形態において、Ａ２、Ａ＊Ｂ、およびＢ２はそれぞれ、ダブルワードの下位、中位、および上位の４分の１に格納される。他の実施形態において、これらの値は、パックドデータレジスタの別個のデータ要素に格納される。
【００３６】
図６は、図４および５のフローのいずれかを選択する例示的な方法を示す。６０１において、４Ｎ＝１であるか否かの判断がなされる。判断結果が肯定的である場合、６０３において、図５のフローが用いられる。判断結果が否定的である場合、６０５において、図４のフローが用いられる。
【００３７】
上記ではＳＱＲＭＵＬ命令に関して説明がなされたが、上記のコードシーケンスは、ＳＱＲＭＵＬに対応しないプロセッサ内の複数の命令により実行され得る。
【００３８】
例示的なレジスタアーキテクチャ  図７は、本願発明の一実施形態に係るレジスタアーキテクチャ７００のブロック図である。示される実施形態において、５１２ビットの幅である３２のベクトルレジスタ７１０がある。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位の１６のｚｍｍレジスタの下位の２５６ビットは、レジスタｙｍｍ０〜１６にオーバーレイ（ｏｖｅｒｌａｉｄ）される。下位の１６のｚｍｍレジスタの下位の１２８ビット（ｙｍｍレジスタの下位の１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされる。
【００３９】
汎用レジスタ７２５−示される実施形態において、メモリオペランドをアドレッシングする既存のｘ８６アドレッシングモードと併せて用いられる１６の６４ビットの汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５という名前で参照される。
【００４０】
ＭＭＸのパックド整数フラットレジスタファイル７５０がエイリアスされる（ａｌｉａｓｅｄ）スカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）７４５−示される実施形態において、ｘ８７スタックは、ｘ８７命令セットの拡張命令を用いて３２／６４／８０ビットの浮動小数点データに対してスカラー浮動小数点オペレーションを実行するために用いられる８つの要素のスタックである。６４ビットのパックド整数データに対する処理を実行し、ＭＭＸレジスタとＸＭＭレジスタとの間で実行されるいくつかの処理のオペランドを保持するためにＭＭＸレジスタが用いられる。
【００４１】
本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられ得る。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられ得る。
【００４２】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ  プロセッサコアは、異なるやり方で、異なる目的のために、また異なるプロセッサ内で実装され得る。例えば、そのようなコアの実装には、１）汎用コンピューティングを目的とする汎用インオーダコア、２）汎用コンピューティングを目的とする高性能の汎用アウトオブオーダコア、３）グラフィック処理および／または科学用途向け（スループット）コンピューティングを主な目的とする特定用途向けコアが含まれ得る。異なるプロセッサの実装には、１）汎用コンピューティングを目的とする１以上の汎用インオーダコア、および／または、汎用コンピューティングを目的とする１以上の汎用アウトオブオーダコアを含むＣＰＵ、並びに、２）グラフィック処理および／または科学用途（スループット）を主な目的とする１以上の特定用途向けコアを含むコプロセッサが含まれ得る。そのような異なるプロセッサにより、異なるコンピュータシステムアーキテクチャがもたらされる。それらコンピュータシステムアーキテクチャには、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合型グラフィック処理および／または科学用途向け（スループット）ロジックなど特定用途向けロジック、若しくは、特定用途向けコアと呼ばれることもある）、および、４）同じダイ上に、上述した（アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある）ＣＰＵ、上述したコプロセッサ、および追加の機能性を含みうるシステムオンチップなどが含まれ得る。次に、例示的なコアアーキテクチャについて説明をし、その後、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【００４３】
例示的なコアアーキテクチャ  インオーダおよびアウトオブオーダコアのブロック図
図８Ａは、本願発明の実施形態に係る、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインとの両方を示すブロック図である。図８Ｂは、プロセッサに含められる、インオーダアーキテクチャコアの例示的な実施形態と、本願発明の実施形態に係る、例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアとの両方を示すブロック図である。図８Ａおよび８Ｂの実線で示される四角は、インオーダパイプラインおよびインオーダコアを示し、破線で示される四角の任意選択的な追加は、レジスタリネーミング・アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様は、アウトオブオーダの態様のサブセットであるので、アウトオブオーダの態様について説明する。
【００４４】
図８Ａにおいて、プロセッサパイプライン８００は、フェッチステージ８０２、長さ復号化ステージ８０４、復号化ステージ８０６、割り当てステージ８０８、リネーミングステージ８１０、（発送（ｄｉｓｐａｔｃｈ）または発行ステージとしても知られる）スケジューリングステージ８１２、レジスタ読み取り／メモリ読み取りステージ８１４、実行ステージ８１６、書き戻し／メモリ書き込みステージ８１８、例外処理ステージ８２２、およびコミットステージ８２４を含む。
【００４５】
図８Ｂは、実行エンジンユニット８５０に結合されたフロントエンドユニット８３０を含み、フロントエンドユニット８３０と実行エンジンユニット８５０との両方がメモリユニット８７０に結合されたプロセッサコア８９０を示す。コア８９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複数命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、または、ハイブリッドまたは代替的なコアタイプであり得る。さらに他のオプションとして、コア８９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット（ＧＰＧＰＵ）コア、グラフィック処理コアなど特定用途向けコアであり得る。
【００４６】
フロントエンドユニット８３０は、分岐予測ユニット８３２を含み、分岐予測ユニット８３２は、命令キャッシュユニット８３４に結合され、命令キャッシュユニット８３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）８３６に結合され、命令トランスレーションルックアサイドバッファ（ＴＬＢ）８３６は、命令フェッチユニット８３８に結合され、命令フェッチユニット８３８は、復号化ユニット８４０に結合される。復号化ユニット８４０（または復号器）は、命令を復号化し得、元の命令から復号化され、または、元の命令を反映し、または、元の命令から導出される１以上のマイクロ処理、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。復号化ユニット８４０は、様々な異なるメカニズムを用いて実装され得る。適したメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、マイクロコード読み取り専用メモリ（ＲＯＭ）などが含まれるがこれらに限定されない。一実施形態において、コア８９０は、特定のマクロ命令のためのマイクロコードを（例えば、復号化ユニット８４０内に、または、フロントエンドユニット８３０内に）格納するマイクロコードＲＯＭまたは他の媒体を含む。復号化ユニット８４０は、実行エンジンユニット８５０内のリネーム／割り当てユニット８５２に結合される。
【００４７】
実行エンジンユニット８５０は、リタイヤユニット８５４に結合されたリネーム／割り当てユニット８５２と、１以上のスケジューラユニット８５６からなるセットとを含む。スケジューラユニット８５６は、予約ステーション、中央命令ウィンドウ（ｃｅｎｔｒａｌ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｉｎｄｏｗ）などを含む、任意の数の異なるスケジューラを表す。スケジューラユニット８５６は、物理レジスタファイルユニット８５８に結合される。物理レジスタファイルユニット８５８のそれぞれは、互いに異なる１以上のデータタイプを格納する１以上の物理レジスタファイルを表す。そのようなデータタイプには、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、スタータス（例えば、次に実行される命令のアドレスである命令ポインタ）などが含まれる。一実施形態において、物理レジスタファイルユニット８５８は、ベクトルレジスタユニットおよびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方（例えば、リオーダバッファおよびリタイヤレジスタファイルを用いて、未来のファイル（ｆｕｔｕｒｅ  ｆｉｌｅ）、履歴バッファ（ｈｉｓｔｏｒｙ  ｂｕｆｆｅｒ）、およびリタイヤレジスタファイルを用いて、レジスタマップおよびレジスタのプールを用いて、など）を示すべく、物理レジスタファイルユニット８５８にはリタイヤユニット８５４が重ねられている。リタイヤユニット８５４および物理レジスタファイルユニット８５８は、実行クラスタ８６０結合される。実行クラスタ８６０は、１以上の実行ユニット８６２からなるセット、および１以上のメモリアクセスユニット８６４からなるセットを含む。実行ユニット８６２は様々な処理（例えば、シフト、追加、減算、乗算）を、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行し得る。いくつかの実施形態には、特定の機能、または複数の機能からなるセットのための専用の複数の実行ユニットが含まれ得るが、他の実施形態においては、全ての機能を実行する１つだけの実行ユニット、または複数の実行ユニットが含まれ得る。特定の実施形態においては、特定のタイプのデータ／処理に対して別個のパイプライン（例えば、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／または、メモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット８６４を有する特定の実施形態が実施される）が生成されるので、スケジューラユニット８５６、物理レジスタファイルユニット８５８、および実行クラスタ８６０は、場合によっては複数あるものとして示されている。また、別個のパイプ���インが用いられる場合、これらのパイプラインのうち１以上は、アウトオブオーダ発行／実行であり得、残りがインオーダであり得ることを理解されたい。
【００４８】
複数のメモリアクセスユニット８６４からなるセットは、メモリユニット８７０に結合され、メモリユニット８７０は、データキャッシュユニット８７４に結合されたデータＴＬＢユニット８７２を含む。データキャッシュユニット８７４は、レベル２（Ｌ２）キャッシュユニット８７６に結合される。例示的な一実施形態において、メモリアクセスユニット８６４は、ロードユニット、格納アドレスユニット、および、格納データユニットを含みうる。これらはそれぞれ、メモリユニット８７０内のデータＴＬＢユニット８７２に結合される。命令キャッシュユニット８３４はさらに、メモリユニット８７０内のレベル２（Ｌ２）キャッシュユニット８７６に結合される。Ｌ２キャッシュユニット８７６は、１以上の他のレベルのキャッシュへ結合され、さらには、主メモリに結合される。
【００４９】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン８００を実装し得る。１）命令フェッチ８３８が、フェッチおよび長さ復号化ステージ８０２、８０４を実行する。２）復号化ユニット８４０が、復号化ステージ８０６を実行する。３）リネーム／割り当てユニット８５２が、割り当てステージ８０８およびリネーミングステージ８１０を実行する。４）スケジューラユニット８５６がスケジュールステージ８１２を実行する。５）物理レジスタファイルユニット８５８およびメモリユニット８７０が、レジスタ読み取り／メモリ読み取りステージ８１４を実行する。実行クラスタ８６０が実行ステージ８１６を実行する。６）メモリユニット８７０および物理レジスタファイルユニット８５８が、書き戻し／メモリ書き込みステージ８１８を実行する。７）様々なユニットが例外処理ステージ８２２に関わり得る。８）リタイヤユニット８５４および物理レジスタファイルユニット８５８が、コミットステージ８２４を実行する。
【００５０】
コア８９０は、本明細書に説明される命令を含む１以上の命令セット（例えば、ｘ８６命令セット（より新しいバージョンではいくつかの拡張命令が追加された）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなど任意選択的な追加の拡張命令を含む）に対応し得る。一実施形態において、コア８９０は、パックドデータ命令セットの拡張命令（例えば、前述したＡＶＸ１、ＡＶＸ２、および／または、何らかの形態の一般的なベクトルフレンドリーな命令フォーマット（Ｕ＝０および／またはＵ＝１））に対応するロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられる処理を、パックドデータを用いて実行することが可能になる。
【００５１】
コアは、マルチスレッディング（処理またはスレッドの２以上の並列セットを実行）に対応し得、このことを様々なやり方で行いうることを理解されたい。それら様々なやり方には、タイムスライスドマルチスレッディング（ｔｉｍｅ  ｓｌｉｃｅｄ  ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）、同時のマルチスレッディング（１つの物理コアは、同物理コアが同時にマルチスレッディングを行っているスレッドのそれぞれに対して論理コアを提供する）、または、これらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術のように、タイムスライスドフェッチ（ｔｉｍｅ  ｓｌｉｃｅｄ  ｆｅｔｃｈｉｎｇ）および復号化、並びにその後の同時のマルチスレッディング）が含まれる。
【００５２】
アウトオブオーダ実行に関して、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されたい。また、プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット８３４／８７４、並びに共有されたＬ２キャッシュユニット８７６も含むが、代替的な実施形態においては、例えば、レベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュなど命令およびデータの両方に関して単一の内部キャッシュが用いられ得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含みうる。代替的に、キャッシュの全てが、コアおよび／またはプロセッサの外部にあり得る。
【００５３】
特定的かつ例示的なインオーダコアアーキテクチャ
【００５４】
図９Ａおよび９Ｂは、チップ内の（同じタイプおよび／または異なるタイプの他のコアを含む）いくつかのロジックブロックのうちの１つであり得、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。ロジックブロックは、アプリケーションに応じて、何らかの一定の機能ロジック、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏロジックを有する高帯域幅相互接続ネットワーク（例えば、リング型ネットワーク）を介して通信を行う。
【００５５】
図９Ａは、本願発明の実施形態に係る、シングルプロセッサコアと、そのオンダイ相互接続ネットワーク９０２への接続と、そのレベル２（Ｌ２）キャッシュ９０４のローカルなサブセットとを示すブロック図である。一実施形態において、命令復号器９００は、パックドデータ命令セットの拡張命令を含むｘ８６命令セットに対応する。Ｌ１キャッシュ９０６は、キャッシュメモリ、並びにスカラーおよびベクトルユニットへの低レイテンシーのアクセスを可能とする。（設計を単純化すべく）一実施形態においては、スカラーユニット９０８およびベクトルユニット９１０は別個のレジスタセット（それぞれ、スカラーレジスタ９１２およびベクトルレジスタ９１４）を用い、それらの間で転送されるデータはメモリに書き込まれ、その後、レベル１（Ｌ１）キャッシュ９０６から読み取られるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられ得る（例えば、１つのレジスタセットが用いられる、または、書き込まれ読み取られることなくデータが２つのレジスタファイル間で転送されることを可能とする通信パスが含まれる）。
【００５６】
Ｌ２キャッシュ９０４のローカルなサブセットは、１つのプロセッサコアあたり１つの別個のローカルなサブセットへ分割されるグローバルなＬ２キャッシュ（ｇｌｏｂａｌ  Ｌ２  ｃａｃｈｅ）の一部である。各プロセッサコアは、自身のＬ２キャッシュ９０４のローカルなサブセットへの直接的なアクセスパスを有する。プロセッサコアにより読まれるデータは、自身のＬ２キャッシュサブセット９０４に格納され、それぞれ自身のローカルなＬ２キャッシュサブセットにアクセスしている他のプロセッサコアと並行して迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、自身のＬ２キャッシュサブセット９０４に格納され、必要であれば他のサブセットからフラッシュされる。リング型ネットワークは、共有されるデータの一貫性を確保する。リング型ネットワークは、プロセッサコア、Ｌ２キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信を行えるよう双方向性である。各リングデータパスは、１方向あたり、１０１２ビット幅である。
【００５７】
図９Ｂは、本願発明の実施形態に係る、図９Ａのプロセッサコアの部分の拡大図である。図９Ｂは、Ｌ１キャッシュ９０４のＬ１データキャッシュ９０６Ａ部分、並びに、ベクトルユニット９１０およびベクトルレジスタ９１４に関する細かな詳細を含む。詳細には、ベクトルユニット９１０は、整数の単精度浮動、および倍精度浮動命令（ｉｎｔｅｇｅｒ，ｓｉｎｇｌｅ−ｐｒｅｃｉｓｉｏｎ  ｆｌｏａｔ，ａｎｄ  ｄｏｕｂｌｅ−ｐｒｅｃｉｓｉｏｎ  ｆｌｏａｔ  ｉｎｓｔｒｕｃｔｉｏｎｓ）のうち１以上を実行する１６ワイドのベクトル処理ユニット（ＶＰＵ）である（１６ワイドＡＬＵ９２８を参照されたい）。ＶＰＵはスウィズルユニット９２０によりレジスタ入力のスウィズルに対応し、数値化ユニット９２２Ａ、９２２Ｂにより数値化に対応し、複製ユニット９２４によりメモリ入力の複製に対応する。
【００５８】
統合型メモリコントローラおよびグラフィック処理ロジックを有するプロセッサ  図１０は、本願発明の実施形態に係る、１より大きい数のコアを有し得、統合型メモリコントローラを有し得、および、統合型グラフィック処理ロジックを有し得るプロセッサ１０００のブロック図である。図１０の実線で示される四角は、単一のコア１００２Ａ、システムエージェント１０１０、１以上のバスコントローラユニット１０１６からなるセットを含むプロセッサ１０００を示す。破線で示される四角は任意選択的に追加されるものを含む、つまり、複数のコア１００２Ａ〜１００２Ｎ、システムエージェントユニット１０１０内の１以上の統合型メモリコントローラユニット１０１４からなるセット、および特定用途向けロジック１００８を含む代替的なプロセッサ１０００を示す。
【００５９】
よって、プロセッサ１０００の異なる実装には、１）特定用途向けロジック１００８が（１以上のコアを含みうる）統合型グラフィック処理および／または科学用途向け（スループット）ロジックであり、コア１００２Ａ〜１００２Ｎが１以上の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら２つの組み合わせ）であるＣＰＵ、２）コア１００２Ａ〜１００２Ｎがグラフィック処理および／または科学用途（スループット）を主な目的とする複数の特定用途向けコアであるコプロセッサ、および３）コア１００２Ａ〜１００２Ｎが複数の汎用インオーダコアであるコプロセッサが含まれ得る。よって、プロセッサ１０００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ（汎用グラフィック処理ユニット）、高スループットの複数の統合型コア（ｈｉｇｈ−ｔｈｒｏｕｇｈｐｕｔ  ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、埋め込みプロセッサなど、汎用プロセッサ、コプロセッサ、または特定用途向けプロセッサであり得る。プロセッサは、１以上のチップ上で実装され得る。プロセッサ１０００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの複数の処理技術のうちいずれかを用いる１以上の基板の一部であり得、並びに／若しくはそれら基板上で実装され得る。
【００６０】
メモリ階層は、コア内の１以上のレベルのキャッシュ、１以上の共有キャッシュユニット１００６からなるセット、および、統合型メモリコントローラユニット１０１４からなるセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット１００６からなるセットは、レベル２（Ｌ２）、レベル３（Ｌ３），レベル４（Ｌ４），または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせなど１以上の中間レベルのキャッシュを含みうる。一実施形態においては、リング型の相互接続ユニット１０１２が統合型グラフィック処理ロジック１００８、共有キャッシュユニット１００６からなるセット、およびシステムエージェントユニット１０１０／統合型メモリコントローラユニット１０１４を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続するための任意の数の周知の技術が用いられ得る。一実施形態において、１以上のキャッシュユニット１００６とコア１００２Ａ〜１００２Ｎとの間で一貫性が維持される。
【００６１】
いくつかの実施形態において、コア１００２Ａ〜１００２Ｎのうち１以上がマルチスレッディングを行うことが出来る。システムエージェント１０１０は、コア１００２Ａ〜１００２Ｎを調整し、動作させるコンポーネントを含む。システムエージェントユニット１０１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含みうる。ＰＣＵは、コア１００２Ａ〜１００２Ｎおよび統合型グラフィック処理ロジック１００８の電力状態を管理するために必要なロジックまたはコンポーネントであり得、または、それらを含みうる。ディスプレイユニットは、１以上の外部接続されたディスプレイを駆動するためのものである。
【００６２】
コア１００２Ａ〜１００２Ｎは、アーキテクチャ命令セットの点で同種または異種であってもよい。つまり、コア１００２Ａ〜１００２Ｎのうち２以上は同じ命令セットを実行可能であり、他のコアは、同命令セットのサブセット、または異なる命令セットのみを実行可能であり得る。
【００６３】
例示的なコンピュータアーキテクチャ  図１１〜１４は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィック処理デバイス、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関して当技術分野で公知のシステム設計および構成も適している。一般的に、本明細書において開示されるプロセッサおよび／または他の実行ロジックを組み込み可能な、非常に多種多様なシステムまたは電子デバイスが一般的に適している。
【００６４】
図１１は、本願発明の一実施形態に係るシステム１１００のブロック図を示す。システム１１００は、コントローラハブ１１２０に結合される１以上のプロセッサ１１１０、１１１５を含みうる。一実施形態において、コントローラハブ１１２０は、グラフィック処理メモリコントローラハブ（ＧＭＣＨ）１１９０および（別個のチップ上にあり得る）入力／出力ハブ（ＩＯＨ）１１５０を含む。ＧＭＣＨ１１９０は、メモリ１１４０およびコプロセッサ１１４５が結合されたメモリおよびグラフィック処理コントローラを含む。ＩＯＨ１１５０は、入力／出力（Ｉ／Ｏ）デバイス１１６０をＧＭＣＨ１１９０に結合する。代替的に、メモリおよびグラフィック処理コントローラのうち一方または両方は、（本明細書で説明されるように）プロセッサ内で統合され、メモリ１１４０およびコプロセッサ１１４５は、プロセッサ１１１０、および、ＩＯＨ１１５０を備える１つのチップ内のコントローラハブ１１２０へ直接結合される。
【００６５】
追加のプロセッサ１１１５は任意選択的に用いられるので、図１１において破線で示されている。各プロセッサ１１１０、１１１５は、本明細書において説明される処理コアのうち１以上を含み得、プロセッサ１０００の何らかのバージョンであり得る。
【００６６】
メモリ１１４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであり得る。少なくとも１つの実施形態において、コントローラハブ１１２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）などのポイントツーポイントインタフェース、または同様の接続１１９５を介してプロセッサ１１１０、１１１５と通信を行う。
【００６７】
一実施形態において、コプロセッサ１１４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサなど特定用途向けプロセッサである。一実施形態において、コントローラハブ１１２０は、統合型グラフィック処理アクセラレータを含みうる。
【００６８】
アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱的特性、電力消費特性などを含む様々な利点に関して、物理リソース１１１０、１１１５間では様々な差があり得る。
【００６９】
一実施形態において、プロセッサ１１１０は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令にはコプロセッサ命令が埋め込まれ得る。プロセッサ１１１０は、取り付けられたコプロセッサ１１４５により実行されるべきタイプのものとしてこれらのコプロセッサ命令を認識する。したがって、プロセッサ１１１０は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ１１４５へ発行する。コプロセッサ１１４５は受信したコプロセッサ命令を受け付け、実行する。
【００７０】
図１２は、本願発明の実施形態に係る、より特定的かつ例示的な第１のシステム１２００のブロック図である。図１２に示すようにマルチプロセッサシステム１２００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１２５０を介して結合される第１プロセッサ１２７０および第２プロセッサ１２８０を含む。プロセッサ１２７０、１２８０のそれぞれは、プロセッサ１０００の何らかのバージョンであり得る。本願発明の一実施形態において、プロセッサ１２７０、１２８０はそれぞれ、プロセッサ１１１０、１１１５であり、コプロセッサ１２３８は、コプロセッサ１１４５である。他の実施形態において、プロセッサ１２７０、１２８０はそれぞれ、プロセッサ１１１０、および、コプロセッサ１１４５である。
【００７１】
プロセッサ１２７０、１２８０はそれぞれ、統合型メモリコントローラ（ＩＭＣ）ユニット１２７２、１２８２を含むものとして示されている。また、プロセッサ１２７０は自身のバスコントローラユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース１２７６、１２７８を含み、同様に、第２プロセッサ１２８０は、インタフェース１２８６、１２８８を含む。プロセッサ１２７０、１２８０は、Ｐ−Ｐインタフェース回路１２７８、１２８８を用いてポイントツーポイント（Ｐ−Ｐ）インタフェース１２５０を介して情報を交換し得る。図１２に示されるように、ＩＭＣ１２７２、１２８２は、プロセッサを、各プロセッサにローカルに取り付けられた主メモリの一部であり得るそれぞれのメモリ、つまり、メモリ１２３２およびメモリ１２３４に結合する。
【００７２】
プロセッサ１２７０、１２８０はそれぞれ、ポイントツーポイントインタフェース回路１２７６、１２９４、１２８６、１２９８を用いて個別のＰ−Ｐインタフェース１２５２、１２５４を介してチップセット１２９０と情報を交換し得る。チップセット１２９０は任意選択的に、高性能インタフェース１２３９を介してコプロセッサ１２３８と情報を交換し得る。一実施形態において、コプロセッサ１２３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサなど特定用途向けプロセッサである。
【００７３】
共有キャッシュ（図示せず）は、プロセッサが低電力モードに入った場合に、片方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るよう、いずれかのプロセッサに含まれる、または、両方のプロセッサの外ではあるが、Ｐ−Ｐ相互接続を介してプロセッサと接続される。
【００７４】
チップセット１２９０は、インタフェース１２９６を介して第１バス１２１６と結合され得る。一実施形態において、第１バス１２１６はＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、またはＰＣＩ  Ｅｘｐｒｅｓｓバスなどのバス、若しくは、他の第３世代のＩ／Ｏ相互接続バスであり得る。ただし、本願発明の範囲はそのように限定されない。
【００７５】
図１２に示されるように、第１バス１２１６を第２バス１２２０へ結合するバスブリッジ１２１８と併せて、様々なＩ／Ｏデバイス１２１４が第１バス１２１６へ結合され得る。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィック処理アクセラレータ、または、デジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラム可能ゲートアレイ、または何らかの他のプロセッサなど１以上の追加のプロセッサ１２１５が第１バス１２１６に結合される。一実施形態において、第２バス１２２０は、ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ（ＬＰＣ）バスであり得る。一実施形態において、例えば、キーボードおよび／またはマウス１２２２、通信デバイス１２２７、および、命令／コードおよびデータ１２３０を含みうるディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット１２２８を含む様々なデバイスが第２バス１２２０に結合され得る。さらに、オーディオＩ／Ｏ１２２４が、第２バス１２２０に結合され得る。なお、他のアーキテクチャを用いることも可能である。例えば、図１２のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス、または他のそのようなアーキテクチャを実装し得る。
【００７６】
図１３は、本願発明の実施形態に係る、より特定的かつ例示的な第２のシステム１３００のブロック図である。図１２および１３において同様の要素には同様の参照番号が付与され、図１３の他の態様を曖昧にしないよう図１２のいくつかの態様は図１３において省略されている。
【００７７】
図１３は、プロセッサ１２７０、１２８０がそれぞれ、統合型メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１２７２、１２８２を含みうることを示す。よって、ＣＬ１２７２、１２８２は、統合型メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１３は、メモリ１２３２、１２３４がＣＬ１２７２、１２８２に結合されることだけでなく、Ｉ／Ｏデバイス１３１４が制御ロジック１２７２、１２８２に結合されることも示す。レガシーＩ／Ｏデバイス１３１５は、チップセット１２９０に結合される。
【００７８】
図１４は、本願発明の実施形態に係るＳｏＣ１４００のブロック図を示す。図１０の要素と同様の要素には同様の参照番号が付与される。また、破線で示される四角は、より発展したＳｏＣにおける任意選択的な特徴である。図１４において、相互接続ユニット１４０２は、１以上のコア２０２Ａ〜２０２Ｎからなるセットおよび共有キャッシュユニット１００６を含むアプリケーションプロセッサ１４１０と、システムエージェントユニット１０１０と、バスコントローラユニット１０１６と、統合型メモリコントローラユニット１０１４と、統合型グラフィック処理ロジック、画像プロセッサ、オーディオプロセッサ、および動画プロセッサを含みうる１以上のコプロセッサ１４２０からなるセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１４３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１４３２と、１以上の外部ディスプレイに結合するためディスプレイユニット１４４０とに結合される。一実施形態において、コプロセッサ１４２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサなどの特定用途向けプロセッサを含む。
【００７９】
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性、および非揮発性のメモリ、および／または記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
【００８０】
図１２に示されるコード１２３０などのプログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力命令に適用されてもよい。出力情報は、公知の方式で、１以上の出力デバイスに適用されてもよい。本明細書の目的において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
【００８１】
プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。
【００８２】
少なくとも１つの実施形態の１以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。
【００８３】
そのような機械可読記憶媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー（登録商標）ディスク、光学式ディスク、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクなどを含む他の何らかのタイプのディスク、読み取り専用メモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。
【００８４】
したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および／またはシステム特徴を定める、Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ（ＨＤＬ）などの命令を保持する、または設計データを保持する非一時的な有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
【００８５】
エミュレート（バイナリトランスレーション、コードモーフィングなど）  場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される１以上の他の命令にトランスレートする（例えば、スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて）、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。
【００８６】
図１５は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図１５は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１５１６によりネイティブに実行され得るｘ８６バイナリコード１５０６を生成するべくｘ８６コンパイラ１５０４を用いてコンパイルされ得る高水準言語１５０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１５１６は、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的な部分、または、（２）少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じ結果を得るべく、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも１つのｘ８６命令セットコアを備えるＩｎｔｅｌプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。ｘ８６コンパイラ１５０４は、少なくとも１つのｘ８６命令セットコアを備えるプロセッサ１５１６で追加のリンケージ処理あり、またはなしで実行され得るｘ８６バイナリコード１５０６（例えばオブジェクトコード）を生成するべく動作可能なコンパイラを表す。同様に、図１５は、少なくとも１つのｘ８６命令セットコアを備えないプロセッサ１５１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するコアを備えるプロセッサ、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを備えるプロセッサなど）によってネイティブに実行され得る代替的な命令セットバイナリコード１５１０を生成するべく、代替的な命令セットコンパイラ１５０８を用いてコンパイルされ得る高水準言語１５０２のプログラムを示す。命令コンバータ１５１２を用いて、ｘ８６命令セットコアを備えないプロセッサ１５１４によってネイティブに実行され得るコードへｘ８６バイナリコード１５０６を変換する。この変換されたコードが、代替的な命令セットバイナリコード１５１０と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ１５１２は、エミュレート、シミュレート、または他の何らかの処理により、プロセッサ、或いは、ｘ８６命令セットプロセッサまたはコアを有さない他の電子デバイスがｘ８６バイナリコード１５０６を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【００８７】
本願発明の実施形態は、装置を含み、装置は、第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令を復号化する復号化ロジックと、実行ロジックとを備え、実行ロジックは、第１ソースオペランドのデータ値の２乗を計算し、第２ソースオペランドのデータ値の２乗を計算し、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算し、計算の結果をデスティネーションオペランドに格納し、計算には１つの乗算オペレーションのみが用いられる。
【００８８】
装置のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち１以上が実装される。ｉ）デスティネーションオペランドは汎用レジスタである。ｉｉ）第１ソースオペランドのデータ値の２乗は、デスティネーションオペランドの下位ビットに格納され、第２ソースオペランドのデータ値の２乗は、デスティネーションオペランドの上位ビットに格納され、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。ｉｉｉ）デスティネーションオペランドはパックドデータレジスタであり、３つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。ｉｖ）実行ロジックは、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成し、一時変数を２乗し、４Ｎビットだけ一時変数を右シフトすることにより第１ソースオペランドのデータ値の２乗を計算し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖ）実行ロジックは、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成し、一時変数を２乗し、２乗された一時変数を、（２Ｎだけ左シフトされた２）−１）の値とＡＮＤオペレーションし、（２Ｎ＋１）だけ右シフトすることにより、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖｉ）実行ロジックは、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成し、一時変数を２乗し、２乗された一時変数を、（（Ｎだけ左シフトされた１）−１）の値の１の補数とＡＮＤオペレーションすることにより、第２ソースオペランドのデータ値の２乗を計算し、Ｎは、ｌｏｇ２（データ値の基数）である。
【００８９】
本願発明の実施形態は、第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令をコンピュータプロセッサで実行する方法を含み、方法は、第１ソースオペランドのデータ値の２乗を計算する段階と、第２ソースオペランドのデータ値の２乗を計算する段階と、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算する段階と、計算の結果をデスティネーションオペランドに格納する段階とを備え、計算には１つの乗算オペレーションのみが用いられる。
【００９０】
方法のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち１以上が実装される。ｉ）デスティネーションオペランドは汎用レジスタである。ｉｉ）第１ソースオペランドのデータ値の２乗は、デスティネーションオペランドの下位ビットに格納され、第２ソースオペランドのデータ値の２乗は、デスティネーションオペランドの上位ビットに格納され、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。ｉｉｉ）デスティネーションオペランドはパックドデータレジスタであり、３つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。ｉｖ）第１ソースオペランドのデータ値の２乗を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、４Ｎビットだけ一時変数を右シフトする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖ）第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、２乗された一時変数を、（２Ｎだけ左シフトされた２）−１）の値とＡＮＤオペレーションする段階と、（２Ｎ＋１）だけ右シフトする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖｉ）第２ソースオペランドのデータ値の２乗を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、２乗された一時変数を、（（Ｎだけ左シフトされた１）−１）の値の１の補数とＡＮＤオペレーションする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。
【００９１】
本願発明の実施形態は、プロセッサにより実行されるとプロセッサに第１ソースオペランドと、第２ソースオペランドと、デスティネーションオペランドとを含む２乗乗算（ＳＱＲＭＵＬ）命令を実行する方法を実施させるコードを含む有形の機械可読媒体を含み、方法は、第１ソースオペランドのデータ値の２乗を計算する段階と、第２ソースオペランドのデータ値の２乗を計算する段階と、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算する段階と、計算の結果をデスティネーションオペランドに格納する段階とを備え、計算には１つの乗算オペレーションのみが用いられる。
【００９２】
有形の機械可読媒体のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち１以上が実装される。ｉ）デスティネーションオペランドは汎用レジスタである。ｉｉ）第１ソースオペランドのデータ値の２乗は、デスティネーションオペランドの下位ビットに格納され、第２ソースオペランドのデータ値の２乗は、デスティネーションオペランドの上位ビットに格納され、第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。ｉｉｉ）デスティネーションオペランドはパックドデータレジスタであり、３つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。ｉｖ）第１ソースオペランドのデータ値の２乗を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、４Ｎビットだけ一時変数を右シフトする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖ）第１ソースオペランドおよび第２ソースオペランドのデータ値の乗算を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、２乗された一時変数を、（２Ｎだけ左シフトされた２）−１）の値とＡＮＤオペレーションする段階と、（２Ｎ＋１）だけ右シフトする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。ｖｉ）第２ソースオペランドのデータ値の２乗を計算する段階は、２Ｎだけ第１ソースオペランドのデータ値を左シフトし、第２ソースオペランドのデータ値により、シフトされたデータ値をＯＲオペレーションすることにより一時変数を生成する段階と、一時変数を２乗する段階と、２乗された一時変数を、（（Ｎだけ左シフトされた１）−１）の値の１の補数とＡＮＤオペレーションする段階とを有し、Ｎは、ｌｏｇ２（データ値の基数）である。
【図１】
2014182811.tif 000003
【図２】
2014182811.tif 000004
【図３】
2014182811.tif 000005
【図４】
2014182811.tif 000006
【図５】
2014182811.tif 000007
【図６】
2014182811.tif 000008
【図７】
2014182811.tif 000009
【図８Ａ】
2014182811.tif 000010
【図８Ｂ】
2014182811.tif 000011
【図９Ａ】
2014182811.tif 000012
【図９Ｂ】
2014182811.tif 000013
【図１０】
2014182811.tif 000014
【図１１】
2014182811.tif 000015
【図１２】
2014182811.tif 000016
【図１３】
2014182811.tif 000017
【図１４】
2014182811.tif 000018
【図１５】
2014182811.tif 000019
【外国語明細書】
2014182811000001.pdf