(57)【特許請求の範囲】
【請求項１】
可変サイズのオペランドを利用してオペレーションを実行するプロセッサにおいてオペランドデータを処理する方法であって、前記方法は、
オペレーションによって用いられるオペランドを複数のフィールドに区分するステップと、
各区分されるフィールドをオペレーションに関し定義されるようまたは定義されないよう指定するステップと、
他の区分されるフィールドとは無関係に、定義されるフィールドの各々のデータ依存性を検知するステップと、
依存フィールドの各々に対し結果データが利用可能になると、他の区分されるフィールドとは無関係に、オペレーションによって用いられるために結果データを転送するステップとを含む、可変サイズのオペランドを利用してオペレーションを実行するプロセッサにおいてオペランドデータを処理する方法。
【請求項２】
結果データを生じさせるためにオペレーションを実行するステップと、
複数のメモリ要素の１つに前記結果データを記憶するステップとをさらに含む、請求項１に記載の方法。
【請求項３】
メモリ要素に記憶されるデータを、他のフィールドとは無関係に、各依存しないフィールドのために利用するステップをさらに含む、請求項２に記載の方法。
【請求項４】
オペランドは、オペレーションによって操作されるソースオペランドと、オペレーションによって発生される宛先オペランドとであって、
オペレーションの結果データを受取るメモリ要素を識別する宛先タグでもって、他のフィールドとは無関係に、第１のオペレーションの宛先オペランドの各定義されるフィールドにタグを付けるステップと、
オペレーションのオペランドデータを供給するメモリ要素を識別するソースタグでもって、他のフィールドとは無関係に、第２のオペレーションのソースオペランドの各定義されるフィールドにタグを付けるステップとを含み、さらに、
依存性検知ステップは、
宛先タグをソースタグと比較するステップと、
他のフィールドとは無関係に、タグが各定義されるフィールドに対して互いに対応すると、転送ステップを活性化するステップとを含む、請求項３に記載の方法。
【請求項５】
可変サイズのオペランドを利用してオペレーションを実行するプロセッサにおけるデータ処理装置であって、
オペレーションによって用いられるオペランドを複数のフィールドに区分するための手段と、
前記区分手段に応答し、各区分されるフィールドをオペレーションに関し定義されるようまたは定義されないよう指定するための手段と、
前記指定手段に応答し、他の区分されるフィールドとは無関係に、定義されるフィールドの各々のデータ依存性を検知するための手段と、
前記依存性検知手段に応答し、依存フィールドの各々に対し結果データが利用可能になると、他の区分されるフィールドとは無関係に、オペレーションによって利用されるために結果データを転送するための手段と、
結果データの転送に応答してオペレーションを実行し結果を発生する機能ユニットとを含む、可変サイズのオペランドを利用してオペレーションを実行するプロセッサにおけるデータ処理装置。
【請求項６】
前記機能ユニットに結合され、結果データを記憶するためのメモリ要素を含むメモリをさらに備える、請求項５に記載の装置。
【請求項７】
メモリ要素に記憶されるデータを、他のフィールドとは無関係に、各依存しないフィールドのために利用するための手段をさらに含む、請求項６に記載の装置。
【請求項８】
オペランドは、オペレーションによって操作されるソースオペランドと、オペレーションによって発生される宛先オペランドとを含み、装置は、
オペレーションの結果データを受取るメモリ要素を識別する宛先タグでもって、他のフィールドとは無関係に、第１のオペレーションの宛先オペランドの各定義されるフィールドにタグを付けるための手段と、
オペレーションのオペランドデータを供給するメモリ要素を識別するソースタグでもって、他のフィールドとは無関係に、第２のオペレーションの要求のソースオペランドの各定義されるフィールドにタグを付けるための手段とを含み、
依存性検知手段は、
宛先タグをソースタグと比較して、タグが他のフィールドとは無関係に各定義されるフィールドに対して相互に対応する場合には転送手段を活性化する、コンパレータを含む、請求項７に記載の装置。
【請求項９】
オペランドは、３２ビットのビット幅を有し、かつ区分手段によって上位１６ビットフィールドと中位８ビットフィールドと下位８ビットフィールドとを含む３つのフィールドに区分される、請求項５に記載のプロセッサ。
【請求項１０】
可変サイズのオペランドを利用してオペレーションを実行するプロセッサであって、前記プロセッサは、
命令デコーダを備え、前記命令デコーダは、
オペレーションの可変サイズオペランド内でオペランドを複数の連続するフィールドに区分するための手段と、
オペランドの各フィールドがオペレーションに関し定義されているか否かを指定するための手段とを含み、前記プロセッサはさらに、
命令デコーダに結合されるリオーダバッファを備え、前記リオーダバッファは、
オペランドデータを記憶するメモリと、
他のフィールドとは無関係に各オペランドフィールドに対してデータ依存性を検知するための手段とを含み、前記プロセッサはさらに、
リオーダバッファに結合され、他のフィールドとは無関係に、各定義されるフィールドのためのオペランドデータを通信するバスと、
前記バスに結合され、オペレーションを実行し実行結果データを発生する機能ユニットとを備える、可変サイズのオペランドを利用してオペレーションを実行するプロセッサ。
【請求項１１】
前記バスは、
オペランドデータを通信するために、リオーダバッファ出力から機能ユニット入力へ結合されるオペランドバスと、
結果データを通信するために、機能ユニット出力からリオーダバッファおよび機能ユニットの入力へ結合される結果バスとを含む、請求項１０に記載のプロセッサ。
【請求項１２】
リオーダバッファは、
他のフィールドとは無関係に、各オペランドフィールドのためのオペレーション実行結果データを受取るべくメモリ要素を指定する宛先タグ識別子を割当てるための手段と、
他のフィールドとは無関係に、各オペランドフィールドのためのデータ依存オペレーションのソースオペランドを指定するオペランドタグ識別子を割当てるための手段とをさらに含み、プロセッサは、
リオーダバッファ出力から機能ユニット入力に接続され、機能ユニットによる実行に先行してオペレーションの宛先タグ識別子を伝える宛先タグバスと、
機能ユニット出力から機能ユニットおよびリオーダバッファの入力に接続され、機能ユニットによる実行に次いでオペレーションの宛先タグ識別子を伝える結果タグバスと、
リオーダバッファ出力から機能ユニット入力に結合され、データ依存オペレーションのオペランドタグ識別子を伝えるオペランドタグバスと、
機能ユニットに関連し、オペランドタグバスと結果タグバスと結果バスとに結合される、リザベーションステーションとをさらに含み、前記リザベーションステーションは、
他のフィールドとは無関係に、各定義されるフィールドに対し、オペランドタグバスからの識別子を結果タグバスからの識別子と比較するコンパレータと、
結果バスとコンパレータとに結合され、互いに対応するオペランドタグ識別子および結果タグ識別子に応答し、他のフィールドとは無関係に、各定義されるフィールドのための結果データを転送する転送回路とを含む、請求項１１に記載のプロセッサ。
【請求項１３】
リオーダバッファおよびオペランドバスに結合されかつメモリを有するレジスタファイルをさらに含み、
リオーダバッファメモリは予測オペレーション結果を記憶し、
オペレーションが予測によらないものになると、レジスタファイルはリオーダバッファメモリからのオペレーション結果を記憶する、請求項１２に記載のプロセッサ。
【請求項１４】
リオーダバッファメモリからオペランドバス上に、他のフィールドとは無関係に、利用可能な予測データを有する各フィールドのためにデータを駆動するための手段を含む、リオーダバッファバスドライバと、
レジスタファイルメモリからオペランドバス上に、リオーダバスドライバによって駆動される以外の残りのフィールドのために、データを駆動するための手段を含むレジスタファイルバスドライバとをさらに備える、請求項１３に記載のプロセッサ。
【請求項１５】
機能ユニットに結合され、オペレーションの実行に応答し、結果バス上に機能ユニットからの結果データを駆動する結果バスドライバをさらに備える、請求項１４に記載のプロセッサ。
【請求項１６】
機能ユニットは、各定義されないフィールドに対して結果フィールドを０にセットするための手段をさらに含む、請求項１５に記載のプロセッサ。
【請求項１７】
オペランドバスは、３２ビットのビット幅を有し、かつ区分手段によって上位１６ビットフィールドと中位８ビットフィールドと下位８ビットフィールドとを含む３つのフィールドに区分される、請求項１０に記載のプロセッサ。
【請求項１８】
複数の同時並列オペレーションを実行するプロセッサにおいて、オペレーションを実行し、オペレーションに関連する可変サイズのソースオペランドおよび宛先オペランドを処理する方法であって、
フルサイズのオペランドフィールドをビット単位で複数の別々のオペランドフィールドに区分するステップと、
オペランドフィールドをオペレーションに関し定義されるようにまたは定義されないように指定するステップと、
他のフィールドとは無関係に、各定義されるフィールドのために、メモリからのソースオペランドデータにアクセスするステップと、
オペレーションを実行して結果を発生するステップと、
他のフィールドとは無関係に、各定義される宛先フィールドに対して、結果を宛先オペランドデータとしてメモリに与えるステップとを含む、方法。
【請求項１９】
他のフィールドとは無関係に、各定義されるソースオペランドフィールドに対してデータ依存性を検知するステップと、
結果が利用可能になると、他のフィールドとは無関係に各依存ソースオペランドフィールドのための結果を転送するステップと、
すべての依存ソースオペランドフィールドのための結果が転送されるとオペレーションを実行するステップとをさらに含む、請求項１８に記載の方法。
【請求項２０】
可変サイズのソースオペランドおよび宛先オペランドを利用して複数のオペレーションを同時並列で実行するプロセッサであって、
フルサイズのオペランドをビット単位で複数の別々の連続するフィールドに区分するための命令デコーダ手段と、
前記区分手段に結合され、ソースオペランドおよび宛先オペランドのフィールドをオペレーションに関し定義されるようにまたは定義されないように指定するための手段と、
オペランドデータメモリと、
メモリと前記指定手段とに結合され、他のフィールドとは無関係に、各定義されるソースオペランドフィールドのために、メモリからのソースオペランドデータにアクセスするための手段と、
前記アクセス手段に結合され、前記アクセスされたソースオペランドを利用してオペレーションを実行して結果を発生するための手段と、
前記実行手段からメモリへと結合され、他のフィールドとは無関係に、各定義される宛先フィールドのために、宛先オペランドメモリに結果を与えるための手段とを含む、可変サイズのソースオペランドおよび宛先オペランドを利用して複数のオペレーションを同時並列で実行するプロセッサ。
【請求項２１】
他のフィールドとは無関係に、各定義されるソースオペランドフィールドに対してデータ依存性を検知するための手段と、
結果が利用可能になると、他のフィールドとは無関係に、各依存ソースオペランドフィールドのための結果を転送するための手段と、
すべての依存ソースオペランドフィールドのために結果が転送されるとオペレーションを実行するための手段とをさらに含む、請求項２０に記載のプロセッサ。
【請求項２２】
プロセッサにおいて可変サイズのオペランドを利用してオペレーションを実行するための方法であって、
フルサイズのオペランドをビット単位で複数のオペランドフィールドに区分するステップと、
各オペレーションで、オペレーションに用いられる各オペランドフィールドのデータは実行されていないオペレーションの利用不可な結果に依存しているか否かを、他のフィールドとは無関係に各オペランドフィールドに対して判断するステップと、
すべての利用されるフィールドにあるデータが利用不可な結果に依存していない場合にはオペランドフィールドデータを用いてオペレーションを実行し、そうでない場合には、フィールドにある依存データが利用可能になるのを待ってオペレーションを実行するステップとを含む、プロセッサにおいて可変サイズのオペランドを利用してオペレーションを実行するための方法。
【請求項２３】
前記依存性判断ステップは、
オペレーションに対し、宛先オペランドおよびそのフィールドと、ソースオペランドおよびそのフィールドとを定義するステップと、
いくつかのオペレーションのための、宛先オペランドおよびそのフィールドの識別子を記憶するステップと、
ソースオペランドおよびフィールド識別子を、記憶される宛先オペランドおよびフィールド識別子と比較するステップと、
ソースオペランドおよびフィールド識別子が記憶される宛先オペランドおよびフィールド識別子と一致すると、データ依存性を判断するステップとをさらに含む、請求項２２に記載の方法。
【請求項２４】
可変サイズのオペランドを操作するオペレーションを実行するプロセッサであって、前記プロセッサは、
命令デコーダを備え、前記命令デコーダは、
フルサイズのオペランドをビット単位で複数のオペランドフィールドに区分し、オペレーションによって用いられるオペランドフィールドを識別することによって、可変サイズのオペランドを定義するオペランドフィールド選択子と、  オペランドフィールド選択子に接続され、オペレーションコードとオペランド識別子と利用されるオペランドフィールド識別子とをディスパッチするディスパッチャとを含み、前記プロセッサはさらに、
前記命令デコーダに結合されるリオーダバッファを備え、前記リオーダバッファは、
ディスパッチャに結合され、オペランド識別子と利用されるフィールド識別子とを受取る予想結果メモリと、
前記ディスパッチ手段に応答し、予測結果メモリにおいてエントリを割当てるリオーダバッファ制御装置と、
リオーダバッファ制御装置に結合され、他のフィールドとは無関係に、利用されるオペランドフィールドのデータ依存性を検知するデータ依存性検知器と、
依存性検知器に結合され、データ依存性に応答し、データ依存オペランドフィールドに他のフィールドとは無関係にタグを付けるタグ回路とを含み、前記プロセッサはさらに、
リオーダバッファに結合され、オペランドフィールドおよびオペランドフィールドタグを通信するためのオペランドバスと、
オペランドバスに結合され、オペランドフィールドとオペランドフィールドタグとを受取り、オペランドフィールドを用いて、ディスパッチされたオペレーションコードにより定義されるオペレーションを実行して、結果データを発生する機能ユニットと、
機能ユニット出力からリオーダバッファおよび機能ユニットの入力へと接続され、そこにオペレーション結果データを転送する結果バスとを備える、可変サイズのオペランドを操作するオペレーションを実行するプロセッサ。
【請求項２５】
予測によらない結果メモリを含むレジスタファイルと、
リオーダバッファを機能ユニットに結合して機能ユニットに宛先タグを通信する宛先タグバスとをさらに備え、宛先タグは、各利用されるオペランドフィールドのために、結果が予測によらないものになると結果を受取るよう、レジスタファイルにある宛先レジスタを特定する、請求項２４に記載のプロセッサ。
【請求項２６】
リオーダバッファを機能ユニットに接続し、機能ユニットにオペランドフィールドタグを通信するオペランドタグバスと、
機能ユニット出力からリオーダバッファおよび機能ユニットの入力へと接続され、結果タグを通信する結果タグバスとをさらに備え、オペレーションが実行されて結果が利用可能であるときは、結果タグはオペレーションの宛先タグであり、
機能ユニットは、各利用されるオペランドフィールドに対し、結果タグをデータ依存オペレーションのオペランドタグと比較し、タグが互いに対応すると結果データフィールドを転送するための転送回路を含む、請求項２５に記載のプロセッサ。
【請求項２７】
（１）オペランドデータが予測によらないときにはレジスタファイルによってオペランドバスを介し、
（２）オペランドデータが予測によるものである場合にはリオーダバッファによってオペランドバスを介し、または、
（３）前の利用できない結果の発生で、機能ユニットによって結果バスを介し、
オペランドフィールドが代替的に与えられるオペレーションを、機能ユニットが実行する、請求項２６に記載のプロセッサ。
【請求項２８】
複数の固定されるビット幅のデータオペランドを記憶するためのデータキャッシュメモリと、
固定されたビット幅のデータオペランドをリトリーブするようデータキャッシュメモリに接続され、フィールド選択子によって活性化されないビットをクリアし、固定されたビット幅のオペランドのフィールドを再マッピングし、異なるフィールドからのデータを固定されたビット幅のオペランドデータに組合わせるための手段と、
結果バスにオペランドデータを通信するためのインタフェースドライバとを備える、ロード／ストア機能ユニットをさらに含む、請求項２４に記載のプロセッサ。
【請求項２９】
フルサイズのオペランドは３２ビット幅であり、
命令デコーダ、リオーダバッファ、レジスタファイル、機能ユニット、オペランドバス、および結果バスは、３２ビット幅のデータで動作し、
３２ビットのフルサイズのオペランドは、１６ビットの上位フィールドと８ビットの中位フィールドと８ビットの下位フィールドの３つのオペランドに区分される、請求項２４に記載のプロセッサ。
【請求項３０】
可変サイズのソースオペランドおよび宛先オペランドを利用して複数のオペレーションを同時並列で実行するプロセッサであって、
フルサイズのオペランドをビット単位で複数の独立した連続するフィールドに区分するための手段と、
前記区分手段に結合され、ソースオペランドおよび宛先オペランドのフィールドをオペレーションに関し定義されるようにまたは定義されないように指定するための手段と、
オペランドデータメモリと、
前記メモリと前記指定手段とに結合され、他のフィールドとは無関係に、各定義されるソースオペランドのために、メモリからのソースオペランドデータにアクセスするための手段と、
前記アクセス手段に結合され、アクセスされたソースオペランドデータを利用してオペレーションを実行して結果を発生するための手段と、
前記実行手段から前記メモリに結合され、他のフィールドとは無関係に、各で定義される宛先フィールドのために、宛先オペランドメモリへ結果を与える手段とを含む、可変サイズのソースオペランドおよび宛先オペランドを利用して複数のオペレーションを同時並列で実行するプロセッサ。
【請求項３１】
他のフィールドとは無関係に、各定義されるソースオペランドフィールドに対して、データ依存性を検知するための手段と、
結果が利用可能になると、他のフィールドとは無関係に、各依存ソースオペランドフィールドのための結果を転送するための手段と、
すべての依存ソースオペランドフィールドのために結果が転送されるとオペレーションを実行するための手段とをさらに含む、請求項３０に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の背景】
発明の分野
この発明はプロセッサのアーキテクチャに関する。より特定的にはこの発明は、可変ビット幅データを処理するためのプロセッサのアーキテクチャに関する。
関連技術の説明
プロセッサは一般的に、命令セットのうちの１つの命令をいくつかのステップで処理する。初期の技術によるプロセッサはこれらのステップを直列に行なった。技術の進歩で、スカラプロセッサとも呼ばれる、多くの命令の異なるステップを同時並列で行なうパイプラインアーキテクチャプロセッサへと至った。「スーパースカラ」プロセッサはパイプライン構造を用いて実現されるが、それはスカラ命令を同時並列で実行することによって性能を向上させる。
【０００２】
スーパースカラプロセッサでは、データまたは資源が利用可能でないために、発行された命令が実行できないという命令の競合および依存性条件が生じる。たとえば、発行された命令のオペランドが他の実行されていない命令によって計算されるデータに依存しているときは、その命令は実行できない。
【０００３】
分岐命令の予測実行と、命令を即座に実行できるかどうかに関わらず命令デコードを継続することとによって、スーパースカラプロセッサの性能は向上される。命令デコードと命令実行との切離しは、プロセッサの命令デコーダと命令を実行する機能ユニットとの間にバッファを必要とする。
【０００４】
複数の同時並列で実行される命令が共通のレジスタにアクセスすることを許されると、スーパースカラプロセッサの性能はさらに向上する。しかしながら、このことは本質的に資源の競合を生じさせる。レジスタの競合を解決するための１つの技術は「レジスタリネーミング」と呼ばれる。複数の一時的リネーミングレジスタが、永久レジスタに対して値をセットする各命令に対して１つ、動的に割当てられる。この態様では、１つの永久レジスタは、複数の命令の結果を受取るための宛先として働くだろう。これらの結果は、複数の割当てられた一時的リネーミングレジスタに一時的に保持される。リネーミングレジスタからデータを受取る命令が適当なレジスタにアクセスするよう、プロセッサはすべてのリネーミングレジスタを把握する。このレジスタリネーミング機能は、一時的リネーミングレジスタを含むリオーダバッファを用いて実現されてもよい。
【０００５】
多くの現存のプロセッサは、大きなベースのコンピュータプログラムを実行するが、性能は制限されている。そのようなプロセッサにおいて命令のスループットを向上させるためには、そこにスーパースカラ能力を組入れることが望ましいであろう。ダブリュー・エム・ジョンソン（Ｗ．Ｍ．Ｊｏｈｎｓｏｎ  ）は、「スーパースカラプロセッサ設計（Ｓｕｐｅｒｓｃａｌａｒ  Ｐｒｏｃｅｓｓｏｒ  Ｄｅｓｉｇｎ）」、エングルウッド・クリフス（Ｅｎｇｌｅｗｏｏｄ  Ｃｌｉｆｆｓ）、エヌ・ジェイ・プレンティス・ホール（Ｎ．Ｊ．Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ  ）、１９９１、ｐ．２６１−２７２で、そのようなスーパースカラの実現例を論じている。
【０００６】
たとえば、ｘ８６ファミリと呼ばれる、８０８６、８０２８６、８０３８６、８０４８６およびＰｅｎｔｉｕｍ  ＴＭ（インテル・コーポレーション（Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ  ）、サンタ・クララ（Ｓａｎｔａ  Ｃｌａｒａ  ）、カリフォルニア州（ＣＡ．））を含むプロセッサのファミリが開発されてきた。有利なことに、ｘ８６プロセッサは下位互換性がある。この最新のプロセッサはより旧式のプロセッサと同じプログラムを実行する。ｘ８６プロセッサは、多くの異なる稠密にコード化された命令を実現する、複合命令セットコンピュータ（ＣＩＳＣ）アーキテクチャを使用すると考えられる。
【０００７】
ｘ８６ファミリでは、下位互換性を実現するのに様々な技術が用いられている。これらの技術はレジスタリネーミングの実現を非常に困難なものにしている。たとえば、ｘ８６命令セットは、倍長語レジスタにオーバラップする語レジスタならびに語レジスタおよび倍長語レジスタにオーバラップするバイトレジスタのような、ビットの少なくとも１つのサブセットが別のレジスタのビットにオーバラップするレジスタを使用する。ｘ８６プロセッサは８ビットから１６ビットへ、次いで３２ビットのプロセッサへと進化したため、レジスタアーキテクチャも同様に、８ビットの汎用レジスタＡＨおよびＡＬが１６ビットの汎用レジスタＡＸの上位バイトおよび下位バイトをそれぞれ構成する形式に進化した。ＡＸは３２ビットの拡張汎用レジスタＥＡＸの下位１６ビットを含む。Ｂ、ＣおよびＤレジスタも同様に構成される。これらのレジスタはさらなるレジスタの対、ＥＳＩ：ＳＩ、ＥＤＩ：ＤＩ、ＥＳＰ：ＳＰおよびＥＢＰ：ＢＰによって補助されて、３２ビットの拡張（Ｅ）倍長語レジスタの下位ビットは１６ビットの語レジスタによってオーバラップされる。加えて、ｘ８６プロセッサは、さらに複雑性を増す、広範囲にわたる複雑な命令セットを有しており、そうした命令ではいくつかのデータ幅のためのオーバラップするレジスタを特定するいくつかの命令オペコードフィールドが、他のデータ幅のオーバラップしないレジスタをも特定する場合がある。
【０００８】
レジスタがリネーミングされ得ない場合、レジスタアクセス競合は、１つの命令から他の命令へ制御を譲らせなければ解決できず、その結果、命令が依存性から解放されるまでその命令のディスパッチを遅延させて、プロセッサパイプラインにおける命令の並列ディスパッチのストーリングを引起こす。このことは、並列実行が意図される命令の直列演算を引起こす。
【０００９】
ｘ８６アーキテクチャは小数のレジスタ（８）を含むため、命令の並列実行が意図されるスーパースカラプロセッサでは、頻繁なレジスタの再使用が推奨される。したがって、おそらくレジスタリネーミングを用いることによって、レジスタの再使用を可能にすることは望ましい。残念ながら、ｘ８６命令のオーバラップしているという性質は、相互データ依存性を解決するための、オーバラップされたレジスタのリネーミングを制限する。レジスタのオーバラップ関係は既知でありかつ不変であり、したがって予測可能であるとは言え、アーキテクチャ上のおよびコード互換性上の制約により、レジスタは独立エンティティとして考えられる必要があるため、レジスタリネーミングは妨げられる。したがって、レジスタリネーミングはｘ８６プロセッサにおけるレジスタ資源競合を解決するかもしれないが、ｘ８６アーキテクチャは実質的にはレジスタリネーミングを制限する。
【００１０】
命令が定期的かつ速やかにディスパッチされることは、並列処理を用いて性能の向上を達成するうえで基本的なことである。別の命令の実行を待って命令のディスパッチがストーリングされると、プロセッサは直列プロセッサと同様にしか機能しない。
【００１１】
【発明の概要】
したがって、スーパースカラプロセッサまたはパイプラインプロセッサにおいて、オーバラップしているレジスタのビットフィールドのリネーミングをサポートする改善されたプロセッサアーキテクチャを提供することは望ましい。さらに、スーパースカラプロセッサまたはパイプラインプロセッサにおいて、オーバラップしているレジスタのビットフィールドの依存性チェックおよび転送を提供することは望ましい。この発明は、オーバラップしているデータフィールドの依存性チェックおよびその結果の転送を達成するのに、部分的なレジスタリネーミングを利用する。
【００１２】
この発明の実施例は、各オペレーションの可変サイズのオペランドをフルサイズのオペランド内のいくつかのフィールドとして特徴づけることを含む、可変サイズのオペランドでオペレーションを行なうための装置および方法を提供することによって、オーバラップするデータ構造の並列処理から生じる問題を解決する。各フィールドは命令に関して定義されるものとしてまたは定義されないものとして指定される。この装置および方法は、オペレーションが可変サイズのオペランドの各定義されるフィールドについて、別のオペレーションの実行に依存するデータであるかどうかを、他のフィールドとは無関係に、さらに判断する。データが利用可能になると、可変サイズのデータは、他のフィールドとは無関係に、各定義されるフィールドのためのオペレーションにおいて利用するために転送される。
【００１３】
この発明のさらなる実施例は、可変サイズのオペランドデータを利用するオペレーションを行なうためのプロセッサを提供することによって、オーバラップするデータ構造の並列処理から生じる問題を解決する。プロセッサは、フルサイズのオペランドからいくつかのフィールドに区分される可変サイズのオペランドを利用する命令をデコードするための命令デコーダを含む。デコーダは各フィールドを命令に関して定義されたものとしてまたは定義されないものとして指定する。プロセッサは、制御情報と、オペレーションに関するオペランドデータとを一時的に記憶するための、およびオペレーションによって利用される可変サイズのオペランドデータが利用可能であるかどうかを判断するための、リオーダバッファをさらに含む。利用可能性は、他のフィールドとは無関係に、各定義されるフィールドごとに判断される。オペレーションを実行して、各定義されるフィールドに対する可変サイズの結果データを、他のフィールドとは無関係に発生する、複数の機能ユニットが設けられる。依存するデータが利用可能になるとオペレーションを実行する機能ユニットによって利用されるための可変サイズのオペランドデータにアクセスするために、いくつかのバスが含まれる。データの利用可能性は、他のフィールドとは無関係に、各定義されるフィールドに対してテストされる。
【００１４】
同じ参照番号は同じ要素を示す添付の図面に関連する以下の説明を参照することによって、この発明はよりよく理解され、その利点、目的および特徴はより明らかにされるだろう。
【００１５】
【好ましい実施例の詳細な説明】
整数および浮動小数点オペレーションを実行するための命令セットを有するスーパースカラプロセッサ１０のアーキテクチャが図１に示される。６４ビットの内部アドレスおよびデータバス１１は、プロセッサ１０の様々な機能ブロックと外部メモリ１４との間で、アドレス、データ、および制御転送を通信する。命令キャッシュ１６はＣＩＳＣ命令をパージングしプリデコードする。バイト待ち行列３５はプリデコードされた命令を命令デコーダ１８に転送し、命令デコーダ１８はＣＩＳＣ命令をＲＩＳＣ的オペレーション（「ＲＯＰ」）のための命令のそれぞれのシーケンスにマッピングする。命令デコーダ１８は、バイト待ち行列３５にあるプリデコードされたＣＩＳＣ命令に基づいて、すべてのＲＯＰのための型、オペコード、およびポインタ値を発生する。
【００１６】
好適な命令キャッシュ１６は、１９９３年１０月２９日出願の米国特許出願連続番号０８／１４５，９０５（デイビッド・ビー・ウィット（Ｄａｖｉｄ  Ｂ．  Ｗｉｔｔ  ）およびマイケル・ディー・ゴッダード（Ｍｉｃｈａｅｌ  Ｄ．  Ｇｏｄｄａｒｄ）、「可変バイト長命令に特に好適な、プリデコード命令キャッシュおよびそのための方法（Ｐｒｅ−Ｄｅｃｏｄｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｃａｃｈｅ  ａｎｄ  Ｍｅｔｈｏｄ  Ｔｈｅｒｅｆｏｒ  Ｐａｒｔｉｃｕｌａｒｌｙ  Ｓｕｉｔａｂｌｅ  ｆｏｒ  Ｖａｒｉａｂｌｅ  Ｂｙｔｅ−Ｌｅｎｇｔｈ  Ｉｎｓｔｒｕｃｔｉｏｎｓ）」）にさらに詳細に記載される。好適なバイト待ち行列３５は、１９９３年１０月２９日出願の米国特許出願連続番号０８／１４５，９０２（デイビッド・ビー・ウィット「可変バイト長命令に特に好適な、予測命令待ち行列およびそのための方法（Ｓｐｅｃｕｌａｔｉｖｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｑｕｅｕｅ  ａｎｄ  Ｍｅｔｈｏｄ  Ｔｈｅｒｅｆｏｒ  Ｐａｒｔｉｃｕｌａｒｌｙ  Ｓｕｉｔａｂｌｅ  ｆｏｒ  Ｖａｒｉａｂｌｅ  Ｂｙｔｅ−Ｌｅｎｇｔｈ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ）」）にさらに詳細に記載される。好適な命令デコーダ１８は、１９９３年１０月２９日出願の米国特許出願連続番号０８／１４６，３８３（デイビッド・ビー・ウィットおよびマイケル・ディー・ゴッダード「スーパースカラ命令デコーダ（Ｓｕｐｅｒｓｃａｌａｒ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅｒ  ）」）にさらに詳細に記載される。これらの特許出願の各々の全体を、ここに引用により援用する。
【００１７】
命令デコーダ１８は、様々なバスを介してプロセッサ１０内の機能ブロックにＲＯＰオペレーションをディスパッチする。プロセッサ１０は、４つのＲＯＰ発行と、５つのＲＯＰ結果と、１６までの予測して実行されるＲＯＰの結果とをサポートする。ＡソースオペランドおよびＢソースオペランドならびに宛先レジスタへのポインタの４つまでの組は、レジスタファイル２４とリオーダバッファ２６とに、命令デコーダ１８によって、それぞれのＡオペランドポインタ３６とＢオペランドポインタ３７と宛先レジスタポインタ４３とを介して与えられる。レジスタファイル２４およびリオーダバッファ２６は次いで、様々な機能ユニットへ、４１ビットのＡオペランドバス３０およびＢオペランドバス３１の４つの対上で、ＲＩＳＣオペランドＡおよびＢの適当な「予想されて実行される」バージョンを与える。ＡおよびＢオペランドバス３０および３１に関連するのは、Ａオペランドタグバス４８およびＢオペランドタグバス４９の４つの対を含むオペランドタグバスである。結果がオペランドバス上に置かれるために利用可能になると、結果が利用可能になったときにそれを受取るためのリオーダバッファ２６におけるエントリを識別するタグが、対応するオペランドタグバス上にロードされる。オペランドバスおよびオペランドタグバスの４つの対は４つのＲＯＰディスパッチ位置に対応する。命令デコーダは、リオーダバッファ２６と協働して、ＲＯＰの実行後に機能ユニットから結果を受取るリオーダバッファ２６におけるエントリを識別するための４つの宛先タグバス４０を特定する。機能ユニットは、ＲＯＰを実行し、宛先タグを５つの結果タグバス３９のうちの１つにコピーし、結果が利用可能になるとそれを５つの結果バス３２のうちの対応する１つに置く。結果タグバス３９上の対応するダグが，結果を待つＲＯＰのオペランドタグと一致すると、機能ユニットは結果バス３２上の結果に直接アクセスする。
【００１８】
命令デコーダ１８は、４つのオペコード／型バス５０を介して、オペコードおよびオペコードの型を含む、ＡおよびＢソースオペランド情報に伴なうオペコード情報をディスパッチする。
【００１９】
プロセッサ１０は、分岐ユニット２０、整数機能ユニット２１、浮動小数点機能ユニット２２、およびロード／ストア機能ユニット８０のような、いくつかの機能ユニットを含む。整数機能ユニット２１は、一般的なものとして示されたものであり、算術論理ユニット、シフトユニット、および特別なレジスタユニットのような、様々なタイプのユニットを表わす。分岐ユニット２０は、分岐があるときに適当な命令フェッチ速度を可能にし、複数の命令発行を伴なう動作を達成するのに必要な技術である、分岐予測オペレーションを実行する。分岐ユニット２０および命令デコーダ１８を含む好適な分岐予測システムは、米国特許第５，１３６，６９７号（ウィリアム・エム・ジョンソン（Ｗｉｌｌｉａｍ  Ｍ．  Ｊｏｈｎｓｏｎ）「キャッシュに命令の各ブロックとともに記憶されるフェッチ情報を用いて正しく予測される分岐命令後の実行のための遅延を低減するためのシステム（Ｓｙｓｔｅｍ  ｆｏｒ  Ｒｅｄｕｃｉｎｇ  Ｄｅｌａｙ  ｆｏｒ  Ｅｘｅｃｕｔｉｏｎ  Ｓｕｂｓｅｑｕｅｎｔ  ｔｏ  Ｃｏｒｒｅｃｔｌｙ  Ｐｒｅｄｉｃｔｅｄ  Ｂｒａｎｃｈ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｕｓｉｎｇ  Ｆｅｔｃｈ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｔｏｒｅｄ  ｗｉｔｈ  ｅａｃｈ  Ｂｌｏｃｋ  ｏｆ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｉｎ  Ｃａｃｈｅ）」）にさらに詳細に記載され、その全体をここに引用により援用する。
【００２０】
プロセッサ１０は過度の複雑さを避けるために、機能ユニットの単純な組を有して示される。機能ユニットの数およびタイプは、単一の浮動小数点機能ユニット２２と、一般的には整数データでオペレーションを行なう複数の機能ユニット２０と２１と８０とを有する、特定の態様でここに示されるが、整数および浮動小数点ユニットの他の組合せが所望されるように実現されてもよいことが理解される。各機能ユニット２０、２１、２２および８０は、オペランドバス３０および３１ならびにオペコード／型バス５０に入力が接続される、それぞれのリザべーションステーション（図示せず）を有する。リザベーションステーションは機能ユニットへの予測ＲＯＰのディスパッチを可能にする。
【００２１】
レジスタファイル２４は、整数および浮動小数点命令のためのマッピングされたＣＩＳＣのレジスタを含む物理的な記憶メモリである。レジスタファイル２４は、４つまでの同時並列でディスパッチされるＲＯＰの各々のためのソースオペランドのためのレジスタ番号を指定するＡおよびＢオペランドポインタ３６および３７の２つまでのレジスタポインタによってアドレス指定される。これらのポインタはレジスタファイルのエントリを指し、選択されたエントリの値は８つの読出ポートを介してオペランドバス３０および３１のオペランドバス上に置かれる。整数は３２ビット〈３１：０〉レジスタに記憶され、浮動小数点数はレジスタファイル２４の８２ビット〈８１：０〉浮動小数点レジスタに記憶される。レジスタファイル２４は、リオーダバッファ２６から４つの４１ビットのライトバックバス３４を介して、実行された、予測によらないオペレーションの整数および浮動小数点結果を受取る。リオーダバッファ２６からレジスタファイル２４へＲＯＰとして書込まれた結果は回収（リタイア）される。
【００２２】
リオーダバッファ２６は、予測実行されるＲＯＰの相対的順序を把握するための循環ＦＩＦＯてある。リオーダバッファ２６の記憶位置は、回収中の結果をレジスタファイル２４に送るために、および機能ユニットから結果を受取るために、動的に割当てられる。命令がデコードされると、その宛先オペランドは次の利用可能なリオーダバッファ位置に割当てられ、それの宛先レジスタ番号はこの位置に関連して、実際には宛先レジスタをリオーダバッファ位置にリネーミングする。それのソースオペランドのレジスタ番号は、リオーダバッファ２６およびレジスタファイル２４に同時にアクセスするために用いられる。宛先ポインタがソースオペランドのレジスタ番号に一致するエントリをリオーダバッファ２６が有さない場合には、レジスタファイル２４にある値がオペランドとして選択される。リオーダバッファ２６が１つまたはそれより多い一致エントリを有する場合には、最も最近割当てられた一致エントリの値が、利用可能ならば与えられる。結果が利用可能でない場合には、このリオーダバッファエントリを識別するタグが、ＡおよびＢオペランドタグバス４８および４９のうちの１つのオペランドタグバス上に与えられる。この結果またはタグは、機能ユニットに、オペランドバス３０、３１またはオペランドタグバス４８、４９を介してそれぞれ与えられる。機能ユニット２０、２１、２２および８０における実行の完了から結果が得られると、その結果およびそれらのそれぞれの結果タグは、リオーダバッファ２６および機能ユニットのリザベーションステーションに、５バス幅の結果バス３２および結果タグバス３９を介して与えられる。５つの結果バスおよび結果タグバスならびに状態バスのうち、４つはリオーダバッファに整数および浮動小数点結果を転送するための汎用バスである。付加的な第５の結果バスおよび結果タグバスならびに状態バスは、機能ユニットのいくつかからリオーダバッファへ、転送される結果ではない情報を転送するのに用いられる。たとえば、ロード／ストア機能ユニット８０による記憶オペレーションから、または分岐ユニット２０による分岐オペレーションから生じる状態情報はこの付加的なバス上に置かれる。この付加的なバスは結果バスバンド幅を保存する。リオーダバッファ２６は、例外および予測誤りを処理し、プログラムカウンタおよび実行フラグを含む特定のレジスタの状態を維持する。リオーダバッファを含む、ＲＩＳＣコアのための好適なユニットは、１９９３年１０月２９日出願の米国特許出願連続番号０８／１４６，３８２（デイビッド・ビー・ウィットおよびウィリアム・エム・ジョンソン、「高性能スーパースカラマイクロプロセッサ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｓｕｐｅｒｓｃａｌａｒ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  ）」）に開示され、その全体をここに引用により援用する。
【００２３】
命令デコーダ１８は機能ユニットにＲＯＰを「正順序で」ディスパッチする。順序はリオーダバッファエントリの順序で維持される。待ち行列にあった前のＲＯＰがすべて実行を完了し、すべてのソースオペランドがオペランドバスまたは結果バスのいずれかを介して利用可能となり、結果バスが結果を受取るのに利用可能となると、機能ユニットはＲＯＰを発行のために待ち行列に入る。したがって、機能ユニットは、ＲＯＰを「順序外で」完了する。オペレーションのディスパッチは、オペレーションの完了に依存しないので、リザベーションステーションの待ち行列が利用できないことまたはリオーダバッファのエントリが割当てられないことによってプロセッサがストーリングされない限り、命令デコーダ１８は命令が即座に完了され得るか否かにかかわらず命令をデコードし続ける。
【００２４】
整数データを処理するために、少なくとも３２ビット幅を有するデータ経路を定義することが好ましい。このデータ経路は、レジスタファイル２４にあるレジスタと、リオーダバッファ２６の各エントリにある結果フィールドと、オペランドバスと結果バスとライトバックバスとを含む。１つの実施例において、プロセッサは、浮動小数点オペレーションに対処するために、４１ビットのデータ経路を有する。３２ビットのデータ経路は４１ビット構造のビット〈３１：０〉にマッピングされる。この実施例は、関連の米国特許出願（スコット・エイ・ホワイト（Ｓｃｏｔｔ  Ａ．  Ｗｈｉｔｅ）およびマイケル・ディー・ゴッダード、「複数の整数／浮動小数点固定ピッチコア（Ｍｉｘｅｄ  Ｉｎｔｅｇｅｒ／Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｆｉｘｅｄ  Ｐｉｔｃｈ  Ｃｏｒｅ  ）」）に記載され、その全体を引用によりここに援用する。
【００２５】
複数のデータの型が、図２、図３、図４、図５および図６に示される３２ビットの整数データ構造によって表わされる。図２に示されるデータ構造２００は、３つのフィールド、つまり１６ビットの上位フィールド２１７と８ビットの中位フィールド２１６と８ビットの下位フィールド２１５とに区分される。図３に示される倍長語２０２は、構造２００の下位、中位、および上位フィールドのすべてのビットを用いる３２ビットの整数データエレメントを表わす。図４に示される語２０４は、下位および中位フィールドのすべてビットを用いる１６ビットの整数エレメントを表わす。図５および図６にそれぞれ示されるバイト２０６および２０８は、下位バイトを定義するために下位フィールドのすべてのビットを、または上位バイトを定義するために中位フィールドのすべてのビットを用いる、８ビットの整数エレメントを表わす。３２ビットより小さい、データエレメントの使用されないビットは、プロセッサ１０内の様々な機能ブロックによって一般的には０にセットされる。
【００２６】
Ａオペランドポインタ、Ｂオペランドポインタ、および宛先レジスタポインタの各々は、図７のポインタ２１０によって示されるように、９つのビットにエンコードされる。ポインタ２１０の上位６ビット〈８：３〉は、ＲＯＰが操作するレジスタファイル２４内の特定のレジスタを選択するレジスタアドレスを特定する。下位３バイト（Ｈ、ＭおよびＬ）は、ＲＯＰによって利用されるべく定義されるレジスタのフィールドを特定するフィールド選択ビットである。Ｌビットは、図２のデータ構造２００の下位ビットフィールド２１５を選択する。Ｍビットは、中位ビットフィールド２１６を選択し、Ｈビットは上位ビットフィールド２１７を選択する。この態様で、ポインタ２１０は、他のビットフィールドの選択とは無関係に、ビットフィールドの選択をサポートする。
【００２７】
レジスタファイル２４の詳細な説明は図８に示される。レジスタファイル２４は、読出デコーダ６０とレジスタファイルアレイ６２と書込デコーダ６４とレジスタファイル制御６６とレジスタファイルオペランドバスドライバ６８とを含む。読出デコーダ６０は、４つの対の６４ビットのＡおよびＢオペランドアドレス信号ＲＡ０、ＲＡ１、ＲＡ２、ＲＡ３、ＲＢ０、ＲＢ１、ＲＢ２およびＲＢ３を介してレジスタファイルアレイ６２をアドレス指定するための、ＡおよびＢオペランドポインタ３６オペランド３７の選択されたビット〈８：３〉を受取る。ＡおよびＢオペランドポインタビットの残りの部分〈２：０〉は、オペランドデータの適当なフィールドを駆動するために、レジスタファイルオペランドバスドライバ６８に与えられる。
【００２８】
レジスタファイルアレイ６２はリオーダバッファ２６から４つのライトバックバス３４を介して結果データを受取る。あるリオーダバッファエントリが他の３つまでのリオーダバッファエントリと並列して回収されると、そのエントリのための結果データはライトバックバス３４の１つに置かれ、そのエントリのための宛先ポインタは選択されたライトバックバスに対応する書込ポインタ３３上に置かれる。ライトバックバス３４上のデータは、書込デコーダ６４に与えられる書込ポインタバス３３上のアドレス信号に従って、レジスタファイルアレイ６２にある指定されるレジスタに送られる。
【００２９】
レジスタファイル制御６６はリオーダバッファ２６からＡオペランド無効化ライン５７およびＢオペランド無効化ライン５８上で無効化信号を受取り、それらは次いでレジスタファイル制御６６からレジスタファイルオペランドバスドライバ６８へ伝えられる。レジスタファイルアレイ６２は、プロセッサの機能ユニットで動作し、それらによって発生される、結果を記憶するための複数のアドレス指定可能な記憶レジスタを含む。図９は、この実施例では一時整数レジスタＥＴＭＰ０からＥＴＭＰ１５と同じ物理上のレジスタ位置にマッピングされる、８つの３２ビットの整数レジスタ（ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＰ、ＥＢＰ、ＥＳＩおよびＥＤＩ）と８つの８２ビットの浮動小数点レジスタＦＰ０からＦＰ７と１６の４１ビットの一時整数レジスタＥＴＭＰ０からＥＴＭＰ１５と８つの８２ビットの一時浮動小数点レジスタＦＴＭＰ０からＦＴＭＰ７とを含む、４０のレジスタを有する例示のレジスタファイルアレイ６２を示す。
【００３０】
図１０を参照すると、リオーダバッファ２６は、リオーダバッファ（ＲＯＢ）制御および状態ブロック７０とＲＯＢアレイ７４とＲＯＢオペランドバスドライバ７６とを含む。ＲＯＢ制御および状態ブロック７０は、ＲＯＰのためのソースおよび宛先オペランドを識別する入力を受取るために、ＡおよびＢオペランドポインタ３６および３７ならびに宛先ポインタ（ＤＥＳＴ  ＲＥＧ）バス４３に接続される。ＲＯＢアレイ７４は、ＲＯＢ制御および状態ブロック７０によって制御されるメモリアレイである。ＲＯＢアレイ７４は機能ユニットからの結果を受取るために結果バス３２に接続される。ヘッド信号とテール信号とＡオペランド選択信号とＢオペランド選択信号と結果選択信号とを含む制御信号は、ＲＯＢ制御および状態７０からＲＯＢアレイ７４に伝えられる。これらの制御信号は、結果バス３２データから入力され、ライトバックバス３４と書込ポインタ３３とＡおよびＢオペランドバス３１および３２とＡおよびＢオペランドタグバス４８および４９とに出力される、ＲＯＢアレイ要素を選択する。各リオーダバッファアレイ要素に対して１つが対応する１６の宛先ポインタは、依存性チェックを行なうために、ＲＯＢアレイ７４からＲＯＢ制御および状態７０へ伝えられる。
【００３１】
図１１は、結果フィールドと宛先ポインタフィールドと制御情報を記憶する他のフィールドとを各々が含む１６のエントリを含むリオーダバッファアレイ７４の例を示す。４１ビットの結果フィールドは機能ユニットから受取られた結果を記憶するために与えられる。２つのリオーダバッファエントリは浮動小数点結果を記憶するために用いられる。整数結果は４１ビットのうちの３２ビットで記憶され、残りの９ビットは状態フラグを保持するために用いられる。各ＲＯＢアレイ７４エントリの宛先ポインタフィールド（ＤＥＳＴ＿ＰＴＲ〈８：０〉）は、レジスタファイル２４にある宛先レジスタを指定する。
【００３２】
組合された、リオーダバッファ２６およびレジスタファイル２４のオペレーションは、図８、図９、図１０および図１１を参照して記載される。命令デコーダ１８はＲＯＰをディスパッチすると、４つの対のＡおよびＢオペランドポインタ３６および３７を用いてオペランドバスにソースオペランドとして与えるための、レジスタまたはリオーダバッファエントリの内容を選択するために、レジスタファイル２４およびリオーダバッファ２６にソースオペランドポインタを与える。同様の態様で、命令デコーダ１８は４つの宛先レジスタ（ＤＥＳＴ＿ＲＥＧ）ポインタバス４３を用いてリオーダバッファ２６に宛先ポインタを与えて、レジスタファイル２４にある３０の宛先レジスタのうちの特定の宛先レジスタを識別する。この宛先レジスタは実行されたＲＯＰの結果を受取るべく選択される。
【００３３】
ＲＯＰがディスパッチされると、リオーダバッファ２６のエントリがそれに割当てられる。エントリは機能ユニットから結果データを受取るために結果フィールドを含む。各エントリの結果フィールドは、倍長語フィールド、語フィールド、上位バイトフィールド、または下位バイトフィールドとして定義され、ＲＯＰの実行で結果データが利用可能になるとその対応するフィールドを受取る。倍長語オペランドフィールドの場合、セットされたビット２１７、２１６および２１５によってそれぞれ示されるように、１６ビットの上位フィールド、８ビットの中位フィールド、および８ビットの下位フィールドはすべて定義される。語オペランドフィールドの場合、セットされたビット２１６および２１５によってそれぞれ示されるように、８ビットの中位フィールドおよび８ビットの下位フィールドのみが定義される。下位バイトのオペランドフィールドの場合、セットされたビット２１５によって示されるように、８ビットの下位フィールドのみが定義される。上位バイトのオペランドフィールドの場合は、セットされたビット２１６によって示されるように、８ビットの中位フィールドのみが定義される。ＤＥＳＴ＿ＰＴＲ〈８：３〉にレジスタアドレスを含みかつＤＥＳＴ＿ＰＴＲ〈２：０〉に定義されるフィールドビット２１７、２１６および２１５を含む宛先ポインタＤＥＳＴ＿ＰＴＲは宛先レジスタ（ＤＥＳＴ＿ＲＥＧ）バス４３を介してリオーダバッファ制御状態７０によって受取られ、リオーダバッファアレイ７４の割当てられたエントリの宛先ポインタフィールドＤＥＳＴ＿ＰＴＲ〈８：０〉に書込まれる。
【００３４】
ＡまたはＢオペランドポインタ３６および３７のポインタはＲＯＢ制御ブロック７０を介してＲＯＢアレイ７４をアドレス指定して、ＲＯＢオペランドバスドライバ７６に与えられるべきオペランドデータを指定する。ＲＯＢ制御および状態７０はＡおよびＢオペランドポインタ３６および３７を介してオペランドポインタを受取る。
【００３５】
リオーダバッファ２６は、ＡおよびＢオペランドポインタ３６および３７のポインタの各々を、リオーダバッファアレイ７４の１６の要素すべての宛先ポインタフィールドと同時に比較してデータ依存性を識別する一致が存在するかどうかを判断することによって、依存性チェックを達成する。８つまでのオペランドポインタが宛先ポインタと同時に比較される。上位オペランドフィールドでは、オペランドポインタのオペランドフィールドビット〈８：３，２〉が１６の宛先ポインタフィールドのビット〈８：３，２〉と比較される。中位オペランドフィールドでは、オペランドポインタのビット〈８：３，１〉が１６の宛先ポインタフィールドのビット〈８：３，１〉と比較される。下位オペランドフィールドでは、オペランドポインタのビット〈８：３，０〉が１６の宛先ポインタフィールドのビット〈８：３，０〉と比較される。オペランドポインタビット〈８：３〉が宛先ポインタビット〈８：３〉と一致すると特定のフィールドのための一致が起こって、この特定のフィールドを識別するフィールド選択ビットがオペランドポインタビット〈２：０〉および宛先ポインタビット〈２：０〉の両方にアサートされる。オペランドポインタは複数のリオーダバッファエントリのための宛先ポインタと一致するかもしれない。１つまたはそれより多い一致が生じた場合には、待ち行列のテールに最も近い、一致するリオーダバッファエントリのポインタが適当なオペランドデータを識別するのに用いられる。このポインタはオペランドタグと呼ばれる。リオーダバッファ２６は、各オペランドのための３つのオペランドタグ、つまり上位、中位および下位のオペランドフィールドの各フィールドに対して１つのオペランドタグを与える。オペランドタグは、オペランドバス上に結果データを駆動するために、リオーダバッファエントリにポインタとして与えられる。オペランドポインタの上位、中位および下位フィールド選択ビットは、オペランドバスのビット〈３１：１６〉、［［ＧＤＺ：ＯＲ  ＩＳ  ＩＴＢＩＴＳ〈４０：１６〉］］〈１５：８〉および〈７：０〉上にそれぞれリオーダバッファ結果データを駆動する。
【００３６】
リオーダバッファアレイ７４の状態および制御フィールド〈２３：０〉は、リオーダバッファ２６が機能ユニットから結果を受取るとアサートされる結果有効ビットを含む。結果有効ビットは、結果の上位、中位および下位フィールドのすべてに適用される。この３つのフィールドのために同時に、ＲＯＢ制御ブロック７０はフィールド特定のオペランドタグをポインタとして用いてＲＯＢアレイ７４をアドレス指定する。ＲＯＢアレイ７４はＲＯＢオペランドバスドライバ７６にエントリの結果フィールドの適当なビットを与える。ＡおよびＢオペランドポインタビット〈２：０〉がＲＯＢオペランドバスドライバ７６に与えられて、Ｈ、ＭおよびＬビットフィールドがオペランドバス上に駆動されるべく定義される。定義されないフィールドはオペランドバス上に０として駆動される。
【００３７】
命令デコーダ１８がオペコード／型バス５０上にオペコードを駆動し、リオーダバッファ２６がオペランドバス３０および３１上にオペランドを駆動すると、リオーダバッファ２６はオペランドタグバス４８および４９上に上位、中位および下位オペランドフィールドの各々のためのオペランドタグをさらに駆動する。この３つのオペランドタグは、データが利用可能であるかどうかに関係なく、ソースオペランドを取り出そうとするリオーダバッファエントリの識別子を各々含む。オペランドタグ有効ビットは、上位、中位および下位フィールドのオペランドタグの各々に関連する。オペランドタグ有効ビットはオペランドデータが利用可能でないことを示すためにアサートされる。オペランドタグ有効ビットは、エントリの結果有効ビットを反転することによって、リオーダバッファエントリのために得られる。したがって、各オペランドバス３０および３１に関連するＡおよびＢオペランドタグバス４８および４９には、下位、中位および上位データフィールドのためのタグ情報を供給する３つの独立したタグが存在する。上位、中位および下位オペランドタグの各々は他のタグから独立しているので、異なるフィールドに対し異なるリオーダバッファエントリからデータをオペランドバス上へと駆動でき、１つのエントリから同じエントリまたはデータが駆動されることはない。
【００３８】
オペランドの特定のフィールドがレジスタファイル２４によって駆動される場合、ＲＯＢ２６は対応するオペランドタグ有効ビットをアサートせず、それによって、その特定フィールドのためのオペランドデータが利用可能であることを示す。好適な依存性チェック回路は、関連の特許出願（スコット・エイ・ホワイト、「範囲決定回路、および多ビットの範囲にビットの値を割当てる方法」）に詳細に記載され、それを引用によりここに援用する。
【００３９】
結果がリオーダバッファエントリの結果フィールドに保持されているかまたはＲＯＰの実行を待っていて利用できない状態にあるかにかかわらず、リオーダバッファ２６は依存性を検知すると必ず無効化信号を送る。いずれの例においても、リオーダバッファ制御７０はレジスタファイル２４へＡ無効化ライン５７またはＢ無効化ライン５８のうちの適当なラインを介してオペランドの各依存フィールドのための無効化信号をセットする。リオーダバッファ制御７０は、レジスタファイルオペランドバスドライバ６８に与えられる無効化バス５７および５８のビットをセットすることによって、レジスタファイルアレイ６２のエントリの任意の依存下位、中位または上位フィールドの読出オペレーションを無効化する。Ａ無効化バス５７およびＢ無効化バス５８は、４つのＡおよびＢオペランドバス３０および３１の各々のための３つの転送されるオペランドのビットを含む。リオーダバッファ２６は任意のデータフィールドの無効化を制御し、レジスタファイル２４はレジスタファイルオペランドバスドライバ６８を命令されるように不能化することによって応答する。したがって、レジスタファイル２４からオペランドバス上にデータを置くという試みは無効化されるが、依存性が存在するオペランドフィールドに対してのみである。
【００４０】
読出デコーダ６０は、レジスタファイル２４にあるレジスタを選択するために、ＡおよびＢオペランドポインタ３６および３７を受取ってそれらをデコードする。読出デコーダ６０はオペランドポインタ３６および３７要素の上位６ビットをデコードしてレジスタを選択する。アクセスされたレジスタからの値はラッチされ、レジスタファイルアレイ６２をレジスタファイルオペランドバスドライバ６８に接続する４１ビットのＡまたはＢオペランド転送ラインの４つの対のうちの１つ上に駆動される。レジスタファイルアレイ６２の整数レジスタにおいて実現されないビット位置はこれらのバス上では論理ゼロとして読出される。レジスタファイルオペランドバスドライバ６８は、オペランドポインタ３６および３７のビット〈２：０〉によって定義されるＨ、ＭおよびＬビットフィールドに従って選択された、ラッチされた値を、ＡおよびＢオペランドバス３０および３１上に駆動する。レジスタファイル制御６６はリオーダバッファ２６からＡおよびＢ無効化信号５７および５８を受取って、エントリの下位、中位または上位フィールドのいずれかのレジスタファイル読出オペレーションの無効化を命ずる。
【００４１】
ソースオペランドデータが利用不可なデータに依存しておらず、ゆえにレジスタファイル２４またはリオーダバッファ２６のいずれからも利用可能であることをリオーダバッファ２６が判断すると、オペランドデータはオペランドバス３０および３１を介して機能ユニットのリザベーションステーションに送られる。
【００４２】
機能ユニットがオペレーションの実行を完了して結果バス３２上に結果を置くと、ＲＯＢ制御および状態７０は、結果バス３２からデータを受取るよう対応するＲＯＢアレイエントリを指定するポインタを結果タグバス３９から受取る。ＲＯＢ制御７０は４つの結果選択ポインタを用いて結果バス３２からＲＯＢアレイ７４へのデータの転送を命ずる。
【００４３】
ＲＯＢ制御および状態７０はＲＯＰを回収し、ライトバックバス３４のうちの１つにＲＯＢアレイ７４要素の結果フィールドを置きかつそのライトバックバスに対応する書込ポインタ３３を宛先ポインタで駆動することによってレジスタファイル２４に結果を通信する。書込ポインタ３３は、回収された結果を受取るようレジスタファイル２４内のレジスタアドレスを指定する。
【００４４】
図１２を参照すると、レジスタリネーミングがない状態で、資源の競合を解決するために次の命令が前の命令の実行完了を待たなければならないという資源の競合が生じている。この現象はｘ８６命令の次のシーケンスによって示される。
【００４５】
ｍｏｖ  ａｈ，ｂｙｔｅ１
ｍｏｖ  ａｌ，ｂｙｔｅ２
ｍｏｖ  ｗｏｒｄ１２，ａｘ
このコードシーケンスは、２バイト列をインタリーブするためにまたは１６ビットのデータのバイト順序をスワップするために、ループで用いられてもよい。第１の命令はレジスタＥＡＸのレジスタＡＨにｂｙｔｅ１  をロードする。第２の命令はレジスタＥＡＸのレジスタＡＬにｂｙｔｅ２  をロードする。第３の命令はｗｏｒｄ１２と名付けられる１６ビットのメモリ位置にＡＸレジスタの内容を記憶する。
【００４６】
レジスタリネーミングの１つの実現例では、レジスタＥＡＸの任意の部分に対する修正はレジスタ全体の新しい例を作り出す。これは、レジスタ全体上の独立したオペレーションを並列処理するのに適当である。しかしながら、上述の第１および第２の命令におけるようなレジスタＥＡＸの一部のみを修正し、それでいて次のオペレーション（第３命令）にそのレジスタ全体の内容を転送できるためには、レジスタＥＡＸの現在の内容が新しいフィールド値と合わせられるために機能ユニットに与えられて、レジスタＥＡＸの新しい３２ビットの内容を作り出さなければならない。このことは、図１２の矢印Ａで示されるような、第２の命令の第１の命令への依存性を発生させ、命令は直列の態様で実行する。第３の命令は矢印Ｂによって示されるように第２の命令に依存するので、３つの命令のいずれも並列に実行されることはできない。
【００４７】
さらに、宛先レジスタは必要な入力オペランドとなる。多くのｘ８６命令は、宛先がさらに入力の１つである２オペランド形式を有する。しかしながら、この例に当て嵌まらず、宛先が第３の入力となる、いくつかの命令が定義される。依存性処理論理はこれらの例のいずれをも処理しなければならないため、これらのわずかな例外的な命令のためのみに用いられる論理にはより大きな負担がかかる。
【００４８】
図１３に示されるレジスタリネーミングの好ましい実施例では、第２の命令が第１の命令に依存しないようにレジスタ（ＥＡＸ）の部分的なフィールドがリネーミングされる。第３の命令のみが前の命令に依存するので、最初の２つの命令は並列で実行してもよく、第３の命令のみの実行が依存性条件のために遅延される。レジスタリネーミングのこの好ましい実現例はシーケンスにかかる全体の時間を３サイクルから２サイクルに短縮する。最初の２つの命令の実行から結果として得られるデータが結果バス上に置かれて第３の命令の実行のために転送されるため、プロセッサのさらなる加速が達成される。
【００４９】
図１４は、コンポーネントブロックの一般に標準的な組を組込み、選択可能な可変ビット幅を有するオペランドデータをサポートする、包括的な機能ユニット２２を示す。機能ユニットは様々な詳細に関して、包括的な実施例と異なってもよい。たとえば、機能ユニットは、いくつかのリザベーションステーションを有し、一度に１つより多い組のオペランドバスおよび結果バスにアクセスしてもよい。包括的な機能ユニット２２は、入力データおよび制御信号を受取るための、Ａマルチプレクサ４１とＢマルチプレクサ４２とタグ−オペコードマルチプレクサ４５とを含む。包括的な機能ユニット２２はリザベーションステーション４４と実行ユニット９５と結果バスドライバ９３とをさらに含む。リザベーションステーション４４はＦＩＦＯ５１とタグ−オペコードＦＩＦＯ８９とＡオペランド転送回路９０とＢオペランド転送回路９２とを含む。
【００５０】
Ａマルチプレクサ４１は、それぞれの入力オペランドとオペランドタグとを受取るために４つの４１ビットのＡオペランドバス３０と４つのＡオペランドタグバス４８とに接続される４：１マルチプレクサである。同様に、Ｂマルチプレクサ４２は、４つの４１ビットのＢオペランドバス３１と４つのＢオペランドタグバス４９とに接続される４：１マルチプレクサである。タグ−オペコードマルチプレクサブロック４５は、型比較論理（図示せず）および２つのマルチプレクサと、４つの宛先タグバス４０に接続されるタグマルチプレクサ（図示せず）と、４つのオペコード／型バス５０に接続されるオペコードマルチプレクサ（図示せず）とを含む。タグマルチプレクサおよびオペコードマルチプレクサは４：１マルチプレクサである。バス選択信号はタグ−オペコードマルチプレクサブロック４５内部の型比較論理とタグマルチプレクサとオペコードマルチプレクサとに接続して、Ａマルチプレクサ４１およびＢマルチプレクサ４２に接続される。
【００５１】
リザベーションステーション４４内において、タグ−オペコードＦＩＦＯ８９は、タグ−オペコードマルチプレクサ４５に、宛先タグバス４０の選択されたバスとオペコード／型バス５０の選択されたバスとにそれぞれ対応する宛先タグラインとオペコードラインとによって接続される。ＦＩＦＯ５１は、Ａマルチプレクサ４１に、Ａオペランドバス３０の選択されたバスに対応する第１の組のラインとＡオペランドタグバス４８の選択されたバスに対応する第２の組のラインとによって接続される。ラインの第１の組はＦＩＦＯ５１の内部へとＡデータＦＩＦＯ５２へ接続される。ＦＩＦＯ５１の内部において、ＡデータＦＩＦＯ５２はＡオペランド転送回路９０に接続するラインを有する。ラインの第２の組はＦＩＦＯ５１の内部へとＡタグＦＩＦＯ５３へ接続される。ＦＩＦＯ５１は、Ｂマルチプレクサ４２へ、Ｂオペランドバス３１の選択されたバスに対応する第３の組のラインとＢオペランドタグバス４９の選択されたバスに対応する第４の組のラインとによって接続される。ラインの第３の組はＦＩＦＯ５１の内部へとＢデータＦＩＦＯ５５に接続される。ＦＩＦＯ５１の内部において、ＢデータＦＩＦＯ５５はＢオペランド転送回路９２に接続するラインを有する。ラインの第４の組はＦＩＦＯ５１の内部へとＢタグＦＩＦＯ５６に接続される。Ａオペランド転送回路９０はＡタグＦＩＦＯ５３と５つの結果タグバス３９と５つの結果バス３２とに接続される。同様に、Ｂオペランド転送回路９２はＢタグＦＩＦＯ５６と５つの結果タグバス３９と５つの結果バス３２とに接続される。
【００５２】
実行ユニット９５は、リザベーションステーション４４に、ＡデータＦＩＦＯ５２からのＡオペランドラインと、ＢデータＦＩＦＯ５５からのＢオペランドラインと、タグ−オペコードＦＩＦＯブロック８９からの宛先タグラインおよびオペコードラインとを用いて接続される。実行ユニット９５は結果バスアービトレータ（図示せず）からの結果許可信号入力にさらに接続される。結果バスドライバ９３は、その出力で、結果バスアービトレータに接続する結果要求信号ラインと結果タグバス３９と結果バス３２とに接続される。
【００５３】
機能ユニットは、それとディスパッチされたＲＯＰとの間に型コード一致が生じると活性化される。型コード一致は、４つの型コードバスのうちの１つの上にある型コードが機能ユニットに割当てられた型コードと対応する際に生じる。型コードが一致すると、タグ−オペコードマルチプレクサ４５は、選択されるべきオペランドバス、オペランドタグバス、宛先タグバス、およびオペコード／型バスの特定のバスを特定するバス選択信号を発生する。バス選択信号は、タグ−おぺコードマルチプレクサ４５のタグマルチプレクサおよびオペコードマルチプレクサと、Ａマルチプレクサ４１と、Ｂマルチプレクサ４２とに与えられて、リザベーションステーション４４にオペランドおよびタグ情報を送込む。選択された宛先タグおよび選択されたオペコードはタグ−オペコードＦＩＦＯ８９に書込まれる。タグ−オペコードＦＩＦＯ８９のタグＦＩＦＯおよびオペコードＦＩＦＯは、宛先タグおよびローカルオペコードを保持するための一時的メモリである。タグは、命令が実行されその結果が結果バス３２上に置かれた後ＲＯＰおよびその結果が最終的に書込まれるリオーダバッファ２６内のエントリを識別する。したがって、ＡおよびＢオペランド、ＡおよびＢオペランドタグ、宛先タグ、ならびにオペコードは、リザベーションステーション４４に保持され、各リザベーションステーションエントリに対してＦＩＦＯ５１およびタグ−オペコードＦＩＦＯ８９を通過させられる。
【００５４】
選択されたＡオペランドデータおよびＡオペランドタグは、ＡデータＦＩＦＯ５２およびＡタグＦＩＦＯ５３にそれぞれ書込まれる。選択されたＢオペランドおよびＢオペランドタグは、ＢデータＦＩＦＯ５５およびＢタグＦＩＦＯ５６にそれぞれ書込まれる。ＦＩＦＯ５１のＡタグ５３エントリおよびＢタグ５６エントリの各々は、オペランドの上位、中位および下位フィールドに対応する３つのオペランドタグを含む。図１５に一般的に示されるように、上位、中位および下位オペランドフィールド１００、１０１および１０２の各々は、関連するオペランドタグ有効ビット１０６、１０７および１０８を有する。オペランドタグバスからのオペランドタグ有効ビットはマルチプレクサを介してＦＩＦＯ５１にあるタグＦＩＦＯに送られる。タグＦＩＦＯエントリは、ともにタグＦＩＦＯに書込まれる上位、中位および下位オペランドタグ１０３、１０４および１０５を含む。タグＦＩＦＯは、セットされると各フィールドに対してオペランドデータが利用可能でないことを示すオペランドタグ有効ビット１０６、１０７および１０８をさらに含む。したがって、フィールドが定義されかつデータがレジスタファイル２４またはリオーダバッファ２６において利用可能でない場合には、リオーダバッファ２６はオペランドタグバス上に、利用不可のデータが利用可能になったときに書込まれるリオーダバッファエントリを識別するオペランドタグに伴われる、アサートされたオペランドタグ有効ビットを駆動する。フィールドがＲＯＰに関して定義されていない場合またはデータが利用可能である場合には、そのフィールドのためのオペランドタグ有効ビットはアサートされない。
【００５５】
リザベーションステーションの目的は、ソースオペランドが現在利用可能かどうかにかかわらず、命令デコーダに機能ユニットへ予測ＲＯＰをディスパッチさせることである。これにより、計算またはロード／ストアが完了するのを待つことなく、多数の予測ＲＯＰがディスパッチされることが可能となる。リザベーションステーション４４は２つのソースオペランドおよびタグに加えて各エントリにある宛先およびオペコードに関する情報を保持できるよう、Ａデータ５２、Ａタグ５３、Ｂデータ５５、Ｂタグ５６、ならびにタグ−オペコードＦＩＦＯブロック８９の宛先タグおよびオペコードＦＩＦＯは２段ＦＩＦＯである。
【００５６】
リザベーションステーション４４は、ディスパッチ時に利用不可であったソースオペランドをも、そこに記憶されるオペランドタグおよびオペランドタグ有効ビットを用いて結果バス３２から直接転送する。適当なＡおよびＢオペランドデータフィールドすべてがＦＩＦＯ５１に存在すると、機能ユニットは結果バスドライバ９３からの結果要求信号を用いて結果バス３２を調停してあるバスを選ぶ。
【００５７】
結果バスが利用可能で、結果許可信号がアサートされると、実行ユニット９５はＲＯＰを実行して結果バスドライバ９３に結果データを伝える。機能ユニットの型に依って、たとえば整数または浮動小数点算術オペレーション、シフトオペレーション、データロード／ストアオペレーション、データ比較および分岐オペレーション、ならびに論理オペレーションを含む、プロセッサにおいて標準的な様々なオペレーションのうちの１つまたはそれより多いオペレーションを、実行ユニット９５は実行する。
【００５８】
実行ユニット９５は、結果バス３２への出力のためにデータをさらに配列する。１バイトのオペランドのオペコードに対し、１ビットのＡＨＢＹＴＥ（上位バイト）信号が、８ビットのレジスタオペランドが図２のデータ構造２００によって示されるように中位Ｍまたは下位Ｌレジスタフィールドにそれぞれある上位バイトであるかまたは下位バイトであるかを判断する。ＡＨＢＹＴＥ信号がセットされると、実行ユニット９５はＲＯＰを実行する前に、中位フィールド（ビット〈１５：８〉）にあるデータを下位ビットフィールド位置（ビット〈７：０〉）に局所的に再マッピングする。再マッピングオペレーションは、特定されたオペレーションに従って、再マッピングされた上位バイトの符号拡張またはゼロ拡張のオペレーションを含む。上位バイトは、レジスタファイル２４、リオーダバッファ２６、オペランドバス３０および３１、ならびに結果バス３２からの中位フィールドから常に読出される。上位バイトは、右寄せされたオペレーションを行う機能ユニットによって局所的に再マッピングされる。
【００５９】
結果バスドライバ９３は利用可能な４１ビットの結果バス上に結果データを駆動し、リザベーションステーションデータにある対応するエントリと、オペランドタグＦＩＦＯと、宛先タグおよびオペコードＦＩＦＯとはクリアされる。結果バスドライバ９３は、利用可能な結果バスに関連する結果タグバス上に、宛先タグＦＩＦＯからの宛先タグを駆動する。宛先タグに加えて、結果バスドライバ９３は、結果バス上に、たとえば通常有効および例外フラグを含む状態指示信号をセットする。
【００６０】
Ａオペランド転送回路９０およびＢオペランド転送回路９２は、ＦＩＦＯ５１内でＲＯＰの実行を遅延させているデータ依存性を満足させる結果を検知するために、結果タグバス３９をモニタする。結果タグは、結果が書込まれるリオーダバッファエントリを識別する。Ａオペランド転送回路９０は結果タグバス３９をモニタして、その上で運ばれる結果タグをＡタグＦＩＦＯ５３からのタグと比較する。このモニタオペレーションにおいて、転送回路は上位、中位および下位のオペランドタグの各々を結果タグＲＯＢエントリ識別子と比較する。３つのフィールドすべては同時にテストされるが、３つのフィールドの各々は他のフィールドとは無関係にテストされる。
【００６１】
各フィールドに対して、フィールド特定オペランドタグが結果タグと一致すると、データ依存性はそのフィールドに対しては解決される。フィールドのための結果データは対応するデータＦＩＦＯエントリに転送されてフィールドのビットに書込まれる。対応するタグＦＩＦＯエントリおよびフィールドのためのオペランドタグ有効ビットは、そのフィールドに関連するデータ依存性が解決されることを示すためにクリアされる。
【００６２】
ＲＯＰのすべてのソースオペランドのすべてのフィールドに対してデータ依存性が解決され、機能ユニットがビジーでなく、結果バスが利用可能になると、ＲＯＰは実行される。同様の態様で、Ｂオペランド転送回路９２は、結果タグバス３９をモニタして、その上で運ばれる結果タグをＢタグＦＩＦＯ５６からのタグと比較する。データがリザベーションステーション４４に転送される際は一貫して正しい位置に存在するよう、結果バスドライバ９３は結果バス上に、各フィールドが適当に位置される状態で結果を常に駆動する。
【００６３】
図１６を参照すると、ロード／ストア機能ユニット８０は、ＬＯＡＤおよびＳＴＯＲＥ命令を実行し、データキャッシュ８６と相互作用する。ロード／ストア機能ユニット８０は、デュアルポートのリザベーションステーション８５、４エントリの記憶バッファ８４、およびロード／ストア結果バスドライバ８７を含む。各ポートは、記憶バッファ８４およびデータキャッシュ８６に、４０のデータビットおよび好適な数のアドレスビットを含むチャネルによって接続される。リザベーションステーション８５は、マルチプレクサ８１と、ロード／ストア制御装置８３と、マージ回路９１と、４つまでのＲＯＰを待ち行列に入れるためのＦＩＦＯ８２とを含む。
【００６４】
マルチプレクサ８１は、ＡおよびＢオペランドバス３０および３１、ならびにＡおよびＢオペランドタグバス４８および４９に接続される４：１マルチプレクサを含む。リザベーションステーション８５の各ＦＩＦＯエントリは、ロードまたは記憶オペレーションを実行するのに必要なすべての情報フィールドを保持する。１つのプロセッサのクロックサイクルにおいては、２つまでのＲＯＰが発行され、２つまでのＦＩＦＯエントリが回収される。ロード／ストアリザベーションステーション８５は、その入力で、４つのＡおよびＢオペランドバス３０および３１と、４つのＡおよびＢオペランドタグバス４８および４９と、５つの結果バス３２と、４つの宛先タグバス４０と、４つのオペコード／型バス５０とに接続される。リザベーションステーション８５は、データキャッシュ８６のポートＡおよびＢのデータ部分にさらに接続される。リザベーションステーション８５は、記憶バッファ８４に、ＡおよびＢポートリザベーションステーションデータバスＲＳＤＡＴＡ  ＡおよびＲＳＤＡＴＡ  Ｂをそれぞれ用いて、かつＡおよびＢポートリザベーションステーションアドレスバスＲＳＡＤＤＲ  ＡおよびＲＳＡＤＤＲ  Ｂをそれぞれ用いて結合され、それらはデータキャッシュ８６のポートＡおよびＢのアドレスラインにさらに接続される。リザベーションステーション８５は、制御装置８３に、リザベーションステーションロードバスＲＳＬＯＡＤとリザベーションステーションシフトバスＲＳＨＩＦＴとを用いて接続される。記憶バッファ８４は、ロード／ストア結果バスドライバ８７とアドレス／データバス１１とロード／ストア制御装置８３とに、記憶バッファロードバスＳＢＬＯＡＤと記憶バッファシフトバスＳＢＳＨＩＦＴとを用いて接続される。リザベーションステーション８５および記憶バッファ８４との接続に加えて、ロード／ストア制御装置８３は、データキャッシュ８６およびリオーダバッファ２６に接続される。記憶バッファ８４への接続に加えて、ロード／ストア結果バスドライバ８７は、データキャッシュ８６と５つの結果バス３２と５つの結果タグバス３９とに接続する。
【００６５】
データキャッシュ８６は、１つのクロックサイクルにつき２つのオペレーションをサポートする、リニアアドレス指定された、４ウェイインタリーブの、８Ｋバイトの４ウェイセットアソシアティブキャッシュである。データキャッシュ８６は１２８の１６バイトエントリとして配列される。各１６バイトエントリは、４つの個別にアドレス指定される３２ビットのバンクの１ラインに記憶される。個別にアドレス指定可能なバンクによって、データキャッシュ８６は、デュアルポートの場合に認められるオーバーヘッドを回避しながら、２つの同時ロードオペレーションのような２つのＲＯＰによって同時並列でアクセスされることが可能となる。
【００６６】
ロードオペレーションはデータキャッシュ８６からデータを読出す。ロードオペレーション中、リザベーションステーション８５はデータキャッシュ８６にアドレスを供給する。アドレスがキャッシュヒットを発生すると、データキャッシュ８６は、リザベーションステーション８５に、データキャッシュ８６の記憶アレイ（図示せず）の対応するバンクおよびブロックに記憶されたデータを与える。倍長語はデータキャッシュ８６からロード／ストア結果バスドライバ８７へ転送される。ロード／ストア命令オペコードの上位２ビットは、生じさせられるべき結果のサイズを特定する。結果の型は、倍長語、語、上位バイトまたは下位バイトである。使用されないビットはゼロにセットされる。上位バイトの場合、ＲＯＰを実行することによって生じた結果は、結果バス３２上にロード／ストア結果バスドライバ８７によって駆動される前に、中位ビットフィールドに再マッピングされる。上位バイトは常にオペランドの中位ビットフィールドから読出される。ロード／ストア結果バスドライバ８７は、倍長語読出オペレーションによって読出される、データの使用されない部分をマスクする。ＡＨＢＹＴＥ信号がセットされると、ロード／ストア結果バスドライバ８７は下位フィールドデータビット〈７：０〉を中位フィールドビット〈１５：８〉に再マッピングする。バスドライバ８７は次いで結果バス３２のうちの１つに結果を駆動する。アドレスがデータキャッシュ８６にポートＡを介して供給された場合には、データはリザベーションステーション回路８５にポートＡを介して与えられる。そうではなく、アドレスがデータキャッシュ８６にポートＢを用いて与えられた場合には、データはリザベーションステーション８５にポートＢを用いて通信される。ポートＡおよびＢを同時に用いて、アドレスはデータキャッシュ８６に通信され、データはデータキャッシュ８６から受取られる。ロード／ストア結果バスドライバ８７は結果バス３２のうちの１つに結果を駆動する際、結果タグバス３９のうちの対応する１つをさらに駆動する。
【００６７】
記憶オペレーションは、データキャッシュ８６への倍長語ライトバックが後に続く、データキャッシュ８６からの倍長語読出オペレーションである。記憶オペレーション中、アドレス指定された倍長語はまずデータキャッシュ８６から記憶バッファ８４へ転送される。次いで、データがリザベーションステーション８５から記憶バッファ８４へ通信される。記憶データが３２ビットかまたはそれより大きいビット幅である場合には、データはデータキャッシュ８６から読出された倍長語を置き換える。記憶データが３２ビット幅より小さい場合には、マージ回路９１が、データキャッシュ８６から読出された倍長語に、適用可能なデータフィールドを合わせる。記憶データの一部分が利用可能でない場合には、オペランドタグで、利用不可なデータを置き換える。このデータとタグとの混合は、失われているデータのすべてのビットフィールドが結果バスから転送されるまで、記憶バッファに保持される。すべてのフィールドが利用可能になるまで部分的なデータを記憶バッファ８４に保持することによって、完全な倍長語のみがキャッシュ８６に書込まれる。個々の８ビットのバイトの書込は不要である。合わせられたデータは次いで、データキャッシュ８６にロード／ストア結果バスドライバ８７によって通信し返される。幅が３２ビットより大きい記憶データのロードおよびストアオペレーションは、データキャッシュ８６に複数のアクセスを実行し、データがデータキャッシュ８６に書込まれて戻される前に記憶バッファ８４にデータを構成する。記憶オペレーションが解放されると、データおよび対応するアドレスはアドレス／データバス１１を用いてデータキャッシュ８６へ通信される。
【００６８】
好適なロード／ストア機能ユニットは、１９９３年１０月２９日出願の米国特許出願連続番号０８／１４６，３７６（ウィリアム・エム・ジョンソンら、「高性能ロード／ストア機能ユニットおよびデータキャッシュ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｌｏａｄ／Ｓｔｏｒｅ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ  ａｎｄ  Ｄａｔａ  Ｃａｃｈｅ）」）に開示され、その全体を引用によりここに援用する。
【００６９】
この発明は特定の実施例を参照して記載されてきたが、実施例は例示的なものであって、発明の範囲はそのように限定されるものではないことが理解される。記載される実施例には多くの変形、修正、追加および改良が可能である。たとえば、この発明は、ｘ８６アーキテクチャプロセッサまたはＣＩＳＣアーキテクチャプロセッサ以外のプロセッサにおいて実現されてもよい。さらに、データ経路のビット幅は３２ビットまたは４１ビットとは異なってもよい。データ幅は３つのフィールドよりも多いまたは少ないフィールドに区分されてもよい。様々な構造およびバスのビット数は例示的なものであり、変更されてもよい。レジスタファイルおよびリオーダバッファのサイズ、オペランドバスおよびオペランドタグバスの数、結果バスの数、ライトバックバスの数、ならびに機能ユニットの型および数は例示的なものであり、変更されてもよい。この発明の利点は、スーパースカラの実現例におけるほうがより大きなものではあるが、この発明はスーパースカラプロセッサまたはパイプラインプロセッサのいずれでもないプロセッサにおいて実施されてもよい。これらのおよび他の変形、修正、追加および改良は、前掲の特許請求の範囲に定義されるような発明の範囲内に入るであろう。
【図面の簡単な説明】
【図１】可変幅のオペランドの依存性チェックおよび転送を実現するプロセッサのアーキテクチャレベルのブロック図である。
【図２】図１のプロセッサによって行なわれるオペレーションに用いられるオペランド内の複数のビットフィールドを示す表の図である。
【図３】図１のプロセッサによって行なわれるオペレーションに用いられるオペランド内の複数のビットフィールドを示す表の図である。
【図４】図１のプロセッサによって行なわれるオペレーションに用いられるオペランド内の複数のビットフィールドを示す表の図である。
【図５】図１のプロセッサによって行なわれるオペレーションに用いられるオペランド内の複数のビットフィールドを示す表の図である。
【図６】図１のプロセッサによって行なわれるオペレーションに用いられるオペランド内の複数のビットフィールドを示す表の図である。
【図７】レジスタファイルのレジスタを選択するポインタの制御ビットを示す図である。
【図８】図１のプロセッサ内のレジスタファイルのアーキテクチャレベルのブロック図である。
【図９】図８に示されるレジスタファイル内のメモリフォーマットの模式図である。
【図１０】図１のプロセッサ内のリオーダバッファのアーキテクチャレベルのブロック図である。
【図１１】図１０のリオーダバッファ内のメモリフォーマットの模式図である。
【図１２】レジスタリネーミングの単純な実現例を用いた、命令の例示的シーケンスのディスパッチを示す表の図である。
【図１３】レジスタリネーミングの好ましい実現例を用いた、命令の例示的シーケンスのディスパッチを示す表の図である。
【図１４】包括的な機能ユニットの入力および出力処理を示す、そのようなユニットのアーキテクチャレベルのブロック図である。
【図１５】図１４の機能ユニットのリザベーションステーション内のＦＩＦＯフォーマットの模式図である。
【図１６】図１のプロセッサ内のロード／ストア機能ユニットのアーキテクチャレベルのブロック図である。
【符号の説明】
１８  命令デコーダ
２０  分岐ユニット
２１  整数機能ユニット
２２  浮動小数点機能ユニット
２６  リオーダバッファ
３０  オペランドバス
３１  オペランドバス
３２  結果バス
３９  結果タグバス
４４  リザベーションステーション
４８  オペランドタグバス
４９  オペランドタグバス
８０  ロード／ストア機能ユニット
【図１】
0003618822.tif 000002
【図２】
0003618822.tif 000003
【図３】
0003618822.tif 000004
【図４】
0003618822.tif 000005
【図５】
0003618822.tif 000006
【図６】
0003618822.tif 000007
【図７】
0003618822.tif 000008
【図８】
0003618822.tif 000009
【図９】
0003618822.tif 000010
【図１０】
0003618822.tif 000011
【図１１】
0003618822.tif 000012
【図１２】
0003618822.tif 000013
【図１３】
0003618822.tif 000014
【図１４】
0003618822.tif 000015
【図１５】
0003618822.tif 000016
【図１６】
0003618822.tif 000017