JP3732233B2 - Method and apparatus for predecoding variable byte length instructions in a superscalar microprocessor - Google Patents
Method and apparatus for predecoding variable byte length instructions in a superscalar microprocessor Download PDFInfo
- Publication number
- JP3732233B2 JP3732233B2 JP50595198A JP50595198A JP3732233B2 JP 3732233 B2 JP3732233 B2 JP 3732233B2 JP 50595198 A JP50595198 A JP 50595198A JP 50595198 A JP50595198 A JP 50595198A JP 3732233 B2 JP3732233 B2 JP 3732233B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- byte
- bit
- superscalar microprocessor
- instructions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 16
- 230000001419 dependent effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 32
- 238000006073 displacement reaction Methods 0.000 description 24
- 238000010586 diagram Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000005465 channeling Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
発明の背景
1.発明の分野
この発明はスーパースカラマイクロプロセッサに関し、特に高性能、高周波数スーパースカラマイクロプロセッサ内で可変バイト長コンピュータ命令をプリデコードすることに関する。
2.関連技術の説明
EP−A−0651322は可変バイト長命令フォーマットを有するスーパースカラマイクロプロセッサのための公知の命令キャッシュを開示している。記載されたスーパースカラマイクロプロセッサは添付の請求項1のプリアンブルに従った可変バイト長命令をプリデコードするための方法を採用しており、添付の請求項14のプリアンブルの特徴を有する。
スーパースカラマイクロプロセッサは多命令の並列実行を可能にすることにより、従来のスカラプロセッサを凌ぐ性能を達成することができる。x86系マイクロプロセッサが広く受入れられているため、x86命令を実行するスーパースカラマイクロプロセッサを開発するための努力がマイクロプロセッサ製造者により行なわれてきた。このようなスーパースカラマイクロプロセッサは比較的高い性能を達成しつつ、8086、80286、80386および80486等の前の世代のマイクロプロセッサのために開発された既存の大量のソフトウェアとの旧版互換性を維持している点で有利である。
x86命令セットは比較的複雑で、複数個の可変バイト長命令を特徴とする。x86命令セットを例示する一般的なフォーマットが図1Aに示される。図で示されるとおり、x86命令は1から5のオプションのプレフィックスバイト102、これに続くオペレーションコード(opcode)フィールド104、オプションのアドレスモード(Mod r/M)バイト106、オプションのスケール−インデックス−ベース(SIB)バイト108、オプションの変位フィールド110およびオプションの即値データフィールド112からなる。
opcodeフィールド104はある特定の命令の基本的動作を規定する。ある特定のopcodeのデフォルト動作は1または2以上のプレフィックスバイトによって修正できる。たとえば、1プレフィックスバイトを用いて命令のアドレスまたはオペランドサイズを変更し、メモリのアドレスに用いられるデフォルトセグメントをオーバライドするか、またはプロセッサが一連の動作をある回数繰返すように命令することができる。opcodeフィールド104はもしあればプレフィックスバイト102に続き、その長さは1または2バイトである。アドレスモード(MODRM)バイト106は使用されるレジスタおよびメモリアドレスモードを特定する。スケール−インデックス−ベース(SIB)バイトはどのレジスタがアドレス計算の基底値を含んでいるかを規定し、インデックスフィールドはどのレジスタがインデックス値を含んでいるかを特定する。スケールフィールドはインデックス値が加算される前にこれに乗算されるべき2のべき乗を特定するとともに、もし基底値に何か変位があればこれを特定する。次の命令フィールドはオプションの変位フィールド110であり、これは長さが1から4バイトである。変位フィールド110はアドレス計算に用いられる定数を含む。オプションの即値フィールド112もまた長さが1から4バイトであって、命令オペランドとして用いられる定数を含む。80286では命令の最大長さを10バイトに設定しており、一方80386および80486はともに最大15バイトまでの命令長を可能としている。
図1Bを参照して、いくつかの異なる可変バイト長x86命令フォーマットが示される。最も短いx86命令は長さが1バイトしかなく、フォーマット(a)で示されるように単一のopcodeバイトを含む。いくつかの命令では、opcodeフィールドを含むバイトはまたフォーマット(b)、(c)および(e)に示されるようにレジスタフィールドをも含む。フォーマット(j)は2つのopcodeバイトを備えた命令を示す。フォーマット(d)、(f)、(h)および(j)においては、オプションのMODRMバイトがopcodeバイトに続く。即値データはフォーマット(e)、(g)、(i)および(k)ではopcodeバイトに続き、フォーマット(f)および(h)ではMODRMバイトに続く。図1Cはいくつかの可能なアドレスモードフォーマット(a)−(h)を例示する。フォーマット(c)、(d)、(e)、(g)および(h)はオフセット(すなわち変位)情報を備えたMODRMバイトを含む。フォーマット(f)、(g)および(h)ではSIBバイトが用いられている。
x86命令セットの複雑さのために、高性能のx86互換スーパースカラマイクロプロセッサの実現には困難な問題が生じる。問題の1つは、適正なデコードが行なわれる前にこのようなプロセッサの並列接続命令デコーダに対して命令が整列されなければならない、という事実から生じる。ほとんどのRISC命令フォーマットとは対照的に、x86命令セットは可変バイト長命令からなり、1ライン内の連続した命令の開始バイトは必ずしも等間隔になっておらず、またラインごとの命令数も固定されていない。この結果、簡潔な固定長シフトロジックを用いることそれ自体では命令の整列の問題を解決することができない。
複数個の可変バイト長命令を並列に迅速に整列させ、デコードしかつ実行するという問題の解決を支援するために、命令プリデコード技術を採用するスーパースカラマイクロプロセッサが提案されている。このようなスーパースカラマイクロプロセッサの1つでは、命令が外部メインメモリから命令キャッシュ内に書込まれると、プリデコーダがいくつかのプリデコードビット(集合的にプリデコードタグと称される)を各バイトに付加する。これらのビットはあるバイトがx86命令の開始および/または終了バイトであるか否か、x86命令を実現するのに必要とされるマイクロ命令の数、およびopcodeとプレフィックスの位置を示す。命令がキャッシュからフェッチされると、スーパースカラマイクロプロセッサは各命令を1または2個以上のROPSと称されるマイクロ命令に変換する。ROPSはそれらが固定長で、簡単な一貫性のある符号化を伴うという点で、RISC命令と類似している。x86命令は命令キャッシュの中で既に、どこで命令が開始し、どこで終了し、各々がいくつのROPSを必要とするかを示すプリデコードビットをタグとして付与されているため、バイトキューが命令の境界の位置を突き止め、各x86命令を1または2以上のROPSに変換しかつ並列命令デコーダに固定数のROPSを提供することは比較的簡単な作業である。
上で述べたプリデコード技術は大部分は成功しているが、命令キャッシュアレイ内の利用可能な記憶空間の50%以上をプリデコードビットに割当てなければならない。これは命令コードのための命令キャッシュ内の記憶量を制限しおよび/またはダイサイズの増加のためにプロセッサの費用を増大させる。
発明の要約
上で概略を述べた問題の多くの部分が、この発明に従った可変バイト長命令をプリデコードするための方法によって解決される。一実施例では、可変バイト長命令をそれらが命令キャッシュ内に記憶されるに先立ってプリデコードすることができる、プリデコードユニットが設けられる。プリデコードユニットは各命令バイトについて複数個のプリデコードビットを発生するように構成される。各命令バイトに関連付けられた複数個のプリデコードビットは集合的にプリデコードタグと称される。その後命令整列ユニットがプリデコードタグを用いて可変バイト長命令を複数個のデコードユニットにディスパッチし、これらはスーパースカラマイクロプロセッサ内に固定された発行位置を形成する。
ある具体例では、プリデコードユニットは命令コードの各バイトに関連して3個のプリデコードビット、すなわち「開始」ビット、「終了」ビットおよび「機能」ビットを発生する。開始ビットは関連のバイトが命令の最初のバイトである場合にセットされる。同様に、終了ビットはそのバイトが命令の最後のバイトである場合にセットされる。機能ビットに専用の意味を関連付けるのではなく、プリデコードユニットは、機能ビットが持つまたはそれに関連する意味がその状態(すなわち機能ビットがセットされているか否か)およびそのバイトの開始ビットの状態に依存するように構成されている。機能ビットの意味はさらに、先行する命令バイトの開始ビットの状態にも依存する。
たとえば、ある実現例においてある特定のバイトの開始ビットがセットされていれば、機能ビットは、その命令が直接デコード可能な「ファストパス」命令またはMROM命令(マイクロコードを介して逐次化されるべき命令)であることを示す。他方で、ある特定のバイトの開始ビットがクリアされておりかつそのバイトが開始バイト(その開始ビットがセットされている命令バイト)に直接続いている場合は、機能ビットはopcodeが命令の最初のバイトであるか否か、またはプレフィックスが命令の最初のバイトであるか否かを示す。もしそのバイトの開始ビットがクリアされており、そのバイトが開始バイトに続くものでない場合、機能ビットは関連のバイトがMODRAMまたはSIBバイト、または変位または即値データであることを示す。
プリデコードユニットからのプリデコード情報を利用することで、命令整列ユニットは比較的少ない数のカスケードされた論理ゲートのレベルで実現でき、非常に高い周波数の動作に対処することができる。命令整列ユニットからデコードユニットをさらに比較的少ないパイプライン段で完成させることができる。加えて、可変バイト長命令が整列される複数のデコードユニットはプリデコードタグを利用して、比較的高速の命令デコードを達成する。最後に、プリデコードユニットはある特定のプリデコードタグの機能ビットの意味が開始ビットの状態に依存するように構成されているため、比較的少ない数のプリデコードビットにより、比較的大量のプリデコード情報を運ぶことができる。したがってこれは性能を犠牲にすることなく、命令キャッシュのサイズを減じることを可能にする。
さらに、機能ビットによって保持される情報で、デコードユニットはopcode、変位、即値、レジスタおよびスケールインデックスバイトの正確な位置を知ることができる。したがって、デコードユニットが命令バイトをシリアルに走査する必要はない。加えて、機能ビットはデコードユニットが8ビット線形アドレスを(加算回路を介して)迅速に計算し、スーパースカラマイクロプロセッサ内の他のサブユニットがこれを使用することを可能にする。したがって、比較的迅速なデコードが達成され、高い性能に対応することができる。
大まかに言えば、この発明はスーパースカラマイクロプロセッサ内で可変バイト長命令をプリデコードするための方法であって、命令のあるバイトが開始バイトであるか否かを示す開始ビットを発生するステップと、前記命令の前記バイトが終了バイトであるか否かを示す終了ビットを生成するステップと、前記開始ビットの値に依存する意味を有する機能ビットを発生するステップとを含む、方法を提供しようとするものである。
【図面の簡単な説明】
発明の他の目的および利点は添付の図面を参照しながら以下の詳細な説明を読むことによって明らかとなるであろう。
図1Aは包括的x86命令セットフォーマットを例示する図である。
図1Bはいくつかの異なる可変バイト長x86命令フォーマットを例示する図である。
図1Cはいくつかの可能なx86アドレスモードフォーマットを例示する図である。
図2は6個のデコードユニットに多命令を送る命令整列ユニットを含むスーパースカラマイクロプロセッサのブロック図である。
図3は命令整列ユニットと6個のデコードユニットのブロック図である。
図4A−4CはMROM命令の実行を示すブロック図である。
発明にはさまざまな修正や変形が可能であるが、その具体的な実施例を例として図面に示し以下で詳細に説明する。しかしながら、図面と詳細な説明は発明を開示された特定の形に制限するものではなく、逆に、意図するところは添付のクレームに規定されるこの発明の範囲にあるすべての修正、均等物および変形例を包含することである。
発明の詳細な説明
次に図2を参照して、この発明の方法に従って動作するプリデコードユニット202を含むスーパースカラマイクロプロセッサ200のブロック図が示される。図2の実施例で例示されるように、スーパースカラマイクロプロセッサ200はプリデコードユニット202と、命令キャッシュ204に結合された分岐予測ユニット220とを含む。プリフェッチユニット203がプリデコードユニット202に結合される。命令整列ユニット206が命令キャッシュ204と複数個のデコードユニット208A−208F(集合的にデコードユニット208と称する)との間に結合される。各デコードユニット208A−208Fはそれぞれのリザベーションステーション210A−210F(集合的にリザベーションステーション210と称する)に結合され、各リザベーションステーション210A−210Fはそれぞれの機能ユニット212A−212Fに結合される(集合的に機能ユニット212と称される)。デコードユニット208、リザベーションステーション210および機能ユニット212はさらにリオーダバッファ216、レジスタファイル218およびロード/ストアユニット222に結合される。データキャッシュ224は最後にロード/ストアユニット222に結合されて示され、MROMユニット209は命令整列ユニット206に結合されて示される。
一般に、命令キャッシュ204は命令デコードユニット208に送られる前、に命令を一時的にストアするために設けられる高速キャッシュメモリである。一実施例では、命令キャッシュ204は最大で32キロバイトの、各々が16バイトのラインで編成される(ここで各バイトは8ビットからなる)、命令コードをキャッシュするように構成されている。。動作の間、命令コードがメインメモリ(図示せず)からプリフェッチユニット203を介してプリフェッチコードにより命令キャッシュ204に与えられる。命令コードの各バイトについて、命令キャッシュ204はさらにそれに関連するプリデコードタグをストアする。ここで注目されるのは、命令キャッシュ204がセットアソシアティブ、フルアソシアティブ、またはダイレクトマップ構成のいずれかで実現できることである。
プリフェッチユニット203はメインメモリから命令コードをプリフェッチして命令キャッシュ204内に記憶するために設けられている。一実施例では、プリフェッチユニット203はメインメモリから命令キャッシュ204へ64ビット幅コードをバーストするように構成されている。さまざまな具体的なコードプリフェッチ技術およびアルゴリズムをプリフェッチユニット203に採用できることが理解されるであろう。
プリフェッチユニット203がメインメモリから命令をフェッチすると、プリデコードユニット202は命令コードの各バイトに関連する3個のプリデコードビットを発生する。すなわち「開始」ビット、「終了」ビットおよび「機能」ビットである。
各バイトの開始ビットおよび終了ビットは命令の境界を示すものである。各バイトの機能ビットはそのバイトまたは命令に関するさらなる情報、たとえば命令がデコードユニット208によって直接デコードできるか否か、または命令がMROMユニット209(以下でより詳細に説明する)によって制御されるマイクロコード手続を起動することで実行されなければならないか、またはバイトがMODRMまたはSIBバイトであるか、またはバイトが変位または即値データであるか、等の情報を持っている。機能ビットはまた、opcodeバイトのロケーションを示すために用いられてもよい。以下の説明から、特定の命令バイトの機能ビットにエンコードされた意味は関連の開始ビットに依存することが理解されるであろう。
表1はプリデコードユニット202によって実現されるプリデコードタグのエンコードの一例を示す。表に示されるとおり、もし所与のバイトが命令の最初のバイトであれば、そのバイトがメインメモリからフェッチされ命令キャッシュ204にストアされると、プリデコードユニット202によりそのバイトの開始ビットがセットされる。もしそのバイトが命令の最後のバイトであれば、そのバイトの終了ビットがセットされる。もしある特定の命令を直接デコードユニットによってデコードすることができない場合には、その命令の最初のバイトに関連する機能ビットがセットされる。他方で、もしその命令をデコードユニット208によって直接デコードすることが可能であれば、その命令の最初のバイトに関連する機能ビットがクリアされる。ある特定の命令の第2のバイトの機能ビットは、もしopcodeが最初のバイトであればクリアされ、もしopcodeが2番目のバイトである場合にはセットされる。opcodeが2番目のバイトであるような状況では、最初のバイトはプレフィックスバイトであることが注目される。命令バイト番号3−8の機能ビット値は、バイトがMODRMまたはSIBバイトであるか否か、およびバイトが変位または即値データを含むか否かを示す。
上の表1によれば、スーパースカラマイクロプロセッサ200のプリデコードユニット202は命令コードの各バイトについて機能ビットを発生するように構成されることが注目される。機能ビットの意味はそのバイトに関連した開始ビットの値に依存する。表1に例示されたスキームをエンコードするために、機能ビットの意味はさらに、先行する命令バイトに関連する開始ビットの値にも依存する。
上で述べられた特定の具体例について、もしそのバイトの開始ビットがセットされている場合には、機能ビットが、命令が直接デコード可能な命令であるか否か、またはMROM命令(以下でさらに説明する)であるか否かを示すことが理解されるであろう。命令コードのある特定のバイトに関連する開始ビットがクリアされ、開始ビットがセットされている命令コードのバイトに直接続いている場合には、機能ビットはopcodeが最初のバイトであるか、またはプレフィックスが最初のバイトであることを示す。さらに、命令コードのあるバイトの開始ビットがクリアされ、先行するバイトの開始ビットもまたクリアされている場合には、機能ビットはそのバイトがMODRMまたはSIBバイトであること、またはバイトが変位または即値データであることを示す。特定の命令の後続のバイトでは、バイト3−8においてセットされた2番目の機能ビットが即値データを示す。
上で説明されたようなスーパースカラマイクロプロセッサ200によって採用されるプリデコード方式によれば、命令コードの各バイトに関連するプリデコードタグが発生する。プリデコードタグと命令コードとはともに命令キャッシュ204にストアされ、その後スーパースカラマイクロプロセッサによって処理される。機能ビットの意味はある特定のバイトの開始ビットおよび先行するバイトの開始ビットに依存するため、命令整列ユニット206およびデコードユニット208について比較的大量のプリデコード情報を伝えることができ、比較的高速の整列およびデコード命令を達成することができる。プリデコードタグ内で必要とされるビット数は比較的小さいので、性能を犠牲にすることなく、命令キャッシュ204の必要なサイズを減じることができる。
さらに、機能ビットに保持される情報で、デコードユニットはopcode、変位、即値、レジスタおよびスケールインデックスバイトの正確な位置を知る。したがって、デコードユニットが命令バイトを順次に走査する必要はない。加えて、機能ビットはデコードユニットが8ビットの線形アドレスを(加算回路を介して)迅速に計算し、スーパースカラマイクロプロセッサ内の他のサブユニットが使用することを可能にする。したがって、比較的高速なデコードが達成され、高い性能に対処することができる。
先に述べたように、一実施例ではx86命令セットのある命令がデコードユニット208によって直接デコードされ得る。これらの命令は「ファストパス」命令と称される。x86命令セットの残りの命令は「MROM命令」と称される。MROM命令はMROMユニット209を起動することで実行される。MROM命令に遭遇すると、MROMユニット209はこの命令を規定されたファストパス命令のサブセットに構文解析して逐次化し、所望の動作を引き起こす。ファストパス命令として分類分けされたx86命令の例と、ファストパスおよびMROM命令の処理態様の説明は以下でさらに与えられる。
命令整列ユニット206は命令キャッシュ204からの可変バイト長命令をチャネリングまたは「経路分け」(funnel)してデコードユニット208A−208Fによって形成される固定された発行位置に与えるために設けられる。図3−5と関連して説明されるとおり、命令整列ユニット206は命令キャッシュ204によって境界を定められるライン内の命令の開始バイトのロケーションに依存して、命令コードを指定されたデコードユニット208Aないし208Fにチャネリングするように構成されている。一実施例では、そこに所与の命令がディスパッチされる特定のデコードユニット208A−208Fはその命令の開始バイトのロケーションとともに、もしあれば、先行する命令の開始バイトのロケーションにも依存する。あるバイトロケーションから始まる命令はさらに、予め定められた一の発行位置のみに発行されるように制限される。具体的な詳細は以下のとおりである。
命令キャッシュ204からデコードユニット208への命令の整列の説明に入る前に、図2の例示のスーパースカラマイクロプロセッサ200で採用される他のサブシステムに関する一般的な局面について説明する。図2の実施例では、デコードユニット208の各々は上で述べた予め定められたファストパス命令をデコードするためのデコード回路を含む。さらに、各デコードユニット208A−208Fは変位および即値データをリザベーションステーションユニット201A−201Fに経路付ける。デコードユニット208からの出力信号は機能ユニット201に対するビットエンコード実行命令と、オペランドアドレス情報、即値データおよび/または変位データを含む。
図2のスーパースカラマイクロプロセッサは追い越し実行をサポートしており、したがってレジスタ読出および書込動作のためのもともとのプログラムシーケンスを守るために、レジスタのリネームを実現するために、投機的な命令の実行と分岐予測の誤りからの回復を行なうために、そして、正確な例外を容易にするために、リオーダバッファ216を含む。当業者には理解されるであろうが、リオーダバッファ216内の一時的記憶ロケーションがレジスタの更新を含む命令をデコードする際に予約され、これによって投機的なレジスタの状態を記憶する。リオーダバッファ216は、投機的な結果が有効にされレジスタファイルに書込まれるとバッファの「最後部」に移動して、これによってバッファの「頭部」に新たなエントリの余地を与えるような、先入れ先出し構成で実現されてもよい。リオーダバッファ216の他の具体的な構成もまた可能であり、以下で説明される。分岐予測が不正確である場合、予測を誤った経路に沿った投機的に実行された命令の結果は、それらがレジスタファイル218に書込まれる前に、バッファ内で無効にすることができる。
デコードユニット208A−208Fの出力で与えられる即値データおよびビットエンコード実行命令は直接、それぞれのリザベーションステーションユニット210A−210Fに経路付け(route)られる。一実施例では、各リザベーションステーションユニット210A−210Fは対応の機能ユニットへの発行を待つ最大で3個の未決の(pending)命令について、命令情報を保持することができる(ビットエンコード実行ビットおよびオペランド値、オペランドタグおよび/または即値データ)。ここで注目されるのは、図2の実施例では、各デコードユニット208A−208Fが専用のリザベーションステーションユニット210A−210Fと関連付けられ、各リザベーションステーションユニット210A−210Fが同様に専用の機能ユニット212A−212Fに関連付けられていることである。したがって、6個の専用の「発行位置」がデコードユニット208、リザベーションステーションユニット210および機能ユニット212で形成される。デコードユニット208Aを介して発行位置0に整列されかつディスパッチされた命令はリザベーションステーションユニット210Aを通り、その後機能ユニット212Aに渡されて実行される。同時に、デコードユニット208Bに整列されかつ送られた命令はリザベーションステーションユニット210Bに渡され、さらに機能ユニット212Bに渡され、以下同様である。
ある特定の命令をデコードする際に、もし必要とされるオペランドがレジスタロケーションである場合には、レジスタアドレス情報がリオーダバッファ216とレジスタファイル218とに同時に経路付けられる。当業者には理解されるであろうが、x86レジスタファイルは8個の32ビットリアルレジスタを含み(典型的にはEAX、EBX、ECX、EDX、EBP、ESI、EDIおよびESPと称される)、これらは以下に詳細に説明するとおりである。リオーダバッファ216はこれらのレジスタの内容を変更する結果のための一時的記憶ロケーションを含んでおり、これによって追越し実行を可能にする。リオーダバッファ216の一時的記憶ロケーションは各命令について予約されており、これはデコードされると、リアルレジスタのうち1個の内容を修正する。したがって、あるプログラムを実行する間のさまざまな点で、リオーダバッファ216の1または2以上のロケーションには、投機的に実行された所与のレジスタの内容が含まれているかもしれない。所与の命令のデコードに続いて、リオーダバッファ216が所与の命令内のオペランドとして用いられるレジスタに割当てられた先のロケーションを有すると判断された場合には、リオーダバッファ216は対応のリザベーションステーションに以下のうちのいずれかを送る。すなわち1)最も最近に割当てられたロケーションの値、または2)最終的に先の命令を実行することとなる機能ユニットによって値が未だ生成されていない場合には、最も最近に割当てられたロケーションに対するタグ。もしリオーダバッファが所与のレジスタのために予約されたロケーションを有する場合には、オペランド値(タグ)はレジスタファイル218からではなく、リオーダバッファ216から与えられる。リオーダバッファ216内に必要とされるレジスタのために予約されたロケーションがない場合には、値はレジスタファイル218から直接得られる。オペランドがメモリロケーションに対応する場合、オペランド値はロード/ストアユニット222を介してリザベーションステーションユニットに与えられる。
好適なリオーダバッファ実現に関する詳細はマイク ジョンソン(Mike Johnson)による「スーパースカラマイクロプロセッサの設計」(“Superscalar Microprocessor Design”)、Prentice-Hall、Englewood Cliffs、New Jersey、1991、および係属中の、共通に譲受された、ウイットら(Witt, et al.)の、平成6年10月29日出願の「スーパースカラマイクロプロセッサ」と題された、特願平6−263317(特開平7−18260)にある。これらの文書は引用によりその全体をここに援用する。
リザベーションステーションユニット210A−210Fは対応の機能ユニット212A−212Fによって投機的に実行されるべき命令情報を一時的にストアするために設けられている。先に述べたとおり、各リザベーションステーションユニット210Aないし210Fは最大で3個の未決の命令について命令情報をストアすることができる。
6個のリザベーションステーション210A−210Fの各々は対応の機能ユニットによって投機的に実行されるべきビットエンコード実行命令およびオペランド値をストアするためのロケーションを含む。もし特定のオペランドが利用可能でない場合、このオペランドに対するタグがリオーダバッファ216から与えられ、結果が発生する(すなわち先の命令の実行が完了することによって)まで、対応のリザベーションステーション内にストアされる。注目されるのは、機能ユニット212A−212Fのうち1つによって命令が実行されると、この命令の結果がその結果を待っているリザベーションステーションユニット210A−210Fのいずれかに直接渡され、同時に、この結果が渡されてリオーダバッファ216を更新することである(この技術は通例「結果ディスパッチ」と称される)。いずれかの必要とされるオペランドの値が利用可能にされると、命令が実行のために機能ユニットに発行される。すなわち、リザベーションステーションユニット210A−210Fのうち1つの中の未決の命令に関連するオペランドが、リオーダバッファ216内の先の結果の値のロケーションのタグを付けられており、必要とされるオペランドを修正する命令にこれが対応する場合には、この命令は先の命令に対するオペランドの結果が得られるまで、対応の機能ユニット212には発行されない。したがって、命令が実行される順序はもともとのプログラム命令シーケンスの順序と同じではないかもしれない。リオーダバッファ216は書込後読出の依存が生じるような状況においてもデータの一貫性が維持されることを保証する。
一実施例では、機能ユニット212の各々は加算および減算の整数算術演算およびシフト、回転、論理演算および分岐動作を行なうように構成される。ここで注目されるのは、浮動小数点ユニット(図示せず)もまた浮動小数点演算に対処するために用いられ得るということである。
機能ユニット212の各々はまた、分岐予測ユニット220に対し条件付分岐命令の実行に関する情報を提供する。もし分岐予測が不正確である場合には、分岐予測ユニット220は予測誤り分岐後の命令実行パイプラインに入った命令をフラッシュし、プリフェッチ/プリデコードユニット202に命令キャッシュ204またはメインメモリから必要とされる命令をフェッチさせる。このような状況では、もともとのプログラムシーケンス内の命令であって予測誤り分岐命令の後に生じた結果は、投機的に実行されロード/ストアユニット222およびリオーダバッファ216内に一時的にストアされていたものも含め、廃棄される。好適な分岐予測メカニズムの構成例は周知である。
機能ユニット212によって生成された結果は、レジスタ値が更新されていればリオーダバッファ216に送られ、メモリロケーションの内容が変更されていればロード/ストアユニット222に送られる。もし結果がレジスタにストアされるべき場合には、リオーダバッファ216はその結果を、命令がデコードされたときにレジスタの値のために予約されていたロケーションにストアする。先に述べたとおり、結果は、未決の命令が、必要とされるオペランド値を得るために先の命令の実行の結果を待っている場合、リザベーションステーションユニット210A−210Fにもまたブロードキャストされる。
一般に、ロード/ストアユニット222は機能ユニット212A−212Fとデータキャッシュ224との間のインターフェイスを提供する。一実施例では、ロード/ストアユニット222は未決のロードまたはストアのためのデータとアドレス情報とについて8個のストアロケーションを備えたストアバッファを伴って構成される。機能ユニット212はロード/ストアユニット222へのアクセスの調停を行なう。バッファが一杯である場合(full)、機能ユニットはロード/ストアユニットが未決のロードまたはストア要求情報のためのあきを有するようになるまで待たなければならない。ロード/ストアユニット222はまた未決のストア命令に対しロード命令の依存性チェックを行ない、データの一貫性が維持されることを確実にする。
データキャッシュ224はロード/ストアユニット222とメインメモリサブシステムとの間を転送されるデータを一時的にストアするために設けられる高速キャッシュメモリである。一実施例では、データキャッシュ224は最大で8キロバイトのデータを記憶する容量を有する。データキャッシュ224は1セットのアソシアティブ構成を含む、さまざまな具体的なメモリ構成で実現され得ることが理解されるであろう。
命令キャッシュ204から命令整列ユニット206を介してデコードユニット208に至る命令のディスパッチの詳細が以下に考察される。図3は命令整列ユニット206の一実施例の内部と命令キャッシュ204から与えられる命令コードのラインに関するデコードユニット208A−208Fの内部とを示すブロック図である。先に述べたように、命令整列ユニット206は可変バイト長命令(この場合ファストパス命令と称されるある種のx86命令)をデコードユニット208A−208Fにチャネリングするように構成されている。
図3に示されるとおり、ラッチユニット302は命令キャッシュ204の出力バッファセクション301の一部として組入れられる。ラッチユニット302は命令キャッシュ204の記憶アレイ(図3では示されない)から与えられる命令コードの1ラインがデコードユニット208に送られる前に、これをストアすることが可能である。
図3の命令整列ユニット206はラッチ302とデコードユニット208との間に結合されたマルチプレクサチャネル304A−304Gと称される複数個のマルチプレクサ回路を含む。マルチプレクサコントロール回路306がさらにマルチプレクサチャネル304A−304Gの各々に結合されて示される。この実施例では、デコードユニット208A−208Fの各々が、入力がそれぞれのマルチプレクサチャネル304A−304Fに結合された関連の命令デコーダ318A−318Fを含む。各デコードユニット208A−208Fはさらにそれぞれの変位/即値データバッファ330A−330Fおよびそれぞれの命令発行ユニット340A−340Fを含む。
動作の間、実行されるべき命令コードのラインが命令キャッシュ204の記憶アレイからラッチユニット302に与えられる。命令キャッシュ204内の命令コードの各バイトは開始ビット、終了ビットおよび機能ビットを含む対応のプリデコードタグと関連付けられる。命令コードのラインがラッチユニット302に与えられると、各バイトに関連するプリデコードタグがマルチプレクサ制御回路306の入力に与えられる。以下で詳細に述べるように、ラッチユニット302内の命令コードの各ラインに対応するプリデコードタグに依存して、マルチプレクサコントロール回路306は、命令バイトが指定された命令デコーダ318A−318Fに選択的に経路付けられるようにマルチプレクサチャンネル304A−304Gを制御する。デコードユニット208A−208Fによって形成される命令パス(経路)は発行位置と称される。マルチプレクサチャネル304A−304Gを介する命令コードのチャネリングはラッチユニット302によって表わされるように各ラインに関連する各命令に付随する開始バイトのロケーションに依存する。図3の実施例では、最初の5個のマルチプレクサチャネル304A−304Fの各々はラッチユニット302からの命令コードの4個の連続したバイトをそれぞれの命令デコーダ318A−318Fに経路付ける。マルチプレクサチャネル304Gは命令コードの最大3個の連続したバイトを命令デコーダ318にチャネリングすることが可能である。
以下の表2は開始バイトがそれによってチャネリングされ得る、可能なマルチプレクサチャネル304A−304Gを例示する。上で述べたとおり、命令コードのチャネリングは所与のライン内の開始バイトのロケーションに依存する。注目されるのは、マルチプレクサチャネル304A−304Fの各々がそれに割当てられたもののうち最下位の開始バイトを、この開始バイトが下位のマルチプレクサチャネルによる経路付けのために選択されていない限り、経路付けするように構成されていることである。
表2を参照して、マルチプレクサチャネル304Aはバイト位置0−2に位置する開始バイトをデコードユニット318Aに経路付けすることが可能である。マルチプレクサチャネル304Bはバイト位置1−4にある開始バイトをデコードユニット318Bに経路付けすることが可能である。マルチプレクサチャネル304Cはバイト位置3−8の開始バイトをデコードユニット208Cに転送することが可能である。同様に、マルチプレクサチャネル304Dはバイト位置6−10にある開始バイトをデコードユニット208Dに転送することが可能であり、マルチプレクサチャネル304Eはバイト位置9−12にある開始バイトをデコードユニット208Eに転送することが可能である。最後に、マルチプレクサチャネル304Fはバイト位置12−15にある開始バイトをデコードユニット318Fに転送することが可能である。バイト位置13−15に位置付けられた開始バイトは代替的にはマルチプレクサチャネル304Gを介して、不完全な命令(すなわち次のラインまで続く命令)のラッピング(wrap)に用いられる7番目の発行位置に経路付けられてデコードのための次のキャッシュラインとされてもよい。以下にさらに説明されるように、マルチプレクサチャネル304Gを介して経路付けられた命令バイトはラッチユニット302内でその命令の残りのバイトが入手可能になったときに、次のクロックサイクルで命令デコーダ304Aに与えられる。
もし命令が後続のキャッシュラインにラッピングされると、命令の指定された位置へのディスパッチは次のラインに現われる命令の残りのバイトの性質に依存する。単に変位または即値データが次のキャッシュラインにラップアラウンドする状況では、この即値または変位データがマルチプレクサチャネル304Aを介して変位/即値データバッファ330Fに与えられる。ここで注目されるのは、この状況において、この命令の先行するバイト(先のキャッシュラインに現われるもの)が先のクロックサイクルの間命令デコーダ318Fにディスパッチされるであろうという点である。プレフィックス、opcode、MODRMおよび/またはSIBバイトが次のキャッシュラインにラップアラウンドするような状況では、先行するラインからの命令情報はマルチプレクサチャネル304Gを介して命令デコーダ318Aに経路付けられ、次のクロックサイクルの間に命令コードの残りの部分とマージされる。
ある1ラインの所与の命令がディスパッチされ得る発行位置の可能な数を制限することによって、命令整列ユニット206を実現するのに必要とされるカスケードされた論理レベルの数がうまく減じられることが分かるだろう。さらに、あるライン中のバイトロケーションの選択されたサブセットの1個にある開始バイトを有する命令のディスパッチを単一の発行位置(バイト位置5および11)のみに限定することで、命令整列のためのカスケードされた論理レベルの数がさらに減じられる。したがって、上述の命令整列ユニット206はパイプライン段当りのゲートの数が比較的少ないスーパースカラマイクロプロセッサの実現を可能にし、それによって非常に高い周波数の動作に対処することが可能になる。比較的長い命令については、発行位置がスキップされるものの、他の発行位置がキャッシュライン内の残りの命令に利用できるため、比較的高い性能を依然として達成することができる。
定義された(defined)ファストパス命令は長さが最大8バイトであって、単一のプレフィックスバイトを含み得る。注目されるのは、定義されたファストパス命令を単一のプレフィックスバイトのみに制限することによって、いかなるファストパス命令のバイト4ないし7も、もしあれば、変位および/または即値データのみを含むようにすることができる、ということである。したがって、命令が4バイトを超えるような状況では、命令の最初の4バイトがその命令の開始バイトに割当てられたマルチプレクサチャネルを介して経路付けられる。その命令の残りのバイトは次の発行位置のマルチプレクサチャネルを通ってチャネリングされる。このような状況では、この命令の残りのバイトを受ける発行位置の命令デコーダ(すなわち命令デコーダ)はその最初のバイト位置で開始ビットの不在を検出し、これにしたがってデータを先行する発行位置の変位/即値データバッファ330に渡し、NOOP命令を出す。
したがって、ある命令の開始バイトがラッチユニット302のバイト位置0に位置付けられている場合、そのバイトはバイト位置1、2および3にある次の3個の連続したバイトとともにデコードユニット208Aに与えられる。もし次の開始バイトが位置2にある場合(すなわち最初の命令が長さ2バイトである場合)、バイト2−5はマルチプレクサチャネル304Bを介してデコードユニット208Bに経路付けられる。図3の実施例では、各命令デコーダ318A−318Fは一時に1個の命令しかデコードできない。したがって、1以上の命令の開始バイトがたとえば命令デコーダ318Aに与えられたとしても、デコードされるのは最初の命令だけである。所与の命令デコーダ内のさらなる命令に対応する、最初の終了バイトを超えたバイトは無関係(extraneous)であって、実質上無視される。注目されるのは、命令整列ユニット206のマルチプレクサチャネル304が、これに代えて、命令の開始および終了プリデコードビットにしたがって単一の命令(またはその部分)のみが所与の命令デコーダ318にチャネリングされるように構成できるという点である。
上述のことにしたがって、もし最初の命令がバイト位置0で開始する場合、バイト0−3が命令デコーダ318Aに与えられる。もし命令が4バイトより長ければ、ラッチユニット302のバイト4−7がマルチプレクサチャネル304Bを介して命令デコーダ318Bに与えられ、これはその後データを変位/即値データバッファ330Aに渡す。この状況では、マルチプレクサチャネル308Cはコード内に現われる次の開始バイトを命令デコーダ318Cに経路付ける。他方で、バイトロケーション0で開始する最初の命令が4バイト以下である場合、次の命令は第2の命令の開始バイトで始まる、マルチプレクサチャネル304Bを介して経路付けられる。もし命令が4バイト長より大きければ、その命令に対応する即値または変位データがマルチプレクサチャネル304Cを介して変位/即値データバッファ330Bに経路付けられる。残りのマルチプレクサチャネルも同様に動作する。
もし即値または変位データが先のラインで開始する命令から後続のラインにラップアラウンドされる場合には、このデータは、即値または変位データがラッチユニット302内で利用可能である場合、マルチプレクサチャネル304Aを介して変位/即値データバッファ340Fに与えられる。さらに注目されるのは、命令デコードが行われないことである。なぜなら変位および即値データにはデコードが不要だからである。後続のラインの最初の命令はしたがってマルチプレクサチャネル304Bを介して命令デコーダ318Bに経路付けられる。
同様に注目されるのは、プレフィックス、opcode、MODRMおよび/またはSIB情報が先のライン上で開始する命令からラップアラウンドされる場合には、マルチプレクサチャネル304Gが命令の先行する部分を命令デコーダ318Aに経路付けることであり、この場合(次のクロックサイクルの間ラッチユニット302内の最初の開始バイトに対応する)次の命令がマルチプレクサチャネル304Bを介して命令デコーダ318Bに経路付けられる。
以下の例でよりよく理解されるとおり、所与の開始バイトが与えられるべき可能な発行位置のいずれもが、先の命令によってこれらの発行位置が占有されているために利用できない場合が生じる。このような状況が生じると、その命令とそれに続くいかなる命令も、ディスパッチのためには次のクロックサイクルまでホールドされなければならない。
以下の表3にx86命令の条件の例が示される。命令1ないし7と命令8の最初のバイトがキャッシュライン1内に示される。キャッシュライン2は命令8の2番目のバイトで始まり、さらに命令9ないし16を含む。
以下の表4は上の表3の命令のシーケンスが命令整列ユニット206によってデコードユニット208A−208Fにディスパッチされる様子を例示したものである。
命令1−5は最初のクロックサイクルの間に、それぞれデコードユニット318A−318Eに対応する発行位置0−4にディスパッチされる。ラッチユニット302のバイト位置11で始まる命令6はデコードユニット318Eに対応する発行位置4のみにチャネリングされ得る。しかしながら、発行位置4は既に命令5によって占有されているため、命令6はこのサイクルの間にディスパッチされることはできない。したがって、マルチプレクサ制御回路306はデコードユニット318Fが、命令1−4でデコードされるデコード段階の間はNOOP(no operation:動作なし)を発行するようにさせる。
クロックサイクル2の間、命令6が発行位置4にディスパッチされ、命令7が発行位置5にディスパッチされる。ここで注目されるのは、これらの命令がデコードされると、マルチプレクサ制御回路306がデコードユニット318A−318DにNOOP命令を発行させることである。命令8は次のキャッシュラインまでラップアラウンドするので、この命令の最初のバイトは次のクロックサイクルでマルチプレクサチャネル304Gを介して命令デコーダ318にラップアラウンドされる。
クロックサイクル3の間、命令8は発行位置0にディスパッチされる。注目されるのは、命令8の最初のバイトが先行するラインのバイト位置15からラップアラウンドされることである。命令9および10はさらにマルチプレクサチャネル304Bおよび304Cを介してそれぞれ発行位置1および2にディスパッチされる。命令8−10のデコードの際に、命令発行ユニット304D−EはNOOP命令を発行させる。
命令11および12はクロックサイクル4の間に発行位置2および3にディスパッチされる。命令13はバイト7で始まり、発行位置4に経路付けすることができない。したがって、命令13のディスパッチは次のクロックサイクルまでホールドされなければならない。
クロックサイクル5の間に、命令13ないし16が発行位置2ないし5にそれぞれディスパッチされる。上で説明したのと同様に、命令13−16のデコードの間、命令発行ユニット340Aおよび340Bは発行位置0および1に対してNOOP命令が発行されるようにする。
図2を再び参照して、ファストパス命令として指定されていないx86命令サブセット内に含まれる命令は、ストアされたマイクロコードを用いてMROMユニット209の制御に基づいて実行される。MROMユニット209はこのような命令を一連のファストパス命令に構文解析し、これらが1または2以上のクロックサイクルでディスパッチされる。先に述べたとおり、プリデコードユニット202は予め指定されたMROM命令に遭遇するとその命令の最初のバイトに関連する機能ビットがセットされるように構成されている。以下でさらに詳細に説明されるように、この条件はMROMユニット209により容易に検出可能であって、命令の逐次化を可能にする。
ラッチユニット202内のコードの1ラインの中でMROM命令がMROMユニット209によって検出されると、この命令とこれに続くものがあればいずれも、現在のサイクルではディスパッチされない。これに先立つ命令はいずれも、上の説明にしたがってディスパッチされる。
これに続くクロックサイクルの間、MROMユニット209はその特定のMROM命令に対するマイクロコードに従って、命令整列ユニット206を介してデコードユニット208へ一連のファストパス命令を与える。すべてのマイクロコード化された命令が整列ユニット206を介してデコードユニット208にディスパッチされて所望のMROM動作が行われると、MROM命令に続く命令をディスパッチすることが可能となる。
以下の表5はMROM命令(REP MOVSB)を含むx86アセンブリ言語コードセグメントの例を示す。
図4A−4Cは連続するクロックサイクルの間の表5の命令のディスパッチとデコードを示す、投機的プロセッサ200の一部のブロック図である。図4Aに示される最初のクロックサイクルの間、最初の2つの命令(MOVE CX,S_LENおよびCLD)がマルチプレクサチャネル304Aおよび304Bを介して発行位置0および1に経路付けされる(すなわちデコードユニット318Aおよび318B)。デコードにより、MROMユニット209はさらにデコードユニット208C−208FにNOOP命令を発行させる。
REP MOVSB命令を行わせるマイクロコード化された命令が、図4Bに示されるとおり、サイクル2ないしNの間にディスパッチされる。これらのサイクルの間に、MROMユニット209内にストアされたマイクロコードに従った1組のファストパス命令が命令整列ユニット206を介してデコードユニット208A−208Fにディスパッチされる。注目されるのは、このMROMシーケンスが完了するまでに数サイクルを要する場合があることである。
MROM命令の完全なディスパッチに続いて、MROM命令に続くラインの残りの命令をマルチプレクサチャネル304D−304Fを介して発行位置3−5にディスパッチすることが可能となる。これらの命令をデコードすると、MROMユニット209はデコードユニット208A−208CにNOOP命令を発行させる。
図2−4と関連して上で説明された命令整列ユニット206は表2に示された特定の発行位置に命令を選択的に経路付けるように構成されているが、他の構成もまた可能であることが理解されよう。すなわち、メモリの1ライン内の所与の命令がディスパッチされる特定の発行位置は、上述のものとは異なっていてもよい。さらに、この発明にしたがったデコードユニットを採用するスーパースカラマイクロプロセッサ内に設けられる発行位置の数もまた変化し得る。命令を並列デコードユニットに与えるための命令整列ユニットの他の構成もまた可能であり、デコードユニットの他の構成もまた可能である。
プリデコードユニット202によって採用される特定のプリデコードスキームも、表1に示されたものとは異なっていてもよい。たとえば、命令コードのある特定のバイトの開始ビットおよび機能ビットの値の特定の組合せが有する特定の意味は、表1に示された特定の意味と異なっていてもよい。さらに、上述の実施例の命令整列ユニット206およびデコードユニット208はある種の生のx86命令(すなわちファストパス命令)を直接転送かつデコードするように構成されているが、命令整列ユニットが生のx86命令を1または2以上の固定長命令、たとえばROPに変換するように構成されたスーパースカラマイクロプロセッサの実現例もまた可能である。このような構成では、複数のデコードユニットが変換された命令を受けかつデコードするように構成されるであろう。
上の開示が十分に理解されれば、当業者には多くの変形や修正が明らかとなるであろう。以下のクレームは、このような変更や修正のすべてを包含すると解釈されるべきである。Background of the Invention
1. Field of Invention
The present invention relates to superscalar microprocessors, and more particularly to predecoding variable byte length computer instructions within a high performance, high frequency superscalar microprocessor.
2. Explanation of related technology
EP-A-0651322 discloses a known instruction cache for a superscalar microprocessor having a variable byte length instruction format. The described superscalar microprocessor employs a method for predecoding variable byte length instructions according to the preamble of the appended
Superscalar microprocessors can achieve performance that surpasses traditional scalar processors by enabling parallel execution of multiple instructions. Due to the wide acceptance of x86 family microprocessors, efforts have been made by microprocessor manufacturers to develop superscalar microprocessors that execute x86 instructions. Such a superscalar microprocessor achieves relatively high performance while maintaining previous version compatibility with a large amount of existing software developed for previous generations of microprocessors such as 8086, 80286, 80386 and 80486. This is advantageous.
The x86 instruction set is relatively complex and features multiple variable byte length instructions. A general format illustrating the x86 instruction set is shown in FIG. 1A. As shown, the x86 instruction is an
The
Referring to FIG. 1B, several different variable byte length x86 instruction formats are shown. The shortest x86 instruction is only 1 byte in length and contains a single opcode byte as shown in format (a). In some instructions, the byte containing the opcode field also contains a register field as shown in formats (b), (c) and (e). Format (j) indicates an instruction with two opcode bytes. In formats (d), (f), (h) and (j), an optional MODRM byte follows the opcode byte. Immediate data follows the opcode byte in formats (e), (g), (i) and (k), and follows the MODRM byte in formats (f) and (h). FIG. 1C illustrates some possible address mode formats (a)-(h). Formats (c), (d), (e), (g) and (h) contain MODRM bytes with offset (ie displacement) information. In the formats (f), (g) and (h), SIB bytes are used.
Due to the complexity of the x86 instruction set, it is difficult to implement a high performance x86 compatible superscalar microprocessor. One problem arises from the fact that instructions must be aligned with respect to such processor's parallel instruction decoder before proper decoding can take place. In contrast to most RISC instruction formats, the x86 instruction set consists of variable byte length instructions, and the start bytes of consecutive instructions within a line are not necessarily evenly spaced, and the number of instructions per line is also fixed. It has not been. As a result, using simple fixed-length shift logic itself cannot solve the instruction alignment problem.
In order to help solve the problem of quickly aligning, decoding and executing a plurality of variable byte length instructions in parallel, superscalar microprocessors employing instruction predecoding techniques have been proposed. In one such superscalar microprocessor, when an instruction is written from external main memory into the instruction cache, the predecoder sets several predecode bits (collectively referred to as predecode tags) to each Append to byte. These bits indicate whether a byte is the start and / or end byte of an x86 instruction, the number of microinstructions required to implement the x86 instruction, and the location of the opcode and prefix. As instructions are fetched from the cache, the superscalar microprocessor converts each instruction into one or more microinstructions called ROPS. ROPS are similar to RISC instructions in that they are fixed length and involve simple consistent coding. Since x86 instructions are already tagged in the instruction cache as pre-decoded bits that indicate where and where instructions start and end, and how many ROPS each need, It is a relatively simple task to locate and convert each x86 instruction to one or more ROPS and provide a fixed number of ROPS to the parallel instruction decoder.
Although the predecode techniques described above are largely successful, over 50% of the available storage space in the instruction cache array must be allocated to predecode bits. This limits the amount of storage in the instruction cache for instruction codes and / or increases the cost of the processor due to increased die size.
Summary of invention
Many of the problems outlined above are solved by the method for predecoding variable byte length instructions according to the present invention. In one embodiment, a predecode unit is provided that can predecode variable byte length instructions prior to them being stored in the instruction cache. The predecode unit is configured to generate a plurality of predecode bits for each instruction byte. A plurality of predecode bits associated with each instruction byte are collectively referred to as a predecode tag. The instruction alignment unit then dispatches variable byte length instructions to the plurality of decode units using predecode tags, which form a fixed issue location within the superscalar microprocessor.
In one embodiment, the predecode unit generates three predecode bits associated with each byte of the instruction code: a “start” bit, an “end” bit, and a “function” bit. The start bit is set if the associated byte is the first byte of the instruction. Similarly, the end bit is set if the byte is the last byte of the instruction. Rather than associating a dedicated meaning with a function bit, the predecode unit determines whether the meaning of the function bit has or is associated with that state (ie whether the function bit is set) and the start bit state of that byte. It is configured to depend. The meaning of the function bit also depends on the state of the start bit of the preceding instruction byte.
For example, if the start bit of a particular byte is set in some implementations, the function bit is a “fast path” instruction or MROM instruction (which should be serialized via microcode) that the instruction can directly decode. Command). On the other hand, if the start bit of a particular byte is cleared and that byte follows directly to the start byte (the instruction byte with that start bit set), the function bit is Indicates whether this is a byte or whether the prefix is the first byte of the instruction. If the start bit of the byte is cleared and the byte does not follow the start byte, the function bit indicates that the associated byte is a MODRAM or SIB byte, or displacement or immediate data.
By utilizing predecode information from the predecode unit, the instruction alignment unit can be implemented with a relatively small number of cascaded logic gate levels and can handle very high frequency operations. Decoding units can be completed with relatively few pipeline stages from instruction alignment units. In addition, multiple decode units in which variable byte length instructions are aligned utilize predecode tags to achieve relatively fast instruction decode. Finally, the predecode unit is configured so that the meaning of the functional bits of a particular predecode tag depends on the state of the start bit, so a relatively small number of predecode bits can result in a relatively large amount of predecode. Can carry information. This therefore allows the instruction cache size to be reduced without sacrificing performance.
Furthermore, with the information held by the function bits, the decode unit can know the exact position of the opcode, displacement, immediate value, register and scale index byte. Thus, there is no need for the decode unit to scan instruction bytes serially. In addition, the function bits allow the decode unit to quickly calculate (via an adder circuit) an 8-bit linear address that can be used by other subunits in the superscalar microprocessor. Therefore, relatively quick decoding can be achieved and high performance can be accommodated.
Broadly speaking, the present invention is a method for predecoding a variable byte length instruction in a superscalar microprocessor, generating a start bit indicating whether a byte in the instruction is a start byte; And generating a termination bit that indicates whether the byte of the instruction is a termination byte and generating a function bit having a meaning that depends on the value of the start bit. To do.
[Brief description of the drawings]
Other objects and advantages of the invention will become apparent upon reading the following detailed description with reference to the accompanying drawings.
FIG. 1A is a diagram illustrating a generic x86 instruction set format.
FIG. 1B is a diagram illustrating several different variable byte length x86 instruction formats.
FIG. 1C is a diagram illustrating some possible x86 address mode formats.
FIG. 2 is a block diagram of a superscalar microprocessor including an instruction alignment unit that sends multiple instructions to six decode units.
FIG. 3 is a block diagram of an instruction alignment unit and six decode units.
4A-4C are block diagrams illustrating the execution of the MROM instruction.
While the invention is susceptible to various modifications and alternative forms, specific embodiments thereof are shown by way of example in the drawings and will be described in detail below. However, the drawings and detailed description are not intended to limit the invention to the particular forms disclosed, but contemplates all modifications, equivalents, and equivalents that are within the scope of the invention as defined by the appended claims. It is to include a modification.
Detailed Description of the Invention
With reference now to FIG. 2, a block diagram of a
In general,
The prefetch unit 203 is provided for prefetching an instruction code from the main memory and storing it in the
When prefetch unit 203 fetches an instruction from main memory,
The start and end bits of each byte indicate instruction boundaries. The function bit of each byte is further information about that byte or instruction, such as whether the instruction can be decoded directly by the decode unit 208 or the microcode procedure in which the instruction is controlled by the MROM unit 209 (described in more detail below). Has to be executed by activating, or has information such as whether the byte is a MODRM or SIB byte, or whether the byte is displacement or immediate data. Function bits may also be used to indicate the location of opcode bytes. From the following description, it will be understood that the meaning encoded in the function bits of a particular instruction byte depends on the associated start bit.
Table 1 shows an example of predecode tag encoding realized by the
According to Table 1 above, it is noted that the
For the specific example described above, if the start bit of that byte is set, the function bit indicates whether the instruction is a directly decodable instruction, or the MROM instruction (further described below). It will be understood to indicate whether or not. If the start bit associated with a particular byte of the instruction code is cleared and directly follows the byte of the instruction code for which the start bit is set, the function bit is the opcode is the first byte or the prefix Indicates that is the first byte. In addition, if the start bit of a byte with an instruction code is cleared and the start bit of the preceding byte is also cleared, the function bit indicates that the byte is a MODRM or SIB byte, or that the byte is displaced or immediate Indicates data. In subsequent bytes of a particular instruction, the second function bit set in bytes 3-8 indicates immediate data.
According to the predecode scheme employed by the
Furthermore, with the information held in the function bits, the decode unit knows the exact position of the opcode, displacement, immediate value, register and scale index byte. Therefore, it is not necessary for the decode unit to scan the instruction bytes sequentially. In addition, the function bits allow the decode unit to quickly calculate an 8 bit linear address (via an adder circuit) and use it by other subunits in the superscalar microprocessor. Accordingly, relatively fast decoding is achieved and high performance can be addressed.
As noted above, in one embodiment, certain instructions in the x86 instruction set can be decoded directly by the decode unit 208. These instructions are referred to as “fast path” instructions. The remaining instructions in the x86 instruction set are referred to as “MROM instructions”. The MROM instruction is executed by starting the
Prior to describing the alignment of instructions from the
The superscalar microprocessor of FIG. 2 supports overtaking execution, so speculative instruction execution to achieve register renaming to preserve the original program sequence for register read and write operations. A
Immediate data and bit encode execution instructions provided at the outputs of the
When decoding a particular instruction, if the required operand is a register location, register address information is routed to the
Details on implementing a suitable reorder buffer can be found in the “Superscalar Microprocessor Design” by Mike Johnson, Prentice-Hall, Englewood Cliffs, New Jersey, 1991, and pending In Japanese Patent Application No. 6-263317 (Japanese Patent Application Laid-Open No. 7-18260) entitled “Superscalar Microprocessor” filed on October 29, 1994 by Witt et al. . These documents are incorporated herein by reference in their entirety.
The
Each of the six
In one embodiment, each of the functional units 212 is configured to perform addition and subtraction integer arithmetic operations and shift, rotate, logical operations and branch operations. It is noted here that a floating point unit (not shown) can also be used to handle floating point operations.
Each of the functional units 212 also provides information to the branch prediction unit 220 regarding the execution of conditional branch instructions. If the branch prediction is inaccurate, the branch prediction unit 220 flushes the instruction that has entered the instruction execution pipeline after the mispredicted branch, and the prefetch /
The result generated by the functional unit 212 is sent to the
In general, load /
The
Details of instruction dispatch from the
As shown in FIG. 3, the
The
During operation, a line of instruction code to be executed is provided to the
Table 2 below illustrates
Referring to Table 2,
If an instruction is wrapped to a subsequent cache line, dispatching the instruction to a specified location depends on the nature of the remaining bytes of the instruction that appear on the next line. In situations where displacement or immediate data simply wraps around to the next cache line, this immediate or displacement data is provided to the displacement / immediate data buffer 330F via
By limiting the possible number of issue locations that a given instruction on a line can be dispatched, the number of cascaded logic levels required to implement the
A defined fast path instruction is up to 8 bytes in length and may contain a single prefix byte. Note that by limiting the defined fastpass instruction to only a single prefix byte, bytes 4-7 of any fastpass instruction will contain only displacement and / or immediate data, if any. It can be made. Thus, in situations where an instruction exceeds 4 bytes, the first 4 bytes of the instruction are routed through the multiplexer channel assigned to the starting byte of the instruction. The remaining bytes of the instruction are channeled through the multiplexer channel at the next issue location. In such a situation, the instruction decoder at the issue position that receives the remaining bytes of this instruction (ie, the instruction decoder) detects the absence of the start bit at that first byte position and accordingly shifts the issue position preceding the data accordingly. / Pass to immediate data buffer 330 and issue NOOP instruction.
Thus, if the start byte of an instruction is located at
In accordance with the above, if the first instruction starts at
If immediate or displacement data is wrapped around to a subsequent line from an instruction starting on the previous line, this data is sent to
Also noteworthy is that if prefix, opcode, MODRM, and / or SIB information is wrapped around from an instruction starting on the previous line,
As will be better understood in the following example, it may happen that none of the possible issue positions that should be given a given starting byte is available because these issue positions are occupied by previous instructions. When such a situation occurs, the instruction and any subsequent instructions must be held until the next clock cycle for dispatch.
Table 3 below shows examples of x86 instruction conditions.
Table 4 below illustrates how the sequence of instructions in Table 3 above is dispatched by the
Instructions 1-5 are dispatched to issue locations 0-4 corresponding to decode
During
During clock cycle 3,
During clock cycle 5, instructions 13-16 are dispatched to issue positions 2-5, respectively. Similar to that described above, instruction issue units 340A and 340B cause NOOP instructions to be issued to issue
Referring back to FIG. 2, instructions included in the x86 instruction subset that are not designated as fast path instructions are executed under the control of the
When an MROM instruction is detected by the
During subsequent clock cycles, the
Table 5 below shows an example of an x86 assembly language code segment containing an MROM instruction (REP MOVSB).
4A-4C are block diagrams of a portion of
Microcoded instructions that cause a REP MOVSB instruction to be dispatched during
Following complete dispatch of the MROM instruction, the remaining instructions on the line following the MROM instruction can be dispatched to issue locations 3-5 via
The
The particular predecode scheme employed by the
Numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. The following claims should be construed to include all such changes and modifications.
Claims (25)
前記可変バイト長命令をプリデコードして、前記境界ビットの値に依存する意味をもつ機能ビットを発生するステップとを含むことを特徴とする、
スーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。 Predecoding a variable byte length instruction to generate a boundary bit indicating whether a byte with the variable byte length instruction is a boundary byte;
Predecoding the variable byte length instruction to generate a functional bit having a meaning depending on a value of the boundary bit.
A method for predecoding variable byte length instructions in a superscalar microprocessor (200).
前記命令の前記バイトが終了バイトであるか否かを示す終了ビットを発生するステップをさらに含む、
請求項1に記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。The boundary bit is a start bit;
Generating an end bit indicating whether the byte of the instruction is an end byte;
A method for predecoding variable byte length instructions in a superscalar microprocessor (200) according to claim 1.
請求項1から6のいずれかに記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。Providing the start bit, the end bit and the function bit to an instruction decoder (208);
A method for predecoding variable byte length instructions in a superscalar microprocessor (200) according to any of the preceding claims.
請求項7に記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。Detecting the start bit, the end bit and the function bit in the instruction decoder (208) to determine a boundary of the instruction;
A method for predecoding variable byte length instructions in a superscalar microprocessor (200) according to claim 7.
フェッチされた前記可変バイト長命令と生成された前記プリデコードタグをストアする命令キャッシュ(204)と、
前記命令キャッシュにストアされた複数の前記可変バイト長命令を前記プリデコードタグに従って受け取る複数のデコードユニット(208)とを含み、前記プリデコードタグは前記バイトが前記命令の境界であるか否かを示す値を有する境界ビットを含み、さらに前記境界ビットの前記値に依存する意味を持つ機能ビットを含む、
スーパースカラマイクロプロセッサ。 A predecode unit (202) for fetching a plurality of variable byte length instructions to generate a predecode tag associated with the bytes of the variable byte length instruction;
An instruction cache (204) for storing the fetched variable byte length instruction and the generated predecode tag;
A plurality of decode units (208) for receiving a plurality of the variable byte length instructions stored in the instruction cache according to the predecode tag, wherein the predecode tag indicates whether the byte is a boundary of the instruction or not. Including a boundary bit having a value to indicate, and further including a function bit having a meaning dependent on the value of the boundary bit,
Super scalar microprocessor.
前記命令キャッシュ(204)と前記複数のデコードユニット(208)との間に結合され前記複数のデコードユニット(208)にデコード可能な命令を与える命令整列ユニット(206)を含む、請求項9から13のいずれかに記載のスーパースカラマイクロプロセッサ(200)。The boundary bit is a start bit having a value indicating whether the byte is a start byte of the instruction, and the plurality of decode units (208) are designated instructions corresponding to the plurality of variable byte length instructions. An instruction alignment unit coupled between the instruction cache (204) and the plurality of decode units (208) to provide a decodeable instruction to the plurality of decode units (208) The superscalar microprocessor (200) according to any of claims 9 to 13, comprising (206).
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US1996/011757 WO1998002797A1 (en) | 1996-07-16 | 1996-07-16 | Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000515274A JP2000515274A (en) | 2000-11-14 |
JP3732233B2 true JP3732233B2 (en) | 2006-01-05 |
Family
ID=22255460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP50595198A Expired - Fee Related JP3732233B2 (en) | 1996-07-16 | 1996-07-16 | Method and apparatus for predecoding variable byte length instructions in a superscalar microprocessor |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP0912923A1 (en) |
JP (1) | JP3732233B2 (en) |
WO (1) | WO1998002797A1 (en) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050138331A1 (en) * | 2003-12-22 | 2005-06-23 | Alberola Carl A. | Direct memory access unit with instruction pre-decoder |
JP5357475B2 (en) | 2008-09-09 | 2013-12-04 | ルネサスエレクトロニクス株式会社 | Data processor |
JP5657760B2 (en) * | 2013-08-30 | 2015-01-21 | ルネサスエレクトロニクス株式会社 | Data processor |
US11204768B2 (en) | 2019-11-06 | 2021-12-21 | Onnivation Llc | Instruction length based parallel instruction demarcator |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE69231011T2 (en) * | 1991-02-08 | 2000-09-28 | Fujitsu Ltd., Kawasaki | Cache memory for processing command data and data processor with the same |
GB2263987B (en) * | 1992-02-06 | 1996-03-06 | Intel Corp | End bit markers for instruction decode |
US5689672A (en) * | 1993-10-29 | 1997-11-18 | Advanced Micro Devices, Inc. | Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions |
US5758116A (en) * | 1994-09-30 | 1998-05-26 | Intel Corporation | Instruction length decoder for generating output length indicia to identity boundaries between variable length instructions |
-
1996
- 1996-07-16 JP JP50595198A patent/JP3732233B2/en not_active Expired - Fee Related
- 1996-07-16 EP EP96925323A patent/EP0912923A1/en not_active Withdrawn
- 1996-07-16 WO PCT/US1996/011757 patent/WO1998002797A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
JP2000515274A (en) | 2000-11-14 |
EP0912923A1 (en) | 1999-05-06 |
WO1998002797A1 (en) | 1998-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5758114A (en) | High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor | |
US5337415A (en) | Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency | |
JP3794917B2 (en) | Branch selectors associated with byte ranges in the instruction cache to quickly identify branch predictions | |
US20060174089A1 (en) | Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture | |
US6049863A (en) | Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor | |
US6275927B2 (en) | Compressing variable-length instruction prefix bytes | |
JP5424653B2 (en) | Instruction predecode for multiple instruction sets | |
JPH087681B2 (en) | Scalar instruction Method for determining and indicating parallel executability, and method for identifying adjacent scalar instructions that can be executed in parallel | |
JP3803723B2 (en) | Branch prediction mechanism that employs a branch selector that selects branch prediction | |
US6260134B1 (en) | Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte | |
JPH07182163A (en) | Decoding/issuing apparatus of superscalar instruction | |
US6202142B1 (en) | Microcode scan unit for scanning microcode instructions using predecode data | |
US5987235A (en) | Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions | |
US5872947A (en) | Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions | |
US6460116B1 (en) | Using separate caches for variable and generated fixed-length instructions | |
US5740392A (en) | Method and apparatus for fast decoding of 00H and OFH mapped instructions | |
US5778246A (en) | Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline | |
US5835744A (en) | Microprocessor configured to swap operands in order to minimize dependency checking logic | |
US5991869A (en) | Superscalar microprocessor including a high speed instruction alignment unit | |
JP3732233B2 (en) | Method and apparatus for predecoding variable byte length instructions in a superscalar microprocessor | |
US6253309B1 (en) | Forcing regularity into a CISC instruction set by padding instructions | |
US6175908B1 (en) | Variable byte-length instructions using state of function bit of second byte of plurality of instructions bytes as indicative of whether first byte is a prefix byte | |
US5940602A (en) | Method and apparatus for predecoding variable byte length instructions for scanning of a number of RISC operations | |
US5898851A (en) | Method and apparatus for five bit predecoding variable length instructions for scanning of a number of RISC operations | |
JP2886838B2 (en) | Apparatus and method for parallel decoding of variable length instructions in super scalar pipelined data processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050201 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050428 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050620 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050727 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050913 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051012 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091021 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091021 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101021 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111021 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111021 Year of fee payment: 6 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111021 Year of fee payment: 6 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121021 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |