(57)【特許請求の範囲】
【請求項１】
可変バイト長命令をプリデコードして、前記可変バイト長命令のあるバイトが境界バイトであるか否かを示す境界ビットを発生するステップと、
前記可変バイト長命令をプリデコードして、前記境界ビットの値に依存する意味をもつ機能ビットを発生するステップとを含むことを特徴とする、
スーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項２】
前記境界ビットは開始ビットであり；
前記命令の前記バイトが終了バイトであるか否かを示す終了ビットを発生するステップをさらに含む、
請求項１に記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項３】
前記機能ビットの前記意味はさらに命令の別のバイトに関連するプリデコードビットの値にも依存する、請求項１または２に記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項４】
前記機能ビットの前記意味はさらに命令の隣接するバイトが境界バイトであるか否かに依存する、請求項１または２に記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項５】
前記機能ビットの前記意味はさらに先の命令バイトの対応の開始ビットの値にも依存する、請求項１または２に記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項６】
前記機能ビットはオペレーションコードが前記命令の最初のバイトであるか否かを示す、請求項１から５のいずれかに記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項７】
前記開始ビット、前記終了ビットおよび前記機能ビットを命令デコーダ（２０８）に与えるステップをさらに含む、
請求項１から６のいずれかに記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項８】
前記命令デコーダ（２０８）内で前記開始ビット、前記終了ビットおよび前記機能ビットを検出して前記命令の境界を決定するステップをさらに含む、
請求項７に記載のスーパースカラマイクロプロセッサ（２００）内で可変バイト長命令をプリデコードするための方法。
【請求項９】
複数の可変バイト長命令がフェッチされて、前記可変バイト長命令のバイトに関連したプリデコードタグを生成するプリデコードユニット（２０２）と、
フェッチされた前記可変バイト長命令と生成された前記プリデコードタグをストアする命令キャッシュ（２０４）と、
前記命令キャッシュにストアされた複数の前記可変バイト長命令を前記プリデコードタグに従って受け取る複数のデコードユニット（２０８）とを含み、前記プリデコードタグは前記バイトが前記命令の境界であるか否かを示す値を有する境界ビットを含み、さらに前記境界ビットの前記値に依存する意味を持つ機能ビットを含む、
スーパースカラマイクロプロセッサ。
【請求項１０】
前記機能ビットの前記意味はさらに前記命令の別のバイトに関連するプリデコードビットの値にも依存する、請求項９に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１１】
前記機能ビットの前記意味はさらに先の命令バイトの対応の開始ビットの値にも依存する、請求項９に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１２】
前記機能ビットの前記意味はさらに命令の隣接するバイトが境界バイトであるか否かに依存する、請求項９に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１３】
前記機能ビットはオペレーションコードが命令の最初のバイトであるか否かを示す、請求項９に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１４】
前記境界ビットは前記バイトが前記命令の開始バイトであるか否かを示す値を有する開始ビットであり、前記複数のデコードユニット（２０８）は前記複数の可変バイト長命令に対応する指定された命令をデコードするように構成されており、さらに
前記命令キャッシュ（２０４）と前記複数のデコードユニット（２０８）との間に結合され前記複数のデコードユニット（２０８）にデコード可能な命令を与える命令整列ユニット（２０６）を含む、請求項９から１３のいずれかに記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１５】
前記命令整列ユニット（２０６）は前記命令を前記複数のデコードユニット（２０８）の１つに与えるように構成される、請求項１４に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１６】
前記複数の前記デコードユニット（２０８）の各々はｘ８６命令セットの予め定められたサブセットをデコードするように構成される、請求項１４または１５に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１７】
前記プリデコードタグはさらに前記バイトが前記命令の終了バイトであるか否かを示す終了ビットを含む、請求項１４、１５または１６に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１８】
前記命令整列ユニット（２０６）は前記複数のデコードユニット（２０８）の少なくとも１つに前記プリデコードタグを与えるように構成される、請求項１４、１５、１６または１７に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項１９】
前記複数のデコードユニット（２０８）の前記少なくとも１つは前記プリデコードタグを検出して前記命令の境界を決定するように構成される、請求項１８に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２０】
前記複数の可変バイト長命令は前記命令キャッシュ（２０４）内にラインとして編成され、１ラインは予め定められた数のバイトを含む、請求項９から１９のいずれかに記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２１】
前記複数のデコードユニット（２０８）からの出力信号を受けるように構成された複数の機能ユニット（２１２）をさらに含む、請求項９から２０のいずれかに記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２２】
前記複数の前記デコードユニット（２０８）からの前記出力信号はビットエンコード実行命令を含む、請求項２１に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２３】
前記複数のデコードユニット（２０８）および前記複数の機能ユニット（２１２）に結合された複数のリザベーションステーション（２１０）をさらに含み、前記複数のリザベーションステーション（２１０）は前記複数のデコードユニットからの前記出力信号を前記複数の前記機能ユニット（２１２）への発行前に一時的にストアするように構成される、請求項２１または２２に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２４】
専用の機能ユニット（２１２）が前記複数のデコードユニット（２０８）の各々に関連づけられる、請求項２１、２２または２３に記載のスーパースカラマイクロプロセッサ（２００）。
【請求項２５】
前記複数のデコードユニット（２０８）に結合され投機的に実行された命令の結果をストアするためのリオーダバッファ（２１６）をさらに含む、請求項９から２４のいずれかに記載のスーパースカラマイクロプロセッサ（２００）。
【発明の詳細な説明】
発明の背景
１．発明の分野
この発明はスーパースカラマイクロプロセッサに関し、特に高性能、高周波数スーパースカラマイクロプロセッサ内で可変バイト長コンピュータ命令をプリデコードすることに関する。
２．関連技術の説明
ＥＰ−Ａ−０６５１３２２は可変バイト長命令フォーマットを有するスーパースカラマイクロプロセッサのための公知の命令キャッシュを開示している。記載されたスーパースカラマイクロプロセッサは添付の請求項１のプリアンブルに従った可変バイト長命令をプリデコードするための方法を採用しており、添付の請求項１４のプリアンブルの特徴を有する。
スーパースカラマイクロプロセッサは多命令の並列実行を可能にすることにより、従来のスカラプロセッサを凌ぐ性能を達成することができる。ｘ８６系マイクロプロセッサが広く受入れられているため、ｘ８６命令を実行するスーパースカラマイクロプロセッサを開発するための努力がマイクロプロセッサ製造者により行なわれてきた。このようなスーパースカラマイクロプロセッサは比較的高い性能を達成しつつ、８０８６、８０２８６、８０３８６および８０４８６等の前の世代のマイクロプロセッサのために開発された既存の大量のソフトウェアとの旧版互換性を維持している点で有利である。
ｘ８６命令セットは比較的複雑で、複数個の可変バイト長命令を特徴とする。ｘ８６命令セットを例示する一般的なフォーマットが図１Ａに示される。図で示されるとおり、ｘ８６命令は１から５のオプションのプレフィックスバイト１０２、これに続くオペレーションコード（opcode）フィールド１０４、オプションのアドレスモード（Ｍｏｄ  ｒ／Ｍ）バイト１０６、オプションのスケール−インデックス−ベース（ＳＩＢ）バイト１０８、オプションの変位フィールド１１０およびオプションの即値データフィールド１１２からなる。
ｏｐｃｏｄｅフィールド１０４はある特定の命令の基本的動作を規定する。ある特定のｏｐｃｏｄｅのデフォルト動作は１または２以上のプレフィックスバイトによって修正できる。たとえば、１プレフィックスバイトを用いて命令のアドレスまたはオペランドサイズを変更し、メモリのアドレスに用いられるデフォルトセグメントをオーバライドするか、またはプロセッサが一連の動作をある回数繰返すように命令することができる。ｏｐｃｏｄｅフィールド１０４はもしあればプレフィックスバイト１０２に続き、その長さは１または２バイトである。アドレスモード（ＭＯＤＲＭ）バイト１０６は使用されるレジスタおよびメモリアドレスモードを特定する。スケール−インデックス−ベース（ＳＩＢ）バイトはどのレジスタがアドレス計算の基底値を含んでいるかを規定し、インデックスフィールドはどのレジスタがインデックス値を含んでいるかを特定する。スケールフィールドはインデックス値が加算される前にこれに乗算されるべき２のべき乗を特定するとともに、もし基底値に何か変位があればこれを特定する。次の命令フィールドはオプションの変位フィールド１１０であり、これは長さが１から４バイトである。変位フィールド１１０はアドレス計算に用いられる定数を含む。オプションの即値フィールド１１２もまた長さが１から４バイトであって、命令オペランドとして用いられる定数を含む。８０２８６では命令の最大長さを１０バイトに設定しており、一方８０３８６および８０４８６はともに最大１５バイトまでの命令長を可能としている。
図１Ｂを参照して、いくつかの異なる可変バイト長ｘ８６命令フォーマットが示される。最も短いｘ８６命令は長さが１バイトしかなく、フォーマット（ａ）で示されるように単一のｏｐｃｏｄｅバイトを含む。いくつかの命令では、ｏｐｃｏｄｅフィールドを含むバイトはまたフォーマット（ｂ）、（ｃ）および（ｅ）に示されるようにレジスタフィールドをも含む。フォーマット（ｊ）は２つのｏｐｃｏｄｅバイトを備えた命令を示す。フォーマット（ｄ）、（ｆ）、（ｈ）および（ｊ）においては、オプションのＭＯＤＲＭバイトがｏｐｃｏｄｅバイトに続く。即値データはフォーマット（ｅ）、（ｇ）、（ｉ）および（ｋ）ではｏｐｃｏｄｅバイトに続き、フォーマット（ｆ）および（ｈ）ではＭＯＤＲＭバイトに続く。図１Ｃはいくつかの可能なアドレスモードフォーマット（ａ）−（ｈ）を例示する。フォーマット（ｃ）、（ｄ）、（ｅ）、（ｇ）および（ｈ）はオフセット（すなわち変位）情報を備えたＭＯＤＲＭバイトを含む。フォーマット（ｆ）、（ｇ）および（ｈ）ではＳＩＢバイトが用いられている。
ｘ８６命令セットの複雑さのために、高性能のｘ８６互換スーパースカラマイクロプロセッサの実現には困難な問題が生じる。問題の１つは、適正なデコードが行なわれる前にこのようなプロセッサの並列接続命令デコーダに対して命令が整列されなければならない、という事実から生じる。ほとんどのＲＩＳＣ命令フォーマットとは対照的に、ｘ８６命令セットは可変バイト長命令からなり、１ライン内の連続した命令の開始バイトは必ずしも等間隔になっておらず、またラインごとの命令数も固定されていない。この結果、簡潔な固定長シフトロジックを用いることそれ自体では命令の整列の問題を解決することができない。
複数個の可変バイト長命令を並列に迅速に整列させ、デコードしかつ実行するという問題の解決を支援するために、命令プリデコード技術を採用するスーパースカラマイクロプロセッサが提案されている。このようなスーパースカラマイクロプロセッサの１つでは、命令が外部メインメモリから命令キャッシュ内に書込まれると、プリデコーダがいくつかのプリデコードビット（集合的にプリデコードタグと称される）を各バイトに付加する。これらのビットはあるバイトがｘ８６命令の開始および／または終了バイトであるか否か、ｘ８６命令を実現するのに必要とされるマイクロ命令の数、およびｏｐｃｏｄｅとプレフィックスの位置を示す。命令がキャッシュからフェッチされると、スーパースカラマイクロプロセッサは各命令を１または２個以上のＲＯＰＳと称されるマイクロ命令に変換する。ＲＯＰＳはそれらが固定長で、簡単な一貫性のある符号化を伴うという点で、ＲＩＳＣ命令と類似している。ｘ８６命令は命令キャッシュの中で既に、どこで命令が開始し、どこで終了し、各々がいくつのＲＯＰＳを必要とするかを示すプリデコードビットをタグとして付与されているため、バイトキューが命令の境界の位置を突き止め、各ｘ８６命令を１または２以上のＲＯＰＳに変換しかつ並列命令デコーダに固定数のＲＯＰＳを提供することは比較的簡単な作業である。
上で述べたプリデコード技術は大部分は成功しているが、命令キャッシュアレイ内の利用可能な記憶空間の５０％以上をプリデコードビットに割当てなければならない。これは命令コードのための命令キャッシュ内の記憶量を制限しおよび／またはダイサイズの増加のためにプロセッサの費用を増大させる。
発明の要約
上で概略を述べた問題の多くの部分が、この発明に従った可変バイト長命令をプリデコードするための方法によって解決される。一実施例では、可変バイト長命令をそれらが命令キャッシュ内に記憶されるに先立ってプリデコードすることができる、プリデコードユニットが設けられる。プリデコードユニットは各命令バイトについて複数個のプリデコードビットを発生するように構成される。各命令バイトに関連付けられた複数個のプリデコードビットは集合的にプリデコードタグと称される。その後命令整列ユニットがプリデコードタグを用いて可変バイト長命令を複数個のデコードユニットにディスパッチし、これらはスーパースカラマイクロプロセッサ内に固定された発行位置を形成する。
ある具体例では、プリデコードユニットは命令コードの各バイトに関連して３個のプリデコードビット、すなわち「開始」ビット、「終了」ビットおよび「機能」ビットを発生する。開始ビットは関連のバイトが命令の最初のバイトである場合にセットされる。同様に、終了ビットはそのバイトが命令の最後のバイトである場合にセットされる。機能ビットに専用の意味を関連付けるのではなく、プリデコードユニットは、機能ビットが持つまたはそれに関連する意味がその状態（すなわち機能ビットがセットされているか否か）およびそのバイトの開始ビットの状態に依存するように構成されている。機能ビットの意味はさらに、先行する命令バイトの開始ビットの状態にも依存する。
たとえば、ある実現例においてある特定のバイトの開始ビットがセットされていれば、機能ビットは、その命令が直接デコード可能な「ファストパス」命令またはＭＲＯＭ命令（マイクロコードを介して逐次化されるべき命令）であることを示す。他方で、ある特定のバイトの開始ビットがクリアされておりかつそのバイトが開始バイト（その開始ビットがセットされている命令バイト）に直接続いている場合は、機能ビットはｏｐｃｏｄｅが命令の最初のバイトであるか否か、またはプレフィックスが命令の最初のバイトであるか否かを示す。もしそのバイトの開始ビットがクリアされており、そのバイトが開始バイトに続くものでない場合、機能ビットは関連のバイトがＭＯＤＲＡＭまたはＳＩＢバイト、または変位または即値データであることを示す。
プリデコードユニットからのプリデコード情報を利用することで、命令整列ユニットは比較的少ない数のカスケードされた論理ゲートのレベルで実現でき、非常に高い周波数の動作に対処することができる。命令整列ユニットからデコードユニットをさらに比較的少ないパイプライン段で完成させることができる。加えて、可変バイト長命令が整列される複数のデコードユニットはプリデコードタグを利用して、比較的高速の命令デコードを達成する。最後に、プリデコードユニットはある特定のプリデコードタグの機能ビットの意味が開始ビットの状態に依存するように構成されているため、比較的少ない数のプリデコードビットにより、比較的大量のプリデコード情報を運ぶことができる。したがってこれは性能を犠牲にすることなく、命令キャッシュのサイズを減じることを可能にする。
さらに、機能ビットによって保持される情報で、デコードユニットはｏｐｃｏｄｅ、変位、即値、レジスタおよびスケールインデックスバイトの正確な位置を知ることができる。したがって、デコードユニットが命令バイトをシリアルに走査する必要はない。加えて、機能ビットはデコードユニットが８ビット線形アドレスを（加算回路を介して）迅速に計算し、スーパースカラマイクロプロセッサ内の他のサブユニットがこれを使用することを可能にする。したがって、比較的迅速なデコードが達成され、高い性能に対応することができる。
大まかに言えば、この発明はスーパースカラマイクロプロセッサ内で可変バイト長命令をプリデコードするための方法であって、命令のあるバイトが開始バイトであるか否かを示す開始ビットを発生するステップと、前記命令の前記バイトが終了バイトであるか否かを示す終了ビットを生成するステップと、前記開始ビットの値に依存する意味を有する機能ビットを発生するステップとを含む、方法を提供しようとするものである。
【図面の簡単な説明】
発明の他の目的および利点は添付の図面を参照しながら以下の詳細な説明を読むことによって明らかとなるであろう。
図１Ａは包括的ｘ８６命令セットフォーマットを例示する図である。
図１Ｂはいくつかの異なる可変バイト長ｘ８６命令フォーマットを例示する図である。
図１Ｃはいくつかの可能なｘ８６アドレスモードフォーマットを例示する図である。
図２は６個のデコードユニットに多命令を送る命令整列ユニットを含むスーパースカラマイクロプロセッサのブロック図である。
図３は命令整列ユニットと６個のデコードユニットのブロック図である。
図４Ａ−４ＣはＭＲＯＭ命令の実行を示すブロック図である。
発明にはさまざまな修正や変形が可能であるが、その具体的な実施例を例として図面に示し以下で詳細に説明する。しかしながら、図面と詳細な説明は発明を開示された特定の形に制限するものではなく、逆に、意図するところは添付のクレームに規定されるこの発明の範囲にあるすべての修正、均等物および変形例を包含することである。
発明の詳細な説明
次に図２を参照して、この発明の方法に従って動作するプリデコードユニット２０２を含むスーパースカラマイクロプロセッサ２００のブロック図が示される。図２の実施例で例示されるように、スーパースカラマイクロプロセッサ２００はプリデコードユニット２０２と、命令キャッシュ２０４に結合された分岐予測ユニット２２０とを含む。プリフェッチユニット２０３がプリデコードユニット２０２に結合される。命令整列ユニット２０６が命令キャッシュ２０４と複数個のデコードユニット２０８Ａ−２０８Ｆ（集合的にデコードユニット２０８と称する）との間に結合される。各デコードユニット２０８Ａ−２０８Ｆはそれぞれのリザベーションステーション２１０Ａ−２１０Ｆ（集合的にリザベーションステーション２１０と称する）に結合され、各リザベーションステーション２１０Ａ−２１０Ｆはそれぞれの機能ユニット２１２Ａ−２１２Ｆに結合される（集合的に機能ユニット２１２と称される）。デコードユニット２０８、リザベーションステーション２１０および機能ユニット２１２はさらにリオーダバッファ２１６、レジスタファイル２１８およびロード／ストアユニット２２２に結合される。データキャッシュ２２４は最後にロード／ストアユニット２２２に結合されて示され、ＭＲＯＭユニット２０９は命令整列ユニット２０６に結合されて示される。
一般に、命令キャッシュ２０４は命令デコードユニット２０８に送られる前、に命令を一時的にストアするために設けられる高速キャッシュメモリである。一実施例では、命令キャッシュ２０４は最大で３２キロバイトの、各々が１６バイトのラインで編成される（ここで各バイトは８ビットからなる）、命令コードをキャッシュするように構成されている。。動作の間、命令コードがメインメモリ（図示せず）からプリフェッチユニット２０３を介してプリフェッチコードにより命令キャッシュ２０４に与えられる。命令コードの各バイトについて、命令キャッシュ２０４はさらにそれに関連するプリデコードタグをストアする。ここで注目されるのは、命令キャッシュ２０４がセットアソシアティブ、フルアソシアティブ、またはダイレクトマップ構成のいずれかで実現できることである。
プリフェッチユニット２０３はメインメモリから命令コードをプリフェッチして命令キャッシュ２０４内に記憶するために設けられている。一実施例では、プリフェッチユニット２０３はメインメモリから命令キャッシュ２０４へ６４ビット幅コードをバーストするように構成されている。さまざまな具体的なコードプリフェッチ技術およびアルゴリズムをプリフェッチユニット２０３に採用できることが理解されるであろう。
プリフェッチユニット２０３がメインメモリから命令をフェッチすると、プリデコードユニット２０２は命令コードの各バイトに関連する３個のプリデコードビットを発生する。すなわち「開始」ビット、「終了」ビットおよび「機能」ビットである。
各バイトの開始ビットおよび終了ビットは命令の境界を示すものである。各バイトの機能ビットはそのバイトまたは命令に関するさらなる情報、たとえば命令がデコードユニット２０８によって直接デコードできるか否か、または命令がＭＲＯＭユニット２０９（以下でより詳細に説明する）によって制御されるマイクロコード手続を起動することで実行されなければならないか、またはバイトがＭＯＤＲＭまたはＳＩＢバイトであるか、またはバイトが変位または即値データであるか、等の情報を持っている。機能ビットはまた、ｏｐｃｏｄｅバイトのロケーションを示すために用いられてもよい。以下の説明から、特定の命令バイトの機能ビットにエンコードされた意味は関連の開始ビットに依存することが理解されるであろう。
表１はプリデコードユニット２０２によって実現されるプリデコードタグのエンコードの一例を示す。表に示されるとおり、もし所与のバイトが命令の最初のバイトであれば、そのバイトがメインメモリからフェッチされ命令キャッシュ２０４にストアされると、プリデコードユニット２０２によりそのバイトの開始ビットがセットされる。もしそのバイトが命令の最後のバイトであれば、そのバイトの終了ビットがセットされる。もしある特定の命令を直接デコードユニットによってデコードすることができない場合には、その命令の最初のバイトに関連する機能ビットがセットされる。他方で、もしその命令をデコードユニット２０８によって直接デコードすることが可能であれば、その命令の最初のバイトに関連する機能ビットがクリアされる。ある特定の命令の第２のバイトの機能ビットは、もしｏｐｃｏｄｅが最初のバイトであればクリアされ、もしｏｐｃｏｄｅが２番目のバイトである場合にはセットされる。ｏｐｃｏｄｅが２番目のバイトであるような状況では、最初のバイトはプレフィックスバイトであることが注目される。命令バイト番号３−８の機能ビット値は、バイトがＭＯＤＲＭまたはＳＩＢバイトであるか否か、およびバイトが変位または即値データを含むか否かを示す。
0003732233.tif 000002
上の表１によれば、スーパースカラマイクロプロセッサ２００のプリデコードユニット２０２は命令コードの各バイトについて機能ビットを発生するように構成されることが注目される。機能ビットの意味はそのバイトに関連した開始ビットの値に依存する。表１に例示されたスキームをエンコードするために、機能ビットの意味はさらに、先行する命令バイトに関連する開始ビットの値にも依存する。
上で述べられた特定の具体例について、もしそのバイトの開始ビットがセットされている場合には、機能ビットが、命令が直接デコード可能な命令であるか否か、またはＭＲＯＭ命令（以下でさらに説明する）であるか否かを示すことが理解されるであろう。命令コードのある特定のバイトに関連する開始ビットがクリアされ、開始ビットがセットされている命令コードのバイトに直接続いている場合には、機能ビットはｏｐｃｏｄｅが最初のバイトであるか、またはプレフィックスが最初のバイトであることを示す。さらに、命令コードのあるバイトの開始ビットがクリアされ、先行するバイトの開始ビットもまたクリアされている場合には、機能ビットはそのバイトがＭＯＤＲＭまたはＳＩＢバイトであること、またはバイトが変位または即値データであることを示す。特定の命令の後続のバイトでは、バイト３−８においてセットされた２番目の機能ビットが即値データを示す。
上で説明されたようなスーパースカラマイクロプロセッサ２００によって採用されるプリデコード方式によれば、命令コードの各バイトに関連するプリデコードタグが発生する。プリデコードタグと命令コードとはともに命令キャッシュ２０４にストアされ、その後スーパースカラマイクロプロセッサによって処理される。機能ビットの意味はある特定のバイトの開始ビットおよび先行するバイトの開始ビットに依存するため、命令整列ユニット２０６およびデコードユニット２０８について比較的大量のプリデコード情報を伝えることができ、比較的高速の整列およびデコード命令を達成することができる。プリデコードタグ内で必要とされるビット数は比較的小さいので、性能を犠牲にすることなく、命令キャッシュ２０４の必要なサイズを減じることができる。
さらに、機能ビットに保持される情報で、デコードユニットはｏｐｃｏｄｅ、変位、即値、レジスタおよびスケールインデックスバイトの正確な位置を知る。したがって、デコードユニットが命令バイトを順次に走査する必要はない。加えて、機能ビットはデコードユニットが８ビットの線形アドレスを（加算回路を介して）迅速に計算し、スーパースカラマイクロプロセッサ内の他のサブユニットが使用することを可能にする。したがって、比較的高速なデコードが達成され、高い性能に対処することができる。
先に述べたように、一実施例ではｘ８６命令セットのある命令がデコードユニット２０８によって直接デコードされ得る。これらの命令は「ファストパス」命令と称される。ｘ８６命令セットの残りの命令は「ＭＲＯＭ命令」と称される。ＭＲＯＭ命令はＭＲＯＭユニット２０９を起動することで実行される。ＭＲＯＭ命令に遭遇すると、ＭＲＯＭユニット２０９はこの命令を規定されたファストパス命令のサブセットに構文解析して逐次化し、所望の動作を引き起こす。ファストパス命令として分類分けされたｘ８６命令の例と、ファストパスおよびＭＲＯＭ命令の処理態様の説明は以下でさらに与えられる。
命令整列ユニット２０６は命令キャッシュ２０４からの可変バイト長命令をチャネリングまたは「経路分け」（funnel）してデコードユニット２０８Ａ−２０８Ｆによって形成される固定された発行位置に与えるために設けられる。図３−５と関連して説明されるとおり、命令整列ユニット２０６は命令キャッシュ２０４によって境界を定められるライン内の命令の開始バイトのロケーションに依存して、命令コードを指定されたデコードユニット２０８Ａないし２０８Ｆにチャネリングするように構成されている。一実施例では、そこに所与の命令がディスパッチされる特定のデコードユニット２０８Ａ−２０８Ｆはその命令の開始バイトのロケーションとともに、もしあれば、先行する命令の開始バイトのロケーションにも依存する。あるバイトロケーションから始まる命令はさらに、予め定められた一の発行位置のみに発行されるように制限される。具体的な詳細は以下のとおりである。
命令キャッシュ２０４からデコードユニット２０８への命令の整列の説明に入る前に、図２の例示のスーパースカラマイクロプロセッサ２００で採用される他のサブシステムに関する一般的な局面について説明する。図２の実施例では、デコードユニット２０８の各々は上で述べた予め定められたファストパス命令をデコードするためのデコード回路を含む。さらに、各デコードユニット２０８Ａ−２０８Ｆは変位および即値データをリザベーションステーションユニット２０１Ａ−２０１Ｆに経路付ける。デコードユニット２０８からの出力信号は機能ユニット２０１に対するビットエンコード実行命令と、オペランドアドレス情報、即値データおよび／または変位データを含む。
図２のスーパースカラマイクロプロセッサは追い越し実行をサポートしており、したがってレジスタ読出および書込動作のためのもともとのプログラムシーケンスを守るために、レジスタのリネームを実現するために、投機的な命令の実行と分岐予測の誤りからの回復を行なうために、そして、正確な例外を容易にするために、リオーダバッファ２１６を含む。当業者には理解されるであろうが、リオーダバッファ２１６内の一時的記憶ロケーションがレジスタの更新を含む命令をデコードする際に予約され、これによって投機的なレジスタの状態を記憶する。リオーダバッファ２１６は、投機的な結果が有効にされレジスタファイルに書込まれるとバッファの「最後部」に移動して、これによってバッファの「頭部」に新たなエントリの余地を与えるような、先入れ先出し構成で実現されてもよい。リオーダバッファ２１６の他の具体的な構成もまた可能であり、以下で説明される。分岐予測が不正確である場合、予測を誤った経路に沿った投機的に実行された命令の結果は、それらがレジスタファイル２１８に書込まれる前に、バッファ内で無効にすることができる。
デコードユニット２０８Ａ−２０８Ｆの出力で与えられる即値データおよびビットエンコード実行命令は直接、それぞれのリザベーションステーションユニット２１０Ａ−２１０Ｆに経路付け（route）られる。一実施例では、各リザベーションステーションユニット２１０Ａ−２１０Ｆは対応の機能ユニットへの発行を待つ最大で３個の未決の（pending）命令について、命令情報を保持することができる（ビットエンコード実行ビットおよびオペランド値、オペランドタグおよび／または即値データ）。ここで注目されるのは、図２の実施例では、各デコードユニット２０８Ａ−２０８Ｆが専用のリザベーションステーションユニット２１０Ａ−２１０Ｆと関連付けられ、各リザベーションステーションユニット２１０Ａ−２１０Ｆが同様に専用の機能ユニット２１２Ａ−２１２Ｆに関連付けられていることである。したがって、６個の専用の「発行位置」がデコードユニット２０８、リザベーションステーションユニット２１０および機能ユニット２１２で形成される。デコードユニット２０８Ａを介して発行位置０に整列されかつディスパッチされた命令はリザベーションステーションユニット２１０Ａを通り、その後機能ユニット２１２Ａに渡されて実行される。同時に、デコードユニット２０８Ｂに整列されかつ送られた命令はリザベーションステーションユニット２１０Ｂに渡され、さらに機能ユニット２１２Ｂに渡され、以下同様である。
ある特定の命令をデコードする際に、もし必要とされるオペランドがレジスタロケーションである場合には、レジスタアドレス情報がリオーダバッファ２１６とレジスタファイル２１８とに同時に経路付けられる。当業者には理解されるであろうが、ｘ８６レジスタファイルは８個の３２ビットリアルレジスタを含み（典型的にはＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰと称される）、これらは以下に詳細に説明するとおりである。リオーダバッファ２１６はこれらのレジスタの内容を変更する結果のための一時的記憶ロケーションを含んでおり、これによって追越し実行を可能にする。リオーダバッファ２１６の一時的記憶ロケーションは各命令について予約されており、これはデコードされると、リアルレジスタのうち１個の内容を修正する。したがって、あるプログラムを実行する間のさまざまな点で、リオーダバッファ２１６の１または２以上のロケーションには、投機的に実行された所与のレジスタの内容が含まれているかもしれない。所与の命令のデコードに続いて、リオーダバッファ２１６が所与の命令内のオペランドとして用いられるレジスタに割当てられた先のロケーションを有すると判断された場合には、リオーダバッファ２１６は対応のリザベーションステーションに以下のうちのいずれかを送る。すなわち１）最も最近に割当てられたロケーションの値、または２）最終的に先の命令を実行することとなる機能ユニットによって値が未だ生成されていない場合には、最も最近に割当てられたロケーションに対するタグ。もしリオーダバッファが所与のレジスタのために予約されたロケーションを有する場合には、オペランド値（タグ）はレジスタファイル２１８からではなく、リオーダバッファ２１６から与えられる。リオーダバッファ２１６内に必要とされるレジスタのために予約されたロケーションがない場合には、値はレジスタファイル２１８から直接得られる。オペランドがメモリロケーションに対応する場合、オペランド値はロード／ストアユニット２２２を介してリザベーションステーションユニットに与えられる。
好適なリオーダバッファ実現に関する詳細はマイク  ジョンソン（Mike Johnson）による「スーパースカラマイクロプロセッサの設計」（“Superscalar Microprocessor Design”）、Prentice-Hall、Englewood Cliffs、New Jersey、１９９１、および係属中の、共通に譲受された、ウイットら（Witt, et al.）の、平成６年１０月２９日出願の「スーパースカラマイクロプロセッサ」と題された、特願平６−２６３３１７（特開平７−１８２６０）にある。これらの文書は引用によりその全体をここに援用する。
リザベーションステーションユニット２１０Ａ−２１０Ｆは対応の機能ユニット２１２Ａ−２１２Ｆによって投機的に実行されるべき命令情報を一時的にストアするために設けられている。先に述べたとおり、各リザベーションステーションユニット２１０Ａないし２１０Ｆは最大で３個の未決の命令について命令情報をストアすることができる。
６個のリザベーションステーション２１０Ａ−２１０Ｆの各々は対応の機能ユニットによって投機的に実行されるべきビットエンコード実行命令およびオペランド値をストアするためのロケーションを含む。もし特定のオペランドが利用可能でない場合、このオペランドに対するタグがリオーダバッファ２１６から与えられ、結果が発生する（すなわち先の命令の実行が完了することによって）まで、対応のリザベーションステーション内にストアされる。注目されるのは、機能ユニット２１２Ａ−２１２Ｆのうち１つによって命令が実行されると、この命令の結果がその結果を待っているリザベーションステーションユニット２１０Ａ−２１０Ｆのいずれかに直接渡され、同時に、この結果が渡されてリオーダバッファ２１６を更新することである（この技術は通例「結果ディスパッチ」と称される）。いずれかの必要とされるオペランドの値が利用可能にされると、命令が実行のために機能ユニットに発行される。すなわち、リザベーションステーションユニット２１０Ａ−２１０Ｆのうち１つの中の未決の命令に関連するオペランドが、リオーダバッファ２１６内の先の結果の値のロケーションのタグを付けられており、必要とされるオペランドを修正する命令にこれが対応する場合には、この命令は先の命令に対するオペランドの結果が得られるまで、対応の機能ユニット２１２には発行されない。したがって、命令が実行される順序はもともとのプログラム命令シーケンスの順序と同じではないかもしれない。リオーダバッファ２１６は書込後読出の依存が生じるような状況においてもデータの一貫性が維持されることを保証する。
一実施例では、機能ユニット２１２の各々は加算および減算の整数算術演算およびシフト、回転、論理演算および分岐動作を行なうように構成される。ここで注目されるのは、浮動小数点ユニット（図示せず）もまた浮動小数点演算に対処するために用いられ得るということである。
機能ユニット２１２の各々はまた、分岐予測ユニット２２０に対し条件付分岐命令の実行に関する情報を提供する。もし分岐予測が不正確である場合には、分岐予測ユニット２２０は予測誤り分岐後の命令実行パイプラインに入った命令をフラッシュし、プリフェッチ／プリデコードユニット２０２に命令キャッシュ２０４またはメインメモリから必要とされる命令をフェッチさせる。このような状況では、もともとのプログラムシーケンス内の命令であって予測誤り分岐命令の後に生じた結果は、投機的に実行されロード／ストアユニット２２２およびリオーダバッファ２１６内に一時的にストアされていたものも含め、廃棄される。好適な分岐予測メカニズムの構成例は周知である。
機能ユニット２１２によって生成された結果は、レジスタ値が更新されていればリオーダバッファ２１６に送られ、メモリロケーションの内容が変更されていればロード／ストアユニット２２２に送られる。もし結果がレジスタにストアされるべき場合には、リオーダバッファ２１６はその結果を、命令がデコードされたときにレジスタの値のために予約されていたロケーションにストアする。先に述べたとおり、結果は、未決の命令が、必要とされるオペランド値を得るために先の命令の実行の結果を待っている場合、リザベーションステーションユニット２１０Ａ−２１０Ｆにもまたブロードキャストされる。
一般に、ロード／ストアユニット２２２は機能ユニット２１２Ａ−２１２Ｆとデータキャッシュ２２４との間のインターフェイスを提供する。一実施例では、ロード／ストアユニット２２２は未決のロードまたはストアのためのデータとアドレス情報とについて８個のストアロケーションを備えたストアバッファを伴って構成される。機能ユニット２１２はロード／ストアユニット２２２へのアクセスの調停を行なう。バッファが一杯である場合（full）、機能ユニットはロード／ストアユニットが未決のロードまたはストア要求情報のためのあきを有するようになるまで待たなければならない。ロード／ストアユニット２２２はまた未決のストア命令に対しロード命令の依存性チェックを行ない、データの一貫性が維持されることを確実にする。
データキャッシュ２２４はロード／ストアユニット２２２とメインメモリサブシステムとの間を転送されるデータを一時的にストアするために設けられる高速キャッシュメモリである。一実施例では、データキャッシュ２２４は最大で８キロバイトのデータを記憶する容量を有する。データキャッシュ２２４は１セットのアソシアティブ構成を含む、さまざまな具体的なメモリ構成で実現され得ることが理解されるであろう。
命令キャッシュ２０４から命令整列ユニット２０６を介してデコードユニット２０８に至る命令のディスパッチの詳細が以下に考察される。図３は命令整列ユニット２０６の一実施例の内部と命令キャッシュ２０４から与えられる命令コードのラインに関するデコードユニット２０８Ａ−２０８Ｆの内部とを示すブロック図である。先に述べたように、命令整列ユニット２０６は可変バイト長命令（この場合ファストパス命令と称されるある種のｘ８６命令）をデコードユニット２０８Ａ−２０８Ｆにチャネリングするように構成されている。
図３に示されるとおり、ラッチユニット３０２は命令キャッシュ２０４の出力バッファセクション３０１の一部として組入れられる。ラッチユニット３０２は命令キャッシュ２０４の記憶アレイ（図３では示されない）から与えられる命令コードの１ラインがデコードユニット２０８に送られる前に、これをストアすることが可能である。
図３の命令整列ユニット２０６はラッチ３０２とデコードユニット２０８との間に結合されたマルチプレクサチャネル３０４Ａ−３０４Ｇと称される複数個のマルチプレクサ回路を含む。マルチプレクサコントロール回路３０６がさらにマルチプレクサチャネル３０４Ａ−３０４Ｇの各々に結合されて示される。この実施例では、デコードユニット２０８Ａ−２０８Ｆの各々が、入力がそれぞれのマルチプレクサチャネル３０４Ａ−３０４Ｆに結合された関連の命令デコーダ３１８Ａ−３１８Ｆを含む。各デコードユニット２０８Ａ−２０８Ｆはさらにそれぞれの変位／即値データバッファ３３０Ａ−３３０Ｆおよびそれぞれの命令発行ユニット３４０Ａ−３４０Ｆを含む。
動作の間、実行されるべき命令コードのラインが命令キャッシュ２０４の記憶アレイからラッチユニット３０２に与えられる。命令キャッシュ２０４内の命令コードの各バイトは開始ビット、終了ビットおよび機能ビットを含む対応のプリデコードタグと関連付けられる。命令コードのラインがラッチユニット３０２に与えられると、各バイトに関連するプリデコードタグがマルチプレクサ制御回路３０６の入力に与えられる。以下で詳細に述べるように、ラッチユニット３０２内の命令コードの各ラインに対応するプリデコードタグに依存して、マルチプレクサコントロール回路３０６は、命令バイトが指定された命令デコーダ３１８Ａ−３１８Ｆに選択的に経路付けられるようにマルチプレクサチャンネル３０４Ａ−３０４Ｇを制御する。デコードユニット２０８Ａ−２０８Ｆによって形成される命令パス（経路）は発行位置と称される。マルチプレクサチャネル３０４Ａ−３０４Ｇを介する命令コードのチャネリングはラッチユニット３０２によって表わされるように各ラインに関連する各命令に付随する開始バイトのロケーションに依存する。図３の実施例では、最初の５個のマルチプレクサチャネル３０４Ａ−３０４Ｆの各々はラッチユニット３０２からの命令コードの４個の連続したバイトをそれぞれの命令デコーダ３１８Ａ−３１８Ｆに経路付ける。マルチプレクサチャネル３０４Ｇは命令コードの最大３個の連続したバイトを命令デコーダ３１８にチャネリングすることが可能である。
以下の表２は開始バイトがそれによってチャネリングされ得る、可能なマルチプレクサチャネル３０４Ａ−３０４Ｇを例示する。上で述べたとおり、命令コードのチャネリングは所与のライン内の開始バイトのロケーションに依存する。注目されるのは、マルチプレクサチャネル３０４Ａ−３０４Ｆの各々がそれに割当てられたもののうち最下位の開始バイトを、この開始バイトが下位のマルチプレクサチャネルによる経路付けのために選択されていない限り、経路付けするように構成されていることである。
0003732233.tif 000003
表２を参照して、マルチプレクサチャネル３０４Ａはバイト位置０−２に位置する開始バイトをデコードユニット３１８Ａに経路付けすることが可能である。マルチプレクサチャネル３０４Ｂはバイト位置１−４にある開始バイトをデコードユニット３１８Ｂに経路付けすることが可能である。マルチプレクサチャネル３０４Ｃはバイト位置３−８の開始バイトをデコードユニット２０８Ｃに転送することが可能である。同様に、マルチプレクサチャネル３０４Ｄはバイト位置６−１０にある開始バイトをデコードユニット２０８Ｄに転送することが可能であり、マルチプレクサチャネル３０４Ｅはバイト位置９−１２にある開始バイトをデコードユニット２０８Ｅに転送することが可能である。最後に、マルチプレクサチャネル３０４Ｆはバイト位置１２−１５にある開始バイトをデコードユニット３１８Ｆに転送することが可能である。バイト位置１３−１５に位置付けられた開始バイトは代替的にはマルチプレクサチャネル３０４Ｇを介して、不完全な命令（すなわち次のラインまで続く命令）のラッピング（wrap）に用いられる７番目の発行位置に経路付けられてデコードのための次のキャッシュラインとされてもよい。以下にさらに説明されるように、マルチプレクサチャネル３０４Ｇを介して経路付けられた命令バイトはラッチユニット３０２内でその命令の残りのバイトが入手可能になったときに、次のクロックサイクルで命令デコーダ３０４Ａに与えられる。
もし命令が後続のキャッシュラインにラッピングされると、命令の指定された位置へのディスパッチは次のラインに現われる命令の残りのバイトの性質に依存する。単に変位または即値データが次のキャッシュラインにラップアラウンドする状況では、この即値または変位データがマルチプレクサチャネル３０４Ａを介して変位／即値データバッファ３３０Ｆに与えられる。ここで注目されるのは、この状況において、この命令の先行するバイト（先のキャッシュラインに現われるもの）が先のクロックサイクルの間命令デコーダ３１８Ｆにディスパッチされるであろうという点である。プレフィックス、ｏｐｃｏｄｅ、ＭＯＤＲＭおよび／またはＳＩＢバイトが次のキャッシュラインにラップアラウンドするような状況では、先行するラインからの命令情報はマルチプレクサチャネル３０４Ｇを介して命令デコーダ３１８Ａに経路付けられ、次のクロックサイクルの間に命令コードの残りの部分とマージされる。
ある１ラインの所与の命令がディスパッチされ得る発行位置の可能な数を制限することによって、命令整列ユニット２０６を実現するのに必要とされるカスケードされた論理レベルの数がうまく減じられることが分かるだろう。さらに、あるライン中のバイトロケーションの選択されたサブセットの１個にある開始バイトを有する命令のディスパッチを単一の発行位置（バイト位置５および１１）のみに限定することで、命令整列のためのカスケードされた論理レベルの数がさらに減じられる。したがって、上述の命令整列ユニット２０６はパイプライン段当りのゲートの数が比較的少ないスーパースカラマイクロプロセッサの実現を可能にし、それによって非常に高い周波数の動作に対処することが可能になる。比較的長い命令については、発行位置がスキップされるものの、他の発行位置がキャッシュライン内の残りの命令に利用できるため、比較的高い性能を依然として達成することができる。
定義された（defined）ファストパス命令は長さが最大８バイトであって、単一のプレフィックスバイトを含み得る。注目されるのは、定義されたファストパス命令を単一のプレフィックスバイトのみに制限することによって、いかなるファストパス命令のバイト４ないし７も、もしあれば、変位および／または即値データのみを含むようにすることができる、ということである。したがって、命令が４バイトを超えるような状況では、命令の最初の４バイトがその命令の開始バイトに割当てられたマルチプレクサチャネルを介して経路付けられる。その命令の残りのバイトは次の発行位置のマルチプレクサチャネルを通ってチャネリングされる。このような状況では、この命令の残りのバイトを受ける発行位置の命令デコーダ（すなわち命令デコーダ）はその最初のバイト位置で開始ビットの不在を検出し、これにしたがってデータを先行する発行位置の変位／即値データバッファ３３０に渡し、ＮＯＯＰ命令を出す。
したがって、ある命令の開始バイトがラッチユニット３０２のバイト位置０に位置付けられている場合、そのバイトはバイト位置１、２および３にある次の３個の連続したバイトとともにデコードユニット２０８Ａに与えられる。もし次の開始バイトが位置２にある場合（すなわち最初の命令が長さ２バイトである場合）、バイト２−５はマルチプレクサチャネル３０４Ｂを介してデコードユニット２０８Ｂに経路付けられる。図３の実施例では、各命令デコーダ３１８Ａ−３１８Ｆは一時に１個の命令しかデコードできない。したがって、１以上の命令の開始バイトがたとえば命令デコーダ３１８Ａに与えられたとしても、デコードされるのは最初の命令だけである。所与の命令デコーダ内のさらなる命令に対応する、最初の終了バイトを超えたバイトは無関係（extraneous）であって、実質上無視される。注目されるのは、命令整列ユニット２０６のマルチプレクサチャネル３０４が、これに代えて、命令の開始および終了プリデコードビットにしたがって単一の命令（またはその部分）のみが所与の命令デコーダ３１８にチャネリングされるように構成できるという点である。
上述のことにしたがって、もし最初の命令がバイト位置０で開始する場合、バイト０−３が命令デコーダ３１８Ａに与えられる。もし命令が４バイトより長ければ、ラッチユニット３０２のバイト４−７がマルチプレクサチャネル３０４Ｂを介して命令デコーダ３１８Ｂに与えられ、これはその後データを変位／即値データバッファ３３０Ａに渡す。この状況では、マルチプレクサチャネル３０８Ｃはコード内に現われる次の開始バイトを命令デコーダ３１８Ｃに経路付ける。他方で、バイトロケーション０で開始する最初の命令が４バイト以下である場合、次の命令は第２の命令の開始バイトで始まる、マルチプレクサチャネル３０４Ｂを介して経路付けられる。もし命令が４バイト長より大きければ、その命令に対応する即値または変位データがマルチプレクサチャネル３０４Ｃを介して変位／即値データバッファ３３０Ｂに経路付けられる。残りのマルチプレクサチャネルも同様に動作する。
もし即値または変位データが先のラインで開始する命令から後続のラインにラップアラウンドされる場合には、このデータは、即値または変位データがラッチユニット３０２内で利用可能である場合、マルチプレクサチャネル３０４Ａを介して変位／即値データバッファ３４０Ｆに与えられる。さらに注目されるのは、命令デコードが行われないことである。なぜなら変位および即値データにはデコードが不要だからである。後続のラインの最初の命令はしたがってマルチプレクサチャネル３０４Ｂを介して命令デコーダ３１８Ｂに経路付けられる。
同様に注目されるのは、プレフィックス、ｏｐｃｏｄｅ、ＭＯＤＲＭおよび／またはＳＩＢ情報が先のライン上で開始する命令からラップアラウンドされる場合には、マルチプレクサチャネル３０４Ｇが命令の先行する部分を命令デコーダ３１８Ａに経路付けることであり、この場合（次のクロックサイクルの間ラッチユニット３０２内の最初の開始バイトに対応する）次の命令がマルチプレクサチャネル３０４Ｂを介して命令デコーダ３１８Ｂに経路付けられる。
以下の例でよりよく理解されるとおり、所与の開始バイトが与えられるべき可能な発行位置のいずれもが、先の命令によってこれらの発行位置が占有されているために利用できない場合が生じる。このような状況が生じると、その命令とそれに続くいかなる命令も、ディスパッチのためには次のクロックサイクルまでホールドされなければならない。
以下の表３にｘ８６命令の条件の例が示される。命令１ないし７と命令８の最初のバイトがキャッシュライン１内に示される。キャッシュライン２は命令８の２番目のバイトで始まり、さらに命令９ないし１６を含む。
0003732233.tif 000004
以下の表４は上の表３の命令のシーケンスが命令整列ユニット２０６によってデコードユニット２０８Ａ−２０８Ｆにディスパッチされる様子を例示したものである。
0003732233.tif 000005
命令１−５は最初のクロックサイクルの間に、それぞれデコードユニット３１８Ａ−３１８Ｅに対応する発行位置０−４にディスパッチされる。ラッチユニット３０２のバイト位置１１で始まる命令６はデコードユニット３１８Ｅに対応する発行位置４のみにチャネリングされ得る。しかしながら、発行位置４は既に命令５によって占有されているため、命令６はこのサイクルの間にディスパッチされることはできない。したがって、マルチプレクサ制御回路３０６はデコードユニット３１８Ｆが、命令１−４でデコードされるデコード段階の間はＮＯＯＰ（no operation：動作なし）を発行するようにさせる。
クロックサイクル２の間、命令６が発行位置４にディスパッチされ、命令７が発行位置５にディスパッチされる。ここで注目されるのは、これらの命令がデコードされると、マルチプレクサ制御回路３０６がデコードユニット３１８Ａ−３１８ＤにＮＯＯＰ命令を発行させることである。命令８は次のキャッシュラインまでラップアラウンドするので、この命令の最初のバイトは次のクロックサイクルでマルチプレクサチャネル３０４Ｇを介して命令デコーダ３１８にラップアラウンドされる。
クロックサイクル３の間、命令８は発行位置０にディスパッチされる。注目されるのは、命令８の最初のバイトが先行するラインのバイト位置１５からラップアラウンドされることである。命令９および１０はさらにマルチプレクサチャネル３０４Ｂおよび３０４Ｃを介してそれぞれ発行位置１および２にディスパッチされる。命令８−１０のデコードの際に、命令発行ユニット３０４Ｄ−ＥはＮＯＯＰ命令を発行させる。
命令１１および１２はクロックサイクル４の間に発行位置２および３にディスパッチされる。命令１３はバイト７で始まり、発行位置４に経路付けすることができない。したがって、命令１３のディスパッチは次のクロックサイクルまでホールドされなければならない。
クロックサイクル５の間に、命令１３ないし１６が発行位置２ないし５にそれぞれディスパッチされる。上で説明したのと同様に、命令１３−１６のデコードの間、命令発行ユニット３４０Ａおよび３４０Ｂは発行位置０および１に対してＮＯＯＰ命令が発行されるようにする。
図２を再び参照して、ファストパス命令として指定されていないｘ８６命令サブセット内に含まれる命令は、ストアされたマイクロコードを用いてＭＲＯＭユニット２０９の制御に基づいて実行される。ＭＲＯＭユニット２０９はこのような命令を一連のファストパス命令に構文解析し、これらが１または２以上のクロックサイクルでディスパッチされる。先に述べたとおり、プリデコードユニット２０２は予め指定されたＭＲＯＭ命令に遭遇するとその命令の最初のバイトに関連する機能ビットがセットされるように構成されている。以下でさらに詳細に説明されるように、この条件はＭＲＯＭユニット２０９により容易に検出可能であって、命令の逐次化を可能にする。
ラッチユニット２０２内のコードの１ラインの中でＭＲＯＭ命令がＭＲＯＭユニット２０９によって検出されると、この命令とこれに続くものがあればいずれも、現在のサイクルではディスパッチされない。これに先立つ命令はいずれも、上の説明にしたがってディスパッチされる。
これに続くクロックサイクルの間、ＭＲＯＭユニット２０９はその特定のＭＲＯＭ命令に対するマイクロコードに従って、命令整列ユニット２０６を介してデコードユニット２０８へ一連のファストパス命令を与える。すべてのマイクロコード化された命令が整列ユニット２０６を介してデコードユニット２０８にディスパッチされて所望のＭＲＯＭ動作が行われると、ＭＲＯＭ命令に続く命令をディスパッチすることが可能となる。
以下の表５はＭＲＯＭ命令（ＲＥＰ  ＭＯＶＳＢ）を含むｘ８６アセンブリ言語コードセグメントの例を示す。
0003732233.tif 000006
図４Ａ−４Ｃは連続するクロックサイクルの間の表５の命令のディスパッチとデコードを示す、投機的プロセッサ２００の一部のブロック図である。図４Ａに示される最初のクロックサイクルの間、最初の２つの命令（ＭＯＶＥ  ＣＸ，Ｓ＿ＬＥＮおよびＣＬＤ）がマルチプレクサチャネル３０４Ａおよび３０４Ｂを介して発行位置０および１に経路付けされる（すなわちデコードユニット３１８Ａおよび３１８Ｂ）。デコードにより、ＭＲＯＭユニット２０９はさらにデコードユニット２０８Ｃ−２０８ＦにＮＯＯＰ命令を発行させる。
ＲＥＰ  ＭＯＶＳＢ命令を行わせるマイクロコード化された命令が、図４Ｂに示されるとおり、サイクル２ないしＮの間にディスパッチされる。これらのサイクルの間に、ＭＲＯＭユニット２０９内にストアされたマイクロコードに従った１組のファストパス命令が命令整列ユニット２０６を介してデコードユニット２０８Ａ−２０８Ｆにディスパッチされる。注目されるのは、このＭＲＯＭシーケンスが完了するまでに数サイクルを要する場合があることである。
ＭＲＯＭ命令の完全なディスパッチに続いて、ＭＲＯＭ命令に続くラインの残りの命令をマルチプレクサチャネル３０４Ｄ−３０４Ｆを介して発行位置３−５にディスパッチすることが可能となる。これらの命令をデコードすると、ＭＲＯＭユニット２０９はデコードユニット２０８Ａ−２０８ＣにＮＯＯＰ命令を発行させる。
図２−４と関連して上で説明された命令整列ユニット２０６は表２に示された特定の発行位置に命令を選択的に経路付けるように構成されているが、他の構成もまた可能であることが理解されよう。すなわち、メモリの１ライン内の所与の命令がディスパッチされる特定の発行位置は、上述のものとは異なっていてもよい。さらに、この発明にしたがったデコードユニットを採用するスーパースカラマイクロプロセッサ内に設けられる発行位置の数もまた変化し得る。命令を並列デコードユニットに与えるための命令整列ユニットの他の構成もまた可能であり、デコードユニットの他の構成もまた可能である。
プリデコードユニット２０２によって採用される特定のプリデコードスキームも、表１に示されたものとは異なっていてもよい。たとえば、命令コードのある特定のバイトの開始ビットおよび機能ビットの値の特定の組合せが有する特定の意味は、表１に示された特定の意味と異なっていてもよい。さらに、上述の実施例の命令整列ユニット２０６およびデコードユニット２０８はある種の生のｘ８６命令（すなわちファストパス命令）を直接転送かつデコードするように構成されているが、命令整列ユニットが生のｘ８６命令を１または２以上の固定長命令、たとえばＲＯＰに変換するように構成されたスーパースカラマイクロプロセッサの実現例もまた可能である。このような構成では、複数のデコードユニットが変換された命令を受けかつデコードするように構成されるであろう。
上の開示が十分に理解されれば、当業者には多くの変形や修正が明らかとなるであろう。以下のクレームは、このような変更や修正のすべてを包含すると解釈されるべきである。
【図１Ａ】
0003732233.tif 000007
【図１Ｂ】
0003732233.tif 000008
【図１Ｃ】
0003732233.tif 000009
【図２】
0003732233.tif 000010
【図３】
0003732233.tif 000011
【図４Ａ】
0003732233.tif 000012
【図４Ｂ】
0003732233.tif 000013
【図４Ｃ】
0003732233.tif 000014