(57)【要約】【課題】数多くの特殊なプロセッサ機能及び能力を提供するための構造及び方法を内含する、中央処理ユニット(CPU）といった高性能プロセッサを提供する。【解決手段】これらの構造及び方法は、(1)精確な状態を維持しながらロード／ストア命令を含む長待ち時間命令を攻撃的にスケジュールし；(2)任意の命令境界において精確な状態を維持し回復し；(3)精確な状態を維持するべく命令状態をトラッキングし；(4)精確な状態を維持するべく命令をチェックポインティングし；(5)タイムアウトチェックポイントを新規作成し維持し使用し；(6)浮動小数点例外をトラッキングし；(7)リネーム可能なトラップスタックを新規作成し維持し使用し；(8)複数の同時未解決分岐評価のためのウォッチポイントを新規作成し維持し使用し；(9)精確な状態を維持するために命令状態をトラッキングし；(10)精確な状態を維持する一方でプロセッサのスループットを増大させる。【選択図】図４
2006107536.tif 000002
【特許請求の範囲】
【請求項１】
中央処理ユニット（ＣＰＵ）内の精確な状態を維持しながらチェックポイント実行されたデータの量を減少させるべく１つの命令をチェックポイント実行するための方法において、
−  前記中央処理ユニット内のデータ記憶装置内に複数のマップレジスタ手段をもつレジスタリネームマップデータ構造を規定し、前記レジスタリネームマップデータ構造を使用して、命令の実行前の状態として前記レジスタリネームマップを記憶し、前記命令の実行後に前記命令の実行前の状態を回復し、前記レジスタリネームマップデータの値が対応するレジスタデータ値よりも小さな量を確保するステップ；
を具備し、前記レジスタリネームマップデータとして前記状態を記憶するステップとして、
−  １つの命令の実行に先立ちその命令が参照した各々の論理ソース及び／又は論理宛先レジスタのために前記ＣＰＵ内の利用可能な物理レジスタを割振るステップ；
−  固有の論理レジスタタグにより、各々の前記論理ソースレジスタを識別するステップ；
−  物理レジスタタグにより各々の割振り可能な物理レジスタを識別するステップ；
−  前記固有の論理レジスタタグのうちの１つと前記複数のマップレジスタ要素のうちの各々１つを結びつけるステップ；及び
−  各々のマップレジスタ要素が現在その論理レジスタタグに対してマッピングされている物理レジスタタグを記憶するような形で、この物理レジスタが割振られた固有の論理レジスタタグに付随するマップレジスタ要素の中に各々の前記割振られた物理レジスタで識別された物理レジスタタグを記憶するステップ；
を含み、
前記レジスタリネームマップ内への前期状態の記憶が、前記命令の発行の結果として前記物理レジスタのために変化した全ての状態が記憶されることを特徴とする方法。
【請求項２】
−  前記ＣＰＵ内の利用可能な物理レジスタのうち割振りされていない物理レジスタについて前記物理レジスタを記憶する複数のフリーリスト手段をもつフリー物理レジスタのフリーリストデータ構造を規定するステップ；
−  論理レジスタを参照する命令がディスパッチされうる場合に、ソースレジスタ又はデスティネーションレジスタとして論理レジスタの置換に使用するため、命令発行ユニットに対しフリー物理レジスタのタグ情報を送信するステップ；及び
−  前記命令発行ユニットに対する前記フリー物理レジスタのタグ情報の送信時点で、前記フリー物理レジスタのフリーリストデータ構造から前記物理レジスタのタグ情報を除去するステップをさらに含むことを特徴とする、請求項１に記載の方法。
【請求項３】
前記命令の実行に先立ち物理レジスタを割振る前記ステップには、実行ユニットに対して前記命令を発行する前に前記物理レジスタを割振るステップが含まれていることを特徴とする、請求項１に記載の方法。
【請求項４】
物理レジスタの数が論理レジスタの数よりも多く、各々の前記論理レジスタを複数の物理レジスタに対してマッピングすることができることを特徴とする、請求項１に記載の方法。
【請求項５】
命令により参照される前記論理レジスタは、任意の論理デスティネーションレジスタが物理レジスタにマッピングされる前に物理レジスタに対してマッピングされることを特徴とする、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
この出願は発明者Gene W.Shen et al.によって1995年３月３日に出願された、米国特許出願代理人整理番号第Ａ-60625-1/JAS、米国特許出願第08/398,299号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE”の継続であり；該継続出願は同じく発明者Gene W.Shen et al.によって1995年２月14日に出願された、米国特許出願代理人整理番号第Ａ-60625/JAS、米国特許出願第08/390,885号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE”の継続である。
【０００２】
発明者Takeshi Kitaharaによって1995年２月14日に出願された、米国特許出願代理人整理番号第1706号、米国特許出願第08/388,602号“INSTRUCTION FLOW CONTROL CIRCUIT FOR SUPERSCALER MICROPROCESSOR ”；発明者Michael Simone及びMichael Shebanowによって1995年２月14日に出願された、米国特許出願代理人整理番号第1693号、米国特許出願第08/388,389号“ADDRESSING METHOD FOR EXECUTING LOAD INSTRUCTIONS OUT OF ORDER WITH RESPECT TO STORE INSTRUCTIONS ”；発明者DeForest Tovey.Michael Shebanow,John Gmuender によって1995年２月14日に出願された、米国特許出願代理人整理番号1707号、米国出願第08/388,606号“METHOD AND APPARATUS FOR EFFICIENTLY WRITING RESULTS TO RENAMED REGISTERS ”；及び発明者DeForest Tovey,Michael Shebanow,John Gmuender によって1995年２月14日に出願された、米国特許出願代理人整理番号第1741号、米国出願第388,364 号“METHOD AND APPARATUS FOR COORDINATING THE USE OF PHYSICAL REGISTERS IN A MICROPROCESSOR ”はいずれも参考のため本願明細書にその内容を引用する。
【０００３】
発明者Gene W.Shen,John Szeto,Niteen A.Patkar及びMichael C.Shebanowによって1995年２月14日に出願された、米国特許出願第08/390,885号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE”；発明者Gene W.Shen,John Szeto,Niteen A.Patkar及びMichael C.Shebanowによって1995年３月３日に出願された米国特許出願第08/398,299号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRECISE STATE”；発明者Chih-Wei David Chang.Kioumars Dawallu,Joel F.Boney,Ming-Ying Li,及びJen-Hong Charles Chen によって1995年３月３日に出願された、米国特許出願第08/397,810号“PARALLEL ACCESS MICRO-TLB TO SPEED UP ADDRESS TRANSLATION ”；発明者Leon Kuo-Liang Peng,Yolin Lih,及びChih-Wei David Changによって1995年３月３日に出願された、米国特許出願第08/397,809号“LOOKASIDE BUFFER FOR ADDRESS TRANSLATION IN A COMPUTER SYSTEM ”発明者Michael C.Shebanow,Gene W.Shen,Ravi Swami,及びNiteen Patkar によって1995年３月３日に出願された米国特許出願第08/397,893号“RECLAMATION OF PROCESSOR RESOURCES IN A DATA PROCESSOR”；Michael C.Shebanow,John Gmuender,Michael A.Simone,John R.F.S Szeto,Takumi Maruyama, 及びDeForest W.Toveyによって1995年３月３日に出願された米国特許出願第08/397,891号“METHOD AND APPARATUS FOR SELECTING INSTRUCTIONS FROM ONES READY TO EXECUTE”;Shalesh Thusoo,Farnad Sajjadian,Jaspal Kohli,及びNiteen Patcar によって1995年３月３日に出願された米国特許出願第08/397,911号“HARDWARE SUPPORT FOR FAST SOFTWARE EMULATION OF UNIMPLEMENTED INSTRUCTIONS”，Akira Katsuno,Sunil Savkar, 及びMichael C.Shebnow によって1995年３月３日に出願された米国特許出願第08/398,284号“METHOD AND APPARATUS FOR ACCELERATING CONTROL TRANSFER RETURNS”，Akira Katsuno,Niteen A.Patcar,Sunil Savkar, 及びMichael C.Shebnow によって1995年３月３日に出願された米国特許出願第08/398,066号“METHODS FOR UPDATING FETCH PROGRAM COUNTER”；Sunil Savkarによって1995年３月３日に出願された米国特許出願第08/398,151号“METHOD AND APPARATUS FOR RAPID EXECUTION OF CONTROL TRANSFER INSTRUCTIONS ”；Chih-Wei David Chang,Joel Fredrick Boney，及びJaspal Kohliによって1995年３月３日に出願された米国特許第08/397,910号“METHOD AND APPARATUS FOR PRIORITIZING AND HANDLING ERRORS IN A COMPUTER SYSTEM”；Michael Simoneによって1995年３月３日に出願された米国特許出願第08/397,800号“METHOD AND APPARATUS FOR GENERATING A ZERO BIT STATUS FLAG IN A MICROPROCESSOR”；及びChien Chen及びYizu Lu によって1995年３月３日に出願された米国特許出願第08/397,912号“ECC PROTECTED MEMORY ORGANIZATION WITH PIPELINED READ-MODIFY-WRITE ACCESS ”もそれぞれ参考のため本願明細書中に引用した。
【０００４】
発明者Sunil Savkar,Michael C.Shebanow,Gene W.Shen,及びFarnad Sajjadianによって1995年６月１日に出願された米国特許出願第 号“METHOD AND APPARATUS FOR ROTATING ACTIVE INSTRUCTIONS IN A PARALLEL DATA PROCESSOR”；及び発明者Sunil Sankar,Michael C.Shebanow,Gene W.Shen,及びFarnad Sajjadianによって1995年６月１日に出願された米国特許出願第 号“PROGRAMMABLE INSTRUTION TRAP SYSTEM AND METHOD”もそれぞれ参考のため本願明細書中に引用した。
【０００５】
発明者Gene W.Shen,John Szeto,Niteen A.Patcar, 及びMichael C.Shebanowによって1995年６月７日に出願された代理人整理番号第Ａ-60624/JAS、米国特許出願第08/487,801号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING INSTRUCTION STATUS TO MAINTAIN PRCISE STATE ”；発明者Gene W.Shen,John Szeto,Niteen A.Patcar,Michael C.Shebanow,及びMichael A.Simoneによって1995年６月７日に出願された、代理人整理番号第Ａ-60622/JAS、米国特許出願第08/478,025号“PROCESSOR STRUCTURE AND METHOD FOR AGGRESSIVELYSCHEDULING LONG LATENCY INSTRUCTIONS INCLUDING LOAD/STORE INSTRUCTIONS WHILE MAINTAINING PRECISE STATE”；発明者Gene W.Shen,John Szeto,Niteen A.Patkar, 及びMichael C.Shebanowによって1995年６月７日に出願された、代理人整理番号第Ａ-60623/JAS、米国特許出願第08/483,958号“PROCESSOR AND METHOD FOR MAINTAINING AND RESTORING PRECISE STATE AT ANY INSTRUCTION BOUNDARY”；発明者Gene W.Shen,John Szeto,Niteen A.Patcar, 及びMichael C.Shebanowによって1995年６月７日に出願された、代理人整理番号第Ａ-60625-2/JAS、米国特許出願第08/467,419号“PROCESSOR STRUCTURE AND METHOD FOR CHECKPOINTING INSTRUCTIONS TO MAINTAIN PRECISE STATE ”；発明者Gene W.Shen,John Szeto,Niteen A.Patcar, 及びMichael C.Shebanowによって1995年６月７日に出願された、代理人整理番号第Ａ-60647/JAS、米国特許出願第08/473,223号“PROCESSOR STRUCTURE AND METHOD FOR A TIME-OUT CHECKPOINT”；発明者Gene W.Shen,John Szeto, 及びMichael C.Shebanowによって1995年６月７日に出願された、代理人整理番号第Ａ-60648/JAS、米国特許出願第08/484,795号“PROCESSOR STRUCTURE AND METHOD FOR TRACKING FLOATING-POINT EXCEPTIONS ”；発明者Hideki Osone及びMichael C.Shebanowによって1995年６月７日に出願された、代理人整理番号第Ａ-60649/JAS、米国特許出願第08/472,394号“PROCESSOR STRUCTURE AND METHOD FOR RENAMABLE TRAP-STACK ”；及び発明者Gene W.Shen,Michael C.Shebanow,Hideki Osone,及びTakumi Maruyama によって1995年６月７日に出願された、代理人整理番号第Ａ-60682/JAS、米国特許出願第08/482,073号“PROCESSOR STRUCTURE AND METHOD FOR WATCHPOINT FOR PLURAL SIMULTANEOUS UNRESOLVED BRANCH EVALUATION”もそれぞれ参考のため本願明細書に引用した。
【０００６】
技術分野
本発明は投機的追越し（out-of-order) 実行プロセッサにおいて精確な状態（precise state)を維持しながら、プロセッサの性能を高める装置、システム、及び方法に係わる。
【背景技術】
【０００７】
発明の背景
プロセッサにおいて、制御流れ命令（例えば分岐命令）、メモリのトランザクションに起因する待ち時間(latency) 、及びマルチサイクル演算を必要とする命令は、パイプラインに“バブル”を導入する原因となるため、プロセッサが高い命令実行帯域幅を維持するのを妨げることが多い。投機的追越し命令実行を行うことによって性能を高めることができる。従来、１つの命令からの中間結果を後続の命令に利用できないとき、プロセッサは実行を中断するか、または中間結果が得られるまで“機能停止する”。
【０００８】
２つの技術、即ち、投機的実行と追越し実行によって、この新しいプロセッサは高い実行帯域幅(execution bandwidth) を維持することができる。投機的実行は、先行の処理ステップから該当分岐を選択するための情報がないままに１つの分岐に遭遇した場合、予測し、この予測に基づいて命令のディスパッチ及び実行を行う公知の技術である。もし予測が誤りであることが後刻判明したら、分岐誤予測回収によって誤予測された命令シーケンスを取消さねばならない。投機的実行によってプロセッサは命令の発行及び実行を継続することができる。公知の予測スキームは性能を高めるため、誤予測実行の頻度を極力少なくする。しかし、投機的マシンにおいて、適正状態の維持は煩雑であり、好ましくないオーバヘッドを伴なう。追越し実行はメモリ及びマルチサイクル命令待ち時間に留意しない技術である。追越し実行を行うプロセッサにおいては、命令の順序をダイナミックに変更し、順次プログラムとは異なる順序で命令を実行することによって利用可能な命令レベル並列性を見つける。
【０００９】
“精確な例外”モデルは例外条件のソフトウエア解像度を単純化する重要な要因ではあるが、投機的追越し実行を行うマシンにおいて、精確な例外を維持するのは煩雑な操作である。マシンの状態は一般にプロセッサに特異であり、構造上の状態はすべての制御／状態レジスタ、データ・レジスタ、アドレス・レジスタ及びすべての補助メモリの状態を含む。例えばSPARC-V9 Architecture Manualのpp.29 −30にはSPARC-V9制御／状態レジスタが記載されており、ソフトウエア・プログラマーのよく知るところである。マシンの状態はプロセッサに特異な、かつマシンの状態に関する他のすべてを含む構造上の状態のスーパー・セットである。不正命令(faulting instruction)とは例外を発生させる命令である。例外とはプロセッサにその動作を停止させ、処理再開の前にこの例外の原因となった状況を究明するように指示する状況または条件である。例外はエラーとは限らず、例えば、割込みをも含む。実行トラップは、例外から生ずる可能性がある。精確な例外モデルを作成するプロセッサにおいては、不正または例外は構造上の状態を変更しない。不正命令に先立つすべての命令に関しては構造上の状態がすでに変更されているが、不正命令後の命令に関しては構造上の状態は変更されていない。正確な例外モデルがなければ、ソフトウエアが不正命令を識別し、次いで、不正命令を再試行するか、または不正命令をバイパスして次の命令を実行するための再始動点(restart point) を算出しなければならない。
【００１０】
短パイプライン単一発行マシンにおいて精確な状態を維持する技術は公知である。一般に、短パイプラインマシンは命令の取出し、発行、実行、及び状態を変更されるライトバック段階を含む約４または５段階以下の段階を有する。単一発行方式によれば、パイプライン段階におけるどの命令をフラッシュすべきかを考慮せずにパイプラインをクリアすればよいから、例外または誤予測の場合に回復が簡単になる。これらの公知技術においては、例外が発生した場合、構造上の状態を変更する前に検出される。例外が検出されると、パイプラインから命令がフラッシュされ、構造上の状態が変更されないように、構造上の状態へデータ、状態または結果がライトバックされるのを意図的に阻止する。
【００１１】
投機的追越しスーパスカラ（多重発行）方式では単一発行マシンの場合と比較して、精確な状態を維持することがはるかに困難である。このような投機的追越しマシンの場合には、エラーを発生させる命令が投機的に実行される可能性があり、エラーの場所のあとに現われる構造上の状態の変更を取消す方法及び構造を設ける必要がある。また、例外は多くの場合、プログラムの順序とは異なる順序で検出される。従って、追越しプロセッサは例外を解読し、どの命令を完了（及び構造上の状態を変更）させるべきか、どの命令を取消すべきかを判断できねばならない。
【００１２】
図１は、投機的プロセッサにおいて精確な状態を維持するために再順序付けバッファを利用する公知のアプローチを示す。再順序付けバッファは、（結果が得られる）命令実行完了時から実行完了の結果としてマシンの状態が変更されるまでの間に一時遅延を有効に導入する先入れ／先出しスタックによって実現される。メモリへの誤予測分岐命令、実行例外、または同様の状態がライトバックされるのを阻止することによって精確な状態を維持する。誤予測に基づく投機的実行を取消すために状態を復旧するのではなく、命令が投機の域を出ない間、状態の変更を阻止することによって、精確な状態を維持するのである。
【００１３】
図２は、命令を実行する前に状態を“チェックポイント”に記憶させ、あとで、記憶されているチェックポイント情報から状態を復旧することにより、投機的プロセッサにおいて精確な状態を維持する公知のアプローチを示す。公知のチェックポインティングでは、マシンの状態変更を伴なう可能性がある、投機的に実行された命令を残らずチェックポイントする。各プロセッサはマシンの状態を決定する一組の状態パラメータ、例えば、すべての制御／状態レジスタ、データレジスタの値などを有する。先のマシン状態を復旧するため、状態を決定するすべてのパラメータを記憶させ、必要に応じて復旧できるようにしなければならない。公知のチェックポインティング技術では、状態を決定するパラメータのいずれか１つでも変更する可能性がある命令に関してすべての状態決定パラメータを記憶させるのが典型的である。チェックポインティングの対象となるすべての命令について、公知のチェックポインティングでは、実行寸前の特定の命令によって変更されそうな状態だけでなく、チェックポインティングの対象である命令のいずれか１つによって変更される可能性のあるすべての状態情報を記憶させる。例えば、マシンの状態を決定するのに 100個の状態パラメータを必要とするマシンの場合、もし命令“Ｘ”の実行が１つだけの制御／状態レジスタを変更する可能性があるなら、この命令を実行するには、この命令によって変更されると考えられるパラメータだけでなく、 100個の状態パラメータを記憶させる必要がある。
【００１４】
図３は、一連の命令の構造及び内容と公知のチェックポイントとを模式的に示す説明図であり、特定のマシンまたはCPU のための実際のチェックポイント・データを示すものではない。公知のチェックポイントはサイズが一定であるから、各チェックポイントは特定の命令によって実際に変更される状態よりも広くなければならない。公知のチェックポインティングを利用する回復としては、例えば、不正命令または誤予測に基づいて投機的に実行された命令の直前に記憶されているチェックポイントを利用しての復旧、チェックポイントされている命令の直後にまでプログラム・カウンタをバックアップすること、及びチェックポイントされている命令からの命令再実行などがある。
【００１５】
追越し実行を管理し、状況によっては適正状態を維持する手段として、チェックポインティング、再順序付けバッファ、履歴バッファ、及びフューチュアファイルの使用がすでに開示されている。任意の命令境界においてではなく、チェックポイント境界においてマシン状態の復旧を可能にする慣用のチェックポインティングはHwu 及びPattが論述している（第14回コンピュータ・アーキテクチュア年次シンポジウム（1987年６月）における会報pp.18 −26に発表されたW.Hwu 及びY.N.Pattの“Checkpoint Repair for High Performance Out-of-Order Execution Machines”）。パイプラインRISCプロセッサにおける精確な割込みを作成する方法はWang及びEmnettによって報告されている（“Implementing Precise Interruptions in Pipelined RISC Processors ”，IEEE Micro,1993 年８月、pp.36 −43）。同じくパイプライン・プロセッサにおける精確な割込み作成はSmith 及びPleszkunによっても報告されている（第12回コンピュータ・アーキテクチュア年次国際シンポジウム会報（1985年６月）、pp. 36−44におけるJ.E.Smith 及びA.R.Pleszkunの“Implementation of Precise Interrupts in Pipelined Processors”）。高性能スーパスカラ・マイクロプロセッサの設計に関する従来技術の概要はMike Johnsonが記述している（M.Johnson[a.k.a.William Johnson] , Superscaler Microprocessor Design,Prentice-Hall,Inc.,Englewood Clitts,New Jersey 07632,1991,ISBN O-13-875634-１）。これらの参考文献の内容は参考のため本願明細書中に引用した。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
これらの技術のうち、少なくともいくつかは性能を向上させるが、投機の可能度を制限し、大ざっぱなマシン状態は回復できても命令レベルのマシン状態回復は不可能であり、完全に満足できるものではない。公知の再順序付けバッファ技術は、その良さが投機の可能度と正比例するから、投機の可能度に限界がある。即ち、取消しの対象となりそうなすべての命令に関して、命令実行の結果を再順序付けバッファに記憶させねばならない。例えば、もしマシンが64個の未決定かつ投機的命令を可能にするなら、再順序付けバッファは結果を記憶するための少なくとも64個の記憶場所を含まねばならない。公知のチェックポインティングにおいては、チェックポイントされるチェックポイント数はマシン中の未定命令数よりも少ないのが普通であるが、各チェックポイントに記憶されるデータ量は極めて大きい（各時点におけるマシンの全体的な状態）。チェックポイント記憶条件はプロセッサのチップ基板面積に負担を課する。理想的には、精確な状態を維持するためのスキームは比較的多い同時的に存在する投機的命令に対して線形または低位（例えば対数）関係にスケールできることが望ましい。再順序付けバッファの入口(entry) 記憶域はデータを記憶するのに充分な幅を持たねばならず、これらの技術はまたすべての入口までの連想検索を必要とする。これは、非常に大きな再順序付けバッファにとって困難である。
【００１７】
さらに、精確な状態を回復するための従来の方法は一部の環境で不完全である。たとえば、投機的分岐の結果として実行される命令が外部「ダム」デバイスの状態を修正する場合、状態の回復が通常、外部デバイス修正ポイント前のチェックポイント境界での状態回復を伴うため、外部デバイスを修正する命令を含む非不正命令のフォワード再実行を伴う場合である。このような場合、不正命令の再実行だけでは、外部デバイスの状態変化の効果を元通りにせず、状態回復ポイントと不正命令との間で非不正命令を再実行することは、さらに問題を生じる。
【００１８】
従来のチェックポインティングでは、命令ストリームの限られた数のポイントでマシン状態をセーブし、チェックポイントされたアーキテクチュラル状態を復旧して、分岐誤予測または実行エラーから回復する。従来のチェックポインティングは命令を１つ１つチェックポイントしない。従来のチェックポインティングは、チェックポイント境界、すなわち、チェックポイントを確立した命令でのみマシン状態を回復できる。フォールトまたは実行エラーが発生すると、チェックポイントされた状態は、周知の技術によって回復され、これによって、チェックポイント後の不正命令を含むすべての命令を事実上「元通り」にする。そして命令は、たとえば単一発行モードで、チェックポイントされた命令から順次前向きに再実行され、不正命令に到達する。
【００１９】
この従来のチェックポインティング技術では投機的実行が可能だが、多くの点で不利益である。たとえば、これは堅牢な例外回復とならない。間欠的エラーでは、例外作成命令前のチェックポイントへの従来のマシンバックアップと、チェックポイント後の命令の再実行は決定的な行動とならない場合があり、再実行された命令の誤って変更された状態を伝播することによって、マシン状態の混乱を増すことがある。従来のチェックポインティングとマシンバックアップ手順は、命令の再実行を最小限にしようとするものではない。さらに、ハードウェアの故障やマシンのタイムアウトなど災害的なマシンエラーは、回復したチェックポイント済み命令と例外を生じる命令との間のすべての命令が再実行されると、プロセッサをデッドロックさせることがある。
【００２０】
従来の「再順序づけバッファ」とは、予め定義された大きさの先入れ先出し（ＦＩＦＯ）メモリ構造の再順序づけバッファで投機的命令を管理する。命令が実行を完了したら、実行によるデータ値の結果が再順序付けバッファに書き込まれ、バッファを移動して上位に現れる時、データ値が再順序づけバッファからレジスタファイルに書き込まれる。再順序づけバッファの大きさは、命令実行の完了とアーキテクチュラル状態の恒久的修正との間の遅延を効果的に定義する。一旦データ値がレジスタに書き込まれると、これらを元通りにすることはできない。再順序付けバッファの記述項（エントリ）をレジスタファイルの記述項と関連づける手順である「連想探索」について、M.Johnson がSuperscalar Microprocessor Design の４０頁以降で説明している。
【００２１】
再順序付けバッファスキームには少なくとも３つの限界がある。１つ目は、従来の再順序づけバッファスキームでは、命令実行の結果のみが再順序付けバッファにセーブされ、プログラムカウンタ（ＰＣ）値はセーブされない。そのため、再順序づけバッファを使った分岐誤予測回復には、ＰＣ再構築、命令フェッチ、命令発行の追加ステップが必要となる。その結果、再順序付けバッファを使った分岐誤予測からの従来の回復は遅れる。
【００２２】
第２に、再順序づけバッファは一般に限られた命令ミックスの投機的実行しかできない。たとえば、命令発行段階中に検出されたトラップは（発行トラップ）、一般に制御レジスタアップデートを伴うため、再順序付けバッファを使って投機的に実行されないことがある。再順序付けバッファ技術は、制御レジスタアップデートを伴う命令の投機的実行をサポートしない。一定の命令セットアーキテクチャで発行トラップを投機的に入力できないこと（例：Sun Microsystems SPARCアーキテクチャの「スピル／フィル」トラップ）は、大きな性能上の限界となる。
【００２３】
第３に、再順序付けバッファの大きさは一般に、プロセッサに許された未定命令数の直接線形関数である。たとえば、６４個の未定命令の可能なプロセッサでは、６４個の記述項を持つ再順序付けバッファが必要となる。プロセッサ内に多数のバッファレジスタを割り当てることは禁止されることがあり、特に大型のアクティブ命令ウィンドウ、すなわち比較的多数の同時未定命令によって、命令レベルの並列性の抽出が改善されるデータフロープロセッサに当てはまる。データフロープロセッサとは、命令実行の順序が、従来の非データフロープロセッサのようにプログラムカウンタのインクリメントによるのではなく、オペランドやデータ利用可能性によって決定するプロセッサである。
【００２４】
フューチャファイルは、再順序付けバッファの連想探索問題を避けるための再順序づけバッファ技術の修正である。フューチャファイルについては、M.Johnson のSuperscalar Microprocessor Design の９４頁から９５頁に説明されている。履歴バッファは、順序無視（out-of-order) 完了のパイプライン・スカラー・プロセッサで精確な割り込みを実行するため提案された方法と構造で、 M.JohnsonのSuperscalar Microprocessor Design の９１頁から９２頁に説明されている。
【００２５】
本書で全体を参照することにより明示的に組み入れるD.WeaverとT.Germond によるThe SPARC Architecture Manual 、Version 9 、Englewood Cliffs（１９９４年）では、順序無視投機的実行プロセッサの特定のタイプについて説明している。SPARC V9アーキテクチャには、浮動小数点状態レジスタ（ＦＳＲ）が必要である。ＦＳＲには、ＦＳＲ ａｃｃｒｕｅｄ ｅｘｃｅｐｔｉｏｎ（ＦＳＲ．ａｅｘｃ）フィールド、ＦＳＲ ｃｕｒｒｅｎｔ ｅｘｃｅｐｔｉｏｎ（ＦＳＲ．ｃｅｘｃ）フィールド、ＦＳＲ ｆｌｏａｔｉｎｇ ｐｏｉｎｔ ｔｒａｐ ｔｙｐｅ（ＦＳＲ．ｆｔｔ）フィールドの３つのフィールドがあり、浮動小数点例外が発生すると更新されて、トラップハンドリングルーチンが、浮動小数点例外によるトラップに対処するため利用する。これらフィールドのアップデートは、命令がプログラム順序とは異なる順序で実行、完了するため、順序無視実行プロセッサでは難しい。これらフィールドは、命令がプログラム順序で発行、実行されたかのように更新されるか、更新されたように見えなければならないため、これらの例外を追跡してＦＳＲレジスタを正しく更新するためには、装置および対応する方法が必要である。
【００２６】
命令を投機的に実行できるデータプロセッサでは、分岐方向（取るか取らないか）、あるいは分岐アドレス（目標アドレスまたは分岐命令の次のアドレス）は、解決する前に予測可能である。後に、これら予測が誤っていることがわかれば、プロセッサは以前の状態にバックアップして、正しい分岐ストリームで命令実行を再スタートする。但し、市販のスーパスカラプロセッサの大半は、分岐予測が正しいかどうかをチェックするには、１サイクルあたり１つの分岐のみ評価可能である。しかし、多重予測分岐は１つのサイクルで評価できることが多い。そのため、他の場合では実行可能な分岐評価が遅延することになる。分岐評価の遅延は、プロセッサの性能に大きな影響を与える。
【００２７】
さらに、従来の投機的実行プロセッサでは、トラップが生じると、プロセッサは予測されたすべての分岐が解決してトラップが真実であり投機的ではないことを確かめるまで待たなければならない。トラップが真実であるかどうかをプロセッサが確かめる最も簡単な方法は、トラップを取る前にプロセッサを同期させることである（すなわち、トラップ条件発生前に発行されたすべての命令を実行、完了する）。但し、頻繁に発生するトラップにこれを行うと、プロセッサの性能を落とす。スピル／フィル発行トラップとソフトウェアトラップ（Ｔｃｃ命令）がしばしば発生するSPARC-V9アーキテクチャでは特にそれが当てはまる。プロセッサの性能を上げるためにはこの問題を解決しなければならない。
【課題を解決するための手段】
【００２８】
発明の概要
先行技術の前記問題は、多数の特殊プロセッサ機能および能力を提供する構造および方法を含む高性能プロセッサに関する発明で対処される。これら構造および方法には、（１）精確状態を維持しながらロード／ストア命令を含む長待ち時間(latency) 命令の積極的なスケジューリング；あらゆる命令境界での精確状態の維持と回復、（３）精確状態を維持するための命令状態の追跡、（４）精確状態を維持するための命令のチェックポインティング、（５）タイムアウトチェックポイントの作成、維持および利用、（６）浮動小数点例外の追跡、（７）リネーム可能なトラップスタックの作成、維持および利用、（８）複数の同時未解決分岐評価のためのウォッチポイントの作成、維持および利用、（９）精確状態維持のための命令状態追跡、（１０）精確状態を維持しながらのプロセッサスループット改善のための構造および方法、を限定せずに含む。他の構造機能および能力は下記の開示および添付の図面と請求の範囲で説明される。
【００２９】
前記問題は、本発明の方法および構造の一側面によって解決されるが、これは、発行時に各命令に独自の識別タグを割り当て、そのタグを最初のアクティブな命令データ構造で記憶場所に関連させ、各命令の命令アクティビティ状態の変化に対応して記憶場所に記憶されたデータを更新し、命令アクティビティ状態に対応して移動する記憶場所に複数のポインタを維持することによって、精確状態の追跡と維持を行うものである。状態情報には、命令発行時に設定され、エラーなしに実行が完了するとクリアされる１つのアクティブビットが含まれる。最後に発行された命令を指すポインタ（発行した命令のポインタ）、エラーなしに完了し、順序的に早い命令すべてがエラーなしに完了した命令を指すポインタ（最後にコミットした命令のポインタ）、割り当てられたプロセッサリソースを取り戻した最後の命令（取り戻した命令のポインタ）が設定される。これら３つのポインタは、データ構造の１つの命令に関連する各場所のアクティブビットの比較および所定の規則に基づいて、データ構造に沿って後に発行された命令に向かって前進する。命令の例外またはエラー条件は、アクティブビットの変更を妨げるので、ポインタの移動が制御され、これら条件下で妨げられる。
【００３０】
前記問題は、本発明の方法および構造の別の側面によって解決されるが、これは、ロード／ストア命令を含む、外部メモリ参照命令などの長待ち時間命令を、投機的順序無視実行プロセッサの短待ち時間命令の前に追跡および積極的にスケジューリングしながら、メモリ参照命令を他の命令と区別し、どの命令の予測が終わって投機的結果を有するかを識別し、投機的分岐誤予測や実行例外の懸念なしに実行可能な実行命令を参照するメモリのみスケジューリングすることによって、精確状態を維持する。このようにスケジューリングできる命令は、発行時に各命令に独自の識別タグを割り当て、そのタグをデータ構造の記憶場所に関連させ、各命令の命令アクティビティ状態の変化に対応してデータ構造の記憶場所に記憶されたデータを更新し、命令アクティビティ状態に対応して移動する記憶場所に複数のポインタを維持することによって、追跡する。状態情報には、命令発行時に設定され、エラーなしに実行が完了するとクリアされる１つのアクティブ命令インジケータが含まれる。最後に発行された命令、エラーなしに完了し、順序的に早い命令すべてがエラーなしに完了した命令（最後にコミットした命令）、割り当てられたプロセッサリソースを取り戻した最後の命令（取り戻した命令）を指すポインタが設定される。さらに、データ構造の第２の記憶場所にタグを関連させ、メモリ参照命令のような長待ち時間命令について命令アクティビティ状態変化に応じて第２記憶場所に記憶されたデータを更新し、長待ち時間（メモリ参照等）命令アクティビティ状態に対応して移動する記憶場所に複数のポインタを維持する。状態情報には、長待ち時間命令が発行された時点でクリアされるが、他の命令タイプすべてについて設定され、命令実行がエラーなしに完了した時にクリアされる長待ち時間命令タイプが含まれる。最も早く予測された分岐命令を指す第１ポインタ（予測分岐ポインタ）がデータ構造に設定される。エラーなしに完了し、順序的に前のすべての命令がエラーなしに完了し、アクティブな長待ち時間命令を越えて前進する最後の命令を指す第２ポインタが設定される。発行、コミット、リタイア、予測された分岐と、長待ち時間ポインタは、各場所のアクティブビットとメモリビットの比較および所定の規則に基づき、第１および第２環状データ構造に沿って後に発行された命令に向かって前進する。例外または命令のエラー条件は、アクティブビットとメモリビットの変更を妨げるため、これら条件下ではポインタの移動は妨げられる。１以上のデータ構造を設けてアクティビティ状態と命令タイプデータを記憶することができ、インジケータはデータ構造に記憶されるセットまたはクリアされたビットでもよい。
【００３１】
前記問題は、本発明の方法および構造の別の側面によって解決されるが、これは、分岐命令や、プログラムカウンタ不連続性を作ったり、制御レジスタ値を修正する副作用のある命令を含む命令タイプの所定セットにのみにチェックポイントを作成し、プログラムカウンタの不連続性を作る各命令にチェックポイントを作成するか、プロセッサを同期させて状態を修正することのある命令を順序通りに実行して、プロセッサを例外から回復するための手段および方法を提供することで、投機的順序無視実行プロセッサの命令境界で精確なマシン状態を回復する方法を提供する。例外条件からの回復には、実行例外が発生した時の命令一連番号、またはサイクル中に１つ以上の実行例外が発生した時の最も早い命令一連番号の決定および記憶と、実行例外後に最も近い前回チェックポイントした命令にプロセッサをバックアップし、チェックポイントが現在発行されている命令と不正命令との間にある場合、チェックポイントした情報からプロセッサ状態を回復し、レジスタリソースを更新し、チェックポイントした命令があれば、ここから最も早い不正命令の直前のポイントまでのバックステップ量でプロセッサのプログラムカウンタをデクリメントすることによるプロセッサのバックステップが含まれる。今後の改良では、従来のチェックポインティングに必要な多量の記憶装置は、レジスタデータそのものではなく、ロジカルおよびフィジカルレジスタリネームマップをチェックポインティングすることによって減少する。
【００３２】
前記問題は、本発明の方法および構造の別の側面によって解決されるが、これは、プロセッサにチェックポインティング命令を設けてチェックポイントした状態を減らす一方、命令の発行および実行前にＣＰＵで実行された時アーキテクチュラル状態を修正するような命令を予め識別し、特定の命令のチェックポイントに必要な状態記憶量と典型的命令ストリームで命令が発生する頻度を含む所定の選択基準に基づき、実行前に特定の命令のアーキテクチュラル状態をチェックポインティングすることなしに特別実行モードで実行するため識別された命令の内の１つを予め選ぶことによって、プロセッサの精確状態を維持する。そして、チェックポイントは識別した命令についてのみ形成し、状態を修正するような他の命令はチェックポイントせず、特別な同期モードで実行し、例外が発生した時に、実行結果をプロセッサ状態に書き戻す前にその例外に対処できるようにする。本発明の方法および構造の１実施例では、この基準は、修正可能な状態の種類と、実行中に命令によって修正されることのある修正可能状態の量からなり、おそらくは所定の名目命令ストリームで命令の発生する頻度が含まれる。低推定統計頻度を持って現れ、比較的大きなチェックポイント記憶量の必要な命令を同期モードの実行に選択し、チェックポイントしないことが有利である。本発明の構造および方法の１実施例では、プロセッサの同期においては、実行前に命令ストリームでのマシン同期を必要とする同期命令として命令を識別し、未解決の発行済み命令をすべてコミットし、リタイアして、エラーなしに実行を完了して実行結果を状態に書き戻すまで同期命令実行を遅延させ、マシン同期の必要とする各命令を逐次順序通り実行し、状態へのライトバック前に各同期命令実行から生じる例外条件を識別し、同期命令実行中に生じることのある例外条件に対処し、その後にのみ実行結果をマシン状態に書き戻すようにして、精確状態を同期命令のチェックポインティングなしに維持できるようにする。
【００３３】
前記問題は、本発明の方法および構造の別の側面によって解決されるが、これは、デコードした命令属性にのみ基づいて現在のプロセッサ状態を記憶するためのチェックポイントを形成するのではなく、発行した命令数、経過したクロックサイクル数、および最後にチェックポイントを形成してからの間隔に基づいてチェックポイントを形成する。本発明のチェックポインティングに基づくタイムアウト条件ベースのチェックポインティングは、命令の最大数をチェックポイント境界以内に限定するため、例外条件からの回復期間を抑制する。命令ウィンドウのサイズがチェックポイント境界内の命令最大数より大きい限り、例外発生時、プロセッサは命令デコードベースのチェックポイント技術より早くチェックポイントした状態を復旧することができ、プロセッサの命令ウィンドウサイズへの状態回復依存をなくす。本発明のタイムアウトチェックポイント形成は、従来のチェックポイントを実行する構造および方法、または本発明のロジカルおよびフィジカルなレジスタリネームマップチェックポインティング技術に用いることができる。本発明のタイムアウトチェックポイント形成構造および方法は、従来のプロセッサバックアップ技術、およびプロセッサバックアップとバックステッピングを含む本発明のバックトラッキング技術と共に用いることができる。
【００３４】
前記問題は、本発明の構造および方法の別の側面によって解決されるが、これは、発行ユニット、実行手段、浮動小数点例外ユニット、精確状態ユニット、浮動小数点状態レジスタおよび書き込み手段からなるプログラム制御順序無視実行データプロセッサを提供する。発行ユニットは実行のプログラム制御順序で命令を発行する。発行された命令には浮動小数点命令と非浮動小数点命令が含まれる。実行手段は、少なくとも浮動小数点命令が実行手段によってプログラム制御順序を無視して実行されるよう、発行された命令を実行する。浮動小数点実行ユニットには、記憶要素をはじめとするデータ記憶構造が含まれる。発行された各命令は記憶要素の１つに対応する。各記憶要素は、浮動小数点命令識別フィールドと、浮動小数点トラップタイプフィールドを有する。浮動小数点例外ユニットにも、対応する記憶要素の浮動小数点命令識別フィールドに、発行された各命令に関してデータを書き込み、対応する発行済み命令が浮動小数点命令か否かを示すための第１ロジックが含まれる。これはさらに、実行中に１つ以上の浮動小数点実行例外を生じて、浮動小数点実行トラップの予め定義された複数の種類の対応する１つとなる発行済み浮動小数点命令について、対応する記憶要素の浮動小数点トラップタイプフィールドにデータを書き込み、結果として生じる浮動小数点実行トラップの予め定義された種類の１つを識別する第２のロジックが含まれる。精確状態手段は、実行中に実行例外を生じず、プログラム制御順序でこれに先行するすべての発行済み命令がリタイアした発行済み命令をそれぞれリタイアする。予め定義した実行例外の最初の１つが発行済み命令によって生じた時、実行手段は発行済み命令の実行を継続し、精確状態手段は、リタイアできない発行済み命令に遭遇するまで発行済み命令のリタイアを継続することによって実行トラップの順序付けを行う。リタイアできない発行済み命令は、（ａ）第１の実行例外を生じさせた発行済み命令、および（ｂ）第１の実行例外を生じさせた発行済み命令より早く発行されたが、第２の実行例外を第１の実行例外より遅く発生させた発行済み命令の１つである。浮動小数点状態レジスタは浮動小数点トラップタイプフィールドを有する。書き込み手段は、浮動小数点状態レジスタの浮動小数点トラップタイプフィールドにデータを書き込み、リタイアできない命令に対応する記憶要素の浮動小数点識別フィールドのデータが、リタイアできない命令が浮動小数点命令であることを示す時、リタイアできない命令に対応する記憶要素の浮動小数点トラップタイプフィールドのデータによって、浮動小数点実行トラップの種類を識別する。
【００３５】
前記問題は、本発明の構造および方法の別の側面によって解決されるが、これは、投機的にトラップを取り、トラップから戻るためのデータプロセッサと関連する方法を提供する。データプロセッサは、それぞれ対応するトラップレベルを有する入れ子トラップを取るため所定の数のトラップレベルをサポートする。データプロセッサは、チェックポイント形成手段、チェックポイントへのバックアップ手段、トラップを取る手段、トラップから戻る手段、レジスタおよびトラップスタックユニットからなる。レジスタは、トラップを取る度にデータプロセッサの状態を定義する内容を持つ。トラップスタックユニットは、トラップレベルより数の多いトラップスタック記憶記述項を有するトラップスタックデータ記憶構造を含む。また、トラップレベルの１つに現在マッピングできるトラップスタック記憶記述項の現在利用可能リストを保持するフリーリストユニットを含む。フリーリストユニットは、トラップを取る度に、対応するトラップレベルの１つに現在マッピング可能な次のトラップスタック記憶記述項を識別する。トラップスタックユニットはさらに、トラップを取る度に、現在利用可能なトラップスタック記憶記述項の次の１つにレジスタの内容を書き込む読み取り／書き込みロジックを含む。さらにまた、トラップスタック記憶記述項の１つに各トラップレベルの現在のマッピングを保持するリネームマッピングロジックを含む。リネームマッピングロジックは、トラップを取る度に、トラップスタック記憶記述項の１つへの対応するトラップレベルの古いマッピングを、現在利用可能なトラップスタック記憶記述項の次のものへの対応するトラップレベルの現在のマッピングに置き換える。トラップスタックユニットはまた、現在のマッピングによってトラップレベルの１つに現在マッピングされていないが、トラップレベルの１つにマッピングできないトラップスタック記憶記述項の利用不可リストを保持するリソースリクレームユニットも含む。リソースリクレームユニットは、トラップを取る度に、古いマッピングによって対応するトラップレベルにマッピングされたトラップスタック記憶記述項を利用不可リストに加え、取ったトラップを元通りにできなくなる度に、古いマッピングによって対応するトラップレベルにマッピングされたトラップスタック記憶記述項を利用不可リストから取り除く。フリーリストユニットは、利用不可リストから取り除かれたトラップスタック記憶記述項を、現在利用可能リストに加える。最後に、トラップスタックユニットは、チェックポイント記憶記述項を含むチェックポイント記憶ユニットを含む。形成された各チェックポイントは、対応するチェックポイント記憶記述項を有し、形成された各チェックポイントについて、チェックポイント記憶ユニットがリネームマッピングロジックの現在のマッピングとフリーリストユニットの現在利用可能リストを、対応するチェックポイント記憶記述項に記憶できるようにする。チェックポイントへのバックアップの度に、リネームマッピングロジックは、現在同ロジックが保持するマッピングを、対応するチェックポイント記憶記述項に記憶されたマッピングに置き換え、フリーリストユニットは、現在同ユニットが保持する利用可能リストを、対応するチェックポイント記憶記述項に記憶された利用可能リストに置き換える。
【００３６】
前記問題は、本発明の別の側面によって解決されるが、これは、複数の投機的発行・予測された命令の実行結果を同時にモニターするためのデータプロセッサおよび関連する方法を提供する。本発明の構造および方法は、プロセッサ内の１つ以上の実行ユニットからの実行結果信号を受信するため連結されたウォッチポイントデータを記憶するための複数のウォッチポイントレジスタを有するウォッチポイントユニットを提供する。投機的に発行・予測された命令の予測された条件データ結果を含むウォッチポイントデータを記憶するウォッチポイントレジスタは、命令が発行される時に割り当てられる。予測された条件データ結果は、投機的に発行された命令の制御フロー転送方向が決まる条件の予測値と、投機的に発行・予測された命令が投機的に発行されたベースを識別する。ウォッチポイントユニットは、実行ユニットからデータフォワードバスで転送される投機的に発行・予測された命令の実行結果信号をモニターし、記憶されたウォッチポイントデータと、実際の既知条件データ結果信号を初めとする実行結果信号および、実際の条件コードが予測された条件コードと一致するか否かを決定する所定の規則に基づき、所定の事象の発生を検出する。投機的に発行・予測された命令の１つについてウォッチポイントレジスタに記憶されたウォッチポイントデータを、投機的に発行された命令に関連するデータフォワードバスで到着した結果信号と比較し、信号が一致するか一致しないかを決定する。一致は、投機的に発行・予測された命令が正しく予測されたことを示し、不一致は、投機的に発行・予測された命令が誤予測だったことを示す。誤予測が識別されると、プロセッサは初期状態に戻り、誤予測に基づいて実行された命令を元通りにする。本発明の側面は、複数の実行ユニットと、複数の予測された分岐またはジャンプ・アンド・リンク命令を初めとする複数の投機的に発行された命令を同時にモニターする能力を含む、実行ユニットからの条件コードデータを同時につかむ構造および方法；実行ユニットからのデータフォワードバスを同時にウォッチすることで、予測された分岐またはジャンプ・アンド・リンクが待っている複数の条件コードデータまたは計算されたジャンプアンド・リンクアドレスをグラブする構造および方法；分岐またはジャンプ・アンド・リンク命令の複数の誤予測信号を同時に生成する構造および方法；１つの共有記憶領域に別の分岐アドレスまたは予測されたジャンプ・アンド・リンクアドレスを記憶する構造および方法；および条件コードタグ比較とグラビングのタスクを分けることで、クリティカルパスをスピードアップするための構造および方法を提供する。本発明の構造および方法の１実施例では、これら複数の側面を有利に組み合わせて全体的なプロセッサ性能を向上させる。
【発明を実施するための最良の形態】
【００３７】
実施例の説明
図４は、データプロセッサ５０のトップレベル機能ブロック図である。データプロセッサは、新規の順序無視投機的実行（スーパスカラ）中央処理装置（ＣＰＵ）５１を含む。例示ＣＰＵは、SPARC-V9 Architecture Manualに記載されたSPARC-V9命令セットを実行可能である。D.WeaverおよびT.Germond による「The SPARC Architecture Manual 」、Version 9 、Englewood Cliffs  （１９９４年）は、参照により本書に明示的に組み込む。但し、当業者は、本書に記載する新規設計および方法がSPARC-V9アーキテクチャに限定されないことを認識するであろう。
【００３８】
実際、ＣＰＵ５１は、すべてのデータプロセッサに該当する精確マシン状態を維持しながら、スループットを上げる新規設計および方法を採用している。特に、これは（１）プロセッサリソースおよび状態をモニターし、回復する命令をトラッキングするための新規設計及び方法；（２）ロード／ストア命令などの長待ち時間命令を積極的にスケジューリングするための新規設計および方法；（３）マシン状態をチェックポインティングするための新規設計および方法；（４）例外または誤予測検出後にマシン状態を回復するための新規設計および方法を採用している。
【００３９】
本明細書の実施例の説明セクションの概略を便宜上ここに示す。本明細書の見出しは便宜的参照のためにのみ示すもので、本セクションの開示の適用可能性を本発明の特定の側面または実施例に限定すると解釈してはならない。
【００４０】
I.  ＣＰＵオペレーション概要
II．命令トラッキング
Ａ．命令フェッチ
Ｂ．命令発行
１．命令発行概要
２．命令シリアル番号割り当てと命令状態記憶
ａ．命令発行−コミット−リクレームユニット（ＩＣＲＵ）
ｂ．命令発行関連ポインタおよび発行段階中のポインタ維持
３．レジスタリネーミング
４．リザベーションステーションへのディスパッチ
Ｃ．命令実行および完了
Ｄ．命令実行段階へのＰＳＵ参加
Ｅ．命令コミットメント
Ｆ．命令リタイアおよびリソース回復
１．命令コミットおよびリタイア時のＲＲＦへの更新とマップリネーム
２．命令リタイア時のＲＲＦ読み取り
３．ポインタを使った精細状態維持
III ．積極的長待ち時間（ロード／ストア）命令スケジューリング
Ａ．メモリ命令状態情報記憶
Ｂ．長待ち時間情報のトラッキングおよびスケジューリングのためのＮＭＣＳＮおよびＰＢＳＮポインタ
Ｃ．ＮＭＣＳＮ前進Ｄ．データフローブロック内のロード−ストアユニット（ＬＳＵ）
１．インレンジメモリ参照（長待ち時間）命令の識別
２．積極的長待ち時間（ロード／ストア）命令スケジューリングのための基本的構造および方法強化
IV．チェックポインティング
Ａ．チェックポイント割り当てレジスタの構造
Ｂ．チェックポイント割り当て
Ｃ．チェックポイントリタイア
Ｄ．マシンバックアップでのチェックポイント維持
Ｅ．タイムアウトチェックポイント強化
Ｆ．あらゆる命令境界での精細状態維持と回復
Ｇ．チェックポイントされたデータ量を減らすため所定の命令についてマシンを同期させる方法
Ｈ．チェックポイントされたデータ量を減らすためレジスタリネームマップをチェックポインティングする方法
V.  誤予測および例外からの回復
Ａ．同時複数未解決分岐／ジャンプ・アンド・リンク命令評価のためのウォッチポイントによる誤予測検出
１．ウォッチポイント要素の起動
２．データフォワードバスから直接ＣＣデータのウォッチポイントグラビング
３．ウォッチポイントオペレーションの例
４．分岐命令の評価
５．ジャンプ−リンク（ＪＭＰＬ）命令の評価
Ｂ．例外検出
１．発行トラップ検出
２．実行トラップ検出
Ｃ．プロセッサを初期状態にバックトラックすることによる回復
１．チェックポイント境界へのプロセッサバックアップ
２．誤予測された命令、ＲＥＤモード、および実行トラップ開始バックアップ
３．あらゆる命令境界へのプロセッサバックステップ
Ｄ．例外＆誤予測回復中のプライオリティロジックおよび状態マシンオペレーション
Ｅ．トラップスタックによるトラップの取扱
【００４１】
I ．ＣＰＵオペレーション概要
ＣＰＵ５１は、レベル１（Ｌ１）命令キャッシュ５２から命令をフェッチし、レベル１（Ｌ１）データキャッシュ５３にデータを記憶し、ここからデータを取り出す。Ｌ１命令およびデータキャッシュは、ＣＰＵ５１と同じチップ／基板に物理的に配置することもできるが、異なるチップ／基板に組み立てることもできる。
【００４２】
ＣＰＵはまた、メモリ管理制御ユニット（ＭＭＵ）５４とインタラクトして、データプロセッサ５０の全体状態を決定する。特に、ＭＭＵは外部メモリ５６から命令を取り出し、外部メモリ５６にデータを記憶し、ここからデータを取り出し、外部Ｉ／Ｏデバイス５７からデータを受取り、ここへデータを出力し、外部診断プロセッサ５８、ＣＰＵ５１、キャッシュ５２および５３に診断情報を提供し、ここから診断情報を受取り、データアドレス翻訳を実行し、メモリ状態情報を記憶・追跡する。
【００４３】
図５は、予測されたプログラム制御命令、固定および浮動小数点命令、およびロード／ストア命令を含む一部の典型的な命令タイプに関する、ＣＰＵ５１の新規命令パイプラインの段階（および関連するマシンサイクル）を示す。このパイプラインを実行するため、図４に示すように、ＣＰＵ５１は分岐ブロック（ＢＲＢ）５９、発行ブロック（ＩＳＢ）６１およびデータフローブロック（ＤＦＢ）６２を含む。
【００４４】
図４および図５を参照すると、ＢＲＢ５９はフェッチ段階中に命令をフェッチし、これらの命令をＩＳＢ６１に与える。ＢＲＢ５９は、プログラム制御命令の各種タイプについて、ターゲットアドレス予測と分岐取得・不取得予測を行う。そのため、これはフェッチ段階中に投機的に命令をフェッチすることができる。
【００４５】
ＩＳＢ６１は、命令が投機的にフェッチされた可能性があるため、発行段階中に予測されたプログラムカウンタ（ＰＣ）順でフェッチされた命令を発行する。これはまた、予め定義された間隔に当たる命令と、ＢＲＢ５９が予測を行ったプログラム制御命令を含む予め定義された種類の発行された命令について、発行段階中にＣＰＵ５１のマシン状態のチェックポイントを形成する。
【００４６】
ＢＲＢ５９は、ＩＳＢ６１による発行と同じ段階で、ｎｏｐと予測されたプログラム制御命令を実行、完了する。但し、ＤＦＢ６２は、必要なリソースが利用可能になり次第、発行された固定小数点および浮動小数点命令を実行、完了する。さらに、ＤＦＢ６２は、必要なリソースが利用可能になった時、実行・完了した時点で例外（例：発行トラップ、実行トラップまたは割り込み）やプログラム制御誤予測の場合に元通りにする必要のないやり方で、発行されたロード／ストア命令を実行のために積極的にスケジューリングする。そのため、一部の固定小数点、浮動小数点、およびロード／ストア命令の発行段階が他のものより早くても、必要なリソースはまだ利用可能になっていないため、実行および完了段階が後になる。さらに、これらはＢＲＢ５９による初期のプログラム制御予測に基づき、ＢＲＢ５９が投機的にフェッチした可能性があるため、投機的に実行および完了されたかもしれない。言い換えると、ＤＦＢ６２に発行された命令は、予測されたＰＣ順序を無視して実行・完了されることがある。
【００４７】
命令がエラー発生（例：発行トラップ、実行トラップまたは誤予測）なしに完了すると、非起動段階でＩＳＢ６１によって非起動にされる。命令は予測されたＰＣ順序を無視して完了することがあるので、誤予測のＰＣ順序を無視して非起動とされることがある。
【００４８】
そこで、非起動命令は、コミット段階に実際のＰＣ順でＩＳＢ６１によってコミットされる。非起動の命令は、先行する発行済み命令をすべてコミットしていなければコミットされないので、真である。その結果、命令がコミットされると、例外または誤予測の場合、元通りにできない。これはすなわち、この点までの実際のＰＣ順序が正しく、命令は実際のＰＣ順でコミットされたことを意味する。さらに、チェックポイントを形成した命令をコミットすると、先行のチェックポイントをリタイアすることができる。
【００４９】
命令をコミットすると、リタイア段階に実際のＰＣ順でＩＳＢ６１によってリタイアされる。命令リタイア後、それに割り当てられたリソースはリクレームされ、他の命令が発行された時にそれらに再割り当てすることができる。
【００５０】
ＩＳＢ６１は、パイプライン中のあるポイントで発生する実行またはプログラム制御の誤予測からの回復を行う。そのため、プログラム制御誤予測が発生すると、ＩＳＢ６１は、不正プログラム制御命令が発行された時、形成したチェックポイントにＣＰＵ５１をバックアップする。同様に、実行トラップが発生すると、ＩＳＢ６１はまず、不正命令発行後にチェックポイントが形成されていれば、最も早いチェックポイントにＣＰＵ５１をバックアップし、および／または不正命令にＣＰＵ５１をバックステップする。チェックポイントへのバックアップおよび／またはバックステップにおいて、ＣＰＵ５１は、不正命令の発行および実行直前に存在した正しいマシン状態に戻る。
【００５１】
ＩＳＢ６１が、プログラム制御誤予測を生じさせた不正命令にバックアップされていると、ＢＲＢ５９は、正しいプログラムカウンタ値と正しいマシン状態で命令のフェッチを始める。しかし、ＩＳＢ６１が実行トラップを生じた命令にバックアップされているか、および／またはバックステップされていると、ＢＲＢ５９に、適切なトラップ取扱ルーチンのターゲットプログラムカウンタ値が与えられる。そこで、トラップ取扱ルーチンはトラップを処理し、不正命令のプログラムカウンタ値を戻すか、次の命令をフェッチするためＢＲＢ５９に次のプログラムカウンタ値を戻す。不正命令のプログラムカウンタは、トラップ取扱ルーチンがＣＰＵ５１に不正命令をフェッチし、その発行と実行を再試行するよう命じると、戻される。しかし、トラップ取扱ルーチンがＣＰＵ５１に不正命令後に次の命令をフェッチして、不正命令の発行と実行をスキップするよう命じると、次の不正命令のプログラムカウンタが戻される。
【００５２】
II．命令トラッキング
前に言及したように、ＣＰＵ５１は、ＣＰＵ５１の命令パイプラインに命令トラッキングのための新規設計および方法を採用している。パイプラインは、この設計および方法を実施するため、図５に示し、前に簡単に述べたように、フェッチ、発行、実行、完了、非起動、コミットおよびリタイアの段階を含む。
【００５３】
Ａ．命令フェッチ
再び図４を参照すると、ＢＲＢ５９はフェッチ段階中に命令をフェッチし、これらをＩＳＢ６１に与える。図６に示すように、ＢＲＢ５９は、命令プリフェッチおよびキャッシュユニット（ＩＰＣＵ）１００とフェッチユニット１０２を含む。
【００５４】
ＩＰＣＵ１００は、レベル１（Ｌ１）命令キャッシュ５２から１度に４個の命令（ＩＮＳＴｓ）を取り出すことができる。取り出された命令は、ＩＰＣＵ１００の命令レコーダによって、ＢＲＢ５９、ＩＳＢ６１およびＤＢＦ６２の利用により適したフォーマットにレコードされる。別の実施例では、ＩＰＣＵ１００は、１度に４個より多いか少ない命令を取り出して実施することもできる。
【００５５】
フェッチユニット１０２は、フェッチプログラムカウンタ（ＦＰＣ）値、アーキテクチュラルプログラムカウンタ（ＡＰＣ）値、および次のアーキテクチュラルプログラムカウンタ（ＮＡＰＣ）値を計算するプログラムカウンタ（ＰＣ）ロジック１０６を含む。各マシンサイクルで計算されたＦＰＣ、ＡＰＣおよびＮＡＰＣの値はそれぞれ、ＰＣロジックのＦＰＣ、ＡＰＣおよびＮＡＰＣレジスタ１１２から１１４に記憶される。ＦＰＣレジスタの現在のＦＰＣ値は、現在のマシンサイクルでフェッチされている命令を指すが、ＡＰＣおよびＮＡＰＣレジスタ１１３および１１４の現在のＡＰＣおよびＮＡＰＣ値は、現在のマシンサイクルでＩＳＢが発行可能な最初の命令と、前回のマシンサイクルでフェッチされた次の命令を指す。
【００５６】
ＦＰＣ値に対応して、１度に４個の命令（Ｆ ＩＮＳＴｓ）がＩＰＣＵ１００によってフェッチされる。別の実施例では、１度に４個より多いか少ない命令をフェッチするよう実施することができる。
【００５７】
各ＦＰＣ値について、分岐履歴表１０４には、ＦＰＣ値でフェッチした各命令の分岐予測フィールド（ＢＲＰ）が含まれる。そのため、ＢＲＰフィールドはそれぞれＦＰＣ値でフェッチした命令の内の１つに対応する。フェッチした命令のいずれかが、SPARC-V9ＢＰｃｃ、Ｂｉｃｃ、ＢＰｒ、ＦＢｆｃｃおよびＦＢＰｆｃｃ命令など条件付き分岐命令である場合、これらの対応するＢＲＰフィールドは、分岐を、分岐命令のこの後の発行、実行および完了段階で予測すべきか否かを識別する。分岐履歴表１０４は、ＦＰＣ値に対応してフェッチした命令にＢＲＰフィールドを出力する。そこでＢＲＰフィールドは、フェッチユニット１０２によってフェッチした対応する命令（Ｆ ＩＮＳＴｓ）に追加され、フェッチ回転レジスタ１１０が受け取る合成命令を与える。
【００５８】
フェッチレジスタには、１度に４個の命令を保持するため４個のラッチがある。このラッチは、予測されたＰＣ順で、ＩＳＵ２００が発行できる次の４個の命令の入った４個のスロット（０−３）を有する発行ウィンドウを定義する。但し、前回のマシン中にフェッチレジスタの保持した命令の一部は、これから説明するような発行上の制約のため、ＩＳＵ２００が発行していないことがある。フェッチされた命令が予測されたＰＣ順で発行されるようにするため、ＩＳＵ２００はフェッチレジスタ制御（ＦＣＨ ＲＥＧ ＣＮＴＲＬ）信号を生成するが、この信号は、最後のマシンサイクルで発行されなかった命令を該当するラッチに入れるようフェッチレジスタを制御することで、発行ウィンドウ内で予測されたＰＣ順にし、ＩＳＵ２００が予測されたＰＣ順で発行できるようにする。さらに、ＦＣＨ ＲＥＧ ＣＮＴＲＬ信号に対応して、フェッチレジスタは残りのラッチに、予測されたＰＣ順で次に来るフェッチしたばかりの命令を入れる。
【００５９】
別の実施例では、フェッチレジスタは、１度に４個より多いか少ない命令を記憶するよう実施できる。さらに、例示ＣＰＵ５１ではフェッチユニット１０２に１個のフェッチレジスタとして説明したが、今説明した種類のフェッチレジスタは、デコードを実行するＣＰＵの各ブロックに使うことができる。そして、フェッチレジスタをこれらブロックに設置して、デコードした命令をフェッチレジスタに記憶する前、フェッチサイクル中に初期デコードを行い、残りのデコードを発行段階に行うようにすることができる。
【００６０】
Ｂ．命令発行
１．命令発行概観
ＩＳＢ６１は、各発行段階中にフェッチした命令を発行する。図７に示すように、ＩＳＢ６１は、発行ユニット（ＩＳＵ）２００、精細状態ユニット（ＰＳＵ）３００、フリーリストユニット７００、および制御レジスタファイル８００を含む。各発行段階中、ＩＳＵ２００は、ＢＲＢ５９のフェッチレジスタ１１０から、一度に４個の命令（Ｆ ＩＮＳＴｓ ＢＲＰ）を受け取る。そして、これらをデコードして、その内いくつを発行するかを、次に説明するような各種発行上の制約に基づいて決定する。
【００６１】
フェッチレジスタ１１０は、各発行段階中、ＩＳＵ２００に一度に４個の命令を与えるため、ＩＳＵ２００は各発行段階中、最大４個の命令を発行することができる。しかし、各発行段階の発行ウィンドウで予測されたＰＣ順で４個の命令を発行することしかできない。そのため、他の発行上の制約から、現在の発行ウィンドウで命令の内の１つが発行できない場合、この命令の前の発行ウィンドウスロットの命令しか、現在の発行段階では発行できない。別の実施例では、フェッチレジスタ１１０は、１つの発行段階あたり４個より多いか少ない命令をＩＳＵ２００に与えるよう構築されているため、ＩＳＵ２００は、１つの発行段階あたり４個より多いか少ない命令を発行するよう構築することができる。図８を参照すると、ＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２およびＬＳＵ６０３は、発行された命令について、これらにディスパッチされた命令データを記憶するためのリザベーションステーションあるいは待ち行列を有する。但し、発行段階中、リザベーションステーションの一部は、ディスパッチされた命令データを記憶できるだけの記憶要素または記述項を持たないことがある。そのため、ＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２およびＬＳＵ６０３は、それぞれＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２およびＬＳＵ６０３のリザベーションステーションに、ディスパッチされた命令データを受け取ることのできる記述項がいくつあるかを示すＥＮＴＲＩＥＳ ＡＶＡＩＬ信号を出力する。その結果、ＩＳＵ２００は、ＥＮＴＲＩＥＳ ＡＶＡＩＬ信号で示された利用可能な記述項の数に基づき、浮動小数点、固定小数点、およびロード・ストア命令を発行する。
【００６２】
さらに、例示ＣＰＵ５１では、ＦＸＵ６０１が、固定小数点計算に関わるプログラム制御、乗算／除算、および制御レジスタ読み取り／書き込み命令を実行するＤＦＢ６２の唯一の実行ユニットである。そのため、この場合、ＩＳＵ２００はＦＸＵ６０１による実行のためこれらの種類の命令を発行する。別の実施例では、ＦＸＡＧＵ６０２も、固定小数点データに関わるプログラム制御、乗算／除算、および制御レジスタ読み取り／書き込み命令を実行するよう構成することができる。この場合、ＩＳＵ２００も、ＦＸＡＧＵ６０２による実行のためこれらの種類の命令を発行することになる。さらに、実行ユニット６００から６０３はそれぞれ１以上の機能ユニットからなり、各機能ユニットは発行された命令を実行することができる。そのため、発行することのできる命令の数は、各実行ユニット内の機能ユニットの数で決まる。
【００６３】
図７を参照すると、ＰＳＵ３００は、ＩＳＵ２００による命令発行に発行上の制約を課すこともできる。ＰＳＵ３００はＩＳＳＵＥ ＫＩＬＬ信号を出力することができ、これは、フェッチレジスタ１１０から受け取った命令の内どれを現在の発行段階中に発行してはならないかを識別するものである。後により詳しく説明するように、例外検出後か、次に説明する同期命令の実行、完了、非起動およびリタイア中に、ＰＳＵ３００が不正命令にバックアップまたはバックステップしている時、ＩＳＳＵＥ ＫＩＬＬ信号がアサートされる。
【００６４】
特定の種類の命令については、ＩＳＵ２００は、これら同期命令の内１つを発行する前に、ＣＰＵ５１が同期されることを確かめる。ＣＰＵ５１は、特定の命令に先行するすべての命令が発行、実行、完了、非起動およびリタイアした時、その命令について同期する。そのため、ＩＳＵ２００がフェッチレジスタ１１０から受け取った命令の内１つが同期命令であると決定すると、その前の発行ウィンドウスロットにある命令を発行し、ＣＰＵ５１が同期したことを示すＭＡＣＨＩＮＥ ＳＹＮＣ信号をＰＳＵ３００から受け取るまで待つ。これが発生すると、命令は最も早いＰＣ値（すなわちスロット０）で命令の発行ウィンドウのスロットに入り、ＩＳＵ２００はただそれを発行する。例示ＣＰＵ５１は、特定の命令種類について、前に説明したマシン状態同期方法を実施するが、別の技術では、コミットした命令は非投機的であることが保証されるため、前回の命令のコミット後に同期命令の発行ができる。
【００６５】
ＩＳＵ２００はまた、SPARC-V9 Architecture Manualに説明するような、命令の発行に影響する発行トラップを検出する。ＩＳＵ２００は、制御レジスタファイル８００からレジスタ（ＣＮＴＲＬ ＲＥＧ）フィールドを受取り、フェッチレジスタ１１０から受け取った命令（Ｆ ＩＮＳＴｓ ＢＲＰｓ）をデコードして、発行段階中に一定の種類の発行トラップが発生したか否かを検出する。SPARC-V9アーキテクチャに基づく実施例では、これはSPARC-V9 Architecture Manualに従って行われる。さらに、他の種類の発行トラップはレジスタ制御を必要とせず、ＩＳＵ２００のデコードした命令操作コードに基づき、取得・検出される。
【００６６】
最も早い発行ウィンドウスロットの命令によって生じた発行トラップのみが取得される。そのため、１以上の発行トラップが検出されると、最早スロットの命令の原因となった発行トラップのスロットより前の発行ウィンドウスロットの命令のみ、ＩＳＵ２００によって発行することができる。さらに、しばしば発生する発行トラップについては、ＣＰＵ５１は、前に述べたような方法で同期し、発行トラップを投機的に取得しないようにする。別の実施例では、発行トラップがスロット０でのみ発生するようＣＰＵ５１を構成して、ロジックを減らし、簡素化することができる。
【００６７】
各発行段階中、ＩＳＵ２００は発行される各命令にシリアル番号を割り当て、これらシリアル番号（ＳＮｓ）をＤＦＢ６２にディスパッチする。後でより詳細に説明するように、ＰＳＵ３００は、割り当てられたシリアル番号を使って発行された命令を記録する。さらに、例示ＣＰＵ５１では、発行されたがまだリタイアしていない命令を一度に所定の数だけ記録することができる。しかし、発行された命令をリタイアすると、それらのシリアル番号が利用可能となる。そのため、ＰＳＵ３００は、現在の発行段階にいくつのシリアル番号が利用できるかを示す信号を含むＳＮ ＡＶＡＩＬ信号と、これら利用可能なシリアル番号を含む信号を、ＩＳＵ２００に与える。現在の発行段階中、ＳＮ ＡＶＡＩＬ信号が、現在利用可能なシリアル番号の数が発行できる命令の数より少ないことを示すと、シリアル番号を割り当てることのできる最も早いスロットの命令だけが実際に発行される。
【００６８】
やはり発行段階中、ＩＳＵ２００は、ある命令についてＣＰＵ５１のマシン状態のチェックポイントを形成すべきか否かを決定する。後でより詳細に説明するように、チェックポイントは一定の種類の命令について、所定の発行段階間隔で形成される。そのため、発行する命令にチェックポイントが必要とＩＳＵ２００が決定し、および／またはＰＳＵ３００が、チェックポイントを形成した最後の発行段階から所定数の発行段階が発生したことをＴＩＭＥＯＵＴ ＣＨＫＰＴ信号によって示すと、ＩＳＵ２００はＤＯ ＣＨＫＰＴ信号を生成し、ＰＳＵ３００、制御レジスタファイル８００、ＢＲＢ５９およびＤＦＢ６２に、ＭＣＰＵ５１のマシン状態のチェックポイントを形成するよう指示する。
【００６９】
さらに、ＩＳＵ２００は、発行した各命令にチェックポイント番号を割り当て、これらチェックポイント番号（ＣＨＫＰＴ Ｎｓ）をＤＦＢ６２にディスパッチする。そして、チェックポイントを形成した各命令に、新しいチェックポイント番号が割り当てられる一方、チェックポイントを形成しない命令には、前のチェックポイントのチェックポイント番号が割り当てられる。ＰＳＵ３００は、割り当てられたチェックポイント番号を使って形成されたチェックポイントを記録する。
【００７０】
割り当てられたシリアル番号同様、ＰＳＵ３００は、形成されたがリタイアしていないチェックポイントを一度に所定の数だけ記録する。但し、チェックポイントがリタイアされると、チェックポイント番号が利用可能になるため、ＰＳＵ３００は、現在の発行段階にいくつのチェックポイント番号が利用できるかを示す信号を含むＣＨＫＰＴ ＡＶＡＩＬ信号と、利用可能なチェックポイント番号を含む信号を、ＩＳＵ２００に与える。そのため、ＣＨＫＰＴ ＡＶＡＩＬ信号が、現在利用可能な新しいチェックポイントの数が新しいチェックポイントを形成しなければならない命令数より少ないことを示すと、新しいチェックポイント番号を割り当てることのできる最も早い発行ウィンドウスロットの命令だけが実際に発行される。
【００７１】
さらに、ＣＰＵ５１は、１つの発行段階につき所定の数のチェックポイントを形成するようにのみ構成することができる。そのため、たとえばＣＰＵ５１が１つの発行段階につき１つしかチェックポイントを形成できず、チェックポイントを形成する必要のある発行ウィンドウに２個の命令がある場合、ＩＳＵ２００は、現在の発行段階中、最も早いスロットにある命令のみ発行し、別の発行段階の他の命令を発行する。
【００７２】
後で説明するように、ＣＰＵ５１は、プロセッサのスループットを上げるためレジスタリネーミングを採用している。レジスタリネーミングを正しく実施するため、ＩＳＵ２００はレジスタリネーミングフリーリストユニット（ＦＲＥＥＬＩＳＴ）からＲＥＧＳ ＡＶＡＩＬ信号を受け取る。図８を参照すると、これら信号には、固定小数点レジスタファイルおよびリネームユニット（ＦＸＲＦＲＮ）６０４のいくつの物理的固定小数点レジスタをリネーミングに利用できるか、浮動小数点レジスタファイルおよびリネームユニット（ＦＰＲＦＲＮ）６０５のいくつの浮動小数点レジスタをリネーミングに利用できるか、浮動小数点状態および条件コードレジスタファイルおよびリネームユニット（ＦＳＲ／ＣＣＲＦＲＮ）６０６のいくつの物理的整数および浮動小数点条件コードレジスタをリネーミングに利用できるかを示す信号が含まれる。図７を参照すると、フェッチレジスタ１１０から受け取った命令のいずれかがレジスタリネーミングを必要とし、物理的レジスタがリネーミングに必要であるが、ＲＥＧＳ ＡＶＡＩＬ信号によって利用できないことが示されると、ＩＳＵ２００はこれらの命令を発行できない。
【００７３】
前記発行上の制約は、発行決定の概念を例証するため、例示ＣＰＵ５１に関連して説明した。さらに、これまで説明した発行上の制約とは異なるが、本書に説明した発行決定の基本的概念から逸脱しない実施も存在できる。そのため、当業者は、発行上の制約が実施依存であり、本書に説明する発明は、これまで説明した発行上の制約に限定されないことを認識するだろう。
【００７４】
２．命令シリアル番号割り当てと命令状態記憶
例示ＣＰＵ５１は、命令が発行された時点から、命令の実行が完了して究極的にリタイアするまで、命令に関連する独自の識別タグを割り当てる。逐次シリアル番号は、命令識別タグとして便宜上用いられる。シリアル番号は各段階で用いられ、例外または誤予測が発生すると、例外フリー処理中およびＣＰＵ５１回復中に実質的にすべてのブロックが用いる。命令状態情報はＣＰＵ５１に記憶され、実行完了信号、実行エラー信号、および分岐命令誤予測信号等の状態の変化に対応して連続的に更新される。ＩＳＢ６１内の精細状態ユニット（ＰＳＵ）３００が、命令シリアル番号タグの割り当てと、他のＣＰＵ５１ユニット、特にＤＦＢ６２から受け取った信号に対応して命令状態のトラッキングを行う。
【００７５】
図９を参照すると、精細状態ユニット（ＰＳＵ）３００は機能的にＩＳＢ６１内にあり、（１）ＣＰＵ５１での命令の発行、実行、完了およびリタイア状態のトラッキング；（２）分岐誤予測回復の検出と開始；（３）命令シリアル番号、チェックポイント、およびウォッチポイントを含む一定のマシンリソースの利用可能性のトラッキング；および（４）一般例外取扱および制御、を行う。ＰＳＵ３００内のいくつかのユニットは、図９に示し、後により詳細に説明するように、この機能性を達成するため実施される。
【００７６】
ＰＳＵ３００は、発行されたすべての命令について、これらがリタイアされるまでアクティビティ状態情報を維持する発行／コミット／リタイアユニット（ＩＣＲＵ）３０１を含む。ＩＣＲＵ３０１は、ＩＳＵ２００が次の命令発行サイクルで用いる４個までの命令シリアル番号（ＳＮｓ）を識別する信号（ＳＮ ＡＶＡＩＬ）をＩＳＵ２００に与える。ＩＳＵが命令を発行すると、ＩＳＵ２００は、前のサイクルでＩＳＵに与えられた（ＳＮ
ＡＶＡＩＬ）最大４個のシリアル番号のうちどれがＩＳＵによって有効に発行されたかを、前に示したように、どのシリアル番号が割り当てられ、どのシリアル番号が各命令に関連するかを示すＩＳＳＵＥ ＶＡＬＩＤ信号の形でＩＣＲＵに知らせる。発行上の制約によって、ＩＳＵが命令ウィンドウのすべての命令を発行する能力が制約を受けることを思い出してほしい。ＩＣＲＵ３０１は状態情報と状態情報へのアドレスポインタを記憶・維持し、命令の種類にかかわらず、ＩＳＵ２００が有効に発行した各命令の命令発行、実行、完了、非起動、コミット、リタイアフェーズ状態をトラックする。ＩＳＵ２００はまた、発行された命令の内どれがｎｏｐおよび一定のプログラム制御命令に関連し、発行と同じ段階で非起動が可能かを、ＩＳＳＵＥ ＮＯＰ信号でＩＣＲＵ３０１に知らせる。ＩＳＳＵＥ ＮＯＰは、ポーズや遅延を導入するような、命令ストリームに挿入できる特定の「ｎｏｐ」命令に限定されない。ＣＰＵ５１外のロード／ストアその他命令参照メモリなどの長待ち時間命令を積極的にスケジューリングする際、ＩＳＵ２００は、スロット０−３の命令のどれが長待ち時間かを識別するＩＳＳＵＥ ＭＥＭ信号の形で、ＩＣＲＵ３０１にも知らせる。（長待ち時間命令の積極的スケジューリングは、基本的な本発明の構造および方法の強化として別に説明する。）
【００７７】
ａ．発行／コミット／リクレームユニット（ＩＣＲＵ）
発行／コミット／リクレームユニット（ＩＣＲＵ）はＰＳＵ３００内で機能し、ｎ−ビット逐次シリアル番号などの命令タグを割り当て、ＣＰＵ５１内部のメモリで命令状態情報のデータ記憶領域を定義・維持することにより、発行されたすべての命令のアクティビティ状態情報を維持する。図１０に、ＩＣＲＵ３０１のコンポーネントおよびＩＣＲＵオペレーションに関連する入出力信号の機能ブロック図を示す。ＩＣＲＵ３０１は機能的に４つの領域で構成される。命令状態情報データ構造３０８は、命令状態情報の記憶と、データ構造制御ロジック３０９の信号に対応して状態を更新を行い、データ構造制御ロジック３０９は、他のＣＰＵ５１ユニット、特にＤＦＢ６２からの信号に対応する。ポインタデータ構造３１０は、発行、完了、リタイア等、ＣＰＵ５１の各種命令段階マイルストーンへの状態ポインタとして働く複数のシリアル番号を個別に記憶するデータ記憶領域を含む。これらシリアル番号ポインタは、後でより詳細に説明する。ポインタ制御ロジック３１１は、他のＣＰＵ５１ユニットから受け取ったデータと共に、データ構造３０８に記憶された状態情報を評価し、シリアル番号ポインタを更新して、カレントＣＰＵ５１状態を反映させる。ポインタ値は、ＩＣＲＵ３０１およびＰＳＵ３００からＣＰＵ５１の他ユニットへのグローバル出力として与えられる。
【００７８】
命令状態情報データ構造３０８は、アクティブ命令リングレジスタ（Ａ−リング）３１２からなり、オプションでメモリ命令リングレジスタ（Ｍ−リング）３２４からなることもできる。メモリ命令リングレジスタは、積極的ロード／ストア命令スケジューリングに関連して本明細書中の他の部分で説明する。データ構造制御ロジック３０９は、Ａ−リングセット／クリアロジック３１３からなり、オプションでＭ−リングセット／クリアロジック３２５からなることもできる。ポインタ制御ロジック３１１は、ＩＳＮ／ＮＩＳＮ初期化および前進ロジック３２１からなり、次の命令シリアル番号割り当てロジック３２２と、ＣＳＮ／ＲＲＰ前進ロジック３２３は、オプションでＮＭＣＳＮ前進ロジック３２６、マシン同期生成ロジック３２７、バックトラックモードポインタ調整ロジック３２８からなる。オプション要素は本発明の基本的な構造および方法の強化に関連し、後でより詳細に説明する。
【００７９】
発行／コミット／リクレームユニットの命令発行段階のオペレーションを、図１０を参照して説明する。発行された命令に割り当てるためＩＳＵ２００から送られた一覧番号（ＳＮ ＡＶＡＩＬ）は、ポインタデータ構造３１０内のポインタ値に基づきＩＣＲＵのシリアル番号割り当てロジックで選ばれる。ＣＰＵ５１を初期化した時（パワーアップ時など）、ポインタデータ構造３１０内のポインタも初期化され、ＩＣＲＵはまず、発行ウィンドウの命令について最初のシリアル番号をＩＳＵ２００に割り当てる（ＳＮの０−３等）。
【００８０】
ＩＳＵ２００はデータ構造制御ロジック３０９にＩＳＳＵＥ ＶＡＬＩＤ信号を送り、前回のサイクルで与えられたシリアル番号の内どれが（４個のＳＮの内どれが）ＩＳＵ２００によって有効に発行され、どの命令スロットのものかをＩＣＲＵに知らせる。セット／クリアＡ−リング制御ロジック３１３はこの情報とポインタレジスタ３１０内のポインタの値を使って、Ａ−リング３１２に命令状態情報を書き込む。ＣＰＵ５１の１実施例では、ＩＳＳＵＥ ＶＡＬＩＤは４ビットベクトルで、ＩＳＵ２００が命令シリアル番号（ＳＮ ＡＶＡＩＬ）のどれを実際に使って命令を実際に発行した命令スロットを識別したかをＩＣＲＵに知らせる。そこでＩＣＲＵは、ＳＮ ＡＶＡＩＬとＩＳＳＵＥ ＶＡＬＩＤに基づきどのＳＮを使ったかを決定できる。
【００８１】
アクティブ命令リング３１２の実施例を、図１１の略図を参照して説明する。図１１のデータ構造は例示なもので、本特許の内容から、このアクティブ命令状態レジスタの実施には様々なデータ構造を利用できることを当業者は理解するであろう。図１１は、６４ビットデータ構造として実施したアクティブ命令リング（Ａ−リング）３１２を示す。（メモリ命令リング（Ｍ−リング）３２４も略図として示し、長待ち時間命令の積極的スケジューリングの強化に関連して本明細書の他の部分で説明する。）Ａ−リング３１２内の６４の各アドレス指定可能ロケーションは、ＣＰＵ５１の１つの命令シリアル番号に対応する。各アクティブビット（Ａ−ビット）のセット（「１」）またはクリア（「０」）状態は、命令がアクティブであるか（「１」）、インアクティブであるか（「９」）を示す。基本的に、発行されて、エラーなしに実行を完了し誤予測されずに非起動とさえると、命令は始動する。１つのマシンサイクルで発行され効果的に実行完了した一部の命令では、Ａ−ビットが命令発行でクリアされる。Ａ−リング３１２のアドレス指定可能ロケーションの数は、ＣＰＵ内の同時未解決の命令の数を限定する。
【００８２】
例示プロセッサでは、Ａ−リング３１２は円形、環状あるいは循環データ構造として実施され、ここでポインタは「モジュロＡ−リングレジスタ長さ」タイプ演算（ここでは、モジュロ６４タイプ演算）を使って、データ構造に沿って移動する。すなわち、ポインタが第１のデータ記憶場所（アドレス指定可能ビット０）から一連の中間記憶場所（ロケーション１５、１６．．．等）を通って最後のデータ記憶場所（アドレス指定可能ビット６３）までインクリメンタルに移動すると、最初のロケーション（アドレス指定可能ビット０）に戻る。当業者は、本発明の内容から、環状データ構造は有利ではあるが、本発明にとって不可欠ではなく、本発明の特徴を実施するのに他のデータ構造も使えることを理解するであろう。さらに、例示Ａ−リングは必要な状態情報の維持に６４個のシングルビットのアドレス指定可能ロケーションを持つが、これらおよび追加状態インジケータの記憶に、マルチビットアドレス指定可能ロケーションを設けることもできる。たとえば、ある実施例では、任意回転の６４ビットレジスタを用い、第２の実施例では、８個の８ビットレジスタを用いて６４個のＡ−リング３１２Ａ−ビットとしている。単純なデコーディング回路が、後に説明するようにビット書き込み（セットとクリア）を可能にする。
【００８３】
ＩＳＵ２００による「命令発行」の結果、命令に命令シリアル番号が割り当てられる。割り当て可能なシリアル番号の数は、Ａ−リング３１２のアドレス指定可能ロケーション（ビット位置等）の数によって限定される。そのため、各アドレス指定可能ロケーションは独自のシリアル番号に対応する。たとえば、例示６４ビット環状Ａ−リングには、６４個までの命令シリアル番号を同時に割り当てることができる。Ａ−リングのロケーションを多くか少なくすることによって、これより多くか少ないシリアル番号を割り当てることができる。すべてのシリアル番号を割り当てると、シリアル番号とＡ−リングのロケーションがその後のマシンサイクルで解放されるまで、それ以降の命令発行をＩＳＵ２００によって機能停止しなければならない。ＩＳＵ２００は、ＳＮ―ＡＶＡＩＬ信号によってＳＮが利用可能か否かを知らされる。Ａ−リング３１２の各アドレス指定可能ロケーションは利用可能なシリアル番号の１つに対応し、発行済みシリアル番号ポインタ（ＩＳＮ）３１４を発行された各命令について１つ前進させることで、新しく発行された各命令にＡ−リングに記述項を作る。１つのマシンサイクル中に複数の命令が発行されることがあるため、各サイクルで１個以上のＡ−ビットを設定し、ＩＳＮを各サイクルで１つ以上のＡ−リングロケーションで前進させることができる。
【００８４】
ＩＳＵ２００による「命令ディスパッチ」は、実行のための（シリアル番号を割り当てられた）命令の起動とＤＦＢ６２への送信である。ディスパッチされたすべての命令は発行された命令でもあるが、発行された命令のすべてがディスパッチされるわけではない。「ディスパッチ」されたすべての命令は、「１」に相当してセットされたＡ−リング３１２中の割り当てシリアル番号に対応し、その命令がマシン中でアクティブであることを示す（１= アクティブ、０= インアクティブまたは非起動）。発行されたがディスパッチされない命令は既知の分岐またはｎｏｐタイプの命令に対応し、その命令についてＡ−ビットが発行時にクリアされる（またはセットされない）。これら既知の分岐とｎｏｐタイプの命令は、実行のための実行ユニットを必要とせず、１つの段階で発行、実行、完了することができる。
【００８５】
ｂ．発行ステージ間のポインタ関連の命令発行およびポインタメンテナンス
図１１は、ポインタ記憶メモリ領域３１０に記憶され、Ａ−リング３１２およびＭ−リング３２４上のロケーションを指す数個のポインタ（ＩＳＮ、ＮＩＳＮ、ＣＳＮ、ＲＲＰ、ＮＭＣＳＮ、およびＰＢＳＮ）も示す。それぞれのポインタは、Ａ−リングのロケーション値０〜６４の１つを記憶するポインタ記憶ユニット２１０の構成要素である。ポインタの組合わせによっては、Ａ−リングまたはＭ−リングのロケーションを指し示すことがあるが、ロケーションを指し示すことのない組合わせもある。例えば、ＮＩＳＮはＩＳＮと等しくなることはあり得ないが、装置によっては、ＣＳＮ＝ＩＳＮ＝ＲＲＰと「同期」する。発行されたシリアル番号ポインタ（ＩＳＮ）３１４および次発行のシリアル番号ポインタ（ＮＩＳＮ）３１５は、命令発行状態を保持し追跡すると共に、全体的に他のポインタの利点に制約を加える。コミット（委託）されたシリアル番号ポインタ（ＣＳＮ）３１６は、他のポインタには特に規定されていないような命令の実行、完了、および非活動化に続く命令コミットを追跡する。リタイア再生ポインタ（ＲＲＰ）３１７は、命令のリタイアを追跡し、リソースの再生を制御する。最速予測分岐命令ポインタ（ＰＢＳＮ）３１８および非メモリコミットシリアル番号ポインタ（ＮＭＣＳＮ）３１９の２つの補助的なポインタを使用して、予測分岐命令やロード／ストア命令のような待ち時間の長い命令の実行をスケジュールし追跡する。ＩＣＲＵ３０１はＣＰＵ５１内の多数の他のユニットに対して、それぞれのＩＳＮ、ＮＩＳＮ、ＣＳＮ、ＲＲＰ、およびＮＭＣＳＮに現在値を与える。ＩＣＲＵは、以後説明するように、ＰＳＵ３００内のウォッチポイント・ユニット３０８からＰＢＳＮ３１８の値を受け取る。これらのポインタは、実施例のＣＰＵではそれぞれ６ビットベクトルとして実施される。
【００８６】
発行されたシリアル番号ポインタ（ＩＳＮ）３１４は、常に最後に発行された命令のシリアル番号を指し示している。ＩＣＲＵによって与えられたシリアル番号の１つが実際にＩＳＵ２００によって割り当てられたとき、命令が発行されたと考えられる。ＩＳＮおよびＮＩＳＮは、ＩＣＲＵにそのサイクルの間に実際に発行された命令の数を通知するＩＳＵ２００からのISSUE VALID 信号に応じてインクリメントされる。ＩＳＮおよびＮＩＳＮがインクリメントされるので、ポインタは効率良くＡ−リング３１２の周りに前進する。マシンサイクルごとにＩＳＮが前進できるポジションの最大数は、マシンのピーク発行速度によって決定されるが、ハードウェアを制御する別のソフトウェアによって、この最大数をサイクル当たりの命令の一層小さな所定の値にまで制限できる。例えば、典型的なＣＰＵでは、ＩＳＮおよびＮＩＳＮの前進は、マシンサイクル当たり４つの命令のシリアル番号（Ａ−リングのロケーション）に制限されている。ＣＰＵが初期化されると、ＩＳＮは初期化されて０（ゼロ）になり、別の命令が発行されると、ＩＳＮは新たに発行された命令の数によって前進する。
【００８７】
次発行のシリアル番号ポインタ（ＮＩＳＮ）３１５は、常にＩＳＮ＋１を指しているため（モジュロＡ−リング長）、ＩＳＮが63の場合、ＮＩＳＮはゼロである。これは本質的に発行されるべき次の命令のシリアル番号である（すべての命令は予測されたＰＣ順に発行される）。独立したポインタのＮＩＳＮを提供することは便利であるが、ＮＩＳＮは常にＩＳＮよりも１だけ大きいため、実施例の中にはＩＳＮだけを使用しているものもある。ＣＰＵが初期化されると、ＮＩＳＮは初期化されて１（いち）になり、別の命令が発行されると、ＮＩＳＮは新たに発行された命令の数によって前進する。ＩＳＮおよびＮＩＳＮの初期化と前進とは、ＩＳＵ２００からのISSUE VALID 信号に応じて、ＩＳＮ／ＮＩＳＮ前進論理ユニット３２１によって実行される。
【００８８】
ＩＣＲＵ３０１は、命令が発行されたときに割り当てられる４つの利用可能な命令のシリアル番号をＩＳＵ２００に与える。適切な４つの命令のシリアル番号の決定は、ＩＳＮ３１４およびＮＩＳＮ３１５の現在値に基づいて、ポインタ制御論理ユニット３１１内の次命令シリアル番号割当てロジック３２２の中で行われる。ＲＲＰ３１７は、ＣＵがフルの場合、すなわちすべてのシリアル番号がすでに割り当てられ再生できない場合、シリアル番号の割当てを制限できる。ＩＣＲＵ３０１は、SN AVAIL信号をＩＳＵ２００に送ることによってシリアル番号が利用可能になる場合、発行された命令に割り当てられるべき（４つの）シリアル番号の次のシリーズをＩＳＵ２００に通知する。
【００８９】
ＣＰＵ５１のある実施例では、SN AVAIL信号は発行ウィンドウのスロット０〜３において最大４つの命令に割り当てられるシリアル番号を識別する４つの７ビット信号（SN SLOT 0, SN SLOT 1, SN SLOT 2,  およびSN SLOT 3 ）から構成する。６つのビットはシリアル番号を表し、７番目のビットはシリアル番号妥当性ビットである。そのシリアル番号に対する妥当性ビットがセットされていない場合、命令のシリアル番号はＣＰＵ５１内では依然としてアクティブであり、ＩＳＵは使用してはならない。６４ビットのＡ−リング３１２がサポートするすべての６４ビットの命令がＣＰＵ５１の中でアクティブである場合、妥当性ビットはセットされないことがある。シリアル番号が有効な場合はＩＳＵ２００は１つの命令しか発行できないので、ＩＳＵは次の命令を発行する前に、以前発行した命令が実行およびリタイアするまで待機しなければならないことがある。命令の実行およびリタイアについて、以下に説明する。
【００９０】
図１２は、Ａ−リング・ビットセット／クリア・ロジック（ＡＳＣＬ）３１３の構造を含む状態制御論理ユニット３０９をより詳細に示している。ＡＳＣＬ３１３は、セット論理ユニットおよびクリア論理ユニット３３１，３３３とそれぞれ関連したアドレスデコード論理ユニット３３２，３３４ならびにセット論理ユニット３３１およびクリア論理ユニット３３３から構成する。セット論理ユニット３３１は、ＩＳＵ２００からISSUE VALID 信号を、またアドレスデコード論理ユニット３３２からデコードされたＮＩＳＮポインタアドレスを受け取る。Ａ−リングのセット論理ユニット３３１は次に、ＩＳＵによって実際に発行された命令の数に一致するＡ−ビットをＡ−リング書込みポート３４２を介して「１」にセットする。命令が非活性化されるおよび／またはＣＰＵがリセットされると、Ａ−ビットはクリアされる。書込みポート３４２の数を選択して、各サイクルごとに活性化（または非活性化）される命令のメーカをサポートする。Ｍ−リング３２４に関して図１２で示した他の構造を、長いレイテンシー（待ち時間）命令の積極的なスケジューリングおよび命令のコミットおよびリタイアと共に以下に説明する。
【００９１】
ある実施例では、ISSUE VALID 信号はＩＳＵ２００から受け取った４ビットのベクトルであり、このベクトルではポジションビットｉでの表明（位置付けられたときに「１」すなわち高い信号レベルにセットされたビット）は、ｉ番目の命令発行ウィンドウスロットにおける命令が発行されていることを示している。ＩＣＲＵ３０１は、前に説明したSN SLOT i 信号によって、どのシリアル番号がどのスロットに関係しているかを知っている。命令は連続したプログラムの順番に発行されるので、４つの命令発行ＣＰＵのISSUE VALID 信号に対して可能な状態は５つしかない（"0000", "0001", "0011", "0111", および "1111" ）。ＩＣＲＵは、「ノップタイプ」の命令信号（ISSUE NOP ）もＩＳＵから受け取る。この信号は、説明したように命令がノップタイプの命令であるとＩＣＲＵに通知する。ＣＰＵ５１のある実施例では、ISSUE NOP 信号は４ビット信号であり、ポジションビットｉでの表明ではスロット内のｉ番目の命令が「ノーオペ」クラスの命令であることを示す。積極的なローカル／ストア命令のスケジューリングを実行する場合、ISSUE MEM 信号は４ビット信号であり、ポジションビットｉでの表明ではスロット内のｉ番目の命令がメモリ参照命令であることを示している。
【００９２】
一般的に、ノーオペ命令は分岐命令のような制御転送命令、またはライトＡＳＲ、ライトＦＰＲＳ、またはライトＰＩＬ命令のいずれかである。ライトＡＳＲ、ライトＦＰＲＳ、およびライトＰＩＬ命令は、ＤＦＢ６２ではなく、対応する制御レジスタ・ユニット８００内で実行され、これによりＮＯＰタイプの命令として処理される。従って、その対応するISSUE NOP 信号は「１」にセットされ、このためＡ−ビットは「０」にセットされる。Tcc 命令はCCが不明の場合は発行されない。Tcc 命令は、CCが既知で誤りである場合、NOP 命令として発行される。Tcc 命令は、他のケースではISSUE NOP=0 で発行される。これ等の命令は、実行するためにＤＦＢ６２実行ユニットを必要とせず、一般に発行されたときと同じマシンサイクル内に終了する。対応する命令が、「分岐」（br）命令のような「ノップ」クラスの命令の場合、ISSUE NOP 信号は「１」にセットされる。ISSUE NOP 信号が「１」にセットされると、対応するＡ−ビットは「０」にセットされる、すなわち命令は即座に非活性化されまたコミット可能となる。（命令コミットおよびコミット時のＡ−ビットの変更については、以下に説明する。）
【００９３】
Ａ−リングの６４のアクティビティビットは、ＣＰＵ内に共存する命令の活性を示す。Ａ−ビットは、使用される前のサイクルごとにセットされまたクリアされるので、初期化する必要はない。ISSUE VALID, ISSUE NOP,   およびNISN信号に従って、Ａ−ビットはセットされる。
【００９４】
分岐命令は発行時にクリアされるＡ−ビットを備えているので、追加のステップが実行されて、ＣＳＮ３１６が投機的に実行された分岐命令を越えて前進しないようにする（以後の説明を参照のこと）。典型的な実施例では、分岐命令が発行されるときに、分岐条件コードがウォッチポイント・ユニット３０４に記憶される。ウォッチポイント・ユニット３０４は、命令の実行をモニタし、投機的に発行された分岐命令が終了するとき、ウォッチポイントは実行結果を必要な分岐条件コードと比較して、投機的な発行を確認する。条件コードを比較することによって、投機的な実行が正確に予測されたかについての決定が行われる。投機的な実行が正確でない場合、（バックアップおよび／またはバックステップのような）ＣＰＵ５１の回復手段が起動されてその実行を取り消し、これによりＡ−ビットがクリアされているにもかかわらず、ＣＳＮが誤予測された分岐を過ぎて前進しないようにする。そうしないと回復を妨げる可能性がある。誤って発行された命令シーケンスを命令コミットすることを避けるために、マシン回復手段を十分早く起動するための特別な注意を取らなければならない。評価に先立って、保留の命令自体が誤って予測された命令シーケンスがコミットされないようにする。ウォッチポイントおよびＣＰＵ５１の回復手段については、この明細書の他の場所でさらに詳細に記載する。
【００９５】
命令の状態を追跡し詳細な状態を維持するための命令タグの使用法を含む本発明による方法の実施例の態様を、図１３〜図１５のフローチャートで説明する。図１３は、状態を追跡し詳細な状態を維持するための命令タグの使用方法の実施例の概略フローチャートである。図１４は、命令の状態を追跡して詳細な状態を維持するための本発明による方法の実施例を示す概略フローチャートである。図１５は、本発明の実施例によるアクティブ命令リングおよびメモリ命令リングに状態情報を書き込みまた維持する方法のフローチャートである。
【００９６】
３．レジスタのリネーミング
レジスタの依存性を取り除いてＩＳＵ２００がマシンサイクル当たり一層多くの命令を発行できるようにするために、ＣＰＵ５１は発行段階の間にレジスタのリネーミングを実行する。これは、1994年10月11日にシェバナウ（Shebanow）等に授与された米国特許第5,355,457 号に記載されている方法、および／または「マイクロプロセサの物理レジスタの使用を調整するための方法と装置（METHOD AND APPARATUS FOR COORDINATING THE USE OF PHYSICAL REGISTERS IN A MICROPROCESSOR ）」という名称の同時継続出願番号第08/388,364号に記載されている方法、および／またはジョンソン（Johnson ）の論文「スーパースカラー・マイクロプロセサの設計（Superscalar Microprocessor Design ）」のページ48〜55に記載されている方法と同じ方法で実行できる。
【００９７】
レジスタのリネーミングを実行するために図８を参照すると、ＤＦＢ６２には、ＦＸＲＦＲＮ６０４，ＦＰＲＦＲＮ６０５，およびＦＳＲ／ＣＣＲＦＲＮ６０６のＣＣＲＦＲＮ６１０が含まれている。前に簡単に説明したように、ＦＸＲＦＲＮ６０４には固定小数点データを記憶するための物理固定の小数点レジスタが含まれ、ＦＰＲＦＲＮ６０５には浮動小数点データを記憶するための物理浮動の小数点レジスタが含まれ、ＣＣＲＦＲＮ６１０には整数と浮動小数点条件のコードデータを記憶するための物理整数（固定小数点）および浮動小数点条件のコードレジスタ（ＸＩＣＣおよびＦＣＧＳ）が含まれている。ＦＸＲＦＲＮ６０４、ＦＰＲＦＲＮ６０５、およびＣＣＲＦＲＮ６１０は、それぞれ図１６に示すように構成できる。
【００９８】
図１６に示すように、レジスタファイルおよびリネームユニット（ＲＦＲＮ）６１２には、物理レジスタを含む物理レジスタファイル６１４が含まれる。ＲＦＲＮは、物理レジスタファイル６１４内の物理レジスタへの命令によって規定される論理レジスタおよび／またはアーキテクト・レジスタをマッピングするリネームマッピング・ロジック６１３も含む。例えば、SPARC-V9命令では、ＦＸＲＦＲＮ６０４のリネームマッピング論理は、８０の論理１２８の物理変換固定小数点レジスタに構築された３２のマッピングを実行でき、３２のアーキテクトまたは論理的な単精度および倍精度の浮動小数点レジスタは、２組の６４の単精度（３２ビット）のリネームされた浮動小数点レジスタ（奇数および偶数）にマッピングされ、５つのアーキテクトまたは論理条件コードレジスタ（xicc, fcc0, fcc1, fcc2, および fcc3 ）は３２のリネームされた条件コードレジスタにマッピングする。アーキテクト論理変換マッピングは次の事実に基づいている、すなわちSPARC-V9の固定小数点命令は、図１７に示す制御レジスタ・ファイル８００のＣＷＰレジスタに記憶されたカレントウィンドウ・ポインタ（ＣＷＰ）に従って、論理レジスタにマッピングするアーキテクトレジスタを規定する。
【００９９】
ＲＦＲＮの制御ロジック６１３は、各発行段階の間にＢＲＢ５９のフェッチレジスタから命令（F INSTs BRP ）を受け取る。これに応答して、制御ロジック６１３は命令をデコードし、どの命令がこの特定のＲＦＲＮのレジスタファイル６１４からのソースおよび／または宛先として物理レジスタを必要とするかを求める。
【０１００】
リネームマッピング・ロジック６１５は、先ず始めに、レジスタファイルの中で現在マッピングされた物理レジスタへの命令によって指定されたそれぞれの論理またはアーキテクト・ソースレジスタをマッピングし、TAGS R信号の中で適当な実行ユニット（FPU 600, FXU 601, FXAGU 602,  または LSU 603）のリザベーションステーションへの対応する物理レジスタタグを与える。それぞれの物理レジスタタグに対して、リネームマッピング・ロジックは、マッピングされた物理ソースレジスタ内のデータがまだソースとして利用可能かどうかを識別するデータ有効（DV）ビットを有する。DVビットは、リネームマッピング・ロジック６１５によってDV R信号の中の適当な実行ユニットのリザベーションステーションに与えられる。さらに、データがDVビットによって示されるように利用可能な場合、それはDATA R信号内のマッピングされた物理ソースレジスタによって提供される。
【０１０１】
それぞれのＲＦＲＮ（すなわち、ＦＸＲＦＲＮ６０４，ＦＰＲＦＲＮ６０５，およびＣＣＲＦＲＮ６１０）に対して、ＦＲＥＥＬＩＳＴユニット７００は、ＲＦＲＮのレジスタファイル６１４のフリーな物理レジスタのすべてのリストを含む。フリーすなわち利用可能なレジスタとは、リタイアしていない命令によって現在使用されていないレジスタのことである。これらの利用可能な物理レジスタは、各サイクルごとにＦＲＥＥＬＩＳＴユニット７００からのFREE REGS 信号によって識別される。
【０１０２】
従って、論理またはアーキテクト・ソースレジスタがマッピングされた後、リネームマッピング・ロジック６１５は次にFREE REGS信号によって識別された利用可能なすなわちフリーな物理レジスタに対する命令が指定したそれぞれの論理またはアーキテクト宛先レジスタをマッピングし、対応するDVビットをセットしてそのレジスタ内のデータはまだ利用可能でないことを示す。リネームマッピング・ロジック６１５は次に、新しくマッピングされた物理宛先レジスタに対して物理レジスタタグを与え、また対応するDVビットをTAGS R信号および DV R 信号の適当な実行ユニットのリザベーションステーションに与える。
【０１０３】
さらにリネーム・ロジック６１５は、ＰＳＵ３００の再生フォーマットユニット（ＲＲＦ）３０２に旧論理またはアーキテクトされたレジスタマッピングの物理レジスタマッピング変換を提供する。前にマッピングした物理宛先レジスタに対する論理すなわちアーキテクトされたレジスタタグをLOG OPHYS TAGS信号のＲＲＦ３０２に送ることによって、リネームマッピング・ロジック６１５はそれを行う。それぞれのＲＦＲＮ６１２からのLOG OPHYS TAGS信号は、これらの信号がその特定のＲＦＲＮから来ることを示すためのフィールドを含んでいる。
【０１０４】
ＲＲＦ３０２をさらに詳細に図１８に示す。このＲＲＦはデータ記憶構造体３６６を含んでいる。最大６４の発行されたがまだリタイアしていない命令にシリアル番号を割り当てることができる典型的なＣＰＵ５１では、データ記憶構造体３６６は６４のアドレス可能な記憶素子またはエントリを含んでいる。各記憶素子は、命令のシリアル番号の１つに対応している。さらに、データ記憶構造体３６６の各記憶素子は、ＦＰ論理旧物理変換マップフィールドまたはＦＸ論理旧物理変換マップフィールドを、またＦＣＣ論理旧物理変換マップフィールドまたはＸＩＣＣ論理旧物理変換マップフィールドを含んでいる。各種の構造体はＲＲＦ３０２を実行するために使用できる。ある典型的なＲＲＦは、６４レジスタラ ２９ビットの４つのバンクのインターリーブされたＲＡＭとして実行され、そこではＲＲＦへの書込みサイクルの間、フィールドはパックまたはバンドルされ、バックステップの間の読み出しでアンパックまたはアンバンドルされる。
【０１０５】
ＲＲＦの制御ロジック３６５は、ＤＦＢ６２からLOG OPHYS TAGS信号を受け取り、ＦＸＲＦＲＮ５０４からの浮動小数点レジスタタグ、ＦＰＲＦＲＮ６０５からの固定小数点レジスタタグ、およびＣＣＲＦＲＮ６１０からのＸＩＣＣタグおよびＦＣＣタグをどれが含んでいるかを決定する。制御ロジック３６５は、ＰＳＵ３００のＩＣＲＵ３０１からＮＩＳＮポインタを、またＩＳＵ２００からISSUE VALID 信号も受け取る。ＮＩＳＮのポインタとISSUE VALID 信号に応答して、制御ロジック３６５は、LOG OPHYS TAGS信号を受け取る発行された命令のシリアル番号を決定する。
【０１０６】
典型的なＣＰＵ５１では、命令は浮動小数点とＦＣＣレジスタとを同時にまたは固定小数点とＸＩＣＣレジスタとを同時に変更できるにすぎないが、固定小数点、浮動小数点、ＸＩＣＣ、およびＦＣＣレジスタを同時に変更できない。従って、固定小数点または浮動小数点の論理および旧物理レジスタタグをLOG OPHYS TAGS信号の中で受け取るそれぞれの命令に対して、制御ロジック３６５はこれらのタグ（FP TAGS または FX TAGS）をシリアル番号を付けて発行された命令に対応する記憶素子のＦＰ論理物理変換マップフィールドまたはＦＸ論理物理変換マップフィールドに書き込む。同様に、ＦＣＣまたはＸＩＣＣの論理および旧物理レジスタタグを受け取るそれぞれの命令に対して、制御ロジック３６５はＦＣＣ論理旧物理変換タグまたはＸＩＣＣ論理旧物理変換タグを、シリアル番号を付けて発行された命令に対応する記憶素子のＦＣＣ論理物理変換マップフィールドに書き込む。従って、命令が浮動小数点とＦＣＣレジスタとの両方または固定小数点とＸＩＣＣレジスタとの両方を必要とする場合、この命令のLOG OPHYS TAGS信号に含まれた論理および旧物理レジスタタグは同じ記憶素子に書き込まれる。しかしながら、ＲＲＦ３０２は固定小数点、浮動小数点、ＸＩＣＣ、およびＦＣＣレジスタを同時に変更する命令に対する論理旧物理変換マッピングを記憶するように構成できることは、当業者は理解されよう。
【０１０７】
従って、ＲＲＦ３０２は、必要な場合、以前の論理物理変換マッピングまたは関係を再構成できる連続的な履歴台帳として機能する。例えば、SN="X"に対応する命令を取り消すことが必要になる場合、ＲＲＦの中でSN="X"をインデックスとして用いて、論理および旧物理レジスタタグを識別する。次に、これ等のタグは適当なＲＦＲＮに渡され、SN="X"命令を実行する直前に存在した物理レジスタマッピングに対する論理レジスタマッピングを回復し、この新たにマッピングされた物理レジスタはフリーリストに戻される。これによりレジスタのリネーミングを効果的に逆にでき、レジスタの状態は命令を実行する直前に存在した状態に戻される。数個の命令を取り消す必要がある場合、同じ手順が逆にしたステップごとに、ＩＳＮから始めてSN="X"までデクリメントして加えられる。このプロセスは詳細に後述する。
【０１０８】
図１９は、論理ソースレジスタＬ４１およびＬ４２、および宛先レジスタＬ４７を備えた加算命令用のレジスタリネーミングの例である。前述に従って説明すると、論理ソースレジスタＬ４１およびＬ４２はリネームマッピング・ロジック６１５によって物理レジスタＰ５０およびＰ５２にマッピングされる。次に、論理宛先レジスタＬ４７は、ＦＲＥＥＬＩＳＴユニット７００が提供したフリーな物理レジスタＰ９９に再マッピングされ、論理宛先レジスタＬ４７用の論理レジスタタグおよび以前マッピングされた（旧）物理レジスタＰ７８が加算命令に割り当てられたシリアル番号（SN=13 ）を用いてマッピングするためＲＲＦに与えられる。この例から明らかなように、各「物理」レジスタタグは、（１）フリーリスト７００、（２）ＦＸＲＦＲＮ６０４、ＦＰＲＦＲＮ６０５、またはＣＣＲＦＲＮ６１０のリネームマッピング・ロジック、（３）ＲＲＦ３０２の１つにまた１つだけに現れる。
【０１０９】
４．リザベーションステーションへのディスパッチ
図８をさらに参照すると、発行段階の間に、ＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２、およびＬＳＵ６０３のリザベーションステーションはＳＲＢ５９から F INSTs BRP命令を受け取る。これに応答して、それぞれのリザベーションステーションは、これ等の命令からオペコードと即値データとを抽出する。
【０１１０】
それぞれのＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２、およびＬＳＵ６０３のリザベーションステーションは、発行段階の間に発行された命令に割り当てられたシリアル番号およびチェックポイント番号を受け取る。これ等の番号はＩＳＢ６２から受け取ったシリアル番号およびCHKPT N 信号が提供する。
【０１１１】
浮動小数点データを含む数学上の命令およびリード／ライト命令を実行するために、ＦＰＵ６００のリザベーションステーションは、発行段階の間に、ＦＳＲ６０７のＦＰＲＦＲＮ６０５およびＣＣＲＦＲＮ６１０から、使用可能なデータ、データ有効ビット、およびＦＰ物理レジスタタグおよびＣＣ物理レジスタタグ（FP DATA R, FP DV R, FP TAGS R, CC DATA R, CC DV R, CC TAGS R）を受け取ることができる。同様に、ＦＸＵ６０１は、固定小数点を含む数学上の命令、プログラム制御命令、およびリード／ライト命令を実行するために、発行段階の間に、ＦＸＲＦＲＮ６０４およびＣＣＲＦＲＮ６１０から、ＩＳＢ２ＤＦＢバスに対する制御レジスタ・ファイル８００からのデータ、使用可能データ、データ有効ビット、およびＦＸ物理レジスタタグおよびＣＣ物理レジスタタグを受け取ることができる。ロード／ストア命令および固定小数点非乗算／除算の演算命令用のアドレス発生動作を実行するために、ＦＸＡＧＵ６０２は、ＦＸＲＦＲＮ６０４および／またはＣＣＲＦＲＮ６１０からデータならびにＦＸ物理レジスタタグおよびＣＣ物理レジスタタグ（FX DATA R, FX DV R, FX TAGS R, CC DATA R, CC DV R, CCTAGS R ）を受け取ることができる。しかしながら、前に説明したように、プログラム制御、乗算／除算、および制御レジスタのリード／ライト命令を実行するために、ＦＸＡＧＵ６０２はＦＸＵ６０１と同様に構成することができ、この場合ＦＸＡＧＵ６０２はＦＸＲＦＲＮ６０４およびＣＣＲＦＲＮ６１０から適当な使用可能なデータおよび物理レジスタタグも受け取ることができる。さらに、ロード／ストア命令を実行するために、ＬＳＵ６０３は発行段階の間にＦＰＲＦＲＮ６０５および／またはＦＸＲＦＲＮ６０４およびＦＳＲ／ＣＣＲＦＲＮ６０６のＦＳＲレジスタの内容から、使用可能なデータならびにＦＰ物理レジスタタグおよびＦＸ物理レジスタタグ（FX DATA R, FX DV R, FX TAGS R, FP DV R, FP TAGS R ）を受け取ることができる。
【０１１２】
そして、リザベーションステーションのエントリがENTRIES AVAIL 信号によって識別されたように使用可能な発行されたそれぞれの命令に対して、そのリザベーションステーションは識別されたエントリに抽出されたオペコード、シリアル番号、チェックポイント番号、物理宛先レジスタタグおよび／またはソースレジスタタグ、およびその命令に対して使用可能なデータを配置する。さらに、受け取ったデータ有効ビットによって識別されたように、データがすでに使用可能であるそれぞれの物理ソースレジスタタグについては、リザベーションステーションはリザベーションステーション内の別のデータ有効ビットをセットして、レジスタタグに関係するデータが使用可能であることを示す。また、命令が即値データを含む場合は、そのデータは即座に使用可能でありまたリザベーションステーションのエントリに記憶されるので、データ有効ビットもセットされる。
【０１１３】
Ｃ．命令の実行と完了
再度図６を参照する。発行段階の間に、ＰＣロジック１０６はフェッチレジスタ１１０からフェッチ命令（F INSTS BRP ）を受け取り、それをデコードする。ＰＣロジック１０６はＩＳＵ２００からISSUE VALID 信号も受け取り、実際に発行されたどの命令をデコードしているかを求める。１つのマシンサイクル内に発行され、実行と完了が予測できるプログラム制御命令については、このＰＣロジックはプログラムの流れを予測し、その予測に基づいてＦＰＣ、ＡＰＣ、およびＮＡＰＣの値を計算する。その他のすべての命令については、ＰＣロジックは現在のマシンサイクルに対するＦＰＣ値に基づいて次のマシンサイクル用のＦＰＣ値と、ISSUE VALID 信号が示すように現在のマシンサイクルの間にいくつの命令が発行されるかを計算する。これらの命令についても同様に、ＰＣロジックは以前のマシンサイクルのＡＰＣ値に基づいてＡＰＣ値およびＮＡＰＣ値を計算し、また現在のマシンサイクル内にISSUED VALID信号が示すいくつの命令が発行されるかを計算する。
【０１１４】
例えば、 SPARC−V9 BPcc, Bicc, BPr, FBfcc および FBPfcc 命令のように、発行された命令に条件付き分岐命令がある場合、ＰＣロジック１０６は分岐を取るように予測するかまたは取らないように予測するかを決定するために、これ等の命令に対応するＢＲＰファイルをデコードする。分岐を取るように予測した場合、ＰＣロジック１０６は命令から置換値を抽出し、その値を使用して次のマシンサイクル用の新しいＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値を計算する。分岐を取らない場合は、ＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値は、プログラムの流れに変更なく標準的に計算される。
【０１１５】
しかし、発行された命令の中に、 SPARC−V9 JMPL[rd=0] 命令のようなリターンタイプのジャンプおよびリンク命令がある場合、ＰＣロジック１０６はリターン予測スタック１０５から予測されたＪＭＰＬターゲットＰＣ（P JMPL PC ）値をポップオフするためにＰＯＰ信号を出力する。ＰＣロジック１０６はこのターゲットＰＣ値を使用して、新しいＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値形成する。サブルーチンから復帰するためにJMPL[rd=0]命令を使用するが、ＰＣロジック１０６は、SPARC-V9 JMPL[rd=15]命令のようなＣＡＬＬ命令すなわちコールタイプのジャンプおよびリンク命令が発行されたと判断したときはいつでも、ＰＵＳＨ信号を出力してリターン予測スタック１０５にP JMPL PC 信号を送る。リターン予測スタック１０５に送られたこのP JMPL PC 信号は、８だけインクリメントする命令用のＡＰＣ値である。さらに、ＣＡＬＬ命令すなわちJMPL[rd=15] 命令が発行されるときはいつでも、P JMPL PC 信号がリターン予測スタック１０５に送られるので、ＰＣロジック１０６はＲＥＴＵＲＮ命令が発行されるときは常に、P JMPL PC 信号がリターン予測スタック１０５からポップオフされることも確認しなければならない。
【０１１６】
さらに、発行された命令には、SPARC-V9 BPA, BA, FBA および FBPA 命令のように無条件常時分岐命令が含まれることがある。この場合、ＰＣロジック１０６はこれらの命令から置換値を抽出し、新しいＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値を計算するために使用する。
【０１１７】
ＰＣロジック１０６は、条件分岐命令、常時分岐命令、およびJMPL[rd=0]命令に対して、ＤＦＢ６２からの補足データを待つ必要がないので、これ等のタイプの命令は同じ段階で発行、実行、また完了することができる。さらに、発行された条件分岐が実施されるまたは実施されないことが予測され、また予測されたターゲットＦＰＣ値がJMPL[rd=0]命令について計算されるので、続いてフェッチされた命令は投機的にフェッチされこのため投機的に実行される。
【０１１８】
さらに、発行された命令の中には、コールタイプのJMPL[rd=15]命令のようなＣＡＬＬ命令およびＲＥＴＵＲＮ命令、ならびにJMPL[rd=0]命令以外のＪＭＰＬ命令のように他の種類のプログラム制御命令がある。この場合、ＰＣロジック１０６は，ＦＰＣ値を計算し実行段階の間にその値をＤＦＢ２ＢＲＢバスに乗せるためにＤＦＢ６２を待つ。図８を参照すると、ＦＰＣ値は固定小数点データであるので、ＦＸＵ６０１はＦＰＣ値を計算する。そして、完了段階の間に、ＰＣロジック１０６はこの値を取り込み、新しいＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値を形成する。
【０１１９】
後でより詳細に説明するように、発行されたいくつかの命令がSPARC-V9 DONE 命令またはRETRY 命令のようなトラップハンドリング・ルーチン命令からリターンするとき、ＰＣロジック１０６はトラップＰＣ（TPC ）値またはトラップＮＰＣ（TNPC）値を、図７に示す制御レジスタファイル８００が提供したRD TPC TNPC 信号から受け取る。図１７を参照すると、制御レジスタファイル８００のトラップスタック８１５は、ＩＳＵ２００がRETRY 命令またはDONE命令が発行されたことを示すRETRY DONE IS 信号を出力するとき、これ等の信号を提供する。ＰＣロジック１０６は次にトラップスタック８１４から受け取ったTPC 値またはTNPC値を使用して、新しいＦＰＣ値、ＡＰＣ値、およびＮＡＰＣ値を形成する。
【０１２０】
他の発行された命令については、ＰＣロジック１０６は発行段階の間に前述のPC値およびNPC 値をインクリメントして、次のフェッチ段階用の新しいPC値およびNPC 値発生する。
【０１２１】
図８を参照する。発行段階の間に発行された命令は、必要なすべてのデータが対応するリザベーションステーションのエントリに配置された場合のみ、ＦＰＵ６００、ＦＸＵ６０１、ＦＸＡＧＵ６０２、およびＬＳＵ６０３を実行できる。他の命令よりも後で発行された命令用のデータがより早く使用可能になるので、これ等の命令は以前発行されたよりも前に実行され完了されることがある。
【０１２２】
前述したように、物理ソースレジスタ用のデータ有効ビットが使用可能と指示しない場合は、物理ソースレジスタのソースデータは使用できないことを、リザベーションステーションは知っている。従って、リザベーションステーションは、データが使用可能な場合、ＦＸＲＦＲＮ６０４、ＦＰＲＦＲＮ６０５、およびＣＣＲＦＲＮ６１０から転送された、適当な使用可能なデータ、データ有効ビット、および物理レジスタタグ（FX DATA F, FX DV F, FX TAGS F, FP DATA F, FP DV F, FP TAGS F, CC DATA F, CC DV F, CC TAGS F）を受け取りモニタする。リザベーションステーションは、対応する転送された物理レジスタタグがリザベーションステーションのエントリに記憶された物理レジスタタグに適合する場合は、特定のレジスタ用に意図された転送データを受け取る。
【０１２３】
すべてのデータ依存性がある命令に適合した場合（すなわち、すべての必要データが使用可能になる場合）、その特定の命令用にリザベーションステーションのエントリに記憶された命令を用いて、実行ユニットは次にその命令を実行する。実行ユニット６００〜６０３が実行する命令のタイプについては、リザベーションステーションの記憶エントリに関して前に説明してある。
【０１２４】
生成したデータがその命令用のエントリのリザベーションステーションに記憶された物理宛先レジスタタグによって識別された物理レジスタに記憶されたとき、実行された命令は完了する。完了する間に、実行ユニット６００〜６０３はERR STAT信号のエラーおよび完了状態情報もＰＳＵ３００に送る。
【０１２５】
さらに、図７を参照すると、ＩＳＵ２００はフェッチレジスタ１００から受け取った命令をデコードして、発行された命令のいずれかが図１７に示す制御レジスタ８０１〜８１４のリード／ライト命令であるかどうかを決定する。制御レジスタ８０１〜８１４はＣＰＵ５１の全体的な管理のもとで使用され、SPARC-V9のアーキテクチャマニュアルの中で説明されたタイプの特権付きのステートレジスタ、特権なしのステートレジスタ、および補助ステートレジスタを含むことができる。
【０１２６】
SPARC-V9 RDPR 命令およびRDASR 命令のような発行された制御レジスタのリード命令については、レジスタ８０１〜８１４の１つを識別して読み込まれることになっていることを示すRD/WR CNTRL 信号をＩＳＵ２００は出力する。その応答として、制御レジスタ・ファイル８００の制御ロジック８１６は、RD/WR CNTRL 信号が識別した制御レジスタの内容（RD CNTRL REG）をウォッチポイントユニット３０４に出力する。
【０１２７】
後述するように、ＣＰＵ５１は制御レジスタ８０１〜８１４のリード命令に対してチェックポイントおよび対応するウォッチポイントを作るので、ＩＳＵ２００はDO WATCHPT信号およびDO CHKPT信号を発生する。DO CHKPT信号は、チェックポイントを作成しこのチェックポイントに対するチェックポイント番号を含むべきであることを示している。DO WATCHPT信号は、DO CHKPT信号が提供したチェックポイント番号にあるウォッチポイントユニット３０４によって形成されるべきであることを示している。ウォッチポイントユニット３０４は、それぞれが１６のチェックポイント番号の１つに対応する１６のアドレス可能な記憶素子を有する。従って、DO WATCHPT信号およびDO CHKPT信号に応答して、ウォッチポイントユニット３０４は、DO CHKPT信号の中で提供されたチェックポイント番号に対応する記憶素子の中で読み取られる制御レジスタの内容を記憶する。
【０１２８】
リード制御レジスタ命令は、さらに実行を続けるために、ＦＸＵ６００のリザベーションステーションにも提供される。従って、命令のチェックポイント番号はその命令用のリザベーションステーションのエントリの中に記憶される。そして、ＦＸＵ６０１がリード制御レジスタ命令を実行するとき、それは命令のチェックポイント番号をウォッチポイントユニット３０４に出力する。その応答で、ウォッチポイントユニットはＦＸＵ６００より前に読み取られた制御レジスタのデータを出力する。ＦＸＵ６００は次にそれを提供し、また固定小数点レジスタに記憶するために対応する物理宛先レジスタタグをＦＸＲＦＲＮ６０４に与える。従って、ＣＰＵ５１は制御レジスタの読み込みを行うために同期される必要はない。
【０１２９】
制御レジスタ（SPARC-V9 WRPR および WRASRのような）に書込み動作を行うためには、ＦＸＵ６０１はリザベーションステーションにその命令用に記憶された命令データを実行してデータをＤＦＢ２ＢＲＢバスに出力する。図１７に示すように、そのデータは次に制御レジスタ・ファイル８００に送られる。ＩＳＵ２００は、制御レジスタへの書込み命令が発行されまたどのレジスタにこの書込み命令が行われるかを示すRD/WR CNTRL 信号を発生しているので、RD/WR/UPDATEロジック８１６はデータを適切に制御レジスタに書き込むことができる。
【０１３０】
前述したように、典型的なＣＰＵ５１は固定小数点用にレジスタウィンドウを使用している。レジスタウィンドウの動作は、SPARC-V9のアーキテクチャマニュアルに詳細に記載されている。従って、ＩＳＵ２００はいつレジスタウィンドウの制御命令が発行されたかを決定する。そのように行う際に、ＩＳＵ２００はウィンドウ制御命令が発行されたことを示すと共に特定の種類の行うべきレジスタウィンドウ動作を識別するWIN CNTRL 信号を発生する。これ等の信号は、図１７に示すように、制御レジスタ・ファイル８００に渡される。その応答として、RD/WR/UPDATEロジック８１６は次に、WIN CNTRL信号が示すレジスタウィンドウの更新動作を実行する。
【０１３１】
Ｄ．命令実行段階におけるＰＳＵの参加
ひとたび命令がＤＦＢ６２内の適当な実行ユニットにディスパッチされると、ＩＣＲＵ３０１は命令が完了するのを待ち、それぞれの命令のシリアル番号についてエラーおよび状態情報がＤＦＢ６２およびＰＳＵ３００の間の実行データ転送バスをわたって到来することをモニタする。実行段階におけるＰＳＵの参加は、実行状態情報を受信することに限定されている。命令がエラーなしで実行を完了し誤った予測がなかった場合、この命令は非活性化される。しかしながら、実行の例外が発生するかまたは投機的な実行が誤って予測された場合、この命令は非活性化されないかまたはＣＰＵ５１は回復手順を初期化する。Ａ−リングの状態情報は更新されて、正確または不正確な投機的実行および例外的または例外なしの実行を反映する。命令が正しく予測され実行が例外なしに予測された場合、ＩＣＲＵ３０１はシリアル番号に関連するＡ−リングのビットをクリアしてその命令を非活性化する。
【０１３２】
典型的なＣＰＵ５１においては、ＤＦＢ６２は浮動小数点機能ユニット（ＦＰＵ）６００、固定小数点機能ユニット（ＦＸＵ）６０１、固定小数点／アドレス発生機能ユニット（ＦＸＡＧＵ）６０２、およびロード／ストア機能ユニット（ＬＳＵ）６０３、ならびにＦＰＲＦＲＮ６０５、ＦＸＲＦＲＮ６０４、ＣＣＲＦＲＮ６０６、およびＦＳＲ６０７を含む。典型的なＣＰＵでは、それぞれのＤＦＢ機能ユニットはマシンサイクル当たり２つの命令まで処理できるので、命令の実行完了はマシンサイクル当たり最大８つの命令に（ハードウェアの制約によって）制限される。ＣＰＵのある実施例では、ＦＰＵ６００は２つの命令を同時に処理できるが、１つの命令の結果しか出力できない。そのためその実施例では、命令の完了は７つの命令に制限されている。しかしながら、２つの出力を実行できない理由はない。図８はＤＦＢ６２の中の主な機能ユニットと、ＤＦＢ６２およびＩＳＢ６１間を通過する主な信号の機能的ブロック図を示す。
【０１３３】
ディスパッチされた命令がＤＦＢ６２の中で実行を完了すると、命令識別エラーおよび他の状態情報（ERR STAT）は、実行データ転送バス上のＩＣＲＵ３０１（および他のユニット）を含むＰＳＵ３００に同報通信される。データと状態は各命令に対して受け取られるが、順序を乱して受け取られることがある。各命令用の実行状態情報信号には、例えば、実行中にエラーが発生したかどうか、エラーのタイプ、投機的な実行が正しく予測された場合の評価用の条件コード、シリアル番号、命令のチェックポイント（マシンが故障した場合およびバックアップを必要とする場合、マシンがバックアップするチェックポイント）、および命令には制御レジスタに対するリードまたはライト命令が含まれているかどうかの情報を含むことができる。
【０１３４】
同報通信命令のシリアル番号は、図１２のアドレスデコード・ロジック３３４によってＡ−リング３１２にインデックスするために使用される。Ａ−リング上のＡ−リングライトポート３４１，３４２（およびＣＳＮ／ＲＲＰ前進ロジック３２３用のリードポート３４３）の数は、プロセッサのピーク実行帯域幅に一致するように選択するのが好ましい。特定の命令がエラーの原因になる場合、Ａ−リングクリアロジック３３３はこの特定の命令のシリアル番号に相当するＡ−ビットに「０」を書き込み、この命令は以後非活性化されたと考えられる。しかしながら、命令がエラーを伴って終了した場合、Ａ−リングの対応するアクティブビットはクリアされないため、この命令はなおアクティブと考えられ、例外条件またはエラー条件から回復するために、プロセサを回復させる別のステップが用いられる。結局、ＣＳＮは、エラー処理命令に先行するロケーションのあるスロットを指すＩＳＮに追い付くことになる。ＣＳＮはそのＡ−ビットがまだセットされているため、エラー処理命令のシリアル番号を通過できない。そして、実行トラップが行われるとき、エラー処理命令のＡ−ビットは「１」で上書きされ、ＣＳＮおよびＲＲＰが前進することを可能にする。
【０１３５】
トラップのタイプを識別するテイクントラップ（ＴＴ）フィールドはトラップスタックからポップオフされデコードされて、このトラップが実行トラップ（etrap ）であるかどうかを決定する。この実行トラップは次に「DONE」命令または「RETRY 」命令を発行することによって処理される。実行トラップをうまく処理できた場合、トラップハンドラによってETRAP CLEAR 信号が現れ、Ａ−ビットをクリアする。同様のロジックがＭ−リング３２４のクリアＭ−ビットに送られる。
【０１３６】
データ信号および状態信号は、それぞれの実行発行スロットにおける命令のシリアル番号を提供すると共に、どの例外が一時的に早いかを決めることを複数の命令が誤るような場合に、ＰＳＵ３００が例外処理のプライオリティを決定するために使用される。（例外の優先順位については、プライオリティロジックおよびステートマシンＰＬＳＭ３０７に関連してさらに説明する。）典型的なプロセサにおいては、シリアル番号はエラーおよび状態情報よりも１サイクル早く到来するため、エラー情報の到来の前にアドレスデコード・ロジックユニット３３４がシリアル番号をデコードすることが可能であり、このためアドレスデコード・ロジックの中で一層の遅延を招くことなく、ビットをクリアできる場合（エラーがない場合）またはビットをクリアできない場合（エラーがある場合）がある。エラーまたは他の例外が検出された場合、この明細書の中で後述するように、このエラーまたは例外を処理するための適切なステップが実施される。
【０１３７】
Ｅ．命令コミット
これまで説明した構造と方法は、典型的な実施例におけるＡ−リング３１２と６４の命令のアドレス可能なロケーションと同数の命令の発行および実行状態を追跡する構造および方法を提供している。ＣＰＵのリソースを回復する構造と方法が欠けていても、ＣＰＵ５１によって命令に割り当てられた、例えばシリアル番号および関連するＡ−ビットを含むリソースは、例え命令が完了し非活性化されていても、その命令に対して割り当てられたままであろう。Ａ−リングのデータ構造に関連する付加的なポインタを付け加えて、またＣＰＵ５１内の関連する命令の状態の変化に応じてそのポインタを移動させることによって、特に非活性化と命令をコミットすることができ、またリソースをリタイアさせて別の命令によって後で使用するために再生できるようになる。この方法では、リソースは新たに発行された命令が連続的に使用できるようになる。
【０１３８】
コミットシリアル番号ポインタ（ＣＳＮ）３１６は、最新のコミットされた命令を指し示す。「コミットされた命令」とは、エラーなしで実行が完了した命令と定義されるため、それは発行から実行を通って進行し、取り消される必要があるまた取り消されることがないいかなる投機的に発行された予測中央転送（ブランチ）命令よりも前に発行されている。コミットされた命令を取り消す必要はない。定義により、コミット命令シリアル番号（ＣＳＮ）ポインタ３１６より前のすべての命令は、エラーなしで実行が完了しており、取り消される必要はない。ＣＳＮがマシンサイクルごとに進む量は、マシンの最大命令コミット速度を設定する。完了しておりかつ非活性化された命令は、Ａ−リングにおけるこれ等の命令用のシリアル番号に向かってまたは超えてＣＳＮが前進するまでコミットされるとは考えられない。
【０１３９】
ＩＳＮ３１４について前述したように、ＣＳＮ３１６が前進できる最大のポジション数は、ソフトウェア、ハードウェア、または他の制御によってサイクル当たりの命令のより小さな最大数に制限できる。例えば、ＩＳＮの前進をマシンサイクル当たり４つの命令に制限する発明のある実施例では、ＣＳＮはハードウェアに課せられた制限によってサイクル当たり８つに制限される。さらに、ＣＳＮはＩＳＮに等しくなることもあるが、Ａ−リングの周りではＩＳＮを超えて前進することはできない。（Ａ−リングの構造のため、ＣＳＮは厳密には数的にＩＳＮより小さく、等しく、または大きくなることができる。）ＣＰＵが初期化されるとき、ＣＳＮは０（ゼロ）に初期化され、次に命令の状態の変化および、以後説明するように、所定のＣＳＮ前進ルールに従って前進する。
【０１４０】
アクティブビットはアクティブ命令リングの中でクリアされるので、ＣＳＮは所定のルールに従って前進して、実行が完了している命令を「コミット」する。一般に、ＣＳＮのポインタは、すでに実行を完了した命令より遅れることがある（すなわち、非活性化される）。ＣＳＮ／ＲＲＰ前進ロジックユニット３２３は、ＣＳＮポインタおよびＲＲＰポインタのポジションを前進させることに責任を負う。各マシンサイクルで、ＣＳＮ／ＲＲＰロジックユニット３２３はＩＳＮを通らずに、完了した非活性化された命令（Ａ−リングにおいて、アクティビティビット＝「０」）を超えてＣＳＮを前進させようとする。据置きトラップが生じた場合を除いて、ＣＳＮはＡ−リング３１２のＡ−ビットのセットされた条件またはクリアされた条件および実行された（例えば、ソフトウェア、ファームウェア、および／またはハードウェア）所定のルールに基づく場合のみ前進する。ＣＳＮ／ＲＲＰロジックユニットはＣＳＮ用の適切なシリアル番号のアドレスを決定するために、Ａ−リング自体の状態を問い合わせて、ＩＳＮを注意し続ける必要があるだけである。据置きトラップが得られてうまく処理された場合、ＰＬＳＭ３０７はDEFERRED TRAP 信号を、ＣＳＮを１つのシリアル番号のロケーションだけ前進させるＣＳＮ／ＲＲＰ前進ロジック制御・ユニット３２３に送り、このためＣＳＮと後のＲＲＰが例外の原因となる命令を通って前進できるようになる。本発明のある実施例では、ＣＳＮの前進は所定の最大命令コミット速度（マシンサイクル当たり８命令）によって制限される。この速度はＣＳＮポインタを移動させるために必要なハードウェアを制限する希望に基づいて選択される。
【０１４１】
原則として、ＣＳＮはＩＳＮと等しくなるまで前進できる。ＩＳＮ＝ＣＳＮの場合、ＣＰＵは空である、すなわちすべての発行された命令はコミットされている。実際、ロジックを単純化できまた必要なハードウェアを少なくできるので、ＣＳＮの最大の前進量を（マシンサイクル当たり（４命令発行マシンについては）８つに）制限することは有利である。例えば、マシンサイクル当たり４命令発行ＣＰＵでは、ＣＳＮの前進量はサイクル当たり８つのシリアル番号に制限されている。ＣＳＮの前進量を支配するルールは、以下のように要約できる。（１）ＣＳＮの前進はＩＳＮまでである（両端を含む）。（２）ＣＳＮの前進は１マシンサイクル当たり８命令のシリアル番号以下である。（３）前進はまだコミットできないアクティブ命令に相当するＡ−リングの最初の「１」までである（両端を除く）。さらに厳密にいうと、ＣＳＮは一般に次の関係に基づいて前進する（下記の例外に関する修正を参照のこと）。すなわち、CSN=min(CSN+4, ISN, slot A) 、ここで、A(CSN+1), .., A(slot A) はすべて「０」であり、A(slot A+1)=1 である。この式で「min」は最小関数であり、「slot A」はＡ−リング３１２のＡ−ビットのロケーションのことであり、またA(slot A) はそのＡ−ビットロケーションのビットの状態（例えば、「１」または「０」）である。据置きトラップが削除されまた未完成の浮動小数点オペレーションの例外またはデータブレークポイントの例外が検出されたように受け取られたとき、ＣＳＮを前進させるルールは修正される。未完成の浮動小数点の例外およびデータブレークポイントの例外は、ＤＦＢ６２からの状態信号（ERR STAT）を実行することによって識別される。これ等の例外が発生しトラップが処理されると、ＣＳＮは１だけ前進する、すなわちCSN = CSN + 1 となり、ＣＳＮは例外の原因となった命令を通って前進する。ＰＳＵ３００は未完成の浮動小数点オペレーションおよびデータブレークポイントに特に関心を持っており、Ａ−ビットが処理されたトラップに対してクリアされない場合、ＣＰＵは満杯となり機能停止するため、未完成の浮動小数点オペレーションおよびデータブレークポイントの両方はポインタの特別の処理を必要とすることがある。
【０１４２】
ＣＳＮの前進を「maximum(8, ISN, the next A-bit = 1) 」に制限することによって、ＣＳＮを適切なポジションに移動させるための単純なハードウェアの回路を実現できる。例えば、Ａ−リング３１２は８つの８ビットレジスタとして実現できる。これ等８つの８ビットレジスタのＡ−リングのリードポート３４３において、ＣＳＮの周囲のレジスタが読み込まれ、これ等の読み込まれたレジスタの内容は２つの別個の８ビットバスに送られる。これ等のバスを単一の１６ビットバスに連結して、次に０ビットから８ビットまでシフトすることによって、古いＣＳＮを前進させるための８ビット関心ウィンドウを形成する（ＣＳＮの最大の前進量は８）。「最初の１を見つける」回路は、ＣＳＮが前進する量を見つけることになる。
【０１４３】
ＩＣＲＵ３０１はまたコミットシリアル番号（ＣＳＮ）信号および発行転送番号（ＩＳＮ）をチェックポイントユニット３０３に送ることによって、現在のコミットシリアル番号（ＣＳＮ）３１６のチェックポイントユニット３０３に通知し、ＣＳＮより小さいシリアル番号を有する任意の割り当てられたチェックポイントを解放できるようにする。厳密な数学的な順序（すなわち、シリアル番号）ではなく円形のＡ−リング上のロケーションに比例するもので、ＣＳＮは円形のＡ−リング上のロケーションに比例する。チェックポイントについては、この明細書の各所でより詳細に説明している。ＣＰＵ５１のある実施例では、本願に記載したＣＳＮならびに他のポインタは、アドレス可能なＡ−リングのビットロケーションと一致する命令のシリアル番号をエンコードする６ビットのベクタである。
【０１４４】
Ｆ．命令のリタイアメントとリソースの回復
ＣＰＵの割り当て可能なリソースはプロバイダによって回復される。補助ポインタは、命令がリタイアするときに解放されるリソースに対して命令のリタイアメントおよびリソースの再生を追跡および制御するために提供される。リソース再生ポインタ（ＲＲＰ）３１７は、最新のリタイアした命令を指し示し、ＣＳＮを追跡する。「リタイアした命令」とは、実行が完了し、ＣＰＵ５１によって非活性化され、またコミットされた命令のことであり、次の命令の発行の間に、次の使用のために再生された関連するマシンのすべてのリソースを有している。再生されたマシンのリソースには、リネームされたおよび／または再マッピングされた論理レジスタ、アーキテクチャルレジスタ、および物理レジスタが含まれる。これ等のレジスタは、命令のリタイア時に開放されこのため次の命令が発行される間に再割り当てに使用可能とされた命令、命令のシリアル番号（ＳＮ）、チェックポイント、およびウォッチポイントに割り当てられている。マシンサイクルごとにＲＲＰが前進する量は、そのマシンの最大命令リタイアメント速度を設定する。ＣＰＵが初期化されると、ＲＲＰは０（ゼロ）に初期化され、命令の状態の変化および後述する所定のＲＲＰの前進ルールに従って前進する。チェックポイントとウォッチポイントの割り当ておよび割り当て解除については、以下に詳細に説明する。
【０１４５】
命令がコミットされると、リソース再生ポインタ（ＲＲＰ）３１７は、命令をリタイアするためにＣＳＮ３１６の後ろに前進するため、マシンのリソースを解放することができまた再利用のために再生できる。それぞれのマシンサイクルごとに、Ａ−リングのＡ−ビットの状態とＣＳＮを超えない所定のＲＲＰの前進ルールとに基づいて、ＲＲＰ３１７はコミットされた命令を超えて前進しようとする。非コミット命令に割り当てられたマシンのリソースは、たとえ非活性化された場合でも、命令が取り消される必要がないことがはっきりするまで開放されないので、ＲＲＰはＣＳＮを通過できない。非活性化された命令はまだ投機的であるので、命令の完了（非活性化）だけでは命令コミットまたはリタイアメントに対して十分ではない。コミットされた命令のみがリタイアできる。ＲＲＰ３１７はレジスタのリソースを再生できる次の命令を指し示している。Ａ−リング３１２、ＣＳＮ３１６、およびＣＳＮ／ＲＲＰ前進ロジック３２８の中で実行できる所定のルールのセットされた条件またはクリアされた条件のみに基づいて、ＲＲＰ３１７は前進する。
【０１４６】
ＩＳＮおよびＣＳＮの場合のように、ＲＲＰがそれぞれのマシンサイクルごとに前進できるポジションの最大数は、他のソフトウェア、ハードウェア、または他の制御によって、サイクル当たりの命令のより小さな最大数に制限される。本発明のある実施例では、ＲＲＰの前進量は、ＲＲＰのポインタを移動させるに必要なハードウェアを制限したいという希望に基づいて選択された所定の最大命令リタイアメント速度によって制限される。例えば、典型的なサイクル当たり４発行タイプのＣＰＵの実施例では、ＲＲＰの前進とこれによるリソースの回復は、マシンサイクル当たり最大４命令に制限される。これは典型的なマシンの最大命令発行速度に等しいため、ＣＰＵ５１の性能を制限するものではない。ＲＲＰを通常の発行速度よりも遅く前進するように制限すべきではない。さらに厳密に言うと、ＲＲＰは次の関係、すなわち、「RRP+min(RRP+4, CSN) 」に基づいて前進する。原則的に、この方法でリソースの回復を制限することは、本質的なものではなく、ＲＲＰはＣＳＮまで前進できる。ハードウェア設計のトレードオフのために、典型的なＣＰＵ５１に制限が課せられた。ＣＳＮを所定の命令数だけ前進させるに必要なハードウェアは、ＲＲＰを同じ命令数だけ進めるに必要なハードウェアよりも大規模になる。従って、ハードウェアを希望のレベルまで小さくするために、性能に有害な影響がほとんどまたは全くないようにして、ＲＲＰをＣＳＮよりも遅く前進させる。
【０１４７】
１．命令のコミットと命令のリタイアメント時のＲＲＦとリネームマップの更新
図１８を参照する。リソースリカバリは命令のシリアル番号を開放するので、そのシリアル番号を再び使用することができ、その結果、いくつかのレジスタを開放することになり、そのレジスタはフリーリストユニット７００内のフリーリストに戻すことができる。命令がコミットされると、この命令はＩＣＲＵ３０１が発生したCOMMIT VALID信号によって識別される。このCOMMIT VALID信号に応答して、ＲＲＦ３０２の記憶ユニット３６６のコミットされた命令と一致するエントリは、再利用のため制御ロジック３６５によって開放される。
【０１４８】
２．命令のリタイアメント時のＲＲＦの読取り
命令がリタイアするとき（ＩＣＲＵ３０１の説明を参照のこと）およびマシンのバックアップ時（バックトラックの説明を参照のこと）に、ＲＲＦは読み取られる。ある命令がリタイアする場合、ＲＲＰポインタが示すように、制御ロジック３６５は記憶ユニット３６６を制御して、フリーリストユニット７００に、FREE TAG信号の形式で、リタイアした命令に一致する物理レジスタタグを出力する。フリーリストユニットは次に、この物理レジスタタグを空きの物理レジスタタグのリストの中に入れる。
【０１４９】
３．ポインタを使用する精確なステートメンテナンス
Ａ−リング３１２およびその関連するロジックは、発行された各命令の状態に関する正確なマシンサイクルの現在の情報を提供する。ＩＳＮとＣＳＮのポインタは、発行されたアクティブな命令の状態を追跡する。ＣＳＮが特定の命令に向かって前進する場合のみ、ＣＰＵ５１は、その命令をコミットできまたフリーなリソースをその命令の実行と関連付けることができると確信することができ、これにより精確な状態を保存できる。ＩＳＮはエントリを通過するとき、発行された命令にＡ−ビット（A=1 ）をセットするＡ−リングの周りを移動する。ＣＳＮは、コミットするために完了した命令（A=0 ）を捜すＩＳＮに続く。ＮＭＣＳＮは、完了した（非活性化された）メモリ命令（M=0 ）を捜すＩＳＮに続く。ＲＲＰはＡ−リング３１２の周りのＣＳＮの後に従い、コミットされた命令のリソースを再生する。積極的なロード／ストア命令のスケジューリングを説明する場合、その説明にはどのようにＮＭＣＳＮが完了した（非活性化された）メモリ命令（M=0 ）を捜すＩＳＮに続くかが記載されることになる。
【０１５０】
ＣＳＮはＡ−ビットがセットされている命令へは進まない。（ＮＭＣＳＮは、Ｍ−ビットがメモリ参照命令の発行時にクリアされるので、メモリ参照命令を通って前進する。）正確な状態を維持できるポインタを移動させるための他のルールは、以下の通りである。すなわち、（１）ＣＳＮはＩＳＮを通って前進できない（ISN ≧CSN ）。（２）ＣＳＮはＮＭＣＳＮを通って前進できない（NMCSN ≧CSN ）。（３）ＣＳＮはＰＢＳＮを通って前進できない（PBSN≧CSN ）。（４）ＮＭＣＳＮはＩＳＮへ前進できない（ISN ≧NMCSN ）。（５）ＰＢＳＮはＩＳＮへ前進できない（ISN ≧PBSN）。（６）ＲＲＰはＣＳＮを通って前進できない（CSN ≧RRP ）。（７）ＮＩＳＮは常にISN+1 である（加算はモジュロリング長である）。（８）ＩＳＮはＲＲＰまたはＣＳＮに追い付くことはできない（最大限のマシン条件を示す）。好ましい実行方法において任意に実行できる他のルールとして、（９）ＣＳＮおよびＮＭＣＳＮは１クロックサイクルで最大８前進できる。（１０）ＲＲＰはマシンの１クロックサイクルで最大４前進できる。記号「≧」は、より大きいまたは等しい関係は、厳密に数学的に等しいまたは等しくないということではなく、Ａ−リング構造の周りのラップに関して決定されることを示す。
【０１５１】
ＩＳＮポインタ、ＣＳＮポインタ、およびＲＲＰポインタに関して、次のように観察できる。すなわち、第１に、ＣＳＮとＩＳＮとの間のシリアル番号を持つ命令は、マシン内で未決着のアクティブな命令に相当する。これ等の命令は投機的であり、取り消す必要がある。第２に、ＣＳＮとＲＲＰとの間の命令はすでにコミットされたリタイアしてない命令に相当するもので、ＲＲＰによるリタイアメントを単に待っている。これ等のコミットされた命令は取り消されることはない。第３に、ＣＳＮはまだ発行されていない命令の結果をコミットできないので、ＩＳＮを通り越すことはできない。第４に、定義によりＣＳＮ＝ＩＳＮ＝ＲＲＰの場合に「シンク」信号が到着するので、マシンで発行されたすべての（ＩＳＮ）命令はコミットされ（ＣＳＮ）リタイアされる（ＲＲＰ）。第５に、ＩＳＮは概念的に円形のＡ−リングにおいてＲＲＰを超えることはできず、またＲＲＰとＩＳＮとの間のシリアル番号は命令の発行に使用できる。ＩＳＮ＝ＲＲＰ−１の場合（モジュロＡ−リング長）、すべての命令のシリアル番号は割り当てられ、そしてＲＲＰが前進して別の命令が発行される前にマシンのリソースを再利用するために再生できるまで、マシンはストール（待機）しなければならない。無論、ＣＰＵ５１はストールの前に発行された命令の実行、非活性化、完了、およびコミットを継続する。最後に、３つのポインタ間の相対的な関係は、ＲＲＰ≦○ＣＳＮ≦○ＩＳＮであり、ここで「≦○」のオペレータは円形のＡ−リング（モジュロＡ−リング長）内の順序付けを示すものであり、厳密な数学的な関係を意味するものではない。図２０は命令の発行、非活性化、コミット、およびリタイアメントを含む精確な状態を維持するための、本発明による方法の実施例の概略フローチャートである。
【０１５２】
III ．積極的な長レイテンシィ（長待ち時間）（ロード／ストア）命令のスケジューリング
命令のコミットとリタイアメントを追跡し予定する各種のポインタを使用する本発明による方法の説明は、すべての命令のタイプに関係するものであり、現在の投機的な順序なし（out-of-order) のプロセサでは多くの利点を提供する。多くの現在のプロセサは、ロード命令およびストア命令のみが外部メモリを参照し、一方他のすべての命令またはオペレーションはプロセサ内のレジスタを参照するような「ロード−ストア」アーキテクチャとして設計されてきたことを認識することによって、さらに別の利点を得ることができる。
【０１５３】
実際に、ロード命令とストア命令は、この明細書ではレイテンシィ（待ち時間）の長い命令と呼ぶより一般的なクラスの命令に属しており、このレイテンシィの長い命令は完了するには数個のマシンサイクルを必要とし、ロード命令とストア命令が２つのタイプである外部メモリ参照命令を含む。内部レジスタを参照する命令は、一般に完了するためにはより少ないまたは単に１つのマシンサイクルしか必要としない。レイテンシィの長い命令も、割り込みなしに複数のマシンサイクルで実行するように設計された命令である「原子」命令を含んでいる。
【０１５４】
レイテンシィとは、命令が発行されてからその命令の実行が完了するまでの間の経過時間のことである。ロード−ストアアーキテクチャに対する命令のセットは好ましい、というのはそれがレイテンシィの長いメモリ参照（メモリへのロード−ストア参照）を、ＣＰＵ５１の内部レジスタを参照するレイテンシィの短い論理演算または算術演算（加算、乗算、除算、論理比較、など）からデカップリングするためである。さらに、ロード−ストアタイプのアーキテクチャで設計された最も新しいＣＰＵ５１は、このタイプの命令セットから発生した増大するレジスタへの要求事項を支援できる多数の汎用目的のレジスタを有している。
【０１５５】
ロード命令とストア命令は両方ともアーキテクチャの状態を修正する。順序なしに実行するプロセサでは、精確な状態を危うくすることなく高いロード／ストア帯域幅を維持するために、ロード命令とストア命令とを効果的に予定できることが重要である。精確な状態を維持しながらレイテンシィの長い命令を積極に予定する、命令の状態を追跡するための基本的な構造と方法への改良が提供される。ＰＳＵ３００のＩＣＲＵ３０１内の構造と方法は、性能を改良するために後で説明するが、ＤＦＢ６２の、特にロード／ストアユニット（ＬＳＵ）６０３内の構造と方法に協力する。
【０１５６】
Ａ．メモリ命令状態情報記憶
本発明による構造と方法は、長レイテンシィ（長待ち時間）命令を区別する他の信号と、長レイテンシィ命令状態情報を記憶する記憶領域と、命令状態を追跡するポインタを供給する。第21図は、メモリ参照命令（例えばロード／ストア命令）に代表される長レイテンシィ命令状態情報を記憶するメモリ命令リング（Ｍリング）324と前述の能動命令リング311 との関係を示す概念図である。Ｍリング324 は一般にＡリング311 と同じ構造と全体特性を持っているが、Ｍリング状態ビットはＡリング状態ビットとは異る組の規則に従ってセットされる。特にＭリング324 は、命令と命令形式が発行時に能動（ビットが“１”にセットされる）または非能動（ビットが“０”にクリヤされる）として処理される規則を設定する。
【０１５７】
第10図に示すようにISU200が命令を発行する時には、前述のISSUE NOP 及びISSUE VALID と共にメモリ参照命令と非メモリ参照命令とを区別する命令形式信号を供給する。ロード命令、ストア命令、原子命令順序及び他のメモリ参照命令を含め、積極的にスケジュールされることによって利益を生む特定クラスの長レイテンシィ命令を示すようにISSUE MEM を発生させることもできる。
【０１５８】
CPU51 の一種の実施例では、ISSUE MEM はビットでのアサーション（“１”）がｉ番目の命令がメモリ関連であることを示す４ビットベクトル（各ビットは命令発行ウィンドウ中で発行可能な命令の１個に対応）となっている。ISSUE MEM は、第12図に示すようにＭリング324 にビットをセットするためにＭリングセットロジック7335によって用いられる。Ａリング312 内にはアドレスデコードロジック338, 336が設けられている。ISSUE MEM は発行された命令が記憶動作に関係するか否かを示す。ISU200からのISSUE MEM がビットｉでアサートされて同じ命令スロットに対応するISSUE VALID がアサートされると、メモリ命令リング（Ｍリング）324 はメモリ命令リング（Ｍリング）324 にはセットされない。命令がメモリに関連している時にＭビットをセットしないことにより、CSN がクリヤされたＡリングビットへ進むように非メモリコミッテッド命令シリアルｎ番号(NMCSN）ポインタ（後述）がクリヤされたＭビットへ進み、非メモリ参照命令によって進むことを防止されるように、発行時にメモリ関連命令を有効に「非活性化」することができる。ISSUE VALID が“１”の時、即ちメモリ関連であろうとなかろうと発行された各命令に対しては、Ｍビットは必ず“０”または“１”として書かれなければならない。記憶動作用のＭビットをセットしないことによりNMCSN を進めるために記憶関連動作を「無視」することが容易になる。
【０１５９】
命令がエラーなく完了した時には、Ａリング用にクリヤされた時と同じようにＭビットはＭリングクリヤロジック337 によってクリヤされる。発行時にクリヤされたＭビットを持っているメモリ参照命令は、命令の非能動化後もクリヤされたままである。Ａリング312 と同じように、Ｍリングビットは実行トラップのためにクリヤされる。Ｍリング324 状態情報はメモリ関連命令を追跡し積極的にスケジュールするのに用いられる。メモリ参照命令の発行状態、コミッテッド状態、リタイヤ状態を含むすべての状態は、Ａリング311とそれに関連するポインタによって維持される。
【０１６０】
ＡリングとＭリングの前述の類似性からして、当業者はＡリングとＭリングの機能はリングのアドレス可能な場所が複数のビットを含んでいる単一の円形リングのような単一のデータ構造内で発効できることにお気付きであろう。このような複数ビットのリングでは、命令活性（能動または非能動）と命令形式（メモリ、分岐、NOP(ノップ）など）の両方共複数ビットにコード化できる。更に、現在別のＡリングとＭリングのデータ構造に供給されているのと同じ情報を記憶するために、他のコード化スケジュールが提供できよう。以上の説明からして、当業者は、マルチビット書式サポートしNMCSN を収容するためのリングセットとクリヤロジックの変更の仕方、マルチビット円形リング用の CSN／RRP ロジックの変更の仕方、能動と非能動との差異化とメモリ命令の差異化のためにセットには“１”クリヤには“０”とする以外に異るロジック状態または記号を使用できることを御理解されることであろう。
【０１６１】
Ｂ．長レイテンシィ命令を追跡しスケジュールするNMCSN ポインタとPBSNポインタ
Ｍリング324 にＭビットをセットする構造と方法については以上に説明した。本発明の構造と方法では、長レイテンシィ命令、特に外部メモリを参照するロード／ストア命令をCPU51 が有効且つ積極的にスケジュールすることができるようにするため、Ｍリング324に関連して予測分岐命令シリアル番号（PBSN）318 とポインタと非メモリコミッテッドシリアル番号(NMCSN）ポインタ319 が供給使用される。NMCSN とPBSNは前述のように両方共ICRU301 内のポインタレジスタ313 に記憶される。
【０１６２】
NMCSN319は最後の「コミッテッド」命令を支持する（前述）が、命令発行時にメモリ参照命令用のＭビットがクリヤされるので、NMCSN を進めるためにすべてのメモリアクセス命令は有効に無視され、従ってNMCSN は更に高速で進む。ポインタCSN316が進むだけで命令が実際にコミットされる点に御注目頂きたい。後述するようにNMCSN はロード／ストアユニット603 によってだけ使用される。命令がエラーなく完了し、それ以前のすべての命令がエラーなく完了している場合に命令をコミットすることができる。メモリ参照命令が未だ能動であってもNMCSN はメモリ参照命令を追い越して進むことができる。この方法はメモリを参照しない他の長レイテンシィ命令形式を積極的にスケジュールするのにも使用できる。CPU が初期設定されるとNMCSN は０（ゼロ）に初期設定される。
【０１６３】
PBSN318 は一番初期の（一番古い）未解決予測分岐命令のシリアル番号である。この実施例ではPBSNはウォッチポイントユニット304 によって決定される。（ウォッチポイントユニット304 については本明細書の他の箇所に詳述。）未解決分岐命令とは、発行され実行されたことが確認される以前に理論上発行され、実行開始され実行完了されている可能性のある命令（及びその命令から生じる命令順序）のことを言う。換言すれば、命令が発行された時には処理の流れの中にその命令を実行する条件が未だ生じてはいないのである。本発明の構造及び方法では、未解決予測分岐命令が存在しない時にはPBSNは必ずISN と等しくなる。PBSNはNMCSN 進行ロジックでNMCSN 進行のバリヤとして用いられる。NMCSN はポインタPBSNまたはISN を追い越して進むことはできず、メモリ命令が存在しない情況では、ポインタNMCSN はCSN に等しい。CPU が初期設定されるとPBSNは０（ゼロ）に初期設定される。
【０１６４】
Ｃ．NMCSN の進行
NMCSN319はCSN316と対になってメモリ関連動作を行う。CSN を進めるＡリングに対応してNMCSN を進めるＭリングがある。Ｍリングはラップの周囲のＭビット64個から成る。即ち、典型的には64ビットのＭリングで、Ｍビット＃63に後続するビットはＭビット＃０である。Ｍビット＝０とは、メモリ関連命令、例えばロード／ストア命令のような長レイテンシィ命令のことである。
【０１６５】
例示したCPU では、NMCSN ポインタを進める規則は次の示すようにCSN を進める規則に類似している。（１）NMCSN をISN まで進める(ISNを除く）。（２）NMCSN を１サイクルで８個以下の命令シリアル番号以下進める。（３）Ｍリング内の最初の“１”まで進める（この“１”を除く）。
【０１６６】
浮動小数点ユニット(FPU）で「未完浮動小数点動作」例外が生ずるかまたはロード／ストアユニット(LSU）から「データブレークポイント例外」が検出された時にはNMCSN を進める規則が変更される。これら２種類の場合には、前述したCSN と同様にNMCSN はシリアル番号１個だけ進められる。即ち、これらの状態では CSN←CSN ＋１と NMCSN←NMCSN ＋１になる。PSU300は特別のポインタ操作を必要とする未完浮動小数点動作とデータブレークポイント動作に特に関係している。
【０１６７】
ＭリングのインプリメンテーションはＡリングのインプリメンテーションに似ている。例示したCPU ではNMCSN は事実上maximum （８，ISN 、次のＭビット＝１）までしか進めないので、CSN と同様NMCSN を適当な位置へ進めるには簡単なハードウェア回路構成の設置計画をすればよい。（maximum （ｘ，ｙ，ｚ）という表現は、パラメータ値またはｘ，ｙ及びｚという表現の中から最大値を選択するという意味である。）Ｍリング324 は８個の８ビットレジスタとして設置される。これら８個の８ビットレジスタのＭリング読取り口346 では包囲しているNMCSN のレジスタが読取られ、読取り時のこれらのレジスタの内容が２本の別々の８ビットバスに送られる。これらのバスを連結して１本の16ビットバスとし、次にこのバスを０ビットから８ビットへ移動させて古いNMCSN を進める問題の８ビットウィンドウを作る。「最初の１を発見する」回路がNMCSN の進む量を与える。
【０１６８】
NMCSN とPBSNの保守を正しく行えば、精確な状態を曖昧化しない実行のために選択し得るロード／ストア命令またはその他のメモリ参照命令を簡単に決定することができる。精確な状態を曖昧化しない実行のために選択し得るロード／ストア命令は、実行に「インレンジ」だと考えられる。（１）例外を発生する命令がアーキテクチュア状態を変えず、（２）故障命令以前のすべての命令がアーキテクチュア状態への変更を完了し、（３）故障命令以後のすべての命令がアーキテクチュア状態を変えていない時に精確な状態が維持されることをもう一度述べておく。LSU603はまた、長レイテンシィ命令のスケジュールに使用するため、ICPU301 からのNMCSN319とウォッチポイントユニット304 からのPBSN318 を受信する。
【０１６９】
Ｄ．データフローブロック内のロード／ストアユニット(LSU）
本発明の特徴のいくつかの設定は一般的な実行ユニットによって得られるものであるが、長レイテンシィ命令の積極的スケジュールが利益を生み出すのは状態スケジュールに長レイテンシィをサポートする特定の構造が存在する場合である。例えば、ロード／ストア命令と、他のメモリ参照命令を積極的にスケジュールする構造が提供される。局所的な記憶動作に参加しない他の実行ユニットにこの種のテスタを設置する方法は、以上の開示からして当業者には自明であろう。
【０１７０】
LSU は、SPARC-V9アーキテクチュアマニュアルに定義されているリラックスメモリモデル(RMO）とトータルストアオーダリング(TSO）の両モードをサポートする。LSU は固定小数点と浮動小数点両方のロード／ストア命令に対して責任を持つ。LSU は各々がキャッシュへのサイクルである２個までのリクエストを作ることができる。精確な状態を維持するために必要な命令の順序立ては、プロセッサとキャッシュチップとの間で１組のプロトコル信号によって行われる。ISN は12項目のリザーブステーションを内蔵している。LSU とデータキャッシュの間には分割されたトランザクションをサポートする３段階のパイプラインがある。第１段階では命令のアドレスと操作符号とシリアル番号がデータキャッシュへ送られる。理論上の実行に使用されるいくつかの制御ビットも送られる。第２段階ではISU からデータキャッシュへとストア命令のデータが送られる。第２段階ではまた、データキャッシュが次のサイクルで完了する命令のシリアル番号と有効ビットをLSU へ返送する。第３段階ではデータキャッシュが状態とロードデータを返送する。キャッシュミスの場合は、データキャッシュはパイプラインスロットが使用されていない間にデータを返送するか、そのデータのためにパイプラインスロットを開く信号をアサートする。
【０１７１】
第22図は選択兼実行制御ロジックユニット609 と、種々の命令及びデータ関連情報を記憶する命令／データ待ち行列(IDQ) 610 と、ISU200, FPU600, FXU601, FXAGU602からの信号を復号する復号＆フィールド分離ロジック (SSFSL)／620 とを含むロード／ストアユニット(LSU) の機能ブロック図である。詳述すると、IDQ610はインレンジビットフィールド611 と、操作符号フィールド612 と、命令シリアル番号（SN）フィールド613 と、チェックポイント番号614 と、有効性ビットフィールド615 と、アトリビュート(ATR) フィールド616 と、レジスタタグ（TAGS) フィールド617 と、タグ有効フィールド（TV) 618 と、アドレスフィールド619 と、アドレス（AV）フィールド620 と、キャッシュデータフィールド621 を含んでいる。データキャッシュ52はIDQ610とアドレス及びデータを送受信する。
【０１７２】
LSU603が命令を受信すると、デコード・フィールド分離ロジック622 は命令の直接データフィールドにアドレスを含めるか或いはFXAGU602がアドレスを計算しなければならないかを決める。デコードロジック622 がアドレスはFXAGU602によって計算されなければならないと決めると、アドレス有効ビットをクリヤする。しかし、命令の内部に直接データがあるという意味でアドレスが命令の内部に含まれると決めると、アドレス有効ビットをセットして、その命令用のアドレスデータが準備されて利用でき、その命令を実行することができると指示する。タグ信号がデータが有効か否かを指示するように、FPU とFXU から来るタグも同様に操作される。命令がリザーブステーションまたは待ち行列610 に記憶されると、発行された有効信号が実際に実行されたことを示すまで有効信号がクリヤされる（アサートされない）。
【０１７３】
LSU603が命令を実行すると、データキャッシュ52へ直接データを送る。LSU603がデータキャッシュ52からのデータを検索している時には、本発明の設置計画のデータは選択兼実行制御ロジックに入っており、このロジックはタグセンドを含む信号とデータが有効であることを示すデータ有効ビットを送出し、また図示したようにデータを送出するので、組合わせ信号は出て来ない。第22図にはFP TAGS DV F信号とFP DATA F 信号が示されている。
【０１７４】
選択実行制御ロジック609 もアクセス情報を得てこの情報をデータキャッシュ52に与える。この情報のあるものはトラップの型式がメモリ動作に関係しているトラップ情報であって、エラー検出に際してPSU300で用いるエラー信号（ERR STAT) を出力する。
【０１７５】
選択兼実行制御ロジックユニット（SECLU) 609はLSU で実行する命令の選択に責任がある。このユニットはロード、ストア、アトミック動作などの順序立て強制を取り扱う。例えば、アドレス「Ｘ」への若いロードはアドレス「Ｘ」への古いストアを追い越すことはできない。この型のロードはストアのようなアトリビュートアレイでは「強い」とマーク付けされる。このユニットはストアの「順序立て」を開始し、すべての先行するロードとストアが完了するまでストアを開始することはできない。最後に、ストアのシリアル番号はインレンジでなければならない。SECLU609は、有効適格（即ちキャッシュによって現在処理されていない）であってすべての従属性を満し、且つ「弱い」動作（例えばロード）か「インレンジ」であってしかも前のキャッシュミスによって強制されていない命令だけをマスクするロジックを含んでいる。マスクされた命令は次に、マスクロジックロジック準備を満す命令の組から一番古い命令を選択するプリシーデンスマトリックス623 によって処理される。
【０１７６】
SECLU609もメモリアクセスの制御に責任がある。このユニットはキャッシュにコマンドを送り、アクセス完了時にキャッシュ状態情報を受信する。また、キャッシュからの「ロード」データに適当な目的地レジスタタグを貼り、アクセスのアトリビュートのトラックをアトリビュートアレイ616 に保存する。これらのアトリビュートはインレンジで、強／弱な（一般にストアとアトミックは「強く」、ロードは「弱い」）理論上のアクセスで、キャッシュへ送るに適格なものを含んでいる。
【０１７７】
SSFSL620は命令操作符号（オペコード）と、命令シリアル番号と命令チェックポイントとレジスタタグを含む命令パケットをISU200から受信し、情報をデコードし、情報を記憶するためにIDO610で正しいスロットを選択し、情報を適当なフィールドに分離する。SNに関連する各シリアル番号項目とデータは待ち行列中の空のスロットに記憶される。
【０１７８】
SECLU はポインタ値（ISN, NISN, PBSN 及びNMCSN)もPSU300から受信する。CSN, PBSN 及びNMCSN は、命令シリアル番号がインレンジであるかの決定に特に関係する。SECLU609はアクセスが「インレンジ」であるか、即ち、シリアル番号が前述のようにCSN より大きくNMCSN 以下であるかを決めるロジックを含んでいる。インレンジ情報はアトリビュートアレイ616 へ進められてSECLU 内のインレンジファイル611 に記憶される。SECLU はIDQ に記憶されている項目をデータ返送状態及び／または与えられたアクセス用のキャッシュからのデータとマッチングするロジックも含んでいる。IDQ 内のすべての有効項目はそのサイクル中インレンジであるかを見るためにモニタされ、アトリビュートアレイは必要に応じて更新される。待ち行列項目が一旦インレンジになると、再使用されるまではインレンジのままでいる。
【０１７９】
チェックポイントフィールド614 は、待ち行列スライス中のアクセスに対応するチェックポイント番号を含んでいる。各サイクル毎に新しいチェックポイント番号がISB61 から到着する。有効ビット待ち行列615 は、メモリアクセス命令が実際に発行された場合にセットされる有効性ビットを保持する。この情報は命令発行サイクル中にISB61 から来る。ISB によってアクセスが殺された場合にはビットをリセットすることができる。アドレスフィールド618 はすべてのキャッシュアクセス用のアドレスを保持する。DFB62 アドレス発生ユニット（FXAGU) 602からアドレス待ち行列にアドレスが到着する前に、アドレス番号がIDQ アドレスマッチロジックに到着する。制御レジスタの内容に応じてアトリビュートアレイ616 にアトリビュートをセットしてもよい。例えばプログラムオーダビットをセットすると、アトリビュートセクションには「強い」ビットがセットされる。
【０１８０】
１．インレンジメモリ参照（長レイテンシイ）命令の識別
前述のように、SECLU609はICRU301 からのCSN とNMCSN 及びウォッチポイントユニット304 からのPBSNに応じて命令が「インレンジ」であるかを決めるロジックを含んでいる。このロジックはCSN とPBSN（CSN ≦第１窓≦PBSN) の間のシリアル番号を持つ第１窓にある命令が分岐の誤予測に関係なく実行できるか識別する（但し、「≦」の記号は厳密な算術順序よりもメモリ命令リング内で相対順序を示す）。第２のCSN とNMCSN (CSN≦インレンジ≦NMCSN ≦PBSN)の間のシリアル番号を持つ多分小型のウィンドウの命令は、分岐誤予測または実行例外とは無関係に実行するようにスケジュールされる。積極的な実行をスケジュールするためにDFB62 内のLSU200に識別することができる「インレンジ」となっているのはメモリ参照命令である。第23図は厳密な状態を維持しつつロード／ストア命令を含む長レイテンシイ命令を積極的にスケジュールする本発明の方法の実施例を概略的に示すフローチャートである。
【０１８１】
２．ベーシック構造への強化と長レイテンシイ（ロード／ストア）命令の積極的スケジュ
ール
本発明のベーシックな方法へと強化する際には、ロード／ストア命令とメモリを参照する他の命令を更に積極的にスケジュールできるようにしてNMCSN を進め性能を改善するために「非故障」として知られている所定の命令を無視するように規則を設定することができる。
【０１８２】
IV．チェックポイント法
チェックポイントは既知の瞬間におけるマシン状態の「スナップショット」である。チェックポイントは、誤予測分岐または実行例外が生じた場合に理論上の命令順序を元に戻すために前のマシン状態を素速く回復するための方法と構造を提供する。本発明による典型的なプロセッサでは、命令発行サイクルの間にチェックポイントが作られる。本発明の方法では、チェックポイントの回復に基づくマシン状態の回復はマシンの「バックアップ」と定義される。
【０１８３】
本発明ではチェックポイントは数クラスの命令用に創られる。即ち、（１）分岐のような予測プログラム制御転送命令と（２）制御レジスタ値を変更するサイドエフェクトを持っているかも知れない命令である。
【０１８４】
制御転送命令（分岐のような）は予測されプログラムカウンタ（PC）不連続を生ずるかも知れない。本発明の構造と方法を設定するCPU51 では、プログラム制御命令（分岐またはリターン型のジャンプ及びリンク）が誤予測された場合に素速くマシンのバックアップを行うために、各予測プログラム制御命令に対してプロセッサがチェックポイントを作る。これらの情況でAPC とNAPCがセーブされないと、誤予測されたプログラム制御命令の再発行と再実行せずに正しいFPC とAPC とNAPCを再構成することは困難である。このようなプログラム制御命令の各々に対してチェックポイントが作られているので、予測できてしかも同時に未解決のままでいるプログラム制御命令の数は、マシン内に許容されるチェックポイントの最大数によって制限される。予測プログラム制御命令は前述したSPARC-V9 BPr, FBcc, FBPcc, Bcc, BPcc及びJMPL〔rd＝０〕命令のような命令とすることができる。
【０１８５】
プログラムフローを変える他の型の命令もチェックポイントで調べることができる。これらの命令にはCALL, JMPL, TCC, RETURN, DONE 及びRETRY のようなSPARC-V9命令が含まれる。
【０１８６】
制御レジスタ値を変更するサイドエフェクトを持つことができる命令を含むマシン状態を変更する命令に対してもチェックポイントが創られる。ある制御レジスタをチェックポイントすることによってこの制御レジスタを理論上変更することができる。これらはSPARC-V9 WRPR 及びWRASR 命令のような制御レジスタファイル800 内の制御レジスタへの書き込みを含み、SPARC-V9 SAVED, RESTORED及びFLUSHW命令のようなレジスタウィンドウ制御命令も含む。しかし、性能を失わずにチェックポイントされる状態の量を少くするためにすべての制御レジスタがチェックポイントされる訳ではない。
【０１８７】
更に、例示ＣＰＵ５１では、前述したように、制御レジスタのデータは後刻実行のためにFXU601で利用できるようにウォッチポイント304 に記憶されるので、制御レジスタファイル800 内の制御レジスタの読取りにはチェックポイントが必要である。これらはSPARC-V9 RDPR 及びRDASR 命令のような命令とすることができる。
【０１８８】
更に、発行トラップを頻繁に起す命令もチェックポイントを必要とすることがある。これらには、SPARC-V9 SAVE 及びRESTORE 命令のようなウィンドウ制御命令と、例えばSPARC-V9 LDD／LDDA及び STD／STDA命令とすることができる設置計画されない命令が含まれる。
【０１８９】
トラップも理論上エンターされうるが、そのように発行した時にはチェックポイントされる。従って、後に述べるように実行トラップ(etrap) または発行トラップを生ずる命令に先行して発行される命令にはチェックポイントを作ることができる。更に、理論上トラップが取られた場合に復帰が行えるように、トラップ操作ルーチンの前にチェックポイントが作られる。
【０１９０】
理論的に制御することができないサイドエフェクトを持つ命令、即ち、例外を生ずることが稀で多量のチェックポイント情報を必要とする命令に対しては、効率上の理由から命令のチェックポイントを行わず、その代り発行前にマシンを強制的に同期化するように決定を行うことができる。即ち、理論的に制御できないサイドエフェクトを持つ命令を発行する前に、CPU をマシン同期とし、すべてのペンディングな命令がコミットしリタイヤされた(ISN＝CSN ＝RRP)とするのである。
【０１９１】
どの命令をマシン同期命令とし、どの命令をチェックポイントするかを選択する時には重要な性能／設計の引き渡しが行われる。同期のための性能低下は、チェックポイントされたマシン状態を記憶するために要するチップ領域を含め、この種の命令の理論上の操作に関係する追加のロジックの複雑性とプロセッサ領域と比較して評価される。
【０１９２】
多くの異る型の命令がレジスタ中のデータ値を変更する。従来のチェックポイント法ではレジスタ状態を回復するためにレジスタデータ値をチェックポイントする。対照的に、本発明の方法をマシン設置する時には、実際のレジスタデータ値をチェックポイントせず、代りにレジスタ再命名マップをチェックポイントすることによってCPU51 が以前のレジスタ状態を回復することができる。CPU51 に記憶されているチェックポイントされた状態情報の量を大幅に減少できるので、「レジスタデータ値」ではなくて「レジスタ再命名マップ」をチェックポイントするのが有利である。
【０１９３】
例示したマシンでは、コンカレント命令のサポーティング64により、16個までのチェックポイントを任意の時に利用できる。実施例ではISU200は発行サイクルにつき最大１個のチェックポイントの割り当てに制限されている（ハードウェアの考慮により）。しかし一般的には、１サイクルで１個または任意の複数個のチェックポイントを割り当てることができる。例示したCPU51 では、同一のマシンサイクル中に発行できる命令の型と組み合わせを制限するように所定の規則が設置されている。例えば例示したCPU では、１個のマシンサイクル中１個の制御転送命令だけを発行でき、従ってそのサイクルに状態をセーブするに要するチェックポイントは１個だけである。このチェックポイントの制限により、サイクル中に最大数（例えば４個）の命令を発行できない場合（発行ウィンドウで待期中の命令の型による）がある。更に多数または少数のチェックポイントを供給することもできるが、その数はマシンの中で共時的に目立つチェックポイントを必要とするナンバー命令のようなファクターに基づいて選択される。
【０１９４】
実施例では、能動命令リング312 が64個もの命令を同時にサポートする。後に説明するように、本発明の構造と方法は、ある種の命令型式のチェックポイントを行い、ISU200からのTIMEOUT CHKPNT信号に応じて所定の命令サイクルタイムアウト間隔で任意の命令型式のチェックポイントを任意に行う。従って、サポートされるチェックポイントの数は能動命令リング312 によってサポートされる命令の数より大きくないことが必要で、この数は一般に命令の数より小さい。例示のCPU51 では16個のチェックポイントを割り当てることができ、これらのチェックポイントの各々はチェックポイントを生じた命令がリタイヤされた後に回復されるマシン資源になっている。
【０１９５】
例示のCPU51 では、チップのルートを減らし性能を向上させるため、DO CHKPT信号に応じてチェックポイントデータ（マシン状態）はチェックポイント記憶ユニット内のCPU51 全体に局所的にセーブされる。しかし、チェックポイントされたデータを記憶消去されたチップにできることは自明である。
【０１９６】
チェックポイント記憶ユニットの各々は16個のアドレス可能記憶素子または項目を持っている。各記憶項目は後述する16個のチェックポイント番号の中の１個に対応する。従って第６図を参照すると、DO CHKPT信号に応じてAPC とNAPCレジスタ113 及び114 (CHKPT PC 及びCHKPT NPC)の内容はPCロジック106 によってPCチェックポイント記憶ユニット107 に記憶される。同様に、制御レジスタの内容（CHKPT CNTRL REG)は、第17図に示すように制御ロジック816 により制御レジスタチェックポイント記憶ユニット817 に記憶される。更に第16図に示すように、FXRFRN604 とCCRFRN610 と、FPRFRN605の各々の再命名マップを表わすデータはチェックポイント記憶ユニット616 に記憶され、フリーリストロジック701 のフリーリスト（CHKPT FREELIST) を表わすデータはフリーリストチェックポイント記憶ユニット702 に記憶される。そして後述するようにトラップスタックユニット815 の或る種の内容もチェックポイントされる。
【０１９７】
ISU200はチェックポイントを作る時機の決定に責任がある。BRB59 から受信した命令をデコードして、どれかがチェックポイントを要する前述の型であるか決定する。そして後述するように、所定数のマシンサイクルが行われた後にチェックポイントを作るようにPSU300がTIMEOUT CHKPT 信号によって指示した時、チェックポイントを作る時機を決定する。この結果、ISU200がチェックポイントを作ることを指示し、そのチェックポイントのチェックポイント番号を指定するDO CHKPT信号を発生する。
【０１９８】
第24図はPSU300内にあるチェックポイントユニット303 の機能ブロック図である。ISU200によってDO CHKPT信号を主張すると、１個または２個以上の命令に対してチェックポイントを作るようチェックポイント（CKPT) 303 に指示し、命令スロット０−３で発行されたどの命令がチェックポイントを要求したかを示す。少くとも１個のフリーチェックポイントレジスタが利用できなければチェックポイントを割り当てることができないから、DKPT303 はISU200へCHKPT AVAIL 信号を送らなければならない。CHKPT は少くとも個のチェックポイントを割り当てることができることをISU に知らせ、チェックポイント番号が各命令と関係づけでき、ISU200によって作られたチェックポイント番号（CHKPTs) に合体でき、DFB62 へ進められるようにチェックポイント番号をISU に知らせる。これらの信号はISU200によるDO CHKPT信号の発行に先行する。チェックポイント番号を割り当てることができない場合は、チェックポイント資源が利用できるようになるまでISU による信号発行を待機させる。簡単に言えば、実行例外または誤予測から回復させるのに必要な場合だけ記憶されているチェックポイントを使用し、そうでない場合はチェックポイントの割り当てを解除し記憶スペースを解放して再利用するのである。（チェックポイントを含むマシン資源の割り当てと割り当て解除については後に詳述する。）後述する本発明のベーシック構造と方法へ強化するにも、所定数のマシンサイクルまたは所定数の命令が発行され、チェックポイントを作ることなく終結した時にデコードされた命令型式とは無関係にタイムアウトチェックポイントが作られる。
【０１９９】
チェックポイントユニット303 はチェックポイントのトラックを維持し、ISU200が指示した時にチェックポイントを割り当て、必要でなくなった時にチェックポイントを解放する。コミッテッドシリアル番号がチェックポイントのシリアル番号(CSN＞SN) ｉ＋１よりも大きくなるとチェックポイントｉをリタイヤさせることができるが、これは本発明の方法と構造によればマシン状態を任意の命令の境界に再記憶させることができるので、コミットされた命令よりも順序的に前にある命令までマシンを逆追跡する必要がないからである。PSU300はシステムの他の構成要素にもいつチェックポイントを割り当て解放するかを知らせるので、これらの構成要素はリタイヤされたチェックポイントに使用されていた局所データ記憶領域を再使用することができる。チェックポイントユニット303 はまた、いくつのチェックポイントが自由で割り当てできるかをISU200に知らせる。チェックポイントの使用については、後にバックアップ兼バックステップユニットに関連して詳述する。
【０２００】
チェックポイント303 は５種の主要機能を持っている。第１に、ISU200からのDO CHKPT信号に応じて、チェックポイントレジスタユニット352 内のチェックポイントデータレジスタ構造（CHKPNT REG i）のリストの保守によってISU200の要請する通りにチェックポイントの割り当てを制御する。制御転送信号が発行されると、DO CHKPTは１個または２個以上のチェックポイントが作られるべきことと、それぞれのチェックポイント番号の位置（例えば０−15）を指定する。本発明の構造と方法を強化する際には、後にベーシックなチェックポイント法への強化において述べるように、TIMEOUT CHKPTがチェックポイント303 によって発生されISU200へ送られて命令型式とは比較的無関係に所定のタイミングでチェックポイントを作る。このタイムアウトチェックポイントは、チェックポイントが作られなかった命令の効果を元に戻そうとするサイクルの最大数を決めて制限するために供給される。（チェックポイントできる命令型式が同じ命令ウィンドウから発行される時には、タイムアウトチェックポイントの形成は延期されるかキャンセルされる。）
【０２０１】
第２に、チェックポイントは或る与えられたチェックポイント（ｎ）を追い越して進んだCSN に基づくチェックポイントと仮に次に位置しているチェックポイント（ｎ＋１）をリタイヤ（クリヤ）させる。特定のチェックポイント番号を過ぎたCSN を決めるメカニズムは、CSN をチェックポイントレジスタに記憶されているシリアル番号と比較することである。チェックポイントレジスタに記憶されているシリアル番号とは、チェックポイントを形成した命令の次の命令のシリアル番号である。CSN がチェックポイントｎとｎ＋１を追い越して進んだ場合にだけ、例えばICRU301 からのISN とCSN に応じてチェックポイントｎをリタイヤさせることができる。
【０２０２】
第３に、チェックポイント303 は、ISU によってチェックポイントが割り当てできるか否かとチェックポイントの位置番号を含め、ISU200へ送られる信号CHKPT AVAIL によって割り当てられる次のチェックポイントは何かをISU200に知らせる。第４に、チェックポイント303 は割り当てられたチェックポイントに対応する命令のシリアル番号を記憶し、他のユニットによって要請された時に、ICRU301 に対してチェックポイントに関連するSNとSN＋１の両方を供給する。第５に、顯著な有効チェックポイントの中のどれを殺すかをバックトラックユニット305 内のバックアップユニット402 に示す命令キルベクトル（KILL VEC) を発生し、信号CHKPNT SN とCHKPNT SN INC によってICRU301 に対し、マシンのバックアップに関連してどのチェックポイントをリタイヤさせられるかを知らせることによって実行マシンのバックアップに参加する。（マシンのバックアップは後に詳述。）
【０２０３】
Ａ．チェックポイント割り当てレジスタ
チェックポイント割り付けレジスタ352 の構造は表１に概略的に示してある。最初の６ビットは状態ビットである。ビットＶはチェックポイントの有効性（割り付け）を示す。ビットCP（チェックポイントが追い越されている）はCSN がこのチェックポイントのSNを追い越したかを示し、ＱはCSN 前進トラックを維持する５種の状態のうちの１つを示し、GT（より大きい）はCSN が割り付け時のチェックポイントのシリアル番号よりも大きいか否かを示す。ビットGTはCSN がいつこのチェックポイントを追い越したかを決定する。固有の機能性を得るためにビットＶが「１」にセットされビットCP「０」にセットされるチェックポイント位置０以外では、ブーツアップ時にビットＶとCPをゼロにセットすべきである。TSN フィールドはチェックポイントされたシリアル番号に後続している次のシリアル番号を示す。この設置計画では、チェックポイント番号はセーブされず、位置「ｉ」用のチェックポイントデータ構造にＶビットをセットするとチェックポイント「ｉ」が割り付けられたことが示される。チェックポイントレジスタ（CHKPNT REG i) に可能な状態は表２に説明してある。例示したCPU では、チェックポイントの割り付け中、ビットＱは「000 」か「001 」にリセットされる。ビットＱはＡリング312 の周囲のCSN の進行に基づく状態を変える。表３にＱビットの状態と遷移を示す。
【０２０４】
【表１】
2006107536.tif 000003
【０２０５】
【表２】
2006107536.tif 000004
【０２０６】
【表３】
2006107536.tif 000005
【０２０７】
Ｂ．チェックポイントの割り付け
命令SN用のチェックポイントを割り付ける時には、チェックポイント割り付けロジックユニット351 が、チェックポイント「１」が有効でリタイヤされていないことを示すためにCHKPNT REG iでＶビットを１にセットし、CPビットをゼロにセットする信号をチェックポイントレジスタとコントロールユニット352 へ送る。割り付けられるチェックポイントは、ISU に送られて割り付けに使用できる次のチェックポイント番号を知らせる信号と、チェックポイントの形成を可能にさせる信号を含みチェックポイントを作る命令のシリアル番号を識別するISU からのDO CHKPNT とによってCAL351内で決められる。チェックポイント割り付けの時にCSN の位置を示すため、ビットＱは表３に示すように書き込まれる。この情報はリングの周囲（例えばロケーション63から逆進してロケーション０まで）からのCSN の遷移を検出するために用いられる。割り付けられたチェックポイントは、チェックポイントのシリアル番号を識別し駆動信号としても働く信号DO CHKPNT によって決定される。更に、チェックポイントに対応するシリアル番号はチェックポイント割り付けロジックユニット351 によって計算されるが、１だけ大きくされたシリアル番号(NSN＝SN＋１）だけがレジスタに記憶される。シリアル番号NSN は２種の異る条件で用いられる。第１に、NSN はICRU301 へのデータバスで大きくされたチェックポイントのシリアル番号になる。第２に、NSN はチェックポイントに後続する命令に故障命令があるか否かを決定するのに用いられる。SNではなくてNSN(SN＋１）をセーブすることによってロジックを節約し、チェックポイントの後のシリアル番号を識別する信号の発生を高速化するのである。この代りに、大きくされたシリアル番号信号を発生するために設けられているレジスタとロジックにSNそのものを記憶することができる。
【０２０８】
次のようなチェックポイント割り付け法が典型的である。チェックポイント形成信号が主張される(DO CHKPNT) と、Ｖビットフィールドが「１」にセットされ（CHKPNT REG i〔Ｖ フィールド〕＝１）、CPビットフィールドがクリヤされる（CHKPNT REG i〔CP フィールド〕＝０）。次にチェックポイントが形成された命令のシリアル番号がコード化された４ビットのチェックポイントロケーションベクトルから引き出されてチェックポイントのシリアル番号フィールドに記憶される（CHKPNT REG i〔SN フィールド〕）。例えばCPU51 の実施例では、「0000」はチェックポイントロケーションNISNを示し、「0001」はNISN＋１を示し、「0011」はNISN＋２を示し、「0111」はNISN＋３を示し、「1111」はNISN＋４を示す。
【０２０９】
Ｃ．チェックポイントのリタイヤ
チェックポイントはチェックポイントクリヤ／リタイヤメントロジックユニット353 でクリヤまたはリタイヤされる。チェックポイント303 はサイクル毎にISU200によって要請される数だけのチェックポイントを必要とする。現在のチェックポイント（ｎ）と次のチェックポイント（ｎ＋１）を通るCSN に応じてレジスタ352 のＶビットフィールドをクリヤすることによってチェックポイントがリタイヤされる。チェックポイント割り付けロジックユニット353 は、チェックポイントレジスタ352 でリタイヤされるチェックポイントを指示するために用いられるOLDEST ACTIVE CHECKPOINTと呼ばれるポインタを維持する。チェックポイントをリタイヤさせる手続きは次の通りである。チェックポイント(CKPSN) に記憶されているシリアル番号とユニットされたシリアル番号(CSN) ポインタ（例えばCKPSN CSN)との差を計算することによってリタイヤロジック353 に「CSN PASSED」と呼ばれる信号が発生する。CSN はICRU301 に維持され、各サイクルでチェックポイントユニット303 へ送られる。CSNがある与えられたチェックポイント（ｎ）と現在その次にあるチェックポイント（ｎ＋１）を追い越して進んだ時か、チェックポイントのシリアル番号を追い越したマシンバックアップがある場合だけ、チェックポイントをリタイヤさせることができる。
【０２１０】
本発明の構造と方法の一実施例では、CSN をすべてのチェックポイントのシリアル番号と同時に比較するロジックを供給することにより、CSN がチェックポイントを追い越して進んでいることが決められる。比較の際には、CSN がチェックポイントのシリアル番号を追い越したか否かを決定するのに単に試験よりも大きいことだけでは不充分な場合があるので、Ａリング312 の特性の周辺のラップも考慮する（モジュロ−リング長）。
【０２１１】
Ｄ．マシンバックアップに関するチェックポイントの保守
次のマシンサイクルを開始するためにKILL VEC信号を用意するようチェックポイントユニット303 に知らせるWILL BACKUP 信号とBACKUP CHECKPOINT 信号をバックトラップ305 から受信すると、KILL VECはコミットされている命令を殺す。殺される命令は、チェックポイントの命令のシリアル番号を指定するBACKUP CHECKPOINT 信号と最後のコミッテッド信号から引き出される。CSN とバックアップチェックポイントの間にあるすべての命令が殺される。
【０２１２】
CPU51 の一種の実施例では、BACKUP CHECKPOINT はバックトラック305 内のバックアップユニット402 によって発生される信号で、状態を回復するためにどのチェックポイントをバックアップするかCPU51 に知らせる。ISN とバックアップチェックポイントの間にある命令のどれを殺すかを指示するため、命令キルベクトル信号（KILL VEC）もバックトラックによって発生される。例えば、命令キルベクトルは殺される命令を識別するホットビットを持つマルチホット信号とすることができる。この代りに他の命令型式を使用することもできる。
【０２１３】
チェックポイント303 は、バックアップ中にICRU301 がISU を調整することができるように、チェックポイントのシリアル番号を識別するチェックポイントレジスタ情報をICRU301 に供給する。チェックポイントユニット303 は、未完浮動小数点例外またはデータ区切り点例外が検出された時（CHKPNT SN INC)、ISN を調整するためにICRUが使用するシリアル番号も供給する。
【０２１４】
Ｅ．タイムアウトチェックポイントの強化
従来のチェックポイント技術では、命令のデコードされたアトリビュートに基づいてチェックポイントが作られる。連続するチェックポイント（チェックポイント境界のついた）の間の命令の数が制限されないように、チェックポイントは或る種の命令のアトリビュートに対してだけ作られる。命令実行例外が起こった時、故障命令以前のCPU51 の状態を回復するためにCPU51 は多数のマシンサイクルを費さなければならないかも知れない。従って、故障命令に達する前にCPU51 が命令を再実行するか元に戻すために費す時間は、チェックポイントの境界内にある命令ウィンドウのサイズと命令の数の関数になる。ここでの命令ウィンドウのサイズとは、CPU51 内で任意の時間に目立つことを許される命令の最大数のことである。（例示したCPU51 では、任意の時間に64個までの命令が目立つことができる。）
【０２１５】
本発明の構造と方法に強化する場合、チェックポイントはデコードされた命令のアトリビュート（だけ）に基づいて作られるのではなく、むしろCPU51 内のタイムアウト状態によって作られる。タイムアウト状態はチェックポイントを作らずに経過した命令発行サイクルの数に基づいている。例えば、最近発行された命令が従来チェックポイントを作られない型であればチェックポイントは形成されていない。タイムアウトチェックポイントは命令の最大数をチェックポイントの境界内に制限する。命令ウィンドウのサイズがチェックポイント境界内にある命令の最大数よりも大きい限り、例外が生じた場合に、プロセッサは従来の命令デコードに基づくチェックポイント技術よりも速くチェックポイントされた状態を回復することができる。更に、本発明のチェックポイントの強化により、CPU51の状態回復の命令ウィンドウサイズへの依存性が除去される。
【０２１６】
タイムアウトチェックポイントは従来のチェックポイントを設置する構造と方法でも使用することができる。更に、タイムアウトチェックポイントは、本発明のバックアップ及びバックステップ構造と方法と同様、従来のプロセッサバックアップ技術と共用することができる。
【０２１７】
タイムアウトカウンタ355 は、そのマシンサイクル中に少くとも１個の命令が発行されたことを示すINSTRA ISSUED 信号をISU200から受信して命令発行サイクルの数をカウントする。チェックポイント（命令デコードに基づくチェックポイントまたは以前のタイムアウトチェックポイント）を作ることなく経過した命令発行サイクルの数が所定のカウント数を越えると、タイムアウト状態が生じたのでチェックポイントを形成すべしというTIMEOUT CHKPNT信号をISUに送る。この時ISU200はチェックポイントを形成すべしと示すDO CHKPT信号を発生する。前述したように、発行された信号がチェックポイントを必要とする型であるとISU200が決定した時にもこの信号を発生させることができる。チェックポイントが実際に形成された場合、そしてこのような場合だけ、ISU からのDO CHKPNT 信号によってカウンタ356 がセットされる。チェックポイント境界内に許される命令の最大数は、カウンタの最大命令発行率（マシンサイクル毎に発行される命令の最大数）とタイムアウト値によって決められる。
【０２１８】
タイムアウトチェックポイント上の変化が有利であろう。例えば、タイムアウトチェックポイントと同一サイクルに正当に発行される命令デコードが正当である場合、命令デコードに基づくチェックポイントが優先的に作られてタイムアウトカウンタをリセットするように働く。更に、この時すべてのチェックポイントが割り付けられてタイムアウトチェックポイントが正当になった場合には、命令デコード型のチェックポイントのために厳密な状態を維持するために要するようなマシン停止を行わずに、所定の規則（例えば１サイクル延期）に従ってタイムアウトチェックポイントを遅らせることもできる。
【０２１９】
Ｆ．任意の命令境界での厳密状態の維持及び回復
本発明の方法によれば、任意の命令境界で厳密状態を維持することができ、その命令境界に状態を回復するために要する情報量を最小にすることもできる。ここで言う「命令境界」とは、命令が発行される直前（または直後）にある連続する命令の組の中の点に対応する。各命令が命令境界を作る。
【０２２０】
従来の命令のチェックポイントではプロセッサ内のチェックポイント境界（即ち、チェックポイントされた命令でだけ）厳密状態を維持することができるが、従来のチェックポイント法は各命令で用いられ、そのように用いられた場合でもサイクル毎に複数命令を発行するマシンに対してはサイクル毎に同数のチェックポイントが必要であるため、CPU51 の性能を改善するよりも阻害するであろう。本発明では、サイクル毎に１個の命令だけがチェックポイントを要するように種々の命令の発行規則が設定され、バックステップ法と構造がより細かい命令レベルの回復を行う。命令のチェックポイントは理論上の命令順序によって不正に変更されるかも知れない状態のようなアーキテクチュア（マシン）状態を保護し後に記憶するために命令のチェックポイントが使用される。
【０２２１】
チェックポイント境界に厳密状態を維持する従来のチェックポイント法が知られている。しかし、マシン状態を捕捉し後に回復する方法としてだけ従来のチェックポイント法を使用すると、理論上順序外の実行中、間隔の狹い命令境界に厳密状態を維持することができない。
【０２２２】
Ｇ．チェックポイントされるデータ量を減らすよう所定命令に対してマシンを同期させる
方法
チェックポイントは、命令型式とは無関係な固定サイズまたはチェックポイントが作られているオペランドである。例えば、 200個の状態値を変えることができる命令を持つマシン(CPU) では、命令自体がせいぜい８個の値を変更できる場合でも、形成された各チェックポイントは 100個の状態値を記憶しなければならない。本発明の実施例では、特定の命令の各々によって変更される状態の量と典型的な処理において特定命令の各々が発生する統計上の頻度を考慮して、すべてのチェックポイントのチェックポイントされたデータの量を減らすように構造と方法が設定される。
【０２２３】
この設計技術を用いると、最適なチェックポイントサイズを決めてマシンに設定することができる。第１に、各命令によって変更できる状態が決定される。第２に、ある代表的な名目上の処理作業に対して各特定命令が発生する統計的な頻度が決められる。各命令用の状態記憶要件が検討される。設計の目標は、稀にしか発行されず頻繁に発生する命令よりも比較的多量のチェックポイントを必要とする命令を識別することである。チェックポイントする命令を決めるにはリニヤまたはノンリニヤな最適化技術を用いることができ、チェックポイントされた状態を減らすために最大チェックポイント記憶に基づく非算術的な規則を用いることもできる。単純化した例を次に説明する。
【０２２４】
チェックポイントされる状態が減少している単純化した例
命令の組の中のどれかの命令によって変更できる状態
【数１】
2006107536.tif 000006
【０２２５】
命令Ａによって変更(mod) できる状態
【数２】
2006107536.tif 000007
【０２２６】
命令Ｂによって変更(mod) できる状態
【数３】
2006107536.tif 000008
【０２２７】
命令Ｃによって変更(mod) できる状態
【数４】
2006107536.tif 000009
【０２２８】
命令Ｄによって変更(mod) できる状態
【数５】
2006107536.tif 000010
【０２２９】
命令Ａ，Ｂ，Ｃ及びＤの各々がチェックポイントされる場合には、各チェックポイントは状態１〜10のすべてを記憶しなければならない。しかし命令Ｃは稀にしか実行されないので稀に行われるこの命令の実行中マシンを同期させることによってCPU51 のスローダウンが必要である場合には、命令Ｃのチェックポイントを行わないことによってチェックポイントされる状態を10状態から３状態、即ち、状態１と状態４と状態８に減らす。
【０２３０】
マシンを同期させると、ペンデング命令がコミットしリタイヤされるまでマシンの同期を要する命令の発行が遅れ、次に同期を要する命令が順次連続して実行される。マシンが同期モードで作動している時には、状態への逆書き込みが行われる前に例外条件が識別されるので、厳密状態を維持するために命令のチェックポイントをする必要はない。
【０２３１】
Ｈ．チェックポイントされるデータ量を減らすようにレジスタリネームマップをチェック
ポイントする方法
更に、誤予測分岐、故障、実行エラーその他の処理中の異状からマシン状態が回復できるようにチェックポイントが発生された時の全機状態が記憶されるため、従来のチェックポイントは多量の情報を含んでいる。従来のチェックポイント法では変化する状態だけを変更する試みは行われていない。
【０２３２】
例えば、64個の命令を並行して発行することができる従来のチェックポイント法をCPU51 内の各命令に適用すると、各命令に対して１個、つまり64個までのチェックポイントを維持しなければならず、４発行のマシンでは、マシンサイクル毎に４個ものチェックポイントを作らなければならないことになる。従来のチェックポイントに記憶される状態の特定の型と量はCPU51 のアーキテクチュアと命令の組によって異るが、従来の各チェックポイントは任意の命令によって変更できる各状態用の状態情報を含んでいる。即ち、命令が状態を変更し得るか否かに拘らず、従来のチェックポイントは各変更可能状態用の状態情報を含んでいる。従来のチェックポイント法では、チェックポイント毎に変化する状態だけではなく、マシン状態を回復するに必要なすべてのマシン状態が各チェックポイントに対して書き換えられる。
【０２３３】
本発明の方法では、レジスタがリネームされリネームマップがレジスタリネームマップに記憶されている。レジスタのリネームについては他の箇所で説明する。レジスタ名のリネームは処理に利用できるアーキテクチュアレジスタの数を効果的に増加するのに役立つもっと多数の物理レジスタにアーキテクチュアレジスタをマッピングする方法である。本発明の方法では、データ値そのものではなくてリネームされたレジスタをチェックポイントとすることによって、新しいチェックポイント法に必要な記憶の量を減らす。前述した通り、以前に発行されたすべての命令が実行されコミットされ、その資源がリタイヤされる(ISN＝CSN ＝RRP)ように、厳密状態を維持するために多量のチェックポイントされたデータを必要とする或る種の所定の命令はマシン同期を起させる。同期型の命令故障が誤予測されると、状態は変更されず、命令の実行結果が状態を変更することを許される前に、故障が処理されるかまたは代りに命令通路が追跡される。
【０２３４】
マシン状態が素速く回復されるように、コントロールレジスタを変更できる非同期を要求するすべての命令はチェックポイントされる。命令によって変更されたすべての状態は、前述のようにチェックポイントされてCPU51 内に局所的に記憶される。更に、コントロールレジスタを変更しない命令を実行する状態はCPU51 をバックステップすることによって記憶できる。第26図は、タイムアウトチェックポイントを形成する他のチェックポイント法に適用できる任意のチェックポイント強化法を含む本発明のチェックポイント法の実施例の概略的フローチャートである。
【０２３５】
Ｖ．誤予測及び例外からの回復
前に言及したように、第５図の命令パイプラインでは、プログラムコントロールの誤予測と例外が時折生ずる。この時にはエラーを検出して誤予測または例外を生じさせた命令の直前の状態にCPU51を戻すように操作しなければならない。
【０２３６】
Ａ．同時的な複数の分岐／ジャンプアンドリンク命令の評価のためのウォッチポイントに
よる誤予測の検出
命令を理論上で実行できるプロセッサに対しては、命令を解決する前に分岐方向（採用または非採用）または分岐アドレス（目標アドレスまたは分岐命令の次のアドレス）を予測することができる。後にこれらの予測が誤っていたと判明すると、CPU51 は以前の状態に戻り正しい分岐ストリームで命令の実行を開始する。従来のプロセッサでは、１サイクルでの評価のためにしばしば複数の分岐が用意される。しかし、従来のプロセッサはサイクル毎に１個だけの分岐予測を評価する。従って、評価のために用意はされたが選択されなかった分岐評価は遅延されなければならない。分岐評価が遅延するとCPU51 の性能が低下し、分岐をできるだけ早い時期に評価することによって性能を著しく改良することが出来る。
【０２３７】
本発明のウォッチポイントの構造と方法は従来技術よりもいくつかの点で有利である。第１に、複数の予測分岐またはジャンプアンドリンク命令を同時にモニタまたは監視することができる。第２に、複数の実行ユニットからのデータ拡大バスを同時にモニタまたは監視して予測分岐またはジャンプアンドリンク命令が待っている複数のデータまたは計算されたジャンプアンドリンク（JMPL）アドレスをつかむことができる。第３に、分岐またはジャンプアンドリンク命令の複数の誤予測信号を発生することができる。第４に、単一の共有記憶領域内に交代の分岐アドレスまたは予測ジャンプアンドリンクアドレスを記憶することができる。第５に、ウォッチポイントによって誤予測が検出された時に命令を取り出すための正しい分岐アドレスまたはジャンプアンドリンクアドレスを送ることができる。
【０２３８】
第27図を参照すると、ウォッチポイント(WPT) 304 は発行された各チェックポイント済みのコントロール転送命令の実行及び予測状態のモニタに責任がある。従って、WPT304は、分岐、無効化分岐と、BrXcc 、条件BrIcc 、条件BrFcc ，JMPL rt (1) （rd＝０）用の条件情報とコントロールレジスタ(CCR及びFSR レジスタを除く）への読取り／書き込みを含むジャンプ−リンク命令を含んでいるDO WTCHPT 信号と共にDO CHKPNT 信号を受信する。条件コード情報は後に、命令順序が正しく予測されたかそれとも元に戻す必要があるかを決めるのにWPT304によって使用される。WPT304については本明細書の他の箇所で詳細に論議する。
【０２３９】
ウォッチポイントユニット304 は、DFB62 からのデータ拡大バスによって到来する実行完了信号のモニタまたは監視と、例えば分岐誤予測のような所定の事象が検出された時をCPU51 に知らせることに責任を持ち。ウォッチポイント304 内のウォッチポイントレジスタ491 は多目的である。これらのレジスタは分岐予測とJMPL予測をチェックし、本来の予測が正しくない時にバックアップ後に命令を参照するために正しい分岐／JMPLアドレスをBRB59 へ送る。これらのレジスタはデータ拡大分配バスにあって数個のユニット（FXU, FPU, LSU 及びFXAGU)からの結果をモニタするので「ウォッチポイント」レジスタと呼ばれる。16個のウォッチポイントレジスタがあり、各チェックポイントに対して１個となっている。
【０２４０】
整数実行ユニット(FXU) と、整数及びアドレス発生実行ユニット(FXAGU) と浮動小数点実行ユニット(FPU) とを持つCPU に関連して例示したウォッチポイントユニット304 を説明する。この説明からして、設定する実行ユニットの数を大きくしたり、小さくしたり、変えたりすることができることは当業者には自明であろう。特に、例示したCPU51 の実行ユニットをマッチさせるために、FXU とFXAGU が追加されるであろう。
【０２４１】
第27図はウォッチポイントユニット304 内にある主な機能ブロックの機能ブロック図である。BRB59 内のフェッチユニット(FETCH)は命令を取り出してISSUE200に与え、命令のデコードに基づいて分岐とJMPL'sを予測する。ISSUE200はウォッチポイント304 と FSR／CCRFRNへDO CHKPNT 信号を送り、ウォッチポイント304 へDO CHKPNT 信号を送る。 FSR／CCRFRNは条件コードのリネーム（CC リネーミング）に責任がある。DO CHKPNT はチェックポイントの形成を開始するMAKE CHKPNT 信号と、形成されるチェックポイント番号を識別するNEXT CHKPNT 信号とを含む。DO WTCHPT 信号は分岐またはJMPL信号が発行され分岐の型を識別したことと、発行された命令中の条件フィールドと、条件コード（CC）タグと、発行された命令中の次の交代のプログラムカウンタアドレス／予測ジャンプアンドリンク命令アドレスをウォッチポイント304 へ知らせる。FETCH はまた、DO WTCHPT 信号内のWR ANPC 信号という形で分岐／JMPLアドレスをウォッチポイント304 へ知らせる。分岐またはJMPL或いは他のコントロール転送命令（分岐／JMPL）が発行されると、ISU200は分岐／JMPL命令発行済み信号（DO WTCHPT)を送るが、これは信号JMPLを含む発行済みの各予測分岐またはJMPL用の信号である。WP ANPC は目標RAM に書き込まれ、PCロジック106 によって計算された目標FPC を示す。ANPCは予測分岐命令とJMPL命令の命令デコード中に決められる。JMPL命令に対しては、DO WTCHPT 信号内のウォッチポイントへ送られたWP ANPC が予測目標FPC になる。予測分岐命令に対しては、DO WTCHPT 信号内のウォッチポイントへ送られたWP ANPC が交代のFPC 、つまり交代の分岐方向のFPC になる。誤予測が生ずると、FPC, APC及びNAPCを計算するバックアップの間、ウォッチポイント内のANPC出力ロジックからの出力されるRD ANPC が使用される。リネーム600 (FSR／CCRFRN606 と呼ばれるの条件コード（CC）部分はCCレジスタのリネーミングを管理し、命令発行後にウォッチポイント304 へCCリネーミング信号を送る。CCリネーミング信号は次に説明するようにCC TAG RENAMED Cと、CC TAG Cと、CC DV C と、CC DADA C を含んでいる。
【０２４２】
実行ユニット（FXU601, FXAGU 及びFPU600) の各々はデータ拡大バスによって条件コードタグ（CC TAG F) と条件コードデータ有効（CC DV F)と条件コードデータ（CC DATA F)をウォッチポイント304 と FSR／CCRFRN606 の両方へ送る。FXU からのタグとデータ有効とXCC データ信号とICC データ信号は、FXU XICC TAGS F と、FXU XICC DV F と、FXU XCC DATA FとFXU ICC DATA Fを含んでいる。FXAGU からの信号は、FXAGU XICC TAGS F と、FXUAG XICC DV F と、FXAGU XCC DATA FとFXAGU ICC DATA Fを含んでいる。FPU からの信号は、FPU FCC TAGS Fと、FPU FCC DV Fと、FPU FCC DATA Fを含んでいる。XCC, ICC及びFCC 条件コードの例と書式は例えばSPARC-V9に説明してある。
【０２４３】
第28図を参照すると、ウォッチポイント304 は、実行ユニット（FXU, FPU及びFXAGU)からのCCデータ拡大バスから直接、または FSR／CCRFRNから到来するリネームされたCC信号から条件コードをつかむCC グラビングロジック1000と、分岐またはJMPL命令がデコードされる度毎にBRB59 から到来する予測条件コードデータを含むウォッチポイント情報の記憶に責任を持つウォッチポイント記憶素子1002及び関連する読取り／書き込みコントロールロジックと、実行ユニットから到来する（直接またはリネームユニットを経由して）計算された条件コードまたは実際の条件コードの比較を行ってこれらの条件コードを個々のウォッチポイント記憶素子1002に記憶されている予測条件コードと比較することに責任を持つ評価ロジック（Evalロジック）とを含む。目標RAM とその関連するコントロール比較ロジック1003は、次に詳細に説明するように分岐またはJMPL誤予測からの回復に参加する。CCグラッビングロジック1000と、Evalロジック1001とWP 素子10002 は、CPU51 内に割り付けできる16個のウォッチポイントの各々に対して１個、つまり16個の別々の構造を含んでいる。唯１個だけの目標RAM1003 データ記憶構造が供給される。
【０２４４】
16個のウォッチポイントの各々に対して数個のデータ素子が記憶される。各ウォッチポイントに対して記憶されるデータは、ウォッチポイント活性化時にセットされるウォッチポイント有効ビット（WP VALID[i] ＝１）と、JMPL命令から分岐命令を区別する命令型式データ（WP JMPL [i] ＝１はJMPLがウォッチポイントを必要としていることを示し、WP JMPL [i] ＝０は予測分岐用にウォッチポイントが形成されていることを示す）と、命令中の条件フィールド（WP COND [i] ）と、WP XCC, WP ICC及びWP FCC用の記憶装置とを含む。一種の典型的な実施例では、これらのデータ素子はラッチに記憶されている。CCタグはCC TAG ARRAYに記憶され、「ANPC」（交代用の次のプログラムカウンタアドレス）／予測JMPL（ジャンプアンドリンク命令）アドレスは目標RAM に記憶されている。有効はウォッチポイントロジックによって書き込まれ、分岐の型、COND, CC−タグ及びANPC／JMPLアドレスはISU200から受信するDO WTCHPT 信号から引き出される。DO WTCHPT に応じて各分岐／JMPL命令に対してウォッチポイント記憶素子491 が活性化され、フィールド選択書き込みロジックがDO WTCHPT 信号をデコードし、ウォッチポイントに分岐型式と、CONDフィールドとANPC／予測JMPLアドレスとを書き込む。
【０２４５】
有効ビットを「１」にセットすることによってウォッチポイント項目（エントリ）を活性化させることができるが、すべてのチェックポイント素子がそのサイクルで既に割り付けされてしまっている場合にはウォッチポイント（及びチェックポイントを必要とする命令の発行は延期される。複数マルチポイント素子を同時に能動（有効）とすることができ、有効な(VALIDフィールドセット）すべてのウォッチポイント項目は各サイクルで同時に評価することができ、誤予測信号を発生することができる。データ記憶に割り付けされるチップ領域を減らすため、ウォッチポイント304 は分岐命令用のANPCの個かJMPL命令用の予測ターゲットアドレスどちらかを同一の記憶位置に記憶することができる。割り付けられた多目的ウォッチポイントレジスタの実際の使われ方は、ISU200からのDO WTCHPT 信号の内容、即ち、ウォッチポイント項目が予測分岐用として作られているかまたは予測JMPL命令用として作られているかによる。ウォッチポイントレジスタは自ら割り付けを解いて分岐となり、ジャンプ予測が評価する。
【０２４６】
条件分岐命令の場合のように命令によって誤予測が生ずる可能性のある時には、ウォッチポイントユニット304 によって必ずウォッチポイント素子が割り付けされる。各ウォッチポイント素子は対応するチェックポイント素子を持っているが、逆は必ずしも真ではない。例えば条件分岐のように命令によって誤予測が生ずる可能性がある場合には必ずウォッチポイント素子が割り付けされるので、チェックポイントは対応する能動ウォッチポイント項目を持たなくてもよい。チェックポイントは誤予測を生ずる可能性のある命令（「SAVE命令のような命令または周期的な「タイムアウト」チェックポイントが分岐命令以外の命令用に作られた時）以外の命令に対しても割り付けできるので、すべてのチェックポイントがウォッチポイントを持っている訳ではない。ウォッチポイントはウォッチポイントユニット304 内の複数のウォッチポイント素子432 のうちの１個に記憶される。チェックポイント情報を記憶するために１個のチェックポイントレジスタが設けられる。しかし、実際のチェックポイント済みマシン状態は前述のようにCPU51 の全体に亘って局所的に記憶される。表４は一組の典型的な命令用としてシリアル番号によってチェックポイント中に記憶された情報の型と対応するチェックポイントの例を示す。
【０２４７】
条件コードグラビングロジックユニット492 は、DFB62 内の実行ユニットからのデータ拡大バスに現われる時の条件コード（CC）を捕捉することと、命令が発行された時に予測され現在ウォッチポイント素子491 に記憶されている条件コードと捕捉された条件コードを比較する評価ロジックユニット493 へルート指定することに責任を持つ。捕捉された条件コードが予測条件コードと合う場合は、命令が正しく予測されたので元に戻される必要はない。しかし、グラビングユニットによって捕捉された条件コードが予測条件コードに合わない場合には、命令が誤予測されたので元へ戻さなければならない。
【０２４８】
【表４】
2006107536.tif 000011
【０２４９】
実行ユニットからの条件コードの捕捉と比較は下記のものを含む数種のファクタによって複雑になる。即ち、命令順序から外れる実行、各実行ユニット内の命令実行待ち行列、異る命令型式の実行に要するマシンサイクルが変数であること、同一の命令型式でも実行資源には実行データを待つ必要に関する変動性である。上記のファクタとその他のファクタは一般に、命令の結果と状態が実際にデータ拡大バスにいつ現れるかに関して不確実性を生む。従って、本発明は命令が発行された時に同一のマシンサイクル中または任意の後のサイクル中にバスに現れる可能性のある条件コードデータを捕捉する構造及び方法を含む。また、本発明はリネームされたレジスタ用の条件コードを捕捉する構造及び方法を提供する。レジスタ依存性を除くため、例示したCPU51 では条件コードのリネーミングを含めたレジスタのリネーミングが行われる。従って、ウォッチポイントユニット304 はCCデータとタグを直接データ拡大バスから受信し、その後CCRFRN内でCCレジスタが更新されてから、 FSR／CCRFRN606 からCCデータとタグを受信する。
【０２５０】
第27図ではDFB62 に内に２個の固定小数点実行ユニット(FXUとFXAGU)と１個の浮動小数点実行ユニット(FPU) が示されているが、更に多数または少数を設置することができ、これらは任意の型であってよい。各実行ユニットはCCデータ−拡大バスによってCCRFRN606とウォッチポイント304 に接続される。CCデータ−拡大バスは単位実行ユニット(FXU，FXAGU 及びFPU)によって計算されたばかりのCC−データの結果を搬送する。CC−データはCCRFRNを更新するために使われる。ウォッチポイント304 はCC−データ拡大−バスをモニタまたは監視し、後のサイクルでCCRFRNからCC−データを貰うのを待つのではなく、バスから直接にCC−データをつかむ。このようにバスから直接にCC−データをつかみ取ることによって分岐評価が速くなる。
【０２５１】
ウォッチポイント304 は分岐誤予測を検出すると、PSU300内のPLSM307 へ誤予測信号WP MISPRED VECを送る。PSU300は前述したようにCPU51 の主要状態を追跡制御する。PSU がウォッチポイントから誤予測信号WP MISPRED VECを貰うと、PSU300内のPLSM307 が誤予測と実行例外のうちで一番初期のものを選択し、本明細書の他の箇所に説明するように逆追跡手続きを開始する。
【０２５２】
第25図はウォッチポイント304 及びISB と、 SFR／CCRFRNと、DFB, BRB内の実行ユニット（FXU, FXAGU及びFPU)と、PSU 内のPLSMへのインターフェースのより詳細な機能ブロック図である。これらの主要な機能ブロックを次に説明する。
【０２５３】
１．ウォッチポイント要素の活動化
ウォッチポイント要素及び制御論理ユニット（WP−要素）1002は、WP活動化／非活動化制御論理2012及び16の要素の各々が XCC, ICC, FCC, COND, JMPL／分岐及び妥当性インジエータに関する情報を記憶している16のウォッチポイント要素セット2013を含んでいる。分岐／JMPLが発行され予測された時点で、予測済み分岐、取消し分岐及びジャンプ−リンク命令についての条件コード情報を内含するISU200によって DO WTCHPT信号がアサートされる。「分岐を予測する」というのは、「分岐の方向（とられたか又はとられていないか）を予測する」ことを意味し、「JMPLを予測する」というのは、JMPLがつねにプログラムのフローを変更する（つねにとられる）ことから、「JMPL標的アドレスを予測する」ことを意味する。分岐／JMPL命令を発行する場合、典型的 CPU51は、チェックポイント番号により識別されたチェックポイントを作成する。ひとたび作成されると、チェックポイントは CPU51が１つのチェックポイント場所と次のチェックポイント場所の間に存在する命令のための全ての命令実行を完了してしまうまで、活動状態にとどまる。プロセッサは一度に多数の活動中のチェックポイントをもつことができる。チェックポイントの形成は発行された分岐／JMPL命令に制限されず、例えば１つのトラップをとるときといったようなその他のケースで形成される可能性もある。
【０２５４】
各々のウォッチポイント要素2012は、１つのチェックポイントエントリに対応する。典型的な CPU51は16のチェックポイントエントリを有し、従ってウォッチポイント304 は16のウォッチポイント要素をもつ。ウォッチポイント活動化／非活動化論理（WADL) 2012は、ISU200からのDO CHKPNT 及びDO WTCHPNT信号に応えてウォッチポイント要素を活動化させることを担当している。DO CHKPNT は、チェックポイント形成を開始させるMAKE CHKPNT 信号及び、形成されるべきチェックポイント番号を識別するNEXT CHKPNT 信号を含んでいる。WADL2012は同様に、予測済み分岐／JMPL命令が解決された時点でウォッチポイント要素を非活動化することをも担当している。 ISU2000が分岐命令を発行すると、ISU200は、チェックポイントが形成されるべきであるということを表示するMAKE CHKPNT 信号をアサートし、１つのチェックポイント番号がPSU300によって割当てられNEXT CHKPNT により指定される。図50に示されているように、１つのウォッチポイント要素を活動化するためには、NEXT CHKPNT がデコーダ434 によって復号され、 ANDゲート435 内でJSU200からのDO WTCHPT から誘導されたDO PREDICT信号との論理積がとられる。この出力はDO PREDICT VEC [i]と呼ばれる。信号DO PREDICT VEC [i]はWP VALID [i]をセットする。なおここで「[i] 」は16のウォッチポイント番号のうちの１つを表示する。図50は同様に、ウォッチポイント出力論理2102の一部分を含む、WP ACTIVE VEC 及びWP MISPRED VEC論理を結びつけられたウォッチポイントユニットの特定の実施形態についての付加的な構造的詳細をも示している。
【０２５５】
ISU200は、分岐／JMPL命令が発行された時点でウォッチポイントに対して複数の信号を送る。これらの信号は、 XCCに左右される分岐として、 ICCに左右される分岐として、 FCCに左右される分岐として、ジャンプ−リンク命令（JMPL）として、その命令を識別し、その分岐について条件コードがファイルされる（COND) 。これらの信号はウォッチポイント304 により受信され、DO CHKPNT の成分信号としてNEXT CHKPNT によって指定されたウォッチポイント要素の中に記憶される。ウォッチポイント要素「ｉ」がウォッチポイント活動化制御論理（WACL) 2012によって割当てられると、これらの信号はそれぞれWP XCC [i], WP ICC[i], WP FCC[i], WP JMPL [i] 及びWP COND[i]レジスタの中に保たれる。各々のウォッチポイント要素は、それが非活動化され次にもう１つの分岐／JMPL命令によって再度活動化されるまで、これらのレジスタ値を保持する。
【０２５６】
典型的な CPU51は、各サイクル毎に複数のチェックポイントを作成することができ、又１サイクルにつき複数の分岐／JMPL命令を発行することができる。従って、複数のウォッチポイント要素を活動化させることができる。例えば、 CPU51が同じサイクル内で２つのチェックポイントを作成し２つの分岐を発行できる場合、DO WTCHPT, XCC, ICC, FCC, JMPL, COND,  DO CHKPNT信号が２セット又はそれと同等の情報内容が必要とされる。
【０２５７】
条件コード書式及びフィールド定義及びJMPL（ジャンプ＆リンク）命令の書式及び定義は、本明細書中ですでに記録されている通り、 SPARCV9アーキテクチャマニュアル内に提供されている。浮動小数点条件コードはビット−０及びビット−１を含む２ビット書式をもつ、整数条件コードは、 XCCについてビット７−４（それぞれＮ，Ｚ，Ｖ，Ｃ）に、又 ICCについてはビット３−０（それぞれＮ，Ｚ，Ｖ，Ｃ）として提供されている。分岐が発行され「とられた」ものと予測された時点で、COND値は分岐命令の条件フィールドデータと同じである。分岐が送信され「とられていない」と予測された時点で、CONDフィールドデータのビット−３が逆転され、残りのビットは変更されず、これらはCOND値となる。
【０２５８】
図28は、CC−捕捉論理1000，Eval（評価）論理1001, WO−要素記憶及び制御ユニット1002及び標的 ram1003を示す。ウォッチポイント304 の内部構造のより詳しい表示を示す。図29は、評価準備完了 (EVAL READY) 及び評価条件コード (EVAL CC)論理を含むCC−セレクト論理1006、アレイ晩期一致論理1004、現行一致論理1005を含む、ウォッチポイント304 の異なる概略的部分を示す。
【０２５９】
図30は、分岐予測及び評価のタイミング図を示す。ウォッチポイントは、各々予測された分岐／JMPL情報を保持し予測の正しさを評価することのできる複数のウォッチポイント要素を有する。サイクル１では、分岐が発行される。サイクル２では、複数のウォッチポイント要素の１つ（要素「ｉ」と仮定する）が活動化される。その後、WP ACTVE [i]がアサートされる。サイクル５では、 FXUユニットは、その分岐を左右しウォッチポイント要素が待っているCC−データを復帰させている。サイクル５では、ウォッチポイント要素ｉはCCデータを捕捉する。サイクル６では、ウォッチポイント要素がCC−データを捕捉していることからWP ACTIVE VEC [i] はアサート解除され、EVAL READY [i]がアサートされる。EVAL READY [i]がCC評価を有効化する。予測が正しい場合には、EVAL TRUE[i]がアサートされる。そうでない場合、EVAL READY [i]はアサートされない。この例では、タイミングダイヤグラムは、予測が正しくないことをアサートする。次にWP MISPRED VECがアサートされ、PSU300内のPLSMへ送られる。PLSMは全てのウォッチポイント要素 (典型的実施形態では16の要素) からのWP MISPRED VEC [i]信号及び実行ユニットからの実行トラップ信号の中から優先順位をとり、最も早期の事象を決定する。サイクル７では、PSU300は、 CPU51を以前の状態までバックアップさせるDO BACKUP 信号をアサートする。DO BACKUP 信号は、 CPUにバックアップを実施するよう知らせるMAKE BACKUP 及び、そこまでバックアップが作成されるべきチェックポイント番号を識別するBACKUP CHKPNT 信号を含んでいる。図29は、複数のウォッチポイント要素のうちの１つに付隨するウォッチポイントユニットの特定の実施形態についての付加的な構造的詳細を示している。
【０２６０】
２．データ順方向送りバスから直接のCCデータのウォッチポイント捕捉
CC−捕捉（グラビング）論理1000は、データ順方向送りバスから条件コードデータ有効及び条件コードタグを受理しこれらを現行のマシンサイクル中に ISBから受理した条件コードタグと一致させようとするCCタグ現行一致論理2001を含んでいる。典型的な論理回路が図31にCCタグ現行一致論理の一実施形態について示されている。
【０２６１】
FSR／CCRFRN606 は、以下の信号をウォッチポイントに送る：CC RENAMED,  CC TAG C,
CC TAG RENAMED C,  CC DV C及びCC DATA。CC RENAMEDは、CCが現行のマシンサイクル内で発行された命令によって修正された場合にアサートされる。CC TAG Cは、リネーム済みCC物理タグを識別するものの、現行のマシンサイクル内で発生するCC修正は除外される。CC TAG RENAMED Cも同様に、リネーム済みCC物理タグを意味するが、現行サイクル中に発生するCC修正は内含される。CC DV C は、CC DATA が、先行サイクルによって修正されたCCデータを有するものの現行サイクル内で行なわれたCC修正を除外する場合に、アサートされる。従って、CC VD C ＝１である場合、先行サイクルによって行なわれた全てのCC修正はCC DATA 内に反映される。その上、CC DV C ＝０である場合、CC DATA 値は最新のものではなく、 FSR／CCRFRNは、最新のCCデータを捕捉する前に先行するサイクルによって発行された命令の完了を持っている。 FSR／CCRFRN606 によってウォッチポイントに送られる信号は、表６に記されている。
【０２６２】
【表５】
2006107536.tif 000012
【０２６３】
図31では、比較回路2006, 2008及び2010は各々、リネーム済みCC物理タグを識別するCC TAG C信号を受理するが、現行のマシンサイクル中に発生するCC修正は除外する。比較回路の各々は同様に、データ順方向送りバスから直接条件コードタグを受理する。すなわち FPUから FPU FCC TAG Fを、 FXUから FXU XICC TAG F をそして FXAGUから FXAGU XICC TAG F を受理し、ここで FXAGU XICC TAG F及び FXU XICC TAG F は両方共整数条件コードの XCC及び ICCの両方の部分を内含する。比較の出力は ANDゲート2007, 2009及び2011に送られ、制御信号として役立つデータ有効信号(FPU FCC DV F, FXU XICC DV F又は FXAGU XICC DV F) との論理積がとられる。データ有効信号がアサートされたならば、そのとき、比較回路によって決定された一致は有効であり、CC現行一致信号(FPU CURR MATCH, FXU CURR MATCH 又は FXAGU CURR MATCH)がアサートされる。
【０２６４】
図31に示されているように、CCリネーム済みタグアレイ一致論理2002は、各々の実行ユニット(FPU, FXU, FXAGU) について AND論理機能を実行するための論理回路2016及び比較回路2015  16セットから成る１つのセットを含んでいる。現行一致論理2001はデータ順方向送りバスからの信号をCC TAG Cと比較する一方、アレイ一致論理ユニット2002は、リネーム済みCC物理タグを識別するものの現行サイクル中に発生するCC修正を含むCC TAG RENAMED Cとデータ順方向送りバスからの信号の各々を同時に比較する。CC TAG RENAMED Cは、DO PREDICT VECと現行マシンサイクル内で発行された命令によりCCが修正された時点でアサートされているCC RENAMEDとの論理積をとることにより、生成された書込み有効化信号の制御下で、16のCCタグアレイ2003記憶要素のうちの１つの中へ書き込まれる。サイクル毎に、CC TAG RENAMED Cの記憶された値は、何らかの一致を識別する目的で、 FPUからの FPU FCC TAG F, FXU からの FXU XICC TAG 及び FXAGUからの FXAGU XICC TAG F と比較される。比較回路2016の出力は、制御信号として役立つデータ有効信号(FPU FCC DV F, FXU XICC DV F、又は FXAGU XICC DV F) と論理積がとられる。データ有効信号がアサートされると、そのとき比較回路によって決定された一致は有効であり、CCアレイ一致信号(FPU ARRAY MATCH [i],  FXU ARRAY MATCH[i] 及び FXAGU ARRAY MATCH [i]) がアサートされる。従って、CC−捕捉論理は、複数の未解決分岐評価を同時に監視することができる。
【０２６５】
図31は、CC捕捉論理を示す。CC TAG ARRAYは16のレジスタを含み、各レジスタは16のチェックポイントのうちの１つに対応し、CC TAG Cビット数と同じラッチ数をもつ (ここで我々は４ビットラッチを仮定している。１つの分岐を発行し予測する場合、CC TAG RENAMED Cは、DO WTCHPT から誘導されたDO PREDICT VEC [i]により指定されるCC TAG ARRAYの場所内に書き込まれる。CC RENAMEDは、 AND論理ゲートといった書込み有効化及びアドレスセレクタ論理2004内で書込み有効化信号として役立つ。
【０２６６】
この記述においては、プロセッサは２つの固定小数点実行ユニットすなわち FXU及び FXAGUそして１つの浮動小数点実行ユニットFPU をもつものとして仮定されている。典型的な実施形態においては、 FXUのみがJMPL命令を実行することが仮定されている。各々のユニットはCC−データ順方向送りバスを有する。FXU CCデータ順方向送りバスは、 FXU CC TAG VALID, FXU CC TAG 及び FXU CC DATAを含む。 FXUが、CCを修正するようなその実行を終わろうとしているとき、 FXU CC TAG VALID がアサートされ、 FXU CC TAG はそのリネームされたCC物理タグを有し、 FXU CC DATAはCCの結果データを有する。同じことは FXAGU及び FPUにもあてはまる。FSR/CCRFRNユニット内の条件コード (CC) データは次のサイクル内でこれらのCCデータ順方向送りバスを用いて更新される。ウォッチポイントは同様に、ウォッチポイント要素がCCデータを待機している場合にデータ順方向送りバスからのCCデータを捕捉する。CC TAG Cは FXU CC TAG と比較され、その一致信号は FXU CC TAG VALID との論理和がとられ、出力信号は FXU CC CURR MATCHと呼ばれる。同様にCC TAG ARRAY内のレジスタの内容は、FXU CC TAGと比較され、その一致信号は、 FXU CC TAG VALID との論理積がとられ、出力信号は FXU CC ARRAY MATCH [i] と呼ばれる。 FXAGU及び FPUについては、 FXUと同じ一致機能が存在する。ここで３つの命令発行シーケンス例を基準にして、捕捉論理のオペレーションについて記述する。
【０２６７】
CC捕捉論理1000は同様に、そのウォッチポイント要素内の分岐を左右し、アサートされた時点でCCデータ信号（例えばCC DATA 〔７：４〕）を選択し同様に次のサイクル内での評価のためにそのデータ信号をラッチングする条件コードに基づいて信号を生成することをも担当するCCセレクト論理2005（各ウォッチポイントに１つずつの16層）をも含んでいる。条件コードセレクト論理2005の１実施形態のための典型的論理回路は、図32の中に提供されている。このCCセレクト論理2005のオペレーションについては、以下の３つの例に関連して記述されている。
【０２６８】
評価論理1001は、図25に示されている通り、評価準備完了論理（EVAL READY) 2100、評価真論理 (EVAL TRUE) 2101 及びウォッチポイント出力論理 (WP出力論理) 2102を内含する。図33は、CCセレクト論理2005からの１組のセレクト信号（例えば、 SEL BR XCC [i])及び AND論理ゲート2106の出力からの有効化信号 (EVAL ENABLE)を受理するEVAL READY論理2100に付隨する付加的な構造的詳細を示している。EVAL ENABLE は、WP ACTIVE VEC [i], WP JMPL,  FXAGU JMPL 及び FXAGU CHKPTに基づいてアサートされる。EVAL READY論理2100は、評価が準備完了していることを表わすｉ番目のウォッチポイントのためのEVAL READY [i]信号を出力する。
【０２６９】
図34は、CC EVAL 論理2105を含むEVAL TRUE 論理2101に付隨する付加的な論理的詳細を示す。EVAL TRUE 論理は、分岐命名又はJMPL命令が適正に予測されたか否かを決定することを担当する。CC EVAL2105 は、CCセレクト論理2005からのEVAL CC[i]及び、 ISBから受理されウォッチポイント要素2013の中に記憶されたWP COND[i]，WP XCC [i], WP ICC[i] 及びWP FCC [i]を受理し、SPARC-V9マニュアル内に記述された規則を用いた比較に基づいて２つの信号を評価する。これらが一致する場合、分岐真信号(BR TRUE[i])がそのｉ番目のウォッチポイントについて生成される。EVAL TRUE 論理2101は、同様にJMPL一致論理2201によるJMPL MATCH出力 (図35参照) を、 ISBから受理されウォッチポイント要素2013内に記憶されたWP JMPL[i]と比較する。JMPL MATCHがWP JMPL[i]と一致する場合、JMPLは適正に予測されており、JMPL TRUE[i]がアサートされる。BR TRUE[i]とJMPL TRUE[i]の論理和がとられ、EVAL TRUE[i]信号を生成する。単一の命令のみについて１つのウォッチポイントが形成され、従って、BR TRUE[i]又はJMPL TRUE[i]の１つのみがアサートされることになる。
【０２７０】
WP出力論理2102が図50に示されている。PSU300からのEVAL READY [i], EVAL TRUE 〔ｊ〕, WP VALID [i]及びKILL VEC [i]は、WP出力論理に入力され、これがWP ACTIVE VEC [i] 及びWP MISPRED VEC [i]信号を出力する。
【０２７１】
図35は、TARGET RAM及びJMPL評価論理に付隨する付加的な構造的詳細を示している。JMPL評価論理は、rd＝０とした復帰タイプのJMPL命令を評価した。ANPC出力論理2103は、正しい計算値である FXU DATA の値を、本書で記述されている優先順位決定スキーマ及び記憶されたWP ANPC の比較に基づいて PSUPLSMによって誤予測(MISPRED) がアサートされているか否かに基づき BRBフェッチユニットまで送るため、RD ANPC を選択する。
【０２７２】
３．ウォッチポイントオペレーション例
ａ．ウォッチポイントオペレーション−例１：
表７は、サイクルＸ，Ｘ＋１、及びＸ＋２の中で実行された、例１のための命名のリストである。サイクルＸでは、４つの命令が発行され、そのうちの１つ(addcc) がCCを修正する。このとき、リネームされた−CC物理タグ＃７が割当てられる。サイクルＸ＋１では、ここでも４つの命令が発行され、そのうちのいずれもCCを修正せず、 addccが実行されてサイクルＸ＋１内でCCデータを復帰させる。サイクルＸ＋２では addccによって修正されたCCデータはFSR/CCRFRN内にある。サイクルＸ＋２では４つの命令が発行され、そのうちのいずれも分岐前にCCを修正せず、その後、分岐命令（br, xcc)が発行される。この場合、サイクルＸ＋２では、現行サイクル内でCCを修正する命令が全く発行されないことからCC RENAMED ＝０である。その上、最も晩期のCCタグが＃７でありこれがサイクルＸで割当てられることから、CC TAG C＝CC TAG RENAMED C＝７である。最後に、最も晩期のCCがFSR/CCRFRN内にあることから、CC DV C ＝１である。
【０２７３】
１つの分岐を発行しているとき、FSR/CCRFRN内で分岐を左右するCC DATA が有効である。従って、CC DV C は分岐の発行と同じサイクルでアサートされる。分岐が XCCにより左右されると仮定してみよう。そのとき SEL BR XCC (i) がアサートされ (図32参照) 、信号はCC TDATA〔７：４〕を選択し、データは次のサイクルにおいてEVAL CC[i]内でラッチされる (信号CC DATA 〔７：４〕は XCC DATA C 及び ICC DATA C であるか又は FCC DATA C である) 。又EVAL READY [i]は次のサイクルにおいてアサートされる (図33参照) 。CC評価は、準備完了態となる。
【０２７４】
ｂ. ウォッチポイントユニットオペレーション−例２：
表８は、サイクルＸ及びＸ＋１内で実行された例２についての命令リストである。サイクルＸでは、４つの命令が発行され、そのうちの１つ(addcc) がCCを修正する。その後、リネーム済みCC物理タグ＃７が割当てられる。サイクルＸ＋１では、ここでも４つの命令が発行され、そのうちのいずれも分岐前にCCを修正せず、そのうちの１つが分岐命令である。この場合、サイクルＸ＋１では、現行サイクルでCCを修正するような命令は全く発行されていないため、CC RENAMED＝０である。又、最も晩期のCCタグが＃７であり、それが先行サイクルで割当てられているため、CC TAG C＝CC TAG RENAMED C＝７である。ただし、 addccによって修正される最も晩期のCCデータはFSR/CCRFRNにおいてCC−レジスタ内に書込まれないことからCC DV C ＝０である。
【０２７５】
（サイクルＸ＋１において）１つの分岐を発行する場合、サイクルＸで発行されている命令「 addcc」はCCを修正し結果データはFSR/CCRFRNにおいてCCレジスタ内に書込まれないことから、FSR/CCRFRN内でその分岐を左右するCC DATA は有効でない (CC VD C ＝０）。我々は FXU実行ユニットによりサイクルＸ＋１で「addcc 」が実行されつつあり、 FXUがサイクルＸ＋１でそのデータ順方向送り母線上でCCデータを復帰させている、と仮定している。その後、サイクルＸ＋１で FXU CC CURR MATCH( 図31参照) がアサートされる。サイクルＸ＋２で SEL FXU XCC [i] (図32参照) がアサートされ (図32参照) 、信号は FXU CC DATAを選択し、データはEVAL CC[i]内でラッチされる。又、サイクルＸ＋２でEVAL READY [i]がアサートされる (図33を参照) 。次にCC評価が準備完了状態となる。
【０２７６】
FXU CC CURR MATCH比較のためにはCC TAG RENAMED CではなくCC TAG Cが使用されることに留意されたい。分岐が発行されるのと同じサイクル内で、CCを修正するような命令が発行される場合、CC TAG Cは最も晩期のCC物理タグではない。しかし、CC RENAMEDがアサートされ信号は FXU CC CURR MATCHを抑止する (図32参照) 。このことはすなわち、分岐が発行されるのと同じサイクルにてCCを修正する命令が全く無い場合には、 FXU CC CURR MATCHを使用することができる、ということを意味している。 FXU CC TAG CURR MATCHのためにCC TAG C〔３：０〕を用いることは、CC TAG CがCC TAG RENAMED Cよりも早い信号であることから、経路遅延を減少させる一助となる。
【０２７７】
ｃ．ウォッチポイントユニットオペレーション−例３：
表９は、サイクルＸ及びＸ＋１で実行される例３についての命令リストである。サイクルＸでは、４つの命令が発行され、(addcc)の１つがCCを修正する。このときリネーム済み−CC物理タグ＃７が割当られる。サイクルＸ＋１では、ここでも４つの命令が発行され、そのうちの１つ(subcc) が分岐前にCCを修正し、それらのうちの１つは分岐命令である。リネームされたCC物理タグ＃８は命令subcc に割当てられる。この場合、サイクルＸ＋１では、現行サイクル内でCCを修正する命令が発行されているため、CC RENAMED＝１である。先行サイクルによる最も晩期のCCタグが＃７であることからCC TAG C＝７であり、現行サイクルでCCを修正する命令が発行れておりリネームされたCC物理タグ＃８が割当てられることから、CC TAG RENAMED C＝８である。同様に、 subccによって修正されている最も晩期のCCデータがFSR/CCRFRN内でCCレジスタ内に書込まれていることから、CC DV C ＝０である。
【０２７８】
（サイクルＸ＋１において）１つの分岐を発行する場合、サイクルＸで発行されている命令「addcc 」はCCを修正し結果データはFSR/CCRFRNにおいてCCレジスタ内に書込まれないことから、FSR/CCRFRN内でその分岐を左右するCC DATA は有効でない (CC DV C ＝０）。その上、命令「subcc 」はサイクルＸ＋１で発行され、その後CC RENAMEDがアサートされる。我々は、 FXU実行ユニットによりサイクルＸ＋２で「subcc 」が実行されつつあり、 FXUがサイクルＸ＋２でそのデータ順方向送り母線上でCCデータを復帰させている、と仮定している。その後、サイクルＸ＋２で FXU CC ARRAY MATCH [i] （図31参照）がアサートされる。サイクルＸ＋３で SEL FXU XCC [i] (図32参照) がアサートされ (図32参照) 、信号は FXU CC DATAを選択し、データはEVAL CC[i]内でラッチされる。又サイクルＸ＋３でEVAL READY [i]がアサートされる (図33を参照) 。次にCC評価が準備完了状態となる。この例では16のウォッチポイント要素が存在し、各々の要素は、いずれかのサイクルにおいて各分岐評価について並行なCCを捕捉することができる。
【０２７９】
【表６】
2006107536.tif 000013
【０２８０】
【表７】
2006107536.tif 000014
【０２８１】
【表８】
2006107536.tif 000015
【０２８２】
４．分岐命令の評価
分岐が発行されてから１サイクル後に、WP VALID [i]がアサートされる。WP VALID [i]＝１でありEVAL READY [i]＝０そしてKILL VEC [i]＝０である場合、WP ACTIVE VEC [i] がアサートされる (図29参照) 。「WP ACTIVE[i]＝１」は、チェックポイントｉを用いる分岐がすでに発行されているもののまだ解決されていないことを意味する。値が０となったならば、それは分岐が解決された（完了した）ことを意味する。WP ACTIVE VEC はICRU301 に送られ、どの分岐／JMPL命令が完了されるかを決定するために用いられる。
【０２８３】
分岐評価が準備完了状態になった時点で、EVAL READY [i]がアサートされEVAL CC[i]は、捕捉されたCC値である。このとき、EVAL CC[i]及びWP COND[i]はEVAL TRUE LOGIC2101 内でCC EVAL 論理中へフィードされ (図34参照) 、分岐は評価される。分岐を発行するときに作成された予測が正しい場合、BR TRUE[i]がアサートされる。そうでない場合、これはアサートされない。１つの分岐を評価するとき、分岐タイプを知るために、WP XCC [i], WP ICC[i], WP FCC[i]信号も同様に使用される。BR TRUE[i]はJMPL TRUE[i] (以下で説明する) と論理和がとられ、EVAL TRUE[i]が生成される。WP VALID [i]＝１でEVAL READY [i]＝１でEVAL TRUE[i]＝０でKILL VEC [i]＝０である場合、WP MISPRED VEC [i]はアサートされる (図29参照) 。「WP MISPRED VEC [i]＝１」というのは、以前に作成された分岐予測がまちがっていることを意味する。 PSUはこの信号及び実行エラー信号を受理し、最も早期の誤予測又は実行エラー条件を選択し、次にBACKUP信号をアサートして以前の状態までバックアップする。
【０２８４】
PSUは、バックアップが発生しバックアップ時点の後にとられたチェックポイントをキルする必要がある場合に、KILL VEC [i]信号をアサートする。KILL VEC [i]がアサートされた時点で、反応するウォッチポイント要素も同様にキルされる。「キルされる」というのは、WP ACTIVE VEC [i] 及びWP MISPRED VEC [i]が抑制されることを意味する。WP ACTIVE VEC 及びWP MISPRED VECは、WP MISPRED VEC〔０−16〕を同じベクトル内でコード化できるように、マルチホットであり得る。このことはすなわち、一度に最高16のウォッチポイント要素（この例では）が活動中であり得又一度に誤予測を検出できるということを意味している。
【０２８５】
分岐を発行し予測するとき、 FETCHがWR ANPC を通してウォッチポイントに、分岐標的アドレス又は分岐の次のアドレスを送る。予測が「とられた」場合、WR ANPC が、分岐の次のアドレス (とられていないアドレス) である。予測が「とられていない」場合、WR ANPC は分岐標的アドレス (とられたアドレス) である。予測が誤っていることが判明した場合、ウォッチポイントは、適正な分岐経路から命令を再度フェッチするためRD ANPC を介してアドレスを FETCHまで送り戻す。WR ANPC 値はTARGET RAM内に記憶される (図35参照) 。TARGET RAMは16のエントリをもち、各々のエントリは各々のチェックポイントに対応し、１つのWR ANPC アドレスを記憶することができる。この RAMの書込み有効化信号及び書込みアドレスは、MAKE CHKPNT 及びNEXT CHKPNT である。MAKE CHKPNT は、チェックポイントを作成するときにアサートされる。BACKUP信号がアサートされた時点で、TARGET RAMの読取りアドレスのためにBACKUP CHKPNT が用いられる。BACKUP CHKPNT は、 CPU51がそれまでバックアップするチェックポイントを指定する。又TARGET RAMの読取りデータがRD ANPC を介して FETCHまで送られる。
【０２８６】
５．JMPL-LINK(JMPL) 命令の評価
JMPL命令を発行し予測するとき、 FETCHは、ウォッチポイントに対しWR ANPC を介して予測されたJMPL標的アドレスを送る。ウォッチポイントはアドレスを保ち、実行ユニットにより計算上の正しいアドレスとこのアドレスを比較することによって適正さを評価する。予測が誤っていたことが判明した場合、ウォッチポイントは、正しいアドレスから命令を再度フェッチするためRD ANPC を介して FETCHに計算上の正しいアドレスを送る。予測されたJMPL標的アドレスは分岐の場合と同じ方法でTARGET RAM内に記憶される。
【０２８７】
我々は、 FXAGU実行ユニットのみがJMPL標的アドレスを計算するものと想定している。 FXAGUがJMPL命令の実行を終えた時点で、 FXAGU JMPL がアサートされ、 FXAGU CHKPNT はJMPLのチェックポイント番号を指定し、 FXAGU DATA は、計算上の正しいJMPL標的アドレスを内含する。このとき、 FXAGU CHKPNT によって指標付けされたTARGET RAM内の予測されたJMPLアドレスが読みとられ、読取られたデータは FXAGU DATA と比較されることになる。比較結果はラッチされ、ラッチ済み信号はJMPL MATCHである (図35) 。予測上のアドレスと計算上のアドレスが同じである場合、JMPL MATCHがアサートされる。このとき、JMPL MATCHはWP JMPL[i]との論理値がとられ、出力はEVAL TRUE[i]となる (図34) 。 FXAGU JMPL がアサートされてから１サイクル後に、EVAL READY [i]もアサートされる (図33) 。
【０２８８】
分岐命令の場合と同じ要領で、JMPLについてWP ACTIVE VEC [i]及びWP MISPRED VEC [i]が生成される。WP MISPRED VEC [i]がアサートされてから１サイクル後に、PSU300は、ウォッチポイント304に対する２つの信号すなわちBACKUP CHKPNT 及びMISPRED （ただしバックアップがJMPLの誤予測のせいである場合のみと同数のBACKUPを送る。MISPRED がアサートされた場合、ウォッチポイントは、 FETCHに対し正しいJMPLアドレスを含むラッチされた FXAGU DATA 信号を２回送る（図35参照) 。TARGET RAMは次の２つの目的のために使用される；その１つは分岐の代替的アドレスを記憶するためそしてもう１つは予測されたJMPL標的アドレスを記憶するためである。これら２つの用途は排他的であり、従って、この実施のためには１つのTARGET RAMだけで充分である。
【０２８９】
発明力ある構造及び方法は、（１）複数の予測済み分岐又はジャンプ＆リンク命令のウォッチング（監視）を同時に開始するための構造及び方法；（２）実行ユニットからのデータ順方向送り母線を同時にウォッチングすることにより、予測済み分岐又はジャンプ＆リンク命令が待っている複数の条件コードデータ又は計算上のジャンプ＆リンクアドレスを捕捉するための構造及び方法；（３）単独又は（２）と組合わせた形で、分岐又はジャンプ＆リンク命令の複数の誤予測信号を同時に生成できるようになるための構造及び方法；（４）単独又は（２）と組合わせた形で、上記２つのケースで共有される１つの記憶装置内に代替分岐アドレス又は予測されたジャンプ＆リンクアドレスを記憶するための構造及び方法；（５）単独又は（４）と組合わせた形で、誤予測が発生した場合に命令フェッチのため正しい分岐アドレス又はジャンプ＆リンクアドレスを送るための構造及び方法；そして（６）CCデータを捕捉するためのタグ比較を２つの部分すなわちデータ順方向送り母線タグと比較した先行サイクル内のCCタグ及びデータ順方向送り母線タグと比較した現行発行ウインドウ内の現行リネーム済みCCタグという２つの部分に分割することによって、クリティカルパスをスピードアップするための構造及び方法（単独又は（２）と組合わせた形）、を提供する。後者の場合、リネーム済みCCタグのラッチされた信号を比較のために用いることができ、従ってこれはタイミングクリティカルではない。図36は、複数の同時未解決分岐評価のための発明力あるウォッチポイント方法の一実施形態の概略的流れ図である。
【０２９０】
Ｂ．例外検出
例外は、発行又は実行中に発生する可能性がある。かくして例外には発行トラップと実行トラップが含まれる。以下では、発行トラップと実行トラップの検出について記述する。
【０２９１】
１．発行トラップの検出
ISU200は同様に、命令の発行を実施する発行トラップを検出する。これらの発行トラップは、同期化又は非同期化発行トラップであり得る。当業者であれば、同期化及び非同期化とされる発行トラップのタイプは、さまざまな基準に基づいて選択され得、設計者の選択の対象となりうるということを認識することだろう。
【０２９２】
例えば、非同期化発行トラップは、標準的には、往々にして発生し、かつ前述の要領での CPU51のそれに対する同期化がプロセッサの速度を低下させることになるような発行トラップである。従って、このような種類のトラップは、機械的に同期化されエントリを受けることはない。これらの発行トラップとしては、SPARC-V9アーキテクチャマニュアル中に記述されているfill normal, fill other, spill normal,  spill other, clean, window, trap instruction( つねに (TA％go tsimm７）命令の中間にあるトラップ）、 unimplemented ldd, unimplemented std 及び illegal instructionが含まれていると考えられる。
【０２９３】
非同期化発行トラップは、標準的に、往々にして発生せず、かつそれについて CPU51を同期化することによってプロセッサの速度が著しく影響を受けないような発行トラップである。これには、SPARC-V9 instruction access error, instruction access exception, privileged opcode, privileged action, fp exception other, fp disabled, emulation trap、及びtrap instruction( 条件付きトラップ(TCC) 命令) 発行トラップといったような発行トラップが含まれると考えられる。
【０２９４】
これらの発行トラップの或るタイプのものが発行段で発生したか否かを決定するために、ISU200は制御レジスタ (CNTR-REG) フィールドを制御レジスタファイル800 から受理する。図17に示されているように、制御レジスタファイル800 は、クリーンウインドウ (CLEANWIN) レジスタ801 、回復可能ウインドウ (CANRESTORE) レジスタ802 、セーブ可能ウインドウ(CANSAVE) レジスタ803 、ウインドウ状態 (WSTATE) レジスタ804 及びプロセッサ状態 (PSTATE) レジスタ805 を含むSPARC-V9特権的レジスタを収納している。これは又、TICKレジスタ806 及び浮動小数点レジスタ状況 (FPRS) レジスタ807 を含むSPARC-V9非特権的レジスタをも収納している。 CNTRL REGフィールドは、SPARC-V9アーキテクチャマニュアル内に記述されCLEANWIN, CANRESTORE, CANSAVE, WSTATE, TIC、及びFPRSレジスタ801 〜807 により提供されているCLEANWIN, CANRESTORE, CANSAVE,  WSTATE NORMAL, WSTATE OTHER,  PSTATE PEF,  PSTATE PRIV, TICK NPT、及びFPRS FEFフィールドを含んでいる。
【０２９５】
ここで図７に戻ると、ISU200は、FR INSTs BRPs 命令を復号し、SPARC-V9発行トラップのいずれかが発生したか否かを決定するべくSPARC-V アーキテクチャマニュアルに従って CNTRL REGフィールドを利用する。最も早期の発行ウインドウスロット内で命令によりひき起こされた発行トラップのみが取られることになる。従って、単数又は複数の発行トラップが検出された時点で、最も早期のスロット内にある発行トラップ誘発命令のスロットに先立つ発行ウインドウスロット内の一部の命令のみがISU200によって発行され得る。発行トラップ誘発命令及び発行トラップ誘発命令のスロットの後の一部のFR INST BRP 0-3 命令は、 (trap instruction) 発行トラップをひき起こしたTA又はTcc 命令が発行されるということを除いて、発行されない。
【０２９６】
発行トラップが起こった時点で、ISU200は、トラップが発生したことを表わす ISSUE TRAP 信号をPSU300に対して出力し、前述の発行トラップのうちのいずれが発生したかを識別する。ISU200により非同期化発行トラップが検出された場合、その検出時点で直ちにISU200により ISSUE TRAP 信号が出力されることになる。しかしながら、同期化発行トラップがISU200により検出された場合、発行トラップ誘発命令がスロット０内にくるまでISU200によって ISSUE TRAP 信号が出力されることはなく、 CPU51は前述の要領で同期化される。非同期化発行トラップをひき起こす Tcc命令の場合、 Tcc命令は、 CPU51が同期化された時点で初めて発行され得る。
【０２９７】
２．実行トラップの検出
図８を参照すると、発行済み命令の実行中に、FPU600, FXU601及びLSU603によって検出されるエラーが発生する可能性がある。前述した通り、FPU600, FXU601及びLSU603は、命令の実行中にエラーが発生したか否かを表示する ERR STAT 信号を ISB61のPSU200に出力する。 LSU及び FXUからの実行エラーは、PSU300により容易にとり扱うことができる。しかし、次に記述するように、浮動小数点例外は特殊な取り扱いを必要とする。
【０２９８】
図８を参照すると、前述の通り、FPU600は、資源利用可能性に基づいて予測上の及び／又は実際のPC順序外で浮動点命令をout-of-order実行する。浮動小数点命令の実行中、FPU600は実行トラップ (すなわちエラー) を検出することができる。しかしながら、FPU600は予測上の及び／又は実際のPC順序外で命令をout-of-order実行し得ることから、それらがひき起こす実行トラップも又予測上及び／又は実際のPC順序外であり得る。浮動小数点実行トラップをあたかもそれらが実際のPC順に発生したかのごとく適切に取扱い検出するために、PSU300は、図37に示されているように浮動小数点例外 (FPEXCEP)リング又はユニット306 を含んでいる。
【０２９９】
図38に示されている通り、 FPEXCEPリング306 は64の記憶要素又はエントリを伴うデータ記憶構造900 を含んでいる。各々の記憶エントリは64の命令通し番号のうちの１つに対応し、命令識別（FP)フィールド、浮動小数点トラップタイプ(FTT) フィールド及び現行浮動小数点例外タイプ (CEXC) フィールドを有する。図37に示されている通り、データ記憶構造はFFFPフィールドを記憶するための64のアドレス可能な記憶要素をもつFPフィールドリング、 FTTフィールドを記憶するため64のアドレス可能な記憶要素を有する FTTフィールドリングそしてCEXCフィールドを記憶するための64のアドレス可能な記憶要素を有するCEXCフィールドリングを形成する。 FP, FTT及びCEXCフィールドリングのアドレス可能な記憶要素の各々は命令通し番号に対応する。
【０３００】
FPビットは、対応する命令がSPARC-V9浮動小数点タイプの命令であるか否かを表示するべくセット（「１」）又はクリア（「０」）される。 FPEXCEPリング306 内の浮動小数点命令としてFP−ビットにより識別された命令については、 FTTフィールドは、発生したSPARC-V9浮動小数点トラップのタイプを識別する。 SPARC-V9 アーキテクチャマニュアル内に表示されている通り、これにはいかなるトラップも含まれず、IEEE 754 例外、未実施
FPOP、未終了 FPOP、シーケンス−エラー、ハードウェア−エラー、及び無効 fp レジスタエラーが含まれている。当業者であればわかるように、 CPU51はこれらのトラップタイプのいくつかを特定、検出及び取扱いすることなく実施でき、その場合、 FPEXCEPリング306 の FTTフィールドは、所要記憶空間が少なくてすむように、FPEXCEP リング306の FTTフィールドをより小さなものにすることができる。その上、 IEE 754  例外が発生したことを FTTフィールドが表示している浮動小数点命令については、CEXCフィールドは、IEEE規準754-1985及びSPARC-V9アーキテクチャマニュアルに従ってまさに発生したIEEE 754  例外の単数又は複数のタイプを識別する。かくして、CEXCフィールドは、１つのオペランドが不適正であるか否かを示すためのビット(nvc) 、オーバーフローが発生したか否かを表わすためのビット(ofc) 、アンダーフローが発生したか否かを表わすためのビット(ufc) 、ゼロ除算が発生したか否かを表わすためのビット(dzc) 、及び不正確な結果が発生したか否かを表わすためのビット(nxc) を含んでいる。しかしながら、浮動小数点トラップタイプのその他のタイプ又は浮動小数点トラップ無しのタイプを結果としてもたらす浮動小数点命令については、CEXCフィールドは、IEEE 754 例外のいずれのタイプも発生しなかったことを表示する。
【０３０１】
前述し図11にも示されているＡ−リング312 及びＭ−リング324と同様に、 FPEXCEPリング306 は、図37に示されているように「モジュロFPEXCEP-リングレジスタ長」算術演算 (ここではモジュロ64算術演算) を用いてデータ構造に沿ってポインタが移動させられる循環リング又はラップアラウンドデータ構造として実施される。当業者であれば、循環データ構造が有利であるものの、これは、本発明にとって不可欠なことではなく、本発明の特徴を実施するその他のデータ構造を用いることも可能であるということがわかるだろう。
【０３０２】
ここで再び図38を参照すると、各々の発行段の間、ISU200は、フェッチされたFR INST,
BRP 0-3 命令のどれが発行されたかを示す前述のISSUE VALID 信号を出力する。同時にこれは、発行された命令のうちのどれが浮動小数点命令であるかを識別するEP ISSUE信号を出力する。これらの信号は、FP書込み (WR) 論理901 及び FTT書込み (WR) 論理902 により受理される。さらに、FPWR論理901 及び FTTWR論理902 は ICRU301から、前述のNISNポインタを受理する。
【０３０３】
FPWR論理901 及びFTTWR902はNISNポインタ及びISSUED VALID信号を用いて、ISU200により発行されたばかりの命令のための FTTフィールド及びFRビットに対応する FPEXCEPリング内の場所をアドレスする。浮動少数点命令であるものとしてFP ISSUEによって識別された命令の各々について、FRWR論理901 は、それが浮動小数点命令であることを表わすため対応するFPビットをセットする。又、浮動小数点命令でないものとしてFP ISSUEによって識別された発行済み命令については、FPWR論理901 は、それが浮動小数点命令でないことを表示するため対応するFPビットをクリアする。
【０３０４】
図８を参照すると、前述の通り、FPU600, FXU601, FXAGU602及びLSU603は発行済み命令を実行し、実行が完了した時点で ERR STAT信号を出力する。図39に示されているように、 ERR STAT 信号は、FPU600によって実行され完了した浮動小数点命令についての通し番号、チェックポイント番号及びエラー状況フィールドを内含するFP ERR STAT 信号を含む。エラー状況フィールドは、実行済みの浮動小数点命令の結果をもたらされる浮動小数点トラップタイプ又は１つももたらされない場合には浮動小数点トラップ無しを、そして浮動小数点命令によりひき起こされた現行の浮動小数点例外又は例もひき起こされなかった場合には現行浮動小数点命令無しを表示する。
【０３０５】
その上、図39を参照すると、 FSR/CCRFRN606は、SPARC-V9浮動小数点状況レジスタ(FSR) を内含する。 FSRは、上述のIEEE 754  例外の各々について１つのマスキングビットを含むトラップ有効化マスク(TEM) フィールドを含み、これらの例外のうちの単数又は複数のものがマスキングされうるようになっている。 TEMフィールドはFPU602に提供される。IEEE 754  例外が起こると、FR ERR STAT 信号は、この例外がマスキングされるべきタイプのものであることを TEMフィールドが表示した場合には、１つの例外が発生したことを PLSM307に対して表示しない。しかしながら、FP ERR STAT 信号はそれでも FPEXCEPユニットに対して、このようなIEEE 754  例外が発生した (すなわちFTT)ことと同時にそれがIEEE 754  例外のどのタイプであるか (すなわちCEXC) を表示する。
【０３０６】
完了済み浮動小数点の各々について、 FTTWR論理902 は、FP ERR STAT 信号により識別された FTTデータを FPEXCEPリング306 の対応する FTTフィールド内に書込むため、FP ERR STAT 信号内に提供された通し番号を用いる。その上、CEXC書込み (WR) 論理903 は、EP ERR STAT 信号によって識別されたCEXCデータを FPEXCEPリング306 の対応するCEXCフィールド内に書込むために、この通し番号を用いる。
【０３０７】
読取り及び累積例外計算 (RD and AEXC compute)論理904 は、PSU300の ICRU301から RRPポインタ及びCOMMIT VALID信号を受理する。 RRPポインタは、前のマシンサイクル内で退去させられた最後の命令をポイントし、COMMIT VALID信号は RRPポインタが前のマシンサイクル内をどれほど遠くまで前進するか (すなわち退去させられた命令の数) を表示する。
【０３０８】
各々のマシンサイクル中、RD及びAEXC計算論理904 は RRPポインタ及びCOMMIT VALID信号を用いて、最後のマシンサイクル内で退去させられた各命令について FPEXCEPリング306 内のFPビット及び FTT及びCEXCフィールドを読みとる。その後、浮動小数点命令 (FPビットにより識別されたような) である退去済み命令について、RD及びAEXC計算論理904 は、そのCEXCフィールドを論理和してAEXCフィールドを計算する。要約したとおり、マスキングされていないIEE 754  例外をひき起こす浮動小数点命令は退去されておらず PLSM307による実行トラップ順序決定を結果としてもたらすことになることから、AEXCフィールドは、最後のマシンサイクル内で退去させられた浮動小数点命令の全てによって累積されたマスキング済みIEEE 754  例外を識別する。
【０３０９】
さらに、RD及びAEXC計算論理は、読取りFPビットから、現行のマシンサイクルの中で退去させられた命令のうちのいずれが、退去されるべき最も晩期の浮動小数点命令であるかを決定する。現行のマシンサイクル内で単数又は複数の浮動小数点命令が退去させられた場合、Rd及びAEXC計算論理904 は、計算上のAEXCフィールドを含む信号及び図39内の FSRのfsr.aexrフィールド内に書き込むべきであることを表示する信号を含むWR CEXC AEXC FTT信号を出力する。その上、WR CEXC AEXC FTT信号は、同様に、ほとんどの現行の退去済み浮動小数点命令のためのFTT 及びCEXCデータを含む信号及び図39内の FSRのfsrftt及びfsr.cexcフィールドの中にこのデータを書き込むべきであることを表示する信号をも含んでいる。この状況下で、 FTTデータは、いくつかの理由で浮動小数点トラップ無しタイプを表示する。まず第１に、実行例外をひき起こさない浮動小数点命令は、退去される可能性があり、又浮動小数点トラップ無しタイプを表示する FPEXCEPリング内の対応する FTTフィールドを有することになる。第２に、IEEE 754  例外トラップを表示する FTTフィールドを有するもののFSR607の TEMフィールドによってマスキングされた単数又は複数の対応するIEEE 754  例外をひき起こした浮動小数点命令は、これらの実行例外のいずれかが発生したことについて PLSM307が警告を受けていないことから、退去される可能性がある。
【０３１０】
前述のとおり、 PLSM307は同様にFR ERR STAT 信号も受理する。これらの信号が、例外トラップが発生したことを表示した時点で、 PLSM307により実行トラップ配列決定プロセスが開始され、こうして CPU51はトラップ誘発命令に先立つ命令において同期化されることになる (すなわち RRP=CSN=ISN) 。
【０３１１】
CPU51が同期化された時点で、 PLSM307は FPEXCEP CHP信号を生成する。 FPEXCEP CHK信号に応えて、RD及びAEXC計算論理902 は、 RRPポインタを用いて、 RRP＋１にある命令のための FPEXCEPリング306 内の FP, FTT、及びCEXCフィールドを読みとる。
【０３１２】
読取りFTT フィールドが、浮動小数点トラップ無しを表示した場合、 RRP＋１にある命令は、浮動小数点例外をひき起こす原因ではなかったことになる。この命令では、いくつかの他の種類の例外が発生した可能性もあることから、RD及びAEXC論理904 は、fsr.ftt, fsr.cexc 及びfsr.aexcフィールド内に例も書き込まれるべきではないことを表示する信号を内含するように、WR CEXC AEXC FTT信号を出力する。
【０３１３】
しかしながら、読取り FTTフィールドが浮動小数点トラップ発生を表示した場合、 RRP＋１での命令が、浮動小数点例外の原因であったことになる。このとき、RD及びAEXC論理904 は、 RRP＋１での命令のための FPEXCEPリング306 から読みとられた FTTフィールドを含む信号及び図39内のFSR607の fsr.fttフィールド内に読みとられるべきであることを表示する信号を含むように、WR CEXC AEXC FTT信号を出力する。かくして、浮動小数点命令によってひき起こされたトラップタイプは、浮動小数点実行トラップ取扱いルーチンがトラップを適切に取扱うべく記憶FSR (STFSR) 命令で FSRにアクセスできるような形で、 FSRの fsr.fttフィールド内に含まれている。
【０３１４】
さらに、読取り FTTフィールドが IEE 754  例外が発生したことを表示した場合、RD及びAErC論理904 によって出力されたWR CEXC AEXC FTT信号は、 RRP＋１での命令のための FPEXCEPリング306から読みとられたCEXCフィールドを含む信号及び図39内のFSR607のfsr.cexcフィールド内に読みとられるべきであることを表示する信号を含む。その結果、浮動小数点命令によってひき起こされた現行の例外タイプは、ここでトラップ取扱いルーチンが記憶FSR (STFSR) でFSR607のこのフィールドにアクセスしトラップを適切に取扱うことができるような形で、 FSRのfsr.cexcフィールド内に含み入れられる。
【０３１５】
図37を参照すると、この場合、浮動小数点命令は予測された及び／又は実際のPC順外でFPU600によりout-of-order実行されることから、 RRP＋１における命令は、実行トラップ順序決定プロセスを PLSM307に開始させた障害発生命令ではなかった可能性がある。換言すると、浮動小数点命令は、より早期に発行された (すなわちより早期の通し番号をもつ) もののより晩期に実行されたもう１つの浮動小数点命令によってひき起こされた実行トラップよりも早く検出された実行トラップを結果としてもたらした可能性がある。しかしながら、より晩期に発行されたもののより早期に実行された命令は、より早期の命令が１つの例外を結果としてもたらした場合にマシンサイクルに先立って順序決定しながら PLSM307による実行トラップ順序決定の開始をひき起こし、その後 PLSM307はその処理へと切換わることにな。かくして、実行トラップ順序決定はそれでも、あたかもその実行トラップが実際のPC順で発生したかのごとく、より晩期に検出された実行トラップがより早期に検出された実行トラップに代って実際に取扱われるという結果をもたらす。
【０３１６】
FPEXCEPユニットについてSPARC-V9アーキテクチャという情況下で記述してきたが、当業者であれば、浮動小数点命令の機械的実行が関与するようなあらゆるアーキテクチャのためにこれを実施することができる、ということも理解できるだろう。
【０３１７】
Ｃ．プロセッサをより早期の状態にバックトラッキングすることによる回復
ウォッチポイント304 が誤予測命令を検出した時点、又は DFB62内で実行例外が発生し、PSU300内の実行例外(etrap) をトリガーした時点で、 CPU「バックトラック」が開始される。プロセッサをバックトラッキングすることには、以下でより詳細に説明する通り、プロセッサバックアップ及び／又はプロセッサバックステップが含まれる可能性がある。１つのマシンサイクル中、１つ以上の誤予測及び実行例外が発生し得る。典型的な CPU51においては、全ての機械的に実行された制御転送命令 (例えば、予測された分岐命令) がチェックポイントされる。このような誤予測された命令はつねに「チェックポイント境界」に存在する。チェックポイント済みの誤予測命令からの回復は、発行時点における誤予測命令に対応するチェックポイントの中に記憶されたマシン状態を回復することによって達成できる。実行例外は、誤予測とは異なり、全ての命令がチェックポイントされるわけではないことから、チェックポイント済み命令に対応しないかもしれない。一般に、実行例外を生成する命令が、あらゆる「命令境界」に存在し得る。１つのチェックポイント境界は、機械的に発行された制御転送命令についてのみ１つの命令境界に対応する。機械的に発行された命令の全てがチェックポイント形成を要求するわけではなく、むしろPC不連続性を作り出すような機械的制御転送命令だけである (ただし、制御転送命令がマシン「同期化」命令として選択され、本書に記述のとおり選択的にチェックポイントされる場合は除く) ということを思い出して頂きたい。従って CPU51がバックトラックされる要領は、回復を開始した条件及び誤予測又は例外がチェックポイントされた命令に対応しているか否かによって左右される。
【０３１８】
本書で使用される「バックアップ」という語は、チェックポイントの中に以前に記憶されたマシン状態を回復することによってチェックポイント境界においてマシン状態を回復し、次に CPU51命令の発行及び実行を再開するべく適切な行動をとるための構造及び方法のことを言う。本書で使用されているように、バックアップには、チェックポイントされた命令から順方向の命令のその後のin-order再発行及び再実行が関与していてもいなくてもよい。ここで使用される「バックステップ」という語は、可能な場合にはバックアップと組合わせてあらゆる命令境界でマシン状態を回復し次に CPU51命令発行及び実行を再開するべく適切な行動をとるための構造及び方法のことを言う。
【０３１９】
実行トラップ (etraps) に遭遇した場合、マシンは、その精確な状態を保存するため障害発生命令までバックトラックする。チェックポイント境界上に存在する誤予測と異なり、etrapsは、障害発生命令に達するべくバックステップ、バックアップ又はその両方の組合わせを必要とする。オペレーションの実行の必要性以外にはバックステップ又はバックアップオペレーションの順序付け又は頻度にはいかなる制約条件もない。組合わせて用いられた場合、マシンのバックアップ及びバックステップは、該予測及び実行例外からの効率の良い回復方法を提供し、しかも或る種の状況下では、有利にも、例外をひき起こす命令又はチェックポイント済み命令と障害発生命令の間の命令の再実行を強制することなく、これを行なうことができる。
【０３２０】
プロセッサのフローの中に変化があった場合（例えば、Bcc, FBcc, jumpl及び同様の命令) にはつねに、チェックポイントが割振られる。典型的な CPU51は、割当てのために最高16のチェックポイントが利用可能な状態にある。バックアップはマシン状態をチェックポイント境界へ回復するために行なわれる。あらゆる命令境界にマシン状態を回復するためにバックステップが行なわれる。典型的なマシンは、利用可能なハードウェアによりリサイクルあたり最高４つの命令をバックステップすることに制限される。バックアップはマシン状態を回復するための粗いが迅速なバックトラッキング機構を提供し、バックステップは、細かい命令境界においてマシン状態を回復するための機構を提供する。マシンは、バックアップ又はバックステップのあらゆる組合せを通して、より早期の状態までバックトラックすることができる。
【０３２１】
発明力あるバックアップ手順と合わせて発明力あるバックステップ手順を用いて精確な状態回復を実現するためには、２つの規則を遵守しなければならない。まず第１に、命令ストリーム内で、アーキテクチャ制御レジスタを修正し得る命令に遭遇した場合、 CPU51が、命令の実行に先出ち同期化されなくてはならないか、又はマシンがその命令をチェックポイントしなくてはならない。この第１の規則が遵守された場合、バックステッピングは、いかなるアーキテクチャ制御レジスタの修正も更新も決して要求しない。第２に、プログラムカウンタの不連続性を作り出す可能性のある全ての命令は、チェックポイントされなくてはならない。この第２の規則が遵守された場合、バックステッピングには、PCをバックステップ数だけ減分し、より早期の対応するプログラムカウンタで割当てられるにつれてマシン資源 (RRF302内に維持された資源を含む) を回復することが関与する。
【０３２２】
PSU300内に機械的に位置設定されたバックトラックユニット (BKTR) 305 が、適正な CPU51の機能及び回復に必要とされるようなマシンバックアップ及びバックステップを実施することを担当する。図40に示されている通り、 BKTR305は、マシンバックアップ、単数又は複数のマシンバックステップ又はバックアップとバックステップの組合わせのいずれか誤予測及び例外からの CPU51の回復にとって適しているかを決定することを担当するバックトラック制御ユニット (BTCN) 401 を含んでいる。 BTCN401は、 DFB62内の各々との実行ユニット及びウォッチポイント304 からSN、エラー及び状況情報を受理する。バックアップユニット (BKUP) 402 は、マシンバックアップを開始し順序決定することを担当し、バックステップユニット (BKST) 403 はマシンバックステップを開始し順序決定することを担当する。 CPU51は、命令発行を停止し、例外又は誤予測をひき起こす命令に適する通りバックアップ及びバックステップを用いてバックトラックしなくてはならない。バックステップを用いて CPU61をバックアップするため及びマシンをバックステップするための構造及び方法について以下でさらに詳しく記述する。
【０３２３】
１．チェックポイント境界へのプロセッサのバックアップ
マシンバックアップは、（１）ＰＳＵ３００内のＰＬＳＭ３０７がＲＥＤ  Ｍｏｄｅへのエントリを試みたとき、又は（２）ウオッチポイント３０４が誤予測命令（mispredicted instruction）を検出したときに起動される。また、（３）ＤＦＢ６２から障害命令（faulting instruction）（実行例外（execution exception ）、即ちｅ−トラップが検出されたときは、マシンのバックアップが起動される場合もあり、そうでない場合もある。バックアップ手続きは、バックアップのために実行されたチェックポイント命令（checkpointed instruction）の選択を含めて、バックアップを起動する理由によって異なる。実行例外の原因となる障害命令がチェックポイント境界に一致しない場合には、バックステップがバックアップに続いて行われる。
【０３２４】
各マシンサイクル毎に、バックアップユニット（ＢＫＵＰ）４０２は、データフォワードバスに関する命令の実行状態を示す情報ＥＲＲ ＳＴＡＴをＤＦＢ６２から受信すると共に、ウオッチポイント３０４からは誤予測命令に関する情報を受信する。これらの信号は、命令のシリアル番号（ＳＮ）、必要に応じてマシンのバックアックを命ずるチェックポイント、エラー発生の有無に関する指示、及びエラー形式に関する指示（例えば、据置（deferred）、データ中断、浮動小数点動作等）を識別する。ＦＸＡＧＵが乗算又は除算処理を行わない場合には、その実行ユニットからのＥＲＲ ＳＴＡＴ信号は、一般にエラー情報は与えず、ＥＲＲ ＳＴＡＴ信号中の命令のシリアル番号ＳＮ及びチェックポイント番号に関する情報を与える。チェックポイントは、発せられる全ての命令に対して形成されるものではないが、各命令にはその発生時点で、バックアップチェックポイントに割り当てられる。このチェックポイントは、命令発生以前にＰＳＵ３００内のＩＣＲＵ３０１によって割り当てられ、命令発生時にはＩＳＵ２００によって命令と組み合わされ、ＩＳＵ２００によって演算コード（ｏｐ−ｃｏｄｅ）及び命令のシリアル番号と共にDFB ６２に送られ、実行ユニットの待ち行列の一つに記憶される（例えば、バックアップチェックポイントは、チェックポイントフィールド６１４に記憶される。図２２参照）。従って、命令実行が完結すると、シリアル番号及びチェックポイント番号は直ちに、実行ユニット（例えば、ＦＸＵ、ＦＰＵ、ＦＸＡＧＵ、又はＬＳＵ）内で利用可能な状態となる。
【０３２５】
２．誤予測命令、RED Mode、及び実行トラップ起動によるバックアップ
誤予測命令がウオッチポイント３０４によって検出さたとき、又はＲＥＤ  Ｍｏｄｅへのエントリが行わたときは何時でも、ＢＫＵＰ４０２によってバックアップサイクルが起動され、実行例外からの回復が行われる。この実行例外からの回復はバックステップだけ、又はバックアップだけ、或いはバックアップと１以上のバックステップとの組合せを必要とする。ＢＫＵＰ４０２はチェックポイント・ベクトル・ロジックユニットを含み、このユニットは各サイクル毎に、ＤＦＢ６２及びウオッチポイント３０４から受け取る命令の実行状態に関する情報を評価し、どの命令が誤って予測されたか、又はどの命令が実行例外を起こしたかを決定する。典型的なＣＰＵでは、ロジックユニット４０４は、ＤＦＢ６２又はウオッチポイント３０４から受けた各チェックポイントに関して“ＯＲ”即ち論理和を取る。最早チェックポイント選択ロジック４０５は、どのチェックポイントが最早かを決定し、後の障害命令に対応するｅ−トラップが、既に強制終了させたロジック４０４によって識別されたチェックポイントへのバックアップを起動しないようにする。ＢＫＵＰ４０２は、どのチェックポイント番号をバックアップに使うかを決定する際に、誤予測及び実行例外を考慮する。
【０３２６】
マシンは、誤予測命令が最早チェックポイントであるときには、誤予測命令チェックポイント間で戻される。ＲＥＤ  Ｍｏｄｅ起動のバックアップに関しては、マシンはコミットしたシリアル番号（ＣＳＮ）に最も近く、それよりは大きい（Ａ−リング循環の意味で）チェックポイントへ戻される。また、実行例外に関しては、チェックポイントの選択はより複雑であって、実行例外の性質に依存する。
【０３２７】
実行例外（ｅ−トラップ）起動のバックアップの場合、据置及び非据置トラップによって、異なったバックアップチェックポイント番号の計算が必要になる。通常の非据置トラップに関しては、もしＩＳＮがチェックポイントｎ＋１を越えて移動したとき、チェックポイントｎの命令ｉが障害命令であれば、マシンはＩＳＮからチェックポイントｎ＋１、即ち障害命令の後のチェエクポイントまで戻される。もし、チェックポイントｎ＋１がアクティブでもなく又は有効なチェックポイントでもなければ、チェックポイントを要求する命令は発せられず、又は時間切れチェックポイントも形成されないから、バックアップは行われない。その代わり、障害命令がチェックポイント直後のシリアル番号スロットになければ、ＩＳＮから障害命令に後退するバックステップだけを使う回復が適当である。例えば、チェックポイントｍがシリアル番号ＳＮ＝１０を持つように割り当てられ、その時スロットＳＮ＝１１にある命令が障害命令であれば、チックポイントｍ＋１へバックアップの代わりに、チェックポイントｍへのバックアップが起動される。即ち、マシンは障害命令以前のチェックポイントまで戻される。
【０３２８】
実行されたチェックポイント命令が投機的分岐又はその他の制御転送命令に対応している場合には、実行されたチェックポイント命令と次の命令との間に、プログラムカウンタの不連続点が存在することになる。典型的なバックステップ動作は、プログラムカウンタの不連続点を越えて実行されることはなく、単一プログラム命令のシリアル番号差があるだけにも拘わらず使用することは出来ない。この状態では、バックアップ動作によってのみ、プログラムカウンタとマシン状態を適切に回復することができる。
【０３２９】
据置トラップは、非据置トラップとは異なるバックアップ・デスティネーション計算を必要とする。例えば、チェックポイントｍがシリアル番号ＳＮ＝１０を持つように割り当てられ、その時ＳＮ＝１１にある命令が障害命令であって、据置トラップを発生すれば、ＩＳＮはトラッピング命令に先立つ命令よりはむしろトラッピング命令を指定するから、マシンはチェックポイントｍの代わりにチェックポイントｍ＋１（もし在れば）まで戻される。もし、その時チェックポイントｍ＋１がなければ、バックアップは起動されない。その代わり、正確な状態は、マシンのバックステップだけを用いて回復される。表１０は、チェックポイント番号及び障害命令のシリアル番号に関する幾つかを条件として行った据置及び非据置トラップに対するバックアップ作用の概略を示す表である。
【０３３０】
バックトラック３０５が、マシンバックアップによって影響を受けるＣＰＵ５１にバックアップが生じていることを知らせる信号と、この影響を受けるＣＰＵ５１の各要素にバックアップに使用するチェックポイント番号を知らせる４ビットのデータ信号とから成る信号（ＤＯ ＢＡＫＵＰ）をアサートしたとき、プロセッサの状態は実行されたチェックポイントのシリアル番号に於いて回復される。実行されたチェックポイントの状態は、マシンに局部的に記憶されるから、ＣＰＵ５１の各々は、ＤＯ ＢＡＫＵＰ信号に応答して影響を受けたユニット内の記憶領域から状態を“回復”しなければならない。
【０３３１】
【表９】
2006107536.tif 000016
【０３３２】
実行されたチェックポイントに於ける状態の記憶、保持、回復を受け持つＣＰＵ５１のユニット、同様にバックアップ動作を順序づけるＣＰＵ５１のユニット（特にＰＳＵ３００内のユニット）は、ＤＯ ＢＡＫＵＰ信号を受信し、かつそれに応答する。ＲＲＦ３０２はＤＯ ＢＡＫＳＴＥＰ信号を受信するが、ＤＯ ＢＡＫＵＰ信号は受信しないことに注意されたい。これは、ＲＲＦがＣＰＵ５１をバックアップによってではなく、ステップ毎に状態を回復するのに直接必要とされるからである。
【０３３３】
更に明確に言えば、図６に於いて、チェックポイント記憶ユニット１０６は、ＤＯ ＢＡＫＵＰ信号によって特定されるチェックポイント番号に対応するエントリ時に、其処に記憶された実行されたチェックポイントのＡＰＣ及びＮＡＰＣの値を、ＣＨＫＰＴ ＰＣ及びＣＨＫＰＴ ＮＰＣ信号の形で出力する。これらの値はＡＰＣ及びＮＡＰＣのレジスタ１１２、１１３に記憶される。同様に、制御レジスタチェックポイント記憶ユニット８１７は、ＤＯ ＢＡＫＵＰ信号によって特定されるチェックポイントに関して実行された制御レジスタの内容を、ＣＨＫＰＴ ＣＮＴＲＬ ＲＥＧ信号の形で出力し、これら内容は図１７に図示の制御レジスタファイル８００中の対応する制御レジスタＮＯＲＤ／ＷＲ更新ロジックによって記憶される。更に、図１６に於いて、ＦＸＲＦＲＮ６０４、ＣＣＲＦＲＮ６０１、及びＦＰＲＦＲＮ６０５各々のチェックポイント記憶ユニット６１６は、ＤＯ ＢＡＫＵＰ信号によって特定されるチェックポイントに関して実行されたチェックポイントのリネイムマップを、ＣＨＫＰＴ ＭＡＰの形の信号で出力する。この実行されたチェックポイントのリネイムマップは、制御ロジック６１３によってリネイムマッピングロジック６１５に戻して記憶される。更に、フリーリストユニット７００は、ＦＸＲＦＲＮ６０４、ＣＣＲＦＲＮ６０１、及びＦＰＲＦＲＮ６０５各々の物理的レジスタの実行されたチェックポイントのフリーリストを、ＣＨＫＰＴ ＦＲＥＥＬＩＳＴ信号の形で出力し、この信号はフリーリストロジック７０１に記憶される。
【０３３４】
典型的なＣＰＵ５１では、ｅ−トラップがまだ続いているときでも、バックアップは起動される。ｅ−トラップ例外処理は多重サイクルを必要とするから、マシンが同期（ＩＳＮ＝ＣＳＮ＝ＲＲＰ）され、トラップを取って処理する以前に、一つ以上のｅ−トラップをＤＦＢ６２がアサートすることは可能である。典型的なＣＰＵ５１の一実施例では、スロット０及び１の各々に関するＤＦＢ６２からのエラー及び状態信号（ＥＲＲ ＳＴＡＴ）の各々は、１ビットエラー信号、６ビットのシリアル番号信号（ＦＸ ＳＮ、ＦＰ ＳＮ、ＬＳ ＳＮ、及びＦＸＡＧ ＳＮ）、及び各命令毎に適当なバックアップチェックポイントを計算するのに使用される１６ビットの１−ホット・チェックポイント・ベクトル（ＦＸＤＦ ＣＨＫＰＮＴ、ＦＰＤＦ ＣＨＫＰＮＴ、ＦＸＤＦ ＣＨＫＰＮＴ、ＬＳＤＦ ＣＨＫＰＮＴ）からなっている。更に、誤予測命令に関する情報信号ＷＰ ＭＩＳＰＲＥＤは１−ホットベクトルであって、其処でのビットｉのアサートは、ｉ番目のチェックポイントが誤予測命令に対応し、バックアップを必要としたことを示す。チェックポイントベクトルロジックユニット４０４は、スロット０及び１の各々からの１６ビットの１−ホットチェックポイントベクトルの全てについて、累積的に論理和を取る。この動作はマシンがベクトルをトラップテーブルにするまで続けられる。論理和を取ったチェックポイントベクトルは、最早チェックポイントを決める最早チェックポイント選択ロジック４０５に供給される。たとえ、後の命令に対応して実行例外が生じても、前のバックアップによって既に強制終了したチェックポイントへのバックアップは起動されない。典型的なＣＰＵ５１では、ウオッチポイント誤予測信号（ＷＰ ＭＩＳＰＲＥＤ）は１６ビットの１−ホットベクトルで、其処でのビットｉのアサートは、ｉ番目のチェックポイントが誤予測命令に対応し、バックアップを必要としたことを示す。
【０３３５】
３．何れかの命令境界へのプロセッサのバックステップ
マシンバックステップはＤＦＢ６２に於ける障害命令から発生された実行例外（ｅ−トラップ）の結果としてのみ起動される。マシンバックステップはマシンバックアップとの組合せで起こることが多いが、バックアップを起動しなくても起動される。
【０３３６】
バックステップユニット（ＢＫＳＴ）４０３はバックステップの実施を受け持っている。マシンの“バックステップ”はＤＦＢ６２に於ける障害命令から発生するｅ−トラップの結果として起こるだけである。バックステップが実施されると、２つの事象がマシンに起こる。第１に、未決命令が強制終了されるため、資源は回復されて利用可能になる。これら資源にはシリアル番号、チェックポイント、ウオッチポイント、及び割り当てられた物理的レジスタ及び論理レジスタが含まれる。第２に、ＩＳＮはバックステップ動作中減分するが、ＣＳＮ及びＲＲＰを下回って減分することはない。障害命令は依然としてそのアクティブビットをＡ−リングセット中に有していて、それによってＣＳＮ及びＲＲＰの送り（advancement ）を抑えている。障害命令がエラーを起こさずに首尾良く実行されたときだけ、その命令に対応するＡ−リングビットがクリアされる。（据置トラップを上手く扱った時に、Ａ−ビット（及びＢ−ビット）はクリアとなって、ＣＳＮ（及びＮＭＣＳＮ）の送り及び資源の最終回復を許容することを除く）。
【０３３７】
マシンバックステップ動作は、バックステップ始動制御信号（ＢＡＣＫＳＴＥＰ ＬＡＵＮＣＨ）及びバックステップに使用したい命令のバックステップシリアル番号を識別するＰＬＳＭ３０７からのバックステップシリアル番号識別信号（ＢＡＣＫＳＴＥＰ ＴＯ
ＳＮ）によってＢＫＳＴ４０３に於いて開始される。これに応じて、ＢＫＳＴ４０３は、バックトラック３０５がバックステップモードを開始していることをＩＣＲＵ３０１及び他のＣＰＵ５１２知らせるバックステップ通知信号（ＤＯ ＢＡＫＳＴＥＰ）を発生することによってバックステップ手続きを順次実施する。ＢＫＳＴ４０３は、バックステップを終えた命令番号のカウントを識別し、ＰＬＳＭ３０７によるタスクを果たすために起動することが可能な周辺制御装置として見ることができる信号を発生する。ＢＫＳＴ７０３はＰＬＳＭの要求に応じてタスクを開始し、タスクを果たし終えた時には、タスクの終了をＰＬＳＭに指示して、次の要求に待って待機する。
【０３３８】
ＢＫＳＴ４０３は２つの条件形式に関するバックステップを扱う。その第１の形式は非据置ｅ−トラップである。非据置ｅ−トラップは、据置トラップ信号がＰＬＳＭ３０７によってアサートされず（ＩＳＡ ＤＥＦＥＲＲＥＤ ＴＲＡＰ＝０）、かつバックステップ開始制御信号が、据置トラップではないｅ−トラップを示す信号（ＢＡＣＫＳＴＥＰ ＬＡＵＮＣＨ＝１）であるとアサートされている場合に起動される。この場合、バックステップ量はバックステップされるシリアル番号（ＢＡＣＫＳＴＥＰ ＳＮ）と次ぎに発せされるシリアル番号（ＮＩＳＮ）との差を決めるＢＫＳＴ４０３で計算される。発せられた命令のシリアル番号（ＩＳＮ）ではなく、次ぎに発せられるシリアル番号（ＮＩＳＮ）を使用することによって、マシンは障害命令直前の命令まで戻る。このバックステップ量は、ＣＰＵ５１内の記憶領域に保存され、障害命令の前の命令に到達するまで減分される。
【０３３９】
第２のバックステップ条件は据置ｅ−トラップを含んでいる。据置ｅ−トラップは、据置トラップ信号がＰＬＳＭ３０７によってアサートされてる信号であって（ＩＳＡ ＤＥＦＥＲＲＥＤ ＴＲＡＰ＝１）、かつバックステップ開始制御信号が、据置トラップであるｅ−トラップを示す信号（ＢＡＣＫＳＴＥＰ ＬＡＵＮＣＨ＝１）であることをアサートしている場合に起動される。この場合、バックステップ量はバックステップされるシリアル番号（ＢＡＣＫＳＴＥＰ ＳＮ）と、発せされるシリアル番号（ＮＩＳＮ）との差を決めるＢＫＳＴ４０３で計算される。此処でマシンは障害命令の前の命令ではなく、障害命令にバックステップされる。計算されたバックステップ量は、通常の非据置バックステップより小さい。
【０３４０】
典型的なＣＰＵ５１では、４つの命令の内の最大のものが、各マシンサイクルに関してバックステップされる。従って、４つまでの命令の多重バックステップはそれぞれ行き先（バックステップの）命令に到達する。一般に、シングルサイクルに関してバックステップ命令の数を限定する必要はない。典型的な実施例に於けるもう一歩進めた限定は、ＰＣをバックステップ量だけＩＳＮ（又はＮＩＳＮ）から減じても、適当な状態回復とはならないから、バックステップ方法はプログラムカウンタの不連続の原因となる命令に関するバックステップをサポートするものではない言うことでる。
【０３４１】
“ＩＤＬＥ”及び“ＢＡＣＫＳＴＥＰ”と言う２つの状態からなる簡単なマシン状態は、バックステップを順次実施するのに使用される。ＩＤＬＥ状態にある間の“ＢＡＣＫＳＴＥＰ ＬＡＵＮＣＨ”アサートは、ＢＡＣＫＳＴＥＰ状態への遷移となる。また、ＢＡＣＫＳＴＥＰ状態にある間にＤＯ ＢＡＣＫＳＴＥＰがアサートされると、２つの終了条件が評価される。これら２つの条件の何れかが，ＢＡＣＫＳＴＥＰを終了させ、ＩＤＬＥに戻す。
【０３４２】
バックステップ中に於けるＣＰＵ５１の状態回復には、マシンレジスタ資源を更新すること、及びプログラムカウンタをバックステップ量だけ減分することだけが含まれる。上記のように、構成上の制御レジスタを修正する命令は、マシンを同期するか、チェックポイントを実行するから、バックステップ中に構成制御レジスタの回復を必要としない。典型的なＣＰＵ５１では、以下のマシン状態はバックステップ中に更新される。即ち、プログラムカウンタ（ＰＣ）、次のＰＣ、ＲＲＦに記憶された情報、及びリネイムマップに記憶された情報が更新される。トラップＰＣ、トラップＲＲＦ、及びＢＲＢ５９の特権レジスタを含むその他の制御レジスタは、バックステップ動作によって修正も更新もされない。マシンの資源は、レジスタリクレームフォーマットファイル（ＲＲＦ）３０２に記憶されたロジカル−ツウ−オールド−フィジカルマッピングに関連するレジスタファイルから回復される。バックステップ通知信号（ＤＯ ＢＡＣＫＳＴＥＰ）がアサートされると、ＩＣＲＵ３０１、ＲＲＦ３０２、及び他のＣＰＵ５１２は、バックステップモードが起動されていることが通知される。バックステップに於いて、各バックステップサイクル中に回復及び記憶されるＲＲＦ３０２アイテム数は、バックステップカウント信号によって示されるバックステップされる命令の数に等しい。
【０３４３】
従って、これらの状態の記憶、保持、及び回復を果たすＣＰＵ５１は、バックステップ動作を順次果たすＣＰＵ５１（特にＰＳＵ３００内の）と共に、ＢＲＢ５９、ＩＳＢ６１、及びＤＦＲ６２内のユニットを含めて、バックステップ信号を受信し、それに応答する。ＲＲＦ３２０は、ＣＰＵ５１をバックステップさせて、バックアップではなくステップ毎にそれを回復することだけに直接関与するから、ＤＯ ＢＡＣＫＳＴＥＰ信号を受信するがＤＯ ＢＡＣＫＵＰ信号は受信しない。
【０３４４】
レジスタリクレームフォーマットユニット３０２は、バックステップをアサートした信号（ＤＯ ＢＡＣＫＳＴＥＰ）に応答し、リクレームされて回復されるＲＲＦアイテムの数は、ＤＯ ＢＡＣＫＵＰ信号内のバックアップステップカウント数に等しい。ＲＲＦは、ロジカル−ツウ−オールド−フィジカルマップ、即ちソース又は行き先データ値を保持するロジカル−ツウ−オールド−フィジカルレジスタの割当を含んでいる。ＲＲＦ３０２の命令に割り当てられたレジスタ資源、又はレジスタマップの何れもＣＳＮ又はＲＲＰを進めることによってフリーリスト７００へは自由に戻れないから、レジスタの実際のデータは妨害されない。ＲＲＦは、バックステップした命令をもと実行したきと同じ関係で、フィジカルレジスタ（オールドフィジカルレジスタ）をロジカルレジスタを再度組み合わせる。レジスタマッピングを一つずつ回復することによって、各命令のレジスタ状態が回復される。要するに、レジスタ資源から見れば、マシンはバックステップ動作中後退する。図１８はＲＲＦノブロック図である。図１４は、ロジカル−フィジカルマッピングが、レジスタリネイムファイルＦＸＦＲＮ、ＣＣＦＲＮ、ＦＣＣＦＲＮ及びＦＰＦＲＮに回復される仕方を示す図である。
【０３４５】
ＲＲＦの典型的な実施例では、幾つかの情報（ＬＯＧ ＯＰＨＹＳ ＴＡＧＳ）を含むロジカル−オールドフィジカルレジスタ情報は、データ保存構造又はユニット３６６の何れかに保存のため、読み／書き制御ユニット３６５にまとめられている。回復のためＲＲＦをレジスタリネイムマップに読み出すとき、ＲＲＦデータは回復のためにもとのフォーマットに戻される。本願の教示から当業者は、種々の保存フォーマット及びデータのまとめ／解き方の手順をＲＲＦデータに適用して保存領域を最小化し得ることが分かるだろう。
【０３４６】
特に、バックステップが行われているとき、読み／書きロジック３６５は、保存ユニット３６６を制御して、ＤＯ ＢＡＣＫＳＴ信号によって識別される命令に対応するロジカル−オールドフィジカルレジスタ・タグ・マッピングをＬＯＧ ＯＰＨＹＳ ＴＡＧＳ ＢＫＳＴ信号の形で出力する。図８、１６、１８、及び３９に於いて、ロジカル−オールドフィジカルレジスタ・タグ・マッピングは、ＦＸＲＦＲＮ６４０、ＦＰＲＦＲＮ６０６、及びＣＣＲＦＲＮ６１０に復元される。図１６に示すように、ＤＯ ＢＡＣＫＳＴ信号に応答する制御ロジック６１３は、これらのマッピングをリネームマッピングロジック６１５に復元する。
【０３４７】
更に練られたバックステップ計画は追加情報を維持することによって実施される。しかし、本願発明による方法では、プログラムカウンタの値は基本ブロック内の命令に対応する。即ちバックステップされる命令の間にはプログラムカウンタの中には不連続が存在しないから、方法は簡素化される。バックステップユニット４０３は単に実行された滅入れのシリアル番号からのバックステップ数、又はバックアップなしにバックステップを用いられたときの現在のＩＳＮからバックステップ数を信号で合図する。もし、プログラムの不連続があれば、それらプログラムカウンタの減分は、必ずしも適当な回復とはならない。しかし、本願に含まれている教示にから当業者は、より複雑なバックステップ技術を用いることによって、プログラムカウンタの不連続が許容されることが分かるであろう。
【０３４８】
２つのバックトラック機構、即ちマシンバックアップ及びマシンバックステップは、投機的命令の続発を取り消す効果的な方法及び構成でるプリサイス・ステート・ユニット(Precise State Unit)を提供する。マシンバックアップは、プリサイス・ステート・ユニットがＣＰＵ５１をアクティブチェックポイント境界に対応する状態にすることを可能にする。マシンバックステップは、プリサイス・ステート・ユニットがＣＰＵ５１をチェックポイント境界の間の特定の命令境界にバックトラックすることを可能にする。バックアップは、マシン状態回復のための粗いけれども早い方法及び構成を提供し、バックステップはマシン状態回復のための正確だが遅い方法及び構成を提供する。図４１は何れの命令境界に於いても、正確な状態を保持し、回復するための本発明による実施例の流れ図を示す。図４２はロジカル−フィジカルマッピングを、レジスターリネームファイルに復元する方法を示す図である。
【０３４９】
図４３は２つのバックステップを伴うマシンバックアップの例を示す図である。バックステップは一度の幾つかの命令を、単一ステップ又は多重ステップとして実行できる。この例では、ＣＰＵ５１は命令障害が検出された時点で、ポインタＩＳＮに対応する命令を既に発している。マシンは障害命令の後の最も近いチェックポイントにマシンを戻すことによって応答する。このもっと近いチェックポイントとＩＳＮとの間の命令は強制終了させられる。４つの命令の量による第１のバックステップは、それらの命令を発している間、４つの命令（第１バックステップ参照）に関わる全ての資源を再生することによって、マシンを障害命令に更に近づける。次いで、３つの命令量による第２（及び最終）バックステップは、それら残りの命令（第２バックステップ領域参照）に関わる全ての資源を再生することによって、障害命令の直前にマシンを持ってくる。
【０３５０】
チェックポイントまでの戻りは早いが、チェックポイントを回復するのに多くのマシン資源が必要になる。誤予測命令は全て、チェックポイントが作られる要因となるから、状態はワンステップで誤予測命令に戻される。バックステッピングはバックアップより遅いが、本発明のバックステップ手続きはマシン状態を、障害命令前のチェックポイントに於ける状態にではなく、特定命令の実行点に在ったときの状態に戻す。そして、本発明のバックステップ構成及び方法によって、マシンは従来の方法によるように、チェックポイントの前のチェックポイントへ行き、それから障害命令にバックステップするのではなく、障害命令の後のチェックポイントに戻ることが出来る。
【０３５１】
Ｄ．例外及び誤予測回復時に於ける優先ロジック及び状態マシン動作
図４４はＣＰＵ５１内に機能的に置かれた典型的な優先ロジック及び状態マシン（ＰＬＳＭ）３０７を示す。ＰＬＭＳは幾つかの役割を持っている。第１に、未処理又は並行例外群の最早の例外を識別する役割を果たす。例外条件には、ＲＥＤ  Ｍｏｄｅ、発行トラップ（ｉ−ｔｒａｐｓ）、実行トラップ（ｅ−ｔｒａｐｓ）、割り込み、及び誤予測が含まれる。第２には、マシンサイクル中に到着する例外及び誤予測を、相互間で、また並行処理される例外及び処理待ちのものの間の優先順位を決める役割をは果たす。第３に、形式の異なる例外及び誤予測間の可能な状態遷移を決定する役割を果たす。第４には、Ｂａｃｋｔｒａｃｋｉｎｇ（Ｂａｃｋｕｐそして／又はＢａｃｋｓｔｅｐ）、ＲＥＤモード処理を起動する制御信号を発する役割を果たす。
【０３５２】
命令の発行又は実行中に起こる種々の形式の例外について、ＰＬＳＭ３０７による例外及び誤予測の優先順位付け及び扱いがよく分かるように説明する。ＲＥＤトラップは、種々の条件下で起こり、全てのトラップの中で最も高い優先順位を有する非同期トラップである。ＲＥＤ  Ｍｏｄｅは、ＳＰＡＲＣ  Ｖ−９  アーキテクチャーマニュアルに説明されている。ｉ−ｔｒａｐｓは命令発行時にＩＳＵ２００によって発生される発行トラップである。これらは、何れのレジスタスピル／フィル(spill/fill)トラップ、何れのトラップ命令（ＴＡ、Ｔｃｃ）、命令アクセスエラー、違法命令、特権演算コード等を含んでいる。一般に、発行トラップは、取り扱いに関して低い優先順位にある割り込みに較べれば、高い優先順位にある。信号を送られるその他の全てのとラップ（誤予測、ｅ−トラップ又はｒｅｄトラップ）は、一時的には発行命令よりは早い命令に向けられる。
【０３５３】
ｅ−ｔｒａｐｓはデータフォワードバスの一つから信号を送られる実行トラップである。実行トラップは、ＳＮ順に他の実行トラップに対して優先順位を付けなければならない。これは、実行トラップは必ずしもチェックポイント境界で発生するとは限らず、また障害命令に達するにはバックステップが必要になる場合が在るからである。もし、マシンが障害命令に達するためにバックアップを実施すれば、何れかの新たな例外がより早い命令に向けられる。もし、実行トラップが順次実施されていれば、何れか新たな誤予測がより高位の優先順位となる。これは、誤予測命令は常にそれが利用し得るチェックポイントを有しているからである。もし、ＰＳＵ３００が必ずしも何れかの例外を実施していなければ、実行トラップ及び誤予測は、それぞれ他に対して優先順位が付けられていなければならない。割り込みは、非同期トラップのもう一つの形である。割り込みは他の全ての例外より下位の優先順位にある。
【０３５４】
投機的に発した転送制御命令が誤予測であることをウオッチポイントが検出したとき、ウオッチポイントユニット３０４は誤予測に信号を送る。もし、何れかの非ＲＥＤ例外が順次実行されていれば、誤予測は常にチェックポイント境界上にあって、一時的に早い命令に対して起こるから、優先順位を付ける必要はない。もし、例外が実施されていなければ、誤予測は割り込み及び発行トラップより高位の優先順位を持つが、実行トラップに対しては優先順位を付けなければならない。
【０３５５】
最早シリアル番号選択ロジックユニット（ＥＳＮＳＬ）４８１は、ＤＦＢ６２の各実行ユニットから、実行完了した命令のシリアル番号及び実行中に例外が起こったかどうかに関する情報、及びもし起こっていたら、その例外の形に関する情報を含む状態情報を受けると共に、ウオッチングユニット３０４からはそのサイクル中に起きた何れかの誤予測を示す信号（ＷＰ ＭＩＳＰＲＥＤＩＣＴ）を受け、更に現在のＩＳＮを受け、また更にＥＳＮＳＬ４８１からは、最終マシンサイクル（ＣＵＲＲ ＥＡＲＬＩＥＳＴ ＳＮ）からの新たな例外情報を受け取る前の現マシンサイクルで処理された例外のＳＮをを示す帰還信号を受け取る。各実行ユニットからの信号はＥＲＲ ＳＴＡＴを含んでいる。例えば、もし６４ロケイションＡ−リング３１２の命令ＳＮ＝１０及びＳＮ５６に対して例外が生じれば、最早例外はＩＳＮの値を知ることなしには決めることは出来ない。もし、ＩＳＮ＝４０なら、ＳＮ＝５６が最早例外となる。しかし、もしＩＳＮ＝６なら、ＳＮ＝１０が最早例外となる。
【０３５６】
ＥＳＮＳＬＵ４８１は、最早例外及び誤予測を優先順位及び実行スイッチングロジック（ＰＥＳＬ）ユニット４８２に知らせて、ＰＥＳＬが最早ＳＮ基準及び例外の形に基づいて例外及び誤予測処理に優先順位を付けることが出来るようにする。また、ＰＥＳＬはＩＳＵ２００から発行トラップ信号（ＩＳＵ ＩＴＲＡＰ）及び割り込み信号（ＩＳＵ ＩＮＴＥＲＲＵＰＴ ＰＥＮＤ）を受信すると共に、Ｂａｃｋｔｒａｃｋがチェックポイント情報の比較に基づいて誤予測が実行トラップより早く生じたことを決定きる場合には、Ｂａｃｋｔｒａｃｋユニット３０５からＭＩＳＰＲＥＤＩＣＴＥＤ ＥＡＲＬＩＥＲ信号を受信する。また、ＰＥＳＬは状態マシン及び制御ロジック（ＳＭＣＬ）４８３から状態信号を受信する。ＳＭＣＬは状態マシン４８４及び例外制御信号発生ロジック４８４を含み、現在処理している例外（例えば、実行トラップ、発行トラップ、ＲＥＤ等）があればその形を識別する。例外の状態は状態マシン４８４に記憶される。ＰＥＳＬ４８２はこれらの入力を現在及び未決の例外の優先順位を決めるのに使用し、現在実施中のマシンサイクルのための新たな例外に形を識別する信号（ＮＥＷ ＥＸＣＥＰＴＩＯＮ ＴＹＰＥ）を発生する。
【０３５７】
例外制御信号発生ロジック４８４は、ＤＰＵ５１内の他のユニットにＣＰＵの状態を知らせると共に、場合によっては、状態に応じて他のＣＰＵユニットにアクションを取らせる信号を発生する役割を持っている。更に明確に言えば、ＥＣＳＩＧはＴＡＫＥ ＴＲＡＰ信号を発生し、それをトラップが行われる制御部分及びトラップの種類を含むトラップスタックユニットに送る。このトラップスタックユニットはＤＥＦＥＲＲＥＤ ＴＲＡＰ
ＩＮＣを、据置トラップが起きたかどうかを示すＩＣＲＵ３０１に送り、例外を越えて一つだけＣＳＮ及びＮＭＣＳＮを進ませる。また、ＥＣＳＩＧはＢａｃｋｔｒａｃＫに対して、どの命令ＳＮにバックステップするか（ＢＡＣＫＳＴＥＰ ＴＯ ＳＮ）、ＲＥＤモード例外があるか、そしてＲＥＤモード例外の場合にはどの命令にバックアップするか（ＢＡＣＫＵＰ ＲＥＤ）を告げる幾つの信号をバックトラックユニット３０５に送る。また、ＥＣＳＩＧ４８４は命令強制終了信号をＤＦＢ６２（ＫＩＬＬ ＡＬＬ）及びＩＳＵ２００（ＩＳＳＵＥ ＫＩＬＬ）に送り、ＤＦＢ６２に対しては、実行待ち行列中の命令の実行を強制終了するように指示し、ＩＳＵに対しては、そのマシンサイクル中に扱われている例外又は誤予測に適当な命令の発行を中止するように指示する。
【０３５８】
ＰＬＳＭ３０７はトラップを探知して５つの異なる形、即ち割り込み、レッドトラップ、発行トラップ、実行トラップ、誤予測に区分する。どの例外が現在順次処理されているかによって、検知される他の例外は高い優先順位を持っているか、そうでない場合もある。もし、新たな例外が高い優先順位を持っていれば、ＰＥＳＬ４８２はＳＭＣＬ４８３に対し現在の例外を順次処理することから新たな高い優先順位の例外又は誤予測にスイッチするように指示する。状態マシン４８４に於けるこれらの状態遷移は、現在の例外の形、即ち新たなエラーがウオッチポイント、ＩＳＵ、又は６つのデータフォワードバスの何れから報告されたか、及び新たな例外が現在のものより一時的に早いかどうかによる。
【０３５９】
可能な状態遷移は以下のようにして起こる。ＲＥＤ−Ｎｏトラップ形は状態ＲＥＤからの遷移を強制する。ＩＴＲＡＰ−３トラップ形（誤予測、実行トラップ、ＲＥＤＯアラート）は他の一つの状態への遷移を強制できるが、割り込みは遷移を強制しない。ＥＴＲＡＰ−Ｒｅｄアラート及び誤予測は遷移を強制し、常に高い優先順位を有し、他の実行トラップは優先順位化を必要とし、割り込みは低い優先順位を有し、マシンはマシン同期のためバックアップ又は待機状態の何れかにあり、発行トラップを発する命令は発せられないから、発行トラップは不可能である。ＩＮＴＥＲＲＵＰＴ−全トラップ形は高い優先順位を有し、遷移を強制することが出来る。ＭＩＳＰＲＥＤＩＣＴ−３トラップ形（誤予測、事項とラップ、レッドアラート）は高い優先順位を有し、優先順位付けを必要とせず、張り込みは低い優先順位を有し、命令発行は誤予測処理ちゅう強制終了させられているので、発行トラップは起こらない。ＩＤＬＥ−Ｒｅｄトラップは最高優先順位を有し、同時誤予測及び実行トラップが、チェックポイントの比較に基づいて誤予測が早く起きたか、実行トラップが早かったかの決定が行われるＢＡＣＫＵＰへの遷移に帰着する４つの形の一つを伴う。Ｂａｃｋｔｒａｃｋは優先順位より早く決定が出来るから、優先順位化に基づいたチェックポイントに対する据置は好ましい。しかし、優先順位化はＰＳＬＭに於いて実行が可能である。最後に、発行トラップ、次いで割り込みが順次処理される。
【０３６０】
E.トラップ・スタックによるトラップの処理
先に示した如く、トラップは図５の命令パイプライン内で幾度も生じ、且つ、トラップ処理ルーチンにより処理されねばならない（即ち、受入れられねばならない）。図１７を参照すると、トラップを受入れるべき例外をPSU 300 が既述の手法で検知すると、PLSM 307はTAKE TRAP 信号を生成し、これにより、制御レジスタファイル800 にトラップを受入れさせると共に、受入れられるべきトラップのタイプを識別する。これに応じ、リード／ライト／更新ロジック816 はTBA レジスタ812 から対応トラップベクトル(TRAP VEC)信号を読み出してこれをBRB 59に送る。図６を参照すると、PCロジック106 はTRAP VEC信号を使用して新たなFPC 、APC およびNAPCを算出し、これにより、対応トラップ処理ルーチンの命令を取り出して出力する。
【０３６１】
トラップ処理ルーチン内で生じたトラップがSPARC-V9アーキテクチャにより特定された如きネスト手法（即ち、受入れられたトラップの内部でトラップが受入れられる手法）で処理される様に、制御レジスタファイル800 は図１７に示されたトラップスタックユニット815 を含んでいる。このトラップスタックユニット815 は図４５に更に詳細に示されているが、該ユニットは、記憶エレメントもしくは記憶エントリを備えたデータ記憶構造であるトラップスタック820 を含んでいる。
【０３６２】
記憶エントリの各々は４個のフィールドを有しており、これらのフィールドはSPARC-V9アーキテクチャマニュアルによれば、トラップ・プログラム・カウンタ(TPC) 、トラップ・ネクスト・プログラム・カウンタ(TNPC)、トラップ・ステート(TSTATE)、トラップ・タイプ(TT)の各フィールドである。TPC およびTNPCフィールドは、トラップが受入れられる時点の、BRB 59のAPC レジスタ113 およびNAPCレジスタ114 内の夫々のAPC 値およびNAPC値を含んでいる。SPARC-V9アーキテクチャマニュアルに記載された様に、TSTATEフィールドは、トラップが受入れられた時点で図３９に示されたCCRFRN 610内のXICCレジスタの内容と、図１７に示されたASI レジスタ808 、CWP レジスタ809 およびPSTATEレジスタ805 の内容とを含んでいる。TTフィールドは、受入れられたトラップのタイプを識別する。
【０３６３】
図４５に再度戻ると、トラップが受入れられたとき、現在のPC、NPC 、TSTATEおよびTTの各値は、トラップスタック820 の記憶エントリの内のひとつの記憶エントリの対応フィールド内に記憶されている。受入れられたトラップのネスト数を表示するトラップレベル(TL)は次にインクリメントされると共に、トラップ処理ルーチンは受入れられたトラップの処理を開始する。しかし乍ら、もしトラップ処理ルーチンの間にトラップが生じたときには、この第２のトラップの時点におけるPC、NPC 、TSTATEおよびTTの各値は、トラップスタック820 の記憶エントリの内のもうひとつの記憶エントリの対応フィールド内に記憶される。次に、第２トラップを処理する為に、第２のトラップ処理ルーチンが呼び出される。第２トラップ処理ルーチンの終わりにてはDONEもしくはRETRY 命令が実行されて、第２トラップに対する記憶エントリ内に記憶されたPC、NPC 、TSTATEおよびTTの各値が対応レジスタ内に書込まれると共にトラップレベルがデクリメントされる。この結果、CPU 51は、第２のトラップを受入れた時点の状態に戻ると共に、第１トラップ処理ルーチンが第１トラップの処理を再開する。その後、第１トラップ処理ルーチンのDONEもしくはRETRY 命令が実行されたとき、CPU 51は第１トラップを受入れた最初の状態に戻る。
【０３６４】
以上から、SPARC-V9アーキテクチャにより必要とされる如く、トラップスタックユニット815 は多数のトラップレベルを含むことにより多段階にネストされたトラップの処理をサポートすることは明らかである。但し、SPARC-V9アーキテクチャが４段階のトラップレベルをサポートすべく４個の記憶エントリを備えたトラップスタックを指定してはいるが、上記トラップスタック820 は４段の所要のトラップレベルをサポートすべく８個の記憶エントリ０〜７を含んでいる。付加的な４個の記憶エントリは、レジスタまたは記憶エレメントの名称変更の概念が以下に記述する如くトラップスタックユニット815 まで拡張され、トラップが投機的に受取られ且つそこから戻れる様になる。更に、前述の如く、記憶エントリ数がトラップレベル数より大きい限り、本発明は任意の個数のトラップレベルにて実施され得る。
【０３６５】
トラップスタックユニット815 はフリーリストロジック821 を含み、該ロジックは、各トラップと連携されたTPC 、TNPC、TSTATEおよびTTの値を記憶すべく現在使用可能なトラップスタック820 の記憶エントリの全てのリストを記憶している。図４６を参照するに、フリーリストレジスタ822 は、各マシンサイクルの間に、８ビットのFREELISTベクトル信号形態とされた現在使用可能な記憶エントリのリストを記憶する。このFREELIST信号の各ビットは、トラップスタック820 の記憶エントリのひとつに対応すると共に、その記憶エントリが現在使用可能であるか否かを識別するものである。FREELISTベクトルにより使用可能であると識別された最初の記憶エントリに対し、ファーストワンエンコーダ823 は次にそのベクトルをWR＿ENTRY 信号にエンコードするが、該信号は、この記憶エントリを識別すると共に、受入れるべき次のトラップに対するTPC 、TNPC、TSTATEおよびTTの各値を書込むためのポインタの役割を果たすものである。
【０３６６】
FREELISTロジック821 はまた、オールゼロ検出器836 も含んでいる。それは、FREELIST信号がオールゼロビットを含むことによりトラップスタック820 内の記憶エントリはいずれも利用できないことを示す時点を決定する。もしこの場合が生ずれば、それはNO ENTRY AVAIL信号を提示する。
【０３６７】
図４５を参照すると、PSU 300 によりトラップを受入れるべきことが決定され乍らもNO ENTRY AVAIL信号は利用できる記憶エレメントが存在しないことを示しているとき、それが出力したTAKE TRAP信号は、NO ENTRY AVAIL信号により記憶エレメントが利用可能であることが示されるまで、トラップを受入れるべきことを示さない。更に、PSU 300 はISSUE KILL信号およびFETCH SHUTDOWN信号を発し、ISU 200 による命令の出力とBRB 59による命令のフェッチとを停止するが、これは、NO ENTRY AVIAL信号により記憶エントリが使用可能であることが示されるまで継続される。これによれば、直ちに明らかとなる如く、CPU 51を同期することによりチェックポイントが解除され且つトラップスタック820 内の記憶エントリが回復されて再利用出来るようになる、という効果が得られる。
【０３６８】
しかし乍ら、NO ENTRY AVAIL信号が発せらないときにPSU 300 は制御レジスタファイル800 に対してTAKE TRAP 信号を出力するが、該TAKE TRAP 信号は前述の如く、トラップを受入れるべきことを示す信号とトラップのタイプを識別する信号とを含むものである。これに応じ、制御レジスタ・リード／ライト／更新ロジック816 は、ASI レジスタ808 、CWP レジスタ809 およびPSTATEレジスタ805 の内容を読み出してトラップスタックユニット815 のトラップスタック820 に供与する。
【０３６９】
これと同時に、トラップスタック820 は、該トラップスタック820 のTPC およびTNPCフィールドに書込まれるべき現在のAPC およびNAPC値を含むWR TPC TNPC 信号を受信する。また、後述する様に、トラップスタック820 は、利用できる様になったときに図８のFSR/CCRFRN 610内のXICCレジスタのXICCデータを受信する。
【０３７０】
TAKE TRAP 信号に応じ、トラップスタックRD/WR 制御ロジック822 はTAKE TRAP 信号により含まれたトラップタイプ (TT) フィールドを抽出すると共に、それをトラップスタック820 に供与する。次に、RD/WR ロジック822 は、受信したAPC 、NAPC、ASI 、CWP 、PSTATEおよびTTの各値を、WR ENTRY信号により指示された記憶エレメントの適切なフィールド内に直ちに書込む。更に、後述の如く、XICCデータは同一の記憶エレメントのTSTATEフィールド内に書込まれるが、これは、論理的なXICCレジスタの内容が利用できるようになったときのWR ENTRY XICC 信号に応じて行われる。
【０３７１】
図１７を参照すると、制御レジスタRD／WR／UPDATEロジック816は次にTLレジスタ811 からの旧TL値を受信してそれをインクリメントする。それは次に新たなTL値をTLレジスタ811 に書き戻す。
【０３７２】
図４５に示された如く、トラップ・スタック・リネーム・マッピング(RENAME MAP)・ロジック824 は、新たなTL値、および、TAKE TRAP およびWR ENTRY信号を受信する。図４７を参照すると、RENAME MAPロジック824 は、夫々が４個のトラップレベルのひとつに対応するTL1-4(トラップレベル1-4)書込マルチプレクサ826 〜829 およびTL1-4 レジスタ830 〜833 を含んでいる。新たなTL値およびTL TRAP 信号に応じ、RENAME MAPロジック824 の制御回路825 はWR MUX CNTRL信号によりTL1-4 書込マルチプレクサ826 〜829 を制御し、これにより、WR ENTRY信号は新たなTL値により識別されるトラップレベルに対応するレジスタ内に記憶され、且つ、その他のレジスタは以前のマシンサイクルにおいて記憶したのと同一の値を再記憶する。
【０３７３】
従って、レジスタのひとつに記憶されたWR ENTRY信号により識別される記憶エントリは、RENAME MAPロジック824 内の新たなTL値により識別される現在のトラップレベルにマッピングされる。更に、他のレジスタ内に記憶された信号により識別される記憶エントリは、以前のマシンサイクルにおけるのと同様にしてマッピングが維持される。
【０３７４】
図４６を参照すると、FREELIST 821のファーストワンエンコーダ823 はTAKE TRAP 信号も受信する。TAKE TRAP 信号がトラップを受入れるべきことを示すとき、ファーストワンエンコーダ823 はOR回路835 に対し、WR ENTRY信号に対応するビットが“0 ”とされた８ビット信号を送り返す。OR回路835 はまた、（図４５に示された）RRF ロジック837 からの８ビットFREE ENTRY信号を受信するが、そのビットは、トラップスタック820 の記憶エントリの内で前回マシンサイクルで回復されて現在使用可能となった記憶エントリを識別するものである。バックアップの間、OR回路835 はAND 回路836 から８ビットのBACKUP FREELIST 信号を受信するが、該信号のビットは、バックアップされたチェックポイントが作られた時点において使用可能であった記憶エントリを識別するものである。ファーストワンエンコーダ823 から受信した信号のビットは、FREE ENTRYおよびBACKUP FREELIST 信号と論理和が取られており、且つ、最終的なFREE LIST 信号はレジスタ822 に供与される。従って、バックアップを除けば、次のマシンサイクルにおけるFREELIST信号は、WR ENTRY信号内で“0 ”に設定されたビットに対応する記憶エレメントはもう使用出来ないことを示している。
【０３７５】
図７を再度参照すると、PSU 300 はTAKE TRAP 信号を生成すると同時に、CHKPT REQ 信号により、ISU 200 に対し、トラップ処理ルーチンから最初に発せられた命令に対してチェックポイントを割当てることを要求する。これに応じ、ISU 20は、制御レジスタファイル800 を含め、CPU 51内の種々のブロックおよびユニットにDO CHKPT信号を出力する。
【０３７６】
図４７に戻り、RENAME MAP 1-4信号はTL1-4 レジスタ830 〜833により出力されることから、夫々、トラップレベル1 〜4 に対応している。更に、これらの信号はTL1-4 レジスタ830 〜833 により出力されることから、それらはトラップレベル1 〜4 に対する記憶エントリの現在のマッピングを与えるものである。
【０３７７】
しかし乍ら、前述の如く、トラップが受入れられたとき、RENAME MAPロジック824 は新たに利用し得る記憶エントリを新たなトラップレベル(TL)にマッピングする。但し、このトラップレベルに対する別の記憶エントリの旧マッピングは、前述の如くバックアップが生ずるときには記録しておかねばならない。従って、図４８を参照すると、PRF ロジック837 は、自身がRENAME MAPロジック824 から受信したRENAME MAP 1-4信号からの旧マッピングを、それらが不要となるまで保存しておく。
【０３７８】
トラップが受入れられたとき、マルチプレクサ843 は、新たなトラップに対するTL( 即ち、旧TLは１だけインクリメントされる）に対応するRENAME MAP信号を出力する。換言すると、このマルチプレクサは、次回のマシンサイクルにおいて新たなマッピングを反映するRENAME MAP信号のみを選択する。この信号は次に、デコーダ842により、記憶エントリの内のいずれが新たなマッピングにより新たなトラップレベルに対して置換えられているのかを示す８ビット信号にデコードされる。ここで、TAKE TRAP 信号はトラップが受入れられつつあることを示すことから、デコードされた信号は、RRF ロジック837 のRRF 記憶ユニット839 に対してAND 回路841 を介して供与される。しかし乍ら、何らのトラップも受入れられていない場合、AND 回路841 はRRF 記憶ユニット839 に対して全てのビットが“0 ”に設定された８ビット信号を供与する。
【０３７９】
RRF 記憶ユニット839 は、１６個の記憶エレメントすなわちエントリを含んでいる。各記憶エントリは、前述の１６個のチェックポイント番号のひとつに対応している。従って、DO CHKPT信号によりチェックポイントが形成されるべきことが示されたとき、RRF RD/WR 制御ロジック840 はAND 回路841 から受信したデータを、DO CHKPT信号により識別されたチェックポイント番号に対応する記憶エントリ内に書込んでいる。
【０３８０】
従って、RRF 837 は、トラップスタックユニット820 の各記憶エントリの不稼働リストを保持するが、該記憶エントリは、RENAME MAPロジック824 の現在のマッピングによりトラップレベルの内のひとつに現在マッピングされてはいないがトラップレベルのひとつにマッピングする為には依然として使用され得ないものである、と言うのも、トラップレベルに対するそれの旧マッピングはチェックポイントをバックアップする場合には再記録する必要があり得るからである。この場合、記憶エントリは不稼働リスト内に保持されるが、これは、形成されるべきチェックポイントを引起こしたトラップのトラップレベルに対して記憶エントリがマッピングされた時点において形成されたチェックポイントが解除されるまで続くことになる。
【０３８１】
RRF RD/WR 制御ロジック840 はまた、PSU 300 から１６ビットのCHKPT CLR 信号も受信する。各ビットは、チェックポイント番号のひとつに対応すると共に、対応するチェックポイントが前述の手法で解除（即ちクリア）されたか否かを示している。この信号に応じ、PRF RD/WR ロジックは、RRF 記憶ユニット839 の対応記憶エントリからデータを読み出す。CHKPT CLR 信号はクリアされた多数のチェックポイントを識別し得ることから、対応する記憶エントリから読み出されたデータの各ビットは論理和が取られると共に結合されてFREE ENTRY信号を形成し、それは８ビットのFREE ENTRY信号として図４６のFREELISTロジック821 へ送られる。
【０３８２】
トラップが受入れられたときにCHKPT CLR 信号により識別されたチェックポイントが形成された場合、FREE ENTRY信号により識別された記憶エントリは回復されて現在は再び使用可能となっている、と言うのも、対応するチェックポイントは解除されているからである。その結果、このトラップはもはや行い得ないものではない。従って、バックアップが生じなかったと仮定すれば、FREE ENTRY信号の各ビットは次に、ファーストワンエンコーダ823 により供与された信号の対応ビットと論理和が取られ、次のマシンサイクルに対するFREELIST信号が提供される。
【０３８３】
また、トラップが受入れられたときにCHKPT CLR 信号により識別されたチェックポイントが形成されなかった場合、対応する記憶エレメントから読み出されたデータのビットは全て“0 ”であり、従って、FREELIST信号の生成に関して何らの影響を有さない。
【０３８４】
図４５に示された様に、トラップスタックユニット815 はまた、トラップ・スタック・チェックポイント記憶ユニット845 も含んでいる。この記憶ユニット845 は図４８に更に詳細に示す様にデータ記憶構造846 を含むが、該構造は、夫々が５個のフィールドを有する１６個のアドレシング可能な記憶エレメントすなわちエントリを有している。
【０３８５】
この記憶ユニットは、FREELISTロジック821 からのFREELIST信号およびRENAME MAPロジック824 からのRENAME MAP信号を受信する。而して、チェックポイントを形成すべきことがDO CHKPT信号により示された場合、トラップスタック記憶RD/WR 制御ロジック847 は、FREELIST信号およびRENAME MAP信号を、DO CHKPT信号により識別されたチェックポイント番号に対応する記憶エントリの適切なフィールド内に書込む。現在のFREELIST信号およびRENAME MAP信号はチェックポイントが形成されたときに記憶されていることから、トラップレベルに対するトラップ記憶エントリの現在のマッピング、および、利用し得るトラップスタック記憶エントリの現在のリストには、チェックポイントが割当てられている。
【０３８６】
チェックポイントに対するバックアップが為されつつあることがDO BACKUP 信号により表されるとき、RD/WR 制御ロジック847 は、DO BACKUP 信号により識別されたチェックポイント番号に対応する記憶エレメントから、チェックポイントが割当てられたFREELIST信号およびRENAME MAP信号を読み出す。この点、FREELIST信号はBACKUP FREELIST 信号として読み出される一方、RENAME MAP信号はBACKUP MAP信号として読み出される。
【０３８７】
図４６に示された如く、フリーリストロジック821 はBACKUP FREELIST 信号およびDO BACKUP 信号を受信する。DO BACKUP 信号はバックアップが生じていることを表すことから、AND 回路838 はBACKUP FREELIST をOR回路835 に供与する。前述の如く、ファーストワンエンコーダ823 から受信された信号の各ビットは、FREE ENTRY信号およびBACKUP FREELIST 信号の対応ビットと論理和が取られ、FREELIST信号を生成している。
【０３８８】
図４７を参照するに、RENAME MAPロジック824 はBACKUP MAP信号およびDO BACKUP 信号を受信する。DO BACKUP 信号はバックアップが生じていることを表すことから、制御回路825 が生成するWR MUX CNTRL信号は、TL1-4 レジスタ830 〜833 の夫々に対するBACKUP MAP 1-4信号を供与する。その結果、チェックポイントが割当てられたときに存在したトラップレベルに対するトラップスタック記憶エレメントのマッピングは、元通りの状態にされている。
【０３８９】
前述の如く、CPU 51は投機的に(speculatively) 命令を発し且つ実行する。トラップスタックユニット815 は、バックアップの場合に以前のトラップレベルを回復する機構を含んでいることから、CPU 51はトラップを投機的に受取るとともにトラップから投機的に戻ることができる。
【０３９０】
トラップを投機的に受入れると共にトラップから投機的に戻るというCPU の能力は、図５１に示されている。図示された如く、最初に、実行手順はトラップレベル０に在り、且つ、トラップレベル１〜４はトラップスタックエントリ1 〜4 へ夫々マッピングされている。最初のトラップが受入れられるとき、トラップレベルはトラップレベル１にインクリメントされると共に、チェックポイント１が形成され、チェックポイント１における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられ(checkpointed)、且つ、トラップレベル１の新たなマッピングが記憶エントリ５に対して作られる。新たなチェックポイントはチェックポイント２で作られるが、これは予期されたプログラム制御命令などの命令に対するものであり、且つ、チェックポイント２における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられる。第２のトラップが受入れられると共にトラップレベルはトラップレベル２にインクリメントされ、チェックポイント３が形成され、チェックポイント３における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられ、且つ、トラップレベル２の新たなマッピングが記憶エントリ６に対して作られる。トラップレベル２におけるトラップに対するトラップ処理においてdoneもしくはretry 命令が実行されたとき、トラップレベルはトラップレベル１にデクリメントされると共にチェックポイント４が形成され、かつ、チェックポイント４における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられる。トラップレベル１におけるトラップに対するトラップ処理に戻った後、このトラップハンドラの命令に対してチェックポイント５においてチェックポイントが作られ、且つ、チェックポイント５における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられる。更なるトラップが受入れられたとき、トラップレベルはトラップレベル２にインクリメントされ、チェックポイント６が形成され、チェックポイント６における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられ、且つ、記憶エントリ７に対するトラップレベル２の新たなマッピングが作られる。そして更なるトラップが受入れられたとき、トラップレベルはトラップレベル３にインクリメントされると共にチェックポイント７が形成され、チェックポイント７における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられ、且つ、記憶エントリ０へのトラップレベル３の新たなマッピングが作られる。トラップレベル３におけるトラップに対するトラップハンドラ内でdoneまたはretry 命令が実行されたとき、トラップレベルはトラップレベル２にデクリメントされると共にチェックポイント８が形成され、且つ、チェックポイント８における記憶エントリマッピングへのトラップレベルにはチェックポイントが割当てられる。その後、チェックポイント２が形成されたプログラム制御命令が誤って予測されたと判断されたのであれば、チェックポイント２へのバックアップが生じ、チェックポイント２における記憶エントリマッピングへのトラップレベルが回復される。従って、チェックポイント３および７が形成されたトラップは投機的に受入れ／戻りが行われ、一方、チェックポイント６が形成されたトラップは投機的に受入れられている。
【０３９１】
前述の如く、トラップスタックのTSTATEフィールドはXICCフィールドを含み、該XICCフィールドは、トラップが受入れられたとき、図８のFSR/CCRFRN 606内の論理的XICCレジスタとしてマッピングされた物理レジスタの内容（すなわちXICCデータ）を保持している。固定小数点命令はPC命令を受けずにFXU 601 およびFXAGU 602 により実行され得ることから、これらの内容はトラップが生じた時点で利用され得ない。従って、後の時点にて正しいXICCデータを得る機構が無ければ、PSU 300 はXICCデータがトラップを受入れるべく利用出来るようになるまでまたねばならない。
【０３９２】
しかし乍ら、図４５を参照すると、トラップスタックユニット815 は斯かる機構、即ち、XICC捕捉ロジック823 を含んでいる。このXICC捕捉ロジック823 は、FSR/CCRFRN 606から、CC TAGS C 、CC DV C 、CC TAGS F およびCC DV F 信号を受信し、一方、トラップスタック820 はCC DATA C およびCC DATA F 信号を受信する。
【０３９３】
図５２を参照すると、CC DATA C 信号はXICC DATA C 信号を含むと共に、CC DV C 信号はXICC DV C 信号を含んでいる。可能であれば、XICC DATA C 信号は、トラップが受入れられたときのマシンサイクルにおける論理XICCレジスタ（即ち、図３９に示されたCCRFRN 610による論理XICCレジスタとしてマッピングされた物理レジスタ）の現在の内容を含んでいる。XICC DV C 信号は、XICC DATA C 信号の内容が有効か否か（即ち、論理XICCレジスタとして現在マッピングされている物理レジスタの内容が依然として利用し得るか否か）を表している。
【０３９４】
トラップが受入れられた時点において論理XICCレジスタとしてマッピングされた物理レジスタの内容は、その時点で既に利用し得る可能性もある。これが生じた場合、XICC DV C 信号は、XICC DATA C 信号の内容が有効であることを示し、且つ、PSU 300 から受入れたTAKE TRAP 信号は、トラップが受入れられつつあることを示す。これに応じ、XICC書込ロジック825 は、WR ENTRY信号により識別されたエントリに対応するWR1 ENTRY XICC信号を提供する。これが生じた場合、トラップスタックユニット815 のRD/WR 制御ロジック822 は、XICC DATA C 信号の内容を、WR1 ENTRY XICC信号により識別されたトラップスタック820 のエントリのTSTATEフィールド内に書込む。
【０３９５】
しかし乍ら、XICC DV C 信号が、トラップが受入れられた時点のXICC DATA C 信号の内容が有効でないことを示すときは、XICC DATA C 信号の内容はトラップスタック820 に書込まれない。この場合、トラップスタックユニット815 は、トラップが受入れられた時点で論理XICCレジスタとしてマッピングされた物理レジスタの内容が利用できるようになるまで待たねばならない。図５３を参照すると、これを行うために、XICC捕捉ロジック823 は、現在整合ロジック826 および後期整合配列ロジック827 を含んでいる。
【０３９６】
依然として図５３を参照するに、CC TAG C信号はXICC TAG C信号を含むが、該XICC TAG C信号は、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの物理レジスタ・タグを含んでいる。更に、CC TAG F信号は、FXU 601 およびFXAGU 602 により夫々発信されたFXU XICC TAG F信号およびFXAGU XICC TAG F信号を含むが、これは、FXU 601 およびFXAGU 602 が、論理XICCレジスタを変更する固定小数点命令を実行するときに行われる。これらの信号は、実行されたこれらの固定小数点命令に対するものであると共にCC DATA F 信号のFXU XICC DATA F 信号およびFXAGU XICC DATA F 信号が書込まれるべき論理XICCレジスタとしてマッピングされた物理レジスタの物理レジスタ・タグを含むものである。FXU XICC DATA F 信号およびFXAGU XICC DATA F 信号は夫々、FXU 601 およびFXAGU 602 により発信されたものである。
【０３９７】
CC DV F 信号は、論理XICCレジスタを変更する固定小数点命令をFXU 601 およびFXAGU 602 が実行するときに該FXU 601 およびFXAGU 602 により夫々発信されたFXU XICC TAG F信号およびFXAGU XICC TAG F信号を含んでいる。これらの信号は、実行された固定小数点命令に対する論理XICCレジスタとしてマッピングされた物理レジスタに対してFXU XICC DATA F 信号およびFXAGU XICC DATA F 信号の内容が有効か否か（即ち、利用できるか否か）を表している。
【０３９８】
既述の如く、実際のおよび／または予期されたプログラム命令に基づいて命令は実行され得ることから、発信されたFXU XICC DATA F 信号およびFXAGU XICC DATA F 信号は最終的に、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタに書込まれるべき内容を含むことになる。これは、トラップが受入れられるのと同一のマシンサイクル（即ち、現在のマシンサイクル）もしくは後期のマシンサイクルにて生ずる。
【０３９９】
これが同一のマシンサイクルで生じる場合、XICC TAG C信号は、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタのタグを現在的に識別する。XICC TAG C信号により識別されたタグは、現在整合ロジック826 の比較ロジック850および比較ロジック851 により、FXU XICC TAG F信号およびFXAGU XICC TAG F信号と比較される。もし、整合が生じ、且つ、対応するFXU XICC DV F 信号またはFXAGU XICC DV F 信号が、対応するFXU XICC DATA F 信号またはFXAGU XICC DATA F 信号の内容が有効であることを示すでのあれば、現在整合ロジック826 は、対応するFXU XICC CURR MATCH 信号またはFXAGU XICC CURR MATCH 信号を出力する。この信号は、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容が、トラップが受入れられたときと同一のマシンサイクル内で利用し得る様になったことを表す。
【０４００】
図５２に戻り、このマシンサイクルの間、TAKE TRAP 信号は依然としてトラップが受入れられつつあることを表し、且つ、WR ENTRY信号は依然としてトラップのトラップレベルにマッピングされたエントリを識別している。従って、FXU XICC CURR MATCH 信号またはFXAGU XICC CURR MATCH 信号に応じ、XICC書込ロジック825 は対応するWR2 ENTRY XICC信号またはWR3 ENTRY XICC信号を生成する。この信号は、WR ENTRY信号により識別されたエントリに対応する。次に、トラップスタックユニット815 のRD/WR 制御ロジック822 は、FXU XICC DATA F 信号またはFXAGU XICC DATA F 信号の内容を、対応するWR2 ENTRY XICC信号またはWR3 ENTRY XICC信号により識別されるトラップスタック820 のエントリのTSTATEフィールドのXICCフィールド内に、書込む。
【０４０１】
図５３に戻ると、既述の如く、トラップが受入れられたときのマシンサイクルの後のマシンサイクルにおいて、発信されたFXU XICC DATA F 信号およびFXAGU XICC DATA F 信号は、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタに書込まれるべき内容を含んでいる可能性がある。この状況に備えるべく、XICC捕捉ロジック823 は、タグ配列記憶ユニット854 を含むタグ配列記憶ユニット827 を含んでいる。
【０４０２】
記憶ユニット854 は、８個の記憶エントリを含んでおり、各エントリは、トラップスタック820 の各エントリのひとつに対応している。従って、トラップが受入れられつつあることがTAKE TRAP 信号により示される都度、RD/WR ロジック855 は、そのときのXICC TAG C信号により識別されるタグを、WR ENTRY信号により識別されるトラップスタック820 のエントリに対応する記憶ユニット854 のエントリに、書込む。
【０４０３】
比較配列ロジック852 および853 は、夫々、FXU XICC TAG F信号およびFXAGU XICC TAG F信号により識別されるタグを、記憶ユニット854 内に記憶されたタグの各々と、比較する。その結果、もし、整合が生じ、且つ、対応するFXU XICC DATA F 信号またはFXAGU XICC DATA F 信号の内容が有効であることが対応するFXU XICC DV F信号またはFXAGU XICC DV F 信号により表されたのであれば、対応する比較配列ロジック852 または853 は、対応するFXU XICC DATA F 信号またはFXAGU XICC DATA F 信号の内容が書込まれるべきトラップスタック820 のエントリを識別する対応FXU XICC LATE MATCH信号または対応FXAGU XICC LATE MATCH 信号を、出力する。
【０４０４】
図５４に戻ると、XICC捕捉ロジックは、XICC用待機ロジック828を含んでいる。又、レジスタ856 はWAIT FOR XICC VEC 信号を記憶する。このWAIT FOR XICC VEC 信号の各ビットは、トラップスタック820 の各エントリのひとつに対応すると共に、対応するトラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容が利用可能になるのを対応エントリが待機しているときに提示される。従って、WAIT FOR XICC VEC ベクトル信号は、対応するトラップが受入れられたときに論理XICCレジスタとしてマッピングされた種々の物理レジスタの内容が利用可能になるのを現在待っているトラップスタック820 の各エントリの全てのリストを提供するものである。
【０４０５】
TAKE TRAP 信号により表されるトラップが受入れられると共に、XICC DV C 信号が“論理XICCレジスタとしてマッピングされた物理レジスタの内容を利用することができない”ことを示し、且つ、FXU XICC CURR MATCH 信号およびFXAGU XICC CURR MATCH 信号のいずれもまたこれを示さない、という状態が生じる都度、WR ENTRY信号は、後期のマシンサイクルにおいてこれらの内容が利用し得る様になるのを待っているエントリを、識別する。これに応じ、このエントリは、XICC用待機ロジック828 により、対応トラップが受入れられたときに論理XICCレジスタとしてマッピングされた種々の物理レジスタの内容が利用し得る様になるのを現在待っているトラップスタック820 のエントリのリストであってWAIT FOR XICC VEC ベクトル信号により与えられるリスト、に対して加えられる。
【０４０６】
しかし乍ら、前述の如く、TAKE TRAP 信号により示されるごとくトラップが受入れられたとき、論理XICCレジスタとしてマッピングされた物理レジスタがこの時点で利用し得ることがXICC DV C 信号により示されるか、あるいは、FXU XICC CURR MATCH 信号またはFXAGU XICC CURR MATCH 信号がこのことを示す可能性もある。これが生じる都度、WR ENTRY信号により識別されるエントリはXICCロジック828 により、WAIT FOR XICC VEC ベクトル信号により与えられたリストに加えられない。
【０４０７】
更に、前述の如く、対応するトラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容が後期のマシンサイクルにおいて利用し得る様になったときは常に、FXU XICC LATE MATCH 信号またはFXAGU XICC LATE MATCH 信号は、これらの内容が書込まれるべきトラップスタック820 のエントリを識別する。図５２に戻ると、この時点でWAIT FOR XICC VEC ベクトル信号は依然としてこのエントリをリストすることから、XICC書込ロジック825 は、このエントリを識別する対応WR2 ENTRY XICC信号または対応WR3 ENTRY XICC信号を生成する。その後、トラップスタックユニット815 のRD/WR 制御ロジック822 は、FXU XICC DATA F 信号またはFXAGU XICC DATA F 信号の内容（即ち、対応トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容）を、対応するWR2 ENTRY XICC信号またはWR3 ENTRY XICC信号により識別されたトラップスタック820 のエントリのTSTATEフィールドのXICCフィールド内に、書込む。次に、図５４に戻ると、このエントリは、WAIT FOR XICC VEC ベクトル信号により与えられたリストから、XICC待機用ロジック828 により除去される。
【０４０８】
従って、受入れられ乍らも未だ戻っていないトラップの各々に対し、XICC捕捉ロジックは、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容が利用し得る様になる時点、および、トラップスタック820 内のどのエントリ内にこれらの内容が書込まれるべきなのかを、決定することが出来る。その結果、これらの内容はいずれかのトラップが受入れられる時点では未だ利用できない可能性があるとしても、ネストしたトラップを受入れることが可能となる。換言すると、XICC捕捉ロジック823 は、対応トラップステート(TSTATE)データの全てが利用可能になる以前にトラップが受入れられることを許容する機構である。
【０４０９】
しかし乍ら、トラップ受取から戻ると同時に、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容は、トラップスタック820 の対応エントリ内に既に書込まれていなければならない。これは、RETRY もしくはDONE命令を行うためには、これらの内容が、現在において論理XICCレジスタとしてマッピングされた物理レジスタ内に書き戻されるべきことが必要である、という事実に拠るものである。
【０４１０】
図５４に示される如く、これが生ずるのを確実にすべく、XICC用待機ロジック828 はマルチプレクサ857 を含んでいる。現在受入れられるつつあるトラップのトラップレベルに現在マッピングされているトラップスタック820 のエントリを識別するRD ENTRY信号に応じ、上記マルチプレクサは、WAIT FOR XICC VEC ベクトル信号のビットの内でこのエントリに対応するビットを、WAIT FOR XICC 信号として出力する。従って、この信号は、現在受入れられつつあるトラップのトラップレベルに現在マッピングされているトラップスタック820 のエントリが、トラップが受入れられたときに論理XICCレジスタとしてマッピングされた物理レジスタの内容を待っているか否か、を表す。
【０４１１】
図４５を参照すると、XICC捕捉ロジック823 はISU 200 に対してWAIT FOR XICC 信号を出力する。もしこの信号が提示されれば、ISU 200 は、この信号が提示されなくなるまで、RETRY 命令またはDONE命令を発しない。
【０４１２】
ISU 200 が最後にRETRY 命令またはDONE命令を発したとき、該ISU 200 は、DONE命令が発せられたか否かを示す信号とRETRY 命令が発せられたか否かを示す信号とを含むDONE RETRY IS 信号を、出力する。
【０４１３】
図４７を参照すると、読込マルチプレクサ835 はRD ENTRY信号として、現在のTL値に対応するRENAME MAP信号を出力する。更に図４５を参照すると、トラップスタックユニット815 のRD/WR 制御ロジック822 は、DONE命令またはRETRY 命令が既に発せられたことがDONE RETRY IS 信号により示されたときRD ENTRY信号により識別される記憶エレメントから、TPC 、TNPC、ASI 、CWP 、PSTATEおよびXICCの各値を、読み出す。
【０４１４】
図１７を参照すると、ASI 、CWP およびPSTATEの各値は、DONE RETRY IS 信号に応じ、制御レジスタファイル800 のRD/WR/UPDATEロジック816 により対応レジスタ内に書込まれる。
【０４１５】
更に、図４５に示される様に、TPC およびTNPCの各値はRD TPC＿TNPC信号を以てBRB 59に付与される。その結果、BRB 59はこの値を使用してPCおよびNPC の各値を形成して、次の命令セットをフェッチする。
【０４１６】
最後に、XICC値はRD XICC 信号を以てDFB 62に供与される。図８を参照すると、DONE RETRY IS 信号に応じ、CCRFRN 610は論理XICCレジスタを物理レジスタにマッピングする。従って、CCRFRN 610はトラップスタックユニット815 からXICCデータを受けたとき、それを新たにマッピングされた物理レジスタ内に記憶する。
【０４１７】
更に、当業者であれば、FXU 601 およびFXAGU 602 の各々が、論理XICCレジスタを変更する固定小数点命令を実行し得る１個以上の実行ユニットを有し得ることを理解し得よう。この場合、XICC捕捉ロジック823 は、トラップが受入れられるときに論理XICCレジスタとしてマッピングされた物理レジスタの内容を以てトラップスタック820 を適切に更新すべく既述したロジック、の複製ロジックを有することになろう。
【０４１８】
これに加え、当業者であれば、XICC捕捉ロジック823 の概念を他の型式のレジスタまで拡張し得ることを理解し得ようが、斯かる他の型式のレジスタとは、その内容が、トラップが受入れられた時点では利用する必要は無いがトラップスタックには書込まれる必要があるレジスタ、および、レジスタ名称変更（即ち、論理レジスタに対する物理レジスタのマッピング）が既に行われたレジスタ等である。
【０４１９】
本明細書にて言及した公報および特許出願の全てを参照により援用するが、これは、個々の公報もしくは特許出願を特定的にかつ個別的に参照により援用したのと同一の程度まで援用する。
【０４２０】
本発明を十分に説明してきたが、当業者であれば、添付の請求の範囲の精神および範囲から逸脱すること無しに多くの変更および修正を為し得ることは理解し得よう。
【図面の簡単な説明】
【０４２１】
【図１】図１は、投機的プロセッサの精確状態を維持するために再順序付けバッファを用いる従来のアプローチを示す。
【図２】図２は、命令を実行する前にチェックポイントに状態を記憶し、後に記憶したチェックポイント情報から状態を復元することによって、投機的プロセッサに精確状態を維持する従来のアプローチを示す。
【図３】図３は、図解のために略図で命令の例示シーケンスと従来のチェックポイントの構造と内容を示すもので、特定のマシンの実際のチェックポイントデータを表すものではない。
【図４】図４は、中央処理装置を含む本発明のデータプロセッサの実施例のトップレベル機能ブロック図である。
【図５】図５は、一部典型的命令タイプに関するＣＰＵの新規命令パイプラインの実施例の段階である。
【図６】図６は、命令のプリフェッチとキャッシュユニットおよびフェッチユニットを含む本発明のＣＰＵの例示分岐ブロック（ＢＲＢ）を示す。
【図７】図７は、発行ユニット（ＩＳＵ）、精確状態ユニット（ＰＳＵ）、フリーリストユニット、制御レジスタファイルを含む例示発行ブロック（ＩＳＢ）を示す。
【図８】図８は、発行ユニットがレジスタリネーミングフリーリストユニットから受取り、本発明のレジスタリネーミングの実施に用いる例示信号を示す。
【図９】図９は、精確状態ユニット（ＰＳＵ）の実施例を示す。
【図１０】図１０は、発行／コミット／リクレームユニット（ＩＣＲＵ）の実施例のコンポーネントと、その動作に関連する入出力信号の機能ブロック図である。
【図１１】図１１は、命令状態情報とデータ構造に記憶される第１の例示データセットに関連する各種ポインタを記憶するためのアクティブな命令データ構造とメモリ命令データ構造の実施例の略図である。
【図１２】図１２は、Ａ−リングビットセット／クリアロジックの一部構造的コンポーネントを含む例示的状態制御ロジックユニットを示す。
【図１３】図１３は、状態を追跡し精確状態を維持するため命令タグを使用する本発明の方法の実施例のフローチャートである。
【図１４】図１４は、精確状態の維持に命令状態を追跡する本発明の方法の実施例の模式的フローチャートである。
【図１５Ａ】図１５は、精確状態の維持に命令状態を追跡する本発明の方法の実施例に従って、アクティブな命令リングとメモリ命令リングに状態情報を書き込む方法のフローチャート図である。
【図１５Ｂ】図１５は、精確状態の維持に命令状態を追跡する本発明の方法の実施例に従って、アクティブな命令リングとメモリ命令リングに状態情報を書き込む方法のフローチャート図である。
【図１６】図１６は、フィジカルレジスタを含むフィジカルレジスタファイルの入ったレジスタファイルおよびリネームユニット（ＲＦＲＮ）の実施例を示す。
【図１７】図１７は、レジスタリネーミングと関連する制御レジスタファイルの実施例を示す。
【図１８】図１８は、リソースリクレームファイル（ＲＲＦ）の実施例を示す。
【図１９】図１９は、本発明のレジスタリネーミング方法を示す。
【図２０】図２０は、命令発行、非起動、コミットおよびリタイアを含む精確状態の維持のための本発明の方法の実施例のフローチャートである。
【図２１】図２１は、命令状態情報とデータ構造に記憶された第２の例示データセットに関連する各種ポインタを記憶するためのアクティブ命令データ構造およびメモリ命令データ構造の実施例の略図である。
【図２２】図２２は、ＣＰＵのデータフォワードブック内のロード／ストアユニット（ＬＳＵ）の機能ブロック図である。
【図２３】図２３は、精確状態を維持しながら、ロード／ストア命令を含む長待ち時間命令を積極的にスケジューリングするための本発明の方法の実施例のフローチャートである。
【図２４】図２４は、チェックポイントユニットの機能ブロック図である。
【図２５Ａ】図２５は、ウォッチポイントユニットの機能ブロック図である。
【図２５Ｂ】図２５は、ウォッチポイントユニットの機能ブロック図である。
【図２６】図２６は、タイムアウトチェックポイントを形成するためのオプションのチェックポインティング強化を含む本発明のチェックポインティング方法の実施例のフローチャートである。
【図２７】図２７は、ウォッチポイントユニットの実施例内の主要機能ブロックの機能ブロック図である。
【図２８】図２８は、条件コードグラビングロジック、評価ロジック、ウォッチポイント要素記憶および制御ユニット、およびターゲットＲＡＭの特定の実施例を示すウォッチポイントユニットの実施例である。
【図２９】図２９は、カレントマッチングロジック、アレーマッチングロジック、および評価レディおよび評価条件コードロジックを含む条件コードセレクトロジックの入ったウォッチポイントの実施例の一部を示す。
【図３０】図３０は、分岐予測および評価に関連する例示タイミングチャートを示す。
【図３１】図３１は、カレントマッチロジックおよびアレーマッチロジックの実施例に関連する構造的詳細を示す。
【図３２Ａ】図３２は、条件コードセレクトロジックの実施例に関連する構造的詳細を示す。
【図３２Ｂ１】図３２は、条件コードセレクトロジックの実施例に関連する構造的詳細を示す。
【図３２Ｂ２】図３２は、条件コードセレクトロジックの実施例に関連する構造的詳細を示す。
【図３３】図３３は、評価レディロジックの実施例に関連する構造的詳細を示す。
【図３４】図３４は、評価ツルーロジックの実施例に関連する構造的詳細を示す。
【図３５】図３５は、ターゲットＲＡＭおよびジャンプ・リンク命令評価ロジックの実施例に関連する構造的詳細を示す。
【図３６Ａ】図３６は、複数同時未解決分岐評価のための本発明のウォッチポイント方法の実施例のフローチャートである。
【図３６Ｂ】図３６は、複数同時未解決分岐評価のための本発明のウォッチポイント方法の実施例のフローチャートである。
【図３７】図３７は、浮動小数点例外（ＦＰＥＸＣＥＰ）データ構造の実施例の略図である。
【図３８】図３８は、例示浮動小数点例外リングデータ構造の信号インターフェースを示す。
【図３９】図３９は、ＲＤおよびＡＥＸＣロジックを含む浮動小数点例外ユニットを示す。
【図４０】図４０は、バックアップおよびバックステップコンポーネントを含むバックトラックユニットの実施例の図である。
【図４１】図４１は、バックアップおよびバックステップ手順を含む命令境界で精確状態を維持および回復するための本発明の方法の実施例のフローチャートである。
【図４２Ａ】図４２Ａは、レジスタリネームファイルにロジカルからフィジカルマッピングを復旧する方法を示す。
【図４２Ｂ】図４２Ｂは、レジスタリネームファイルにロジカルからフィジカルマッピングを復旧する方法を示す。
【図４３】図４３は、チェックポイント境界への１つのマシンバックアップの後の命令境界への２つのマシンバックステップを含むマシンバックトラックの例である。
【図４４】図４４は、例示プライオリティロジックおよび状態マシン（ＰＬＳＭ）を示す。
【図４５】図４５は、例示トラップスタックユニットを示す。
【図４６】図４６は、トラップスタックの記憶要素リストを記憶するためのフリーリストロジックの実施例を示す。
【図４７】図４７は、例示リネームマップロジックを示す。
【図４８】図４８は、例示トラップスタックＲＲＦを示す。
【図４９】図４９は、トラップスタックチェックポイント記憶ユニットを示す。
【図５０】図５０は、ウォッチポイントＷＰ ＡＣＴＩＶＥ ＶＥＣおよびＷＰ ＭＩＳＰＲＥＤロジックを示す。
【図５１】図５１は、トラップスタックバックアップ例を示す。
【図５２】図５２は、ＸＩＣＣ書き込みロジックを示す。
【図５３】図５３は、ＸＩＣＣグラビングロジックおよびアレーレーターマッチロジックを示す。
【図５４】図５４は、ウェイトー・フォー条件コード待ちロジックを示す。
【図１】
2006107536.tif 000017
【図２】
2006107536.tif 000018
【図３】
2006107536.tif 000019
【図４】
2006107536.tif 000020
【図５】
2006107536.tif 000021
【図６】
2006107536.tif 000022
【図７】
2006107536.tif 000023
【図８】
2006107536.tif 000024
【図９】
2006107536.tif 000025
【図１０】
2006107536.tif 000026
【図１１】
2006107536.tif 000027
【図１２】
2006107536.tif 000028
【図１３】
2006107536.tif 000029
【図１４】
2006107536.tif 000030
【図１５Ａ】
2006107536.tif 000031
【図１５Ｂ】
2006107536.tif 000032
【図１６】
2006107536.tif 000033
【図１７】
2006107536.tif 000034
【図１８】
2006107536.tif 000035
【図１９】
2006107536.tif 000036
【図２０】
2006107536.tif 000037
【図２１】
2006107536.tif 000038
【図２２】
2006107536.tif 000039
【図２３】
2006107536.tif 000040
【図２４】
2006107536.tif 000041
【図２５Ａ】
2006107536.tif 000042
【図２５Ｂ】
2006107536.tif 000043
【図２６】
2006107536.tif 000044
【図２７】
2006107536.tif 000045
【図２８】
2006107536.tif 000046
【図２９】
2006107536.tif 000047
【図３０】
2006107536.tif 000048
【図３１】
2006107536.tif 000049
【図３２Ａ】
2006107536.tif 000050
【図３２Ｂ１】
2006107536.tif 000051
【図３２Ｂ２】
2006107536.tif 000052
【図３３】
2006107536.tif 000053
【図３４】
2006107536.tif 000054
【図３５】
2006107536.tif 000055
【図３６Ａ】
2006107536.tif 000056
【図３６Ｂ】
2006107536.tif 000057
【図３７】
2006107536.tif 000058
【図３８】
2006107536.tif 000059
【図３９】
2006107536.tif 000060
【図４０】
2006107536.tif 000061
【図４１】
2006107536.tif 000062
【図４２Ａ】
2006107536.tif 000063
【図４２Ｂ】
2006107536.tif 000064
【図４３】
2006107536.tif 000065
【図４４】
2006107536.tif 000066
【図４５】
2006107536.tif 000067
【図４６】
2006107536.tif 000068
【図４７】
2006107536.tif 000069
【図４８】
2006107536.tif 000070
【図４９】
2006107536.tif 000071
【図５０】
2006107536.tif 000072
【図５１】
2006107536.tif 000073
【図５２】
2006107536.tif 000074
【図５３】
2006107536.tif 000075
【図５４】
2006107536.tif 000076