JP3628379B2 - 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置 - Google Patents

命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置 Download PDF

Info

Publication number
JP3628379B2
JP3628379B2 JP13401195A JP13401195A JP3628379B2 JP 3628379 B2 JP3628379 B2 JP 3628379B2 JP 13401195 A JP13401195 A JP 13401195A JP 13401195 A JP13401195 A JP 13401195A JP 3628379 B2 JP3628379 B2 JP 3628379B2
Authority
JP
Japan
Prior art keywords
program counter
instruction
circuit
counter value
value
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
JP13401195A
Other languages
English (en)
Other versions
JPH07334361A (ja
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 JPH07334361A publication Critical patent/JPH07334361A/ja
Application granted granted Critical
Publication of JP3628379B2 publication Critical patent/JP3628379B2/ja
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
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

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)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Image Processing (AREA)

Description

【0001】
【発明の背景】
この発明はマイクロプロセッサに関し、より特定的にはマイクロプロセッサのプログラムカウンタ値を更新するためのメカニズムに関する。
【0002】
マイクロプロセッサとは1つまたは非常に少数の半導体チップ上で実現されるプロセッサである。半導体チップ技術はマイクロプロセッサ内の回路密度およびスピードをますます増大させているが、しかしながらマイクロプロセッサと外部メモリとの間の配線は、パッケージング技術によって制限されている。オンチップ配線は極めて安価であるが、オフチップ配線は非常に高価である。マイクロプロセッサの性能を改善することを意図するいかなる技術も、増大した回路密度およびスピードを利用する一方でパッケージング技術およびプロセッサとその外部メモリとの間の物理的な分離の制限内に留まらなければならない。回路密度を高めることによって、より一層複雑な設計への道が開けるとはいえ、マイクロプロセッサの動作はユーザがそのマイクロプロセッサをどうやって使うか理解できるように単純かつ明快なもののままでなければならない。
【0003】
既存のマイクロプロセッサの大多数はスカラ計算を目的としているが、スーパースカラマイクロプロセッサはマイクロプロセッサの進化における次の論理的なステップである。スーパースカラという語は、スカラ命令の同時実行によって性能を向上させたコンピュータの実現例を表わす。スカラ命令は、汎用マイクロプロセッサにおいて典型的に見出されるタイプの命令である。今日の半導体処理技術を用いれば、単一のプロセッサチップにかつては大規模科学計算用プロセッサにしか応用できなかった高性能な技術を組入れることができる。しかしながら、大規模プロセッサに応用される技術の多くは、スカラ計算には不適切であるか、マイクロプロセッサに応用するにはあまりに高価であるかのどちらかである。
【0004】
マイクロプロセッサはアプリケーションプログラムを実行する。1つのアプリケーションプログラムには、命令のグループが含まれる。アプリケーションプログラムを実行するにあたって、プロセッサは何らかのシーケンスにおいて命令をフェッチし、実行する。1つの命令の実行にさえ、いくつかのステップが関わっている。このステップは、命令をフェッチするステップと、それをデコードするステップと、そのオペランドを組立てるステップと、命令によって特定される動作を行なうステップと、命令の結果を記憶装置に書込むステップとを含む。命令の実行は周期的クロック信号によって制御される。クロック信号の周期はプロセッサのサイクル時間である。
【0005】
プロセッサがプログラムを完了させるのにかかる時間は、3つの要因によって決定される。すなわち、そのプログラムを実行するのに必要な命令の数と、1つの命令を実行するのに必要なプロセッササイクルの平均数と、プロセッサのサイクル時間とである。プロセッサの性能はプロセッサがプログラムを完了させるのにかける時間を低減することによって向上するが、これにはこれらの要因の1つ以上を低減することが要求される。
【0006】
マイクロプロセッサの性能を向上させる1つの方法は、パイプライン化と呼ばれる技術を用いて、異なった命令におけるステップを重複させることによるものである。命令をパイプライン化するには、命令実行の様々なステップがパイプライン段と呼ばれる独立的なユニットによって行なわれる。パイプライン段はクロックドレジスタによって分離される。異なった命令のステップが、異なったパイプライン段において独立的に実行される。パイプライン化は、命令を重複させ、それによりプロセッサが同時に1つより多くの命令を扱うことができるようにすることによって、1つの命令の実行に必要な総合的な時間を、短縮することはないものの、命令の実行に必要なサイクルをかなりの数、低減する。これはプロセッサのサイクル時間を増大させることなく、またしばしば低減して行なわれる。パイプライン化は、典型的には命令1つあたりのサイクルの平均数を3のファクタ分も低減する。しかしながら、分岐命令を実行する場合、パイプラインは時折、分岐動作の結果が知られ、正しい命令が実行のためにフェッチされるまで、止まってしまうかもしれない。この遅延は、分岐遅延ペナルティとして知られている。パイプライン段の数を増やすことは、典型的には命令1つあたりのサイクルの平均数に関連して分岐遅延ペナルティを増やすことにも繋がる。
【0007】
典型的なマイクロプロセッサは、1つ1つのプロセッササイクルごとに1つの命令を実行する。スーパースカラプロセッサが低減する命令1つあたりのサイクルの平均数は、異なったパイプライン段での命令の同時実行を可能にするだけでなく、同一のパイプライン段において命令を同時に実行できるようにすることにより、パイプライン化されたスカラプロセッサで可能な数を超える。スーパースカラという語は、科学計算でよくあるようなベクトルまたはアレイ上での多数の同時動作と区別される、スカラ量上での多数の同時動作を強調するものである。
【0008】
スーパースカラプロセッサはコンセプトとしては単純であるが、性能の向上を達成するには、プロセッサのパイプラインを広くする以上のことがなされている。パイプラインを広くすればサイクル1つあたりに1つより多くの命令を実行することが可能になるが、命令における所与のどのシーケンスもこの能力を利用できるという保証はない。命令は互いに独立しているのではなく、相互に関連しており、これらの相関のせいで、命令によっては同一のパイプライン段に入ることが妨げられる。さらに、命令をデコードし、実行するためのプロセッサのメカニズムは、同時に実行され得る命令を発見する能力において大きな違いとなり得る。
【0009】
スーパースカラ技術は、命令のセットおよび他のアーキテクチャ的な特徴からは独立したプロセッサ機構に大きく関わっている。したがって、スーパースカラ技術の魅力の1つは、既存のアーキテクチャとコードの互換性があるプロセッサを開発できる可能性である。多くのスーパースカラ技術は、縮小命令セットコンピュータ(RISC)または複合命令セットコンピュータ(CISC)アーキテクチャのいずれにも等しく良好に適用される。しかしながら、RISCアーキテクチャの多くにおける規則性のため、スーパースカラ技術は最初はRISCプロセッサの設計に応用されてきた。
【0010】
命令ポインタ(IP)とも呼ばれる、プログラムカウンタ(PC)は、命令がメモリからフェッチされ実行される際の、命令のメモリアドレスを保存する。プログラムカウンタとして言及される、プログラムカウンタ値を維持し更新するためのプログラムカウンタメカニズムは、インクリメンタと、セレクタと、レジスタとを含む。各命令がフェッチされデコードされるにつれ、次の順次命令のアドレスが、インクリメンタを用いてプログラムカウンタの現在の値に現在の命令のバイト長を加え、この次の順次命令をレジスタ内に位置づけることによって、形成される。分岐が行なわれると、目的命令のアドレスが増分された値の代わりにセレクタによって選択され、この目的アドレスがレジスタ内に位置づけられる。
【0011】
プログラムカウンタ値は2つの目的を果たす。プログラムカウンタ値は、フェッチされ実行されるべき次の命令のメモリアドレスを提供する。プログラムカウンタ値はまた、命令ストリームの実行を止めた問題に遭遇した命令のアドレスを識別する。このアドレスはデバッグをする目的で、または訂正動作が行なわれた後でなされるかもしれない命令ストリームの実行の続行のために用いられてもよい。
【0012】
マイクロプロセッサにおいてパイプライン化の実現例を用いる場合、プログラムカウンタ値は、この値が命令フェッチアドレスを提供するパイプラインの始めに維持される。この値はフェッチPC値として言及される。このフェッチPC値はパイプラインに入る命令を指し示す。命令がパイプライン段に沿って伝播するにつれ、後続する命令がフェッチされ、パイプライン内に位置づけられる。したがって、フェッチPC値は第1段以外のパイプラインの段にある命令には対応しない。命令ストリームの実行を止める問題のほとんどは、パイプラインの初めよりも終わりの近く、または終わりにおいて検出される傾向にあるので、命令のためのプログラムカウンタ値は命令が実行されている間維持されていなければならない。この値は実行PC値と呼ばれる。
【0013】
実行PC値を維持するには2つの方法が知られている。第1の方法は、ある命令のPC値が、その命令とともにパイプラインを下っていくためのものである。この方法では、各パイプライン段は実行PC値をストアするための付加的な記憶装置を必要とする。必要とされる付加的な記憶装置の量は、パイプライン段の数に比例する。第2の方法は、パイプラインの終わりにおいてDC回路を二重にするものである。この方法では、命令の長さの情報だけがパイプライン内の命令に伴う。非分岐命令が完了する際、命令の長さの値は実行PC値に加算され、次の命令のための実行PC値が提供される。分岐命令の完了にあたっては、増分された値ではなく、その分岐のための目的アドレスが実行PC値として提供される。
【0014】
【発明の概要】
別個に下位プログラムカウンタ値ビットを提供するフェッチプログラムカウンタ回路と、下位プログラムカウンタ値ビットを用いて実行プログラムカウンタ値を発生する実行プログラムカウンタ回路とを設けることによって、実行プログラムカウンタ値を迅速かつ効率的に発生することが可能になるということが発見されている。また、複数個の下位プログラムカウンタビット値を受取り、単一の下位プログラムカウンタビット値を選択する、実行プログラムカウンタ回路を設けることにより、多重パイプラインプロセッサにおいて実行プログラムカウンタ値を容易に発生することが可能になるということも、発見されている。
【0015】
【詳細な説明】
この発明を実施するために企図されるベストモードの詳細な説明を以下に述べる。この説明は本発明にとって例示的なものとして意図されており、限定的なものととられるべきではない。
【0016】
図1を参照して、本発明はX86命令セットを実行するスーパースカラX86マイクロプロセッサ100との関連で最もよく理解することができる。マイクロプロセッサ100は486XLバスまたは他の従来のマイクロプロセッサバスを介して物理的にアドレス指定された外部メモリ101に結合される。マイクロプロセッサ100は命令キャッシュ104を含み、命令キャッシュ104はバイトキュー106に結合され、バイトキュー106は命令デコーダ108に結合される。命令デコーダ108はRISCコア110に結合される。RISCコア110は、レジスタファイル112およびリオーダバッファ114を、算術論理ユニット131(ALU0)および算術論理ユニット・シフトユニット132(ALU1 & SHF)、特殊レジスタブロック133(SRB)、ロード/ストアユニット134(LSSEC)、分岐セクション135(BRNSEC)、および浮動小数点ユニット136(FPU)などの様々な機能ユニットとともに含む。
【0017】
RISCコア110は、AおよびBオペランドバス116、タイプおよびディスパッチ(TAD)バス118、および結果バス140を含み、これらは機能ユニットならびに変位および命令ストア(INLS)バス119に結合され、この変位および命令ロードストア(INLS)バス119は、命令デコーダ108とロード/ストアユニット134との間に結合される。AおよびBオペランドバス116は、レジスタファイル112およびリオーダバッファ114にも結合される。TADバス118は命令デコーダ108にも結合される。結果バス140はリオーダバッファ114にも結合される。加えて、分岐セクション135はリオーダバッファ114、命令デコーダ108、および命令キャッシュ104にX目的バス103を経由して結合される。AおよびBオペランドバス116は4本の並列41ビット幅Aオペランドバスおよび4本の並列41ビット幅Bオペランドバス、ならびに4本の並列12ビット幅Aタグバス、4本の並列12ビット幅Bタグバス、1本の12ビット幅Aタグ有効バス、1本の12ビット幅Bタグ有効バス、4本の4ビット幅行先タグバス、および4本の8ビット幅オペレーションコードバスを含む。タイプおよびディスパッチバス118は、4本の3ビット幅タイプコードバスおよび1本の4ビット幅ディスパッチバスを含む。変位およびINLSバス119は、2本の32ビット幅変位バスおよび2本の8ビット幅INLSバスを含む。
【0018】
命令キャッシュ104に加えて、マイクロプロセッサ100はデータキャッシュ150(DCACHE)および物理タグ回路162をも含む。データキャッシュ150はRISCコアのロード/ストア機能ユニット134に結合され、かつプロセッサ内アドレスおよびデータ(IAD)バス102に結合される。命令キャッシュ104はまた、IADバス102とも結合される。物理タグ回路162は、命令キャッシュ104とデータキャッシュ150との双方と、IADバスを介して対話する。命令キャッシュ104およびデータキャッシュ150は双方とも線形にアドレス可能なキャッシュである。命令キャッシュ104およびデータキャッシュ150は物理的には分離しているが、しかしながらこれらのキャッシュは双方とも同じアーキテクチャを用いて編成される。
【0019】
マイクロプロセッサ100はまた、メモリ管理ユニット(MMU)164とバスインタフェースユニット160(BIU)とを含む。TLB164はIADバスと物理タグ回路162とに結合される。バスインタフェースユニット160は物理タグ回路162、データキャッシュ150、ならびにIADバス102および486XLバスなどの外部マイクロプロセッサバスに結合される。
【0020】
マイクロプロセッサ100は命令のシーケンスを含むコンピュータプログラムを実行する。コンピュータプログラムは典型的には、ハードディスク、フロッピーディスク、またはコンピュータシステム内に位置づけられる他の不揮発性記憶媒体にストアされる。プログラムが実行されると、そのプログラムは記憶媒体からメインメモリ101にロードされる。一旦プログラムにおける命令および関連のデータがメインメモリ101内に入ると、個々の命令が実行のために準備され、最後にマイクロプロセッサ100によって実行される。
【0021】
メインメモリ101内にストアされた後、命令はバスインタフェースユニット160を経由して命令キャッシュ104に送られ、そこで命令は一時的に保持される。X86命令は命令キャッシュ104によって、命令キャッシュ104が発生するフェッチプログラムカウンタ値を用いて命令デコーダ108に与えられる。
【0022】
命令デコーダ108は命令を調べ、行なうべき適切な動作を判断する。たとえば、デコーダ108はある特定の命令が、PUSH、POP、LOAD、STORE、AND、OR、EXOR、ADD、SUB、NOP、JUMP、条件付きJUMP(BRANCH)、または他の命令のいずれであるかを判断するだろう。デコーダ108がどの特定の命令を存在しているものと判断するかに従い、対応する1つまたは複数のRISC動作(ROP)がRISCコア110の適切な機能ユニットにディスパッチされ、各ROPまたはROPのセットに対応するデコードPC値が発生される。デコードPC値はフェッチPC値と非同期に発生される。
【0023】
命令は、典型的には次に述べるフォーマットで複数のフィールドを含む。すなわちこのフォーマットは、OP CODE、OPERAND A、OPERAND B、およびDESTINATIONである。たとえば、命令ADD A,B,Cは、レジスタAの内容をレジスタBの内容に加算し、その結果をレジスタCの中に位置づけろ、という意味である。LOADおよびSTORE動作は、わずかに異なったフォーマットを用いる。たとえば、命令LOAD A,B,Cは、アドレスから検索されたデータを結果バス上に位置づけろ、ということを意味し、ここにおいてA、B、およびCはAオペランドバス、Bオペランドバス、および変位バス上に位置づけられたアドレスの構成要素を表わし、これらのアドレスの構成要素は組合せられて論理アドレスを提供し、この論理アドレスはセグメントベースと組合せられて線形アドレスを提供し、この線形アドレスからデータは検索される。またたとえば、命令STORE A,B,Cは、あるアドレスによって指し示された位置にデータをストアしろという意味であり、ここでAはAオペランドバス上に位置づけられたストアデータであり、BおよびCはBオペランドバスおよび変位バス上に位置づけられたアドレスの構成要素を表わしており、これらのアドレスの構成要素は組合せられて論理アドレスを形成し、この論理アドレスはセグメントベースと結合されて線形アドレスを提供し、この線形アドレスにデータはストアされる。
【0024】
OP CODEは、命令デコーダ108からオペレーションコードバスを介してRISCコア110の機能ユニットへ与えられる。特定の命令のためのOPCODEが適切な機能ユニットに与えられなければならないだけでなく、命令のための指定されたOPERANDも検索され、機能ユニットに送られなければならない。特定のオペランドの値がまだ計算されていなければ、機能ユニットが命令を実行できるようになる前に、まずその値が計算され機能ユニットに与えられなければならない。たとえば、現在の命令が先行する命令に依存する場合、現在の命令が実行できるようになる前に、先行する命令の結果が決定されなければならない。この状況は、依存性と呼ばれる。
【0025】
特定の命令が機能ユニットによって実行されるために必要なオペランドは、レジスタファイル112、リオーダバッファ114によってオペランドバスに与えられるか、結果バス140を介して機能ユニットから送られるかのいずれかである。オペランドバスはオペランドを適切な機能ユニットに伝える。一旦機能ユニットがOP CODE、OPERAND A、およびOPERAND Bを受取ると、機能ユニットはその命令を実行し、その結果を結果バス140に位置づける。結果バス140はすべての機能ユニットの出力およびリオーダバッファ114に結合されている。
【0026】
リオーダバッファ114は先入れ先出し(FIFO)装置として管理される。ある命令が命令デコーダ108によってデコードされると、対応するエントリがリオーダバッファ114内に割当てられる。命令によって計算された結果値は次に、その命令の実行が完了すると割当てられたエントリに書込まれる。結果値は続いてレジスタファイル112に書込まれ、命令に関連づけられた例外がなく、命令に影響を与える未決定の推論的分岐がなければ、その命令はリタイアされる。命令がリタイアされると、それに関連の実行プログラムカウンタ値もレジスタファイル112内のプログラムカウンタレジスタにストアされる。関連のエントリがリオーダバッファ114の先頭に到達しても命令が完了していなかった場合、リオーダバッファ114の進行はその命令が完了するまで止められる。しかしながらさらなるエントリを割当て続けることができる。
【0027】
各機能ユニットは、その命令のためのオペランドがまだ機能ユニットにとって利用可能なものではないためにまだ完了していない命令からのOP CODEをストアするためのそれぞれの予約ステーション回路(RS)120〜126を含む。各予約ステーション回路は命令のOP CODEをタグとともにストアする。このタグは後に予約ステーション回路に到達するであろう欠けているオペランドのための場所を予約しておくものである。この技術は、未決定の命令が予約ステーションにおいてそのオペランドとともに組立てられている間に、マイクロプロセッサ100が他の命令を実行し続けることができるようにすることによって、性能を強化するものである。
【0028】
マイクロプロセッサ100は、デコーダ108をRISCコア110の機能ユニットから分離することによって、順序が乱れた発行に対処する。より特定的には、リオーダバッファ114および機能ユニットの予約ステーションは、分布命令ウインドウを効果的に確立する。したがって、デコーダ108は命令がすぐには実行できない場合でさえ、命令のデコードを続けることができる。命令ウインドウは命令のプールとして働く。この命令のプールから、機能ユニットは前に進み続けつつ命令を引出し、実行する。命令ウインドウはこのようにして、マイクロプロセッサ100にルックアヘッド能力をもたらす。依存性がクリアされ、オペランドが利用可能なものとなるにつれ、ウインドウ内のより多くの命令が機能ユニットによって実行され、デコーダはさらに多くのデコードされた命令でウインドウを充填し続ける。
【0029】
マイクロプロセッサ100はRISCコアの分岐セクション135を用いてその性能を強化する。分岐が起こると、次の命令はその分岐の結果に依存するので、プログラムにおける命令ストリーム内の分岐はマイクロプロセッサの命令をフェッチする能力の妨げとなる。分岐セクション135は、分岐が行なわれるべきかどうかを判断する。加えて、命令キャッシュ104は先行する分岐の結果の実行記録をとり続けるための分岐目的バッファを含む。この記録に基づき、ある特定のフェッチされた分岐の間に、フェッチされた分岐命令がどの分岐をとるであろうかを決定するための判断がなされる。例外または分岐セクション135の決定に基づく分岐の誤予測があれば、その場合誤って予測された分岐命令に続いて割当てられたリオーダバッファ114の内容は廃棄される。
【0030】
図2は、命令キャッシュ104のブロック図である。「可変バイト長命令に特に適した、プリデコードされた命令キャッシュおよびそのための方法(Pre−Decoded Instruction Cache and Method Therefor Particulary Suitable for Variable Byte−Length Instructions)」と題された連続番号 で出願日が の米国出願が、引用により援用されており、命令キャッシュ104の構造および動作をより詳細に述べている。
【0031】
命令キャッシュ104は線形にアドレス指定された16キロバイトのフォーウェイセットアソシアティブキャッシュである。各セットは256個のエントリを含み、各エントリは16バイト命令ブロックと、線形アドレスタグと、次に予測実行される分岐情報とを含む。命令キャッシュ104はキャッシュ制御装置170と、アドレス回路172と、プリデコード回路174と、キャッシュアレイ176とを含む。キャッシュ制御装置170は、命令キャッシュ104の様々な動作を統制するための制御信号を与える。アドレス回路172は、分岐セクション135から受取られる論理目的プログラムカウンタ(TARGET PC)に基づく線形フェッチプログラムカウンタ(FETCH PC)、または線形タグアレイ182からの線形タグ、およびサクセサアレイからの対応するサクセサ情報を発生する。アドレス回路172はまた、アドレスの発生と、外部メモリからのプリフェッチ命令に関連のX86保護検査とをもたらす。アドレス回路172は論理アドレスと線形アドレスとの間の変換を行なうための変換回路として機能する。プリデコード回路174はIADバス102を介してプリフェッチされたX86命令バイトを受取り、各X86命令バイトのためのプリデコードビットを割当て、プリデコードされたX86命令バイトをキャッシュアレイ176の中に書込む。キャッシュアレイ176はプリデコード回路174から受取られた命令をストアし、線形FETCH PC信号によってアドレス指定されると、これらの命令をバイトキュー106に与える。
【0032】
キャッシュアレイ176は3つの主要なアレイに編成される。それらはすなわち、命令キャッシュストアアレイ180と、線形タグアレイ182と、サクセサアレイ184とである。命令キャッシュストアアレイ180は、16バイト命令をストアする。線形タグアレイ182は、命令に対応する線形アドレスタグをストアする。サクセサアレイ184は、命令に対応する、分岐予測をサポートするために用いられる予測された分岐情報をストアする。これらのアレイの各々は、アドレス回路172によって提供される、線形FETCH PCアドレスによってアドレス指定されている。
【0033】
図3を参照して、命令デコーダ108は2段のパイプライン化されたデコーダであって、これはバイトキュー106からプリデコードされたX86命令バイトを受取り、それらをそれぞれのROPのシーケンスに変換し、複数個のディスパッチ位置からROPを迅速にディスパッチする。多数命令発行のための機会を最大限にするため、最も単純な命令についてはこの変換はハードワイヤード高速変換経路内で扱われる。好ましい実施例では、ハードワイヤード高速変換経路は3つのROPまたはそれ未満のものにマッピングするX86命令に適用される。3つより多くのROPを必要とする命令およびあまり使われない命令は、マイクロコードROM内に含まれるマイクロコードシーケンスによって扱われる。X86命令がマイクロコードROMにマッピングしたときには常に、プリデコードされたX86命令情報が複数のディスパッチ位置において二重にされ、各ディスパッチ位置が独立的かつ他のディスパッチ位置と並行に動けるようにする。
【0034】
第1のデコード段では、命令デコーダ108はX86のプリデコードされた命令のためのROPが高速経路において発生されるべきかマイクロコードROM経路において発生されるべきかを決定する。ROPシーケンスのための情報は、ROPを4つまで用いて1サイクルあたり4つまでのX86命令のための高速経路論理によって発生されるか、または1つのプリデコードされたX86命令のためのマイクロコードROMから読出されるかのいずれかである。高速経路およびROPを発生することが要求されているマイクロコードROM経路からの情報は、ROPがそこに行くことが指定されている機能ユニットのタイプ、機能ユニットで実行されるべき特定の単純なRISCのような命令、ROPのためのソースおよび行先ポインタ、ROPのサイズ情報、ロードまたはストアROPの場合のアドレス指定モード、ならびにもしあればROPのための命令からの即値フィールドを含む。好ましくは、マイクロコードROMアクセスは高速経路デコード機能とは混合されない。これによりマイクロコードROPをシフトしなければならなくなることが回避される。第2のデコード段では、命令デコーダ108は高速経路またはマイクロコードROMのいずれかからのROP情報を選択して増加させ、完全なROPをもたらし、これらは機能ユニット131〜136において実行される。
【0035】
命令デコーダ108はまた、完全にディスパッチされプリデコードされたX86命令がバイトキュー106の外へシフトされ、次のディスパッチされていないまたは部分的にディスパッチされているプリデコードされたX86命令が「キューの先頭」にシフトされるように、バイトキュー106におけるシフトを制御する。命令デコーダ108はまた、バイトキュー106における問題を検出し、マイクロコードエントリポイントを強制することによって、命令キャッシュ104を適切なように間接的に再び導く。命令デコーダ108はまた、命令キャッシュ104内のキャッシュ再充填論理によって、ならびに分岐セクション135における例外およびマイクロ分岐誤予測論理によって開始されるマイクロコードROMエントリポイントを受入れる。分岐セクション135によって発生されるマイクロコードエントリポイントは、XTARGETバス103を介して命令デコーダ108に伝えられる。命令デコーダ108はまた、各ROPに対応するデコードプログラムカウンタ値を発生する。
【0036】
命令デコーダ108は、ROPマルチプレクサ200と、4つのディスパッチ位置回路210、211、212、213と、4つのROPセレクタ回路220、221、222、223と、ROP共有回路226とを、命令デコード制御回路230、ROM制御240、およびデコードプログラムカウンタ回路242とともに含む。ROPマルチプレクサ200(ROPMUX)は、バイトキュー106のエントリを4つのディスパッチ位置210〜213に導く。各ディスパッチ位置は、それぞれの高速コンバータ250、251、252、253(それぞれFASTCONV0、FASTCONV1、FASTCONV2、およびFASTCONV3)と、それぞれの共通段260、261、262、263(それぞれICOMMON0、ICOMMON1、ICOMMON2、およびICOMMON3)と、それぞれのマイクロコードROM270、271、272、273(それぞれMROM0、MROM1、MROM2、およびMROM3)とを含む。マイクロコードROM270〜273は、マイクロコードROM命令デコード制御装置240(IDECCNTL)によって制御される。ROPマルチプレクサ200、ディスパッチ位置回路210〜213、マイクロコードROM命令デコード制御装置230、およびデコードプログラムカウンタ回路242は、一般に命令デコーダ108の第1段を形成する。命令デコーダ108の第2段は一般に、ROPセレクタ回路220〜223(それぞれROPSELECT0、ROPSELECT1、ROPSELECT2、およびROPSELECT3)、およびROP共有回路226(ROPSHARED)において実現される。
【0037】
命令デコーダ108は命令デコード制御装置230によって制御される。命令デコード制御装置230は、TADバス118上に命令タイプ情報をもたらし、現在のディスパッチウインドウ内のROPのうちいくつがRISCコア110によって受入れられ得るかを予測し、この予測を鑑みてどのようにバイトキュー106をシフトさせるか命令キャッシュ104に知らせ、バイトキュー106の先頭におけるプリデコードされたX86命令のためにまだこれからディスパッチされるべきROPの数をROPマルチプレクサ200に知らせ、マイクロコードおよび制御ROMにアクセスするなど、一般的な制御機能を提供するために、組合せ論理またはプログラマブルアレイ論理において実現される論理を含む。これらの機能を提供するために、命令デコード制御装置230はRISCコア110の機能ユニット131〜136およびプロセッサ100の他のユニットから様々な情報を受取る。
【0038】
各高速コンバータ250、251、252、および253は、「単純な」X86命令(すなわち3つ以下のROPにマッピングするもの)に対して多くのタイプの高速変換を行なう。各ディスパッチ位置における高速コンバータはX86命令を、そのX86命令を実行するのに必要なROPのシーケンスのそれぞれ1つ(1つのシーケンスは1つまたはそれ以上のROPである)に変換し、ある一定のプレフィックスおよびSIBバイトのためのROPの動作を変形する。高速コンバータ250〜253はプログラマブルアレイ論理として実現されるか、第2のデコード段の位相1において前にラッチされた組合せ論理しとて実現されるかのいずれかである。
【0039】
めったに使われないX86命令および実行するのに3つより多くのROPからなるROPシーケンスを必要とするX86命令は、マイクロコードROMにマッピングされる。一般に3つより多くのROPにマッピングするX86命令は、CALLゲート命令、STRING移動命令、および卓越した浮動小数点ルーチンなどの複合対話型命令である。この場合、命令デコーダ108内のROM制御装置240は、エントリポイントとして知られるマイクロコードROMアドレスを形成し、このエントリポイントに基づき、マイクロコードROM270〜273にストアされたマイクロコードROM命令からのROPシーケンスを、1サイクルあたり4つのROPにおいて読出す。各マイクロコードROM270、271、272、および273は、高速コンバータにおいては変換可能でないX86命令を扱うための1024×59ROMアレイである。
【0040】
ディスパッチ位置210、211、212、および213もまた、それぞれの共通段260、261、262、および263を含む。各共通段はパイプライン段として機能する。各共通段260、261、262、および263はそれぞれの高速コンバータおよびマイクロコードROMと関連づけられている。命令が高速経路命令であるかマイクロコードROM命令であるかに関わりなくある特定のやり方で効率的に扱うことができ、かつマイクロコードROMにおける発生を必要とはしないX86命令変換動作は部分的に、変換を必要としない共通データとともに、高速コンバータまたはマイクロコードROMにおける様々な段の命令部分の処理を伴うステップでそれぞれの共通段を介して、実行されパイプライン化される。各共通段はまた、高速経路命令およびMROM命令の双方によって用いられる内部命令デコーダアドレス計算を行なうために使用されるレジスタポインタを追跡する。
【0041】
各セレクタ回路220、221、222、および223は、高速コンバータおよびパイプライン段の出力またはマイクロコードROMおよびパイプライン段の出力のいずれかを選択し、ディスパッチ情報を発生する。各セレクタ回路はまた、即値フィールド定数値を選択し、機能ユニット131〜136への即値アドレスまたは定数を駆動する。ROP共有ユニット226はディスパッチ位置210〜213の各々におけるROP選択回路からの情報に応答し、すべてのディスパッチ位置によって共有されるリソースのためのディスパッチ情報を発生する。
デコードプログラムカウンタ回路242はバイトキュー106から送られるX86命令の各々における論理プログラムカウンタ値を追跡する。バイトキュー106はプリフェッチストリーム内に非順次フェッチを検出すると、その目的のバイトおよび新しい目的アドレスをデコードプログラムカウンタ回路242に示す。デコードプログラムカウンタ回路242は次にデコードプログラムカウンタ値を発生し、これは分岐セクション135ならびにディスパッチされた各ROPのためのデコードプログラムカウンタ値における下位ビットおよびキャリービットに与えられる。LPCビットおよびキャリービットは、命令デコーダ108によってリオーダバッファ114に与えられる。
【0042】
デコードPC回路242レジスタ内のデコードPCレジスタの中に維持されるROPデコードプログラムカウンタ値が、X86アーキテクチャにおける論理アドレスとして維持されるので、セグメント間分岐を行なうときには、命令キャッシュ104にアクセスするのに用いられる線形アドレスからデコードPCレジスタを更新するために必要な論理アドレスへの変換が必要である。これは命令キャッシュ104において、まず線形アドレスからセグメントベースポインタを減算して取除き、論理アドレスを得ることによってなし遂げられる。この32ビットの論理アドレスは次に命令デコーダ108のデコードプログラムカウンタ回路242に駆動され、これは次にROPデコードプログラムカウンタ値を発生する。セグメント間分岐を行なわない場合、デコードPC値はデコードプログラムカウンタ回路242で更新される。
【0043】
分岐に続く順次命令については、デコードプログラムカウンタ回路242は開始位置と終了位置との間でバイトキュー内のX86バイトの数をカウントし、これを開始論理デコードプログラムカウンタ値に加算して、次のデコードプログラムカウンタ値を発生する。
【0044】
命令デコーダ制御装置230は、命令デコーダ108の様々なユニットの動作を制御するための適切なステートマシンのいずれかである。
【0045】
図4を参照して、デコードプログラムカウンタ発生器回路242は、キュー300と、スキャン論理302と、上位部分プログラムカウンタラッチ304と、下位部分プログラムカウンタラッチ306と、上位部分プログラムカウンタ発生器回路308と、下位部分プログラムカウンタ発生器回路310と、プログラムカウンタ値セレクタ回路312とを含む。
【0046】
キュー300は32ビット非順次プログラムカウンタ値を有効ビットと同様に保持し、非順次プログラムカウンタ値のビット4:31を上位部分プログラムカウンタラッチ304に与える。キュー300は非順次プログラムカウンタ値のビット0:3をスキャン論理302に与える。
【0047】
スキャン論理302は命令デコーダ108によって処理されている4つのROPに対応する4つの4ビットオフセット値を下位プログラムカウンタ発生器回路310に与える。4つのオフセット値の各々は、キュー106内にストアされるX86命令とキュー300内にストアされる現在のデコードプログラムカウンタ値との間のオフセットを表わす。キュー106内にストアされる各X86命令は、1つより多くのROPにマッピングしてもよい。同じサイクル内で命令デコーダ108によって処理されている4つのROPが1つのX86命令に対応していてもよいため、4つのオフセット値はすべて同じ値を有していてもよい。これらのオフセット値は、キュー106の先頭における命令のための開始ビットとキュー106内の次の命令のための開始ビットとを選択するスキャン論理302によって発生される。オフセットは、同じサイクル内の命令デコーダ108によって処理されている4つのROPに対して累積される。すなわち、オフセットは第1のROPとオフセットがそのために発生されているROPとの間のバイトの数に等しく、これは2つのROP間にいくつのROPがあるかには関わりがない。
【0048】
下位プログラムカウンタ発生器回路310は、加算器320〜323とマルチプレクサ326とを含む。各加算器320、321、322、323は、4ビットオフセット値の1つを受取る。加算器320〜323は、これらの4ビットオフセット値をラッチ306からの現在のデコードプログラムカウンタ値におけるビット0:3に加算し、次に来るかもしれないプログラムカウンタ値における下位ビットすなわちビット0:3を得る。次に来るかもしれないプログラムカウンタ値の各々は、ディスパッチされるべきROPに対応する。次に来るかもしれないプログラムカウンタ値のビット0:3は、マルチプレクサ326に与えられる。マルチプレクサ326はこれらの次に来るかもしれないプログラムカウンタ値をマルチプレクスして、対応するROPが命令デコーダ108によってディスパッチされる際にどの命令がキュー300から取除かれるかに基づき、次のプログラムカウンタ値をデコードプログラムカウンタラッチ306に与える。ラッチ306はマルチプレクスされた値を現在のデコードプログラムカウンタ値としてストアし、次のデコードプログラムカウンタ値を得るにあたって用いる。
【0049】
下位プログラムカウンタ発生器回路310は、各加算器からのキャリービットを上位プログラムカウンタ発生器回路308のキャリーセレクタ334に与える。下位プログラムカウンタ発生器回路310はまた、これらのキャリービットをカウンタ値選択回路312にも与える。
【0050】
上位プログラムカウンタラッチ304は、次のプログラムカウンタ値のビット4:31を上位プログラムカウンタ発生器回路308に与える。上位プログラムカウンタ発生器回路は、アドレスインクリメンタ330と、マルチプレクサ332と、キャリーセレクタ334とを含む。インクリメンタ330は現在のデコードPC値の上位28ビットを受取り、増分されたデコードPC値、すなわち上位28ビットが1だけ増分された値を提供する。この増分されたデコードPC値は、やはり現在のデコードPC値を受取るマルチプレクサ334に与えられる。マルチプレクサ332はこれら2つの値のうち1つを、キャリーセレクタ回路334の制御下で次のデコードPC値として提供する。キャリーセレクタ回路334は下位部分プログラムカウンタ発生器回路310からのキャリービットを用いて、キャリービットのうちどれがディスパッチされるべき次のROPに対応するかを判断し、かつこのキャリービットの値を用いてマルチプレクサ332を制御する。ディスパッチされるべき次のROPのキャリービットが、キャリーを示す活性であれば、次のデコードPC値の上位28ビットには増分されたデコードPC値が用いられる。そうでなければ、次のデコードPC値の上位28ビットには現在のデコードPC値の上位28ビットが用いられる。
【0051】
カウンタ値選択回路312は、マルチプレクサ336とディスパッチ割当マルチプレクサ338を含む。マルチプレクサ336は、キュー300からどの命令が、命令デコーダ108によって対応するROPがディスパッチされる際に取除かれるかに基づき、デコードプログラムカウンタ値(DPC)のビット0:3として、次に来るかもしれない4つの下位プログラムカウンタ値のうち1つを選択する。マルチプレクサ336はこのデコードプログラムカウンタ値をリオーダバッファ114に与える。ディスパッチ割当マルチプレクサ338は次の下位プログラムカウンタ値(LPC)およびキャリー値(CARRY)を受取り、これらの値をディスパッチされる各ROPのためにリオーダバッファ114に与える。
【0052】
上位プログラムカウンタ発生器回路308はデコードプログラムカウンタ値のビット4:31をプログラムカウンタ値選択回路312に与える。プログラムカウンタ値選択回路312はこれらのビットをマルチプレクサ336からの選択された下位ビット0:3と組合せ、完全な、すなわちビット0〜31の、デコードプログラムカウンタ(DPC)値を提供する。
【0053】
図5を参照して、リオーダバッファ114は循環先入れ先出し(FIFO)回路であって、推論的に実行されるROPの相対的な順序を追跡する。リオーダバッファの記憶位置は、それぞれリタイアの結果をレジスタファイル112に送り、命令デコーダ108からの不整合なROPを受取るために先頭および末尾キューポインタを用いて、動的に割当てられる。命令がデコードされると、その結果値はリオーダバッファ114内の位置または行先に割当てられ、その行先レジスタ番号はこの位置と関連づけられる。依存性のない後続の命令については、関連づけられたAおよびBオペランドバスがレジスタファイル112から駆動される。しかしながら、後続する命令が依存性を有しており、名前を変更された行先レジスタを参照してその中にストアされていると考えられる値を得る場合、リオーダバッファ114内でエントリがアクセスされる。結果をその中で得ることができれば、それはオペランドバスにもたらされる。結果が得られない場合、このリオーダバッファエントリを識別するタグが、AおよびBオペランドタグバス116の1本のオペランドタグバスに与えられる。結果またはタグはオペランドバスまたはオペランドタグバスを介して機能ユニットにもたらされる。機能ユニットにおける実行の完了により結果が得られた場合、その結果およびそれらのそれぞれの結果タグは、バス5本分の幅の結果バスと5本の結果タグバス140とを介してリオーダバッファ114および機能ユニットの予約ステーションにもたらされる。
【0054】
リオーダバッファ114は実行プログラムカウンタレジスタを更新するためにROPと関連しているプログラムカウンタ値を保持する圧縮形式を用いる。この圧縮形式に必要なのは、下位4バイトとビット増分すなわちキャリーの表示のみである。順次的X86バイトについては、付加されるバイトの数は15個以下であり、非順次的フェッチについては、分岐が成功裏に完了すると、新しい分岐目的が結果バスに駆動され、それにより命令デコーダ108からリオーダバッファ114への新しい分岐位置の書込みは必要でなくなる。
【0055】
リオーダバッファ114は、リオーダバッファ制御およびステータス回路400と、リオーダバッファアレイ402と、リオーダバッファオペランドバスドライバ404とを含む。リオーダバッファアレイ402は一時記憶メモリであって、リオーダバッファ制御およびステータス回路400によって制御される。命令デコーダ108がROPをディスパッチすると、命令デコーダ108は行先ポインタ(DEST REG)バスの1本に信号をもたらす。リオーダバッファ制御およびステータス回路400はその後、リオーダバッファアレイ402のエントリを割当てる。リオーダバッファアレイ402の各エントリは、一時行先レジスタを提供するために割当てられ、ROPが完了するとそこに結果が書込まれる。リオーダバッファおよびステータス回路400内の実行プログラムカウンタレジスタの中にストアされる実行PC値は、命令がリタイアされると更新される。複数のリオーダバッファエントリが、レジスタファイル112内の単一のレジスタに対応することができ、それによりレジスタの一時的な名前変更に備えることができる。リオーダバッファ制御およびステータス回路400は、完了されたROPがいつレジスタ112内にリタイアされ得るかを決定する。命令がリタイアされると、実行プログラムカウンタレジスタは更新される。
【0056】
リオーダバッファ制御およびステータス回路400は命令デコーダ108からのAおよびBオペランドポインタを受取る。リオーダバッファ制御およびステータス回路400はこれらのポインタを用いてリオーダバッファアレイ402内のエントリに問合わせをし、ディスパッチされたROPの実行に必要なオペランドがリオーダバッファアレイ402内に含まれているかどうかを判断する。
【0057】
図6を参照して、リオーダバッファアレイ402は、レジスタファイルにライトバックされるべき送られたオペランドの結果を、その結果がもはやプロセッサの推論的状態の一部ではない場合に一時的にストアするための16個のエントリを含む。16個のリオーダバッファエントリの各々は、41ビット結果フィールド(RESULT)、9ビット行先ポインタフィールド(P)、4ビット下位プログラムカウンタ値フィールド(LPC)および11ビット浮動小数点オペレーションコードフィールド(FPOF)、11ビット浮動小数点フラグレジスタフィールド(FPFR)、ならびに24ビット制御およびステータスフィールド(CS)を含む。
【0058】
結果フィールドは機能ユニットからの結果データをストアする。41ビット結果フィールドは浮動小数点結果を2つのリオーダバッファエントリ内にストアできるようにする。整数結果は41ビットのうちの32ビットにストアされる。
【0059】
各リオーダバッファエントリの行先ポインタフィールドは、ライトバック中に書込まれるべき命令の実行よりの結果のための、レジスタファイル112内の行先レジスタアドレスを指定する。リオーダバッファ制御およびステータス回路400は行先レジスタ(DEST REG)バスを介して命令デコーダ108から行先ポインタを受取り、そのポインタをリオーダバッファアレイ402の行先ポインタフィールドにロードし、ポインタと関連するROPがリタイアされているときのためにそれをストアさせる。ROPがディスパッチされると、リオーダバッファ114はリオーダバッファアレイ402のすべての行先ポインタフィールドをスキャンすることによって依存性チェックを行ない、行先ポインタとAまたはBオペランドとの間に整合があるかどうかを判断する。整合があるということは、データ依存性があるということを示す。
【0060】
浮動小数点オペレーションコードフィールドは、リオーダバッファエントリに割当てられた浮動小数点オペレーションコードのビットのサブセットにセットされる。浮動小数点フラグレジスタフィールドは浮動小数点動作によりもたらされる浮動小数点フラグの状態をストアする。浮動小数点フラグは浮動小数点機能ユニット136により検出された、精度、アンダーフロー、オーバーフロー、ゼロ分割、正規化を取止められたオペランド、および無効オペランドエラーに関連の情報をストアする。整数オペランドについては、整数演算によりもたらされるフラグは41ビット結果フィールドの上位ビット内に保持されるため、対応するフラグフィールドは必要ではない。
【0061】
ステータスおよび制御フィールドは、ROBエントリのステータス、たとえばリオーダバッファエントリが割当てられているか、分岐が誤って予測されているか、または命令の実行が例外またはエラー条件をもたらしているのではないか、ということを示すビットを含む。ステータスおよび制御フィールドはまた、実行プログラムカウンタ値を発生することに関連のビットをも含む。より特定的には、ステータスおよび制御フィールドは、各ROPのためにデコードPC発生器回路によって与えられるキャリービット、セットされるとROPがある特定のX86命令についてROPのシーケンスのうちの最後のROPであるということを示す出口ビット、および結果が有効であることを示して命令が完了していることを表わす完了(または有効)ビットを含む。出口ビットは、実行プログラムカウンタレジスタ内にストアされた実行PC値をいつ更新すべきかを示す。実行プログラムカウンタ値が更新されるのは、特定のX86命令のためのROPシーケンスが完了したときのみである。
【0062】
再び図5を参照して、ROPを実行して結果を発生する機能ユニットは、その結果を行先タグを用いて適切なリオーダバッファエントリに導く。ディスパッチの際、機能ユニットに接続される4つの行先タグバスのうちの1つに行先タグがセットされる。機能ユニットは結果バス140のうち1本にその結果を位置づけ、対応する結果タグおよびステータスバス上に行先タグを位置づける。リオーダバッファ制御およびステータス回路400は結果タグバスからの結果タグを受取り、このタグをリオーダバッファアレイ402内のエントリをアドレス指定するのに用いる。結果バスおよびステータスバスのうち1つに対応する結果バスの1本の上の信号が、結果タグ値により指定されるリオーダバッファアレイエントリにロードされる。
【0063】
リオーダバッファ制御およびステータス回路400はまた、データ依存性についてもチェックし、未解決の依存性が起こると、オペランドバスと関連のAおよびBオペランドタグバスを用いてオペランドにタグをつける。タグは機能ユニットの予約ステーションによって用いられるために、依存性が基づいている結果を識別する。リオーダバッファ114はデータ依存性が検出されるとレジスタファイル読出を無効にする。リオーダバッファ制御およびステータス回路400は、ディスパッチの際にデータ依存性を検出した場合、レジスタファイルオペランドバスドライバ404に与えられる無効化バスのビットをセットすることによって、リオーダバッファアレイ402のエントリ内におけるいかなる依存性オペランドの読出動作をも無効にする。無効化バスは、各オペランドバスのための無効化信号を含む。
【0064】
リオーダバッファ114が、ソースオペランドデータが利用可能でないデータには依存しておらず、レジスタファイル112またはリオーダバッファ114から得ることができると判断した場合、オペランドデータはオペランドバス116を介して機能ユニット予約ステーションに送られる。読出ポインタのレジスタアドレスがエントリの行先ポインタアドレスに一致した場合、データはリオーダバッファ114内にアドレス指定される。AまたはBオペランド読出ポインタ(A−RDPTRまたはB−RDPTR)の読出ポインタは、リオーダバッファ制御およびステータス回路400を介してリオーダバッファアレイ402をアドレス指定し、オペランドデータをリオーダバッファオペランドバスドライバ404に与える。リオーダバッファオペランドバスドライバ404は、オペランドデータをAおよびBオペランドバス116に駆動する。
【0065】
ROPは、リオーダバッファ制御およびステータス回路400がリオーダバッファアレイ402からの結果をレジスタファイル112に書込み、その結果をライトバックバスの1つに位置づけて行先ポインタをライトバックバスに対応する書込ポインタに書込むにつれ、リタイアされる。書込ポインタはレジスタファイル112内のレジスタアドレスを指定し、リタイアされた結果を受取る。ROPがリタイアされると、リオーダバッファオペランドバスドライバ404はリオーダバッファアレイ402のLPCフィールドを用いて実行プログラムカウンタ値を発生する。
【0066】
リオーダバッファステータスおよび制御回路400はリオーダバッファ114の様々な条件を検出し、リオーダ条件バスを用いてプロセッサ100における様々な回路へ条件信号をリレーする。リオーダ条件バスの信号は4つのAおよびBオペランドの各々のためにレジスタファイル112によって受取られ、リオーダバッファ114がいつ送られたオペランドを実行のために与えるかを示す。充満、空、または単一エントリのリオーダバッファ条件を反映するリオーダバッファ条件バス上の他の信号は、命令デコーダ108によって受取られる。
【0067】
図7を参照して、ROB制御およびステータス回路400内に含まれる実行プログラムカウンタ発生器回路598は、下位プログラムカウンタ発生器600と、上位プログラムカウンタ発生器下位602と、実行プログラムカウンタ制御装置604とを含む。下位プログラムカウンタ発生器600は、エントリマルチプレクサ610と、分岐マルチプレクサ612と、レジスタ614とを含む。エントリマルチプレクサ610は、最も古い4つのリオーダバッファエントリ402にストアされる4つの命令のためのプログラムカウンタ値の下位4ビットの部分を受取る。エントリマルチプレクサ610は、これらの下位プログラムカウンタ値の1つを分岐マルチプレクサ612に与え、分岐マルチプレクサ612はまた、分岐プログラムカウンタ値の下位ビットをも受取る。分岐マルチプレクサ612はレジスタ614に4ビット下位実行プログラムカウンタ値を与え、レジスタ614はこの値を次の実行プログラムカウンタ値として提供する。エントリマルチプレクサ610、分岐マルチプレクサ612、およびレジスタ614は、実行プログラムカウンタ制御回路604により制御される。
【0068】
上位プログラムカウンタ発生器602は、エントリマルチプレクサ620と、分岐マルチプレクサ622と、発生上位増分回路624と、加算器回路626と、レジスタ628とを含む。エントリマルチプレクサ620は、下位の4つのリオーダバッファエントリにストアされる4つの命令からの分岐目的値を受取り、分岐目的マルチプレクサがこれらのエントリのうち1つを実行プログラムカウンタ制御回路604の制御下にある次の分岐目的として与える。次の分岐目的値は、28ビットの上位分岐目的値と、4ビットの下位分岐目的値とを含む。上位分岐目的値は分岐マルチプレクサ622に与えられ、分岐マルチプレクサ622は、レジスタ628からの28ビットの上位実行プログラムカウンタ値をも受取る。分岐マルチプレクサ622はマルチプレクスされた予備的な上位実行プログラムカウンタ値を加算器回路626に与え、加算器回路626は、発生上位増分回路624からの増分信号をも受取る。加算器回路626はこの加算に基づき、上位実行プログラムカウンタ値をレジスタ回路628に与える。レジスタ回路628はクロックド上位実行プログラムカウンタ値を制御回路604の制御下で提供する。
【0069】
制御装置604は下位の4つのリオーダバッファエントリの各々からの制御情報を受取る。この制御情報は各エントリのための分岐発生信号および各エントリからの更新プログラムカウンタ信号、ならびに各エントリのための有効信号および更新実行プログラムカウンタ信号を含む。この制御情報に基づき、実行プログラムカウンタ制御装置604は上位および下位実行プログラムカウンタ値の発生を制御する。分岐発生信号は、分岐が行なわれたかどうかを示すものであって、分岐が行なわれたときに活性であり、それにより分岐アドレスが用いられるべきであることを示す。有効信号は、ROPの結果が機能ユニットから返されたこと、すなわち有効結果が存在するということを示し、分岐結果が返されたときに活性である。更新実行プログラムカウンタ値信号は、実行プログラムカウンタ値をいつ更新すべきかを示し、ROPがリタイアされたときに活性である。
【0070】
下位プログラムカウンタ発生器602は新しい下位実行プログラムカウンタ値を発生するのにマルチプレクサを用いるので、より大きいパイプラインのための実行プログラムカウンタ値を、下位プログラムカウンタ値が与えられるマルチプレクサの幅を広くするだけで発生することが可能である。
【0071】
図8を参照して、X86バイトの順次的ストリームを実行するプロセッサ100のタイミングが示される。この例では、予測実行された経路は実際にとられており、命令キャッシュ104から直接得ることができる。動作中、マイクロプロセッサパイプラインの効果的な実行のパイプライン段は5つある。
【0072】
フェッチサイクルは実行の第1段である。フェッチクロックサイクルは命令キャッシュ104の中で費やされる。命令キャッシュ104はクロックサイクルのPH1の間に新しいフェッチプログラムカウンタ値を形成し、次にフェッチクロックサイクルのPH2においてキャッシュアレイ180および182にアクセスする。フェッチプログラムカウンタ値(FPC(31:0))は、ストアアレイと並行して線形命令キャッシュタグアレイにアクセスする。フェッチサイクルのPH2の終わりの方で、線形タグがフェッチプログラムカウンタの線形アドレスに一致するかどうかの判断が行なわれる。一致していれば、予測実行されたバイトはバイトキュー106に送られる。
【0073】
タグおよびストアアレイへのアクセスに加えて、フェッチプログラムカウンタ値はまた、命令キャッシュ104の分岐予測アレイ184にもアクセスする。分岐予測アレイ184はX86バイトのうちどれが予測実行されるかを識別し、かつ次の予測実行されるブロックが順次的であるか非順次的であるかを識別する。フェッチサイクルのPH2においてもアクセスされるこの情報は、現在フェッチされているブロックのどのバイトが有効なバイトとしてバイトキュー106に駆動されるかを決定する。
【0074】
加えて、フェッチクロックサイクルの間、バイトキュー186は前にフェッチされているがまだ機能ユニットに発行されてはいないX86バイトを保持していてもよい。その場合、命令キャッシュ104にバイト充填位置が示され、現在のサイクルの第1の予測されたバイトが、保持されているX86バイトを超えて現在フェッチされているバイトを充填するためにバイトキュー106が保持しているバイトの数に等しい量だけシフトされる。
【0075】
分岐予測情報はフェッチサイクルのPH2において発生するため、プリフェッチされるべき次のブロックは順次的でも非順次的でもあり得る。いずれの場合も、再びアレイにアクセスするクロックサイクルは1つある。したがって、分岐予測アレイにより、ブロック外の分岐は次の順次的ブロックにアクセスするのと同じ相対的な性能を有する。
【0076】
第1のデコードサイクルの始まりで、プリフェッチされ予測実行されたバイトは指定された充填位置においてバイトキュー186に駆動される。これは図8では第1のデコードサイクルのPH1において起こるバイトキュー充填として示される。これらのバイトは次に、バイトキュー106の中の未決定のバイトのいずれとでもマージされる。
【0077】
バイトキュー106はプリデコード状態の5ビットに加えて生のX86バイトを、命令の境界がどこにあるかを示すために含む。バイトキューの先頭は常に次の予測実行されるX86命令の始まりである。第1のデコード段のPH1の中途で、バイトキュー106は命令キャッシュ104からのバイトの次のストリームを、バイトキュー106における既存のバイトとマージし、マージされたバイトのストリームを命令デコーダ108に提示する。命令デコーダ108は各命令がとるROPの数およびオペレーションコードの位置を決定し、これらのオペレーションコードを対応するROP発行位置0〜3(ここで0は次に発行すべきROPである)と整列させる。
【0078】
命令デコーダ108は命令の境界間のバイト数をカウントするか、命令キャッシュ104内に分岐を検出して、プログラムカウンタ値をその位置からフェッチされた第1のX86バイトに付与することによって、バイトキュー108内のX86命令の各々に対応するROPのためのデコードプログラムカウンタ値を維持する。オペレーションコードおよびROP位置決め情報をバイトキュー106内にストアされた即値フィールドと同様に用いて、命令デコーダ108は第1のデコードサイクルにおけるPH2および第2のデコードサイクルにおけるPH1の間にデコードPC値を静的に決定する。第2のデコードサイクルのPH1の終わりまでには、レジスタ読出および書込ポインタはすべて解決され、動作が決定される。これは、読出書込ポインタ値のアサートとして図8に示される。
【0079】
加えて、第2のデコードサイクルにおけるPH1の間のタイミングは、次のクロック位相において発行するかもしれない対応するROPのためのリオーダバッファエントリを割当ている。したがって、最大4つまでの付加的なROPが各々PH1の間にリオーダバッファ114内の16個のエントリのうちの1つに割当てられる。PH2の間、割当てられたすべてのROPのためのソース読出ポインタが、レジスタファイル112から読出され、一方で同時にリオーダバッファ114における推論的ROPのキューにアクセスする。
【0080】
この、双方のアレイに対する同時のアクセスは、実際のレジスタファイルを用いるかリオーダバッファ114からオペランドまたはタグを進めるかについて、遅い選択をできるようにする。まずPHIにおいて4つのROPエントリを割当て、次にPH2においてリオーダバッファ114をスキャンすることによって、ディスパッチされている現在のROP内の読出依存性はまだ推論的状態にある以前のROPすべてとともに同時に調査されてよい。
【0081】
実行サイクルは標準的なスカラプロセッサの実行サイクルに比類するものである。ROPは上述の読出オペランドバスだけでなく専用のオペレーションコードバスをも介して発行される。これらのオペランドバスはタイミング図において実行サイクルのPH1でディスチャージしているのを見ることができる。これは信号A/B読出オペランドバスにおいて示される。
【0082】
実行サイクルのPH1の終わりの方で、機能ユニットはそれらに対してどのROPが発行されたかということと、それらにそれらの局所予約ステーションから発行される準備のできた未決定のROPがあるかどうかということを判断する。機能ユニットの予約ステーション内では、FIFOが常に維持されており、最も古い命令が確実に最初に実行されるようになっている。機能ユニット内である命令の実行される準備が整っていれば、機能ユニットはPH1の最後の方で実行を開始し、PH2を通じて実行を継続する。このタイミングはALU122に関連している。
【0083】
PH2の終わりでは、待ち時間1のすべての機能ユニットについて、結果が準備されており、機能ユニットは5つの結果バスのうちの1つのために仲裁を行なう。これはタイミング図では結果バス仲裁信号のアサートとして示される。実行サイクルのPH2においてアクセスが許可されると、アクセスを許可された機能ユニットは結果サイクルのPH1において割当てられた結果バスを駆動する。
【0084】
結果サイクルはRISCの4段パイプライン上での書込に比類される。結果サイクルは値を直接他の機能ユニットに送って実行させる。これはRISCシステムにおけるALUの送信に大変似ている。マイクロプロセッサ100は発行されているROPの推論的性質のために結果サイクルとリタイアサイクルとの双方を含んでおり、その命令がリタイアされるべき次の命令となるまでは、レジスタファイルへの直接の書込は行なえない。リオーダバッファ114および結果バス140の送信は、このサイクルをいかなる実行プログラムにとってもトランスペアレントなものとし、リオーダバッファ114への書込のオーバーヘッドについては立ち往生は全く起こらない。結果サイクルのPH1では、リオーダバッファ114内の推論的ROPの位置は行先結果およびいかなるステータスとともにでも書込まれる。リオーダバッファ114内のこのエントリは次に、そのエントリが有効でありかつ割当てられているということを示すべくセットされる。したがって、このエントリが要求された場合、要求される読出アクセスにタグを送る代わりに、リオーダバッファ114は直接データを送る。
【0085】
結果サイクルのPH2では、新しく割当てられたタグはそれがそのソースオペランドの1つであることを要求する後続のROPによって検出され得る。これはタイミング図では、読出および書込ポインタを用いてのソースA/BオペランドバスへのROBタグ送信を介しての結果の直接送信として示される。
【0086】
リタイアサイクルはパイプラインの最終段である。これは、実行プログラムカウンタ値が実行プログラムカウンタレジスタ内にストアされるサイクルである。リタイアサイクルのPH1では、動作の結果はレジスタファイルに書込まれ、実行プログラムカウンタレジスタ内の実行プログラムカウンタ値は次にリタイアされるべき命令を指し示すべく更新される。リタイアサイクルのPH1では、リオーダバッファ114内のエントリは割当を解除され、リオーダバッファ114から書込まれる。エントリが割当を解除されているため、結果に対する後に続く参照は、リオーダバッファ114からの推論的な読出よりもむしろレジスタファイル112からの読出において誘発される。レジスタファイル112からの読出は、プロセッサ100の実際の状態を示す。
【0087】
したがって、マイクロプロセッサ100はパイプラインの異なった段において複数個のプログラムカウンタ値を用いる5段パイプラインを含む。このようなパイプラインとともにこれらのプログラムカウンタ値を用いることで、マイクロプロセッサ100はクロックサイクル1つあたり4つまでの単純なX86命令を発行できるようになる。
【0088】
【その他の実施例】
その他の実施例は前掲の特許請求の範囲内に含まれる。
【0089】
たとえば図9を参照して、フェッチプログラムカウンタ値を発生するには、下位プログラムカウンタ値をキャリー情報とともに提供するものである限り他の回路を用いてもよい。より特定的には、代替的なフェッチプログラムカウンタ回路700は、キュー702、上位部分プログラムカウンタラッチ704、下位部分プログラムカウンタラッチ706、上位部分プログラムカウンタ発生器回路708、下位部分プログラムカウンタ発生器回路710、およびプログラムカウンタ値セレクタ回路712を含む。
【0090】
キュー702は、32ビット非順次プログラムカウンタ値を有効ビット値とともに保持しており、かつ非順次プログラムカウンタ値のビット4:31を上位部分プログラムカウンタ発生器回路708に与え、非順次プログラムカウンタ値のビット0:3を下位部分プログラムカウンタ発生器回路710に与える。非順次プログラムカウンタ値はまた、下位部分プログラムカウンタラッチ706にも与えられる。
【0091】
下位プログラムカウンタラッチは次のプログラムカウンタ値のビット0:3を下位プログラムカウンタ発生器回路710に与える。上位プログラムカウンタラッチ704は、次のプログラムカウンタ値のビット4:31を上位プログラムカウンタ発生器回路708に与える。下位プログラムカウンタ発生器回路710は、キャリービットを上位プログラムカウンタ発生器回路708およびプログラムカウンタ値選択回路712に与える。上位プログラムカウンタ発生器回路708は、プログラムカウンタ値のビット4:31をプログラムカウンタ値選択回路712に与える。
【0092】
下位プログラムカウンタ発生器回路710は、加算器720〜723と、マルチプレクサ730〜733と、マルチプレクサ740〜743およびマルチプレクサ750とを含む。加算器720〜723の1つ、マルチプレクサ730〜733の1つ、およびマルチプレクサ740〜743の1つの組合せが、次に来るかもしれないデコードプログラムカウンタ値における下位の4ビットを提供する。次に来るかもしれないデコードプログラムカウンタ値の各々は、キュー702からのROPに対応する。マルチプレクサ730〜733は、以前のデコードPC値が分岐であったかどうかに基づき、それぞれの加算器720〜723への入力の1つを提供する。マルチプレクサ740〜743は、X86命令のバイト長およびX86命令にいくつのROPが対応するかに基づき、それぞれの加算器720〜723への他の入力を提供する。各加算器720〜723は、次に来るかもしれないデコードPC値の下位4ビットとキャリービットとを与える。次に来るかもしれないデコードPC値は、これらの値の1つを次のデコードPC値として与えるマルチプレクサ750へ、およびこれらの値をリオーダバッファ114に与えるプログラムカウンタ値選択回路712に提供される。
【0093】
上位プログラムカウンタ発生器回路712は、インクリメンタ760、マルチプレクサ761、インクリメンタ762、およびキャリーセレクタ764を含む。インクリメンタ760は、PCラッチ704内にストアされる現在のデコードPC値の上位部分を増分し、この増分された値をマルチプレクサ761に与える。マルチプレクサ761はまた、キュー702から非順次PC値をも受取る。マルチプレクサ761は、分岐が起こったかどうかに基づき、これらの値の1つをインクリメンタ762に与える。インクリメンタ762はこの値を受取り、この値をPCラッチ704に与える。インクリメンタ760および762は、キャリーセレクタ764によって与えられるキャリービットに基づき、増分を行なう。キャリーセレクタ764はリオーダバッファ114にディスパッチされるべき最後の命令におけるキャリービットを提供する。インクリメンタ760は次のデコードPC値のビット4:31を分岐セクション135に与える。
【図面の簡単な説明】
【図1】本発明に従うマイクロプロセッサのブロック図である。
【図2】本発明に従う線形にアドレス指定された命令キャッシュのブロック図である。
【図3】本発明に従う命令デコーダのブロック図である。
【図4】本発明に従う命令デコーダプログラムカウンタ回路のブロック図である。
【図5】本発明に従うリオーダバッファのブロック図である。
【図6】本発明に従うリオーダバッファアレイのブロック図である。
【図7】本発明に従うリオーダバッファプログラムカウンタ回路のブロック図である。
【図8】本発明に従う図1のマイクロプロセッサにおける動作のタイミング図である。
【図9】本発明に従う代替的なフェッチプログラムカウンタのブロック図である。
【符号の説明】
400 ROP制御およびステータス回路
598 実行プログラムカウンタ発生器回路
600 下位プログラムカウンタ発生器
602 上位プログラムカウンタ発生器
604 実行プログラムカウンタ制御装置

Claims (8)

  1. 命令を処理するためのパイプラインを有するマイクロプロセッサにおいて用いるためのプログラムカウンタ値を発生する装置であって、
    上位の第1のプログラムカウンタ部分と、下位の第1のプログラムカウンタ部分と、第1のキャリー信号とを有する第1のプログラムカウンタ値を提供するための第1のプログラムカウンタ回路を備え、第1のカウンタ値は検索された命令のプログラムカウント値を表わし、さらに
    下位の第1のプログラムカウンタ部分および第1のキャリー信号を受取り、下位の第1のプログラムカウンタ部分を用いて実行プログラムカウンタ値を発生するための実行プログラムカウンタ回路を備え、実行プログラムカウンタ回路は第1のプログラムカウンタ回路に結合され、実行プログラムカウンタ値は実行された命令のプログラムカウンタ値を表わし、
    第1のプログラムカウンタ回路は、下位プログラムカウンタ値発生器回路と上位プログラムカウンタ値発生器回路とを含み、
    下位プログラムカウンタ値発生器回路は、複数個のシーケンシャルな次のプログラムカウンタ値を提供するための複数個の加算器回路を含み、各加算器回路は現在のプログラムカウンタ値の下位の部分と、パイプライン内のそれぞれのシーケンシャルな命令の命令長値とを受取り、現在のプログラムカウンタ値の下位の部分を命令長値に加算して、次のプログラムカウンタ値の1つにおけるそれぞれの下位の部分および対応するキャリー信号を提供する、命令を処理するためのパイプラインを有するマイクロプロセッサにおいて用いるためのプログラムカウンタ値を発生する装置。
  2. 下位の第1のプログラムカウンタ部分およびキャリー信号をストアするための複数個の記憶位置をさらに備え、各記憶位置はパイプラインの各段に対応し、第1のプログラムカウンタ回路および実行プログラムカウンタ回路に結合される、請求項1に記載の装置。
  3. 上位プログラムカウンタ値発生器回路はインクリメンタ回路を含み、インクリメンタ回路は現在のプログラムカウンタ値の上位ビットおよび増分信号を受取り、かつ次のプログラムカウンタ値の上位部分を提供する、請求項1に記載の装置。
  4. 上位プログラムカウンタ値発生器回路はキャリーセレクタ回路を含み、キャリーセレクタ回路はキャリー信号を受取り、かつキャリー信号に基づく増分信号を提供する、請求項3に記載の装置。
  5. 命令を処理するためのパイプラインを有するマイクロプロセッサ装置であって、
    マイクロプロセッサコアを備え、マイクロプロセッサコアは命令を実行するための機能ユニットを含み、さらに
    上位の第1のプログラムカウンタ部分、下位の第1のプログラムカウンタ部分、および第1のキャリー信号を有する第1のプログラムカウンタ値を提供するための第1のプログラムカウンタ回路を備え、第1のカウンタ値は検索された命令におけるプログラムカウント値を表わし、さらに
    下位の第1のプログラムカウンタ部分および第1のキャリー信号を受取り、下位の第1のプログラムカウンタ部分を用いて実行プログラムカウンタ値を発生するための実行プログラムカウンタ回路を備え、実行プログラムカウンタ回路は第1のプログラムカウンタ回路に結合され、実行プログラムカウンタ値は実行された命令のプログラムカウンタ値を表わし、機能ユニットは命令を実行するとき実行プログラムカウンタ値を用い、
    第1のプログラムカウンタ回路は、下位プログラムカウンタ値発生器回路と上位プログラムカウンタ値発生器回路とを含み、
    下位プログラムカウンタ値発生器回路は、複数個のシーケンシャルな次のプログラムカウンタ値を提供するための複数個の加算器回路を含み、各加算器回路は現在のプログラムカウンタ値の下位の部分と、パイプライン内のそれぞれのシーケンシャルな命令の命令長値とを受取り、現在のプログラムカウンタ値の下位の部分を命令長値に加算して、次のプログラムカウンタ値の1つにおけるそれぞれの下位の部分および対応するキャリー信号を提供する、命令を処理するためのパイプラインを有するマイクロプロセッサ装置。
  6. 下位の第1のプログラムカウンタ部分およびキャリー信号をストアするための複数個の記憶位置をさらに備え、各記憶位置はパイプラインの各段に対応し、第1のプログラムカウンタ回路および実行プログラムカウンタ回路に結合される、請求項5に記載の装置。
  7. 上位プログラムカウンタ値発生器回路はインクリメンタ回路を含み、インクリメンタ回路は現在のプログラムカウンタ値の上位ビットおよび増分信号を受取り、かつ次のプログラムカウンタ値の上位部分を提供する、請求項5に記載の装置。
  8. 上位プログラムカウンタ値発生器回路はキャリーセレクタ回路を含み、キャリーセレクタ回路はキャリー信号を受取り、かつキャリー信号に基づき増分信号を提供する、請求項7に記載の装置。
JP13401195A 1994-06-01 1995-05-31 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置 Expired - Fee Related JP3628379B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/252,030 US5559975A (en) 1994-06-01 1994-06-01 Program counter update mechanism
US252030 1994-06-01

Publications (2)

Publication Number Publication Date
JPH07334361A JPH07334361A (ja) 1995-12-22
JP3628379B2 true JP3628379B2 (ja) 2005-03-09

Family

ID=22954326

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13401195A Expired - Fee Related JP3628379B2 (ja) 1994-06-01 1995-05-31 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置

Country Status (5)

Country Link
US (4) US5559975A (ja)
EP (1) EP0685788B1 (ja)
JP (1) JP3628379B2 (ja)
AT (1) ATE170011T1 (ja)
DE (1) DE69504135T2 (ja)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200289A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報処理装置
US5819057A (en) * 1995-01-25 1998-10-06 Advanced Micro Devices, Inc. Superscalar microprocessor including an instruction alignment unit with limited dispatch to decode units
US5708788A (en) * 1995-03-03 1998-01-13 Fujitsu, Ltd. Method for adjusting fetch program counter in response to the number of instructions fetched and issued
US5819059A (en) * 1995-04-12 1998-10-06 Advanced Micro Devices, Inc. Predecode unit adapted for variable byte-length instruction set processors and method of operating the same
WO1996038783A1 (en) * 1995-06-01 1996-12-05 Hal Computer Systems, Inc. Method and apparatus for rotating active instructions in a parallel data processor
US5875315A (en) * 1995-06-07 1999-02-23 Advanced Micro Devices, Inc. Parallel and scalable instruction scanning unit
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5752069A (en) * 1995-08-31 1998-05-12 Advanced Micro Devices, Inc. Superscalar microprocessor employing away prediction structure
US5854921A (en) * 1995-08-31 1998-12-29 Advanced Micro Devices, Inc. Stride-based data address prediction structure
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control
US6038657A (en) * 1995-10-06 2000-03-14 Advanced Micro Devices, Inc. Scan chains for out-of-order load/store execution control
US5872947A (en) * 1995-10-24 1999-02-16 Advanced Micro Devices, Inc. Instruction classification circuit configured to classify instructions into a plurality of instruction types prior to decoding said instructions
US5787241A (en) * 1995-12-18 1998-07-28 Integrated Device Technology, Inc. Method and apparatus for locating exception correction routines
US5930489A (en) * 1996-02-09 1999-07-27 Advanced Micro Devices, Inc. Microprocessor configured to detect memory operations having data addresses indicative of a boundary between instructions sets
US5961580A (en) * 1996-02-20 1999-10-05 Advanced Micro Devices, Inc. Apparatus and method for efficiently calculating a linear address in a microprocessor
US5790826A (en) * 1996-03-19 1998-08-04 S3 Incorporated Reduced register-dependency checking for paired-instruction dispatch in a superscalar processor with partial register writes
US5835968A (en) * 1996-04-17 1998-11-10 Advanced Micro Devices, Inc. Apparatus for providing memory and register operands concurrently to functional units
US6085302A (en) * 1996-04-17 2000-07-04 Advanced Micro Devices, Inc. Microprocessor having address generation units for efficient generation of memory operation addresses
WO1997041509A1 (en) * 1996-05-01 1997-11-06 Advanced Micro Devices, Inc. Superscalar microprocessor including a high performance instruction alignment unit
WO1998002799A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A parallel and scalable instruction scanning unit
US5867680A (en) * 1996-07-24 1999-02-02 Advanced Micro Devices, Inc. Microprocessor configured to simultaneously dispatch microcode and directly-decoded instructions
US6049863A (en) * 1996-07-24 2000-04-11 Advanced Micro Devices, Inc. Predecoding technique for indicating locations of opcode bytes in variable byte-length instructions within a superscalar microprocessor
US6370636B1 (en) 1996-07-31 2002-04-09 Hyundai Electronics Industries Co., Ltd. Accessing byte lines from dual memory blocks and aligning for variable length instruction execution
DE19634031A1 (de) * 1996-08-23 1998-02-26 Siemens Ag Prozessor mit Pipelining-Aufbau
US5889975A (en) * 1996-11-07 1999-03-30 Intel Corporation Method and apparatus permitting the use of a pipe stage having an unknown depth with a single microprocessor core
US5852727A (en) * 1997-03-10 1998-12-22 Advanced Micro Devices, Inc. Instruction scanning unit for locating instructions via parallel scanning of start and end byte information
US6289437B1 (en) * 1997-08-27 2001-09-11 International Business Machines Corporation Data processing system and method for implementing an efficient out-of-order issue mechanism
US6167506A (en) 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6134649A (en) * 1997-11-17 2000-10-17 Advanced Micro Devices, Inc. Control transfer indication in predecode which identifies control transfer instruction and an alternate feature of an instruction
US6108774A (en) * 1997-12-19 2000-08-22 Advanced Micro Devices, Inc. Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits
US6061786A (en) * 1998-04-23 2000-05-09 Advanced Micro Devices, Inc. Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction
EP0953898A3 (en) * 1998-04-28 2003-03-26 Matsushita Electric Industrial Co., Ltd. A processor for executing Instructions from memory according to a program counter, and a compiler, an assembler, a linker and a debugger for such a processor
US6141745A (en) * 1998-04-30 2000-10-31 Advanced Micro Devices, Inc. Functional bit identifying a prefix byte via a particular state regardless of type of instruction
US6175908B1 (en) 1998-04-30 2001-01-16 Advanced Micro Devices, Inc. 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
ATE467171T1 (de) * 1998-08-24 2010-05-15 Microunity Systems Eng System mit breiter operandenarchitektur und verfahren
US6393527B1 (en) * 1998-12-18 2002-05-21 Ati International Srl Prefetch buffer with continue detect
US6038660A (en) * 1999-05-26 2000-03-14 Infineon Technologies North America Corp. Method and apparatus for updating a program counter
US6438664B1 (en) 1999-10-27 2002-08-20 Advanced Micro Devices, Inc. Microcode patch device and method for patching microcode using match registers and patch routines
US6918028B1 (en) * 2000-03-28 2005-07-12 Analog Devices, Inc. Pipelined processor including a loosely coupled side pipe
US6874081B2 (en) * 2001-05-17 2005-03-29 Broadcom Corporation Selection of link and fall-through address using a bit in a branch address for the selection
US20040167786A1 (en) * 2002-03-08 2004-08-26 Grace John J. System for optimizing selection of a college or a university and a method for utilizing the system provided by a program
TW588243B (en) * 2002-07-31 2004-05-21 Trek 2000 Int Ltd System and method for authentication
US7877581B2 (en) * 2002-12-12 2011-01-25 Pmc-Sierra Us, Inc. Networked processor for a pipeline architecture
US6957319B1 (en) 2003-02-19 2005-10-18 Advanced Micro Devices, Inc. Integrated circuit with multiple microcode ROMs
US20050050278A1 (en) * 2003-09-03 2005-03-03 Advanced Micro Devices, Inc. Low power way-predicted cache
US7117290B2 (en) * 2003-09-03 2006-10-03 Advanced Micro Devices, Inc. MicroTLB and micro tag for reducing power in a processor
US7281120B2 (en) * 2004-03-26 2007-10-09 International Business Machines Corporation Apparatus and method for decreasing the latency between an instruction cache and a pipeline processor
US7649879B2 (en) * 2004-03-30 2010-01-19 Extreme Networks, Inc. Pipelined packet processor
US7889750B1 (en) * 2004-04-28 2011-02-15 Extreme Networks, Inc. Method of extending default fixed number of processing cycles in pipelined packet processor architecture
US20060149931A1 (en) * 2004-12-28 2006-07-06 Akkary Haitham Runahead execution in a central processing unit
US7817633B1 (en) 2005-12-30 2010-10-19 Extreme Networks, Inc. Method of providing virtual router functionality through abstracted virtual identifiers
US7822033B1 (en) 2005-12-30 2010-10-26 Extreme Networks, Inc. MAC address detection device for virtual routers
US7894451B2 (en) * 2005-12-30 2011-02-22 Extreme Networks, Inc. Method of providing virtual router functionality
KR20070101998A (ko) * 2006-04-13 2007-10-18 한국과학기술원 마이크로 컨트롤러의 프로그램 카운터 및 그 제어방법
US8035650B2 (en) * 2006-07-25 2011-10-11 Qualcomm Incorporated Tiled cache for multiple software programs
US7852486B2 (en) * 2008-02-07 2010-12-14 Board Of Regents, The University Of Texas System Wavelength and intensity monitoring of optical cavity
US8495699B2 (en) 2008-12-23 2013-07-23 At&T Intellectual Property I, L.P. Distributed content analysis network
US20100223660A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with time limit restrictions
US20100223673A1 (en) * 2009-02-27 2010-09-02 At&T Intellectual Property I, L.P. Providing multimedia content with access restrictions
KR101059899B1 (ko) * 2009-04-23 2011-08-29 광주과학기술원 마이크로 프로세서
US8904421B2 (en) 2009-06-30 2014-12-02 At&T Intellectual Property I, L.P. Shared multimedia experience including user input
US8605732B2 (en) 2011-02-15 2013-12-10 Extreme Networks, Inc. Method of providing virtual router functionality
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US10198260B2 (en) 2016-01-13 2019-02-05 Oracle International Corporation Processing instruction control transfer instructions
US10061580B2 (en) 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US10719248B2 (en) 2018-04-20 2020-07-21 Micron Technology, Inc. Apparatuses and methods for counter update operations
CN118645142A (zh) * 2019-07-15 2024-09-13 美光科技公司 用于存储器系统的维护操作
CN114741117B (zh) * 2022-03-09 2024-08-09 上交所技术有限责任公司 一种跨平台的程序指令重排的验证方法

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3781808A (en) * 1972-10-17 1973-12-25 Ibm Virtual memory system
US3875391A (en) * 1973-11-02 1975-04-01 Raytheon Co Pipeline signal processor
AT354159B (de) * 1975-02-10 1979-12-27 Siemens Ag Assoziativspeicher mit getrennt assoziierbaren bereichen
US4155119A (en) * 1977-09-21 1979-05-15 Sperry Rand Corporation Method for providing virtual addressing for externally specified addressed input/output operations
US4179737A (en) * 1977-12-23 1979-12-18 Burroughs Corporation Means and methods for providing greater speed and flexibility of microinstruction sequencing
US4200912A (en) * 1978-07-31 1980-04-29 Motorola, Inc. Processor interrupt system
US4384343A (en) * 1979-02-12 1983-05-17 Honeywell Information Systems Inc. Firmware controlled search and verify apparatus and method for a data processing system
US4453212A (en) * 1981-07-13 1984-06-05 Burroughs Corporation Extended address generating apparatus and method
US4807115A (en) * 1983-10-07 1989-02-21 Cornell Research Foundation, Inc. Instruction issuing mechanism for processors with multiple functional units
FR2554952B1 (fr) * 1983-11-15 1989-04-28 Telecommunications Sa Procede et systeme d'adressage pour memoire dynamique
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
US4685078A (en) * 1984-10-31 1987-08-04 International Business Machines Corporation Dual incrementor
US5133062A (en) * 1986-03-06 1992-07-21 Advanced Micro Devices, Inc. RAM buffer controller for providing simulated first-in-first-out (FIFO) buffers in a random access memory
EP0259095A3 (en) * 1986-08-27 1990-02-28 Amdahl Corporation Cache storage queue
US4853889A (en) * 1986-09-03 1989-08-01 American Telephone And Telegraph Company, At&T Bell Laboratories Arrangement and method for speeding the operation of branch instructions
US5131086A (en) * 1988-08-25 1992-07-14 Edgcore Technology, Inc. Method and system for executing pipelined three operand construct
US5056006A (en) * 1988-09-12 1991-10-08 General Electric Company Parallel processor with single program storage and sequencer and simultaneous instruction processing
US5051885A (en) * 1988-10-07 1991-09-24 Hewlett-Packard Company Data processing system for concurrent dispatch of instructions to multiple functional units
US5067069A (en) * 1989-02-03 1991-11-19 Digital Equipment Corporation Control of multiple functional units with parallel operation in a microcoded execution unit
US5113515A (en) * 1989-02-03 1992-05-12 Digital Equipment Corporation Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer
US5155816A (en) * 1989-02-10 1992-10-13 Intel Corporation Pipelined apparatus and method for controlled loading of floating point data in a microprocessor
US5155820A (en) * 1989-02-21 1992-10-13 Gibson Glenn A Instruction format with designations for operand lengths of byte, half word, word, or double word encoded in address bits
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5185871A (en) * 1989-12-26 1993-02-09 International Business Machines Corporation Coordination of out-of-sequence fetching between multiple processors using re-execution of instructions
US5546551A (en) * 1990-02-14 1996-08-13 Intel Corporation Method and circuitry for saving and restoring status information in a pipelined computer
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
JP2822588B2 (ja) * 1990-04-30 1998-11-11 日本電気株式会社 キャッシュメモリ装置
CA2037708C (en) * 1990-05-04 1998-01-20 Richard J. Eickemeyer General purpose compound apparatus for instruction-level parallel processors
DE69123629T2 (de) * 1990-05-04 1997-06-12 International Business Machines Corp., Armonk, N.Y. Maschinenarchitektur für skalaren Verbundbefehlssatz
CA2045773A1 (en) * 1990-06-29 1991-12-30 Compaq Computer Corporation Byte-compare operation for high-performance processor
US5325499A (en) * 1990-09-28 1994-06-28 Tandon Corporation Computer system including a write protection circuit for preventing illegal write operations and a write poster with improved memory
US5261063A (en) * 1990-12-07 1993-11-09 Ibm Corp. Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs
KR100299691B1 (ko) * 1991-07-08 2001-11-22 구사마 사부로 확장가능알아이에스씨마이크로프로세서구조
JPH0820949B2 (ja) * 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
DE69311330T2 (de) * 1992-03-31 1997-09-25 Seiko Epson Corp., Tokio/Tokyo Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5367650A (en) * 1992-07-31 1994-11-22 Intel Corporation Method and apparauts for parallel exchange operation in a pipelined processor
US5450560A (en) * 1992-12-21 1995-09-12 Motorola, Inc. Pointer for use with a buffer and method of operation
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US5465373A (en) * 1993-01-08 1995-11-07 International Business Machines Corporation Method and system for single cycle dispatch of multiple instructions in a superscalar processor system
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
IE80854B1 (en) * 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
US5574928A (en) * 1993-10-29 1996-11-12 Advanced Micro Devices, Inc. Mixed integer/floating point processor core for a superscalar microprocessor with a plurality of operand buses for transferring operand segments
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices, Inc. Superskalarmikroprozessoren

Also Published As

Publication number Publication date
US6351801B1 (en) 2002-02-26
JPH07334361A (ja) 1995-12-22
US6035386A (en) 2000-03-07
DE69504135T2 (de) 1999-05-06
ATE170011T1 (de) 1998-09-15
EP0685788B1 (en) 1998-08-19
DE69504135D1 (de) 1998-09-24
US5559975A (en) 1996-09-24
EP0685788A1 (en) 1995-12-06
US5799162A (en) 1998-08-25

Similar Documents

Publication Publication Date Title
JP3628379B2 (ja) 命令を処理するためのパイプラインを有するマイクロプロセッサ装置およびそれにおいて用いるためのプログラムカウンタ値を発生する装置
JP3662296B2 (ja) スーパースカラマイクロプロセッサおよびropを処理する方法
US5764938A (en) Resynchronization of a superscalar processor
EP0952517B1 (en) Microprocessors load/store functional units and data caches
JP3977016B2 (ja) 仮想レジスタ番号を用いて論理レジスタ番号を物理レジスタ番号にマッピングするように構成されるプロセッサ
US5664136A (en) High performance superscalar microprocessor including a dual-pathway circuit for converting cisc instructions to risc operations
US5721855A (en) Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
EP0651322B1 (en) Instruction caches for variable byte-length instructions
US6684323B2 (en) Virtual condition codes
JPH07182163A (ja) スーパスカラ命令デコード/発行装置
EP0651324A1 (en) Speculative instruction queue for variable byte length instructions
JP2002525741A (ja) 間接分岐ターゲットを計算するための方法
JP3866920B2 (ja) 命令のリタイアメント時に物理レジスタを選択的に自由にするよう構成されたプロセッサ
US5895497A (en) Microprocessor with pipelining, memory size evaluation, micro-op code and tags

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20041108

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: 20041124

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20041208

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: 20071217

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081217

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091217

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091217

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101217

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111217

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111217

Year of fee payment: 7

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111217

Year of fee payment: 7

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: 20111217

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121217

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees