(57)【特許請求の範囲】
【請求項１】
少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を示すトレースデータ項目を生成するトレースユニットであって、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、
現在のトレース制御データによって制御され前記少なくとも１つのプロセッサの挙動を監視するトレース回路と、
前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、
前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、
前記トレース回路は、前記推測的に実行された少なくとも１つの命令グループを前記少なくとも１つのプロセッサがキャンセルしたことを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御することを特徴とするトレースユニット。
【請求項２】
前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも１つの命令グループをキャンセルする前記少なくとも１つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積することを特徴とする請求項１に記載のトレースユニット。
【請求項３】
前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積されることを特徴とする請求項１に記載のトレースユニット。
【請求項４】
前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成されることを特徴とする請求項１に記載のトレースユニット。
【請求項５】
前記命令グループは、前記グループ内の最初の命令が実行されると前記グループ内の前記命令の全てが実行するようグループ分けされた命令を備えることを特徴とする請求項１に記載のトレースユニット。
【請求項６】
前記トレースユニットは、アサートされたｔｒａｃｅ  ｅｎａｂｌｅ信号に反応し前記トレース回路による前記少なくとも１つのプロセッサの前記挙動の監視を可能にし、且つアサートされていない前記ｔｒａｃｅ  ｅｎａｂｌｅ信号に反応し前記トレース回路による前記挙動の監視を禁止することを特徴とする請求項１に記載のトレースユニット。
【請求項７】
前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、ｔｒａｃｅ  ｅｎａｂｌｅ信号がｅｎａｂｌｅｄ値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力し、且つ前記スティッキー値をリセットし、トレース有効命令はトレースデータ項目の出力をトリガする命令であることを特徴とする請求項６に記載のトレースユニット。
【請求項８】
前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定することを特徴とする請求項７に記載のトレースユニット。
【請求項９】
前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの１命令グループにおける最終命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定し、且つ前記設定されたスティッキー値を前記後続命令グループの前記データストアに蓄積することを特徴とする請求項８に記載のトレースユニット。
【請求項１０】
前記トレース制御データはｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値を備え、前記トレース回路は、先行グループの最終命令が実行されるときにトレースがイネーブルされていないことを検出することに反応し、前記後続命令グループのため前記ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値を設定し、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、前記キャンセルされたグループとの関連で蓄積され設定される前記ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値とに反応し、前記トレースがオンになることを指示するトレースエレメントを出力することを特徴とする請求項１に記載のトレースユニット。
【請求項１１】
前記トレース制御データはｉｎｉｔｉａｌ−ｔｒａｃｅｄ値を備え、前記トレース回路は、命令グループの実行中に命令アドレスを指示するトレース状態エレメントの出力に反応し、前記グループの前記ｉｎｉｔｉａｌ−ｔｒａｃｅｄ値を設定し、前記トレース回路は、前記ｉｎｉｔｉａｌ−ｔｒａｃｅｄ値が設定された命令グループをキャンセルする前記プロセッサを検出することに応じ、前記キャンセル後に実行された前記命令の命令アドレスを指示するさらなる状態エレメントを出力することを特徴とする請求項１に記載のトレースユニット。
【請求項１２】
前記トレース制御データはｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を備え、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになることを特徴とする請求項１に記載のトレースユニット。
【請求項１３】
前記トレース制御データはｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する複数のトレース有効命令を備えていることを意味し、前記値が設定されない場合は前記グループが１個又はゼロ個のトレース有効命令を備えていることを意味することを特徴とする請求項１に記載のトレースユニット。
【請求項１４】
前記トレース制御データはｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値を備え、前記値は、トレースエレメントを生成する前記グループ内のトレース有効命令数を指示することを特徴とする請求項１に記載のトレースユニット。
【請求項１５】
前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値はトレースエレメントが生成されるたびに更新されることを特徴とする請求項１に記載のトレースユニット。
【請求項１６】
前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積することを特徴とする請求項１５に記載のトレースユニット。
【請求項１７】
前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とを、各命令グループの前記データストアに蓄積することを特徴とする請求項１５に記載のトレースユニット。
【請求項１８】
前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成されることを特徴とする請求項１７に記載のトレースユニット。
【請求項１９】
前記トレース制御データはｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を備え、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項１８に記載のトレースユニット。
【請求項２０】
前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含むようにすることを特徴とする請求項１６に記載のトレースユニット。
【請求項２１】
前記トレース制御データはｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を備え、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項２０に記載のトレースユニット。
【請求項２２】
前記トレース制御データは前記グループのｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値を備え、前記ｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値はｔｒａｃｅ  ｅｎａｂｌｅが設定されるか否かに影響し、前記ｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値は前記少なくとも１つのプロセッサの検出される所定挙動に応じて設定されることを特徴とする請求項１に記載のトレースユニット。
【請求項２３】
命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する請求項１に記載のトレースユニットと、を備えることを特徴とするデータ処理ユニット。
【請求項２４】
少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を示すトレースデータ項目を生成する方法であって、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、
現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも１つのプロセッサの挙動を監視するステップと、
前記実行される命令グループの１命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、
前記推測的に実行された少なくとも１つの命令グループを前記少なくとも１つのプロセッサがキャンセルしたことを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループのデータストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備えることを特徴とする方法。
【請求項２５】
少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を示すトレースデータ項目を生成するトレース装置であって、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース装置は、
現在のトレース制御データにより制御される前記少なくとも１つのプロセッサの挙動を監視するトレース監視手段と、
前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、
前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、
前記トレース監視手段は、前記推測的に実行された少なくとも１つの命令グループを前記少なくとも１つのプロセッサがキャンセルしたことを検出することに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御することを特徴とするトレース装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野はデータ処理に関し、より具体的にはデータ処理操作を監視する診断機構に関する。
【背景技術】
【０００２】
処理回路によって行われる処理を追跡することが望ましい状況は数多くある。例えば、データ処理システムの開発中にはかかる情報が有用となる。トレーシングツールはかかる作業に役立つツールの一例である。
【０００３】
データ処理システムの活動をトレースすることで、システム内のステップごとの活動を表すデータを含むトレースストリームを生成すれば、システム開発に大いに役立つ。かかるトレーシングツールは、監視の対象となるチップ上に存在する組み込みトレースマクロセル（ＥＴＭ、ＡＲＭ  Ｌｉｍｉｔｅｄ、ケンブリッジの商標）等、プログラムの流れをトレースするにあたって様々な手段を使用する。
【０００４】
処理システムのステップごとの全活動を監視すると、収集、伝送、蓄積するべきデータの量は途方もなく多くなる。そこで、この情報量を減らすため様々な方法が考案されてきた。例えば分岐や読み込み／蓄積命令等、一部の命令だけをトレースし、その他の「トレース無効」命令はこれらの「トレース有効」命令のトレースと命令ストリームの情報から推断することで、トレースデータの生成量を減らす。トレース無効とみなされる実行部分についてはトレースデータが生成されないようトレースのオン及びオフを切り替える機能を設けることで、トレースストリームのさらなる削減が可能である。米国特許第７，７０７，３９４号には命令の一部のみトレースする機能が記載されている。
【０００５】
殆どのプロセッサ命令セットアーキテクチャは、処理速度を高めるため命令を推測的に実行する機能を含んでいる。例えば、分岐が処理されるときのデータ処理システムの状態を条件とし、条件が真であるならば実行し目的地へ分岐し、条件が偽であるならば実行せず次の順次命令を継続する分岐命令は、何らかの形で実行するものと予測できるため、後続の命令は、条件が真又は偽であるかが分かる前に実行できる。予測を誤った場合は推測的に実行された命令をキャンセルし、分岐以前の状態にプロセッサを戻す必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
推測的に実行される命令をトレースする場合、トレースストリーム出力を実際にコミットされる命令に整合させることは必ずしも容易ではない。
【課題を解決するための手段】
【０００７】
第１の態様から見て、本発明は、少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレースユニットを提供し、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、現在のトレース制御データによって制御され前記少なくとも１つのプロセッサの挙動を監視するトレース回路と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、前記トレース回路は、前記推測的に実行された少なくとも１つの命令グループをキャンセルする前記少なくとも１つのプロセッサを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御する。
【０００８】
本発明では、推測的命令を実行するデータ処理装置をトレースすると、推測的に実行された命令が後ほどキャンセルされた場合に、トレースデータ出力を理解することが困難になる場合があると認識する。本発明は、実行される各命令グループにつきトレース制御データをデータストアに蓄積することでこの問題に対処するものであり、こうすることで推測的に実行された命令がキャンセルされる場合には、以前に使われていたトレース制御データの値をデータストアから取り出すことができる。従って、当時現行であったトレース制御データを復元することができる。
【０００９】
一部の実施形態において、前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも１つの命令グループをキャンセルする前記少なくとも１つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積する。
【００１０】
トレース制御データはトレース回路の制御に用いる論理状態でよいが、一部の実施形態ではこれが蓄積回路に蓄積される。
【００１１】
一部の実施形態において、前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積される。
【００１２】
蓄積されるトレース制御データは、何らかの方法で該当する命令グループに関係づける必要がある。これは識別子により関係づけることができるほか、蓄積形式等の他の形式で関係づけることもできる。
【００１３】
一部の実施形態において、前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成される。
【００１４】
トレース回路を正常に機能させるには、命令グループがキャンセルされた場合に、キャンセルされた命令グループの開始時に現行であったトレース制御データを復元しなければならない。一部の実施形態では、グループの開始時に現行であったトレース制御データが当該グループのデータストアに蓄積されるため、これが取り出される。別の実施形態では、グループの実行終了時に現行であったトレース制御データが当該グループのため蓄積される。この場合は、キャンセルされたグループの直前のグループのトレース制御データが取り出されることになる。
【００１５】
一部の実施形態において、前記グループは命令グループを備え、前記グループ内の最初の命令が実行されると、前記グループ内の前記命令の全てが実行する。
【００１６】
命令は数通りの方法でグループ分けできる。一部の実施形態ではグループが単一の命令からなるが、この場合はトレース制御データを蓄積するデータストアが大きくなる。命令は、グループ内の最初の命令が実行される場合にグループ全体が実行されるようグループ分けするべきである。換言すると、グループ内で例外が発生することはなく、命令はグループ全体としてキャンセル及びコミットされる。推測的に実行される命令は、その結末が分かったときに、すなわち推測が正しかったか否かが分かったときに、コミット又はキャンセルされ、正しい場合にはコミットされ、正しくない場合にはキャンセルされる。
【００１７】
一部の実施形態において、前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、ｔｒａｃｅ  ｅｎａｂｌｅ信号がｅｎａｂｌｅｄ値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力する。トレース有効命令はトレースデータ項目の出力をトリガする命令である。
【００１８】
トレースされる推測実行命令のキャンセルにともなう問題として、トレースがトレース有効命令のトレースエレメントだけを出力し、後続命令のトレースから他の命令は実行済みと示唆する場合、命令グループはキャンセルされることがあり、ｔｒａｃｅ  ｅｎａｂｌｅはオン又はオフに異なる時点で切り替えられることがあるため、もしも命令グループの最後の命令がトレース有効命令ではなく、次の命令がトレースされる前にｔｒａｃｅ  ｅｎａｂｌｅがオフに切り替わると、トレースデータを診断する診断装置には、このトレース無効命令が実行済みであることが分からない。この問題は、トレース制御データ内のスティッキー値の使用により対処される。
【００１９】
トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの１命令グループにおける最終命令の実行を検出することに反応し、後続命令グループを制御するため前記トレース制御データにて前記スティッキー値を設定し、且つ後続命令グループの前記データストアに前記スティッキー値を蓄積する。
【００２０】
つまり、グループ内の最終命令がトレースエレメントを出力しないトレース無効命令なら、後続グループのためスティッキー値が設定される。従って、後続のトレース有効命令が実行されると、トレースがイネーブルされようがされまいが、トレースエレメントは出力される。トレースエレメントが出力されると、蓄積回路に蓄積されたスティッキー値はリセットされる。このスティッキー値により、トレースデータを解析する診断装置は、トレース無効命令が実際に実行したことを認識する。推測的に実行された命令グループがキャンセルされると、キャンセルされた命令に適用されていたスティッキー値が蓄積回路に戻される。後続命令グループのためスティッキー値が蓄積されているため、このグループがキャンセルされる場合にはスティッキー値が更新され、次のトレース有効命令ではトレースエレメントが出力されるため、先行グループにおける最終トレース無効命令の実行は示唆できる。
【００２１】
一部の実施形態において、前記トレース制御データはｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値を備え、前記トレース回路は、先行グループの最終命令が実行されるときに前記ｔｒａｃｅ  ｅｎａｂｌｅ信号の値を前記後続グループの前記ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値として蓄積するよう構成され、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、イネーブルされる前記ｔｒａｃｅ  ｅｎａｂｌｅ値と、前記キャンセルされたグループとの関連で蓄積され設定される前記ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値とに反応し、前記トレースがオンであることを指示するトレースエレメントを出力する。
【００２２】
推測的に実行された命令のキャンセルにともなうさらなる問題として、命令グループのときにトレースがオンになってこの命令グループが後ほどキャンセルされると、トレースがオンであることを伝えるため出力された指示は失われる。ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値は、キャンセルされた命令に鑑みｔｒａｃｅ  ｏｎ信号の出力を指示するため使用される。ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値の簡素な設定方法では、先行グループの最終命令のｔｒａｃｅ  ｅｎａｂｌｅ値を後続グループのｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値として蓄積する。こうすることで、その命令グループの実行が完了したときにトレースがイネーブルだったか否かを簡単に指示できる。
【００２３】
一部の実施形態において、前記トレース制御データはｉｎｉｔｉａｌ−ｔｒａｃｅｄ値を備え、前記ｉｎｉｔｉａｌ−ｔｒａｃｅｄ値は、命令グループの最初の命令の実行でトレースがイネーブルされることに応じて設定され、前記トレース回路は、命令グループをキャンセルする前記プロセッサと、前記命令グループでクリアになる前記ｉｎｉｔｉａｌ−ｔｒａｃｅｄ値と、前記命令グループで設定される前記ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄとを検出することに応じ、前記キャンセル後に実行された前記命令の実行アドレスを指示する状態エレメントを出力する。
【００２４】
推測的グループの実行中にトレースがイネーブルされ、その後このグループがキャンセルされる場合にはさらなる問題が生じる。トレースがイネーブルされると実行アドレスを指示する状態トレースエレメントが出力され、診断装置はトレースが再びイネーブルされたことを理解できる。これらの命令が後ほどキャンセルされると、診断装置は、キャンセルされた命令のため出力された実行アドレスから実行が進行していると考え、問題が生じる。ｉｎｉｔｉａｌ−ｔｒａｃｅｄ値の使用は、さらなる実行命令アドレスを指示するさらなる状態エレメントの出力をトリガすることにより、この問題の回避に役立つ。つまり、グループのキャンセルに応じ、キャンセルされたグループのｉｎｉｔｉａｌ−ｔｒａｃｅｄがクリアで、同グループのｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄが設定されると、さらなる状態エレメントが出力される。ｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄが設定される場合は、先行グループの、この場合はキャンセルされたグループの前のグループの、最終命令が実行されたときに、トレースがイネーブルされていたことを意味し、ｉｎｉｔｉａｌ−ｔｒａｃｅｄがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ状態エレメントが出力されたかもしれない。そこで、追加の状態エレメントが出力される。
【００２５】
一部の実施形態において、前記トレース制御データはｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値を備え、前記ｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになる。
【００２６】
本発明の実施形態で使用できるさらなるトレース制御値はｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値である。これは、グループのトレースエレメントが出力される場合とグループのトレースエレメントが出力されない場合を指示するため使用される。これを使用することにより、コミットされたグループがトレースされなかった場合を判断でき、トレース出力のコミットカウント値はこのグループがトレースされたと示唆しない。これは後述するカウンタ折り返しの場合にも使用できる。
【００２７】
一部の実施形態において、前記トレース制御データは前記グループのｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値を備え、前記ｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値はｔｒａｃｅ  ｅｎａｂｌｅが設定されるか否かに影響し、前記ｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値は、前記少なくとも１つのプロセッサの所定挙動の検出に応じて設定される。
【００２８】
トレースがイネーブルされるか否かは特定のプロセッサ状態によって制御される。一部の実施形態では、これらの状態によって制御されようがされまいが、ｓｔａｒｔ／ｓｔｏｐ値によりｔｒａｃｅ  ｅｎａｂｌｅをオン又はオフにできる。従来のプロセッサはこの制御値を使用している。ただしこの場合、本発明の実施形態はグループの値を蓄積するため、そのグループが後ほどキャンセルされる場合には、値を適切な値に戻すことができる。
【００２９】
一部の実施形態において、前記トレース制御データはｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する２つのトレース有効命令を備えていることを指示し、前記値が設定されない場合は前記グループが１個又は０個のトレース有効命令を備えていることを意味する。
【００３０】
命令グループは２つ以下のトレース有効命令に制限されることがある。この場合はトレース制御データにｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値を含めることで、グループに２つのトレース有効命令があるか否かを指示できる。後ほど明らかになるように、こうすることでより少ない値を使用しグループのトレースを実行できる。
【００３１】
別の実施形態で、前記ｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値は、前記グループ内のトレース有効命令数を指示する値を備える。
【００３２】
別の実施形態ではｔｒａｃｅ  ｍｕｌｔｉｐｌｅ値を数ビットとし、グループ内にあるトレース有効命令数を指示する。こうすることでグループ内に１、２、３、又は４つのトレース有効命令があるかどうかを２ビット値で指示でき、２つのトレースキー（最初値と最後値を指示）を蓄積するより効率的である。
【００３３】
一部の実施形態において、前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値は、トレースエレメントが生成されるたびに更新される。
【００３４】
生成されるトレースエレメントを追跡する一方法ではインデックス値を設け、これを各命令グループに割り振り、トレースエレメントが生成されるたびに更新する。このようなインデックスから提供される情報は圧縮が容易であり、トレースデータを解析する診断装置によって理解される。
【００３５】
一部の実施形態において、前記トレースユニットは、前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積する。
【００３６】
インデックス値によりトレース情報にインデックスを付ける方法はいくつかあるが、一部の実施形態ではカウンタを備える。カウンタはインデックス機能を提供する簡素な方法であるほか、容易に圧縮できるインデックスを提供する。一部の実施形態ではグループの最初カウンタ値と最後カウンタ値の両方が蓄積されるが、別の実施形態では、いずれか一方のみが蓄積される。命令がキャンセル又はコミットされるときには、グループの実行開始時のカウンタ値とグループの実行終了時のカウンタ値を使用することで、出力されたトレースエレメントのうち、キャンセルされた命令とコミットされた命令に関係するトレースエレメントがどれなのかを正確に判断することができる。いずれか一方だけが蓄積される場合でも、グループ内のトレース有効命令数が２に制限され、且つグループのｍｕｌｔｉｐｌｅ  ｔｒａｃｅｄ値が蓄積される場合には、キャンセルされた命令とコミットされた命令に関係するトレースエレメントを判断できる。この場合、最初値及び最後値の他方は推定できる。これの利点として、カウンタ値が多ビットとなるのに対し、ｍｕｌｔｉｐｌｅ  ｔｒａｃｅｄ値は単一ビットである。
【００３７】
一部の実施形態において、前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成される。
【００３８】
命令グループがキャンセルされる場合には、トレースエレメントを解析する診断装置でこれを推定できることが重要であり、さもないと診断装置は実行されたストリームを正しく解析できなくなる。カウンタ値を使ってトレースエレメントにインデックスを付ければ、ストリームの中で出力されたトレースエレメントのうち、キャンセルされたエレメントがいくつあるかを指示するキャンセルトレース項目を提供することにより、診断装置に対しキャンセルを指示できる。
【００３９】
一部の実施形態において、前記トレース回路は、前記ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値を頼りに前記差に関する前記情報を判断するよう構成される。
【００４０】
キャンセルされたグループにトレースされなかった命令があった場合は、キャンセルされた命令グループ数に関する出力情報で、キャンセルされたグループがトレースエレメントを出力しなかったことを示唆してはならない。ｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値は、これが示唆されないよう出力値を修正するため使用される。
【００４１】
一部の実施形態において、前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含める。
【００４２】
キャンセルと同様、命令グループのインデックスはどの命令がコミットされたかを指示するため使用できる。コミットされた命令を指示するため出力される値を計算するときにはｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇも役立つ。トレースされた命令がないグループがある場合、コミット信号は、出力されたトレースエレメントの一部がこれらのグループに属することを示唆しない。
【００４３】
本発明の第２の態様は、命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する本発明の第１の態様によるトレースユニットと、を備えるデータ処理ユニットを提供する。
【００４４】
本発明の第３の態様は、少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を指示するトレースデータ項目を生成する方法を提供し、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも１つのプロセッサの挙動を監視するステップと、前記実行される命令グループの１命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、前記推測的に実行された少なくとも１つの命令グループをキャンセルする前記少なくとも１つのプロセッサを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループの前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備える。
【００４５】
本発明の第４の態様は、少なくとも１つの命令ストリームを実行する少なくとも１つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレース手段を提供し、前記少なくとも１つの命令ストリームは複数の命令グループを備え、前記少なくとも１つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース手段は、現在のトレース制御データにより制御される前記少なくとも１つのプロセッサの挙動を監視するトレース監視手段と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、前記トレース監視手段は、前記推測的に実行された少なくとも１つの命令グループをキャンセルする前記少なくとも１つのプロセッサに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御する。
【００４６】
本発明の上記及び他の目的、特徴、及び利点は、以降の例証的実施形態の詳細な説明を添付の図面とともに読むことにより明白となるであろう。
【図面の簡単な説明】
【００４７】
【図１】データ処理装置と、データ処理装置によるプログラム実行を解析する診断装置と、を有するシステムを示す図である。
【図２】本発明の一実施形態によるトレースユニットを有するデータ処理装置を示す図である。
【図３】本発明によるトレースユニットの一実施形態を示す図である。
【図４】ｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値の設定を概略的に示す図である。
【図５】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図６】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図７】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図８】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図９】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図１０】グループ内の命令の例、実行、及びトレーシングを示す図である。
【図１１】本発明の別の実施形態によるトレースユニットを示す図である。
【図１２ａ】命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。
【図１２ｂ】命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。
【図１２ｃ】命令の実行に応じトレース制御値がどのように設定されるかを示す流れ図を示す図である。
【図１３】命令グループの実行中にトレース制御値がどのように変化するかを示す図である。
【図１４】本発明の一実施形態によるデータをトレースする方法を示す図である。
【発明を実施するための形態】
【００４８】
図１に見られるシステムは、命令ストリームを部分的に推測的に実行するデータ処理装置５と、命令の実行を監視し且つトレースストリーム４２を生成するトレースユニット４０とを含み、トレースストリーム４２は出力５２を通じて診断装置１４０へ出力される。診断装置１４０は診断ロジック１４２を有し、診断ロジック１４２はソフトウェアプログラムの形をとってよい。診断ロジック１４２はプロセッサ１０によって実行されるプログラムに関連してトレースストリームを解析し、トレースストリームはデータストアに蓄積される。診断ロジック１４４はデータ処理装置５によるプログラム実行に関する情報を出力し、出力された情報は故障の診断に役立てられる。
【００４９】
本発明の一実施形態によるトレースユニット４０を含むデータ処理装置５を図２に示す。データ処理装置５はプロセッサコア１０（データ処理ユニット）と、プロセッサコア１０の処理活動を監視し、且つコアの処理活動を示すトレースデータ項目を生成するよう構成されたトレースユニット４０とを備え、トレースデータ項目は出力５２にてトレースストリームとして出力される。
【００５０】
プロセッサコア１０はフェッチユニット２０と実行ユニット２５とを備える。フェッチユニット２０はメモリ（図示せず）から命令をフェッチし、これらの命令は実行ユニット２５へ引き渡され、実行ユニット２５にて実行される。プロセッサコア１０は推測型プロセッサであるため、フェッチユニット２０は実行ユニット２５向けの命令をフェッチするよう構成され、命令は要求により分岐予測ユニット３０によって予測される（ただし保証されない）。実行ユニット２５はこれらの命令を推測的に実行し、後ほど推測が正しいか否かが判明した時点で命令をキャンセルするかコミットする。
【００５１】
トレースユニット４０は、推測的命令実行を含むプロセッサコア１０の処理活動を示すトレースエレメントを生成し、且つそれらを出力５２にてトレースデータストリームとして出力するよう構成される。トレースユニット４０が推測的に実行される命令との関連で生成されるトレースデータ項目をバッファし、推測が解決した時点でそれらを出力トレースストリームに放出することは原理上可能ではあるが、それにはトレースユニット４０内にかなりの蓄積空間が必要となり、面積的に高くつく。
【００５２】
そこで図２に示す実施形態のトレースユニット４０は、推測的に実行される命令と非推測的に実行される命令の両方についてトレースデータを生成し、且つ推測が正しいか否かが分かった時点でキャンセル信号かコミット信号を生成するよう構成されている。こうしてトレースデータを解析する診断装置はトレースデータを理解することができる。
【００５３】
図３ではトレースユニット４０がより詳細に示されている。トレースユニット４０は、プロセッサコアから信号を受信するトレース回路５０を有する。トレースユニットは信号を監視し、トレースエレメントを適宜生成し、トレースストリームの形でトレースエレメントを出力し、トレースストリームは診断装置へ送信される。トレースユニット４０はまたｔｒａｃｅ  ｅｎａｂｌｅ信号を受信し、これによりトレース回路の中でｔｒａｃｅ  ｅｎａｂｌｅビットが設定される。ｔｒａｃｅ  ｅｎａｂｌｅはトレースエレメントが出力されるか否かを制御する。
【００５４】
この実施形態のトレースユニット４０は、トレース制御データを蓄積するレジスタ６０を有し、トレース制御データはｔｒａｃｅ  ｅｎａｂｌｅ値とともにトレース回路５０の動作を制御する。尚、一部の実施形態においてはこれらの値がレジスタに蓄積されず、データは検出される信号値のみとなる。さらに、これらの制御値は多くの実施形態において２つのとりうる値を有し、一般的には単一ビットとして表される。トレースユニットはまた、データストア６５を有し、データストア６５は、推測的に実行されまだコミット又はキャンセルされていない命令に関するトレース制御データ等、トレース情報を蓄積する。この情報により、命令が実行前の値までキャンセルされる場合にはレジスタ６０が更新されるほか、命令グループのキャンセルやコミットに関する情報がトレースストリームに出力される。その結果、診断装置には十分な情報が送信され、診断装置は、トレースストリームの項目のうち、キャンセルされた命令に関係する項目がどれなのかを判断できる。トレース回路は、どの命令がキャンセル又はコミットされたかを指示するトレース信号を出力するほか、プロセッサの処理活動を指示するトレース項目を出力する。こうして診断装置はトレースストリームを理解でき、トレースされた命令のうちキャンセル又はコミットされた命令がいくつあるかを認識できる。
【００５５】
トレース回路を正常に動作させるには、推測的実行のときに変化したトレース制御値を不正推測実行以前の値にリセットすることが重要となる。
【００５６】
推測的実行を効率よく管理するため、命令は命令グループとして管理される。これは、命令がまとめてコミットされキャンセルされる不可分の命令ブロックにグループ分けされ、グループの中で例外が発生しない場合に可能である。
【００５７】
トレース回路は命令をトレースするときにこれらのグループを使用し、トレース有効命令が実行されトレースエレメントが出力されるたびにトレースキーを使ってカウントする。グループの実行が始まるときと終わるときのトレースキー値は最初値及び最後値と呼ばれ、データストア６５に蓄積される。こうすることで、命令がグループとしてコミット及びキャンセルされるにつれ、グループの始まりと終わりを判断できる。命令ストリームにおける処理位置を診断装置が正確に判断できるようにするため、トレースキーが時折出力されることもある。通常は、トレース有効命令が実行されたことを示すトレースエレメントと、キャンセルもしくはコミットされた命令数を示すカウント値を出力すれば、これを判断できる。
【００５８】
これよりトレースキーがどのように生成され蓄積されるかを詳しく説明する。トレースユニット４０にはトレースインデックスユニット７０が設けられる。インデックスユニット７０は、トレースユニット５０によって生成されるトレースデータ項目の少なくとも一部にインデックス値かトレースキーを割り振るよう構成される。具体的に、インデックスユニット７０は所定のインデックス値シーケンスとしてインデックス値を生成するよう構成され、所定のシーケンスの中でｎ＋１番目のインデックス値はｎ番目のインデックス値から決定される。図示された実施形態においては、インデックスユニット７０内のカウンタ７２によってこの機能が提供される。
【００５９】
トレースユニット５０は所定のインデックス値シーケンスを提供するカウンタ７２を備え、トレースユニット４０は生成するトレースデータ項目（の一部）にこれを割り振ることができる。トレースユニット４０はまた、カウンタ７２によって生成されたインデックス値を蓄積できるデータストア６５を備える。データストア６５は、推測的に実行される各グループの最初カウンタ値と最後カウンタ値を、当該グループのさらなるトレース制御値とともに、蓄積する。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット４０は、カウンタ７２からの現在カウンタ値をデータストア６５の最初インデックス蓄積ユニット（グループ番号によりインデックスが付く）に蓄積するよう構成される。逆に、新たなグループがスタートするときには、データストア６５の最後インデックス蓄積ユニットに現在カウンタ値が蓄積される。
【００６０】
図示された実施形態で、データストア６５は命令グループの点でプロセッサの最大推測デプス（ｄｅｐｔｈ）に対応する十分なエントリを有する。プロセッサの最大推測デプスはデータストア６５で保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。
【００６１】
ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ値を蓄積するデータストアもある。この値は、特定のグループをコミットする信号に応じ、診断ツールに対し実際にコミットされる命令がどれなのかを出力するため使用される。
【００６２】
グループの実行中にｔｒａｃｅ  ｅｎａｂｌｅの値が切り替わる場合は特に、推測的実行中の命令追跡は容易ではない。この実行を首尾よく追跡できるようにするには、最初カウンタ値と最後カウント値に対しさらなる情報が必要となるため、データストア６５はさらなる値を蓄積する。
【００６３】
トレース回路を制御する現在のトレース制御データを蓄積するレジスタ６０は、ｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値と、スティッキービットと、ｉｎｉｔｉａｌ  ｔｒａｃｅｄ値と、ｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値とを蓄積する。ｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値は先行グループの最終命令のｔｒａｃｅ  ｅｎａｂｌｅ値であり、スティッキービットは、先行命令がトレースデータを出力しない場合に設定され、出力する場合にクリアされる。先行グループの最終命令が実行されたときのスティッキービットの値は後続グループのスティッキービットとしてデータストア６５に蓄積されるが、レジスタ６０内のその値は命令が実行されるにつれ更新され、更新された値は当該グループのデータストア６５に蓄積されない。ｉｎｉｔｉａｌ  ｔｒａｃｅｄ値はグループ内の最初の命令のｔｒａｃｅ  ｅｎａｂｌｅであり、ｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇはトレースされた命令がグループにあることを指示する。これらの値から診断装置は、例えば２つのグループがコミットされたことをトレース回路が指示し、特にこれらのグループの一方でトレースがイネーブルされず実際にトレースされなかった場合に、これがトレースエレメント出力にどのように関係しているかを判断できる。以降の図に関し、これらの値がどのように更新され使用されるかを説明する。
【００６４】
データストア６５はグループのｔｒａｃｅ  ｓｔａｒｔ／ｓｔｏｐ値も蓄積する。これはグループ内の最初の命令より前のｓｔａｒｔ／ｓｔｏｐビットの値である。開始遷移の後、停止状態でトレースがディスエーブルされる場合、すなわちｔｒａｃｅ  ｅｎａｂｌｅが０になる場合、ｔｒａｃｅ−ｅｎａｂｌｅは停止遷移まで他のソースに依存する。
【００６５】
開始条件は、例えばサブルーチン内の最初の命令のアドレスでよく、停止条件はサブルーチン内の最後の命令のアドレスでよい。こうすることで、このサブルーチン内の命令だけがトレースされる。
【００６６】
キャンセル後に開始／停止挙動の整合をとるには、ｓｔａｒｔ／ｓｔｏｐ値をデータストアに蓄積し、キャンセル時に蓄積済みの値まで逆戻りする必要がある。推測的に実行される命令だけでなく構造的に実行される命令により開始／停止挙動を定義するためである。
【００６７】
新たなグループがスタートすると、グループ内の最初の命令が処理される前のｓｔａｒｔ／ｓｔｏｐ値が、グループに対応するデータストア内の行に蓄積される。
【００６８】
グループがキャンセルされると、キャンセルされた命令に対応するデータストア内の行からｓｔａｒｔ／ｓｔｏｐビットが取り出される。
【００６９】
図４は、ｓｔａｒｔ／ｓｔｏｐビットがどのように設定され、トレースがイネーブルされるか否かの決定にどのように使われるかを概略的に示すものである。命令アドレスが受信されると照合が行われ、命令アドレスがトレースユニットの構成時に定められた範囲内にあるか否かを確認する。範囲内にあるなら、ｓｔａｒｔ／ｓｔｏｐビットが設定される。同様に照合が行われ、命令アドレスがトレースユニットの構成時に定められた停止アドレス範囲内にあるか否かを確認する。範囲内にあるなら、ｓｔａｒｔ／ｓｔｏｐビットはクリアされる。
【００７０】
実行され、トレースされ、コミットされる命令グループＡ、Ｂ、Ｃ、及びＤの例を図５に示す。この場合のトレース出力はＥアトムであり、キーは出力されないが命令のたびに更新され、その一部は図３のデータストア６５に蓄積される。
【００７１】
この例ではグループＡが実行される。グループＡは分岐命令を含んでいるため、トレースがイネーブルされるとトレースエレメントＥが出力され、図３のカウンタ７２の値であるｋｅｙ  １がこの命令に割り振られ、グループＡとして蓄積される。そしてカウンタは増加する。次に実行される命令はグループＢの中にある。これは新たなグループであるため、グループＢの分岐命令には現在のトレースキー値ｋｅｙ  ２が割り振られる。グループＢは分岐を含んでおり、トレースは引き続きイネーブルされるため、別のトレースエレメントが出力され、カウンタ７２はｋｅｙ  ３に増加する。次の命令は新たなグループの中にあり、これも分岐であり、トレースは引き続きイネーブルになっているためさらなるトレースエレメントが出力され、トレースキー３がこの命令に割り振られ、カウンタ７２は増加する。
【００７２】
次に実行される命令はグループＤの中にある。この命令はトレース無効命令である。トレース回路はトレースエレメントを生成しないよう構成されるため、トレースエレメントは出力されず、キーは増加しない。次に分岐命令があり、これはトレースエレメントを生成し、トレースキーの現在値４がこれに割り振られ、カウンタは増加する。次に、グループＣがコミットされたことを伝えるコミット信号をトレース回路５０がプロセッサから受信すると、グループＣと、これに先立つグループＡ及びＢは推測でなくなる。トレース出力を解析している診断ツールにこれを伝達する必要があるため、トレース出力にはコミット信号が加えられる。このコミット信号ではコミットされたグループを正確に指示する必要がある。それには、コミットされたグループのキー値から、蓄積（図３のストア８０）された中で最も古い以前のコミットのキー値を引いたものを出力する。この場合は先行グループにコミットされたものがないため、出力される値は、グループＣの最終命令に割り振られたキー値ｋｅｙ  ３−０となり、ｋｅｙ  ３信号が出力される。診断装置はこれからグループＡ、Ｂ、及びＣの命令がコミット済みであると判断できる。
【００７３】
そのグループで蓄積された最後のキー値ｋｅｙ  ３はｏｌｄｅｓｔ  ｃｏｍｍｉｔｔｅｄストアに蓄積される。
【００７４】
尚、この実施形態では図３のデータストア６５に見られるように各グループにつき最初カウンタ値と最後カウンタ値を蓄積するのではなく、データストア６５には単一のキー値が蓄積される。これはグループ内の最終命令に割り振られるキー値である。
【００７５】
図６に示す例は図５に似ているが、一部の命令の実行中にはトレースがディスエーブルされる。図６ではグループＣの実行とグループＤの半分でトレースがディスエーブルされる。この場合はグループＡの実行によってトレースエレメントの出力がトリガされ、カウンタ７２の現在値であるトレースｋｅｙ  １がグループＡのキー値として蓄積され、カウンタ７２は増加する。次にグループＢに入ると現在のカウンタ値２がグループＢとして蓄積され、グループＢ内の分岐命令の実行によりトレースエレメントの出力とキー値３への増加がトリガされる。次にトレース出力がディスエーブルされ、分岐Ｃが実行されてもトレースエレメントの出力はトリガされない。従って、カウンタキーの現在値３がグループＣとして蓄積されるが、トレースエレメントが出力されないため、値は増加しない。次に新たなグループＤに入り、最初の命令はトレース無効命令であり、いずれにせよトレースはディスエーブルされるので、トレースエレメントは出力されず、カウンタは増加しない。次にトレースがイネーブルされ、実行される次のトレース有効命令はグループＤ内の分岐であるため、トレースエレメントは出力され、このグループとして現在のキー値３が蓄積され、カウンタは４に増加する。
【００７６】
トレース回路は、グループＣがコミットされたことを伝える信号を受信する。これを指示する信号をトレース出力ストリームで送信する必要がある。ただしグループＣはトレースされていない。
【００７７】
この問題に対処するためトレース制御データでｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値が使用される。この値は、命令グループにトレースされるトレース有効命令がある場合に設定され、トレースされる命令がない場合にクリアになる。つまり、トレースされる命令がなければ設定されない。従ってグループＣの場合はこれがクリアになる。これはグループがコミット又はキャンセルされる場合に使用される。この場合、グループＣはコミットされ、そのｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇ値はクリアである。グループＣで蓄積されたキー値は３であり、ｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇビットはクリアであるため、コミットは、蓄積されたキー値−ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ値（この場合は０）−１、すなわち２となるよう計算される。従ってｃｏｍｍｉｔ  ２信号が送信され、診断装置は、前の２つのトレースエレメントがコミット済みのグループに属すると推定できる。すなわち、グループＡ及びＢがコミットされていると推定できる。もしもコミット値から１を引かなければｃｏｍｍｉｔ  ３信号が出力され、トレース出力を解析する診断ツールは、分岐Ｄを含め最初の３つのトレース済み命令がコミット済みと想定することになる。これは誤りである。もしもｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇが設定されたなら、キー値から１は引かれないが、この場合は分岐Ｃがトレースされたことになる。
【００７８】
次にｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ値はｋｅｙ  ３に設定される。
【００７９】
ｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇ値は、推測がプロセッサの推測デプスに達し、カウンタが折り返した場合にも使用できる。この場合、コミット又はキャンセルするキーは最も古い以前のコミットと同じ値になることがある。これは計算コミット値０を提供する。さもないとコミットされるのが０なのか、あるいは最大推測デプスＮなのか分からない。これは最終グループのｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇビットから推定でき、これが設定されるなら値はゼロではなくＮに違いなく、これがクリアなら値はＮではなくゼロに違いない。
【００８０】
一部の実施形態ではデータストア６５が命令グループの最初カウンタ値と最後カウンタ値を蓄積する。これらの値を使用することにより、推測的命令のキャンセル及びコミットに応じキャンセル又はコミットする必要があるトレースストリームの値を判断することができる。以下、これを説明する。
【００８１】
図３に見られる実施形態等、一部の実施形態では、最初カウンタ値と最後カウンタ値が各グループのデータストア６５に蓄積される。カウンタ７２は所定のインデックス値シーケンスを提供し、トレースユニット４０は生成するトレースデータ項目（の一部）にこれを割り振ることができる。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット４０は、カウンタ７２からの現在カウンタ値を当該グループの最初値として蓄積するよう構成され、逆に、新たなグループがスタートするときには、当該グループの最後値として現在カウンタ値が蓄積される。
【００８２】
データストア６５は、命令グループの点でプロセッサの最大推測デプスに対応する十分なエントリを有するよう構成される。プロセッサの最大推測デプスはインデックス蓄積ユニットで保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。
【００８３】
これより下の表１を参照しながら最初値と最後値の使用を説明する。
【００８４】
表１は、プロセッサコア１００が命令グループＡ、Ｂ、及びＣを推測的に実行した後、グループＢのキャンセルとグループＡのコミットを指示する状況で、トレースユニット１１０でカウンタ値と、ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ値と、追跡テーブルがどのように更新されるかを示している。
【００８５】
グループＡはｌｏａｄ（ＬＤＲ）命令から始まり、これは「ｉｎｔｅｒｅｓｔｉｎｇ」であり、現在トレースされている。グループＡに対応する最初インデックスユニット２３０のエントリ（「Ａ．ｆｉｒｓｔ」）には現在カウンタ値０が蓄積され、カウンタは１に増加する。最後に、グループＡに対応する最後インデックスユニット２４０のエントリ（「Ａ．ｌａｓｔ」）に現在カウンタ値１が蓄積される。グループＡの次の命令はｍｏｖｅ命令（ＭＯＶ）であり、これは「ｉｎｔｅｒｅｓｔｉｎｇ」ではなく、トレースされない。グループＡの最後の命令はｂｒａｎｃｈ−ｉｆ−ｅｑｕａｌ（ＢＥＱ）命令であり、これは「ｉｎｔｅｒｅｓｔｉｎｇ」でありトレースされため、カウンタは２に増加する。そして、グループＡに対応する最後インデックスユニット２４０のエントリ（「Ａ．ｌａｓｔ」）が現在カウンタ値２により更新される。尚、各命令の最終ステップでは常に現在のグループに対応する最後インデックスユニット２４０のエントリが現在カウンタ値により更新される。勿論、これが何らかの効果をもたらすのは、その命令でカウンタが更新されている場合に限る。表１の残りの命令では、この「最後」値の更新を明確に説明しない。
【００８６】
グループＢはＡＤＤ命令から始まり、これは「ｉｎｔｅｒｅｓｔｉｎｇ」ではなくトレースされないが、新たなグループの最初の命令であるため最初インデックス値蓄積ユニットのエントリには現在カウンタ値２が蓄積される（Ｂ．ｆｉｒｓｔ＝２）。グループＢの２番目の命令はＳＵＢ命令であり、これも同様に「ｉｎｔｅｒｅｓｔｉｎｇ」ではなくトレースされず、値を更新しない。
【００８７】
グループＣはｓｔｏｒｅ（ＳＴＲ）命令から始まり、これは「ｉｎｔｅｒｅｓｔｉｎｇ」でありトレースされるため、最初インデックス蓄積ユニットのＣ．ｆｉｒｓｔエントリには現在カウンタ値が蓄積され、カウンタは３に増加する。グループＣの２番目の命令はｂｒａｎｃｈ−ｉｆ−ｎｏｔ−ｅｑｕａｌ（ＢＮＥ）命令であり、これも「ｉｎｔｅｒｅｓｔｉｎｇ」でありトレースされるため、カウンタは４に更新される。
【００８８】
次にプロセッサコア１００は、グループＢの推測的実行が不適正であるためグループＢ及びＣのキャンセルを指示する。これに応じ、トレースユニット１１０（トレース制御ユニット２００により制御）はカウンタ２１０の現在カウント値４と、最初インデックス蓄積ユニット２３０のエントリ（Ｂ．ｆｉｒｓｔ）に蓄積された値２を参照する。トレースユニット１１０は２つのトレースデータ項目をキャンセルすべきと判断し（４−２）、これを指示するトレースデータ項目を生成する。カウンタ２１０は２にリセットされる（４から２項目キャンセルのため）。
【００８９】
次にプロセッサコア１００は、命令グループＡの推測的実行が適正であったと判断し、命令グループＡのコミットを指示する。これに応じ、トレースユニット１１０（トレース制御ユニット２００の制御下）は、ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ蓄積ユニット２５０に蓄積された値（現在０）と、このグループに対応する最後インデックス蓄積ユニット２４０のエントリ（Ａ．ｌａｓｔ）２を参照する。トレースユニット１１０は２つのトレースデータ項目をコミットすべきと判断し（２−０）、これを指示するトレースデータ項目を生成する。ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄ蓄積ユニット２５０に蓄積された値は、このグループで読み取られた「最後」の値に、この例では２に、リセットされる。
【００９０】
尚、表１を参照しながら説明する実施形態では、イベント数の参照によりキャンセルとコミットが行われ、生成されるトレースデータ項目はキャンセル又はコミットされるイベント数を指示する。別の実施形態では、トレースユニットはイベント番号の参照によりキャンセル／コミットトレース項目を生成できる。この場合、キャンセルトレース項目の場合は「最初」値から、すなわち最初インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られ、コミットトレース項目の場合は「最後」値から、すなわち最後インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られる。イベント番号によるコミット及びキャンセルではハードウェアを削減できるように思われるが（減算が不要のため）、イベント数によりキャンセル／コミットを指示する場合は通常ならば先行ゼロがあるため、大抵は圧縮できる。「イベント数」によりコミット／キャンセルにするか、それとも「イベント番号」によりコミット／キャンセルするかの選択は、システム要求に応じて判断できる。すなわち、トレースユニットのハードウェア削減とトレースストリームにおける帯域幅削減のうち、どちらを重視するかによって判断できる。
【００９１】
【表１】
0005604373.tif 000002
【００９２】
これより下の表２を参照しながらさらなる例を説明する。この例のトレースユニットは、ｓｔｏｒｅ（ＳＴＲ）命令をトレースしないことにより生成されるトレースをさらに選別する。表２におけるグループＡ及びＢの値は表１の値と同じである。ただしグループＣの最初の命令でＳＴＲ命令はトレースされないため、カウントは増加しない。このためカウントは、グループＣでＢＮＥ命令（トレースされる）に遭遇したときに３に増加する。
【００９３】
プロセッサコアが「ｃａｎｃｅｌ  Ｂ」メッセージを発行すると、トレースユニット１１０は、現在カウントが３、Ｂ．ｆｉｒｓｔが２（表１の例と同様）であるため、ただ１つのトレース項目をキャンセルすべきと判断する（３−２）。同様に、カウントは１減少する（値２まで減少）。表１のようにプロセッサコアが「ｃｏｍｍｉｔ  Ａ」メッセージを発行すると、ｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄカウントは０、Ａ．ｌａｓｔ＝２であるため、２つのトレース項目がコミットされる。そしてｏｌｄｅｓｔ  ｕｎｃｏｍｍｉｔｔｅｄカウントは２に更新される。
【００９４】
【表２】
0005604373.tif 000003
【００９５】
制御レジスタ６０におけるｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ制御値の使用を図７に示す。ここでは、トレースがオフだったときに実行された命令がキャンセルされたためｔｒａｃｅ  ｏｎ信号の出力を不要につき禁止する。ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値は、先行グループの最終命令が実行されたときのｔｒａｃｅ  ｅｎａｂｌｅ値である。従って図７の例でグループＢのｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値はクリアになっている。グループＢでトレースがイネーブルされると、ｔｒａｃｅ  ｏｎ信号が分岐ＢのトレースエレメントＥとともに出力されるほか、トレースがオンになったときのコアによるプログラム実行位置を指示する状態エレメント２０００（図示せず）が出力される。グループＣが実行されるときにはトレースが再びオフになる。その後グループＣはキャンセルされ、グループＤが実行される。グループＣがキャンセルされたため、グループＤに先行するグループはグループＢとなり、このグループのトレースはイネーブルされていたため、グループＤのｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄ値は設定される。ｔｒａｃｅ  ｅｎａｂｌｅは遷移しているが、トレース回路はｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄの設定を受けてｔｒａｃｅ−ｏｎ信号の出力を禁止する。もしもグループＣがキャンセルされなかったなら、グループＤでｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄは設定され、ｔｒａｃｅ  ｅｎａｂｌｅ信号の遷移を受けてｔｒａｃｅ  ｏｎ信号が生成されることになる。
【００９６】
ｔｒａｃｅ  ｅｎａｂｌｅが値を変える別の例を図８に示す。この場合、グループＡは分岐であり、トレースはイネーブルされ、トレースエレメントは出力され、ｉｎｉｔｉａｌ−ｔｒａｃｅｄは、グループ内の最初の命令のｔｒａｃｅ  ｅｎａｂｌｅ値であるため、設定される。次にトレースはイネーブルされず、グループＢの実行が始まる。グループＢの最初の命令でトレースはイネーブルされないためグループＢのｉｎｉｔｉａｌ−ｔｒａｃｅｄはクリアになり、グループＡの最終命令でトレースはイネーブルされているためｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄは設定される。グループＢの２番目の命令でトレースはイネーブルされ、これはグループの中間であるため、これを受けてｔｒａｃｅ  ｏｎ信号は常に出力され、トレースがオンになるときのプロセッサの実行位置を指示する状態３００４が出力される。その後、グループＢの次の命令が実行され、トレースエレメントが出力される。そしてグループＢのキャンセルを指示するキャンセル信号をコアから受信する。グループＢで出力されたトレースエレメントは１つであるため、キャンセルは１である。
【００９７】
トレース回路はキャンセルされたグループＢのｉｎｉｔｉａｌ−ｔｒａｃｅｄ値と、現在蓄積されているｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄをチェックする。もしもｉｎｉｔｉａｌ−ｔｒａｃｅｄがクリアでｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄが設定されているなら、キャンセルされたグループの実行中にｔｒａｃｅ  ｅｎａｂｌｅが値を変化させ、状態エレメントが出力されたことになる。これらの値に応じて新たな状態エレメントが出力される。
【００９８】
この場合、次に実行される命令はグループＣのトレース無効命令であり、グループＢで蓄積されたｉｎｉｔｉａｌ  ｔｒａｃｅｄ値とグループＣで蓄積されたｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値に応じ状態エレメント４０００が出力される。診断装置は、トレースがアドレス３００４ではなくアドレス４０００からのものであることを知る。
【００９９】
要約すると、キャンセルされたグループに対応する表の同一行から取り出されるｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄが１でｉｎｉｔｉａｌ＿ｔｒａｃｅｄが０ならｆｏｒｃｅ−ｓｔａｔｅ−ｏｕｔｐｕｔは出力される。図８ではグループＢがキャンセルされる。グループＢの前の命令はトレースされるが、グループＢの最初の命令はトレースされないため、ｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄ＝１、ｉｎｉｔｉａｌ＿ｔｒａｃｅｄ＝０となる。キャンセル後の最初のグループでｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄ値は１であるため、第２のｔｒａｃｅ−ｏｎは出力されない。
【０１００】
ｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄとｉｎｉｔｉａｌ＿ｔｒａｃｅｄには４通りの値がある。
【０１０１】
【表３】
0005604373.tif 000004
【０１０２】
図９に見られる推測的命令をトレースするときに生じるもうひとつの問題には、本発明の実施形態により対処する。前述したように、トレース無効命令の実行はトレース有効命令の実行をトレースすることによって示唆できるため、トレース無効命令はトレースせず、トレース有効命令に指定された命令だけをトレースすることによってトレースデータの生成量は減らすことができる。トレース有効命令は分岐、読み込み、蓄積等であり、トレース無効命令は算術命令等の他の命令である。ただし、トレースをイネーブル又はディスエーブルする機能と併せてこの種のトレーシングを使用すると、トレースがオフになった場合に後続のトレース有効命令がトレースされないため、トレース無効命令の実行を示唆できなくなる。この問題に対処するにはトレース制御データのスティッキー値を使用する。実行されるグループの最後の命令がトレースエレメントの出力をトリガするトレース有効命令でない場合には、後続グループのためスティッキー値が設定される。このスティッキー値は後続グループのデータストアに蓄積されるほか、トレースを制御する図３の制御レジスタ６０の中で設定される。スティッキー値はトレースエレメントが出力されるまでトレース制御レジスタ６０の中で維持され、トレースエレメントが出力されるとリセットされる。つまり、トレースがイネーブルされトレース有効命令に遭遇するとトレースエレメントが出力され、制御レジスタではスティッキー値がリセットされる。診断装置は、トレースエレメントが出力されなかった先行グループの最後のトレース無効命令が実際に実行されたと判断できる。
【０１０３】
図９では、グループＢのトレース無効命令の実行を受けてグループＣのためスティッキー値が設定される。グループＣの分岐が実行されるときにｔｒａｃｅ  ｅｎａｂｌｅはオフだが、スティッキー値が設定されているため、トレースエレメントは出力される。こうすることで、診断ツールはグループＢのＮＯＰが実行されたことを示唆できる。トレースエレメントが出力された後には制御レジスタ６０でスティッキー値がリセットされるが、グループＣのデータストアに蓄積されたスティッキー値は引き続き設定される。
【０１０４】
図１０に見られる同様の例では、推測的に実行された命令の一部がキャンセルされる。この場合、グループＡではトレースがイネーブルされ、トレースエレメントが出力される。グループＢでトレースはイネーブルされるが、トレース無効命令であるため、トレースエレメントは出力されない。ただしスティッキー値は設定される。次にグループＣが実行され、トレースはイネーブルされないがスティッキー値が設定されているため、分岐によりトレースアトムの出力がトリガされる。次に図３の制御レジスタ６０でスティッキー値がリセットされるが、データストア６５では引き続きグループＣに設定されている。次にグループＤが実行され、トレースは再びイネーブルされ、トレースアトムが出力される。先行グループでスティッキー値が設定されたため「ｔｒａｃｅ−ｏｎ」出力はない。
【０１０５】
次にコアからｃａｎｃｅｌ  ｇｒｏｕｐ  Ｃが受信され、前の２つのアトムのキャンセルを指示するためｃａｎｃｅｌ  ２が出力される。グループＣをキャンセルするときには、グループＢで蓄積されたトレース制御値の一部が制御レジスタに読み込まれる。グループＢで蓄積されたスティッキー値は設定されており、これが制御レジスタに読み込まれ、例外が生じる。制御レジスタではスティッキー値が設定されているため、ｔｒａｃｅ  ｅｎａｂｌｅがローでも例外はトレースされる。
【０１０６】
図１１に見られるトレースユニット４０は図３のそれに似ているが、レジスタ６０とデータストア６５にはｍｕｌｔｉｐｌｅ−ｔｒａｃｅｄというトレース制御値が追加されている。この実施形態ではグループ内のトレース有効命令が２つまでとなるよう装置が構成され、グループに含まれるトレース有効命令が２つならｍｕｌｔｉｐｌｅ  ｔｒａｃｅｄが設定され、グループのトレース有効命令が１つかトレース有効命令がなければ（ｔｒａｃｅｄ＿ｉｎｔｅｒｅｓｔｉｎｇから判断）ｍｕｌｔｉｐｌｅ  ｔｒａｃｅｄはクリアになる。こうすることで、最初のキー値か実施形態によっては最後のキー値だけをデータストア６５に蓄積すればよく、残りはｍｕｌｔｉｐｌｅ  ｔｒａｃｅｄ値が設定されるか否かによって判断できる。従って、多ビットのカウント値を蓄積するのではなく単一ビットを蓄積することで残りのキーを指示できる。
【０１０７】
別の実施形態ではｍｕｌｔｉｐｌｅ−ｔｒａｃｅｄ値を数ビット幅とし、グループ内の合計トレース有効命令数を蓄積する。この場合はこの値を使ってカウンタを更新できる。この値は多ビット幅だが、最初カウント値と最後カウント値を指示する２つのトレースキーを蓄積するよりは効率的である。さらに別の実施形態ではこれを多ビット幅とし、グループ内の合計トレース有効命令数−１を蓄積する。トレース有効命令が１つかゼロかはｔｒａｃｅｄ＿ｉｎｔｅｒｅｓｔｉｎｇ値から判断する。
【０１０８】
尚、トレース制御値はグループごとに設定され、新たなグループに遭遇するとデータストア６５に蓄積される。ただしｔｒａｃｅｄ−ｉｎｔｅｒｅｓｔｉｎｇはグループ内の各命令につき適宜更新され、当該グループにとっての最終的な値が蓄積される。当該グループのデータストア６５には制御レジスタ６０にある最初のスティッキー値が蓄積されるが、これはグループの実行にともない更新されることがあり、更新された値はデータストアに蓄積されない。
【０１０９】
図１２ａ乃至１２ｃは、種々のトレース制御値がどのように更新されるかを説明する流れ図である。
【０１１０】
スティッキービットがどのように設定されクリアされるかを図１２ａに示す。まずは、新たなグループが受信されたか否かを判断し、受信された場合は現在のスティッキービットがデータストア６５に蓄積される。次に、新たなグループが受信されようがされまいが、命令がトレース有効命令か否かを判断し、トレース有効命令ならスティッキービットはクリアされ、トレース有効命令でなければトレースがイネーブルされるか否かを判断し、イネーブルされるならスティッキービットが設定される。次に、トレース有効命令があるならスティッキービットはクリアされ、命令がトレース有効命令でなくトレースがイネーブルされるならスティッキービットは設定される。
【０１１１】
ｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄがどのように設定されるかを図１２ｂに示す。新たなグループがスタートするとｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄの現在値がデータストア６５に蓄積される。次に、トレースがイネーブルされるか否かを判断し、イネーブルされるならｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄが設定され、イネーブルされないならスティッキービットが設定されているか否かを判断し、設定されているならｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄが設定され、設定されていなければｐｒｅｖｉｏｕｓ−ｔｒａｃｅｄはクリアされる。
【０１１２】
グループがキャンセルされた場合に新規状態の出力をいつ強制するかを判断するため、ｉｎｉｔｉａｌ＿ｔｒａｃｅｄがどのように更新され使用されるかを図１２ｃに示す。グループの実行が始まるとスティッキービットが設定されているか否かを判断する。スティッキービットが設定されている場合は、トレースがイネーブルされようがされまいが、キャンセルされたグループのｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄ値とｉｎｉｔｉａｌ＿ｔｒａｃｅｄ値を検討する必要がある。
【０１１３】
スティッキービットが設定されていない場合はトレースがイネーブルされるか否かを判断する。イネーブルされないならｉｎｉｔｉａｌ＿ｔｒａｃｅｄはクリアされ（これはグループの最初の命令のｔｒａｃｅ＿ｅｎａｂｌｅ値）、イネーブルされるなら、これがキャンセル後の最初の命令であるか否かを判断する。キャンセル後の最初の命令なら、キャンセルされたグループのｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄ値とｉｎｉｔｉａｌ＿ｔｒａｃｅｄ値を検討する。
【０１１４】
キャンセルされたグループでｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄが設定されている場合は、キャンセルされたグループの前のグループの最終命令が実行されたときにトレースがイネーブルされていたことを意味し、ｉｎｉｔｉａｌ＿ｔｒａｃｅｄがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされていなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ、状態エレメントが出力されたかもしれない。これが検出されるとｆｏｒｃｅ  ｎｅｗ  ｓｔａｔｅが発生する。グループがキャンセルされ、ｔｒａｃｅ＿ｅｎａｂｌｅが０から１に遷移し状態が出力されたと判断される場合には新規状態が出力され、トレース診断ツールはプログラムの実行位置を判断することができる。
【０１１５】
この場合、そのグループの最初の命令でトレースがイネーブルされていないとｉｎｉｔｉａｌ−ｔｒａｃｅｄはクリアされる（ｉｎｉｔｉａｌ＿ｔｒａｃｅｄがクリアならトレースはイネーブルされていなかったことを意味し、キャンセルされたグループの以前の値にリセットされる）。キャンセルされたグループでｉｎｉｔｉａｌ＿ｔｒａｃｅｄが設定されているなら、このグループの最初の命令でトレースはイネーブルされているため、ｉｎｉｔｉａｌ−ｔｒａｃｅｄは設定される。
【０１１６】
命令がキャンセル後の最初の命令でないか、あるいはｐｒｅｖｉｏｕｓ＿ｔｒａｃｅｄが設定されていなければ、グループの最初の命令でトレースはイネーブルされｉｎｉｔｉａｌ＿ｔｒａｃｅｄでこれを反映するためｉｎｉｔｉａｌ＿ｔｒａｃｅｄは設定される。
【０１１７】
次に新たなグループがスタートすると、そのグループのｉｎｉｔｉａｌ＿ｔｒａｃｅｄが蓄積される。
【０１１８】
命令実行の例と、カウンタキー値とトレース制御値がどのように変化するかを図１３に示す。実行される最初の命令はグループＡの中にあり、アドレス１０００を持ち、分岐命令である。トレースはイネーブルされ、トレースエレメントは出力され、現在のカウンタ値ｋｅｙ  １がこの命令のトレースキーとして蓄積される。この時点でスティッキー値は０であり、ｉｎｉｔｉａｌ  ｔｒａｃｅは１に設定されている。ｌｏａｄ  ｓｔｏｒｅはなく、ｍｕｌｔｉｐｌｅ  ｔｒａｃｅ命令はなく、ｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値はまだなく、ｏｌｄｅｓｔ  ｃｏｍｍｉｔｔｅｄ命令は０に設定されている。
【０１１９】
次に実行される命令はグループＢの中にあり、トレース無効命令である。トレースは引き続きイネーブルされ、カウンタは２に増加したためこのグループについてはｋｅｙ  ２が蓄積され、トレース無効命令の実行によりスティッキー値が設定される。先行グループの最後の命令が実行したときにトレースはイネーブルされていたためｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄ値は１に設定され、このグループの最初の命令が実行したときにトレースはイネーブルされていたためｉｎｉｔｉａｌ  ｔｒａｃｅｄは１に設定される。
【０１２０】
次に実行される命令はグループＣにある。これもトレース無効命令であり、トレースはイネーブルされない。カウンタ値は増加しないため、グループＣのこの命令にはｋｅｙ  ２が割り振られ、スティッキー値は設定され続ける。
【０１２１】
次に実行される命令は分岐であり、ｔｒａｃｅ  ｅｎａｂｌｅは引き続きオフである。ただしスティッキー値が設定されているので、３０００で命令が実行されたことをトレースストリームを解析する診断装置に指示するため、トレースアトムが出力される。この命令についてはカウンタ値ｋｅｙ  ２が蓄積され、カウンタは増加する。このトレースアトムの出力に応じてスティッキー値はリセットされる。
【０１２２】
次に実行されるグループはグループＤであり、トレースはイネーブルされ、分岐命令であるためトレースエレメントが出力される。カウンタ値はｋｅｙ  ３であるためｋｅｙ  ３が蓄積され、この命令に割り振られる。スティッキー値は引き続き０であり、グループＣの最終命令が実行したときにトレースはイネーブルされていなかったためｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄは０であり、グループＤの最初の命令が実行したときにトレースはイネーブルされていたためｉｎｉｔｉａｌ  ｔｒａｃｅｄは１である。
【０１２３】
次にトレース回路は、グループＣまで命令をキャンセルすることを指示する信号を受信する。グループＣで蓄積されたキーはｋｅｙ  ２であり、ｏｌｄｅｓｔ  ｃｏｍｍｉｔｔｅｄは０だから、２−０、すなわち２のキャンセル信号がトレースストリームにて診断装置へ送信され、カウンタは２減少する。グループＣに関係するデータストアの値からトレースを制御する制御状態が復元される。
【０１２４】
次に受信される命令はグループＥにあり、分岐であり、トレースはイネーブルされるためトレースエレメントが出力され、キーは増加し、この命令についてはｋｅｙ  ２が蓄積される。ｐｒｅｖｉｏｕｓ  ｔｒａｃｅｄとｉｎｉｔｉａｌ  ｔｒａｃｅはいずれも１に設定され、このグループにはさらなるトレース有効命令ｌｏａｄがあるため、ｍｕｌｔｉｐｌｅ  ｔｒａｃｅは１に設定される。ｌｏａｄ及びｓｔｏｒｅ命令のアドレスを出力する必要があることを指示するためｔｒａｃｅ  ｌｏａｄ  ｓｔｏｒｅも１に設定される。この場合はトレースがイネーブルされないためアドレスは出力されない。
【０１２５】
次の命令はグループＦの中にあり、トレース無効命令である。このときｔｒａｃｅ  ｅｎａｂｌｅがオンになるため、ｔｒａｃｅ  ｏｎと状態出力が出力される。カウンタは増加せず、トレース無効命令であるためスティッキー値は設定されない。
【０１２６】
グループＦの次の命令は分岐であるためトレースエレメントは出力される。スティッキー値はリセットされ、カウンタは４に増加する。
【０１２７】
次に、グループＢをコミットする指示をコアから受信する。グループＢで蓄積されたキー値はｋｅｙ  ２であるので、通常ならばｏｌｄｅｓｔ  ｃｏｍｍｉｔｔｅｄ値が０であるためｃｏｍｍｉｔ  ２信号が出力される。ただし、グループＢのｔｒａｃｅｄ  ｉｎｔｅｒｅｓｔｉｎｇは０でグループＢがトレースされなかったことを指示しているため、グループＡの分岐命令が実行済みであることを指示するｃｏｍｍｉｔ  １が出力される。
【０１２８】
次のグループはグループＧである。カウンタは引き続き増加し、これはトレース有効命令でありトレースはイネーブルされるため、アトムは出力される。カウンタがコミット信号の影響を受けないことに注意されたい。
【０１２９】
本発明の一実施形態による方法を説明する流れ図を図１４に示す。
【０１３０】
命令グループの形に配列された命令ストリームを処理するプロセッサの挙動は、トレース制御回路によって監視される。蓄積回路にはトレース回路を制御するため現在のトレース制御データが蓄積され、グループが実行されると、実行されたグループのトレース制御データの少なくとも一部がグループを識別する識別子とともにデータストアに蓄積される。次に、推測的に実行された命令グループをプロセッサがキャンセルしたか否かを判断する。これはプロセッサを監視するトレース制御回路によって判断される。命令がキャンセルされた場合は、キャンセルされた命令の直前の命令グループのトレース制御データが取り出され、これが蓄積回路に蓄積されることにより、トレース回路は適切なトレース制御データによって制御される。命令がキャンセルされていなければ、トレース回路はトレース制御データの制御下でプロセッサの監視を続ける。
【０１３１】
ここでは添付の図面を参照しながら本発明の例証的実施形態を説明してきたが、本発明はこれらの実施形態に限定されず、添付の請求項によって定められる本発明の範囲と精神から逸脱することなく当業者により様々な変更及び修正を行えることを理解されたい。
【符号の説明】
【０１３２】
５０  トレース回路
６０  レジスタ
６５  データストア
７０  トレースインデックスユニット
７２  カウンタ
８０  ストア
【図１】
0005604373.tif 000005
【図２】
0005604373.tif 000006
【図３】
0005604373.tif 000007
【図４】
0005604373.tif 000008
【図５】
0005604373.tif 000009
【図６】
0005604373.tif 000010
【図７】
0005604373.tif 000011
【図８】
0005604373.tif 000012
【図９】
0005604373.tif 000013
【図１０】
0005604373.tif 000014
【図１１】
0005604373.tif 000015
【図１２ａ】
0005604373.tif 000016
【図１２ｂ】
0005604373.tif 000017
【図１２ｃ】
0005604373.tif 000018
【図１３】
0005604373.tif 000019
【図１４】
0005604373.tif 000020