(57)【要約】      （修正有）【課題】複数のテストソースに対する論理和テストおよび論理積テスト機能を融合可能な命令およびロジックを提供する。【解決手段】テスト命令は、第１、第２、第３のソースデータオペランドと演算タイプとを特定する。デコードされたテスト命令に応じて、実行ユニットは特定された演算タイプに基づく１つの論理演算を、第１および第２のソースデータオペランドからのデータ間に実行し、第３のソースデータオペランドと第１の論理演算の結果とからのデータ間に第２の論理演算を実行して条件フラグを設定する。いくつかの実施形態は、１つの論理命令をテスト命令と動的に融合することによって融合されたテスト命令を作成する。他の実施形態は実行時コンパイラを用いてテスト命令を作成する。いくつかの実施形態は、さらに、テスト命令を後続の条件付き分岐命令と融合し、条件フラグの設定に基づいて分岐を行う。【選択図】図１Ａ
2014194753.tif 000002
【特許請求の範囲】
【請求項１】
実行のための第１の命令をデコードするデコードステージであって、前記第１の命令は第１のオペランドソースのデータと、第２のオペランドソースのデータと、第３のオペランドソースのデータと、演算タイプとを特定するデコードステージと、
前記デコードされた第１の命令に応じて、
前記第１および第２のオペランドソースからのデータ間において前記特定された演算タイプに基づく第１の論理演算を実行し、
前記第３のオペランドソースからのデータと前記第１の論理演算の結果との間において第２の論理演算を実行して条件フラグを条件付きで設定する１つ以上の実行ユニットと、
を含むプロセッサ。
【請求項２】
前記第２の論理演算は論理積演算を含み、条件付きでゼロフラグを設定する、請求項１に記載のプロセッサ。
【請求項３】
前記特定された演算タイプに基づいて、前記第１および第２のオペランドソースのデータからのデータ間において論理積が実行される、請求項２に記載のプロセッサ。
【請求項４】
前記特定された演算タイプに基づいて、前記第１および第２のオペランドソースのデータからのデータ間において論理和が実行される、請求項２に記載のプロセッサ。
【請求項５】
前記デコードステージが前記第１の命令をデコードすると、単一の融合されたマイクロ操作として実行するために、前記第１の命令を分岐命令と融合する、請求項１から４の何れか１項に記載のプロセッサ。
【請求項６】
前記単一の融合されたマイクロ操作に応じて、前記１つ以上の実行ユニットは、前記第１の論理演算を実行し、前記第３のソースデータオペランドに対して前記第１の論理演算の結果をテストして、ゼロフラグを条件付きで設定し、前記ゼロフラグが設定されると、条件付きで分岐する、請求項５に記載のプロセッサ。
【請求項７】
第１のソースデータオペランドと、第２のソースデータオペランドと、第３のソースデータオペランドとを特定する第１の命令と、分岐ターゲットを特定する第２の命令とをデコードするデコードステージであって、前記デコードステージは、単一の融合されたマイクロ操作として実行するために、前記第１の命令を前記第２の命令と融合するデコードステージと、
前記単一の融合されたマイクロ操作に応じて、前記第１のソースデータオペランドおよび前記第２のソースデータオペランドからのデータ間において第１の論理演算を実行し、前記第３のソースデータオペランドからのデータと前記第１の論理演算の結果との間において第２の論理演算を実行して条件フラグを設定し、前記条件フラグが設定されると、前記分岐ターゲットに対して条件付き分岐を実行する１つ以上の実行ユニットと、
を含むプロセッサ。
【請求項８】
前記第２の論理演算は論理テスト演算を含み、条件付きでゼロフラグを設定する請求項７に記載のプロセッサ。
【請求項９】
前記第１の命令に基づいて、前記第１のソースデータオペランドおよび前記第２のソースデータオペランドからのデータ間に論理積が実行される請求項８に記載のプロセッサ。
【請求項１０】
前記第１の命令に基づいて、前記第１のソース／デスティネーションデータオペランドおよび前記第２のソースデータオペランドからのデータ間において論理和が実行される請求項８に記載のプロセッサ。
【請求項１１】
実行するために第１の命令をデコードし、前記第１の命令は第１のソースデータオペランドと、第２のソースデータオペランドと、第３のソースデータオペランドと、演算タイプとを特定し、
前記デコードされた第１の命令に応じて、
前記第１および第２のソースデータオペランドからのデータ間において前記特定された演算タイプに基づく第１の論理演算を実行し、
前記第３のソースデータオペランドからのデータと前記第１の論理演算の結果との間において第２の論理演算を実行して条件フラグを設定する、
ことを含む方法。
【請求項１２】
前記第２の論理演算の実行は、論理積演算を実行し、条件付きでゼロフラグを設定することを含む、請求項１１に記載の方法。
【請求項１３】
前記特定された演算タイプに基づいて、前記第１および第２のソースデータオペランドからのデータ間において論理積が実行される、請求項１２に記載の方法。
【請求項１４】
前記特定された演算タイプに基づいて、前記第１および第２のソースデータオペランドからのデータ間において論理和が実行される、請求項１２に記載の方法。
【請求項１５】
単一の融合されたマイクロ操作として実行するために、前記第１の命令を分岐命令と融合することをさらに含む、請求項１１から１４の何れか１項に記載の方法。
【請求項１６】
前記単一の融合されたマイクロ操作に応じて、
前記第１の論理演算を実行し、
前記第３のソースデータオペランドに対して前記第１の論理演算の結果をテストして、ゼロフラグを条件付きで設定し、
前記ゼロフラグが設定されると、条件付きで分岐させることを含む、
請求項１５に記載の方法。
【請求項１７】
メモリと、
第１のプロセッサコアおよび第２のプロセッサコアを含む複数のプロセッサとを含み、各プロセッサは、
実行のための第１の命令をデコードするデコードステージであって、前記第１の命令は第１のオペランドソースのデータと、第２のオペランドソースのデータと、第３のオペランドソースのデータと、演算タイプとを特定するデコードステージと、
前記デコードされた第１の命令に応じて、
前記第１および第２のオペランドソースからのデータ間において前記特定された演算タイプに基づく第１の論理演算を実行し、
前記第３のオペランドソースと前記第１の論理演算の結果からのデータ間において第２の論理演算を実行して条件フラグを条件付きで設定する１つ以上の実行ユニットと、
を含む処理システム。
【請求項１８】
前記第２の論理演算の実行は、論理テスト演算を含み、条件付きでゼロフラグを設定する、請求項１７に記載の処理システム。
【請求項１９】
前記第１の命令に基づいて、前記第１のソース／デスティネーションデータオペランドおよび前記第２のソースデータオペランドからのデータ間において論理積が実行される請求項１８に記載の処理システム。
【請求項２０】
前記第１の命令に基づいて、前記第１のソース／デスティネーションデータオペランドおよび前記第２のソースデータオペランドからのデータ間において論理和が実行される、請求項１８に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたはその他の処理論理によって実行されると、論理的、数学的、またはその他の機能的な演算を実行する処理論理、マイクロプロセッサおよび関連の命令セットアーキテクチャ分野に関する。特に、本開示は、複数のテストソースに対する論理和テストおよび論理積テストの機能を実現する融合可能な命令および論理に関する。
【背景技術】
【０００２】
現代のプロセッサは、処理能力の向上および／または専用命令の利用のためのマイクロアーキテクチャ構造および技術を含む場合がある。それらのマイクロアーキテクチャ構造および技術は、例えば、アウトオブオーダー実行、マクロ命令を融合命令に融合するデコーダ、マイクロ命令またはマイクロ操作（またはｍｉｃｒｏ−ｏｐ、「ｕオプ」）キャッシュまたはトレースキャッシュ、圧縮命令および／または融合命令またはｍｉｃｒｏ−ｏｐの処理キューを含んでもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
命令の融合は、２つの命令を結合させて単一の命令とし、結果的に実行時のプロセッサ内において１つの演算、マイクロ操作、シーケンスとする動的な処理である。プロセッサ命令キュー（ＩＱ）に格納されている命令は、そのＩＱを読出し後および命令デコーダに対する送信前、または命令デコーダによってデコードされた後に「融合」されてもよい。一般に、命令がデコードされる前に発生する命令融合を「マクロ融合」と呼び、命令が（例えばｕオプに）デコードされた後に発生する命令融合を「マイクロ融合」と呼ぶ。マクロ融合の一例として、比較（「ＣＭＰ」）命令またはテスト命令（「ＴＥＳＴ」）（「ＣＭＰ／ＴＥＳＴ」）を条件付き飛越し（「ＪＣＣ」）命令と結合させることが挙げられる。ＣＭＰ／ＴＥＳＴおよびＪＣＣ命令の対は、例えば、比較が行われるループの末端のプログラムで規則的に発生し、比較結果に基づいて、分岐が作成されるか、もしくは作成されない。マクロ融合は命令スループットを効果的に増やすことができるため、命令を融合する機会を可能な限り多く見つけることが望ましい。
【０００４】
Ｗｅｂブラウザは、１つ以上のインタプリタ形式のコンピュータプログラミング言語に対応してもよく、それによってクライアント側のスクリプトがユーザと対話し、ブラウザを制御し、非同期で通信を行い、表示されているように文書の内容を修正することができるようにしてもよい。例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＪＳｃｒｉｐｔまたはＥＣＭＡスクリプトなどのインタプリタ形式のコンピュータプログラミングまたはスクリプト言語は、動的で、かつ弱く型付けされていてもよく、オブジェクト指向、命令型プログラミング方式、関数型プログラミング方式に対応してもよい。そのようなインタプリタ形式のコンピュータプログラミング言語は、インタプリタ形式の言語を機械命令シーケンスに動的にコンパイルする実行時（ＪＩＴ）コンパイラとしてブラウザサポートされていてもよい。ＪＩＴコンパイラは処理の高速化のために記憶されている値を最適化してもよいが、実行時にそのような最適化のためのオブジェクトのタイプを動的にテストする必要がある。それらの動的なテストによって、処理オーバーヘッドをさらに追加することとなる場合があり、それによって消費エネルギーが増加し、そのような最適化の処理上の利点を制限する場合がある。
【０００５】
現在まで、そのような処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックに対する可能な解決策は、十分に考察されてこなかった。
【０００６】
本発明は例示目的で図示されるが、添付図面の各図による限定を意図しない。
【図面の簡単な説明】
【０００７】
【図１Ａ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するシステムの一実施形態のブロック図である。
【図１Ｂ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するシステムの別の実施形態のブロック図である。
【図１Ｃ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するシステムの別の実施形態のブロック図である。
【図２】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するプロセッサの一実施形態のブロック図である。
【図３Ａ】一実施形態によるパックデータタイプを図示する。
【図３Ｂ】一実施形態によるパックデータタイプを図示する。
【図３Ｃ】一実施形態によるパックデータタイプを図示する。
【図３Ｄ】一実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令エンコードを図示する。
【図３Ｅ】別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令エンコードを図示する。
【図３Ｆ】別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令エンコードを図示する。
【図３Ｇ】別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令エンコードを図示する。
【図３Ｈ】別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令エンコードを図示する。
【図４Ａ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するプロセッサのマイクロアーキテクチャの一実施形態の各要素を図示する。
【図４Ｂ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するプロセッサのマイクロアーキテクチャの別の実施形態の各要素を図示する。
【図５】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するプロセッサの一実施形態のブロック図である。
【図６】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するコンピュータシステムの一実施形態のブロック図である。
【図７】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するコンピュータシステムの別の実施形態のブロック図である。
【図８】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するコンピュータシステムの別の実施形態のブロック図である。
【図９】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するシステムオンチップの一実施形態のブロック図である。
【図１０】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するプロセッサの一実施形態のブロック図である。
【図１１】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現するＩＰコア開発システムの一実施形態のブロック図である。
【図１２】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行するアーキテクチャエミュレーションシステムの一実施形態を図示する。
【図１３】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を翻訳するシステムの一実施形態を図示する。
【図１４】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を融合するプロセッサのマイクロアーキテクチャの一代替実施形態の各要素を図示する。
【図１５Ａ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する融合命令構造の一実施形態のフロー図を示す。
【図１５Ｂ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する融合命令構造の一代替実施形態のフロー図を示す。
【図１５Ｃ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する融合命令構造の別の代替実施形態のフロー図を示す。
【図１６Ａ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を融合する処理の一実施形態のフロー図を示す。
【図１６Ｂ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を融合する処理の一代替実施形態のフロー図を示す。
【図１６Ｃ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を融合する処理の別の代替実施形態のフロー図を示す。
【図１６Ｄ】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を融合する処理の別の代替実施形態のフロー図を示す。
【図１７】複数のテストソースに対する論理和テストおよび論理積テスト機能を実現する命令を実行する処理の一実施形態のフロー図を示す。
【発明を実施するための形態】
【０００８】
以下の説明は、プロセッサ、コンピュータシステム、またはその他の処理装置内において、またはそれと関連して複数のテストソースに対して論理和テストおよび論理積テスト機能を提供する融合可能な命令および論理を開示するものである。
【０００９】
Ｗｅｂブラウザは、動的かつ弱く型付けされる場合のある、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＪＳｃｒｉｐｔまたはＥＣＭＡスクリプトなどの１つ以上のインタプリタ形式のコンピュータプログラミング言語に対するサポートを含んでもよく、オブジェクト指向の命令的かつ機能的なプログラミングスタイルをサポートしてもよい。そのようなインタプリタ形式のコンピュータプログラミング言語には、動的にインタプリタ形式の言語を機械命令シーケンスにコンパイルする実行時（ＪＩＴ）コンパイラの形態によるブラウザサポートがあってもよい。ＪＩＴコンパイラは、処理の高速化のために記憶されている値を最適化してもよいが、その場合は実行時にそのような最適化に対してオブジェクトのタイプを動的にテストする必要がある場合がある。例えば、ＪＩＴコンパイラは、マシンワードの１つ以上のビットを用いて、値が、より汎用的な浮動小数点値または文字列ではなく、最適化された整数であることを識別および／または指定してもよい。それらの１つ以上のビットの存在は、当該値にアクセスする前の実行時において動的に確認できる。そのような動的なタイプテストは、頻繁に実行されるタイプテストの命令シーケンスのイディオムの形でさらなる処理オーバーヘッドを発生させ、それによって消費エネルギーが増加することとなり、そのようなコンパイラ最適化の処理能力の利点を制限してしまう。
【００１０】
上記の頻繁に実行されるタイプテストの命令シーケンスのイディオムは、２つのソースデータオペランド（例えばいずれかのソースのビットが１であるかをテストする際は論理和、いずれかのソースのビットが０であるかをテストする際は論理積）を組み合わせる論理演算と、比較またはテスト命令（例えばマスクに対して上記論理演算の結果をテストする命令）と、条件付き分岐（例えばゼロフラグがＴＥＳＴによって設定されたか否かによる、よりゆっくりとしたジェネリックなコードシーケンスへの飛越しを行うＪＺ／ＪＮＺ）とを含んでもよい。プロセッサのデコード論理は、比較命令またはテスト命令（例えばＴＥＳＴ）を条件付き分岐命令（例えばＪＺ）と組み合わせる際にマクロ融合を利用してもよい。
【００１１】
融合可能な命令および論理の実施形態は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供できる。いくつかの実施形態は、実行のためのテスト命令をデコードするプロセッサデコードステージを含み、前記命令は、第１、第２、第３のソースデータオペランドおよび演算タイプを特定する。実行ユニットは、デコードされたテスト命令に応じて、第１および第２のソースデータオペランドからのデータ間において前記特定された演算タイプに基づく１つの論理演算（例えば論理和）を実行し、第３のソースデータオペランドおよび第１の論理演算の結果からのデータ間において第２の論理演算（例えば論理積）を実行して条件フラグを設定する。いくつかの実施形態は、１つの論理的な命令（例えば論理和）を従来技術のテスト命令と融合することによって、上記テスト命令を動的に作成する。他の実施形態は、動的にテスト命令を作成するがＪＩＴコンパイラを介する。いくつかの実施形態は、さらに後続の条件付き分岐命令（例えばＪＺ）とテスト命令を融合し、どのように条件フラグが設定されるかに基づいて分岐を実行する。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは、単一の命令に融合可能でもよく、その結果、実行時のプロセッサ内に存在するのは、１つのマイクロ操作シーケンスとなる。
【００１２】
複数のテストソースに対して論理和テストおよび／または論理積テスト機能を提供する融合可能な命令および論理によって、ＪＩＴコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【００１３】
以下の説明では、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベントイネーブルメントメカニズム等の多くの特定詳細は、本発明の実施形態をよりよく理解するためのものである。しかし、発明はそのような特定詳細なしでも実施できるということは当業者には理解できよう。又、本発明の実施形態を不必要にわかりにくくするのを避けるために、いくつかの公知の構造、回路などは示されていない。
【００１４】
以下の実施形態はプロセッサに関して記載されるが、他の種類の集積回路および論理デバイスには他の実施形態を適用可能である。本発明の実施形態と同様の技術および教示は、パイプラインスループットおよび処理能力を上げることで利益がある他の種類の回路または半導体素子にも容易に適用できる。本発明の実施形態の教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかし本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットのデータ演算を行うプロセッサまたは機械に限定されず、データの操作または管理が実行されるいずれのプロセッサおよび機械にも適用可能である。さらに、例示を目的として、以下に実施例を記載し、添付図面は様々な実施例を図示する。しかしながら、それらの実施例は、広い範囲に及ぶ本発明の実施形態のすべての可能な実現を述べることを意図するものではなく、本発明の実施形態の例を提供することを意図しているに過ぎず、そのような例が限定的に理解されるべきではない。
【００１５】
以下の例は、実行部および論理回路のコンテキストで命令処理および配信を記載しているが、本発明の他の実施形態は、機械によって実行されると、本発明の少なくとも１つの実施形態と一致した機能を実行する、機械可読有形媒体に格納されたデータおよび／又は命令により実行可能である。一実施形態において、本発明の実施形態と関連する機能は、機械実行可能命令に具現化される。命令を利用して、命令をプログラミングされた汎用プロセッサまたは専用プロセッサに、本発明の各工程を実行させることができる。本発明の実施形態は、コンピュータ（その他の電子デバイス）に本発明の実施形態による１つ以上の演算を実行させるようプログラミングするのに利用できる命令を格納する機械またはコンピュータ可読媒体を含みうるコンピュータプログラムプロダクトまたはソフトウェアとして提供可能である。もしくは、本発明の実施形態の各工程を、各工程を実行する固定機能の論理を含む特定用途のハードウェアコンポーネントにより、または、プログラミングされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせにより実行することもできる。
【００１６】
本発明の実施形態を実行する論理をプログラミングするために使用される命令は、ＤＲＡＭ，キャッシュ、フラッシュメモリ、またはその他のストレージなど、システムのメモリ内に格納可能である。さらに、命令は、ネットワーク経由または他のコンピュータ可読媒体により配信可能である。したがって、機械可読媒体は、機械（例えばコンピュータ）が可読な形式で情報を格納または送信する任意のメカニズムを含んでよく、これらに限定はされないが、フロッピー（登録商標）（登録商標）ディスク、光ディスク、コンパクトディスク（ＣＤ）、ＣＤ−ＲＯＭ、および磁気光ディスク、読取専用メモリ（ＣＤ−ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能書き込み可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能書き込み可能ＲＯＭ（ＥＥＰＲＯＭ）、磁気または光カード、フラッシュメモリ、または電気、光、音響、その他の形態の伝播信号（例えば搬送波、赤外線信号、デジタル信号等）によるインターネット経由の情報送信に使用される有形の機械可読ストレージなどを含んでもよい。従って、コンピュータ可読媒体は、機械（例えばコンピュータ）が可読な形式で電子命令または情報を格納または送信するのに適した任意の種類の有形の機械可読媒体を含む。
【００１７】
設計は、作成からシミュレーション、さらには製造までの様々な段階を経て行うことができる。設計を表すデータは、複数の方法で設計を表していてよい。まず、シミュレーションにおいて有効なように、ハードウェアを、ハードウェア記述言語などの機能記述言語で表すことができる。さらに、論理および／またはトランジスタゲートを有する回路レベルモデルを、設計プロセスの幾つかの段階で製造することができる。さらに、大部分の設計では、ある段階において、ハードウェアモデルの様々な装置の物理的位置を表すデータレベルに到達する。従来の半導体製造技術を利用する場合には、ハードウェアモデルを表すデータは、集積回路の製造に利用されるマスク用の様々なマスク層上の様々な特徴の存在または不在を特定するデータであってよい。設計のいずれの表現においても、データは、いずれかの形態の機械可読媒体に格納されてよい。メモリまたはディスク等の磁気又は光ストレージは、情報を送信するように変調または生成される光波または電波を介して送信される情報を格納する機械可読媒体である。コードまたは設計を示す、または搬送する電気搬送波が送信されると、電気信号のコピー、バッファリング、または再送信の範囲において新たなコピーが生成される。従って、通信プロバイダまたはネットワークプロバイダは、本発明の実施形態の技術を具現化している、搬送波にエンコードされた情報などの物品を少なくとも一時的に有形の機械可読媒体に格納してもよい。
【００１８】
現代のプロセッサでは、複数の異なる実行部を利用して、様々なコードおよび命令を処理および実行している。完了まで時間がかからないものもあれば、莫大な数のクロックサイクルを要するものもあり、全ての命令を同じように製造するわけではない。命令のスループットが速いと、プロセッサの全体の処理能力は良くなる。従って、多くの命令がより高速に実行されることは有益である。しかし、複雑度が高く、実行時間およびプロセッサリソースをより多く必要とする命令も存在する。例を挙げると、浮動小数点命令、ロード／格納処理、データ移動などである。
【００１９】
インターネットやテキスト、マルチメディアアプリケーションで利用されるコンピュータシステム数が増えるにつれて、さらなるプロセッササポートを導入することが増えてきた。一実施形態において、一つの命令セットはデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割込みおよび例外処理、外部入出力（Ｉ／Ｏ）を含む１つ以上のコンピュータアーキテクチャと関連付けられてもよい。
【００２０】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１つ以上の命令セットを実行するために使用されるプロセッサ論理および回路を含む１つ以上のマイクロアーキテクチャによって実現されてもよい。したがって、各プロセッサが異なるマイクロアーキテクチャを有しても、共通の命令セットの少なくとも一部を共有できる。例えば、Ｉｎｔｅｌ（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州ＳｕｎｎｙｖａｌｅのＡｄｖａｎｃｅｄ Ｍｉｃｒｏ Ｄｅｖｉｃｅｓ， Ｉｎｃ．のプロセッサは、ｘ８６命令セットのほぼ同一のバージョンを実現している（新しいバージョンではいくつかの拡張機能が追加されている）が、異なる内部設計を有する。同様に、ＡＲＭ Ｈｏｌｄｉｎｇｓ、 Ｌｔｄ．などの他のプロセッサ開発会社によって設計されたプロセッサ、ＭＩＰＳ、またはそれらの実施権者または採用者は、共通の命令セットの少なくとも一部を共有してもよいが、異なるプロセッサ設計を含む場合がある。例えば、ＩＳＡの同一のレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーム機構（例えば、Ｒｅｇｉｓｔｅｒ Ａｌｉａｓ Ｔａｂｌｅ （ＲＡＴ））を使用した１つ以上の動的に割り当てられた物理レジスタ、リオーダーバッファ（ＲＯＢ）およびリタイアメントレジスタファイルを含む、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実現されてもよい。一実施形態において、レジスタは、ソフトウェアプログラマによってアドレスが可能または不可能な１つ以上のレジスタ、レジスタアーキテクチャ、レジスタファイルなどのレジスタセットを含んでもよい。
【００２１】
一実施形態において、命令は１つ以上の命令フォーマットを含んでもよい。一実施形態において、命令フォーマットは、とくに実行される演算およびその演算の対応となるオペランドを特定するための様々なフィールド（ビット数、ビットの位置等）を示すことができる。命令フォーマットの中には、命令テンプレート（またはサブフォーマット）によって定義されるようにさらに分割されてもよい。例えば、所与の命令フォーマットの命令テンプレートを、命令フォーマットのフィールドの様々なサブセットを有するように定義されてもよく、および／または所与のフィールドが異なるインタプリタ形式を有するように定義されてもよい。一実施形態において、命令は命令フォーマットを用いて表現され（定義されている場合は、その命令フォーマットの命令テンプレートのうちの所与の１つにおいて表現される）、演算およびその演算対象となるオペランドを特定する、または表わす。
【００２２】
科学的用途、経済的用途、自動ベクトル化された汎用的用途、ＲＭＳ（ｒｅｃｏｇｎｉｔｉｏｎ、ｍｉｎｉｎｇ、およびｓｙｎｔｈｅｓｉｓ：認識、マイニング、合成）用途、および視覚的かつマルチメディアの用途（例えば、２Ｄ／３Ｄグラフィックス、画像処理、映像圧縮／展開、音声認識アルゴリズムおよび音声操作）は、膨大な数のデータ項目に対して同じ演算を実行しなければならない場合がある。一実施形態において、Ｓｉｎｇｌｅ Ｉｎｓｔｒｕｃｔｉｏｎ Ｍｕｌｔｉｐｌｅ Ｄａｔａ（ＳＩＭＤ）は、プロセッサに、複数のデータエレメントに対して演算を実行させる命令のタイプを指す。ＳＩＭＤ技術はプロセッサにおいて使用可能で、レジスタ内のビットを、固定サイズまたは可変サイズの個別の値を表わすデータエレメントに論理的に分割する。例えば、一実施形態において、６４ビットのレジスタ内のビットは、それぞれが個別の１６ビット値を表わす個別の４つの１６ビットデータエレメントを含むソースオペランドとして構成される。このタイプのデータは、「ｐａｃｋｅｄ（パック）」データタイプまたは「ｖｅｃｔｏｒ（ベクトル）」データタイプと呼ばれる場合があり、このデータタイプのオペランドは、パックデータオペランドまたはベクトルオペランドと呼ばれる。一実施形態において、パックデータ項目またはベクトルは、単一のレジスタ内に格納されるパックデータエレメントのシーケンスでもよく、パックデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または「パックデータ命令」または「ベクトル命令」のソースまたはデスティネーションオペランドでもよい。一実施形態において、ＳＩＭＤ命令は、同一または異なるサイズ、同一または異なる数のデータエレメント、同一または異なるデータエレメントの順序を有するデスティネーションベクトルオペランド（結果ベクトルオペランドとも呼ばれる）を作成するために、２つのソースベクトルオペランドに対して実行される単一のベクトル演算を指定する。
【００２３】
ｘ８６、ＭＭＸ（登録商標）、Ｓｔｒｅａｍｉｎｇ ＳＩＭＤ Ｅｘｔｅｎｓｉｏｎｓ（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２の命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）および／またはＮＥＯＮ命令を含む命令セットを有するプロセッサのＡＲＭ Ｃｏｒｔｅｘ（登録商標）ファミリなどのＡＲＭプロセッサ、およびＣｈｉｎｅｓｅ Ａｃａｄｅｍｙ ｏｆ ＳｃｉｅｎｃｅｓのＩｎｓｔｉｔｕｔｅ ｏｆ Ｃｏｍｐｕｔｉｎｇ Ｔｅｃｈｎｏｌｏｇｙ（ＩＣＴ）が開発したプロセッサのＬｏｏｎｇｓｏｎファミリなどのＭＩＰＳプロセッサなどによって使用されるＳＩＭＤ技術は、アプリケーションの処理能力を大幅な改良を実現してきた（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララのインテル社の登録商標または商標である）。
【００２４】
一実施形態において、デスティネーションおよびソースレジスタおよび／またはデータは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語である。いくつかの実施形態において、それらは図示されているものと異なる名称または機能を有するレジスタ、メモリ、またはその他の記憶領域によって実現されてもよい。例えば、一実施形態において、「ＤＥＳＴ１」は一時的なストレージレジスタまたはその他の記憶領域でもよく、一方「ＳＲＣ１」および「ＳＲＣ２」は第１のおよび第２のソースストレージレジスタまたはその他の記憶領域などでもよい。別の実施形態において、ＳＲＣおよびＤＥＳＴ記憶領域の２つ以上は、同じ記憶領域（例えば、ＳＩＭＤレジスタ）内の異なるデータストレージ要素に対応してもよい。一実施形態において、さらに、ソースレジスタのうちの１つは、例えば、第１および第２のソースデータに対して実行された演算の結果を、デスティネーションレジスタの役割を果たす２つのソースレジスタのうちの１つに対して書き戻すことによってデスティネーションレジスタの役割を果たすことができる。
【００２５】
図１Ａは、本発明の一実施形態における１つの命令を実行する実行部を含むプロセッサで形成されるコンピュータシステムのブロック図である。システム１００は、例えばここに記載する実施形態におけるような、本発明における処理データのアルゴリズムを実行する論理を含む実行部を利用するプロセッサ１０２等のコンポーネントを含む。システム１００は、カリフォルニア州サンタクララのＩｎｔｅｌ Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰＥＮＴＩＵＭ（登録商標）（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）、および／または、ＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサを表しているが、他のシステム（他のマイクロプロセッサ、工学ワークステーション、セットトップボックス等を有するＰＣを含む）を利用することもできる。一実施形態では、サンプルシステム１００は、ワイントン州のＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ Ｃｏｒｐｏｒａｔｉｏｎから入手可能なWINDOWS（登録商標）（商標）オペレーティングシステムの一バージョンを実行することができるが、他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）、Linux（登録商標））、埋め込みソフトウェア、および／またはグラフィックユーザインタフェースを利用することもできる。従って本発明の実施形態は、ハードウェア回路およびソフトウェアの特定の組み合わせに限定されない。
【００２６】
実施形態はコンピュータシステムに限定されない。ハンドヘルドデバイスおよび埋め込みアプリケーションといった他のデバイスには本発明の別の実施形態を利用することができる。ハンドヘルドデバイスの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）およびハンドヘルドＰＣが含まれる。埋め込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも一実施形態における１つ以上の命令を実行できる任意の他のシステムを含むことができる。
【００２７】
図１Ａは、本発明の一実施形態において、少なくとも１つの命令を実行するアルゴリズムを実行する１つ以上の実行部１０８を含むプロセッサ１０２で構成されるコンピュータシステム１００のブロック図である。一実施形態は、単一のプロセッサデスクトップまたはサーバシステムを想定した説明がなされるが、マルチプロセッサシステムを想定する別の実施形態を含むこともできる。システム１００は、ハブシステムアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピュータ（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス（例えばデジタル信号プロセッサ）であってよい。プロセッサ１０２は、プロセッサ１０２とシステム１００の他のコンポーネントとの間でデータ信号を送信することのできるプロセッサバス１１０に連結されている。システム１００のエレメントは、当業者には公知である自身の通常の機能を実行する。
【００２８】
一実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャによっては、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。また別の実施形態では、キャッシュメモリがプロセッサ１０２の外部に常駐していてもよい。また他の実施形態として、実装例および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせを含んでもよい。レジスタファイル１０６は、整数レジスタ、浮動少数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ等の様々なレジスタに様々な種類のデータを格納することができる。
【００２９】
実行ユニット１０８は、整数および浮動少数点演算を実行する論理を含み、これもプロセッサ１０２内に常駐している。プロセッサ１０２はさらに、一定のマクロ命令のマイクロコードを格納するマイクロコード（ｕコード）ＲＯＭを含む。１つの実施形態では、実行ユニット１０８は、パック命令セット１０９を処理する論理を含む。パック命令セット１０９を汎用プロセッサ１０２の命令セットに含め、さらに、命令を実行する関連回路も含めることで、多くのマルチメディアアプリケーションが利用する処理を、汎用プロセッサ１０２のパックデータを利用して行うことができる。従って多くのマルチメディアアプリケーションは、パックデータを処理するためにプロセッサのデータバス全幅を利用することで、加速化してより効率的に実行することができる。これにより、１つ以上の処理を一度に１つのデータエレメントに対して行う際に、プロセッサのデータバスに各小片のデータを転送する必要がなくなる。
【００３０】
さらにマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、ＤＳＰ、その他のタイプの論理回路では、実行部１０８の別の実施形態を利用することもできる。システム１００はメモリ１２０を含む。メモリ１２０は、ＤＲＡＭデバイス、ＳＲＡＭデバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ１２０は、プロセッサ１０２が実行可能なデータ信号により表される命令および／またはデータを格納することができる。
【００３１】
プロセッサバス１１０およびメモリ１２０には、システム論理チップ１１６が連結される。例示されている実施形態におけるシステム論理チップ１１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令およびデータを格納して、グラフィックコマンド、データおよびテクスチャを格納するために、高い帯域幅メモリ経路１１８をメモリ１２０に提供する。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、およびシステム１００の他のコンポーネント間にデータ信号を送信して、プロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ１２２間でデータ信号をブリッジ（橋絡）する。いくつかの実施形態では、システム論理チップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供してよい。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結される。グラフィックカード１１２は、アクセラレーテッドグラフィックポート（ＡＧＰ）インターコネクト１１４経由でＭＣＨ１１６に連結される。
【００３２】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するために専用ハブインタフェースバス１２２を利用する。ＩＣＨ１３０は、一部のＩ／ＯデバイスへのローカルＩ／Ｏバスを介した直接接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、およびプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。数例には、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線トランシーバ１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェームを含むレガシーＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、およびネットワークコントローラ１３４が含まれる。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、その他の大容量格納デバイスを含んでよい。
【００３３】
システムの別の実施形態では、一実施形態による命令をシステムオンチップとともに利用することができる。システムオンチップの一実施形態には、プロセッサおよびメモリからなるものがある。このようなシステム用のメモリの一例はフラッシュメモリである。フラッシュメモリは、プロセッサおよびその他のシステムコンポーネントと同じダイに配置されてよい。加えて、他の論理ブロック（例えばメモリコントローラまたはグラフィックコントローラ等）を、システムオンチップに配置することもできる。
【００３４】
図１Ｂは、本発明の一実施形態の原理を実装するデータ処理システム１４０を示す。当業者であればここに記載する実施形態を、本発明の範囲を逸脱することなく別の処理システムに応用することもできることを理解する。
【００３５】
コンピュータシステム１４０は、一実施形態による少なくとも１つの命令を実行する機能を有する処理コア１５９を含む。一実施形態では、処理コア１５９は、任意の種類のアーキテクチャの処理ユニットを表す（これらに限られないが、ＣＩＳＣ、ＲＩＳＣ，またはＶＬＩＷアーキテクチャ等）。処理コア１５９は、１つ以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、この製造を促すのに適したものであってもよい。
【００３６】
処理コア１５９は、実行部１４２、レジスタファイルセット１４５、およびデコーダ１４４を含む。処理コア１５９は、さらに、本発明の実施形態の理解には不要な回路（不図示）も含んでいる。実行部１４２は、処理コア１５９が受信する命令を実行するのに利用される。通常のプロセッサ命令を実行することに加えて、実行部１４２は、パック命令セット１４３の命令を実行して、パックデータフォーマットに演算を行うことができる。パック命令セット１４３は、本発明の実施形態を実行する命令を含み、さらには他のパック命令を含むこともできる。実行部１４２は、内部バスによりレジスタファイル１４５に連結される。レジスタファイル１４５は、データを含む情報を格納する処理コア１５９上の格納領域を表す。前述したように、パックデータを格納するために利用する格納領域は必須ではない。実行部１４２はデコーダ１４４に連結される。デコーダ１４４は、処理コア１５９が受信した命令を、制御信号および／またはマイクロコードエントリポイントにデコードするために利用される。これらの制御信号および／またはマイクロコードエントリポイントに呼応して、実行部１４２は適切な処理を行う。一実施形態では、デコーダは命令のオペコードを解釈するために使用されており、その命令は、命令内において示された対応するデータに対してどんな処理がなされるべきか示している。
【００３７】
処理コア１５９は、様々な他のシステムデバイスと通信するバス１４１に連結されており、これには、これらに限定はされないが、ＳＤＲＡＭコントロール１４６、ＳＲＡＭコントロール１４７、バーストフラッシュメモリインタフェース１４８、ＰＣＭＣＩＡ（ｐｅｒｓｏｎａｌ ｃｏｍｐｕｔｅｒ ｍｅｍｏｒｙ ｃａｒｄ ｉｎｔｅｒｎａｔｉｏｎａｌ ａｓｓｏｃｉａｔｉｏｎ）／コンパクトフラッシュ（登録商標）（ＣＦ）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、直接メモリアクセス（ＤＭＡ）コントローラ１５１、代用バスマスターインタフェース１５２が含まれる。一実施形態では、データ処理システム１４０はさらに、Ｉ／Ｏバス１５３経由で様々なＩ／Ｏデバイスと通信するＩ／Ｏブリッジ１５４を含んでよい。このＩ／Ｏデバイスは、これらに限定はされないが、ＵＡＲＴ（ｕｎｉｖｅｒｓａｌ ａｓｙｎｃｈｒｏｎｏｕｓ ｒｅｃｅｉｖｅｒ／ｔｒａｎｓｍｉｔｔｅｒ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Bluetooth（登録商標）無線ＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８をさらに含んでよい。
【００３８】
データ処理システム１４０の一実施形態は、モバイル、ネットワークおよび／または無線通信を提供し、文字列比較演算を含むＳＩＭＤ演算を実行する機能を有する処理コア１５９を提供する。処理コア１５９は、様々な音声、ビデオ、画像および通信アルゴリズム（例えば、ウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれらのそれぞれの逆変換などの離散変換、色空間変換等の圧縮／伸張技術、ビデオ符号化動き推定またはビデオ復号動き補償、およびパルス符号変調（ＰＣＭ）等の変復調（ＭＯＤＥＭ）機能）でプログラミングされてよい。
【００３９】
図１Ｃは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行可能なデータ処理システムのまた別の実施形態を示す。別の実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入出力システム１６８を含んでよい。入出力システム１６８は、必須ではないが、無線インタフェース１６９に連結されてもよい。ＳＩＭＤコプロセッサ１６１は、一実施形態による命令を含む動作を行うことができる。処理コア１７０は、１つ以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、処理コア１７０を含むデータ処理システム１６０の全てまたは一部の製造を促すのに適したものであってもよい。
【００４０】
一実施形態では、ＳＩＭＤコプロセッサ１６１は、実行部１６２とレジスタファイルセット１６４とを含む。メインプロセッサ１６６の一実施形態は、実行部１６２によって実行される一実施形態による命令を含む命令セット１６３の中の命令を認識するデコーダ１６５を含む。別の実施形態では、ＳＩＭＤコプロセッサ１６１はさらに、命令セット１６３内の命令をデコードするデコーダ１６５Ｂの少なくとも一部を含む。処理コア１７０はさらに、本発明の理解には不要な回路（不図示）も含んでいる。
【００４１】
動作において、メインプロセッサ１６６は、キャッシュメモリ１６７および入出力システム１６８との相互作用を含む一般的な種類のデータ処理を制御するデータ処理命令ストリームを実行する。データ処理命令ストリームにはＳＩＭＤコプロセッサ命令が埋め込まれている。メインプロセッサ１６６のデコーダ１６５は、これらＳＩＭＤコプロセッサ命令を、接続されているＳＩＭＤコプロセッサ１６１が実行すべき種類のものである認識する。従ってメインプロセッサ１６６は、コプロセッサバス１７１上にこれらのＳＩＭＤコプロセッサ命令（またはＳＩＭＤコプロセッサ命令を表す制御信号）を発行して、ここから任意の接続されているＳＩＭＤコプロセッサがこれら命令を受け取る。この場合、ＳＩＭＤコプロセッサ１６１は、これをデスティネーションとする全ての受信されたＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００４２】
データは無線インタフェース１６９経由で受信され、ＳＩＭＤコプロセッサ命令による処理に備えさせられる。一例としては、音声通信は、デジタル信号の形式で受け取られてよく、ＳＩＭＤコプロセッサ命令の処理を受けて、音声通信を表すデジタルオーディオサンプルが再生される。別の例では、圧縮された音声および／またはビデオがデジタルビットストリームの形式で受信されてよく、これがＳＩＭＤコプロセッサ命令により処理されることで、デジタルオーディオサンプルおよび／または動きビデオフレームが再生されてよい。処理コア１７０の一実施形態では、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、実行部１６２、レジスタファイルセット１６４、および一実施形態による命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む単一の処理コア１７０に統合される。
【００４３】
図２は、本発明の一実施形態による命令を実行する論理回路を含むプロセッサ２００のマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、単精度整数データタイプ、倍精度整数データタイプ、浮動小数点データタイプなどのデータタイプと同様に、バイト、ワード、ダブルワード、クワドワード等のサイズを有するデータエレメント上に動作するように実装してもよい。一実施形態では、正常のフロントエンド２０１は、実行する命令をフェッチしてきて、プロセッサパイプラインでの利用に備えさせるプロセッサ２００の一部である。フロントエンド２０１は、幾つかのユニットを含んでよい。一実施形態では、命令プリフェッチャ２２６が、メモリから命令をフェッチして、命令デコーダ２２８に供給して、命令デコーダ２２８がこれらをデコード又は解釈する。機械が実行できるマイクロ命令またはマイクロオペレーション（マイクロオプまたはｕオプと称されることもある）と称される１以上の操作に、デコーダは受け取った命令をデコードする。他の実施形態では、デコーダは命令を、オペコードと対応するデータと、一実施形態による操作を行うマイクロアーキテクチャによって使用される制御フィールドにパースする。一実施形態では、トレースキャッシュ２３０は、デコードされたｕオプをとり、これらを、ｕオプキュー２３４のプログラムが命ずるシーケンスまたはトレースに、実行用にアセンブルする。トレースキャッシュ２３０が複合マイクロ命令を発見すると、マイクロコードＲＯＭ２３２は、演算を完了させるのに必要なｕオプを提供する。
【００４４】
いくつかの命令が、単一のマイクロオプに変換され、その他の命令は、演算全体を完了させるのに幾つかのマイクロオプを必要とする。一実施形態では、４つを超える数のマイクロオプが命令の完了に必要な場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスして、その命令を実行する。一実施形態では、命令を少数のマイクロオプにデコードして、命令デコーダ２２８での処理に備えさせる。別の実施形態では、処理を実行するのに幾つかの数のマイクロオプが必要な場合に、命令をマイクロコードＲＯＭ２３２内に格納することができる。トレースキャッシュ２３０は、エントリポイントのプログラマブル論理アレイ（ＰＬＡ）を参照して、マイクロコードＲＯＭ２３２から一実施形態による１つ以上の命令を完了させるマイクロコードシーケンスを読み出す正確なマイクロ命令ポインタを決定する。マイクロコードＲＯＭ２３２が命令のマイクロオプの順序付けを終了すると、マシンのフロントエンド２０１が、トレースキャッシュ２３０からのマイクロオプのフェッチを再開する。
【００４５】
アウトオブオーダー実行エンジン２０３では、命令を実行に備えさせる。アウトオブオーダー実行論理は、命令のフローの平滑化および順序のつけ直しを行い、パイプラインを流れるときの性能を最適化して、実行に備えさせるためにいくつかのバッファを持つ。アロケータ論理は、各ｕオプが実行する際に必要とするマシンバッファおよびリソースを割り当てる。レジスタのリネーム論理は、論理レジスタをレジスタファイルのエントリへとリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ２０２、遅い／汎用の浮動少数点スケジューラ２０４、および簡易浮動少数点スケジューラ２０６の前に、各ｕオプのエントリを２つのｕオプキューのどちらかに対して、１つをメモリ処理に、１つを非メモリ処理に、という具合に割り当てる。ｕオプスケジューラ２０２、２０４、２０６は、従属入力レジスタオペランドソースが準備できているか、および、ｕオプが処理を完了するために必要な実行リソースの利用可能性に基づいて、ｕオプが準備できているかを判断する。本実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半分にスケジュールを行うが、他のスケジューラは、各メインプロセッサのクロックサイクルごとに一度しかスケジュールを行うことができない。スケジューラは、実行するｕオプをスケジュールするべく発送ポート間を調整する。
【００４６】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６、および、実行部２１２、２１４、２１６、２１８、２２０、２２２、２２４の間に存在している（実行ブロック２１１）。整数および浮動少数点演算のためにそれぞれ別個のレジスタファイル２０８、２１０が存在している。本実施形態の各レジスタファイル２０８、２１０は、さらに、今完成したばかりで、まだレジスタファイルに書き込まれていない結果を、新たな依存ｕオプにバイパスまたは転送することのできるバイパスネットワークを含む。整数レジスタファイル２０８および浮動少数点レジスタファイル２１０は、さらに互いにデータを通信する機能を有する。一実施形態では、整数レジスタファイル２０８は、２つの別個のレジスタファイル（一方のレジスタファイルが、下位３２ビットのデータ用であり、他方のレジスタファイルが、上位３２ビットのデータ用である）に分割される。浮動少数点命令は通常６４ビット幅から１２８ビット幅であるので、一実施形態の浮動少数点レジスタファイル２１０は、１２８ビット幅のエントリを有する。
【００４７】
実行ブロック２１１は、命令が実際に実行される実行部２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行する必要のある整数および浮動少数点データオペランドの値を格納するレジスタファイル２０８、２１０を含む。本実施形態のプロセッサ２００は、幾つかの実行ユニット（アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、遅いＡＬＵ２２０、浮動少数点ＡＬＵ２２２、浮動少数点移動ユニット２２４）からなる。本実施形態では、浮動少数点実行ブロック２２２、２２４は、浮動少数点ＭＭＸ、ＳＩＭＤ、およびＳＳＥ演算を実行する。本実施形態の浮動少数点ＡＬＵ２２２は、マイクロオプの除算、平方根、および余りを求める、６４ビット×６４ビットの浮動少数点除算器を含む。本発明の実施形態では、浮動少数点の値に関する任意の命令は、浮動少数点ハードウェアで行われる。本実施形態において、ＡＬＵ演算は、高速ＡＬＵ実行部２１６、２１８に送られる。本実施形態の高速ＡＬＵ２１６、２１８は、二分の一のクロックサイクルという実効レイテンシーで高速処理を行うことができる。一実施形態では、殆どの複雑な整数演算が遅いＡＬＵ２２０に送られるが、これは、遅いＡＬＵ２２０が、乗算、シフト、フラグ論理、および分岐処理といったレイテンシーの長いタイプの演算用の整数実行ハードウェアを含むからである。メモリロード／格納演算は、ＡＧＵ２１２、２１４で行われる。本実施形態では、整数ＡＬＵ２１６、２１８、２２０を、６４ビットのデータオペランドに対する整数演算を例にとって記載する。しかし別の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等の様々なデータビットをサポートするために実装することもできる。同様に、浮動少数点部２２２、２２４を、様々な幅のビットを有する一定の範囲のオペランドをサポートするために実装することもできる。一実施形態では、浮動少数点部２２２、２２４は、ＳＩＭＤおよびマルチメディア命令と協働して、１２８ビット幅のパックデータオペランドに演算を行うことができる。
【００４８】
一実施形態において、親ロードが実行を終了する前に、ｕオプスケジューラ２０２、２０４、２０６は依存演算をディスパッチする。ｕオプが推論的にスケジューリングがなされ、プロセッサ２００において実行されるため、プロセッサ２００も同様にメモリミスを処理する論理を含む。データキャッシュにおいてデータロードのミスが発生した場合は、スケジューラに対して一時的に不正確なデータを残す依存演算がパイプラインに存在することがある。再生メカニズムは、不正確なデータを使用した命令を追跡して再実行する。依存演算のみが再生を必要としており、独立演算は完了できる。プロセッサの一実施形態のスケジューラおよび再生メカニズムは、さらに、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令をキャッチするように設計されている。
【００４９】
「レジスタ」という用語は、ここでは、オペランドを特定する命令の一部として利用されるオンボードのプロセッサ格納位置を示すために利用される。つまり、ここで利用されるレジスタは、プロセッサ外から見ることができるもののことである（例えばプログラマから見えるもののことである）。しかし、一実施形態のレジスタの意味は、特定の種類の回路に限定されない。一実施形態におけるレジスタは、データの格納および提供が可能であり、且つ、ここで記載する機能を行うことができる、ということのみを要件としている。ここで記載するレジスタは、任意の数の様々な技術を利用してプロセッサ内の回路により実装可能である（例えば、専用物理レジスタ、レジスタリネーミング機能を利用して動的に割り当てられた物理レジスタ、専用レジスタと動的に割り当てられた物理レジスタの組み合わせ等）。一実施形態では、整数レジスタは３２ビットの整数データを格納する。一実施形態のレジスタファイルはさらに、８個のマルチメディアＳＩＭＤレジスタを、パックデータ用に含む。以下の説明では、レジスタは、カリフォルニア州サンタクララのＩｎｔｅｌ Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＭＭＸ（商標）技術で可能となるマイクロプロセッサ内の６４ビット幅のＭＭＸ（商標）レジスタ（「ｍｍ」レジスタと称される場合もある）等の、パックデータを保持するよう設計されるデータレジスタとして理解される。これらＭＭＸレジスタは、整数および浮動少数点の形態で利用することができ、ＳＩＭＤおよびＳＳＥ命令に付随するパックデータエレメントで処理することができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはこれらを超える（一般的に「ＳＳＥｘ」と称される）技術に関する１２８ビット幅のＸＭＭレジスタも、これらパックデータオペランドを保持するために利用することができる。本実施形態では、パックデータおよび整数データを格納する際に、レジスタは、２つのデータタイプを区別する必要がない。一実施形態では、整数及び浮動小数点は同じレジスタファイルに含まれていてもよいし、違うレジスタファイルに含まれていてもよい。さらに、一実施形態では、浮動小数点及び整数データが違うレジスタに格納されていてもよいし、同じレジスタに格納されていてもよい。
【００５０】
以下の図の例では、複数のデータオペランドが記載されている。図３Ａは、本発明の一実施形態におけるマルチメディアレジスタにおける様々なタイプのパックデータの表現を示す。図３Ａは、１２８ビット幅のオペランドについて、パックバイト３１０、パックワード３２０、および、パックダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックバイトのフォーマット３１０は、１２８ビットの長さを有し、１６個のパックバイトのデータエレメントを含む。１バイトは、８ビットのデータとして定義されている。各バイトデータエレメントの情報は、ビット７からビット０までをバイト０として、ビット１５からビット８までをバイト１として、ビット２３からビット１６までをバイト２として、最後にビット１２０からビット１２７までをバイト１５として、といった具合に格納される。このようにして全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。また、１６個のデータエレメントにアクセスするとき、１つの処理を１６個のデータエレメントに対して並列に実行することもできる。
【００５１】
一般的に、１データエレメントは、同じ長さの他のデータエレメントとともに単一のレジスタまたはメモリ位置に格納されている個々のデータのことである。ＳＳＥｘ技術に関するパックデータシーケンスでは、ＸＭＭレジスタに格納されているデータエレメント数は、１２８ビットを個々のデータエレメントのビット長で除算した値である。同様に、ＭＭＸおよびＳＳＥ技術に関するパックデータシーケンスでは、ＭＭＸレジスタに格納されているデータエレメントの数は、６４ビットを個々のデータエレメントのビット長で除算した値である。図３Ａに示されているデータのタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅であっても、２５６ビット幅であっても、５１２ビット幅であっても、他のサイズのオペランドであっても処理することができる。この例のパックワードフォーマット３２０は１２８ビット長であり、８つのパックワードデータエレメントを含む。各パックワードは、１６ビットの情報を含む。図３Ａのパックダブルワードフォーマット３３０は、１２８ビット長であり、４つのパックダブルワードデータエレメントを含む。各パックダブルワードデータエレメントは、３２ビットの情報を含む。パッククワドワードは１２８ビット長であり、２つのパッククワドワードのデータエレメントを含む。
【００５２】
図３Ｂは、別のレジスタ内のデータ格納フォーマットを示す。各パックデータは、１を超える数の独立データエレメントを含んでよい。パックハーフ３４１、パックシングル３４２、およびパックダブル３４３という、３つのパックデータフォーマットが記載されている。パックハーフ３４１、パックシングル３４２、およびパックダブル３４３の一実施形態は、固定少数点データエレメントを含む。別の実施形態では、パックハーフ３４１、パックシングル３４２、およびパックダブル３４３の１以上が、浮動少数点データエレメントを含む。パックハーフ３４１の別の実施形態は、１６ビットのデータエレメントを８つ含む１２８ビット長である。パックシングル３４２の一実施形態は、１２８ビット長であり、３２ビットのデータエレメントを４つ含む。パックダブル３４３の一実施形態は、１２８ビット長であり、６４ビットのデータエレメントを２つ含む。これらパックデータフォーマットは、さらに、他のレジスタ長（例えば９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、あるいは５１２ビット以上のビット）に拡張することもできる。
【００５３】
図３Ｃは、本発明の一実施形態におけるマルチメディアレジスタの、様々な符号付き、および、符号なしのタイプのパックデータ表現を示す。符号なしパックバイト表現３４４は、ＳＩＭＤレジスタに符号なしパックバイトが格納されていることを示している。各バイトデータエレメントの情報は、ビット７からビット０までをバイト０として、ビット１５からビット８までをバイト１として、ビット２３からビット１６までをバイト２として、最後に、ビット１２０からビット１２７までをバイト１５として、といった具合に格納される。このようにすることで、全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。さらにこの構成では、１６個のデータエレメントにアクセスするとき、１つの処理を１６個のデータエレメントに対して並列に実行することもできる。符号付きパックデータ表現３４５は、符号付パックバイトの格納状態を示している。各バイトデータエレメントの８つ目のビットは、符号インジケータである。符号なしパックワード表現３４６は、ワード７からワード０までがどのようにＳＩＭＤレジスタに格納されているかを示している。符号付きパックワード表現３４７は、符号なしパックワードのレジスタ内の表現３４６に類似している。各ワードデータエレメントの１６個目のビットは、符号インジケータである。符号なしパックダブルワード表現３４８は、ダブルワードデータエレメントがどのように格納されているかを示している。符号付きパックダブルワード表現３４９は、符号なしパックダブルワードのレジスタ内の表現３４８に類似している。必要な符号ビットは、各ダブルワードデータエレメントの３２個目のビットである。
【００５４】
図３Ｄは、演算符号（オペコード）フォーマット３６０の一実施形態を示しており、３２以上のビットを有し、レジスタ／メモリオペランドアドレスモードが「Ｉｎｔｅｌ（登録商標）６４ ａｎｄ ＩＡ−３２ Ｉｎｔｅｌ Ａｒｃｈｉｔｅｃｔｕｒｅ Ｓｏｆｔｗａｒｅ Ｄｅｖｅｌｏｐｅｒ'ｓ Ｍａｎｕａｌ Ｃｏｍｂｉｎｅｄ Ｖｏｌｕｍｅｓ ２Ａ ａｎｄ ２Ｂ：Ｉｎｓｔｒｕｃｔｉｏｎ Ｓｅｔ Ｒｅｆｅｒｅｎｃｅ Ａ−Ｚ」に記載されているオペコードフォーマットの種類に対応しており、この文献は、カリフォルニア州のサンタクララのＩｎｔｅｌ Ｃｏｒｐｏｒａｔｉｏｎが発行しており、ｗｗｗ．ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能である。一実施形態では、命令は、フィールド３６１および３６２の１以上で符号化されてよい。各命令について、２つまでのオペランド位置（２つのソースオペランド識別子３６４および３６５までを含む）を特定する。一実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と等しいが、他の実施形態では異なっていてもよい。一実施形態では、ソースオペランド識別子３６４および３６５が特定するソースオペランドのいずれかを、命令の結果で上書きし、他の実施形態では、識別子３６４がソースレジスタエレメントに対応しており、識別子３６５がデスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子３６４および３６５を利用して、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを特定する。
【００５５】
図３Ｅは、４０以上のビットを有する別の演算符号（オペコード）フォーマット３７０を示す。オペコードフォーマット３７０は、オペコードフォーマット３６０に対応しており、オプションのプレフィックスバイト３７８を含む。一実施形態による命令は、フィールド３７８、３７１、および３７２の１以上で符号化されてよい。ソースオペランド識別子３７４および３７５により、および、プレフィックスバイト３７８により、各命令についてオペランド位置を２つまで特定することができる。一実施形態では、プレフィックスバイト３７８を利用して、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを特定する。一実施形態では、デスティネーションオペランド識別子３７６はソースオペランド識別子３７４と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と等しいが、他の実施形態では異なっていてもよい。一実施形態では、命令はオペランド識別子３７４および３７５が特定するオペランドの１つ以上に対して動作し、オペランド識別子３７４および３７５が特定する１つ以上のオペランドを、命令の結果で上書きするが、他の実施形態では、識別子３７４および３７５が特定するオペランドは、別のレジスタの別のデータエレメントに書き込まれる。オペコードフォーマット３６０および３７０は、レジスタからレジスタへ、メモリからレジスタへ、メモリによりレジスタへ、レジスタによりレジスタへ、即値よりレジスタへ、レジスタから、ＭＯＤフィールド３６３および３７３により部分的に、およびオプションとしてスケールインデックスベースおよび変位バイトにより特定されるメモリアドレスへ、といった書き込みを許可する。
【００５６】
次に図３Ｆを参照すると、一部の別の実施形態では、６４ビット（又は１２８ビット、２５６ビット、又は５１２ビット以上）の単一命令多重データ（ＳＩＭＤ）算術演算を、コプロセッサデータ処理（ＣＤＰ）命令により行ってよい。演算符号（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有するこのようなＣＤＰ命令を示す。代替の実施形態において、この種類のＣＤＰ命令操作は、フィールド３８３、３８４、３８７、および３８８の１つ以上により符号化されてよい。各命令について、２つまでのソースオペランド識別子３８５および３９０、並びに、１つのデスティネーションオペランド識別子３８６を含む、３つまでのオペランド位置を特定する。コプロセッサの一実施形態は、８、１６、３２、および６４ビットの値に演算を行うことができる。一実施形態では、命令を、整数データエレメントに行う。いくつかの実施形態では、命令は、条件フィールド３８１を利用して条件付きで実行されてよい。いくつかの実施形態では、ソースデータサイズはフィールド３８３により符号化されてよい。いくつかの実施形態では、ゼロ（Ｚ）、負（Ｎ）、繰上げ（ｃａｒｒｙ）（Ｃ）、およびオーバフロー（Ｖ）検知をＳＩＭＤフィールドに対して行う。一部の命令では、飽和のタイプをフィールド３８４で符号化することもできる。
【００５７】
次に図３Ｇを参照すると、別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する他の代替の演算符号（オペコード）フォーマット３９７を示し、Ｉｎｔｅｌ（登録商標）Ａｄｖａｎｃｅｄ Ｖｅｃｔｏｒ Ｅｘｔｅｎｓｉｏｎｓ Ｐｒｏｇｒａｍｍｉｎｇ Ｒｅｆｅｒｅｎｃｅ」に記載されているオペコードフォーマットの種類に対応しており、この文献は、カリフォルニア州のサンタクララのＩｎｔｅｌ Ｃｏｒｐｏｒａｔｉｏｎが発行しており、ｗｗｗ．ｉｎｔｅｌ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｃｅｓｓｏｒ／ｍａｎｕａｌｓ／から入手可能である。
【００５８】
元のｘ８６命令セットは１バイトのオペコードに対して設けられ、追加のバイトにはアドレスシラブルおよび即値オペランドの様々なフォーマットが含まれ、その存在は最初の「オペコード」バイトからわかる。さらに、オペコードに対する修飾子として確保された特定のバイト値があった（これは命令の前に配置される必要があったため、「接頭辞」と呼ばれる）。２５６オペコードバイトの元のパレット（それらの専用の接頭辞値を含む）を使い果たすと、単一のバイトは２５６オペコードの新規のセットに対するエスケープ専用となった。ベクトル命令（例えばＳＩＭＤ）が追加されると、より多くのオペコードが必要となり、接頭辞の使用によって拡張された場合でも、「２バイト」のオペコードマップは不十分となった。そのため、２バイトに任意の接頭辞を識別子として追加したものを使用する新規命令が追加のマップに追加された。
【００５９】
さらに、６４ビットモードの追加のレジスタを促進するために、接頭辞とオペコード（とオペコードを決定するために必要な任意のエスケープバイト）の間に追加の接頭辞（「ＲＥＸと呼ぶ）を使用してもよい。一実施形態において、ＲＥＸは６４ビットモードの追加のレジスタの使用を示す４「ペイロード」ビットを有してもよい。他の実施形態において、４ビットよりも少なくても多くてもよい。少なくとも１つ命令セットの一般的なフォーマット（フォーマット３６０および／またはフォーマット３７０に対応）を以下に汎用的に示す。
[prefixes] [rex] escape [escape2] opcode modrm（等）
【００６０】
オペコードフォーマット３９７はオペコードフォーマット３７０と同一であり、他の共通で使用されたレガシー命令接頭辞バイトおよびエスケープコードの大部分を置き換えるための任意のＶＥＸ接頭辞バイト３９１（一実施形態において１６進法のＣ４で始まる）を含む。例えば、以下は２つのフィールドを使用して命令をエンコードする実施形態を示す。これは、第２のエスケープ符号が元の命令中に存在する場合、またはＲＥＸフィールド（例えばＸＢおよびＷフィールド）内の余分なビットの使用が必要となった場合に使用されてもよい。以下に示す実施形態において、レガシーエスケープは新たなエスケープ値によって表わされ、レガシー接頭辞は「ペイロード」バイトの一部として全体的に圧縮され、レガシー接頭辞はリクレイムされ以後の拡張の際に利用可能となり、第２のエスケープ符号は「マップフィールド内において圧縮され、機能マップまたは特徴空間が利用可能となり、新たな特徴（例えば、増加したベクトルの長さおよび追加のソースレジスタ修飾子）が追加される。
【数１】
2014194753.tif 000003
【００６１】
一実施形態による命令は、フィールド３９１および３９２の１つ以上によってエンコードされてもよい。ソースオペランド識別子３７４および３７５との組み合わせ、および任意のｓｃａｌｅ−ｉｎｄｅｘ−ｂａｓｅ（ＳＩＢ）識別子３９３、任意の置換識別子３９４、および任意の即値バイト３９５との組み合わせにおいて、フィールド３９１によって命令毎に４つのオペランド位置まで識別可能である。一実施形態において、ＶＥＸ接頭辞バイト３９１は、３２ビットまたは６４ビットのソースおよびデスティネーションオペランドおよび／または１２８ビットまたは２５６ビットのＳＩＭＤレジスタまたはメモリオペランドを識別するために使用されてもよい。一実施形態において、オペコードフォーマット３９７によって提供される機能は、オペコードフォーマット３７０と重複する場合があるが、別の実施形態においてそれらは異なる。オペコードフォーマット３７０および３９７によって、レジスタからレジスタへ、メモリからレジスタへ、レジスタをメモリに、レジスタをレジスタに、レジスタを即値に、レジスタからＭＯＤフィールド３７３によって部分的に特定されたメモリアドレスへ、および任意の（ＳＩＢ）識別子３９３、任意の置換識別子３９４、および任意の即値バイト３９５にすることが可能となる。
【００６２】
次に図３Ｈを参照すると、別の実施形態による複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する他の代替の演算符号（オペコード）フォーマット３９８を示す。オペコードフォーマット３９８はオペコードフォーマット３７０および３９７と同一であり、他の共通で使用されたレガシー命令接頭辞バイトおよびエスケープコードの大部分を置き換えて追加の機能を提供するための任意のＥＶＥＸ接頭辞バイト３９６（一実施形態において１６進法の６２で始まる）を含む。一実施形態による命令は、フィールド３９６および３９２の１つ以上によってエンコードされてもよい。ソースオペランド識別子３７４および３７５との組み合わせ、および任意のｓｃａｌｅ−ｉｎｄｅｘ−ｂａｓｅ（ＳＩＢ）識別子３９３、任意の置換識別子３９４、および任意の即値バイト３９５との組み合わせにおいて、フィールド３９６によって命令毎に４つまでのオペランド位置とマスクとが識別可能である。一実施形態において、ＥＶＥＸ接頭辞バイト３９６は、３２ビットまたは６４ビットのソースおよびデスティネーションオペランドおよび／または１２８ビット、２５６ビットまたは５１２ビットのＳＩＭＤレジスタまたはメモリオペランドを識別するために使用されてもよい。一実施形態において、オペコードフォーマット３９８によって提供される機能はオペコードフォーマット３７０または３９７と重複する場合があるが、別の実施形態においてそれらは異なる。オペコードフォーマット３９８によって、レジスタからレジスタへ、メモリからレジスタへ、レジスタをメモリに、レジスタをレジスタに、レジスタを即値に、レジスタからマスクとともにＭＯＤフィールド３７３によって部分的に特定されたメモリアドレスへ、および任意の（ＳＩＢ）識別子３９３、任意の置換識別子３９４、および任意の即値バイト３９５にすることが可能となる。少なくとも１つ命令セットの一般的なフォーマット（フォーマット３６０および／またはフォーマット３７０に対応）を以下に汎用的に示す。
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
【００６３】
一実施形態において、ＥＶＥＸフォーマット３９８によってエンコードされた命令は、例えば、ユーザが構成可能なマスクレジスタ、または追加のオペランド、または１２８ビット、２５６ビットまたは５１２ビットのベクトルレジスタから選択されたもの、または数の増えた選択対象のレジスタなど、追加の新規特徴とともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能な追加の「ペイロード」ビットを有してもよい。
【００６４】
例えば、ｉｍｐｌｉｃｉｔ ｍａｓｋとともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するためにＶＥＸフォーマット３９７が使用可能な場合、ＥＶＥＸフォーマット３９８はｅｘｐｌｉｃｉｔユーザが構成可能なマスクとともに複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用されてもよい。さらに、ＶＥＸフォーマット３９７が１２８ビットまたは２５６ビットのベクトルレジスタ上の複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能な場合、ＥＶＥＸフォーマット３９８は、１２８ビット、２５６ビット、５１２ビット以上（または未満）のベクトルレジスタ上の複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために使用可能である。
【００６５】
複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための融合可能な命令例を以下の例によって示す。
【００６６】
【表１】
2014194753.tif 000004
【００６７】
上記の例にあるように、複数のテストソースに対して論理和テストおよび／または論理積テスト機能を提供する融合可能な命令および論理を使用することによって、例えば動的かつ弱く型付けされる場合のある、ＪａｖａＳｃｒｉｐｔ（登録商標）、ＪＳｃｒｉｐｔまたはＥＣＭＡスクリプトなどの１つ以上のインタプリタ形式のコンピュータプログラミング言語に対するサポートしオブジェクト指向の命令的かつ機能的なプログラミングスタイルをサポートしてもよいＪＩＴコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【００６８】
図４Ａは、本発明の少なくとも１つの実施形態によるインオーダーパイプラインおよびレジスタリネームステージ、アウトオブオーダー問題／実行パイプラインを図示するブロック図である。図４Ｂは、本発明の少なくとも１つの実施形態によるプロセッサに含まれるインオーダーアーキテクチャコアおよびレジスタリネーム論理、アウトオブオーダー問題／実行論理を図示するブロック図である。図４Ａの実線の四角は、インオーダーパイプラインを示し、点線の四角はレジスタリネーム、アウトオブオーダー問題／実行パイプラインを示す。同様に、図４Ｂの実線の四角は、インオーダーアーキテクチャ論理を示し、点線の四角はレジスタリネーム論理およびアウトオブオーダー問題／実行論理を示す。
【００６９】
図４Ａにおいて、プロセッサパイプライン４００は、フェッチステージ４０２、長デコードステージ４０４、デコードステージ４０６、割付けステージ４０８、リネームステージ４１０、スケジューリング（ディスパッチまたは発行として知られる）ステージ４１２、レジスタ読込／メモリ読込ステージ４１４、実行ステージ４１６、ライトバック／メモリライトステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含む。
【００７０】
図４Ｂにおいて、矢印は２つ以上のユニット間の接続を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。図４Ｂは、実行エンジン部４５０に接続されたフロントエンド部４３０を含むプロセッサコア４９０を示す。この場合、フロントエンド部４３０および実行エンジン部４５０はともにメモリ部４７０に接続される。
【００７１】
コア４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、または混合または代替のコアタイプでもよい。さらに別の選択肢として、コア４９０は例えばネットワークまたは通信コア、圧縮エンジン、グラフィックスコアなどの特殊用途のコアでもよい。
【００７２】
フロントエンド部４３０は、命令キャッシュ部４３４に接続された分岐プレディクション部４３２を含む。命令キャッシュ部４３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６に接続され、命令トランスレーションルックアサイドバッファ（ＴＬＢ）４３６は命令フェッチ部４３８に接続され、命令フェッチ部４３８はデコード部４４０に接続される。デコード部またはデコーダは命令をデコードし、出力として１つ以上のマイクロ操作、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を作成する。これらは元の命令からデコードされる、または元の命令を反映する、もしくは元の命令から導出される。デコーダは、様々な異なる機構を使用して実現されてもよい。適した機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコード読込専用メモリ（ＲＯＭ）等を含むが、それに限らない。命令キャッシュ部４３４は、さらに、メモリ部４７０のレベル２（Ｌ２）キャッシュ部４７６に接続される。デコード部４４０は、実行エンジン部４５０のリネーム／アロケータ部４５２に接続される。
【００７３】
実行エンジン部４５０は、リタイアメント部４５４に接続されたリネーム／アロケータ部４５２と、１つ以上のスケジューラ部４５６の組とを含む。スケジューラ部４５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表すものである。スケジューラ部４５６は、物理レジスタファイル部４５８に接続される。物理レジスタファイル部４５８のそれぞれは１つ以上の物理レジスタファイルを表し、それぞれは、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス（例えば次に実行される命令のアドレスである命令ポインタ）等の１つ以上の異なるデータタイプを格納する。物理レジスタファイル部４５８は、レジスタリネーミングおよびアウトオブオーダー実行が実行される様々な方法（例えば、リオーダーバッファおよびリタイアメントレジスタファイルを使用、フューチャファイル、ヒストリバッファ、およびリタイアメントレジスタファイルを使用、レジスタマップおよびレジスタのプールを使用等）を図示するためにリタイアメント部４５４と重なっている。一般に、アーキテクチャ上のレジスタはプロセッサの外部またはプログラマの観点から可視である。そのようなレジスタは、既知の特定の種類の回路に限定されない。本明細書で説明するようにデータ格納および提供が可能な限り、様々な異なる種類のレジスタが適する。適したレジスタの例は、専用物理レジスタ、レジスタリネーミングを使用する動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等を含むが、それに限定されない。リタイアメント部４５４および物理レジスタファイル部４５８は、実行クラスタ４６０に接続される。実行クラスタ４６０は、１つ以上の実行部４６２の組と、１つ以上のメモリアクセス部４６４の組を含む。実行部４６２は、様々な種類のデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は特定の機能または機能の組に専用の実行ユニットを多数含んでもよいが、他の実施形態は全機能をすべてが実行する１つの実行ユニットまたは複数の実行ユニットを含んでもよい。特定の実施形態は特定の種類のデータ／演算に対して個別のパイプラインを作成するため、スケジューラ部４５６、物理レジスタファイル部４５８、および実行クラスタ４６０は複数の可能性があるように示されている（例えば、それぞれがそれ自体のスケジューラ部、物理レジスタファイル部および／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセス部４６４を有する特定の実施形態が実現される）。なお、個別のパイプラインが使用される場合、そのようなパイプラインの１つ以上はアウトオブオーダー問題／実行でもよく、残りはインオーダーでもよい。
【００７４】
メモリアクセス部４６４の組は、メモリ部４７０に接続される。メモリ部４７０は、データキャッシュ部４７４に接続されるデータＴＬＢ部４７２を含み、データキャッシュ部４７４はレベル２（Ｌ２）キャッシュ部４７６に接続される。一実施例において、メモリアクセス部４６４はロード部、アドレス記憶部、データ記憶部を含んでもよく、それぞれはメモリ部４７０のデータＴＬＢ部４７２に接続される。Ｌ２キャッシュ部４７６は、１つ以上の他のレベルのキャッシュに接続され、最終的に主メモリに接続される。
【００７５】
例として、レジスタリネーミング、アウトオブオーダー問題／実行コアアーキテクチャの一例は、以下のパイプライン４００を実現してもよい。１）命令フェッチ４３８は、フェッチおよび長デコードステージ４０２および４０４を実行し、２）デコード部４４０はデコードステージ４０６を実行し、３）リネーム／アロケータ部４５２は割付けステージ４０８およびリネームステージ４１０を実行し、４）スケジューラ部４５６はスケジュールステージ４１２を実行し、５）物理レジスタファイル部４５８およびメモリ部４７０はレジスタリード／メモリリードステージ４１４を実行し、実行クラスタ４６０は実行ステージ４１６を実行し、６）メモリ部４７０および物理レジスタファイル部４５８はライトバック／メモリライトステージ４１８を実行し、７）様々な処理部が例外処理ステージ４２２に関与してもよく、８）リタイアメント部４５４および物理レジスタファイル部４５８はコミットステージ４２４を実行する。
【００７６】
コア４９０は、１つ以上の命令セットに対応してもよい（例えば、ｘ８６命令セット（新しいバージョンではいくつかの拡張版が追加された）、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州ＳｕｎｎｙｖａｌｅのＡＲＭ ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなど、オプション追加の拡張版がある）など）。
【００７７】
なお、コアはマルチスレッディング（演算またはスレッドの２つ以上の並列組の実行）をサポートしてもよく、時間切りマルチスレッディング、同時マルチスレッディング（単一の物理コアは、物理コアが同時マルチスレッディングを実行するスレッドのそれぞれに対して論理コアを設ける）、またはその組み合わせ（例えば、ＩｎｔｅｌＲ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術でも見られる、時間切りフェッチおよびデコード後に同時マルチスレッディングなど）を含む様々な方法で実行されてもよい。
【００７８】
なお、レジスタリネームはアウトオブオーダー実行のコンテキストで説明されているが、レジスタリネームはインオーダーアーキテクチャにおいて使用されてもよい。プロセッサの実施例は、さらに、個別の命令およびデータキャッシュ部４３４／４７４および共有Ｌ２キャッシュ部４７６を含むが、代替実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方に対して単一の内部キャッシュを有してもよい。いくつかの実施形態において、本システムは内部キャッシュと、コアおよび／またはプロセッサの外部のキャッシュとの組み合わせを含んでもよい。もしくは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【００７９】
図５は、本発明の実施形態による、単一コアプロセッサおよびマルチコアプロセッサ５００のブロック図で、メモリコントローラおよびグラフィックスが一体となっている。図５の実線の四角は単一コア５０２Ａを有するプロセッサ５００、システムエージェント５１０、１つ以上のバスコントローラ部５１６の組を示し、任意で追加され点線の四角は、複数のコア５０２Ａ〜Ｎを有する代替のプロセッサ５００、システムエージェント部５１０内の１つ以上の統合メモリコントローラ部５１４の組、および統合グラフィックス論理５０８を表わす。
【００８０】
メモリ階層は、コア内に１つ以上のレベルのキャッシュと、１つ以上の共有キャッシュ部５０６の組と、統合メモリコントローラ部５１４の組に接続された外部メモリ（不図示）とを含む。共有キャッシュ部５０６の組は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはその他のレベルのキャッシュなどの１つ以上の中間レベルキャッシュと、ラストレベルキャッシュ（ＬＬＣ）と、および／またはその組み合わせとを含んでもよい。一実施形態において、環状相互接続部５１２は、統合グラフィックス論理５０８と、共有キャッシュ部５０６の組と、システムエージェント部５１０と相互接続するが、代替の実施形態はそのような処理部の相互接続に対して任意の数の周知技術を使用してもよい。
【００８１】
いくつかの実施形態において、コア５０２Ａ〜Ｎの１つ以上は、マルチスレッディングを実行可能である。システムエージェント５１０は、コア５０２Ａ〜Ｎを調整して動作させるコンポーネントを含む。システムエージェント部５１０は、例えば出力調整装置（ＰＣＵ）および表示部を含んでもよい。ＰＣＵは、コア５０２Ａ〜Ｎおよび統合グラフィックス論理５０８の出力状態を調整するために必要な論理およびコンポーネントでもよく、またはそれらを含んでもよい。表示部は、１つ以上の外部接続ディスプレイを駆動するためのものである。
【００８２】
コア５０２Ａ〜Ｎはアーキテクチャおよび／または命令セットにおいて同種でも異種でもよい。例えば、コア５０２Ａ〜Ｎのいくつかはインオーダーでもよく、残りはアウトオブオーダーでもよい。別の例として、コア５０２Ａ〜Ｎの２つ以上は同じ命令セットを実行可能でもよく、残りは命令セットまたは異なる命令セットのサブセットのみを実行可能でもよい。
【００８３】
プロセッサは、カリフォルニア州サンタクララのインテル社から入手可能なＣｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２ ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）またはＳｔｒｏｎｇＡＲＭ（商標）プロセッサなどの汎用プロセッサでもよい。もしくは、ＡＲＭ Ｈｏｌｄｉｎｇｓ，Ｌｔｄ、 ＭＩＰＳなどの他社から入手可能なプロセッサでもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、埋込型プロセッサなどの特殊用途のプロセッサでもよい。プロセッサは、１つ以上のチップ上に実装されてもよい。プロセッサ５００は例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの任意の数の処理技術を使用して１つ以上の基板の一部でもよく、および／または１つ以上の基板上に実装されてもよい。
【００８４】
図６〜８は、プロセッサ５００を備えるのに適したシステム例である。図９はコア５０２の１つ以上を備えてもよいシステムオンチップ（ＳｏＣ）例である。ノート型ＰＣ、デスクトップＰＣ、ハンドヘルドＰＣ、携帯用情報端末（ＰＤＡ）、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、埋込型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックス装置、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、ハンドヘルド機器、その他の様々な電子装置に対する当業界において既知の他のシステム設計および構成も適している。一般に、本明細書で開示されているようなプロセッサおよび／または他の実行論理を取り入れることが可能な多種多様なシステムまたは電子装置が通常適している。
【００８５】
図６は、本発明の一実施形態によるシステム６００のブロック図である。システム６００は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）６２０と接続される１つ以上のプロセッサ６１０、６１５を含んでもよい。追加のプロセッサ６１５の任意の特性を図６に点線で示す。
【００８６】
各プロセッサ６１０、６１５は、プロセッサ５００のいずれかのバージョンでもよい。ただし、統合グラフィックス論理および統合メモリ制御部はプロセッサ６１０、６１５に存在することはない。図６は、ＧＭＣＨ６２０が、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）でもよいメモリ６４０に接続されることが可能であることを示す。ＤＲＡＭは、少なくとも１つの実施形態において、不揮発性キャッシュと関連付けられてもよい。
【００８７】
ＧＭＣＨ６２０は、チップセット、またはチップセットの一部でもよい。ＧＭＣＨ６２０はプロセッサ６１０、６１５と通信して、プロセッサ６１０、６１５およびメモリ６４０とのインタラクションを制御してもよい。また、ＧＭＣＨ６２０は、システム６００のプロセッサ６１０、６１５および他のエレメント間での高速バスインタフェースの役割を果たしてもよい。少なくとも一実施形態において、ＧＭＣＨ６２０は、フロントサイドバス（ＦＳＢ）６９５などのマルチドロップバスを介してプロセッサ６１０、６１５と通信を行う。
【００８８】
さらに、ＧＭＣＨ６２０はディスプレイ６４５（フラットパネルディスプレイなど）に接続される。ＧＭＣＨ６２０は、統合グラフィックスアクセラレータを含んでもよい。ＧＭＣＨ６２０は、さらに、入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に接続されてもよい。入出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０を使用して様々な周辺装置をシステム６００に接続してもよい。外部グラフィックス装置６６０を図６の実施形態に例示的に示す。外部グラフィックス装置６６０は、他の周辺装置６７０とともにＩＣＨ６５０に接続される外付けグラフィックス装置でもよい。
【００８９】
もしくは、追加のプロセッサまたは異なるプロセッサも同様にシステム６００に存在してもよい。例えば、追加のプロセッサ６１５は、プロセッサ６１０と同じ追加のプロセッサ、プロセッサ６１０と異種または非対称の追加のプロセッサ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）部など）、フィールドプログラマブルゲートアレイ、または他のいずれかのプロセッサを含んでもよい。アーキテクチャ、マイクロアーキテクチャ、熱特性、消費電力特性などを含む利点の尺度範囲において、物理リソース６１０、６１５間には大幅な違いがあってもよい。そのような違いは、プロセッサ６１０、６１５間において非対称および異種であることを事実上明らかする場合がある。少なくとも一実施形態において、様々なプロセッサ６１０、６１５は同一のダイパッケージに常駐してもよい。
【００９０】
図７は、本発明の一実施形態による第２のシステム７００のブロック図を示す。図７に示すように、マルチプロセッサシステム７００は二点間相互接続システムであり、二点間相互接続７５０を介して接続される第１のプロセッサ７７０および第２のプロセッサ７８０を含む。プロセッサ７７０および７８０のそれぞれは、プロセッサ６１０、６１５の１つ以上のとしてプロセッサ５００のいずれかのバージョンでもよい。
【００９１】
２つのプロセッサ７７０、７８０のみを示すが、本発明の範囲はそれに限定されないことを理解されたい。他の実施形態において、１つ以上の追加のプロセッサは所与のプロセッサ内に存在してもよい。
【００９２】
図示したプロセッサ７７０および７８０は、統合メモリコントローラ部７７２および７８２をそれぞれ含む。プロセッサ７７０は、さらに、二点間インタフェース７７６および７７８をバスコントローラ部の一部として含む。同様に、第２のプロセッサ７８０は二点間インタフェース７８６および７８８を含む。プロセッサ７７０、７８０は、二点間インタフェース回路７７８、７８８を使用して二点間インタフェース７５０を介して情報を交換してもよい。図７に示すように、ＩＭＣ７７２および７８２は各プロセッサをそれぞれのメモリ、すなわちメモリ７３２およびメモリ７３４に接続する。メモリ７３２およびメモリ７３４は、それぞれのプロセッサにローカルで取り付けられた主メモリの一部でもよい。
【００９３】
プロセッサ７７０、７８０は、二点間インタフェース回路７７６、７９４、７８６、７９８を使用して、個々の二点間インタフェース７５２、７５４を介してチップセット７９０と情報を交換してもよい。チップセット７９０は、さらに、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換してもよい。
【００９４】
共有キャッシュ（不図示）は、プロセッサが低電力モードにされると、プロセッサのローカルキャッシュ情報が共有キャッシュに格納されるようにするために、いずれかのプロセッサ内または二点間相互接続を介して各プロセッサと接続されながら両プロセッサの外部に含まれてもよい。
【００９５】
チップセット７９０は、インタフェース７９６を介して第１のバス７１６に対して接続されてもよい。一実施形態において、第１のバス７１６は周辺構成要素相互接続（ＰＣＩ）バスでもよく、またはＰＣＩ Ｅｘｐｒｅｓｓ ｂｕｓなどのバスまたは他の第三世代の入出力相互接続バスでもよい。ただし、本発明の範囲はそれに限定されない。
【００９６】
図７に示すように、様々な入出力装置７１４は、第１のバス７１６を第２のバス７２０に対して接続するバスブリッジ７１８とともに第１のバス７１６に対して接続されてもよい。一実施形態において、第２のバス７２０は、ｌｏｗ ｐｉｎ ｃｏｕｎｔ（ＬＰＣ）バスでもよい。一実施形態において、例えば、キーボードおよび／またはマウス７２２、通信装置７２７、さらに命令／コードおよびデータ７３０を含むことが可能なディスクドライブや他の大容量記憶装置などの記憶部７２８を含む様々な装置が、第２のバス７２０に対して接続されてもよい。さらに、音声入出力７２４が、第２のバス７２０に接続されてもよい。なお、その他のアーキテクチャも可能である。図７の二点間アーキテクチャの代わりに、例えば、システムがマルチドロップバスまたは他の同様のアーキテクチャを実現してもよい。
【００９７】
図８は、本発明の一実施形態による第３のシステム８００のブロック図を示す。図７および図８に示す同様のものには同様の参照番号を付し、図８の他の態様を曖昧にすることを避けるため、図７の特定の態様を図８にて省略した。
【００９８】
図８は、プロセッサ８７０、８８０がそれぞれ統合メモリおよび入出力制御論理（「ＣＬ」）８７２および８８２を含むことができることを図示する。少なくとも一実施形態において、ＣＬ８７２、８８２は、図５および７と関連して上述したような統合メモリコントローラ部を含んでもよい。さらに、ＣＬ８７２、８８２は、入出力制御論理も含んでもよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に対して接続されるだけでなく、入出力装置８１４も制御論理８７２、８８２に対して接続されることを示す。レガシー入出力装置８１５は、チップセット８９０に対して接続される。
【００９９】
図９は、本発明の一実施形態によるＳｏＣ９００のブロック図を示す。図５と同様の要素には同様の参照番号を付す。また、点線の四角は先端ＳｏＣに関する任意の特徴である。図９において、相互接続部９０２は、１つ以上のコア５０２Ａ〜Ｎおよび共有キャッシュ部５０６の組を含むアプリケーションプロセッサ９１０と、システムエージェント部５１０と、バスコントローラ部５１６と、統合メモリコントローラ部５１４と、統合グラフィックス論理５０８、静止画および／または動画カメラ機能を提供する画像処理プロセッサ９２４、ハードウェアオーディオアクセラレーションを提供する音声プロセッサ９２６、ビデオエンコード／デコードアクセラレーションを提供する映像プロセッサ９２８を含んでもよい１つ以上のメディアプロセッサ９２０の組と、スタティックランダムアクセスメモリ（ＳＲＡＭ）部９３０と、ダイレクトメモリアクセス（ＤＭＡ）部９３２と、１つ以上の外部ディスプレイに対して接続するための表示部９４０とに対して接続される。
【０１００】
図１０は、一実施形態による少なくとも１つ命令を実行する中央演算ユニット（ＣＰＵ）およびグラフィックス演算ユニット（ＧＰＵ）を含むプロセッサを図示する。一実施形態において少なくとも１つの実施形態による演算を実行する命令は、ＣＰＵによって実行されてもよい。別の実施形態において、そのような命令はＧＰＵによって実行されてもよい。さらに別の実施形態において、そのような命令は、ＧＰＵおよびＣＰＵによって実行された演算の組み合わせによって実行されてもよい。例えば、一実施形態において、一実施形態による命令は、ＧＰＵ上で受信およびデコードされて、実行されてもよい。ただし、デコードされた命令内の１つ以上の演算はＣＰＵによって実行されてもよく、その結果は、該命令の最終的なリタイアメントのためにＧＰＵに対して返されてもよい。逆に、いくつかの実施形態において、ＣＰＵは主プロセッサとして動作し、ＧＰＵは補助プロセッサとして動作してもよい。
【０１０１】
いくつかの実施形態において、高並列スループットプロセッサの利点を利用する命令はＧＰＵによって実行されてもよく、深くパイプライン化されたアーキテクチャの利点を利用するプロセッサの処理能力の利点を利用する命令はＣＰＵによって実行されてもよい。例えば、グラフィックス、科学的アプリケーション、経済的アプリケーション、その他の並列ワークロードはＧＰＵの処理能力の利点を利用して適宜実行されてもよく、オペレーティングシステムカーネルまたはアプリケーションコードなどの逐次的アプリケーションはＣＰＵにより適している場合がある。
【０１０２】
図１０において、プロセッサ１０００は、ＣＰＵ１００５と、ＧＰＵ１０１０と、画像処理プロセッサ１０１５と、映像プロセッサ１０２０と、ＵＳＢコントローラ１０２５と、ＵＡＲＴコントローラ１０３０と、ＳＰＩ／ＳＤＩＯコントローラ１０３５と、表示装置１０４０と、高精細マルチメディアインタフェース（HDMI（登録商標））コントローラ１０４５と、ＭＩＰＩコントローラ１０５０と、フラッシュメモリコントローラ１０５５と、デュアルデータレート（ＤＤＲ）コントローラ１０６０と、セキュリティエンジン１０６５と、Ｉ２Ｓ／Ｉ２Ｃ（Ｉｎｔｅｇｒａｔｅｄ Ｉｎｔｅｒｃｈｉｐ Ｓｏｕｎｄ／Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ Ｃｉｒｃｕｉｔ）インタフェース１０７０とを含む。より多くのＣＰＵまたはＧＰＵおよびその他の周辺インタフェースコントローラを含む他の論理および回路が図１０のプロセッサに含まれてもよい。
【０１０３】
少なくとも１つの実施形態の１つ以上の態様は、機械可読媒体上に記憶されプロセッサ内の様々な論理を表現する代表データによって実現されてもよく、機械によって読み込まれると、本明細書に記載の技術を実行する論理を機械に作成させる。そのような「ＩＰコア」として知られる表現は有形の機械可読媒体（テープ）に記憶され、様々な顧客または製造設備に供給され、論理またはプロセッサを実際に作成する製造機械に対してロードされてもよい。例えば、ＡＲＭ Ｈｏｌｄｉｎｇｓ，Ｌｔｄ．によって開発されたプロセッサのＣｏｒｔｅｘ（商標）ファミリ、Ｃｈｉｎｅｓｅ Ａｃａｄｅｍｙ ｏｆ ＳｃｉｅｎｃｅｓのＩｎｓｔｉｔｕｔｅ ｏｆ Ｃｏｍｐｕｔｉｎｇ Ｔｅｃｈｎｏｌｏｇｙ （ＩＣＴ）によって開発されたＬｏｏｎｇｓｏｎ  ＩＰコアなどのＩＰコアは、権利化されてＴｅｘａｓ Ｉｎｓｔｒｕｍｅｎｔｓ、Ｑｕａｌｃｏｍｍ、Ａｐｐｌｅ、またはＳａｍｓｕｎｇなどの様々な顧客および実施権者に対して販売され、そのような顧客または実施権者によって製造されたプロセッサにおいて実現されてもよい。
【０１０４】
図１１は、一実施形態によるＩＰコアの開発を図示するブロック図である。ストレージ１１３０は、シミュレーションソフトウェア１１２０および／またはハードウェアまたはソフトウェアモデル１１１０を含む。一実施形態において、ＩＰコア設計を表わすデータを、メモリ１１４０（例えば、ハードディスク）、有線接続（例えばインターネット）１１５０または無線接続１１６０を介してストレージ１１３０に対して提供してもよい。シミュレーションツールおよびモデルによって作成されたＩＰコア情報は、製造設備に送られて、少なくとも１つの実施形態による少なくとも１つの命令を実行するように第三者によって製造されてもよい。
【０１０５】
いくつかの実施形態において１つ以上の命令は第１のタイプまたはアーキテクチャ（例えば、ｘ８６）に対応し、異なるタイプまたはアーキテクチャ（例えば、ＡＲＭ）のプロセッサ上で翻訳またはエミュレートされてもよい。したがって、一実施形態による命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵ、またはその他のプロセッサタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサタイプ上で実行されてもよい。
【０１０６】
図１２は、一実施形態による第１のタイプの命令を異なるタイプのプロセッサによってどのようにエミュレートされるかを示す。図１２において、プログラム１２０５は、一実施形態による命令と同一またはほぼ同一の機能を実行できるいくつかの命令を含む。ただし、プログラム１２０５の命令は、プロセッサ１２１５とは異なる、または互換性のないタイプおよび／またはフォーマットでもよい。すなわち、プログラム１２０５のタイプの命令は、プロセッサ１２１５によってネイティブで実行可能でなくてもよい。ただし、エミュレーション論理１２１０を使用して、プログラム１２０５の命令は、プロセッサ１２１５によってネイティブで実行可能な命令に翻訳される。一実施形態において、このエミュレーション論理はハードウェアで具現化される。別の実施形態において、このエミュレーション論理は、プログラム１２０５のタイプの命令をプロセッサ１２１５によってネイティブで実行可能なタイプに翻訳するソフトウェアを含む有形の機械可読媒体において具現化される。他の実施形態において、エミュレーション論理は、固定機能またはプログラミング可能なハードウェアと有形の機械可読媒体に記憶されたプログラムとの組み合わせである。一実施形態においてプロセッサはエミュレーション論理を含み、一方他の実施形態においてエミュレーション論理はプロセッサの外部に存在し、第三者によって提供される。一実施形態において、プロセッサは、プロセッサに含まれるまたはプロセッサと関連付けられたマイクロコードまたはファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体において具現化されたエミュレーション論理をロードできる。
【０１０７】
図１３は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を比較するブロック図である。図示した実施形態において、命令コンバータはソフトウェア命令コンバータである。ただし、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはその様々な組み合わせにおいて実現されてもよい。図１３は、上位言語１３０２のプログラムがｘ８６コンパイラ１３０４を使用してコンパイルされて少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサによってネイティブで実行可能なｘ８６バイナリコード１３０６を作成できることを示す。少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサとほぼ同じ結果を得られるように、（１）インテル社製ｘ８６命令セットコアの大部分の命令セットまたは（２）少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上での動作を目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換性のある状態を保って実行もしくは処理することによって少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサとほぼ同じ機能を実行できる任意のプロセッサを表わす。ｘ８６コンパイラ１３０４は、追加の連携処理を施して、もしくは施さずに、少なくとも１つのｘ８６命令セットコア１３１６を有するプロセッサ上で実行することが可能なｘ８６バイナリコード１３０６（例えばオブジェクトコードなど）を作成するように動作可能なコンパイラを表わす。同様に、図１３は、上位言語１３０２のプログラムが代替の命令セットコンパイラ１３０８を使用してコンパイルされて、少なくとも１つのｘ８６命令セットコア１３１４（例えば、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州ＳｕｎｎｙｖａｌｅのＡＲＭ ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを有するプロセッサ）を有さないプロセッサによってネイティブで実行可能な代替の命令セットバイナリコード１３１０を作成する。命令コンバータ１３１２は、ｘ８６バイナリコード１３０６をｘ８６命令セットコア１３１４を有さないプロセッサによってネイティブで実行可能なコードに変換するために使用される。この変換されたコードは代替の命令セットバイナリコード１３１０と同じには簡単にはならない。これをできる命令コンバータは作成が難しいためである。ただし、変換されたコードは通常の演算を実現し、代替の命令セットからの命令からなることが可能である。したがって、命令コンバータ１３１２はエミュレーション、シミュレーションまたはその他の方法によって、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせを表わし、ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたはその他の電子装置がｘ８６バイナリコード１３０６を実行できるようにする。
【０１０８】
図１４は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合するプロセッサマイクロアーキテクチャの一代替実施形態の要素を示す。プロセッサマイクロアーキテクチャ１４００の実施形態は、パイプライン４００の一部またはコア４９０の一部（例えばフロントエンド部４３０および実行エンジン部４５０）でもよく、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行する。装置１４００の実施形態はデコードステージ（例えばデコード４０６）またはデコーダ（例えばデコード部４４０）と接続可能で、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令、すなわち第１のソースデータオペランドと、第２のソースデータオペランドと、第３のソースデータオペランドと、演算タイプとを指定する命令をデコードしてもよい。デコードされた命令に応答して、１つ以上の実行ユニット（例えば実行部４６２および／または実行部４６４）は、第１および第２のソースデータオペランドからのデータ間に指定された演算タイプ（例えばビット単位の論理和またはビット単位の論理積）にしたがって第１の論理演算を実行し、第３のソースデータオペランドおよび第１の論理演算の結果からのデータ間に第２の論理演算（例えばテスト演算、または非破壊のビット単位の論理積）を実行して、条件フラグを設定する。
【０１０９】
例えば、プロセッサパイプライン１４００の実施形態は、フェッチステージ１４０２と、命令キューステージ１４０３と、長デコードステージ１４０４と、マクロ命令融合ステージ１４０５と、デコードステージ１４０６と、ｍｉｃｒｏ−ｏｐ記憶ステージ１４０７と、ｍｉｃｒｏ−ｏｐ融合ステージ１４１１と、スケジューリング（ディスパッチまたは問題として知られる）ステージ１４１２と、実行ステージ１４１６と、ライトバック／メモリライトステージ１４１８とを含む。プロセッサパイプライン１４００の実施形態は、さらに、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令の融合に関して、プロセッサパイプライン１４００の機能上の態様を理解するためには不要のその他のパイプラインステージ（不図示）を含んでもよい。
【０１１０】
プロセッサパイプライン１４００のいくつかの実施形態において、デコードステージ１４０６が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する第１の命令をデコードすると、それは第１の命令を、マクロ命令融合ステージ１４０５が命令キューステージ１４０３からの第１の命令と融合可能であると判別された分岐命令と融合し、プロセッサパイプライン１４００で実行するためにｍｉｃｒｏ−ｏｐ記憶ステージ１４０７に記憶される単一の融合されたマイクロ操作を作成する。
【０１１１】
プロセッサパイプライン１４００のいくつかの代替実施形態において、フェッチステージ１４０２は複数の命令をフェッチしてもよい。そのような命令には、第１のデスティネーションオペランドを特定する第１の論理命令（例えばビット単位の論理和、またはビット単位の論理積命令）と、第２のソースオペランドを特定する第２の命令（例えばビット単位の論理積、または非破壊テスト命令）と、分岐条件を特定する第３の命令（例えばｊｕｍｐ−ｚｅｒｏすなわちＪＺ、ｊｕｍｐ−ｎｏｔ−ｚｅｒｏすなわちＪＮＺ、またはその他のｊｕｍｐ−ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅすなわちＪＣＣ命令）とが含まれる。フェッチステージ１４０２は命令キューステージ１４０３に対して命令を格納する。この場合、長デコードステージ１４０４およびマクロ命令融合ステージ１４０５のプレデコード論理が命令境界を決定し、デコードステージ１４０６におけるデコードのために融合可能な命令を識別する。デコードステージ１４０６は、命令の一部を単一のマイクロ操作に対して融合してもよい。第１のデスティネーションオペランドおよび第２のソースオペランドが同じ（例えば単一のレジスタ）場合、かつ分岐条件が第２の命令に依存している場合（例えば第２の命令が、分岐条件として第３の命令によって使用された条件コードを修正する最終命令の場合）、その一部には第１および第２の命令の両方が含まれる。いくつかの実施形態において、その融合された一部は、第１、第２、第３の命令を含んでもよい（例えば第１のデスティネーションオペランドおよび第２のソースオペランドは同じ場合、第２および第３の命令は連続しており、第２の命令はテスト命令である）。いくつかの代替実施形態において、その融合された一部は、第１および第２の命令のみを含んでもよい。その場合、デコードステージ１４０６は、第１および第２の命令を、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一のマイクロ操作にデコードして、プロセッサパイプライン１４００における実行のためにｍｉｃｒｏ−ｏｐ記憶ステージ１４０７に記憶する。
【０１１２】
プロセッサパイプライン１４００のいくつかの代替実施形態において、ｍｉｃｒｏ−ｏｐ記憶ステージ１４０７は、さらに、ｍｉｃｒｏ−ｏｐ融合ステージ１４１１と接続されて、分岐条件が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一の第１のマイクロ操作に依存している場合、第３の命令のための第２のマイクロ操作を単一の第１のマイクロ操作と融合してもよい。そのような実施形態において、スケジューリングステージ１４１２は１つの融合されたマイクロ操作のみを受信して、実行ステージ１４１６へ発行し、その後ライトバック／メモリライトステージ１４１８へ発行してもよく、その１つの融合されたマイクロ操作は、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供し、結果に応じて分岐する。
【０１１３】
いくつかの頻繁に実行されるタイプテストの命令シーケンスのイディオムは、２つのソースデータオペランドを組み合わせる論理演算（例えばいずれかのソースのビットが１かのテスト時は論理和、いずれかのソースのビットがゼロかのテスト時は論理積）と、比較またはテスト命令（例えばマスクに対して上記論理演算の結果をＴＥＳＴ）と、条件付き分岐（例えばゼロフラグがＴＥＳＴによって設定されたか否かのよりゆっくりとした汎用コードシーケンスへ飛越しするＪＺ／ＪＮＺ）とを含んでもよい。プロセッサデコード論理は、比較命令またはテスト命令（例えばＴＥＳＴ）を条件付き分岐命令（例えばＪＺ）と組み合わせる際にマクロ融合を利用してもよい。
【０１１４】
いくつかの実施形態は、さらに、１つの論理命令（例えば論理和）を先行技術のテスト命令と融合することによって動的にテスト命令を作成してもよい。他の実施形態は、動的だがＪＩＴコンパイラを用いてテスト命令を作成する。いくつかの実施形態は、さらに、テスト命令を後続の条件付き分岐命令（例えばＪＺ）と融合して、どのように条件フラグが設定されているかに応じて分岐を実行してもよい。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは単一の命令になるように融合可能でもよく、その結果、実行時には１つのマイクロ操作シーケンスがプロセッサ内に存在する。
【０１１５】
複数のテストソースに対する論理和テストおよび／または論理積テスト機能を提供するための融合可能な命令および論理は、ＪＩＴコンパイラによって作成される頻繁に実行されるタイプテストの命令イディオムと関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【０１１６】
図１５Ａは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための融合命令構造１５０１の一実施形態に対するフロー図を示す。第１のデスティネーションオペランドであるＴＥＭＰを特定する第１の論理命令（例えばビット単位の論理和命令、またはビット単位の論理積命令）と、第２のソースオペランドであるＴＥＳＴを特定する第２の命令（例えば非破壊ＴＥＳＴ命令）が命令キューＩＱ１５１０に記憶される（例えばフェッチステージ１４０２による）。分岐条件を特定する第３の命令１５１４（例えばｊｕｍｐ−ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ（ＪＣＣ）命令）も同様にＩＱ１５１０（例えば命令キューステージ１４０３）に記憶される。（例えば長デコードステージ１４０４およびマクロ命令融合ステージ１４０５の）プレデコード論理は命令境界を決定し、（例えばデコードステージ１４０６における）デコードのために融合可能な命令１５１２を識別する。（例えばデコードステージ１４０６における）デコード時、命令（例えば命令１５１２）の一部は単一のマイクロ操作１５２２に融合されてもよい。第１のデスティネーションオペランドおよび前記第２のソースオペランドが同じ（例えば単一のレジスタＴＥＭＰ）場合、かつ分岐条件コード（ＣＣ）が第２の命令に依存している場合（例えば第２の命令が、分岐条件として第３の命令によって使用されたＣＣを修正する最終命令の場合）、その一部は第１および第２の命令１５１２の両方を含む。いくつかの代替実施形態において、融合された一部は第１および第２の命令１５１２のみを含んでもよい。その場合、プロセッサは第１および第２の命令１５１２を複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一のマイクロ操作１５２２にデコードして、ｍｉｃｒｏ−ｏｐストレージ１５２０に記憶する（例えばプロセッサパイプライン１４００における実行のためにｍｉｃｒｏ−ｏｐ記憶ステージ１４０７に記憶する）。いくつかの実施形態において、分岐条件が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する．単一の第１のマイクロ操作１５２２に依存している場合、ｍｉｃｒｏ−ｏｐストレージ１５２０は、さらに、（例えばｍｉｃｒｏ−ｏｐ融合ステージ１４１１において）前記第３の命令１５１４に対する第２のマイクロ操作１５２４を単一の第１のマイクロ操作１５２２と融合するためのｍｉｃｒｏ−ｏｐ融合論理に対して接続されてもよい。そのような一実施形態において、１つの融合されたマイクロ操作１５２６が複数のテストソースに対する論理和テストまたは論理積テスト機能を提供し結果的なＣＣに基づいて分岐する１つの融合されたマイクロ操作１５２６がｍｉｃｒｏ−ｏｐストレージ１５２０に再度記憶されてもよい（例えばプロセッサパイプライン１４００における実行のため）。いくつかの実施形態において、その融合された一部は、第１、第２、第３の命令を含んでもよい（例えば第１のデスティネーションオペランドおよび第２のソースオペランドは同じ場合、第２および第３の命令は連続しており、第２または中間命令はテスト命令である）。
【０１１７】
図１５Ｂは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供し結果的なＣＣに応じて分岐する融合命令構造１５０２の代替の実施形態のフロー図を示す。第１のデスティネーションオペランドであるＴＥＭＰを特定する第１の論理命令（例えばビット単位の論理和命令、またはビット単位の論理積命令）と、第２のソースオペランドであるＴＥＳＴを特定する第２の命令（例えば非破壊ＴＥＳＴ命令）と、分岐条件を特定する第３の命令（例えばｊｕｍｐ−ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ（ＪＣＣ）命令）とは、ＩＱ１５１０に記憶される（例えば命令キューステージ１４０３においてフェッチステージ１４０２による）。（例えば長デコードステージ１４０４およびマクロ命令融合ステージ１４０５の）プレデコード論理は命令境界を決定し、（例えばデコードステージ１４０６における）デコードのために融合可能な命令１５１６を識別する。（例えばデコードステージ１４０６における）デコード時、命令（例えば命令１５１６）の一部は単一のマイクロ操作１５２６に融合されてもよい。第１のデスティネーションオペランドおよび前記第２のソースオペランドが同じ（例えばＴＥＭＰ）で、第２の（例えばＴＥＳＴ）および第３の（例えばＪＣＣ）命令が連続しており、第２または中間命令が（例えばプロセッサパイプライン１４００における）実行の結果として分岐ＣＣを修正するＴＥＳＴなどの命令である場合、その一部は第１、第２、第３の命令１５１６を含む。
【０１１８】
いくつかの実施形態において、プロセッサ命令セットアーキテクチャ（ＩＳＡ）は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するために代替のタイプのマクロ命令であるＴＥＳＴ２を提供してもよい。そのような実施形態において、単一のマイクロ操作に融合可能と思われる命令の一部を識別するタスクは簡略化されてもよい。
【０１１９】
図１５Ｃは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供し結果的なＣＣに応じて分岐する融合命令構造１５０３の他の代替の実施形態のフロー図を示す。第１のソースデータオペランドと、第２のソースデータオペランドと、第３のソースデータオペランドと、演算タイプと（例えば論理和テストまたは論理積テスト命令）を特定する第１の命令ＴＥＳＴ２と、分岐条件を特定する第２の分岐命令（例えばｊｕｍｐ−ｃｏｎｄｉｔｉｏｎ−ｃｏｄｅ（ＪＣＣ）命令）とは、ＩＱ１５１１に記憶される（例えばフェッチステージ１４０２において命令キューステージ１４０３による）。デコードステージ（例えばデコードステージ１４０６）が第１の命令をデコードする場合、複数のテストソースに対する論理和テストまたは論理積テスト機能を提供する単一の融合されたマイクロ操作１５２６として実行するために第１の命令を分岐命令と融合し、結果的なＣＣに応じて分岐し、（例えばプロセッサパイプライン１４００における実行のためにｍｉｃｒｏ−ｏｐ記憶ステージ１４０７において）単一の融合されたマイクロ操作１５２６はｍｉｃｒｏ−ｏｐストレージ１５２０に記憶される。
【０１２０】
したがって、融合可能な命令および論理の実施形態は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供してもよい。いくつかの実施形態において、プロセッサデコードステージ１４０６は実行のために新規テスト命令（例えば論理和テストまたは論理積テスト）をデコードしてもよい。この場合の命令は第１、第２、第３のソースデータオペランドおよび演算タイプ（例えば論理和テストまたは論理積テスト）を特定する。そのデコードされたテスト命令に応じて、実行ユニット（例えば実行部４６２および／または実行部４６４）は、第１および第２のソースデータオペランドからのデータ間において特定された演算タイプに基づく論理演算（例えば論理和）を実行してもよく、さらに第３のソースデータオペランドと第１の論理演算の結果とからのデータ間において第２の論理演算（例えば論理積）を実行して条件フラグを設定してもよい。いくつかの代替の実施形態において、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供するための処理は専用のハードウェアによって実行されてもよい。いくつかの他の代替の実施形態において、そのような処理は、汎用機械または特殊用途の機械または何らかの組み合わせによって実行可能なソフトウェアまたはファームウェア演算コードによって実行されてもよい。
【０１２１】
図１６Ａは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理１６０１の一実施形態のフロー図を示す。上述したように、本明細書において開示される処理１６０１およびその他の方法は、汎用機械または特殊用途の機械または両者の組み合わせによって実行可能な専用のハードウェアまたはソフトウェアまたはファームウェア演算コードを含んでもよい処理ブロックによって実行される。
【０１２２】
処理１６０１の処理ブロック１６１０において、第１のデスティネーションオペランドを特定する第１の命令がフェッチされる。処理ブロック１６２０において、第２のソースオペランドを特定する第２の命令がフェッチされる。処理ブロック１６３０において、第１および第２のオペランドが同一であるかが決定される。同一でない場合、処理は処理ブロック１６１０に進む。同一の場合は処理ブロック１６４０に進み、第１および第２の命令は単一のｍｉｃｒｏ−ｏｐまたはマイクロ操作に融合される。処理ブロック１６５０において、第２の命令に依存する分岐条件を特定する第３の命令がフェッチされる。その後処理ブロック１６６０において、第３の命令も単一のｍｉｃｒｏ−ｏｐまたはマイクロ操作に融合される。
【０１２３】
図１６Ｂは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理１６０２の代替の実施形態のフロー図を示す。処理１６０２の処理ブロック１６１０において、第１のデスティネーションオペランドを特定する第１の命令がフェッチされる。処理ブロック１６２０において、第２のソースオペランドを特定する第２の命令がフェッチされる。処理ブロック１６５０において、第２の命令に依存する分岐条件を特定する第３の命令がフェッチされる。その後処理ブロック１６７０において、フェッチされた命令の一部が融合される。この場合の一部は、前記第１のデスティネーションオペランドおよび前記第２のソースオペランドが同一で、分岐条件が第２の命令に依存している場合、第１および第２の命令の両方を含む。
【０１２４】
図１６Ｃは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理１６０３の別の代替の実施形態のフロー図を示す。処理１６０３の処理ブロック１６４５において、２つのオペランドをテストする第１の命令がフェッチされる。この第１の命令は、第１のソースオペランド、第２のソースオペランド、第３のソースオペランド、および演算タイプを特定する。処理ブロック１６５５において、分岐条件フラグを特定する第２の命令がフェッチされる。この場合の分岐条件フラグは第１の命令に依存する。その後処理ブロック１６６５において、フェッチされた各命令の一部が融合される。この場合の一部は、例えば、分岐条件フラグが第１の命令に依存している場合、第１および第２の命令の両方を含む。
【０１２５】
図１６Ｄは、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を融合する処理１６０４の別の代替の実施形態のフロー図を示す。処理１６０４の処理ブロック１６４７において、第１の命令は実行のためにデコードされる。この場合の第１の命令は、第１のオペランドソースのデータと、第２のオペランドソースのデータと、第３のオペランドソースのデータと、演算タイプとを特定する。処理ブロック１６４９において、第１のｍｉｃｒｏ−ｏｐまたはマイクロ操作は第１の命令のために記憶される。処理ブロック１６５７において、第２の命令は実行のためにデコードされる。この場合の第２の命令は分岐条件を特定する。処理ブロック１６５９において、第２のｍｉｃｒｏ−ｏｐまたはマイクロ操作は第２の命令のために記憶される。処理ブロック１６６７において、分岐条件が第１の命令に依存する場合、第１および第２のｍｉｃｒｏ−ｏｐは単一のｍｉｃｒｏ−ｏｐに融合される。
【０１２６】
いくつかの実施形態は、動的だがＪＩＴコンパイラを用いて新規テスト命令（例えば論理和テストまたは論理積テスト命令）を作成してもよい。そのような実施形態は、さらに、テスト命令を後続の条件付き分岐命令（例えばＪＺ）と融合して、条件フラグがどのように設定されているかに応じて分岐を実行してもよい。したがって、頻繁に実行されるタイプテストの命令シーケンスのイディオムは、単一の命令になるように融合可能でもよく、その結果、実行時には１つのマイクロ操作シーケンスがプロセッサパイプライン内に存在する。
【０１２７】
図１７は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する命令を実行する処理１７０１の一実施形態のフロー図を示す。処理１７０１の処理ブロック１７１０において、第１の命令は実行のためにデコードされる。この場合の第１の命令は、第１のオペランドソースのデータと、第２のオペランドソースのデータと、第３のオペランドソースのデータと、演算タイプとを特定する。処理ブロック１７２０において、１つ以上の実行ユニットは、デコードされた第１の命令に応じて、第１および第２のソースオペランドからのデータ間に特定された演算タイプに基づく第１の論理演算を実行する。処理ブロック１７３０において、第３のソースオペランドと、条件フラグを条件付きで設定するための第１の論理演算の結果とからのデータ間に第２の演算が実行される。処理ブロック１７４０において、条件フラグが設定されると、プログラムフローが条件付きで分岐する。いくつかの実施形態において、処理ブロック１７２０〜１７４０は、複数のテストソースに対する論理和テストおよび論理積テスト機能を提供する単一の融合されたｍｉｃｒｏ−ｏｐまたはマイクロ操作に応じて実行され、結果的なＣＣに基づいて分岐してもよい。
【０１２８】
頻繁に実行されるタイプテストの命令シーケンスのイディオムは、２つのソースデータオペランド（例えばいずれかのソースのビットが１であるかをテストする際は論理和、いずれかのソースのビットが０であるかをテストする際は論理積）を組み合わせる論理演算と、比較またはテスト命令（例えばマスクに対して上記論理演算の結果をテストする命令）と、条件付き分岐（例えばゼロフラグがＴＥＳＴによって設定されたか否かによる、よりゆっくりとしたジェネリックなコードシーケンスへの飛越しを行うＪＺ／ＪＮＺ）とを含んでもよい。プロセッサのデコード論理は、比較命令またはテスト命令（例えばＴＥＳＴ）を条件付き分岐命令（例えばＪＺ）と組み合わせる際にマクロ融合を利用してもよい。
【０１２９】
複数のテストソースに対する論理和テストおよび／または論理積テスト機能を提供する融合可能な命令および論理によって、ＪＩＴコンパイラによって作成されるタイプテスト命令イディオムを頻繁に実行することに関連した処理能力制限問題、消費エネルギーへの懸念、その他の実行時のボトルネックがほぼなくなることがわかる。
【０１３０】
本明細書において開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア的に実現されてもよく、またはそのような実現手段の組み合わせによって実現されてもよい。本発明の実施形態は、少なくとも１つプロセッサと、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ素子を含む）と、少なくとも１つ入力装置と、少なくとも１つ出力装置とを含むプログラミング可能なシステム上において実行されるコンピュータプログラムまたはプログラムコードとして実現されてもよい。
【０１３１】
プログラムコードは、本明細書に記載した機能を実行するために入力命令に対して適用され、出力情報を作成する。出力情報は、既知の方法で１つ以上の出力装置に対して適用される。この適用の目的のため、処理システムは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途用集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１３２】
上記プログラムコードは、処理システムとの通信のために上位プロシージャ言語またはオブジェク指向プログラミング言語で実現されてもよい。また、プログラムコードは必要に応じてアセンブリ言語または機械言語で実現されてもよい。実際に、本明細書において記載された各機構は任意の特定のプログラミング言語に範囲が限定されるものではない。いずれの場合にせよ、言語はコンパイラ形式言語またはインタプリタ形式の言語でよい。
【０１３３】
少なくとも１つの実施形態の１つ以上の態様は、機械可読媒体に記憶されプロセッサ内の様々な論理を表現する代表命令によって実現されてもよく、機械によって読み込まれると、その機械に本明細書に記載の技術を実行する論理を作成させる。そのような「ＩＰコア」として知られる表現は、有形の機械可読媒体に記憶され、様々な顧客または製造設備に供給され、論理またはプロセッサを実際に作成する製造機械に対してロードされてもよい。
【０１３４】
そのような機械可読記憶媒体は、機械または装置によって製造または形成される物の非一時的な有形の構成を含んでもよく、これらに限定されないが、ハードディスクなどの記憶媒体や、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能なコンパクトディスク（ＣＤ−ＲＷ）、光磁気ディスクなどの他の種類のディスク、読取専用メモリ（ＲＯＭ）などの半導体装置、動的ランダムアクセスメモリ（ＤＲＡＭ）スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能読取専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、またはその他の電子命令の格納に適した種類の媒体を含んでもよい。
【０１３５】
したがって、本発明の実施形態は、さらに、本明細書に記載の構造、回路、装置、プロセッサおよび／またはシステム特性を定義するハードウェア記述言語（ＨＤＬ）などの命令をまたは設計データを含む非一時的な有形の機械可読媒体を含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０１３６】
いくつかの場合において、命令コンバータを使用して、ソース命令セットからターゲット命令セットへ命令を変換してもよい。例えば、命令コンバータは、命令をコアによって処理される１つ以上の他の命令に翻訳（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用）、モーフィング、エミュレート、もしくは変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはその組み合わせにおいて実現されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または部分的にプロセッサ上および部分的にプロセッサ外としてもよい。
【０１３７】
このように、少なくとも１つの実施形態による１つ以上の命令を実行する技術が開示された。特定の実施例が説明され添付図面に示されているが、これらの実施形態はあくまで例示を意図しており、広い範囲に及ぶ発明を制約する意図はなく、本発明が図示されたり説明されたりしている特定の構成および配置に限定されない点に留意されたい。本開示を読んだ当業者であれば、様々な他の変形例を想到する。当技術分野は成長著しく、将来の進歩を見通すことが難しいので、開示されている実施形態は、本開示の原理または添付請求項の範囲から逸脱しなければ、技術的進歩により、構成および詳細において容易に変更可能であることを理解されたい。
【図１Ａ】
2014194753.tif 000005
【図１Ｂ】
2014194753.tif 000006
【図１Ｃ】
2014194753.tif 000007
【図２】
2014194753.tif 000008
【図３Ａ】
2014194753.tif 000009
【図３Ｂ】
2014194753.tif 000010
【図３Ｃ】
2014194753.tif 000011
【図３Ｄ】
2014194753.tif 000012
【図３Ｅ】
2014194753.tif 000013
【図３Ｆ】
2014194753.tif 000014
【図３Ｇ】
2014194753.tif 000015
【図３Ｈ】
2014194753.tif 000016
【図４Ａ】
2014194753.tif 000017
【図４Ｂ】
2014194753.tif 000018
【図５】
2014194753.tif 000019
【図６】
2014194753.tif 000020
【図７】
2014194753.tif 000021
【図８】
2014194753.tif 000022
【図９】
2014194753.tif 000023
【図１０】
2014194753.tif 000024
【図１１】
2014194753.tif 000025
【図１２】
2014194753.tif 000026
【図１３】
2014194753.tif 000027
【図１４】
2014194753.tif 000028
【図１５Ａ】
2014194753.tif 000029
【図１５Ｂ】
2014194753.tif 000030
【図１５Ｃ】
2014194753.tif 000031
【図１６Ａ】
2014194753.tif 000032
【図１６Ｂ】
2014194753.tif 000033
【図１６Ｃ】
2014194753.tif 000034
【図１６Ｄ】
2014194753.tif 000035
【図１７】
2014194753.tif 000036
【外国語明細書】
2014194753000001.pdf