(57)【要約】  処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法が提供される。装置は、処理回路によって実行される命令のシーケンスを示す命令実行情報を処理回路から受信するための入力インターフェースと、命令実行情報から、そのシーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するためのトレース生成回路と、を有する。シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含むことができ、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする。トレース生成回路は、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するようにさらに構成される。これにより、処理回路によって実行される命令シーケンスがそのような分岐動作設定命令を含む状況においても非常に効率的な形式のトレースストリームを使用することが可能になる。
2019530074.tif 000002
【特許請求の範囲】
【請求項１】
処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するための入力インターフェースであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェースと、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、
を含み、
前記トレース生成回路は、前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成するようにさらに構成される、装置。
【請求項２】
前記分岐動作設定命令の実行によって前記分岐動作が前記識別された命令に関連付けられると、前記処理回路は、その識別された命令についての分岐制御情報を分岐制御記憶装置内に格納するように構成され、
前記トレース生成回路は、その識別された命令についての分岐制御情報が前記分岐制御記憶装置内に格納される時に、前記シーケンス内で前記識別された命令に遭遇したことにより分岐が発生したことを前記命令実行情報が示す場合に、前記分岐動作がトリガされたことを示すトレース要素を生成するように構成される、請求項１に記載の装置。
【請求項３】
前記分岐動作設定命令はプログラムループ本体の終了時のループ終了命令であり、前記識別された命令は前記プログラムループ本体内の直前の命令であり、前記ターゲットアドレスは、前記プログラムループ本体の開始時の命令のアドレスであり、
前記トレース生成ユニットは、前記直前の命令についての分岐制御情報が前記分岐制御記憶装置内に格納される時に、前記直前の命令に遭遇したことにより分岐が発生したことを前記命令実行情報が示すたびに、前記分岐動作がトリガされたことを示すトレース要素を発行するように構成される、請求項２に記載の装置。
【請求項４】
前記直前の命令についての分岐制御情報が前記分岐制御記憶装置内に格納されている間に前記直前の命令に遭遇したときに前記プログラムループ本体の少なくとも１回のさらなる反復が要求される場合に、前記分岐動作がトリガされる、請求項３に記載の装置。
【請求項５】
前記ループ終了命令の実行により前記分岐動作が前記直前の命令に関連付けられた場合に、前記処理回路は前記ターゲットアドレスに分岐するように構成され、前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行された分岐を示すトレース要素を発行するように構成され、
前記ループ本体のさらなる反復が必要とされない場合に、前記ループ終了命令の実行によって前記処理回路が前記プログラムループ本体から抜けて、前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行されなかった分岐を示すトレース要素を発行するように構成される、請求項３または４に記載の装置。
【請求項６】
前記プログラムループ本体のさらなる反復が依然として要求されている間にイベントが前記直前の命令についての前記分岐制御情報を前記分岐制御記憶装置内で無効化させる場合に、前記直前の命令の次の遭遇時には前記分岐動作はトリガされず、
前記処理回路は、前記ループ終了命令の次の実行に応答して前記分岐動作を前記直前の命令に再関連付けて、前記ターゲットアドレスへの分岐を実行し、それによって前記プログラムループ本体の前記さらなる反復の処理を再開し、
前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行された分岐を示すさらなるトレース要素を発行するように構成される、請求項３から５のいずれか一項に記載の装置。
【請求項７】
前記分岐動作設定命令は分岐未来命令であり、前記識別された命令は前記シーケンス内で前記分岐未来命令に続く命令であり、
前記分岐未来命令の実行により前記分岐動作が前記識別された命令に関連付けられる場合に、前記トレース生成回路は、前記分岐未来命令の前記実行動作として、前記分岐動作が関連付けられたことを示すトレース要素を発行するように構成され、
前記分岐未来命令の実行によって前記分岐動作が前記識別された命令に関連付けられない場合に、前記トレース生成回路は、前記分岐未来命令の前記実行動作として、前記分岐動作が関連付けられていないことを示すトレース要素を発行するように構成される、請求項１または２に記載の装置。
【請求項８】
前記トレース生成回路は、前記分岐動作が関連付けられたことを示す前記トレース要素として、実行された分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成され、
前記トレース生成回路は、前記分岐動作が関連付けられていないことを示す前記トレース要素として、実行されていない分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成される、請求項７に記載の装置。
【請求項９】
前記分岐未来命令の実行によって前記分岐動作が前記識別された命令に関連付けられ、かつ、前記分岐制御記憶装置内に前記処理回路によって格納されたその識別された命令についての前記分岐制御情報が、以前に実行された分岐未来命令の前記識別された命令に関連するアクティブ分岐制御情報を上書きする場合に、前記トレース生成回路は、非イベントトレース要素を発行するように構成される、請求項２に従属する場合の請求項７または８に記載の装置。
【請求項１０】
前記分岐未来命令の実行と前記シーケンス内の前記識別された命令の遭遇との間の命令実行の時点でトレースが可能になる場合に、前記トレース生成回路は、前記識別された命令に遭遇したときに実行された分岐に応答して、前記識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行する、請求項７から９のいずれか一項に記載の装置。
【請求項１１】
前記トレース生成回路は、分岐未来命令の識別された命令に関連する前記分岐制御記憶装置内の各エントリに関連してカウンタ値を維持するように構成され、
前記識別された命令に遭遇して前記分岐が発生したときに、前記分岐制御記憶域内の前記関連するエントリの前記カウンタ値に予期しない値がある場合に、前記トレース生成回路は、前記識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別する前記トレース要素を発行するように構成される、請求項２に従属する場合の請求項１０に記載の装置。
【請求項１２】
イベントによって前記分岐制御記憶装置内の前記分岐制御情報が無効にされた場合に、前記トレース生成回路は無効トレース要素を発行するように構成される、請求項２に従属する場合の請求項３から１１のいずれか一項に記載の装置。
【請求項１３】
前記処理回路は、前記シーケンス内で前記識別された命令に遭遇して前記分岐動作がトリガされた場合に、前記識別された命令も実行するように構成される、請求項１から１２のいずれか一項に記載の装置。
【請求項１４】
前記処理回路は、前記シーケンス内で前記識別された命令に遭遇して前記分岐動作がトリガされた場合に、前記識別された命令の実行を禁止するように構成される、請求項１から１３のいずれか一項に記載の装置。
【請求項１５】
前記分岐制御情報は、少なくとも前記識別された命令の表示を提供する分岐点データと、前記ターゲットアドレスの表示を提供するさらなるデータと、を含む、請求項２に従属する場合の請求項３から１４のいずれか一項に記載の装置。
【請求項１６】
前記分岐点データは、
前記識別された命令のアドレスを示すアドレスデータと、
前記識別された命令の直前の最後の命令のアドレスを示す終了データと、
前記分岐動作設定命令と前記識別された命令との間の距離を示すオフセットデータと、
命令の開始記憶アドレスを区別する前記メモリ記憶アドレスのビットの最下位ビットから始まる、前記識別された命令のメモリ記憶アドレスを示すビットの適切なサブセットと、
前記識別された命令の前に処理されるために残っている命令の数を示す残存サイズ命令データと、
前記識別された命令に達する前に処理されるために残っているプログラム記憶位置の数を示す残存サイズデータと、
のうちの１つまたは複数を含む、請求項１５に記載の装置。
【請求項１７】
処理回路によって実行される命令のシーケンス内の所定の命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェースと、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成するためのデコンプレッション回路と、
前記デコンプレッション回路に関連する分岐制御記憶装置と、
を含み、
前記デコンプレッション回路は、所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を前記分岐制御記憶装置内に格納し、
前記デコンプレッション回路は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出すると、その識別された命令を前記所定の命令の前記次の命令として扱うように構成される、装置。
【請求項１８】
前記デコンプレッション回路は、前記分岐動作設定命令によって識別され、前記識別された命令を決定するために使用される分岐点データを前記分岐制御情報として格納するように構成される、請求項１７に記載の装置。
【請求項１９】
前記デコンプレッション回路は、前記ターゲットアドレスが前記分岐動作設定命令内で指定された即時値から直接導出可能である場合に前記分岐制御情報として前記ターゲットアドレスを格納するようにさらに構成される、請求項１８に記載の装置。
【請求項２０】
前記デコンプレッション回路は、前記トレースストリーム内の非イベントトレース要素に応答して、その関連する分岐制御記憶装置内のエントリを無効にする、請求項１７から１９のいずれか一項に記載の装置。
【請求項２１】
前記デコンプレッション回路は、前記トレースストリーム内の無効化トレース要素に応答して、その関連する分岐制御記憶装置の内容を無効にする、請求項１７から２０のいずれか一項に記載の装置。
【請求項２２】
処理回路による命令実行を示すトレースストリームを生成する方法であって、
前記処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するステップであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、ステップと、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含む前記トレースストリームを生成するステップと、
前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成するステップと、
を含む方法。
【請求項２３】
処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するための入力インターフェース手段であって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェース手段と、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するためのトレース生成手段と、
を含み、
前記トレース生成手段はさらに、前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成する、装置。
【請求項２４】
処理回路による命令実行を示すために生成されたトレースストリームを処理する方法であって、
前記処理回路によって実行される命令のシーケンス内の所定の命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するステップであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、ステップと、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成するステップと、
所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納するステップと、
前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出した場合に、その識別された命令を前記所定の命令の前記次の命令として扱うステップと、
を含む方法。
【請求項２５】
前記処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェース手段であって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェース手段と、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成する手段と、
前記デコンプレッション手段に関連する分岐制御記憶手段と、
を含み、
前記デコンプレッション手段は、所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を前記分岐制御記憶手段内に格納し、
前記デコンプレッション手段は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出すると、その識別された命令を前記所定の命令の前記次の命令として扱う、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理システム内の処理回路の動作を示すトレースストリームを生成するための機構に関し、特に、そのような処理回路による命令実行を示すトレースストリームを生成し処理するための機構に関する。
【背景技術】
【０００２】
トレース回路を使用して、一連のトレース要素を含むトレースストリームを生成し、関連する処理回路の動作を決定するために、例えば処理回路によって実行される命令のシーケンスを決定するために、それらのトレース要素を後で解析することができる。トレースストリーム内のトレース情報の量を減らすために、トレース回路は、実行される各命令に対して別個のトレース要素を生成せずに、実行される特定の所定の命令に対してのみトレース要素を生成するように、例えば、実行された各分岐命令に対してトレース要素を生成するように構成することができる。所定の命令に関する情報から、解析回路はプログラムイメージを使用して実行された命令のシーケンスに関する情報を再構築しようとすることができる。
【０００３】
最近、新しいタイプの命令が提案されており、それは本明細書では分岐動作設定命令と呼ばれる。分岐動作設定命令は、その任意の命令に関連する通常の動作の代わりに、またはそれに加えて、その任意の命令に遭遇したときに分岐を発生させるために、分岐動作を任意の命令に効果的に関連付けることができる。
【０００４】
これは、トレース要素が特定の所定の命令に対してのみ生成される上述のトレースストリーム手法を使用して処理回路の実行動作をトレースしようとする場合に、重大な問題を引き起こす。特に、トレース機構は分岐命令ごとにトレース要素を生成するように構成することができるが、分岐動作設定命令の使用は任意の命令（トレース機構は分岐命令として認識しない）が命令フロー内で分岐を開始することを可能にし、これは、トレース回路によって生成されたトレースストリームから処理回路の命令実行動作を正しく決定するための解析回路の能力を乱すおそれがある。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本技術は、このような分岐動作設定命令が存在する場合に、信頼性のあるトレースを改善することを目的とする。
【課題を解決するための手段】
【０００６】
１つの例示的な構成では装置が提供され、装置は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するための入力インターフェースであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェースと、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、を含み、トレース生成回路は、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するようにさらに構成される。
【０００７】
別の例示的な構成では装置が提供され、装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェースと、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するためのデコンプレッション回路と、デコンプレッション回路に関連する分岐制御記憶装置と、を含み、デコンプレッション回路は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納し、デコンプレッション回路は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱うように構成される。
【０００８】
さらなる例示的な構成では、処理回路による命令実行を示すトレースストリームを生成する方法が提供され、本方法は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するステップであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、ステップと、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するステップと、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するステップと、を含む。
【０００９】
さらなる例示的な構成では装置が提供され、装置は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するための入力インターフェース手段であって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェース手段と、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するためのトレース生成手段と、を含み、トレース生成手段はさらに、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成する。
【００１０】
別の例示的な構成によれば、処理回路による命令実行を示すために生成されたトレースストリームを処理する方法が提供され、本方法は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するステップであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、ステップと、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するステップと、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納するステップと、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出した場合に、その識別された命令を所定の命令の次の命令として扱うステップと、を含む。
【００１１】
さらなる例示的な構成では、装置が提供され、装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェース手段であって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェース手段と、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成する手段と、デコンプレッション手段に関連する分岐制御記憶手段と、を含み、デコンプレッション手段は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶手段内に格納し、デコンプレッション手段は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱う。
【００１２】
単なる例として、添付の図面に示す本技術の実施形態を参照して本技術をさらに説明する。
【図面の簡単な説明】
【００１３】
【図１】一実施形態によるシステムのブロック図である。
【図２】一実施形態に従って使用されるトレースモジュールをより詳細に示すブロック図である。
【図３】一実施形態に従って使用されるトレース解析回路をより詳細に示すブロック図である。
【図４Ａ】一実施形態に従って図１のシステム内で使用することができる分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）の異なる形式を概略的に示す図である。
【図４Ｂ】一実施形態に従って図１のシステム内で使用することができる分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）の異なる形式を概略的に示す図である。
【図５】ゼロオーバーヘッドループの動作を概略的に示す図である。
【図６】一実施形態による、ゼロオーバーヘッドループを含む命令シーケンスの実行に関連するトレース要素を生成するためのトレースモジュールの動作を示す流れ図である。
【図７】一実施形態による、ゼロオーバーヘッドループの実行、および生成された関連するトレース要素を示す流れ図である。
【図８】分岐未来命令を含む例示的なプログラムシーケンスを示す図である。
【図９】一実施形態による、１つまたは複数の分岐未来命令を含む一連の命令の実行に関連するトレース要素を生成するためのトレースモジュールの動作を示す流れ図である。
【図１０】一実施形態による、命令ストリーム内で受信された各Ｅアトムに関連してトレースアナライザで実行されるデコンプレッション動作を示す流れ図である。
【図１１】一実施形態による、命令ストリーム内で受信された各Ｎアトムに関連してトレースアナライザで実行されるデコンプレッション動作を示す流れ図である。
【図１２】一実施形態による、処理要素のＢＴＡＣが無効にされるときに実行されるステップを示す流れ図である。
【図１３】一実施形態による、トレースストリーム内の非イベントパケットの受信時にトレースアナライザによって実行されるステップを示す流れ図である。
【図１４】一実施形態による、トレースが有効にされたと判定したときにトレースモジュールによって実行される一連のステップを示す流れ図である。
【図１５】図１４の方法に従って例外スタイルアトムを発行する必要があるときを評価するために使用することができる、トレースモジュール内の飽和カウンタベースの実施態様を示す流れ図である。
【発明を実施するための形態】
【００１４】
データ処理システム内の処理回路の動作をトレースし、それによって処理回路の段階的な動作を識別するために解析することができるトレース要素のストリームを生成することは、システムソフトウェア開発において非常に有用なツールである。トレースストリームは、例えば、処理回路によって実行されている命令のシーケンスのデバッグを容易にするために解析することができる。通常、トレース機構は処理回路を有するオンチップで提供され、そのようなオンチップトレース機構の例は、様々なＡＲＭプロセッサに関連して英国ケンブリッジのＡＲＭ社によって提供される組み込みトレースマクロセル（ＥＴＭ）である。そのようなトレース機構は潜在的に大量のトレース要素を生成する可能性があり、それはその後さらなる解析のためにチップ外に提供される必要がある。生成されるトレース情報の量を減らしながら、処理回路の段階的な動作を後で解析することを可能にするために、多くの技術が開発されてきた。
【００１５】
前述のように、生成されるトレース情報の量を減らすための１つの技術は、処理回路によって実行される命令シーケンス内の特定のタイプの命令についてのトレース要素だけを出力することを含み、トレース解析回路は、それら特定の命令の実行に関する情報から処理回路の段階的な命令実行動作を再構築することができる。一例として、トレース回路は、命令フロー変更命令（通常は分岐命令）が処理されるたびにトレース要素を出力し、その分岐が実行されたか否かを示し、解析回路は、トレース要素が生成された命令間で、処理回路によってどの命令が実行されたかを推定することができる。
【００１６】
しかし、前述の分岐動作設定命令は命令シーケンス内に現れる場合がある。分岐動作設定命令を実行することにより、分岐動作設定命令によって識別された別の命令（本明細書では「識別された命令」と呼ぶ）に分岐動作を関連付けることができ、この分岐動作によって、命令シーケンス内で識別された命令に遭遇したときに処理回路を分岐動作設定命令によって識別されたターゲットアドレスへ分岐させる。したがって、分岐動作設定命令は、任意の命令を効果的に分岐に変更することができる。
【００１７】
前述のように、これは、トレース要素が特定の所定の命令に対してのみ生成される上述のトレースストリーム手法を使用して処理回路の実行動作をトレースしようとする場合に、重大な問題を引き起こす。説明した実施形態はこれらの問題を軽減することを目的としており、分岐動作設定命令を含む命令シーケンスにも対応しながら、上述した低減された量のトレースストリーム手法を採用し続けることを可能にする。
【００１８】
添付の図面を参照して実施形態を説明する前に、以下の実施形態の説明を提供する。
【００１９】
一実施形態では、処理回路によって実行される命令のシーケンスを示す命令実行情報を関連する処理回路から受信するための入力インターフェースと、命令実行情報から、そのシーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、を含む装置が提供される。命令のシーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含むことができる。分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする。
【００２０】
さらに、トレース生成回路は、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するように構成される。トレースストリーム内のこれらの追加のトレース要素により、これはトレースアナライザにとって効率的な機構を提供し、トレースアナライザはその後トレースストリームを受信して処理回路によって実行される命令のシーケンスを決定する。特に、トレースストリーム内でこの追加情報が提供されると、トレースアナライザは、分岐動作設定命令の実行によって分岐動作が識別された命令に関連付けられたときを判定することができ、したがって、命令シーケンス内で命令フローの変更が生じる各時点を決定するためにトレース要素のシーケンスを正しく解釈することが可能である。
【００２１】
一実施形態では、分岐動作設定命令の実行によって分岐動作が識別された命令に関連付けられると、処理回路は、その識別された命令についての分岐制御情報を分岐制御記憶装置内に格納するように構成される。次に、トレース生成回路は、その識別された命令についての分岐制御情報が分岐制御記憶装置内に格納される時に、シーケンス内で識別された命令に遭遇したことにより分岐が発生したことを命令実行情報が示す場合に、分岐動作がトリガされたことを示すトレース要素を生成するように構成される。したがって、識別された命令に遭遇した時点で識別された命令に関連する分岐制御情報が依然として分岐制御記憶装置内に存在し、それが分岐の発生をもたらす場合には、トレース生成回路は、分岐動作がトリガされたことを示すトレース要素を生成することができ、トレースアナライザは、識別された命令に遭遇したときに発生した命令フローの変更を後で判定することができる。
【００２２】
一実施形態では、識別された命令に遭遇した時点で、分岐制御記憶装置内に対応する分岐制御情報がもはやない場合には、これは分岐動作が処理回路内でトリガされないことを意味しており、したがって、トレース生成回路は、分岐動作がトリガされたことを示すトレース要素を生成しない。いくつかの実施形態では、分岐動作設定命令のタイプに応じて、分岐制御記憶装置の内容が無効になったときに、トレース生成回路はトレースストリーム内に１つまたは複数の追加のパケットを発行するように構成することができるので、そのような状況においてトレースアナライザが処理回路の動作を正しく追跡することが可能になる。
【００２３】
分岐動作設定命令は様々な形態を取ることができる。一実施形態では、分岐動作設定命令はプログラムループ本体の終了時のループ終了命令であり、識別された命令はプログラムループ本体内の直前の命令であり、ターゲットアドレスは、プログラムループ本体の開始時の命令のアドレスである。次に、トレース生成ユニットは、直前の命令についての分岐制御情報が分岐制御記憶装置内に格納される時に、直前の命令に遭遇したことにより分岐が発生したことを命令実行情報が示すたびに、分岐動作がトリガされたことを示すトレース要素を発行するように構成される。
【００２４】
そのようなループ終了命令は、いわゆる「ゼロオーバーヘッドループ」を実施するために使用することができ、そこでは、ループの各反復中にループ終了命令を実行する必要がなく、代わりに、最初の反復に続いて、プログラムループ本体の最後から２番目の命令に遭遇したときに、さらに反復するために必要な分岐をトリガすることができる。トレース生成ユニットに上述の方法でトレース要素を生成させることによって、解析回路は、そのようなゼロオーバーヘッドループの処理回路の実行を正しく追跡することが可能になる。
【００２５】
一実施形態では、分岐動作は、その直前の命令についての分岐制御情報が分岐制御記憶装置内に格納されているときに直前の命令に遭遇しただけでは必ずしもトリガされない。代わりに、それに加えて、その時点でプログラムループ本体の少なくとも１回のさらなる反復が必要であることを決定することも必要であり、その後にだけ分岐動作がトリガされる。したがって、そのような条件下でのみ、トレース生成ユニットは、分岐動作がトリガされたことを示すトレース要素を発行する。一実施形態では、その場合に分岐動作がトリガされない場合には、その時点でトレース生成ユニットがトレース要素を発行する必要はない。
【００２６】
一実施形態では、ループ終了命令の実行によって、分岐動作が常に直前の命令に関連付けられるとは限らない。ループ終了命令の実行により分岐動作が直前の命令に関連付けられた場合に、処理回路はターゲットアドレスに分岐するように構成され、トレース生成回路は、ループ終了命令の実行動作として実行された分岐を示すトレース要素を発行するように構成される。逆に、ループ本体のさらなる反復が必要とされない場合に、ループ終了命令の実行によって処理回路がプログラムループ本体から抜けて、トレース生成回路は、ループ終了命令の実行動作として実行されなかった分岐を示すトレース要素を発行するように構成される。
【００２７】
一実施形態では、アトムの形式のトレース要素をこの目的のために使用することができ、ループ終了命令の実行によって分岐動作が直前の命令に関連付けられた場合に、Ｅアトムをそのループ終了命令の実行に関連して発行することができるが、そうでなければ、Ｎアトムをループ終了命令の実行に関連付けることができる。
【００２８】
一実施形態では、プログラムループ本体のさらなる反復が依然として要求されている間にイベントが直前の命令についての分岐制御情報を分岐制御記憶装置内で無効化させる場合に、直前の命令の次の遭遇時には分岐動作はトリガされない。しかしながら、処理回路は、ループ終了命令の次の実行に応答して分岐動作を直前の命令に再関連付けて、ターゲットアドレスへの分岐を実行し、それによってプログラムループ本体のさらなる反復の処理を再開する。次に、トレース生成回路は、ループ終了命令の実行動作として実行された分岐を示すさらなるトレース要素を発行するように構成される。
【００２９】
したがって、そのような実施形態では、プログラムループ本体の１つまたは複数の残りの反復が依然として必要とされる間の分岐制御記憶装置の内容の無効化は、トレースの観点からは問題を引き起こさない。なぜなら、ループ終了命令の後続の実行によって分岐動作が直前の命令に再関連付けられるからである。トレースアナライザは、この場合、ループ本体内で直前の命令に遭遇したときに実行された分岐と、ループ終了命令の再実行により実行された分岐と、を区別できないが、これは問題にはならない。それは、トレースアナライザが、発行されたトレース要素からプログラムループ本体の各反復の実行を引き続き正しく追跡するからである。
【００３０】
説明した実施形態によってサポートすることができる別のタイプの分岐動作設定命令は、分岐未来命令である。命令シーケンスは、前述のループ終了命令の形式の分岐動作設定命令のみ、分岐未来命令の形式の分岐動作設定命令のみを含むことができ、または、命令シーケンス内にループ終了命令と分岐未来命令の両方が混在していてもよい。
【００３１】
分岐動作設定命令が分岐未来命令である場合に、識別された命令はシーケンス内で分岐未来命令に続く命令である。分岐未来命令は、識別された命令として任意の命令を指定することができる。そのような実施形態では、分岐未来命令の実行により分岐動作が識別された命令に関連付けられる場合に、トレース生成回路は、分岐未来命令の実行動作として、分岐動作が関連付けられたことを示すトレース要素を発行するように構成される。逆に、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられない場合に、トレース生成回路は、分岐未来命令の実行動作として、分岐動作が関連付けられていないことを示すトレース要素を発行するように構成される。そのような手法により、各分岐未来命令の実行動作をトレースストリーム内で捕捉することができ、したがって、トレースアナライザが、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられたかどうかを判定することができる。
【００３２】
分岐未来命令の実行によって分岐動作が識別された命令に関連付けられない理由はいくつかある。例えば、特定の条件が満たされた場合にのみ分岐動作が識別された命令に関連付けられるように、分岐未来命令を条件付きのものに構成することができる。さらに、いくつかの実施形態では、分岐未来機能を選択的に無効にすることが可能であり、その結果、遭遇した分岐未来命令によって分岐動作が識別された命令に関連付けられない。
【００３３】
分岐未来命令の実行動作を識別するためにトレース生成回路によって発行されるトレース要素の形式は、様々な形式を取ることができる。しかしながら、一実施形態では、実行された分岐と実行されなかった分岐を示すために使用されるトレース要素は、この目的のために再利用される。特に、一実施形態では、トレース生成回路は、分岐動作が関連付けられたことを示すトレース要素として、実行された分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成され、トレース生成回路は、分岐動作が関連付けられていないことを示すトレース要素として、実行されていない分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成される。したがって、特定の一実施形態では、前述のＥアトムおよびＮアトムをこの目的に使用することができる。
【００３４】
一実施形態では、１つの分岐未来命令の実行によって、以前の分岐未来命令に関連する分岐制御記憶装置内のアクティブエントリを上書きすることが可能である。そのような状況では、トレース生成回路は、その事実を識別するためのさらなるトレース要素をトレース解析回路に発行するように構成することができる。特に、一実施形態では、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられ、かつ、分岐制御記憶装置内に処理回路によって格納されたその識別された命令についての分岐制御情報が、以前に実行された分岐未来命令の識別された命令に関連するアクティブ分岐制御情報を上書きする場合に、トレース生成回路は、非イベントトレース要素を発行するように構成される。次に、トレースアナライザは、その以前の分岐未来命令の識別された命令に関連して分岐が発生しないことを識別するために、非イベントトレース要素に応答してその内部保持レコードを更新するように構成することができる。一実施形態では、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられたことを示すために発行されるトレース要素に先立って、非イベントトレース要素がトレースストリーム内で発行される。
【００３５】
一実施形態では、分岐制御記憶装置内で使用される置換方針がトレースアナライザに知られており、かつ、エントリが上書きされることがトレースストリーム内の他のトレース要素から決定的である場合には、トレースストリーム内で非イベントトレース要素を個別に発行する必要がない場合もある。
【００３６】
一実施形態では、分岐未来命令の実行とシーケンス内の識別された命令の遭遇との間の命令実行の時点でトレースが可能になる場合に、トレース生成回路は、識別された命令に遭遇したときに実行された分岐に応答して、識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行する。
【００３７】
したがって、この特別な形式のトレース要素は、直前の分岐未来命令の実行動作もトレースされるようにトレースが十分に早く有効にされたときに識別された命令に遭遇したときに発行される前述のトレース要素よりも多くの情報を取り込む必要がある。なぜなら、識別された命令を明確に識別し、その識別された命令に遭遇したときに実行された分岐を完全に識別するために、トレース要素内に十分な情報を提供する必要があるからである。したがって、一実施形態では、そのトレース要素は、識別された命令のアドレスとターゲットアドレスを識別する必要がある。これはトレース帯域幅に関して比較的高価であるが、そのようなトレース要素の使用が非常に頻繁に必要とされることはほとんどないと理解されよう。なぜなら、ほとんどの場合、トレースは分岐未来命令の実行とシーケンス内の関連する識別された命令の遭遇との間のある時点で有効にされないことが予想されるからである。一実施形態では、既存のタイプのトレース要素フォーマット、すなわち命令実行中に発生する例外に関する情報を提供するために既に使用されているトレース要素のフォーマットをこの特別なトレース要素に使用することができる。
【００３８】
トレース生成回路が、分岐未来命令の実行と識別された命令の遭遇との間の命令実行の時点でトレースが可能にされた状況を判定することができるいくつかの方法がある。一実施形態では、トレース生成回路は、分岐未来命令の識別された命令に関連する分岐制御記憶装置内の各エントリに関連してカウンタ値を維持するように構成され、識別された命令に遭遇して分岐が発生したときに、分岐制御記憶域内の関連するエントリのカウンタ値に予期しない値がある場合に、トレース生成回路は、識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行するように構成される。
【００３９】
特定の一実施形態では、（一実施形態ではＥアトムを発行することによって）識別された命令に分岐動作が関連付けられたことを分岐未来命令が示すためのトレース要素をトレース生成回路が発行するときに、カウンタをインクリメントすることができ、また、識別された命令に対して分岐が続いて実行されたことが検出されたときにデクリメントすることができる。したがって、識別された命令に遭遇して分岐が実行された時点でカウンタの値がゼロ以外になることが予想されるが、代わりにそれがゼロである場合には、一実施形態では、これは前述の例外形式のパケットが代わりにトレース生成回路によって発行されるべきであることを示すために使用される。
【００４０】
一実施形態では、様々なイベントが、分岐制御記憶装置内の分岐制御情報を無効にすることがある。例えば、一実施形態では、例外が処理回路によって実行されると、分岐制御記憶装置の現在の内容が無効にされる。このような状況では、トレース生成回路は、トレースストリーム内に無効化トレース要素を発行して、トレースアナライザが分岐制御記憶装置の内容がいつ無効にされたかを後で判定できるように構成することができる。しかしながら、他の実施形態では、トレースアナライザは、分岐制御記憶装置の内容がトレースストリーム内で発行された他のパケットから無効にされたと判定することができるので、特別な無効化トレース要素を発行する必要はない。例えば、他の理由で、分岐制御記憶装置の内容が無効にされたときに別のパケットが発行されることがあり、トレースアナライザはそのパケットから分岐制御記憶装置の内容が無効にされたことを判定することができる。特定の例として、割り込みに遭遇すると割り込みパケットを発行することができ、トレースアナライザは割り込みパケットの存在から分岐制御記憶装置の内容が無効にされるであろうことを決定するように構成されてもよい。
【００４１】
シーケンス内で識別された命令に遭遇して分岐動作がトリガされると、一実施形態では、処理回路が分岐動作をトリガすることに加えて、識別された命令を依然として実行するように構成することができるが、代替的な実施形態では、それは単に分岐動作をトリガするが、識別された命令自体の実行を禁止することができる。したがって、後者の場合、分岐動作は識別された命令の通常の実行動作を効果的に置き換える。
【００４２】
分岐制御記憶装置内に記憶された分岐制御情報は、様々な形態を取ることができるが、一実施形態では、識別された命令の表示を提供する少なくとも分岐点データ、およびさらにターゲットアドレスの表示を提供するデータを含む。分岐点データは様々な形態を取ることができるが、識別された命令が決定されることを可能にし、したがってその識別された命令が処理回路によっていつ遭遇されたかを検出するのに十分である。
【００４３】
一実施形態では、分岐点データは、識別された命令のアドレスを示すアドレスデータと、識別された命令の直前の最後の命令のアドレスを示す終了データと、分岐動作設定命令と識別された命令との間の距離を示すオフセットデータと、命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットから始まる、識別された命令のメモリ記憶アドレスを示すビットの適切なサブセットと、識別された命令の前に処理されるために残っている命令の数を示す残存サイズ命令データと、識別された命令に達する前に処理されるために残っているプログラム記憶位置の数を示す残存サイズデータと、のうちの１つまたは複数を含むことができる。
【００４４】
これらの様々なオプションは、識別された命令が命令シーケンス内でいつ到達されたかを判定するための機構を提供することが理解されよう。
【００４５】
さらなる実施形態では、トレース解析機能を実行するための装置を提供することができる。特に、そのような装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースを含むことができ、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする。装置は、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するためのデコンプレッション回路をさらに含む。分岐制御記憶装置はデコンプレッション回路に関連している。デコンプレッション回路は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも１つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納する。さらに、デコンプレッション回路は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱うように構成される。
【００４６】
したがって、所定の命令が分岐命令である例を考えると、分岐動作設定命令自体が分岐命令ではない場合であっても、実際には、識別された命令自体は分岐命令でなくてもよく、デコンプレッション回路と関連して分岐制御記憶装置を使用することにより、デコンプレッション回路は、処理回路が分岐動作を識別された命令に関連付けたときを検出することができ、プログラムイメージ内でその識別された命令に遭遇したときを検出することができる。その時点で、識別された命令を分岐命令であるかのように扱うことができる。したがって、これにより、実行されている命令シーケンスが１つまたは複数の分岐動作設定命令を含む場合であっても、処理回路によって実行される特定の命令についてのトレース要素のみを生成するトレースストリームの生成をトレース解析回路によって正しく解析することが可能になり、したがって、任意の命令を分岐に変えることができる。
【００４７】
デコンプレッション回路は、プログラムイメージをトラバースするときに遭遇する各分岐動作設定命令についてその関連する分岐制御記憶装置にエントリを作成するように構成されてもよいが、一実施形態では分岐未来命令についてのみこれを行うが、前述のループ終了命令については行わない。特に、一実施形態では、デコンプレッション回路は、処理回路の命令実行動作を正しく追跡するために、ループ終了命令とそのループ終了命令によって指定される識別された命令（すなわちプログラムループ本体内の直前の命令）とを区別する必要がなく、したがって、識別された命令について、デコンプレッション回路の関連する分岐制御記憶装置にエントリを作成する必要はない。
【００４８】
デコンプレッション回路に関連した分岐制御記憶装置内に格納された情報は種々の形式を取ることができる。一実施形態では、デコンプレッション回路は、分岐動作設定命令によって識別され、識別された命令を決定するために使用される分岐点データを分岐制御情報として格納するように構成される。さらに、一実施形態では、デコンプレッション回路は、ターゲットアドレスが分岐動作設定命令内で指定された即時値から直接導出可能である場合に分岐制御情報としてターゲットアドレスを格納するように構成される。したがって、そのターゲットアドレスが即時値から直接導出可能である場合には、デコンプレッション回路はプログラムイメージからターゲットアドレスを決定し、したがってそのローカル分岐制御記憶装置内でターゲットアドレスを取り込むことができる。これにより、識別された命令に後で遭遇したときにプログラムイメージ内のどこに分岐するかを直接決定することができる。代わりにターゲットアドレスが直接識別できない場合には、一実施形態では、トレースストリームはターゲットアドレスを直接識別する情報を含み、したがって、デコンプレッション回路がトレースストリーム内に提供された情報からターゲットアドレスを決定することが可能である。
【００４９】
一実施形態では、デコンプレッション回路は、前述の非イベントトレース要素または無効化トレース要素に応答するように構成することもでき、これらのトレース要素は任意選択的に使用される。特に、デコンプレッション回路は、トレースストリーム内の非イベントトレース要素に応答してその関連する分岐制御記憶装置内の特定のエントリを無効にするように構成することができる。同様に、無効化トレース要素に応答して、デコンプレッション回路は、それに関連する分岐制御記憶装置の内容を無効にするように構成することができる。
【００５０】
次に、特定の実施形態について図面を参照しながら説明する。
【００５１】
図１は、監視対象回路１０、トレースモジュール２０、トレースバッファ３０、およびトレースアナライザ４０を提供する、一実施形態によるシステムを概略的に示す。図１はトレースバッファ３０を提供するシステムを示しているが、代替的な実施形態では、トレースモジュール２０はトレースバッファを介さずにその出力をトレースアナライザ４０に直接渡すことができる。トレースモジュール２０は、一連のトレース要素を含むトレースストリームを生成するように構成されており、これにより、トレースアナライザは監視対象回路１０の動作を再構成することができる。監視対象回路１０は様々な形態を取ることができるが、一実施形態では、一連の命令を実行するように構成された少なくとも１つの処理要素、例えばプロセッサコアを含む。監視対象回路は、監視対象回路上で実行されている命令を示す命令実行情報をトレースモジュール２０に出力する。
【００５２】
トレースモジュールは、一実施形態ではオンチップで具体化され、例えば英国ケンブリッジのＡＲＭ社によって製造されたＥＴＭ回路の形態を取ることができ、一連のトレース要素を提供するトレースストリームを生成するように構成され、トレース要素は命令シーケンス内の所定の命令の実行を示す。したがって、監視対象回路によって実行される各命令を表すトレース要素を生成するのではなく、トレースストリーム内のトレース要素は、特定の所定の命令の実行のみを示しており、トレースアナライザには、トレース要素が提供されるそのような所定の各命令間で実行された命令についての情報を再構築することを可能にするのに十分な知識が（例えばプログラムイメージを介して）提供される。例えば、一実施形態では、トレースモジュールは、シーケンス内で実行される命令フロー変更命令（通常は分岐命令）ごとにトレース要素を生成するように構成することができ、そのトレース要素は分岐が実行されたか否かについての情報を提供し、トレースアナライザ４０には、分岐命令の処理に関する情報に基づいて、実行された実際の命令シーケンスを決定することを可能にするためのプログラムイメージが提供される。これにより、著しく減少した量のトレース要素を生成することが可能になる。トレースアナライザ４０は通常チップ外で具体化されるので、これは非常に有用であり、したがってトレースストリームはチップのピンを介してアナライザにルーティングされる必要がある。
【００５３】
監視対象回路によって実行される命令シーケンスは、１つまたは複数の分岐動作設定命令を含むことができる。分岐動作設定命令は、分岐動作設定命令によって明示的または暗黙的に識別される任意の命令に分岐動作を関連付けることができ、その識別された命令に後で遭遇したときに、これにより、監視対象回路は、（識別された命令によって要求される機能を実行する代わりに、またはそれに加えて）分岐動作設定命令によって識別されたターゲットアドレスに分岐することができる。この動作をサポートするために、監視対象回路は関連する分岐制御記憶装置を有することができ、一実施形態では、これは１つまたは複数のエントリを有する分岐ターゲットアドレスキャッシュ（ＢＴＡＣ）の形態を取る。
【００５４】
分岐動作設定命令が実行されると、これによりエントリをＢＴＡＣに割り当てることができ（分岐動作設定命令のタイプに応じて、エントリを割り当てるべきかどうかを判定するために評価を行うことができる）、そのエントリは、その識別された命令に遭遇したときに処理回路が分岐すべきアドレスを識別するターゲットアドレスと共に、分岐未来命令によって示される識別された命令のアドレスをソースアドレスとして記録する。一実施形態では、上記の方法でＢＴＡＣのポピュレーションを引き起こす分岐動作設定命令の実行に続いて、例えば、そのプログラムカウンタがＢＴＡＣのエントリのうちの１つに保持されているソースアドレスに対応する値に更新された、または更新されようとしていることを検出することにより、処理回路がそのＢＴＡＣのエントリの１つにヒットを検出した場合に、ＢＴＡＣのそのエントリにも取り込まれているターゲットアドレスに命令フローを分岐させるように構成することができる（後でより詳細に説明するように、分岐動作設定命令のタイプに応じて、分岐の成立は、他にも存在する条件を条件とすることができる）。
【００５５】
このような手法により、分岐動作設定命令を用いて任意の命令を効果的に分岐させることができることがわかる。その識別された命令の形式は重要ではない、というのは、上述の方法で分岐動作設定命令によって識別されると、その後その識別された命令に遭遇すると処理回路は分岐動作設定命令によって識別される分岐を実行するように構成できるからである。分岐動作設定命令は、必要に応じて条件付きで実行することができる。したがって、分岐動作設定命令の実行条件が満たされると、上述した処理が行われ、そして、識別された命令にその後遭遇したときに、（識別された命令を実行することに加えて、またはその代わりに）監視対象回路はターゲットアドレスへの分岐を実行することができる。逆に、分岐動作設定命令を実行する時点で条件が満たされなければ、分岐動作設定命令は実行されず、そしてやがて、識別された命令はその識別された命令によって指定された機能を実行するためにその通常の方法で実行される。
【００５６】
そのような分岐動作設定命令の使用は、監視対象回路１０によって実行することができる動作に著しい柔軟性を追加するが、トレース要素が監視対象回路によって実行されているシーケンス内の特定の所定の命令に対してのみ生成される、前述のタイプのトレースストリームを生成するようにトレースモジュールが構成されている場合には、それはトレースモジュール２０にとって重大な問題を引き起こす。特に、実行される命令フロー変更命令ごとにトレース要素を生成するようにトレースモジュールが設定されている場合には、その識別された命令はそれ自体分岐命令ではない可能性があるので、通常、分岐動作設定命令によって分岐の原因としてフラグが立てられた識別された命令のトレース要素は生成されない。トレースストリームがそのような分岐が起こったことに対して正しくフラグを立てないならば、トレースアナライザは監視対象回路によって実行された命令のシーケンスを正しく推定できないことが理解されよう。
【００５７】
例外発生時の情報をトレースするのと同じ方法で、監視対象回路のＢＴＡＣ内のエントリによってフラグが立てられた識別された命令に到達した結果として発生する分岐をトレースするようにトレース生成回路を構成することができる。しかし、識別された命令のアドレスと分岐先のターゲットアドレスの両方をトレースする必要があるため、トレース帯域幅の点でコストがかかり、したがって、トレースストリームフォーマットの効率を大幅に低下させる可能性がある。
【００５８】
さらに後述するように、分岐動作設定命令の従前の実行により、監視対象回路のＢＴＡＣ内のエントリと一致する識別された命令に遭遇したために監視対象回路内で発生する分岐をトレース生成回路が効率的にトレースできるようにする機構が提供される。
【００５９】
図２は、一実施形態のトレースモジュール２０を示すブロック図である。図示するように、トレースモジュール２０は処理要素５０に結合され、それは一実施形態では監視対象回路１０の少なくとも一部を形成する。処理要素５０は、分岐動作設定命令の実行に基づいて取り込まれる分岐制御情報を維持する関連するＢＴＡＣ５５を有する。ＢＴＡＣ５５は１つまたは複数のエントリを有し、処理要素５０が分岐動作設定命令を実行すると、分岐動作設定命令の実行が前述の分岐動作を識別された命令に関連付けるべきであることを示すならば、ＢＴＡＣ５５内のエントリの１つは特定の分岐制御情報で占められる。
【００６０】
図４Ａに示すような一実施形態では、ＢＴＡＣ５５内の各エントリは、分岐動作設定命令によって示される識別された命令のアドレスが取り込まれるソースアドレスフィールド１５５と、分岐動作設定命令によって識別されるターゲットアドレスが格納されるターゲットアドレスフィールド１６０と、を含むことができる。一方、一実施形態では、フィールド１５５は識別された命令のアドレスを格納し、より一般的にはフィールド１５５は前述の形式のいずれかを取り得る分岐点データを格納するが、命令ストリーム内で識別された命令に遭遇したときを処理要素が検出できるようにするのに十分である。ＢＴＡＣ５５のエントリの１つにおいてヒットが検出されると、識別された命令が命令ストリーム内で発生したことを示し、次に、他の必要条件がすべて満たされていると仮定すると、（識別された命令を実行することに加えて、またはその代わりに）処理要素は関連するターゲットアドレスフィールド１６０内のターゲットアドレスに分岐する。
【００６１】
一実施形態では、複数のタイプの分岐動作設定命令をサポートすることができ、各エントリが関連付けられている分岐動作設定命令のタイプを識別するために各ＢＴＡＣエントリ５５内にフィールド１６５が設けられる。次に、分岐動作を呼び出すべきかどうかを判定するために、ＢＴＡＣ内でヒットが検出された特定のエントリについてそのフィールド１６５を参照するように分岐およびループ制御回路５８を設けることができる。
【００６２】
一実施形態では、第１のタイプの分岐動作設定命令がサポートされており、これは、本明細書では分岐未来命令と呼ばれる。分岐未来命令を実行する場合に、識別された命令は、分岐未来命令を実行した後のある時点で処理回路が命令シーケンス内で遭遇する任意の命令であってもよい。分岐未来命令の実行は条件付きにすることができ、実際、いくつかの実施形態では後方互換性の理由で分岐未来機能を無効にすることが可能であってもよい。しかし、分岐未来命令が実行されると仮定すると、ＢＴＡＣ５５内のエントリのうちの１つが上述のように取り込まれる。その後に、命令ストリーム内で識別された命令に遭遇すると、ＢＴＡＣ５５内の対応するエントリが依然として存在するという条件でこれにより、分岐およびループ制御回路５８は分岐動作を呼び出すべきであると判定し、その結果、処理要素５０は、ＢＴＡＣ５５のそのエントリにおいて識別されたターゲットアドレスに分岐する。この時点で、分岐およびループ制御回路５８はそのＢＴＡＣエントリを無効にすることができる。
【００６３】
一実施形態でサポートすることができる第２のタイプの分岐動作設定命令は、プログラムループ内の最終命令として使用されるゼロオーバーヘッドループ終了（ＺＯＬＥ）命令である。それは、識別された命令としてループ内の直前の命令を識別し、ターゲットアドレスとしてプログラムループの開始位置のアドレス表示を識別するように構成することができる。最初の反復では、プログラムループの少なくとも１回のさらなる反復が必要とされるならば、ＢＴＡＣ５５内のエントリを埋めるようにＺＯＬＥ命令を構成し、次いでプログラムループの開始位置に分岐するように構成することができる。後続の各反復において、識別された命令（すなわちプログラムループの最後から２番目の命令）に遭遇すると、対応するエントリがＢＴＡＣ５５内に依然として存在し、実行するプログラムループの少なくとも１回のさらなる反復が依然としてあることを条件として、分岐およびループ制御回路５８は、上述の分岐動作を呼び出すべきであると判定して、その最後から２番目の命令を実行することに加えて、処理要素５０をプログラムループの開始位置に分岐させる。これにより、プログラムループの実行のパフォーマンスが大幅に向上する。やがて、ループの最後の反復中に識別された命令に遭遇したときに、関連するＢＴＡＣエントリがまだ占有されている場合には、分岐およびループ制御回路５８はそのＢＴＡＣエントリを無効にし、分岐動作を呼び出さないことを決定できる。
【００６４】
処理要素５０が命令シーケンスを実行すると、それがトレース生成回路６０に転送されるところからトレースモジュール２０の入力インターフェース６５に命令実行情報を渡す。一実施形態では、この命令実行情報は、分岐動作設定命令の実行動作を識別する情報（その命令の実行によってＢＴＡＣ５５内にエントリが作成されたかどうかを判定するのに十分である）を含み、ＢＴＡＣエントリの１つにヒットしたために分岐がいつ発生したかを識別する情報を含む。
【００６５】
一実施形態では、ＢＴＡＣ５５内の各エントリは、ターゲットアドレスが直接ターゲットアドレスであるか、すなわち（例えば、分岐動作設定命令内の即時値として提供されることによって）分岐動作設定命令から直接決定可能であるか、あるいは、例えば、分岐動作設定命令がターゲットアドレスを導出するためにその内容が使用されているレジスタを識別する場合に間接ターゲットアドレスであるか、に関する情報を取り込むための追加のフィールドを有することができ、この情報は、処理要素５０によってトレース生成回路６０に提供される命令実行情報内に提供することができ、ＢＴＥＣ５５内でのヒットによる分岐が発生したときにトレースストリーム内にどのような情報を含めるべきかを決定するときにトレース生成回路６０によって使用される。
【００６６】
一実施形態では、トレース生成回路６０は、命令シーケンス内で分岐命令が実行されるときはいつでもそのトレースストリーム内のトレース要素を出力するように構成される。そのトレース要素はまた分岐が実行されたか否かを示し、これは入力インターフェース６５を介して処理要素５０から受信した命令実行情報から導出可能である。トレース要素のストリームは、その後に、前方への伝播のために出力インターフェース７０を介してトレースバッファ３０および／またはトレースアナライザ４０に転送される。そのような各トレース要素は、本明細書では「アトム」、分岐が実行されたことを示す「Ｅアトム」、および分岐が実行されなかったことを示す「Ｎアトム」とも呼ぶことがある。
【００６７】
さらに、トレース生成回路６０は、各分岐動作設定命令の実行動作を示すトレース要素を発行するように構成される。そのようなトレース要素の目的は、その分岐動作設定命令の実行によってエントリがＢＴＡＣ５５内に取り込まれたかどうかを判定するために解析回路４０に十分な情報を提供することである。以前のＺＯＬＥ命令の例を考えると、これは実際には分岐命令そのものであり、分岐がプログラムループの先頭に処理を戻すために行われる場合には、これはＺＯＬＥ命令の実行によってＢＴＡＣ５５においてエントリが生成された状況を示す。逆に、分岐が実行されない場合には、ＢＴＡＣ５５にはエントリは生成されない。したがって、その場合、ＺＯＬＥ命令の分岐動作に応じてＥアトムまたはＮアトムを発行すれば十分である。
【００６８】
分岐未来命令の場合、一実施形態では、これはそれ自体分岐命令ではないが、分岐未来命令の実行によりエントリがＢＴＡＣ５５に正常に登録される場合にはトレース生成回路６０によってＥアトムが発行され、そうでなければＮアトムが発行されるようにトレース機構を構成することができる。
【００６９】
さらに、トレース生成回路６０は、処理要素のＢＴＡＣ５５におけるヒットのために分岐が生じたときに命令実行情報に基づいて検出するように構成される。その場合、トレース生成回路はまた、トレースストリーム内にターゲットアドレスへの分岐が発生したことを示すトレース要素を発行する（一実施形態ではＥアトムを発行することによって）。トレースアナライザ４０がターゲットアドレスを決定することができるので、ターゲットアドレス自体が分岐動作設定命令から直接推論できる場合には、ターゲットアドレス自体はトレースストリーム内で識別される必要はない。しかし、ターゲットアドレスが直接推論できない場合には、トレース生成回路６０は処理要素５０によって提供された情報からターゲットアドレスを決定し、そのターゲットアドレスをトレースストリーム内に出力し、そのターゲットアドレスをトレースアナライザ４０が使用することができる。
【００７０】
図１５を参照して後でより詳細に説明するように、一実施形態では、トレースモジュール２０は、ＢＴＡＣ５５の各エントリに対して飽和カウンタを維持するためのカウンタ回路６２を含むことができ、これは、分岐未来命令が実行される時点と、対応する識別された命令が命令シーケンス内で遭遇する時点との間にトレースが有効になっている状況を検出するために使用することができる。
【００７１】
図３は、一実施形態のトレースアナライザ４０を概略的に示す図である。トレースアナライザ４０はその入力インターフェース１０５でトレースストリームを受信し、そこからその情報がデコンプレッサ回路１００に転送される。デコンプレッサ回路１００は、監視対象回路によって実行されるプログラムコードのコピーを提供するプログラムイメージ１１０へのアクセスを有する。デコンプレッサ回路１００は、プログラムイメージ内の現在のアドレスを追跡し（現在のアドレスは、トレースがオンにされたとき、または専用トレース情報などにより、所定の時点で所定の初期値に設定される）、新しいアトムが受け取られるたびに、それはプログラムイメージ内の特定のタイプの次の命令、例えば、トレースストリーム内の各トレース要素が分岐命令の実行を示す上記の例の分岐命令に到達するまでプログラムイメージをトラバースする。デコンプレッサ回路は、現在のアドレスとその次の所定の命令のアドレスとの間で実行された各命令に関する情報をプログラムイメージから抽出し、その実行情報のすべてを解析のために解析回路１２０に出力する。プログラムイメージ内でその次の所定の命令に遭遇すると、その遭遇した分岐のターゲットアドレスに基づいて現在のアドレスが更新され、その結果、次のアトムがトレースストリーム内で受け取られると、同じプログラムイメージのトラバース処理が再び開始することができて、新しい現在のアドレスから開始する。
【００７２】
前述のように、標準の分岐命令に加えて、トレースストリームは、処理要素５０が分岐動作設定命令を実行したとき、および処理要素５０が遭遇した分岐動作設定命令によって示される識別された命令によりターゲットアドレスへの分岐が生じたことをトレース要素２０が検出したときに、トレースモジュール２０によって挿入されたトレース要素も含む。そのような場合にデコンプレッサ回路１００がプログラムイメージの適切なトラバースを実行することを可能にするために、デコンプレッサ回路はまた、図３においてデコンプレッサＢＴＡＣ１１５と呼ばれる、関連するローカルＢＴＡＣを有する。デコンプレッサ回路１００がプログラムイメージ１１０をトラバースするとき、および、それがＢＴＡＣ５５内のエントリを占める分岐動作設定命令に遭遇したときに、それはその分岐動作設定命令から導出された分岐制御情報をデコンプレッサＢＴＡＣ１１５内に格納する。一実施形態では、デコンプレッサＢＴＡＣは図４Ｂに示す形態を取り、１つまたは複数のエントリを含み、各エントリは、分岐動作設定命令によって識別された命令のアドレス（または前述のような他の任意の同等の分岐点データ）をソースアドレスとして格納するためのフィールド１７５を有し、また、ターゲットアドレスが分岐動作設定命令から直接決定可能である場合には、ターゲットアドレスを格納するためのフィールド１８０を有する。特に、その場合、デコンプレッサ回路１００はプログラムイメージの内容から直接ターゲットアドレスを決定することができ、したがってフィールド１８０内のそのターゲットアドレスを取り込む。ターゲットアドレスを直接決定できない場合には、フィールド１８０は空白のままにされ、代わりにデコンプレッサ回路はトレースストリーム内に提供された情報からターゲットアドレスを後で決定する。
【００７３】
デコンプレッサＢＴＡＣ１１５が上述のように埋められると、デコンプレッサ回路１００は、プログラムイメージをトラバースするときにデコンプレッサＢＴＡＣ１１５を参照することができる。デコンプレッサ回路１００が、プログラムイメージ内で考慮されている現在の命令のアドレスから、デコンプレッサＢＴＡＣ１１５のエントリのうちの１つにソースアドレス情報とのヒットがあることを検出するときはいつでも、現在考慮されている命令が分岐動作設定命令によって識別された識別された命令であると判断し、したがって、次の分岐命令に達するまで待つのではなく、その識別された命令を次の所定の命令として扱う。その時点で、デコンプレッサ回路１００は、プログラムイメージの現在のトラバース中にトラバースされたすべての命令についての情報を解析回路１２０に提供することができ、またその時点で現在のアドレスをターゲットアドレスに更新することもできる。直接ターゲットアドレスの場合、それはデコンプレッサＢＴＡＣ１１５内の関連エントリのフィールド１８０内に示されるターゲットアドレスであり、一方、間接ターゲットアドレスの場合、そのターゲットアドレス情報は、現在考慮されているアトムに関連するトレースストリーム内で直接提供される。
【００７４】
トレースアナライザ４０は、１つまたは複数の所定のトレース制御イベントの発生時にそのデコンプレッサＢＴＡＣ１１５の内容を無効にして、デコンプレッサＢＴＡＣ１１５内に古い情報が維持されないことを保証するように構成することができる。
【００７５】
図５は、ゼロオーバーヘッドループと、前述の分岐動作設定命令の一例として、関連するＺＯＬＥ命令の使用を模式的に示す図である。ループの開始は、ＷＬＳ命令２００（ここで、ＷＬＳは「ｗｈｉｌｅ  ｌｏｏｐ  ｓｔａｒｔ」を表す）によって示される。これはｗｈｉｌｅ文に依存する条件付き形式のループ開始命令である。条件が満たされると仮定すると、ループ開始命令はレジスタｒＮ内に与えられた値をリンクレジスタＬｒ内に格納し、この値は必要とされるループの反復回数の表示である。この機能が実行されていると仮定すると、ＷＬＳ命令はＮアトムを発行することによって実行されない分岐としてトレースされる。しかしながら、条件が満たされない場合には、代わりにＷＬＳ命令の実行は処理を位置「ｌｏｏｐｅｎｄ」に分岐させ、それは一実施形態ではプログラムループ本体の終了を示すＺＯＬＥ命令の直後の命令である。この機能が実行されると仮定すると、ＷＬＳ命令はＥアトムを発行することによって実行された分岐としてトレースされる。
【００７６】
最初の反復中に、（ループへの分岐とは対照的に）ループに入ったと仮定すると、ループ本体内の各命令が実行され、ある時点でＺＯＬＥ命令２０５が実行される。これは入力としてリンクレジスタ値を取り、リンクレジスタ値がゼロでないと仮定すると、これはＢＴＡＣ５５内のエントリが取り込まれ、ソースアドレスとして命令Ｉ３２１０のアドレスを識別し、ＺＯＬＥ命令で指定されたアドレス「ｌｏｏｐｓｔａｒｔ」をターゲットアドレスとして示す。リンクレジスタのカウント値もデクリメントされ、分岐がｌｏｏｐｓｔａｒｔに戻る。したがって、ＺＯＬＥ命令はＥアトムとしてトレースされ、分岐が実行されたことを示す。
【００７７】
図５の右側の概略図に示すように、（最終反復以外の）プログラムループ本体の後続の各反復中に、Ｉ３命令２１０に遭遇すると、ＢＴＡＣ５５のエントリにヒットが検出され、反復回数はまだゼロでないと判定され、したがって反復回数がデクリメントされて、分岐はｌｏｏｐｓｔａｒｔへ戻る。したがって、これらの反復のそれぞれの間に、ＺＯＬＥ命令２０５を再実行する必要はなく、したがって、著しい性能改善をもたらす。最後の反復において、Ｉ３命令に遭遇すると、反復カウントは今やゼロであり、したがってさらなる反復は必要とされないことが決定される。したがって、分岐動作は、最後の反復ではＩ３命令に関連付けられず、代わりにＺＯＬＥ命令２０５が再実行される。しかし、この時点で、リンクレジスタの値がゼロであると判定され、それに応じて実行されなかった分岐が実行され、プログラムカウンタは「ｌｏｏｐｅｎｄ」に更新される。
【００７８】
図５にはループ開始命令の条件付き変形例が示されているが、代替的な実施形態ではループ開始は無条件の変形例であってもよく、これは一実施形態ではＤＬＳ（ｄｏ  ｌｏｏｐ  ｓｔａｒｔ）命令と呼ばれ、常にリンクレジスタをレジスタｒＮ内の反復カウント値に更新する。ＤＬＳ命令は分岐命令ではないので、ＤＬＳ命令が実行されるときにトレースストリーム内にアトムは発行されない。
【００７９】
図６は、一実施形態による、ゼロオーバーヘッドループを含むプログラムシーケンスがどのようにトレースされるかを示す流れ図である。ステップ２５０において、トレース生成回路６０は、処理要素５０によって実行されている現在の命令についての情報の受信を待つ。その後に、ステップ２５５で、その現在の命令をトレースするべきかどうかが決定される。いくつかの実施形態では、命令シーケンス全体をトレースすることを決定することができるが、他の実施形態では、現在実行中の命令に応じてトレース機構を選択的にオンおよびオフにすることができる。これにより、コードの特定の部分をトレースすることができるが、他の部分はトレースされない。そのような実施形態では、トレースするコードのそれらの部分に関してトレースストリームが生成されるだけであり、トレースストリーム内で発行される実際のトレース要素は、コードのそれらの部分内で実行される特定の命令のみに関係する。
【００８０】
ステップ２５５で現在の命令がトレースされないことが決定されると、処理は単にステップ２５０に戻り、監視対象回路によって実行される次の命令についての情報を待つ。
【００８１】
ステップ２５５で現在の命令をトレースするべきであると決定されると、ステップ２６０で現在の命令がトレース要素を生成するべき所定の命令の１つであるかどうかが決定される。一実施形態では、そのような命令は命令フロー変更命令、特に分岐命令であり、本明細書ではそのような命令を「Ｐ０命令」と呼ぶことにする。一実施形態ではＰ０命令は分岐命令であるが、他のタイプの命令もＰ０命令と見なすことができ、したがって対応するアトムをトレースストリーム内で発行させることが可能である。
【００８２】
図５の前の例を考慮すると、ＷＬＳ命令２００およびＺＯＬＥ命令２０５の両方が分岐命令であり、したがってステップ２６０でＰ０命令として扱われることが理解されよう。
【００８３】
ステップ２６０でＰ０命令が検出されるたびに、ステップ２６５でその命令に対してアトムが発行される。一実施形態では、このアトムは、その現在の命令に対して分岐が実行される場合にはＥアトムであり、分岐が実行されない場合にはＮアトムである。
【００８４】
分岐が実行されたことを命令実行情報が示す場合には、それは通常ターゲットアドレスが直接ターゲットアドレスであるか間接ターゲットアドレスであるかを識別する。ターゲットアドレスが直接ターゲットアドレスである場合には、ターゲットアドレス情報をトレースストリームに出力する必要はない。しかし、ターゲットアドレスが間接的である場合には、一実施形態では、命令フローがやがて分岐した位置をトレースアナライザが判定することができるように、ターゲットアドレスの表示もＥアトムに関連してさらなるパケットで出力される。ステップ２６５に続いて、処理はステップ２５０に戻り、次の命令についての情報を待つ。
【００８５】
ステップ２６０で現在の命令がＰ０命令ではないと判定された場合には、ステップ２７０で現在の命令が処理要素のＢＴＡＣ５５内でゼロオーバーヘッドループに関連する命令として識別される命令であるかどうかが判定される。一実施形態では、この情報は、現在の命令のソースアドレスをソースアドレスフィールド１５５と比較することによる、およびヒットされたエントリがＺＯＬＥ命令の実行の結果として取り込まれたことを示すＢＦ／ＺＯＬＥフラグフィールド１６５による、ＢＴＡＣ５５のエントリ内のヒットの検出に基づいて、処理要素５０からの命令実行情報の一部として提供される。
【００８６】
現在の命令が処理要素のＢＴＡＣ内でゼロオーバーヘッドループに関連すると識別されたと判定された場合には、ステップ２７５で、処理要素からの命令実行情報によって示されるように、その命令を処理するときに分岐が実行されたかどうかが判定される。前述のように、これは、命令が発生した時点でプログラムループの少なくとも１回のさらなる反復が必要な場合に当てはまる。分岐が実行された場合には、ステップ２８０において、トレースストリーム内に含めるためにＥアトムが生成される。ステップ２６５と同様に、ターゲットアドレスが間接ターゲットアドレスであると決定された場合には、ターゲットアドレスの表示もＥアトムに関連してトレースストリーム内の追加のパケットとして出力される。しかし、直接ターゲットアドレスの場合には、追加情報は不要で、Ｅアトムだけを発行すればよい。ステップ２７０またはステップ２７５のいずれかから否定の経路が続く場合には、処理はステップ２５０に戻る。
【００８７】
図７は、特定のトレース要素がいつ生成されるかの表示と共にゼロオーバーヘッドループの実行を示す流れ図である。この例では、ゼロオーバーヘッドループは、実行条件が満たされているＷＬＳ命令によって開始されると仮定する。したがって、ステップ３００で、ｗｈｉｌｅ条件が満たされていると判断され、処理要素はＷＬＳ命令を実行されない分岐として実行する。この時点で、リンクレジスタ値をソースレジスタｒＮ内に提供された反復カウント値に設定し、その反復カウント値は反復回数を示す。一実施形態では、ＷＬＳ命令が実行されない分岐として処理された結果として最初の反復が自動的に実行されるので、カウント値は最初の反復に加えて必要な反復の数を示すように設定される。
【００８８】
ＷＬＳ命令が実行されなかった分岐として処理されると仮定すると、ステップ３０５でトレースモジュールはＷＬＳ命令に関連してＮアトムを発行した。前述のように、ＷＬＳ命令がＤＬＳ命令に置き換えられた場合には、リンクレジスタには反復カウント値が設定されるが、ＤＬＳ命令は分岐命令ではないので、トレースアトムは生成されない。
【００８９】
ステップ３０５の後に、処理はステップ３１０において次の命令に進む。この時点で、ステップ３１５で次の命令がＺＯＬＥ命令であるかどうかが判定され、そうでなければステップ３４５でその命令によって要求される処理が実行される。これは、ステップ３５０において、その命令によって処理要素のＢＴＡＣにおいてヒットが生じるかどうかを判定することを含む。ゼロオーバーヘッドループの最初の反復の間、これは、ＷＬＳ命令とＺＯＬＥ命令との間の命令のいずれにも当てはまらず、したがって、処理はステップ３１０に戻り、ＺＯＬＥ命令に達するまでステップ３１５、３４５、３５０を通って継続する。最初の反復の終了時にステップ３１５でＺＯＬＥ命令が実行されると、分岐およびループ制御回路５８はステップ３２０からステップ３３５を実行するために使用され、リンクレジスタカウント値が０より大きいかどうかがステップ３２０で最初に判定される。前述したように、これは少なくとも１回のさらなる反復が必要な場合にのみ当てはまる。
【００９０】
少なくとも１回のさらなる反復が必要であると仮定すると、ステップ３２５でリンクレジスタ値を更新することによってカウンタがデクリメントされ、ステップ３３０で処理要素のＢＴＡＣ５５にエントリが作成される。前述のように、これはＺＯＬＥ命令の前の直前の命令をソースアドレスとして識別し、プログラムループ内の最初の命令をターゲットアドレスとして識別する。
【００９１】
その後に、ステップ３３５で分岐が実行されて処理をプログラムループの開始に戻し、その後ステップ３４０でトレースモジュールはＥアトムを発行して、実行された分岐がＺＯＬＥ命令の実行に関連付けられていることを識別する。次に処理はステップ３１０における次の命令に移り、この例ではＷＬＳ命令の後のプログラム本体ループ内の最初の命令である。
【００９２】
次に処理はプログラムループ本体の２回目の反復を通して進行し、ある時点で、ステップ３５０において、処理中の現在の命令によって処理要素のＢＴＡＣにヒットが生じたと判定される。これは、例えば、図５のゼロオーバーヘッドループの例を考慮すると、図５の命令Ｉ３２１０が実行される場合に当てはまる。その時点で、分岐およびループ制御回路５８はリンクレジスタの内容がゼロより大きいかどうかを判定し、もしそうであれば、ステップ３６０でカウンタをデクリメントし、その後処理はステップ３３５へ進む。その後に、ステップ３３５およびステップ３４０は、ＺＯＬＥ命令が実行された場合に実行されたのと全く同じ方法で実行される。しかし、この時点では処理はＺＯＬＥ命令自体には進まず、したがってＺＯＬＥ命令は再実行される必要がなく、したがって著しい性能改善をもたらすことが理解されよう。
【００９３】
プログラムループの最後の反復では、ステップ３５５で、プログラムループ内の最後から２番目の命令を実行するときにリンクレジスタがもはや０より大きくないと判定され、この時点で処理はステップ３６５に進み、そこで分岐およびループ制御回路５８は、ステップ３１０に戻る前に、処理要素のＢＴＡＣ内の関連するエントリを無効にする。次にステップ３１０で、処理はここで再実行されるＺＯＬＥ命令に進む。しかし、この場合、ステップ３２０でリンクレジスタの内容はもはや非ゼロではないと判定され、したがって処理はステップ３７０へ進み、そこでトレースモジュールがこのＺＯＬＥ命令の現在の実行に関連してＮアトムを発行し、その後に、ステップ３７５でループが実行される。
【００９４】
図７の処理から、処理がゼロオーバーヘッドループの複数の反復の途中である間に何らかの理由で処理要素のＢＴＡＣ内の関連エントリが無効にされる場合には、これは、最後から２番目の命令が次に遭遇したときにステップ３５０で処理要素のＢＴＡＣにヒットしたと識別されないようにし、それは次に処理をＺＯＬＥ命令に進めるようにすることに留意されたい。しかしながら、リンクレジスタの内容がまだゼロでない時点でＺＯＬＥ命令が再実行される場合には、ステップ３２５、３３０、３３５、３４０が再実行され、ゼロオーバーヘッドループの実行が再開される。トレースアナライザの目的のためには、ステップ３４０で発行されたＥアトムが、ＺＯＬＥ命令の再実行によるものか、または処理要素のＢＴＡＣにおけるヒットに関連する最後から２番目の命令の実行によるものかは問題ではない。
【００９５】
以下の表１は、図７に記載の手法と一致する方法でゼロオーバーヘッドループを実施するために実行することができる例示的なコードシーケンスを示す。
【表１】
2019530074.tif 000003
【００９６】
図８は、一実施形態で使用することができるさらなるタイプの分岐動作設定命令を概略的に示し、このタイプの分岐動作設定命令は、本明細書では分岐未来命令と呼ばれる。分岐未来命令４００が実行されると、次に分岐未来命令に関連する条件が満たされると、これはＢＴＡＣ５５内にエントリを取り込んでソースアドレスとして値「Ｂ  ｐｏｉｎｔ」を識別し、ターゲットアドレスとして値「ｆｏｏ」４１０を設定する。次に、命令Ｉ３４０５に遭遇し、そのエントリがＢＴＡＣ５５内でまだ有効であると仮定すると、これにより、命令ＩＺを次に実行される命令にするために、処理がアドレスｆｏｏ４１０に分岐する。一実施形態では、この分岐動作は命令Ｉ３の実行を無効にすることができるので、命令Ｉ３に遭遇したときに実行される唯一の動作は点４１０へ分岐することである。しかし、代替的な実施形態では、処理は、命令Ｉ３を実行するときに必要とされる通常の動作を実行し、次に並行して、実行される次の命令が命令ＩＺであるように点４１０に分岐する。
【００９７】
一実施形態では、分岐命令４１５は、分岐を生じさせてアドレス「ｆｏｏ」４１０にするためのバックアップとして提供することができる。これは、例えば、分岐未来機能を無効にすることができる実施態様において、または分岐未来命令４００が実行されてから命令Ｉ３４０５に遭遇するまでの間にＢＴＡＣ５５の内容が無効にされる状況をカバーするために有用であり得る。しかし、本明細書で説明されているトレース技術は、そのようなバックアップ分岐命令４１５が提供されることを必要としないことに留意されたい。
【００９８】
図９は、分岐未来命令の１つまたは複数の事例を含む一連の命令をトレースするために実行されるステップを示す流れ図である。ステップ４５０およびステップ４５５は、図６の前述のステップ２５０およびステップ２５５に対応する。ステップ４５５で現在の命令をトレースするべきであると決定されると、ステップ４６０で現在の命令が分岐未来命令であるかどうかが判定される。現在の命令が分岐未来命令であると判定された場合には、ステップ４６５で、その分岐未来命令によって識別される識別された命令がＢＴＡＣに正常に登録されたかどうかが判定される。これは、処理要素から受信した命令実行情報から導き出すことができる。前述のように、識別された命令がＢＴＡＣに正常に登録されなかった理由はいくつかある。例えば、分岐未来命令は条件付きであり得るので、特定の条件が満たされたときにのみＢＴＡＣにエントリが作られる。さらに、一実施形態では、分岐未来機能は選択的に無効にされる場合があり、無効にされた場合には、分岐未来命令の遭遇によってＢＴＡＣ内にエントリが作成されない。ステップ４６５で、識別された命令がＢＴＡＣエントリの１つに正常に登録されたと判定されると、分岐未来命令はステップ４７５でＥアトムとしてトレースされ、そうでなければステップ４８０でＮアトムとしてトレースされる。次に処理はステップ４５０に戻る。
【００９９】
一実施形態では、ＢＴＡＣ５５は少数のエントリのみを有することができ、実際には一実施形態では単一のエントリを有してもよい。そのような状況では、ステップ４６５で識別された命令がＢＴＡＣに正常に登録されると、これは以前に実行された分岐未来命令の別のアクティブな識別された命令に関する情報を上書きする可能性があり、その場合、ＢＴＡＣは、以前に実行された分岐未来命令によって識別されたが、まだ命令ストリーム内で遭遇していない命令に関する情報を失うことになる。そのような状況がいつ発生したかをトレースアナライザが検出できることが重要である。いくつかの実施形態では、トレースアナライザは、ＢＴＡＣ５５内で使用される置換方針を知ることができ、アクティブ分岐制御情報のそのような上書きが行われた状況を既存のトレース情報から決定論的に判定することができる。しかし、そうでなければ、ステップ４７５でＥアトムを発行する前に、ＢＴＡＣ内のそのような保留中の分岐未来エントリが上書きされる場合には、ステップ４７０でトレース生成回路６０はトレースストリーム内に非イベントパケットを発行するように構成することができる。
【０１００】
ステップ４６０で現在の命令が分岐未来命令ではないと判定された場合には、次にステップ４８２で、現在の命令が分岐未来命令に関連するものとして処理要素のＢＴＡＣ内で識別されるかどうかが判定される。これは、処理要素が現在の命令のソースアドレスとＢＴＡＣ内のエントリとの間のヒットを検出した場合に発生し、関連するフィールド１６５は、そのエントリが前の分岐未来命令の実行により取り込まれたことを示す。そのような状況では、処理はステップ４８４に進み、そこでＥアトムが現在の命令に関連して発行される。
【０１０１】
ステップ４８２から「いいえ」の経路がたどられるか、または「はい」の経路がたどられる場合にステップ４８４の実行に続いて、ステップ４８６で、現在の命令がＰ０命令であるかどうかが判定され、前述のように、これは通常分岐命令である。そのようなＰ０命令に遭遇するときはいつでも、処理はステップ４８８に進み、そこで現在の命令に対してアトムが発行される（Ｐ０命令の分岐命令の例は、分岐が実行される場合にはＥアトムであり、または分岐が実行されない場合にはＮアトムである）。ステップ４８２からの「はい」の経路をたどった後に現在の命令がＰ０命令であるかどうかを評価することは、分岐未来命令によって識別された命令がそれ自体でＰ０命令でもある状況を検出することを可能にする。例としては、データトレースが有効になっているときのメモリ命令がある。そのような場合、２つのＥアトムが発行され、１つは実行された分岐に対するもの（ステップ４８４のＥアトム）であり、もう１つはＰ０要素自体、すなわちメモリ命令に対するもの（ステップ４８８で発行されたアトム）である。
【０１０２】
ステップ４８４またはステップ４８８のいずれにおいても、ターゲットアドレスが直接ターゲットアドレスである場合には、発行されたＥアトムに関連して追加情報は必要とされない。しかし、ターゲットアドレスが間接的である場合には、ターゲットアドレスを識別するために、Ｅアトムに関連して追加のトレースパケットを発行することができる。
【０１０３】
いくつかの実施態様では、プログラムシーケンスは、前述のタイプの分岐動作設定命令のうちの１つだけを含むが、他の実施形態では、命令シーケンスは、関連するＺＯＬＥ命令を有するゼロオーバーヘッドループを含むことができ、さらに分岐未来命令を含むことができ、処理要素のＢＴＡＣ５５内のフィールド１６５は、どのタイプの分岐動作設定命令によって対応するエントリがＢＴＡＣ内に取り込まれたかを示す。
【０１０４】
以下の表２は、実行可能なプログラムシーケンスの一例を示しており、これは一組の分岐未来命令のネストされた対を有し、一実施形態において非イベントパケットの生成をもたらす（この例は単一エントリＢＴＡＣを仮定している）。
【表２】
2019530074.tif 000004
【０１０５】
図１０は、トレース回路によって生成されたＥアトムを受信したときに、一実施形態に従って図３のデコンプレッサ回路１００によって実行することができる処理ステップを示す流れ図である。この処理は、一方または両方の分岐動作設定命令が命令ストリーム内に含まれるか否かにかかわらず実行することができる。ステップ５００では、入力インターフェース１０５でトレースストリーム内でＥアトムが受信されたかどうかが判定される。Ｅアトムが受信されると、次にステップ５０５で、デコンプレッサ回路１００は現在のアドレスからプログラムイメージ１１０をトラバースし始める。トレース開始点において、またはトレース動作内の同期点において、現在のアドレスは特定の値に設定されてもよい。その後に、それは、以下の図１０のさらなる説明から明らかになるように、デコンプレッサ回路によって実行されるプログラムトラバース動作に基づいて更新される。
【０１０６】
ステップ５１０において、現在の命令の詳細が解析回路１２０に出力され、ステップ５１５において、現在の命令（すなわち現在のアドレスによって指し示される命令）が処理要素のＢＴＡＣ５５をプリロードする分岐未来命令であるかどうかがプログラムイメージを参照して判定される。もしそうであれば、Ｅアトムの存在は、その命令の実行により確かに処理要素のＢＴＡＣ内にエントリが作られたことを示し、それに応じて処理はステップ５２０へ進み、そこで、デコンプレッサ回路１００は、そのデコンプレッサＢＴＡＣ１１５内にエントリを割り当て、そのエントリ内にソースアドレスとして、分岐動作設定命令によって識別された命令のアドレスを格納する。さらに、そのターゲットアドレスが現在の命令、すなわち分岐未来命令から直接計算可能である場合には、そのターゲットアドレスをそのエントリ内に格納する。次に処理はステップ５４０に進み、そこで現在のアドレスが、処理要素のＢＴＡＣをプリロードする分岐未来命令を実行した後に処理される次の命令を指し示すように更新される。これは通常、その分岐未来命令に続く次の命令である。
【０１０７】
デコンプレッション回路は、必要に応じて、ステップ５１５で、現在の命令が処理要素のＢＴＡＣにエントリを作成させたＺＯＬＥ命令であることを検出して、ステップ５２０で、その関連するＢＴＡＣにエントリを作成するように構成することもできるが、一実施形態では、これは行われず、代わりに、各ＺＯＬＥ命令の識別された命令について、デコンプレッション回路のＢＴＡＣにエントリが作成されない。特にＺＯＬＥ命令の場合、識別された命令はプログラムループ本体の直前の命令になるため、デコンプレッサは、処理回路の命令実行動作を正しく追跡するために、ループ終了命令とその直前の命令とを区別する必要はない。したがって、識別された命令についてデコンプレッション回路のＢＴＡＣにエントリを作成する必要はない。
【０１０８】
特に、処理要素のＢＴＡＣに記録されたＺＯＬＥ命令の識別された命令に遭遇したことによって分岐が行われたことを示す、図６のステップ２８０で生成されたＥアトムは、ＺＯＬＥ命令自体に関連しているとデコンプレッション回路によって決定されるだけであり、これは、分岐命令であるため、図１０の後のステップ５３０でＰ０命令として検出され、それによって分岐が行われてプログラムループの開始に戻る。したがって、その場合、処理はステップ５３０からステップ５４０に進み、そこでデコンプレッサ回路によって維持されている現在のアドレスがターゲットアドレスに更新される。ＺＯＬＥ命令の前述の例では、これは通常、ＺＯＬＥ命令内の直接のターゲットアドレスとして提供される。ステップ５４５で、処理はプログラムイメージのトラバースを停止し、処理はステップ５００に戻って次のアトムを待つ。
【０１０９】
ステップ５１５で、現在の命令が処理要素のＢＴＡＣをプリロードする分岐未来命令ではないと判定された場合には、ステップ５２５で、現在の命令のアドレスがデコンプレッサＢＴＡＣ１１５に格納されたソースアドレスと一致するかどうかが判定される。もしそうであれば、これは現在の命令が前に実行された分岐未来命令によって識別されている識別された命令であることを示し、これはＥアトムに関連するので、これはその命令に遭遇すると分岐動作が呼び出されることを意味する。したがって、この命令は、Ｐ０命令と同様にプログラムイメージのトラバース処理を停止させる命令として扱うべきであると判定される。したがって、処理はステップ５４０に進み、ここでデコンプレッサ回路によって維持されている現在のアドレスがターゲットアドレスに更新される。これは、ターゲットアドレスが直接ターゲットアドレスである場合にはデコンプレッサＢＴＡＣエントリから直接利用可能になるか、またはターゲットアドレスが間接ターゲットアドレスである場合にはトレースストリームで提供される情報から利用可能になる。次に処理は前述のようにステップ５４５に進む。
【０１１０】
ステップ５２５でデコンプレッサＢＴＡＣ内の一致を検出した後にステップ５４０で現在のアドレスをターゲットアドレスに更新することに加えて、デコンプレッサ回路は、場合によってはデコンプレッサＢＴＡＣエントリを無効にすることができる。特に、処理要素が、先行する分岐未来命令によって取り込まれたエントリに関連してＢＴＡＣ５５内のヒットを検出する場合は、それは通常、要求された分岐動作を開始し、次にＢＴＡＣ内のエントリを無効にする。同様に、前の分岐未来命令に関連するエントリに起因して、デコンプレッサＢＴＡＣにおいてステップ５２５でヒットが検出された後にステップ５４０に到達する場合には、デコンプレッサＢＴＡＣはそのローカルＢＴＡＣ１１５内の関連するエントリを無効にするように構成することができる。
【０１１１】
ステップ５２５で、現在の命令のアドレスがデコンプレッサＢＴＡＣに保持されているソースアドレスと一致しないと判定された場合には、ステップ５３０で、プログラムイメージ内の現在の命令が標準的なＰ０命令、例えば分岐命令であるかどうかが判定される。そうであれば、処理は再びステップ５４０に進み、そうでなければ処理はステップ５３５に続く。ステップ５３０で現在の命令がＰ０命令であると判定されると、ステップ５４０で現在のアドレスがターゲットアドレスに更新され、ターゲットアドレスが間接的である場合には、ターゲットアドレス情報はトレースストリーム内に提供された情報から利用可能になる。
【０１１２】
ステップ５３５に到達すると、（プログラムイメージ内の次の命令を指し示すようにアドレスを進めることによって）プログラムイメージ内の次の命令が現在の命令に設定され、処理はステップ５１０に戻る。
【０１１３】
図１１は、Ｎアトムを受信したときにデコンプレッサ回路１００によって実行されるステップを示す流れ図である。ステップ５５０で、Ｎアトムがトレースストリーム内で受信されたかどうかが判定される。Ｎアトムが受信されると、ステップ５５５において、デコンプレッサ回路１００は現在のアドレスからプログラムイメージをトラバースし始める。ステップ５６０で、現在の命令の詳細が解析回路１２０に出力され、次にステップ５６５で、現在の命令がトレースストリーム内でＮアトムが予想される命令であるかどうかが判定される。上述の実施形態によれば、Ｎアトムは、分岐が実行されなかった場合のＰ０命令に関連して、または、識別された命令が処理要素のＢＴＡＣに正常に登録されなかった分岐未来命令に関連して、予想される。
【０１１４】
現在の命令がＮアトムが予想されるものではない場合には、ステップ５７０で次の命令が現在の命令になるように設定され、処理はステップ５６０に戻る。
【０１１５】
しかし、ステップ５６５で、現在の命令がＮアトムが予想される命令であると判定された場合には、ステップ５７５で現在のアドレスが次の命令アドレスを指し示すように更新され、ステップ５８０でデコンプレッサ回路はプログラムイメージのトラバースを停止する。次に処理はステップ５５０に戻り、次のＮアトムを待つ。
【０１１６】
ステップ５６５で検出された命令のタイプに応じて、ステップ５７５が実行されると、デコンプレッサ回路は、そのデコンプレッサＢＴＡＣ内の関連するエントリを無効にすることもできる。例えば、これは、受信したＮアトムがＺＯＬＥ命令の最後の実行に関連して発行されたとき（すなわち、図７のステップ３７０で発行されたＮアトム）に発生する可能性がある。
【０１１７】
図１２は、処理要素のＢＴＡＣが無効にされたと判定された場合に一実施形態において実行することができるステップを示す流れ図である。これは様々な理由で発生する可能性があり、その一例は処理要素によって割り込みが行われる場合である。特に、一実施形態では、そのような割り込みを受けたときにＢＴＡＣの内容を無効にするように決定して、割り込みを受ける前にその状態をすべて保存する必要性を回避し、したがって割り込みをより迅速に処理できるようにする。ステップ６００で、処理要素のＢＴＡＣが無効にされたと判定された場合には、ステップ６０５で処理要素はトレースモジュール２０に通知し、その後ステップ６１０でトレースモジュールは一実施形態ではトレースストリーム内に無効化イベントパケットを発行する。ステップ６１５でそのような無効化イベントパケットを受信すると、デコンプレッサはそのデコンプレッサＢＴＡＣの内容を無効にする。
【０１１８】
代替的な実施形態では、トレースアナライザがトレースストリーム内でこの時点で発行された別のパケットを処理するときにローカルデコンプレッサＢＴＡＣコンテンツ１１５をクリアするように構成されている場合には、トレースストリーム内で無効化イベントパケットを別々に発行する必要はない。例えば、一実施形態では、割り込みの存在を示すためにトレースストリーム内に割り込みパケットが発行される。トレースアナライザは、そのような状況では処理要素のＢＴＡＣが無効にされることを認識するように設定することができ、したがって、割り込みパケットを受信した結果として、個別の無効化イベントパケットを必要とせずにデコンプレッサＢＴＡＣの内容を直接クリアすることができる。
【０１１９】
図１３は、前述したように非イベントパケットに応答してデコンプレッサ回路で実行することができる処理を概略的に示す。ステップ６５０において、非イベントパケットが受信されたかどうかが判定され、そのような非イベントパケットが受信されたとき、ステップ６５５においてデコンプレッサＢＴＡＣの内容が更新される。特に、ＢＴＡＣエントリの１つは、非イベントパケットに応答して無効にされる。１つの特定の実施形態では、ＢＴＡＣ５５とデコンプレッサＢＴＡＣ１１５の両方が単一のエントリしか含まないことがあるので、どのエントリが非イベントパケットに応答して無効にされるかはすぐに明らかである。しかしながら、代替的に、両方のＢＴＡＣは複数のエントリを有することができるが、デコンプレッサ回路は処理要素によって使用される置換方針を知っており、したがって、どのエントリが非イベントパケットの受信時に無効にされるべきかに関して決定的である。実際、場合によっては、デコンプレッサ回路は、トレースストリーム内の他のパケットから、トレースストリーム内で非イベントパケットを個別に発行する必要なしに、エントリがＢＴＡＣ５５内で無効にされた状況を判定することができる。
【０１２０】
デコンプレッサＢＴＡＣ１１５が分岐未来命令の識別された命令についてのエントリのみを保持し、ＺＯＬＥ命令のうちの識別された命令についてのエントリを維持しない実施形態では、その上書きされた内容がＺＯＬＥ命令の識別された命令に関連する場合には、処理要素のＢＴＡＣ５５内のエントリが上書きされたときにトレースモジュール２０が非イベントパケットを発行する必要はない。
【０１２１】
一実施形態では、トレースが命令シーケンスのすべての部分に対して有効にされないことがあり得る。これは、分岐動作設定命令の実行と対応する識別された命令の実行との間にトレースが可能になるという見込みがあることを意味する。分岐動作設定命令がＺＯＬＥ命令であるゼロオーバーヘッドループの前の例を考慮すると、前述したように動作はトレースの観点から同じであるので、分岐がプログラムループ内の最後から２番目の命令に遭遇することによってトリガされるかどうかにかかわらず、特別な動作は不要である。具体的には、図７の前述の説明から明らかになるように、トレース生成回路は、それがＺＯＬＥ命令に遭遇することによってトリガされるか、それとも最後から２番目の命令（すなわち、ＺＯＬＥ命令の直前の命令）に遭遇することによってトリガされるかにかかわらず、（最終ループ反復以外の）各ループ反復の終わりにＥアトムを発行する。
【０１２２】
しかし、分岐未来命令と、対応する識別された命令の遭遇と、の間でトレースが可能である場合には、分岐未来命令の実行動作は追跡されないので、処理要素の処理動作を正しく追跡できるようにするために、トレースアナライザはそれを可能にする追加情報を提供される必要がある。これを行うために、一実施形態では図１４の処理が実行される。
【０１２３】
ステップ６６０で、トレースモジュール２０は、ステップ６６０でトレースが可能であるかどうかを判定し、次にトレースが可能になり、次にステップ６６５で、現在命令フローが分岐未来命令と、関連する識別された命令と、の間にあるかどうかを判定する。そうでなければ、追加の動作は必要とされず、処理はステップ６８５で終了する。しかし、もしそうであれば、ステップ６７０においてトレースモジュールは、識別された命令が処理要素によって続いて実行されるときに識別された命令の動作を監視する。特に、ステップ６７５で、その識別された命令を実行するときに分岐が実行されたかどうかが判定される。分岐が実行されなければ、何の動作も必要とされないが、そうでなければ６８０でトレースストリーム内で例外スタイルパケットが発行され、これは現在の命令のアドレスと分岐されたターゲットアドレスも明示的に識別する。
【０１２４】
図１４の動作をトレースモジュール２０内で実施することができるいくつかの方法がある。一実施形態では、トレースモジュールは、ＢＴＡＣ５５内の各エントリについてカウンタを維持するためのカウンタ回路６２を含む。特定の一実施形態では、各カウンタは飽和カウンタの形式を取る。図１５は、各カウンタに関して実行される処理を示す。ステップ７００で、その分岐未来命令の実行により（図９に示す実施形態を考慮すると、ステップ４７５でＥアトムを発行することによって）ＢＴＡＣ５５内に対応するエントリが取り込まれたことを示すために分岐未来命令がトレースされているかどうかが判定される。このようにして分岐未来命令がトレースされるたびに、ステップ７０５でカウンタがインクリメントされる。
【０１２５】
同様に、ステップ７１０において、処理要素が遭遇したＢＴＡＣ５５のエントリに関連する識別された命令に応答して分岐が行われたかどうかが判定され、もしそうであれば、ステップ７１５においてカウンタはその後デクリメントされる。さらに、ステップ７２０で示すように、ＢＴＡＣが無効にされた場合には、例えば割り込みを受けた場合には、カウンタはステップ７２５でクリアされる。
【０１２６】
すべての命令がトレースのために考慮されると仮定すると、ＢＴＡＣのエントリ内の識別された命令に対して分岐を実行することが決定される場合に、カウンタは通常ゼロではないと予想されることが理解されよう。例えば、図９で前述した例示的な実施形態を考慮すると、ステップ４８２で、現在の命令が関連する分岐未来命令によってＢＴＡＣ５５内で識別された命令であることが検出された時点で、カウンタ値はゼロでなくなり、ステップ４８４で、通常の方法でＥアトムが発行される。次に、ステップ７１０を実行すると、ステップ７１５でカウンタがデクリメントされてゼロに戻る。
【０１２７】
しかし、先行する分岐未来命令がトレースモジュールによって考慮されなかった場合（例えば、図９のステップ４５５から否定の経路がたどられたため）には、ＢＴＡＣエントリでヒットした識別された命令に対して分岐が行われた時点で、カウンタはゼロになり、ゼロカウンタの存在により、処理は図１４のステップ６８０へ進み、例外スタイルパケットをトレースストリーム内で発行することができる。
【０１２８】
したがって、図１５のカウンタ手法を使用し、ＢＴＡＣ５５の各エントリに対して別々のカウンタを維持することによって、図１４の機能を通常のトレース動作内に効果的に組み込むことができる。特に、図９の処理は通常通りに実行することができるが、分岐未来命令に関連するＢＴＡＣ内の各エントリに対するカウンタ値を保持するためにバックグラウンドで図１５のカウンタ機構を使用する。ステップ４８２において、現在の命令が、処理要素のＢＴＡＣ内で分岐未来命令に関連すると識別されたものであると判定された場合には、カウンタがゼロでなければステップ４８４においてＥアトムが発行され、カウンタ値がゼロであれば例外スタイルパケットが発行される。
【０１２９】
本明細書に記載の実施形態は、非常に効率的なトレース機構を実現することを可能にし、そこでは、監視対象回路によって実際に実行される命令の（通常は小さい）サブセットに対してのみトレース要素が生成されるが、監視対象回路が１つまたは複数の分岐動作設定命令を含む命令シーケンスを実行するときであっても、監視対象回路の動作を正確にトレースすることができ、任意の命令を分岐に効果的に変換することができる。
【０１３０】
本出願では、「〜に構成される」という単語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。これに関連して、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有してもよく、あるいはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「に構成されている」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
【０１３１】
本発明の例示的な実施形態を添付の図面を参照しながら本明細書で詳細に説明したが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲および趣旨から逸脱することなく、当業者によって様々な変更、追加、および修正がその中で達成され得ることを理解されたい。例えば、本発明の範囲から逸脱することなく、従属請求項の特徴の様々な組み合わせを独立請求項の特徴と共に行うことができる。
【図１】
2019530074.tif 000005
【図２】
2019530074.tif 000006
【図３】
2019530074.tif 000007
【図４Ａ】
2019530074.tif 000008
【図４Ｂ】
2019530074.tif 000009
【図５】
2019530074.tif 000010
【図６】
2019530074.tif 000011
【図７】
2019530074.tif 000012
【図８】
2019530074.tif 000013
【図９】
2019530074.tif 000014
【図１０】
2019530074.tif 000015
【図１１】
2019530074.tif 000016
【図１２】
2019530074.tif 000017
【図１３】
2019530074.tif 000018
【図１４】
2019530074.tif 000019
【図１５】
2019530074.tif 000020
【国際調査報告】
2019530074.tif 000021
2019530074.tif 000022
2019530074.tif 000023