(57)【要約】      （修正有）【課題】マイクロ命令の実行パイプラインと、アーキテクチャ命令をマイクロ命令に変換する命令トランスレータとを有するプロセッサを提供する。【解決手段】命令トランスレータのマイクロコードユニット１５６は、マイクロコード命令を保持するメモリと、マイクロコード命令を保持するキューと、フェッチ量子をデコードしてローカル分岐命令を検出し、プログラム順の最初のローカル分岐命令までのフェッチ量子のマイクロコード命令をキューに書き込み、フェッチ量子内のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令がキューに書き込まれることを防止する分岐デコーダとを含む。ローカル分岐命令は、実行パイプラインではなく、命令トランスレータによって解析される。マイクロコードトランスレータは、実行パイプラインに供給するために、クロックサイクルごとにキューから受信した複数のマイクロコード命令をマイクロ命令に変換する。【選択図】図２
2018060491.tif 000002
【特許請求の範囲】
【請求項１】
命令セットアーキテクチャ（ＩＳＡ）を有するプロセッサであって、
マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインと、
ＩＳＡによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータとを含み、
前記命令トランスレータは、
マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
前記メモリによって提供されたマイクロコード命令を保持するキューと、
前記メモリと前記キューとの間に結合され、前記複数のマイクロコード命令のうちの１つまたは複数のローカル分岐命令を検出するためにメモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その１つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで（プログラム順の最初のローカル分岐命令を含まない）を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止し、その中、ローカル分岐命令は、実行パイプラインではなく命令トランスレータによって解析される分岐デコーダと、
複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータとを含むことを特徴とするプロセッサ。
【請求項２】
クロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、すくなくとも４つであることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記命令トランスレータは、さらにコール／リターンユニットを含み、
前記コール／リターンユニットは、分岐デコーダによってデコードされ、対応するリターン命令がまだ分岐デコーダによってデコードされていないコール命令に関連付けられたリターンアドレスを保持する複数のコール／リターンスタックを有し、
前記プログラム順の最初のローカル分岐命令がコール／リターン命令である場合、前記分岐デコーダは、コール／リターンユニットに、複数のコール／リターンスタックのうちの現在のものへ／からのリターンアドレスのプッシュ／ポップを指示することを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記コール／リターンユニットは、前記複数のコール／リターンスタックに対応する複数のカウンタをさらに含み、
前記複数のカウンタの各カウンタは、前記複数のコール／リターンスタックの対応する１つが前記複数のコール／リターンスタックのうちの現在のものである間において、実行パイプラインによって未解析であって分岐デコーダによってデコードされた非ローカル分岐命令を保持し、
前記分岐デコーダは、前記複数のマイクロコード命令内の前記プログラム順の最初のローカル分岐命令に先行する非ローカル分岐命令の数をカウントし、
前記コール／リターンユニットは、前記複数のコール／リターンスタックのうちの現在のものに対応する複数のカウンタのうちの１つに、カウントされた前記数を加算し、
そのうち、非ローカル分岐命令は、命令トランスレータによってではなく実行パイプラインによって解析されることを特徴とする請求項３に記載のプロセッサ。
【請求項５】
前記アドレスに応答してクロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、Ｎ個のマイクロコード命令であり、
前記メモリは、Ｎ個のバンクを含み、前記Ｎ個のバンクの各バンクは単一の読み出しポートを有し、
前記Ｎ個のバンクのうちの第１のバンクは、前記アドレスに応答して前記複数のマイクロコード命令のうちの第１のものを提供し、
残りの前記Ｎ個のバンクの各バンクは、前記アドレスの各インクリメントされたバージョンに応答して、複数のマイクロコード命令のそれぞれ１つを提供することを特徴とする請求項１に記載のプロセッサ。
【請求項６】
各クロックサイクルにおいてマイクロコード命令が書き込まれる前記キューの位置を指す書き込みポインタと、
前記キューに書き込まれたマイクロコード命令の数によって各クロックサイクルにおいて書き込みポインタをインクリメントするキューコントローラと、をさらに含むことを特徴とする請求項１に記載のプロセッサ。
【請求項７】
前記複数のマイクロコードトランスレータがマイクロコード命令を読み出す前記キューの位置を指す読み出しポインタと、
前記複数のマイクロコードトランスレータによって変換されたマイクロコード命令の数によって各クロックサイクルにおいてリードポインタをインクリメントするキューコントローラと、をさらに含むことを特徴とする請求項１に記載のプロセッサ。
【請求項８】
前記プロセッサは、ｘ８６  ＩＳＡプロセッサであることを特徴とする請求項１に記載のプロセッサ。
【請求項９】
前記命令トランスレータは、実行パイプラインが現在命令トランスレータから前記マイクロ命令を受け取ることができなくても前記キューが満杯になるまで前記キューに供給するために前記メモリからマイクロコード命令をフェッチし続けるように構成されることを特徴とする請求項１に記載のプロセッサ。
【請求項１０】
前記複数のマイクロコード命令がローカル分岐命令を含む場合、前記アドレスは、前記プログラム順の最初のローカル分岐命令によって指定されたターゲットアドレスに更新されることを特徴とする請求項１に記載のプロセッサ。
【請求項１１】
前記複数のマイクロコード命令にローカル分岐命令が含まれない場合、前記アドレスは、Ｎインクリメントされ、Ｎはクロックサイクルごとに前記メモリによって提供される前記複数のマイクロコード命令の数であることを特徴とする請求項１に記載のプロセッサ。
【請求項１２】
前記複数のマイクロコードトランスレータの各々は、マイクロコード命令を異なる最大数のマイクロ命令に変換するように構成されることを特徴とする請求項１に記載のプロセッサ。
【請求項１３】
プロセッサの命令セットアーキテクチャ（ＩＳＡ）によって定義されたアーキテクチャ命令を、複数の実行ユニットを有する実行パイプラインによって実行されるためのマイクロ命令に変換する方法であって、
アドレスに応じてクロックサイクルごとに複数のマイクロコード命令をメモリによって提供するステップと、
前記複数のマイクロコード命令のうちの１つまたは複数のローカル分岐命令を検出するために前記メモリとキューとの間に結合された分岐デコーダによって前記メモリによって提供された前記複数のマイクロコード命令をデコードするステップと、
前記複数のマイクロコード命令のマイクロコード命令を、その１つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで（プログラム順の最初のローカル分岐命令を含まない）を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止し、その中、ローカル分岐命令は、実行パイプラインではなく命令トランスレータによって解析されるステップと、
複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を複数のマイクロコードトランスレータによって変換するステップと、を含むことを特徴とする方法。
【請求項１４】
クロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令はすくなくとも４つであることを特徴とする請求項１３に記載の方法。
【請求項１５】
前記プロセッサは、さらにコール／リターンユニットを含み、
前記コール／リターンユニットは、分岐デコーダによってデコードされて対応するリターン命令がまだ分岐デコーダによってデコードされていないコール命令に関連付けられたリターンアドレスを保持する複数のコール／リターンスタックを有し、
前記プログラム順の最初のローカル分岐命令がコール／リターン命令である場合、コール／リターンユニットに、複数のコール／リターンスタックのうちの現在のものへ／からのリターンアドレスのプッシュ／ポップを、前記分岐デコーダによって指示するステップを含むことを特徴とする請求項１３に記載の方法。
【請求項１６】
前記コール／リターンユニットは、さらに前記複数のコール／リターンスタックに対応する複数のカウンタを含み、
前記複数のカウンタの各カウンタは、前記複数のコール／リターンスタックの対応する１つが前記複数のコール／リターンスタックのうちの現在のものである間において、実行パイプラインによって未解析であって分岐デコーダによってデコードされた非ローカル分岐命令を保持し、
前記複数のマイクロコード命令内の前記プログラム順の最初のローカル分岐命令に先行する非ローカル分岐命令の数を、前記分岐デコーダによってカウントするステップと、
前記複数のコール／リターンスタックのうちの現在のものに対応する複数のカウンタのうちの１つに、カウントされた前記数を、前記コール／リターンユニットによって加算するステップと、を含み、
そのうち、非ローカル分岐命令は、命令トランスレータによってではなく実行パイプラインによって解析されることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記アドレスに応答してクロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、Ｎ個のマイクロコード命令であり、
前記メモリは、Ｎ個のバンクを含み、前記Ｎ個のバンクの各バンクは単一の読み出しポートを有し、
前記アドレスに応答して前記複数のマイクロコード命令のうちの第１のものを、前記Ｎ個のバンクのうちの第１のバンクによって提供するステップと、
前記アドレスの各インクリメントされたバージョンに応答して、複数のマイクロコード命令のそれぞれ１つを、残りの前記Ｎ個のバンクの各バンクによって提供するステップと、を含むことを特徴とする請求項１３に記載の方法。
【請求項１８】
各クロックサイクルにおいてマイクロコード命令が書き込まれる前記キューの位置を、書き込みポインタによって指すステップと、
前記キューに書き込まれたマイクロコード命令の数によって各クロックサイクルにおいて書き込みポインタをインクリメントするステップと、をさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１９】
前記複数のマイクロコードトランスレータがマイクロコード命令を読み出す前記キューの位置を、読み出しポインタによって指すステップと、
前記複数のマイクロコードトランスレータによって変換されたマイクロコード命令の数によって各クロックサイクルにおいてリードポインタをインクリメントするステップと、をさらに含むことを特徴とする請求項１３に記載の方法。
【請求項２０】
実行パイプラインが現在命令トランスレータから前記マイクロ命令を受け取ることができなくても前記キューが満杯になるまで前記キューに供給するために前記メモリからマイクロコード命令をフェッチし続けるステップをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項２１】
コンピューティングデバイスと共に使用するための、少なくとも１つの非一時的なコンピュータ使用可能媒体でエンコードされたコンピュータプログラム製品であって、
命令セットアーキテクチャ（ＩＳＡ）を有するプロセッサを特定するために、前記媒体に埋め込まれたコンピュータ使用可能プログラムコードを含み、
前記コンピュータ使用可能プログラムコードは、
マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインを指定する第１のプログラムコードと、
ＩＳＡによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータを指定する第２のプログラムコードと、を含み、
前記命令トランスレータは、
マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
前記メモリによって提供されたマイクロコード命令を保持するキューと、
前記メモリと前記キューとの間に結合され、前記複数のマイクロコード命令のうちの１つまたは複数のローカル分岐命令を検出するためにメモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その１つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで（プログラム順の最初のローカル分岐命令を含まない）を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止し、その中、ローカル分岐命令は、実行パイプラインではなく命令トランスレータによって解析される分岐デコーダと、
複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータと、を含むことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサに関する。
【背景技術】
【０００２】
一般的に中央処理装置（ＣＰＵ）やマイクロプロセッサと称されるストアド・プログラム・プロセッサの性能向上に対する絶え間ない需要が存在する。歴史的に、一部のプロセッサには、プロセッサの命令セットアーキテクチャ（ＩＳＡ）のすくなくとも一部のアーキテクチャ命令を実行し、および例外を処理するマイクロコードが含まれている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来のプロセッサは、クロックサイクルごとにプロセッサのマイクロコードメモリから単一のマイクロコード命令をフェッチするため、特にクロックごとに複数の命令を処理する能力を有するプロセッサにおいて、マイクロコード化されたアーキテクチャ命令および／または例外サービスルーチンの性能が制限される可能性がある。
【課題を解決するための手段】
【０００４】
命令セットアーキテクチャ（ＩＳＡ）を有するプロセッサであって、
マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインと、
ＩＳＡによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータとを含み、
前記命令トランスレータは、
マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
前記メモリによって提供されたマイクロコード命令を保持するキューと、
前記メモリと前記キューとの間に結合され、前記複数のマイクロコード命令のうちの１つまたは複数のローカル分岐命令を検出するためにメモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その１つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで（プログラム順の最初のローカル分岐命令を含まない）を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止し、その中、ローカル分岐命令は、実行パイプラインではなく命令トランスレータによって解析される分岐デコーダと、
複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータとを含む。
【図面の簡単な説明】
【０００５】
【図１】プロセッサを示すブロック図である。
【図２】図１に示すプロセッサの命令トランスレータをより詳細に示すブロック図である。
【図３】図２に示すマイクロコードユニットの動作を示すフローチャートである。
【図４】図２に示すマイクロコードユニットの動作を示すフローチャートである。
【発明を実施するための形態】
【０００６】
「ローカル分岐命令」とは、プロセッサの実行パイプラインではなく命令トランスレータによって解析される分岐命令である。ローカル分岐命令は、無条件ジャンプ命令、コール命令、またはターゲットアドレスが命令トランスレータのコール／リターンスタックから得られるリターン命令のような無条件分岐命令であってよい。ローカル分岐命令は、条件が命令トランスレータによって解析可能である条件付き分岐命令であってもよく、したがって、静的条件などの実行パイプラインによって解析される必要はない。
【０００７】
「非ローカル分岐命令」とは、プロセッサの実行パイプラインによって解析される分岐命令である。
【０００８】
「マイクロコード」とは、アーキテクチャ命令の実行および／または例外の処理に使用される、プロセッサの非アーキテクチャメモリに格納された非アーキテクチャ命令である命令のルーチンまたはプログラムスレッドである。マイクロコードによって実行されるアーキテクチャ命令は、通常、複雑かつ／またはあまり実行されない。マイクロコードによって処理される例外は、アーキテクチャ上および／またはマイクロアーキテクチャ上の例外であってよい。マイクロコードルーチンは、１つまたは複数の分岐命令を含んでよい。
【０００９】
「マイクロ命令」とは、プロセッサの１つまたは複数の実行ユニットによって実行される命令であり、プロセッサのＩＳＡによって定義された命令セットとは異なる命令セットによって定義される。プロセッサのＩＳＡの例は、ｘ８６  ＩＳＡである。アーキテクチャ命令は、１つまたは複数のマイクロ命令に変換される。実行ユニットによる１つまたは複数のマイクロ命令の集合的実行は、アーキテクチャ命令を実施する、すなわち、ＩＳＡによって定義されたアーキテクチャ命令の結果を生成するために必要な動作を実行する。
【００１０】
ここで図１を参照すると、プロセッサ１００を示すブロック図が示されている。プロセッサ１００は、命令キャッシュ１０２と、命令トランスレータ１０４と、スーパースカラ・アウト・オブ・オーダー実行パイプライン１９２とを含む。命令キャッシュ１０２は、システムメモリからアーキテクチャ命令をキャッシュし、アーキテクチャプログラムカウンタ（図示せず）に基づいて命令トランスレータ１０４にアーキテクチャ命令１７８を供給する。命令トランスレータ１０４は、アーキテクチャ命令１７８をマイクロ命令１３８に変換し、それを実行パイプライン１９２に提供する。実行パイプライン１９２は、マイクロ命令１３８を実行して、プロセッサ１００のＩＳＡによって定義されたように、変換されたアーキテクチャ命令１７８の結果を生成する。１つの実施形態では、プロセッサ１００  ＩＳＡは、ｘ８６  ＩＳＡである。有利には、命令トランスレータ１０４は、クロックサイクルごとに複数のマイクロコード命令（例えば、図２のマイクロコード命令２７２参照）をフェッチし、それをマイクロ命令１３８に変換し、ここでより詳細に説明するように、クロックサイクルごとに単一のマイクロコード命令をフェッチする従来のプロセッサのスループットを超えるように、クロックサイクルごとに実行パイプライン１９２へ提供されるマイクロ命令１３８のスループットを増加させる。これはクロックサイクルごとに単一のマイクロコード命令をフェッチする従来のプロセッサの性能に対して、マイクロコード化アーキテクチャ命令１７８の性能を潜在的に向上させ、および／または割り込みなどの例外を処理するマイクロコードの性能を向上させる。
【００１１】
実行パイプライン１９２は、リネームユニット１０６と、リザベーションステーション１０８と、実行ユニット１１２と、アーキテクチャレジスタ１１６と、リオーダバッファ１１８と、メモリサブシステム１２２とを含む。実行ユニット１１２は、マイクロ命令１３８を実行する。１つの実施形態では、実行ユニット１１２は、１つまたは複数の整数ユニットと、１つまたは複数のメディア／浮動小数点ユニットと、１つまたは複数の分岐ユニットと、１つまたは複数のロード／ストアユニットとを含む。好ましくは、メモリサブシステム１２２は、メモリオーダバッファと、１つまたは複数のキャッシュメモリ（例えば、レベル１の命令キャッシュ、レベル１のデータキャッシュ）と、トランスレーション・ルックアサイド・バッファと、テーブルワークエンジンと、１つまたは複数のデータプリフェッチャと、ライトコンバインバッファと、ロードキュー、ストアキュー、スヌープキュー、フィルキューなどのさまざまな要求キューとを含む。
【００１２】
命令トランスレータ１０４は、マイクロ命令１３８をプログラム順にリネームユニット１０６に供給する。リネームユニット１０６は、命令トランスレータ１０４からマイクロ命令１３８を受信し、プログラム順に各マイクロ命令１３８にリオーダバッファ１１８内のエントリを割り当てる。好ましくは、リオーダバッファ１１８は循環キューであり、リオーダバッファ１１８内のエントリは、マイクロ命令１３８のプログラム順に保持するために割り当てられる。実行ユニット１１２は、プログラム順にマイクロ命令１３８を実行する。しかしながら、リネームユニット１０６は、マイクロ命令１３８の間の依存性をチェックし、マイクロ命令１３８と共に実行パイプライン１９２に沿って依存性情報を送信する。リザベーションステーション１０８は、実行準備が整うまでマイクロ命令１３８を保持する。リザベーションステーション１０８およびスケジューラ（図示せず）は、依存性情報を使用して、マイクロ命令１３８が、実行準備が整うまで実行ユニット１１２に実行のために発行されないことを保証する。マイクロ命令１３８は、実行ユニット１１２がそれを実行するために利用可能であるときおよびそのソースオペランドのすべてが利用可能であるときに実行する準備ができている。より具体的には、マイクロ命令１３８のソースオペランドは、それが依存する任意のマイクロ命令１３８が実行され、ソースオペランドであるその結果を生成したときに利用可能である。
【００１３】
１つの実施形態において、リオーダバッファ１１８は、実行されたマイクロ命令１３８の結果を格納するフィールドを各エントリに含む。マイクロ命令１３８が実行され、リオーダバッファ１１８への供給のために結果バス上にその結果が生成されると、マイクロ命令１３８のリオーダバッファ１１８のエントリが実行済みとしてマークされる。しかしながら、マイクロ命令１３８は、実行パイプライン１９２における最も古いマイクロ命令１３８であるまで、リタイアされない、すなわち、その結果がアーキテクチャ状態にコミットされない可能性がある。したがって、実行ユニット１１２がマイクロ命令１３８をプログラム順に実行するものの、リネームユニット１０６およびリオーダバッファ１１８は、マイクロ命令１３８がプログラム順にリタイアされることを保証するために共に動作する。好ましくは、結果はまた必要に応じて、次のクロックサイクルでの使用のために、転送バスを介して、実行ユニット１１２に送り返される。好ましくは、実行パイプライン１９２は、クロックサイクルごとに４つの最も古いマイクロ命令１３８までリタイアするように構成される。アーキテクチャ命令１７８が変換されたマイクロ命令１３８のすべてがリタイアされると、アーキテクチャ命令１７８はリタイアされている。例えば、アーキテクチャ命令１７８を実施するマイクロコードルーチンの最後のマイクロ命令１３８であるマイクロ命令１３８がリタイアするとき、アーキテクチャ命令１７８はリタイアされている。
【００１４】
別の実施形態では、リオーダバッファ１１８のエントリは、各マイクロ命令１３８の結果のための記憶域を含み、マイクロ命令１３８をリタイアすることは、結果を適切なアーキテクチャレジスタ１１６に書き込むことを含む。他の実施形態では、実行パイプライン１９２は、物理レジスタファイル（図示せず）を含み、それはアーキテクチャレジスタ１１６のための記憶域であり、リオーダバッファ１１８のエントリは結果の記憶域を含まない。代わりに、リネームユニット１０６は、各マイクロ命令１３８の結果に対して物理レジスタファイル内にレジスタを割り当て、物理レジスタファイル内の割り当てられたレジスタに基づいて依存性をチェックする。リネームユニット１０６は、物理レジスタファイル内の各レジスタの状態を示すテーブルをも保持する。より具体的には、マイクロ命令１３８がリタイアするとき、リネームユニット１０６は、マイクロ命令１３８の結果を保持する物理レジスタファイルのレジスタの状態を更新して、関連するアーキテクチャレジスタ１１６のアーキテクチャ状態を現在含んでいることを示す。
【００１５】
命令トランスレータ１０４は、高速トランスレータ１５４と、マイクロコードユニット１５６と、マルチプレクサ１５２（多工器）とを含む。高速トランスレータ１５４は、アーキテクチャ命令１７８をマイクロ命令１３６に変換する。マイクロコードユニット１５６は、アーキテクチャ命令１７８をマイクロ命令１３４に変換する。マルチプレクサ１５２は、実行パイプライン１９２にマイクロ命令１３８として供給するために、命令トランスレータ１０４のモードに応じて、高速トランスレータ１５４からのマイクロ命令１３６またはマイクロコードユニット１５６からのマイクロ命令１３４のいずれかを選択する。１つの実施形態では、キュー（図示せず）は、実行パイプライン１９２への供給のためにマイクロ命令１３８をバッファリングする。
【００１６】
高速トランスレータ１５４は、比較的単純および／または頻繁に実行されるアーキテクチャ命令１７８を変換する。好ましくは、高速トランスレータ１５４は、プログラマブルロジックアレイの集合を含む。上記、プログラマブルロジックアレイの集合は、アーキテクチャ命令１７８のサブセットに対して、好ましくは単一クロックサイクルで、各アーキテクチャ命令１７８を１つ以上のマイクロ命令１３６に変換する。１つの実施形態では、高速トランスレータ１５４は、クロックサイクルごとに最大４つのアーキテクチャ命令１７８を変換し、クロックサイクルごとに最大６つのマイクロ命令１３６を提供することができる。高速トランスレータ１５４はアーキテクチャ命令１７８を変換することができるが、命令トランスレータ１０４は高速変換モードのままであり、この場合、マルチプレクサ１５２は高速トランスレータ１５４によって生成されたマイクロ命令１３６を選択する。
【００１７】
しかしながら、高速トランスレータ１５４がマイクロコードアーキテクチャ命令１７８に遭遇するか、または例外条件が通知されると、高速トランスレータ１５４はアーキテクチャ命令１７８の変換を停止し、制御をマイクロコードユニット１５６に移し、マイクロコードモードに移行する。この場合、マルチプレクサ１５２は、マイクロコードユニット１５６によって生成されたマイクロ命令１３４を選択する。また、高速トランスレータ１５４は、マイクロコード化されたアーキテクチャ命令１７８または例外サービスを実行するマイクロコードＲＯＭ２０２（図２参照）に記憶されたマイクロコードルーチンのアドレスを提供する。マイクロコードユニット１５６およびその動作は、以下の残りの図を参照しながらより詳細に説明する。
【００１８】
１つの実施形態では、アーキテクチャ命令１７８の一部はハイブリッドである。すなわち、高速トランスレータ１５４は、マイクロ命令１３６の一部を提供し、アーキテクチャ命令１７８の残りはマイクロコード化される。すなわち、高速トランスレータ１５４が高速変換モードでマイクロ命令１３６の先頭部分を供給した後、モードがマイクロコードモードに変更され、制御はマイクロコードユニット１５６に移転され、マイクロコードルーチンはマイクロコードユニット１５６によって供給されたマイクロ命令１３４を介してアーキテクチャ命令１７８の機能の残りを実行することができる。
【００１９】
有利には、以下により詳細に説明するように、命令トランスレータ１０４は、クロックサイクルごとに複数のマイクロコード命令をフェッチして、実行パイプライン１９２に供給されるマイクロ命令１３８のスループットを増加させることによって、マイクロコード化されたアーキテクチャ命令１７８および／またはマイクロコード化された例外サービスルーチンについて、実行パイプライン１９２のスーパースカラ機能を活用しまたそれの利用を増加させる。
【００２０】
ここで図２を参照すると、図１のプロセッサ１００の命令トランスレータ１０４をより詳細に示すブロック図が示されている。命令トランスレータ１０４は、アドレスジェネレータ２０６と、マイクロコードＲＯＭ２０２と、分岐デコーダ２０８と、マイクロコード命令キュー２１２と、キューコントローラ（キューＣＮＴＲＬ）２１４と、複数のマイクロコードトランスレータ２１６と、コール／リターンユニット２２２（ＣＲＵ）とを含む。マイクロコードＲＯＭ２０２は、バンクＡ  ２０４Ａ、バンクＢ  ２０４Ｂ、バンクＣ  ２０４Ｃ、およびバンクＤ  ２０４Ｄの４つの別々にアドレサブルバンクを含み、集合的にバンク２０４と呼ばれ、また個別にバンク２０４と呼ばれるバンクメモリである。このように、マイクロコードＲＯＭ２０２は、有利には、本明細書でフェッチ量子２９６と呼ばれる４つのマイクロコード命令２７２をクロックサイクルごとに分岐デコーダ２０８に提供する。図示されるように、マイクロコードＲＯＭ２０２は、０から３で示される４つのそれぞれのレーン上の４つのマイクロコード命令２７２を分岐デコーダ２０８に供給する。レーン０は、プログラム順に第１のマイクロ命令２７２を提供し、レーン１は、プログラム順に第２のマイクロ命令２７２を提供し、レーン２は、プログラム順に第３のマイクロ命令２７２を提供し、レーン３は、プログラム順に第４のマイクロ命令２７２を提供する。１つの実施形態によれば、各バンク２０４は、有利には、そのサイズおよび電力消費を最小にするために、単一の読み出しポートを有する。
【００２１】
アドレスジェネレータ２０６は、マイクロコードＲＯＭ２０２に供給されるマイクロコードフェッチアドレス２６８を生成する。第１の加算器２２４-１は、フェッチアドレス２６８を１だけインクリメントし、第２の加算器２２４-２は、フェッチアドレス２６８を２だけインクリメントし、第３の加算器２２４-３は、フェッチアドレス２６８を３だけインクリメントし、それぞれのインクリメントされたアドレスの各々は、フェッチアドレス２６８と共にマイクロコードＲＯＭ２０２に提供される。４つのアドレスのそれぞれは、マイクロコードＲＯＭ２０２のそれぞれのバンク２０４に供給され、フェッチ量子２９６の４つの順次マイクロコード命令２７２のフェッチを達成する。好ましくは、マイクロコードＲＯＭ２０２は、４つのアドレスのそれぞれを４つのバンク２０４のうちの適切な１つに導く第１のセットのマルチプレクサ（図示せず）と、フェッチアドレス２６８の２つの最下位ビットに依存して、４つのバンク２０４によって提供される４つのマイクロコード命令２７２のそれぞれを分岐デコーダ２０８の適切なレーンに導く第２のセットのマルチプレクサ（図示せず）とを含む。好ましくは、フェッチアドレス２６８の下位２ビットの値が０である場合、フェッチアドレス２６８はバンクＡ  ２０４Ａに提供され、１インクリメントされたアドレスはバンクＢ  ２０４Ｂに提供され、２インクリメントされたアドレスはバンクＣ  ２０４Ｃに供給され、３インクリメントされたアドレスはバンクＤ  ２０４Ｄに供給される。フェッチアドレス２６８の下位２ビットの値が１である場合、フェッチアドレス２６８はバンクＢ  ２０４Ｂに提供され、１インクリメントされたアドレスはバンクＣ  ２０４Ｃに提供され、２インクリメントされたアドレスはバンクＤ  ２０４Ｄに供給され、３インクリメントされたアドレスはバンクＡ  ２０４Ａに供給される。フェッチアドレス２６８の下位２ビットの値が２である場合、フェッチアドレス２６８はバンクＣ  ２０４Ｃに提供され、１インクリメントされたアドレスはバンクＤ  ２０４Ｄに提供され、２インクリメントされたアドレスはバンクＡ  ２０４Ａに提供され、３インクリメントされたアドレスはバンクＢ  ２０４Ｂに提供される。フェッチアドレス２６８の下位２ビットの値が３である場合、フェッチアドレス２６８はバンクＤ  ２０４Ｄに提供され、１インクリメントされたアドレスはバンクＡ  ２０４Ａに提供され、２インクリメントされたアドレスはバンクＢ  ２０４Ｂに供給され、３インクリメントされたアドレスはバンクＣ  ２０４Ｃに供給される。同様に、バンクＡ  ２０４Ａの出力はフェッチアドレス２６８のモジュロ４の下位２ビットの値に対応する分岐デコーダ２０８のレーンに供給され、バンクＢ  ２０４Ｂの出力はフェッチアドレス２６８の+１モジュロ４の下位２ビットの値に対応する分岐デコーダ２０８のレーンに供給され、バンクＣ  ２０４Ｃの出力はフェッチアドレス２６８の+２モジュロ４の下位２ビットの値に対応する分岐デコーダ２０８のレーンに供給され、またバンクＤ  ２０４Ｄの出力はフェッチアドレス２６８の+３モジュロ４の下位２ビットの値に対応する分岐デコーダ２０８のレーンに供給される。
【００２２】
フェッチアドレス２６８は、マイクロコードプログラムカウンタ（図示せず）に保持される。最初に、すなわち、高速トランスレータ１５４がマイクロコードモードに切り替わると、マイクロコードプログラムカウンタには、高速トランスレータ１５４によって提供されたマイクロコードルーチンのアドレスがロードされる。上述したように、ローカル分岐命令は、命令トランスレータ１０４によって（より具体的には、実行パイプライン１９２ではなく、マイクロコードユニット１５６によって）解析されるものである。逆に、非ローカル分岐命令は、解析のために実行パイプライン１９２に発行されなければならず、マイクロコードユニット１５６によって解析することができない命令である。分岐命令を解析することは、分岐命令が実行されたか否かを判断することと、実行された場合には、分岐命令のターゲットアドレスを判断することを意味する。フェッチ量子２９６がマイクロコードＲＯＭ２０２からフェッチされるたびに、フェッチアドレス２６８（すなわち、マイクロコードプログラムカウンタ）が更新される。分岐デコーダ２０８がフェッチ量子２９６にローカル分岐命令が存在しないと判断した場合、アドレスジェネレータ２０６は次の順次命令をフェッチする。より具体的には、加算器２２６は、フェッチアドレス２６８を４、すなわち、フェッチ量子２９６のサイズだけインクリメントする。しかしながら、分岐デコーダ２０８がフェッチ量子２９６のローカル分岐命令を検出すると、分岐デコーダ２０８は、ローカル分岐命令を解析し、またもしその方向が使われれば、分岐デコーダ２０８は解析されたターゲットアドレス２６６を、アドレスジェネレータ２０６に提供して、マイクロコードプログラムカウンタを更新し、解析されたターゲットアドレス２６６で次のフェッチ量子２９６をフェッチする。
【００２３】
コールマイクロコード命令の場合では、その方向は常に採用され、分岐デコーダ２０８によって計算されたターゲットアドレス２６６は、コール命令後の次の順次アドレスである。以下により詳細に説明するように、上記次の順次アドレスは、コール／リターンユニット２２２に提供され、また現在のコール／リターンスタック２５４にプッシュされるリターンアドレスである。コールマイクロコード命令は、マイクロコードユニット１５６によって解析され、したがってローカル分岐命令である。リターンマイクロコード命令の場合では、その方向は常に採用され、リターンアドレス２９８は、以下により詳細に説明するように、現在のコール／リターンスタック２５４からポップされ、アドレスジェネレータ２０６に提供され、マイクロコードプログラムカウンタを更新する。リターンマイクロコード命令はマイクロコードユニット１５６によって解析され、したがってローカル分岐命令である。無条件ジャンプマイクロコード命令は、常に実行され、ローカルまたは非ローカル分岐であってよい。ローカル無条件ジャンプの場合では、ターゲットアドレス２６６は命令自体で指定され、実行パイプライン１９２は非ローカル無条件ジャンプのターゲットアドレスを計算する。同様に、条件付きジャンプマイクロコード命令は、ローカルでも非ローカルでもよい。ローカル条件付きジャンプマイクロコード命令の場合では、マイクロコードユニット１５６は方向を解析し、ターゲットアドレス２６６は命令自体に含まれる一方、実行パイプライン１９２は方向を解析し、非ローカル条件ジャンプのターゲットアドレスを計算する。好ましくは、マイクロコードユニット１５６は、すべての非ローカル分岐命令が実行されないことを効果的に予測し、またフェッチ量子２９６内の非ローカル分岐命令の存在に基づいて順次フェッチプロセスを中断しない。したがって、もし実行パイプライン１９２は非ローカル分岐命令が実行されたものと解析すれば、マイクロコード命令キュー２１２を含むマイクロコードユニット１５６のパイプラインをフラッシュして、実行パイプライン１９２は、マイクロコードプログラムカウンタを更新するための新しいターゲットアドレスを提供する。
【００２４】
分岐デコーダ２０８は、マイクロコードＲＯＭ２０２からフェッチ量子２９６を受信し、マイクロコード命令２７２をマイクロコード命令２７４として通過させる。分岐デコーダ２０８は、ローカルおよび非ローカル分岐命令の両方を探すためにフェッチ量子２９６をデコードする。特に、分岐デコーダ２０８は、受信されたフェッチ量子２９６の０から３まで、すなわちプログラム順にレーンをサーチし、ここで「プログラム順の最初のローカル分岐命令」と称するローカル分岐命令を有する第１のレーンを検出する（もしあれば）。分岐デコーダ２０８は、プログラム順の最初のローカル分岐命令を有するレーンに先立って、レーン内のフェッチ量子２９６内の非ローカル分岐の数をも決定し、その数を信号ｎｕｍ_ｎｏｎ−ｌｏｃａｌ_ｂｒ２８２を介してコール／リターンユニット２２２に出力する。分岐デコーダ２０８は、また、プログラム順の最初のローカル分岐命令がコール命令であるかどうかを決定し、もしそうであれば、コール／リターンユニット２２２に供給されるプッシュ信号２８４をアサートする。分岐デコーダ２０８は、またプログラム順の最初のローカル分岐命令がリターン命令であるかどうかを決定し、もしそうであれば、コール／リターンユニット２２２に供給されるポップ信号２８６をアサートする。
【００２５】
分岐デコーダ２０８はまた、キュー２１２に書き込まれるフェッチ量子２９６内の命令の数を示す信号ｎｕｍ_ｖａｌｉｄ_ｉｎｓｔｒｓ２８８をキューコントローラ２１４に供給する。より具体的には、ｎｕｍ＿ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８の値がＮである場合、分岐デコーダ２０８によって提供される前Ｎ個のマイクロコード命令２７４がキュー２１２に書き込まれる。キューコントローラ２１４は、キュー２１２に提供された書き込みポインタ２４４によって指定されたキュー２１２内の場所へのマイクロコード命令２７４の書き込みを制御する。キューコントローラ２１４は、現在の書き込みポインタ２４４の値を、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８を、キュー２１２のサイズ、すなわちキュー２１２内のエントリの数をモジュロとしてインクリメントすることによって、書き込みポインタ２４４を更新する。最後に、分岐デコーダ２０８は、プログラム順の最初のローカル分岐命令のターゲットアドレス２６６をアドレスジェネレータ２０６へ供給する。ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は、プログラム順の最初のローカル分岐命令の前の（プログラム順の最初のローカル分岐命令を含まない）フェッチ量子２９６の命令の数である。したがって、ローカル分岐命令がない場合では、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は４であり、プログラム順の最初のローカル分岐命令がレーン３にある場合、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は３であり、プログラム順の最初のローカル分岐命令がレーン２にある場合、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は２であり、プログラム順の最初のローカル分岐命令がレーン１にある場合、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は１であり、またプログラム順の最初のローカル分岐命令がレーン０にある場合、ｎｕｍ_ｖａｌｉｄ＿ｉｎｓｔｒｓ２８８は０である。したがって、分岐デコーダ２０８がフェッチ量子２９６内のローカル分岐命令を検出すると、プログラム順の最初のローカル分岐命令の後およびそれを含むマイクロコード命令２７４を効果的に捨てる、すなわちそれらをキュー２１２に書き込まないようにする。
【００２６】
分岐デコーダ２０８をマイクロコードＲＯＭ２０２とキュー２１２との間に機能的に配置することにより、フェッチ量子２９６がキュー２１２に書き込まれる前にデコードすることは、分岐デコーダ２０８をキュー２１２の後ろに機能的に配置するより利点がある。まず、プログラム順の最初のローカル分岐命令までの（プログラム順の最初のローカル分岐命令は含まれない）フェッチ量子２９６内のマイクロコード命令のみをキュー２１２に書き込むことができる上、プログラム順の最初のローカル分岐命令に続くマイクロコード命令はキュー２１２に書き込まない。これは電力を節約することができる。さらに、分岐デコーダ２０８がローカル分岐をデコードした場合に、キュー２１２の性能を低下させるフラッシュを行う必要性を回避する。
【００２７】
キュー２１２は、マイクロコード命令２７４によって満杯になった場合、ＦＵＬＬ２６４をアドレスジェネレータ２０６にアサートする。それによって、アドレスジェネレータ２０６はマイクロコードＲＯＭ２０２からの命令のフェッチを停止するように誘導される。しかしながら、有利には、キュー２１２が満杯でない限り、実行パイプライン１９２が命令トランスレータ１０４からマイクロ命令１３８を受信することができなくても、例えば、実行パイプライン１９２が停止している場合であっても、アドレスジェネレータ２０６はフェッチし続け、キュー２１２にマイクロコード命令２７４を投入しようとする。さらに、キュー２１２は、マイクロコードユニット１５６のパイプラインの長さに関連する性能ペナルティを低減することができ、これは、１つの実施形態では４つのパイプラインステージを含み、したがってマイクロコードＲＯＭ２０２のアクセスからマイクロコードＲＯＭ２０２が変換したマイクロ命令１３４の実行パイプライン１９２への提供まで、４つのクロックサイクルがかかる。
【００２８】
キュー２１２は、マイクロコード命令２７４が空であるときに、マイクロコードトランスレータ２１６にＥＭＰＴＹ２６２をアサートし、それで、マイクロコードトランスレータ２１６はマイクロコード命令２７６を図１のマイクロ命令１３４に変換することを停止する。しかしながら、有利には、キュー２１２が空でない限り、マイクロコードトランスレータ２１６は、各クロックサイクルでキュー２１２からマイクロコード命令２７６を読み出し、それらをマイクロ命令１３４に変換する。好ましくは、キュー２１２は、各マイクロコード命令２７６と共に、各マイクロコード命令が有効であるかどうかを示す有効信号を供給する。これにより、マイクロコードトランスレータ２１６は無効なマイクロコード命令２７６を変換しないようになる。例えば、キュー２１２が２つのマイクロコード命令２７６のみを含む場合、キュー２１２はそれらをレーン０および１に提供し、またレーン０および１に関連する有効信号をアサートし、しかしレーン２および３に関連する有効信号をデアサートする。好ましくは、以下に説明するように、キューコントローラ２１４は、書き込みポインタ２４４の値から読み出しポインタ２４２の値を差し引いた差として、キュー２１２内のマイクロコード命令２７６の数を決定する。
【００２９】
マイクロコードトランスレータ２１６は、所定のクロックサイクルにおいてマイクロ命令１３４に変換されたマイクロコード命令２７６の数を示す、ＮＵＭ＿ＴＲＡＮＳＬＡＴＥＤ信号２４６をキューコントローラ２１４に供給する。キューコントローラ２１４は、キュー２１２に供給されたリードポインタ２４２によって指定されたキュー２１２内の位置からマイクロコード命令２７６の読み出しを制御する。キューコントローラ２１４は、現在のリードポインタ２４２の値に対して、ＮＵＭ＿ＴＲＡＮＳＬＡＴＥＤ信号２４６の値をキュー２１２のサイズ（すなわち、キュー２１２内のエントリの数）でモジュロにした値をインクリメントすることにより、リードポインタ２４２を更新する。
【００３０】
１つの実施形態では、マイクロコード命令２７６は、マイクロコード命令２７６の複雑さに応じて、１つから４つのマイクロ命令に変換される。好ましくは、４つのマイクロコードトランスレータ２１６があり、それぞれマイクロコード命令２７６を異なる数のマイクロ命令に変換することができる。好ましくは、レーン０のトランスレータ２１６は、任意のタイプのマイクロコード命令２７６を必要な数のマイクロ命令、すなわち最大４つのマイクロ命令に変換することができる。レーン１のトランスレータ２１６は、１つから３つのマイクロ命令を必要とするタイプのマイクロコード命令２７６を変換することができる。レーン２のトランスレータ２１６は、１つまたは２つのマイクロ命令を必要とするタイプのマイクロコード命令２７６を変換することができる。レーン３のトランスレータ２１６は、ただ１つのマイクロ命令を必要とするタイプのマイクロコード命令２７６を変換することができる。マイクロコードトランスレータ２１６は、４つのマイクロコードトランスレータ２１６の出力を受信し、図１のマルチプレクサ１５２へのマイクロ命令１３４として供給するための有効なマイクロ命令を選択するマルチプレクサマトリクス（図示せず）を含む。したがって、例えば、所定のクロックサイクルにおいて、レーン０のマイクロコードトランスレータ２１６は、それが単一のマイクロ命令１３４に変換されるマイクロコード命令２７６に遭遇し、またレーン１のマイクロコードトランスレータ２１６は、４つのマイクロ命令１３４への変換を必要とするマイクロコード命令２７６に遭遇し得る。この場合、マイクロコードトランスレータ２１６は、レーン０のマイクロコード命令２７６から変換された単一のマイクロ命令１３４のみを提供する。それは、マイクロ命令１３４のための残りのスロットは３つしかなく、４つではないからである。しかしながら、有利には、マイクロコード命令キュー２１２は、マイクロコード命令のストリーム内の複雑さのばらつきおよびストリーム内の可変複雑性マイクロコード命令の互いに対する位置のために、各クロックサイクルで変換されたマイクロコード命令の数の変動の影響を潜在的に改善するためのバッファを提供する。
【００３１】
コール／リターンユニット２２２は、投機ポインタ２５８と、非投機ポインタ２５６と、複数のコール／リターンスタック２５４と、コール／リターンスタック２５４に関連する複数のカウンタ２５２とを含む。投機ポインタ２５８は、現在のコール／リターンスタック２５４、すなわちリターンアドレス２６６がコール／リターンマイクロコード命令に応答してプッシュ／ポップされたコール／リターンスタック２５４を指す。投機ポインタ２５８はまた、現在のコール／リターンスタック２５４に関連するカウンタ２５２を指す。非投機ポインタ２５６は、非投機コール／リターンスタック２５４および関連するカウンタ２５２を指し、そこでマイクロコードユニット１５６は、実行パイプライン１９２によって解析される非ローカル分岐命令（すなわち、間違って採用されないと予測されたマイクロコードユニット１５６の非ローカル分岐命令を暗黙的に含む）が採用される場合、前記カウンタ２５２に回復する。すなわち、非投機コール／リターンスタック２５４は、プロセッサ１００に未解析の非ローカル分岐命令がない場合に、分岐デコーダ２０８によって遭遇されたコール命令に関連するリターンアドレスを保持する。この場合、投機ポインタ２５８には、非投機ポインタ２５６の値がロードされ、すなわち、非投機コール／リターンスタック２５４を指すように更新される。
【００３２】
各カウンタ２５２は、対応するコール／リターンスタック２５４が割り当てられたので、分岐デコーダ２０８によって遭遇された非ローカル分岐命令の数をカウントする。分岐デコーダ２０８が１つまたは複数の非ローカル分岐命令に遭遇してから（これは現在のカウンタ２５２の値が非ゼロであることによって示される）、第１のコール／リターン命令に遭遇したとき（すなわち、分岐デコーダ２０８がプッシュ２８４／ポップ２８６をアサートしたとき）、コール／リターンユニット２２２は、新しいコール／リターンスタック２５４を割り当てる。この場合、コール／リターンユニット２２２は、現在のコール／リターンスタック２５４の内容を新たに割り当てられたコール／リターンスタック２５４にコピーし、投機ポインタ２５８を更新して新しく割り当てられたコール／リターンスタック２５４を指すようにして、リターンアドレスをそれにプッシュ／ポップする前に、それを現在のコール／リターンスタック２５４にする。新しく割り当てられたコール／リターンスタック２５４に関連するカウンタ２５２はゼロにクリアされる。留意すべきは、コール／リターン命令に先行する１つまたは複数の非ローカル分岐命令が同じフェッチ量子２９６内に存在してもよい。この場合、コール／リターンユニット２２２は、現在のカウンタ２５２をインクリメントし、またリターンアドレスをプッシュ／ポップする新しいコール／リターンスタック２５４を割り当てる。実行パイプライン１９２が非ローカル分岐命令を解析するたびに、コール／リターンユニット２２２は、非投機カウンタ２５２をデクリメントする。非投機カウンタ２５２がゼロにデクリメントされると、これは非投機コール／リターンスタック２５４に関連する未解析な非ローカル分岐命令ががもう存在しないことを示すため、コール／リターンユニット２２２は非投機ポインタ２５６をインクリメントして次のコール／リターンスタック２５４を指す。
【００３３】
１つの実施形態では、コール／リターンユニット２２２は、米国特許第７，９７５，１３２号に記載されているマイクロコードユニットの高速コール／リターンスタックユニットと同様のように動作するため、それは参照により本明細書に組み込まれるが、クロックサイクルごとに単一のマイクロコード命令ではなく、クロックサイクルごとに複数のマイクロコード命令をマイクロコードＲＯＭからフェッチすることを適応するように変更した。より具体的には、上述したように、分岐デコーダ２０８は、フェッチ量子２９６内のプログラム順の最初のローカル分岐命令の前の非ローカル分岐命令の数を検出し、コール／リターンユニット２２２は、現在のカウンタ２５２を１ではなく、上記数でインクリメントする。
【００３４】
好ましくは、マイクロコードユニット１５６は、システムソフトウェア（例えば、ＢＩＯＳまたはオペレーティングシステム、例えば、ｘ８６ライトモデル固有レジスタ（Ｗｒｉｔｅ  Ｍｏｄｅｌ  Ｓｐｅｃｉｆｉｃ  Ｒｅｇｉｓｔｅｒ，ＷＲＭＳＲ）アーキテクチャ命令を介して）によって書込み可能なパッチランダムアクセスメモリ（ＲＡＭ）（図示せず）およびパッチコンテンツアドレサブルメモリ（Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ，ＣＡＭ）をも含み、マイクロコードにパッチを当てる。パッチＣＡＭは、フェッチアドレス２６８およびその３つのインクリメントされた値を受信する。フェッチアドレス２６８またはそれらのインクリメントされた値のいずれかがパッチＣＡＭ内のアドレスにヒットした場合、パッチＣＡＭはアドレスをパッチＲＡＭに提供する。それに応答して、パッチＲＡＭはマイクロコード命令を提供し、マルチプレクサ（図示せず）はマイクロコードＲＯＭ２０２からのマイクロコード命令２７２ではなくパッチＲＡＭからマイクロコード命令を選択する。
【００３５】
クロックサイクルごとにマイクロコードＲＯＭ２０２からフェッチされるマイクロコード命令２７２の数が４である実施形態について説明したが、他の実施形態では少なくとも２であるが、数が４より多くても少なくてもよい。さらに、クロックサイクルごとにマイクロコードトランスレータ２１６によって変換されるマイクロコード命令２７６の数が４までである実施形態について説明したが、他の実施形態では少なくとも２であるが、数が４より多くても少なくてもよい。最後に、クロックサイクルごとに命令トランスレータ１０４によって実行パイプライン１９２に提供されるマイクロ命令１３４の数が最大４である実施形態について説明したが、他の実施形態では、少なくとも２であるが、数が４より多くても少なくてもよい。
【００３６】
ここで図３を参照すると、図２のマイクロコードユニット１５６の動作を示すフローチャートが示されている。フローはブロック３０２で開始する。
【００３７】
ブロック３０２において、アドレスジェネレータ２０６は、マイクロコードＲＯＭ２０２にフェッチアドレス２６８を提供し、マイクロコードＲＯＭ２０２は、それに応答して分岐デコーダ２０８に４つのマイクロコード命令２７２のフェッチ量子２９６を供給する。フローはブロック３０４に進む。
【００３８】
ブロック３０４において、分岐デコーダ２０８は、フェッチ量子２９６をデコードして、ローカルおよび非ローカル分岐命令（あれば）を検出する。フローはブロック３０６に進む。
【００３９】
ブロック３０６において、分岐デコーダ２０８は、コール／リターンユニット２２２に、プログラム順の最初のローカル分岐命令の前にプログラム順に現れるフェッチ量子２９６内の非ローカル分岐命令の数を供給する。これはゼロであってもよい。これに応答して、コール／リターンユニット２２２は、現在のカウンタ２５２をその数だけインクリメントする。フローは決定ブロック３０８に進む。
【００４０】
決定ブロック３０８において、分岐デコーダ２０８はプログラム順の最初のローカル分岐命令がコール／リターン命令であるかどうかを決定する。コール／リターン命令でなければ、フローはブロック３１４に進む。コール／リターン命令である場合、フローはブロック３１２に進む。
【００４１】
ブロック３１２において、プログラム順の最初のローカル分岐命令がコール命令である場合、分岐デコーダ２０８は、コール／リターンユニット２２２にプッシュ信号２８４をアサートし、コール／リターンユニット２２２はそれに応答して、ターゲットアドレス２６６を現在のコール／リターンスタック２５４にプッシュして、アドレスジェネレータ２０６に供給する。しかしながら、プログラム順の最初のローカル分岐命令がリターン命令である場合、分岐デコーダ２０８は、ポップ信号２８６をコール／リターンユニット２２２にアサートし、コール／リターンユニット２２２はそれに応答して、現在のコール／リターンスタック２５４からリターンアドレス２９８をポップして、アドレスジェネレータ２０６に提供する。フローはブロック３１４に進む。
【００４２】
ブロック３１４において、分岐デコーダ２０８は、フェッチ量子２９６内のどのマイクロコード命令がキュー２１２に書き込まれるべきかをマイクロコード命令キュー２１２に示す。より具体的には、上述したように、フェッチ量子２９６内のプログラム順の最初のローカル分岐命令までの（プログラム順の最初のローカル分岐命令が含まれない）マイクロコード命令のみがキュー２１２に書き込まれる。フローはブロック３１６に進む。
【００４３】
ブロック３１６において、分岐デコーダ２０８は、プログラム順の最初のローカル分岐命令（あれば）を解析し、フェッチアドレス２６８を解析されたプログラム順の最初のローカル分岐命令のターゲットアドレス２６６に更新する。そうでなければ、アドレスジェネレータ２０６はフェッチアドレス２６８を４だけインクリメントする。キュー２１２が満杯でない限り、フローはブロック３０２に戻り、次のフェッチ量子２９６をキュー２１２にフェッチする。
【００４４】
ここで図４を参照すると、図２のマイクロコードユニット１５６の動作を示すフローチャートが示されている。フローはブロック４０２で開始する。
【００４５】
ブロック４０２において、図３の動作と並行して、マイクロコード命令のフェッチ量子２９６がマイクロコードＲＯＭ２０２からフェッチされ、分岐デコーダ２０８によってデコードされ、ローカル分岐命令の場合に解析され、またキュー２１２に書き込まれる。キュー２１２が空でない限り、マイクロコードトランスレータ２１６は、マイクロコード命令をキュー２１２から読み出し、それらを実行パイプライン１９２に供給するためにマイクロ命令に変換する。フローはブロック４０２で終了する。
【００４６】
理解すべきは、本発明の様々な実施形態が本明細書に記載されているが、それらは限定ではなく例として提示されている。関連するコンピュータ技術の当業者には、本発明の範囲から逸脱することなく形態および詳細の様々な変更を行うことができることが明らかであろう。例えば、ソフトウェアは、例えば、本明細書に記載の装置および方法の機能、製造、モデリング、シミュレーション、記述および／または試験を可能にすることができる。これは、一般的なプログラミング言語（例えば、Ｃ、Ｃ＋＋）、ハードウェア記述言語（Ｈａｒｄｗａｒｅ  ｄｅｓｃｒｉｐｔｉｏｎ  ｌａｎｇｕａｇｅｓ，ＨＤＬ）、例えばＶｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬなど、または他の利用可能なプログラムを使用して達成することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、または光ディスク（例えば、ＣＤ-ＲＯＭ、ＤＶＤ-ＲＯＭなど）、ネットワーク、有線または他の通信媒体のような既知のコンピュータ使用可能媒体に配置することができる。本明細書に記載の装置および方法の実施形態は、集積回路の製造においてハードウェアに変換されるプロセッサコア（例えば、HDLに具現化、または指定される）などの半導体知的財産コアに含まれてもよい。さらに、本明細書で説明された装置および方法は、ハードウェアとソフトウェアとの組み合わせとして実施されてもよい。したがって、本発明は、本明細書に記載された例示的な実施形態のいずれによっても制限されるべきではなく、添付の特許請求の範囲およびそれらの均等物に従ってのみ定義されるべきである。具体的には、本発明は、汎用コンピュータで使用可能なプロセッサ装置内で実施することができる。最後に、当業者は、開示された概念および特定の実施形態を、添付の特許請求の範囲によって定義される本発明の範囲を逸脱することなく、本発明と同じ目的を実行するための他の構造を設計または修正するための基礎として容易に使用できることを理解すべきである。
【００４７】
本出願は、２０１６年９月３０日に出願されたＣＮ２０１６１０８７５６５８．６の優先権を主張し、本明細書でその内容を参照により援用する。
【図１】
2018060491.tif 000003
【図２】
2018060491.tif 000004
【図３】
2018060491.tif 000005
【図４】
2018060491.tif 000006
【外国語明細書】
2018060491000001.pdf