(57)【特許請求の範囲】
【請求項１】
記憶キューからロードによってアクセスされる記憶データを転送するための方法であって、
前記記憶キュー内の第１の記憶キューエントリから前記ロードによってアクセスされる第１のバイトを選択するステップを含み、前記第１の記憶キューエントリに対応する第１の記憶は前記第１のバイトを更新するためにプログラム順序において最新であり、さらに
前記記憶キュー内の第２の記憶キューエントリから前記ロードによってアクセスされる第２のバイトを選択するステップを含み、前記第２の記憶キューエントリは前記第１の記憶キューエントリと異なり、前記第２の記憶キューエントリに対応する第２の記憶は前記第２のバイトを更新するためにプログラム順序において最新であり、また前記第２のバイトを選択する前記ステップは、前記第１のバイトを選択する前記ステップと独立である、方法。
【請求項２】
前記ロードに対応するロードアドレスの予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有するロードビットベクトルを生成するステップをさらに含み、前記ビットは対応するバイトが前記ロードによってアクセスされるか否かを示し、さらに
前記第１の記憶に対応する第１の記憶アドレスの前記予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有する第１の記憶ビットベクトルを生成するステップを含み、前記ビットは対応するバイトが前記第１の記憶によって更新されるか否かを示し、さらに
前記第２の記憶に対応する第２の記憶アドレスの前記予め定められた数の最下位ビットによって定められる予め定められた範囲内の各バイトに対応するビットを有する第２の記憶ビットベクトルを生成するステップを含み、前記ビットは対応するバイトが前記第２の記憶によって更新されるか否かを示す、請求項１に記載の方法。
【請求項３】
第１のバイトを選択する前記ステップは
前記ロードビットベクトル内の対応するビットを調べて前記第１のバイトが前記ロードによってアクセスされることを判定するステップと、
前記第１の記憶ビットベクトル内の対応するビットを調べて前記第１の記憶が前記第１のバイトを更新することを判定するステップとを含む、請求項２に記載の方法。
【請求項４】
前記予め定められた数の最下位ビットを除く前記ロードアドレスと前記第１の記憶アドレスとを比較するステップをさらに含み、前記第１のバイトを選択する
前記ステップは前記比較するステップに応答して行なわれる、請求項３に記載の方法。
【請求項５】
第２のバイトを選択する前記ステップは
前記ロードビットベクトル内の対応するビットを調べて前記第２のバイトが前記ロードによってアクセスされることを判定するステップと、
前記第２の記憶ビットベクトル内の対応するビットを調べて前記第２の記憶が前記第２のバイトを更新することを判定するステップとを含む、請求項４に記載の方法。
【請求項６】
前記予め定められた数の最下位ビットを除く前記ロードアドレスと前記第２の記憶アドレスとを比較するステップをさらに含み、前記第２のバイトを選択する前記ステップは前記比較するステップに応答して行なわれる、請求項５に記載の方法。
【請求項７】
前記第１の記憶キューエントリに前記第１の記憶ビットベクトルを記憶し、前記第２の記憶キューエントリに前記第２の記憶ビットベクトルを記憶するステップをさらに含む、請求項２に記載の方法。
【請求項８】
第１のバイトを選択する前記ステップおよび第２のバイトを選択する前記ステップと独立して前記記憶キューから前記ロードによってアクセスされる第３のバイトを選択するステップをさらに含む、請求項１に記載の方法。
【請求項９】
第３のバイトを選択する前記ステップは、前記第１の記憶が前記第３のバイトを更新するためにプログラム順序において最新であることを判定するステップに応答して前記第１の記憶キューエントリから前記第３のバイトを選択するステップを含む、請求項８に記載の方法。
【請求項１０】
第３のバイトを選択する前記ステップは、前記第２の記憶が前記第３のバイトを更新するためにプログラム順序において最新であることを判定するステップに応答して前記第２の記憶キューエントリから前記第３のバイトを選択するステップを含む、請求項８に記載の方法。
【請求項１１】
記憶アドレス命令演算を実行する際に前記第１の記憶キューエントリを割当てるステップをさらに含む、請求項１に記載の方法。
【請求項１２】
記憶データ命令演算を実行する際にデータを前記第１の記憶キューエントリに記憶するステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記記憶アドレス命令演算および前記記憶データ命令演算を単一の命令から導くステップをさらに含む、請求項１２に記載の方法。
【請求項１４】
データキャッシュにまだリタイアされていない記憶に対応するアドレスおよびデータを記憶するよう構成される記憶キューと、
前記記憶キューに結合されかつロードアドレスを受取るための転送論理とを含み、前記転送論理は、前記ロードアドレスに対応するロードによってアクセスされる複数のバイトの各々１つに対して独立に、前記記憶キューに記憶される前記記憶のどの１つが前記複数のバイトの前記１つの最新の更新であるかを判定するよう構成され、前記転送論理は前記記憶キュー内の１つの記憶から前記複数のバイトの少なくとも１つを選択し、かつ前記記憶キュー内の別の記憶から前記複数のバイトの別の少なくとも１つを選択するよう構成される、ロード／記憶ユニット。
【請求項１５】
前記記憶キューに結合され、かつ各記憶アドレスの複数の最下位ビットを受取るための第１のビットベクトルジェネレータをさらに含み、前記第１のビットベクトルジェネレータは前記各記憶アドレスに対応する記憶ビットベクトルを生成するよう構成され、前記記憶ビットベクトルの各ビットはバイトに対応し、そのバイトが前記記憶によって更新されるか否かを示し、前記ロード／記憶ユニットは前記記憶キューに前記記憶ビットベクトルを記憶するよう構成される、請求項１４に記載のロード／記憶ユニット。
【請求項１６】
前記転送論理に結合され、かつ前記ロードアドレスの複数の最下位ビットを受取るための第２のビットベクトルジェネレータをさらに含み、前記第２のビットベクトルジェネレータは前記ロードアドレスに対応するロードビットベクトルを生成するよう構成され、前記ロードビットベクトルの各ビットはバイトに対応し、そのバイトが前記ロードアドレスに対応するロードによってアクセスされるか否かを示す、請求項１５
に記載のロード／記憶ユニット。
【請求項１７】
前記転送論理は、前記ロードビットベクトルと、前記記憶ビットベクトルと、前記ロードアドレス（前記複数の最下位ビットを除く）および前記記憶アドレス（前記複数の最下位ビットを除く）の比較の結果とを調べて、前記ロードによってアクセスされる各バイトに対する最新の更新を判定するよう構成される、請求項１６に記載のロード／記憶ユニット。
【請求項１８】
１つまたはそれ以上のアドレス生成ユニットを含む少なくとも１つの実行コアを含み、前記アドレス生成ユニットはロードに対応するロードアドレスおよび記憶に対応する記憶アドレスを生成するよう構成され、さらに
前記実行コアに結合されるロード／記憶ユニットを含み、前記ロード／記憶ユニットはプロセッサ内で処理中の記憶に対する前記記憶アドレスおよび対応する記憶データを記憶するよう構成される記憶キューを含み、前記ロード／記憶ユニットは前記ロードに対応する記憶データが前記記憶キューに記憶されているときに、前記ロードアドレスを受取って前記記憶キューから前記ロードに対応する記憶データを転送するよう構成され、前記ロード／記憶ユニットは前記記憶キュー内の特定の記憶を選択し、そこから特定のロードによってアクセスされる各バイトに対してバイトごとに基づいて独立にデータを転送するよう構成される、プロセッサ。
【請求項１９】
前記実行コアは記憶データを前記ロード／記憶ユニットに届けるよう構成される記憶データユニットをさらに含む、請求項１８に記載のプロセッサ。
【請求項２０】
前記記憶データユニットは記憶データ命令演算を実行するステップに応答して記憶データを届けるよう構成される、請求項１９に記載のプロセッサ。
【請求項２１】
前記１つまたはそれ以上のアドレス生成ユニットは、記憶アドレス命令演算に応答して前記記憶アドレスを生成するよう構成される記憶アドレス生成ユニットを含む、請求項２０に記載のプロセッサ。
【請求項２２】
前記プロセッサは前記記憶アドレス命令演算および前記記憶データ命令演算を同じ命令から導くよう構成される、請求項２０に記載のプロセッサ。
【請求項２３】
前記ロード／記憶ユニットに結合される第２の実行コアをさらに含み、前記第２の実行コアは１つまたはそれ以上のアドレス生成ユニットを含み、前記アドレス生成ユニットはロードに対応するロードアドレスおよび記憶に対応する記憶アドレスを生成するよう構成される、請求項１８に記載のプロセッサ。
【請求項２４】
前記実行コアおよび前記ロード／記憶ユニットに結合されるデータキャッシュをさらに含み、前記データキャッシュは前記記憶キュー中に前記データがないことに応答して前記特定のロードによってアクセスされるデータを与えるよう構成される、請求項１８に記載のプロセッサ。
【請求項２５】
前記ロード／記憶ユニットは前記特定の記憶に対応する記憶ビットベクトルを生成するよう構成され、前記記憶ビットベクトルの各ビットはバイトに対応し、そのバイトが前記特定の記憶によって更新されるか否かを示し、前記ロード／記憶ユニットは前記記憶キューに前記記憶ビットベクトルを記憶するよう構成される、請求項１８に記載のプロセッサ。
【請求項２６】
前記ロード／記憶ユニットは前記特定のロードに対応するロードビットベクトルを生成するよう構成され、前記ロードビットベクトルの各ビットはバイトに対応し、そのバイトが前記特定のロードによってアクセスされるか否かを示す、請求項２５に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の背景】
１．技術分野
この発明はプロセッサの分野に関し、より特定的には、メモリ依存性検査および記憶データのその後のロードへの転送に関する。
【０００２】
２．背景技術
ＥＰ−Ａ−０  ６５１  ３３１はスーパーパイプラインのスーパースカラマイクロプロセッサに対する書込バッファを開示する。データハザードまたはリードアフタライト（ＲＡＷ）依存性などの依存性を検出するための設備が与えられ、そこで読取命令の読取物理アドレスは書込バッファのすべてのエントリにおける各物理アドレス値に対して比較される。ＲＡＷハザードの場合には、データを書込動作からその後の読取に転送するために、読取は書込動作によって書込まれるためのバイトの部分集合を形成するバイトのみを含むという条件が満たされる必要がある。
ＵＳ−Ａ−５  ６０６  ６７０は、アウトオブオーダ実行コンピュータシステムにおけるロード動作のために出力バッファ付記憶データに記憶バッファの信号を送るための方法および装置を開示する。バッファ付メモリ記憶動作の実行状態を考慮して、メモリロード動作が発行される時間に機能的に依存するバッファ付メモリ記憶動作の変動可能な部分集合からメモリロード動作に対する記憶データを条件付転送する記憶転送回路が設けられる。
スーパースカラプロセッサは、クロックサイクル当たり複数の命令を発行および実行し、かつ設計に一致する可能な限り高いクロック周波数を用いることによって高性能を達成することを試みる。時とともに、スーパースカラプロセッサの性能を増加させるために、スーパースカラプロセッサによって同時に発行および／または実行可能な命令の数が増加してきた。
【０００３】
不運なことに、より多くの命令が同時に実行されるために、ロードを迅速に処理することがより重要になってきた。ロードは、ロードによってアクセスされる記憶場所に記憶されるデータがプロセッサ（たとえば内部レジスタ）に伝達されるような（内部レジスタに対向する）外部メモリへのアクセスである。これに対して記憶は、プロセッサによって生成されるデータが記憶によってアクセスされる記憶場所に記憶されるような外部メモリへのアクセスである。ロードおよび記憶が外部メモリにアクセスすることが定められる一方で、プロセッサ内部の１つまたはそれ以上のキャッシュを用いて、キャッシュ内でヒットしたアクセスに対するメモリ待ち時間を減少させてもよい。
【０００４】
ロードがデータをメモリからプロセッサに伝達し、典型的にはデータはその後の命令演算によって動作され得るため、データをその後の命令演算に与えるためにロードを迅速に処理することが重要である。データが迅速に与えられないと、その後の命令演算が停止する。実行のためのスケジューリングにその他の命令が利用可能でないとき、全体の命令スループットが減少し得る（したがって性能が減少し得る）。スーパースカラプロセッサがより多数の命令を同時に発行／実行することを試みると、これらの効果ば増加し得る。したがって迅速なロード処理の要求も増加する。
【０００５】
加えて、プロセッサ内で同時に発行／実行される命令の数が増加すると、記憶キュー内にある記憶の数も平均的に増加し得る。典型的には、記憶が推論的でないことが知られるまでは、記憶はメモリ（キャッシュまたは外部）に制約されない。たとえば、記憶はリタイアされるまで制約されなくてもよい。記憶はメモリに制約できるまで記憶キュー内に置かれ、記憶のアドレスオペランドおよび記憶されるデータを用いて生成される記憶アドレスを含む。
【０００６】
記憶キュー内のより多数の記憶は単独では性能の問題を示さないかもしれないが、より多数の記憶はロードの迅速な処理に対する性能の問題を間接的に示し得る。記憶キュー内の記憶の数が増加すると、ロードによってアクセスされるデータが記憶キュー（キャッシュ／外部メモリに対向して）にある可能性が増加する。さらに、ロードによってアクセスされるいくつかのバイトは記憶キュー内の１つの進行中の記憶によって変更され、一方、ロードによってアクセスされる他のバイトは記憶キュー内の別の進行中の記憶によって変更される可能性も増加する。またさらに、ロードによって用いられる記憶データが記憶キュー内で利用可能でない可能性が増加する。これらの事象がより頻繁に起こると、迅速なロード処理への障壁がより大きくなり得る。
【０００７】
【発明の開示】
前述に概説した問題の大部分は、ロードに記憶転送を与えるよう構成されたロード／記憶ユニットによって解決される。このロード／記憶ユニットは、その他のバイトと独立してロードによってアクセスされる各バイトに対するそこに含まれる記憶キューをサーチし、そのバイトを更新するための最新の記憶（プログラム順序で）を判定する。したがって、ロードによってアクセスされる１つまたはそれ以上のバイトが１つの記憶によって変更され、一方ロードによってアクセスされる１つまたはそれ以上のその他のバイトが別の記憶によって変更されたとしても、この転送機構はロードによってアクセスされるバイトをアセンブルできる。有利なことに、ロードデータが記憶キューに記憶されていれば、ロードデータはそこから転送されてもよい。より特定的には、ロードデータは任意の数の記憶から正確に転送されてもよい。たとえば、転送は０記憶（記憶キューが空であるか、または特定のロードに対して記憶キュー内にヒットが検出されないとき）、１記憶（その記憶がロードによってアクセスされる各バイトを更新するために最新であるとき）、または最大Ｎ記憶（ここでＮはロードによってアクセスされるバイトの数）から起こってもよい。ロードを迅速に処理できるため、このロード／記憶ユニットを含むプロセッサ全体の性能が増加し得る。
【０００８】
特定の実施例の１つにおいては、ロード／記憶ユニットはロードおよび記憶のアドレスの最下位ビットの予め定められたセットからビットベクトルを生成する。このビットベクトルは、最下位ビットの数によって定められた範囲内の各バイトに対するビットを含む。このビットは、そのバイトが（記憶ビットベクトルに対して）更新されたか、または（ロードビットベクトルに対して）アクセスされるか否かを示す。次いでロード／記憶ユニットは各バイトの最新の更新を配置するためにビットベクトルを調べてもよい（および、ビットベクトルを生成するために用いられた最下位ビットを除く、記憶およびロードアドレスの残りのビットを比較してもよい）。ビットベクトルは各アクセス／更新されたバイトを個別に識別するため、各バイトの最新の更新を配置するための処理は各バイトに対して独立に（および並行して）行なわれてもよい。さまざまな記憶キューエントリから選択されたバイトは次いでともにマージされ、ロードによってアクセスされるバイトのセットを形成する。
【０００９】
概して、記憶キューからのロードによってアクセスされる記憶データの転送のための方法が予期される。ロードによってアクセスされる第１のバイトは記憶キュー内の第１の記憶キューエントリから選択される。第１の記憶キューエントリに対応する第１の記憶は、第１のバイトを更新するために、プログラム順序において最新である。ロードによってアクセスされる第２のバイトは記憶キュー内の第２の記憶キューエントリから選択され、この第２の記憶キューエントリは第１の記憶キューエントリとは異なる。第２の記憶キューエントリに対応する第２の記憶は、第２のバイトを更新するためにプログラム順序において最新である。第２のバイトの選択は第１のバイトの選択と独立である。
【００１０】
ロード／記憶ユニットが予期される。ロード／記憶ユニットは、まだデータキャッシュにリタイアされていない記憶に対応し、そこに結合される論理を転送するアドレスおよびデータを記憶するよう構成された記憶キューを含む。転送論理はロードアドレスを受取るためにさらに結合され、ロードアドレスに対応するロードによってアクセスされる複数のバイトの各々１つに対して独立に、記憶キューに記憶されるどの記憶がその複数のバイトの１つの最新の更新であるかを判定するよう構成される。記憶キュー内の１つの記憶から複数のバイトのうちの少なくとも１つが提供可能であり、記憶キュー内の別の記憶からは複数のバイトのうち別の少なくとも１つを与えることができる。
【００１１】
さらにプロセッサが予期される。このプロセッサは、１つまたはそれ以上のアドレス生成ユニットを含む少なくとも１つの実行コアを含む。アドレス生成ユニットは、記憶に対応するロードおよび記憶アドレスに対応するロードアドレスを生成するよう構成される。プロセッサは実行コアに結合されるロード／記憶ユニットをさらに含み、このロード／記憶ユニットは、プロセッサ内で処理中の記憶に対する記憶アドレスと対応する記憶データとを記憶するよう構成される記憶キューを含む。加えてロード／記憶ユニットは、ロードアドレスを受取り、かつロードに対応する記憶データが記憶キューに記憶されているときにはロードに対応する記憶データを記憶キューから転送するよう構成される。ロード／記憶ユニットは、特定のロードによってアクセスされる各バイトに対し、バイトごとに基づいてそこからデータを独立に転送するための記憶キュー内の特定の記憶を選択するよう構成される。
【００１２】
この発明のその他の目的および利点については、以下の詳細な説明を読み、添付の図面を参照することによって明らかになるであろう。
【００１３】
この発明にはさまざまな変更および代替形が可能であるため、特定の実施例は例として図面中に示し、ここに詳細に説明する。しかしその図面および詳細な説明はこの発明を開示される特定の形に制限することを意図するものではなく、反対に添付の請求項によって定められるこの発明の趣旨および範囲内にあるすべての変更形、同等のものおよび代替形を含むことを意図するものであることが理解されるべきである。
【００１４】
【この発明を実行するためのモード】
図１は、プロセッサ１０の実施例の１つを示すブロック図である。その他の実施例も可能であり予期される。図１の実施例において、プロセッサ１０はラインプレディクタ１２と、命令キャッシュ（Ｉ−キャッシュ）１４と、アラインメントユニット１６と、分岐履歴表１８と、間接アドレスキャッシュ２０と、復帰スタック２２と、デコードユニット２４と、プレディクタミスデコードユニット２６と、マイクロコードユニット２８と、マップユニット３０と、マップサイロ３２と、アーキテクチャ改名ブロック３４と、１対の命令キュー３６Ａ−３６Ｂと、１対のレジスタファイル３８Ａ−３８Ｂと、１対の実行コア４０Ａ−４０Ｂと、ロード／記憶ユニット４２と、データキャッシュ（Ｄ−キャッシュ）４４と、外部インターフェイスユニット４６と、ＰＣサイロおよびリダイレクトユニット４８と、命令ＴＬＢ（ＩＴＢ）５０とを含む。ラインプレディクタ１２は、ＩＴＢ５０と、プレディクタミスデコードユニット２６と、分岐履歴表１８と、間接アドレスキャッシュ２０と、復帰スタック２２と、ＰＣサイロおよびリダイレクトブロック４８と、アラインメントユニット１６と、Ｉ−キャッシュ１４とに接続される。Ｉ−キャッシュ１４はアラインメントユニット１６に接続される。アラインメントユニット１６はプレディクタミスデコードユニット２６およびデコードユニット２４にさらに接続される。デコードユニット２４はマイクロコードユニット２８およびマップユニット３０にさらに接続される。マップユニット３０はマップサイロ３２と、アーキテクチャ改名ブロック３４と、命令キュー３６Ａ−３６Ｂと、ロード／記憶ユニット４２と、実行コア４０Ａ−４０Ｂと、ＰＣサイロおよびリダイレクトブロック４８とに接続される。命令キュー３６Ａ−３６Ｂは互いに接続され、またそれぞれの実行コア４０Ａ−４０Ｂおよびレジスタファイル３８Ａ−３８Ｂに接続される。レジスタファイル３８Ａ−３８Ｂは互いに接続され、またそれぞれの実行コア４０Ａ−４０Ｂに接続される。実行コア４０Ａ−４０Ｂはロード／記憶ユニット４２と、データキャッシュ４４と、ＰＣサイロおよびリダイレクトユニット４８とにさらに接続される。ロード／記憶ユニット４２はＰＣサイロおよびリダイレクトユニット４８と、Ｄ−キャッシュ４４と、外部インターフェイスユニット４６とに接続される。Ｄ−キャッシュ４４はレジスタファイル３８に接続され、外部インターフェイスユニット４６は外部インターフェイス５２に接続される。ここで参照番号とそれに続く記号とによって参照される構成要素は、参照番号のみによって集合的に参照される。たとえば、命令キュー３６Ａ−３６Ｂは命令キュー３６として集合的に参照される。
【００１５】
概して、ロード／記憶ユニット４２はロードのためにそこに含まれる記憶キューからの転送を与える。転送機構はロードの各バイトに対してその他のバイトとは独立に記憶キューをサーチし、そのバイトを更新するために（プログラム順序で）最新の記憶を判定する。したがって、ロードによってアクセスされる１つまたはそれ以上のバイトが１つの記憶によって変更され、一方ロードによってアクセスされる１つまたはそれ以上の他のバイトが別の記憶によって変更されたとしても、転送機構はロードによってアクセスされるバイトをアセンブルできる。有利なことに、ロードデータが記憶キューに記憶されているときにはロードデータは記憶キューから転送できる。ロードを迅速に処理できるため、プロセッサ１０全体の性能を増加できる。
【００１６】
ここで用いる「プログラム順序」という語は、実行されるプログラムにおいて特定化される命令のシーケンスを示す。（プログラム順序において）ある特定の記憶と転送が試みられるロードとの間の他の記憶がバイトを更新しないとき、その特定の記憶はバイトを更新するためにプログラム順序において最新である。
【００１７】
特定の実施例の１つにおいて、ロード／記憶ユニット４２は、ロードおよび記憶のアドレスの最下位ビットの予め定められたセットからビットベクトルを生成する。ビットベクトルは最下位ビットの数によって定められた範囲内の各バイトに対するビットを含む。ビットはそのバイトが（記憶ビットベクトルに対して）更新されたか、または（ロードビットベクトルに対して）アクセスされるか否かを示す。たとえば、セットされたビットはそのバイトが更新／アクセスされたことを示してもよく、クリアされたビットはそのバイトが更新／アクセスされないことを示してもよい。代替的には、クリアされたビットがそのバイトが更新／アクセスされたことを示し、セットされたビットがそのバイトが更新／アクセスされないことを示してもよい。記憶アドレスは記憶キューに記憶されるため、ロード／記憶ユニット４２は記憶ビットベクトルを生成してもよく、またデータキャッシュ４４およびロード／記憶ユニット４２への対応するロードアドレスの提出の際にロードビットベクトルを生成してもよい。次いでロード／記憶ユニット４２は各バイトの最新の更新を配置するためにビットベクトルを調べてもよい（および、ビットベクトルを生成するために用いられた最下位ビットを除く、記憶およびロードアドレスの残りのビットを比較してもよい）。ビットベクトルは各アクセス／更新されたバイトを個別に識別するため、各バイトの最新の更新を配置するための処理は各バイトに対して独立に（および並行して）行なわれてもよい。さまざまな記憶キューエントリから選択されたバイトは次いでともにマージされ、ロードによってアクセスされるバイトのセットを形成する。
【００１８】
なお、ロードおよび記憶は一般的にそれに関連するアドレスを有し、そのアドレスはロード／記憶によってアクセスまたは更新されたメモリ内のメモリの場所を識別する。プロセッサ１０はロード／記憶の１つまたはそれ以上のアドレスオペランドを用いてアドレスを生成する。アドレスオペランドはレジスタ値および命令内にエンコードされる変位を含んでもよい。
【００１９】
図１の実施例において、プロセッサ１０はさまざまなバイト長の、複合命令セットコンピューティング（ＣＩＳＣ）命令セットアーキテクチャを用いる。たとえばプロセッサ１０はｘ８６命令セットアーキテクチャ（ＩＡ−３２とも呼ばれる）を用いてもよい。その他の実施例は、固定長命令セットアーキテクチャおよび減少命令セットコンピューティング（ＲＩＳＣ）命令セットアーキテクチャを含む、その他の命令セットアーキテクチャを用いてもよい。図１に示される特定の特徴はこうしたアーキテクチャにおいて省略されてもよい。
【００２０】
ラインプレディクタ１２はＩ−キャッシュ１４に対するフェッチアドレスを生成するよう構成され、アラインメントユニット１６に命令演算のラインに関する情報を与えるよう付加的に構成される。一般的に、ラインプレディクタ１２はプロセッサ１０によって以前に推論的にフェッチされた命令演算のラインと、ラインのフェッチの際に選択される各ラインに対応する１つまたはそれ以上の次のフェッチアドレスとを記憶する。実施例の１つにおいて、ラインプレディクタ１２は１Ｋエントリを記憶するよう構成され、その各々は命令演算の１ラインを定める。所望であれば、ラインプレディクタ１２はデュアルポーティングなしにその各々を同時に読取および更新可能にするための、たとえば２５６エントリの４つのバンクに並べられてもよい。
【００２１】
ラインプレディクタ１２は次のフェッチアドレスをＩ−キャッシュ１４に与えて、対応する命令バイトをフェッチする。Ｉ−キャッシュ１４は命令バイトを記憶するための高速キャッシュメモリである。実施例の１つに従うと、Ｉ−キャッシュ１４はたとえば２５６Ｋバイトの、６４バイトのキャッシュラインを用いるフォーウェイセットアソシアティブ編成を含んでもよい。しかし、あらゆるＩ−キャッシュ構造が好適であり得る。加えて、命令演算の対応するラインに関するフェッチ情報に対する入力として、次のフェッチアドレスがラインプレディクタ１２に戻される。次のフェッチアドレスは、ＰＣサイロおよびリダイレクトユニット４８に報告される例外状態に応答してＩＴＢ５０によって与えられるアドレスによって無効にされてもよい。
【００２２】
ラインプレディクタによって与えられる次のフェッチアドレスは、ライン内の最後の命令に続くアドレスであってもよい（ラインが非分岐命令において終結するとき）。代替的には、次のフェッチアドレスはラインを終結させる分岐命令の目標アドレスであってもよい。さらに別の代替形においては、ラインは復帰命令によって終結されてもよく、この場合に次のフェッチアドレスは復帰スタック２２から得られる。
【００２３】
フェッチアドレスに応答して、ラインプレディクタ１２はアラインメントユニット１６に、フェッチアドレスにおいて開始する命令演算のラインに関する情報を与える。アラインメントユニット１６はＩ−キャッシュ１４からのフェッチアドレスに対応する命令バイトを受取り、与えられた命令演算情報に従って命令バイトを選択して発行位置のセットとする。より特定的には、ラインプレディクタ１２はライン命令演算内の各命令に対するシフト量と、ラインを含む命令演算のセットへの命令のマッピングとを与える。命令は複数の命令演算に対応し得るため、その命令に対応するシフト量を複数の発生位置に対する命令バイトの選択に用いてもよい。発行位置は、ライン内の可能な命令演算の各々に対して与えられる。実施例の１つにおいては、命令演算のラインは最大６つの命令に対応する最大８つの命令演算を含んでもよい。一般的に、ここで用いる命令演算のラインとは、デコードユニット２４に同時に発行される命令演算の群を示すものである。命令演算のラインは１つのユニットとしてマイクロプロセッサ１０のパイプラインを通って命令キュー３６に進行する。命令キュー３６に記憶されると、個々の命令演算はあらゆる順序で実行されてもよい。
【００２４】
デコードユニット２４内の発行位置（およびそれに続く命令キュー３６までのパイプライン段）は、それらのパイプライン段内のハードウェアに対するライン内の命令演算のプログラム順序を定める。アラインメントユニット１６によって発行位置に整列された命令演算は、命令キュー３６Ａ−３６Ｂ内に記憶されるまでその発行位置に留まる。したがって、第１の発行位置内の命令演算がプログラム順序において第２の発行位置内に同時にある命令演算に先行するとき、第１の発行位置は第２の発行位置に先行すると呼ばれてもよい。同様に、第１の発行位置内の命令演算がプログラム順序において第２の発行位置内に同時にある命令演算に後続するとき、第１の発行位置は第２の発行位置に後続すると呼ばれてもよい。発行位置内の命令演算は、ライン内のその他の命令演算に対して先行または後続すると呼ばれてもよい。
【００２５】
ここで用いる命令演算（またはＲＯＰ）とは、実行コア４０Ａ−４０Ｂ内の実行ユニットが単一のエンティティとして実行するように構成されるような演算のことである。簡単な命令は単一の命令演算に対応してもよく、より複雑な命令は複数の命令演算に対応してもよい。より複雑な命令のあるものはマイクロコードルーチンとしてマイクロコードユニット２８内で実現されてもよい。さらに、非ＣＩＳＣ命令セットを用いる実施例は、各命令に対する単一の命令演算を用いてもよい（すなわち、こうした実施例においては命令および命令演算は同義であってもよい）。特定の実施例の１つにおいては、ラインは最大６つの命令に対応する最大８つの命令演算を含んでもよい。加えて特定の実施例においては、分岐命令が検出されたときに６つの命令および／または８つの命令演算よりも少ないところでラインを終結させてもよい。望みに応じてラインに対する命令演算に関する付加的な制限を用いてもよい。
【００２６】
ラインプレディクタ１２によって生成される次のフェッチアドレスは分岐履歴表１８、間接アドレスキャッシュ２０および復帰スタック２２に経路付けされる。分岐履歴表１８は、次のフェッチアドレスによって識別されるラインを終結させ得る条件付き分岐命令に対する分岐履歴を与える。ラインプレディクタ１２は分岐履歴表１８によって与えられる予測を用いて、ラインを終結する条件付き分岐命令がテークンと予測されるべきか、ノットテークンと予測されるべきかを定めてもよい。実施例の１つにおいて、ラインプレディクタ１２はテークンまたはノットテークンを選択するために用いられる分岐予測を記憶してもよく、分岐履歴表１８は、ラインプレディクタ予測をキャンセルして異なる次のフェッチアドレスを選択させ得るより正確な予測を与えるために用いられる。間接アドレスキャッシュ２０は、頻繁に変化する間接分岐目標アドレスを予測するために用いられる。ラインプレディクタ１２は次のフェッチアドレスとして、予め生成された間接目標アドレスを記憶してもよい。対応するラインが間接分岐命令によって終結されるとき、間接アドレスキャッシュ２０はラインプレディクタ１２によって与えられる次のフェッチアドレスを無効にしてもよい。さらにラインがサブルーチン呼出命令によって終結されるときには、命令演算のライン内の最後の命令に続くアドレスが復帰スタック２２に押出されてもよい。ラインに対して可能な次のフェッチアドレスが復帰命令によって終結されるとき、復帰スタック２２はその頂部に記憶されるアドレスをラインプレディクタ１２に与える。
【００２７】
前述のブロックに次のフェッチアドレスおよび命令演算情報を与えることに加え、ラインプレディクタ１２はＰＣサイロおよびリダイレクトユニット４８に次のフェッチアドレスおよび命令演算情報を与えるよう構成される。ＰＣサイロおよびリダイレクトユニット４８はフェッチアドレスおよびライン情報を記憶し、例外における命令フェッチのリダイレクトおよび命令の順序正しいリタイアに対する責を負う。ＰＣサイロおよびリダイレクトユニット４８は、プロセッサ１０内で処理中であり得る複数のラインの命令演算に対応するフェッチアドレスおよび命令演算情報を記憶するための環状バッファを含んでもよい。命令のラインのリタイアの際に、ＰＣサイロおよびリダイレクトユニット４８は条件付き分岐および間接分岐の実行にそれぞれ従って分岐履歴表１８および間接アドレスキャッシュ２０を更新してもよい。例外を処理する際に、ＰＣサイロおよびリダイレクトユニット４８は例外を起こす命令に後続する復帰スタック２２からのエントリを取除いてもよい。加えて、ＰＣサイロおよびリダイレクトユニット４８は例外を起こす命令の表示をマップユニット３０、命令キュー３６およびロード／記憶ユニット４２に経路付けることによって、それらのユニットが例外を起こす命令および回復推論状態に後続する命令をキャンセルできるようにしてもよい。
【００２８】
実施例の１つにおいて、ＰＣサイロおよびリダイレクトユニット４８は各命令演算にシーケンス番号（Ｒ♯）を割当てることによって、プロセッサ１０内で処理中の命令演算の順序を識別する。ＰＣサイロおよびリダイレクトユニット４８はラインを伴う可能な命令演算の各々にＲ♯を割当ててもよい。ラインに含まれるものが命令演算の最大数よりも少ないとき、割当てられたＲ♯のいくつかはそのラインに対して用いられない。しかし、ＰＣサイロおよびリダイレクトユニット４８は命令演算の次のラインに対して次のＲ♯のセットを割当てるよう構成されてもよく、よって割当てられたが用いられないＲ♯は命令演算の対応するラインがリタイアされるまで用いられずに残る。この態様で、所与のラインに割当てられたＲ♯の部分はプロセッサ１０内のラインを識別するために用いられてもよい。実施例の１つにおいては、最大８つのＲＯＰがラインに割当てられてもよい。したがって、各ライン内の第１のＲＯＰには８の倍数のＲ♯が配置されてもよい。したがって用いられないＲ♯は自動的に飛ばされる。
【００２９】
前述に、次のアドレスを予測して命令演算のラインに対する命令演算情報を与えるラインプレディクタ１２を説明した。この動作は各フェッチアドレスがラインプレディクタ１２にヒットする限り起こる。ラインプレディクタ１２にミスを検出すると、アラインメントユニット１６は対応する命令バイトをＩ−キャッシュ１４からプレディクタミスデコードユニット２６に経路付ける。プレディクタミスデコードユニット２６は、ミスしたフェッチアドレスによって特定されるオフセットにおいて始まる命令をデコードし、命令演算情報のラインと次のフェッチアドレスとを生成する。プレディクタミスデコードユニット２６は、命令演算のライン上のあらゆる制限をプロセッサ１０が設計されたとおり（たとえば、命令演算の最大数、命令の最大数、分岐命令の終結など）に強制する。ラインのデコードを完了する際に、プレディクタミスデコードユニット２６は記憶のために情報をラインプレディクタ１２に与える。なお、プレディクタミスデコードユニット２６は命令がデコードされるときに命令をディスパッチするよう構成されてもよい。図１において、このオプションを点線によって例示する。代替的には、プレディクタミスデコードユニット２６は命令情報のラインをデコードしてそれを記憶のためにラインプレディクタ１２に与えてもよい。続いて、ミスしたフェッチアドレスがラインプレディクタ１２中で再び試みられてもよく、ヒットが検出され得る。さらに、ラインプレディクタ１２中のヒットが検出されてＩ−キャッシュ１４中のミスが起こり得る。対応する命令バイトは外部インターフェイスユニット４６を通じてフェッチされ、Ｉ−キャッシュ１４に記憶されてもよい。
【００３０】
実施例の１つにおいて、ラインプレディクタ１２およびＩ−キャッシュ１４は物理アドレス指定を用いる。しかし、例外を検出する際には、ＰＣサイロおよびリダイレクトユニット４８には論理（または仮想）アドレスが供給される。したがって間接アドレスはラインプレディクタ１２（および対応する命令バイトを読取るために並行してＩ−キャッシュ１４）に提出するためにＩＴＢ５０によって変換される。加えてＰＣサイロおよびリダイレクトユニット４８は、相対分岐目標アドレスなどのＰＣ相対計算に用いるための仮想ルックアヘッドＰＣ値を維持する。各ラインに対応する仮想ルックアヘッドＰＣがＩＴＢ５０によって変換されることにより、対応する物理アドレスがラインプレディクタ１２によって生成される物理フェッチアドレスと整合することが証明される。不整合が起こると、ラインプレディクタ１２は正しい物理アドレスによって更新され、正しい命令がフェッチされる。ＰＣサイロおよびリダイレクトユニット４８はさらに、保護バウンダリを超えるフェッチなどに関する例外を取扱う。ＰＣサイロおよびリダイレクトユニット４８はまた、最新のリタイアされた命令のアドレスを示すリタイアＰＣ値を維持する。この実施例において、ＰＣサイロおよびリダイレクトユニット４８は命令演算のラインを同時にリタイアしてもよい。したがって、ＰＣサイロおよびリダイレクトユニット４８はラインのＲ♯表示をマップユニット３０、命令キュー３６Ａ−３６Ｂ、およびロード／記憶ユニット４２に送ってもよい。
【００３１】
前述のとおり、デコードユニット２４は複数の発行位置においてアラインメントユニット１６から命令演算を受取るよう構成される。デコードユニット２４は、各発行位置に対して並行に（命令バイトに対応するどの命令演算が特定の発行位置において生成されるかの表示に沿って）整列された命令バイトをデコードする。デコードユニット２４は各命令演算に対するソースおよびデスティネーションオペランドを識別し、実行コア４０Ａ−４０Ｂによって用いられる命令演算符号化を生成する。デコードユニット２４はまた、マイクロコード中で実現される命令に対するマイクロコードユニット２８からのマイクロコードルーチンをフェッチするよう構成される。
【００３２】
特定の実施例の１つに従うと、次の命令演算はプロセッサ１０によって支持される。すなわち整数と、浮動小数点付加（マルチメディアを含む）と、浮動小数点乗算（マルチメディアを含む）と、分岐と、ロードと、記憶アドレス生成と、記憶データとである。各命令演算は最大２つのソースレジスタオペランドと１つのデスティネーションレジスタオペランドとを用いてもよい。特定の実施例の１つに従うと、整数結果と状態コード（またはフラグ）更新との両方を記憶するために、単一のデスティネーションレジスタオペランドが整数ＲＯＰに割当てられてもよい。対応する論理レジスタはどちらも整数演算のリタイアの際に対応するＰＲ♯を受取る。ある種の命令は、２つのデスティネーションレジスタを更新するために同じタイプの２つの命令演算を生成してもよい（たとえば、ＥＳＰおよび特定化されたデスティネーションレジスタを更新するＰＯＰなど）。
【００３３】
デコードされる命令演算と、ソースおよびデスティネーションレジスタ数とがマップユニット３０に与えられる。マップユニット３０は、物理レジスタ数（ＰＲ♯）を各デスティネーションレジスタオペランドおよび各命令演算のソースレジスタオペランドに割当てることによってレジスタ改名を行なうよう構成される。物理レジスタ数はレジスタファイル３８Ａ−３８Ｂ内のレジスタを識別する。加えてマップユニット３０は、キュー数（ＩＱ♯）を各命令演算に割当てて、命令演算を記憶するために割当てられる命令キュー３６Ａ−３６Ｂ内の場所を識別する。マップユニット３０は、命令演算のソースオペランドに割当てられる各物理レジスタ数を更新する命令のキュー番号を与えることによって、各命令演算に対する依存性の表示を付加的に与える。マップユニット３０は、物理レジスタ数と各命令演算に割当てられる数に対する命令（および対応する論理レジスタ数）とによってマップサイロ３２を更新する。さらにマップサイロ３２は、命令のラインに先行する論理レジスタに対応するルックアヘッド状態と、ＰＣサイロに関する命令のラインを識別するＲ♯とを記憶するよう構成されてもよい。前述のＰＣサイロと同様に、マップサイロ３２はエントリの環状バッファを含んでもよい。各エントリは命令演算の１つのラインに対応する情報を記憶するよう構成されてもよい。
【００３４】
マップユニット３０およびマップサイロ３２はさらにＰＣサイロ４８からリタイア命令を受取るよう構成される。命令演算のラインをリタイアする際に、マップサイロ３２はラインに割当てられるデスティネーション物理レジスタ数と対応する論理レジスタ数とを記憶のためにアーキテクチャ改名ブロック３４に運ぶ。アーキテクチャ改名ブロック３４は各論理レジスタに対する制約されたレジスタ状態を表わす、各論理レジスタに対応する物理レジスタ数を記憶する。新たな物理レジスタ数によって対応する論理レジスタが更新される際にアーキテクチャ改名ブロック３４から変位される物理レジスタ数は、その後の命令に対する配置のために物理レジスタ数のフリーリストに戻される。実施例の１つにおいては、物理レジスタ数をフリーリストに戻す前に、その物理レジスタ数はアーキテクチャ改名ブロック３４内の残りの物理レジスタ数と比較される。物理レジスタ数が変位された後にもアーキテクチャ改名ブロック３４内に表わされるとき、その物理レジスタ数はフリーリストに加えられない。こうした実施例は、同じ物理レジスタ数を用いて命令の１つ以上の結果を記憶する場合に用いられてもよい。たとえば、ｘ８６命令セットアーキテクチャを用いる実施例は、浮動小数点オペランドを記憶するために十分に大きい物理レジスタを与え得る。この態様で、あらゆるタイプのオペランドを記憶するためにあらゆる物理レジスタが用いられてもよい。しかし、整数オペランドおよび状態コードオペランドは所与の物理レジスタ内の空間を完全には用いない。こうした実施例においては、プロセッサ１０は命令の整数結果および状態コード結果の両方を記憶するために単一の物理レジスタを割当ててもよい。物理レジスタに対応する状態コード結果をオーバーライトする命令のその後のリタイアは同じ整数レジスタを更新しなくてもよく、よって物理レジスタは新たな状態コード結果を制約する際に自由ではない可能性がある。同様に、物理レジスタに対応する整数レジスタを更新する命令のその後のリタイアは状態コードレジスタを更新しなくてもよく、よって物理レジスタは新たな整数結果を制約する際に自由ではない可能性がある。
【００３５】
さらに、マップユニット３０およびマップサイロ３２はＰＣサイロ４８から例外表示を受取るよう構成される。例外を起こす命令演算を含むラインに続く命令演算のラインは、マップサイロ３２内で無効とマークされる。命令演算のその後のラインに対応する物理レジスタ数はリタイアのための対応するラインの選択の際に解放される（かつ、アーキテクチャ改名ブロック３４は無効化されたデスティネーションレジスタによって更新されない）。加えて、マップユニット３０によって維持されるルックアヘッドレジスタ状態は、例外を起こす命令に対応するルックアヘッドレジスタ状態に復元される。
【００３６】
命令演算のラインと、ソース物理レジスタ数と、ソースキュー数と、デスティネーション物理レジスタ数とはマップユニット３０によって割当てられるキュー数に従って命令キュー３６Ａ−３６Ｂに記憶される。実施例の１つに従うと、命令キュー３６Ａ−３６Ｂは対称であり、あらゆる命令を記憶できる。さらに、いずれかの命令キューに記憶されるその他の命令演算に関して特定の命令演算に対する依存性が起こり得る。たとえば、マップユニット３０は命令演算のラインを一方の命令キュー３６Ａ−３６Ｂに記憶し、続く命令演算のラインを他方の命令キュー３６Ａ−３６Ｂに記憶してもよい。命令演算は、少なくともその命令演算が実行のためにスケジューリングされるまでは命令キュー３６Ａ−３６Ｂ中に残る。実施例の１つにおいて、命令演算はリタイアされるまで命令キュー３６Ａ−３６Ｂ中に残る。
【００３７】
命令キュー３６Ａ−３６Ｂは、特定の命令演算を実行のためにスケジューリングする際に、その特定の命令演算がどのクロックサイクルにおいてレジスタファイル３８Ａ−３８Ｂを更新するかを定める。実行コア４０Ａ−４０Ｂ内の異なる実行ユニットは異なる数のパイプライン段（すなわち異なる待ち時間）を用いてもよい。さらに、特定の命令はパイプライン内で他のものよりも長い待ち時間を経験してもよい。したがって（いくつかのクロックサイクル中の）特定の命令演算に対する待ち時間を測定するカウントダウンが生成される。命令キュー３６Ａ−３６Ｂは（レジスタファイルを読取る依存性命令演算に先行して、またはそれと同時に更新が起こるまで）特定された数のクロックサイクルを待ち、次いでその特定の命令演算に依存する命令演算がスケジューリングされ得ることを示す。たとえば特定的な実施例の１つにおいては、依存性命令演算はそれらがレジスタファイル３８Ａ−３８Ｂの更新に関して依存する命令演算に２クロックサイクル先行してスケジューリングされてもよい。別の実施例においては、依存性命令演算をそれらがレジスタファイル３８Ａ−３８Ｂの完了および更新に関して依存す命令演算に先行または後続する異なる数のクロックサイクルでスケジューリングしてもよい。各命令キュー３６Ａ−３６Ｂはその命令キュー内の命令演算に対するカウントダウンを維持し、カウントダウンの終了の際に内部で依存性命令演算がスケジューリングされるようにする。加えて、その命令キューはカウントダウンの終了の際に他方の命令キューに表示を与える。その後、他方の命令キューが依存性命令演算をスケジューリングしてもよい。この、他方の命令キューへの命令演算完了の遅延した伝達によって、レジスタファイル３８Ａ−３８Ｂは実行コア４０Ａ−４０Ｂの一方によって与えられる結果を他方のレジスタファイルに伝搬できる。各レジスタファイル３８Ａ−３８Ｂはプロセッサ１０によって用いられる物理レジスタのセットを実現し、実行コア４０Ａ−４０Ｂの一方によって更新される。この更新は次いで他方のレジスタファイルに伝搬される。なお、命令キュー３６Ａ−３６Ｂはその依存性が満たされるときに（すなわちキュー内の順序に関してアウトオブオーダで）命令をスケジューリングしてもよい。
【００３８】
命令キュー３６Ａからスケジューリングされた命令演算はレジスタファイル３８Ａからのソース物理レジスタ数に従ってソースオペランドを読取り、実行のために実行コア４０Ａに運ばれる。実行コア４０Ａは命令演算を実行し、レジスタファイル３８Ａ内のデスティネーションに割当てられた物理レジスタを更新する。いくつかの命令演算はデスティネーションレジスタを有さず、この場合に実行コア４０Ａはデスティネーション物理レジスタを更新しない。加えて、実行コア４０Ａは命令演算のＲ♯と命令演算に関する例外情報（あれば）とをＰＣサイロおよびリダイレクトユニット４８に伝達する。命令キュー３６Ｂ、レジスタファイル３８Ｂおよび実行コア４０Ｂは類似の態様で動作してもよい。
【００３９】
実施例の１つにおいて、実行コア４０Ａおよび実行コア４０Ｂは対称である。各実行コア４０はたとえば浮動小数点付加ユニット、浮動小数点乗算ユニット、２つの整数ユニット、分岐ユニット、ロードアドレス生成ユニット、記憶アドレス生成ユニット、および記憶データユニットなどを含んでもよい。実行ユニットのその他の構成も可能である。
【００４０】
デスティネーションレジスタを有さない命令演算には、記憶アドレス生成、記憶データ演算、および分岐演算などがある。記憶アドレス／記憶データ演算は結果をロード／記憶ユニット４２に与える。ロード／記憶ユニット４２はメモリデータ演算を行なうためにＤ−キャッシュ４４にインターフェイスを与える。実行コア４０Ａ−４０Ｂは命令のアドレスオペランドに基づいてロードＲＯＰおよび記憶アドレスＲＯＰを実行し、それぞれロードおよび記憶アドレスを生成する。より特定的には、ロードアドレスおよび記憶アドレスは実行コア４０Ａ−４０Ｂによる生成の際に（実行コア４０Ａ−４０ＢおよびＤ−キャッシュ４４の間の接続を介して直接的に）Ｄ−キャッシュ４４に提出されてもよい。Ｄ−キャッシュ４４にヒットしたロードアドレスによってデータはＤ−キャッシュ４４からレジスタファイル３８に経路づけられる。他方で、ヒットした記憶アドレスは記憶キューエントリを割当てられる。続いて、（記憶データをレジスタファイル３８Ａ−３８Ｂからロード／記憶ユニット４２に経路づけるために用いられる）記憶データ命令演算によって記憶データが与えられる。したがってこの実施例において、記憶は記憶アドレス命令演算および記憶データ命令演算を含んでもよい。言い換えると、この記憶アドレス命令演算および対応する記憶データ命令演算は同じ命令に由来する。記憶は命令であってもよく、またはメモリデスティネーションオペランドを有する別の命令の暗黙部分であってもよい。記憶命令のリタイアの際に、データはＤ−キャッシュ４４に記憶される。加えて、ロード／記憶ユニット４２は（外部インターフェイス４６を介して）続くキャッシュフィルのためにＤ−キャッシュ４４をミスしたロード／記憶アドレスを記憶し、かつミスしたロード／記憶演算を再び試みるためのロード／記憶バッファを含んでもよい。ロード／記憶ユニット４２はロード／記憶メモリ依存性を取扱うためにさらに構成される。
【００４１】
図２に、プロセッサ１０の部分の実施例の１つのブロック図を示す。その他の実施例も可能であり予期される。図２の実施例において、記憶アドレス生成ユニット（ＡＧＵ）４０ＡＡ、ロードＡＧＵ４０ＡＢおよび記憶データユニット４０ＡＣが示される。記憶ＡＧＵ４０ＡＡ、ロードＡＧＵ４０ＡＢおよび記憶データユニット４０ＡＣは実行コア４０Ａ（図１に示す）に含まれる。実施例の１つにおいて、実行コア４０Ｂが同様に構成されてもよい。代替的には、実行コア４０Ｂは図２に例示される実行ユニットの１つまたはそれ以上を省略してもよい。図２には記憶変換バッファ（ＴＢ）４０ＡＤおよびロードＴＢ４０ＡＥが付加的に例示されており、これらは実行コア４０Ａに含まれていてもよい。Ｄ−キャッシュ４４およびロード／記憶ユニット４２が例示されており、このロード／記憶ユニット４２はロード／記憶キュー６０と、転送論理６２と、記憶キュー６４とを含む。最後に、回転／マルチプレクサ回路６６が示される。記憶ＡＧＵ４０ＡＡは記憶ＴＢ４０ＡＤに接続され、さらにＤ−キャッシュ４４、ロード／記憶キュー６０および記憶キュー６４に接続される。ロードＡＧＵ４０ＡＢはロードＴＢ４０ＡＥに接続され、さらにデータキャッシュ４４、ロード／記憶キュー６０および転送論理６２に接続される。記憶データユニット４０ＡＣは記憶キュー６４に接続される。ＰＣサイロ４８も記憶キュー６４に接続される。記憶キュー６４、転送論理６２およびデータキャッシュ４４は回転／マルチプレクサ回路６６に接続され、さらにレジスタファイル３８Ａ−３８Ｂに接続される。データキャッシュ４４はロード／記憶キュー６０および記憶キュー６４に接続される。実行コア４０Ｂはこの実施例において、データキャッシュ４４、ロード／記憶キュー６０、転送論理６２および記憶キュー６４にも接続される。
【００４２】
記憶ＡＧＵ４０ＡＡは記憶アドレスＲＯＰを実行し、その記憶アドレスＲＯＰが由来する記憶に対応する記憶アドレスを生成する。生成されるアドレスは仮想アドレス（ＶＡ）であり、物理アドレス（ＰＡ）への変換のために記憶ＴＢ４０ＡＤに運ばれる。あらゆる好適な変換機構が用いられてもよく、変換機構は一般的にプロセッサ１０によって用いられる命令セットアーキテクチャに従って定められる。たとえば、プロセッサ１０の実施例の１つはｘ８６命令セットアーキテクチャを用いる。こうした実施例において、仮想アドレスは最初にセグメンテーション機構を通じて線形アドレスに変換される論理アドレスである。論理アドレスおよび線形アドレスが同等であるフラットアドレス指定モードが用いられてもよい。線形アドレスはページング機構を通じて物理アドレスに変換される。記憶ＴＢ４０ＡＤは変換を迅速に行なうために最近用いられた変換を記憶する。所与のアドレスに対する変換が記憶ＴＢ４０ＡＤに見出されないとき、変換バッファリロードシーケンスが行なわれて対応する変換のために外部メモリに記憶される変換情報がサーチされる。
【００４３】
記憶キュー６４はプロセッサ１０内で処理中の（すなわち発行されてまだリタイアされていない）記憶に対応するアドレスとデータとを記憶する。この実施例においてより特定的には、記憶キュー６４は実行されたがまだリタイアされていない記憶を保持する。したがって記憶キュー６４は記憶ＴＢ４０ＡＤから物理記憶アドレスおよび対応するＲ♯を受取るよう構成される。アドレスを受取ると、記憶キュー６４は記憶のための記憶キューエントリを配置してそこに記憶アドレスを置く。記憶キュー６４は実行コア４０Ｂ内の記憶ＡＧＵ／記憶ＴＢ構造から物理記憶アドレスを同様に受取ってもよい。
【００４４】
その後、記憶に対応する記憶データＲＯＰは記憶データユニット４０ＡＣによって実行される。記憶データユニット４０ＡＣは記憶データＲＯＰに割当てられるＲ♯に沿って記憶データを記憶キュー６４に伝送する。記憶キュー６４は記憶データを、対応する記憶に割当てられる記憶キューエントリに記憶する。記憶キュー６４は実行ユニット４０Ｂ内の記憶データユニットからの記憶データを同様に受取ってもよい。
【００４５】
記憶ＡＧＵ４０ＡＡおよび記憶ＴＢ４０ＡＤの動作と同様に、ロードＡＧＵ４０ＡＢおよびロードＴＢ４０ＡＥはロードＲＯＰに対応するロード物理アドレスを生成し、そのロード物理アドレスを転送論理６２に伝達する。転送論理６２はロードによってアクセスされたバイトが記憶キュー６４に記憶されるか否かを定める。アクセスされたバイトの各々を個々に処理することにより、転送論理６２はそのバイトに対する最新の記憶のための記憶キュー６４をサーチする。更新が置かれると、バイトが記憶キュー６４から選択されて回転／マルチプレクサ回路６６に与えられる。この態様で、アクセスされたバイトの各々は記憶キュー６４内のバイトの最新の更新から与えられる（更新がそのバイトに対して置かれるとき）。場合に応じて、各バイトが個別の記憶から与えられてもよく、または２つまたはそれ以上のバイトが同じ記憶から与えられる一方でその他のバイトは異なる記憶から与えられてもよく、または同じ記憶がすべてのアクセスされたバイトを与えてもよい。したがって記憶キュー６４から選択されたアクセスされたバイトは効果的にマージされて回転／マルチプレクサ回路６６におけるロードデータを与える。
【００４６】
転送論理６２はまた、選択および回転制御を回転／マルチプレクサ回路６６に与える。ロードＲＯＰが記憶キュー６４内の記憶から転送されたデータを受取ったことを転送論理６２が検出すると、転送論理６２は回転／マルチプレクサ回路６６に記憶キュー６４から与えられたデータを選択するよう信号を送る。加えて、記憶キュー６４から与えられたデータはメモリの順序である（すなわちバイトはバイト場所の記憶キュー６４内に、対応する記憶のアドレスに従って整列されて記憶される）。データはレジスタファイル３８Ａ−３８Ｂでの記憶のために適切に整列されるよう回転されてもよい。転送論理６２もこの信号を与える。最後に、ロードＲＯＰが記憶キュー６４から転送されるデータを受取らないことを転送論理６２が検出すると、転送論理６２は回転／マルチプレクサ回路６６にデータキャッシュ４４の出力を選択するよう信号を送る。
【００４７】
なお、ロードＲＯＰはロードＲＯＰによってアクセスされる記憶データを与える記憶データＲＯＰよりも前に実行されてもよい。このような場合、記憶キュー６４はアクセスされたバイトの代わりに記憶データＲＯＰのＲ♯を与えてもよい。ロードＲＯＰは記憶データＲＯＰのスケジューリングに続いて実行のために再スケジューリングされてもよい。ロード／記憶ユニット４２は、記憶データがロードへの転送のために利用可能でないときに命令キュー３６Ａ−３６Ｂに信号を送って（その後のあらゆるスケジューリングされたＲＯＰと同様に）ロードの再スケジューリングを許してもよい。加えてマップユニット３０は、記憶データが利用可能でないロードヒット記憶の場合を予測するよう構成されてもよい。記憶データＲＯＰのＲ♯がＰＣサイロ４８に与えられることによって、（記憶データが利用可能でない）その後のロードヒット記憶シナリオの予測において用いるためにマップユニット３０に記憶命令に関する情報を与えてもよい。
【００４８】
前述に従って記憶キュー６４にロードおよび記憶アドレスを与えることに加え、ロードおよび記憶アドレスはデータキャッシュ４４におけるヒットが検出されたかどうかを判定するためにデータキャッシュ４４に提出される。ロードＲＯＰに対し、データキャッシュ４４のヒットが検出されると、データはデータキャッシュ４４からレジスタファイル３８Ａ−３８Ｂに転送される。ロードＲＯＰがデータキャッシュ４４をミスしたとき、ロードＲＯＰはその後の再試行のために（および、ロードＲＯＰがロード／記憶キュー６０のヘッドに達し、かつＷ／Ｏがより早いメモリ演算からのキャッシュフィルを介したＤ−キャッシュ４４におけるヒットとなることが推論的でないとき、最終的にはメモリからのミスしたキャッシュラインをフェッチするための外部インターフェイスユニット４６への伝送のために）ロード／記憶キュー６０に記憶される。データキャッシュ４４に再試行される際に、ロードＲＯＰは転送論理６２にも運ばれることによって、記憶キュー６４内の記憶データがロードＲＯＰに対して転送されるかどうかが定められる。（実行コア４０Ａまたは４０Ｂのいずれかより）データキャッシュ４４に対して試みられた各ロードＲＯＰに対するヒット／ミス表示はロード／記憶キュー６０に運ばれることによって、そのロードＲＯＰがそこに記憶されるかどうかが定められる。記憶アドレスＲＯＰに対し、ヒット／ミス表示はその記憶が（ロードＲＯＰと同様に）ロード／記憶キュー６０のエントリに割当てられるかどうかを判定する。しかし記憶アドレスＲＯＰはそのヒット／ミス状態にかかわらず記憶キュー６４に割当てられる。なお、あらゆる数のエントリが用いられてもよいが、例示的な実施例の１つにおいてロード／記憶キュー６０は１２８エントリを含んでもよく、記憶キュー６４は６４エントリを含んでもよい。
【００４９】
ＰＣサイロ４８は記憶キュー６４にリタイア制御信号を与える。前述のとおり、この実施例においてＰＣサイロ４８はＲＯＰのラインを同時にリタイアする。ＰＣサイロ４８はリタイアされたＲＯＰのＲ♯を記憶キュー６４に与えることにより、記憶キュー６４にデータキャッシュ４４に対して制約するための記憶データを選択させてもよい。特定の記憶をすぐに制約できないとき（たとえばその記憶がデータキャッシュ４４におけるミスであるとき、または１つ以上の記憶が同時にリタイアされるとき）、記憶キュー６４はその特定の記憶のリタイアを記録し、続いて記憶データを制約してもよい。
【００５０】
なお、図２（および以下のその他の図面）に示す実施例においては、記憶からロードへの転送を行なうために物理アドレスを用いるが、仮想アドレス、論理アドレスまたは線形アドレスを用いるその他の実施例も予期される。さらに、前述の実施例において実行コア４０Ｂは実行コア４０Ａと同じロード／記憶実行リソースを有する（すなわち実行コア４０Ａおよび４０Ｂは実行リソースに関して対称である）ものとして説明されたが、その他の実施例では望みに応じて非対称実行リソースを用いてもよい。
【００５１】
図３に、記憶キュー６４および転送論理６２の実施例の１つを例示するブロック図を示す。その他の実施例も可能であり予期される。図３に示すとおり、記憶キュー６４は記憶アドレスキュー６４Ａと、記憶ビットベクトルキュー６４Ｂと、記憶データキュー６４Ｃとを含む。加えて図３には１対のビットベクトルジェネレータ７０Ａおよび７０Ｂが示される。図３には、図面の簡略化のために１つのロードアドレスに対するデータの転送を例示する。図２に示すとおり、記憶キュー６４は最大３つのロードＲＯＰ（実行コア４０Ａおよび４０Ｂから各々１つ、およびロード／記憶キュー６０から再試行されるロードのために１つ）に対するロードデータを供給するよう構成されてもよい。他のロードＲＯＰのために類似のハードウェアが用いられてもよい。この考察に対して、ロード情報はロードＴＢ４０ＡＥから受取られるものとして説明され、記憶アドレス情報は記憶ＴＢ４０ＡＤからのものとして説明されるであろう。記憶データ情報は記憶データユニット４０ＡＣから受取られるものとして説明されるであろう。しかし、図２に示されるものを含む各情報に対するその他のソースが実現される。さらに、転送の目的のために仮想アドレスが用いられる実施例においては、アドレスはＡＧＵから直接受取られてもよい。
【００５２】
ビットベクトルジェネレータ７０Ａは、ロードＴＢ４０ＡＥからロードアドレスの予め定められた数の最下位ビットと、ロードの大きさの表示（すなわちロードアドレスにおいて始まるアクセスされるバイトの数）とを受取るよう接続され、さらに転送論理６２に接続される。同様に、ビットベクトルジェネレータ７０Ｂは記憶ＴＢ４０ＡＤから記憶アドレスの予め定められた数の最下位ビットと、記憶の大きさとを受取るよう接続され、記憶ビットベクトルキュー６４Ｂに接続される。なお、ロードが１つの大きさのみである実施例においては、大きさの情報は省略されてもよい。記憶ビットベクトルキュー６４Ｂおよび記憶アドレスキュー６４Ａは転送論理６２に接続され、さらにマルチプレクサ（muxes）のセット７２Ａ−７２Ｈと回転／マルチプレクサ回路６６とに接続される。マルチプレクサ７２Ａ−７２Ｈは回転／マルチプレクサ回路６６および記憶データキュー６４Ｃに接続される。記憶データキュー６４Ｃは記憶データユニット７０ＡＣから記憶データと対応するＲ♯とを受取るよう接続され、またリタイアＲ♯を受取るためにＰＣサイロ４８に接続される。さらに記憶データキュー６４Ｃは記憶ＴＢ４０ＡＤから記憶アドレスＲＯＰに対応するＲ♯を受取るように接続される。記憶アドレスキュー６４Ａは記憶ＴＢ４０ＡＤから記憶アドレスを受取り、ロードＴＢ４０ＡＥからロードアドレスを受取るよう接続される。より特定的には、記憶アドレスキュー６４Ａはビットベクトルジェネレータ７０Ａによって受取られる最下位ビットを除くアドレスを受取るよう結合される。
【００５３】
ビットベクトルジェネレータ７０Ａおよび７０Ｂに受取られた予め定められた数の最下位ビットは、アクセスまたは更新されたバイトが存在し得るバイトの範囲を定める。言い換えると、最下位ビットを除くアドレスはバイトの範囲内にあるバイトのセットに対して同じである。ビットベクトルジェネレータ７０Ａ−７０Ｂはその範囲内の各バイトに対するビットを有するビットベクトルを生成する。ビットはバイトが対応するロードまたは記憶に応答してアクセス／更新されるときにはセットされ、バイトが対応するロードまたは記憶に応答してアクセス／更新されないときにはクリアされる。ビットベクトルジェネレータ７０Ｂによって生成された記憶ビットベクトルは、記憶ビットベクトルキュー６４Ｂに記憶される。したがって、記憶ビットベクトルは記憶キュー６４に提出される各記憶アドレスに対して生成される。ビットベクトルジェネレータ７０Ａによって生成されるロードビットベクトルは転送論理６２に与えられる。
【００５４】
ロードアドレスの残りのビット（ロードビットベクトルを形成するために用いられたビットを除く）は記憶アドレスキュー６４Ａに与えられる。ロードアドレスは、記憶アドレスキュー６４Ａに記憶される記憶アドレスと比較される。記憶アドレスキュー６４Ａはたとえば、そこに記憶される記憶アドレスに対するロードアドレスのための内容アドレスメモリ（ＣＡＭ）であってもよい。代替的な構成も可能である。与えられたロードアドレスに整合する記憶アドレスを含む記憶アドレスキュー６４Ａ内の各エントリは、転送論理６２に「ヒット」信号を発行する。
【００５５】
ロードビットベクトルおよび記憶アドレスキュー６４Ａからのヒット信号に加え、転送論理６２は記憶キュー６４内の記憶に対応する記憶ビットベクトルを受取る。転送論理６２は各バイトを独立に処理して、ロードビットベクトル中の対応するビットを調べてバイトがアクセスされたかどうかを定め、各記憶ビットベクトル中の対応するビットを調べてバイトが対応する記憶によって更新されたかどうかを判定する。（記憶ビットベクトル中の対応するビットおよび記憶アドレスキュー６４Ａからの対応する発行されたヒット信号を介して）バイトが更新されたことを示す各記憶キューエントリは、記憶キュー内の記憶のプログラム順序に従ってバイトに対する最新の更新をピックする転送論理６２内のピックワン回路に関係する。選択されたバイトは、転送論理６２によってマルチプレクサ７２に発行された選択信号を介して記憶データキュー６４Ｃから検索される。各マルチプレクサ７２Ａ−７２Ｈは記憶キュー６４内の異なるバイトに対応する。たとえばマルチプレクサ７２Ａは、転送論理６２の制御下で記憶キュー６４内の各エントリのバイト０位置からロードデータのバイト０を選択する。同様に、マルチプレクサ７２Ｈは転送論理６２の制御下で記憶キュー６４内の各エントリのバイト７位置からロードデータのバイト７を選択する。その他のバイト位置はその他のマルチプレクサによって選択される（簡略化のため図３には示さず）。加えて転送論理６２はロードデータバイトが記憶キュー６４から与えられたかどうかを定め、回転／マルチプレクサ回路６６に選択制御を与えることによって回転／マルチプレクサ回路６６の入力としてマルチプレクサ７２から与えられるデータバイトを選択する。
【００５６】
転送論理６２からは回転制御も与えられる。データバイトは記憶キュー６４Ｃにメモリの順序で（すなわち、この例示的な実施例の８バイトデータキューエントリに対する８バイトバウンダリなど、キューエントリの大きさであるバウンダリに対して整列されるメモリブロック内の記憶場所に対応するキューエントリ内のバイト場所に）記憶される。メモリに対するロードおよび記憶は記憶場所に関してあらゆる整列を有してもよいのに対し、レジスタ内のバイト場所は固定される。したがってマルチプレクサ７２によって与えられるデータバイトの回転は、バイトをレジスタファイルに対して整列するために行なわれてもよい。
【００５７】
一般的に、記憶キュー６４内のエントリは、記憶に対応する記憶アドレスＲＯＰの実行の際に割当てられる。エントリは記憶アドレスキュー６４Ａ中のエントリと、記憶ビットベクトルキュー６４Ｂ中のエントリと、記憶データキュー６４Ｃ中のエントリとを含む。たとえば図３に例示されるエントリ７６Ａ、７６Ｂおよび７６Ｃは、記憶キュー６４中の記憶キューエントリを含んでもよい。記憶アドレス（ビットベクトルを生成するために用いられる最下位ビットを除く）は記憶アドレスキュー６４Ａに記憶され、対応する記憶ビットベクトルは記憶ＴＢ４０ＡＤから記憶アドレスを受取る際に記憶ビットベクトルキュー６４Ｂに記憶される。加えて、対応する記憶データＲＯＰに対応するＲ♯は、記憶ＴＢ４０ＡＤから記憶アドレスを受取る際に記憶データキュー６４Ｃに記憶される。この実施例において、記憶データＲＯＰはＲＯＰの同じライン内の記憶アドレスＲＯＰを継続する。したがって、対応するＲ♯は１つずつ増加する記憶アドレスＲＯＰのＲ♯である。
【００５８】
続いて、対応する記憶データＲＯＰは記憶データユニット４０ＡＣによって実行され、Ｒ♯および記憶データは記憶データキュー６４Ｃに与えられる。記憶データユニット４０ＡＣによって与えられるＲ♯が記憶データキュー６４Ｃに記憶されるＲ♯と比較されることにより、その記憶データが記憶されるべきエントリが定められる。記憶データキュー６４Ｃはたとえば、実施例の１つにおいて記憶データ演算のＲ♯に対するＣＡＭとして実現されてもよい。代替的な構成も可能である。Ｒ♯における適合が検出されるエントリがデータを記録する。記憶データキュー６４Ｃはそのデータが妥当であることを示す妥当ビットを付加的に含んでもよい。ＣＡＭ整合は妥当ビットをセットするために用いられもよい。データが妥当でないとき、記憶データキュー６４Ｃはデータの代わりにマルチプレクサ７２Ａ−７２Ｈへの入力として記憶データ演算のＲ♯を与えてもよい。代替的には、データがまだ妥当でないときにＲ♯を自動的に与えるために、記憶データキュー６４Ｃ内の各バイト場所にＲ♯が記憶されてもよい。
【００５９】
この例示的な実施例において、ビットベクトルは１６ビットを含むのに対し、記憶データキューはエントリ当り最大８バイトの記憶データを記憶する。よってこの例示的な実施例は記憶当り最大８バイトの記憶データを支持する。しかし、整列されない８バイト値の明白な支持を可能にするために１６ビットのビットベクトルが支持される。言い換えると、１６ビットを有するビットベクトルによって、あらゆる整列されない８バイト量を０および１のマスクとして表わし得る。たとえばビットベクトルが８ビットのとき、全体のビットベクトルは記憶の整列にかかわらず（およびロードによってアクセスされるバイトが記憶によって更新されたかどうかにかかわらず）８バイト記憶に対するものとなる。一般的に、Ｎを単一の記憶によって更新可能なバイトの最大数とするとき、２Ｎビットのビットベクトルを用いることが望ましい。
【００６０】
なお、この例示的な実施例においては１６ビットを有するビットベクトルが実現され、８バイトロードおよび記憶はこの例示的な実施例において支持される最大ロードおよび記憶であるため、ビットベクトル内の特定のビットは互いに排他的である。たとえば、ビットベクトルによって示される範囲内のバイト０に対応するビットと、その範囲内のバイト８に対応するビットとは互いに排他的である。バイト０がアクセス／更新されたと示されるとき、バイト８はアクセス／更新されたと示されることができない。同様に、バイト１およびバイト９は互いに排他的である、などである。加えて、ビットベクトル内のバイト０またはバイト８のいずれかに対応するバイトは記憶データキュー６４Ｃ内のバイト０位置に記憶される。したがって、ピック論理はビットベクトル位置０および８を調べた結果を論理的にＯＲして、記憶データキュー６４Ｃのバイト０に対する選択制御を生成してもよい。しかしその結果をＯＲする前に、対応するバイトがロードによりアクセスされかつ対応する記憶によって更新されたかどうかを判定するために、ビットは独立に調べられる。
【００６１】
ＰＣサイロ４８はリタイアされたＲＯＰのラインを示すリタイアＲ♯を与える。記憶データキュー６４Ｃは、リタイアＲ♯を記憶データキュー６４Ｃに記憶されるＲ♯と比較する。例示的な実施例の１つに従うと、記憶データキュー６４ＣはリタイアＲ♯に関してＣＡＭとして動作してもよい。代替的な構成も可能であり予期される。リタイアＲ♯上のＣＡＭは、ＰＣサイロ４８によって与えられるＲ♯を有するラインを識別するＲ♯の部分のみを比較してもよい。あらゆる検出された整合は、そのキューエントリ中の記憶がリタイアされてＤ−キャッシュ４４に制約され得ることを示す。記憶キュー６４は、たとえばその記憶がＤ−キャッシュ４４に制約され得るか否かを示すビットを各エントリに含んでもよい。そのビットはリタイアＲ♯の比較に従ってセットされてもよい。記憶がリタイアされたと示されると、Ｄ−キャッシュ４４への伝送のために記憶が記憶キュー６４から選択されてもよい。Ｄ−キャッシュ４４を更新する際に、記憶は記憶キュー６４から削除されてもよい。
【００６２】
なお、この説明および図３においては、特定のビット範囲およびその他の特徴の大きさが示されるが、これらの範囲および大きさは単に例示的なものであって、設計選択の問題によって変化し得る。さらに、ビットベクトルジェネレータ７０Ａ−７０Ｂを用いることに対する代替形として、アドレス生成ユニットを構成して対応するビットベクトルを生成してもよい。さらに、前述のＣＡＭ構造の代替形の１つとして、比較を行なうためにそこに接続される分離したコンパレータ回路を有するレジスタ中でキューエントリを実現してもよい。その他の代替形も可能である。
【００６３】
図４に、図３に示す分離したマルチプレクサ回路７２Ａ−７２Ｈを除去し得る記憶データキュー６４Ｃの例示的な実施例を示す。図３に示されるものを含む、その他の代替的な構成も予期される。図４に示すとおり、記憶データキュー６４Ｃは図３において各マルチプレクサ７２Ａ−７２Ｈの出力として例示されるロードバイトバスのセットに接続される。各記憶キューエントリのバイト０はロード、バイト０バスに接続される。同様に、各記憶キューエントリのバイト１はロード、バイト１バスに接続される、などである。これまでマルチプレクサ７２Ａ−７２Ｈに与えられていた選択信号は、代わりに各キューエントリにイネーブル信号として与えられる。キューエントリ内の各バイトに対して１つのイネーブル信号が与えられる。そのバイトに対するイネーブル信号がアサートされると、キューエントリはそこに接続されるバス上のバイトを駆動する。イネーブル信号がデアサートされると、キューエントリはそこに接続されるバス上のバイトを駆動しない。この構成は典型的に「ワイヤードＯＲ」構成と呼ばれる。
【００６４】
図５に、転送論理６２の実施例の１つの一部分のブロック図を示す。その他の実施例も可能であり予期される。図５の実施例において、転送論理６２は複数のピックワン回路（ロードに転送され得る各バイトに対して１つ、たとえば特定の実施例の１つにおいては８つのピックワン回路）を含む。たとえば、図５においてはピックワン回路８０Ａおよび８０Ｂが示される。加えて転送論理６２に組合せ論理が与えられることによって、ビットベクトルジェネレータ７０Ａおよび記憶ビットベクトルキュー６４Ｂからのビットベクトル、ならびに記憶アドレスキュー６４Ａに対するヒット信号が処理される。たとえば、組合せ論理８２Ａは記憶キューエントリ０に対するバイト０および８を処理するために与えられる。同様に、組合せ論理８２Ｂは記憶キューエントリ１に対するバイト０および８を処理し、組合せ論理８２Ｃおよび８２Ｄはそれぞれ記憶キューエントリ０および１に対するバイト１および９を処理する。その他の組合せ論理（図示せず）はその他のバイトおよび／またはその他の記憶キューエントリを処理する。
【００６５】
ピックワン回路８０Ａは記憶データキュー６４Ｃからバイト０を選択する。ピックワン回路８０Ｂは記憶データキュー６４Ｃからバイト１を選択する。その他のピックワン回路（図５には示さず）はバイト２から７を選択するために用いられる。ピックワン回路８０Ａおよび８０Ｂは、各記憶キューエントリに対してそのエントリがロードによってアクセスされる特定のバイトを更新する記憶を記憶しているか否かを判定する組合せ論理からの入力信号を受取るように各々接続される。たとえば組合せ論理８２Ａは、記憶キューエントリ０中の記憶がビットベクトルによって定められるバイトの範囲内でバイト０またはバイト８（それぞれＳＢＶ０（０）およびＳＢＶ０（８））を更新し、かつ対応するバイト０またはバイト８がロード（それぞれＬＢＶ（０）およびＬＢＶ（８））によってアクセスされるかどうかを判定する。その結果得られる判断は、ともに論理的にＯＲされ（例示的な実施例においてアクセスバイト０およびバイト８は互いに排他的であるため）、エントリ０（ＳＴ０ヒット）に対する記憶アドレスキュー６４Ａに対するヒット信号と組合される。バイトがロードによってアクセスされ、（対応するビットベクトルによって示されるとおり）記憶によって更新されて、ロードおよび記憶アドレス（ビットベクトルの生成に用いられたビットを除く）が整合するとき、組合せ論理はピックワン回路に信号をアサートし、記憶キューエントリはピックワンに関係する。そうでないとき、信号はピックワン論理回路にデアサートされ、記憶キューエントリはピックワンに関係しない。
【００６６】
同様に、組合せ論理８２Ｂは記憶キューエントリ１（図５のＳＢＶ１）からの記憶キュービットベクトルと、ロードビットベクトルと、記憶キューエントリ１（図５のＳＴ１ヒット）に対する記憶アドレスキューヒット信号とを分析することによって、信号をアサート／デアサートする。組合せ論理８２Ｃおよび８２Ｄは、バイト１および９に対する記憶およびロードビットベクトル（組合せ論理８２Ｃに対して記憶キューエントリ０、および組合せ論理８２Ｄに対して記憶キューエントリ１）からのビットを調べる。
【００６７】
ピックワン回路は互いに独立して、ピックワン回路が割当てられるバイトの最新の更新を選択する。たとえばピックワン回路８０Ａは、バイト０および８に対するビットベクトル表示および記憶アドレスキューヒット信号に応答して、記憶データキュー６４Ｃからバイト０を選択する。それとは独立に、ピックワン回路８０Ｂは記憶データキュー６４Ｃからバイト１を選択する。したがって、ピックワン回路８０Ａはマルチプレクサ７２Ａ（図３）に選択信号を与えるか、または各キューエントリ（図４）のバイト０に対するイネーブル信号を与える。同様に、ピックワン回路８０Ｂはロードデータ（図３）のバイト１を与えるために接続されたマルチプレクサに選択信号を与えるか、または各キューエントリ（図４）のバイト１に対するイネーブル信号を与えてもよい。実施例の１つにおいて、記憶キュー６４はキュー中の最も古いエントリを示すヘッドポインタと最新のエントリを示すテールポインタとを有する円形先入れ先出し（ＦＩＦＯ）バッファとして実現されてもよい。エントリが削除される際にエントリをシフトする代わりに、ヘッドおよびテールポインタは増加および減少されるされることによってキューに記憶を付加および削除する。こうした実施例のためにピックワン回路８０Ａ−８０Ｂはヘッドおよびテールポインタを受取り、組合せ論理８２Ａ−８２Ｄなどの組合せ論理からの入力信号から、テールポインタによって示されるエントリに対応する信号からヘッドポインタによって示されるエントリに対応する信号までを走査する。このような実施例に対して、記憶は記憶キュー６４にプログラム順序で割当てられてもよい。代替的には、所望であれば記憶キュー内の記憶の順序を定めるためにＲ♯を用いてもよい。
【００６８】
なお、記憶キューからのバイトの選択に関係する記憶キューエントリの論理的決定を例示するために、図５においては組合せ論理８２Ａ−８２Ｄを示すが、あらゆる好適な論理を用いてもよい。所望に応じて、入力信号の検知（アサート／デアサート）は代替的な組合せ論理を与えるために変化させてもよく、論理ゲートの論理的に同等のセットが同様に用いられてもよい。さらに、回転／マルチプレクサ回路６６に対する選択および回転制御を生成するために付加的な論理ブロック（図５に示さず）を用いてもよい。選択制御は転送のための記憶キュー６４からのバイトの選択に基づいてもよく、回転制御は（メモリおよび記憶データキュー６４Ｃ内のバイトの整列を定める）最下位ロードアドレスビットと、（デスティネーションレジスタにいくつのバイトが転送されるかを定める）ロードの大きさとに基づいてもよい。
【００６９】
図６に、記憶キューエントリの例示的なセットからの転送の例を示す。図６には記憶アドレスキュー６４Ａと、記憶ビットベクトルキュー６４Ｂと、記憶データキュー６４Ｃとが示される。例においては簡潔のため、５つのエントリを示す。しかし記憶キューはあらゆる好適な数のエントリを含んでもよい。たとえば例示的な実施例の１つにおいて、記憶キュー６４は６４のエントリを含んでもよい。記憶アドレスキュー６４Ａはエントリ９０Ａ−９０Ｅを含む。記憶ビットベクトルキュー６４Ｂは対応するエントリ９２Ａ−９２Ｅを含み、記憶データキュー６４Ｃは対応するエントリ９４Ａ−９４Ｅを含む。言い換えると、エントリ９０Ａ、９２Ａおよび９４Ａは記憶キュー６４の第１のエントリを含む。同様に、エントリ９０Ｂ、９２Ｂおよび９４Ｂは記憶キュー６４の第２のエントリを含む、などである。この例において、記憶キューヘッドポインタは、エントリ９０Ａ、９２Ａおよび９４Ａを含むエントリがキュー中で最も古いエントリであることを示し、記憶キューテールポインタは、エントリ９０Ｅ、９２Ｅおよび９４Ｅを含むエントリが最新のエントリであることを示す。残りのエントリは最古のエントリと最新のエントリとの間に存在する。
【００７０】
記憶アドレスキューエントリ９０Ａ、９０Ｂ、９０Ｄおよび９０Ｅの各々は特定のアドレスＡ1を記憶する。記憶アドレスキューエントリ９０Ｃは異なるアドレスＡ2を記憶する。各記憶に対応するビットベクトルは記憶ビットベクトルキューエントリ９２Ａ−９２Ｅ中に例示されており、記憶データは記憶データキューエントリ９４Ａ−９４Ｅ中に例示される。
【００７１】
この例において、ロードは図６に例示されるとおりアドレスＡ1およびロードビットベクトルを有して行なわれる。ロードビットベクトルに従って、４つのバイト（バイト１１、１０、９および８）がアクセスされる。記憶ビットベクトルキュー６４Ｂ中のビットベクトルを調べて、アクセスされるバイトへの以下の更新が示される。すなわち、エントリ９２Ｂおよび９２Ｅのビットベクトルはバイト１１への更新を示し、エントリ９２Ｂおよび９２Ｄのビットベクトルはバイト１０への更新を示し、エントリ９２Ｂおよび９２Ｃのビットベクトルはバイト９および８への更新を示す。しかし、（ビットベクトルキューエントリ９２Ｃに対応する）記憶アドレスキューエントリ９０ＣのアドレスはアドレスＡ2を記憶する。ロードはアドレスＡ1にアクセスするため、エントリ９０Ｃ、９２Ｃおよび９４Ｃ中の記憶は転送の配慮から削除される。したがって、ピックワン回路は９２Ｂおよび９２Ｅに対応するエントリからのバイト１１と、エントリ９２Ｂおよび９２Ｄからのバイト１０と、エントリ９２Ｂからのバイト９および８とに対して最新の更新を走査する。
【００７２】
前述のとおり、テールポインタは最新のエントリが９０Ｅに対応するエントリであることを示し、一方ヘッドポインタは最も古いエントリが９０Ａに対応するエントリであることを示す。したがって、バイト１１はエントリ９４Ｅから選択され、バイト１０はエントリ９４Ｄから選択され、バイト９および８はエントリ９４Ｂから選択される。バイト１１は記憶データキュー内のバイト位置３であり、同様にバイト１０はバイト位置２であり、バイト９はバイト位置１であり、バイト８はバイト位置０である。したがって、ロードに対して転送されたデータは（１６進法で）７６  ＤＤ  ＤＥ  Ｆ０である。値７６はエントリ９４Ｅのバイト位置３から得られる。値ＤＤはエントリ９４Ｄのバイト位置２から得られる。値ＤＥおよびＦ０はエントリ９４Ｂの（それぞれ）バイト位置１および０から得られる。この例において、これらの値は記憶データキュー６４Ｃ内に太字で例示される。
【００７３】
この例が例示するとおり、バイトが２つまたはそれ以上の異なる記憶から得られたものであっても、ロードによってアクセスされるバイトはアセンブルされてもよい。ロードデータは任意の数の記憶から正確に転送され得ることが有利である。たとえば、転送は０記憶（記憶キュー６４が空であるか、または特定のロードに対して記憶キュー６４においてヒットが検出されないとき）、１記憶（その記憶がロードによってアクセスされる各バイトを更新するために最新であるとき）、または最大Ｎ記憶（ここでＮはロードによってアクセスされるバイトの数）から起こってもよい。
【００７４】
図７に、バスブリッジ２０２を通じてさまざまなシステム構成要素に結合されるプロセッサ１０を含むコンピュータシステム２００の実施例の１つのブロック図を示す。その他の実施例も可能であり予期される。ここに示すシステムにおいて、主メモリ２０４はメモリバス２０６を通じてバスブリッジ２０２に結合され、グラフィックコントローラ２０８はＡＧＰバス２１０を通じてバスブリッジ２０２に結合される。最後に、複数のＰＣＩデバイス２１２Ａ−２１２ＢがＰＣＩバス２１４を通じてバスブリッジ２０２に結合される。ＥＩＳＡ／ＩＳＡバス２２０を通じて１つまたはそれ以上のＥＩＳＡまたはＩＳＡデバイス２１８に電子インターフェイスを提供するために、二次的なバスブリッジ２１６がさらに設けられてもよい。プロセッサ１０は外部インターフェイス５２を通じてバスブリッジ２０２に結合される。
【００７５】
バスブリッジ２０２はプロセッサ１０と、主メモリ２０４と、グラフィックコントローラ２０８と、ＰＣＩバス２１４に結合されるデバイスとの間のインターフェイスを提供する。バスブリッジ２０２に接続されたデバイスの１つから動作を受取ると、バスブリッジ２０２はその動作の目標を識別する（たとえば特定のデバイス、またはＰＣＩバス２１４の場合にはその目標はＰＣＩバス２１４上にある）。バスブリッジ２０２はその動作を目標デバイスに経路付ける。一般的にバスブリッジ２０２は、ソースデバイスまたはバスによって用いられるプロトコルから目標デバイスまたはバスによって用いられるプロトコルに動作を変換する。
【００７６】
ＩＳＡ／ＥＩＳＡバスにＰＣＩバス２１４に対するインターフェイスを与えることに加え、二次的なバスブリッジ２１６は所望に応じて付加的な機能をさらに組入れてもよい。二次的なバスブリッジ２１６と一体化した、または外部からの入力／出力コントローラ（図示せず）をコンピュータシステム２００に含ませることによって、所望に応じてキーボードおよびマウス２２２ならびにさまざまな直列および並列ポートに対する動作的支持を提供してもよい。他の実施例においては、プロセッサ１０とバスブリッジ２０２との間の外部インターフェイス５２に外部キャッシュユニット（図示せず）をさらに結合させてもよい。代替的には、外部キャッシュをバスブリッジ２０２に結合させてもよく、外部キャッシュに対するキャッシュ制御論理をバスブリッジ２０２に一体化させてもよい。
【００７７】
主メモリ２０４は、アプリケーションプログラムが記憶されるメモリであり、そこからプロセッサ１０が最初に実行される。好適な主メモリ２０４はＤＲＡＭ（ダイナミックランダムアクセスメモリ）を含む。たとえば、主メモリ２０４はＳＤＲＡＭ（同期ＤＲＡＭ）の複数のバンクを含んでもよい。代替的には、主メモリ２０４はＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）またはその他のあらゆる好適なＤＲＡＭを含んでもよい。
【００７８】
ＰＣＩデバイス２１２Ａ−２１２Ｂは、さまざまな周辺デバイス、たとえばネットワークインターフェイスカード、映像加速器、音声カード、ハードまたはフロッピー（登録商標）ディスクドライブまたはドライブコントローラ、ＳＣＳＩ（小型コンピュータシステムインターフェイス）アダプタ、および電話カードなどを例示するものである。同様に、ＩＳＡデバイス２１８はさまざまなタイプの周辺デバイス、たとえばモデム、サウンドカード、およびＧＰＩＢまたはフィールドバスインターフェイスカードなどのさまざまなデータ獲得カードなどを例示するものである。
【００７９】
グラフィックコントローラ２０８は、ディスプレイ２２６上のテキストおよび画像の解釈を制御するために設けられる。グラフィックコントローラ２０８は、主メモリ２０４中に、およびそこから効率的にシフトし得る３次元データ構造を解釈するために当該技術分野において一般的に公知の典型的なグラフィック加速器を実施してもよい。したがってグラフィックコントローラ２０８は、主メモリ２０４へのアクセスを得るためにバスブリッジ２０２内の目標インターフェイスへのアクセスを要求および受取ることのできるＡＧＰバス２１０のマスタであってもよい。専用のグラフィックバスは主メモリ２０４からのデータの迅速な検索を提供する。特定の動作に対して、グラフィックコントローラ２０８はＡＧＰバス２１０にＰＣＩプロトコルトランザクションを生成するようにさらに構成されてもよい。よってバスブリッジ２０２のＡＧＰインターフェイスはＡＧＰプロトコルトランザクションならびにＰＣＩプロトコル目標およびイニシエータトランザクションの両方を支持するための機能を含んでもよい。ディスプレイ２２６は画像またはテキストを示し得るあらゆる電子ディスプレイである。好適なディスプレイ２２６は陰極線管（“ＣＲＴ”）、液晶ディスプレイ（“ＬＣＤ”）などを含む。
【００８０】
なお、前述の説明においては例としてＡＧＰ、ＰＣＩ、およびＩＳＡまたはＥＩＳＡバスを用いたが、所望に応じてあらゆるバスアーキテクチャが置き換えられてもよい。さらにコンピュータシステム２００は、付加的なプロセッサ（たとえばコンピュータシステム２００の任意の構成要素として示されるプロセッサ１０ａなど）を含む多重処理コンピュータシステムであってもよい。プロセッサ１０ａはプロセッサ１０と類似のものであってもよい。より特定的には、プロセッサ１０ａはプロセッサ１０と同一の複製品であってもよい。プロセッサ１０ａは（図７に示すように）プロセッサ１０と外部インターフェイス５２を共有してもよく、または独立のバスを介してバスブリッジ２０２に接続されてもよい。
【００８１】
なお、ここではさまざまな信号がアサートおよびデアサートされるとして説明される。特定の信号は論理１値を有するときにアサートされ、論理０値を有するときにデアサートされるよう定められてもよい。代替的には、特定の信号は論理０値を有するときにアサートされ、論理１値を有するときにデアサートされるよう定められてもよい。特定の信号に対してどの定義が適用されるかは設計の選択上の問題である。
【００８２】
【産業への適用性】
この発明はプロセッサおよびコンピュータシステムの分野に適用可能である。
【００８３】
前述の開示を完全に評価すると、多数の修正形および変更形が当業者に明らかとなる。添付の請求項はこのような修正形および変更形のすべてを包含することを意図するものである。
【図面の簡単な説明】
【図１】  プロセッサの実施例の１つを示すブロック図である。
【図２】  データキャッシュ、ロード／記憶ユニット、および機能ユニットを含む、図１に示すプロセッサの１つの実施例の部分を示すブロック図である。
【図３】  図２に示すロード／記憶ユニットの実施例の１つに従った記憶キューおよび転送論理を例示するブロック図である。
【図４】  図３に示す記憶キューの記憶データ部分の例示的な実現例を例示する図である。
【図５】  図３に示す転送論理の実施例の１つを例示する図である。
【図６】  図２に示す記憶キューからの転送データの例を示す図である。
【図７】  図１に示すプロセッサを含むコンピュータシステムのブロック図である。
【図１】
0003871884.tif 000002
【図２】
0003871884.tif 000003
【図３】
0003871884.tif 000004
【図４】
0003871884.tif 000005
【図５】
0003871884.tif 000006
【図６】
0003871884.tif 000007
【図７】
0003871884.tif 000008