(57)【特許請求の範囲】
【請求項１】
中央処理装置（CPU）であって、
CPUの命令をフェッチするための第１の手段と、
前記第１の手段によってフェッチされたCPUの命令をデコードするための第２の手段と、
前記第２の手段によってデコードされたCPUの命令を実行するための第３の手段と、および
前記第１の手段によってCPUの１つの命令をフェッチすると同時に、前記CPUの命令のビットの第１のサブセットを試験するための第４の手段であって、前記第２の手段によって前記CPUの命令のデコードを加速するようにビットの前記第１のサブセットに基づいて少なくとも１つの信号を発生するための手段を含み、ここにおいて、前記第２の手段によってデコードされるべき前記命令の第２のサブセットを選択するための前記少なくとも１つの信号に応答する手段をさらに含む第４の手段と、
を含む中央処理装置（CPU）。
【請求項２】
請求項１記載のCPUにおいて、前記第１の手段は命令を記憶するための第１のキュウイング手段を含み、そして前記第４の手段は前記少なくとも１つの信号を記憶するための第２のキュウイング手段を含む中央処理装置（CPU）。
【請求項３】
請求項２記載のCPUにおいて、前記第１のキュウイング手段と前記第２のキュウイング手段は、同じ数のエントリーを持つ中央処理装置（CPU）。
【請求項４】
請求項３記載のCPUにおいて、前記第４の手段は、デコーダを含む中央処理装置（CPU）。
【請求項５】
請求項３記載のCPUにおいて、前記第１の手段、前記第２の手段および前記第３の手段は、パイプライン構造で構成される中央処理装置（CPU）。
【請求項６】
請求項１記載のCPUにおいて、前記第２の手段はｍビットのデコードが可能であり、前記CPUはｎビットのオプコードを持つ命令を有し、ｍはｎよりも小さく、そして、ここにおいて、前記第４の手段は前記第２の手段によってデコードされるべき前記オプコード中のｍビットを識別するために命令の前記ｎビットのオプコード中のビットの前記第１のサブセットを試験するように作動する中央処理装置（CPU）。
【請求項７】
請求項６記載のCPUにおいて、前記第１の手段は命令を記憶するための第１のキュウイング手段を含み、そして前記第４の手段は前記少なくとも１つの信号を記憶するための第２のキュウイング手段を含む中央処理装置（CPU）。
【請求項８】
請求項７記載のCPUにおいて、前記第１のキュウイング手段と前記第２のキュウイング手段は、同じ数のエントリーを持つ中央処理装置（CPU）。
【請求項９】
請求項８記載のCPUにおいて、前記第４の手段は、デコーダを含む中央処理装置（CPU）。
【請求項１０】
請求項８記載のCPUにおいて、前記第１の手段、前記第２の手段および前記第３の手段は、パイプライン構造で構成される中央処理装置（CPU）。
【請求項１１】
異なった長さのオプコードを持つ命令を処理するための中央処理装置（CPU）であって、
セグメント中のCPUの命令をフェッチするための第１の手段であって、前記セグメントをCPUの命令にアセンブルするための手段を含む第１の手段と、
前記第１の手段でアセンブルされたCPUの命令をデコードするための第２の手段と、
前記第２の手段によってデコードされた前記CPUの命令を実行するための第３の手段と、そして
前記第１の手段は、前記第２の手段によって前記CPUの命令がデコードされる前に、前記CPUの命令の少なくともビットの第１のサブセットを試験するための第４の手段を含み、そして前記第２の手段によって前記CPUの命令のデコードを加速するように少なくとも１つの信号を発生するための手段を含み、ここにおいて、前記CPUの命令は前記第３の手段を制御するための情報を含むビットの第２のサブセットを個々に含み、ここにおいて、前記第４の手段は前記第２の手段によってデコードされるべき前記命令のビットの前記第２のサブセットを識別するための前記少なくとも１つの信号に応答する手段を含む中央処理装置（CPU）。
【請求項１２】
請求項11記載のCPUにおいて、ビットの前記第１のサブセットは、前記命令オプコードを拡張するためのエスケープコードを形成する中央処理装置（CPU）。
【請求項１３】
請求項11記載のCPUにおいて、前記第１の手段はフェッチされた命令のセグメントを記憶するための第１のキュウイング手段を含み、そして前記第４の手段は前記１つの信号を記憶するための第２のキュウイング手段を含む中央処理装置（CPU）。
【請求項１４】
請求項13記載のCPUにおいて、前記第１のキュウイング手段と前記第２のキュウイング手段は、同じ数のエントリーを持つ中央処理装置（CPU）。
【請求項１５】
請求項14記載のCPUにおいて、前記第４の手段は、デコーダを含む中央処理装置（CPU）。
【請求項１６】
請求項14記載のCPUにおいて、前記第１の手段、前記第２の手段および前記第３の手段は、パイプライン構造で構成される中央処理装置（CPU）。
【請求項１７】
パイプライン方式の中央処理装置（CPU）におけるスループットを改善する方法であって、前記CPUはメモリから命令をフェッチするための手段、フェッチされたCPUの命令をデコードするためのデコーダおよび前記デコーダの結果に応答してCPUの命令を実行するための手段を有し、前記方法は、
対応するCPUの命令のフェッチと同時にCPUの命令のオプコード中のビットの第１のサブセットを試験するステップと、
ビットの前記第１のサブセットに基づいて少なくとも１つの信号を発生するステップと、および
前記１つの信号を用いる前記命令のデコードを加速するステップであって、前記CPUの命令のビットの前記第１のサブセットに基づいてデコーダによってデコードされるべき前記CPUの命令からビットの第２のサブセットを選択するステップを含む加速ステップと、
を含むパイプライン方式の中央処理装置（CPU）におけるスループットを改善する方法。
【請求項１８】
請求項17記載の方法において、前記試験ステップは、ビットの前記第１のサブセットが予め定められた値に対応するかどうかを識別するステップを含むパイプライン方式の中央処理装置（CPU）におけるスループットを改善する方法。
【請求項１９】
請求項18記載の方法において、前記識別ステップは、ビットの前記第１のサブセットをデコードするステップを含むパイプライン方式の中央処理装置（CPU）におけるスループットを改善する方法。
【請求項２０】
CPUの命令をフェッチするための第１の手段、前記第１の手段によってフェッチされたCPUの命令をデコードするための第２の手段、前記第２の手段によってデコードされたCPUの命令を実行するための第３の手段を有する中央処理装置（CPU）であって、ここにおいて、前記CPUの命令の各々は、エスケープビットのサブセット、前記第３の手段を制御するための情報を含む制御ビットのサブセット、前記CPUの命令のデコードを加速するための手段を有し、前記中央処理装置（CPU）は、
前記第１の手段によって新しいCPUの１つの命令をフェッチすると同時に、前記新しい命令のエスケープビットのサブセットを試験するための手段と、
エスケープビットの前記サブセットに基づいて少なくとも１つの信号を発生するための手段と、および
前記第２の手段によってデコードされるべき前記新しいCPUの命令の制御ビットのサブセットを識別するための前記１つの信号に応答する手段と、
を含む中央処理装置（CPU）。
【請求項２１】
請求項20記載のCPUにおいて、エスケープビットの前記サブセットは、命令オプコードを拡張するためのエスケープコードを形成する中央処理装置（CPU）。
【請求項２２】
請求項20記載のCPUにおいて、フェッチされた命令を記憶するための第１のキュウイング手段と前記１つの信号を記憶するための第２のキュウイング手段を含む中処理装置（CPU）。
【請求項２３】
請求項22記載のCPUにおいて、前記第１のキュウイング手段と前記第２のキュウイング手段は、同じ数のエントリーを持つ中央処理装置（CPU）。
【請求項２４】
請求項23記載のCPUにおいて、前記試験手段は、デコーダを含む中央処理装置（CPU）。
【発明の詳細な説明】
技術の分野
本発明は一般的には、コンピュータのスループットの改善に係り、さらに詳しくいえば、命令解読の計画において、中央処理装置における命令の解読を加速することに関する。
発明の背景
今日のコンピュータの設計において、パイプライン構造が用いられ続けてきた。この構造は組み立てラインに類似している。これは命令の順序の実行を仕事の順序に分割する（すなわち、命令のフェッチング，命令の解読，実行，結果の記憶）。これらの全てのタスクについて、資源の専用ステーションが提供される。命令がパイプラインを流れるにしたがって、それらのタスクがそのステーションで、順次実行されるであろう。各々の命令は後続の命令に従われており、そのステーションがあきさえすれば、直ちにそこが占有される。異なった命令の開始までの遅れ時間、およびパイプライン構造におけるその終了は、コンパクトにされており、その結果、コンピュータのスループットが増加させられている。
パイプラインコンピュータにおける能率的でないステーションは、ボトルネックとなる。ボトルネックステーションは命令の速度を記述しているものであるからコンピュータのスループットを記述している。もしボトルネックステーションが加速されれば、パイプラインコンピュータのスループットは増加するであろう。
パイプラインコンピュータにおける共通のボトルネックは、均一でない長さをもつオプコード（オプションコードまたは命令コード）の命令の解読である。
コンピュータの命令は通常は、オプコードをもっており、そのオプコードからの命令に対応する処理を指令する信号が発生させられる。コンピュータにおけるオプコードのサイズは、通常そのデータパスの幅、換言すればそのハードウェア（数学論理ユニット，バス，デコーダその他）に依存している。もし、オプコードがｎビットの長さをもっていれば、それは２のｎ乗の異なったビットの組み合わせに解読されることができ、そしてコンピュータは２のｎ乗セットの異なったタイプの命令をもつことになるであろう。典型的に最も多くの今日のコンピュータデザインにおいては、ｎは８の倍数である（すなわち、１バイト）。
しかしながら、コンピュータの命令のセットがそのデータパスを拡張することなしに、拡張させるべきであるような機会がある。そのようなことは、コンピュータを高級化してより多くの命令を取り扱おうとするが、そのときそのハードウェアについて実質的な変化を行わなかった場合である。そのような場合がおこると１またはそれ以上のバイトが、通常オプコードに付加される。
従来技術のコンピュータにおいては、マルチバイトのオプコードの解読は、命令が解読されるときに、一時に１つずつ各バイトが検査されることによって行われる。各々のバイトの検査は１サイクルが必要であった。この従来技術のアプローチにおける欠点は、マルチバイトのオプコードの解読が、マルチサイクルが必要であって、それがパイプラインにおけるボトルネックを形成し、スループットを減少させることである。
発明の要約
今日のコンピュータにおける命令の長さは、特にCISC（コンプレックス命令セットコンピューティング）コンピュータにおいては、少なくともコンピュータのデータパスの幅、またはそれ以上である。これらのコンピュータにおける命令は、しばしばセグメントでフェッチされる。これらの命令の実行は、全てのセグメントがフェッチされ、そしてアセンブルされてから開始される。
本発明によれば、命令のセグメントがフェッチされ、そして組み立てられるときの時間を利用することに関する。この期間において、部分的な命令の解読が行われる。部分的な解読により得られた情報が、それからその命令の引き続く処理を加速するために用いられる。
本発明はCPUであって、命令をフェッチするための第１の手段、第１の手段によってフェッチされた命令を解読するための第２の手段、および前記第２の手段によって解読された命令を実行するための第３の手段を含んでいるものに向けられている。そのコンピュータは第１の手段による命令のフェッチングと同時にその命令におけるビットのサブセットと、前記命令の処理を加速するための情報を検査し、第４の手段で与える。
【図面の簡単な説明】
図１は本発明が具体化されているコンピュータシステムのブロック図である。
図２は命令がフェッチされたときに、どのようにして試験されるかを示す概略図である。
図３は命令の解読の前に１つのオプコードのセグメントを検査するための好ましい実施形態における論理を示す流れ図である。
図４は好適な実施形態における拡張キューの実施例を示すブロック図である。
図５は好適な実施形態におけるプリフェッチキューの構成を図解したブロック図である。
好適な実施例の説明
図１は本発明が具体化されているコンピュータシステム100の略図的なブロック図を示している。コンピュータシステム100は、メモリ11で、その中に命令とデータが蓄積されているものを含んでいる。コンピュータシステムは同様に、命令とデータをメモリ11からフェッチするマイクロプロセッサ（CPU）12を含んでいる。命令とデータは２バイトの幅のバス13を介してフェッチされる。それらはそれからCPU12によって処理される。処理の結果、発生した全てのデータは蓄積され、もし必要ならばバス13を介してメモリ11に戻される。
メモリとバスの設計は、通常利用される一般的な技術であるから、バス13の説明とメモリ11の説明の両方は不必要であると思われる。
コンピュータシステム100の各々の命令は１つのオプコードをもっている。命令のうち、いくつかのものはさらに付加的なオプコードと、オペランドまたは命令のオペランドのアドレスを規定するところの１または２以上の固定フィールドをもっている。コンピュータシステム100の命令のオプコードは、１バイト,2バイトまたは３バイトの長さである。しかしながら、もしオプコードが２倍以上の長さであれば第１のバイトは１つの“拡張コード”である。１つの拡張コードはバイトであって、それは“ED",“DD"“FD"または“CB"の16進の値をもっている。これはCPU12に対応するオプコードが１バイト長以上に拡張したことを知らしめる。（一方４つの特定の16進の命令は、拡張コード上に指定され、それは16進値以外のものを使用することもできる。）命令のオプコードが拡張コードをもつときに、オプコードは少なくとも２バイトとなる。
同様にして、もし１つのオプコードが３バイトの長さであれば、各々の最初の２バイトは拡張コードである。２つの拡張コードは、16の異なった方法（なぜならば、各々の拡張コードは４つの異なった値をもつからであり）16通りの組み合わせが可能であって、引き続く次の６つの組み合わせが好適な実施形態において利用される:ED−CB,DD−CB,FD−CB,ED−ED,ED−DDおよびED−FDである。この６つの組み合わせのみを利用する理由は、他の組み合わせ、すなわち、それは本発明においての利用を制限するものではないが、それらは現在は不必要であるが、それらはさらに将来起こりうるであろう命令のセットの拡張のために準備されているものである。
オプコードは同様にして、さらにｍバイトに拡張されることができる。オプコードのｍ−１バイトの各々は拡張コードである。
命令は、命令プリフェッチユニット14の制御のもとでCPU12によってフェッチされる。命令フェッチユニット14（それはプリフェッチキューを十分に包含するものであり、それは以後図２を参照して説明されるであろう。）の命令は１バイトまたは２バイトのセグメントでフェッチされる。
命令の各々のバイトがCPU12に到達したときに、それは内部命令フェッチバス17を介して命令プリフェッチユニット14によって受信される。各々の命令のバイトは、プリフェッチキューの期間中で、組み立てられる。
１つの命令の実行は、それがプリフェッチキューから再生させられ、そのオプコードが命令デコータ15に送られた時間から開始する。命令デコーダ15は１バイトの幅をもっている。それは１バイトのオプコードを1CPUサイクルにおいて解読する。本発明によらなければ、２バイトのオプコードをデコーダすることは、命令デコーダ15に2CPUサイクルかかり、そして３バイトのオプコードの解読には3CPUサイクルが必要になるであろう。
命令デコーダ15は、１つの実行論理16へ制御信号を発生するためには、１つの命令のオプコードを解読する。オペランドがもし命令中に存在すれば、オペランドは直接に実行論理16に命令デコーダ15をバイパスして送られるであろう。実行論理16は、論理と演算制御であって、命令デコーダ15からの信号に応答するオプコードによって規定される。
デコーダと命令論理の設計は、よく知られたものであるから、命令デコーダ15と実行論理16の説明は不必要だと思われる。
図２を参照して、命令がフェッチされたときにどのようにして試験されるかを図解したブロック図が示されている。
命令のバイトがメモリ11からCPU12に到達すると、それらは１つの８ビットの幅のプリフェッチキュー201であって、それは円形の循環バッファの中につくられたものに蓄積される。前記プリフェッチキュー201は、８個の入口の深さをもっている。１つのプリフェッチキューカウンタ207が、プリフェッチキュー201の第１のあいている入口を識別する。
プリフェッチキューカウンタ207からの出力は、プリフェッチキュー201に命令バイトの記憶を制御するキュー入力イネイブル論理504に印加される。２つの２バイトの命令がフェッチされたときに、第１のバイトは命令フェッチバス17の上位バイトで、第２のバイトはその下位バイトにくる。１バイトの命令がフェッチされたときには、それは命令フェッチバス17の上位バイトの位置に到達するであろう。前記キュー入力イネイブル論理17は、各々の到達したバイトをプリフェッチキュー201の第１のあいている入口に印加して記憶する。１バイトの命令が蓄積されているときに、プリフェッチキューカウンタ207は更新される。
１つのＱ−サイズカウンタ202がプリフェッチキュー201の中に蓄積されているバイト数を記録するために用いられる。１バイトの命令がプリフェッチキュー201に蓄積されたときに、前記Ｑ−サイズカウンタ202は、１だけカウントアップされる。これとは反対に、１つの命令がプリフェッチキュー201から命令デコーダ15によって処理されるために再生されたときにＱ−サイズカウンタ202が、その命令のバイトの数によって減算される。
命令フェッチバス17は同様に、エスケープデコーダ203に接続されている。前記エスケープデコーダ203は、上位の１バイト幅のデコーダ203aと下位の１バイト幅のデコーダ203bで構成されている。このデコーダ203aは、上位の命令フェッチバス17に接続され、下位のデコーダ203bは、下位の命令フェッチバス17に接続されている。各々の命令バイトがCPU12によってフェッチされると、各命令は同時にいずれかの高い次数のデコーダ203aまたは低い次数のデコーダ203bによって受信される。各々のデコーダ203a,203bは命令の入力したバイトが拡張コードかどうか検査するように動作する。
高い、または低い拡張デコーダ203a,203bは４ビットを出力する。拡張デコーダ203が１つの拡張コードに当たったときに、４つの出力ビットのうちの１つが、拡張コードの値に依存する４つのうちの１つの出力ビットを指定するだろう。例えば、入ってきた命令バイトが、“ED"に等しければ、第１の出力ビットがセットされ、もし入ってきたバイトが“DD"に等しければ第２の出力ビットがセットされ、もし入ってきたバイトが“FD"に等しければ第３の出力ビットがセットされ、そしてもし入ってきたバイトが“CB"ならば４番目のビットがセットされるであろう。
前記拡張デコーダ203の４ビットの出力は、４ビットの幅の拡張キュー204に蓄積され、この拡張キュー204は、サーキュラーバッファとして設けられている。前記拡張キュー203は、８の入力の深さをもっており、それはプリフェッチキュー201の入力と同じである。各々のプリフェッチキュー201の入力は、拡張キュー203に対応する計数部を有する。バイトがプリフェッチキュー201に蓄積されたり、再生されたときに、拡張キュー203の対応する入口が加算されたり、または減算されたりする。プリフェッチキューカウンタ207は、第１のプリフェッチキュー201におけるあき入口を指示し、同様にして拡張キュー204の対応する入口を指示する。
プリフェッチキュー201は、引き続く命令の最初のバイトであって、デコードされ実行されるべきものを含んでおり、その入口を指し示すために３ビットのデコーダキューカウンタ208が設けられている。前記デコーダキューカウンタ208は、対応する拡張キュー204の中の計数部の入口を指し示す。
拡張キュー204が、拡張デコーダ203a,203bからの入力を受けるのであるから、拡張キュー204の各々の入口は、命令バイトのプリフェッチキュー201中の対応する入口の命令バイトが拡張であるかどうかという情報を含んでいる。拡張キューは４ビットQ1−Esc出力、および４ビットQ2−Esc出力に出力する。次の引き続く命令の最初の命令（デコーダキューカウンタ208によって指し示されているように）が１つの拡張コードであるときに、エスケープコードの値に依存するQ1−Esc出力中の１ビットはセットされる。次に引き続く命令中の第２のバイトが拡張コードであるときは、つまりエスケープコードにしたがうQ2−Esc出力中の１ビットがセットされるだろう。
拡張キュー204から出力する前記Q1−Esc出力および前記Q2−Esc出力は、拡張コード／シーケンス分析器206に結合されている。前記拡張コード／シーケンス分析器206は、前記Q1−Escおよび前記Q2−Esc信号をその３つの出力の１つを：すなわちQ1out−En,Q2out−EnおよびQ3out−Enのうちの１つをセットするために用いる。これらの３つの信号は、次に引き続く命令中の最初の３バイトのうちの１つを命令デコーダ15に入力することを可能にする。もし次の引き続く命令が１バイトのオプコードをもっていたならば、Q1out−Enがセットされて、次の引き続く命令の第１バイトを命令デコーダ15に入力することを可能にする。もし次の引き続く命令デコーダが２バイトのオプコードをもっていたならば、Q2out−Enは第２番目のバイトを命令デコーダ15に入力することを可能にするためにセットされる。
そしてもし次の引き続く命令が３バイトのオプコードであれば、命令デコーダ15に第３番目の３バイトを入力可能にするようにQ3out−Enはセットされる。
１つのEsc−Info信号は、拡張コード／シーケンス分析器206から命令デコーダ15へ出力する出力信号である。この信号は１つの拡張コードまたは１つのオプコードを分析することによって得られた他の情報として命令デコーダに与える。
命令デコーダ15に適当なバイトを送り出すこと、そして拡張コードを飛び越すことによって、次の命令が、オプコードが２以上のバイトをもっているときでも１サイクルでデコードできる。その結果として対応する命令の処理が加速される。
さて、拡張コード／シーケンス分析器206の動作は、図３と次の表を参照して説明されるであろう。
0003547740.tif 000002
表１の第１行を参照すると“拡張なし（No  Escape）”条件は命令が１バイトのオフコードであることからQ1−Escコードのビットのうちのいずれもセットされないことを意味している。Q2−Escは無関係（Don't  care）である。
表１の第２行において、前記“拡張コード”の条件は（１）Q1−EscのEDビットがセットされ、そしてQ2−Escのビットのどれもセットされていないか；（２）Q1−Esc中のDDビットまたはFDビットがセットされているが；しかしQ2−Esc中のCBビットがセットされていないか；または（３）Q1−Esc中のCBビットがセットされているかどうかを意味する。この条件は、次の引き続く命令のオプコードが、たった１つの拡張コードをもつことを意味している。
表１の第３行において、前記“拡張シーケンス（Escape  Sequence）”条件が（１）Q1−Esc中のEDビットがセットされ、そしてQ2−Esc中の４つのビットのいずれかがセットされているか；または（２）Q1−EscコードのDDビットまたはFDビットがセットされている；そして、Q2−Esc中のCBビットがセットされているかを意味する。この条件は、オプコードは有効な３バイトのオプコードであることを意味する。
次に、第３図を参照する。301のブロックにおいて拡張コード／シーケンス分析器206が、Q1out−Enを“1"に、Q2out−enを“0"に、そしてQ3out−enを“0"に初期化する。この方法では、プリフェッチキュー201は空であり、そして、１バイトのオプコードをもった命令がCPU12に入力するときに、その命令は、直接に命令デコーダ15に渡され、そして第１のバイトが解読される。
決定ブロック302において、Ｑ−サイズカウンタ202の値が、プリフェッチキュー201が空であるかどうかを決定するためにチェックされる。もしＱ−サイズカウンタ202の値が０で、プリフェッチキュー201が空で、そして拡張コード／シーケンス分析器206はブロック302のループでフェッチされるべき１バイトの命令を待つためにブロック302上でループする。
命令の１バイトがCPU12によってフェッチされ、プリフェッチキュー201に蓄積されたときに、前記Ｑ−サイズカウンタ202は加算される。前記拡張コード／シーケンス分析器206は、ブロック302から決定ブロック303への“Yes"の経路にしたがう。
決定ブロック303で表１の“No  Escape"の条件が満足しているかどうかを決定させる。もし、“No  Escape"の条件が満足されていれば、次の命令は１バイトの幅であり、そして拡張コード／シーケンス分析器206はブロック304に入る。
ブロック304において拡張コード／シーケンス分析器206は、実行論理16が次の引き続く命令を受け入れる準備ができるまで待つ。実行論理16が準備できるときには、命令の実行が始まる。Q1out−enが初期化されないので、プリフェッチキュー201中の第１のバイトは、命令デコーダ15にゲートされるであろう。
オプコードが命令デコーダ15によって解読されたのちには、命令の長さがわかるだろう。ブロック312において、前記Ｑ−サイズカウンタ202は、全ての命令の長さと等しいバイトの数だけ（全てのオプコードと定数と、もしあるならば、フィールド）の命令の数だけ減少させられる。前記デコーダキューカウンタ208は、それが引き続く命令のスタートを指し示すように強制され、それが次の引き続く命令となる。
前記拡張コード／シーケンス分析器206は、ブロック303からのブロック305に入り、“No  Escape"条件に合わないときに入る。前記手段で次の引き続く命令の第１バイトが拡張コードである。なぜならば、オプコードは少なくとも２バイトをもっているので、前記拡張コード／シーケンス分析器206は、ブロック305において、Ｑ−サイズカウンタ202が、２またはより以上高く加算されるまで待っている。
前記Ｑ−サイズカウンタ202が、２またはそれ以上であるときに、前記拡張コード／シーケンス分析器206は、決定ブロック306に入る。決定ブロック306において、拡張コード／シーケンス分析器206は、拡張コードの３つの条件のうちどれか１つが満たされるかどうかをチェックする。もし、これらの３つの条件の１つが満たされたならば、次のシーケンシャル命令は、２バイトコードである。前記拡張コード／シーケンス分析器206は、ブロック307に入る。
ブロック307において、前記拡張コード／シーケンス分析器206が、Q2out−enとをセットしQ1out−enをリセットする。実行論理16が次の引き続く命令を受け入れる準備ができているときには、実行が開始される。Q2out−enがセットされるので、プリフェッチキュー201からの第２のバイトが命令デコーダ15にゲートされる。命令が命令デコーダ15に送られたあとに、ブロック312が入力されるだろう。ブロック312において、前記Ｑ−サイズカウンタ202は、全命令（オプコード、定数、フィールドがもしあればそれを含む）の長さに等しい数だけを減少する。デコーダキューカウンタ208はまた次の命令のスタート点を指示するように調整される。
もし、“拡張コード”のテーブル１に示されているどの１つの条件も満たさないときは、前記拡張コード／シーケンス分析器206は、決定ブロック308に入る。ブロック308において、それは“拡張シーケンス”の表１に示されている２つの条件をチェックする。もし、これらの２つの条件が満たされなければ、206はコンピュータ100が不法なオプコードの取り扱いの処理を実行するためにEsc−inf線を介してブロック309へ行く。
“拡張シーケンス”の２つのうちの１つの条件が満たされていれば、引き続く命令のオプコードは３バイトであるはずである。拡張コード／シーケンス分析器206は、それからブロック310に入る。ブロック310において、拡張コード／シーケンス分析器206は、Ｑ−サイズカウンタ202が３に等しいか、またはそれ以上（すなわち、それがプリフェッチキュー201が少なくとも３バイトをもつまで）待つ。
Ｑ−サイズカウンタ202の値が３に等しいか、またはそれ以上のとき、前記拡張コード／シーケンス分析器206は、ブロック311に入る。ブロック311において、拡張コード／シーケンス分析器206が、Q3out−enをセットし、Q1out−enをリセットする。
エクゼキューション論理16が次のシーケンシャル命令を待ち受けているときに、実行が始められる。Q3out−enがセットされた以後、引き続く命令からの第３のバイトが命令デコーダ15にゲートされて入力される。オプコードを解読すると、前記命令デコーダ15は、デコーダ命令の長さがわかるであろう。ブロック312において、Ｑ−サイズカウンタ202は、全ての命令の長さ（全命令は全てのオプコードと定数と、もしあるならばフィールド）に等しいバイト数だけ減算される。前記デコーダキューカウンタ208は、それが次の命令のスタート位置を指示するように調整される。
要するに、要約すれば、命令が解読されるときには、多数のバイトのオプコードの命令の拡張コードがバイパスされて、関係するオプコードバイトだけが解読される。このような命令を解読することは、マルチバイトのオプコードであっても、たった１つのCPUクロックサイクルかかるだけで、命令の処理が加速されるわけである。
プリフェッチキュー201と拡張キュー204の各々の構成には、いくつかの方法がある。１つの方法はバッファのまわりにラップを用いることである。他の方法はシフトレジスタを用いることである。
図４は、好適な実施形態における拡張キュー204の構成を図示した略図的な図である。
この好適な実施形態の拡張キュー204は、８つの入口の深さをもった４ビットの幅のキューである。それは行あたり４つのセルをもった８行のマトリックスで構成される。セルの各行は、高次の拡張デコーダ203aまたは下位の拡張デコーダ203bのどちらか４つの出力ビットを記憶するために使われる。
各々のセル401は、Ｄタイプのフリップ−フロップ402で構成し、その入力がマルチプレクサ403の出力に接続されている。各々のマルチプレクサ403は、２つの入力をもっている。１つの入力は高次の拡張デコーダ203aからの１ビットに接続されており、他の入力は下位の拡張デコーダ203bに対応するものに接続されている。たとえば、マルチプレクサ403aは、１つの入力で下位のデコーダ203bの出力EDビットに接続されており、他の入力は高次のデコーダ203aの出力EDビットに接続されている。
前記各々のマルチプレクサ403の選択された入力404は、キュー入力イネイブル論理504によって制御される。前記キュー入力イネイブル論理504は、プリフェッチキューカウンタ207の出力を受けるために接続されていて、それがプリフェッチキュー201と拡張キュー204の両方の各々の第１のあきエントリーを指示する。前記キュー入力イネイブル論理504は、プリフェッチキューカウンタ207を解読することによって、マトリックス中のセルの行を選択するように動作する。このマトリックスは第１の拡張キュー204のあきエントリーで構成する。この行は、高次の拡張デコーダ203a,下位のエスケープデコーダ203bのいずれかの出力を記憶するために選択される。
拡張キュー204の出力は、拡張キュー出力イネイブル論理209によって、制御されるであろう。拡張キュー出力イネイブル論理209は、デコーダキューカウンタ208に接続されて、デコーダキューカウンタ208は、次に続く命令の最初の部分に相当する拡張キュー204とプリフェッチキュー201との両方の入力を指し示す。
拡張キュー出力イネイブル論理209は、16個の出力信号406（1,a）,406（1,b），・・・406（8,a）,406（8,b）の中の２つの信号が作用するためにデコーダキューカウンタ208の値を分析する。16個の信号は、お互いに８つのペアをつくるように組織される。例えば、406（8,a）と406（8,b）の信号は、２つのトリステイトゲイト経由で接続され、407a,407bの信号は、図２に示されている拡張キュー204のセルの行の出力に接続されている。
ある時刻に、前記拡張キュー出力イネイブル論理209が、前記デコーダキューカウンタ208の値に依存しているが、対応するキューエントリーをゲートするために８組の信号のうちの上側の信号406（1,a）を活性化するだろう。この入口からの出力は、Q1−Esc信号である。同じ時点に、前記拡張キュー出力イネイブル論理は、次の入力をゲートするための出力信号の次の組の中の下側の信号の１つ、406（ｉ＋1,a）を活性化する。この次の入口からの出力はQ2−Esc信号になる。
図５は、プリフェッチキュー201の構造を図解している。
前記プリフェッチキュー201は、拡張キュー204と同様な方法で構成されている。拡張キュー204と同様に、プリフェッチキュー201は、マトリックスで構成されているが、マトリックスは８行と８列のセルをもっている。
各々のセル501は、Ｄタイプフリップ−フロップ502で構成し、その入力がマルチプレクサ503に接続されている。各々のマルチプレクサ503は、２つの入力をもっている。１つの入力は命令フェッチバス17の高次のバイトからの１ビットの出力に接続されており、他の入力は対応する命令フェッチバス17の下位の１ビットの出力に接続されている。
各々のマルチプレクサ503の選択された入力は、キュー入力イネイブル論理504によって制御されて、その論理は、プリフェッチキューカウンタ207に接続されている。前記キュー入力イネイブル論理504は、プリフェッチキューカウンタ207を解読することによって、プリフェッチキュー201の最初のあき入口を形成するマトリックス中のセルの列を選択するように動作する。この列は、命令フェッチバス17中の高次、または下位の出力を記憶するために選ばれる。
プリフェッチキュー201の出力は、拡張コード／シーケンス分析器206によって制御される。拡張コード／シーケンス分析器206は、３ビットのデコーダキューカウンタ505からの出力を受け入れ、そのカウンタ505は、拡張キュー204および次の引き続く命令の最初の部分に相当するプリフェッチキュー201の入力部を指示する。それは同様に、拡張キュー204からのQ1−escおよびQ2−esc出力信号を受ける。これからの信号により、拡張コード／シーケンス分析器206は、その３つの出力信号Q1out−en,Q2out−en,Q3out−enの１つの信号を活性化し、命令デコーダ15の次の引き続く命令の最初の部分（先頭部）から適切なバイトを選択するように動作する。
本発明は、バス13の幅をもち、キューの深さをもつような特定の具体例と特定の構成について説明を行った。しかしながら、それらの構成および過程は、本発明の範囲内で種々の変形や修正が可能であり、本発明の範囲は添付された請求の範囲によってのみ限定されるものである。
【図１】
0003547740.tif 000003
【図２】
0003547740.tif 000004
【図３】
0003547740.tif 000005
【図４】
0003547740.tif 000006
【図５】
0003547740.tif 000007