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 PDF

Info

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
Application number
JP50595198A
Other languages
Japanese (ja)
Other versions
JP2000515274A (en
Inventor
トラン,タング・エム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2000515274A publication Critical patent/JP2000515274A/en
Application granted granted Critical
Publication of JP3732233B2 publication Critical patent/JP3732233B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction 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バイトであるか否か、およびバイトが変位または即値データを含むか否かを示す。

Figure 0003732233
上の表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の各々がそれに割当てられたもののうち最下位の開始バイトを、この開始バイトが下位のマルチプレクサチャネルによる経路付けのために選択されていない限り、経路付けするように構成されていることである。
Figure 0003732233
表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を含む。
Figure 0003732233
以下の表4は上の表3の命令のシーケンスが命令整列ユニット206によってデコードユニット208A−208Fにディスパッチされる様子を例示したものである。
Figure 0003732233
命令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アセンブリ言語コードセグメントの例を示す。
Figure 0003732233
図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 claim 1 and has the preamble features of the appended claim 14.
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 optional prefix byte 102 of 1 to 5, followed by an operation code (opcode) field 104, an optional address mode (Mod r / M) byte 106, an optional scale-index-base. (SIB) consists of byte 108, optional displacement field 110 and optional immediate data field 112.
The opcode field 104 defines the basic operation of a particular instruction. The default behavior of certain opcodes can be modified by one or more prefix bytes. For example, one prefix byte can be used to change the instruction address or operand size and override the default segment used for the memory address, or to instruct the processor to repeat a series of operations a number of times. The opcode field 104 follows the prefix byte 102, if any, and has a length of 1 or 2 bytes. Address mode (MODRM) byte 106 identifies the register and memory address mode used. The scale-index-base (SIB) byte defines which register contains the base value for the address calculation, and the index field specifies which register contains the index value. The scale field specifies the power of 2 to be multiplied before the index value is added, and if there is any displacement in the base value. The next instruction field is an optional displacement field 110, which is 1 to 4 bytes in length. The displacement field 110 contains constants used for address calculation. The optional immediate field 112 is also 1 to 4 bytes long and contains a constant used as an instruction operand. 80286 sets the maximum instruction length to 10 bytes, while 80386 and 80486 both allow instruction lengths up to 15 bytes.
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 superscalar microprocessor 200 including a predecode unit 202 operating in accordance with the method of the present invention is shown. As illustrated in the embodiment of FIG. 2, superscalar microprocessor 200 includes a predecode unit 202 and a branch prediction unit 220 coupled to instruction cache 204. A prefetch unit 203 is coupled to the predecode unit 202. An instruction alignment unit 206 is coupled between the instruction cache 204 and a plurality of decode units 208A-208F (collectively referred to as decode units 208). Each decode unit 208A-208F is coupled to a respective reservation station 210A-210F (collectively referred to as reservation station 210), and each reservation station 210A-210F is coupled to a respective functional unit 212A-212F (collectively). Referred to as functional unit 212). Decode unit 208, reservation station 210 and functional unit 212 are further coupled to reorder buffer 216, register file 218 and load / store unit 222. Data cache 224 is finally shown coupled to load / store unit 222 and MROM unit 209 is shown coupled to instruction alignment unit 206.
In general, instruction cache 204 is a high speed cache memory provided for temporarily storing instructions before they are sent to instruction decode unit 208. In one embodiment, the instruction cache 204 is configured to cache instruction codes, organized in lines of up to 32 kilobytes, each 16 bytes (where each byte consists of 8 bits). . During operation, the instruction code is provided to the instruction cache 204 by the prefetch code from the main memory (not shown) through the prefetch unit 203. For each byte of the instruction code, the instruction cache 204 further stores a predecode tag associated with it. Note that the instruction cache 204 can be implemented in either a set associative, full associative, or direct map configuration.
The prefetch unit 203 is provided for prefetching an instruction code from the main memory and storing it in the instruction cache 204. In one embodiment, prefetch unit 203 is configured to burst a 64-bit wide code from main memory to instruction cache 204. It will be appreciated that various specific code prefetch techniques and algorithms can be employed in the prefetch unit 203.
When prefetch unit 203 fetches an instruction from main memory, predecode unit 202 generates three predecode bits associated with each byte of the instruction code. That is, a “start” bit, an “end” bit, and a “function” bit.
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 predecode unit 202. As shown in the table, if a given byte is the first byte of an instruction, when that byte is fetched from main memory and stored in instruction cache 204, the start bit of that byte is set by predecode unit 202 Is done. If that byte is the last byte of the instruction, the end bit of that byte is set. If a particular instruction cannot be directly decoded by the decode unit, the function bit associated with the first byte of the instruction is set. On the other hand, if the instruction can be decoded directly by the decode unit 208, the function bit associated with the first byte of the instruction is cleared. The function bit of the second byte of a particular instruction is cleared if opcode is the first byte, and is set if opcode is the second byte. Note that in situations where the opcode is the second byte, the first byte is a prefix byte. The function bit value of instruction byte number 3-8 indicates whether the byte is a MODRM or SIB byte and whether the byte contains displacement or immediate data.
Figure 0003732233
According to Table 1 above, it is noted that the predecode unit 202 of the superscalar microprocessor 200 is configured to generate a function bit for each byte of the instruction code. The meaning of the function bit depends on the value of the start bit associated with that byte. To encode the scheme illustrated in Table 1, the meaning of the function bit also depends on the value of the start bit associated with the preceding instruction byte.
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 superscalar microprocessor 200 as described above, a predecode tag associated with each byte of the instruction code is generated. Both the predecode tag and the instruction code are stored in the instruction cache 204 and then processed by the superscalar microprocessor. Since the meaning of the function bits depends on the start bit of a particular byte and the start bit of the preceding byte, a relatively large amount of predecode information can be conveyed for the instruction alignment unit 206 and the decode unit 208, and a relatively fast Align and decode instructions can be achieved. Since the number of bits required in the predecode tag is relatively small, the required size of the instruction cache 204 can be reduced without sacrificing performance.
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 MROM unit 209. Upon encountering an MROM instruction, the MROM unit 209 parses and serializes this instruction into a defined subset of fastpath instructions to cause the desired action. An example of an x86 instruction classified as a fastpath instruction and a description of the processing aspects of the fastpath and MROM instructions are given further below.
Instruction alignment unit 206 is provided for channeling or “funneling” variable byte length instructions from instruction cache 204 to a fixed issue location formed by decode units 208A-208F. As described in connection with FIGS. 3-5, the instruction alignment unit 206 depends on the location of the start byte of the instruction within the line bounded by the instruction cache 204, and the decode unit 208A through the instruction code specified. It is configured to channel to 208F. In one embodiment, the particular decode unit 208A-208F to which a given instruction is dispatched depends on the location of the start byte of that instruction, as well as the location of the start byte of the preceding instruction, if any. An instruction starting from a certain byte location is further restricted to be issued to only one predetermined issue position. Specific details are as follows.
Prior to describing the alignment of instructions from the instruction cache 204 to the decode unit 208, general aspects relating to other subsystems employed in the exemplary superscalar microprocessor 200 of FIG. 2 will be described. In the embodiment of FIG. 2, each of the decode units 208 includes a decode circuit for decoding the predetermined fast path instruction described above. In addition, each decode unit 208A-208F routes displacement and immediate data to reservation station units 201A-201F. The output signal from the decode unit 208 includes a bit encode execution instruction for the functional unit 201, operand address information, immediate data, and / or displacement data.
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 reorder buffer 216 is included to recover from branch prediction errors and to facilitate accurate exceptions. As will be appreciated by those skilled in the art, a temporary storage location in reorder buffer 216 is reserved in decoding instructions that include register updates, thereby storing speculative register states. The reorder buffer 216 moves to the “end” of the buffer when the speculative result is validated and written to the register file, thereby leaving room for a new entry in the “head” of the buffer, It may be realized in a first-in first-out configuration. Other specific configurations of reorder buffer 216 are also possible and are described below. If the branch prediction is inaccurate, the results of speculatively executed instructions along the path that mispredicted can be invalidated in the buffer before they are written to register file 218.
Immediate data and bit encode execution instructions provided at the outputs of the decode units 208A-208F are routed directly to the respective reservation station units 210A-210F. In one embodiment, each reservation station unit 210A-210F can hold instruction information for up to three pending instructions waiting to be issued to the corresponding functional unit (bit encoding execution bits and operands). Value, operand tag, and / or immediate data). It is noted that in the embodiment of FIG. 2, each decode unit 208A-208F is associated with a dedicated reservation station unit 210A-210F, and each reservation station unit 210A-210F is similarly dedicated to a functional unit 212A- It is related to 212F. Accordingly, six dedicated “issue positions” are formed by the decode unit 208, the reservation station unit 210, and the functional unit 212. Instructions aligned and dispatched to issue position 0 via decode unit 208A pass through reservation station unit 210A and are then passed to functional unit 212A for execution. At the same time, the instructions aligned and sent to decode unit 208B are passed to reservation station unit 210B, further passed to functional unit 212B, and so on.
When decoding a particular instruction, if the required operand is a register location, register address information is routed to the reorder buffer 216 and the register file 218 simultaneously. As will be appreciated by those skilled in the art, the x86 register file contains eight 32-bit real registers (typically referred to as EAX, EBX, ECX, EDX, EBP, ESI, EDI and ESP). These are as described in detail below. Reorder buffer 216 contains temporary storage locations for the results of changing the contents of these registers, thereby allowing overtaking execution. A temporary storage location in reorder buffer 216 is reserved for each instruction, which, when decoded, modifies the contents of one of the real registers. Thus, at various points during execution of a program, one or more locations of reorder buffer 216 may contain the contents of a given register that was speculatively executed. If, following the decoding of a given instruction, it is determined that the reorder buffer 216 has a previous location assigned to a register used as an operand in the given instruction, the reorder buffer 216 will correspond to the corresponding reservation station. Send one of the following: Ie, 1) the value of the most recently assigned location, or 2) for the most recently assigned location if the value has not yet been generated by the functional unit that will eventually execute the previous instruction. tag. If the reorder buffer has a reserved location for a given register, the operand value (tag) is provided from the reorder buffer 216, not from the register file 218. If there is no reserved location for the required register in reorder buffer 216, the value is obtained directly from register file 218. If the operand corresponds to a memory location, the operand value is provided to the reservation station unit via the load / store unit 222.
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 reservation station units 210A-210F are provided for temporarily storing instruction information to be executed speculatively by the corresponding functional units 212A-212F. As previously mentioned, each reservation station unit 210A-210F can store instruction information for up to three outstanding instructions.
Each of the six reservation stations 210A-210F includes a location for storing a bit encode execution instruction and operand values to be executed speculatively by the corresponding functional unit. If a particular operand is not available, a tag for this operand is provided from the reorder buffer 216 and stored in the corresponding reservation station until a result occurs (ie, execution of the previous instruction is complete). . It is noted that when an instruction is executed by one of the functional units 212A-212F, the result of this instruction is passed directly to one of the reservation station units 210A-210F waiting for the result, This result is passed to update the reorder buffer 216 (this technique is commonly referred to as “result dispatch”). When any required operand value is made available, an instruction is issued to the functional unit for execution. That is, the operand associated with the pending instruction in one of the reservation station units 210A-210F has been tagged with the location of the previous result value in the reorder buffer 216, modifying the required operand. If this corresponds to the instruction to be executed, this instruction is not issued to the corresponding functional unit 212 until the result of the operand for the previous instruction is obtained. Thus, the order in which instructions are executed may not be the same as the order of the original program instruction sequence. The reorder buffer 216 ensures that data consistency is maintained even in situations where post-write read dependencies occur.
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 / predecode unit 202 needs it from the instruction cache 204 or main memory. Causes the instruction to be fetched. In such a situation, the instructions that were in the original program sequence and occurred after the mispredicted branch instruction were speculatively executed and temporarily stored in the load / store unit 222 and the reorder buffer 216. It is discarded including things. A configuration example of a suitable branch prediction mechanism is well known.
The result generated by the functional unit 212 is sent to the reorder buffer 216 if the register value has been updated, and sent to the load / store unit 222 if the contents of the memory location have changed. If the result is to be stored in a register, reorder buffer 216 stores the result in the location reserved for the value of the register when the instruction was decoded. As previously mentioned, the result is also broadcast to the reservation station units 210A-210F if the pending instruction is waiting for the result of execution of the previous instruction to obtain the required operand value.
In general, load / store unit 222 provides an interface between functional units 212A-212F and data cache 224. In one embodiment, the load / store unit 222 is configured with a store buffer with 8 store locations for data and address information for pending loads or stores. The functional unit 212 arbitrates access to the load / store unit 222. If the buffer is full (full), the functional unit must wait until the load / store unit has room for pending load or store request information. The load / store unit 222 also performs load instruction dependency checks on pending store instructions to ensure that data consistency is maintained.
The data cache 224 is a high-speed cache memory provided for temporarily storing data transferred between the load / store unit 222 and the main memory subsystem. In one embodiment, the data cache 224 has a capacity to store up to 8 kilobytes of data. It will be appreciated that the data cache 224 may be implemented with a variety of specific memory configurations, including a set of associative configurations.
Details of instruction dispatch from the instruction cache 204 through the instruction alignment unit 206 to the decode unit 208 are discussed below. FIG. 3 is a block diagram illustrating the interior of one embodiment of instruction alignment unit 206 and the interior of decode units 208A-208F for instruction code lines provided from instruction cache 204. As previously mentioned, the instruction alignment unit 206 is configured to channel variable byte length instructions (a type of x86 instruction in this case referred to as a fast path instruction) to the decode units 208A-208F.
As shown in FIG. 3, the latch unit 302 is incorporated as part of the output buffer section 301 of the instruction cache 204. Latch unit 302 may store a line of instruction code provided from a storage array of instruction cache 204 (not shown in FIG. 3) before it is sent to decode unit 208.
The instruction alignment unit 206 of FIG. 3 includes a plurality of multiplexer circuits referred to as multiplexer channels 304A-304G coupled between the latch 302 and the decode unit 208. A multiplexer control circuit 306 is further shown coupled to each of the multiplexer channels 304A-304G. In this embodiment, each of decode units 208A-208F includes an associated instruction decoder 318A-318F whose inputs are coupled to respective multiplexer channels 304A-304F. Each decode unit 208A-208F further includes a respective displacement / immediate data buffer 330A-330F and a respective instruction issue unit 340A-340F.
During operation, a line of instruction code to be executed is provided to the latch unit 302 from the storage array of the instruction cache 204. Each byte of instruction code in instruction cache 204 is associated with a corresponding predecode tag that includes a start bit, an end bit, and a function bit. When a line of instruction code is provided to latch unit 302, a predecode tag associated with each byte is provided to the input of multiplexer control circuit 306. As described in detail below, depending on the predecode tag corresponding to each line of instruction code in latch unit 302, multiplexer control circuit 306 selectively directs instruction decoders 318A-318F to which instruction bytes are designated. Control multiplexer channels 304A-304G to be routed. The instruction path (path) formed by the decode units 208A-208F is called an issue position. Instruction code channeling through multiplexer channels 304A-304G depends on the location of the start byte associated with each instruction associated with each line as represented by latch unit 302. In the embodiment of FIG. 3, each of the first five multiplexer channels 304A-304F routes four consecutive bytes of instruction code from latch unit 302 to a respective instruction decoder 318A-318F. Multiplexer channel 304G can channel up to three consecutive bytes of the instruction code to instruction decoder 318.
Table 2 below illustrates possible multiplexer channels 304A-304G by which the start byte can be channeled. As mentioned above, instruction code channeling depends on the location of the starting byte within a given line. It is noted that each of the multiplexer channels 304A-304F routes the least significant start byte assigned to it unless this start byte is selected for routing by the lower multiplexer channel. It is configured as follows.
Figure 0003732233
Referring to Table 2, multiplexer channel 304A can route the starting byte located at byte positions 0-2 to decode unit 318A. Multiplexer channel 304B can route the starting byte at byte positions 1-4 to decode unit 318B. Multiplexer channel 304C can transfer the starting byte at byte positions 3-8 to decode unit 208C. Similarly, multiplexer channel 304D can transfer the start byte at byte positions 6-10 to decode unit 208D, and multiplexer channel 304E can transfer the start byte at byte positions 9-12 to decode unit 208E. Is possible. Finally, multiplexer channel 304F can transfer the starting byte at byte positions 12-15 to decode unit 318F. The starting byte located at byte positions 13-15 is alternatively passed through multiplexer channel 304G to the seventh issue position used to wrap incomplete instructions (ie instructions that continue to the next line). It may be routed to be the next cache line for decoding. As will be described further below, the instruction byte routed through multiplexer channel 304G is transferred to instruction decoder 304A in the next clock cycle when the remaining bytes of that instruction are available in latch unit 302. Given to.
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 multiplexer channel 304A. It is noted here that in this situation, the preceding byte of this instruction (which appears in the previous cache line) will be dispatched to instruction decoder 318F during the previous clock cycle. In situations where the prefix, opcode, MODRM and / or SIB bytes wrap around to the next cache line, the instruction information from the previous line is routed to instruction decoder 318A via multiplexer channel 304G for the next clock cycle. Merged with the rest of the instruction code.
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 instruction alignment unit 206 can be successfully reduced. You will understand. In addition, for instruction alignment by limiting the dispatch of instructions with a starting byte in one of the selected subset of byte locations in a line to only a single issue position (byte positions 5 and 11) The number of cascaded logic levels is further reduced. Thus, the instruction alignment unit 206 described above enables the implementation of a superscalar microprocessor with a relatively small number of gates per pipeline stage, thereby allowing for very high frequency operation. For relatively long instructions, although issue positions are skipped, relatively high performance can still be achieved because other issue positions are available for the remaining instructions in the cache line.
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 byte position 0 of latch unit 302, that byte is provided to decode unit 208A along with the next three consecutive bytes at byte positions 1, 2 and 3. If the next starting byte is at position 2 (ie, the first instruction is 2 bytes in length), bytes 2-5 are routed through the multiplexer channel 304B to the decode unit 208B. In the embodiment of FIG. 3, each instruction decoder 318A-318F can only decode one instruction at a time. Thus, even if the start byte of one or more instructions is provided to instruction decoder 318A, for example, only the first instruction is decoded. Bytes beyond the first end byte that correspond to further instructions in a given instruction decoder are extraneous and are substantially ignored. Note that the multiplexer channel 304 of the instruction alignment unit 206 instead channels only a single instruction (or portion thereof) to a given instruction decoder 318 according to the start and end predecode bits of the instruction. It can be configured as described.
In accordance with the above, if the first instruction starts at byte position 0, bytes 0-3 are provided to instruction decoder 318A. If the instruction is longer than 4 bytes, bytes 4-7 of latch unit 302 are provided to instruction decoder 318B via multiplexer channel 304B, which then passes the data to displacement / immediate data buffer 330A. In this situation, multiplexer channel 308C routes the next start byte that appears in the code to instruction decoder 318C. On the other hand, if the first instruction starting at byte location 0 is 4 bytes or less, the next instruction is routed through multiplexer channel 304B, starting at the start byte of the second instruction. If the instruction is greater than 4 bytes long, the immediate or displacement data corresponding to that instruction is routed through the multiplexer channel 304C to the displacement / immediate data buffer 330B. The remaining multiplexer channels operate similarly.
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 multiplexer channel 304A if immediate or displacement data is available in latch unit 302. To the displacement / immediate data buffer 340F. It is further noted that instruction decoding is not performed. This is because the displacement and immediate data need not be decoded. The first instruction in the subsequent line is therefore routed to instruction decoder 318B via multiplexer channel 304B.
Also noteworthy is that if prefix, opcode, MODRM, and / or SIB information is wrapped around from an instruction starting on the previous line, multiplexer channel 304G passes the preceding part of the instruction to instruction decoder 318A. Routing, in which case the next instruction (corresponding to the first starting byte in latch unit 302 for the next clock cycle) is routed through multiplexer channel 304B to instruction decoder 318B.
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. Instructions 1 through 7 and the first byte of instruction 8 are shown in cache line 1. Cache line 2 begins with the second byte of instruction 8 and further includes instructions 9-16.
Figure 0003732233
Table 4 below illustrates how the sequence of instructions in Table 3 above is dispatched by the instruction alignment unit 206 to the decode units 208A-208F.
Figure 0003732233
Instructions 1-5 are dispatched to issue locations 0-4 corresponding to decode units 318A-318E, respectively, during the first clock cycle. Instruction 6 starting at byte position 11 of latch unit 302 may be channeled only to issue position 4 corresponding to decode unit 318E. However, since issue position 4 is already occupied by instruction 5, instruction 6 cannot be dispatched during this cycle. Accordingly, the multiplexer control circuit 306 causes the decode unit 318F to issue a NOOP (no operation) during the decode phase decoded by the instruction 1-4.
During clock cycle 2, instruction 6 is dispatched to issue position 4 and instruction 7 is dispatched to issue position 5. It is noted that when these instructions are decoded, the multiplexer control circuit 306 causes the decode units 318A-318D to issue a NOOP instruction. Since instruction 8 wraps around to the next cache line, the first byte of this instruction wraps around to instruction decoder 318 via multiplexer channel 304G in the next clock cycle.
During clock cycle 3, instruction 8 is dispatched to issue position 0. It is noted that the first byte of instruction 8 is wrapped around from byte position 15 of the preceding line. Instructions 9 and 10 are further dispatched to issue locations 1 and 2 via multiplexer channels 304B and 304C, respectively. When the instruction 8-10 is decoded, the instruction issuing unit 304D-E issues a NOOP instruction.
Instructions 11 and 12 are dispatched to issue positions 2 and 3 during clock cycle 4. Instruction 13 begins at byte 7 and cannot be routed to issue position 4. Therefore, the dispatch of instruction 13 must be held until the next clock cycle.
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 locations 0 and 1 during decoding of instructions 13-16.
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 MROM unit 209 using stored microcode. The MROM unit 209 parses such instructions into a series of fast path instructions, which are dispatched in one or more clock cycles. As previously mentioned, predecode unit 202 is configured such that when a pre-designated MROM instruction is encountered, a function bit associated with the first byte of the instruction is set. As will be explained in more detail below, this condition is easily detectable by the MROM unit 209 and allows instruction serialization.
When an MROM instruction is detected by the MROM unit 209 in one line of code in the latch unit 202, any of this instruction and any subsequent ones are not dispatched in the current cycle. Any preceding instructions are dispatched according to the above description.
During subsequent clock cycles, the MROM unit 209 provides a series of fast path instructions to the decode unit 208 via the instruction alignment unit 206 according to the microcode for that particular MROM instruction. Once all the microcoded instructions are dispatched to the decode unit 208 via the alignment unit 206 to perform the desired MROM operation, the instructions following the MROM instruction can be dispatched.
Table 5 below shows an example of an x86 assembly language code segment containing an MROM instruction (REP MOVSB).
Figure 0003732233
4A-4C are block diagrams of a portion of speculative processor 200 illustrating the dispatching and decoding of the instructions in Table 5 during successive clock cycles. During the first clock cycle shown in FIG. 4A, the first two instructions (MOVE CX, S_LEN and CLD) are routed to issue locations 0 and 1 via multiplexer channels 304A and 304B (ie, decode unit 318A and 318B). By decoding, the MROM unit 209 further causes the decode units 208C-208F to issue a NOOP instruction.
Microcoded instructions that cause a REP MOVSB instruction to be dispatched during cycles 2 through N, as shown in FIG. 4B. During these cycles, a set of fast path instructions according to the microcode stored in the MROM unit 209 is dispatched to the decode units 208A-208F via the instruction alignment unit 206. It is noted that this MROM sequence can take several cycles to complete.
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 multiplexer channels 304D-304F. When these instructions are decoded, MROM unit 209 causes decode units 208A-208C to issue NOOP instructions.
The instruction alignment unit 206 described above in connection with FIGS. 2-4 is configured to selectively route instructions to the specific issue locations shown in Table 2, although other configurations are possible. It will be understood that. That is, the particular issue location at which a given instruction within a line of memory is dispatched may be different from that described above. Furthermore, the number of issue positions provided in a superscalar microprocessor employing a decode unit according to the invention can also vary. Other configurations of instruction alignment units for providing instructions to the parallel decode unit are also possible, and other configurations of the decode unit are also possible.
The particular predecode scheme employed by the predecode unit 202 may also be different from that shown in Table 1. For example, the specific meaning of a particular combination of the start bit and function bit values of a particular byte of an instruction code may differ from the specific meanings shown in Table 1. Further, although the instruction alignment unit 206 and decode unit 208 of the above-described embodiment are configured to directly transfer and decode certain raw x86 instructions (ie, fast path instructions), the instruction alignment unit is a raw x86. An implementation of a superscalar microprocessor configured to convert instructions to one or more fixed length instructions, eg, ROP, is also possible. In such a configuration, a plurality of decode units will be configured to receive and decode the converted instruction.
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または2に記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。The predecoding of variable byte length instructions within a superscalar microprocessor (200) according to claim 1 or 2, wherein the meaning of the function bits also depends on the value of a predecode bit associated with another byte of the instruction. How to do. 前記機能ビットの前記意味はさらに命令の隣接するバイトが境界バイトであるか否かに依存する、請求項1または2に記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。Predecoding variable byte length instructions within a superscalar microprocessor (200) according to claim 1 or 2, wherein the meaning of the function bits further depends on whether or not adjacent bytes of the instruction are boundary bytes. Way for. 前記機能ビットの前記意味はさらに先の命令バイトの対応の開始ビットの値にも依存する、請求項1または2に記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。3. To predecode a variable byte length instruction in a superscalar microprocessor (200) according to claim 1 or 2, wherein the meaning of the function bit further depends on the value of the corresponding start bit of the previous instruction byte. the method of. 前記機能ビットはオペレーションコードが前記命令の最初のバイトであるか否かを示す、請求項1から5のいずれかに記載のスーパースカラマイクロプロセッサ(200)内で可変バイト長命令をプリデコードするための方法。6. To predecode a variable byte length instruction in a superscalar microprocessor (200) according to any of claims 1 to 5, wherein the function bit indicates whether the operation code is the first byte of the instruction. the method of. 前記開始ビット、前記終了ビットおよび前記機能ビットを命令デコーダ(208)に与えるステップをさらに含む、
請求項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.
前記命令デコーダ(208)内で前記開始ビット、前記終了ビットおよび前記機能ビットを検出して前記命令の境界を決定するステップをさらに含む、
請求項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.
複数の可変バイト長命令がフェッチされて、前記可変バイト長命令のバイトに関連したプリデコードタグを生成するプリデコードユニット(202)と、
フェッチされた前記可変バイト長命令と生成された前記プリデコードタグをストアする命令キャッシュ(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.
前記機能ビットの前記意味はさらに前記命令の別のバイトに関連するプリデコードビットの値にも依存する、請求項9に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 9, wherein the meaning of the function bits further depends on a value of a predecode bit associated with another byte of the instruction. 前記機能ビットの前記意味はさらに先の命令バイトの対応の開始ビットの値にも依存する、請求項9に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 9, wherein the meaning of the function bits further depends on the value of the corresponding start bit of a previous instruction byte. 前記機能ビットの前記意味はさらに命令の隣接するバイトが境界バイトであるか否かに依存する、請求項9に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 9, wherein the meaning of the function bits further depends on whether adjacent bytes of the instruction are boundary bytes. 前記機能ビットはオペレーションコードが命令の最初のバイトであるか否かを示す、請求項9に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 9, wherein the function bit indicates whether the operation code is the first byte of an instruction. 前記境界ビットは前記バイトが前記命令の開始バイトであるか否かを示す値を有する開始ビットであり、前記複数のデコードユニット(208)は前記複数の可変バイト長命令に対応する指定された命令をデコードするように構成されており、さらに
前記命令キャッシュ(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).
前記命令整列ユニット(206)は前記命令を前記複数のデコードユニット(208)の1つに与えるように構成される、請求項14に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 14, wherein the instruction alignment unit (206) is configured to provide the instructions to one of the plurality of decode units (208). 前記複数の前記デコードユニット(208)の各々はx86命令セットの予め定められたサブセットをデコードするように構成される、請求項14または15に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 14 or 15, wherein each of the plurality of decode units (208) is configured to decode a predetermined subset of an x86 instruction set. 前記プリデコードタグはさらに前記バイトが前記命令の終了バイトであるか否かを示す終了ビットを含む、請求項14、15または16に記載のスーパースカラマイクロプロセッサ(200)。17. The superscalar microprocessor (200) of claim 14, 15 or 16, wherein the predecode tag further includes an end bit indicating whether the byte is an end byte of the instruction. 前記命令整列ユニット(206)は前記複数のデコードユニット(208)の少なくとも1つに前記プリデコードタグを与えるように構成される、請求項14、15、16または17に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (1) according to claim 14, 15, 16 or 17, wherein the instruction alignment unit (206) is configured to provide the predecode tag to at least one of the plurality of decode units (208). 200). 前記複数のデコードユニット(208)の前記少なくとも1つは前記プリデコードタグを検出して前記命令の境界を決定するように構成される、請求項18に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 18, wherein the at least one of the plurality of decode units (208) is configured to detect the predecode tag to determine a boundary of the instruction. 前記複数の可変バイト長命令は前記命令キャッシュ(204)内にラインとして編成され、1ラインは予め定められた数のバイトを含む、請求項9から19のいずれかに記載のスーパースカラマイクロプロセッサ(200)。A superscalar microprocessor (1) according to any of claims 9 to 19, wherein the plurality of variable byte length instructions are organized as lines in the instruction cache (204), wherein one line includes a predetermined number of bytes. 200). 前記複数のデコードユニット(208)からの出力信号を受けるように構成された複数の機能ユニット(212)をさらに含む、請求項9から20のいずれかに記載のスーパースカラマイクロプロセッサ(200)。21. The superscalar microprocessor (200) according to any of claims 9 to 20, further comprising a plurality of functional units (212) configured to receive output signals from the plurality of decode units (208). 前記複数の前記デコードユニット(208)からの前記出力信号はビットエンコード実行命令を含む、請求項21に記載のスーパースカラマイクロプロセッサ(200)。The superscalar microprocessor (200) of claim 21, wherein the output signals from the plurality of decode units (208) include bit encode execution instructions. 前記複数のデコードユニット(208)および前記複数の機能ユニット(212)に結合された複数のリザベーションステーション(210)をさらに含み、前記複数のリザベーションステーション(210)は前記複数のデコードユニットからの前記出力信号を前記複数の前記機能ユニット(212)への発行前に一時的にストアするように構成される、請求項21または22に記載のスーパースカラマイクロプロセッサ(200)。And further comprising a plurality of reservation stations (210) coupled to the plurality of decode units (208) and the plurality of functional units (212), wherein the plurality of reservation stations (210) are the outputs from the plurality of decode units. 23. A superscalar microprocessor (200) according to claim 21 or 22, wherein the superscalar microprocessor (200) is configured to temporarily store signals before being issued to the plurality of functional units (212). 専用の機能ユニット(212)が前記複数のデコードユニット(208)の各々に関連づけられる、請求項21、22または23に記載のスーパースカラマイクロプロセッサ(200)。24. A superscalar microprocessor (200) according to claim 21, 22 or 23, wherein a dedicated functional unit (212) is associated with each of the plurality of decode units (208). 前記複数のデコードユニット(208)に結合され投機的に実行された命令の結果をストアするためのリオーダバッファ(216)をさらに含む、請求項9から24のいずれかに記載のスーパースカラマイクロプロセッサ(200)。A superscalar microprocessor (1) according to any of claims 9 to 24, further comprising a reorder buffer (216) coupled to the plurality of decode units (208) for storing the results of speculatively executed instructions. 200).
JP50595198A 1996-07-16 1996-07-16 Method and apparatus for predecoding variable byte length instructions in a superscalar microprocessor Expired - Fee Related JP3732233B2 (en)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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