(57)【要約】オペレーション（ｏｐ）キャッシュを使用するためのシステム及び方法が開示される。システム及び方法は、以前にデコードされた命令をキャッシュするためのｏｐキャッシュを含む。ｏｐキャッシュは、スレッド間での命令の共有を可能にする複数の物理的にインデックスされ、タグ付けされた命令を含む。ｏｐキャッシュは、キャッシュライン内の複数の命令の供給を可能にする複数のウェイを介してチェイニングされる。ｏｐキャッシュは、容量を最大にするために、共有されるオペレーションストレージとイミディエイト／ディスプレイスメントストレージとの間に記憶される。【選択図】図３
2019537163.tif 000002
【特許請求の範囲】
【請求項１】
オペレーションキャッシュ（ＯＣ）を用いてキャッシュラインの最後又は実行された分岐まで命令フェッチを実行する方法であって、
複数のマイクロタグへの入力として使用される前記ＯＣの予測されたフェッチアドレスを受信することと、
受信した予測されたフェッチアドレスをデカップリングキューに書き込むことと、
書き込まれたフェッチアドレスが前記複数のマイクロタグのうち１つのマイクロタグにヒットした場合に、前記フェッチアドレスをｏｐキャッシュキューに書き込むことと、
前記フェッチアドレスに関連するタグを読み出すことと、を含む、
方法。
【請求項２】
前記ＯＣは、キャッシュライン内の複数の命令の供給を可能にする複数のウェイを介してチェイニングされる、
請求項１の方法。
【請求項３】
前記ＯＣは、オペレーションキャッシュと、イミディエイト／ディスプレイスメントキャッシュと、を含む単一の記憶装置に記憶されたデータを含む、
請求項１の方法。
【請求項４】
前記ＯＣは、個別のオペレーションキャッシュ及びイミディエイト／ディスプレイスメントキャッシュに記憶されたデータを含む、
請求項１の方法。
【請求項５】
前記ＯＣは、オペレーションデータ及びイミディエイト／ディスプレイスメントデータを含む単一の記憶装置に記憶されたデータを含む、
請求項１の方法。
【請求項６】
記憶することは、オペレーション容量と、イミディエイト／ディスプレイスメント容量とのトレードオフによって容量を最大にする、
請求項５の方法。
【請求項７】
記憶することは、オペレーション容量と、マイクロエントリポイント容量とのトレードオフによって容量を最大にする、
請求項５の方法。
【請求項８】
オペレーションキャッシュ（ＯＣ）フェッチを実行する方法であって、
タグを読み出すことと、
読み出したタグのフェッチアドレスを、タグアレイ内のタグと比較することと、
前記比較によって前記タグアレイにおいてヒットしなかった場合に、フェッチを命令キャッシュにリダイレクトすることと、
前記比較によって前記タグアレイにおいてヒットした場合に、前記タグアレイ内でヒットしたタグに関連するデータアレイを読み出すことであって、前記データアレイは、イミディエイト／ディスプレイスメントエントリ、オペレーションエントリ及びマイクロコードエントリを含む、ことと、
読み出したデータアレイをデコードすることと、
読み出したデータアレイからデコードされたイミディエイト／ディスプレイスメントエントリ、オペレーションエントリ及びマイクロコードエントリを出力することと、
前記イミディエイト／ディスプレイスメントエントリをイミディエイト／ディスプレイスメントキューにエンキューすることと、
前記オペレーションエントリをオペレーションキューにエンキューすることと、
前記マイクロコードエントリをエントリアドレスキューにエンキューすることと、を含む、
方法。
【請求項９】
前記ＯＣは、キャッシュライン内の複数の命令の供給を可能にする複数のウェイを介してチェイニングされる、
請求項８の方法。
【請求項１０】
前記ＯＣは、オペレーションキャッシュと、イミディエイト／ディスプレイスメントキャッシュと、を含む単一の記憶装置に記憶されたデータを含む、
請求項８の方法。
【請求項１１】
前記ＯＣは、個別のオペレーションキャッシュ及びイミディエイト／ディスプレイスメントキャッシュに記憶されたデータを含む、
請求項８の方法。
【請求項１２】
前記ＯＣは、オペレーションデータ及びイミディエイト／ディスプレイスメントデータを含む単一の記憶装置に記憶されたデータを含む、
請求項８の方法。
【請求項１３】
記憶することは、オペレーション容量と、イミディエイト／ディスプレイスメント容量とのトレードオフによって容量を最大にする、
請求項１２の方法。
【請求項１４】
記憶することは、オペレーション容量と、マイクロエントリポイント容量とのトレードオフによって容量を最大にする、
請求項１２の方法。
【請求項１５】
以前にデコードされた命令をキャッシュするオペレーションキャッシュ（ＯＣ）であって、
スレッド間での命令の共有を可能にする複数の物理的にインデックスされ、タグ付けされ、デコードされた命令を含む、
ＯＣ。
【請求項１６】
前記ＯＣは、キャッシュライン内の複数の命令の供給を可能にする複数のウェイを介してチェイニングされる、
請求項１５のＯＣ。
【請求項１７】
前記ＯＣは、個別のオペレーションキャッシュ及びイミディエイト／ディスプレイスメントキャッシュに記憶されたデータを含む、
請求項１５のＯＣ。
【請求項１８】
前記ＯＣは、オペレーションデータ及びイミディエイト／ディスプレイスメントデータを含む単一の記憶装置に記憶されたデータを含む、
請求項１５のＯＣ。
【請求項１９】
記憶することは、オペレーション容量と、イミディエイト／ディスプレイスメント容量とのトレードオフによって容量を最大にする、
請求項１８のＯＣ。
【請求項２０】
記憶することは、オペレーション容量と、マイクロエントリポイント容量とのトレードオフによって容量を最大にする、
請求項１８のＯＣ。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１２月９日出願の米国特許出願第１５／３７４，７２７号及び２０１６年１２月１３日出願の欧州特許出願第１６２０３８６３．２号の利益を主張するものであり、これらは、言及することによって本明細書に完全に記載されているものとして援用される。
【背景技術】
【０００２】
従来、命令は、命令キャッシュフェッチステージ及び命令デコードステージを有するパイプラインを介してディスパッチされる。例えばｘ８６プロセッサで使用されるような可変幅命令は、固定長命令と比較して、高帯域幅のサイクル当たり複数の命令をデコードするために、かなり余分なハードウェア複雑性を負うことになる。このことは、命令ストリームの構文解析及びデコーディングのために余分なパイプラインステージを必要とし、例えば命令フェッチをリダイレクトする実行された分岐又は予測を誤った分岐等においてパイプラインを再始動させる必要がある場合、このような余分なステージが余分な電力を消費し、レイテンシを増加させる。これにより、サイクル当たりの全体的な命令帯域幅が制限され、性能に影響を与える。また、リダイレクトからの命令がパイプラインに伝播するまで有効な作業を行わずに電力を消費する、アイドル状態のパイプラインステージが多く発生する。このような余分なデコードステージをバイパスし、オペレーション（ｏｐ）キャッシュ（ＯＣ）内の命令の供給を簡素化する必要がある。
【０００３】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができるであろう。
【図面の簡単な説明】
【０００４】
【図１】特定の実施形態による、プロセッサのコア処理ユニットを示す図である。
【図２】図１のコア処理ユニットのｏｐキャッシュ内のｏｐキャッシュ（ＯＣ）エントリを示す図である。
【図３】命令キャッシュラインに亘って分割された命令の基本ブロックと、ｏｐキャッシュ内の複数の対応付けられたＯＣエントリと、を示す図である。
【図４】命令キャッシュ、分岐予測及びＯＣパイプラインの処理のフロー図である。
【図５】ｏｐフェッチパイプラインの処理のフロー図である。
【図６】ＯＣビルドパイプラインの処理のフロー図である。
【図７】図４の命令キャッシュ、分岐予測及びＯＣパイプラインを実施する方法を示す図である。
【図８】図５のＯＣフェッチパイプラインを実施する方法を示す図である。
【図９】１つ以上の開示された実施形態を実施することができる例示的なデバイスのブロック図である。
【発明を実施するための形態】
【０００５】
ｏｐキャッシュ（ＯＣ）は、以前にデコードされた命令、具体的には元の可変長フォーマットから固定長の正規フォーマットにデコードされた命令のキャッシュである。ＯＣは、従来の命令キャッシュフェッチ及び命令デコードパイプラインステージを使用する代わりに、ディスパッチのための命令を供給することができる。命令を供給するＯＣは、リダイレクトパイプラインのレイテンシを短縮し、より広範囲の並列命令ディスパッチを単純化し、サイクル当たりの全体的な命令帯域幅を増加させることによって、サイクル当たりの命令（ＩＰＣ）の数を改善する。命令を供給するＯＣは、命令を再フェッチしたり再デコードしたりする必要性を回避し、パイプラインステージがリダイレクトでアイドル状態になる時間を短縮することによって、電力使用量を改善する。ＯＣは、多数のチェイニング（chaining）を一セットで提供して、任意の数の命令をキャッシュラインに供給する。ＯＣは、物理的にインデックスしてタグを付けることによって、スレッド間でコンテンツを共有することが可能である。ＯＣは、ｏｐストレージをイミディエイト／ディスプレイスメント（immediate/displacement）ストレージと共有することによって、容量を最大にする。
【０００６】
ＯＣは、固定幅フォーマットでデコードされた命令を含む。したがって、ＯＣは、命令境界を決める必要がなく、バイトストリームから個々の命令を取り出す必要もない。ＯＣを使用する場合、命令を構成部分（例えば、プレフィックス、オペレーションコード（ｏｐｃｏｄｅ）、ＭｏｄＲＭ（モード（Ｍｏｄ）、レジスタ（Ｒ）及びメモリ（Ｍ）変数に基づいてアドレス計算を指定するｏｐｃｏｄｅに続くバイト）、ＳＩＢ（スケール（Ｓ）、インデックス（Ｉ）及びベース（Ｂ）に基づいてアドレス計算を指定するｏｐｃｏｄｅに続くバイト）、及び、イミディエイト／ディスプレイスメントフィールド等）に分解する必要はない。
【０００７】
ＯＣを使用するためのシステム及び方法が開示される。システム及び方法は、以前にデコードされた命令の基本ブロックをキャッシュするＯＣを含み、命令の基本ブロックは、分岐のターゲットで始まり、分岐命令で終わり、さらに、このようなブロックがキャッシュライン境界に跨る場合、このような境界においてターゲット基本ブロックと、１つ以上の連続する基本ブロックとに分割され、追加の連続するブロックは、交差する連続キャッシュライン境界の各々で形成される。ＯＣは、複数の物理的にインデックスされタグ付けされたエントリを含み、これらのエントリのスレッド間での共有を可能にする。ＯＣは、複数のウェイを介してチェイニングされ、複数のＯＣエントリがキャッシュライン内の様々な複数の命令を供給することを可能にする。ＯＣの一部は、容量を最大限にするために、ｏｐ情報又はイミディエイト／ディスプレイスメント値の何れかを記憶することが可能である。
【０００８】
システム及び方法は、ＯＣを使用してキャッシュラインの最後まで又は実行された分岐まで命令フェッチを実行することを含む。これは、複数のマイクロタグに対する入力として使用される基本ブロックの予測フェッチアドレスを受信することと、受信した予測フェッチアドレスをデカップリングキューに書き込むことと、受信したフェッチアドレスが複数のマイクロタグのうち１つのマイクロタグにヒットするかどうかを判別することと、を含む。フェッチアドレスが複数のマイクロタグのうち１つのマイクロタグにヒットした場合、動作モードは、ＯＣモードに切り替えられる。次に、フェッチアドレスは、ｏｐキャッシュに転送される。
【０００９】
システム及び方法は、ＯＣフェッチを実行することを含む。これは、ＯＣキューからフェッチアドレスを読み出すことと、ＯＣヒットのためにアクセスされたＯＣタグをチェックするために、フェッチアドレスを使用してＯＣタグアレイにアクセスすることと、を含む。比較がヒットを返さなかった場合、フェッチは、従来のフェッチ処理のために命令キャッシュにリダイレクトされる。比較がヒットを返した場合、ＯＣデータアレイが読み出されてデコードされ、イミディエイト／ディスプレイスメント値と、ｏｐと、マイクロコードエントリアドレスと、が出力される。イミディエイト／ディスプレイスメント情報が存在する場合、イミディエイト／ディスプレイスメントキューに入れられる。ｏｐエントリは、オペレーションキューに入れられる。存在する場合、マイクロコードエントリポイントアドレスは、エントリアドレスキューに入れられる。
【００１０】
図１は、特定の実施形態による、プロセッサ１００のコア処理ユニット１０５のハイレベルブロック図及びフロー図である。処理ユニット１０５は、スケジューラ及び／又は実行ユニット１１５にオペレーション（ｏｐ）を提供するデコーダユニット１１０を含むが、これに限定されない。デコーダユニット１１０は、命令キャッシュ１２２及びＯＣ１２４に接続された分岐予測器１２０を含むが、これに限定されない。また、命令キャッシュ１２２は、デコーダ１２６に接続されている。デコーダ１２６及びＯＣ１２４は、ｏｐキュー１２８に接続されている。
【００１１】
スケジューラ及び／又は実行ユニット１１５は、整数スケジューラ及び／又は実行ユニット１３０と、浮動小数点スケジューラ及び／又は実行ユニット１３２と、を含み、これらの両方がキャッシュ１３４に接続されているが、これに限定されない。また、キャッシュ１３４は、Ｌ２キャッシュ１３６と、ロードキュー１３８と、ストアキュー１４０と、に接続されている。ロードキュー１３８、ストアキュー１４０及びキャッシュ１３４は、まとめてロードストア（ＬＳ）ユニット１３９と呼ばれる。
【００１２】
整数スケジューラ及び／又は実行ユニット１３０は、スケジューラ１５１に接続された整数リネーマ１５０を含み、スケジューラ１５１は、算術論理ユニット（ＡＬＵ）スケジューラ（ＡＬＳＱ）１５２と、アドレス生成ユニット（ＡＧＵ）スケジューラ（ＡＧＳＱ）１５４と、を含むが、これに限定されない。また、スケジューラ１５１（特にＡＬＳＱ１５２及びＡＧＳＱ１５４）は、ＡＬＵ１５６と、ＡＧＵ１５８と、に接続されている。さらに、整数スケジューラ及び／又は実行ユニット１３０は、整数物理レジスタファイル１６０を含む。
【００１３】
浮動小数点スケジューラ及び／又は実行ユニット１３２は、スケジューラ１７２に接続された浮動小数点リネーマ１７０を含むが、これに限定されない。また、スケジューラ１７２は、乗算器１７４及び加算器１７６に接続されている。さらに、浮動小数点スケジューラ及び／又は実行ユニット１３２は、浮動小数点物理レジスタファイル１７８を含む。
【００１４】
パイプラインプロセッサは、パイプラインに供給される命令の規則的なストリームを必要とする。分岐予測器１２０は、何れの命令セットをパイプラインプロセッサでフェッチして実行すべきかを予測する。これらの命令は、フェッチされ、命令キャッシュ１２２に記憶され、命令キャッシュ１２２から読み出されるとデコーダ１２６によってｏｐにデコードされる。ＯＣ１２４は、デコーダ１２６がこれらを生成する場合にｏｐをキャッシュする。ｏｐキュー１２８は、ｏｐを実行のためにディスパッチするために、デコーダ１２６及びＯＣ１２４からのｏｐを記憶してキューに入れる。
【００１５】
従来のパイプライン処理では、ｏｐキューは、ロードｏｐ又はストアｏｐである特定のｏｐを、ペイロード（例えば、ｏｐからデコードされた制御情報、ｏｐに関連するメモリアドレス等）を保持するロードキュー及び／又はストアキューに直接ディスパッチする。例示の目的で、ストアキューは、ｏｐキューから複数のｏｐを受け入れ、ディスパッチ時にペイロードをストアキューに書き込んでもよい。アドレス生成時に、ストアキューは、スケジューラからキューインデックスを受信し、何れのストアエントリが処理されているかを特定する。スケジューラは、ディスパッチペイロードを読み出し、それをセグメンテーションチェックのためにセグメンテーションロジックに送り、ｏｐパイプライン上の可能な選択のためにロードキューに送る。すなわち、従来のパイプライン処理は、ストアキュー及びロードキューに対する２パス書き込み処理（すなわち、ペイロードのディスパッチ時に１回、メモリ内にアドレスを生成するためのアドレス生成時に１回）である。
【００１６】
一実施形態によれば、ｏｐは、従来のパイプライン処理に従ってロードキュー１３８及びストアキュー１４０に直接書き込むのではなく、単に、整数スケジューラ及び／又は実行ユニット１３０と、浮動小数点スケジューラ及び／又は実行ユニット１３２と、にディスパッチされる。具体的には、ｏｐは、（１）整数リネーマ１５０を介してスケジューラ１５１に向けられ、（２）浮動小数点リネーマ１７０を介してスケジューラ１７２に向けられる。スケジューラ１５１は、ｏｐに関するディスパッチペイロード（例えば、ストアｏｐに関するディスパッチペイロード）の全てをＡＧＳＱ１５４に保持する。すなわち、ＡＧＳＱ１５４は、適切なロードキュー１３８及び／又はストアキュー１４０のキューエントリが使用可能になるまで、ｏｐ（例えば、ロードｏｐ及びストアｏｐ）を保持する。キューエントリが使用可能になり、レジスタ１６０のソースの準備が整うと、ＡＧＳＱ１５４は、アドレスを生成し、ディスパッチペイロードを読み出し、ディスパッチペイロードをロードキュー１３８及び／又はストアキュー１４０に送る。
【００１７】
エイジオーダ（age-ordered）オペレーション又はインオーダ（in-order）キューを維持するために、全てのストアｏｐは、特定のキューエントリ又はキュー識別子に関連付けられる。具体的には、スケジューラ１５１は、ＡＧＳＱ１５４がアドレス生成をいつ実行することができるか、及び、スケジューラ１５１が記憶データ（すなわち、ディスパッチペイロード）をストアキュー１４０にいつ送ることができるかを知る必要がある。したがって、特定のキューは、使用可能になった場合に、ストアキュー１４０によってＡＧＳＱ１５４に伝えられる。
【００１８】
ロードキュー１３８及びストアキュー１４０は、コミット割り当て解除信号をスケジューラ１５１（ＡＧＳＱ１５４及びＡＬＳＱ１５２）に送ることによって、スケジューラ１５１（ＡＧＳＱ１５４及びＡＬＳＱ１５２）は、最も古いストアｏｐストアキューインデックスを更新して、アドレス生成を可能にするか、このような古いストアｏｐが各々のストアキューエントリの割り当てを解除して解放するので、若いストアｏｐに関するストアデータを送ることができる。これは、例えば、ロードキュー１３８及びストアキュー１４０からの出力（図示省略）をスケジューラ１５１（ＡＧＳＱ１５４及びＡＬＳＱ１５２）の入力に加えることによって実施することができる。
【００１９】
ロードｏｐは必ずしもエイジオーダである必要はなく、命令の実行順序を制御するために当業者に知られている他の技術を使用することができる。一実施形態では、ロードｏｐは、ストアｏｐと同様に動作することができる。
【００２０】
ＡＧＳＱ１５４によってアドレス生成が実行され、データ／ディスパッチペイロードが必要に応じてロードキュー１３８及びストアキュー１４０に記憶されると、コア処理ユニット１０５はｏｐを実行する。ロードキュー１３８及びストアキュー１４０の各々は、ロードｏｐのデータを返し、ストアｏｐの書き込みを実行する。他のタイプのオペレーションでは、スケジューラ１５１及びスケジューラ１７２は、各々のソースの準備が整うと、整数スケジューラ及び／又は実行ユニット１３０、並びに、浮動小数点スケジューラ及び／又は実行ユニット１３２にｏｐを発行する。
【００２１】
図２は、ＯＣ１２４内のエントリ２００を示す図である。エントリ２００は、１クロックサイクルで同時にディスパッチするためにエントリ当たり最大８つのオペレーションを保持するように設計されている。動作上、一実施形態では、エントリ２００は、以下のように、各々のバイト位置において、バイト情報２５０に示すように割り当てられた７４バイト（合計５９２ビット）である。エントリ２００は、エントリ情報２１０を含む。エントリ２００は、図２においてオペレーション０〜７として特定される８つのオペレーション２２０のためのストレージを含む。最大４つのマイクロコード命令に対応する４つのマイクロコードエントリポイント（ＵｃｏｄｅＥＰ）２３０用のストレージが使用される。図２に示すように、これらのマイクロコードＥＰ２３０は、オペレーション２２０（４）と同じ位置に、その代替として記憶される。一実施形態では、オペレーション２２０は、バイト２５０の表現で示されるように、７バイト長である。イミディエイト／ディスプレイスメント（Ｉｍｍ／Ｄｉｓｐ）情報２４０が、エントリ２００に含まれる。一実施形態では、Ｉｍｍ／Ｄｉｓｐ情報２４０は、オペレーション２２０のこの部分が頻繁に使用されないので、エントリ２００の終わり付近で開始するようにフォーマットされ、オペレーション２２０用のストレージと部分的に重複する。オペレーション位置５，６，７は、必要に応じてオペレーション又はイミディエイト／ディスプレイスメント値を記憶してもよい。一実施形態では、Ｉｍｍ／Ｄｉｓｐ情報２４０は、８つの４バイトエントリを含む。
【００２２】
ＯＣマイクロタグのコンテンツは、エントリ２００に関連付けられる。マイクロタグアレイは、エントリアレイ（キャッシュのデータ部分）及びフルタグアレイ（ＯＣタグ）と同じインデックス及びウェイを有する別個の物理構造である。マイクロタグアレイは、論理的には同じアレイの一部とみなされるが、物理的には別のものであり、パイプラインの異なる場所で使用されるため、まとめて１つの統合アレイとみなすことができない。マイクロタグアレイは、所望のエントリがＯＣ内に存在してもよいし、しなくてもよいというクイックヒントを提供するのに対して、メインＯＣタグアレイは、ヒント又はミスの真の指示を提供する。ＯＣマイクロタグコンテンツは、表１に示されている。
【００２３】
【表１】
2019537163.tif 000003
【００２４】
ＯＣタグコンテンツは、エントリ２００に関連付けられている。タグアレイは、別の物理構造である。タグアレイは、エントリアレイ（キャッシュのデータ部分）及びマイクロタグアレイ（ＯＣマイクロタグ）と同じインデックス及びウェイを含む。タグアレイは、論理的には同じアレイの一部とみなされるが、物理的には別のものであり、パイプラインの異なるステージで使用されるため、これらをまとめて１つの統合アレイとみなすことはできない。ＯＣタグコンテンツは、表２に示されている。
【００２５】
【表２】
2019537163.tif 000004
【００２６】
エントリ情報２１０は、オペレーション２２０毎又はＩｍｍ／Ｄｉｓｐ情報２４０毎ではなく、エントリ２００毎の多岐に亘るビットを含む。このエントリ情報２１０は、表３に示す情報を含む。
【００２７】
【表３】
2019537163.tif 000005
【００２８】
各エントリは、０から７まで数字が付された最大８つのオペレーション２２０用のストレージを有する。ｏｐは、５６ビットとしてエンコードされる。
【００２９】
各エントリ２００は、最大４つの３２ビットＩｍｍ／Ｄｉｓｐ値２４０のための専用ストレージを有する。追加のＩｍｍ／Ｄｉｓｐ値２４０（最大８つまで）は、最も大きな数字が付されたオペレーション２２０（７）から開始してオペレーション２２０（５）まで下向きにオペレーション２２０を置き換えることによって、ビットストレージをオペレーション２２０と共有する。Ｉｍｍ／Ｄｉｓｐストレージが必要とされる場合、使用可能なオペレーション２２０の数を減らす。オペレーション２２０が５６ビットであり、Ｉｍｍ／Ｄｉｓｐ情報２４０が３２ビットであるため、８つのＩｍｍ／Ｄｉｓｐ情報２４０を有するエントリは、最大で５つのオペレーション２２０を含むことができる。６４ビットであるＩｍｍ／Ｄｉｓｐ情報２４０は、表４に示すように２つの３２ビット位置を取る。
【００３０】
【表４】
2019537163.tif 000006
【００３１】
マイクロコードＥＰ２３０は、エントリが任意のマイクロコード命令を含む場合、オペレーション２２０（０〜３）のみが有効なオペレーションを含むことができるように設計されている。オペレーション２２０（４）は、１〜４つのマイクロコードＥＰ２３０を記憶するのに使用される。オペレーション２２０（５〜７）は、この場合には有効なオペレーションを含むことができないが、Ｉｍｍ／Ｄｉｓｐ情報２４０のストレージのために依然として使用することができる。このことは、最大で４つのオペレーション２２０を、任意のマイクロコード命令を含むエントリに記憶することができることを意味している。マイクロコード命令は、そのエントリポイントストレージに加えて、通常のオペレーション２２０位置を依然として消費する。マイクロコードＥＰ２３０は、１４ビットである。
【００３２】
図３は、ＯＣエントリが、命令キャッシュラインにおける基本ブロックとどのように概念的に並ぶかの一例を示している。図３は、２つの命令キャッシュラインに跨る２つの基本ブロック３００と、複数の関連するＯＣエントリ２００と、を示している。ここで、基本ブロック３００は、４つのＯＣエントリ３１０ａ，３１０ｂ，３１０ｃ，３１０ｄを含む。ＯＣエントリ３１０ａ，３１０ｂ，３１０ｃ，３１０ｄは、２つのキャッシュライン３５０ａ，３５０ｂの範囲内に整列される。第１ＯＣエントリ３１０ａは、分岐ターゲット３３０で開始する基本ブロックの始まりに対応している。それは、その基本ブロックの８つのデコードされた命令を含む。第１ＯＣエントリ３１０ａが完了すると（第１キャッシュライン３５０ａ内に完全に含まれるように示されている）、第２ＯＣエントリ３１０ｂが記憶される。ＯＣエントリ３１０ｂに対する命令も第１キャッシュライン３５０ａ内に含まれる。この場合、キャッシュラインには２つの命令しか残っていないので、ＯＣエントリ３１０ｂ内の２つのｏｐだけを使用し、残りのｏｐストレージは空のままである。ＯＣエントリ３１０ｂが完了すると（第１キャッシュライン３５０ａ内に完全に含まれるように示されている）、第３ＯＣエントリ３１０ｃが記憶される。第３ＯＣエントリ３１０ｃは、キャッシュライン３５０ａにおける最後の命令で開始し、この命令は、６４Ｂ境界を越えてキャッシュライン３５０ｂに入る。この命令は、ＯＣエントリ３１０ｃ内の第１ｏｐ位置を取り、キャッシュライン３５０ｂ内の後続の（最大７つの）命令が、ＯＣエントリ３１０ｃ内の残りのｏｐを埋める。第１ＯＣエントリ３１０ａ及び第２ＯＣエントリ３１０ｂの完了と同様の方法で第３ＯＣエントリ３１０ｃが完了すると（第１キャッシュライン３５０ａ及び第２キャッシュライン３５０ｂの両方に存在するように示されている）、第４ＯＣエントリ３１０ｄが記憶される。図示するように、第４ＯＣエントリ３１０ｄは、第２キャッシュライン３５０ｂに含まれている。それは、実行された分岐、又は、キャッシュライン３５０ｂ内に完全に含まれている最後の命令で終了してもよいし、例示の目的で実行された分岐で単に終了してもよい。
【００３３】
２つの基本ブロック３００は、第１基本ブロック３００ａと、第２基本ブロック３００ｂと（まとめて基本ブロック３００と呼ばれる）を含む。基本ブロック３００は、２つの隣接するキャッシュライン３５０内に完全に含まれる。何れの基本ブロック３００も、特定の最大サイズ及びアライメントであってもよい。本実施形態で図示及び説明したように、このようなサイズ及びアライメントは、６４Ｂのキャッシュラインに対応する。基本ブロック３００の一方は、（キャッシュラインへのシーケンシャルウォークの場合には）キャッシュラインの始まり又は実行された分岐ターゲットにおいて開始する。基本ブロック３００の一方は、（シーケンシャルウォークアウトの場合）キャッシュラインの終わりにおいて、又は、実行された分岐命令の最後のバイトにおいて終了する。一実施形態では、キャッシュライン３５０は、６４Ｂのアライメントされたメモリ領域である。
【００３４】
最初の２つのＯＣエントリ３１０ａ，３１０ｂは、第１基本ブロック３００ａ内にある。２番目の２つのＯＣエントリ３１０ｃ，３１０ｄは、第２基本ブロック３００ｂ内にある。３番目のＯＣエントリ３１０ｃの最初の命令３６０のように基本ブロックに跨る命令の場合（すなわち、命令が複数のバイトである）、命令がどのエントリ及び基本ブロックに関連しているかに関して若干のずれがある。一実施形態において、キャッシュラインに跨る命令は、命令の最後のバイトを含むキャッシュライン（基本ブロック）に関連付けられる（図３では、ＯＣエントリ３１０ｃは、基本ブロック３００ｂに関連付けられる）。それは、キャッシュラインに跨る命令を含むエントリが、常に、当該命令をエントリの最初の命令として有することを意味する。
【００３５】
一実施形態において、基本ブロック３００の一方は、任意の数のＯＣエントリ３１０に跨る。一実施形態では、基本ブロックがＯＣエントリ３１０を跨ることは、タグのシーケンシャルオフセットフィールドを用いて、実行されると予測された分岐でのチェイニングの終点とチェイニングすることによって行われる。また、シーケンシャルオフセットフィールド及びシーケンシャル基本ブロックフィールドは、基本ブロックにおける最後のＯＣエントリと、連続する基本ブロックにおける最初のＯＣエントリとのチェイニングをサポートする。このようにして、ＯＣエントリのチェイニングは、複数の基本ブロックに跨ることができる。
【００３６】
また、図３には、融合された命令が示されている。この融合された命令については後述する。
【００３７】
図４は、ＯＣパイプラインの処理４００のフロー図を示している。処理４００は、命令キャッシュ（ＩＣ）モードからｏｐキャッシュモードへのパイプラインの遷移を行う。リセット時、パイプラインは、ＩＣモードである。すなわち、フェッチは、命令キャッシュを介して行われる。ＩＣモードでは、全てのフェッチが、従来の命令キャッシュフェッチ及びデコードパイプラインを介して配信される。一実施形態によれば、処理４００は、マイクロタグがヒットであるかどうかを判別するのに使用され、ＯＣモードでフェッチがＯＣパイプラインを介して供給されることを可能にする。
【００３８】
処理４００は、ＯＣマイクロタグに対してチェックを行うために使用されるフェッチアドレスの取得又は受信を開始する。ＯＣマイクロタグ４２０は、フェッチアドレスを使用して、ＯＣキャッシュにヒットが存在するかどうかを予測する。フェッチアドレスは、デカップリングキュー（ＤＱ）４３０に提供され、ＤＱバイパスマルチプレクサ（ＭＵＸ）４４０に入力される。ＤＱ４３０は、分岐予測（ＢＰ）パイプラインを命令キャッシュ（ＩＣ）パイプライン（図示省略）及びＯＣパイプラインから切り離し、アクティブなパイプラインがストールした場合にフェッチ要求をキューに入れることを可能にする。ＤＱ４３０は、フェッチアドレスを受信し、ＯＣフェッチリダイレクト４９０が与えられ、ＤＱバイパスＭＵＸ４４０に出力する。物理フェッチアドレスがマイクロタグ内でヒットした場合、モードは、ｏｐキャッシュモードに切り替えられる。このマッチングは、分岐ターゲットフェッチ及びリダイレクトターゲットフェッチに対してのみ行われる。これは、このようなことが、命令開始位置がフェッチパイプラインにおいて判明している場合に限られるためである。
【００３９】
ＯＣマイクロタグ４２０及びＤＱ４３０からの情報がＭＵＸ４４０において受信され、ヒットが判別されると、命令キャッシュからｏｐキャッシュへの遷移が行われる。ｏｐキャッシュは、従来のフェッチ及びデコードパイプラインが空になるまでストールしたままである。従来のフェッチ及びデコードパイプラインが空になると、ｏｐキャッシュはストールを解除し、最後のオペレーションがデコードパイプラインから送られた後のサイクルより後に、オペレーションをオペレーションキュー（ＯＰＱ）に送ることを開始する。
【００４０】
ｏｐキャッシュモードへの遷移を前提とすると、ｏｐキャッシュキュー（ＯＣＱ）４６０及びＭＵＸ４７０は、ＭＵＸ４４０から物理フェッチアドレスを受信する。ＯＣＱ４６０は、ＯＣパイプラインがストールしたときにフェッチ要求をキューに入れることを可能にし、出力された、キューに入れられたフェッチアドレスをＯＣＱバイパスマルチプレクサ（ＭＵＸ）４７０に提供する。
【００４１】
次に、フェッチアドレスがＯＣＱ４６０から読み出されるか、ＯＣＱ４６０が空である場合、新たなアドレスが到着するとＯＣＱ４６０をバイパスし、タグ読み出し４８０におけるＯＣタグアレイ検索に使用される。物理アドレスビット１０：６から構成されたインデックスのセットを使用してタグアレイの１つのセットが読み出され、当該セット内の８つのウェイの各々のタグアドレスがフェッチアドレスと比較される。８ウェイのうち１つのウェイのアドレスがフェッチアドレスと一致した場合（表２において上述したものに含まれる他の条件に加えて）、ＯＣがヒットとなり、フェッチはＯＣパイプラインでの処理を続ける。アドレスが一致しなかった場合、ＯＣはミスとなり、ＯＣフェッチリダイレクト４９０が伝えられる（これは、図５に関連して、特にタグ比較５２０に関連してより詳細に説明する）。
【００４２】
図５は、ＯＣフェッチパイプラインの処理５００のフロー図を示している。処理５００は、フェッチアドレス５０５を受信し、当該アドレスを、図４に関して上述したようにＯＣＱ４６０及びＯＣＱバイパスＭＵＸ４７０への入力として提供することによって始まる。ＯＣＱ４６０は、ＯＣパイプラインがストールしたときに受信したフェッチアドレス用のストレージを提供し、ＯＣパイプラインをフェッチ生成ロジックから切り離す。ＭＵＸ４７０は、ＯＣＱ４６０内で保留中のフェッチアドレスがない場合にフェッチアドレス５０５を選択し、そうでなければＯＣＱ４６０内の次の保留中のアドレスを選択し、それをタグ読み出し４８０に出力する。タグ読み出しは、選択されたタグをフェッチアドレスと共にＯＣタグ比較５２０に出力する。シーケンシャルオフセット５７５は、シーケンシャルなＯＣエントリのチェイニングを提供するために、タグ読み出し４８０と共に１つのループに構成される。
【００４３】
ｏｐキャッシュモードでは、ＩＣは、ＩＣマイクロタグを読み出さなくなる一方でｏｐキャッシュマイクロタグを読み出すが、これは、有効なウェイを決定するためのものであり、全体的なヒット／ミスを判別するためや、ＯＣパイプラインとＩＣパイプラインとの間の操作のためではない。ＩＣフェッチ生成ロジックは、ＯＣパイプラインからリダイレクトを受信するまで、シーケンシャルフェッチ及び分岐ターゲットフェッチをＯＣパイプラインに送る。ＩＣモードに入った時点で、フェッチは、従来の命令キャッシュ及びデコードパイプラインに送られる。これにより、ＯＣパイプラインがいつＩＣモードにスイッチバックするかを制御することができ、また、新たなＩＣモードのデコードパイプの書き込み後にＯＰＱ５５０に書き込まれる可能性があるモード切り替え後のＯＣパイプライン内に行われていない（uncommitted）ｏｐが存在しないことを保証する。
【００４４】
選択されたタグは、タグ比較（ｃｍｐ）５２０においてフェッチアドレスと比較される。ヒットしない場合、ＯＣは、ＯＣフェッチリダイレクト４９０を介してフェッチをＩＣにリダイレクトし、モードは、ＩＣモードにスイッチバックされる。タグ比較５２０において行われた比較によって判別されたヒットが存在する場合、タグ比較５２０は、ＯＣデータアレイアドレスをデータアレイ読み出し５３０に出力する。データアレイ読み出し５３０は、最大８つのｏｐを含むアクセスされたＯＣエントリを、デコード５４０に出力する。デコード５４０は、ＯＣエントリ内のｏｐ及び他の情報の何らかの単純なデコードを実行し、出力を、オペレーションキュー（ＯＰＱ）５５０、イミディエイト／ディスプレイスメントキュー（ＩＤＱ）５６０及びエントリアドレスキュー（ＥＡＱ）５７０に提供する。ＯＰＱ５５０は、ディスパッチされるｏｐをキューに入れる。ＩＤＱ５６０は、イミディエイト／ディスプレイスメントキューであり、ＥＡＱ５７０は、マイクロコードエントリポイントキューであり、これについては上述した。
【００４５】
ＯＰＱ５５０は、ディスパッチをマシンパイプラインのレジスタリネーミング部１５０，１７０に供給するキューである。一般に、このようなキューは、パイプラインのセクションを切り離す。ＯＰＱ５５０は、（動作モードに応じて）ｏｐキャッシュパイプライン又は従来のデコードパイプラインのステージをディスパッチパイプラインステージから切り離す。この切り離しは、ｏｐキャッシュ又は従来のデコードパイプラインは、下流のパイプラインステージ（この場合、ディスパッチステージ）が先に進むことができるかどうかに関わらず、ｏｐを生成し、生成されたｏｐ用のストレージを有することを可能にする。
【００４６】
図５に関しては、リダイレクト及び再同期は、通常のモードの遷移よりも優先される。リダイレクトターゲットフェッチは、上述したようにＯＣマイクロタグに対してマッチングされ、このマッチングは、ｏｐキャッシュモードへの遷移を引き起こすが、ミスマッチは、リダイレクトアドレスにおいてＩＣモードへの遷移を引き起こす。ターゲットフェッチの再同期によって、ＩＣモードに強制的に遷移する場合がある。これは、ＯＣ内で融合された命令（下記参照）が、適切な例外処理のための個別の命令としてデコードされディスパッチされることを保証する。
【００４７】
一実施形態では、特定の隣接する命令、例えば、比較命令とこれに続く分岐命令は、効率を上げるために単一の工程に組み合わされ又は融合されてもよい。このような場合、ＯＣビルドロジックは、融合された命令として図３に示されているように、両方の命令をカバーする単一のＯＣエントリを形成する。
【００４８】
図６は、従来のデコードパイプラインの拡張であるＯＣビルドパイプラインの処理６００のフロー図を示している。処理６００は、デコードされた命令のシーケンスをＯＣにインストールする。ビルド中、デコードされた命令は、（１）８番目のオペレーションが取得される、（２）８番目のＩｍｍ／Ｄｉｓｐが取得される、（３）スペースを共有するオペレーションとＩｍｍ／Ｄｉｓｐとの間に衝突が生じる、（４）マイクロコード命令が存在する場合の４番目のオペレーション、（５）キャッシュラインの終わりを超えて拡張する命令、（６）実行されると予測された分岐命令に遭遇する、（７）関連する分岐予測を伴う３つ以上の命令に遭遇したとき、のうち最も早いものが発生するまで蓄積される。
【００４９】
ＯＣに提供されるフェッチアドレスは、分岐ターゲットアドレス又はシーケンシャルフェッチアドレスの何れかであり、後者は、連続する６４Ｂブロックを指す。フェッチウィンドウが、実行されると予測された分岐命令を含む場合、フェッチアドレスは、キャッシュライン内でこの命令の最後のバイトを位置決めするフェッチウィンドウ終端オフセットを伴う。ＯＣエントリビルドプロセス中、このフェッチウィンドウ終端オフセットは、ビルドを停止する場所を示す。ＯＣフェッチプロセス中、これは、ＯＰＱに送られる最後のｏｐを示す。分岐が実行されると予測されなかった場合にＯＣエントリがビルドされた場合、これは、そうでなければＥｎｔｒｙＩｎｆｏ２１０ＮｕｍＯｐｓフィールドによって示されるよりも早いｏｐ位置でｏｐディスパッチを終わらせる中間イグジットポイントを生じさせる。
【００５０】
条件付き且つ実行されると予測された最初の分岐を使用してＯＣエントリがビルドされた場合、当該エントリがＯＣからフェッチされたときに、条件分岐が実行されていないと予測されると、ミスが発生する可能性がある。これは、分岐後のシーケンシャル命令が必要であるが、ＯＣエントリには存在しないためである。この場合、フォールスルーパスに対するｏｐを生成するために、従来の処理のためにフェッチがＩＣにリダイレクトされ、分岐後の最初の命令の開始点を用いてこのパスに対する新たなＯＣエントリが開始される。
【００５１】
処理６００は、ｏｐキャッシュエントリのビルドを示している。処理６００において、デコーダ６１０（ＩＣフェッチパイプライン内の従来のデコーダ）は、１サイクル当たり最大４つのデコードされた命令（ｏｐ）及び（存在する場合）関連するｉｍｍ／ｄｉｓｐ値並びに／又はマイクロコードエントリポイントを、ＯＣエントリアキュムレータ６２０に出力する。ＯＣエントリアキュムレータ６２０は、アセンブルされたＯＣエントリコンテンツ及び関連するフェッチアドレスをＯＣビルドキュー（ＯＣＢＱ）６３０に出力する。ＯＣＢＱ６３０は、ＯＣマイクロタグアレイ、ＯＣタグアレイ及びＯＣデータアレイにそれぞれ書き込むために、エントリ及びタグをＯＣマイクロタグライタ６４０、ＯＣタグライタ６５０及び／又はＯＣデータライタ６６０に出力する。ＯＣＢＱ６３０は、これらが各々のＯＣ記憶位置に書き込むことができるまで、いくつかのＯＣエントリ及びタグのバッファリングを提供する。
【００５２】
一実施形態では、電力を節約しヒット率を向上させるために、ＯＣは、頻繁に使用されるキャッシュラインのみをビルドする。命令キャッシュアクセスカウントが、ビルド修飾子として使用される。
【００５３】
命令キャッシュより上のメモリ階層から満たされた要求又はプリフェッチ要求（すなわち、命令キャッシュでミスした要求）に対応するフェッチに関して、アクセスカウントはゼロである。アクセスカウントは、命令キャッシュでヒットした後続のフェッチ毎に１つである。アクセスカウントのこの実装（１で飽和）は、命令キャッシュタグ内のストレージを必要とせず、代わりにフェッチが命令キャッシュでヒットしたかミスしたかの認識に依存する。
【００５４】
さらなる単純化として、一実施形態では、命令キャッシュタグヒットが、アクセスカウントのプロキシとして使用される（タグミスはアクセスカウント０に対応し、タグヒットはアクセスカウント１に対応する）。この技術の精度は、タグ情報のサブセットを使用するため、命令キャッシュタグエイリアシングの場合を除いて高い。
【００５５】
一実施形態において、各命令キャッシュラインに関連する１つ以上のカウントビットを実際に実装するスキームが使用され、これはタグビットを要する。
【００５６】
フェッチがＩＣモードの場合、ＯＣパイプラインは、ビルドモードに入ることができる。ビルドモードは、上記のように、デコードパイプラインから送られるオペレーションに基づいて開始及び停止される。
【００５７】
一実施形態において、ｏｐのビルドは、命令がＩＣモードでフェッチされ、それが分岐ターゲット、デコードリダイレクトターゲット（再同期を含まない）又はＯＣリダイレクトターゲットであり、対応するキャッシュラインが命令キャッシュアクセスカウントビルド条件を満たす場合に開始する。
【００５８】
一実施形態において、ｏｐのビルドは、フェッチがＯＣモードに切り替わった場合、命令の対応するキャッシュラインが命令キャッシュアクセスカウントビルド条件を満たさない場合、命令が再同期ターゲットである場合、プロセッサの動作モードが、命令デコードに影響を与えるように変化した場合、違法若しくは不完全な命令が検出された場合、又は、無効プローブがビルドパイプライン内で進行中の命令にヒットした場合に停止する。
【００５９】
図７は、ＯＣを使用してキャッシュラインの最後まで又は実行された分岐まで命令フェッチを実行する方法７００を示す図である。方法７００は、ステップ７１０において、マイクロタグへの入力として使用される予測されたフェッチターゲットアドレスを受信する。ステップ７２０において、予測されたフェッチアドレスがＤＱに書き込まれる。ステップ７３０において、予測されたフェッチアドレスがマイクロタグにヒットするかどうかが判別される（ＩＣモードではオプション）。ステップ７４０において、ステップ７３０の判別に基づいて、モードを切り替える（ＩＣ／ＯＣ）必要があるかどうかの決定が行われる。ステップ７５０において、ＯＣモードに切り替わるかＯＣモードに留まる場合には、フェッチアドレスがｏｐキャッシュキューに書き込まれる。ステップ７６０において、タグがＯＣタグアレイから読み出される。
【００６０】
図８は、図５のＯＣフェッチパイプラインを実行する方法８００を示す図である。方法８００は、ステップ８１０において、ＯＣタグアレイからタグを読み出すことを含む。ステップ８２０において、フェッチアドレスがタグアレイ（８ウェイ）内のタグと比較される。ステップ８３０において、ステップ８２０の比較においてヒットが存在する場合、データアレイが読み出される。ステップ８２０においてヒットが存在しない場合、ステップ８４０において、ＯＣフェッチリダイレクトが発生し、方法８００は、方法７００のステップ７１０に戻る。
【００６１】
ステップ８３０においてデータアレイが読み出された後、ステップ８５０において、比較的単純なデコーディングがデータアレイ出力（アクセスされたＯＣエントリ）に対して行われる。ステップ８６０において、ＯＰＱ、ＩＤＱ及びＥＡＱへの出力が行われる。ステップ８７０において、ｏｐがＯＰＱにエンキューされる。ステップ８８０において、イミディエイト／ディスプレイスメント値がＩＤＱにエンキューされる。ステップ８９０において、マイクロコードアレイがＥＡＱにエンキューされる。
【００６２】
図９は、１つ以上の開示される実施形態を実施することができる例示的なデバイス９００のブロック図である。デバイス９００は、例えば、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含むことができる。デバイス９００は、プロセッサ９０２と、メモリ９０４と、ストレージ９０６と、１つ以上の入力デバイス９０８と、１つ以上の出力デバイス９１０と、を含む。また、デバイス９００は、オプションで、入力ドライバ９１２と、出力ドライバ９１４と、を含む。デバイス９００は、図９に示されていない追加のコンポーネントを含むことができることを理解されたい。
【００６３】
プロセッサ９０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含み、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ９０４は、プロセッサ９０２と同じダイ上に配置されてもよいし、プロセッサ９０２とは別に配置されてもよい。メモリ９０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含むことができる。
【００６４】
ストレージ９０６は、固定又は着脱可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク若しくはフラッシュドライブ等）を含むことができる。入力デバイス９０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むことができる。出力デバイス９１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むことができる。
【００６５】
入力ドライバ９１２は、プロセッサ９０２及び入力デバイス９０８と通信し、プロセッサ９０２が入力デバイス９０８から力を受信するのを可能にする。出力ドライバ９１４は、プロセッサ９０２及び出力デバイス９１０と通信し、プロセッサ９０２が出力デバイス９１０に出力を送信するのを可能にする。入力ドライバ９１２及び出力ドライバ９１４は、オプションのコンポーネントであること、及び、入力ドライバ９１２及び出力ドライバ９１４が存在しない場合には、デバイス９００が同様に動作することに留意されたい。
【００６６】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上記で説明されているが、各機能又は要素は、他の機能や要素無しに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００６７】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００６８】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2019537163.tif 000007
【図２】
2019537163.tif 000008
【図３】
2019537163.tif 000009
【図４】
2019537163.tif 000010
【図５】
2019537163.tif 000011
【図６】
2019537163.tif 000012
【図７】
2019537163.tif 000013
【図８】
2019537163.tif 000014
【図９】
2019537163.tif 000015
【国際調査報告】
2019537163.tif 000016
2019537163.tif 000017