(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサのための浮動小数点ユニットであって、
第１の浮動小数点レジスタ値を含む複数の浮動小数点レジスタ値をストアするよう構成されるレジスタフィールドと、前記第１の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示す第１のタグ値を含む複数のタグ値をストアするよう構成されるタグフィールドとを含むレジスタストレージデバイスを含み、前記複数のタグ値のうちの他のものは、前記複数の浮動小数点レジスタ値のうちの他のものと対応し、前記対応の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示し、特殊浮動小数点数のタイプには０、無限大および非正規化された数が含まれ、前記浮動小数点ユニットはさらに、
メモリからロードされる浮動小数点数をストアするよう構成されるメモリオペランドキューと、
前記メモリオペランドキューに結合されるタグ生成器とを含み、前記タグ生成器は、メモリからロードされる前記浮動小数点数が特殊浮動小数点数であるかどうかを示す第２のタグ値を生成するよう構成されており、前記浮動小数点ユニットはさらに、
前記レジスタストレージデバイスおよび前記タグ生成器に結合される浮動小数点コアを含み、前記浮動小数点コアは、前記レジスタストレージデバイスまたは前記メモリオペランドキューから浮動小数点オペランドを受け、かつ浮動小数点結果を出力するよう構成されており、前記浮動小数点コアは、前記浮動小数点オペランドの前記第１または第２のタグ値を用いて前記浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するよう構成されており、前記浮動小数点コアは、前記浮動小数点結果に対して前記浮動小数点結果が特殊浮動小数点数であるかどうかを示す第３のタグ値を生成するよう構成されており、
前記第１のタグ値、前記第２のタグ値、および前記第３のタグ値の各々は、特殊浮動小数点数の前記タイプの各々に対して１ビットを含む、浮動小数点ユニット。
【請求項２】
前記浮動小数点コアは、特殊浮動小数点数である浮動小数点オペランドに特殊な規則を適用するよう構成され、
前記特殊な規則は浮動小数点算術演算を行なう必要を回避する、請求項１に記載の浮動小数点ユニット。
【請求項３】
前記レジスタストレージデバイスに結合されるアセンブリキューをさらに含み、前記アセンブリキューは、浮動小数点命令を受けかつ対応する浮動小数点数がメモリからロードされるまで前記浮動小数点命令をストアするよう構成される、請求項１に記載の浮動小数点ユニット。
【請求項４】
前記アセンブリキューは前記メモリオペランドキューを含み、前記メモリオペランドキューはメモリからロードされた前記対応する浮動小数点数をストアするよう構成される、請求項３に記載の浮動小数点ユニット。
【請求項５】
特殊浮動小数点数に対して浮動小数点演算を行なうための方法であって、
レジスタストレージデバイスが、第１の浮動小数点レジスタ値を含む複数の浮動小数点レジスタ値と、前記第１の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示す第１のタグ値を含む複数のタグ値をストアするステップと、前記複数のタグ値のうちの他のものは、前記複数の浮動小数点レジスタ値のうちの他のものと対応し、前記対応の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示し、特殊浮動小数点数のタイプには０、無限大および非正規化された数が含まれ、前記第１のタグ値は特殊浮動小数点数の前記タイプの各々に対して１ビットを含み、前記方法は、さらに、
浮動小数点コアが、浮動小数点オペランドとともにレジスタストレージデバイスにストアされる第１のタグ値を調べて前記浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するステップと、
浮動小数点コアが、前記浮動小数点オペランドが特殊浮動小数点数ではない場合に浮動小数点演算を行なうステップと、
浮動小数点コアが、前記浮動小数点オペランドが特殊浮動小数点数である場合に特殊な規則が前記浮動小数点オペランドに当てはまるかどうかを判定するステップと、
浮動小数点コアが、前記特殊な規則が当てはまる場合に前記特殊な規則を適用するステップと、
浮動小数点コアが、前記浮動小数点演算の結果に対して第２のタグ値を生成するステップとを含み、前記第２のタグ値は特殊浮動小数点数の前記タイプの各々に対して１ビットを含み、
前記特殊な規則を適用するステップは浮動小数点算術演算を行なう必要を回避するステップを含む、方法。
【請求項６】
メモリが、浮動小数点オペランドをメモリオペランドキューにロードするステップと、
前記メモリオペランドキューに結合されるタグ生成器が、メモリからロードされた前記浮動小数点オペランドに対して第３のタグ値を生成するステップと、
浮動小数点コアが、メモリからロードされた前記浮動小数点オペランドに対して生成される前記第３のタグ値を調べて、前記浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するステップとをさらに含む、請求項５に記載の特殊浮動小数点数に対して浮動小数点演算を行なうための方法。
【請求項７】
前記レジスタストレージデバイスに結合されるアセンブリキューが、浮動小数点命令を受けるステップをさらに含み、前記浮動小数点命令は演算コードおよびオペランド識別子を含む、請求項５に記載の特殊浮動小数点数に対して浮動小数点演算を行なうための方法。
【請求項８】
マイクロプロセッサであって、
命令キャッシュと、
前記命令キャッシュに結合される命令アライメントユニットと、
前記命令アライメントユニットに結合されるデコードユニットと、
前記デコードユニットに結合される機能ユニットと、
前記命令キャッシュおよび前記デコードユニットに結合されるマイクロコードユニットと、
前記マイクロコードユニットに結合される浮動小数点ユニットとを含み、前記浮動小数点ユニットは、
第１の浮動小数点レジスタ値を含む複数の浮動小数点レジスタ値をストアするよう構成されるレジスタフィールドと、前記第１の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示す第１のタグ値を含む複数のタグ値をストアするよう構成されるタグフィールドとを含むレジスタストレージデバイスを含み、前記複数のタグ値のうちの他のものは、前記複数の浮動小数点レジスタ値のうちの他のものと対応し、前記対応の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示し、特殊浮動小数点数のタイプには０、無限大および非正規化された数が含まれ、前記浮動小数点ユニットはさらに、
メモリからロードされる浮動小数点数をストアするよう構成されるメモリオペランドキューと、
前記メモリオペランドキューに結合されるタグ生成器とを含み、前記タグ生成器は、メモリからロードされる前記浮動小数点数が特殊浮動小数点数であるかどうかを示す第２のタグ値を生成するよう構成されており、前記浮動小数点ユニットはさらに、
前記レジスタストレージデバイスおよび前記タグ生成器に結合される浮動小数点コアを含み、前記浮動小数点コアは、前記レジスタストレージデバイスまたは前記メモリオペランドキューから浮動小数点オペランドを受け、かつ浮動小数点結果を出力するよう構成されており、前記浮動小数点コアは、前記浮動小数点オペランドの前記第１または第２のタグ値を調べることによって前記浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するよう構成されており、前記浮動小数点コアは、前記浮動小数点結果に対して前記浮動小数点結果が特殊浮動小数点数であるかどうかを示す第３のタグ値を生成するよう構成されており、
前記第１のタグ値、前記第２のタグ値、および前記第３のタグ値の各々は、特殊浮動小数点数の前記タイプの各々に対して１ビットを含む、マイクロプロセッサ。
【請求項９】
前記浮動小数点コアは特殊浮動小数点数である浮動小数点オペランドに特殊な規則を適用するよう構成され、
前記特殊な規則は浮動小数点算術演算を行なう必要を回避する、請求項８に記載のマイクロプロセッサ。
【請求項１０】
コンピュータシステムであって、
マイクロプロセッサを含み、前記マイクロプロセッサは、
命令キャッシュと、
前記命令キャッシュに結合される命令アライメントユニットと、
前記命令アライメントユニットに結合されるデコードユニットと、
前記デコードユニットに結合される機能ユニットと、
前記命令キャッシュおよび前記デコードユニットに結合されるマイクロコードユニットと、
前記マイクロコードユニットに結合される浮動小数点ユニットとを含み、前記浮動小数点ユニットは、
第１の浮動小数点レジスタ値を含む複数の浮動小数点レジスタ値をストアするよう構成されるレジスタフィールドと、前記第１の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示す第１のタグ値を含む複数のタグ値をストアするよう構成されるタグフィールドとを含むレジスタストレージデバイスを含み、前記複数のタグ値のうちの他のものは、前記複数の浮動小数点レジスタ値のうちの他のものと対応し、前記対応の浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示し、特殊浮動小数点数のタイプには０、無限大および非正規化された数が含まれ、前記浮動小数点ユニットはさらに、
メモリからロードされる浮動小数点数をストアするよう構成されるメモリオペランドキューと、
前記メモリオペランドキューに結合されるタグ生成器とを含み、前記タグ生成器は、メモリからロードされる前記浮動小数点数が特殊浮動小数点数であるかどうかを示す第２のタグ値を生成するよう構成されており、前記浮動小数点ユニットはさらに、
前記レジスタストレージデバイスおよび前記タグ生成器に結合される浮動小数点コアを含み、前記浮動小数点コアは、前記レジスタストレージデバイスまたは前記メモリオペランドキューから浮動小数点オペランドを受け、かつ浮動小数点結果を出力するよう構成されており、前記浮動小数点コアは、前記浮動小数点オペランドの前記第１または第２のタグ値を調べることによって前記浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するよう構成されており、前記浮動小数点コアは、前記浮動小数点結果に対して前記浮動小数点結果が特殊浮動小数点数であるかどうかを示す第３のタグ値を生成するよう構成されており、
前記第１のタグ値、前記第２のタグ値、および前記第３のタグ値の各々は、特殊浮動小数点数の前記タイプの各々に対して１ビットを含み、前記コンピュータシステムはさらに、
前記コンピュータシステムと、前記コンピュータシステムの外部の他のデバイスとの間にインターフェースをもたらす入力／出力（Ｉ／Ｏ）デバイスを含む、コンピュータシステム。
【請求項１１】
前記Ｉ／Ｏデバイスはモデムを含む、請求項１０に記載のコンピュータシステム。
【請求項１２】
前記Ｉ／Ｏデバイスはサウンドカードを含む、請求項１０に記載のコンピュータシステム。
【発明の詳細な説明】
発明の背景
１．発明の分野
この発明はマイクロプロセッサの分野に関し、より特定的にはマイクロプロセッサの浮動小数点ユニット内で浮動小数点値をタグ付けすることに関する。
２．関連技術の説明
ＷＯ−Ａ−８５／０３１４８では、浮動小数点条件コードを生成するための方法および装置が開示される。説明されるプロセッサは浮動小数点データに対して浮動小数点演算を行なう。タグ付けマイクロシーケンスを実行して発信元オペランドおよび行先オペランドをタグ付けし、タグ値は浮動小数点オペランドが特殊浮動小数点数であるかどうかを示す。タグ情報は特殊浮動小数点数の早期検出および特定の数値演算に用いてもよく、その結果はデフォルト値となる。
「浮動小数点データタイプタグ」（“Floating Point Data Type Tag，”IBM Technical Disclosure Bulletin，vol.39，no.7，1996年7月，p.265）では、浮動小数点データタイプタグを使用してデータタイプ判定に必要となるハードウェアの量を低減することが開示される。
スーパースカラマイクロプロセッサはクロックサイクルごとに複数の命令を実行し、かつその設計と一致した可能な限り短いクロックサイクルを選択することによって高い性能を達成する。ここで用いる術語「クロック−サイクル」とは、マイクロプロセッサ内の命令処理パイプラインのさまざまなステージに与えられる時間の間隔を指していう。ストレージデバイス（たとえばレジスタおよびアレイ）はその値をクロックサイクルに従ってキャプチャする。たとえば、ストレージデバイスはクロックサイクルを規定するクロック信号の立上がりまたは立下がりエッジに従って値をキャプチャする。ストレージデバイスはそこでその値を、それぞれクロック信号のその後の立上がりまたは立下がりエッジまでストアする。ここで術語「命令処理パイプライン」とは命令をパイプライン化された態様で処理するのに用いられる論理回路を指して用いる。一般的に言えば、パイプラインはあるタスクの一部分が実行されるいくつかのステージを含む。異なる項目に対して異なるステージが同時に作用して、これによって全体のスループットが増加できる。この命令処理パイプラインは、命令処理の部分が実行されるどんな数のステージに分割してもよいが、命令処理は一般的に、命令をフェッチすることと、命令をデコードすることと、命令を実行することと、実行結果を命令により識別される行先にストアすることとを含んでいる。
マイクロプロセッサはさまざまな命令に応答してさまざまなデータタイプに対して演算するよう構成される。たとえば、ある命令はインテジャーデータタイプに対する演算を行なうよう規定される。インテジャーを表わすビットが数の各桁を形成する。２進小数点はこれら桁の右側にあると仮定される（すなわちインテジャーは整数である）。マイクロプロセッサにおいてしばしば用いられる別のデータタイプは浮動小数点データタイプである。浮動小数点数は仮数および指数で表わされる。浮動小数点数の基数を指数回だけ累乗し仮数で乗算して、表わされる数が導かれる。どんな基数を用いてもよいが、基数２が数多くのマイクロプロセッサで一般的である。仮数は数の上位桁を表わすのに用いられるいくつかのビットを含む。典型的に、仮数は１つのビットを２進小数点の左側に含み、残りのビットを２進小数点の右側に含む。２進小数点の左側のビットは明示的にはストアされておらず、代わりに数のフォーマット内で暗に決められている。一般的には、浮動小数点数の指数および仮数がストアされる。浮動小数点数およびこれに対して実行される演算に関するさらなる情報は米国電気電子学会（ＩＥＥＥ）規格７５４から得られる。
浮動小数点数は整数により表わされるよりもかなり大きい範囲の数を表わすことができる。たとえば、３２ビット符号付整数は２の補数形式を用いる際には２31−１と−２31との間の整数を表わすことができる。ＩＥＥＥ規格７５４によって規定される単精度の浮動小数点数は３２ビット（１ビット符号、８ビットのバイアスされた指数および２４ビットの仮数）を含み、正の数および負の数の両方において２-126から２127までの範囲を有する。倍精度（６４ビット）浮動小数点値は正の数および負の数の両方において２-1022から２1023までの範囲を有する。最後に、拡張精度（８０ビット）浮動小数点数は正の数および負の数の両方において２-16382から２16383までの範囲を有する。
浮動小数点データタイプを用いて利用可能となる拡張された範囲は、数の大きさに大きな変動が予想される数多くのタイプの計算および、中間結果の大きさが入力値および出力値から大きく変動し得る計算集中型のタスクにおいて有利である。さらに、浮動小数点データタイプでは整数データタイプよりも高い精度が利用可能となり得る。
いくつかの特殊な浮動小数点データの表示が定義される。これらの特殊な浮動小数点データ表示は「特殊浮動小数点数」と称される。特殊浮動小数点数には、０のための特殊エンコーディング、＋および−の無限大、非正規化された数および非数（ＮａＮ）が含まれる。特定のエンコーディングが各々の特殊浮動小数点数に割当てられる。浮動小数点数が特殊浮動小数点数であるかどうかを判定するには、浮動小数点数をデコードして仮数と指数との組合せが特殊エンコーディングを表わしているかどうかを判定する必要がある。
たとえば、仮数と指数との組合せでは無限大の値を規定できないが、無限大を表わすのに特殊エンコーディングが規定される。０は、０の仮数とどのような指数とによっても表わすことができるが、この表示では０を表わすのに数多くのエンコーディングを用いることになる。たとえば、８ビットの指数を有する単精度数では０を表わすのに６４通りの異なるエンコーディングを有し得る。可能なエンコーディングを最大利用するために、０を表わすのに１つの特殊エンコーディングが規定される。ＮａＮは通常の数ではない数を表わすエンコーディングである。たとえば、負の数の平方根はＮａＮである。少なくとも１つの特殊エンコーディングがＮａＮを表わすのに規定される。浮動小数点数の別の特殊エンコーディングは非正規化される数に対するものである。上述のとおり、仮数は典型的には２進小数点の左側に１ビットを含み、そのビットは暗に１であるとされる。数が非正規化されると、２進小数点の左側のビットは１ではなく０である。非正規化された数は、０および無限大に対するエンコーディングのように１つの特定のエンコーディングを有さない。非正規化された数は一連のエンコーディングを有する。たとえば、指数がすべて０であり仮数が非正規化された数の数値を表わすエンコーディングを用いることができる。非正規化された数は正規化された最小数よりも小さい浮動小数点値を表わすのに用いられる。たとえば、単精度の浮動小数点数では、１×２-126より小さい数を表わすのに非正規化された数を用いることができる。
特殊浮動小数点数で浮動小数点演算を行なうための特殊な規則が定義されている。これらの特殊な規則は、特殊浮動小数点数にかかわる浮動小数点演算のための特定の結果を規定し得る。たとえば、オペランドがＮａＮであるどんな演算もその結果は同様にＮａＮである。１を無限大で除算したものは０であり、１を０で除算したものは無限大である。特殊浮動小数点数で算術演算を行なうためのさらなる規則はＩＥＥＥ規格７５４に規定される。特殊浮動小数点数を伴う浮動小数点算術演算を行なうために特殊な規則が存在するため、浮動小数点ユニットが浮動小数点結果を返す前に各浮動小数点オペランドをデコードする必要がある。残念なことに、各浮動小数点オペランドをデコードするというさらなるステップのため浮動小数点算術演算ユニットの動作が遅くなる。そこで、特殊浮動小数点数を素早く識別する方法が望まれる。
発明の概要
上に説明した問題は大部分がこの発明による浮動小数点ユニットにより解決される。タグ値が各浮動小数点数に付加される。このタグ値は特殊浮動小数点数を識別する。さらなるビットがタグ値をストアするためのレジスタファイルまたはレジスタスタックに付加される。タグ生成回路は、浮動小数点数がメモリからロードされる際にタグ値を生成する。浮動小数点ユニットはタグ値を調べることによって浮動小数点数が特殊浮動小数点数であるかどうかを素早く判定できる。タグ値により、浮動小数点数が浮動小数点演算に用いられるたびにその浮動小数点数をデコードする必要がなくなる。たとえば、レジスタ値とともにストアされるタグ値は対応するレジスタ値が特殊浮動小数点数であるかどうかを識別する。さらに、タグ値を用いて浮動小数点演算を行なう必要をなくすことができる。たとえば、浮動小数点除算演算の除数のタグ値が０である場合、浮動小数点除算演算の商は定義によれば無限大である。このため、実際の浮動小数点演算を行なう必要がない。この発明では、浮動小数点数をデコードすることなく特殊浮動小数点数を判定することが可能となり、かつ浮動小数点ユニットが特殊浮動小数点数がかかわる浮動小数点演算の実行をすることなく済ませることが可能となるという効果がある。
概して、この発明は、レジスタストレージデバイス、メモリオペランドキュー、タグジェネレータ回路および浮動小数点コアを含むマイクロプロセッサのための浮動小数点ユニットを想定する。レジスタストレージデバイスは、浮動小数点レジスタ値をストアするよう構成されるレジスタフィールドと、浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示すタグ値をストアするよう構成されるタグフィールドとを含む。メモリオペランドキューはメモリからロードされる浮動小数点数をストアするよう構成される。タグ生成回路はメモリオペランドキューに結合される。タグ生成回路は、メモリからロードされた浮動小数点数が特殊浮動小数点数であるかどうかを示すタグ値を生成するよう構成される。浮動小数点コアはレジスタストレージデバイスおよびタグ生成回路に結合される。浮動小数点コアは、レジスタストレージデバイスまたはメモリオペランドキューから浮動小数点オペランドを受け、浮動小数点結果を出力するよう構成される。浮動小数点コアは、浮動小数点オペランドのタグ値を用いて浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するよう構成される。
この発明はさらに、特殊浮動小数点数に対して浮動小数点演算を行なうための方法を想定し、その方法は、浮動小数点オペランドとともにタグ値をストアするステップを含み、タグ値は浮動小数点オペランドが特殊浮動小数点数であるかどうかを示し、方法はさらに、浮動小数点オペランドとともにストアされるタグ値を調べて浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するステップと、浮動小数点オペランドが特殊浮動小数点数ではない場合に浮動小数点演算を行なうステップと、浮動小数点オペランドが特殊浮動小数点数である場合に特殊な規則が浮動小数点オペランドに当てはまるかどうかを判定するステップと、特殊な規則が当てはまる場合にその特殊な規則を適用するステップとを含む。
この発明はさらに、命令キャッシュと、命令キャッシュに結合される命令アライメントユニットと、命令アライメントユニットに結合されるデコードユニットと、デコードユニット結合される機能ユニットと、命令キャッシュおよびデコードユニットに結合されるマイクロコードユニットと、マイクロコードユニットに結合される浮動小数点ユニットとを含むマイクロプロセッサを想定する。浮動小数点ユニットはレジスタストレージデバイス、メモリオペランドキュー、タグジェネレータ回路および浮動小数点コアを含む。レジスタストレージデバイスは、浮動小数点レジスタ値をストアするよう構成されるレジスタフィールドと、浮動小数点レジスタ値が特殊浮動小数点数であるかどうかを示すタグ値をストアするよう構成されるタグフィールドとを含む。メモリオペランドキューがメモリからロードされる浮動小数点数をストアするよう構成される。タグ生成回路はメモリオペランドキューに結合される。タグ生成回路は、メモリからロードされる浮動小数点数が特殊浮動小数点数であるかどうかを示すタグ値を生成するよう構成される。浮動小数点コアはレジスタストレージデバイスおよびタグ生成回路に結合される。浮動小数点コアは、レジスタストレージデバイスまたはメモリオペランドキューから浮動小数点オペランドを受け、かつ浮動小数点結果を出力するよう構成される。浮動小数点コアは、浮動小数点オペランドのタグ値を用いて浮動小数点オペランドが特殊浮動小数点数であるかどうかを判定するように構成される。
【図面の簡単な説明】
この発明の他の目的および利点は以下の詳細な説明を添付の図面を参照して読むことから明らかになるであろう。
図１は、スーパースカラマイクロプロセッサの一実施例のブロック図である。
図２は、図１に示される１対のデコードユニットの一実施例のブロック図である。
図３は、マイクロプロセッサの一実施例による、図１に示される浮動小数点ユニット、リオーダバッファ、ロード／ストアユニットおよびＭＲＯＭユニットの、間の相互接続を強調した、ブロック図である。
図４は、図３に示される浮動小数点ユニットの一実施例のブロック図である。
図５は、タグフィールドの一実施例の図である。
図６は、特殊浮動小数点数の取扱いを示す浮動小数点ユニットの一実施例の動作のフローチャートである。
図７は、図４に示される浮動小数点ユニットの一実施例のパイプライン図である。
図８は、図１に示されるマイクロプロセッサを含むコンピュータシステムの一実施例のブロック図である。
この発明はさまざまな修正および代替の形態が可能であるが、その特定の実施例を図面において例によって示し、ここに詳しく説明する。しかしながら、図面およびその詳細な説明は開示される特定の形態にこの発明を限定することを意図したものではなく、逆に、その意図は添付の請求の範囲により規定されるこの発明の精神および範囲内に含まれるすべての修正、均等物および代替例を網羅することであるのを理解されたい。
発明の詳細な説明
図１を参照して、マイクロプロセッサ１０の一実施例のブロック図が示される。マイクロプロセッサ１０は、プリフェッチ／プリデコードユニット１２、分岐予測ユニット１４、命令キャッシュ１６、命令アライメントユニット１８、複数のデコードユニット２０Ａ−２０Ｃ、複数のリザベーションステーション２２Ａ−２２Ｃ、複数の機能ユニット２４Ａ−２４Ｃ、ロード／ストアユニット２６、データキャッシュ２８、レジスタファイル３０、リオーダバッファ３２、ＭＲＯＭユニット３４および浮動小数点ユニット（ＦＰＵ）３６を含む。ここで言及した特定の参照番号の後に文字が続いている要素はその参照番号のみによって集合的に言及される。たとえば、デコードユニット２０Ａ−２０Ｃは集合的にデコードユニット２０として言及する。
プリフェッチ／プリデコードユニット１２はメインメモリサブシステム（図示せず）から命令を受けるよう結合されており、さらに命令キャッシュ１６および分岐予測ユニット１４に結合される。同様に、分岐予測ユニット１４は命令キャッシュ１６に結合される。さらに、分岐予測ユニット１４はデコードユニット２０および機能ユニット２４に結合される。命令キャッシュ１６はさらにＭＲＯＭユニット３４および命令アライメントユニット１８に結合される。命令アライメントユニット１８は今度はデコードユニット２０に結合される。各デコードユニット２０Ａ−２０Ｃはロード／ストアユニット２６およびそれぞれ対応のリザベーションステーション２２Ａ−２２Ｃに結合される。リザベーションステーション２２Ａ−２２Ｃはさらにそれぞれ対応の機能ユニット２４Ａ−２４Ｃに結合される。また、デコードユニット２０およびリザベーションステーション２２はレジスタファイル３０およびリオーダバッファ３２に結合される。機能ユニット２４はまたロード／ストアユニット２６、レジスタファイル３０およびリオーダバッファ３２に結合される。データキャッシュ２８はロード／ストアユニット２６およびメインメモリサブシステムに結合される。ＭＲＯＭユニット３４はデコードユニット２０およびＦＰＵ３６に結合される。最後に、ＦＰＵ３６はロード／ストアユニット２６およびリオーダバッファ３２に結合される。
マイクロプロセッサ１０の一実施例によれば、浮動小数点命令は命令キャッシュ１６における命令フェッチおよびディスパッチの目的のためＭＲＯＭ（すなわちマイクロコード）命令に分類される。浮動小数点命令はＭＲＯＭユニット３４に与えられる。ＭＲＯＭユニット３４は浮動小数点命令を、浮動小数点ユニット３６に送られる浮動小数点演算と、命令のためのメモリオペランドを取出すようロード／ストアユニット２６が実行するための１つ以上のロード／ストア演算とにパージングする。ここでは、命令の「メモリオペランド」とは（マイクロプロセッサ１０内のレジスタではなく）記憶場所にストアされているオペランドのことをいう。メモリオペランドは、１つまたは２つのレジスタの内容、命令の即値フィールドおよび命令の変位フィールドのうちの１つ以上を加えることによって形成されるアドレスを介して位置決めされる。
タグ値は浮動小数点レジスタにストアされるか、またはメモリから取出される各々の浮動小数点数に付加される。タグ値は対応の浮動小数点数が特殊浮動小数点数であるかどうかおよびどのタイプの特殊浮動小数点数であるかを識別する。浮動小数点演算を行なう前に、特殊浮動小数点数を識別するためにオペランドのタグ値を調べる。特殊浮動小数点数をオペランドとして含むいくつかの浮動小数点演算には特殊な規則が適用される。オペランドが特殊浮動小数点数でありかつ特殊な規則が当てはまる場合、浮動小数点ユニットは浮動小数点演算を行なうのではなくその特殊な規則を適用する。
命令キャッシュ１６は命令をストアするよう設けられる高速キャッシュメモリである。命令は命令キャッシュ１６からフェッチされ、デコードユニット２０にディスパッチされる。ある実施例では、命令キャッシュ１６は３２バイトライン（１バイトはバイナリ８ビットを含む）を有する４ウェイセットアソシアティブ構造に最大３２キロバイトの命令をストアするよう構成される。命令キャッシュ１６はさらにウェイ予測機構を用いて命令キャッシュへのアクセス時間を速めるようにしてもよい。命令の各ラインを識別するタグにアクセスしてタグをフェッチアドレスと比較することによってウェイを選択する代わりに、命令キャッシュ１６はアクセスされるウェイを予測する。このように、ウェイは命令ストレージにアクセスする前に選択される。命令キャッシュ１６のアクセス時間はダイレクトマッピングされたキャッシュと同様となるだろう。タグ比較が実行され、ウェイ予測が誤っている場合、正しい命令がフェッチされ誤った命令は破棄される。命令キャッシュ１６がフルアソシアティブ、セットアソシアティブ、またはダイレクトマッピング構成としても実現され得ることに注意されたい。
命令はメインメモリからフェッチされ、プリフェッチ／プリデコードユニット１２により命令キャッシュ１６にストアされる。命令はプリフェッチ方式に従って命令キャッシュ１６からその要求に先立って予めプリフェッチされていてもよい。プリフェッチ／プリデコードユニット１２はさまざまなプリフェッチ方式を用いることができる。プリフェッチ／プリデコードユニット１２が命令をメインメモリから命令キャッシュ１６に転送する際に、プリフェッチ／プリデコードユニット１２は命令の各バイトに対して３つのプリデコードビット、すなわちスタートビット、エンドビットおよび機能ビットを生成する。プリデコードビットは各命令の境界を示すタグを形成する。プリデコードタグはまた、所与の命令がデコードユニット２０によって直接デコードできるかどうか、または命令がＭＲＯＭユニット３４によって制御されるマイクロコードプロシジャを呼出すことによって実行されるかどうかなどのさらなる情報を伝えてもよい。これは以下にさらに詳しく説明する。さらに、プリフェッチ／プリデコードユニット１２は分岐命令を検出し、かつ分岐命令に対応する分岐予測情報を分岐予測ユニット１４にストアするよう構成されてもよい。
可変バイト長命令セットを用いるマイクロプロセッサ１０の一実施例のためのプリデコードタグのあるエンコーディングについて次に説明する。可変バイト長命令セットとは、異なった命令が異なった数のバイトを占めることがある命令セットである。マイクロプロセッサ１０の一実施例により用いられる例示的な可変バイト長命令セットはｘ８６命令セットである。
例示的なエンコーディングでは、所与のバイトが命令の先頭のバイトである場合、そのバイトのためのスタートビットがセットされる。そのバイトが命令の最後のバイトである場合、そのバイトのためのエンドビットがセットされる。デコードユニット２０によって直接デコードされ得る命令は「ファストパス」命令と呼ばれる。残りのｘ８６命令は一実施例によればＭＲＯＭ命令と呼ばれる。ファストパス命令では、機能ビットがその命令に含まれる各々のプレフィックスバイトに対してセットされ、他のバイトに対してはクリアされる。代わりに、ＭＲＯＭ命令では、機能ビットは各プレフィックスバイトに対してクリアされ、他のバイトに対してはセットされる。命令のタイプはエンドバイトに対応する機能ビットを調べることによって判定することができる。その機能ビットがクリアされていれば、その命令はファストパス命令である。逆に、その機能ビットがセットされていれば、その命令はＭＲＯＭ命令である。これにより、デコードユニット２０によって直接デコードされ得る命令において、命令の演算コードは命令の中の最初のクリアされた機能ビットと関連付けられたバイトとして探し出すことができる。たとえば、２つのプレフィックスバイト、Ｍｏｄ  Ｒ／Ｍバイトおよび即値バイトを含むファストパス命令は以下のようなスタートビット、エンドビットおよび機能ビットを有するはずである。
スタートビット  １００００
エンドビット    ００００１
機能ビット      １１０００
ある特定の実施例によれば、命令がスケール−インデックス−ベース（ＳＩＢ）バイトを含むことを早期識別することはＭＲＯＭユニット３４にとって有利である。このような実施例では、命令が演算コードバイトの後に少なくとも２つのバイトを含んでいる場合、Ｍｏｄ  Ｒ／Ｍバイトのための機能ビットはＳＩＢバイトの存在を示す。Ｍｏｄ  Ｒ／Ｍバイトのための機能ビットがセットされていればＳＩＢバイトが存在する。代わりに、Ｍｏｄ  Ｒ／Ｍバイトのための機能ビットがクリアされていればＳＩＢバイトは存在しない。
ＭＲＯＭ命令は、デコードユニット２０によるデコードには複雑すぎると判定された命令である。ＭＲＯＭ命令はＭＲＯＭユニット３４を呼出すことによって実行される。より特定的には、ＭＲＯＭ命令に出会った際に、ＭＲＯＭユニット３４は命令をサブセットの規定されたファストパス命令にパージングし発行して所望の動作を実現する。ＭＲＯＭ命令が浮動小数点命令である場合、ファストパス命令は浮動小数点演算を含み得る。ＭＲＯＭユニット３４はデコードユニット２０にサブセットのファストパス命令をディスパッチする。ファストパス命令として類別される例示的なｘ８６命令の一覧表を以下に提示する。
マイクロプロセッサ１０は分岐予測を用いて、条件付き分岐命令の後の命令を投機的にフェッチする。分岐予測ユニット１４は分岐予測動作を実行するために含まれる。ある実施例では、命令キャッシュ１６における各キャッシュラインの各１６バイト部分に関して最大２つの分岐ターゲットアドレスがストアされる。プリフェッチ／プリデコードユニット１２は、特定のラインがプリデコードされる際に初期分岐ターゲットを判定する。キャッシュライン内の命令の実行により、キャッシュラインに対応する分岐ターゲットのその後の更新がなされ得る。命令キャッシュ１６はフェッチされている命令アドレスの表示をもたらすため、分岐予測ユニット１４は分岐予測を形成するためにどの分岐ターゲットアドレスを選択するかを判定できる。デコードユニット２０および機能ユニット２４は分岐予測ユニット１４に更新情報をもたらす。分岐予測ユニット１４がキャッシュラインの１６バイト部分ごとに２つのターゲットをストアするため、ライン内のいくつかの分岐命令は分岐予測ユニット１４にストアされないことがある。デコードユニット２０は分岐予測ユニット１４によって予測されなかった分岐命令を検出する。機能ユニット２４は分岐命令を実行し、予測された分岐方向が誤っているかどうか判定する。分岐方向は「テークン」であることがあり、この場合、その後の命令は分岐命令のターゲットアドレスからフェッチされる。逆に、分岐方向は「ノットテークン」であることもあり、この場合にはその後の命令は分岐命令に続く記憶場所からフェッチされる。予測誤りのあった分岐命令が検出されると、その予測誤りのあった分岐の後の命令はマイクロプロセッサ１０のさまざまなユニットから破棄される。分岐予測ユニット１４はさまざまな適当な分岐予測アルゴリズムを用いてもよい。
命令キャッシュ１６からフェッチされた命令は命令アライメントユニット１８に運ばれる。命令が命令キャッシュ１６からフェッチされる際に、対応するプリデコードデータが走査され、フェッチされている命令に関して命令アライメントユニット１８（およびＭＲＯＭユニット３４）に情報をもたらすようにする。命令アライメントユニット１８は走査データを利用して命令をデコードユニット２０の各々にアラインする。一実施例では、命令アライメントユニット１８は３つのセットの８命令バイトからの命令をデコードユニット２０にアラインする。命令は８命令バイトの各セットから独立して予備発行位置内へ選択される。予備発行位置はそこでデコードユニット２０に対応する１組のアラインされた発行位置にマージされ、アラインされた発行位置が予備発行位置内の他の命令よりもプログラム順で前の３つの命令を含むようにする。デコードユニット２０Ａは、デコードユニット２０Ｂおよび２０Ｃによって同時に受取られた命令の（プログラム順で）前の命令を受ける。同様に、デコードユニット２０Ｂはデコードユニット２０Ｃによって同時に受取られた命令のプログラム順で前の命令を受ける。
デコードユニット２０は命令アライメントユニット１８から受取った命令をデコードするよう構成される。レジスタオペランド情報が検出され、レジスタファイル３０およびリオーダバッファ３２に与えられる。さらに、命令が１つ以上のメモリ操作を実行することを必要とする場合、デコードユニット２０はメモリ操作をロード／ストアユニット２６にディスパッチする。各命令は機能ユニット２４のための１組の制御値にデコードされ、これらの制御値は、命令に含まれていることがある変位または即値データおよびオペランドアドレス情報とともにリザベーションステーション２２にディスパッチされる。
マイクロプロセッサ１０は飛越し（アウトオブオーダ）実行をサポートし、そのためリオーダバッファ３２を用いてレジスタ読出および書込動作のための元のプログラムシーケンスを追跡してレジスタリネーミングを実現し、投機的命令実行および分岐予測誤りのリカバリを可能にし、正確な例外を容易にする。リオーダバッファ３２内の一時記憶場所は、レジスタの更新を伴う命令のデコードの際に予約され、これによって投機的なレジスタ状態をストアする。分岐予測が誤っている場合、予測誤りのあったパスに沿って投機的に実行された命令の結果はレジスタファイル３０に書込まれる前にバッファにおいて無効にすることができる。同様に、ある特定の命令が例外を生じる場合、その特定の命令の後の命令は破棄される。したがって、例外は「正確」である（すなわち例外を生じるある特定の命令の後の命令は例外の前には完了しない）。ここである特定の命令が投機的に実行されるとは、その命令がプログラム順においてその特定の命令に先行する命令の前に実行される場合のことを意味することに注意されたい。先行する命令は分岐命令または例外を引き起こす命令のこともあり、この場合には投機的結果はリオーダバッファ３２によって破棄される。
デコードユニット２０の出力において与えられる命令制御値および即値または変位データはそれぞれのリザベーションステーション２２に直接与えられる。一実施例では、各リザベーションステーション２２は対応する機能ユニットへの発行を待つ最大３つまでの係属中命令のための命令情報（すなわち命令制御値およびオペランド値、オペランドタグおよび／または即値データ）を保持する能力を有する。図１の実施例では、各リザベーションステーション２２が専用の機能ユニット２４に関連付けられていることに注意されたい。したがって、３つの専用の「発行位置」がリザベーションステーション２１および機能ユニット２４によって形成される。換言すると、発行位置０はリザベーションステーション２２Ａおよび機能ユニット２４Ａによって形成される。リザベーションステーション２２Ａに対してアラインされディスパッチされる命令は機能ユニット２４Ａによって実行される。同様に、発行位置１はリザベーションステーション２２Ｂおよび機能ユニット２４Ｂによって形成され、発行位置２はリザベーションステーション２２Ｃおよび機能ユニット２４Ｃによって形成される。
ある特定の命令のデコードの際に、必要とされるオペランドがレジスタ位置である場合、レジスタアドレス情報がリオーダバッファ３２およびレジスタファイル３０に同時に与えられる。当業者には、ｘ８６レジスタファイルが８つの３２ビットリアルレジスタ（すなわち、典型的に、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと称される）を含むことが理解されるであろう。ｘ８６マイクロプロセッサアーキテクチャを用いるマイクロプロセッサ１０の実施例では、レジスタファイル３０は３２ビットリアルレジスタの各々のための記憶場所を含む。ＭＲＯＭユニット３４による使用のためにさらなる記憶場所をレジスタファイル３０内に含んでもよい。リオーダバッファ３２は、これらのレジスタの内容を変えることによって飛越し実行を可能にする結果のための一時記憶場所を含む。リオーダバッファ３２の一時記憶場所が、デコードの際にリアルレジスタのうちの１つの内容を変更すると判定された各命令のため予約される。このように、特定のプログラムの実行におけるさまざまな時点において、リオーダバッファ３２は所与のレジスタのために投機的に実行された内容を含む１つ以上の場所を有し得る。所与の命令をデコードした後に、リオーダバッファ３２がその所与の命令においてオペランドとして用いられるレジスタに割当てられた場所または以前の場所を有していると判定された場合、リオーダバッファ３２は対応するリザベーションステーションに、１）最も新しく割当てられた場所の値、または２）その前の命令を実行することになる機能ユニットによってその値がまだ生成されていない場合には最も新しく割当てられた場所に対するタグ、のいずれかをフォワードする。リオーダバッファ３２が所与のレジスタのために場所を予約している場合、オペランド値（またはリオーダバッファタグ）はレジスタファイル３０からではなくリオーダバッファ３２からもたらされる。リオーダバッファ３２において必要とされるレジスタのために場所が予約されていない場合、値はレジスタファイル３０から直接取られる。オペランドが記憶場所に対応する場合、オペランド値がロード／ストアユニット２６を介してリザベーションステーションに与えられる。
ある特定の実施例では、リオーダバッファ３２は同時にデコードされた命令を１単位としてストアし操作するよう構成される。この構成をここで「ライン指向型」と称する。いくつかの命令をまとめて操作することにより、リオーダバッファ３２内で用いるハードウェアを簡略化することができる。たとえば、この実施例に含まれるライン指向型リオーダバッファは、デコードユニット２０から１つ以上の命令がディスパッチされる際はいつでも、３つの命令（各デコードユニット２０から１つずつ）に関係する命令情報のために十分な記憶領域を割付ける。これと比較して、従来のリオーダバッファでは、実際にディスパッチされる命令の数に依存して可変量の記憶領域が割付けられる。可変量の記憶領域を割付けるためには比較的大きな数の論理ゲートが必要となり得る。同時にデコードされる命令の各々が実行されると、命令結果は同時にレジスタファイル３０にストアされる。そこで、その記憶領域は割当てのため別のセットの同時にデコードされる命令に開放される。さらに、命令ごとに用いられる制御論理回路の量は、制御論理がいくつかの同時にデコードされる命令により共用されるため減少する。ある特定の命令を識別するリオーダバッファタグは２つのフィールド、すなわちラインタグおよびオフセットタグに分けられる。ラインタグはその特定の命令を含む１組の同時にデコードされる命令を識別し、オフセットタグはそのセット内のどの命令がその特定の命令に対応するかを識別する。命令を「リタイヤする」とは、命令結果をレジスタファイル３０にストアして対応する記憶領域を空けることを指していることに注意されたい。さらに、マイクロプロセッサ１０のさまざまな実施例においてどんなリオーダバッファ構成を用いてもよいことに注意されたい。
前に述べたように、リザベーションステーション２２は対応する機能ユニット２４によって命令が実行されるまで命令をストアする。命令が実行のため選択されるのは、（ｉ）命令のオペランドが与えられた場合、かつ（ii）同じリザベーションステーション２２Ａ−２２Ｃ内にありプログラム順でその命令の前にある命令に対してオペランドがまだ与えられていない場合である。命令が機能ユニット２４の１つによって実行される際に、その命令の結果は、その結果がリオーダバッファ３２を更新するよう送られるのと同時に、その結果を待っているいずれかのリザベーションステーション２２に直接送られることに注意されたい（この技術は一般的に「結果フォワーディング」と称される）。命令は、その関連する結果がフォワードされるクロックサイクルにおいて実行のため選択されかつ機能ユニット２４Ａ−２４Ｃに送られてもよい。リザベーションステーション２２はこの場合、フォワードされた結果を機能ユニット２４に与える。
一実施例では、機能ユニット２４の各々は、加算および減算の整数算術演算およびシフト、ローテート、論理演算ならびに分岐演算を行なうよう構成される。演算は、ある特定の命令に対してデコードユニット２０によってデコードされた制御値に応答して行なわれる。さらに、機能ユニット２４は、ロード／ストアユニット２６により実行されるロードおよびストアメモリ演算のためのアドレス生成を行なうよう構成されてもよい。
機能ユニット２４の各々はまた、条件付き分岐命令の実行に関する情報を分岐予測ユニット１４にもたらす。分岐予測が誤っていた場合、分岐予測ユニット１４は命令処理パイプラインに入った予測誤りのあった分岐の後の命令をフラッシュし、必要とされる命令を命令キャッシュ１６またはメインメモリからフェッチさせる。このような状況では、予測誤りのあった分岐命令の後に生じる元のプログラムシーケンスにおける命令の結果は、投機的に実行されロード／ストアユニット２６およびリオーダバッファ３２に一時的にストアされるものも含めて破棄される。
機能ユニット２４によって生成された結果は、レジスタ値が更新されている場合にはリオーダバッファ３２に送られ、記憶場所の内容が変っている場合にはロード／ストアユニット２６に送られる。結果をレジスタにストアすべき場合、リオーダバッファ３２は命令がデコードされた際にレジスタの値に対して予約された場所にその結果をストアする。機能ユニット２４およびロード／ストアユニット２６から結果をフォワードするために複数の結果バス３８が含まれる。結果バス３８は生成された結果と、実行されている命令を識別するリオーダバッファタグとを運ぶ。
ロード／ストアユニット２６は機能ユニット２４とデータキャッシュ２８との間のインターフェイスをもたらす。一実施例では、ロード／ストアユニット２６は、係属中のロードまたはストアのためのデータおよびアドレス情報のための８つの記憶場所を有するロード／ストアバッファで構成される。デコードユニット２０はロード／ストアユニット２６へのアクセスを調停する。バッファが一杯であると、デコードユニットはロード／ストアユニット２６に係属中のロードまたはストア要求情報のための余裕ができるまで待たなければならない。ロード／ストアユニット２６はまた、係属中ストアメモリ操作に対するロードメモリ操作のための依存性チェックを行ない、データの一貫性が確実に維持されるようにする。メモリ操作とはマイクロプロセッサ１０とメインメモリサブシステムとの間のデータの転送である。メモリ操作はメモリにストアされるオペランドを利用する命令の結果生じるものであるかもしれず、またはデータ転送を生じるが他の操作を生じないロード／ストア命令の結果生じるものであるかもしれない。さらに、ロード／ストアユニット２６は、ｘ８６マイクロプロセッサアーキテクチャにより規定されるアドレス変換機構に関連するセグメントレジスタおよび他のレジスタなどの特殊レジスタのための特殊レジスタ記憶領域を含んでいてもよい。
一実施例では、ロード／ストアユニット２６は投機的にロードメモリ操作を実行するよう構成される。ストアメモリ操作はプログラム順に実行されるが、予測されるウェイに投機的にストアされてもよい。予測されたウェイが誤っている場合、ストアメモリ操作の前のデータがその後に予測されたウェイにリストアされ、ストアメモリ操作が正しいウェイに対して実行される。別の実施例では、ストアも投機的に実行してもよい。投機的に実行されたストアは更新の前のキャッシュラインのコピーとともにストアバッファに入れられる。投機的に実行されたストアが分岐予測誤りまたは例外のため後に破棄される場合、キャッシュラインはバッファにストアされた値に戻される。ロード／ストアユニット２６は、全く投機的実行を行なわないことを含め、どんな量の投機的実行を行なうようにも構成され得ることに注意されたい。
データキャッシュ２８はロード／ストアユニット２６とメインメモリサブシステムとの間で転送されるデータを一時的にストアするよう設けられる高速キャッシュメモリである。一実施例では、データキャッシュ２８は８ウェイセットアソシアティブ構造において最大１６キロバイトのデータをストアする容量を有する。命令キャッシュ１６と同様に、データキャッシュ２８はウェイ予測機構を用いてもよい。データキャッシュ２８をセットアソシアティブ構成を含むさまざまな特定のメモリ構成で実現してもよいことを理解されたい。
ｘ８６マイクロプロセッサアーキテクチャを用いたマイクロプロセッサ１０のある特定の実施例においては、命令キャッシュ１６およびデータキャッシュ２８は線形にアドレス指定される。線形アドレスは、命令により特定されるオフセットおよびＸ８６アドレス変換機構のセグメント部分により特定される基底アドレスから形成される。線形アドレスはメインメモリにアクセスするために任意に物理アドレスに変換してもよい。線形アドレスから物理アドレスへの変換はｘ８６アドレス変換機構のページング部分により特定される。線形アドレス指定されたキャッシュが線形アドレスタグをストアすることに注目されたい。１組の物理タグ（図示せず）を用いて線形アドレスを物理アドレスにマッピングしかつ変換エイリアスを検出するようにしてもよい。さらに、物理タグブロックが線形アドレスから物理アドレスへの変換を行なってもよい。
次に図２を参照して、デコードユニット２０Ｂおよび２０Ｃの一実施例のブロック図が示される。各デコードユニット２０は命令アライメントユニット１８から命令を受ける。さらに、ＭＲＯＭユニット３４は各デコードユニット２０に結合され、ある特定のＭＲＯＭ命令に対応するファストパス命令をディスパッチする。デコードユニット２０Ｂは早期デコードユニット４０Ｂ、マルチプレクサ４２Ｂおよび演算コードデコードユニット４４Ｂを含む。同様に、デコードユニット２０Ｃは早期デコードユニット４０Ｃ、マルチプレクサ４２Ｃおよび演算コードデコードユニット４４Ｃを含む。
ｘ８６命令セットにおけるある命令はかなり複雑でありかつ頻繁に用いられる。マイクロプロセッサ１０の一実施例では、そのような命令は、ある特定の機能ユニット２４Ａ−２４Ｃ内に含まれるハードウェアが実行するよう構成されているものよりさらに複雑な動作を含む。このような命令は特殊なタイプのＭＲＯＭ命令として分類され、「二重ディスパッチ」命令と称される。これらの命令は１対の演算コードデコードユニット４４にディスパッチされる。演算コードデコードユニット４４がそれぞれ対応のリザベーションステーション２２に結合されることに注目されたい。演算コードデコードユニット４４Ａ−４４Ｃの各々は対応するリザベーションステーション２２Ａ−２２Ｃおよび機能ユニット２４Ａ−２４Ｃとともに発行位置を形成する。命令は演算コードデコードユニット４４から対応するリザベーションステーション２２へ送られ、さらに対応する機能ユニット２４に送られる。
マルチプレクサ４２ＢはＭＲＯＭユニット３４によりもたらされる命令と、早期デコードユニット４０Ｂによってもたらされる命令との間で選択を行なうよう含まれる。ＭＲＯＭユニット３４が命令をディスパッチしているときには、マルチプレクサ４２ＢはＭＲＯＭユニット３４によってもたらされる命令を選択する。それ以外のときには、マルチプレクサ４２Ｂは早期デコードユニット４０Ｂによりもたらされる命令を選択する。同様に、マルチプレクサ４２Ｃは、ＭＲＯＭユニット３４、早期デコードユニット４０Ｂおよび早期デコードユニット４０Ｃによりもたらされる命令から選択する。ＭＲＯＭユニット３４からの命令はＭＲＯＭユニット３４が命令をディスパッチしているときに選択される。デコードユニット２０Ａ（図示せず）内の早期デコードユニットが二重ディスパッチ命令を検出しているときは、早期デコードユニット４０Ｂからの命令がマルチプレクサ４２Ｃにより選択される。それ以外の場合では、早期デコードユニット４０Ｃからの命令が選択される。早期デコードユニット４０Ｂから演算コードデコードユニット４４Ｃへの命令を選択することにより、デコードユニット２０Ｂによりデコードされるファストパス命令をデコードユニット２０Ａによりデコードされる二重ディスパッチ命令と同時にディスパッチすることができる。
ｘ８６命令セットを用いた一実施例によれば、早期デコードユニット４０は以下の動作を行なう。
（ｉ）  命令のプレフィックスバイトをエンコードされたプレフィックスバイトにマージし、
（ii）  分岐予測の際に検出されなかった無条件分岐命令（無条件ジャンプ、ＣＡＬＬおよびＲＥＴＵＲＮを含んでもよい）をデコードし、
（iii）  発信元フラグおよび先行フラグをデコードし、
（iv）  レジスタオペランドである発信元オペランドおよび行先オペランドをデコードしてオペランドサイズ情報を生成し、
（v）  変位および／または即値サイズを判定して、変位および即値データが演算コードデコードユニットに与えられるようにする。
演算コードデコードユニット４４は命令の演算コードをデコードし機能ユニット２４のための制御値を生成するよう構成される。変位および即値データは制御値とともにリザベーションステーション２２に与えられる。
早期デコードユニット４０はオペランドを検出するため、マルチプレクサ４２の出力はレジスタファイル３０およびリオーダバッファ３２に与えられる。これによりオペランド値またはタグがリザベーションステーション２２に与えられることになる。さらに、メモリオペランドが早期デコードユニット４０により検出される。このため、マルチプレクサ４２の出力はロード／ストアユニット２６に与えられる。メモリオペランドを有する命令に対応するメモリ操作はロード／ストアユニット２６によりストアされる。
次に図３を参照して、ロード／ストアユニット２６、リオーダバッファ３２、ＦＰＵ３６およびＭＲＯＭユニット３４のブロック図が示される。ブロック間の相互接続はマイクロプロセッサ１０の一実施例に従って図３において強調される。設計上の選択に従って望まれるようにさらなる相互接続を設けてもよい。
上に説明したように、ＭＲＯＭユニット３４は命令キャッシュ１６から浮動小数点命令を受け、浮動小数点命令を浮動小数点演算およびメモリ演算にパージングして命令に対するメモリオペランドを取出しストアする。さらに、いくつかの浮動小数点命令は機能ユニット２４に対してメモリ演算以外の動作を要求することがある。たとえば、浮動小数点状態を１組の記憶場所にストアするよう規定される浮動小数点命令はＦＰＵ３６内に設定されていない１つ以上のレジスタにアクセスするかもしれない。より特定的な例として、一実施例によればリオーダバッファ３２内に命令ポインタが維持されることがあり、この命令ポインタは浮動小数点状態の一部である。ＭＲＯＭユニット３４はこのような命令を、機能ユニット２４によって実行すべき整数命令にパージングする。
ＭＲＯＭユニット３４はＭＲＯＭユニット３４とＦＰＵ３６との間に結合されるフロート演算バス５０上に浮動小数点演算を提供する。浮動小数点演算は、要求される浮動小数点演算を規定する演算コードと、命令により用いられるいずれかのレジスタオペランドに対するレジスタ指定とを含む。メモリオペランドは、命令内に含まれている場合には、ロード／ストアユニット２６によってもたらされる。ＭＲＯＭユニット３４は浮動小数点演算を提供するのと同時に、図２に示されるように早期デコードユニット４０と演算コードデコードユニット４４との間にメモリ演算命令を提供する。リオーダバッファ３２は、リオーダバッファ３２とＦＰＵ３６との間に結合されるタグバス５２上にメモリ演算に割当てられるリオーダバッファタグを提供する。この実施例によれば、リオーダバッファ３２は上述のようにライン指向型リオーダバッファである。このような実施例では、リオーダバッファ３２はタグバス５２上にラインタグをもたらす。供給されたタグを用いてＦＰＵ３６はメモリオペランドデータをメモリオペランドデータがロード／ストアユニット２６から与えられる都度、識別することができる。
ロード／ストアユニット２６はロード／ストア結果バス３８Ａおよび３８Ｂ上にメモリオペランドデータを与える。結果バス３８Ａおよび３８Ｂは結果バス３８の一部分をなしていてもよい。代わりに、ロード／ストア結果バス３８は値をＦＰＵ３６に与えるための専用バスをなしていてもよい。ロード／ストア結果バス３８Ａおよび３８Ｂの各々は一実施例では、３２ビットデータ語およびそのデータ語を識別するリオーダバッファタグをもたらす能力を有する。リオーダバッファタグはライン部分およびオフセット部分の双方を含む。ライン部分はデータ語が属する浮動小数点命令を識別し、オフセット部分はデータ語によってもたらされるメモリオペランドの部分を規定する。浮動小数点メモリオペランドは多くて８０ビットを含んでいてもよく、ロード／ストアユニット２６から最大２つの３２ビットデータ語および１６ビットデータ語を必要とする。
ＦＰＵ３６は結果をリオーダバッファ３２とロード／ストアユニット２６とのいずれに与えてもよい。たとえば、命令のための行先は記憶場所であるかもしれない。ＦＰＵ３６は命令の結果をＦＰＵ結果バス５４を介してロード／ストアユニット２６へ記憶のため通信する。さらに、浮動小数点命令が規定され、このことにより浮動小数点値が整数レジスタ（特定的には、一実施例ではｘ８６マイクロプロセッサアーキテクチャのＡＸレジスタ）内にストアされる。このため、ＦＰＵ結果バス５４はリオーダバッファ３２に結合される。浮動小数点レジスタはＦＰＵ３６内に設けられ、浮動小数点レジスタ内にターゲットを有する浮動小数点命令に対して浮動小数点結果を中にストアすることができる。
リオーダバッファ３２は命令のプログラム順でのリタイアメントを調整する。浮動小数点命令はしばしばＦＰＵ３６内でリタイアするため、リオーダバッファ３２とＦＰＵ３６との間のインターフェイスは浮動小数点命令のリタイアメントを通信するよう用いられる。そのインターフェイスはＦＰＵ３６とリオーダバッファ３２との間に緩い結合をもたらし、一方のユニットが他方のユニットを追い越すことができるようにする。たとえば、リオーダバッファ３２がある特定の命令をリタイアすることができることを示しているにもかかわらず、ＦＰＵ３６はまだその命令を実行していないかもしれない。ＦＰＵ３６は、命令が例外を生じない場合に命令に対するリタイアメント表示を受け、完了の際にＦＰＵ３６の内部にある命令をリタイアしてもよい。同様に、ＦＰＵ３６は命令を完了することができ、リオーダバッファ３２が命令をリタイアする（またはキャンセルする）まで命令を内部にバッファすることができる。
緩く結合されたインターフェイスの一実施例によって用いられる信号が図３に示される。リタイア信号は、リオーダバッファ３２によって、ＦＰＵ３６に結合されるリタイア線を介して伝達される。リオーダバッファ３２はキャンセル信号をＦＰＵ３６に結合されるキャンセル線を介して伝達する。ＦＰＵ３６は有効信号を有効線６０を介して伝え、例外信号を例外線６２を介して伝え、これらの線はともにリオーダバッファ３２に結合される。リオーダバッファ３２はウェイト信号をウェイト線６４上に与え、クリア信号をクリア線６６上に与え、これらの線はともにＦＰＵ３６に結合される。最後に、ＦＰＵ３６は同期信号を同期線６８上にもたらし、再同期信号を再同期線７０上にもたらし、これらの線はともにリオーダバッファ３２に結合される。
リタイア、キャンセル、有効および例外信号により、命令をリタイアしキャンセルするための基本的なインターフェイスがもたらされる。リオーダバッファ３２は浮動小数点命令をリタイアすべき場合にリタイア信号をアサートする。リタイア信号はプログラム順で各浮動小数点命令に対してアサートされ、単一の信号を用いることができるようにする。代わりに、命令はキャンセル信号のアサーションを介してキャンセルすることができる（すなわち、ＦＰＵ３６内の実行パイプラインから破棄することができる）。ＦＰＵ３６はリタイア信号のアサーションを、対応する命令がＦＰＵ３６によって完了されるまで（すなわち命令がＦＰＵ３６の実行パイプラインを出るまで）ストアするよう構成されていてもよい。一旦リタイア信号が所与の命令に対してアサートされると、（特定の浮動小数点例外がマスクされているものとして）ＦＰＵ３６は命令の結果を用いて行先レジスタの更新を進めてもよい。
ＦＰＵ３６は有効信号および例外信号を用いて各命令のステータスを出力する。命令が例外を発生させることなく完了される場合、有効信号がその命令に対してアサートされる。命令が例外を発生させた場合、例外信号がアサートされる。リタイア信号のアサーションと同様に、有効および／または例外信号のアサーションはリオーダバッファ３２によってキューに入れられ、プログラム順に浮動小数点命令に関連付けられる。
ウェイトおよび同期信号は、浮動小数点同期命令（たとえばｘ８６マイクロプロセッサアーキテクチャにおけるＦＷＡＩＴ）を実現するよう用いられる。浮動小数点同期命令はマイクロプロセッサ１０の浮動小数点部分と整数部分とを同期化するのに用いられる。特に、浮動小数点例外は不正確である。浮動小数点同期命令は、ある特定の浮動小数点命令に関して何らかの例外がないかどうかをチェックするよう用いることができる。浮動小数点同期命令がリタイアされる準備ができると、リオーダバッファ３２はウェイト信号をアサートする。ＦＰＵ３６はＦＰＵ３６が同期化されると同期信号をアサートする。これらの双方の信号のアサーションの際に浮動小数点同期命令が完全なものとなる。
再同期信号は投機的状態を削除し（すなわちリオーダバッファ３２内に残っているどんな命令をも破棄し）、リオーダバッファ３２内のプログラム順で一番初めである命令の後の次の命令から始めて命令を再フェッチするよう用いられる。リオーダバッファ３２内の一番初めの命令はリタイアされる。クリア信号はリオーダバッファ３２により同様の態様で用いられる。すなわち、クリア信号がアサートされると、ＦＰＵ３６は中にストアされているどんな投機的状態をも削除する。
次に図４を参照して、ＦＰＵ３６の一実施例のブロック図が示される。図４に示されるように、ＦＰＵ３６は、アセンブリキュー８０、変換ユニット８２、レジスタスタック８４、タグジェネレータ８５、定数読出し専用メモリ（ＲＯＭ）８６、ＦＰＵ環境ユニット８８、ＦＰＵ  ＲＯＭ９０、ＦＰＵ制御ユニット９２、ＦＰＵコア９４および結果キュー９６を含む。アセンブリキュー８０は複数のキューエントリを含み、その各々は１つの命令に対応する命令情報をストアするよう構成される。図４に示されるように、アセンブリキュー８０は各エントリに対していくつかのフィールドを含む。演算コードフィールド９８は浮動小数点命令の演算コードおよび対応するリオーダバッファタグをストアするよう含まれ、スタック指定フィールド１００はレジスタスタック８４内の記憶場所を選択するレジスタ指定をストアするために含まれる。選択されたレジスタは対応する命令のためのオペランドをもたらす。演算コードフィールド９８およびスタック特定フィールド１００にストアされる値は、ＭＲＯＭユニット３４からフロート演算バス５０を介し、およびリオーダバッファ３２からタグバス５２を介してＦＰＵ３６によって受取られる。アセンブリキュー８０はさらに、命令によって用いられるメモリオペランドをストアするためのメモリオペランドキュー１０２を含む。メモリオペランドはロード／ストア結果バス３８Ａおよび３８Ｂを介して受信される。
アセンブリキュー８０はＦＰＵ制御ユニット９２、変換ユニット８２およびタグジェネレータ８５に結合される。変換ユニット８２はレジスタスタック８４に結合され、レジスタスタック８４はさらに定数ＲＯＭ８６、結果キュー９６およびＦＰＵコア９４に結合される。ＦＰＵ環境８８は結果キュー９６に結合され、マルチプレクサ１０４を介して結果をＦＰＵ結果バス５４上にもたらすよう結合される。レジスタスタック８４はまた、マルチプレクサ１０４を介して結果をＦＰＵ結果バス５４上に与えてもよい。ＦＰＵ制御ユニット９２はＦＰＵ  ＲＯＭ９０、結果キュー９６およびＦＰＵコア９４に結合される。ＦＰＵコア９４はさらに結果キュー９６に結合される。ＦＰＵ制御ユニット９２はさらに信号を受けるよう結合され、ＦＰＵ３６とリオーダバッファ３２との間でインターフェイスを形成する（たとえば、線５２、５６、５８、６０、６２、６４、６６、６８および７０上の信号）。
一般的に、命令およびその対応するメモリオペランドは受取られてアセンブリキュー８０内に入れられる。命令はアセンブリキュー８０からＦＰＵ３６の実行パイプラインへディスパッチされる。実行パイプラインから出ると、命令の結果は結果キュー９６にストアされる。結果は、リオーダバッファ３２からリタイア表示を受取るまで結果キュー９６内に保持される。リタイア表示が受取られた際、結果はレジスタスタック８４にストアされる（または、命令の行先が制御語またはステータス語などのＦＰＵ環境レジスタである場合にはＦＰＵ環境８８にストアされる）。
命令が実行パイプラインにディスパッチされると、命令のためのスタック指定が変換ユニット８２に伝達される。例示される実施例では、ＦＰＵ３６はスタックベースのレジスタファイルを用いており、レジスタのうちの１つがスタックのトップと規定される。他の実施例では、スタックベースではないレジスタファイルを実現してもよい。レジスタスタック８４はレジスタストレージデバイスの一例である。一般的に、レジスタストレージデバイスはデータのビットをラッチし保持する能力を有する複数の要素を含むデバイスであればどのようなものでもよい。ある命令がスタックに値をプッシュしたり、またはスタックから値をポップしたりするため規定されている。スタックに値をプッシュすることは、現在スタックのトップであるレジスタに隣接するレジスタに値をストアしてその隣接するレジスタをスタックのトップにすることを含む。スタックから値をポップすることは、現在スタックのトップであるレジスタから値を読み、スタックポインタが隣接するレジスタを示すようにすることを含む。浮動小数点命令のほとんどはスタック関連のレジスタ指定を用いる（すなわち、指定はスタックのトップであるレジスタ、またはスタックのトップからある特定のオフセットにあるレジスタを示す）。このため、レジスタ指定はその命令の前に実行される命令に幾分か依存している（なぜなら、これらの命令はどのレジスタがスタックのトップであるかということに影響を及ぼし得るためである）。変換ユニット８２は（依然としてＦＰＵ３６の実行パイプライン内にある命令を含む）プログラム順でのある特定の命令の前の命令の実行を反映する投機的なスタックトップ値に基づいてスタック指定をレジスタスタック８４内のレジスタにマップする。スタックトップ（ＴＯＳ）レジスタ１０６はスタックトップインジケータをストアするよう含まれる。さらに、変換ユニット８２内に表が設けられ、各レジスタをそのスタックに関連の位置にマップする。レジスタは、１対のレジスタの内容を交換する交換命令によってスタック内で順番が狂うことがある。このような命令は、対応するレジスタの内容を物理的にスワップする代わりに、表中でのそれらのアドレスをスワップすることによって実行できる。
レジスタスタック８４はレジスタフィールド８７およびタグフィールド８９を含む。レジスタフィールド８７は、浮動小数点レジスタ値をストアする複数のビットをストアするよう構成される。タグフィールド８９は、タグ値をストアする複数のビットをストアするよう構成される。タグフィールド８９内の各タグ値はレジスタフィールド８７内のレジスタ値に関連付けられる。一実施例では、タグフィールド８９にストアされるタグ値は、関連付けられたレジスタフィールド８７にストアされる浮動小数点レジスタ値が通常の浮動小数点数であるか、または特殊な浮動小数点数であるかを示す。上述のとおり、特殊浮動小数点数には０、＋無限大、−無限大およびＮａＮが含まれる。
変換ユニット８２は変換されたレジスタ指定をレジスタスタック８４に与え、レジスタスタック８４は対応するレジスタ位置から値を読み、浮動小数点値および関連のタグ値をＦＰＵコア９４にもたらす。レジスタスタック８４は、マイクロプロセッサ１０により用いられるマイクロプロセッサアーキテクチャによって規定される設計されたＦＰＵレジスタを含む。たとえば、Ｘ８６マイクロプロセッサアーキテクチャを用いるマイクロプロセッサ１０の実施例では、レジスタスタック８４内に８つの設計されたレジスタが含まれる。さらに、レジスタスタック８４は、以下に説明するように、ＦＰＵ  ＲＯＭ９０にストアされる浮動小数点マイクロコードルーチンによる使用のための一時レジスタを含んでいてもよい。一実施例では、２４の一時レジスタが含まれる。
命令のためのメモリオペランドはマルチプレクサ１０８を介するレジスタスタック８４からのオペランドのうちの１つで置換してもよい。メモリオペランドフィールド１０２は浮動小数点命令のためのメモリオペランドをストアする。メモリオペランドはロード／ストア結果バス３８Ａおよび３８Ｂから受取られる。メモリオペランドはタグジェネレータ８５に伝達される。タグジェネレータ８５はメモリオペランドに対するタグ値を生成する。このタグ値は、レジスタスタック８４に関して上に説明したタグ値と同様に、メモリオペランドが通常の浮動小数点数であるか、または特殊浮動小数点数であるか、およびどのタイプの特殊浮動小数点数であるかを示す。メモリオペランドは、そのメモリオペランドに対する命令が実行パイプラインにディスパッチされた際にタグジェネレータ８５に運ばれる。メモリオペランドとそのメモリオペランドに関連付けられるタグ値はマルチプレクサ１０８を介してＦＰＵコア９４に伝えられる。一実施例では、タグジェネレータ８５は変換ユニット８２がレジスタ指定を変換するのと並行してタグ値を生成する。
ＦＰＵコア９４は、命令の結果を生成するために浮動小数点命令の発信元オペランドを操作するのに用いられるハードウェアを含む。たとえば、ＦＰＵコア９４は、入力オペランドを乗算するための乗算器、入力オペランドを加算するための加算器などを含む。ＦＰＵコアは、ＦＰＵ制御ユニット９２からの制御信号に応答してオペランドをさまざまなハードウェアに与える。ＦＰＵ制御ユニット９２はアセンブリキュー８０から所与の命令に対する演算コードを受け、これに従ってその命令を実行パイプライン中を通す。ある命令は実行パイプラインのある特定のステージにおいてハードウェアを全く用いないこともある。これらの命令はその特定のステージを迂回するようにされ、より迅速に実行パイプラインから出るようにする。さらに、ＦＰＵ制御ユニット９２はリオーダバッファ３２へのインターフェイスを扱い、インターフェイス上の通信に従ってＦＰＵ３６の他の要素と通信する。たとえば、ある特定の命令がリタイア表示を受けた場合、ＦＰＵ制御ユニット９２は結果キュー９６と通信して対応する命令結果がレジスタスタック８４にストアされるようにする。その命令がまだ完了していない場合は結果キュー９６は命令が完了されるまでリタイア表示をキューに入れる。
上述のように、特殊浮動小数点数にかかわる浮動小数点演算のための特殊な規則が存在する。ＦＰＵコア９４はオペランドに関連付けられるタグ値を用いてそのオペランドが特殊浮動小数点数であるかどうかを判定する。ＦＰＵコア９４はＦＰＵコア９４によって計算される各結果に対してタグ値を生成する。そのタグ値は、オペランドが通常の浮動小数点数であるか、または特殊浮動小数点数であるかなどを示す。一実施例では、オペランドが特殊浮動小数点数である場合、タグ値はさらに特殊浮動小数点数のタイプを示す。ある特定の実施例では、タグ値は特殊浮動小数点数の各タイプに対して１ビットを含む。特殊浮動小数点のタイプには、０、＋無限大、−無限大およびＮａＮが含まれる。特殊浮動小数点数の各タイプに対して１ビットを含むことにより、ＦＰＵコア９４はそのオペランドがどのタイプの特殊浮動小数点数を表わしているかを最小のデコードによって判定することができる。
一実施例では、特殊浮動小数点数がオペランドである浮動小数点命令のいくつかの結果は予め規定されている。たとえば、０を除数とした浮動小数点除算演算の商は無限大であると規定されている。このため、特殊浮動小数点数がオペランドである浮動小数点命令が検出された際には、いくつかの実行パイプラインステージを迂回してもよい。オペランドのタグ値をモニタすることによって、ＦＰＵコア９４は特殊浮動小数点数の発生とそのタイプとを迅速に識別することができる。ＦＰＵコア９４はこの情報を用いて浮動小数点計算を行なうことなく命令の結果を判定することができるかもしれない。たとえば、ＦＰＵコア９４が無限大を除数とする浮動小数点除算命令を受けると、ＦＰＵコア９４は除算演算を行なわなくてもよい。その商は０であると規定されている。このため、ＦＰＵコア９４は単に定数ＲＯＭ８６から０をロードすればよい。定数ＲＯＭ８６については以下にさらに詳しく説明する。
浮動小数点命令はこの実施例によれば、ＦＰＵ３６によって２タイプのうちの１つに類別される。第１のタイプ（ここでは「基本」と称する）には、基本算術演算（乗算、加算など）をもたらす命令またはデータ移動命令が含まれる。概して、基本命令は実行パイプラインの１回の通過で完了できる。一方、第２のタイプ（ここで「超越的」と称する）にはより抽象的な数学的関数を実行する命令が含まれる。たとえば、超越的命令は正弦および余弦関数、ならびに対数および平方根などの関数が含まれてもよい。超越関数はＦＰＵ  ＲＯＭ９０にストアされるマイクロコード化されたルーチンを用いて実現される。効果的には、超越関数は完了するのに実行パイプラインを複数回通過する。中間結果がマイクロコード化されたルーチン内の命令によって計算され、最終結果はその中間結果に対して計算を行なうことによって形成される。
マイクロコード化されたルーチンは定数ＲＯＭ８６にストアされる１組の定数を利用してもよい。定数ＲＯＭ８６にストアされる定数は、超越的命令に対して結果を計算するのに有効である。さらに、定数は特殊浮動小数点がオペランドである演算の結果を計算するのに有効であり得る。たとえば、１、０、−１、Ｐｉなどの浮動小数点表現およびマイクロコード化されたルーチンに特定のものである定数を定数ＲＯＭ８６にストアしてもよい。定数はマイクロコード化されたルーチンによる使用のため一時レジスタにロードしてもよい。一実施例によれば、定数ＲＯＭ８６は１２８の倍精度定数および６４の単精度定数をストアする。
ＦＰＵ環境８８はＦＰＵ３６の状態に関する制御およびステータス情報をストアする。ＦＰＵ３６の丸めおよび精度モードを示す制御語およびさまざまな浮動小数点例外に対するマスクをストアしてもよい。また、どの浮動小数点例外が検出されたか、およびスタックポインタのトップなどを示すステータス語をストアしてもよい。
ある特定の実施例によれば、ＦＰＵ３６はプログラム順に命令を実行する。命令はプログラム順でアセンブリキュー８０内に受取られ、ＦＰＵ３６の実行パイプラインに同様にプログラム順に与えられる。命令はアセンブリキュー８０内で実行のための準備ができている（すなわちすべてのオペランドが与えられている）かもしれないが、プログラム順でのその命令の前の別の命令が実行の準備ができていないため、中にストアされたままであるかもしれない。換言すると、アセンブリキュー８０はファーストインファーストアウト（ＦＩＦＯ）バッファとして動作する。同様に、結果は結果キュー９６からプログラム順にレジスタスタック８４および／またはＦＰＵ環境８８内にストアされる。
次に図５を参照して、タグ値１２４の一実施例が示される。タグ値１２４は複数のビットを含む。そのビットは関連のある浮動小数点数が通常の浮動小数点数であるか、または特殊浮動小数点数であるかを識別する。タグ値１２４は、特殊な数のタイプを識別するようさらなるビットを含んでいてもよい。タグ値１２４はさらに、オーバフローまたはアンダーフロー条件などの他の条件を示すビットと、関連のある浮動小数点数の精度を示すビットを含んでいてもよい。設計上の選択に従って所望により別のビットおよび別のタイプの特殊浮動小数点数を含めることができる。例示される実施例では、タグ値１２４は、通常ビット１１０、０ビット１１２、＋無限大ビット１１４、−無限大ビット１１６、ＮａＮビット１１８、非正規化された数ビット１２０、小さな数１２２、オーバフロービット１２５、アンダーフロービット１２６および１つ以上の精度ビット１２８を含む。一実施例では、一度にタグ値１２４の特殊浮動小数点数ビットのうちの１つだけがセットされる。タグ値に関連付けられる浮動小数点数が通常の浮動小数点数である場合、通常ビット１１０がアサートされる。タグ値１２４に関連付けられる浮動小数点数が特殊浮動小数点数である場合、どのタイプの特殊浮動小数点数であるかを識別するビットがアサートされる。別の実施例では、タグ値１２４のビットはエンコードされてもよい。たとえば、４ビット値は図５に示されるようにタグ値１２４の１０通りの可能な状態をエンコードできる。デコードの速度とタグ値１２４内のビットの数との間で設計上のトレードオフを行なう必要がある。
次に図６を参照して、特殊浮動小数点数の取扱いを示す、ＦＰＵ３６の一実施例の動作のフローチャートが示される。ステップ１３０において、浮動小数点命令を受ける。浮動小数点命令はメモリオペランドへの演算コード、レジスタ指定およびポインタを含んでいてもよい。ステップ１３２では、浮動小数点メモリオペランドがメモリからロードされる。メモリオペランドはロード／ストアユニ２６からロード／ストア結果バス３８Ａおよび３８Ｂを介して受取られる。ステップ１３４において、タグ値がメモリオペランドに対して生成される。上述のとおり、タグ値はメモリオペランドが通常の浮動小数点数であるかまたは特殊浮動小数点数であるかを示す。タグ値はさらに、特殊浮動小数点数のタイプを示していてもよい。ステップ１３６では、レジスタオペランドがレジスタファイルから読まれる。一実施例では、レジスタオペランドはレジスタスタック８４にストアされる。いくつかの浮動小数点命令では、双方のオペランドをレジスタファイルから読んでもよい。別の命令においては、双方のオペランドはメモリからロードされてもよい。さらに別の浮動小数点命令においては一方のオペランドをレジスタファイルから読み、他方をメモリから読んでもよい。ステップ１３８では、浮動小数点オペランドのタグ値を調べてそのオペランドが特殊浮動小数点数であるかどうかを判定する。判断ステップ１４０では、各オペランドが特殊浮動小数点数であるかどうかを判定する。いずれのオペランドも特殊浮動小数点数ではない場合、ステップ１４２においてその浮動小数点命令により特定される浮動小数点演算が行なわれる。ステップ１４４において、タグ値が浮動小数点演算からの結果に対して生成される。判断ステップ１４０においてオペランドのうちのいずれかが特殊浮動小数点数であることが判定された場合は、ステップ１４６において、判定されたタイプの特殊浮動小数点数がオペランドである浮動小数点命令に特殊な規則が当てはまるかどうかが判定される。特殊な規則が当てはまらない場合、浮動小数点演算がステップ１４２において行なわれ、タグ値がステップ１４４において生成される。判断ステップ１４６において特殊な規則が当てはまると判定された場合、ステップ１４８において特殊な規則が適用され、ステップ１４４において特殊な規則によりもたらされる結果からタグ値が生成される。
次に図７を参照して、ＦＰＵ３６の一実施例によって用いることのできる例示的な実行パイプライン１５０が示される。ＦＰＵ３６の他の実施例はどんな数のパイプラインステージを用いてもよく、どんな所望の態様で浮動小数点機能性をステージの間で分割してもよい。
パイプライン１５０はステージ１５２Ａ−１５２Ｉを含む。所与の命令は１つ以上のパイプラインステージを省いてもよいが、これはこの命令が省かれたステージにおけるどのハードウェアをも必要としない場合である。たとえば、浮動小数点加算には乗算が必要ではないため、パイプラインステージ１５２Ｃを省いてもよく、または特殊浮動小数点数がオペランドである浮動演算は予め定められた結果を有し得るため、パイプラインステージ１５２Ｂ−１５２Ｈを省いてもよい。
デコーダステージ１５２Ａは浮動小数点命令の演算コードをデコードするために設けられる。演算コードはどのタイプの浮動小数点演算を行なうべきかを示す。たとえば、浮動小数点演算コードは浮動小数点加算または浮動小数点乗算を示し特定し得る。
メモリオペランド分類ステージ１５２Ｂはメモリから読まれたオペランドに対するタグ値を生成する。タグ値は、メモリオペランドが通常の浮動小数点数であるか、または特殊浮動小数点数であるかなどを示す。メモリオペランドが特殊浮動小数点数である場合、タグ値はさらにそのメモリオペランドがどのタイプの特殊浮動小数点数を表わしているのかを示してもよい。一実施例では、メモリオペランド分類ステージ１５２Ｂはデコーダステージ１５２Ａと並行して行なわれる。
乗算器ステージ１５２Ｃは浮動小数点数の乗算を実行するのに用いられる。同様に、右シフトステージ１５２Ｄは右シフト演算を行なう。たとえば、右シフトステージ１５２Ｄは上述の仮数シフト演算を行なうのに用いてもよい。加算器ステージ１５２Ｅは浮動小数点数の加算を行なう。先行する０を数えるステージ１５２Ｆは結果の仮数において先行する０の数を数えるのに用いられ、その結果を通常の形態に（すなわち、２進小数点の左側に１桁の２進数字がある形態）にする。左シフタステージ１５２Ｇは、先行する０を数えるステージ１５２Ｆによってもたらされる先行する０の数に従って仮数を左シフトし、これに応じて指数を調整する。丸めステージ１５２Ｈは、対応する命令とともに伝達された丸めモードに従って結果を丸める。最後に、出力解決ステージ１５２Ｉは、入力オペランドまたは結果が特殊浮動小数点数である場合に強制的に特殊エンコーディング（０、無限大、非正規化された数など）にするよう用いられる。出力解決ステージ１５２Ｉはさらに、出力が特殊数であるかどうかを示すようにタグ値をセットする。一実施例によれば、丸めステージ１５２Ｈは命令とともに伝達される丸めモードに従って浮動小数点数の丸めのみを行なうことに注意されたい。数多くの他のデータパスも可能であることに注意されたい。たとえば、加算および丸め演算は単一のパイプラインステージで実行されてもよい。
ＦＰＵ制御ユニット９２およびＦＰＵコア９４の双方が実行パイプライン１５０を実現してもよいことに注目されたい。ＦＰＵ制御ユニット９２はそのパイプラインを介して制御情報を運び、ＦＰＵコア９４は対応するパイプラインステージ間でオペランド値および中間結果を伝達する。ＦＰＵ制御ユニット９２のパイプライン内の各ステージにある回路は、命令に対する制御情報に従ってＦＰＵコア９４のパイプライン内の対応する回路を制御する。
次に図８を参照して、マイクロプロセッサ１０を含むコンピュータシステム２０が示される。コンピュータシステム２００はさらに、バスブリッジ２０２、メインメモリ２０４、および複数の入出力（Ｉ／Ｏ）デバイス２０６Ａ−２０６Ｎを含む。複数のＩ／Ｏデバイス２０６Ａ−２０６Ｎは集合的にＩ／Ｏデバイス２０６と称する。マイクロプロセッサ１０、バスブリッジ２０２、およびメインメモリ２０４はシステムバス２０８に結合される。Ｉ／Ｏデバイス２０６はバスブリッジ２０２との通信のためＩ／Ｏバス２１０に結合される。
バスブリッジ２０２は、Ｉ／Ｏデバイス２０６とシステムバス２０８に結合されるデバイスとの通信を助けるよう設けられる。Ｉ／Ｏデバイス２０６は典型的にマイクロプロセッサ１０およびシステムバス２０８に結合される他のデバイスより長いバスクロックサイクルを必要とする。このため、バスブリッジ２０２はシステムバス２０８と入出力バス２１０との間のバッファを提供する。さらに、バスブリッジ２０２は、あるバスプロトコルから別のバスプロトコルにトランザクションを変換する。一実施例では、入出力バッファ２１０はEnhanced Industry Standard Architecture（ＥＩＳＡ）バスであり、バスブリッジ２０２はシステムバスプロトコルからＥＩＳＡバスプロトコルに変換する。別の実施例では、入出力バス２１０はPeripheral Component Interconnect（ＰＣＩ）バスであり、バスブリッジ２０２はシステムバスプロトコルからＰＣＩバスプロトコルに変換する。数多くのシステムバスプロトコルの変形が存在することに注意されたい。マイクロプロセッサ１０はどんな適当なシステムバスプロトコルを用いてもよい。
Ｉ／Ｏデバイス２０６はコンピュータシステム２００とコンピュータシステムの外部の他のデバイスとの間にインターフェイスをもたらす。例示的なＩ／Ｏデバイスにはモデム、シリアルまたはパラレルポート、サウンドカードなどが含まれる。Ｉ／Ｏデバイス２０６はまた、周辺デバイスとも称される。メインメモリ２０４はマイクロプロセッサ１０による使用のためのデータおよび命令をストアする。一実施例では、メインメモリ２０４は少なくとも１つのダイナミックランダムアクセスメモリ（ＤＲＡＭ）およびＤＲＡＭメモリコントローラを含む。
図８に示されるようなコンピュータシステム２００は１つのバスブリッジ２０２を含むが、コンピュータシステム２００の他の実施例では複数の非類似または類似のＩ／Ｏバスプロトコルを変換するための複数のバスブリッジ２０２を含んでいてもよいことに注意されたい。さらに、マイクロプロセッサ１０によって参照された命令およびデータをより速いメモリストレージにストアすることによってコンピュータシステム２００の性能を向上するためのキャッシュメモリを含めてもよい。キャッシュメモリはマイクロプロセッサ１０とシステムバス２０８との間に挿入されるか、または「ルックアサイド」構成においてシステムバス２０８上にあってもよい。さらに、バスブリッジ２０２、メインメモリ２０４およびキャッシュメモリの機能を、マイクロプロセッサ１０にインターフェイスするチップセットに統合してもよいことに注目されたい。
さらに、この説明ではさまざまな信号のアサーションに言及し得ることに注意されたい。ここでは、信号がある特定の条件を示す値を運ぶ場合に「アサートされる」と呼ばれる。逆に、信号がその特定の条件を欠いていることを示す値を運ぶ場合には「デアサートされる」と呼ぶ。信号は論理０の値を伝達するときにアサートされていると定義してもよいし、逆に論理１の値を運ぶ際にアサートされているものと定義できる。さらに、上の説明においてさまざまな値が破棄されるものとして説明した。値はいくつかの態様で破棄され得るが、一般的にはその値を受ける論理回路によってその値が無視されるような値にその値を変更することを指す。たとえば、値が１ビットを含む場合、その値を破棄するためにその論理を逆転するようにしてもよい。値がｎビット値である場合にはそのｎビット値が無効であることを、ｎビット符号のうちの１つを用いて示すようにしてもよい。値を無効符号に設定することによりその値が破棄される。さらに、ｎビット値は、セットされるとｎビット値が有効であることを示す有効ビットを含んでいてもよい。有効ビットをリセットすることは値を破棄することになる。値を破棄する他の方法を用いてもよい。
以下の表１は、ｘ８６命令セットを用いるマイクロプロセッサ１０の一実施例のためのファストパス、二重ディスパッチおよびＭＲＯＭ命令を示す。
0004344870.tif 000002
0004344870.tif 000003
0004344870.tif 000004
0004344870.tif 000005
上述の開示によれば、各浮動小数点数にタグ値を付加する浮動小数点ユニットが示される。タグ値は、その関連の浮動小数点数が通常の浮動小数点数であるか、または特殊浮動小数点数であるかを示す。さらに、タグ値は特殊浮動小数点数のタイプを示してもよい。浮動小数点ユニットは浮動小数点数をデコードすることなく、浮動小数点数が特殊浮動小数点数であるかどうかということと、特殊浮動小数点数のタイプとを判定できる効果がある。タグ値により、特殊浮動小数点数を識別するのに必要な時間が削減され、特殊浮動小数点数に対して必要な演算を行なう時間が削減される。
ひとたび上記の開示が完全に理解されると当業者には数多くの変形および修正が明らかになるであろう。以下の請求の範囲はそのような変形および修正のすべてを網羅するよう解釈されることが意図される。
【図１】
0004344870.tif 000006
【図２】
0004344870.tif 000007
【図３】
0004344870.tif 000008
【図４】
0004344870.tif 000009
【図５】
0004344870.tif 000010
【図６】
0004344870.tif 000011
【図７】
0004344870.tif 000012
【図８】
0004344870.tif 000013