(57)【特許請求の範囲】
【請求項１】
データ処理装置の処理活動を表すトレースデータの項目を生成するように構成されたトレースユニット（１８０）であって、
前記データ処理装置から、条件命令の実行を示す少なくとも１つの命令観察インジケータ、および少なくとも１つの前記条件命令を実行した結果の前記データ処理装置による出力を示す少なくとも１つの結果出力インジケータを受け取るためのトレース入力インタフェース（１８２、１８４）と、
少なくとも１つの前記命令観察インジケータおよび少なくとも１つの前記結果出力インジケータを処理するトレース回路（１８６、１８８、１９０、１９２）であって、少なくとも１つの前記命令観察インジケータおよび少なくとも１つの前記結果出力インジケータから、対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成し、前記条件命令トレースデータ項目および条件結果トレースデータ項目を独立に出力して、診断装置による条件命令および対応する条件結果の別個のトレース分析を可能にするように構成されたトレース回路とを備える、トレースユニット。
【請求項２】
前記命令観察インジケータは、第一の処理サイクルにおいて前記トレース入力インタフェース（１８２、１８４）で受け取られ、前記結果出力インジケータは、第二の処理サイクルにおいて前記トレース入力インタフェースで受け取られ、前記第二の処理サイクルは前記第一の処理サイクルと異なる、請求項１に記載のトレースユニット。
【請求項３】
前記トレースユニット（１８０）は、前記データ処理装置（１００）から受け取った結果出力インジケータの複数のセットを格納するための結果出力インジケータバッファを備え、前記トレースユニット（１８０）は、処理のために前記トレース回路に出力する対象として、かつ前記バッファが有効な値を現在格納している結果出力インジケータのセットを参照する条件命令を示す前記命令観察インジケータの中の１つに応答して、格納された結果のセットを定期的に選択するように構成され、前記トレースユニットは、結果出力インジケータの新しいセットを格納できるようにするために、現在格納されている結果出力インジケータの有効なセットを出力対象として選択するように構成される、請求項１または請求項２に記載のトレースユニット。
【請求項４】
前記データ処理装置（１００）は、条件命令がどのように処理されるかを示す条件コードフラグ値の個別セットを格納するように構成された複数のカレントプログラムステータスレジスタ（１５０）を備え、前記バッファは、複数の前記カレントプログラムステータスレジスタの各々に対応する結果出力インジケータの１つのセットを格納するための記憶場所を含み、前記結果出力インジケータのセットの各々は、前記条件コードフラグ値の少なくともいくつかを含む、請求項３に記載のトレースユニット。
【請求項５】
前記データ処理装置（１００）は、条件命令を前記トレースデータの項目として出力すべきか判断するためにテストされる条件コードフラグマークの個別セットを格納するように構成された少なくとも１つのカレントプログラムステータスレジスタ（１５０）を備え、前記トレースユニット（１８０）は、カレントプログラムステータスレジスタテーブルを格納するためのデータストアを備えており、前記カレントプログラムステータスレジスタテーブルには、少なくとも１つの前記カレントプログラムステータスレジスタと関連付けられた状態とともに、前記条件コードフラグマークの個別セットの少なくともサブセットがリストされる、請求項１から請求項４のいずれか１項に記載のトレースユニット。
【請求項６】
前記カレントプログラムステータスレジスタテーブル（１９３）は、前記条件コードフラグのサブセットの各々に関する３種類の状態を格納するように構成される、請求項５に記載のトレースユニット。
【請求項７】
前記３種類の状態は、トレース済み、トレース予定、および未トレースを含む、請求項６に記載のトレースユニット。
【請求項８】
前記３種類の状態は、インフライトテーブルおよび現ＣＰＳＲテーブルを維持することによって追跡され、前記インフライトテーブルは、前記データ処理装置による出力時にどのフラグをトレースすべきかを示すものとして、各ＣＰＳＲの各フラグに関する２つの状態を有し、前記現ＣＰＳＲテーブルは、条件命令を条件命令トレースデータ項目としてトレースすべきかどうかを示すものとして、現ＣＰＳＲの各フラグに関する２つの状態を格納する、請求項６に記載のトレースユニット。
【請求項９】
前記トレース回路は、前記カレントプログラムステータスレジスタテーブル（１９３）を使用して、前記条件結果トレースデータ項目がいつ必要とされるか、および前記条件コードフラグのどのセットをトレースすべきかを判定する、請求項５から請求項８のいずれか１項に記載のトレースユニット。
【請求項１０】
前記トレース入力インタフェース（１８２、１８４）は、前記データ処理装置（１００）から、前記命令観察インジケータに対応する命令タグ、および前記結果出力インジケータに対応する結果タグを受け取る、請求項２から請求項９のいずれか１項に記載のトレースユニット。
【請求項１１】
前記命令タグおよび前記結果タグは、前記トレース回路によって出力される、請求項１０に記載のトレースユニット。
【請求項１２】
前記トレース入力インタフェース（１８２、１８４）は、前記データ処理装置（１００）から、前記命令観察インジケータに対応する命令タグ、および前記結果出力インジケータに対応する結果タグを受け取り、
前記トレース回路（１８６、１８８、１９０、１９２）は、タグ−キー変換動作を実行するように構成され、前記キー変換動作において、前記命令観察インジケータと関連付けられた前記命令タグが前記条件命令トレースデータ項目に対応する命令キーに変換され、前記結果出力インジケータと関連付けられた前記結果タグが前記条件結果トレースデータ項目に対応する結果キーに変換され、前記キー変換動作は、前記カレントプログラムステータスレジスタテーブル（１９３）に格納された前記状態に応じて実行される、請求項５に記載のトレースユニット。
【請求項１３】
前記トレース回路は、受け取った命令観察インジケータに対応する前記条件命令トレースデータ項目の少なくとも１つの出力をバッファするように構成されたトレース圧縮回路（１８７）を含み、その発生は、前記トレースユニットによる前記条件結果トレースデータ項目の中の対応する１つの出力から、前記診断装置（１９６）によって推測することが可能である、請求項１２に記載のトレースユニット。
【請求項１４】
前記トレース回路（１８６、１８８、１９０、１９２）は、バッファされた前記条件命令トレースデータ項目に関する前記結果キーの中の１つを生成して出力するように構成され、出力された前記結果キーは、前記診断装置（１９６）により、バッファされた前記条件命令トレースデータ項目の出力を推測するために使用される、請求項１３に記載のトレースユニット。
【請求項１５】
前記トレース回路（１８６、１８８、１９０、１９２）は、前記トレース回路によってバッファされた対応する条件命令トレースデータ項目の出力を有していたのが受け取った前記命令観察インジケータのいずれであるかを示すバッファリング記録を監視および維持するように構成される、請求項１３または請求項１４に記載のトレースユニット。
【請求項１６】
前記バッファリング記録は、直近に生成された条件命令トレースデータ項目および直近に出力された条件命令トレースデータ項目の記録を含む、請求項１５に記載のトレースユニット。
【請求項１７】
キー比較の実行時に条件命令トレースデータ項目がすでにバッファされていることが確認され、前記キー比較は、前記条件命令トレースデータ項目に対応するキーが直近に出力された前記条件命令トレースデータ項目に対応するキーより大きいか、また、直近に生成された前記条件命令トレースデータ項目に対応するキーより小さいもしくは等しいかを判定するものである、請求項１６に記載のトレースユニット。
【請求項１８】
最大値に達した時点で前記キーの値がラップアラウンドし、前記キー比較はモジュロ演算に従う、請求項１７に記載のトレースユニット。
【請求項１９】
前記タグ−キー変換動作の結果、前記トレースユニットが前記命令観察インジケータの中の１つを受け取る時点で、前記命令タグを使用して前記カレントプログラムステータスレジスタテーブルをルックアップすることにより、条件コードマークの関連サブセットを格納する前記カレントプログラムステータスレジスタの中の適切な１つが特定される、請求項１２に記載のトレースユニット。
【請求項２０】
前記トレース回路（１８６、１８８、１９０、１９２）は、前記カレントプログラムステータスレジスタテーブルに格納された前記条件コードマークの関連サブセットがいずれもトレース予定であることを示していない場合、新たに生成された条件命令トレースデータ項目に新しいキー値を割り当て、前記カレントプログラムステータスレジスタテーブルに格納された１つ以上の前記条件コードマークのサブセットがトレース予定であることを示している場合、直近に割り当てられたキー値を繰り返す反復キー値を新たに生成された条件命令トレースデータ項目に割り当てることにより、前記タグ−キー変換動作を実行する、請求項１９に記載のトレースユニット。
【請求項２１】
前記トレース回路（１８６、１８８、１９０、１９２）は、新しい前記キー値を有する前記条件命令トレースデータ項目の少なくとも１つの出力をバッファするように構成されたトレース圧縮回路を含み、その発生は、前記トレースユニットによる対応する１つ以上の前記条件結果トレースデータ項目の出力から、前記診断装置によって推測することが可能であり、前記反復キー値に対応する条件命令トレースデータ項目はバッファされない、請求項２０に記載のトレースユニット。
【請求項２２】
前記トレース回路は、前記条件結果トレースデータ項目を、対応する１つ以上の前記条件命令トレースデータ項目を前記診断装置によって推測することの可否のインジケーションとともに、前記診断装置に供給するように構成される、請求項２１に記載のトレースユニット。
【請求項２３】
前記診断装置に供給された対応する条件結果トレースデータ項目から１つ以上の前記条件命令トレースデータ項目が推測される場合、１つ以上の前記条件命令トレースデータ項目は前記トレース圧縮回路の前記バッファから除去され、前記トレース回路によって出力されない、請求項２２に記載のトレースユニット。
【請求項２４】
対応する条件結果キーが前記トレース圧縮回路の前記バッファによって現在バッファされている条件命令キーと同じである場合、１つ以上の前記条件命令トレースデータ項目を推測することが許される、請求項２１に記載のトレースユニット。
【請求項２５】
前記トレース回路（１８６、１８８、１９０、１９２）によって生成された前記条件結果トレースデータ項目を受け取り、前記条件結果トレースデータ項目の少なくともいくつかの圧縮表現を生成して前記圧縮表現を格納し、前記圧縮表現の少なくともいくつかを組み合わせて、トレースデータ項目の複数の圧縮表現が連結トレースデータ項目として出力されるようにするためのトレース結果連結回路（１８７）をさらに備える、請求項１から請求項２４のいずれか１項に記載のトレースユニット。
【請求項２６】
前記トレース結果連結回路（１８７）は、前記圧縮表現を生成および格納し、前記トレース結果連結回路によって圧縮できない条件結果トレースデータ項目を受け取った時は、トレースデータ項目の格納された前記圧縮表現を連結トレースデータ項目として出力した後、圧縮できない前記条件結果トレースデータ項目を出力するように構成される、請求項２５に記載のトレースユニット。
【請求項２７】
前記トレース回路（１８６、１８８、１９０、１９２）は、前記トレース入力インタフェース（１８２、１８４）から条件分岐または非条件分岐命令およびロード／ストア命令に関係したトレースデータを受け取るように構成され、かつ前記トレース回路は、対応する命令が成立の条件分岐もしくは非条件分岐またはロード／ストア命令のいずれかに対応することを示す第一の種類のウェイポイントインジケータを生成するとともに、対応する命令が不成立の条件分岐に対応することを示す第二の種類のウェイポイントインジケータを生成するように構成される、請求項１から請求項２６のいずれか１項に記載のトレースユニット。
【請求項２８】
前記トレース回路（１８６、１８８、１９０、１９２）は、前記トレース入力インタフェース（１８２、１８４）から条件分岐または非条件分岐命令およびロード／ストア命令に関係したトレースデータを受け取るように構成され、かつ前記トレース回路は、対応する命令が成立を予測される条件分岐、成立を予測される非条件分岐、またはロード／ストア命令のいずれかに対応することを示す第一の種類のウェイポイントインジケータを生成するとともに、対応する命令が不成立の条件分岐になることが予測されることを示す第二の種類のウェイポイントインジケータを生成するように構成される、請求項１から請求項２７のいずれか１項に記載のトレースユニット。
【請求項２９】
前記命令観察インジケータは、条件分岐命令以外の条件命令の実行を示すために前記データ処理装置によって使用され、前記トレース回路は、前記命令観察インジケータに対応する条件命令トレースデータ項目および第一の種類の前記ウェイポイントインジケータと第二の種類の前記ウェイポイントインジケータの少なくとも一方を同じトレースデータストリーム内に出力するように構成される、請求項２７または請求項２８に記載のトレースユニット。
【請求項３０】
前記結果出力インジケータは、条件分岐命令以外の条件命令の実行を示すために前記データ処理装置（１００）によって使用され、前記トレース回路（１８６、１８８、１９０、１９２）は、前記結果出力インジケータに対応する条件結果トレースデータ項目および第一の種類の前記ウェイポイントインジケータと第二の種類の前記ウェイポイントインジケータの少なくとも一方を同じトレースデータストリーム内に出力するように構成される、請求項２７または請求項２８に記載のトレースユニット。
【請求項３１】
前記命令観察インジケータは、条件分岐命令の実行を示すために前記データ処理装置によって使用され、前記結果出力インジケータは、条件分岐命令以外の条件命令の実行を示すために前記データ処理装置によって使用され、前記トレース回路（１８６、１８８、１９０、１９２）は、前記命令観察インジケータに対応する条件命令トレースデータ項目、前記結果出力インジケータに対応する条件結果トレースデータ項目、および第一の種類の前記ウェイポイントインジケータと第二の種類の前記ウェイポイントインジケータの少なくとも一方を同じトレースデータストリーム内に出力するように構成される、請求項２７または請求項２８に記載のトレースユニット。
【請求項３２】
前記タグ−キー変換動作の結果、前記トレースユニットが前記命令観察インジケータの中の１つを受け取る時点で、前記命令タグを使用して前記カレントプログラムステータスレジスタテーブルをルックアップすることにより、条件コードマークの関連サブセットを格納する前記カレントプログラムステータスレジスタの中の適切な１つが特定され、
前記トレース回路（１８６、１８８、１９０、１９２）は、前記カレントプログラムステータスレジスタテーブルに格納された前記条件コードマークの関連サブセットがいずれもトレース予定であることを示していない場合、新たに生成された条件命令トレースデータ項目に新しいキー値を割り当て、前記カレントプログラムステータスレジスタテーブルに格納された１つ以上の前記条件コードマークのサブセットがトレース予定であることを示している場合、直近に割り当てられたキー値を繰り返す反復キー値を新たに生成された条件命令トレースデータ項目に割り当てることにより、前記タグ−キー変換動作を実行し、
前記トレース回路（１８６、１８８、１９０、１９２）は、対応する命令キーが前記反復キー値である場合、条件分岐以外の条件命令に対応する第一の種類の条件命令トレースデータ項目を出力し、対応する命令キーが前記新しいキー値である場合、条件分岐以外の条件命令に対応する第二の種類の条件命令トレースデータを出力するように構成される、請求項１４に従属する場合の請求項２９に記載のトレースユニット。
【請求項３３】
前記タグ−キー変換動作の結果、前記トレースユニットが前記命令観察インジケータの中の１つを受け取る時点で、前記命令タグを使用して前記カレントプログラムステータスレジスタテーブルをルックアップすることにより、条件コードマークの関連サブセットを格納する前記カレントプログラムステータスレジスタの中の適切な１つが特定され、
前記トレース回路（１８６、１８８、１９０、１９２）は、前記カレントプログラムステータスレジスタテーブルに格納された前記条件コードマークの関連サブセットがいずれもトレース予定であることを示していない場合、新たに生成された条件命令トレースデータ項目に新しいキー値を割り当て、前記カレントプログラムステータスレジスタテーブルに格納された１つ以上の前記条件コードマークのサブセットがトレース予定であることを示している場合、直近に割り当てられたキー値を繰り返す反復キー値を新たに生成された条件命令トレースデータ項目に割り当てることにより、前記タグ−キー変換動作を実行し、
前記トレース回路（１８６、１８８、１９０、１９２）は、対応する命令キーが前記反復キー値である場合、条件分岐に対応する第一の種類の条件命令トレースデータ項目を出力し、対応する命令キーが新しい前記キー値である場合、条件分岐に対応する第二の種類の条件命令トレースデータを出力するように構成される、請求項１４に従属する場合の請求項３０に記載のトレースユニット。
【請求項３４】
前記トレース回路（１８６、１８８、１９０、１９２）は、複数のウェイポイントインジケータを連結して、前記診断装置に出力するための連結ウェイポイントインジケータを形成するように構成され、前記連結ウェイポイントインジケータは、複数の第一の種類の前記ウェイポイントインジケータ、複数の第二の種類の前記ウェイポイントインジケータ、あるいは第一の種類の前記ウェイポイントインジケータの少なくとも１つおよび第二の種類の前記ウェイポイントインジケータの少なくとも１つを含む異なる種類のウェイポイントインジケータの組み合わせのいずれか１つを含む、請求項２７から請求項３３のいずれか１項に記載のトレースユニット。
【請求項３５】
前記トレース回路（１８６、１８８、１９０、１９２）は、複数の前記条件命令トレースデータ項目を連結して連結条件命令トレースデータ項目を形成し、複数の前記条件命令トレースデータ項目を出力する代わりに前記連結条件命令トレースデータ項目を前記診断装置に出力するように構成される、請求項１から請求項３４のいずれか１項に記載のトレースユニット。
【請求項３６】
前記連結条件命令トレースデータ項目は、複数の前記条件命令トレースデータ項目と比較して低減されたトレース帯域幅を有する、請求項３５に記載のトレースユニット。
【請求項３７】
前記トレース回路（１８６、１８８、１９０、１９２）は、複数の前記条件命令トレースデータ項目を連結して連結条件命令トレースデータ項目を形成し、複数の前記条件命令トレースデータ項目を出力する代わりに前記連結条件命令トレースデータ項目を前記診断装置に出力するように構成され、
前記連結条件命令トレースデータ項目は、複数の前記条件命令トレースデータ項目と比較して低減されたトレース帯域幅を有し、
前記トレース回路（１８６、１８８、１９０、１９２）は、前記連結条件命令トレースデータ項目の少なくとも１つおよび前記連結ウェイポイントインジケータの少なくとも１つを同じトレースデータストリーム内に出力するように構成される、請求項３４に記載のトレースユニット。
【請求項３８】
前記トレース回路（１８６、１８８、１９０、１９２）は、再アライメントトレースデータを出力するように構成される、請求項１から請求項３７のいずれか１項に記載のトレースユニット。
【請求項３９】
前記再アライメントトレースデータ項目は、前記データ処理装置からの分岐誤予測インジケータへの受け取りに応答して出力される、請求項３８に記載のトレースユニット。
【請求項４０】
前記再アライメントトレースデータ項目は、前記データ処理装置からアボートインジケータへの受け取りに応答して出力される、請求項３８に記載のトレースユニット。
【請求項４１】
前記再アライメントトレースデータ項目は、前記データ処理装置から例外インジケータへの受け取りに応答して出力される、請求項３８に記載のトレースユニット。
【請求項４２】
前記再アライメントトレースデータ項目は、前記データ処理装置（１００）からの受け取りに応答してキャンセルインジケータに出力される、請求項３８に記載のトレースユニット。
【請求項４３】
前記トレース回路（１８６、１８８、１９０、１９２）は、投機的に実行されてトレースされた１つ以上の命令が取り消されたことを示すキャンセルインジケーションを前記データ処理装置（１００）から受け取るように構成され、かつ前記トレース回路は、前記キャンセルインジケーションに応答して再アライメントトレース項目を生成するように構成され、前記再アライメントトレース項目は、少なくとも１つの以前に受け取った条件命令トレース項目を破棄すべきであることを前記診断装置に通知するために前記トレース回路によって出力される、請求項１から請求項４２のいずれか１項に記載のトレースユニット。
【請求項４４】
前記トレース回路（１８６、１８８、１９０、１９２）は、すでに受け取られているが前記再アライメントトレースデータ項目の出力以前にまだ出力されていない条件命令トレースデータ項目があればそれを出力するように構成される、請求項３９に記載のトレースユニット。
【請求項４５】
前記トレース回路（１８６、１８８、１９０、１９２）は、すでに受け取られているが前記再アライメントトレースデータ項目の出力以前にまだ出力されていないウェイポイントトレースデータ項目があればそれを出力するように構成される、請求項４１に記載のトレースユニット。
【請求項４６】
前記トレース回路（１８６、１８８、１９０、１９２）は、条件分岐命令およびロード／ストア命令に関係したトレースデータを前記トレース入力インタフェースから受け取るように構成され、前記トレース回路は、対応する命令が条件分岐またはロード／ストア命令のいずれかに該当することを示すウェイポイントインジケータを生成するように構成され、前記命令観察インジケータは、条件分岐命令以外の条件命令の実行を示すために前記データ処理装置によって使用され、前記トレース回路は、前記命令観察インジケータと関連付けられた前記条件命令トレースデータ項目を出力するとともに、前記ウェイポイントインジケータを同じトレースデータストリーム内に出力するように構成され、前記トレース回路は、前記分岐誤予測インジケータに応答して前記再アライメントトレースデータ項目を出力することにより、前記分岐誤予測インジケータの受け取り後であるが、その後に発生する条件命令トレースデータ項目またはウェイポイントインジケータの出力以前に前記再アライメントトレースデータ項目が出力されるように構成される、請求項３９に記載のトレースユニット。
【請求項４７】
前記トレース回路（１８６、１８８、１９０、１９２）は、条件分岐命令およびロード／ストア命令に関係したトレースデータを前記トレース入力インタフェース（１８２、１８４）から受け取るように構成され、前記トレース回路は、対応する命令が条件分岐またはロード／ストア命令のいずれかに該当することを示すウェイポイントインジケータを生成するように構成され、前記命令観察インジケータは、条件分岐命令以外の条件命令の実行を示すために前記データ処理装置によって使用され、前記トレース回路（１８６、１８８、１９０、１９２）は、前記命令観察インジケータと関連付けられた条件命令トレースデータ項目および前記ウェイポイントインジケータを同じトレースデータストリーム内に出力するように構成され、前記トレース回路は、前記例外インジケータに応答して前記再アライメントトレースデータ項目を出力することにより、前記再アライメントトレースデータ項目が前記例外インジケータの受け取り後であるが、その後に発生する条件命令トレースデータ項目またはウェイポイントインジケータの出力以前に出力されるように構成される、請求項４１に記載のトレースユニット。
【請求項４８】
前記条件命令トレースデータ項目は、前記カレントプログラムステータスレジスタテーブルの内容に応じ、少なくとも１つの前記命令観察インジケータのサブセットに対して生成される、請求項５に記載のトレースユニット。
【請求項４９】
データ処理装置であって、
プログラム命令の実行に応答してデータ処理動作を実行するデータ処理回路（１１０、１２０、１２２、１３０、１４０、１５０、１６０）と、
条件命令の実行を示す命令観察インジケータおよび前記データ処理回路による結果の出力を示す結果出力インジケータを、前記条件命令の実行に応答してトレースユニットに独立に出力するように構成され、それによって対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成し、独立に出力することを可能にし、診断装置による条件命令および対応する条件結果の別個のトレース分析を可能にするトレース出力インタフェース（１７２、１７４）とを備える、データ処理装置。
【請求項５０】
前記データ処理回路は、一連のプログラム命令の投機的実行とアウトオブオーダー実行の少なくとも一方を実行するように構成される、請求項４９に記載のデータ処理装置。
【請求項５１】
トレースユニットによってデータ処理装置から受け取られた、少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータに対応した条件命令トレースデータ項目および条件結果トレースデータ項目を含むトレースデータストリームを受け取るように構成された診断装置（１９６）であって、前記条件結果トレースデータ項目は、受け取った前記トレースデータストリーム内で前記条件命令トレースデータ項目とは別個であり、前記診断装置は、
前記トレースデータストリームを生成するために、前記データ処理装置によって実行されるプログラム命令のイメージを参照して、前記条件命令トレースデータ項目および前記条件結果トレースデータ項目を処理するように構成された診断回路を備え、前記診断回路（１９７、１９８、１９９、２００）は、前記プログラム命令のイメージ、条件命令トレースデータ項目、および前記条件結果トレースデータ項目を使用して、前記データ処理装置によって実行されたプログラム命令を確定するように構成される、診断装置。
【請求項５２】
分岐命令、ロード命令およびストア命令の中の１つが前記データ処理装置によって実行されたことを各々が示すウェイポイントトレース項目をトレースデータストリーム内でトレースユニットから受け取るように構成され、前記トレースデータストリームは、前記条件命令トレース項目および前記条件結果トレース項目をさらに含み、前記ウェイポイントトレース項目および条件命令トレースデータ項目の受け取り順序は、対応するウェイポイント命令および条件命令の実行順序と異なる、請求項５１に記載の診断装置。
【請求項５３】
前記診断装置は、受け取った前記ウェイポイントトレース項目をバッファするためのウェイポイントバッファと、受け取った前記条件命令トレース項目をバッファするための条件命令バッファとを備える、請求項５２に記載の診断装置。
【請求項５４】
前記診断回路は、前記プログラム命令イメージを参照して前記ウェイポイントバッファ内のエントリおよび前記条件命令バッファ内のエントリを独立に分析することにより、前記受け取り順序を並べ替えて前記実行順序を得るように構成される、請求項５３に記載の診断装置。
【請求項５５】
前記診断回路は、前記プログラムイメージに条件命令が現れ、しかしその時点で前記条件命令バッファ内に条件命令トレース項目が存在しない場合について、前記条件命令トレース項目が前記条件命令バッファに現れるまでの間、前記プログラムイメージの対応する実行スレッドのさらなる処理を遅延させるように構成される、請求項５３または請求項５４に記載の診断装置。
【請求項５６】
データ処理装置から受け取った情報に基づき、前記データ処理装置の処理活動を表すトレースデータの項目を生成する方法であって、
条件命令の実行を示す少なくとも１つの命令観察インジケータおよび少なくとも１つの前記条件命令の実行結果の前記データ処理装置による出力を示す少なくとも１つの結果出力インジケータを前記データ処理装置から受け取ることと、
少なくとも１つの前記命令観察インジケータおよび少なくとも１つの前記結果出力インジケータを処理することとを含み、かつ、少なくとも１つの前記命令観察インジケータおよび少なくとも１つの前記結果出力インジケータから、対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成して、前記条件命令トレースデータ項目および前記条件結果トレースデータ項目を独立に出力し、診断装置による条件命令および対応する条件結果の別個のトレース分析を可能にするように構成される、方法。
【請求項５７】
前記命令観察インジケータは第一の処理サイクルで受け取られ、前記結果出力インジケータは第二の処理サイクルで受け取られ、前記第二の処理サイクルは前記第一の処理サイクルと異なる、請求項５６に記載の方法。
【請求項５８】
データ処理装置の内部で、データ処理装置の処理活動を表すトレースデータの項目を生成する方法であって、
プログラム命令の実行に応答してデータ処理動作を実行することと、
条件命令の実行を示す命令観察インジケータおよび前記データ処理装置による結果の出力を示す結果出力インジケータを、前記条件命令の実行に応答してトレースユニットに独立に出力し、それによって対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成し、独立に出力することを可能にし、診断装置による条件命令および対応する条件結果の別個のトレース分析を可能にすることとを含む、方法。
【請求項５９】
前記命令観察インジケータは、前記データ処理装置によって第一の処理サイクルで出力され、前記結果出力インジケータは、前記データ処理装置によって前記第一の処理サイクルと異なる第二の処理サイクルで出力される、請求項５８に記載の方法。
【請求項６０】
データ処理装置によって生成されたトレースデータを処理する診断方法であって、
トレースユニットによって前記データ処理装置から受け取られた、少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータに対応した条件命令トレースデータ項目および条件結果トレースデータ項目を含むトレースデータストリームを受け取ることであって、受け取った前記トレースデータストリーム内で前記条件結果トレースデータ項目は前記条件命令トレースデータ項目とは別個であることと、
前記トレースデータストリームを生成するために、前記データ処理装置によって実行されるプログラム命令のイメージを参照して前記条件命令トレースデータ項目および前記条件結果トレースデータ項目を処理することと、
前記プログラム命令のイメージを使用して前記条件命令トレースデータ項目と前記条件結果トレースデータ項目の関連付けを実行することにより、前記データ処理装置によって実行された処理ステップを確定することとを含む、診断方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理に関する。より具体的には、本発明はデータ処理装置によって実行される処理活動のトレースに関する。
【背景技術】
【０００２】
プロセッサ設計を検証するとともに、プログラム命令の実行中におけるデータ処理装置の信頼できる動作を確認する目的で、データ処理装置の活動のトレースを実行することが知られている。
【０００３】
データ処理装置とともにトレースユニットを提供することが知られており、そのトレースユニットは、データ処理装置の処理活動を監視して、それらの処理活動を表す一連のトレースデータ項目を生成するように構成されている。そのようなトレースユニットの一例は、単一システムオンチップの一部として、またはプロセッサから独立して提供可能なＡＲＭ組み込みトレースマクロセル（ＥＴＭ）である。このＥＴＭは、診断装置に出力するためのトレースデータを生成する。複雑なソフトウェアを実行する現代のデータ処理装置では、通常、トレース動作の過程で生成されるトレースデータの量が非常に多い。したがって、冗長になることが予想される情報はすべて省略し、特定の分析目的のために厳密に必要なデータのみを含め、圧縮された形式でトレースデータの項目を提供することが望ましい。米国特許第７，７０７，３９４号には、トレースデータストリームのサイズを低減するいくつかの手法が記載されている。
【０００４】
プログラム命令のアウトオブオーダー実行および／または投機的実行が可能なデータ処理装置では、データ処理装置の活動のトレースが複雑になりえる。投機的実行は、データ処理装置にしばしば採用される手法であり、これは、たとえばパイプライン化データ処理装置のパイプライン段が長時間アイドル状態のままになるのを防ぐことによって命令スループットを向上させることができるという理由による。しかし、命令の投機的実行は、トレースユニットに特定の困難をもたらすことがある。投機が解決されるまで、すなわち、投機的に実行された所与の命令が当該データ処理装置によって実際にコミットされたか確認されるまでの間、トレースユニットはデータ処理装置の実際の動作を確定的に示すトレースデータストリームを与えることができないためである。
【０００５】
投機的実行が可能なデータ処理装置におけるトレースの問題に対処するための既知の手法は、投機的に実行中の命令に関連したトレースデータのすべてを、その投機が完全に解決されるまでバッファするか、または、トレースデータを投機的に生成および出力し、その後にトレースデータの特定項目に対応する命令の投機誤りが確認された場合、それらの項目を取り消すものである。たとえば、Ｎｅｘｕｓプロトコル（「Ｎｅｘｕｓ５００１フォーラム−グローバル組み込みプロセッサデバッグインタフェース規格ＩＥＥＥ−ＩＳＴＯ５００１−２００３」２００３年１２月２３日）は、指定された数のトレースデータ項目のキャンセルをサポートしている。しかし、どの命令または命令のグループを取り消すべきかをデータ処理装置がトレースユニットに対して具体的に示したとしても、それらの取り消された命令に対応するトレースデータの項目を実際に特定するのは容易ではない。
【０００６】
アウトオブオーダー実行が可能なデータ処理装置では、たとえば、ロードまたはストア命令などの命令は完了するために多数のサイクルを要する場合があり、その実行時におけるデータ処理活動のトレースに問題が生じる可能性がある。そのため、たとえば、ロード命令が実行され、対応するトレースデータ項目が生成されるときにインオーダー処理が実行される場合でさえ、要求されたデータ値がメモリシステムから読み出される時点までは、そのロード命令の実行に関連した（以前に生成された）トレースデータの対応項目を特定することは困難になりえる。したがって、メモリから読み出されたデータ値を特定の実行されたロード命令と関連付ける際に問題が生じることがある。当然ながら、ロード命令などのデータ転送がアウトオブオーダーで実行可能である場合には、この状況がさらに悪化し、どのデータ値がどのメモリアドレスに属するかを特定することは実質的に不可能である。アウトオブオーダープロセッサのトレースに関するいくつかの背景技術情報がドキュメント「ＰＤトレースインタフェースおよびトレース制御ブロック仕様」（２００５年７月４日）（ｈｔｔｐ：／／ｗｗｗ．ｍｉｐｓ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｄｕｃｔ−ｍａｔｅｒｉａｌｓ／ｐｒｏｃｅｓｓｏｒ／ｍｉｐｓ−ａｒｃｈｉｔｅｃｔｕｒｅ／から入手可能）およびＡＲＭ  ＥＴＭ  ｖ３アーキテクチャ（ｈｔｔｐ：／／ｉｎｆｏｃｅｎｔｒｅ．ａｒｍ．ｃｏｍから入手可能）に見出される。
【０００７】
条件命令のトレースにおいて、典型的には、条件命令のデコードからその命令の実行に付随する特定の条件の解決までに遅延があるため、特定の問題が起こりえる。多くの既知の命令セットは、分岐が条件付きで実行されることのみを許す。しかし、ＡＲＭアーキテクチャでは、条件評価ハードウェアを使用し、各種の命令に条件フィールドを入れることができる。この条件フィールドは、対応する命令をデータ処理装置が実行するかどうかを決定するものである。非実行命令は、典型的には単一処理サイクルのみを消費する。多数の異なる命令を条件付きで実行する機能により、多くの分岐命令が不要になる。分岐命令は、データ処理装置のパイプラインをストールさせ、パイプラインをリフィルするために複数のサイクルを必要とする場合があり、条件命令は分岐なしの高密度インラインコードを可能にする。いくつかの条件命令を実行しないことの時間ペナルティ（付随の条件が満たされない場合）は、多くの場合、他の方法で必要とされる分岐命令のオーバーヘッドよりも短い。したがって、条件命令はデータ処理の効率向上に非常に有用である。
【０００８】
しかし、条件非分岐命令などの条件命令は、命令のデコードから付随条件の評価までの間に遅延があるため、データ処理装置のトレース活動に関して特定の問題を生じさせる。条件命令と同じ位置で条件の成功／失敗情報をトレースし、したがって１個のトレースパケットを使用してトレースすることは可能であるが、そのためには、とくにアウトオブオーダープロセッサまたは投機的実行が可能なプロセッサにおいて、そのトレースをサポートするのに相当量のバッファリングが必要とされる。
【０００９】
したがって、条件命令のより効率的なトレースを実現し、投機的実行および／またはアウトオブオーダー実行が可能なデータ処理装置における命令シーケンスのトレースにも適用可能な手法を提供する必要がある。
【発明の概要】
【課題を解決するための手段】
【００１０】
第一の態様によれば、本発明は、データ処理装置の処理活動を表すトレースデータの項目を生成するように構成されたトレースユニットを提供する。このトレースユニットは、条件命令の観察を示す少なくとも１つの命令観察インジケータ（ｉｎｓｔｒｕｃｔｉｏｎ  ｏｂｓｅｒｖｅｄ  ｉｎｄｉｃａｔｏｒ）およびその少なくとも１つの条件命令を実行した結果の前記データ処理装置による出力を示す少なくとも１つの結果出力インジケータ（ｒｅｓｕｌｔ  ｏｕｔｐｕｔ  ｉｎｄｉｃａｔｏｒ）を前記データ処理装置から受け取るトレース入力インタフェース、ならびに、その少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータを処理するトレース回路を備える。このトレース回路は、上記の少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータから、対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成するとともに、その条件命令トレースデータ項目および条件結果トレースデータ項目を独立に出力して、診断装置による条件命令および対応する条件結果の別個のトレース分析を可能にするように構成される。
【００１１】
本発明が認識する利点として、条件命令トレースデータ項目および条件結果トレースデータ項目を独立に出力できるトレース回路を提供することによって相当な柔軟性が与えられる。また、条件命令のトレースは、条件付きで実行された命令に関連する条件が完全に解決されるまでトレースデータをバッファする既知の手法に伴う問題を改善する。
【００１２】
当然のことながら、データ処理装置により、命令観察インジケータおよび対応する結果出力インジケータを同一の処理サイクル内で出力することは可能である。しかし、いくつかの実施形態では、命令観察インジケータが第一の処理サイクルでデータ処理装置によって出力され、トレース回路のトレース入力インタフェースで受け取られる一方、データ処理装置は、同じ条件命令に対応する結果出力インジケータを第二の異なる処理サイクルで出力できるように構成される。すなわち、トレース入力インタフェースにおいて命令観察インジケータおよび対応する結果出力インジケータを異なる処理サイクルで受け取るようにするということである。これにより、条件命令の実行と、その後に生成された対応する条件結果の別個のトレースが容易になる。データ処理コアによっては、処理パイプライン内の同じ位置で条件命令のすべての詳細をトレースできないことがあるため、条件命令とそれに対応する条件結果を独立にトレースできることは有用である。さらに、条件命令をアウトオブオーダーで処理できるデータプロセッサもある。本手法に従って条件命令のトレースを２つの部分に分割することは、この問題の直接的な解決策である。これにより、とくに投機的および／またはアウトオブオーダー実行が可能なデータ処理装置において、条件命令のトレースがより効率的になる。
【００１３】
条件命令の実行と条件結果の出力に関するトレースの時間的分離は、たとえば、アウトオブオーダープロセッサにおいて、特定のデータ処理装置のタイミングおよび機能に応じ、所与の実行シーケンスを異なる方法でトレースできるということを意味する。具体的には、条件命令のデコードを起点として条件結果が与えられるまでの時間は、プロセッサの能力によって大きく変化する可能性があるが、命令観察インジケータおよび結果出力インジケータを異なる処理サイクルで出力するデータ処理装置により、この問題は容易に解決される。
【００１４】
いくつかの実施形態において、前記トレースユニットは、前記データ処理装置から受け取った結果出力インジケータの複数のセットを格納するための結果出力インジケータバッファを備える。前記トレースユニットは、処理のために前記トレース回路に出力する対象として、かつ前記命令観察インジケータの中の１つに応答して、格納された結果のセットを定期的に選択するように構成される。この命令観察インジケータは、現在前記バッファが有効な値を格納している結果出力インジケータのセットを参照する条件命令を示したものである。また、前記トレースユニットは、現在格納されている結果出力インジケータの有効なセットを出力対象として選択するように構成される。これにより、結果出力インジケータの新しいセットを格納できることになる。
【００１５】
トレースユニットが単一サイクルで多くの結果出力インジケータを受け入れることができても、多数の条件結果トレースデータ項目を生成する機能を有するトレース回路を設ければ、コストが高くなる。したがって、これらの結果をバッファして、徐々に出力するという方法が有利になりえる。この方法により、結果出力インジケータを受け取るピークを平坦化することができる。したがって、現在の結果出力インジケータを追い出すことが条件命令の実行に必要とされる場合、または項目が受け取られていないため、１つ以上の項目を出力対象として選択できる場合のいずれにおいても、出力インジケータが出力される。本システムは、結果出力インジケータよりも前に命令観察インジケータを受け取るように設計されている。したがって、現在使用中の結果を記憶場所に格納する必要がある命令を実行すべきか判断することができるとともに、このデータをその場所から出力できるため、結果を受け取った時にその記憶場所が空いていることになる。
【００１６】
いくつかの実施形態において、前記データ処理装置は、条件命令がどのように処理されるかを示す条件コードフラグ値の個別セットを格納するように構成された複数のカレントプログラムステータスレジスタを備える。前記バッファは、この複数のカレントプログラムステータスレジスタの各々に対応する結果出力インジケータの１つのセットを格納するための記憶場所を備え、その結果出力インジケータのセットの各々は、前記条件コードフラグ値の少なくともいくつかを含む。
【００１７】
結果出力インジケータは、たとえば、ＣＰＳＲレジスタから受け取った少なくともいくつかの条件コードフラグ値を含むことができる。その場合には、各ＣＰＳＲレジスタの記憶場所が存在し、それらがすべて１サイクルで更新される可能性があるため、トレースユニットはそれだけの数の入力を受け入れることができなければならない。さらに、条件命令の実行時に、有効な値がすでにバッファに格納されているステータスレジスタについて、そのステータスレジスタに対応する条件命令が存在するか判定することができる。その場合には、上記の値を出力することができ、その記憶場所が新しい値を格納するために使用できるようになる。以前のサイクルで命令観察インジケータが出力されることにより、新しい値が到着する前にバッファをクリアすることができる。さらに、バッファを有することによって、これらの入力値を格納することができ、そのすべてを同時に処理する必要がなくなる。
【００１８】
留意すべき点として、単一サイクルでＭ個の条件命令インジケータを受け取ることができる場合、トレースユニットは、必要に応じて記憶場所を解放するために、単一サイクルでＭ個の条件結果インジケータを追い出して出力できなければならない。前述のように、Ｎ個のステータスレジスタがある場合、いくつかの実施形態において、トレースユニットは結果出力インジケータのＮ個のセットを単一サイクルで受け取ることが求められる。Ｍ個は、典型的にはＮ個よりもはるかに小さく、したがって、トレース生成ロジックによる処理のために単一サイクルで出力される結果出力インジケータの数は比較的小さい。ただし、条件命令の実行に関連した条件を追跡する方法にはさまざまな種類がある。いくつかの実施形態において、データ処理装置は、条件命令をトレースデータの項目として出力すべきか判断するためにテストされる条件コードフラグマークの個別セットを格納するように構成された少なくとも１つのカレントプログラムステータスレジスタを備え、トレースユニットは、カレントプログラムステータスレジスタテーブルを格納するためのデータストアを備える。このカレントプログラムステータスレジスタテーブルには、前記の少なくとも１つのカレントプログラムステータスレジスタと関連付けられた状態とともに、条件コードフラグマークの個別セットの少なくともサブセットがリストされる。これにより、トレースユニットが所与の条件命令に関する所与の条件コードがすでに解決されたか、またはトレース中であるかを追跡するための便利な機構が提供される。また、条件付きで実行される複数の命令の現ステータスに関する効率的な追跡が可能になる。
【００１９】
いくつかの実施形態において、トレースユニットのカレントプログラムステータスレジスタテーブルは、条件コードフラグの各サブセットに関する３種類の状態を格納するように構成される。しかし、代替的な実施形態において、トレース実行に関する特定の要件に応じ、各条件コードフラグの異なる数の状態を格納することも可能である。各条件コードフラグに関する３種類の状態が格納される実施形態において、その３種類の状態は、トレース済み（ｔｒａｃｅｄ）、トレース予定（ｔｏ  ｂｅ  ｔｒａｃｅｄ）、および未トレース（ｎｏｔ  ｔｒａｃｅｄ）を含む。これら３種類の状態は、条件非分岐命令のトレースに有用である。
【００２０】
いくつかの実施形態において、上記の３種類の状態を追跡するためにインフライトテーブルおよび現ＣＰＳＲテーブルが維持される。インフライトテーブルは、前記データ処理装置による出力時にどのフラグをトレースすべきかを示すものとして、各ＣＰＳＲの各フラグに関する２つの状態を有し、現ＣＰＳＲテーブルは、条件命令を条件命令トレースデータ項目としてトレースすべきかどうかを示すものとして、現ＣＰＳＲの各フラグに関する２つの状態を格納する。
【００２１】
当然のことながら、トレース回路は、特定の条件命令に関連した条件コードフラグを多数の異なる方法で追跡できるが、いくつかの実施形態において、トレース回路は、トレースユニット内部のカレントプログラムステータスレジスタテーブルを使用して、いつ条件結果トレースデータ項目が必要とされ／予期されるかを判断するとともに、どの条件コードフラグのセットをトレースすべきか追跡する。
【００２２】
当然のことながら、データ処理装置によって生成され、トレース回路が受け取った命令観察インジケータと結果出力インジケータについて、評価済みの条件結果を対応する条件命令にリンクする多数の異なる方法のいずれかにより、その２つを関連付けることが可能である。しかし、いくつかの実施形態において、トレース入力インタフェースは、命令観察インジケータに対応する命令タグおよび結果出力インジケータに対応する結果タグをデータ処理装置から受け取る。
【００２３】
いくつかの実施形態において、トレースユニットがデータ処理装置から受け取った命令タグおよび結果タグは、トレースユニットによって診断装置に出力される。しかし、他の実施形態において、トレース回路は、タグ−キー変換動作を実行するように構成される。これは、データ処理装置が出力した命令観察インジケータと関連付けられた命令タグを、命令観察インジケータに基づき、トレース回路が出力した条件命令トレースデータ項目に対応する命令キーに変換するものである。同様に、データ処理装置が生成し、結果出力インジケータと関連付けられた結果タグが、トレースユニットから診断装置に出力された条件結果トレースデータ項目に対応する結果キーに変換される。このタグ−キー変換動作は、トレース回路内部のカレントプログラムステータスレジスタテーブルに格納された状態に応じて実行される。このタグ−キー変換を使用して、既知の順序を有するキー、たとえば順次キーを生成することができ、これにより、圧縮の改善またはトレースの低減が可能になり、したがってトレース帯域幅が減少する。
【００２４】
当然のことながら、トレース回路は、データ処理装置から受け取った命令観察インジケータと診断回路から出力された条件命令トレースデータ項目の間に１対１の対応関係が存在するように条件命令トレースデータ項目を出力することができうる。同様に、データ処理装置によって出力された結果出力インジケータとトレース回路によって出力された条件結果トレースデータ項目の間にも１対１の対応関係が存在しえる。しかし、いくつかの実施形態において、トレース回路は、受け取った命令観察インジケータに対応する条件命令トレースデータ項目の中の少なくとも１つの出力をバッファするように構成されたトレース圧縮回路を含む。このような構成が有用となる可能性が高いのは、診断装置がデータ処理装置によって実行されるプログラム命令のプログラムイメージを参照して、条件結果トレースデータ項目の中の対応する１つのトレースユニットによる出力から、条件命令の実行の発生（すなわち、バッファされた条件命令およびトレースデータ項目の存在）を推測できる場合である。これにより、トレース回路によって出力されて診断装置が受け取るトレースデータの量を減少させるための便利な機構が提供されるが、それによってトレース情報が失われることはない。診断装置は、トレースデータ項目がバッファされた条件命令実行の発生を容易に再構成する（実行プログラム命令のイメージによる）ことができるためである。
【００２５】
当然ながら、トレース回路は、バッファされた条件命令トレースデータ項目に対応する結果キーの出力をバッファすることができうるが、いくつかの実施形態において、トレース回路は、バッファされた条件命令トレースデータ項目に関する結果キーの少なくとも１つを出力するように構成される。診断回路は、その出力された結果キーを使用して、バッファされた条件命令トレースデータ項目の出力を推測する。これにより、診断装置が維持するプログラムイメージと受け取った条件結果トレースデータ項目との関連付けを使用するとともに、バッファされた条件命令トレースデータ項目の存在を推測するための便利で信頼性の高い機構が提供される。
【００２６】
対応する条件命令トレースデータ項目をすべての条件命令が有するわけではない。いくつかの条件命令トレースデータ項目は、直接出力されず、その代わりに条件結果トレースデータ項目によって推測される。このトレースプロトコル機能により、条件結果トレースデータ項目に対応するパケットの一部として、条件命令トレースデータ項目が効果的に出力される。
【００２７】
当然ながら、トレース回路は、診断回路への出力以前にバッファされた関連トレースデータを有していたのがどの条件命令実行であるかを多数の異なる方法で追跡することができうる。しかし、いくつかの実施形態において、トレース回路は、受け取った命令観察インジケータについて、対応する条件命令トレースデータ項目のトレース回路による出力がバッファされたのはどれかを示すバッファリング記録を監視および維持するように構成される。
【００２８】
いくつかの条件実行命令については、他の種類の条件実行命令と比較して、条件命令トレースデータ項目の出力のバッファリングがより適切な方法になりえる。どの命令観察インジケータについて対応する条件命令トレースデータ項目の出力がバッファされたかを示すバッファリング記録が維持されることにより、トレース回路にとって、条件命令トレースデータ項目のバッファリングが採用された場合の状況を管理しやすくなる。
【００２９】
当然のことながら、バッファリング記録には、条件トレースデータ項目のバッファリングに関するさまざまな種類の情報を含めることができうる。しかし、いくつかの実施形態において、バッファリング記録は、直近に生成された条件命令トレースデータ項目および直近に出力された条件命令トレースデータ項目の記録を含む。これにより、トレース回路は、各条件結果トレースデータ項目について、対応する条件結果トレースデータ項目から黙示され（ｉｍｐｌｉｅｄ）うる条件命令トレースデータ項目がある場合にそれがどの条件命令トレースデータ項目かを判断することができる。
【００３０】
バッファリング記録を有するいくつかの実施形態において、キー比較の実行時に条件命令トレースデータ項目がすでにバッファされていることが確認される。このキー比較は、当該の条件命令トレースデータ項目に対応するキーが前記の直近に出力された条件命令トレースデータ項目に対応するキーより大きいか、また、前記の直近に生成された条件命令トレースデータ項目に対応するキーより小さいもしくは等しいかを判定するものである。
【００３１】
そのようないくつかの実施形態において、最大値に達した時点でキーの値がラップアラウンドし、キー比較はモジュロ演算に従う。
【００３２】
タグ−キー変換動作が採用されるいくつかの実施形態において、この機能は、トレース回路（またはトレースユニット）がデータ処理装置から命令観察インジケータの中の１つを受け取る時点で、命令タグを使用してトレース回路内部のカレントプログラムステータスレジスタテーブルをルックアップすることにより、条件コードフラグの関連サブセットを格納するカレントプログラムステータスレジスタの中の適切な１つが特定されるようにするものである。これにより、特定の条件命令が実際に実行されるかどうかの判断に関係するのがどの条件コードフラグのセットかという追跡に関するカレントプログラムステータスレジスタと所与の条件命令の間の単純なマッピングが与えられる。
【００３３】
命令タグを使用してカレントプログラムステータスレジスタテーブルをルックアップするそのような実施形態において、トレース回路は、カレントプログラムステータスレジスタテーブルに格納された条件コードマークの関連サブセットの中にトレース予定であることを示すものがない場合、任意の新たに生成された条件命令トレースデータ項目に新しいキー値を割り当てることにより、タグ−キー変換動作を実行する。他方、カレントプログラムステータスレジスタテーブルに現在格納されている１つ以上のサブセットの条件コードマーク（すなわち状態エントリ）がトレース予定であることを示している場合、新たに生成された条件命令トレースデータ項目に対し、直近に割り当てられたキー値を繰り返す反復キー値が割り当てられる。これにより、条件トレースデータ項目を対応する結果トレースデータ項目とマッチングする便利で効率的な方法が提供される。
【００３４】
命令タグを使用してカレントプログラムステータスレジスタテーブルをルックアップするそのような実施形態において、トレース回路は、新しいキー値を有する条件命令トレースデータ項目の中の少なくとも１つの出力をバッファするように構成されたトレース圧縮回路を含む。その条件命令トレースデータ項目の発生は、トレースユニットからの条件結果トレースデータ項目の中の対応する１つの出力に基づき、診断装置によって推測可能である。一方、１つ以上の反復キー値に対応する条件命令トレースデータ項目はバッファされない。これにより、条件命令と関連の条件結果との間の関連付けを行うためのキーの使用について、継続的な信頼性が保証される。キー値と特定の圧縮された条件命令トレースデータ項目の間に一意の対応関係が存在する場合にのみ、条件命令トレースデータ項目の出力のバッファリングを使用するようにすれば、受け取った条件結果と推測された条件命令の間の誤った関連付けが防止される。
【００３５】
そのようないくつかの実施形態において、上記トレース回路は、１つ以上の対応する条件命令トレースデータ項目の診断ツールによる推測が許されるかどうかというインジケーションとともに条件結果トレースデータ項目を診断ツールに供給するように構成される。診断ツールにとって、これは１つ以上の条件命令の存在を推測することが許される場合についての明確な指針となる。
【００３６】
それらのバッファされた条件命令トレースデータ項目に対応する関連の結果キーをまだ出力していない条件命令トレースデータ項目をバッファするように構成されたいくつかの実施形態では、トレースユニットが分岐誤予測のインジケーションを受け取った場合、トレース回路によって実行されるタグ−キー変換動作に変更が加えられる。これにより、システムは、独立に生成された条件命令トレースデータ項目と条件結果トレースデータ項目の間で行われる関連付けの正確さを損なうことなく、分岐誤予測イベントに対処することができる。
【００３７】
いくつかの実施形態では、対応する条件結果キーがトレース圧縮回路のバッファによって現在バッファされている条件命令キーと同じならば、１つ以上の条件命令トレースデータ項目を推測することが許される。
【００３８】
当然のことながら、独立に出力された条件命令トレースデータ項目および条件結果トレースデータ項目を使用することにより、条件非分岐命令と同じ方法で条件分岐命令をトレースすることができうる。しかし、いくつかの実施形態において、トレース回路は、条件分岐または非条件分岐命令およびロード／ストア命令に関係したトレースユニットトレースデータのトレース入力インタフェースを受け取るように構成され、また、トレース回路は、対応する命令が成立の条件／非条件分岐またはロード／ストア命令のいずれかに該当することを示す第一の種類のウェイポイントインジケータを生成するとともに、対応する命令が不成立の条件分岐に該当することを示す第二の種類のウェイポイントインジケータを生成するように構成される。「ウェイポイント」を使用し、かつ条件非分岐命令のトレースとは異なる方法で条件分岐およびロード／ストア命令を独立にトレースできることにより、トレース機構の付加的な柔軟性が与えられる。
【００３９】
いくつかの実施形態において、前記トレースユニットはトレース結果連結回路をさらに備える。これは、前記トレース回路によって生成された条件結果トレースデータ項目を受け取り、その条件結果トレースデータ項目の少なくともいくつかの圧縮表現を生成してその圧縮表現を格納し、その圧縮表現の少なくともいくつかを組み合わせて、トレースデータ項目の複数の圧縮表現が連結トレースデータ項目として出力されるようにする回路である。
【００４０】
もっとも出現頻度の高い項目がより短いトークンによって表現されるように条件結果トレースデータ項目を圧縮表現またはトークンによって表現することは有利でありえる。この方法により、しばしば発生する項目がある場合、それらの項目を短いトークンで表現することができる。また、トレースデータ項目は特定のサイズを有するため、複数のトークンを組み合わせて１個の連結トレースデータ項目として出力されるようにすることができ、その結果、出力されるトレースデータは低減されるが、送信される情報が減少することはない。
【００４１】
いくつかの実施形態において、前記トレース結果連結回路は、前記圧縮表現を生成および格納し、前記トレース結果連結回路によって圧縮できない条件結果トレースデータ項目を受け取った時はトレースデータ項目の格納済み圧縮表現を連結トレースデータ項目として出力した後、その圧縮できない条件結果トレースデータ項目を出力するように構成される。
【００４２】
連結トレースデータ項目内部で圧縮表現を効果的に組み合わせることができるようにするためには、その中のいくつかが出力される前に格納されていれば好都合である。これにより、どのトークンを組み合わせるかというより広範な選択と、より効率的な組み合わせが可能になる。しかし、トークンによって表現できない項目を受け取り、続いて格納済み項目を出力することが必要とされる時には出力の順序を維持する必要があり、同様にバッファが一杯になった場合には、格納データを出力してバッファをクリアすることが必要とされる。
【００４３】
いくつかの実施形態において、トレース回路は、条件分岐または非条件分岐命令およびロード／ストア命令に関係したトレースデータをトレース入力インタフェースから受け取るように構成され、また、トレース回路は、対応する命令が成立を予測される条件分岐、成立を予測される非条件分岐、またはロード／ストア命令のいずれかに該当することを示す第一の種類のウェイポイントインジケータを生成するとともに、対応する命令が不成立の条件分岐になることが予測されることを示す第二の種類のウェイポイントインジケータを生成するように構成される。
【００４４】
条件分岐命令およびロード／ストア命令に関係したトレースデータを指示するためにウェイポイントインジケータを使用するそのような実施形態において、条件分岐命令以外の条件命令の実行を示すために命令観察インジケータがデータ処理装置によって使用される。また、トレース回路は、条件命令トレースデータ項目とともに、第一の種類のウェイポイントインジケータと第二の種類のウェイポイントインジケータの少なくとも一方の命令観察インジケータを同じトレースデータストリームに出力するように構成される。同じトレースデータストリームに条件命令トレースデータ項目とウェイポイントインジケータの両方を出力することにより、条件非分岐命令とその他の条件命令を区別するための便利な機構が提供される。さらに、条件分岐命令は典型的には条件非分岐命令よりもトレースが容易であるため、条件分岐命令のトレース専用の機構を備え、条件非分岐命令のトレース用に別のより適切な機構を備えることは合理的である。
【００４５】
いくつかの実施形態において、条件分岐命令以外の条件命令の実行を示すために結果出力インジケータがデータ処理装置によって使用され、トレース回路は、結果出力インジケータに対応する条件結果トレースデータ項目および第一の種類のウェイポイントインジケータと第二の種類のウェイポイントインジケータの少なくとも一方を同じトレースデータストリームに出力するように構成される。
【００４６】
いくつかの実施形態において、条件分岐命令の実行を示すために命令観察インジケータが前記データ処理装置によって使用され、条件分岐命令以外の条件命令の実行を示すために結果出力インジケータがデータ処理装置によって使用される。このとき、トレース回路は、命令観察インジケータに対応する条件命令トレースデータ項目、結果出力インジケータに対応する条件結果トレースデータ項目、および第一の種類のウェイポイントインジケータと第二の種類のウェイポイントインジケータの少なくとも一方を同じトレースデータストリームに出力するように構成される。
【００４７】
そのようないくつかの実施形態において、トレース回路は、対応する命令キーが反復キー値である場合には条件分岐以外の条件命令に対応する第一の種類の条件命令トレースデータ項目を出力し、対応する命令キーが新しいキー値である場合には条件分岐以外の条件命令に対応する第二の種類の条件命令トレースデータ項目を出力するように構成される。
【００４８】
いくつかの実施形態において、トレース回路は、対応する命令キーが反復キー値である場合には条件分岐に対応する第一の種類の条件命令トレースデータ項目を出力し、対応する命令キーが新しいキー値である場合には条件分岐に対応する第二の種類の条件命令トレースデータを出力するように構成される。
【００４９】
当然のことながら、２つが個別に生成される場合と同じ方法で第一の種類のウェイポイントインジケータと第二の種類のウェイポイントインジケータをトレース回路によって独立に出力することができえ、あるいは、任意の種類のウェイポイントインジケータ（同一または異なるもの）を任意の順序で連結してパケットを形成することができる。しかし、いくつかの実施形態において、トレース回路は、前記診断装置に出力するために複数のウェイポイントインジケータを連結して連結ウェイポイントインジケータを形成するように構成される。この連結ウェイポイントインジケータは、複数の第一の種類のウェイポイントインジケータ、複数の第二の種類のウェイポイントインジケータ、および異なる種類のウェイポイントインジケータの組み合わせの中の１つを含み、そのウェイポイントインジケータは、第一の種類のウェイポイントインジケータの少なくとも１つおよび第二の種類のウェイポイントインジケータの少なくとも１つを含む。これにより、ウェイポイントインジケータに関連したトレース帯域幅を減少させることができ、それに伴ってトレースデータストリームの情報内容が損なわれることはない。
【００５０】
同様に、いくつかの実施形態において、トレース回路は、複数の条件命令トレースデータ項目を連結して連結条件命令トレースデータ項目を形成し、複数の条件命令トレースデータ項目を出力する代わりにその連結条件命令トレースデータ項目を診断装置に出力するように構成される。先と同様、これにより、条件命令のトレースに関連したトレース回路によって出力されるトレースデータ量の低減が実現される一方、トレースデータストリームの全体的な情報内容が不当に損なわれることはない。そのようないくつかの実施形態において、連結条件命令トレースデータ項目は、連結されない場合に出力される複数の条件命令トレースデータ項目と比較して、トレース帯域幅が減少する。
【００５１】
当然ながら、トレース回路は、連結ウェイポイントインジケータとはまったく別のトレースデータストリームに連結条件命令トレースデータ項目を出力することができうる。しかし、いくつかの実施形態において、トレース回路は、少なくとも１つの連結条件命令トレースデータ項目と少なくとも１つの連結ウェイポイントインジケータを同じトレースデータストリームに出力するように構成される。
【００５２】
当然ながら、トレース回路は、各種命令に関連したトレースデータ出力の管理において、命令実行のキャンセル、または投機的に実行された、もしくは誤予測された命令の未完了について、多数の異なる方法で対処することができうる。しかし、いくつかの実施形態において、トレース回路は、再アライメントトレースデータ項目を出力するように構成される。そのようないくつかの実施形態において、再アライメントトレースデータ項目は、データ処理装置からの分岐誤予測インジケータの受け取りに応答して出力される。他の実施形態では、再アライメントトレースデータ項目は、データ処理装置からのアボートインジケータの受け取りに応答して出力される。他の実施形態において、再アライメントトレースデータ項目は、データ処理装置からの例外インジケータの受け取りに応答して出力される。他の実施形態では、再アライメントトレースデータ項目は、データ処理装置からのキャンセルインジケータの受け取りに応答して出力される。このように再アライメントトレースデータ項目を使用することにより、投機的実行および／または分岐誤予測を考慮し、かつ／あるいはアウトオブオーダー実行を考慮して診断装置が入力トレースデータのフィルタリングをいつ実行すべきか追跡できる便利で迅速な機構が提供される。
【００５３】
条件命令観察インジケータの受け取りとは異なる可能性がある処理サイクルでデータ処理装置からの条件結果出力インジケータを受け取り、それに応答して条件命令トレースデータ項目および条件結果トレースデータ項目を独立に出力する本手法は、当然ながら、投機的またはアウトオブオーダー実行が可能であるか否かにかかわらず、任意のデータ処理装置に適用することができうる。しかし、いくつかの実施形態において、トレース回路は、１つ以上の投機的に実行されてトレースされた命令が取り消されたことを示すキャンセルインジケータをデータ処理装置から受け取るように構成され、また、トレース回路は、キャンセルインジケータに応答して再アライメントトレース項目を生成するように構成される。トレース回路によって出力される再アライメントトレース項目は、診断ツールに対し、取り消された命令に対応するのがどの条件命令トレースデータ項目であるかを通知して、それらの項目を破棄すべきであることを知らせる。
【００５４】
トレースユニットが再アライメントトレースデータ項目を出力するように構成されるこのような実施形態において、トレース回路は、すでに受け取っているが再アライメントトレースデータ項目の出力以前にまだ出力されていない条件命令トレースデータ項目があれば、それらの項目を出力するように構成される。これにより、特定の条件命令トレースデータ項目のバッファリングを原因とするエラー、または異なる時点に生成された条件命令トレースデータ項目に起因するエラーが回避される。後者のエラーは、生成時点が再アライメントトレースデータ項目の出力時にまで及ぶ場合にそれらの項目が誤って連結されることによって生じるものである。
【００５５】
いくつかの実施形態において、トレース回路は、すでに受け取っているが再アライメントトレースデータ項目の出力以前にまだ出力されていないウェイポイントトレースデータ項目があれば、それらの項目を出力するように構成される。
【００５６】
トレース回路が前記トレース入力インタフェースから条件分岐命令およびロード／ストア命令に関係したトレースデータを受け取るように構成され、かつ対応する命令が条件分岐またはロード／ストア命令のいずれかに該当することを示すウェイポイントインジケータを生成するように構成されており、条件分岐命令以外の条件命令の実行を示すために命令観察インジケータがデータ処理装置によって使用され、前記トレース回路はまた、その命令観察インジケータと関連付けられた条件命令トレースデータ項目を出力するとともに、同じトレースデータストリームにウェイポイントインジケータを出力するように構成される、いくつかの実施形態において、このトレース回路は、前記分岐誤予測インジケータに応答して再アライメントトレースデータ項目を出力するように構成される。その再アライメントトレースデータ項目は、分岐誤予測インジケータを受け取った後であるが、その後に発生する条件命令トレースデータ項目またはウェイポイントインジケータの出力よりも前に出力されるものとする。しかし、分岐誤予測インジケータよりも前に再アライメントトレースデータ項目を出力することは有効な代替方式である。
【００５７】
トレース回路がトレース入力インタフェースから条件分岐命令およびロード／ストア命令に関係したトレースデータを受け取るように構成され、かつ対応する命令が条件分岐またはロード／ストア命令のいずれかに該当することを示すウェイポイントインジケータを生成するように構成されており、条件分岐命令以外の条件命令の実行を示すために前記命令観察インジケータがデータ処理装置によって使用され、前記トレース回路はまた、その命令観察インジケータと関連付けられた条件命令トレースデータ項目およびウェイポイントインジケータを同じトレースデータストリームに出力するように構成される、他の実施形態において、このトレース回路は、前記例外インジケータに応答して再アライメントトレースデータ項目を出力するように構成される。その再アライメントトレースデータ項目は、例外インジケータを受け取った後であるが、その後に発生する条件命令トレースデータ項目またはウェイポイントインジケータの出力よりも前に出力されるものとする。
【００５８】
いくつかの実施形態において、カレントプログラムステータスレジスタテーブルの内容に応じ、前記の少なくとも１つの命令観察インジケータのサブセットに対して条件命令トレースデータ項目が生成される。
【００５９】
第二の態様によれば、本発明は、データ処理装置を提供し、データ処理装置は、プログラム命令の実行に応答してデータ処理動作を行うデータ処理回路、ならびに条件命令の実行を示す命令観察インジケータおよび前記データ処理回路による結果の出力を示す結果出力インジケータを前記条件命令の実行に応答してトレースユニットに独立に出力するように構成されたトレース出力インタフェースを備える。
【００６０】
条件命令と関連付けられた命令観察インジケータを出力し、対応する結果出力インジケータを独立に出力できるデータ処理回路を提供することにより、条件命令の実行および対応する条件結果の出力の個別トレースが容易になる。これにより、条件非分岐命令などの条件命令の実行をトレースするための便利な機構が提供され、また条件命令の実行および対応する条件結果の独立したトレースが可能になることによってバッファリングの要求条件が低減される。
【００６１】
データ処理装置のいくつかの実施形態において、命令観察インジケータは第一の処理サイクルに前記データ処理装置によって出力され、結果出力インジケータは第一の処理サイクルとは異なる第二の処理サイクルに前記データ処理装置によって出力される。
【００６２】
そのようないくつかの実施形態において、データ処理回路は、一連のプログラム命令の投機的実行とアウトオブオーダー実行の少なくとも一方を実行するように構成される。条件命令の実行と条件結果の出力を個別にトレースすることは、そのようなシステムでは条件命令とそれに対応する条件結果の関連付けが複雑になることに起因した、投機的実行およびアウトオブオーダー実行の可能性がある場合にとくに有用である。
【００６３】
第三の態様によれば、本発明は、条件命令トレースデータ項目および条件結果トレースデータ項目を含むトレースデータストリームを受け取るように構成された診断装置を提供する。受け取ったトレースデータストリームにおいて、その条件結果トレースデータ項目は条件命令トレースデータ項目とは別個のものである。前記診断装置は、このトレースデータストリームを生成するために、前記データ処理装置によって実行されるプログラム命令のイメージを参照して前記条件命令トレースデータ項目および条件結果トレースデータ項目を処理するように構成された診断回路を備える。この診断回路は、前記プログラム命令のイメージを使用して、前記データ処理装置によって実行されたプログラム命令を確定するように構成される。
【００６４】
受け取ったトレースデータストリーム内で条件命令トレースデータ項目と別個の条件結果トレースデータ項目を受け取ることができる診断装置を備えることにより、条件命令のより効率的なトレースが可能になる。さらに、データ処理装置によって実行されるプログラム命令のイメージを使用して、診断回路がデータ処理装置によって実行されたプログラム命令を確定できる機能は、条件命令トレースデータ項目と条件結果トレースデータ項目の間に１対１の対応関係が存在しない場合でさえも有効である。その結果、プログラム命令のイメージを参照した条件結果トレースデータ項目の分析を通じて条件命令トレースデータ項目の存在を推断できる機能が診断装置に与えられることにより、圧縮トレースデータストリームを処理する診断装置の能力が向上する。
【００６５】
本発明による診断装置のいくつかの実施形態において、診断装置は、トレースユニットから、各々がデータ処理装置によって分岐命令、ロード命令、ストア命令の中の１つが実行されたことを示すウェイポイントトレース項目をトレースデータストリームで受け取るように構成される。この診断装置が受け取るトレースデータストリームは、上記に加えて、条件命令トレースデータ項目および条件結果トレースデータ項目を含み、そのウェイポイントトレース項目および条件命令トレースデータ項目の受け取り順序は、対応するウェイポイント命令および条件命令の実行順序とは異なる。
【００６６】
そのようないくつかの実施形態において、診断装置は、受け取ったウェイポイントトレース項目をバッファするためのウェイポイントバッファおよび受け取った条件命令トレース項目をバッファするための条件命令バッファを備える。これにより、診断装置がウェイポイントトレース項目および条件命令トレースデータ項目の適切な順序付けを解決し、受け取り順序と診断回路が分析するプログラム命令のイメージによって黙示される順序を一致させるための処理がより単純化される。
【００６７】
そのようないくつかの実施形態において、診断回路は、プログラム命令イメージを参照してウェイポイントバッファ内のエントリと条件命令バッファ内のエントリを独立に分析することにより、受け取り順序を並べ替えて実行順序を得るように構成される。
【００６８】
本手法による診断装置のいくつかの実施形態において、診断回路は、プログラムイメージに条件命令が現れ、しかしその時点で条件命令バッファ内に条件命令トレース項目が存在しない場合について、その条件トレース項目が条件命令バッファに現れるまでの間、プログラムイメージの対応する実行スレッドのさらなる処理を遅延させるように構成される。これにより、プログラムイメージ内の命令の順序と診断回路が受け取った情報の効率的な関連付けが保証される。また、プログラムイメージを参照して一部のトレース情報を再構成しなければならない圧縮トレースデータストリームについて、その受け取りおよび分析を適切に行うための柔軟性が診断回路に与えられる。
【００６９】
第四の態様によれば、本発明は、データ処理装置から受け取った情報に基づいて、データ処理装置の処理活動を表すトレースデータの項目を生成する方法を提供する。この方法は、条件命令の実行を示す少なくとも１つの命令観察インジケータおよびその少なくとも１つの条件命令を実行した結果のデータ処理装置による出力を示す少なくとも１つの結果出力インジケータをデータ処理装置から受け取ることを含み、その少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータを処理することを含むとともに、その少なくとも１つの命令観察インジケータおよび少なくとも１つの結果出力インジケータから、対応する条件命令トレースデータ項目および条件結果トレースデータ項目を生成し、その条件命令トレースデータ項目および条件結果トレースデータ項目を独立に出力するように構成され、診断装置による条件命令および対応する条件結果の個別トレース分析を可能にするものである。
【００７０】
第五の態様によれば、本発明は、データ処理装置の処理活動を表すトレースデータの項目をデータ処理装置内部で生成する方法を提供し、その方法は、プログラム命令の実行に応答してデータ処理動作を実行することと、条件命令の実行を示す命令観察インジケータおよびデータ処理回路による結果の出力を示す結果出力インジケータを、その条件命令の実行に応答してトレースユニットに独立に出力することを含む。
【００７１】
第六の態様によれば、本発明は、データ処理装置によって生成されたトレースデータを処理するための診断方法を提供する。この方法は、条件命令トレースデータ項目および条件結果トレースデータ項目が含まれるトレースデータストリームを受け取ることを含み、受け取ったトレースデータストリーム内で、その条件結果トレースデータ項目は条件命令トレースデータ項目とは別個のものであり。この方法はまた、前記トレースデータストリームを生成するため、データ処理装置によって実行されるプログラム命令のイメージを参照して、前記条件命令トレースデータ項目および条件結果トレースデータ項目を処理することと、前記プログラム命令のイメージを使用して条件命令トレースデータ項目と条件結果トレースデータ項目の関連付けを行い、データ処理装置によって実行された処理ステップを確定することを含む。
【００７２】
少なくとも本発明の実施形態のさらなる態様および特徴が添付の請求項に明示されている。従属請求項の特徴を独立請求項の特徴と適宜組み合わせることができ、また、請求項に明示的に記載された以外の組み合わせも可能である。
以下、例示のみを目的として、添付図面に示す好適な実施形態を参照し、本発明をより詳しく説明する。
【図面の簡単な説明】
【００７３】
【図１】本発明の１つの実施形態によるデータ処理システムを模式的に示した図である。
【図２】図１のトレースユニットのカレントプログラムステータスレジスタテーブルをより詳しく模式的に示した図である。
【図３Ａ】４個のプログラム命令からなるシーケンスの実行に関するトレースおよびマーキングを模式的に示した表である。
【図３Ｂ】図３Ａの表とまったく同じ４個の命令のシーケンスがインオーダーではなくアウトオブオーダーで実行される場合に、どのＣＰＳＲ値がトレースされ、どのｃリザルトキーが生成されるかを示す表である。
【図３Ｃ】図３Ａの表とまったく同じ４個の命令のシーケンスがインオーダーではなくアウトオブオーダーで実行される場合に、どのＣＰＳＲ値がトレースされ、どのｃリザルトキーが生成されるかを示す表である。
【図３Ｄ】図３Ａの表とまったく同じ４個の命令のシーケンスがインオーダーではなくアウトオブオーダーで実行される場合に、どのＣＰＳＲ値がトレースされ、どのｃリザルトキーが生成されるかを示す表である。
【図４】図１のＣＰＳＲ１５０に関する３ステートＣＰＳＲフラグを模式的に示した状態遷移図である。
【図５】第三の条件命令のデコード後に条件結果が評価される３つの条件命令（ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳ）の実行を模式的に示すとともに、各命令デコード段に対応する条件結果ペイロードおよびＣＰＳＲテーブルアクションを示した表である。
【図６Ａ】条件命令タグＢの更新に応じ、命令キャンセルイベント直後のＡＤＤＮＥ命令に関して新しいｃアトムキーが生成されてはならない場合を模式的に示した表である。
【図６Ｂ】図６Ａの状況とは対照的に、条件命令のキャンセル後に同じｃアトムキーを使用することがつねに正しくはないということを模式的に示した表である。
【図６Ｃ】図３Ａ〜図３Ｄを参照して説明した手法に対する代替的手法を説明した図であり、この手法では２ステートＣＰＳＲテーブルが維持される。
【図６Ｄ】図３Ａ〜図３Ｄを参照して説明した手法に対する代替的手法を説明した図であり、この手法では２ステートＣＰＳＲテーブルが維持される。
【図６Ｅ】図３Ａ〜図３Ｄを参照して説明した手法に対する代替的手法を説明した図であり、この手法では２ステートＣＰＳＲテーブルが維持される。
【図７Ａ】同じトレースデータストリーム内でウェイポイントおよびｃアトムがどのように扱われるかを模式的に示した表である。
【図７Ｂ】同じトレースデータストリーム内でウェイポイントおよびｃアトムがどのように扱われるかを模式的に示した表である。
【図７Ｃ】同じトレースデータストリーム内でウェイポイントおよびｃアトムがどのように扱われるかを模式的に示した表である。
【図７Ｄ】同じトレースデータストリーム内でウェイポイントおよびｃアトムがどのように扱われるかを模式的に示した表である。
【図８】条件アトムパケットとウェイポイントパケットの両方が入っているトレースデータストリームを受け取った時点で図１の診断回路が実行するアクションを模式的に示したフローチャートである。
【図９Ａ】ウェイポイントと条件命令トレースデータ項目の連結を模式的に示した表である。
【図９Ｂ】ウェイポイントと条件命令トレースデータ項目の連結を模式的に示した表である。
【図９Ｃ】ウェイポイントと条件命令トレースデータ項目の連結を模式的に示した表である。
【図１０】入力トレースデータを分析するために図１の診断回路が実行するアクションを模式的に示したフローチャートである。
【図１１Ａ】トレースデータストリーム内の再アライメントトレースデータ項目の相対的位置を模式的に示した図である。
【図１１Ｂ】トレースデータストリーム内の再アライメントトレースデータ項目の相対的位置を模式的に示した図である。
【図１１Ｃ】トレースデータストリーム内の再アライメントトレースデータ項目の相対的位置を模式的に示した図である。
【図１２Ａ】条件結果トレースデータに基づいて条件命令実行がどのように黙示されるかを模式的に示した表である。
【図１２Ｂ】条件結果トレースデータに基づいて条件命令実行がどのように黙示されるかを模式的に示した表である。
【図１３】図１２Ｂのシーケンスと同様のトレースデータシーケンスを模式的に示し、「ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙ」レジスタおよび「ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ」レジスタに格納された値を追加した表である。
【図１４Ａ】特定のｃアトムが生成され、しかしバッファされている場合のトレースストリームの出力およびトレース圧縮スキームの実施における図１のＥＴＭのアクションを模式的に示したフローチャートである。
【図１４Ｂ】本発明の１つの実施形態によるトレースユニットを模式的に示した図である。
【図１５】処理装置、トレース回路および診断装置を模式的に示した図である。
【図１６】ＡＲＭ  Ｌｉｍｉｔｅｄ社（英国ケンブリッジ）が設計したプロセッサに使用される条件フラグおよび条件状態の例を示す。
【図１７】条件フラグ値の特定のセットを識別する識別子の例を示す。
【図１８】条件更新命令の実行時に条件フラグの値をトレースする方法を示す。
【図１９】図１８の方法で生成されたトレースデータを分析するための対応する方法を示す。
【図２０】図１８の方法で生成されたトレースストリームの例および図１９の方法によるトレースストリームの分析の例を示す。
【図２１】途中に条件命令が入ることなく複数の条件更新命令が連続して発生する一連のプログラム命令の例を示す。
【図２２】条件命令の実行時に条件フラグ値をトレースする方法を示す。
【図２３】図２２の方法で作成されたトレースデータを分析するための対応する方法を示す。
【図２４】図１９の方法で生成されたトレースストリームの例および図２０の方法によるトレースストリームの分析の例を示す。
【図２５】条件命令の実行時に条件フラグの少なくとも所要サブセットの値をトレースする方法を示す。
【図２６】図２５の方法で生成されたトレースデータを分析するための対応する方法を示す。
【図２７】図２５の方法を用いてトレースストリームを生成する例および図２６の方法を用いてトレースストリームを分析する例を示す。
【発明を実施するための形態】
【００７４】
図１は、本発明の１つの実施形態によるデータ処理システムを模式的に示したものである。このデータ処理システムは、命令メモリ９０、中央処理ユニット（ＣＰＵ）１００、トレース回路内蔵の組み込みトレースマクロセル（ＥＴＭ）１８０、および組み込みトレースマクロセル１８０の出力を分析する診断回路１９６を備える。
【００７５】
中央処理ユニット１００は、命令フェッチユニット１１０、デコード段１２２を含むパイプライン１２０、レジスタセット１３０、算術論理ユニット（ＡＬＵ）１４０、カレントプログラムステータスレジスタ（ＣＰＳＲ）１５０のセット、メモリインタフェース１６０、命令出力インタフェース１７２、および結果出力インタフェース１７４を備える。
【００７６】
命令フェッチユニット１１０は、命令メモリ９０に格納されたコンピュータプログラム９２から命令をフェッチし、それらのフェッチされた命令をパイプライン１２０のデコード段１２２に供給する。図１に示したＣＰＵ中央処理ユニット１００は、ＡＲＭパイプライン化データプロセッサである。パイプライン１２０により、プログラム命令の実行に関連した複数の演算を逐次的ではなく実質的に同時に処理することが可能になるため、命令のスループットが向上する。命令フェッチユニット１１０によって実行される命令フェッチ段は、パイプライン１２０の不可欠の一部とみなすことができる。パイプライン１２０のデコード段１２２は、直近にフェッチされた特定の命令の実行に使用されるべきレジスタバンク１３０内のレジスタをデコードするものである。ＣＰＵ１００は、プログラム命令の投機的実行およびアウトオブオーダー実行を処理するように構成される。
【００７７】
デコード段に続いて、命令はパイプラインの実行段（図示せず）に進み、そこでレジスタバンク１３０のレジスタが読み出され、算術論理ユニット１４０を使用して命令が実行される。パイプライン１２０の最終段は、命令実行の結果をレジスタバンクに書き戻すものである。
【００７８】
ＣＰＵ１００は、各々が固定長を有する複数のレジスタからなるレジスタバンク１３０を備える。レジスタバンク１３０は、プログラム命令の実行に使用するための汎用レジスタのセットを内蔵する。算術演算、比較、論理演算、データ移動などのＡＲＭデータ処理命令は、レジス上でのみ機能し、メモリ内では機能しないことに留意されたい。これは、ＡＲＭアーキテクチャがロード／ストアアーキテクチャであることによる。レジスタバンク１３０には、現在フェッチ中のプログラム命令をインデックスする専用プログラムカウンタ（図示せず）も内蔵されている。ＣＰＵに搭載されたその他のレジスタとして、専用カレントプログラムステータスレジスタ（ＣＰＳＲ）１５０のセットおよび専用保存プログラムステータスレジスタ（ＳＰＳＲ）のセット（図示せず）がある。図１の実施形態において、レジスタバンク１３０のレジスタＲ１４はリンクレジスタであり、レジスタＲ１はプログラムカウンタである。特定の命令はカレントプログラムステータスレジスタ（ＣＰＳＲ）１５０にアクセスすることができる。カレントプログラムステータスレジスタ１５０は、それぞれが４個の条件コードフラグＺ、Ｖ、Ｃ、Ｍのセットを備える。これについては、次の図２を参照してより詳しく説明する。
【００７９】
４個の条件コードフラグに加えて、ＣＰＳＲ１５０は、現プロセッサモードを定義する「モードビット」および割り込み無効化ビットをさらに備える。レジスタバンク１３０のリンクレジスタＲ１４は、いわゆる「リンク付き分岐（Ｂｒａｎｃｈ  ｗｉｔｈ  Ｌｉｎｋ）」プログラム命令を実行するためのリターンアドレスを格納する。このリターンアドレスは、Ｒ１５内のプログラムカウンタから計算される。プログラムの実行フローのリンク付き分岐からのリターンを可能にするため、リンクレジスタＲ１４の内容がプログラムカウンタレジスタＲ１５にコピーされる。ＣＰＳＲに格納されたフラグＺ、Ｖ、ＣおよびＭの現在値は、条件実行命令を実行すべきか決定するために使用される特定の条件に対応する。大部分の命令セットでは分岐命令のみを条件付きで実行することができるが、ＡＲＭアーキテクチャでは、多くのＡＲＭ命令にＣＰＵ１００がその命令を実行するかどうかを決定する条件フィールドが含まれているため、多くの命令を条件付きで実行することができる。
【００８０】
ＣＰＳＲ１５０の内容は、命令の条件フィールドによって指定された条件が満たされたか評価するために使用される。任意の種類の命令を条件付きで実行できることにより、分岐なしの非常に高密度のインラインコードが可能になる。通常、分岐はパイプライン１２０を単純にストールさせるため、プログラムコードに多数の分岐命令を含める必要がなくなることにより、命令実行がより効率化される。いくつかの条件命令を実行しない（指定された条件が満たされない場合）ことの時間ペナルティは、典型的には、他の方式では必須とされる分岐命令またはサブルーチンコールのオーバーヘッドよりも小さい。命令を条件付きで実行する場合、その命令は、適切な条件とともに単純に後置（ポストフィックス）される。たとえば、ＡＲＭ命令セットにおいて、非条件付きＡＤＤ命令は「ＡＤＤ  ｒ０，ｒｌ，ｒ２」という形を取るが、ゼロフラグＺのセット状態を条件としてこれを条件付きで実行する場合、この命令を「ＡＤＤＥＱ  ｒ０，ｒｌ，ｒ２」に変更することができる。メモリインタフェース１６０は、メモリに対するデータのロードおよびストアに使用される。
【００８１】
図１に示すように、パイプライン１２０のデコード段１２２からＣＰＵ１００の命令出力インタフェース１７２まで、さらにＥＴＭ１８０の命令入力インタフェース１８２までの間に第一の経路１２３が設けられる。典型的には、条件命令はプロセッサのデコード段１２２からトレースされ、対応する条件結果がＡＬＵ１４０からトレースされる。第二の経路１５２は、ＣＰＵ１００のＣＰＳＲ１５０をＣＰＵ１００の結果出力インタフェース１７４に接続し、次いでＥＴＭ１８０の結果入力インタフェース１８４に接続する。ＣＰＳＲ１５０をパイプライン１２０に接続する経路も存在する。すなわち、ＣＰＵ１００は条件命令のために１つの出力インタフェース１７２を有し、対応する条件結果１７４のために別の出力インタフェース１７４を有する。当然ながら、すべての命令が条件命令になるわけではないが、図１の実施形態は、とくに条件命令の実行およびトレースを中心として例示したものである。
【００８２】
組み込みトレースマクロセル１８０は、ＣＰＵ１００に関するリアルタイムの命令トレースおよびデータトレースを提供するトレースユニットである。ＥＴＭ１８０は、命令メモリ９０に格納されたコンピュータプログラム９２の全部または一部の実行を再構成するために診断回路１９６によって使用されるトレース情報を生成する。ＥＴＭ１８０は、ＣＰＵ１００から条件命令観察インジケータを受け取るための命令インタフェース１８２と、ＣＰＵ１００から対応する条件結果インジケータを受け取るための結果インタフェース１８４の両方を備える。命令のインジケーションは、一般に、その命令が確実に実行されることを示すものではない。その情報はパイプラインの初期ステージに基づくものであり、当該命令が完全に実行されるかどうかは後続の多くの処理サイクルが完了するまで分からないためである。ＣＰＵ１００は、命令インタフェース１７２を介して条件命令観察インジケータを、トレース結果インタフェース１７４を介して条件結果出力インジケータを、それぞれ独立に出力する。所与の条件命令観察インジケータはＣＰＵ１００の第一の処理サイクルで出力され、対応する条件結果出力インジケータはＣＰＵの第二の異なる処理サイクルで出力される。したがって、トレース回路１８０の命令インタフェース１８２で条件命令観察インジケータを受け取るタイミングは、対応する条件結果出力インジケータを結果インタフェース１８４で受け取るタイミングとは異なる。ＣＰＵ１００は、条件命令観察インジケータと条件結果出力インジケータの両方を、当該の条件命令と関連付けられたＣＰＳＲ１５０内の特定レジスタを識別する関連「タグ」とともに出力する。
【００８３】
各条件命令について、対応する条件結果出力インジケータには、診断回路１９６が条件命令の成功／失敗ステータスを判定するためのペイロードが入る。このペイロードは、次のいずれかである
１．成功／失敗の結果
２．部分的ＣＰＳＲ値
３．完全ＣＰＳＲ値（ただし、部分的ＣＰＳＲ値を出力しない実装もある）
４．その他の出力
【００８４】
すべての条件命令が対応トレース出力を有するわけではなく、条件命令のサブセットのみが対応トレース出力（条件結果出力インジケータ）を有することに留意されたい。所与の条件命令に対応して命令観察インジケータがＣＰＵ命令インタフェース１７２によって出力される場合には、ＥＴＭ１８０がその条件命令に関係したいわゆる「ｃアトム」を生成する。このｃアトムは、当該条件命令のトレース出力（ＣＰＵ１００によって出力される命令観察インジケータ）に対応するものである。対応する条件結果出力インジケータがＣＰＵの結果出力インタフェース１７４を介して結果インタフェース１８４に出力された時点で、これが「ｃリザルト」になる。したがって、ＥＴＭ命令インタフェース１８２は、条件命令観察インジケータおよびそれに対応するタグ（常時ではないが、典型的には関連のＣＰＳＲ１５０レジスタを識別する）を受け取り、ＥＴＭ結果インタフェース１８４は、条件結果出力インジケータおよびそれに対応するタグを受け取る。
【００８５】
ＥＴＭ１８０は命令キー変換回路１８６を備える。この命令キー変換回路１８６は、ＥＴＭ命令インタフェース１８２から入力を受け取り、条件命令観察インジケータおよび対応タグをｃアトムに変換するように構成される。同様にＥＴＭ１８０は結果キー変換回路１８８を備え、この結果キー変換回路１８８は、ＥＴＭ結果インタフェース１８４に接続されており、結果インタフェース１８４から受け取った条件結果出力インジケータおよび対応タグをｃリザルトおよび対応キーに変換するように構成される。ＥＴＭ命令インタフェース１８２が受け取る条件命令観察インジケータは、ＣＰＵの関連ＣＰＳＲレジスタを表すタグと、ＥＱ（相等）、ＭＩ（マイナス）またはＬＴ（より小）などの条件種別の両方を含む。ＥＴＭ結果インタフェース１８４を介して受け取られる条件結果出力インジケータは、関連タグ（先と同様、通常はＣＰＵ１００の関連ＣＰＳＲレジスタを表す）および結果ペイロードを含む。どの命令観察インジケータ（ｃアトム）がどの結果出力インジケータ（ｃリザルト）に対応するかを追跡するために、タグシステムがＣＰＵ１００によって使用される。命令キー変換回路１８６および結果キー変換回路１８８は、コアタグによってインデックスされたトレースキーのテーブルを使用することにより、コアタグを既定の順序に従ったトレースキーに変換する。後で条件結果出力インジケータが評価される時点でトレースキーの衝突の可能性があるため、この問題を解決するために特殊キーが使用される。キーの名前を順次的になるように変更すると、次の順次キーが以前の、結果出力インジケータ（ｃリザルト）がまだ出力されていない命令実行インジケータ（ｃアトム）と同じ値になる可能性がある。この場合、順次キーを使用することにより、異なる命令実行インジケータに対して同じキーを有する２つの結果出力インジケータが生成されることになるため、順次キーは使用されない。その代わりに、順次キーとして使用されることが絶対にない値を有する特殊キーが使用される。特殊キーとタグの間には１：１の対応関係がある。たとえば、８個のタグがある場合、１６個の順次キーおよび８個の特殊キーが存在しえる。
【００８６】
命令キー変換回路１８６の出力は、第一のトレース生成回路１９０に供給され、そこで入力ｃアトムおよび対応キーが命令トレースデータのパケットに変換される。同様に、結果キー変換回路１８８は、ｃリザルトおよび対応キーをトレース生成回路１９２の第二のセットに供給し、そこで条件結果トレースパケットが出力として生成される。条件命令トレースパケット（パケット化されたｃアトムおよび関連キーを含む）と条件結果トレースパケット（パケット化されたｃリザルトおよび対応キーを含む）の両方がＦＩＦＯ１９４に出力されて格納される。ＦＩＦＯ１９４に格納されたデータは、診断回路１９６に供給される。２つのキー変換回路１８６、１８８により、一種のリネーム処理でコアタグ（条件命令および結果のための関連ＣＰＳＲレジスタを識別する）がトレース回路キーに効果的に変換される。これについては、いくつかの具体例とともに、あとでより詳しく説明する。
【００８７】
診断回路１９６は、受け取ったトレースデータを使用してＣＰＵ１００内の実行イベントを再構成する。それを行うために、診断回路１９６はコンピュータプログラムイメージ１９９にアクセスすることができる。これはＣＰＵ１００が命令を実行するコンピュータプログラム９２の複製に相当するものである。このプログラムイメージ１９９を使用することにより、診断回路は、プログラムコードを分析して、たとえば、命令実行のシーケンス内のどこで分岐命令が発生するかを判断することができる。診断回路１９６は、トレースデータを受け取ると、条件命令トレースデータ（ＣＰＵ１００によって出力される命令観察インジケータに対応する）をｃアトムＦＩＦＯ１９７に格納し、とくに条件分岐命令に関係したトレースデータおよび条件ロード／ストア命令をウェイポイントＦＩＦＯ１９８に格納する。後述のように、「ｃアトム」は条件分岐を除くすべての条件命令をトレースするために使用され、「ウェイポイント」は条件分岐または無条件ロード／ストア命令をトレースするために使用される。しかし、場合によっては、たとえば条件ロード／ストアに関して、１個の命令がウェイポイントとｃアトムの両方になる。
【００８８】
図１に示すように、ＥＴＭ１８０は対応するＣＰＳＲテーブル１９３を備え、診断回路１９６もＣＰＳＲテーブル２００を備える。これら２つのＣＰＳＲテーブル１９３、２００は、命令がアウトオブオーダーで実行された時にどのＣＰＳＲ結果をトレースすべきか追跡するために使用される。状況によっては、１個のフラグ設定命令を追跡するために複数のＣＰＳＲ値がトレースされる。例示ＣＰＳＲテーブル１９３の詳細を図２に示す。ＣＰＳＲテーブル１９３（図２参照）には、プロセッサによって使用される条件コードフラグではなく、ＣＰＳＲ状態エントリ（すなわちＣＰＳＲフラグマーク）が入ることに留意されたい。
【００８９】
図２に示すように、ＣＰＳＲテーブル１９３は、各ＣＰＳＲ条件コードフラグに関係した２ビット（３ステート）値を格納するように構成される。４個のＣＰＳＲ条件フラグは、Ｚフラグ、Ｖフラグ、ＣフラグおよびＮフラグである。ＺフラグはＡＬＵフラグからのゼロ結果を示し、Ｖフラグは命令実行中にＡＬＵ演算オーバーフローが発生したことを示し、ＣフラグはＡＬＵ演算によってキャリーが生じ、たとえばその結果がレジスタ幅を超えるビット数になったことを示し、ＮフラグはＡＬＵフラグからの負の結果（マイナス符号）を示す。
【００９０】
図２のＣＰＳＲテーブル１９３には、以下に示す３種類の状態に対応するマーカーがある。
１．ビット値００−トレースおよびマーキングを未実行
２．ビット値０１−トレースおよびマーキングを実行予定
３．ビット値１１−トレースおよびマーキングを実行済み
【００９１】
ＥＴＭのＣＰＳＲテーブル１９３に格納された状態は、命令キー変換回路１８６および結果キー変換回路１８８により、シーケンス内の次のトレースキーをいつ生成してタグ−キー変換プロセスに適用すべきか判断するために使用される。前述のように、条件命令と条件結果の両方を伴って出力されるコアタグは、典型的には、特定の命令によって使用される特定のＣＰＳＲを識別する。この例では、ＣＰＳＲ  Ａ、ＣＰＳＲ  Ｂ、ＣＰＳＲ  Ｃ、ＣＰＳＲ  Ｄ、ＣＰＳＲ  Ｅ、ＣＰＳＲ  Ｆという６種類のＣＰＳＲレジスタがある。さらに、これら６個のＣＰＳＲレジスタの各々に対して４種類のフラグ状態（Ｚ、Ｖ、ＣまたはＮ）があり、その中の１つが指定される。ＣＰＳＲテーブルには、命令トレースデータの生成時に使用されるキー値も格納される。結果トレースデータが生成される時点で、当該キーを使用すべきか判断するためにテーブルがルックアップされる。
【００９２】
図３Ａは、ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳという３種類の条件加算命令を含む４個のプログラム命令のシーケンスのインオーダー実行を模式的に示した表である。図３Ａ〜図３Ｄの例は、ＣＰＳＲテーブル内で２種類のＣＰＳＲ条件コードフラグ（すなわちフラグマーク）がトレースされ、ＣＰＳＲテーブルには各ＣＰＳＲ値に関係した１個の状態のみが格納されることを示す。
【００９３】
図３Ａの表において、実行される第一の命令は比較命令ＣＭＰであり、その結果、すべてのマーカービットがゼロにクリアされる。これは、後続の条件命令がその比較演算の結果に依存するためである。すなわち、後続の３個の条件命令が実行されるかどうかはＣＭＰの実行結果に依存する。１番目の条件命令はＡＤＤＥＱ命令であり、これは上記の比較結果が完全な相等になるか否かに依存する加算演算である。この条件命令はＣＰＳＲのＺフラグを使用するため、加算ＡＤＤＥＱ命令の実行時にＣＰＳＲテーブル内のＺマーカーが１にセットされる。したがって、Ｚフラグを含むＣＰＳＲがトレースされる。次にＡＤＤＮＥ命令が実行される。ＡＤＤＮＥ命令は、上記比較の結果が不等である場合にのみ実行される加算演算であるため、同じくＺフラグを使用する。したがって、ＣＰＵ１００によるＡＤＤＮＥ命令の実行時に（図１参照）マーカービットは変更されない。最後にＡＤＤＶＳ命令が実行される。ＡＤＤＶＳ命令はオーバーフローに対応するＣＰＳＲのＶフラグを使用し、この命令の実行時にＶマーカーが１にセットされ、Ｚマーカーはセット状態のままになる。したがって、図３Ａの４個の命令の実行終了時に、ＶフラグとＺフラグの両方を含む状態でＣＰＳＲ１５０がトレースされる。
【００９４】
図３Ｂ、図３Ｃおよび図３Ｄは、４個の命令が図３Ａの表とまったく同じシーケンスで実行され、ただしインオーダーではなくアウトオブオーダーで実行された場合に、どのＣＰＳＲ値がトレースされ、どのｃリザルトキーが生成されるかを示した表である。この場合、実行するＣＰＵ１００のタイミングおよび機能に応じて、３種類の結果がありえる。図３Ｂの表では、条件結果がすぐに与えられるため、２番目のｃアトムに対して異なるトレースキーが使用される。図３Ｂの場合、各命令が条件付きで実行されるかどうかは、すべて同じ比較命令ＣＭＰ（４個のシーケンスの中の最初の命令）の結果に依存するため、３種類の加算条件命令はいずれも同じ条件命令タグを有する。１番目の条件加算命令ＡＤＤＥＱが現れると、これはＺフラグに依存するため、その時点でｃアトムキー「０」が生成される。後続のＡＤＤＮＥ命令については、先行する命令と同じＺフラグに依存するため、新しいｃアトムキーが生成されることはない。しかし、異なるＣＰＳＲフラグ、すなわちＶフラグに依存するＡＤＤＶＳ命令には、２番目のｃアトムキー「１」が割り当てられる。１番目の条件命令（ＡＤＤＥＱ）命令に関する条件結果は、図３Ｂの表に示すようにＡＤＤＥＱのデコード直後のサイクルで利用可能になり、その条件結果タグＡはｃリザルトキー０に変換されており、そのペイロードはＺフラグである。ＡＤＤＶＳ命令の条件結果は、その命令のデコード直後のサイクルで利用可能になり、値「１」を有する２番目のｃリザルトキーおよびＶフラグのペイロードが生成されている。
【００９５】
図３Ｃは、条件結果の評価に図３Ｂの場合よりも長い時間を要する（ＣＰＵ１００の能力による）アウトオブオーダープロセッサでの図３Ａと同じ４個の命令の実行を示す。この場合、１番目の条件結果タグが出力されるのは、ＡＤＤＶＳ命令（４個のシーケンス内の４番目の命令）のデコード後のサイクルになる。したがって、この場合、ＡＤＤＥＱ命令（Ｚフラグを使用）に対応するｃアトムとＡＤＤＶＳ命令（Ｖフラグを使用）に対応するｃアトムの両方について、同じｃリザルトキー「０」が使用される。その２つがＺフラグとＶフラグの両方のペイロードを有する１個のｃリザルトキー「０」を共有するためである。
【００９６】
図３Ｄの表は、図３Ａの命令シーケンスに関するアウトオブオーダー実行結果の最後の例である。この場合、４個（ＣＭＰ、ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳ）のシーケンスから外れた後続の２つの命令（ＣＭＰおよびＳＵＢＥＱ）がＣＰＵ１００によって完全に解決された後に、アウトオブオーダープロセッサにおいて条件結果が利用可能になる。ＳＵＢＥＱ命令の条件命令タグが「Ｂ」であるのに対し、先行する３個の条件命令（ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳ）の条件命令タグは「Ａ」である。これは、それら３個の命令の依存する条件が１番目のＣＭＰであるのに対し、ＳＵＢＥＱの依存する条件が２番目のＣＭＰであることによる。図から理解されるように、条件結果タグＢは条件結果タグＡに先行し、したがって、条件命令タグＡを有する３個の先行する条件命令の解決よりも前に、条件命令ＳＵＢＥＱが完全に解決される。注意すべきは、ＣＭＰ命令がデコードされる（この命令に他の条件命令が依存する）たびにＣＰＳＲに変化が生じるため、それに対応する変化が条件命令タグに生じることである。したがって、図３Ｄの表において、条件命令タグ「Ａ」の結果は、条件命令タグ「Ｂ」の条件結果よりも後に（すなわち後続の処理サイクルで）到着する。条件結果ＢのペイロードはＺフラグであるのに対し、条件結果タグＡのペイロードはＺフラグとＶフラグの両方である。
【００９７】
本発明の実施形態による条件命令と条件結果の分離トレースによってトレース結果のスループット向上が可能になる。これは図３Ｄから明らかであり、その理由として、これまで知られているシステムでは、「Ａ」でタグ付けされた条件結果の出力が準備できるまでの間、図３Ｄの表における５個の条件命令のすべてに関連したトレースデータ項目をバッファしておかなければならない。それに対し、本発明の実施形態によれば、ｃアトムと対応キーを異なる処理サイクルで出力できるため、４個の命令すべてに対応するｃアトムおよびキーがその生成時に出力可能となる。また、ＥＴＭのＣＰＳＲテーブル１９３を使用して、ｃリザルトが必要とされる時点（受け取ったｃアトムに対応する）およびトレースすべきＣＰＳＲフラグが確定される。
【００９８】
ＣＰＵ１００が部分的ＣＰＳＲ値を計算することができ、たとえＣＰＳＲフラグのすべてが知られていない場合でも条件命令を解決できるように構成されている時、上記の手法はトレースされるフラグ値の数を減少させるのに役立つ。部分的ＣＰＳＲ結果は、ＣＰＳＲ内のすべてのフラグが知られていない場合に該当する。たとえば、ＡＤＤＥＱ命令を解決するために必要とされるのはＺフラグだけであるため、その条件命令の結果を解決するには、Ｚフラグが入っている部分的ＣＰＳＲ結果で十分である。図３Ｂ、図３Ｃおよび図３Ｄの例における「ｃリザルトキー」列および「ｃアトムキー」列から理解されるように、場合によってはシーケンス内の次のトレースキー値が使用され、他の場合には複数の異なる条件命令に対応して同じトレースキー値が使用される。シーケンス内の次のトレースキーをいつ使用すべきか判断するために、ＣＰＳＲテーブルに格納された状態が使用される。ある命令に対応してｃアトムが生成されると（ＣＰＵ１００による命令実行が開始されたことを示す）、条件命令タグをインデックスとしてＣＰＳＲのフラグ状態がルックアップされる。これは、当該の条件命令に関連した特定のＣＰＳＲがそのタグによって識別されるためである。図２２および図２５を参照して後述するように、ＣＰＳＲのマークされたビットがルックアップされて使用される。各ＣＰＳＲについて異なるビットセットがある。
【００９９】
ここで図３Ｂ、図３Ｃおよび図３Ｄの第一の実施形態に戻ると、ＥＴＭのＣＰＳＲテーブル１９３は、（１）未トレース、（２）トレース予定、（３）トレース済み、という３つの状態を格納する。この実施形態において、シーケンス内の次のトレースキー（ｃアトムキー）をいつ使用すべきか判断するために、ＣＰＳＲテーブル１９３に格納された状態が使用され、また、ＥＴＭ命令キー変換回路１８６によるｃアトムの生成時に、対応する条件命令タグ（ＣＰＵによって生成されたもの）をインデックスとしてフラグ状態がルックアップされる。トレースキーの割り当て方法を下表に要約する。
【表１】
0005865920.tif 000002
【０１００】
この表に示すように、ＥＴＭのＣＰＳＲテーブル１９３内で「トレース予定」とされているフラグ状態値が１つもなければ、シーケンス内の次のトレースキー値（ｃアトムキー）が割り当てられる。それに対し、ｃアトムタグに対応する特定ＣＰＳＲの１つ以上のフラグ状態が「トレース予定」になっていれば、直近のｃアトムの場合と同じトレースキー値（ｃアトムキー）が使用される。
【０１０１】
図４は、図１のＣＰＳＲ１５０に関する３ステートＣＰＳＲ条件フラグを模式的に示したステートマシンである。最初にシステムがリセットされ、次いでステージ４１０において所与のＣＰＳＲ条件フラグが「未トレース」状態に設定される。所与のＣＰＳＲに対応し、かつ関連ＣＰＳＲ条件フラグを必要とする条件アトムがトレースされる場合には、ＣＰＳＲ条件フラグが「未トレース」状態４１０から「トレース予定」状態４２０に変化する。ＣＰＳＲ条件フラグは、所与のＣＰＳＲに対応し、かつ関連フラグを含む条件結果がトレースされるまでの間、この状態を継続して、その終了時に所与のＣＰＳＲ条件フラグが「トレース済み」状態４３０に変化する。ＣＰＳＲ条件フラグは、所与のＣＰＳＲに対応するフラグ設定命令が観察されるまでの間、このトレース済み状態４３０を継続して、その終了時に「トレース済み」状態４３０から「未トレース」状態４１０に遷移する。
【０１０２】
図５の表に上記図３Ｃの例を再掲する。すなわち、３個の条件命令（ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳ）が実行され、３番目の条件命令のデコード後に条件結果が評価される場合である。図５は図４の３ステートシステムの例であり、条件命令タグ、ｃアトムキーおよび条件結果タグ（図３Ｃにも含まれる）に加えて、条件結果ペイロード（右から２番目の列）、各命令デコード段に対応するＣＰＳＲテーブルアクション（右端の列）が含まれる。
【０１０３】
図５の表の項目に示すように、ＣＭＰ命令（その実行結果によって後続の３個の条件命令に付随する条件が満たされたか判定される）のデコード時に、タグＡのすべての状態が「未トレース」に設定される。次に、ＡＤＤＥＱ命令のデコード時に、条件命令タグＡが出力されるとともにｃアトムキー「０」が出力され、続いてＥＴＭのＣＰＳＲテーブル１９３において「ＣＰＳＲ  Ａ」がルックアップされる（図２参照）。また、表に示すように、４個のフラグはいずれも「トレース予定」ではないため、新しいグループが開始される。ｃアトムが必要とされるのは、タグＡに関するフラグＺの状態（ＣＰＳＲ  Ａ）が「未トレース」に設定されていたためである。次に、条件命令ＡＤＤＥＱがデコードされることにより、タグＡに関するフラグＺの状態が「トレース予定」として設定される。ＡＤＤＮＥ命令のデコード（ＡＤＤＥＱのデコードに続く）に対し、この命令は、ＡＤＤＥＱ命令に付随する条件（「相等」）と反対の条件（「不等」）に基づいて条件付きで実行されるため、条件コードフラグＺにも依存することになる。条件コードフラグＺは、先行するデコード段ですでにタグ付けされている。したがって、タグＡに関するフラグＺの状態はすでに「トレース予定」に設定されており、新しいｃアトムは必要ない。前述のように、新しいトレースキー値が使用されるのは、関連ＣＰＳＲのフラグがいずれも「トレース予定」に設定されていない場合に限られる。
【０１０４】
ＡＤＤＶＳ命令がデコード段にある時、Ｚフラグはすでに「トレース予定」に設定されており、新しいグループはまだ開始されていないため、追加的なｃアトムキー「０」が出力される。しかし、この場合に（ＡＤＤＮＥ命令の場合と異なり）ｃアトムが必要とされるのは、タグ付けされたＣＰＳＲ  Ａに関するフラグ「Ｖ」の状態がそれ以前に「トレース予定」に設定されていないためである。したがって、ＣＰＳＲ  Ａに関するフラグＶの状態（図２参照）が「トレース予定」に設定される。次に、フラグＺは有効であるがフラグＶは有効でないということがＣＰＵ１００によって示される。しかし、ＣＰＳＲテーブル１９３を見れば、先行する３個の条件命令（ＡＤＤＥＱ、ＡＤＤＮＥ、ＡＤＤＶＳ）を解決するにはＺフラグとＶフラグの両方が必要であることが確認される。したがって、その時点ではまだ条件結果を完全にトレースすることはできない。条件結果タグＡの出力によって示されるものとして、ＺフラグとＶフラグの両方の条件結果ペイロードを有する条件結果が利用可能になると、ＺフラグとＶフラグの両方が有効であることがＣＰＵ１００によって示される。ＥＴＭのＣＰＳＲテーブル１９３から、これら２つのフラグが条件結果のトレースに必要なすべてであることが確認される。したがって、タグＡ（ＣＰＳＲ  Ａ）に関するＺフラグおよびＶフラグが「トレース済み」状態に設定される。条件結果をトレースするためにはＺフラグとＶフラグの両方が有効であることが必要であることに留意されたい。
【０１０５】
ＣＰＵ１００によってキャンセル命令が発行された後にｃアトムとｃリザルトの正しい関連付けが達成されるようにするためには、ＥＴＭのＣＰＳＲテーブル１９３のルックアップが必要である。図６Ａおよび図６Ｂは、図４の３ステートＣＰＳＲフラグシステムに関して新しいグループ（すなわち新しいｃアトムキー）を開始すべきかどうかの例を与える表である。図６Ａの表は、条件命令タグＢの更新が生じても、命令キャンセルイベントの直後のＡＤＤＮＥ命令に対して新しいｃアトムキーが生成されてはならない場合を模式的に示したものである。図６Ａの表において、ＡＤＤＥＱ命令がデコード段にある時、タグＡに関するＺビットフラグ（ＣＰＳＲ  Ａ）は「トレース予定」に設定される。分岐命令に続く２番目のＣＭＰ命令（図６Ａの表の３番目の命令）により、異なるＣＰＳＲ（すなわちＣＰＳＲ  Ｂ）が得られるため、次の条件命令ＳＵＢＥＱに対して条件命令タグＢが割り当てられる。さらに、ＣＰＳＲ  Ｂに対応するフラグ状態の中で現在「トレース予定」に設定されているものはないため、ＳＵＢＥＱに対して異なるｃアトムキーが生成される。ＳＵＢＥＱ命令のデコードの後続サイクルで条件命令タグＢに関する条件結果タグが出力されるため、ＳＵＢＥＱのｃアトムキー「１」と一致するｃリザルトキー「１」が出力される。
【０１０６】
次に図６Ａにおいて、関連のｃリザルトキーおよびｃアトムキー「１」がまだトレースストリーム内に存在しているにもかかわらず、命令ＣＭＰおよびＳＵＢＥＱが両方取り消される。しかし、ＡＤＤＮＥ命令がデコードされると、条件命令タグが値Ａ（前にＡＤＤＥＱによって使用されていた）に戻り、ｃアトムキー「０」（新規キーではない）が必要とされる。条件命令タグＡに対応する直近の比較演算ＣＭＰは取り消されておらず、上記ＡＤＤＮＥ命令がその比較演算ＣＭＰとまだ関連付けられているためである。
【０１０７】
図６Ｂは、図６Ａの状況とは対照的に、条件命令のキャンセル後に同じｃアトムキーを使用することがつねに正しいとは限らないことを示す代替例である。図６Ｂの例において、ＡＤＤＮＥ命令（誤予測分岐のキャンセル後にデコードされる）が新しいキーを開始しなかった場合、その結果（条件結果タグＢに対応する）がＡＤＤＮＥ命令とＡＤＤＥＱ命令の両方に適用されることになる。２つは異なる「ＣＭＰ」命令と関連付けられているため、これは誤りである。図６Ｂの表と図６Ａの表の違いは、図６Ｂの表の場合、２番目のＣＭＰが取り消されていないことである（分岐命令およびキャンセル要求を受け取る前の分岐後の命令のみが取り消される）。したがって、この場合には、新しい条件命令タグおよび新しいｃアトムキーが必要とされる。図６Ｂでは、分岐命令の後に非条件命令「ＳＵＢ」がある。
【０１０８】
図３Ａ〜図３Ｄを参照して説明した手法に対する代替的手法を図６Ｃ、図６Ｄおよび図６Ｅで説明する。この代替的手法では２ステートＣＰＳＲテーブルが維持され、その代替的実施形態によれば、現ＣＰＳＲがテーブル内の他のＣＰＳＲとは異なる方法で扱われる。図２で説明したように、各々が４種類の条件フラグ状態の関連セットを有する６個の異なるＣＰＳＲ（合計２４個の異なるテーブルエントリ）が存在する。図６Ｃ〜図６Ｅの代替的実施形態において、現ＣＰＳＲは、そのＣＰＳＲに関する各フラグについて２つの状態のみを必要とするように扱われる。しかし、これら２つの状態が意味する内容は異なる。図６Ｃおよび図６Ｄは、２ステートＣＰＳＲテーブル（現ＣＰＳＲに関する各フラグについて１ビットのみ）およびインフライトビット（全ＣＰＳＲの各フラグについて１ビット）が図４の状態図の３つの状態とどのように対応するかを示す。図６Ｅは、インフライトビットの使用例である。
【０１０９】
ＣＰＵ１００が部分的ＣＰＳＲ結果を提示できず、完全ＣＰＳＲ結果しか提示できない場合、各フラグの状態をＣＰＳＲテーブルに格納する必要はない。その代わりに、各ＣＰＳＲについて１ビットを格納することができる。これは、いずれかのＣＰＳＲが「トレース予定」（すなわち結果がＣＰＵパイプライン１２０内で「インフライト」状態）であるかを示す。
【０１１０】
図６Ｃ〜図６Ｅの実施形態（ＣＰＳＲテーブルの図２の実施形態とは異なる）において、各ＣＰＳＲタグは、その後の「ｃリザルト」が予期されるかどうかを示す単一ビット（「インフライト」ビットと呼ぶ）を有する。「インフライト」値とともに各ＣＰＳＲフラグについて２つの状態を有する現ＣＰＳＲのＣＰＳＲテーブルは、図４の状態図の３つの状態に対応する。図６Ｃの表は、これらのインフライトビットがどのように使用および維持されるかを説明したものである。ＥＴＭ命令キー変換回路１８６によって出力されるｃアトムに応答して、条件命令タグ（図６Ｃの「ＲＨタグ」）に対応するインフライトビットがセットされる。第二のトレース生成回路１９２がＥＴＭ結果キー変換回路１８８から条件結果を受け取った場合、条件結果タグ（図６Ｃの「ＬＨタグ」）に対応するインフライトビットがセットされていれば、ＦＩＦＯ１９４を介してトレースデータストリームにｃリザルトが出力され、続いてビットがクリアされる。インフライトビットは、タグが同じである（すなわち同じＣＰＳＲに対応する）以前のｃアトムについて以前のｃリザルトをいつ受け取ったかを判断するために使用される。ある命令に対応してｃアトムが生成されると、関連の条件命令トレースデータ項目タグ（ＣＰＵ１００によって出力されたもの）をインデックスとしてインフライトビットがルックアップされる。
【０１１１】
図６Ｄの表は、この実施形態においてＥＴＭ命令キー変換回路１８６（図１参照）がどのようにトレースキーを生成するかを示す。具体的には、インフライトビット値が値「０」（結果がインフライトでないことを意味する）を有する場合、次のトレースキー値が使用される。他方、インフライトビット値が値「１」（条件結果がインフライトであることを示す）を有する場合は、直近のｃアトムに関して使用されたものと同じトレースキー値が使用される。
【０１１２】
したがって、図４の状態図の３つの状態が次の２つのデータストアを介して追跡される。（１）全ＣＰＳＲの全フラグについて１ビット（２ステート）を有する図６Ｄのインフライトテーブル。これらは、データ処理装置による出力時にフラグをトレースする必要があるか（対応する以前の条件命令の結果を再構成するために当該結果のどのビットが必要か）を示す。
（２）条件命令がｃアトムとしてトレースされるかどうかを示すものとして、１つのＣＰＳＲ（現ＣＰＳＲ）の各フラグについて２つの状態（マーク）を有する現ＣＰＳＲのＣＰＳＲテーブル。
【０１１３】
図６Ｅの表は、図３Ａの例を再掲し、図６Ｃおよび図６Ｄのルールを実装した場合にインフライトタグがどのように設定されるかを示したものである。図６Ｅの例において、３個の条件命令ＡＤＤＥＱ、ＡＤＤＮＥおよびＡＤＤＶＳに対応する条件結果は、命令ＡＤＤＶＳがデコードされた後に利用可能になる（図３Ｃの場合と同様）。命令ＡＤＤＥＱのデコードと同じ行に対応する最初のｃアトムがトレース中に出力されると（図６Ｅの表）、タグＡのインフライトビットがルックアップされ、結果が「０」（インフライトではない）であることが確認される。これにより、新しいトレースキー値とともに新しいグループが開始され、ｃアトムキー＝「０」になる。
【０１１４】
デコード中の命令ＡＤＤＶＳと同じステージで次のｃアトムが生成されると、命令ＡＤＤＥＱおよびＡＤＤＶＳが同じ条件命令タグを共有しているため、条件命令タグＡのインフライトビットが再びルックアップされる。この場合、結果は「１」になり（インフライトを示す）、新しいグループは開始されず、直近のｃアトムの場合と同じトレースキー値が使用される。したがって、命令ＡＤＤＶＳのｃアトムキーも「０」になる。ＡＤＤＶＳのデコード後のステージで条件結果タグＡが出力されると、タグＡのインフライトビットがクリアされる。このビットクリアは、条件命令タグＡに対応する結果が解決され、もはやコアパイプライン内で「インフライト」ではないことを示す。
【０１１５】
図７〜図１１は、条件分岐命令が同じトレースストリーム内の他の条件命令から分離され、若干異なる形で扱われる仕組みを模式的に示したものである。具体的には、条件分岐命令および（無条件）ロード／ストア命令はいわゆる「ウェイポイント」を使用してトレースされる一方、他のすべての条件命令は上述のような「ｃアトム」を使用してトレースされる。条件分岐をトレースし、どの分岐が成立／不成立かを示すためにウェイポイントを使用することが知られている。これについては、ＡＲＭ  Ｌｉｍｉｔｅｄ社に対して付与された米国特許第７，７０７，３９４号に詳しく説明されている。
【０１１６】
条件分岐命令だけでなく、ロード／ストア命令もウェイポイントを使用して表すことができる。米国特許第７，７０７，３９４号には、ウェイポイントのシーケンスを検出してトレースデータストリームにまとめて出力することにより、１個のトレースデータ項目で複数のウェイポイントを表す方法が説明されている。本発明の実施形態により、上述のＣＰＵ１００によってタグがｃアトム（条件命令観察インジケータ）と関連付けられる方法と同様の方法でコアタグをウェイポイントと関連付けることができる。これらのコアタグは、ＥＴＭによって名前が変更され、所定の順序に従うトレースキーを形成する。トレースキーが所定の順序に従うため、キーをウェイポイントとともに出力するための厳しい要件は存在しない。
【０１１７】
実際、トレースデータストリームに出力されるウェイポイントは、図７Ａの表に示すように２つの値のいずれかでラベル付けされる。この表に示すように、ラベル「Ｅ」のウェイポイントは、（ａ）当該プログラム命令が観察された時に分岐が実際に成立した条件分岐命令、または（ｂ）ロード／ストア命令のいずれかに対応する。これらの「Ｅ」ウェイポイントに対して、トレースキーは１だけインクリメントされる。しかし、プログラムの観察時に実際に成立しなかった条件分岐命令については、トレースキーが１だけインクリメントされるとともに、これらのウェイポイントが「Ｎ」でラベル付けされる。図１〜図６に関する上記の説明では、すべての条件命令についてｃアトムの出力が説明されている。しかし、いくつかの実施形態では、すべての条件命令に対してｃアトムを出力するのではなく、条件分岐命令だけについて異なる扱いがなされる。具体的には、ｃアトムを出力して条件分岐命令の実行をフラグ表示する代わりに、図７Ａの表に示すような「Ｅ」または「Ｎ」の関連ステータスとともにウェイポイントがトレースデータストリームに出力される。
【０１１８】
上述のように、複数のウェイポイントを圧縮（すなわち連結）して、１個のトレースデータ出力項目を形成することができ、また、同様の方法で、複数のｃアトムを圧縮することができる。上述のように、ｃアトムもＥＴＭ１８０におけるシーケンス検出およびタグ−キー変換の対象となる。
【０１１９】
しかし、ｃアトムは、重要な点でウェイポイントとは異なる。具体的には、ウェイポイントのシーケンスは、キーがつねに１だけインクリメントされるが、ｃアトムの場合、ｃアトムキーは時々インクリメントされるだけであり、それ以外はまったくインクリメントされない。具体的には、特定のタグ付きＣＰＳＲ（図２のＡ、Ｂ、Ｃ、Ｄ、ＥまたはＦ）の１つ以上のＣＰＳＲフラグ状態が「トレース予定」のときには、シーケンス内の直近のｃアトムと同じトレースキー値が使用され、その場合、ｃアトムキーはインクリメントされない。図７Ｂの表に示すように、２種類のｃアトムを使用して、これをエンコードすることができる。
【０１２０】
図７Ｂの表に示すように、条件命令（条件分岐を除く）は、その特徴によって２種類に分けられる。すなわち、前のｃアトムと後のｃアトムの間でトレースキー（ｃリザルトキー）が変化しない条件命令（条件分岐以外）は「Ｐ０」と表示され、トレースキー（ｃリザルトキー）が１だけインクリメントされる条件命令（条件分岐以外）は「Ｐ１」と表示される。
【０１２１】
したがって、たとえば、ｃアトムのシーケンスであるｃリザルトキーが、０、１、２、２、３、４、５、５、６であると仮定すれば、これをＰ１、Ｐ１、Ｐ１、Ｐ０、Ｐ１、Ｐ１、Ｐ１、Ｐ０、Ｐ１のようにエンコードすることができる。
【０１２２】
明らかなこととして、ｃアトムキーがインクリメントされない（すなわち２個の連続する「２」および２個の連続する「５」がある）シーケンス内の位置では、同じトレースキーの２番目の反復の時点でＰ０が出力され、それ以外はＰ１が出力される。これらのＰ１およびＰ０トレース要素をウェイポイントに関するＥ要素およびＮ要素と同様の方法で圧縮（すなわち連結）することができる。ＥおよびＮウェイポイントの圧縮は以前に知られており、米国特許第７，７０７，３９４号に詳しく説明されている。本発明の実施形態によれば、トレース回路が、ｃアトム、条件命令に関するｃリザルト、およびウェイポイントを異なる処理サイクルで出力することができるということは、ｃアトムを独立して出力し、その後にキーシステムを使用して対応ｃリザルトと関連付けできるということを意味する。これにより、ｃアトムをｃリザルトおよびウェイポイントから独立して圧縮しながら、同じトレースデータストリーム内で共に出力することが可能になる。その結果、ウェイポイント、ｃアトム、およびｃリザルトの独立した圧縮を可能にすることによって効率改善が実現される。
【０１２３】
図７Ｃの表は、ＣＰＵ１００内の実行イベントに基づき、ＥＴＭ１８０のトレース回路によって生成されるウェイポイントイベントおよびｃアトムを示す。表中の連続する線は、連続的かつ順次的な処理サイクルを表す。図７Ｃの表の右端の列は、対応するトレースデータ出力を示す。トレースデータ出力項目の生成順序は、表の連続行によって示される。１番目のトレース出力は、圧縮されたウェイポイントトレース出力「ＥＥＥＮ」になる。注目すべきは、これが３個のＥの最後とＮの間のｃアトムＰ１が生成された後に出力されることである。次のトレースデータ出力は、圧縮されたｃアトム「Ｐ１１１」に対応し、先と同様、これらは、出力シーケンス内で３個のＰ１が２個のＮウェイポイントを挟んで発生しているにもかかわらず、３個の連続するｃアトムとして出力される。３番目のトレース出力は「Ｐ１１０」に対応し、これと関連付けられるのは「生成されるｃアトム」列の連続するＰ１、Ｐ１、Ｐ０出力である。これら３個のｃアトムＰ１、Ｐ１、Ｐ０の出力より前に、２個の「Ｎ」ウェイポイントが出力されているが、これらのウェイポイントはトレース出力にまだ現れていない。最後のトレース出力は「ＮＮＮＥ」に対応する。これは、Ｐ１、Ｐ１、Ｐ０よりも前の残りのウェイポイント出力およびシーケンスの終わりに生成された最後のウェイポイントＥを反映したものである。
【０１２４】
図１に示すように、診断回路は、トレースデータ出力を受け取り、圧縮ｃアトムを分離してｃアトムＦＩＦＯ１９７に入れ、圧縮ウェイポイントをトレースしてウェイポイントＦＩＦＯ１９８に入れる。図７Ｃの表に示すトレース出力の圧縮の結果としての順序付けの変更に伴い、図１の診断ツール１９６によるＥＴＭ１８０からのトレース出力のデコード時に、実行順序と異なる順序付けが効果的に与えられる。図７Ｃの特定の例において、トレース出力の順序付けは、Ｅ、Ｅ、Ｅ、Ｎ、Ｐ１、Ｐ１、Ｐ１、Ｐ１、Ｐ１、Ｐ１、Ｐ０、Ｎ、Ｎ、Ｎ、Ｅになる。診断回路１９６は、プログラムイメージ１９９を利用して、これらの圧縮ウェイポイントおよび圧縮ｃアトムの順序を変更し、正しい実行順序に復元する。診断ツール１９６は、その処理のためにプログラムイメージを参照し、すべての分岐を特定する。各分岐はＥまたはＮウェイポイントと関連付けられている。これらは本質的に「分岐成立」または「分岐不成立」情報を与えるものであり、それにより診断ツール１９６は、その時点のＣＰＵ１００内で規定されていた条件に基づき、プログラムイメージ内のどの命令が成立したか、どの条件分岐命令が不成立になったかを正確に判定することができる。ウェイポイントに対応するこのスレッドを辿り、診断回路１９６がプログラムを詳しく調べる過程で、プログラムイメージ１９９を参照することによって条件非分岐命令も見出される。これらの条件非分岐命令の各々は、受け取ったトレースデータストリーム内のｃアトムと順に関連付けられている。ただし、多くの条件命令の結果としてｃアトムが生成されるとはいえ、たとえば図３ＢのＡＤＤＮＥのように、ｃアトムを生成しない条件命令のサブセットも存在する。
【０１２５】
図７Ｄの表は、診断回路１９６がＥＴＭ１８０から受け取ったウェイポイントおよびｃアトムを処理し、別々のｃアトムＦＩＦＯ１９７とウェイポイントＦＩＦＯ１９８に格納する仕組みを説明したものである。この表は、プログラムイメージ１９９を介して実行スレッドを辿る過程で見出される各命令種別について、特定種別の命令が現れた時に診断回路が実行するアクションを示す。分岐命令が現れると、ウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出される。ロード／ストア命令が現れると、同じくウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出される。条件分岐命令が現れた場合、これは、ウェイポイント（ｃアトムではなく）が適用される特別な場合であるため、対応するｃアトムが生成されることはない。したがって、ウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出される。条件ロード／ストア命令はウェイポイントであり（ロード／ストアであるため）、かつｃアトムでもありえるが（条件付きであるため）、非条件ロード／ストアについては、対応するｃアトムは存在しない。この場合、ロード／ストアがＮウェイポイント（分岐不成立）に対応することは絶対にないということが分かっているため、ウェイポイントキューからＥが取り出される。しかし、条件ロード／ストアの場合には、ｃアトムＦＩＦＯ１９７からＰ０またはＰ１が取り出される。「他の条件命令」（条件分岐および条件ロード／ストア以外）はすべて、ｃアトム生成の該当カテゴリーに含まれ、この場合は、ウェイポイントＦＩＦＯからＰ０またはＰ１が取り出される。生成されたｃアトムおよび生成されたウェイポイントはｃアトムＦＩＦＯ１９７およびウェイポイントＦＩＦＯ１９８に順番に格納されるため、これらのＦＩＦＯから当該エンティティが取り出される順序は、プログラム実行順序を反映する。
【０１２６】
図８は、条件アトムパケットとウェイポイントパケットの両方が入っているトレースデータストリームを受け取った時点で診断回路１９６が実行するアクションを模式的に示したフローチャートである。このプロセスはステージ８１０で開始され、診断回路１９６が新たなトレースデータ項目を受け取る。その後、ステージ８２０において、診断回路１９６は、次のトレースデータ項目を受け取り、ステージ８３０に進む。ここで、トレース項目が条件アトム（ｃアトム）パケットであるか判定される。そのトレース項目が実際にｃアトムパケットならば、プロセスはステージ８３２に進み、そこでパケットがデコードされ、Ｐ０および／またはＰ１のｃアトムが適宜ｃアトムＦＩＦＯ１９７に追加される。続いてプロセスはステージ８６０に進み、そこで終了する。
【０１２７】
他方、ステージ８３０において特定のトレースデータ項目がｃアトムパケットでないと判定された場合には、プロセスはステージ８４０に進み、そこで当該トレース項目がウェイポイントパケットであるか判定される。そのトレース項目が実際にウェイポイントパケットならば、プロセスはステージ８４２に進み、そこでパケットがデコードされるとともに、Ｅおよび／またはＮウェイポイントが適宜ウェイポイントＦＩＦＯ１９８に追加される。続いてプロセスは最終ステージ８６０に進む。しかし、ステージ８４０において、当該トレースデータ項目がウェイポイントパケットではないと判定された場合は（そのトレース項目がｃアトムパケットとウェイポイントパケットのいずれでもないことを意味する）、プロセスはステージ８５０に進み、他のパケット種別が従来の方法で適宜処理され、プロセスはステージ８６０で終了する。
【０１２８】
図９Ａ、図９Ｂおよび図９Ｃは、分岐誤予測があった時、またはアボートが発生して１つ以上のウェイポイントが取り消された時に、投機的アウトオブオーダー処理が可能なＣＰＵ１００内で圧縮ウェイポイントおよび圧縮ｃアトムを含むトレース出力に何が起きるかを模式的に示したものである。
【０１２９】
少なくとも１つのウェイポイントが取り消された場合、診断ツール１９６は、その状況で当該キャンセルイベント以前にいくつの条件命令が実行されたか認識していないため、ウェイポイントおよびｃアトムの圧縮が原因で問題が発生しえる。図９Ａの表は、その仕組みを模式的に示したものである。図９Ａの表のほぼ中央に１個のウェイポイント（すなわち先行するＮ）が取り消されるイベントがあり、トレース出力は、その１個のウェイポイントが取り消されたことを示しているが、圧縮ｃアトムに関していかなる情報も与えていない。注意すべきは、このトレース出力において、生成された最初の２個のｃアトムＰ１、Ｐ１はまだトレースストリームに出力されていないが、圧縮ｃアトムのトレース出力「Ｐ１１１」がキャンセル後に出力されていることである。この「Ｐ１１１」出力は、３個のｃアトムＰ１、Ｐ１、Ｐ１が生成されたことを意味する。この場合における（ただし必然的ではない）ウェイポイントＮの取り消しは、直後のｃアトムＰ１の取り消しを引き起こすため、診断回路１９６は、「キャンセル１」の後に圧縮ｃアトム出力Ｐ１１１を受け取った時点で、圧縮「Ｐ１１１」トレース出力に対応する「Ｐ１」トレース出力の中の１つが実際には取り消されていることを認識できない。したがって、診断ツールは、どのウェイポイントが取り消されたか確認できても、それに伴ってどのｃアトムが取り消されたかを確認することはできない。言い換えれば、圧縮によってｃアトムおよびキャンセルイベントの順序が失われ、診断回路１９６は、２番目のＰ１がキャンセル前だったのか（その場合、アーキテクチャ的に実行されなかったことになる）、あるいはキャンセル後なのか（その場合、アーキテクチャ的に実行されたことになる）確認できない。同様に、誤予測が生じ、条件命令がアーキテクチャ的に実行されなかったはずであるにもかかわらず、トレース内に取り消されたウェイポイントがなかったという場合、診断回路１９６は、条件命令が実行されなかったことを認識できない。この問題に対処するとともに、ウェイポイントおよびｃアトムの圧縮によって診断回路１９６が命令の誤予測またはキャンセル発生時に誤った仮定を行うのを防ぐ目的で、次の３つのルールが実装される。
１．分岐誤予測、アボートまたは例外、その他任意のキャンセル命令の発生時に、キャンセルトレースインジケーションとともに再アライメントトレース項目を出力する（ただし、例外の場合は、キャンセル、例外、再アライメントの順序でなければならない）。
２．すでに生成されたすべてのｃアトムを再アライメントトレース項目よりも前に出力する。
３．すでに生成されたすべてのウェイポイントを再アライメントトレース項目よりも前に出力する。
【０１３０】
再アライメントトレース項目は、診断回路１９６に対し、取り消された命令に対応するものとしてｃアトムＦＩＦＯ１９７内のいかなるｃアトムも破棄すべきであることを指示する。図９Ｂの表は、取り消されたトレースデータ項目とともに再アライメントトレースデータ項目が使用される一例を示す。この例では、図９Ａの表に示した例と同様にＮウェイポイントが取り消される。異なるのは、キャンセルインジケーションがトレースデータストリームに出力された時、そのキャンセル以前にすでに生成されていたすべてのｃアトムのインジケーションがトレース出力に示されることである。これが「Ｐ１１」トレース出力に対応する。続いてトレース内にキャンセルインジケーション「キャンセル１」が出力され、さらに「再アライメント」インジケーションが出力される。この場合、ｃアトムとキャンセルの順序付けは維持される。バッファ内にｃアトムがあれば再アライメントによってすべてフラッシュされ、再アライメントはつねにキャンセルとともに（その前または後に）出力されるためである。ＥＴＭは、何個のｃアトムが取り消されたか（もしあれば）については、判定するのに十分な状態を格納していないため、それを追跡することはない。しかし、診断ツールは、どのｃアトムが取り消されたかを確認することができる。
【０１３１】
図９Ｃは、図９Ｂの表に示すトレース出力を受け取った診断回路１９６がそれに応答して実行するアクションを模式的に示したものである。１番目の列は、診断回路１９６が受け取ったすべてのトレースデータ項目を示す。これをさらに分割したのがウェイポイントキュー（２番目の列）および条件キューすなわちｃアトムキュー（３番目の列）である。トレース出力に応答した診断回路１９６のアクションを表の右端の列に示す。最初の診断回路アクションとして、Ｅまでの実行を推測する。これは、すべてのウェイポイント間に実行される命令（ウェイポイントおよびｃアトム以外）が診断回路１９６によって推測されるためである。診断回路１９６はウェイポイントＮまで推測することはできない。まだｃアトムを受け取っていないためであり、この時点でｃアトムは、プログラムイメージ１９９の分析から診断回路１９６によって予期される。圧縮トレース要素Ｐ１１を受け取った後にトレースデータストリーム内で「キャンセル１」インジケーションが与えられる。そのため、診断回路は、最後のウェイポイントすなわちＮウェイポイントまでを含むすべてを取り消す。再アライメントトレース項目を受け取った後、ｃアトムＦＩＦＯ１９７がフラッシュされてキャンセル以前に発行されたＰ１１およびＰ１が除去され、「キャンセル１」を受け取ると同時にＰ１が条件キューに追加される。再アライメントに続いて、圧縮ｃアトムＰ１１１０トレースを受け取るが、診断回路は、プログラムイメージ１９９の分析からウェイポイントを受け取ることを予期しており、すでに受け取ったウェイポイントはないため、診断回路によってｃアトムが処理されることはない。診断回路によるその後のアクションでは、ｃアトムが必要か不必要かに応じてウェイポイント間の命令が推測される。このようにして、ＣＰＵ１００による実際の実行シーケンスが診断回路１９６によって再構成される。ロード／ストア命令は条件付きまたは非条件付きでありえることに留意されたい。非条件ロード／ストア命令はＥアトムとして扱われるため、ウェイポイントキューからＥアトムが取り出される。ロード／ストア命令が条件付きの場合は、やはりウェイポイントキューからＥアトムが取り出されるが、それに加えてｃアトムキューからＰ０またはＰ１が取り出される。
【０１３２】
図１０は、トレースデータ出力を分析するために診断回路１９６が実行するアクションを模式的に示したフローチャートである。具体的には、図１０のフローチャートは、実行ストリームの分析において診断回路がｃアトムＦＩＦＯ１９６およびウェイポイントＦＩＦＯ１９８からどのようにｃアトムおよびウェイポイントを除去するかを説明している。プロセスはステージ１０００で開始され、直接ステージ１０１０に進み、そこでトレースデータ出力を受け取り、プログラムイメージ１９９を使用して次の実行命令を判定する。続いてプロセスはステージ１０１２に進み、次の命令が非条件分岐であるか判定する。次の命令が実際に非条件分岐ならば、プロセスはステージ１０１４に進み、ウェイポイントＦＩＦＯ１９８から「Ｅ」または「Ｎ」が取り出される。続いてプロセスはステージ１０６０に進み、利用可能な情報から現命令の詳細を確認し、その後、終了ステージ１０７０に進んで、次のトレースデータ項目が出力されるのを待つ。
【０１３３】
他方、図１０のステージ１０１２で次の命令が非条件分岐命令ではないと判定された場合、プロセスはステージ１０２０に進み、次の命令が非条件ロード／ストア命令（無条件）であるか判定する。その命令が実際に非条件ロード／ストア命令ならば、プロセスはステージ１０１４に進み、そこでウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出される。続いてプロセスはステージ１０６０と、その後終了ステージ１０７０へと進む。ステージ１０２０で次の命令が非条件ロード／ストア命令ではないと判定された場合、プロセスはステージ１０３０に進み、その命令が条件分岐であるか判定する。その命令が実際に条件分岐ならば、プロセスはステージ１０１４に進み、ウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出され、プロセスはステージ１０６０と１０７０へと進んで、プロセスが終了する。他方、ステージ１０３０で次の命令が条件分岐ではないと判定された場合には、プロセスはステージ１０４０に進み、次の命令が条件ロード／ストアであるか判定する。その命令が実際に条件ロード／ストアならば、プロセスはステージ１０４２に進み、ウェイポイントＦＩＦＯ１９８からＥまたはＮが取り出され、さらにステージ１０４４に進んで、ｃアトムＦＩＦＯ１９７からＰ０またはＰ１が取り出される。したがって、条件ロード／ストア命令の場合は、ウェイポイントキューとｃアトムキューの各々から項目が取り出される。続いてプロセスはステージ１０６０と１０７０へと進む。
【０１３４】
ステージ１０４０において、当該命令が条件ロード／ストアではないことが確認された場合には、プロセスはステージ１０５０に進み、その命令が条件命令であるか判定する。その命令が条件命令ならば、ｃアトムキュー１９７からＰ０またはＰ１が取り出され、プロセスはステージ１０６０に進み、現命令の詳細を確認した後、ステージ１０７０で終了する。しかし、次の命令が条件命令でなければ、プロセスはステージ１０５０から直接ステージ１０６０に進み、利用可能な情報を用いて現命令の詳細を確認する。しかし、この場合、現命令は、非条件分岐命令、非条件ロード／ストア命令、条件分岐命令、条件ロード／ストア命令または条件命令のいずれでもない。
【０１３５】
図１１Ａ、図１１Ｂおよび図１１Ｃは、キャンセルトレースインジケーション、誤予測トレースインジケーション、例外トレースインジケーション、および再アライメントトレースインジケーションがトレースデータストリームに出力される相対的順序の例である。
【０１３６】
図１１Ａの例の場合、最初のウェイポイントＥは分岐誤予測に対応し、再アライメントトレース項目はその誤予測の後ろに置かれるが、ウェイポイントまたはｃアトムよりも前になる。
【０１３７】
図１１Ｂの場合、２番目のウェイポイント、すなわち２番目の「Ｅ」は誤予測の分岐に対応する。再アライメントトレース項目は誤予測の後ろに置かれるが、次のウェイポイントまたはｃアトムの前（この特定の例では、次のウェイポイントＥの前）になる。
【０１３８】
図１１Ｃの例では、１番目と２番目のウェイポイント「Ｅ」（シーケンス内の１番目と２番目のトレース項目）の間にアボートが発生する。この場合、例外が投げられ、再アライメントトレース項目がその例外の後ろに置かれるが、次のウェイポイントまたはｃアトムよりも前になる。この場合、アボートの前後の２つのウェイポイントＥの間にｃアトムＰ１（シーケンス内の２番目のトレース項目）が生成されるが、再アライメント項目は、やはり例外の後ろに置かれる。
【０１３９】
図１２〜図１４は、条件結果によって黙示されうる条件アトムを除去することによってｃアトムを含むトレースデータストリームを圧縮できる仕組みを模式的に示したものである。このようにしてトレースデータストリームからｃアトムのサブセットを除去することにより、トレースプロセスの効率を改善させることができる。すべての条件命令に対してｃアトムが生成されるわけではないが、しばしばｃアトムとｃリザルトの間に１対１の対応関係が存在し、すべてのｃリザルトは少なくとも１つの対応するｃアトムを有していなければならない。これは、トレースデータストリームに実際に含まれていなければならないｃアトムがないまま後続のｃリザルトが現れた時、多くの場合、診断回路１９６がｃアトムの存在を黙示できるということを意味する。すなわち、診断回路１９６は、まだ受け取っていないｃアトム（すなわちｃアトムキー）に対応するｃリザルトキーを有するｃリザルトを受け取った場合、そのｃアトムの存在を推定することができる。ｃリザルトが順序どおりでなければ、診断回路１９６は、ｃアトムの順序を維持するために他のｃアトムの存在を推定することができる。診断回路１９６はｃアトムを本来現れるはずの時点よりも後に推定することが可能であり、そのためにｃアトムとウェイポイントの順序が変化することがある。しかし、これが問題になることはない。前述のように、ｃアトムＦＩＦＯ１９７およびウェイポイントＦＩＦＯ１９８に格納されたｃアトムおよびウェイポイントは、いずれの場合でも、プログラムイメージ１９９内のプログラム命令シーケンスに基づき、診断回路１９６によって正しい順序に配置されるからである。
【０１４０】
図１２Ａは、図１の結果キー変換回路１８８によるｃリザルトキー出力に基づいて一連のｃアトム（すなわち命令実行に対応するトレースデータ項目）が黙示されるトレースデータストリームの例を模式的に示した表である。この例では、ＥＴＭ１８０によって５個のｃアトムＰ１が続けて生成されるが出力されていない。同様に、表中で「ＲＨキー」と表記されているｃアトムキーもＥＴＭによって生成されるが出力されていない。これは、ｃアトムのバッファリングとみなすことができる。ｃリザルトが出力される時、黙示ビット（ｉｍｐｌｙ  ｂｉｔ）がそれらのバッファされたｃアトムを表す。しかし、対応する条件結果キーは、結果キー変換回路１８８によって実際に出力される。キー値が明示的に与えられないが、トレース結果から、どのｃアトムがｃリザルトと関連付けられているか明確になる。完全なｃアトム情報は出力されないが、ｃリザルトパケットにはｃリザルトに関する情報が有効に含まれている。ｃアトムは高度に圧縮される（１ビットまで）。図１２Ａの表の４番目の列は、受け取ったｃリザルトキーに基づき、どのｃアトムキーが診断回路１９６によって黙示されるかを模式的に示したものである。この場合、対応関係は単純であり、ｃリザルト０、１および２がｃリザルトキーに対応して直接的に黙示される。しかし、ｃリザルトキー４はｃリザルトキー３よりも前に出力されるため、診断回路１９６は、ｃリザルトキー４を受け取った時、対応する結果はまだ出力されていないが、すでにｃアトムキー３も生成されていると推定する。実際、図１２Ａの表の「出力されたｃリザルトＬＨキー」列から、ｃリザルトキー４の直後にｃリザルトキー３が生成されることが分かる。したがって、２つのｃアトムキー３および４の黙示は実際に正しかったことになる。注目すべきは、図１２Ａの表の例において、生成されるｃアトムはＰ１アトムのみを含み、Ｐ０アトムは含まれないということである。前述のように、ｃアトムＰ１に関してトレースキーはつねに１だけインクリメントされるのに対し、Ｐ０アトムに関してトレースキーが変化することはない。したがって、ｃリザルトの存在によってｃアトムＰ１は黙示されうるが、そのことはＰ０アトムには当てはまらない。実際、ｃリザルトの存在によってｃアトムＰ０を推定することはできず、そのためすべてのｃアトムＰ０をトレースに出力することが必要であり、それらをバッファすることはできない。
【０１４１】
ＥＴＭ１８０によるｃアトム出力のバッファリングおよび診断回路１９６によるｃリザルトからの対応ｃアトムの黙示に依存することが不適切であるような別の２つの特別な状況が存在する。そのような状況の１つは再アライメントトレース項目の場合であり、ＥＴＭ１８０は、原理的には後続のｃリザルトによって黙示されるはずであるにもかかわらず、再アライメントよりも前に知られているすべてのｃアトムを出力しなければならない。
【０１４２】
これは、診断回路１９６によるウェイポイントおよびｃアトムの正しい相対的順序付けが推定されるようにするためである。
【０１４３】
ｃアトムの出力をバッファし、受け取ったｃリザルトキーからｃアトムの存在を黙示することが不適切であるようなもう１つの状況は、命令キー変換回路１８６によってｃアトムそれ自体にｃアトムキーが割り当てられており、それが厳密に順次的でなく、たとえば特殊キーが使用されているような場合である。
【０１４４】
ＥＴＭ１８０によって出力され、診断回路１９６が受け取ったｃリザルトを用いて追加的なｃアトムを黙示することが許されない特定の場合も存在する。以下の３つの状況は、そのような場合の例であり、診断回路はそれらを区別することができない。
１．同じｃリザルトキーが２回使用される。
２．Ｎ個のｃアトムがバッファされる（Ｎ＝順次トレースキーの数）
【０１４５】
実際、ＥＴＭ１８０によって出力されるｃリザルトは、対応ｃリザルトからｃアトムが黙示されるべきか診断回路１９６に通知する情報を含むことが必要とされる。図１の実施形態において、所与のｃリザルトについてｃアトムが黙示されるべきか否かに関するこの情報は単純なｙｅｓ／ｎｏ条件であり、黙示されるｃアトムの正確な数は診断回路１９６に対して明示的に指定されない。
【０１４６】
図１２Ｂは、いくつかのｃアトムキーが対応ｃリザルトから黙示され、また４個の異なるｃアトムトレースキーが使用されるトレースデータストリームの例を模式的に示した表である。４個のｃアトムトレースキーしか使用できないため、すべてのキーを使い切った後にキーのラップアラウンドが行われる。具体的には、ｃアトムキーシーケンスは０、１、２、３と進んだ後、０に戻る。これは、生成されながら出力されない５番目のｃアトムＰ１に対応する。さらに、図１２Ｂの例において、生成されながら出力されない５番目、６番目および７番目のｃアトムＰ１は誤予測に対応するため、これら３個のｃアトムは、実際には実行されず、したがって、対応するｃリザルトおよびｃリザルトキーが出力されることは決してない。
【０１４７】
ｃリザルトには、次に示す少なくとも３種類の情報が含まれる。
１．明示的に、または直近のｃリザルトに対して、条件結果と関連付けられたキー。
２．診断回路１９６が条件命令の成功／失敗ステータスを判定する（すなわち、条件命令が実際に実行されたかどうか判定する）ためのペイロード。
３．そのｃリザルトに基づいて対応ｃアトムが黙示されうるか（黙示のｙｅｓ／ｎｏという単純な２ビットインジケータ）。
【０１４８】
この黙示ｙｅｓ／ｎｏ情報を適用する目的で、ＥＴＭ１８０は、命令キー変換回路１８６によって生成されながら、診断回路１９６に対するその出力はバッファされていないｃアトムを追跡するように構成される。ＥＴＭ１８０は、各ｃリザルトが何であるか確認するとともに、そのｃリザルトによって黙示されうるのは（もしあれば）どのｃアトムであるか判定する。ｃリザルトによって黙示されるｃアトムがない場合、そのｃリザルトはＥＴＭ１８０によって黙示ｎｏとマークされ、他の場合には黙示ｙｅｓとマークされる。これは２個のレジスタを使用して達成される。
【０１４９】
「ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙ」レジスタには、直近に生成されながら出力されていないｃアトムのキーが入る。これの例外は、直近に生成されながら出力されていないｃアトムが特殊キーを有する場合である。別個の「ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ」レジスタには、（１）明示的に出力されたｃアトム、（２）ｃリザルトによって黙示されるｃアトムのどちらかもっとも新しい方のトレースキーが記録される。
【０１５０】
ｃリザルトが生成されると、対応ｃリザルトキーがテストされ、それが（ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ）＜（ｃリザルトＬＨキー）≦（ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙ）の範囲内であるか確認される。このテストを適用する際にモジュラス計算を使用しなければならず、モジュラス計算の扱いは当業者にとって周知である。ｃリザルトキーが実際にこの定義範囲内ならば、ＥＴＭ１８０によるｃリザルトの一部として黙示ｙｅｓが出力される。
【０１５１】
図１３は、図１２Ｂのシーケンスと同様のトレースデータシーケンスを模式的に示した表である。ただし、「ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙ」レジスタおよび「ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ」レジスタに格納される値をそれぞれ右から２番目と３番目の列に示してある。図１３の表の右端の列は、上記の等式によって定義されるテスト（すなわち黙示ｙｅｓ）が充足されたかというインジケーションを与える。４個のトレースキーのみを使用し、キーのラップアラウンドが行われるため、キー「３」がキー「０」よりも小さいとみなされることがありえる。たとえば、０、１、２、３、０、１、２、３・・・という反復キーシーケンスにおいて、１番目の「３」は２番目の「０」よりも前に位置する。図１３の表の「黙示されるｃアトムＲＨキー」列に３＊とマークされた黙示ｃアトムキーは、再アライメント項目の出力直後に黙示されており、この場合、キー０、１、２を有するｃアトムは黙示されない。その前に誤予測が生じ、ｃアトムキー０、１、２に対応する３個のｃアトムＰ１が実行されなかったことにより、それらが明示的に出力されているためである。
【０１５２】
図１３の最後の行から２番目で出力されるｃリザルトキー「２」について、ｃリザルトキー２に対応するキー２を有するｃアトムは、それ以前のｃリザルトによってすでに黙示されているため、黙示されない。したがって、図１３の右端の列に示されるテスト結果がｎｏになる。図１３の表の最後の行に出力されるｃリザルトキーについて、キー１を有する対応ｃアトムは、すでに「明示的に出力されたｃアトムキー」列に明示的に出力されているため、黙示されない。図１３に示すように、誤予測の結果としてｃアトムキー０、１、２が明示的に出力され、トレースデータストリーム内のｃアトムＰ０の出現（表の左端の列における最後に生成されたｃアトムから３番目）によってｃアトムキー０、１が明示的に出力される。これに対して、対応ｃリザルトからのｃアトムの黙示は許されない。
【０１５３】
ｃアトムが明示的に出力されるのは次の理由による。
・再アライメントトレース項目が（たとえば誤予測または例外によって）出力される前。
・ｃアトム種別Ｐ０が使用された場合（定義により、トレースキーがインクリメントされない）。
・キーの通常の順次的な順序に従わない特殊キーが使用され、また非常に遅い時点のｃリザルトに対して使用された場合。
【０１５４】
ｃアトムが明示的に出力された時、「ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ」レジスタを使用して、どのｃアトムを出力すべきか判断することができる。たとえば、再アライメントトレース項目の場合、明示的に出力される最初のｃアトムは「ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ＋１」という値であり、出力される最後は、ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙの値である。キー値がそれら２つの間であるｃアトムも出力すべき対象となる。
【０１５５】
図１４Ａは、対応ｃリザルトからｃアトムを黙示する診断回路１９６の機能に依拠したものとして、特定のｃアトムが生成されながら出力されない（すなわちバッファされない）場合にトレースストリームを出力し、トレース圧縮スキームを実施する際のＥＴＭ１８０のアクションを模式的に示したフローチャートである。言い換えれば、図１４ａのフローチャートは、トレースデータストリームからｃアトムのサブセットを除去することによって出力トレースデータストリームを圧縮するためにＥＴＭ１８０がどのように動作するかを模式的に示したもである。
【０１５６】
プロセスはステージ２０００で開始され、ステージ２００１に進み、そこで再アライメントトレースデータ項目が必要かどうかを判定する。再アライメントトレース項目が必要ならば、プロセスはステージ２１１０に進み、生成されながら出力されていないすべてのｃアトムをＥＴＭ１８０が明示的に出力する。次にプロセスはステージ２１２０に進み、ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙが更新される。続いてステージ２１３０に進み、再アライメントトレースデータ項目がトレースデータストリーム内に実際に出力されたあと、プロセスは縦の流れに戻って、ステージ２２００に進む。他方、ステージ２１００において再アライメントトレースデータ項目が必要ないと判定された場合には、プロセスは、横に分岐する圧縮ステージ２１１０、２１２０、２１３０に沿って進むことなく、直接ステージ２２００に進む。
【０１５７】
ステージ２２００では、ｃリザルトが現在生成中か判定する。生成中のｃリザルトがなければ、プロセスは直接ステージ２３００に進む。他方、ｃリザルトが実際に生成中であるとステージ２２００で判定された場合には、プロセスはステージ２２１０に進み、現ｃリザルトに対応するｃアトムが現在バッファされているか判定する。そのようなテストの一例は、生成中のｃリザルトに対応するキーが（ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙ）＜（ｃリザルトＬＨキー）≦（ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙ）というテストを充足するかという判定である。言い換えれば、現在生成中の条件命令トレースデータ項目に対応するキーが前記の直近に出力された条件命令トレースデータ項目に対応するキーより大きく、かつ前記の直近に生成された条件命令トレースデータ項目に対応するキーに等しいか、より小さい場合である。最大値に達した時点でキーの値がラップアラウンドするため、テストが正しく機能するように、キー比較はモジュロ演算に従う。
【０１５８】
ステージ２２１０において、ｃリザルトに対応するｃアトムが現在バッファ中でないと判定された場合には、プロセスはステージ２２３０に進み、生成直後のｃリザルトが出力される。黙示ビットはクリアされ、この特定のｃリザルトに基づいて診断回路１９６によって黙示されるべきｃアトムがないことを示す。他方、ステージ２２１０において、現ｃリザルトに対応するｃアトムが現在バッファ中であることが確認された場合には、プロセスはステージ２２２２に進み、黙示ビットをセットしてｃリザルトが出力される。これは、診断回路１９６がｃリザルトから対応ｃアトムを黙示すべきであることを示す。黙示ビットをセットしてｃリザルトを出力した後、プロセスはステージ２２２４に進み、該当レジスタでｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙの値が更新され、続いてプロセスはステージ２３００に進む。
【０１５９】
ステージ２３００では、ｃアトムが生成中か判定する。ｃアトムが生成中でなければ、プロセスはステージ２４００で終了する。他方、ｃアトムが生成中ならば、プロセスはステージ２３１０に進み、そのｃアトムの種別がＰ１ではなくＰ０であるか、あるいは特殊キーに相当するものか判定する。そのｃアトムがこれらの例外種別の中の１つでなければ、プロセスはステージ２３２０に進み、ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙが更新され、プロセスはステージ２４００で終了する。しかし、そのｃアトムが特殊キーに相当するか、または種別Ｐ０である場合には、プロセスはステージ２３１２に進み、すでに生成されているが出力されていない他のすべてのｃアトムとともに、生成中のｃアトムが明示的に出力される。次にプロセスはステージ２３１４に進み、ｌａｓｔ−ｃ−ａｔｏｍ−ｏｕｔｐｕｔ−ｋｅｙが更新される。続いてプロセスはステージ２３２０に進み、ｌａｓｔ−ｃ−ａｔｏｍ−ｇｅｎｅｒａｔｅｄ−ｋｅｙが更新され、ステージ２４００で終了する。
【０１６０】
図１４ｂは、本発明の１つの実施形態によるトレースユニット１８０を示す。これは図１に示したトレースユニットと同様であり、該当するものについて同一の参照番号を使用している。トレースユニット１８０は、追加の条件コードまたはＣＰＳＲ値格納バッファ１８５、トークンバッファ１８７、および関連の圧縮／連結回路を備える。
【０１６１】
結果インタフェース１８４から送られるデータは、更新された各ＣＰＳＲレジスタからのＣＰＳＲ値および付加的データを含む。この実施形態において、ＣＰＵ１００には８個のＣＰＳＲレジスタがあるため、単一サイクルで受け取る可能性があるセットが８種類ある。これらを単一サイクルですべてトレース生成回路１９２に入力すれば、トレース生成回路１９２がそれらを処理しなければならず、高コストになるため、その代わりにＣＰＳＲ値格納バッファ１８５にバッファする。これにより、それらの値を徐々に出力することができる。この実施形態では、各クロックサイクルで２セットのＣＰＳＲ値が出力される。それらをランダムに選択してもよいが、当該ＣＰＳＲに関するＣＰＳＲ値の更新済みセットを入力で受け取る場合は、特定セットのＣＰＳＲ値が出力される必要がある。これは、トレースストリーム内の条件アトムトレースデータ項目および条件結果トレースデータ項目が正しく順序付けされるようにするためである。
【０１６２】
この点に関し、命令インタフェース１８２において処理装置のデコードから条件命令観察インジケータを受け取り、その関連「タグ」が命令によって更新されるべき特定のＣＰＳＲレジスタを識別している場合、これにより、どのＣＰＳＲレジスタを更新すべきかという事前インジケーションが与えられる。受け取られるＣＰＳＲ値に関する有効な値が現在バッファ１８５に格納されている場合には、それらの有効な値が出力のために選択される。それが出力されることによって記憶場所が解放され、その後に受け取る新しいデータを格納できるようになる。
【０１６３】
出力された値は、トレースデータ項目を生成するトレース生成回路１９２によって処理される。この実施形態では、任意の１サイクルで２個の条件命令観察インジケータを受け取ることができるため、最大で２セットのＣＰＳＲ値を追い出す必要があり、したがって、バッファ１８５に格納された正しい値を維持するには１サイクル当たり２セットのＣＰＳＲ値の出力で十分である。したがって、トレース生成回路１９５は、１サイクル当たり２セットの値を処理するのに十分な処理能力を備えるだけでよい。
【０１６４】
この実施形態には、トレース生成回路１９２によって生成されたトレースデータ項目を受け取るための追加回路１８７が存在する。この回路は、頻出トレースデータ項目を圧縮してトークンを形成する。トークンは、それらのトレースデータ項目の圧縮表現であり、トークンバッファに格納される。あとでそれらのトレース項目を組み合わせることができ、また、いくつかを単一トレース項目として出力することができる。典型的には最小トレースパケットは８ビット長であり、多くの場合、パケットは８ビットの倍数になるが、トークンは、典型的には、それよりもはるかに小さく、出力のためにいくつかを組み合わせて１パケットにすることができる。
【０１６５】
トークンによって表現できる一般的な条件結果トレースデータ項目の例を次に示す。
【０１６６】
より出現頻度が高いＣＰＳＲ値の中の１つを含む条件結果トレースデータ項目。いくつかのＣＰＳＲ値は、他と比べて頻出し、たとえば、Ｎクリア、Ｚクリア、Ｃセット、Ｖクリアの各値は出現頻度が非常に高い。
【０１６７】
中に入っているキーがその前の当該キーに１を加えた値であるような条件結果トレースデータ項目。
【０１６８】
それらができるだけ長い間バッファに格納されていれば、異なる複数のトークンを組み合わせて単一パケットにできる機会が増加するため、好都合である。しかし、バッファサイズは有限であり、したがって、バッファが一杯になった時点、または対応する利用可能なトークンがない項目（おそらくは頻出しないために圧縮が効率的でない項目）を受け取った時点で、それらを出力しなければならない。後者の場合、順序を維持するために、値をすべて出力することによってバッファがクリアされた後、受け取った非圧縮項目が出力される。
【０１６９】
典型的には、単一トレース項目内で複数の異なるトークンが組み合わされる可能性が増大するように、これらのトークンは可能な限り長くバッファ内に保持される。
【０１７０】
図１５〜図２７の説明は、Ｊｏｈｎ  Ｍｉｃｈａｅｌ  Ｈｏｒｌｅｙ、Ｓｉｍｏｎ  Ｊｏｈｎ  Ｃｒａｓｋｅ、Ｍｉｃｈａｅｌ  Ｊｏｈｎ  Ｇｉｂｂｓ、およびＰａｕｌ  Ａｎｔｈｏｎｙ  Ｇｉｌｋｅｒｓｏｎを発明者とする同時係属中の英国特許出願第１１００５０５．５号「処理装置、トレースユニットおよび診断装置」の一部であり、同特許出願からの優先権を主張している。したがって、以下の図１５〜図２７は、例示説明を目的とするとともに、条件結果トレースデータ項目（ｃアトム）のバッファリングについて、また、すべての条件命令が対応するｃアトムを有するわけではないということについて、より詳しく説明するためのものである。これらの図には、図３Ａ〜図３Ｄに説明したＣＰＳＲマークビットの使用方法を具体的に示すという役割もある。図２２および図２５は、とくにその目的に関連したものである。
【０１７１】
図１５は、プログラム命令に応答して処理機能を実行する処理回路３００４を備える処理装置３００２を示す。処理装置３００２にはメモリシステム３００８が提供され、メモリシステム３００８は、処理回路３００４によって実行されるプログラム命令および／または処理回路３００４によって処理されるデータを格納するための１つ以上のキャッシュユニットまたはメモリユニットを備える。
【０１７２】
処理装置３００２は、処理回路３００４によって実行される処理動作を監視するトレース回路３００６を含む。トレース回路３００６は、処理回路３００４によって実行される処理動作の特徴を示すトレースデータ要素を生成する。トレース回路３００６は、生成されたトレースデータ要素を出力ポート３０１０経由で出力する。トレース回路３００６を処理回路３００４と同じ集積回路上に実装する必要はなく、いくつかの実施形態では、別個のトレースユニットとして設けられる。
【０１７３】
トレース回路３００６によって生成されたトレースデータ要素を分析するために診断装置３０１２が設けられる。診断装置３０１２は、入力ポート３０１４を介してトレースデータ要素を受け取る。診断装置３０１２は、処理回路３００４によって実行されたプログラム命令のインジケーションも受け取る。このインジケーションは、トレース回路３００６によって与えられ、トレースストリーム内でどの命令が実行されたかを示す。代替的に、処理回路３００４によって実行された最初のプログラム命令のメモリシステム３００８内の場所を示すアドレスを診断装置３０１２に与えてもよい。処理回路３００４によって実行されたプログラムの対応コピーを格納するためのメモリ（図１５に図示せず）を診断装置３０１２に提供することもできる。診断装置３０１２は、処理回路３００４によって実行された命令をステップごとに分析し、トレースデータ要素のストリーム内に含まれる情報に基づいて命令の処理結果を判定する。
【０１７４】
トレース回路３００６から診断装置３０１２にトレースデータ要素を直接出力する必要はなく、たとえば、メモリまたはその他の記憶装置に格納し、その後、必要な時点で診断装置３０１２によって記憶装置から取り出すことができる。診断装置３０１２は、たとえば、トレース分析方法を実行するようにプログラムされた汎用コンピュータであってよい。
【０１７５】
処理装置３００２は、記憶場所、たとえば処理装置３００２の個々の条件を示す１つ以上の条件フラグ３０２２を格納するための条件ステータスレジスタ（ＣＰＳＲ）３０２０を有する。ＡＲＭ  Ｌｉｍｉｔｅｄ社（英国ケンブリッジ）が設計したプロセッサでは、条件フラグ３０２２は、処理結果がネガティブ、ゼロ、キャリー発生、またはオーバーフロー発生のいずれであったかを示すＮＺＣＶ（ネガティブ、ゼロ、キャリー、オーバーフロー）フラグを含んでもよい。図１７は、条件ステータスレジスタ３０２０内の条件フラグ３０２２の異なる組み合わせによって示される各種の条件ステータスの一覧である。
【０１７６】
当然のことながら、条件フラグ３０２２を格納する記憶場所が条件ステータスレジスタ３０２０である必要はなく、メモリシステム３００８内部の記憶場所、または他の任意の種類の記憶場所であってもよい。
【０１７７】
処理回路３００４は、条件ステータスレジスタ３０２０内の１つ以上の条件フラグ３０２２を更新する少なくとも１つの条件更新命令に応答することができる。たとえば、比較命令は、２つのデータ値を比較し、その比較結果に応じてフラグを更新する。これにより、たとえば、２つの値が等しいか、あるいは一方の値が他方の値より小さいか、またはより大きいかということが示される。結果的に条件フラグ３０２２が更新される命令はすべて条件更新命令とみなすことができる。たとえば、ＡＲＭ命令セットアーキテクチャでは、ＴＳＴ、ＴＥＱ、ＣＭＰおよびＣＭＮ命令が条件更新命令の例である。
【０１７８】
処理回路３００４は、所与の条件に関連した少なくとも１つの条件命令にも応答することができる。条件命令が実行されると、条件フラグ３０２２の値が所与の条件と比較される。条件フラグ３０２２がその条件を満たしていれば、関連の処理動作が実行される。その条件が満たされなければ、関連の処理動作は実行されない（条件命令の種類によっては、条件が満たされない場合に関連の処理動作とは別の処理動作が実行されることもある）。
【０１７９】
たとえば、条件加算命令ＡＤＤＥＱはＥＱ条件と関連付けられる。図１６は、ＺフラグがセットされていればＥＱ条件が満たされることを示す。条件加算命令ＡＤＤＥＱが実行されたとき、もしＺフラグがセットされていれば関連の加算演算が実行され、もしＺフラグがセットされていなければ加算演算は実行されない。
【０１８０】
条件命令の処理結果を命令ストリームのみで判定することはできない。命令ストリームには、条件が満たされたか判断するための情報が含まれないためである。したがって、トレース回路３００６は、選択された少なくとも１つの命令に応答して、条件フラグ３０２２の値を示すトレース条件値（ｔｒａｃｅｄ  ｃｏｎｄｉｔｉｏｎ  ｖａｌｕｅ）が含まれるトレースデータ要素を生成する。診断装置３０１２は、そのトレースデータ要素に含まれるトレース条件値から当該条件が満たされたか判断することができ、したがって対応する条件命令の処理結果を判定することができる。
【０１８１】
トレース回路３００６は、条件フラグ３０２２の値がトレースされているか監視するために１つ以上の制御フラグ３０２６を維持する。トレース回路３００６は、１つ以上の制御フラグ３０２６の現在値に基づき、所与の命令の実行時に条件フラグ値をトレースするかどうかを選択することができる。一実施形態において、トレース回路３００６は１個の制御フラグ３０２６を備え（後述の図２２〜図２４の実施形態を参照）、別の実施形態において、トレース回路３００６は各々が条件フラグ３０２２の中の１つに対応する複数の制御フラグ３０２６を備える（図２５〜図２７に関する後述の実施形態を参照）。
【０１８２】
診断回路３０１６は、対応する制御フラグ３０２８のセットを維持し、トレース回路３００６の制御フラグ３０２６に対応する方法でこれらを使用することにより、所与のプログラム命令に対してトレース条件値を含むトレースデータ要素がトレースストリームで与えられることが予期されるかどうか判定する。
【０１８３】
トレースデータ要素内のトレース条件値は、複数の異なる方法で示される。１つの例において、トレース回路３００６は、トレースデータ要素内に条件フラグ３０２２の少なくともサブセットについて、その実際の値を含むことができる。条件命令が条件フラグ３０２２のサブセットにのみ依存する場合、トレース回路３００６は、条件フラグ値の関連サブセットのみを含めばよく、あるいは条件フラグ３０２２のすべてを含むこともできる。
【０１８４】
代替的に、トレース回路３００６は、条件フラグ３０２２の値の特定の組み合わせを示す識別コードをトレースデータ要素内に含むことができる。これにより、条件値の特定の組み合わせが他のものより頻出する場合に効率的なエンコードが可能になる。たとえば、図１７は、３種類の条件状態（たとえばＣフラグがセットされた状態、Ｎフラグがセットされた状態、ＺおよびＣフラグがセットされた状態）に対して２ビット識別子が使用される例を示す。異なる条件状態が４種類以上の場合は４ビット識別子が使用される。条件フラグ値の他の組み合わせの中の１つが必要とされる場合は、図１７とは異なるエンコード方式により、現条件フラグ値の別個のインジケーションをトレースデータ要素に含めることができる。
【０１８５】
当然ながら、このような識別子のエンコードは、特定の識別子によってどの条件状態が表されるかという選択とともに、一例にすぎない。しかし、この例は、最小ビット数の識別子をもっとも出現頻度が高い条件状態に割り当てることによってトレースデータの合計量を減少させられるということを実証するものである。たとえば、処理装置３００２が時間全体の７０％は２ビット識別子を有する３つの条件状態のいずれかであり、２９％は４ビット識別子を有する３つの状態のいずれかであり、１％はその他の状態のいずれか（当該のその他の状態はたとえば８ビット識別子によって表される）である場合、現在の条件状態を識別するために使用される平均ビット数は、２＊０．７＋４＊０．２９＋８＊０．０１＝２．６４（アスタリスク＊は乗算記号を表す）になる。したがって、現在の条件状態を示すためにトレースストリームに含まれる平均ビット数は、単純に条件フラグの現在値がトレースデータ要素に入る場合の４ビットよりも小さくなる。
【０１８６】
トレース回路３００６は、処理回路３００４による実行プログラムの異なる命令の位置で条件フラグ３０２２の値をトレースすることができる。トレース回路３００６は、値を示す条件フラグが入ったトレースデータ要素の生成をトリガーする１つ以上の選択済みの命令を選択することができる。その選択済みの命令は、たとえば条件命令でありえるが、別の命令であってもよい。
【０１８７】
たとえば、図１８〜図２０は、トレース条件値を含むトレースデータ要素が条件更新命令の実行時に生成される例を示す。図１８は、処理回路３００４の動作に応答してトレースデータを生成する方法を示す。ステップ３０４０において、処理回路３００４は、実行中のプログラムの次の命令を処理し、トレース回路３００６は、処理回路３００４によるその命令の処理を監視する。ステップ３０４２において、トレース回路３００６は、処理回路３００４によって実行中の命令が条件更新命令であるか判定する。その命令が条件更新命令であれば、ステップ３０４４において、トレース回路３００６は、その条件更新命令の実行によって生じた条件フラグ３０２２の更新値を示すトレース条件値が入ったトレースデータ要素を生成および出力する。他方、その命令が条件更新命令でなければ、ステップ３０４４は省略される。ステップ３０４６では、処理回路３００４によって処理される別の命令があるか判定される。別の命令があれば、プロセスはステップ３０４０に戻り、残っている命令がなければ、プロセスはステップ３０４８で終了する。
【０１８８】
図１９は、トレース回路３００６が図１８の方法で作成したトレースストリームを分析するための対応する診断方法を示す。診断装置３０１２は、処理回路３００４によってどの命令が実行されたかというインジケーションを受け取る。ステップ３０５０において、診断回路３０１６は、処理回路３００４による実行中と示された次の命令を分析する。ステップ３０５２では、診断回路３０１６は、次の命令が条件命令であるか判定する。その命令が条件命令であれば、ステップ３０５４において、診断回路３０１６は、プログラム命令のインジケーションに示された直近の条件更新命令の関連トレースデータ要素をトレースデータストリーム内で発見する。ステップ３０５６において、診断回路３０１６は、発見されたトレースデータ要素に含まれるトレース条件値に基づいて、条件命令の処理結果を判定する。たとえば、診断回路３０１６は、トレース条件値を使用して、当該の条件命令と関連付けられた条件が満たされたか、また、それに従って関連の処理が実行されたか判定することができる。ステップ３０５２で次の命令が条件命令でないと判定された場合、ステップ３０５４および３０５６は省略される。ステップ３０５８では、分析すべき別の命令があるか判定される。別の命令があれば、プロセスはステップ３０５０に戻り、残っている命令がなければ、プロセスはステップ３０６０で終了する。
【０１８９】
図２０は、図１８の方法によるトレースストリームの生成および図１９の方法によるトレースストリームの分析例を示す。これはプログラム処理回路３００４によって実行された１組の命令を示したものである。分岐命令が実行されると、その分岐が成立したかどうかを示すトレースデータ要素が生成される。条件更新命令（例：ＣＭＰ）が現れると、図１８のステップ３０４４により、トレース条件値ＣＰＳＲを含むトレースデータ要素が生成される。トレースストリームの分析時に、診断装置は、トレース条件値を使用して、後続の条件命令（たとえば図２０に示すＭＯＶＮＥ、ＭＯＶＥＱ、およびＡＤＤＨＩ命令）の処理結果を判定することができる。
【０１９０】
いくつかの命令は、条件更新命令と条件命令の両方でありえる。たとえば、図２０のメモリロケーション２１００に位置するプログラム命令は、処理回路３００４を制御して条件フラグ３０２２の現在値が不等（ＮＥ）条件（図１６参照）を満たしているか判定する条件比較命令ＣＣＭＰＮＥである。その不等条件が満たされていれば、処理回路３００４は比較演算を実行し、その比較結果に基づいて条件フラグ３０２２を更新する。ＣＣＭＰＮＥ命令は条件命令であるため、診断回路３０１６は、条件フラグのもっとも最近の更新時にトレースストリームに入っていたトレース条件値（すなわちメモリロケーション２０００の比較命令ＣＭＰに関して出力されたＣＰＳＲ値）に基づいて、ＣＣＭＰＮＥ命令の処理結果を判定する。ＣＣＭＰＮＥ命令の実行時にＮＥ条件が満たされていれば、ＣＣＭＰＮＥ命令は条件更新命令でもあるため、トレース回路３００６は、条件フラグ３０２２の更新値を示すトレース条件値が入ったＣＣＭＰＮＥ命令に関するトレースデータ要素を生成する。このトレースデータ要素を使用して、後続の条件命令の結果を判定することができる。
【０１９１】
あるいは、いくつかの例において、ＣＣＭＰＮＥ命令は、ＮＥ条件が満たされたか否かに関係なく条件更新命令とみなされうる。そのため、条件フラグ値を示すトレースデータ要素がＣＣＭＰＮＥ命令に関してつねに生成されるようにすることが考えられる。トレースの時点でＮＥ条件がまだ計算されていない場合、これが役立ちうる。
【０１９２】
単一の条件更新命令のあとに一連の条件命令が続き、そのすべてが同じ条件値のセットに依存する場合は、複数の後続命令の結果を判定するのに少量のトレースデータで十分であるため、図１８〜図２０に示す手法が有用になりえる。
【０１９３】
しかし、状況によっては、条件フラグの更新値を使用する条件命令が途中に入ることなく多数の条件更新命令が連続することがある。たとえば、図２１では、一連のプログラム命令の中に多数の比較命令ＣＭＰおよびビットテスト命令ＴＳＴが含まれ、それらの命令によって条件フラグの更新が発生するが、最初の４個の命令によるフラグの更新に対し、それらの更新値を条件命令が使用することはない。そのような状況において、条件命令の実行時にトレース条件値を含むトレースデータ要素を生成することは（その例を図２２〜図２４および図２５〜図２７を参照して後述する）、より効率的な方法になりえる。図２１に示す例では、個々の条件更新時ではなく条件命令ＭＯＶＮＥが実行された時点でトレースデータ要素を生成すればよい。
【０１９４】
当然ながら、これらの手法を混合することが可能であり、トレースユニットによっては、条件更新命令の実行時と条件命令の実行時の両方にトレース条件値を生成することができる。
【０１９５】
図２２は、条件命令の実行時に条件フラグ３０２２がトレースされる、トレース方法を示す。この実施形態において、トレース回路３００６は、条件フラグ３０２２の値をトレースすべきか判断するための制御フラグ３０２６を維持する。制御フラグ３０２６は「クリア」状態と「セット」状態を有する（たとえば「クリア」状態を制御フラグ３０２６の値０、「セット」状態を制御フラグ３０２６の値１とするか、その逆でもよい）。
【０１９６】
図２２のステップ３０７０において、トレース回路３００６は、次の命令を実行する処理回路３００４を監視する。ステップ３０７２において、トレース回路３００６は、その命令が条件命令であるか判定する。その命令が条件命令であれば、ステップ３０７４において、トレース回路３００６は、制御フラグがクリアされているか判定する。制御フラグがクリアされていれば、ステップ３０７６において、トレース回路３００６は、条件ステータスレジスタ３０２０の現在の状態を示すトレース条件値を含むトレースデータ要素を生成および出力する。続いて、ステップ３０７８で制御フラグがセットされる。他方、ステップ３０７４で制御フラグがセットされていれば、ステップ３０７６および３０７８は省略される。ステップ３０７２において、当該命令が条件命令でないと判定された場合は、ステップ３０７４〜３０７８が省略される。
【０１９７】
続いて、ステップ３０８０では、次の命令が条件更新命令であるか判定される。いくつかの命令は条件命令と条件更新命令の両方でありえることに注意されたい。その命令が条件更新命令であれば、ステップ３０８２で制御フラグがクリアされる。他の場合には、ステップ３０８２が省略される。続いてステップ３０８４では、処理回路３００４によって処理される別の命令があるか判定される。もし別の命令があれば、プロセスはステップ３０７０に戻る。残っている命令がなければ、プロセスはステップ３０８６で終了する。
【０１９８】
図２２の方法を実装するためのいくつかの疑似コードを次に示す（用語「ｍａｒｋｅｒ」は制御フラグ３０２６を示す）。
On an instruction:
If instruction is conditional:
If marker is clear:
Trace the CPSR
Set marker
If instruction updates the CPSR:
Clear marker
【０１９９】
トレース回路３００６は、条件更新命令に続く最初の条件命令の時点でトレース条件値を含むトレースデータ要素を生成するので、図２２の方法はトレースデータの量を減少させるのに役立つ。後続の条件命令については、条件値をトレースする必要がない。前の条件命令がすでに関連のトレースデータ要素を有し、その中に条件フラグ３０２２の状態を示す情報が含まれているためである。
【０２００】
図２３は、図２２の方法で作成されるトレースストリームを分析するための対応する診断方法を示す。診断装置３０１２は制御フラグ３０２８を有し、その「クリア」状態と「セット」状態はトレース回路３００６の制御フラグ３０２６の状態に対応する。ステップ３１００において、診断回路３０１６は、処理回路３００４によって処理されるプログラム命令のインジケーションに示された次の命令を分析する。ステップ３１０２では、条件命令のインジケーションがあるか判定される。当該命令が条件命令ならば、ステップ３１０４において、診断制御フラグ３０２８がクリア状態かどうか判定される。診断制御フラグがクリア状態ならば、診断回路３０１６は、ステップ３１０６で、その条件命令の関連トレースデータ要素を発見し、ステップ３１０８で、その関連トレースデータ要素に含まれるトレース条件値に基づいて、条件命令の処理結果を判定する。ステップ３１１０において、診断制御フラグは「セット」状態に設定される。
【０２０１】
他方、ステップ３１０４で診断制御フラグがクリア状態でなかった場合は、プロセスはステップ３１１２に進み、診断回路３０１６によって追加的なトレースデータ要素が発見される。その追加的なトレースデータ要素は、以前に分析した条件命令と関連付けられたデータ要素である。ステップ３１１４において、診断回路３０１６は、以前に分析した条件命令に関して生成された追加的なトレースデータ要素内のトレース条件値に基づき、その分析対象とされた条件命令の処理結果を判定する。ステップ３１０２において、当該命令が条件命令でないと判定された場合は、ステップ３１０４〜３１１４が省略される。
【０２０２】
続いて、ステップ３１１６では、分析中の命令が条件更新命令であるかどうかが判定される。その命令は、条件命令と条件更新命令の両方でありえる。その命令が条件更新命令であれば、ステップ３１１８で診断制御フラグ３０２８がクリアされ、その命令が条件更新命令でなければ、ステップ３１１８は省略される。ステップ３１２０では、分析すべき別の命令があるか判定される。別の命令があれば、プロセスはステップ３１００に戻り、命令がなければ、プロセスはステップ３１２２で終了する。
【０２０３】
このように、診断回路は、トレース回路３００６の制御フラグ３０２６に対応する診断制御フラグ３０２８を使用して、所与の条件命令についてトレースストリーム内に関連トレースデータ要素が予期されるか判定する。そのような関連トレースデータ要素があれば、そのトレースデータ要素に含まれるトレース条件値に基づいて、条件命令の処理結果を判定することができる。関連トレースデータ要素がない場合には、以前の条件命令と関連付けられたトレースデータ要素が得られ、その中に入っているトレース条件値によって、現在の条件命令の処理結果を判定することができる。条件更新命令が現れた時点で、診断制御フラグ３０２８がクリアされる。これは、次の条件命令が関連トレースデータ要素を有することが予期されることを示す。
【０２０４】
図２４は、図２０に示したプログラム命令のストリームに図２２および図９の方法を適用する例を示す。先と同様、メモリロケーション１６００の分岐命令による分岐成立の結果がトレースされる。トレース回路３００６は、メモリロケーション２０００に格納された条件更新命令ＣＭＰの実行に応答し、図２２のステップ３０８２に従って自らの制御フラグ３０２６をクリアする。同様の方法により、診断回路３０１６は、命令を分析する際、図２３のステップ３１１８に従って診断制御フラグ３０２８をクリアすることにより、条件更新命令ＣＭＰのインジケーションに応答する。
【０２０５】
トレース回路３００６は、メモリロケーション２００４に格納された条件命令ＭＯＶＮＥが現れると、その時点で制御フラグ３０２６がクリア状態であることを確認し、図２２のステップ３０７６に従ってトレース条件値ＣＰＳＲを含むトレースデータ要素が生成される。次に図２２のステップ３０７８に従って制御フラグがセットされる。対応する方法により、診断回路３０１６は、命令の分析時に、メモリロケーション２００４に位置する条件命令ＭＯＶＮＥのインジケーションを検出する。続いてクリア状態の診断制御フラグ３０２８に対する応答として、トレースストリーム内の関連トレースデータ要素を発見するとともに、そのトレースデータ要素に含まれるトレース条件値に基づいてＭＯＶＮＥ命令の処理結果を判定する。次に診断回路３０１６は、図２３のステップ３１１０で診断制御フラグ３０２８をセットする。
【０２０６】
さらに、トレース回路３００６は、メモリロケーション２００８および２００Ｃの後続の条件命令について、制御フラグ３０２６がセット状態であることを検出する。したがって、対応するトレースデータ要素は生成されない。対応する方法により、診断回路３０１６は、診断制御フラグ３０２８がセット状態にあることを検出し、図２３のステップ３１１２および３１１４に従って、メモリロケーション２００４に格納された以前の条件命令の関連トレースデータ要素を発見する。診断回路３０１６は、メモリロケーション２００４の命令に関する以前のトレースデータ要素に基づき、メモリロケーション２００８および２００Ｃの命令の処理結果を判定する。
【０２０７】
このようにしてトレースストリームが生成されえ、そのストリーム内で条件フラグ３０２２の更新後に実行される最近の条件命令がトリガーとなって、トレース条件値を含むトレースデータ要素が生成される。
【０２０８】
図２５〜２７は、トレース回路３００６が、どの条件フラグ３０２２がすでにトレースされているか監視し、条件命令に関するトレースデータ要素の生成時に、まだトレースされていないその条件命令が必要とする追加的な条件フラグをトレースする実施形態を示す。この方法は、各々が条件フラグ３０２２の中のそれぞれ１つに対応する複数の制御フラグ３０２６を利用するものであり、各制御フラグ３０２６には「クリア」状態と「セット」状態かある。診断回路３０１６は、対応する診断制御フラグ３０２８のグループを有し、これにも「クリア」状態と「セット」状態がある。
【０２０９】
図２５は、処理回路３００４の動作をトレースする方法を示す。ステップ３１４０において、処理回路３００４は次の命令を実行し、この命令の実行がトレース回路３００６によって監視される。ステップ３１４２では、その命令が条件命令であるか判定される。その命令が条件命令であれば、ステップ３１４４において、トレース回路３００６は、その条件命令の結果を判定するために必要とされる条件フラグ３０２２のサブセットを確定する。たとえば、図１６に示す各条件について、この表に示した対応するフラグが条件フラグの所要サブセットである。たとえば、ＨＩ条件はＣフラグおよびＺフラグを必要とする。
【０２１０】
ステップ３１４６において、トレース回路３００６は、条件フラグ３０２２の所要サブセットに対応する制御フラグ３０２６のいずれかがクリアされているか判定する。条件フラグの所要サブセットに対応する制御フラグがいずれもクリア状態でなければ、プロセスはステップ３１５２に進む。条件フラグの所要サブセットに対応する制御フラグのいずれか１つまたは複数がクリア状態ならば、ステップ３１４８において、トレース回路３００６は、トレース条件値を含むトレースデータ要素を生成および出力する。対応する制御フラグ３０２６がクリア状態である所要サブセットの条件フラグ３０２２が少なくともこのトレース条件値によって示される。任意的に、このトレース条件値は、他の条件フラグを示すこともでき、あるいはすべての条件フラグ３０２２を示すこともできる。続いて、ステップ３１５０では、トレース回路３００６は、トレース条件値に示された条件フラグに対応する制御フラグをセットする。ステップ３１４２において、当該命令が条件命令でないと判定された場合、ステップ３１４４〜３１５０は省略される。
【０２１１】
ステップ３１５２において、トレース回路３００６は、処理回路３００４によって実行中の命令が条件更新命令であるか判定する。その命令が条件更新命令であれば、ステップ３１５４において、その条件更新命令の結果として更新される条件フラグ３０２２に対応した制御フラグ３０２６が少なくともクリアされる。任意的に、ステップ３１５４において、トレース回路３００６は、他の制御フラグ３０２６をクリアすることもでき、あるいはすべての制御フラグ３０２６をクリアすることもできる。当該命令が条件更新命令でなければ、ステップ３１５４は省略される。ステップ３１５６では、処理回路３００４によって処理される別の命令があるか判定される。そのような命令があれば、プロセスはステップ３１４０に戻る。他の場合には、プロセスはステップ３１５８で終了する。
【０２１２】
図２５の方法を実装するための疑似コードを次に示す（用語「ｍａｒｋｅｒ」は制御フラグ３０２６を示す）。
On an instruction:
If instruction is conditional:
If any markers for flags required by this instruction are clear:
Trace at least the flags required
Set markers for the required flags
If instruction updates the CPSR:
Clear at least the markers for updated flags
【０２１３】
代替的に、図２５の方法を実装するために次の疑似コードを使用することもできる。
On an instruction:
If instruction is conditional:
If any markers for flags required by this instruction are clear:
Trace at least the flags required
Set markers for the traced flags
If instruction updates the CPSR:
Clear at least the markers for updated flags
【０２１４】
図２６は、図２５の方法によって生成されたトレースストリームを分析する方法を示す。ステップ３１６０において、診断回路３０１６は、処理回路３００４によって実行された命令のインジケーションが示す次の命令を分析する。ステップ３１６２で次の命令が条件命令であると判定された場合、ステップ３１６４において、診断回路３０１６は、その命令に関する条件フラグの所要サブセットを確定し、その条件フラグの所要サブセットに対応する診断制御フラグ３０２８がクリア状態またはセット状態のいずれであるか判定する。ステップ３１６６では、ステップ３１６４において条件フラグの所要サブセットに対応する診断制御フラグ３０２８のいずれかがクリア状態と判定された場合、診断回路３０１６は、最初のトレース条件値を含む関連トレースデータ要素をトレースストリーム内で発見する。クリア状態の診断制御フラグ３０２８に対応する条件フラグの所要サブセットの値が少なくともその最初のトレース条件値によって示される。次に診断回路３０１６は、クリア状態であり、かつ所望のサブセットの条件フラグ３０２２に対応する診断制御フラグ３０２８をセットする。
【０２１５】
ステップ３１６８では、ステップ３１６４において条件フラグの所要サブセットに対応する診断制御フラグ３０２８のいずれかがセット状態と判定された場合、診断回路３０１６は、少なくとも１つの以前の条件命令に関する少なくとも１つの追加的なトレースデータ要素を発見する。その追加的なトレースデータ要素には、セット状態の診断制御フラグに対応する条件フラグ値を示す少なくとも１つの追加的なトレース条件値が含まれる。次にステップ３１７０において、診断回路３０１６は、最初のトレース条件値および／または少なくとも１つの追加的なトレース条件値（ステップ３１６６および３１６８でどのトレース条件値がアクセスされたかによる）を分析し、それらのトレース条件値に基づいて現在の条件命令の処理結果を判定する。ステップ３１６２で当該命令が条件命令でないと判定された場合、ステップ３１６４〜３１７０は省略される。
【０２１６】
ステップ３１７２において、診断回路３０１６は、指示された次の命令が条件更新命令であるか判定する。その命令が条件更新命令であれば、ステップ３１７４において、条件更新命令の実行の結果として更新された条件フラグ３０２２（どの条件フラグ３０２２が更新されたかを診断回路３０１６は条件更新命令の処理結果の推定に基づいて判定できる）に対応する診断制御フラグ３０２８が少なくともクリアされる。任意的に、ステップ３１７４において、診断回路３０１６は、他の診断制御フラグ３０２８をクリアすることもでき、あるいはすべての診断制御フラグ３０２８をクリアすることもできる。ステップ３１７２で次の命令が条件更新命令でない場合、ステップ３１７４は省略される。ステップ３１７６では、分析すべき別の命令があるか判定される。別の命令があれば、プロセスはステップ３１６０に戻り、他の場合にはプロセスはステップ３１７８で終了する。
【０２１７】
図２７は、先に示したプログラム命令のストリームに図２５および図２６の方法を適用する例を示す。この例では、条件更新命令に応答してすべての制御フラグ３０２６および診断制御フラグ３０２８がクリアされると仮定しているが、前述のように、すでに更新されている条件フラグ３０２２に対応する制御フラグ３０２６、３０２８のみをトレース回路３００６および診断回路３０１６がクリアするような実施形態を提供することも可能である。
【０２１８】
図２７では、分岐命令に関して生成されたトレースデータ要素内に分岐成立という結果が示されている。診断回路３０１６は、この分岐成立の結果から、処理回路３００４によってどの命令が実行されたかを判定することができる。
【０２１９】
メモリロケーション２０００に条件更新命令ＣＭＰが現れた時点で、トレース回路３００６はすべての制御フラグ３０２６をクリアする。同様に、条件更新命令ＣＭＰが現れた時点で、診断回路３０１６は自らの診断制御フラグ３０２８をすべてクリアする。
【０２２０】
メモリロケーション２００４に位置する条件命令ＭＯＶＮＥの実行時に、トレース回路３００６は、「不等」条件ＮＥについて、条件フラグの所要サブセットがＺフラグであると判断する（図１６参照）。図２５のステップ３１４６において、トレース回路３００６は、Ｚ条件フラグに対応する制御フラグ３０２６がクリア状態であることを確認し、ステップ３１４８において、少なくともＺフラグの値を示すトレース条件値が入ったトレースデータ要素を生成する。次に図２５のステップ３１５０において、Ｚフラグに対応する制御フラグがセットされる。
【０２２１】
対応する方法により、トレースストリームの分析時にメモリロケーション２００４の条件命令ＭＯＶＮＥが現れると、診断回路３０１６は、条件フラグの所要サブセットがＺフラグであると判断する。この時点で、Ｚ条件フラグに対応する診断制御フラグ３０２８はクリアされており、診断回路３０１６は、そのＭＯＶＮＥ命令に対応する関連トレースデータ要素があると判断する。診断回路３０１６は、その関連トレースデータ要素を発見し、このトレースデータ要素には、Ｚフラグの値を示すトレース条件値が入っている。診断回路３０１６は、メモリロケーション２００４に格納されたＭＯＶＮＥ命令に関するトレース条件値に基づいて処理結果を判定する。続いて診断回路３０１６は、Ｚフラグに対応する診断制御フラグ３０２８をセットする。
【０２２２】
メモリロケーション２００８の条件命令ＭＯＶＥＱが現れると、トレース回路３００６は、「相等」条件ＥＱが満たされているか判定するためのフラグの所要サブセットが同じくＺフラグであると判断する（図１６参照）。図２５のステップ３１４６において、トレース回路３００６は、Ｚフラグに対応する制御フラグがセット状態であることを確認する。図２５のステップ３１４８および３１５０は省略され、トレース条件値を含むトレースデータ要素は生成されない。トレースストリームの分析時に、診断回路３０１６は、Ｚフラグに対応する診断制御フラグ３０２８がセット状態であることを同様に検出することができる。したがって、診断回路３０１６は、図２６のステップ３１６８において、メモリロケーション２００４に格納された以前の条件命令ＭＯＶＮＥに関するトレースデータ要素を発見し、そのＭＯＶＮＥ命令に関するトレースデータ要素に含まれるトレース条件値に基づいて、そのＭＯＶＥＱ命令の結果を判定する。
【０２２３】
メモリロケーション２００Ｃには、ＨＩ条件に依存する条件加算命令ＡＤＤＨＩがある。この命令が実行されると、トレース回路３００６は、条件フラグの所要サブセットがＣフラグおよびＺフラグであると判断する（図１６参照）。トレース回路３００６は、ＣフラグおよびＺフラグに対応する当該制御フラグ３０２６のステータスを判定し、Ｚ条件フラグに対応する制御フラグ３０２６はセット状態であるが、Ｃ条件フラグに対応する制御フラグ３０２６はクリア状態のままであることを確認する。したがって、図２５のステップ３１４８において、トレース回路３００６は、少なくともＣフラグを示す値を含むトレースデータ要素を生成する。続いて、Ｃ条件フラグに対応する制御フラグ３０２６がセットされる。
【０２２４】
トレースストリームの分析時に、診断装置３０１２は、メモリロケーション２００ＣのＡＤＤＨＩ命令に関する条件フラグの所要サブセットがＣフラグおよびＺフラグであることを検出する。Ｃフラグに対応する診断制御フラグ３０２８はクリア状態であるため、ステップ３１６６において、診断回路３０１６は、Ｃフラグ値を示すＡＤＤＨＩ命令の関連トレースデータ要素をトレースストリーム内で発見する。図２６のステップ３１６８では、ステップ３１６４でＺ条件フラグに対する診断制御フラグ３０２８がセット状態だったことにより、診断回路３０１６は追加的なトレースデータ要素も発見する。この例では、それに該当するトレースデータ要素はメモリロケーション２００４のＭＯＶＮＥ命令に関して生成されたトレースデータ要素である。図２６のステップ３１７０において、診断回路３０１６は、メモリロケーション２００４のＭＯＶＮＥ命令に関するトレースデータ要素に含まれるトレース条件値とメモリロケーション２００ＣのＡＤＤＨＩ命令に関するトレースデータ要素に含まれるトレース条件値の両方に基づいて、ＡＤＤＨＩ命令の処理結果を判定する。
【０２２５】
同様の方法により、図２７に示す後続の命令について、トレース回路６はトレースデータを生成し、診断回路１６はトレースデータを分析する。
【０２２６】
上記の実施形態では、条件フラグ３０２２の更新時に制御フラグ３０２６および診断制御フラグ３０２８がクリアされるように説明しているが、他のイベントも制御フラグ３０２６または診断制御フラグ３０２８がクリアされるトリガーになりえる。たとえば、例外イベントによって制御フラグがクリアされることがある。例外イベントによってトリガーされた例外ハンドラをトレース回路３００６がトレース中ならば、例外イベント発生時に制御フラグ３０２６をクリアすることにより、例外ハンドラの開始時に条件フラグ３０２２が必ずトレースされることになる。あるいは、例外ハンドラをトレース中でなければ、例外イベント発生時に制御フラグ３０２６をクリアすることにより、例外処理からの復帰後に条件フラグ３０２２が必ずトレースされることになる。
【０２２７】
また、トレース回路３００６は、制御フラグを定期的にクリアしてもよい。これにより、定期的にトレース条件値がトレースストリームに入れられ、それが診断装置３０１２のための参照点になる。診断回路３０１６は、参照点で与えられるトレース条件値によって、以前のトレースデータ要素からの情報なしで条件フラグの状態が判定可能になるため、その参照点でトレースデータの分析を開始することができる。これが有用であるのは、診断回路３０１６が目的のトレースストリームの領域に直接ジャンプでき、トレースストリーム全体を調べる必要がないためである。
【０２２８】
また、処理性能を向上させる目的で、一部のプロセッサは、命令を実際に実行すべきか確認される前に命令の投機的実行を行うことができる。しかし、１つ以上の投機的に実行された命令が実際には実行すべきではなかったということも起こりえる。誤投機を検出した場合、プロセッサは、誤って実行された命令があれば、その結果を無効にし、その誤って実行された命令の実行前のプロセッサ状態を回復させることができる。誤って実行された命令の数については、トレース回路３００６が確認できないこともある。誤投機の訂正によって得られた条件フラグ値をトレースストリームから判定できるようにするため、トレース回路３００６は、誤投機の検出時に制御フラグ３０２６をクリアすることができる。
【０２２９】
これらのいずれのイベントに対しても、トレース回路３００６は、制御フラグ３０２６がクリアされていることを示す情報をトレースストリームに入れることができる。診断回路３０１６は、診断制御フラグ３０２８をクリアすることにより、この情報に応答することができる。
【０２３０】
図２２〜図２７に示したのは、条件フラグ３０２２の値を示すトレース条件値がトレースストリームに含まれることにより、診断装置３０１２による条件命令の結果の判定が可能とされる実施形態である。しかし、これらの手法は、値を示す別の種類の結果（たとえば、成功／失敗という結果）がトレースストリームに含まれ、それにより条件命令の結果が判定可能とされるような実施形態にも適用することができる。
【０２３１】
以上、添付の図面を参照して本発明の具体的な実施例を詳しく説明したが、当然理解されるように、本発明はそれらの厳密な実施形態に限定されず、当業者であれば、添付の請求項によって確定される本発明の範囲および趣旨から逸脱することなく、そこにさまざまな変更および改変を加えることができる。
【符号の説明】
【０２３２】
９０  命令メモリ
９２  コンピュータプログラム
１００  中央処理ユニット（ＣＰＵ）
１１０  命令フェッチユニット
１２０  パイプライン
１２２  デコード段
１２３  第一の経路
１３０  レジスタセット
１４０  算術論理ユニット（ＡＬＵ）
１５０  カレントプログラムステータスレジスタ（ＣＰＳＲ）
１５２  第二の経路
１６０  メモリインタフェース
１７２  命令出力インタフェース
１７４  結果出力インタフェース
１８０  トレースマクロセル（ＥＴＭ）
１８２  命令インタフェース
１８４  結果入力インタフェース
１８６  命令キー変換回路
１８８  結果キー変換回路
１９０  トレース生成回路
１９２  トレース生成回路
１９３  ＣＰＳＲテーブル
１９４  ＦＩＦＯ
１９６  診断回路
１９７  ｃアトムＦＩＦＯ
１９８  ウェイポイントＦＩＦＯ
１９９  プログラムイメージ
２００  ＣＰＳＲテーブル
【図１】
0005865920.tif 000003
【図２】
0005865920.tif 000004
【図３Ａ】
0005865920.tif 000005
【図３Ｂ】
0005865920.tif 000006
【図３Ｃ】
0005865920.tif 000007
【図３Ｄ】
0005865920.tif 000008
【図４】
0005865920.tif 000009
【図５】
0005865920.tif 000010
【図６Ａ】
0005865920.tif 000011
【図６Ｂ】
0005865920.tif 000012
【図６Ｃ】
0005865920.tif 000013
【図６Ｄ】
0005865920.tif 000014
【図６Ｅ】
0005865920.tif 000015
【図７Ａ】
0005865920.tif 000016
【図７Ｂ】
0005865920.tif 000017
【図７Ｃ】
0005865920.tif 000018
【図７Ｄ】
0005865920.tif 000019
【図８】
0005865920.tif 000020
【図９Ａ】
0005865920.tif 000021
【図９Ｂ】
0005865920.tif 000022
【図９Ｃ】
0005865920.tif 000023
【図１０】
0005865920.tif 000024
【図１１Ａ】
0005865920.tif 000025
【図１１Ｂ】
0005865920.tif 000026
【図１１Ｃ】
0005865920.tif 000027
【図１２Ａ】
0005865920.tif 000028
【図１２Ｂ】
0005865920.tif 000029
【図１３】
0005865920.tif 000030
【図１４Ａ】
0005865920.tif 000031
【図１４Ｂ】
0005865920.tif 000032
【図１５】
0005865920.tif 000033
【図１６】
0005865920.tif 000034
【図１７】
0005865920.tif 000035
【図１８】
0005865920.tif 000036
【図１９】
0005865920.tif 000037
【図２０】
0005865920.tif 000038
【図２１】
0005865920.tif 000039
【図２２】
0005865920.tif 000040
【図２３】
0005865920.tif 000041
【図２４】
0005865920.tif 000042
【図２５】
0005865920.tif 000043
【図２６】
0005865920.tif 000044
【図２７】
0005865920.tif 000045