(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
複数の宛先レジスタ番号および複数の発信元レジスタ番号を受けるように結合されるマップユニットを含み、前記マップユニットは
前記複数の発信元レジスタ番号および前記複数の宛先レジスタ番号を受けるよう結合されるレジスタ走査ユニットを含み、前記レジスタ走査ユニットは複数の仮想レジスタ番号を割当てるように構成され、前記複数の仮想レジスタ番号の各々のものは、前記複数の発信元レジスタ番号の異なるものに対応し、前記複数の仮想レジスタ番号内のある特定の仮想レジスタ番号は、前記複数の発信元レジスタ番号内のある特定の発信元レジスタ番号に対応するある特定の物理レジスタ番号の発信元を識別しており、前記マップユニットはさらに
前記レジスタ走査ユニットに結合される仮想／物理レジスタマップユニットを含み、前記仮想／物理レジスタマップユニットは、前記ある特定の仮想レジスタ番号に応答して前記ある特定の物理レジスタ番号を前記ある特定の発信元レジスタ番号にマッピングするように構成される、プロセッサ。
【請求項２】
前記ある特定の仮想レジスタ番号は、前記ある特定の物理レジスタ番号の前記発信元を、（ｉ）前記複数の宛先レジスタ番号および前記複数の発信元レジスタ番号に対応する命令のラインの前に前記ある特定の発信元レジスタ番号によって特定される論理レジスタに対応する第１の物理レジスタ番号を記憶する先読みレジスタ状態記憶部と、（ii）命令動作の前記ライン内の前の発行位置とのいずれかとして識別する、請求項１に記載のプロセッサ。
【請求項３】
前記レジスタ走査ユニットは、前記ある特定の発信元レジスタ番号に対応するある特定の命令動作の前の命令動作の前記ライン内の１つ以上の命令動作が前記論理レジスタを更新しない場合に、前記先読みレジスタ状態記憶部を識別する前記ある特定の仮想レジスタ番号をもたらすように構成される、請求項２に記載のプロセッサ。
【請求項４】
前記レジスタ走査ユニットは、前記１つ以上の命令動作が前記論理レジスタを更新する場合に、前記前の発行位置を識別する前記ある特定の仮想レジスタ番号を割当てるように構成される、請求項３に記載のプロセッサ。
【請求項５】
前記レジスタ走査ユニットは、前記１つ以上の命令動作のうちの複数のものが前記論理レジスタを更新する場合に、前記ある特定の命令動作に最も近い前記前の発行位置を識別する前記ある特定の仮想レジスタ番号を割当てるように構成される、請求項４に記載のプロセッサ。
【請求項６】
前記マップユニットは、前記先読みレジスタ状態記憶部をさらに含み、前記先読みレジスタ状態記憶部は、前記プロセッサ内に設けられる各論理レジスタに対応する物理レジスタ番号を記憶するように構成され、前記物理レジスタ番号は、命令動作の前記ラインの前の前記論理レジスタに対応する、請求項５に記載のプロセッサ。
【請求項７】
前記マップユニットは、前記複数の宛先レジスタ指定子の各々に対応する宛先物理レジスタ番号を割当てるように構成される制御ユニットをさらに含み、前記制御ユニットは、前記レジスタ走査ユニットが前記複数の仮想レジスタ番号を割当てるのと並行して前記宛先物理レジスタ番号を割当てるように構成される、請求項６に記載のプロセッサ。
【請求項８】
前記マップユニットに結合される１つ以上の命令キューをさらに含み、前記制御ユニットはさらに、命令キュー番号を命令の前記ラインに割当てるように構成され、前記先読みレジスタ状態記憶部は、前記先読み状態記憶部に記憶される前記物理レジスタ番号によって識別される物理レジスタを更新する命令に対応する命令キュー番号を記憶するように構成され、前記仮想／物理レジスタマップユニットはさらに、前記ある特定の仮想レジスタ番号に応答してある特定の命令キュー番号を前記ある特定の発信元レジスタ番号にマッピングするように構成される、請求項７に記載のプロセッサ。
【請求項９】
前記レジスタ走査ユニットは、複数の走査ユニットを含み、前記複数の走査ユニットの各々のものは、命令動作の前記ライン内の異なる発行位置に対応しており、前記複数の走査ユニットの前記各々のものは、前記異なる発行位置内の前記命令動作の１つに対応する前記複数の発信元レジスタ番号のうちのいくつかのものおよび前記複数の宛先レジスタ番号のうちのいくつかのものを受けるように結合される、請求項２に記載のプロセッサ。
【請求項１０】
前記複数の走査ユニットのうちの第１のものは、最初の複数の仮想レジスタ番号を受けるように構成され、前記複数の仮想レジスタ番号の各々のものは前記プロセッサによってもたらされる前記論理レジスタの異なるものに対応する、請求項９に記載のプロセッサ。
【請求項１１】
前記複数の走査ユニットのうちの前記第１のものは、前記複数の走査ユニットのうちの前記第１のものによって受取られた前記複数の宛先レジスタ番号のうちの前記１つに応答して、前記最初の複数の仮想レジスタ番号のうちの１つを、命令動作の前記ライン内の第１の発行位置を示す仮想レジスタ番号で置換して、これによって第１の出力される複数の仮想レジスタ番号を形成するように構成される、請求項１０に記載のプロセッサ。
【請求項１２】
前記複数の走査ユニットのうちの第２のものは、前記複数の走査ユニットのうちの前記第２のものにより受取られる前記複数の発信元オペランドのうちの前記いくつかのものに対応する仮想レジスタ番号が選択されるところの入力される複数の仮想レジスタ番号として前記第１の出力される複数の仮想レジスタ番号を受けるように結合される、請求項１１に記載のプロセッサ。
【請求項１３】
前記複数の走査ユニットは直列に結合され、前記複数の走査ユニットの各々は、前記複数の走査ユニットのうちの後のものへの入力を形成する出力される複数の仮想レジスタ番号をもたらすように結合され、かつ前記複数の走査ユニットのうちの前のものから、入力される複数の仮想レジスタ番号を受けるように結合される、請求項１２に記載のプロセッサ。
【請求項１４】
前記直列結合における前記複数の走査ユニットのうちの最終のものからの前記出力される複数の仮想レジスタ番号は、前記先読みレジスタ状態記憶部のための次の仮想先読み状態を表わし、前記仮想／物理レジスタマップユニットは、前記次の仮想先読み状態に応答して前記先読みレジスタ状態記憶部において記憶するために次の先読みレジスタ状態を生成するように構成される、請求項１３に記載のプロセッサ。
【請求項１５】
物理レジスタ番号を命令動作の発信元オペランドに割当てるための方法であって、
仮想レジスタ番号を、論理レジスタ内の前記発信元オペランドを識別する発信元レジスタ番号に割当てるステップを含み、前記仮想レジスタ番号は前記物理レジスタ番号の発信元を識別しており、前記方法はさらに
前記仮想レジスタ番号に応答して前記物理レジスタ番号を前記発信元レジスタ番号にマッピングするステップを含む、方法。
【請求項１６】
前記物理レジスタ番号の前記発信元は、（ｉ）前記命令動作を含む命令のラインの前の前記論理レジスタに対応する第１の物理レジスタ番号を記憶する先読みレジスタ状態記憶部と、（ii）命令動作の前記ライン内の前の発行位置とのうちの１つを含む、請求項１５に記載の方法。
【請求項１７】
前記仮想レジスタ番号を割当てる前記ステップと並行して、第２の物理レジスタ番号を前記前の発行位置内の命令動作の宛先レジスタに割当てるステップをさらに含む、請求項１６に記載の方法。
【請求項１８】
前記割当てるステップは、複数の前の発行位置の各々を介して前記先読みレジスタ状態記憶部を識別する最初の仮想レジスタ番号を直列に走査するステップと、前記最初の仮想レジスタ番号を、前記宛先レジスタに応答して前記前の発行位置を識別する第２の仮想レジスタ番号で置換するステップとをさらに含む、請求項１７に記載の方法。
【請求項１９】
コンピュータシステムであって、
複数の仮想レジスタ番号を複数の発信元レジスタ番号に割当てるように構成されるプロセッサを含み、前記複数の仮想レジスタ番号の各々のものは、前記複数の発信元レジスタ番号の異なるものに対応しており、前記複数の仮想レジスタ番号内のある特定の仮想レジスタ番号は、前記複数の発信元レジスタ番号内のある特定の発信元レジスタ番号に対応するある特定の物理レジスタ番号の発信元を識別し、前記プロセッサは、前記ある特定の仮想レジスタ番号に応答して前記ある特定の物理レジスタ番号を前記ある特定の発信元レジスタ番号にマッピングするように構成されており、前記コンピュータシステムはさらに
前記プロセッサに結合される入出力（Ｉ／Ｏ）装置を含み、前記Ｉ／Ｏ装置は、前記コンピュータシステムと前記Ｉ／Ｏ装置が結合される第２のコンピュータシステムとの間で通信するように構成される、コンピュータシステム。
【請求項２０】
複数の仮想レジスタ番号を複数の発信元レジスタ番号に割当てるように構成される第２のプロセッサをさらに含み、前記複数の仮想レジスタ番号の各々のものは、前記複数の発信元レジスタ番号の異なるものに対応し、前記複数の仮想レジスタ番号内のある特定の仮想レジスタ番号は、前記複数の発信元レジスタ番号内のある特定の発信元レジスタ番号に対応するある特定の物理レジスタ番号の発信元を識別し、前記プロセッサは、前記ある特定の仮想レジスタ番号に応答して前記ある特定の物理レジスタ番号を前記ある特定の発信元レジスタ番号にマッピングするように構成される、請求項１９に記載のコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の分野】
この発明は、プロセッサの分野に関し、より特定的にはプロセッサのレジスタ再命名機能に関する。
【０００２】
【関連技術の説明】
ＵＳ−Ａ−５  ５４６  ５５４では、マッピングユニットに結合される命令を発行する命令ユニットを有するプロセッサが開示される。各命令は、レジスタに対応する少なくとも１つの仮想アドレスを含む。マッピングユニットは、命令を受け、各仮想レジスタアドレスに対してマップ値を生成する。仮想レジスタアドレスが命令の宛先レジスタアドレスとして用いられるたびに新しいマッピングが生成される。
ＥＰ−Ａ−０  ８５１  ３４３では、仮想レジスタおよび物理レジスタを含む浮動小数点命令を処理するためのシステムが開示される。このシステムは、仮想レジスタを物理レジスタにマッピングする参照表を含む。
ＥＰ−Ａ−０  ５１８  ４６９では、物理レジスタを論理レジスタと関連付けるための可視レジスタマップを有するデータ処理装置が開示される。レジスタ間の転送に関わる命令は、物理レジスタと論理レジスタとの関連付けを変更することによって実行される。命令は、論理識別子を物理レジスタ番号で置換することによって変更される。
ＥＰ−Ａ−０  ４６３  ６２８では、コンピュータパイプライン動作における正しい点において対応する物理ホームと論理レジスタとを関連付けることによるレジスタマッピングが開示される。
ＥＰ−Ａ−０  ７３０  ２２５では、物理アドレスを論理レジスタに対応するように割当て、かつ論理レジスタと別の物理レジスタとの前の関係を記憶する装置を含むマイクロプロセッサが開示される。これにより、装置が例外条件の際に後戻りすることが可能となる。
スーパースカラプロセッサにおいては、クロックサイクルごとに複数の命令を発行し実行し、かつ設計と一貫した可能な最高のクロック周波数を用いることによって高性能を達成することが試みられている。クロックサイクルごとに実行される命令の数を増加するための方法の１つは、「アウトオブオーダ」（out of order）実行である。アウトオブオーダ実行において、命令は、プログラムシーケンス（または「プログラム順序」）において特定されるものとは異なる順序において実行され得る。プログラムシーケンスにおいて互いに近いある命令は、それらの同時の実行を禁じる従属性を有しているかもしれず、他方では、プログラムシーケンスにおける後の命令は前の命令に対する従属性を有していないかもしれない。したがって、アウトオブオーダ実行により、（平均して）同時に実行される命令の数を増加することによってスーパースカラプロセッサの性能が向上し得る。
【０００３】
残念なことに、アウトオブオーダ実行では、プロセッサのハードウェアの複雑さがさらに増す。たとえば、プログラム順序において第１の命令の後の第２の命令は、第１の命令によって読出される記憶場所を更新することがある。換言すると、第２の命令の宛先オペランドが第１の命令の発信元オペランドの１つであり得る。適切にプログラムを実行するために、第１の命令は発信元オペランドとして、記憶場所に記憶された値を第２の命令の実行の前に受取らなければならない。同様に、第１および第２の命令が宛先オペランドとしてある特定の記憶場所を有している場合、第２の命令の結果は、第１および第２の命令の双方を実行した後に（かつ記憶場所を更新する第３の命令を実行する前に）記憶場所に記憶される値であるべきである。
【０００４】
一般的に、命令は１つ以上の発信元オペランドと１つ以上の宛先オペランドを有し得る。発信元オペランドは、（宛先オペランドである）１つ以上の結果を生成するために命令定義に従って操作すべき入力値である。発信元および宛先オペランドは、プロセッサの外部のメモリ場所に記憶されるメモリオペランドであるかもしれず、またはプロセッサ内に含まれるレジスタ場所に記憶されるレジスタオペランドであるかもしれない。プロセッサにより用いられる命令セットアーキテクチャはいくつかのアーキテクテッドレジスタを規定する。これらのレジスタは命令セットアーキテクチャにより、存在していることが規定され、命令はアーキテクテッドレジスタを発信元および宛先オペランドとして用いるようにコード化され得る。命令は、命令のオペランドフィールドにおけるレジスタ番号（またはレジスタアドレス）を介してある特定のレジスタを発信元または宛先オペランドとして特定する。レジスタ番号はアーキテクテッドレジスタのうちの選択されたレジスタを一意に識別する。発信元オペランドは発信元レジスタ番号によって識別され、宛先オペランドは宛先レジスタ番号によって識別される。
【０００５】
アーキテクテッドレジスタに加えて、いくつかのプロセッサは、命令実行の間に一時的な結果を保持するのに用いることができるさらなるマイクロアーキテクテッドレジスタを規定する。たとえば、いくつかのプロセッサはマイクロコーディング技法を用いて最も複雑な命令を取扱う。マイクロコードルーチンは、複雑な命令に応答して実行され、複数のより単純な命令を含む。マイクロコードルーチンは、複雑な命令を実行すると同時に一時的な結果を生じ得る。これらのマイクロアーキテクテッドレジスタ（または一時レジスタ）はさらなるレジスタ番号に割当てられ、一時レジスタをアーキテクテッドレジスタから一意に識別する。ここではアーキテクテッドレジスタと一時レジスタとは併せて論理レジスタと称する。
【０００６】
アウトオブオーダ実行を用いるプロセッサは、レジスタオペランドに関して上記のハザードを経験し得る。このようなハザードに対処するための方法はレジスタ再命名である。レジスタ再命名において、プロセッサは１セットの物理レジスタを実装する。物理レジスタの数は、プロセッサの命令セットアーキテクチャおよびマイクロアーキテクチャによって特定される論理レジスタの数より大きい。命令が発行されると、物理レジスタは命令の宛先レジスタオペランドに割当てられる。割当てられた物理レジスタを識別する物理レジスタ番号は各宛先オペランドに対して与えられ、どの物理レジスタが論理レジスタに対応するのかを示す指標はプロセッサによって維持される。論理レジスタを発信元オペランドとして有する後の命令には、適当な発信元オペランドを読出すための対応する物理レジスタ番号が与えられる。各命令の宛先オペランドを記憶するように異なる物理レジスタを割当てることによって、命令はその宛先オペランドを任意の順序で自由に更新することができるが、これは異なる物理記憶場所が更新されるからである。
【０００７】
残念なことに、物理レジスタ番号を宛先オペランド命令に割当て、これらの物理レジスタ番号を、その宛先オペランドを発信元オペランドとして有する後の命令に与えるプロセスは複雑かつ遅いものであり得る。スーパースカラプロセッサにおいて特に困難であるのは、命令の宛先オペランドへの物理レジスタ番号の割当てと、これらの命令と同時にレジスタ再命名ハードウェアを通過している後の従属する命令に物理レジスタ番号を与えること等である。より高い周波数で動作し、なおかつクロックサイクルごとに複数の命令の再命名を取扱うことのできるレジスタ再命名構造が望ましい。
【０００８】
レジスタ再命名は、命令が例外条件を経験する際に困難となる。ここで用いられる例外とは、後の命令を破棄することおよび命令フェッチが異なるアドレスで開始されることが必要となる命令の実行におけるエラーのことを指して言う。たとえば、分岐予測誤りは例外条件である。プロセッサは、分岐予測を行なって、条件付き分岐命令の後の命令を投機的にフェッチし、発行し、実行し得る。その予測が誤りである場合、分岐命令の後の命令は破棄され、分岐命令の実行に応じて命令がフェッチされる。さらなる例外条件には、メモリオペランドのアドレスに対するアドレス変換エラーおよび他のアーキテクチャ的またはマイクロアーキテクチャ的エラー条件が含まれ得る。
【０００９】
レジスタ再命名が、例外によって後で破棄される命令に適用されていることがあり得るため、論理レジスタの物理レジスタへのマッピングは、例外を経験している命令と一致する状態に回復しなければならない。言換えると、論理レジスタの物理レジスタへのマッピングは、（プログラム順序において）例外を経験している命令の前の命令の実行を反映しているべきであり、例外を経験している命令の後の命令の実行を反映すべきではない。例外に応答してフェッチされる命令が利用可能になるとすぐにレジスタ再命名ハードウェアを通過することができるように、レジスタ再命名マップの回復が迅速であることが望ましい。新しくフェッチされた命令がレジスタ再命名ハードウェアに到達した際にレジスタ再命名マップの回復が依然として行なわれている場合、新しくフェッチされた命令はレジスタ再命名マップが回復されるまで停止されなければならない。プロセッサの性能はこれによって損なわれる。
【００１０】
さらに、レジスタ再命名ハードウェアは一般的に、後の命令に対応する値に前に割当てられた物理レジスタを再利用するための機構を含む。物理レジスタを可能な限り効率よく用いるのが望ましく、また、一旦後の状態が対応する論理レジスタにコミットされた際に物理レジスタを自由にするための正確な方法を提供することが望ましい。
【００１１】
【発明の概要】
上述の課題は、レジスタ再命名ハードウェアを含むマップユニットを用いたプロセッサによってその大部分が解決される。
第１の局面によれば、この発明は、添付の請求項１に規定されるようなマップユニットを含むプロセッサを提供する。
【００１２】
一実施例では、マップユニットは、命令動作を走査して、ライン内従属性を検出することによって仮想レジスタ番号を発信元レジスタに割当てるように構成される。従属性が検出されなかった場合、現先読み状態を示す仮想レジスタ番号が割当てられる。従属性が検出されると、発信元レジスタが従属している発行位置を示す仮想レジスタ番号が割当てられる。その後、物理レジスタ番号が、仮想レジスタ番号に応答する発信元レジスタ番号にマッピングされる。一実装例では、仮想レジスタ番号の割当てと仮想レジスタ番号の物理レジスタ番号へのマッピングとは別個のパイプラインステージにおいて行なわれる。このため、レジスタ再命名機構はより高いクロック周波数において動作可能となり得る。プロセッサの性能は、より高いクロック周波数が達成可能である程度まで向上することができる。
説明されるマップユニットの実施例は、レジスタ再命名機構の性能および効率を向上するためにさまざまな技法を用いる。
第２の局面によれば、この発明は、添付の請求項１５に規定されるように、物理レジスタ番号を命令動作の発信元オペランドに割当てるための方法を提供する。
【００１５】
概して、プロセッサが考慮される。プロセッサは、レジスタ走査ユニットおよび仮想／物理レジスタマップユニットを含むマップユニットを含む。マップユニットは、複数の宛先レジスタ番号および複数の発信元レジスタ番号を受けるように結合される。複数の発信元レジスタ番号および複数の宛先レジスタ番号を受けるように結合されるレジスタ走査ユニットは、複数の仮想レジスタ番号を割当てるように構成される。複数の仮想レジスタ番号の各々のものは複数の発信元レジスタ番号のそれぞれ異なるものに対応する。さらに、複数の仮想レジスタ番号内のある特定の仮想レジスタ番号は、複数の発信元レジスタ番号内のある特定の発信元レジスタ番号に対応するある特定の物理レジスタ番号の発信元を識別する。レジスタ走査ユニットに結合される仮想／物理レジスタマップユニットは、ある特定の物理レジスタ番号をある特定の仮想レジスタ番号に応答してある特定の発信元レジスタ番号にマッピングするように構成される。
【００１６】
さらに、物理レジスタ番号を命令動作の発信元オペランドに割当てるための方法が考慮される。仮想レジスタ番号は、論理レジスタ内の発信元オペランドを識別する発信元レジスタ番号に割当てられる。仮想レジスタ番号は物理レジスタ番号の発信元を識別する。物理レジスタ番号は、仮想レジスタ番号に応答して発信元レジスタ番号にマッピングされる。
【００１７】
また、コンピュータシステムが考慮される。コンピュータシステムは、プロセッサおよび入出力（Ｉ／Ｏ）装置を含む。プロセッサは、複数の仮想レジスタ番号を複数の発信元レジスタ番号に割当てるように構成される。複数の仮想レジスタ番号の各々のものは複数の発信元レジスタ番号のそれぞれ異なるものに対応する。複数の仮想レジスタ番号内のある特定の仮想レジスタ番号は、複数の発信元レジスタ番号内のある特定の発信元レジスタ番号に対応するある特定の物理レジスタ番号の発信元を識別する。さらに、プロセッサは、ある特定の物理レジスタ番号を、ある特定の仮想レジスタ番号に応答してある特定の発信元レジスタ番号にマッピングするように構成される。プロセッサに結合されるＩ／Ｏ装置は、コンピュータシステムとＩ／Ｏ装置が結合される第２のコンピュータシステムとの間で通信するように構成される。
【００１８】
この発明の他の目的および利点は、以下の詳細な説明を読み、添付の図面を参照することにより明らかになるであろう。
【００１９】
【詳細な説明】
この発明はさまざまな変更および代替の形態の影響を受け得るが、その特定の実施例が図面において例によって示され、ここに詳細に説明される。しかしながら、その図面および詳細な説明は、この発明を、開示される特定の形態に限定することが意図されるものではなく、むしろ、添付の請求の範囲によって規定されるこの発明の精神および範囲内に含まれるすべての変更、均等物および代替例を網羅することが意図される。
【００２０】
図１を参照して、プロセッサ１０の一実施例のブロック図が示される。他の実施例も可能であり考慮される。図１の実施例において、プロセッサ１０はラインプレディクタ（predictor）１２、命令キャッシュ（Ｉキャッシュ）１４、アライメントユニット１６、分岐履歴テーブル１８、間接アドレスキャッシュ２０、戻りスタック２２、復号ユニット２４、プレディクタミス復号ユニット２６、マイクロコードユニット２８、マップユニット３０、マップサイロ３２、アーキテクチャ的再命名ブロック３４、一対の命令キュー３６Ａ−３６Ｂ、一対のレジスタファイル３８１−３８Ｂ、一対の実行コア４０Ａ−４０Ｂ、ロード／ストアユニット４２、データキャッシュ（Ｄキャッシュ）４４、外部インターフェイスユニット４６、ＰＣサイロおよびリダイレクトユニット４８ならびに命令ＴＬＢ（ＩＴＢ）５０を含む。ラインプレディクタ１２は、ＩＴＢ５０、プレディクタミス復号ユニット２６、分岐履歴テーブル１８、間接アドレスキャッシュ２０、戻りスタック２２、ＰＣサイロおよびリダイレクトブロック４８、アライメントユニット１６ならびにＩキャッシュ１４に接続される。Ｉキャッシュ１４はアライメントユニット１６に接続される。アライメントユニット１６はさらに、プレディクタミス復号ユニット２６および復号ユニット２４に接続される。復号ユニット２４はさらに、マイクロコードユニット２８およびマップユニット３０に接続される。マップユニット３０は、マップサイロ３２と、アーキテクチャ的再命名ブロック３４と、命令キュー３６Ａ−３６Ｂと、ロード／ストアユニット４２と、実行コア４０Ａ−４０Ｂと、ＰＣサイロおよびリダイレクトブロック４８とに接続される。命令キュー３６Ａ−３６Ｂは互いに接続され、かつ、それぞれ対応の実行コア４０Ａ−４０Ｂおよびレジスタファイル３８Ａ−３８Ｂに接続される。レジスタファイル３８Ａ−３８Ｂは互いに接続され、かつそれぞれ対応の実行コア４０Ａ−４０Ｂに接続される。実行コア４０Ａ−４０Ｂはさらに、ロード／ストアユニット４２と、データキャッシュ４４と、ＰＣサイロおよびリダイレクトユニット４８とに接続される。ロード／ストアユニット４２は、ＰＣサイロおよびリダイレクトユニット４８と、Ｄキャッシュ４４と、外部インターフェイスユニット４６とに接続される。Ｄキャッシュ４４はレジスタファイル３８に接続され、外部インターフェイスユニット４６は外部インターフェイス５２に接続される。ここで文字が後に続く参照番号によって示される要素は、参照番号のみによって集合的に示される。たとえば、命令キュー３６Ａ−３６Ｂは集合的に命令キュー３６と称することにする。
【００２１】
図１の実施例において、プロセッサ１０は、可変バイト長、複雑命令セット計算（ＣＩＳＣ）命令セットアーキテクチャを用いる。たとえば、プロセッサ１０は、ｘ８６命令セットアーキテクチャ（ＩＡ−３２とも称される）を用いてもよい。他の実施例では、固定長命令セットアーキテクチャおよび簡約化命令セット計算（ＲＩＳＣ）命令セットアーキテクチャを含む他の命令セットアーキテクチャを用いてもよい。図１に示される特徴のいくつかはそのようなアーキテクチャにおいては省いてもよい。
【００２２】
ラインプレディクタ１２は、Ｉキャッシュ１４のためのフェッチアドレスを生成するように構成され、さらに、命令動作のラインに関する情報をアライメントユニット１６に与えるように構成される。一般的に、ラインプレディクタ１２は、プロセッサ１０によって前に投機的にフェッチされた命令動作のラインと、ラインのフェッチの際に選択すべき各ラインに対応する１つ以上の次のフェッチアドレスとを記憶する。一実施例では、ラインプレディクタ１２は、１Ｋエントリを記憶するよう構成され、その各々は命令動作の１つのラインを規定する。ラインプレディクタ１２は、たとえば２５６エントリの４つのバンクにバンク分けされてもよく、その各々は所望であれば二重ポート（dual porting）なしに同時読出および更新を可能にするものである。
【００２３】
ラインプレディクタ１２は、次のフェッチアドレスをＩキャッシュ１４に与え、対応する命令バイトをフェッチするようにする。Ｉキャッシュ１４は、命令バイトを記憶するための高速キャッシュメモリである。一実施例によれば、Ｉキャッシュ１４は、たとえば、６４バイトキャッシュラインを用いる２５６キロバイトの四重セット連想編成（four way set associative organization）を含んでいてもよい。しかしながら、どのＩキャッシュ構造でも適当であろう。さらに、次のフェッチアドレスは入力としてラインプレディクタ１２に戻され、命令動作の対応するラインに関する情報をフェッチするようにする。次のフェッチアドレスは、ＰＣサイロおよびリダイレクトユニット４８に報告される例外条件に応答してＩＴＢ５０により与えられるアドレスによってオーバライドされ得る。
【００２４】
ラインプレディクタによって与えられる次のフェッチアドレスは、（ラインが非分岐命令で終わる場合）ライン内の最終命令に連続するアドレスであり得る。代わりに、次のフェッチアドレスは、ラインの終わりにくる分岐命令のターゲットアドレスであってもよい。さらに別の選択肢では、ラインは戻り命令によって終わっていてもよく、この場合には次のフェッチアドレスは戻りスタック２２から引出される。
【００２５】
フェッチアドレスに応答して、ラインプレディクタ１２は、フェッチアドレスにおいて始まる命令動作のラインに関する情報をアライメントユニット１６に与える。アライメントユニット１６は、Ｉキャッシュ１４からフェッチアドレスに対応する命令バイトを受け、与えられた命令動作情報に応じて命令バイトを選択して１セットの発行位置とする。より特定的には、ラインプレディクタ１２は、ライン命令動作内の各命令に対してシフト量をもたらし、かつ、ラインを構成する命令動作のセットに命令をマッピングする。１つの命令は複数の命令動作に対応していてもよく、このため、その命令に対応するシフト量は命令バイトを選択して複数の発行位置にするよう用いられてもよい。１つの発行位置は、ライン内の各々の可能な命令動作に対して与えられる。一実施例では、命令動作のラインは、最大６の命令に対応する最大８の命令動作を含み得る。一般的に、ここで用いられるように、命令動作のラインとは、復号ユニット２４に同時に発行される命令動作の一群を指して言う。命令動作のラインは、マイクロプロセッサ１０のパイプラインを通して１ユニットとしての命令キュー３６へと進む。命令キュー３６に記憶される際、個別の命令動作はいかなる順序で実行されてもよい。
【００２６】
復号ユニット２４（および、命令キュー３６までの後のパイプラインステージ）内の発行位置は、これらのパイプラインステージ内のハードウェアのためのライン内の命令動作のプログラム順序を規定する。アライメントユニット１６によって発行位置に位置合わせされる命令動作は、命令キュー３６Ａ−３６Ｂ内に記憶されるまでその発行位置に留まる。したがって、第１の発行場所は、第１の発行場所内の命令動作がプログラム順序において同時に第２の発行位置内にある命令動作の前である場合に、第２の発行場所の前のものとして言及され得る。同様に、第１の発行場所は、第１の発行場所内の命令動作がプログラム順序において同時に第２の発行場所内にある命令動作の後である場合に、第２の発行場所の後のものとして言及され得る。また、発行場所内の命令動作は、ライン内の他の命令動作の前であるまたは後であるとして言及され得る。
【００２７】
ここで用いられるように、命令動作（またはＲＯＰ）は、実行コア４０Ａ−４０Ｂ内の実行ユニットが単一のエンティティとして実行するように構成されるところの動作のことである。単純な命令は単一の命令動作に対応し得るが、より複雑な命令は複数の命令動作に対応し得る。より複雑な命令のいくつかは、マイクロコードユニット２８内でマイクロコードルーチンとして実現されてもよい。さらに、非ＣＩＳＣ命令セットを用いる実施例では、各命令に対して単一の命令動作を用いてもよい（すなわち、命令と命令動作とはこのような実施例においては同義であり得る）。ある特定の一実施例では、ラインは、最大６の命令に対応する最大８の命令動作を含み得る。さらに、そのある特定の実施例では、分岐命令が検出されるとラインを６の命令および／または８の命令動作未満で終わらせることがある。要望に応じて、ラインに対する命令動作に関するさらなる制限を行なってもよい。
【００２８】
ラインプレディクタ１２によって生成された次のフェッチアドレスは、分岐履歴テーブル１８、間接アドレスキャッシュ２０および戻りスタック２２に経路付けられる。分岐履歴テーブル１８は、次のフェッチアドレスによって識別されるラインを終わらせ得る条件付き分岐命令に対する分岐履歴をもたらす。ラインプレディクタ１２は、分岐履歴テーブル１８により与えられる予測を用いて、ラインを終わらせる条件付き分岐命令がテークン（taken）として予測されるべきであるかまたはノットテークン（not taken）として予測されるべきかを判定してもよい。一実施例では、ラインプレディクタ１２は、テークンまたはノットテークンを選択するよう用いるべき分岐予測を記憶していてもよく、分岐履歴テーブル１８は、ラインプレディクタの予測を打消しかつ異なる次のフェッチアドレスが選択されるようにし得る、より正確な予測をもたらすのに用いられる。間接アドレスキャッシュ２０は、頻繁に変わる間接分岐ターゲットアドレスを予測するのに用いられる。ラインプレディクタ１２は、次のフェッチアドレスとして、前に生成された間接ターゲットアドレスを記憶してもよい。間接アドレスキャッシュ２０は、対応するラインが間接分岐命令によって終わる場合にはラインプレディクタ１２によって与えられる次のフェッチアドレスをオーバライドしてもよい。さらに、命令動作のライン内の最終命令の後のアドレスは、そのラインがサブルーチン呼出し命令によって終わる場合には戻りスタック２２にプッシュされてもよい。戻りスタック２２は、その一番上に記憶されるアドレスを、戻り命令によって終わるラインに対する潜在的な次のフェッチアドレスとしてラインプレディクタ１２に与える。
【００２９】
次のフェッチアドレスおよび命令動作情報を上記のブロックに与えることに加えて、ラインプレディクタ１２は、次のフェッチアドレスおよび命令動作情報をＰＣサイロおよびリダイレクトユニット４８に与えるように構成される。ＰＣサイロおよびリダイレクトユニット４８は、フェッチアドレスおよびライン情報を記憶し、例外の際に命令フェッチをリダイレクトすることおよび命令の順序正しいリタイアメントを行なうことの責任がある。ＰＣサイロおよびリダイレクトユニット４８は、プロセッサ１０内で未決着（outstanding）であり得る命令動作の複数のラインに対応するフェッチアドレスおよび命令動作情報を記憶するための循環バッファ（circular buffer）を含んでいてもよい。命令のラインをリタイアする際、ＰＣサイロおよびリダイレクトユニット４８は、それぞれ、条件付き分岐および間接分岐の実行に応じて分岐履歴テーブル１８および間接アドレスキャッシュ２０を更新してもよい。例外を処理する際、ＰＣサイロおよびリダイレクトユニット４８は、例外を起こす命令の後の戻りスタック２２からのエントリをパージしてもよい。また、ＰＣサイロおよびリダイレクトユニット４８は、例外を起こす命令の指標をマップユニット３０、命令キュー３６およびロード／ストアユニット４２に経路付け、これによって、これらのユニットが例外を起こす命令の後の命令を取消し、かつこれに応じて投機的状態を回復し得るようにする。
【００３０】
一実施例では、ＰＣサイロおよびリダイレクトユニット４８は、各命令動作にシーケンス番号（Ｒ♯）を割当て、プロセッサ１０内で未決着である命令動作の順序を識別する。ＰＣサイロおよびリダイレクトユニット４８は、ラインを有する各々の可能な命令動作にＲ♯を割当ててもよい。ラインが最大数の命令動作より少ない数を含んでいる場合、割当てられたＲ♯のいくつかはそのラインに対して用いられないことになる。しかしながら、ＰＣサイロおよびリダイレクトユニット４８は、Ｒ♯の次のセットを命令動作の次のラインに割当てるように構成されていてもよく、これによって、割当てられたが使用されていないＲ♯が、命令動作の対応するラインがリタイアされるまで使用されないままとなる。この態様で、所与のラインに割当てられるＲ♯の一部は、プロセッサ１０内のラインを識別するように用いられ得る。一実施例では、最大８のＲＯＰがラインに割付けられ得る。したがって、各ライン内の第１のＲＯＰには、８の倍数であるＲ♯が割当てられ得る。使用されないＲ♯は、適宜自動的にスキップされる。
【００３１】
前述の説明では、ラインプレディクタ１２が次のアドレスを予測し、命令動作のラインに対する命令動作情報を与えることを説明した。この動作は、各フェッチアドレスがラインプレディクタ１２においてヒットする限り行なわれる。ラインプレディクタ１２においてミスが検出された際には、アライメントユニット１６は対応する命令バイトをＩキャッシュ１４からプレディクタミス復号ユニット２６に経路付ける。プレディクタミス復号ユニット２６は、欠けているフェッチアドレスによって特定されるオフセットにおいて始まる命令を復号化し、命令動作のラインおよび次のフェッチアドレスを生成する。プレディクタミス復号ユニット２６は、プロセッサ１０がその目的で設計されているところのどんな制限をも命令動作のラインに強要する（たとえば、命令動作の最大数、命令の最大数、分岐命令に対する終了など）。あるラインの復号化を完了する際、プレディクタミス復号ユニット２６は、その情報をラインプレディクタ１２に記憶するため与える。プレディクタミス復号ユニット２６が、命令が復号化されるにつれ命令をディスパッチするように構成されてもよいことに注意されたい。代わりに、プレディクタミス復号ユニット２６は、命令情報のラインを復号化して、これをラインプレディクタ１２に記憶するため与えてもよい。その後、欠けているフェッチアドレスはラインプレディクタ１２において再度試みられ、ヒットが検出されることもある。さらに、ラインプレディクタ１２におけるヒットが検出され、Ｉキャッシュ１４におけるミスが起こることがある。対応する命令バイトは外部インターフェイスユニット４６を介してフェッチされ、Ｉキャッシュ１４に記憶されてもよい。
【００３２】
一実施例では、ラインプレディクタ１２およびＩキャッシュ１４は物理アドレス指定（physical addressing）を用いる。しかしながら、例外を検出した際に、ＰＣサイロおよびリダイレクトユニット４８は論理（または仮想）アドレスが供給されることになる。したがって、リダイレクトアドレスは、ラインプレディクタ１２への表示のためにＩＴＢ５０によって変換される。また、ＰＣサイロおよびリダイレクトユニット４８は、相対分岐ターゲットアドレスなどＰＣ相対計算において用いるための仮想先読みＰＣ値を維持する。各ラインに対応する仮想先読みＰＣは、ＩＴＢ５０によって変換され、対応する物理アドレスがラインプレディクタ１２によって生成される物理フェッチアドレスと一致することを確認する。不一致が起こった場合、ラインプレディクタ１２は正しい物理アドレスで更新され、正しい命令がフェッチされる。ＰＣサイロおよびリダイレクトユニット４８はさらに、保護境界などを超えたフェッチに関連する例外を取扱う。ＰＣサイロおよびリダイレクトユニット４８はまた、最も最近リタイアされた命令のアドレスを示すリタイアＰＣ値を維持する。
【００３３】
復号ユニット２４は、上述のとおり、複数の発行位置においてアライメントユニット１６から命令動作を受けるように構成される。復号ユニット２４は、並列して各発行位置に位置合わせされる命令バイトを復号化する（命令バイトに対応するどの命令動作がある特定の発行位置において生成されるべきであるかということを示す指標とともに）。復号ユニット２４は、各命令動作に対して発信元および宛先オペランドを識別し、実行コア４０Ａ−４０Ｂによって用いられる命令動作符号化を生成する。また、復号ユニット２４は、マイクロコードで実現される命令に対してマイクロコードユニット２８からマイクロコードルーチンをフェッチするように構成される。
【００３４】
ある特定の一実施例によれば、プロセッサ１０により以下の命令動作が支援されている。すなわち、整数、浮動小数点加算（マルチメディアを含む）、浮動小数点乗算（マルチメディアを含む）、分岐、ロード、ストアアドレス生成およびストアデータである。各命令動作は、最大で２つの発信元レジスタオペランドおよび１つの宛先レジスタオペランドを用い得る。ある特定の一実施例によれば、単一の宛先レジスタオペランドが整数ＲＯＰに割当てられ、整数結果および条件コード（condition code）（またはフラグ）更新の双方を記憶するようにしてもよい。対応する論理レジスタはともに、整数動作のリタイアメントの際に対応するＰＲ♯を受けることになる。ある命令は、同じタイプの２つの命令動作を生成して２つの宛先レジスタを更新し得る（たとえば、ＥＳＰおよび特定された宛先レジスタを更新するＲＯＰ）。
【００３５】
復号化された命令動作と発信元および宛先レジスタ番号とはマップユニット３０に与えられる。マップユニット３０は、各命令動作の各々の宛先レジスタオペランドおよび発信元レジスタオペランドに物理レジスタ番号（ＰＲ♯）を割当てることによってレジスタ再命名を行なうように構成される。物理レジスタ番号はレジスタファイル３８Ａ−３８Ｂ内のレジスタを識別する。さらに、マップユニット３０は各命令動作にキュー番号（ＩＱ♯）を割当て、命令動作を記憶するよう割当てられる命令キュー３６Ａ−３６Ｂ内の場所を識別する。マップユニット３０はさらに、命令動作の発信元オペランドに割当てられる各物理レジスタ番号を更新する命令のキュー番号を与えることによって各命令動作に対する従属性の指標をもたらす。マップユニット３０は、物理レジスタ番号および命令により、マップサイロ３２を、各命令動作に割当てられる番号（および対応する論理レジスタ番号）に更新する。さらに、マップサイロ３２は、命令のラインの前の論理レジスタに対応する先読み状態と、ＰＣサイロに関する命令のラインを識別するＲ♯とを記憶するように構成されてもよい。上述のＰＣサイロと同様に、マップサイロ３２は、エントリの循環バッファを含んでいてもよい。各エントリは、命令動作の１ラインに対応する情報を記憶するように構成されていてもよい。
【００３６】
マップユニット３０およびマップサイロ３２はさらに、ＰＣサイロ４８からリタイア指標を受けるように構成される。命令動作のラインをリタイアする際、マップサイロ３２は、ラインに割当てられる宛先物理レジスタ番号および対応する論理レジスタ番号をアーキテクチャ的再命名ブロック３４に伝達して記憶するようにする。アーキテクチャ的再命名ブロック３４は、各論理レジスタに対応する物理レジスタ番号を記憶し、各論理レジスタに対するコミットされたレジスタ状態を表わす。新しい物理レジスタ番号での対応する論理レジスタの更新の際にアーキテクチャ的再命名ブロック３４から変位される物理レジスタ番号は、後の命令への割付のために物理レジスタ番号の自由リストに戻される。一実施例では、物理レジスタ番号を自由リストに戻す前に、その物理レジスタ番号はアーキテクチャ的再命名ブロック３４内の残っている物理レジスタ番号と比較される。ある物理レジスタ番号が変位された後にも依然としてアーキテクチャ的再命名ブロック３４内に表わされている場合、その物理レジスタ番号は自由リストに追加されない。このような実施例は、同じ物理レジスタ番号が１つより多い命令の結果を記憶するよう用いられる場合に用いてもよい。たとえば、ｘ８６命令セットアーキテクチャを用いる実施例では、浮動小数点オペランドを記憶するのに十分大きい物理レジスタをもたらしてもよい。このように、どんな物理レジスタをも、いかなるタイプのオペランドを記憶するのにも用いることができる。しかしながら、整数オペランドおよび条件コードオペランドは所与の物理レジスタ内の空間を完全に利用しない。そのような実施例では、プロセッサ１０は、ある命令の整数結果および条件コード結果の双方を記憶するように単一の物理レジスタを割当ててもよい。物理レジスタに対応する条件コード結果を上書きする命令の後のリタイアメントによって同じ整数レジスタが更新されないこともあるため、物理レジスタは新しい条件コード結果をコミットする際に自由でないかもしれない。同様に、物理レジスタに対応する整数レジスタを更新する命令の後のリタイアメントにより、条件コードレジスタが更新されないこともあり、このため、物理レジスタは新しい整数結果をコミットする際に自由ではないかもしれない。
【００３７】
さらに、マップユニット３０およびマップサイロ３２は、ＰＣサイロ４８から例外指標を受けるように構成される。例外を起こす命令動作を含むラインの後の命令動作のラインは、マップサイロ３２内で無効として印付けされる。命令動作の後のラインに対応する物理レジスタ番号は、リタイアメントのための対応するラインの選択の際に自由にされる（アーキテクチャ的再命名ブロック３４は無効化された宛先レジスタで更新されない）。さらに、マップユニット３０によって維持される先読みレジスタ状態は、例外を起こす命令に対応する先読みレジスタ状態に復元される。
【００３８】
命令動作のライン、発信元物理レジスタ番号、発信元キュー番号および宛先物理レジスタ番号は、マップユニット３０によって割当てられるキュー番号に従って命令キュー３６Ａ−３６Ｂに記憶される。一実施例によれば、命令キュー３６Ａ−３６Ｂは対称であり、いかなる命令をも記憶できる。さらに、ある特定の命令動作に対する従属性は、いずれかの命令キューに記憶される他の命令動作に関して起こり得る。マップユニット３０はたとえば、命令動作のラインを命令キュー３６Ａ−３６Ｂのうちの一方に記憶し、その後に続く命令動作のラインを命令キュー３６Ａ−３６Ｂの他方に記憶し得る。命令動作は、少なくとも、命令動作が従属している前の命令動作が実行されレジスタファイル３８Ａ−３８Ｂを更新するまで命令キュー３６Ａ−３６Ｂ内に残る（そして命令動作は実行のためスケジュールされる）。一実施例では、命令動作はリタイアされるまで命令キュー３６Ａ−３６Ｂ内に残る。
【００３９】
命令キュー３６Ａ−３６Ｂは、ある特定の命令動作を実行のためにスケジュールする際に、そのある特定の命令動作がどのクロックサイクルにおいてレジスタファイル３８Ａ−３８Ｂを更新することになるのかを定める。実行コア４０Ａ−４０Ｂ内の異なる実行ユニットが異なる数のパイプラインステージ（よって異なるレイテンシ）を用い得る。さらに、ある命令は他のものよりパイプライン内でより長いレイテンシを経験し得る。したがって、（クロックサイクルの数で）ある特定の命令動作に対するレイテンシを測定するカウントダウンが生成される。命令キュー３６Ａ−３６Ｂは、更新が起こるまで、特定された数のクロックサイクルだけ待ち、次に、そのある特定の命令動作に従属している命令動作をスケジュールしてもよいことを示す。各命令キュー３６Ａ−３６Ｂは、その命令キュー内の命令動作に対するカウントダウンを維持し、カウントダウンの満了の際に従属する命令動作をスケジュールすることを内部で許す。さらに、命令キューは、カウントダウンの満了の際に他方の命令キューに指標を与える。その後、他方の命令キューは従属する命令動作をスケジュールすることができる。このような他方の命令キューへの命令動作完了の送信を遅延することにより、レジスタファイル３８Ａ−３８Ｂが、実行コア４０Ａ−４０Ｂの一方により与えられる結果を他方のレジスタファイルに伝搬することが可能となる。レジスタファイル３８Ａ−３８Ｂの各々は、プロセッサ１０によって用いられる物理レジスタのセットを実装しており、実行コア４０Ａ−４０Ｂの一方によって更新される。この更新は次に、他方のレジスタファイルに伝搬される。命令キュー３６Ａ−３６Ｂは、ある命令を一旦その従属性が満足された（すなわちキュー内のその順序に関してアウトオブオーダである）際にスケジュールし得ることに注意されたい。
【００４０】
命令キュー３６Ａからスケジュールされる命令動作は、レジスタファイル３８Ａからの発信元物理レジスタ番号に従って発信元オペランドを読出し、実行のために実行コア４０Ａに伝達される。実行コア４０Ａは、命令動作を実行し、レジスタファイル３８Ａ内の宛先に割当てられる物理レジスタを更新する。命令動作によっては宛先レジスタを有しておらず、実行コア４０Ａはこの場合には宛先物理レジスタを更新しない。さらに、実行コア４０Ａは命令動作のＲ♯および（もしあれば）命令動作に関する例外情報をＰＣサイロおよびリダイレクトユニット４８に報告する。命令キュー３６Ｂ、レジスタファイル３８Ｂおよび実行コア４０Ｂも同様に動作し得る。
【００４１】
一実施例では、実行コア４０Ａおよび実行コア４０Ｂは対称のものである。各実行コア４０はたとえば、浮動小数点加算ユニット、浮動小数点乗算ユニット、２つの整数ユニット、分岐ユニット、ロードアドレス生成ユニット、ストアアドレス生成ユニットおよびストアデータユニットを含んでいてもよい。実行ユニットの他の構成も可能である。
【００４２】
宛先レジスタを有さない命令動作には、ストアアドレス生成、ストアデータ動作および分岐動作がある。ストアアドレス／ストアデータ動作は、ロード／ストアユニット４２に結果をもたらす。ロード／ストアユニット４２は、メモリデータ動作を行なうためにＤキャッシュ４４にインターフェイスをもたらす。実行コア４０Ａ−４０Ｂは、命令のアドレスオペランドに基づいて、それぞれ、ロードＲＯＰおよびストアアドレスＲＯＰを実行してロードおよびストアアドレスを生成する。より特定的には、ロードアドレスおよびストアアドレスは、その生成の際に（直接、実行コア４０Ａ−４０ＢとＤキャッシュ４４との接続を介して）実行コア４０Ａ−４０ＢによってＤキャッシュ４４に与えられてもよい。Ｄキャッシュ４４をヒットするロードアドレスにより、データがＤキャッシュ４４からレジスタファイル３８に経路づけられることにつながる。一方、ヒットするストアアドレスはストアキューエントリを割付けられる。その後、ストアデータがストアデータ命令動作（これはストアデータをレジスタファイル３８Ａ−３８Ｂからロード／ストアユニット４２へ経路づけるのに用いられる）によりもたらされる。ストア命令がリタイアされる際、データはＤキャッシュ４４内に記憶される。また、ロード／ストアユニット４２は、（外部インターフェイス４６を介して）後のキャッシュフィールのためにＤキャッシュ４４をミスするロード／ストアアドレスを記憶し、かつ欠けているロード／ストア動作を再度試みるためのロード／ストアバッファを含んでいてもよい。ロード／ストアユニット４２はさらに、ロード／ストアメモリ従属性を取扱うよう構成される。
【００４３】
次に、図２を参照して、マップユニット３０、マップサイロ３２およびアーキテクチャ的再命名ブロック３４の一実施例のブロック図が、プロセッサ１０の一実施例によるその間の相互接続を強調して示される。要望に応じて、付加的な、置換のまたはより少ない相互接続を用いる他の実施例も可能であり考慮される。
【００４４】
復号ユニット２４は、ＲＯＰ情報バス６０に接続され、ＲＯＰ情報バス６０はさらに、マップユニット３０およびマップサイロ３２の双方に接続される。命令動作のライン（またはＲＯＰのライン）に関する情報が復号ユニット２４によってＲＯＰ情報バス６０上にもたらされる。ライン内の各ＲＯＰに対し、復号ユニット２４は少なくとも以下のもの、すなわち、有効指標と、ＲＯＰが宛先レジスタを書込むかどうかの指標と、Ｒ♯と、論理宛先レジスタ番号と、論理発信元レジスタ番号（最大２まで）をもたらす。マップユニット３０は宛先ＩＱ♯を各ＲＯＰに割当て、宛先ＰＲ♯を宛先レジスタを書込む各ＲＯＰに割当てる。マップユニット３０は、割当てられたＰＲ♯およびＩＱ♯をマップサイロ３２へ宛先ＰＲ♯／ＩＱ♯バス６２上に与える。さらに、マップユニット３０は、現先読みレジスタ状態をマップサイロ３２へ現先読みレジスタ状態バス６４上に与える。一般的に、「先読みレジスタ状態」という術語は、プログラムシーケンスの実行におけるある特定の時点において（すなわち、プログラムシーケンスにおけるそのある特定の時点の前の各命令を実行した後およびプログラムシーケンスにおけるそのある特定の時点の後の各命令を実行する前）論理レジスタの状態（すなわちその中に記憶される値）を識別することを指して言う。現先読みレジスタ状態は、マップユニット３０によって処理されているＲＯＰのラインの前の論理レジスタに対応する物理レジスタのセットを識別する。換言すると、現先読みレジスタ状態は、各論理レジスタに対応する物理レジスタ番号を記憶する。さらに、本実施例において、現先読みレジスタ状態は、識別される物理レジスタを更新する命令のＩＱ♯と、ＩＱ♯が依然として有効であるか（すなわち命令がまだリタイアされていないか）を示す有効ビットとを含む。マップサイロ３２は、ＲＯＰのラインに対するエントリを割付け、現先読みレジスタ状態およびマップユニット３０によって与えられる割当てられたＰＲ♯およびＩＱ♯を記憶する。また、マップサイロ３０は、どのＲＯＰが有効であり、どのＲＯＰが論理レジスタを更新し、どの論理レジスタがＲＯＰ情報バス６０からのこれらのＲＯＰによって更新されるかを捕捉してもよい。例示的なマップサイロエントリが以下に示される（図９）。
【００４５】
一般的に、ここで言及される「サイロ」は、命令、命令動作または命令動作のラインに対応する情報を記憶するための構造である。サイロは情報をプログラム順序に保ち、命令がプログラム順序においてリタイアされるにつれ（例外条件がない場合）情報はサイロの一番上（または末端）からサイロの一番下（またはヘッド）へと論理的に移動する。ここで用いられるように、命令がリタイアされるのは、命令の結果がアーキテクチャ的状態にコミットされる際である（たとえば、命令の宛先に割当てられる物理レジスタ番号によりアーキテクチャ的再命名ブロック３４の更新を可能にすることによって、または命令に対応するストアデータによりＤキャッシュ４４の更新を可能にすることによって）。
【００４６】
マップサイロ３２は、リタイア有効ライン６６上のリタイア有効信号と、例外情報バス６８上の例外有効指標およびＲ♯とを受けるよう接続される。リタイア有効ライン６６および例外情報バス６８はＰＣサイロ４８に接続される。アサートされたリタイア有効信号に応答して、マップサイロ３２は、サイロのヘッドにおけるエントリからアーキテクチャ的再命名ブロック３４へリタイアレジスタ／ＰＲ♯バス７０上に、リタイアされたレジスタ情報を与える。より特定的には、リタイアレジスタ／ＰＲ♯バス７０は、更新すべき論理レジスタ番号および対応する物理レジスタ番号を伝達してもよい。本実施例では、ＲＯＰのリタイアメントは完全なラインに対して同時に起こる（すなわち、ＰＣサイロ４８は、マップサイロ３２およびＰＣサイロ４８のヘッドにおけるライン内の各ＲＯＰが一旦実行するのに成功するとリタイアメントを信号で知らせる）。したがって、本実施例では最も古いラインをリタイアするための信号が用いられてもよい。他の実施例では、部分的リタイアメントに備えていてもよく、または個別の命令動作を介して記憶を編成してもよく、この場合、リタイアメントは命令動作などによって起こり得る。
【００４７】
アーキテクチャ的再命名ブロック３４は、リタイアレジスタ／ＰＲ♯バス７０上の特定される論理レジスタに対応するエントリを更新する前に、これらの論理レジスタに対応する現物理レジスタ番号を読出す。換言すると、アーキテクチャ的再命名ブロック３４から変位されている物理レジスタ番号（「前の物理レジスタ番号」）は、アーキテクチャ的再命名ブロック３４からポップされる。アーキテクチャ的再命名ブロック３４は、前のＰＲ♯を前のＰＲ♯バス７２上にもたらし、前のＰＲ♯バス７２はマップユニット３０に接続され、リタイアレジスタ／ＰＲ♯バス７０上にもたらされるＰＲ♯により、特定された論理レジスタエントリを更新する。
【００４８】
一般的に、前のＰＲ♯は、ＰＲ♯の自由リストに追加される資格がある（また、後のＲＯＰの宛先レジスタへの割当の資格がある）。しかしながら、本実施例では、プロセッサ１０は、物理レジスタ共用技術を用いて、物理レジスタ使用の効率を向上する。たとえば、物理レジスタは、整数値および条件コード値（またはフラグ値）の双方を記憶するよう割当てられてもよい。物理レジスタ記憶部のある部分は整数値を記憶し、別の部分は条件コード値を記憶する。したがって、たとえば、ＰＲ♯が割当てられた整数レジスタの更新の際に前のＰＲ♯がポップされた際に、ＰＲ♯はその中に記憶される条件コードを依然として表わし得る（またその逆もある）。アーキテクチャ的再命名ブロック３４は、前のＰＲ♯を更新されたアーキテクチャ的状態と比較して、どのレジスタが実際に自由にされる資格があるのかを判定する（図２において、ＰＲ♯を前のＰＲ♯バス７２から捕捉し、捕捉された番号をアーキテクチャ的再命名ブロック３４に戻すレジスタ７５によって表わされるが、他の実施例では１つのクロックサイクルにおいて更新および比較が行なわれてもよい）。たとえば、アーキテクチャ的再命名ブロック３４は、論理レジスタに対応するＰＲ♯を記憶するために連想メモリ（ＣＡＭ：content addressable memory）を用いてもよい。アーキテクチャ的再命名ブロック３４は、前のＰＲ♯バス７２上に伝達される各ＰＲ♯に対応してカム一致バス７４上にカム一致信号を伝達してもよい。マップユニット３０は、対応するカム一致信号がアサートされていない場合には前のＰＲ♯バス７２上に特定されるレジスタを自由にしてもよい。有利には、物理レジスタ使用はより効率のよいものであってもよく、なおかつ物理レジスタは正確に自由にされてもよい。他の考慮される実施例では、別個の物理レジスタが、命令動作に応答して更新される各論理レジスタに割当てられてもよいことに注意されたい。
【００４９】
前のＰＲ♯がアーキテクチャ的再命名ブロック３４からポップされる際に自由にされない場合には、前のＰＲ♯によって依然として表わされている論理レジスタを更新する命令のその後のリタイアメントによって、前のＰＲ♯の自由化につながり得ることに注意されたい。その後のリタイアメントの際、カム一致は検出されないかもしれない。
【００５０】
ここで用いられるように、物理レジスタが「自由」であるのは、再命名ハードウェアによって処理されている命令の宛先オペランドへの割当に利用可能である場合である。本実施例では、物理レジスタは、物理レジスタが割当てられる論理レジスタを更新する後の命令のリタイアメントの際に自由にされる。他の実施例では代替の態様でレジスタを自由にしてもよい。
【００５１】
あるライン内の１つ以上の命令動作が同じ論理レジスタを更新し得ることに注意されたい。したがって、マップサイロ３２またはアーキテクチャ的再命名ブロック３４のうちの１つが、論理を含みリタイアされる論理レジスタを走査して各論理レジスタに対する最も古い更新を識別し（すなわち、プログラム順序において最終の更新）、その最も古い更新に対応する物理レジスタ番号をアーキテクチャ的再命名ブロック３４に記憶する。より新しい更新は、上述の態様と同様に自由にされてもよい（すなわち、カムされ、一致が起こらなければ自由にされる）。
【００５２】
マップサイロ３２はまたＰＣサイロ４８から例外指標を受けてもよい。ＰＣサイロ４８は、例外有効信号をアサートし、例外を経験している命令動作のＲ♯をマップサイロ３２に例外情報バス６８を介して与えてもよい。マップサイロ３２は、（ライン内の各ＲＯＰに対して一定であるＲ♯の部分を用いて）例外を経験している命令動作を含むＲＯＰのラインに対応するサイロエントリを選択する。マップサイロ３２は、選択されたエントリ内に記憶される現先読みレジスタ状態をマップユニット３０へ回復先読みレジスタ状態バス７６上に与える。マップユニット３０は先読みレジスタ状態を回復された状態に復元する。さらに、マップサイロ３２は、ライン内の、例外を経験するＲＯＰの前の、ＲＯＰの論理レジスタ番号、ＰＲ♯およびＩＱ♯をもたらす。マップユニット３０は、もたらされたＰＲ♯およびＩＱ♯により、復元された先読み状態を更新する。有利には、先読み状態は迅速に回復される。例外条件に応答してフェッチされる命令は、再命名の迅速な回復によりマップユニット３０に到達する際に再命名されてもよい。
【００５３】
さらに、例外に応答して、この例外を経験するＲＯＰに続いてＲＯＰに割当てられた物理レジスタは自由にされる。マップサイロ３２は、マップユニット３０への自由ＰＲ♯バス７８上で自由にされるＰＲ♯を伝達する。一実施例では、マップサイロ３２は、自由にされるＰＲ♯を１クロックサイクルごとに１ラインの割合で与えるよう構成され得る。さらに、物理レジスタが割当てられたＲＯＰはリタイアされなかったので、物理レジスタは、カムするためにアーキテクチャ的再命名ブロック３２に伝達される必要はない。
【００５４】
ここで図３を参照して、マップユニット３０の一実施例のブロック図が示される。他の実施例も可能であり、企図される。図３の実施例では、マップユニット３０は、レジスタ走査ユニット８０、ＩＱ♯／ＰＲ♯制御ユニット８２、先読みレジスタ状態８４、仮想／物理レジスタマップユニット８６、自由リスト制御ユニット８８および自由リストレジスタ９０を含む。レジスタ走査ユニット８０は、バス６０Ａ（図２に示すＲＯＰ情報バス６０の一部）により復号ユニット２４から発信元および宛先レジスタ番号（および各々に対する有効指標）を受けるよう接続される。レジスタ走査ユニット８０は、宛先レジスタ番号および発信元仮想レジスタ番号を仮想／物理レジスタマップユニット８６に伝えるよう構成される。ＩＱ♯／ＰＲ♯制御ユニット８２はバス６０Ｂ（図２に示すＲＯＰ情報バス６０の一部）に接続され、宛先レジスタ番号およびその宛先レジスタ番号に対応する有効指標を受ける。命令キュー３６Ａおよび３６Ｂは末端ポインタバス９２により末端ポインタを与え、各キューのいずれのエントリが現在そのキューの末端であるかを示す。さらに、ＩＱ♯／ＰＲ♯制御ユニット８２は宛先ＰＲ♯／ＩＱ♯バス６２に接続される。仮想／物理レジスタマップユニット８６は、回復先読みレジスタ状態バス７６、および先読みレジスタ状態８４に接続され、これはさらに現先読みレジスタ状態バス６４に接続される。またさらに、仮想／物理レジスタマップユニット８６は、命令キュー３６Ａおよび３６Ｂへの発信元／宛先ＰＲ♯およびＩＱ♯バス９４によってライン内の各ＲＯＰに対して発信元ＰＲ♯、発信元ＩＱ♯、宛先ＰＲ♯およびＩＱ♯を与えるよう接続される。自由リスト制御ユニット８８は次の自由ＰＲ♯バス９６および割当てられたＰＲ♯バス９９を介してＩＱ♯／ＰＲ♯制御ユニット８２に接続され、かつ自由リストレジスタ９０に接続される。さらに、自由リスト制御ユニット８８は前のＰＲ♯バス７２、カム一致バス７４、および自由ＰＲ♯バス７８に接続される。
【００５５】
図３の実施例では、マップユニット３０は２段階のパイプライン設計を用いてレジスタの再命名を行なう。第１段階では、レジスタ走査ユニット８０が仮想レジスタ番号を各発信元レジスタに割当てる。並行して、ＩＱ♯／ＰＲ♯制御ユニット８２はＩＱ♯を（命令キュー３６Ａおよび３６Ｂによって与えられた末端ポインタに基づいて）各ＲＯＰに割当て、ＰＲ♯を宛先レジスタを有するＲＯＰに割当てる。第２段階では、仮想／物理レジスタマップユニット８６は仮想レジスタ番号を物理レジスタ番号に（現先読み状態および割り当てられたＰＲ♯に基づいて）マッピングし、ＩＱ♯／ＰＲ♯制御ユニット８２によって割当てられた物理レジスタ番号を対応のＲＯＰの発行位置に経路づけする。
【００５６】
レジスタ走査ユニット８０によって割当てられた仮想レジスタ番号は、物理レジスタ番号に対する発信元を識別する。たとえば、本実施例では、発信元レジスタに対応する物理レジスタ番号は先読みレジスタ状態８４（前にマップユニット３０により処理されたＲＯＰのラインに対応する更新を反映するもの）か、ＲＯＰのライン内の前の発行位置（前のＲＯＰの宛先オペランドが発信元オペランドと同じ、すなわちライン内従属性が存在する場合）のいずれかから引出され得る。言換えれば、発信元レジスタ番号に対応する物理レジスタ番号は、ライン内従属性が検出されない限り、先読みレジスタ状態８４により維持される物理レジスタ番号である。レジスタ走査ユニット８０はライン内従属性検査を効果的に行なう。他の実施例により、所望に応じて他の発信元オペランドの発信元を与えることもできる。
【００５７】
物理レジスタ番号のマッピングからのライン内従属性検査／宛先物理レジスタ割当てを複数のパイプライン段階に分けることにより、各段階はより高い周波数で動作され得る。したがって、図３に示すマップユニット３０の実施例は、発信元物理レジスタ番号の決定と並行してライン内従属性検査および宛先物理レジスタ割当てを行なう他の実施例と比べて、より高い周波数で動作することが可能である。仮想レジスタ番号を用いることにより、機能の分離が可能になり、また図８を参照して以下に説明するように、発信元物理レジスタ番号の比較的簡単かつ効率的なマッピングが可能になる。
【００５８】
ＩＱ♯／ＰＲ♯制御ユニット８２は、命令キュー３６Ａおよび３６Ｂのうち１つの末端ポインタで始まる命令キュー番号を割当てる。言換えれば、ライン内の第１のＲＯＰは選択された命令キューの末端ポインタをＩＱ♯として受け、その他のＲＯＰは末端ポインタから増加する順にＩＱ♯を受ける。制御ユニット８２はあるライン内のＲＯＰの各々を同じ命令キュー３６Ａおよび３６Ｂに割当て、ＲＯＰの次のラインを他の命令キュー３６Ａおよび３６Ｂに割付ける。制御ユニット８２は命令キュー３６Ａおよび３６Ｂに割付けられたＲＯＰの番号の指標をＲＯＰ割付けバス９８を介して伝達する。これにより、受ける側の命令キューは、そのキューに対するＲＯＰの割付けを反映するようにその末端ポインタを更新し得る。
【００５９】
制御ユニット８２は自由リスト制御ユニット８８から自由ＰＲ♯のセットを受ける。この自由ＰＲ♯のセットは、命令動作のライン内の宛先レジスタに割当てられる。一実施例では、プロセッサ１０は論理レジスタの更新数を１ラインから４ライン内に制限する（すなわち、プレディクタミス復号ユニット２６が５番目の論理レジスタの更新に遭遇すると、ラインはその前の命令において終わる）。したがって、自由リスト制御ユニット８８は自由リスト９０から４つのＰＲ♯を選択し、その選択されたレジスタを次の自由ＰＲ♯バス９６によって制御ユニット８２に伝達する。制御ユニット８２は、割当てられたＰＲ♯バス９９を介していずれのＰＲ♯が実際に割当てられたかということで応答し、自由リスト制御ユニット８８は割当てられた物理レジスタをこの自由リストから削除する。他の実施例では、ライン内の更新の数に対してさまざまな制限が採用され、これは全く制限されないもの（すなわち各ＲＯＰが更新され得るもの）も含み得る。
【００６０】
自由リスト制御ユニット８８は、物理レジスタの自由化を管理し、かつ後の命令に割当てるためにレジスタを選択するよう構成される。自由リストレジスタ９０は、たとえば、各物理レジスタに対応するあるビットを記憶し得る。このビットがセットされていると、対応するレジスタが自由にされる。このビットがクリアされていると、対応するレジスタは現在割当てられている（すなわち自由でない）ということである。自由リスト制御ユニット８８は自由リストを走査し、制御ユニット８２に伝達するためのレジスタを選択する。たとえば、自由リスト制御ユニット８８は自由リストレジスタ９０の各端部から初めの２つの自由レジスタについて走査し、本実施例において設けられた４つのレジスタの迅速な選択を可能にし得る。これらの走査は、各端部からの２つのピック・ワン動作（pick one operations)（他方の前に行なわれ、割当てられた物理レジスタを自由リストから取除く動作）として行なわれ得る。
【００６１】
自由リスト制御ユニット８８は前のＰＲ♯バス７２を介してアーキテクチャ的再命名ブロック３４からポップされた前の物理レジスタ番号を受ける。その後、前の物理レジスタ番号の各々に対応するカム一致信号がカム一致バス７４上で受けられる。対応のカム一致信号がデアサートされる、前のＰＲ♯の各々が、自由リスト制御ユニット８８によって自由リストに加えられる。さらに、自由ＰＲ♯バス７８上で受けられた物理レジスタ番号は無条件で自由リストに加えられる。
【００６２】
先読みレジスタ状態８４は、仮想／物理レジスタマップユニット８６に呈されるＲＯＰのラインに対応する更新の前に、先読みレジスタ状態に記憶される。より具体的には、先読みレジスタ状態８４が、各論理レジスタに対応する物理レジスタ番号と、（本実施例では）宛先レジスタとして割当てられた物理レジスタ番号を有するＲＯＰに対応する命令キュー番号とを記憶する。各クロックサイクルで、先読みレジスタ状態８４は現先読みレジスタ状態を現先読みレジスタ状態バス６４によりマップサイロ３２に伝達する。仮想／物理レジスタマップユニット８６は、ＰＲ♯の発信元が先読みレジスタ状態８４であることを示す仮想レジスタ番号を有する各発信元レジスタに対して先読みレジスタ状態８４により示されるような対応の論理レジスタのＰＲ♯およびＩＱ♯を供給する。仮想レジスタ番号が前の発行位置を示す発信元レジスタには、制御ユニット８２により割当てられた対応のＰＲ♯およびＩＱ♯が供給される。さらに、仮想／物理レジスタマップユニット８６は、ＲＯＰのラインによって特定された論理宛先レジスタと制御ユニット８２により割当てられた宛先ＰＲ♯／ＩＱ♯とに従って、先読みレジスタ状態８４を更新する。
【００６３】
仮想／物理レジスタマップユニット８６はさらに、例外条件（上記）に応答して、回復先読みレジスタ状態バス７６上でマップサイロ３２により与えられる回復先読みレジスタ状態を受けるよう構成される。仮想／物理レジスタマップユニット８６は、レジスタ走査ユニット８０およびＩＱ♯／ＰＲ♯制御ユニット８２からの入力に従って生成された次の先読みレジスタ状態をマップサイロ３２により与えられた回復先読み状態でオーバライドし得る。
【００６４】
なお、本実施例では、ＩＱ♯は各発信元オペランドに対して経路づけされ、いずれの命令キューエントリに対応のＲＯＰが従属しているかを示す。命令キュー３６Ａおよび３６Ｂは、対応する命令キューエントリにおけるＲＯＰの完了を待った後、従属ＲＯＰをスケジュールして実行する。
【００６５】
次に図４を参照して、レジスタ走査ユニット８０の一実施例を表わすブロック図が示される。他の実施例も可能であり企図される。図４の実施例では、レジスタ走査ユニット８０は、ＲＯＰのライン内の各発行位置に対応する走査ユニットを含む。たとえば、本実施例は、８つの発行位置に対応する８つの走査ユニット１００Ａ〜１００Ｈを含む（これより多いものまたは少ないものも実現され得るが）。走査ユニット１００Ａ〜１００Ｈは仮想先読みレジスタ状態を伝えるための連続鎖として、また発信元および宛先レジスタ番号を受けるよう並列で接続される。
【００６６】
各走査ユニット１００Ａ〜１００Ｈは、図３に示すＲＯＰバス６０Ａの一部に接続される。より具体的には、各走査ユニット１００Ａ〜１００Ｈは、対応する発行位置におけるＲＯＰの発信元および宛先レジスタ番号を受けるように接続される。したがって、バス６０ＡＡは走査ユニット１００Ａに接続され、発行位置ゼロ（すなわちＲＯＰのライン内のプログラム順序で１番目のＲＯＰ）に対して発信元および宛先レジスタ番号を与える。同様に、バス６０ＡＢは走査ユニット１００Ｂに接続され、発行位置１に対して発信元および宛先レジスタ番号を与える。その他のバス６０ＡＣ〜６０ＡＨは、図示したように、順に残りの発行位置に対応する発信元および宛先レジスタ番号を与える。各走査ユニット１００Ａ〜１００Ｈは、各発信元レジスタに対して発信元仮想レジスタ番号を与えるように構成され、この番号は後で仮想／物理レジスタマップユニット８６に伝えられる。
【００６７】
走査ユニット１００Ａは仮想現先読みレジスタ状態を受けるように結合される。この仮想現先読みレジスタ状態は、各論理レジスタに対応する仮想レジスタ番号を含む。仮想現先読み状態内の仮想レジスタ番号は、ＰＲ♯（およびＩＱ♯）の発信元が先読みレジスタ状態８４であることを示す。ｘ８６命令セットアーキテクチャを採用する一実施例において、たとえば、先読みレジスタ状態８４は、アーキテクテッド整数レジスタに対応する８つのレジスタと、条件コードビットの群（群分けは、さまざまな命令によってどれが更新されるかに従って選択され、たとえばＯビットを１つの群とし、Ｃビットを別の群、さらにＺ，Ａ，ＰおよびＳビットを第３の群とする）に対応する３つのレジスタと、アーキテクテッド浮動小数点／ＭＭＸレジスタに対応する８つのレジスタと、浮動小数点条件コードレジスタに対応する１つのレジスタと、一時マイクロコードレジスタに対応する８つのレジスタとを含む。
【００６８】
走査ユニット１００Ａは発信元レジスタ番号に基づいて仮想現先読みレジスタ状態からの発信元仮想レジスタ番号を割当てる。さらに、発行位置ゼロのＲＯＰが宛先レジスタを更新すると、走査ユニット１００Ａは対応する論理宛先レジスタに対して新しい仮想レジスタ番号を挿入することにより仮想現先読み状態を更新する。この新しい仮想レジスタ番号は、対応する論理レジスタについてのＰＲ♯およびＩＱ♯の発信元が発行位置ゼロであることを示す。元の仮想レジスタ番号の代わりに新しい仮想レジスタ番号が挿入された更新先読みレジスタ状態が、走査ユニット１００Ｂに伝えられる。
【００６９】
走査ユニット１００Ｂは走査ユニット１００Ａから更新された先読みレジスタ状態を受取り、更新された先読みレジスタ状態からの仮想レジスタ番号を発信元レジスタ番号に割当てる。さらに、走査ユニット１００Ｂは、発行位置１におけるＲＯＰが論理レジスタを更新すると、走査ユニット１００Ａにより与えられる更新された先読みレジスタ状態へ発行位置１を示す新しい仮想レジスタ番号を挿入する。走査ユニット１００Ｃ〜１００Ｈもまた同様に、先行する走査ユニットにより与えられる更新された先読みレジスタ状態に応答して、発行位置３〜８におけるＲＯＰの発信元レジスタに対してそれぞれ仮想レジスタ番号を割当て、宛先レジスタ番号がもしあればそれに従って、更新先読みレジスタ状態を更新する。
【００７０】
したがって、ライン内の前のＲＯＰがＲＯＰの発信元レジスタ番号により特定された論理レジスタを更新すると、前の発行位置を示す仮想レジスタ番号が割当てられる。そうでなければ、対応する論理レジスタについての現先読みレジスタ状態を示す仮想レジスタ番号が割当てられる。言換えれば、前の命令ラインに従属する（現先読みレジスタ状態を介した）ライン内従属は、仮想レジスタ番号により示される。
【００７１】
走査ユニット１００Ｈにより与えられたこの更新先読みレジスタ状態は次の仮想先読みレジスタ状態であり、これは、走査ユニット１００Ａ〜１００Ｈの各々により与えられる発信元仮想レジスタ番号および宛先レジスタ番号とともに、仮想／物理レジスタマップユニット８６に伝達される。仮想／物理レジスタマップユニット８６はその後、ＲＯＰの後のラインに対して先読みレジスタ状態８４を更新するために、ＲＯＰのラインに対応する次の先読みレジスタ状態を生成し得る。
【００７２】
なお、一実施例では、走査ユニット１００Ａ〜１００Ｆの各々は、整数レジスタ、一時レジスタおよび条件コードレジスタを取扱う整数／一時走査回路と、浮動小数点レジスタおよび浮動小数点条件コードレジスタを取扱う浮動小数点走査回路とを含む。したがって、各発信元および宛先レジスタが浮動小数点レジスタであるか整数レジスタであるかの指標は、レジスタ番号とともに経路づけられ、また、どの仮想レジスタ番号をレジスタに割当てるか、または新しい仮想レジスタ番号で置換えるかを決定するのに用いられる。
【００７３】
次に図５を参照して、仮想レジスタ番号の符号化の例を表わす表１０２が示される。他の符号化も可能であり、企図される。具体的には、たとえば、表１０２に示す最上位ビット（ＭＳＢ）の論理状態は表に示すものから反転され得る。また他の符号化も同様に可能である。
【００７４】
表１０２は仮想レジスタ番号の符号化を表わし、ここでＭＳＢが、対応するＰＲ♯／ＩＱ♯に対する発信元が先読みレジスタ状態８４によって維持される現先読み状態であるか、ライン内の前の発行位置に割当てられた宛先ＰＲ♯／ＩＱ♯であるかを決定する。たとえば、ＭＳＢがクリアされていれば、仮想レジスタ番号は発信元が現先読み状態であることと、仮想レジスタ番号の最下位ビット（ＬＳＢ）は現先読み状態内の論理レジスタ番号であることとを示している。ＭＳＢがセットされていると、仮想レジスタ番号は発信元が前の発行位置であることを示している。この場合のＬＳＢは前の発行位置番号となる。
【００７５】
表１０２に示す符号化を採用する一実施例では、走査ユニット１００Ａに与えられた仮想現先読み状態は、ＭＳＢがクリアされており、与えられる対応の論理レジスタ番号がＬＳＢである、符号化を含む。走査ユニット１００Ａ〜１００Ｈにより更新先読みレジスタ状態中に挿入された新たな仮想レジスタ番号は、ＭＳＢがセットされており、挿入する走査ユニットに対応する発行位置番号がＬＳＢで与えられる、符号化を含む。
【００７６】
次に図６を参照して、走査ユニット１００Ａ〜１００Ｈの各々の一実施例において採用され得る、整数／一時走査回路１１０の一実施例の一部が示される。他の実施例も可能であり、企図される。図６の実施例では、対応するＲＯＰの宛先レジスタ番号は宛先バス１１２によって伝達され、対応するＲＯＰの第１の発信元（ＳＲＣ１）レジスタ番号はＳＲＣ１バス１１４により伝達され、また対応するＲＯＰの第２の発信元（ＳＲＣ２）レジスタ番号はＳＲＣ２バス１１６により伝達される。バス１１２、１１４および１１６はバス６０Ａの一部を含み、（たとえば、整数／一時走査回路１１０が走査ユニット１００Ａの一部であれば、バス１１２、１１４および１１６はバス６０ＡＡの部分となる）。宛先バス１１２は複数の宛先識別子ユニット（たとえば図６に示すユニット１１８Ａおよび１１８Ｂ）に接続される。宛先識別子ユニット１１８Ａおよび１１８Ｂの各々は伝達／書込（pass/write）制御ユニット（たとえば宛先識別子ユニット１１８Ａおよび１１８Ｂにそれぞれ接続された伝達／書込制御ユニット１２０Ａおよび１２０Ｂ）に接続される。各伝達制御ユニット１２０Ａおよび１２０Ｂはさらに、先行する走査ユニット１００Ａ〜１００Ｈにより与えられた仮想レジスタ入力と、後続の走査ユニット１００Ａ〜１００Ｈへの仮想レジスタ出力とに接続される（たとえば、伝達／書込制御ユニット１２０Ａは仮想ＥＡＸ入力バス１２２Ａおよび仮想ＥＡＸ出力バス１２４Ａに接続され、伝達／書込制御ユニット１２０Ｂは仮想ＥＢＸ入力バス１２２Ｂおよび仮想ＥＢＸ出力バス１２４Ｂに接続される）。さらに、ＳＲＣ１バス１１４は、複数のＳＲＣ１識別子ユニット（たとえば図６に示すＳＲＣ１識別子ユニット１２６Ａおよび１２６Ｂ）に接続される。ＳＲＣ２バス１１６は、同様に、複数のＳＲＣ２識別子ユニット（たとえば図６に示すＳＲＣ２識別子ユニット１２８Ａおよび１２８Ｂ）に接続される。ＳＲＣ１／ＳＲＣ２識別子ユニット１２６Ａおよび１２６Ｂまたは１２８Ａおよび１２８Ｂの各々は、図６に示す対応のスイッチ１３０Ａから１３０Ｄのイネーブル制御に接続される。スイッチ１３０Ａおよび１３０Ｂは仮想ＥＡＸ入力バス１２２Ａに接続された入力を有し、一方スイッチ１３０Ｃおよび１３０Ｄは仮想ＥＢＸ入力バス１２２Ｂに接続された入力を有する。スイッチ１３０Ａおよび１３０ＣはＳＲＣ１仮想レジスタバス１３２Ａに接続された出力を有し、一方スイッチ１３０Ｂおよび１３０ＤはＳＲＣ２仮想レジスタバス１３２Ｂに接続された出力を有する。
【００７７】
通常、整数／一時走査回路１１０は対応の発行位置におけるＲＯＰの整数／一時発信元レジスタに対して仮想レジスタ番号を割当て、対応する発行位置における整数宛先レジスタに対して新たな仮想レジスタ番号を挿入する。宛先識別子ユニット、伝達／書込制御ユニット、ＳＲＣ１識別子ユニットおよびＳＲＣ２識別子ユニットは、論理整数、一時または条件コードレジスタの１つに対応する。たとえば、宛先識別子ユニット１１８Ａ、伝達／書込制御ユニット１２０Ａ、ＳＲＣ１識別子ユニット１２６ＡおよびＳＲＣ２識別子ユニット１２８ＡはＥＡＸレジスタに対応する。同様に、宛先識別子ユニット１１８Ｂ、伝達／書込制御ユニット１２０Ｂ、ＳＲＣ１識別子ユニット１２６ＢおよびＳＲＣ２識別子ユニット１２８ＢはＥＢＸレジスタに対応する。宛先識別子ユニット、伝達／書込制御ユニット、ＳＲＣ１識別子ユニットおよびＳＲＣ２識別子ユニットの他のセット（図示せず）は、論理整数レジスタ、一時レジスタまたは条件コードレジスタの他のものに対応する。以下に、ＥＡＸレジスタハードウェアについて述べる。ＥＢＸレジスタハードウェアはＥＢＸレジスタと同様に動作し、他の同様のハードウェア（図示せず）は残りのレジスタに対して同様に動作する。
【００７８】
宛先識別子ユニット１１８Ａは宛先レジスタバス１１２上の宛先レジスタ番号がＥＡＸレジスタを選択するか否かを判定する。したがって、宛先識別子ユニット１１８ＡはＥＡＸが選択されたか否かを判定するために宛先レジスタ番号を復号化し、この復号化は、宛先レジスタ番号が有効であると示す有効信号と、宛先レジスタ番号が整数／一時／条件コードレジスタである（すなわち浮動小数点レジスタではない）ことを示す整数信号とで分類される（qualified)。宛先レジスタがＥＡＸレジスタであれば、宛先識別子ユニット１１８Ａは伝達／書込制御ユニット１２０Ａに信号で知らせ、整数／一時走査回路１１０が仮想ＥＡＸ出力バス１２４Ａ上で採用される発行位置に対応する仮想レジスタ番号を挿入する。そうでなければ、宛先識別子ユニット１１８Ａは伝達／書込制御ユニット１２０Ａに、仮想ＥＡＸ入力バス１２２Ａにより仮想ＥＡＸ出力バス１２４Ａへと与えられた仮想レジスタ番号を伝えるよう信号で知らせる。
【００７９】
同様に、ＳＲＣ１識別子ユニット１２６Ａは、ＳＲＣ１レジスタバス１１４上のＳＲＣ１レジスタ番号がＥＡＸが選択されたか否かを判定するためにＳＲＣ１レジスタ番号を復号化し、かつこの復号化を、ＳＲＣ１レジスタ番号が有効であることを示す有効信号とＳＲＣ１レジスタ番号が整数／一時／条件コードレジスタであることを示す整数信号とで分類することにより、ＳＲＣ１レジスタバス１１４上のＳＲＣ１レジスタ番号がＥＡＸレジスタを選択するか否かを決定する。ＥＡＸがＳＲＣ１であると選択されると、ＳＲＣ１識別子ユニット１２６Ａはスイッチ１３０Ａを活性化し、仮想ＥＡＸ入力バス１２２ＡによりＳＲＣ１仮想レジスタバス１３２Ａ上に与えられる仮想レジスタ番号を駆動する。ＳＲＣ識別子ユニット１２８ＡはＳＲＣ１識別子ユニット１２６Ａと同様であるが、ＳＲＣ２レジスタバス１１６上に与えられたＳＲＣ２レジスタ番号において動作し、これに応じてＳＲＣ２仮想レジスタバス１３２Ｂを駆動するようにまたは駆動しないようにスイッチ１３０Ｂを制御する。
【００８０】
この形式で、更新先読み状態が次の走査ユニットへ（１２４Ａおよび１２４Ｂなどの仮想出力バスを介して）伝えられることができ、また発信元仮想レジスタ番号が（ＳＲＣ１仮想レジスタバス１３２ＡおよびＳＲＣ２レジスタ番号バス１３２Ｂを介して）割当てられ得る。なお、整数／一時走査回路１１０は、仮想整数／一時入力の各々を伝達／書込制御ユニット１２０Ａ（および他の伝達／書込制御ユニット）に経路づけることにより、レジスタ間の移動演算（move operations）を取扱うように変更され得る。現発行位置におけるＲＯＰがレジスタ間の移動であることを示すために、さらなる信号が送られ得る。ＳＲＣ１レジスタ番号および移動信号（move signal）に応答して、ＳＲＣ１レジスタ番号に対応する仮想整数／一時入力は、宛先レジスタに対応する仮想整数／一時出力へと経路づけられる。さらに、対応する発行位置におけるＲＯＰは命令キュー３６Ａおよび３６Ｂへ伝達することが禁止され（たとえばその有効ビットがリセットされ）、これは、発信元仮想レジスタ番号を宛先仮想レジスタ番号として経路づけることによりこの移動が達成されるからである。このような実施例において、リタイアした物理レジスタを自由にする前にそれらをカムすることにより、宛先ＰＲ♯を不注意で早く自由化してしまうのを防ぐことができる。
【００８１】
ここで図７を参照して、走査ユニット１００Ａ〜１００Ｈの各々の一実施例において採用され得る、浮動小数点走査回路１４０の一実施例の一部が示される。この他の実施例も可能であり、企図される。走査回路１４０は、整数／一時操作回路１１０と同様、ＳＲＣ１レジスタバス１１４およびＳＲＣ２レジスタバス１１６を受け、ＳＲＣ１仮想レジスタバス１３２ＡおよびＳＲＣ２仮想レジスタバス１３２Ｂ上で仮想レジスタ番号を駆動し得る。図７に示す部分は仮想ｓｔＩ入力（ｘ８６命令セットアーキテクチャにおいて規定されたｓｔ０〜ｓｔ７のレジスタのうちの１つであり、０＜Ｉ＜７）を受け、仮想ｓｔＩ出力を回路１４０が採用される発行位置「現発行位置」）に対して与える。ＳＲＣ１レジスタバス１１４に接続されたＳＲＣ１識別子ユニット１４２Ａは、ＳＲＣ１レジスタ番号がｓｔＩレジスタを選択しているか否か（すなわちレジスタ番号がｓｔＩであり、レジスタが浮動小数点レジスタであり、さらにＳＲＣ１レジスタが有効であるか否か）を判定する。ＳＲＣ１レジスタ番号がｓｔＩレジスタを選択している場合、ＳＲＣ１識別子ユニット１４２Ａは、仮想ｓｔＩ入力バス１４４によりＳＲＣ１仮想レジスタバス１３２Ａ上へ与えられた仮想レジスタ番号を駆動するようスイッチ１３０Ｅを制御する。同様に、ＳＲＣ２レジスタバス１１６に接続されたＳＲＣ２識別子ユニット１４２Ｂは、ＳＲＣ２レジスタ番号がｓｔＩレジスタを選択しているか否かを判定し、仮想ｓｔＩ入力バス１４４によりＳＲＣ２仮想レジスタバス１３２Ｂに与えられた仮想レジスタ番号を駆動するようスイッチ１３０Ｆを選択的に制御する。
【００８２】
さらに、図７に示す浮動小数点走査回路１１４の部分は、仮想ｓｔＩ出力バス１４６上のレジスタｓｔＩに対応する出力仮想レジスタ番号を与える。さまざまな入力仮想レジスタ番号が出力バス１４６上の出力仮想レジスタ番号として選択可能であり、これは復号ユニット２４により与えられたさまざまな制御信号によって制御される。ｘ８６浮動小数点命令はこの浮動小数点レジスタセットをスタックとして扱う。ｓｔ０はこのスタックの一番上にあるレジスタであり、ｓｔ１は一番上の次にくるものである、などとなる。特定の命令により、スタックはプッシュされる（現ｓｔ０レジスタをｓｔ１レジスタにするなど）またはポップされる（現ｓｔ１レジスタをｓｔ０レジスタにするなど）。またさらに、交換命令がサポートされ、これがスタックレジスタの一番上（ｓｔ０）とその他のレジスタのうちの１つとをスワップする。
【００８３】
この仮想ｓｔＩ出力の選択により、スイッチ１３０Ｇから１３０Ｋおよび入力仮想レジスタバス１４４、１４８、１５０、１５２および１５４のセットを採用することによりこれらのシチュエーションの多くを取扱う試みがなされる。現発行位置にあるＲＯＰが浮動小数点スタックまたはｓｔＩレジスタに個別に影響を与えなければ、この伝達信号はスイッチ１３０Ｇ（仮想ｓｔＩ入力バス１４４と仮想ｓｔＩ出力バス１４６との間に接続されている）にアサートされ、仮想ｓｔＩ入力が仮想ｓｔＩ出力として与えられる。一方、現発行位置にあるＲＯＰがｓｔＩレジスタを更新すれば、書込信号がスイッチ１３０Ｊ（バス１５２とバス１４６との間に接続されている）にアサートされ、この現発行位置（バス１５２により伝達される）に対応する仮想レジスタ番号は仮想ｓｔＩ出力バス１４６上で送信される。現発行位置におけるＲＯＰがスタックプッシュまたはポップを起こすと、対応する信号がスイッチ１３０Ｋ（バス１５４とバス１４６との間に接続されている）および１３０Ｉ（バス１５２とバス１４６との間に接続されている）にそれぞれアサートされる。現発行位置に与えられる更新先読み状態内のｓｔＩ−１およびｓｔＩ＋１レジスタに対応する仮想レジスタ番号はこれにより与えられる。最後に、現発行位置の２つ前の発行位置から入力された仮想ｓｔ０はバス１４８により与えられる。現ＲＯＰがＦＥＸＣ命令の後半部分であれば、ＥＸＣＨ信号がスイッチ１３０Ｈにアサートされ、現発行位置の２つ前の発行位置からのｓｔ０に対応する仮想レジスタ番号は仮想ｓｔＩ出力として選択される。
【００８４】
なお、ＦＥＸＣ命令の前半を取扱うために、ｓｔ０に対応する浮動小数点走査回路１４０の部分は前の走査ユニットからの仮想ｓｔＩ入力の各々を含み、いずれかのレジスタを仮想ｓｔ０出力として任意に選択することができる。さらに、浮動小数点状態レジスタのトップ・オブ・スタック（ＴＯＳ）フィールドおよび浮動小数点タグワードも同様に浮動小数点操作により影響される。ＴＯＳおよびタグワードについての先読み値も同様にプッシュ、ポップおよび交換を通じて伝搬され得る。ＴＯＳおよびタグワードの現先読みコピーは、先読みレジスタ状態８４に維持され得る。さらに、各発行位置に対応するＴＯＳおよびタグワードの値は、例外回復のためにマップサイロ３２に記憶され得る（そして最後の値が先読みレジスタ状態８４に更新され得る）。またさらに、レジスタ走査ユニット８０は（タグワードで示されるように）無効であるレジスタの使用を検出し、かつ後に例外を取扱うためにレジスタを用いたＲＯＰによる例外に気づくことができる。
【００８５】
なお、整数／一時走査回路１１０および浮動小数点走査回路１４０は、整数から浮動小数点への、および浮動小数点から整数への移動を同様に取扱うことができる。ＲＯＰの発信元レジスタが整数であると示されれば、整数／一時走査回路１１０は発信元仮想レジスタ番号を与える。一方、ＲＯＰの発信元レジスタが浮動小数点であると示されれば、浮動小数点走査回路１４０が発信元仮想レジスタ番号をもたらす。宛先レジスタが浮動小数点であると示されれば、新しい浮動小数点仮想レジスタ番号が浮動小数点走査回路１４０により更新先読みレジスタ状態中に与えられる。一方、宛先レジスタが整数であると示されれば、新しい整数仮想レジスタ番号が整数／一時走査回路１１０によって更新先読みレジスタ状態中に与えられる。したがって、浮動小数点から整数レジスタへの移動を有する発行位置には、浮動小数点発信元仮想レジスタ番号が割当てられ、宛先レジスタ番号は整数を示す。一方、整数から浮動小数点レジスタへの移動を有する発行位置は整数発信元仮想レジスタ番号が割当てられ、宛先レジスタ番号は浮動小数点を示す。
【００８６】
ここで図８を参照して、仮想／物理レジスタマップユニット８６の一実施例のブロック図が示される。他の実施例も可能であり、企図される。図８の実施例では、仮想／物理レジスタマップユニット８６はソースＩＱ♯ｍｕｘ１６０と、次の先読みＩＱ♯ｍｕｘ１６２と、発信元ＰＲ♯ｍｕｘ１６４と、次の先読みＰＲ♯ｍｕｘ１６８と、トラップＩＱ♯ｍｕｘ１７０と、トラップＰＲ♯ｍｕｘ１７２とを含む。発信元ＩＱ♯ｍｕｘ１６０は、先読みレジスタ状態８４からの各論理レジスタに対応する現先読みＩＱ♯を受けるように、またＩＱ♯／ＰＲ♯制御ユニット８２により割当てられた宛先ＩＱ♯を受けるように、接続される。次の先読みＩＱ♯ｍｕｘ１６２も同様に、現先読みＩＱ♯および宛先ＩＱ♯を受けるよう接続される。発信元ＩＱ♯ｍｕｘ１６０の出力は命令キュー３６Ａおよび３６Ｂにパイプラインで接続され、一方次の先読みＩＱ♯ｍｕｘ１６２の出力はトラップＩＱ♯ｍｕｘ１７０の入力として接続される。トラップＩＱ♯ｍｕｘ１７０は、回復先読みレジスタ状態バス７６Ａ（回復すべきＩＱ♯を運ぶ回復先読みレジスタ状態バス７６の一部）にさらに接続される。発信元ＰＲ♯ｍｕｘ１６４は、先読みレジスタ状態８４からの各論理レジスタに対応する現先読みＰＲ♯を受けるように、またＩＱ♯／ＰＲ♯制御ユニット８２により割当てられた宛先ＰＲ♯を受けるように接続される。次の先読みＰＲ♯ｍｕｘ１６８も同様に、現先読みＰＲ♯および宛先ＰＲ♯を受けるように接続される。発信元ＰＲ♯ｍｕｘ１６４の出力は命令キュー３６Ａおよび３６Ｂにパイプライン接続される。次の先読みＰＲ♯ｍｕｘ１６８の出力はトラップＰＲ♯ｍｕｘ１７２に接続され、これは回復先読みレジスタ状態バス７６Ｂ（回復すべきＰＲ♯を運ぶ回復先読みレジスタ状態バス７６の一部）にさらに接続される。レジスタ走査ユニット８０により割当てられた発信元仮想レジスタ番号は、選択制御として発信元ＩＱ♯ｍｕｘ１６０および発信元ＰＲ♯ｍｕｘ１６４に与えられる。次の仮想先読み状態は、次の先読みＩＱ♯ｍｕｘ１６２および次の先読みＰＲ♯ｍｕｘ１６８に選択制御として与えられる。ＰＣサイロ４８からのトラップ制御はトラップＩＱ♯ｍｕｘ１７０およびトラップＰＲ♯ｍｕｘ１７２に対して選択制御を与える。
【００８７】
通常、発信元ＩＱ♯ｍｕｘ１６０および発信元ＰＲ♯ｍｕｘ１６４は、レジスタ走査ユニット８０により与えられた対応する発信元仮想レジスタ番号に応答して各ＲＯＰの各発信元オペランドに対して発信元ＩＱ♯およびＰＲ♯を選択する。ｍｕｘ１６０は、たとえばｍｕｘ１６０に対して図示したとおり入力を受けるよう接続され、かつ対応する発信元仮想レジスタ番号を選択制御として受けるｍｕｘの並行なセット（各ＲＯＰの各発信元レジスタに対して１つ）として実現され得る。同様に、ｍｕｘ１６４は、ｍｕｘ１６４に対して図示したとおり入力を受け、かつ対応する発信元仮想レジスタ番号を選択制御として受けるよう結合されたｍｕｘの並行なセット（各ＲＯＰの各発信元レジスタに対して１つ）として実現され得る。発信元仮想レジスタ番号が、現先読み状態がＩＱ♯／ＰＲ♯に対する発信元であることを示す場合、発信元仮想レジスタ番号に含まれる論理レジスタ番号が用いられて、先読みレジスタ状態８４により与えられたＩＱ♯およびＰＲ♯のうち１つを選択する。一方、発信元仮想レジスタ番号が前の発行位置を示す場合、この発行位置番号が用いられて制御ユニット８２により割当てられた宛先ＩＱ♯／ＰＲ♯のうち１つを選択する。制御ユニット８２は、たとえば、各発行位置に対応する宛先ＩＱ♯およびＰＲ♯をもたらし得る。一方、制御ユニット８２は制限された数のＩＱ♯およびＰＲ♯（１ライン中のＲＯＰの数より少ない）をもたらし得る。このような実施例では、論理は発信元仮想レジスタ番号および宛先レジスタ有効指標において各ＲＯＰに対して行なわれ、宛先ＩＱ♯／ＰＲ♯の組合せのうち１つを選択し得る。
【００８８】
同様に、次の先読みＩＱ♯ｍｕｘ１６２および次の先読みＰＲ♯ｍｕｘ１６８は、レジスタ走査ユニット８０により与えられた対応する次の仮想先読み状態に応答して各論理レジスタに対してＩＱ♯およびＰＲ♯を選択する。ｍｕｘ１６２は、たとえば、ｍｕｘ１６２に対して図示されたとおり入力を受けるよう接続され、かつ対応する仮想レジスタ番号を選択制御として受けるｍｕｘ（各論理レジスタについて１つ）の並列セットとして実現され得る。同様に、ｍｕｘ１６８は、ｍｕｘ１６８に対して図示されたとおり入力を受けるよう接続され、かつ対応する仮想レジスタ番号を選択制御として受ける、ｍｕｘ（各論理レジスタについて１つ）の並列セットとして実現され得る。仮想レジスタ番号が、現先読み状態が特定の論理レジスタのＩＱ♯／ＰＲ♯に対する発信元であることを示す場合、この仮想レジスタ番号中に含まれる論理レジスタ番号が用いられて、先読みレジスタ状態８４により与えられたＩＱ♯およびＰＲ♯のうち１つを選択する。一方、仮想レジスタ番号が発行位置を示す場合、発行位置番号が用いられて制御ユニット８２により割当てられた宛先ＩＱ♯／ＰＲ♯のうち１つを選択する。
【００８９】
図８に示す仮想レジスタ番号に基づいてＩＱ♯とＰＲ♯との選択を物理的に分離することにより、利点が達成され得る。比較的多数のバスが比較的少量の回路（すなわちｍｕｘ１６０，１６２，１６４および１６８で表わされるｍｕｘ）に経路づけられる。したがって、仮想／物理レジスタマップユニット８６により占有される領域の量は、先読みレジスタ状態８４およびＩＱ♯／ＰＲ♯制御ユニット８２からのバスにより支配され得る。ＩＱ♯およびＰＲ♯は別々の値であるので、これらの値を別々のｍｕｘのセットへと経路づけすることにより、仮想／物理レジスタマップユニット８６が占有する領域が減少し得る。一実施例では、ＩＱ♯におけるビット数およびＰＲ♯におけるビット数はほぼ同じであり得る。したがって、仮想／物理レジスタマップユニット８６の一方側のＩＱ♯バスのワイヤリングおよび仮想／物理レジスタマップユニット８６の他方側のＰＲ♯バスのワイヤリングは、公平に対照的なレイアウトとなり、両側のワイヤリング空間が効果的に用いられ得ることになる。さらに、命令キュー３６Ａおよび３６Ｂは、スケジューリング部分（現ＲＯＰが従属するＲＯＰがいつ完了したか、したがってＲＯＰの現セットの１つがいつスケジュールされ得るか、を判定するためのＩＱ♯を受ける部分）と、命令記憶部（ＰＲ♯および命令の実行に用いられる他の情報は記憶するが、ＩＱ♯は記憶しない部分）とに物理的に分けられ得る。したがって、命令キュー３６Ａおよび３６Ｂは、スケジューリング部分をＩＱ♯ｍｕｘの近傍に、また命令記憶部分をＰＲ♯ｍｕｘの近傍に配置して物理的に構築され、さらに領域の節約を向上させる。
【００９０】
図８に示す仮想／物理レジスタマップユニット８６は、例外条件に応答して、先読みレジスタ状態８４に対する次の先読みレジスタ状態のマッピングをさらに取扱う。トラップＩＱ♯ｍｕｘ１７０は、トラップが実行時に認識されると用いられ、マップサイロ３２からの回復先読みレジスタ状態に対応するＩＱ♯を経路づけ、またｍｕｘ１６２によって与えられた次の先読み状態をオーバライドする。ＰＣサイロ４８はトラップにｍｕｘ１７０上での選択制御として信号を送り得る。同様に、回復先読みレジスタ状態内のＰＲ♯は、トラップ信号に応答してトラップＰＲ♯ｍｕｘ１７２を通じて選択され得る。なお、この他の実施例では、例外条件から回復するための他の方法も採用され得る。たとえば、例外条件はリタイアメント時に取り扱われ得る。
【００９１】
次に図９を参照して、マップサイロ３２内のエントリ（すなわちＲＯＰのあるラインに対応するエントリ）に記憶された情報を表わす表１８０が示される。他の実施例も可能であり、企図される。
【００９２】
表１８０に示すように、このラインに対応するＲ♯がＲ♯（ライン部分）フィールドに記憶される。この記憶されたＲ♯は、ＰＣサイロ４８によりＲＯＰのラインに割当てられたＲ♯のライン部分である。このライン部分はライン内の各ＲＯＰについて同じであり、一方Ｒ♯のオフセット部分はある特定のＲＯＰのライン内の発行位置を識別する。したがって、サイロエントリ（全体としてこのラインに対応する）は、Ｒ♯が記憶されるＲＯＰに対するＲ♯のライン部分を比較することによって、例外を経験しているＲＯＰに関連づけられ得る。
【００９３】
さらに、そのライン中のどのＲＯＰが有効であるかの指標はマップサイロエントリのライン（Ｌｉｎｅ）フィールド内の有効ＲＯＰに記憶される。たとえば、この指標は１ＲＯＰごとに１ビットであり得る。ビットがセットされていると、そのライン内の対応のＲＯＰは有効である。ビットがクリアされていると、そのライン内の対応するＲＯＰは無効である。またさらに、どのＲＯＰが宛先論理レジスタを有するかという指標はＲＯＰレジスタ書込フィールドに記憶される。これもまた、指標は１ＲＯＰごとに１ビットであり得る。ビットがセットされていれば、ライン内の対応するＲＯＰは宛先レジスタを更新する。ビットがクリアであれば、ライン内の対応するＲＯＰは宛先レジスタを更新しない。どのＲＯＰが宛先レジスタを有するかという指標は、割当てられたＰＲ♯および割当てられたＩＱ♯のうちどれが以下に述べるような例外イベントにおいて回復状態の部分となるかを決定するのに用いられる。
【００９４】
宛先レジスタを有するＲＯＰに割当てられたＰＲ♯およびＩＱ♯は、それぞれエントリの割当てられたＰＲ♯フィールドおよび割当てられたＩＱ♯フィールドに維持される。さらに、各宛先レジスタの論理レジスタ番号が論理レジスタ番号フィールドに記憶される。これらの論理レジスタ番号が用いられて、回復先読み状態内のどの論理レジスタが、以下に述べるように、割当てられたＰＲ♯および割当てられたＩＱ♯を受けるかが決定される。さらに、ラインのリタイアメントが成功すると、論理レジスタ番号および対応するＰＲ♯はアーキテクチャ的再命名ブロック３４に運ばれて記憶される。
【００９５】
ライン内のどのＲＯＰが条件コードレジスタを更新するかという指標は、ＣＣ書込フィールドに記憶される。更新される条件コードの各部分は、ＣＣ書込フィールド内のビットによって別々に表わされ、１セットのビットは、ＲＯＰレジスタ書込フィールド内に示される各レジスタ書込みと関連づけられ得る。対応するＲＯＰのＰＲ♯およびＩＱ♯（割当てられたＰＲ♯およびＩＱ♯フィールドに記憶される）は、例外が検出されると、先読みレジスタ状態内の先読み条件コードレジスタを回復するのに用いられ得る。さらに、ＣＣ書込フィールドは割当てられたＰＲ♯フィールド内のどのＰＲ♯が、ＲＯＰのラインのリタイアメントが成功するとアーキテクテッド条件コード状態に対応するかを示す。上述したように、本実施例では、整数レジスタ更新および対応の条件コード更新の両者を記憶するために単一の物理レジスタが用いられる。
【００９６】
マップサイロエントリに対応するＲＯＰのラインのディスパッチングの前に先読みレジスタ状態８４内に記憶された現先読みレジスタ状態は、エントリの現先読みレジスタ状態フィールドに記憶される。この現先読みレジスタ状態は、ライン内の例外のイベントにおいて先読みレジスタ状態８４を回復するための基準としての役割を果たす。
【００９７】
最後に、各発行位置に対応するＦＰ  ＴＯＳおよび有効ビットは、エントリのＦＰ  ＴＯＳおよび有効ビットフィールド内に記憶される。例外を経験するＲＯＰに対応するＦＰ  ＴＯＳおよび有効ビットは、例外が検出されると、先読みレジスタ状態８４内の先読みＦＰ  ＴＯＳおよびタグワード内に復元される。
【００９８】
ここで図１０を参照して、論理レジスタに対する先読みレジスタ状態８４の一実施例によって採用され得る先読みレジスタ状態エントリ１８２の一例のブロック図が示される。エントリ１８２は、有効フィールド１８４と、ＩＱ♯フィールド１８６と、ＰＲ♯フィールド１８８とを含む。有効フィールド１８４はＩＱ♯フィールド１８６が有効であるか否かを示す。ＩＱ♯は、対応するＲＯＰが命令キュー３６Ａおよび３６Ｂから完成されるまでは有効である。したがって、先読み状態８４はＩＱ♯が完成しているロード／ストアユニット４２および実行コア４０からの指標を受けることができる。一致が検出されると、先読み状態８４は有効指標をリセットし得る。この有効指標は、たとえばセットされていると有効でありクリアされていると無効であることを示す、１ビットであり得る。ＩＱ♯フィールド１８６は論理レジスタを最も最近更新したＲＯＰのＩＱ♯を記憶し、ＰＲ♯フィールド１８８は、ＲＯＰの宛先レジスタとして割付けられた物理レジスタのＰＲ♯を記憶する。
【００９９】
次に図１１を参照して、ＰＣサイロ４８によって信号で知らされる例外条件に応答したマップサイロ３２の動作を表わすフローチャートが示される。この他の実施例も可能であり、企図される。図１１に示すステップは理解しやすいように特定の順序で示されるが、適切であればいかなる順序も採用され得る。さらに、ステップは、マップサイロ３２内で採用される組合せ論理（combinatorial logic）において並列で行なわれ得る。
【０１００】
ステップ１９０に示されるように、マップサイロ３２は、マップサイロ３２に記憶されたエントリのＲ♯（ライン部分）フィールドに対してＰＣサイロ４８により与えられたＲ♯をカムする。ＰＣサイロ４８により与えられたＲ♯は特定のＲＯＰを識別する。しかしながら、マップサイロ３２に対する検査の目的で、Ｒ♯のライン部分がカムされる。与えられたＲ♯より最近のエントリ（プログラム順序で例外の後の命令）はマップサイロ３２内で取消される。取消されたエントリの割当てられたＰＲ♯フィールドに記憶されたＰＲ♯は自由にされる。一実施例では、取消されたエントリのＰＲ♯は、１クロックサイクルごとに１エントリの割合で、複数のクロックサイクルにわたって自由にされる。カムが一致を示すサイロエントリが、選択されたマップサイロエントリである。
【０１０１】
選択されたマップサイロエントリに記憶された現先読みレジスタ状態（すなわち例外を経験するＲＯＰを含むＲＯＰのラインの前の現先読み状態が、現先読みレジスタ状態８２の先読み状態に復元される（ステップ１９２））。さらに、先読みレジスタ状態８４におけるＦＰ  ＴＯＳおよび有効ビットは、例外を経験するＲＯＰの発行位置に対して選択されたマップサイロエントリに記憶された値へと復元される（ステップ１９２）。
【０１０２】
選択されたマップサイロエントリ内のＲＯＰレジスタ書込フィールドは、例外を経験するＲＯＰの前の書込へマスクされる。言換えれば、例外を経験するＲＯＰの後のＲＯＰレジスタ書込はマスクされて取除かれ、それらがマスキングの後に書込として現われないようにする。（マスキング後の）残りの書込は走査されて、各レジスタへの一番最近の書込が検出される（すなわち、残りの書込のうち２つ以上が同じレジスタに対するものであれば、より最近の書込が保持される）。現先読み状態はこの結果を用いて更新される（ステップ１９６）。ステップ１９２およびステップ１９６は、回復先読みレジスタ状態を先読みレジスタ状態８４に送信する前にマップサイロ３２において行なわれ得る。代替的には、現先読みレジスタ状態は先読みレジスタ状態８４に復元され、またその後ステップ１９６に関して更新され得る。
【０１０３】
またさらに、選択されたマップサイロエントリにおけるＲＯＰレジスタ書込フィールド（すなわちステップ１９６のマスキング前の元の値）は、例外を経験するＲＯＰの後のレジスタ書込へとマスクされる。言換えれば、例外を経験するＲＯＰの前のレジスタ書込はマスクして取除かれる。残りのレジスタ書込のＰＲ♯は自由にされる（ステップ１９８）。図１１に示すフローチャートは、例外に応答して先読み状態を回復するための迅速な方法を有利に提供し得る。
【０１０４】
なお、上記において、発信元仮想レジスタ番号という用語および仮想発信元レジスタ番号という用語を用いることができる。これらの用語は同じ意味であることが意図される。さらに、上述したように、プロセッサ１０により採用された命令セットアーキテクチャにおいて具体化された各命令が単一の命令動作へとマッピングする実施例は、ここに規定される命令動作の意味の範囲内で企図される。
【０１０５】
次に図１２を参照して、バスブリッジ２０２を介してさまざまなシステム構成要素に結合されたプロセッサ１０を含むコンピュータシステム２００の一実施例のブロック図が示される。この他の実施例も可能であり、企図される。図示されたシステムでは、メインメモリ２０４がメモリバス２０６を介してバスブリッジ２０２に結合され、グラフィックコントローラ２０８がＡＧＰバス２１０を介してバスブリッジ２０２に結合される。最後に、複数のＰＣＩ装置２１２Ａおよび２１２ＢがＰＣＩバス２１４を介してバスブリッジ２０２に結合される。電気的インタフェースを１つ以上のＥＩＳＡまたはＩＳＡ装置２１８にＥＩＳＡ／ＩＳＡバス２２０を介して適応させるために、二次的バスブリッジ２１６をさらに設けてもよい。プロセッサ１０は外部インタフェース５２を介してバスブリッジ２０２に結合される。
【０１０６】
バスブリッジ２０２は、プロセッサ１０と、メインメモリ２０４と、グラフィックコントローラ２０８と、ＰＣＩバス２１４に取付けられた装置との間にインタフェースをもたらす。バスブリッジ２０２に接続された装置の１つから命令（operation）を受取ると、バスブリッジ２０２はその命令のターゲット（たとえば特定の装置、またはＰＣＩバス２１４の場合にはターゲットはＰＣＩバス２１４上にある）を識別する。バスブリッジ２０２はその命令をターゲットの装置へと経路づける。バスブリッジ２０２は通常、発信元装置またはバスにより用いられるプロトコルからターゲット装置またはバスにより用いられるプロトコルへと命令を変換する。
【０１０７】
ＰＣＩバス２１４に対するＩＳＡ／ＥＩＳＡにインタフェースをもたらすことに加えて、二次的バスブリッジ２１６は所望に応じて付加機能をさらに組入れることができる。たとえば、一実施例では、二次的バスブリッジ２１６はＰＣＩバス２１４の所有権を調停するためのマスタＰＣＩアービタ（図示せず）を含む。二次的バスブリッジ２１６から外部の、または二次的バスブリッジ２１６に一体化された、入力／出力コントローラ（図示せず）をコンピュータシステム２００内に含んで、キーボードおよびマウス２２２ならびにさまざまなシリアルポートおよびパラレルポートに対して、所望に応じて動作上のサポートを提供することもできる。他の実施例においては、プロセッサ１０とバスブリッジ２０２との間に、外部キャッシュユニット（図示せず）をさらに外部インタフェース５２に結合させてもよい。代替的には、この外部キャッシュはバスブリッジ２０２に結合されてもよく、外部キャッシュに対するキャッシュ制御論理はバスブリッジ２０２内に一体化され得る。
【０１０８】
メインメモリ２０４は、アプリケーションプログラムが記憶され、そこからプロセッサ１０が主に実行するメモリである。好適なメインメモリ２０４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）を含み、好ましくは複数のバンクのＳＤＲＡＭ（同期ＤＲＡＭ）を含む。
【０１０９】
ＰＣＩ装置２１２Ａおよび２１２Ｂは、たとえば、ネットワークインタフェースカード、ビデオアクセレレータ、オーディオカード、ハードもしくはフロッピィディスクドライブまたはドライブコントローラ、ＳＣＳＩ（小型コンピュータシステムインタフェース）アダプタ、およびテレフォニーカードなどのさまざまな周辺機器を表わす。同様に、ＩＳＡ装置２１８は、モデム、サウンドカード、およびＧＰＩＢまたはフィールドバスインタフェースカードなどの種々のデータ収集カードなど、さまざまなタイプの周辺機器を表わすものである。
【０１１０】
グラフィックコントローラ２１８は、文字または画像のディスプレイ２２６上での表現（rendering）を制御するために設けられる。グラフィックコントローラ２０８は従来技術で一般に公知である典型的なグラフィックアクセレレータを採用して、メインメモリ２０４へおよびメインメモリ２０４から効果的にシフトされ得る３次元データ構造を表現し得る。グラフィックコントローラ２０８はしたがって、ＡＧＰバス２１０のマスタであってもよく、そこでバスブリッジ２０２内のターゲットインタフェースへのアクセスを要求しかつそれを受けることができ、よってメインメモリ２０４へのアクセスを得ることができる。専用グラフィックバスはメインメモリ２０４からのデータの迅速な再生に適応する。特定の動作に対して、グラフィックコントローラ２０８はさらに、ＡＧＰバス２１０上でのＰＣＩプロトコルトランザクションを生成するようさらに構成され得る。バスブリッジ２０２のＡＧＰインタフェースはしたがって、ＡＧＰプロトコルトランザクションならびにＰＣＩプロトコルターゲットおよびイニシエータトランザクションの両者をサポートするための機能性を含み得る。ディスプレイ２２６はそこに画像または文字を表示し得る何らかの電子ディスプレイである。好適なディスプレイ２２６は、陰極線管（「ＣＲＴ」）、液晶ディスプレイ（「ＬＣＤ」）、などを含む。
【０１１１】
なお、上記の説明ではＡＧＰ、ＰＣＩおよびＩＳＡまたはＥＩＳＡバスが例として用いられたが、所望に応じて、いかなるバスアーキテクチャで代用してもよい。さらに、コンピュータシステム２００はさらなるプロセッサ（コンピュータシステム２００のオプション構成要素として示されるプロセッサ１０ａなど）を含む多重プロセッシングコンピュータシステムであり得る。プロセッサ１０ａはプロセッサ１０と同様である。より具体的には、プロセッサ１０ａはプロセッサ１０の同一の複製物であり得る。プロセッサ１０ａは（図１２に示すような）プロセッサ１０と外部インターフェイス５２を共有しても、または独立したバスを介してバスブリッジ２０２に接続されてもよい。
【０１１２】
上記の開示に従って、レジスタ再命名スキームを採用するプロセッサが示された。一実施例では、この再命名スキームは仮想レジスタ番号を用いて複数の段階に分割される。有利には、このスキームを用いて高周波数動作が可能になり得る。別の実施例では、ＲＯＰの各ラインに対応する現先読み状態を格納し（siloing）、またライン内のレジスタ書込に気づくことにより、例外からの迅速な回復が行なわれる。さらに別の実施例では、再命名レジスタの自由化が管理され、同じ再命名レジスタが１つ以上の論理レジスタと対応できるようにする。これにより、効率的な物理レジスタの使用が採用され得る。
【０１１３】
説明される実施例に対して数多くの変形および変更をなすことができる。この発明が添付の請求の範囲の範囲内に含まれるすべてのそのような変形および変更を含むことが意図される。
【図面の簡単な説明】
【図１】  プロセッサの一実施例のブロック図である。
【図２】  図１に示されるプロセッサの一実施例による、図１に示されるマップユニット、マップサイロおよびアーキテクチャ的再命名ブロックの間の相互接続を強調するブロック図である。
【図３】  図１および図２に示されるマップユニットの一実施例のブロック図である。
【図４】  図３に示されるレジスタ走査ユニットの一実施例のブロック図である。
【図５】  仮想レジスタ番号のために用いることができる１つの符号化を示す表の図である。
【図６】  図４に示される走査ユニットの一実施例の一部分のブロック図である。
【図７】  図４に示される走査ユニットの一実施例の別の部分のブロック図である。
【図８】  図３に示される仮想／物理レジスタマップユニットの一実施例のブロック図である。
【図９】  図１および図２に示されるマップサイロの一実施例において記憶される情報を示す表の図である。
【図１０】  論理レジスタのための例示的な先読みレジスタ状態を示すブロック図である。
【図１１】  図１、図２および図３に示されるマップユニットの一実施例による先読み状態を復元することを示すフローチャートの図である。
【図１２】  図１に示されるプロセッサを含むコンピュータシステムの一実施例のブロック図である。
【図１】
0003977016.tif 000002
【図２】
0003977016.tif 000003
【図３】
0003977016.tif 000004
【図４】
0003977016.tif 000005
【図５】
0003977016.tif 000006
【図６】
0003977016.tif 000007
【図７】
0003977016.tif 000008
【図８】
0003977016.tif 000009
【図９】
0003977016.tif 000010
【図１０】
0003977016.tif 000011
【図１１】
0003977016.tif 000012
【図１２】
0003977016.tif 000013