(57)【要約】処理回路による命令実行を示すトレースストリームの生成及び処理を行う装置及び方法が提供される。装置は、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースと、処理回路による該シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを該命令実行情報から生成するトレース生成回路とを備えている。命令シーケンスには、分岐未来命令によって特定される命令を効果的に分岐に変える少なくとも一つの分岐未来命令が含まれ、該シーケンス内で特定の命令に遭遇した場合に、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる。分岐制御キャッシュは、分岐未来命令から生じる分岐制御情報を格納するのに用いられ、トレース生成回路は、その分岐制御情報に基づいて、処理回路がいつ特定の命令に遭遇したかを検出し、ターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリーム内に発行するように構成されている。これにより、そのような分岐未来命令が処理回路によって実行された命令シーケンスに含まれる場合にも非常に効率的なトレースストリームの形態が利用可能となる。
2019521436.tif 000002
【特許請求の範囲】
【請求項１】
処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースであって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェースと、
前記処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを前記命令実行情報から生成するトレース生成回路と、
前記分岐未来命令から生じる分岐制御情報を格納する分岐制御キャッシュと、を具備し、
前記トレース生成回路は、前記分岐制御キャッシュに格納された前記分岐制御情報に基づいて、前記処理回路がいつ特定の命令に遭遇したかを検出し、前記ターゲットアドレスへの分岐が生じたことを示すトレース要素を前記トレースストリーム内に発行するように構成されている、
ことを特徴とする装置。
【請求項２】
前記分岐制御キャッシュは、前記トレース生成回路に対応付けられ、前記トレース生成回路は、前記処理回路から受け取った前記命令実行情報に応じて前記分岐制御情報を記憶するよう構成されている、ことを特徴とする請求項１に記載の装置。
【請求項３】
前記命令実行情報が処理回路によって分岐未来命令が実行されたことを示す場合、前記トレース生成回路は、その分岐未来命令によって特定され、前記特定の命令を判定するのに用いられる分岐点データを前記分岐制御キャッシュ内に格納するように構成されている、ことを特徴とする請求項２に記載の装置。
【請求項４】
前記トレース生成回路は、前記処理回路がいつ前記特定の命令に遭遇したかを受け取った命令実行情報から検出し、その検出をすると前記ターゲットアドレスへの分岐が生じたことを示す前記トレース要素をトレースストリーム内に発行するために、前記分岐制御キャッシュに格納された前記分岐点データを参照するよう構成されている、ことを特徴とする請求項３に記載の装置。
【請求項５】
前記命令実行情報が前記処理回路によって前記分岐未来命令が実行されたことを示す場合、前記トレース生成回路は、前記分岐未来命令内で特定された即値からターゲットアドレスを直接導出可能かどうかを示すターゲットインジケータを前記分岐制御キャッシュに格納するように構成されている、ことを特徴とする請求項２〜４のいずれか一項に記載の装置。
【請求項６】
前記ターゲットインジケータが前記ターゲットアドレスは前記即値から直接導出可能ではないことを示す場合、前記トレース生成回路は、前記ターゲットアドレスへの分岐が生じたことを示すトレース要素に関連して、前記処理回路から受け取った前記命令実行情報から導き出したターゲットアドレスを示す指標を前記トレースストリーム内に発行するように構成されている、ことを特徴とする請求項５に記載の装置。
【請求項７】
前記トレース生成回路は、前記処理回路によって実行される命令シーケンスの一部を示すトレースストリームを生成するよう構成され、前記トレース要素はその部分に含まれる所定の命令に関連するものであり、
前記トレース生成回路は、前記関連する分岐未来命令が前記命令シーケンスの一部内にある場合にのみ前記分岐制御キャッシュに分岐制御情報を格納するよう構成されている、
ことを特徴とする請求項２〜６のいずれか一項に記載の装置。
【請求項８】
前記分岐制御キャッシュは、前記処理回路が使用する分岐制御情報を保持する処理回路分岐制御キャッシュとは別であり、前記処理回路が分岐未来命令の実行後に特定の命令に遭遇した場合、分岐未来命令によって特定されたターゲットアドレスへの分岐を処理回路に行わせる、ことを特徴とする請求項２〜７のいずれか一項に記載の装置。
【請求項９】
前記処理回路分岐制御キャッシュは、１つの分岐未来命令から導き出された分岐制御情報のみを記憶することが可能であり、前記トレース生成回路に対応する分岐制御キャッシュは、前記１つの分岐未来命令内で特定された即値からターゲットアドレスを直接導出可能かどうかを示すターゲットインジケータを格納し、前記分岐未来命令によって特定され、前記特定の命令を判定するのに用いられる分岐点データを格納しないように構成されている、ことを特徴とする請求項８に記載の装置。
【請求項１０】
前記トレース生成回路は、前記処理回路分岐制御キャッシュに関連する分岐制御情報を有する特定の命令に遭遇したために、前記処理回路がターゲットアドレスへの分岐を行なったことを示す命令実行情報に対応するが、前記トレース生成回路に対応する前記分岐制御キャッシュは、その特定の命令に対して、特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するための分岐制御情報を記憶していない、ことを特徴とする請求項８又は９に記載の装置。
【請求項１１】
前記トレース生成回路は、所定のトレース制御イベントが発生すると、前記分岐制御キャッシュの分岐制御情報を無効にするよう構成されている、ことを特徴とする請求項２〜１０のいずれか一項に記載の装置。
【請求項１２】
前記分岐点データには、
前記特定の命令のアドレスを示すアドレスデータ、
前記特定の命令の直前の最後の命令のアドレスを示すエンドデータ、
前記分岐未来命令と前記特定の命令との距離を示すオフセットデータ、
命令の開始記憶アドレスを区別するメモリ記憶アドレスビットの最下位ビット端部から始まる前記特定の命令のメモリ記憶アドレスを示す適切なビットサブセット、
前記特定の命令の前に処理すべき残りの命令数を示す残存サイズ命令データ、  前記特定の命令に到達する前に処理すべき残りのプログラム格納先の数を示す残存サイズデータ、
のうちの一つ又は複数が含まれている、ことを特徴とする請求項３又は請求項３に従属する請求項４〜１１のいずれか一項に記載の装置。
【請求項１３】
前記分岐制御キャッシュは、前記処理回路に対応付けられ、処理回路が使用する分岐制御情報を保持するのに用いられて、前記処理回路が分岐未来命令の実行後に特定の命令に遭遇した場合、分岐未来命令によって特定されたターゲットアドレスへの分岐を前記処理回路に行わせ、
前記命令実行情報には、分岐未来命令がいつ処理回路に実行されるかの指標、分岐がいつ処理回路に処理されたかの指標、その分岐の処理が分岐命令の実行によるものではなく、処理回路の分岐制御キャッシュに保持された分岐制御情報によるものであったかどうかに関する指標が含まれ、
前記トレース生成回路は、前記命令実行情報内の前記指標に基づいて生成するトレース要素を決定する、ことを特徴とする請求項１に記載の装置。
【請求項１４】
前記命令実行情報が、分岐未来命令が実行され、次に発生した分岐が分岐制御情報によるものであったことを示す場合、前記トレース生成回路は、前記ターゲットアドレスへの分岐が生じたことを示す前記トレース要素を生成するよう構成されている、ことを特徴とする請求項１３に記載の装置。
【請求項１５】
前記命令実行情報が、分岐命令の実行によって分岐の処理が行われ、それに先行して分岐未来命令の実行が行われなかったことを示す場合、前記トレース生成回路は、前記処理回路によって分岐が取られたか否かを示すタイプのトレース要素を発行するよう構成されている、ことを特徴とする請求項１３又は１４に記載の装置。
【請求項１６】
前記命令実行情報が、分岐命令の実行によって分岐の処理が行われたが、それに先行して分岐未来命令の実行が行われたことを示す場合、前記トレース生成回路は、前記ターゲットアドレスへの分岐が発生しなかったことを示す第１トレース要素と、前記分岐命令の実行によって処理された分岐が前記処理回路によって取られたか否かを示すタイプの第２トレース要素とを生成するよう構成されている、ことを特徴とする請求項１３〜１５のいずれか一項に記載の装置。
【請求項１７】
前記命令実行情報が前記分岐制御情報によって分岐が発生したことを示すが、前記トレース生成回路は、前の分岐未来命令が前記処理回路によって実行されたかどうか知らない場合、前記トレース生成回路は、前記特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するよう構成されている、ことを特徴とする請求項１３〜１６のいずれか一項に記載の装置。
【請求項１８】
前記分岐制御キャッシュが前記処理回路と関連付けられ、前記処理回路が分岐未来命令の実行後に特定の命令に遭遇した場合に分岐未来命令によって特定されたターゲットアドレスへの分岐を行うのに使用する分岐制御情報を保持するのに用いられ、
前記トレース生成回路は、前記命令実行情報が前記処理回路によって前記分岐未来命令が実行されたことを示す場合に設定される記憶要素を備え、
前記命令実行情報が、分岐制御キャッシュの関連する分岐制御情報を有する特定の命令に遭遇したため、処理回路がターゲットアドレスへの分岐を行なったことを示し、前記記憶要素が設定されている場合、前記トレース生成回路は、前記ターゲットアドレスへの分岐が生じたことを示すトレース要素を前記トレースストリームに発行するよう構成され、さらに前記記憶要素をクリアするよう構成されている、ことを特徴とする請求項１に記載の装置。
【請求項１９】
前記命令実行情報が、前記分岐制御キャッシュに関連する分岐制御情報を有する特定の命令に遭遇したために、前記処理回路がターゲットアドレスへの分岐を行なったことを示し、前記記憶要素が設定されていない場合、前記トレース生成回路は、前記特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するよう構成されている、ことを特徴とする請求項１８に記載の装置。
【請求項２０】
前記命令実行情報が、分岐命令が実行されたために分岐の処理が行われたことを示す場合、前記トレース生成回路は、前記処理回路によって分岐が取られたか否かを示すタイプのトレース要素を発行するよう構成され、さらに前記記憶要素をクリアするよう構成されている、ことを特徴とする請求項１８又は１９に記載の装置。
【請求項２１】
処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースであって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェースと、
各トレース要素に応じて、前記所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、前記現在の命令アドレスと、前記所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する展開回路と、
前記展開回路に対応する分岐制御キャッシュと、
を具備し、
前記展開回路は、前記プログラムイメージをトラバースする際、前記分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を前記分岐制御キャッシュに格納し、
前記展開回路は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を前記所定の命令のうちの次の命令として扱うよう構成されている、
ことを特徴とする装置。
【請求項２２】
前記展開回路は、前記分岐制御情報として、前記分岐未来命令によって特定され、前記特定の命令を判別するのに用いられる分岐点データを記憶するよう構成されている、ことを特徴とする請求項２１に記載の装置。
【請求項２３】
前記展開回路は、前記分岐未来命令内で特定された即値からターゲットアドレスを直接導出可能な場合に、そのターゲットアドレスを分岐制御情報として記憶するよう構成されている、ことを特徴とする請求項２２に記載の装置。
【請求項２４】
処理回路による命令実行を示すトレースストリームを生成する方法であって、
前記処理回路によって実行される命令シーケンスを示す命令実行情報を前記処理回路から受け取る工程であって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、工程と、
前記処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを前記命令実行情報から生成する工程と、
前記分岐未来命令から生じる分岐制御情報を分岐制御キャッシュに格納する工程と、
前記分岐制御キャッシュに格納された前記分岐制御情報に基づいて、前記処理回路がいつ特定の命令に遭遇したかを検出し、前記ターゲットアドレスへの分岐が生じたことを示すトレース要素を前記トレースストリーム内に発行する工程と、
を具備することを特徴とする方法。
【請求項２５】
処理回路によって実行される命令シーケンスを示す命令実行情報を前記処理回路から受け取る入力インタフェース手段であって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェース手段と、
前記処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを前記命令実行情報から生成するトレース生成手段と、
前記分岐未来命令から生じる分岐制御情報を格納する分岐制御キャッシュ手段と、
前記分岐制御キャッシュに格納された前記分岐制御情報に基づいて、前記処理回路がいつ特定の命令に遭遇したかを検出し、前記ターゲットアドレスへの分岐が生じたことを示すトレース要素を前記トレースストリーム内に発行するトレース生成手段と、
を具備することを特徴とする装置。
【請求項２６】
処理回路による命令実行を示すトレースストリームを処理する方法であって、
前記処理回路によって実行される命令シーケンス内の所定の命令が前記処理回路によって実行されることを示す複数のトレース要素を有するトレースストリームを受け取る工程であって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、工程と、
各トレース要素に応じて、前記所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、前記現在の命令アドレスと、前記所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する工程と、
前記分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を前記分岐制御キャッシュに格納する工程と、
前記分岐制御情報を参照して、前記プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を前記所定の命令のうちの次の命令として扱う工程と、
を具備することを特徴とする方法。
【請求項２７】
処理回路によって実行される命令シーケンス内の所定の命令が前記処理回路によって実行されることを示す複数のトレース要素を有するトレースストリームを受け取る入力インタフェース手段であって、前記シーケンスには、前記シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、前記処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、前記特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェース手段と、
各トレース要素に応じて、前記所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、前記現在の命令アドレスと、前記所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する展開手段と、
前記展開手段に対応する分岐制御キャッシュ手段と、
を具備し、
前記展開手段は、前記プログラムイメージをトラバースする際、前記分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を前記分岐制御キャッシュ手段に格納し、
前記展開手段は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を前記所定の命令のうちの次の命令として扱う、
ことを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データ処理システム内における処理回路の活動を示すトレースストリームを生成する機構に関し、特に、当該処理回路による命令実行を示すトレースストリームの生成及び処理を行う機構に関するものである。
【背景技術】
【０００２】
トレース回路を用いて一連のトレース要素を含むトレースストリームを生成することができ、それらの要素については、関連する処理回路の活動を判定する、例えば、処理回路によって実行される命令シーケンスを判定するためにその後分析を行うことができる。そのトレースストリーム内のトレース情報の量を軽減するため、トレース回路は、実行された各命令のそれぞれに別々のトレース要素を生成するのではなく、実行された所定の命令に対してのみトレース要素を生成する、例えば、実行された各分岐命令に対してトレース要素を生成するよう構成されていてもよい。分析回路は、所定の命令に関する情報から、実行された命令シーケンスに関する情報の再構築を行うために、プログラムイメージの利用を図ることができる。
【０００３】
最近では新しいタイプの命令も提案されており、本明細書では分岐未来命令という。分岐未来命令は、任意の命令を分岐に効果的に変換することができる。
【０００４】
これでは、上記トレースストリームを用いた方法で処理回路の実行挙動のトレースを図った場合に、ある所定の命令にだけしかトレース要素が生じないといった重大な問題が生じることになる。具体的には、トレース機構は、各分岐命令についてトレース要素を生成するよう構成されてもよいが、分岐未来命令を用いることにより、（そのトレース機構が分岐命令と見なさない）任意の命令に命令フロー内で分岐を開始させることができ、それによってトレース回路が生成したトレースストリームから処理回路の命令実行挙動を正確に判定する分析回路の能力を低下させてしまう場合がある。
【発明の概要】
【０００５】
本技術は、上記分岐未来命令がある場合にもトレース処理の信頼性を高めることを目的とする。
【０００６】
一構成例では、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースであって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路がシーケンス内で特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェースと、処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを命令実行情報から生成するトレース生成回路と、分岐未来命令から生じる分岐制御情報を格納する分岐制御キャッシュと、を具備し、トレース生成回路は、分岐制御キャッシュに格納された分岐制御情報に基づいて、処理回路がいつ特定の命令に遭遇したかを検出し、ターゲットアドレスへの分岐が生じたことを示すトレース要素を前記トレースストリーム内に発行するように構成されている装置が提供される。
【０００７】
別の構成例では、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースであって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路が前記シーケンス内で特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェースと、
各トレース要素に応じて、所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、現在の命令アドレスと、所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する展開回路と、展開回路に対応する分岐制御キャッシュとを具備し、展開回路は、前記プログラムイメージをトラバースする際、前記分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を前記分岐制御キャッシュに格納し、展開回路は、分岐制御情報を参照して、プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を前記所定の命令のうちの次の命令として扱うよう構成されている装置が提供される。
【０００８】
さらに別の構成例では、処理回路による命令実行を示すトレースストリームを生成する方法であって、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る工程であって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路が前記シーケンス内で特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる工程と、処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを命令実行情報から生成する工程と、分岐未来命令から生じる分岐制御情報を分岐制御キャッシュに格納する工程と、分岐制御キャッシュに格納された分岐制御情報に基づいて、処理回路がいつ特定の命令に遭遇したかを検出し、ターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリーム内に発行する工程とを具備することを特徴とする方法が提供される。
【０００９】
さらに別の構成例では、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェース手段であって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路が前記シーケンス内で特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェース手段と、処理回路による前記シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを前記命令実行情報から生成するトレース生成手段と、分岐未来命令から生じる分岐制御情報を格納する分岐制御キャッシュ手段と、分岐制御キャッシュに格納された分岐制御情報に基づいて、処理回路がいつ特定の命令に遭遇したかを検出し、ターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリーム内に発行するトレース生成手段とを具備することを特徴とする装置が提供される。
【００１０】
別の構成例によれば、処理回路による命令実行を示すトレースストリームを処理する方法であって、処理回路によって実行される命令シーケンス内の所定の命令が処理回路によって実行されることを示す複数のトレース要素を有するトレースストリームを受け取る工程であって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路が前記シーケンス内で前記特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる工程と、各トレース要素に応じて、所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、現在の命令アドレスと、所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する工程と、分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を分岐制御キャッシュに格納する工程と、分岐制御情報を参照して、プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を所定の命令のうちの次の命令として扱う工程とを具備することを特徴とする方法が提供される。
【００１１】
さらに別の構成例では、処理回路によって実行される命令シーケンス内の所定の命令が処理回路によって実行されることを示す複数のトレース要素を有するトレースストリームを受け取る入力インタフェース手段であって、そのシーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれ、該分岐未来命令の実行は、処理回路が前記シーケンス内で特定の命令に遭遇した場合に、特定の命令は、処理回路に分岐未来命令によって特定されるターゲットアドレスへの分岐を行わせる、入力インタフェース手段と、各トレース要素に応じて、所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、現在の命令アドレスと、所定の命令のうちの次の命令との間の命令を示すプログラムイメージ情報から生成する展開手段と、展開手段に対応する分岐制御キャッシュ手段とを具備し、展開手段は、前記プログラムイメージをトラバースする際、分岐未来命令の検出に応じて、該分岐未来命令から得られた分岐制御情報を分岐制御キャッシュ手段に格納し、展開手段は、分岐制御情報を参照して、プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を所定の命令のうちの次の命令として扱うことを特徴とする装置が提供される。
【００１２】
本技術について、ほんの一例として、添付の図面に示す実施例を参照しながらさらに詳しく説明する。
【図面の簡単な説明】
【００１３】
【図１】一実施例に係るシステムを示すブロック図である。
【図２】一実施例で使用するトレースモジュールをより詳細に示すブロック図である。
【図３】一実施例で使用するトレース分析回路をより詳細に示すブロック図である。
【図４Ａ】一実施例に係る図１のシステム内で使用可能なさまざまな形態の分岐先アドレスキャッシュ（ＢＴＡＣ）を示すブロック図である。
【図４Ｂ】一実施例に係る図１のシステム内で使用可能なさまざまな形態の分岐先アドレスキャッシュ（ＢＴＡＣ）を示すブロック図である。
【図４Ｃ】一実施例に係る図１のシステム内で使用可能なさまざまな形態の分岐先アドレスキャッシュ（ＢＴＡＣ）を示すブロック図である。
【図５】一実施例に係る図２のトレースモジュールの動作を示すフロー図である。
【図６】一実施例に係る図３の展開回路の動作を示すフロー図である。
【図７】トレースＢＴＡＣが設けられていない他の実施例における図２のトレースモジュールの動作を示す図である。
【図８】トレースＢＴＡＣが設けられていないさらに他の実施例における図２のトレースモジュールの動作を示す図である。
【発明を実施するための形態】
【００１４】
データ処理システム内の処理回路の活動をトレースすることによって、後にその処理回路のステップバイステップの活動を特定するのに分析可能なトレース要素の流れを生成することは、システム開発において極めて有用なツールである。このトレースストリームの分析は、例えば、処理回路によって実行される一連の命令のデバッグを容易にするために行われてもよい。トレース機構は、通常、処理回路と共にオンチップで設けられる。そのようなオンチップトレース機構の例としては、さまざまなＡＲＭプロセッサと関連して、イギリス、ケンブリッジのＡＲＭ社製エンベデッド・トレース・マクロセル（ＥＴＭ）が挙げられる。このようなトレース機構では、さらなる分析を行うにはオフチップ実装が必要なトレース要素が大量に生成される可能性がある。処理回路のステップバイステップの活動を後で分析可能としつつ、生成されるトレース情報量の軽減を図るために数多くの手法が開発されている。
【００１５】
前述のように、生成されるトレース情報量を軽減させる手法の一つでは、処理回路によって実行される命令シーケンス内の特定の種類の命令に対してトレース要素を出力する工程しか含まれず、トレース分析回路は、それらの特定の命令の実行に関する情報から、処理回路のステップバイステップの命令実行挙動を再構築することができる。一例として、トレース回路は、その分岐が取られたか否かを示す分岐命令が処理されるたびにトレース要素を出力してもよく、分析回路は、トレース要素が生成された命令間において、処理回路によってどの命令が実行されたかの推測を行うことができる。
【００１６】
ここでは分岐未来命令と呼ばれる新しいタイプの命令が提案されている。分岐未来命令は、命令シーケンス内でこの分岐未来命令の後に続く命令を特定するのに用いることができ、分岐未来命令を実行することによって、命令シーケンス内でその特定された命令に遭遇した場合にその分岐未来命令によって特定されたターゲットアドレスへの分岐を後で処理回路に行わせる。よって、この分岐未来命令によって、分岐への任意のいかなる命令でも効果的に変更可能である。
【００１７】
これでは、前述のように、上記トレースストリームを用いた方法で処理回路の実行挙動のトレースを図った場合に、ある所定の命令にだけしかトレース要素が生じないといった重大な問題が生じることになる。以下に説明する実施例は、これらの問題を緩和することを目的とし、分岐未来命令を含む命令シーケンスの提供も行いながら、上記軽減されたトレースストリームを用いた方法を継続して採用することを可能にする。
【００１８】
添付の図面を参照した考察を行う前に、実施例について以下に説明する。
【００１９】
一実施例では、処理回路によって実行される命令シーケンスを示す命令実行情報を処理回路から受け取る入力インタフェースと、処理回路による該シーケンス内の所定の命令の実行を示す複数のトレース要素を含むトレースストリームを該命令実行情報から生成するトレース生成回路とを備えた装置を提供する。命令シーケンスには、シーケンス内の分岐未来命令の後に続く特定の命令を示す分岐未来命令が含まれる。処理回路は、この分岐未来命令を実行することにより、後にシーケンス内でその特定の命令に遭遇した場合に、その分岐未来命令によって特定されるターゲットアドレスへの分岐を行う。これにより、上記特定の命令自体はその実行されたインスタンスにはなく、分岐未来命令によって特定されるターゲットアドレスへの分岐に置き換えられる。
【００２０】
この装置は、分岐未来命令から生じる分岐制御情報を格納する分岐制御キャッシュを備えている。さらに、上記トレース生成回路は、この分岐制御キャッシュに格納された分岐制御情報に基づいて、処理回路がいつ特定の命令に遭遇したかを検出し、上記ターゲットアドレスへの分岐が生じたことを示すトレース要素を該トレースストリーム内に発行するように構成されている。
【００２１】
従って、上記実施例では、分岐未来命令の実行によって特定の命令がいつ分岐に置き換えられたかを検出し、ターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリーム内に発行するために、トレース生成回路は分岐制御キャッシュに保持された分岐制御情報を利用することができる。シーケンス内の所定の命令（例えば、通常の分岐命令）が処理回路によって実行された場合にトレース生成回路によって挿入されるトレース要素に加えて、上記トレース要素をトレースストリームに組み込むことにより、トレース分析回路は、トレースストリーム内のトレース要素から、処理回路によって実行される命令の流れを判定することが可能となる。
【００２２】
その分岐制御情報がトレース生成回路に利用される分岐制御キャッシュは、処理回路に関連する分岐制御キャッシュであってもよく、その場合、処理回路は、命令実行情報の一部として、その分岐制御キャッシュにおいてヒットがいつ処理回路によって検出されたかを示す情報を含んでいてもよい。しかしながら、一実施例では、トレース生成回路に使用される分岐制御キャッシュは、実際には、トレース生成回路に関連する分岐制御キャッシュであり、一実施例では、処理回路自体に対して設けられる任意の分岐制御キャッシュとは別に設けられてもよい。このような実施例では、トレース生成回路は、処理回路から得た命令実行情報によって、その関連する分岐制御キャッシュ内の分岐制御情報を記憶するように構成されていてもよい。よって、このような実施例では、トレース生成回路はそれ自身の分岐制御キャッシュを有し、そこには処理回路がいつ特定の命令に遭遇したかを検出し、適切なトレース要素を発行することを可能にする適切な分岐制御情報が保持されている。
【００２３】
トレース生成回路がその関連する分岐制御キャッシュにデータを投入する方法は実施例によって異なっていてもよい。しかしながら、一実施例では、命令実行情報が処理回路によって分岐未来命令が実行されたことを示す場合、トレース生成回路は、その分岐未来命令によって特定され、上記特定の命令を判定するのに用いられる分岐点データを分岐制御キャッシュ内に格納するように構成されている。この分岐点データはさまざまな形を取ることができるが、特定の命令を判定することができ、処理回路がいつ特定の命令に遭遇したかをトレース生成回路が検出できるのに十分なものである。
【００２４】
一実施例において、分岐点データには、上記特定の命令のアドレスを示すアドレスデータ、その特定の命令の直前の最後の命令のアドレスを示すエンドデータ、上記分岐未来命令と特定の命令との距離を示すオフセットデータ、命令の開始記憶アドレスを区別するメモリ記憶アドレスビットの最下位ビット端部から始まる特定の命令のメモリ記憶アドレスを示す適切なビットサブセット、上記特定の命令の前に処理すべき残りの命令数を示す残存サイズ命令データ、上記特定の命令に到達する前に処理すべき残りのプログラム格納先の数を示す残存サイズデータのうちの一つ又は複数が含まれていてもよい。これらのさまざまな選択肢により、命令シーケンス内の特定の命令にいつ到達したかを判定する機構が提供されることが理解されよう。前述のように、上記処理回路は、その特定の命令をまさに実行しようとする時点に到達すると、分岐未来命令をそれより前に実行しているため、実際にはその特定の命令を実行せず、その時点では、該分岐未来命令によって特定されたターゲットアドレスへの分岐を取る。
【００２５】
一実施例において、トレース生成回路は、処理回路がいつ特定の命令に遭遇したかを受け取った命令実行情報から検出し、その検出時にターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリーム内に発行するために、その関連する分岐制御キャッシュに格納された分岐点データを参照する。
【００２６】
トレース生成回路がその関連する分岐制御キャッシュに上記分岐点データを格納しているかどうかに関係なく、一実施例では、命令実行情報が処理回路によって分岐未来命令が実行されたことを示す場合、トレース生成回路は、その分岐未来命令内で特定された即値からターゲットアドレスを直接導き出すことが可能かどうかを示すターゲットインジケータを分岐制御キャッシュに格納するように構成されている。
【００２７】
このターゲットインジケータ情報は、トレース生成回路がそのターゲットアドレスへの分岐が生じたことを示すトレース要素に関連するトレースストリームにおいてどの情報を提供すべきかを判断する際に用いることができる。具体的には、ターゲットインジケータが分岐未来命令内で特定された即値からターゲットアドレスを直接導き出すことが可能であることを示す場合、トレース分析回路は、通常、処理回路によって実行されるプログラムのプログラムイメージが与えられることによってターゲットアドレスを導き出すことができるので、そのターゲットアドレスに関する追加情報を提供する必要はない。一方で、一実施例では、ターゲットインジケータが即値からターゲットアドレスを直接導き出すことが不可能であることを示す場合、トレース生成回路は、ターゲットアドレスへの分岐が生じたことを示すトレース要素に関連して、処理回路から受け取った命令実行情報から導き出したターゲットアドレスを示す指標をトレースストリーム内に発行するように構成されている。具体的には、トレース生成回路は、トレース分析回路が後にトレースストリームを分析する際にターゲットアドレスを判定可能となるように、処理回路に対して提供された命令実行情報に基づいてターゲットアドレスを決定し、トレースストリームにおいてそのターゲットアドレスを示す指標を出力することができる。
【００２８】
いくつかの例において、トレース生成回路は、処理回路のすべての活動をトレースするように構成されていてもよい。一方、他の実施例では、トレース生成回路の動作は、処理回路によって実行された命令の一部だけが実際にトレースされるよう選択的に行われてもよい。例えば、特定のメモリアドレスレンジ内で実行された命令についてトレースをオンにしてもよい。このような構成では、トレース生成回路は、トレースターゲットアドレスレンジに実際に含まれるシーケンス内のそれらの所定の命令に対してトレース要素を生成し、処理回路が実行済み分岐未来命令によって特定された特定の命令に遭遇したこと（かつ、その特定の命令がトレースターゲットアドレスレンジ内にあること）を分岐制御キャッシュから検出した場合に、さらなるトレース要素を追加する。一方、一実施例では、トレース生成回路は、関連する分岐未来命令が、トレースされている命令シーケンスの当該部分（例えば、アドレスレンジ）内にある場合にだけ分岐制御情報を分岐制御キャッシュに格納するように構成されている。これにより、トレースがアクティブな命令の範囲外に分岐未来命令がある場合、分岐制御キャッシュにはその分岐未来命令に関する入力が行われることはない。
【００２９】
前述のように、トレース生成回路に対応する分岐制御キャッシュは、処理回路が使用する分岐制御情報を保持するのに用いられる処理回路分岐制御キャッシュとは別に備えられ、処理回路が分岐未来命令の実行後に特定の命令に遭遇した場合、分岐未来命令によって特定されたターゲットアドレスへの分岐を処理回路に行わせるようにしてもよい。
【００３０】
一実施例では、処理回路分岐制御キャッシュは１つのエントリしか有しておらず、１つの分岐未来命令から導き出された分岐制御情報しか記憶されない場合、トレース生成回路に対応する分岐制御キャッシュの内容が簡略化されてもよい。具体的には、そのような実施例では、トレース生成回路に対応する分岐制御キャッシュは、その１つの分岐未来命令内で特定された即値からターゲットアドレスを直接導き出すことが可能かどうかを示すターゲットインジケータを格納すればよいが、その特定の命令を判定するのに用いられる分岐点データを格納する必要はない。その代わり、処理回路がその処理回路分岐制御キャッシュにヒットを検出し、その旨をトレース生成回路に転送する命令実行情報を介してトレース生成回路に通知する場合、トレース生成回路は、そのヒットが分岐制御キャッシュのエントリを行なったのと同じ分岐未来命令によるものであることを理解し、ターゲットアドレスへの分岐が生じたことを示すのに発行されるトレース要素に、もしあれば、どの情報を付随させるべきかを判断するのにターゲットインジケータをただ直接利用することができる。このような方法によれば、トレース生成回路に関連付けられる分岐制御キャッシュのサイズ要件を軽減することができる。
【００３１】
前述のように、いくつかの実施例では、トレース生成回路は、処理回路によって実行される命令シーケンス全体をトレースしなくてもよく、その代わり、実行される命令シーケンスの一つ又は複数の部分に対してのみトレース情報を生成するよう設定されてもよい。その場合、分岐未来命令がトレースされている部分の範囲外となる可能性があり、トレース生成回路に対応する分岐制御キャッシュにはエントリが行われない場合がある。そのような実施例では、処理回路がその分岐制御キャッシュに関連する分岐制御情報を有する特定の命令に遭遇したため、ターゲットアドレスへの分岐を行なったことを示す命令実行情報をトレース生成回路が受け取る場合があるが、トレース生成回路に対応する分岐制御キャッシュには同等のエントリが存在しないこともある。そのような場合、一実施例では、トレース生成回路は、特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するよう構成されている。
【００３２】
このような特別な形態のトレース要素は、特定の命令を明確に特定し、その特定の命令に遭遇した際に取られた分岐を完全に特定するのに十分な情報をそのトレース要素内に含む必要があるため、トレース生成回路の関連する分岐制御キャッシュにおいてヒットを検出した際に発行される前述のトレース要素よりも多くの情報を入手する必要がある。従って、一実施例では、そのトレース要素が特定の命令のアドレスとターゲットアドレスを特定する必要がある。この特別な形態のトレース要素は、トレース帯域幅の観点から見れば費用がかかるが、処理回路の分岐制御キャッシュにヒットがあったものの、トレース生成回路の分岐制御キャッシュには同等のヒットが検出されなかったというような特定の例でしか必要とされない。一実施例において、この特別なトレース要素には、既存のタイプのトレース要素の形式、すなわち、命令実行時に発生する例外に関する情報を提供するのにすでに用いられたトレース要素の形式を使用することができる。
【００３３】
一実施例では、トレース生成回路は、所定のトレース制御イベントが発生すると、その関連する分岐制御キャッシュの分岐制御情報を無効にするよう構成されていてもよい。この所定のトレース制御イベントは、さまざまな形を取ることができる。例えば、トレース中のものからいくつかの活動を除外するフィルタリング状態の終了を示す同期イベントや「トレースオン」イベントであってもよい。このようなイベントは、トレース活動の断絶を示すものであってもよい。
【００３４】
いくつかの実施例では、トレース生成回路に対して分岐制御キャッシュを設けなくてもよい。その代わり、処理回路に関連する分岐制御キャッシュを単に用いて、トレース生成回路が分岐未来命令によって特定されたターゲットアドレスへの分岐がいつ生じたかを示すトレース要素を発行するのに十分な情報をそのトレース生成回路に提供するだけで十分であってもよい。
【００３５】
具体的には、一実施例では、処理回路からトレース生成回路に提供される命令実行情報には、分岐未来命令がいつ処理回路に実行されるかの指標、分岐がいつ処理回路に処理されたかの指標、その分岐の処理が分岐命令の実行によるものではなく、処理回路の分岐制御キャッシュに保持された分岐制御情報によるものであったかどうかに関する指標が含まれる。トレース生成回路は、このような情報が提供されると、命令実行情報内のそれらの指標に基づいて生成するトレース要素を決定することができ、具体的には、分岐未来命令によって特定されたターゲットアドレスへの分岐が生じたことを示すトレース要素を発行する必要がある状況を判断することができる。
【００３６】
具体的には、命令実行情報が、分岐未来命令が実行され、次に発生した分岐が分岐制御情報によるものであったことを示す場合、トレース生成回路は、ターゲットアドレスへの分岐が生じたことを示すトレース要素を生成するよう構成されていてもよい。
【００３７】
さらに、一実施例では、命令実行情報が、分岐命令の実行によって分岐の処理が行われ、それに先行して分岐未来命令の実行が行われなかったことを示す場合、トレース生成回路は、処理回路によって分岐が取られたか否かを示すタイプのトレース要素を発行するよう構成されていてもよい。
【００３８】
さらに起こり得る状況として、命令実行情報が、分岐命令の実行によって分岐の処理が行われたが、それに先行して分岐未来命令の実行が行われたことを示す場合がある。これは、例えば、処理回路の分岐制御キャッシュが、分岐未来命令が実行された後であって、命令シーケンス内で特定の命令に遭遇する前の時点でその内容の一部又はすべてを無効にされたという状況が発生した場合に起こり得る。この場合、一実施例では、トレース生成回路は、ターゲットアドレスへの分岐が発生しなかったことを示す第１トレース要素と、分岐命令の実行によって処理された分岐が処理回路によって取られたか否かを示すタイプの第２トレース要素とを生成するよう構成されていてもよい。従って、この場合でも、トレース生成回路は、命令シーケンス内で遭遇した特定の命令を示す第１トレース要素を出力するが、この場合では、ターゲットアドレスへの分岐が生じなかったことを示す。その後、分岐命令の実行を示す、具体的には、分岐が取られたか否かを示す第２トレース要素が続き、この分岐が取られたか否かという状態は、処理回路によって与えられた命令実行情報から判断される。
【００３９】
このような方法により、一実施例のトレース分析回路の正常な動作が確保される。具体的には、後述するように、トレース分析回路には、一実施例では、プログラムイメージ内で分岐未来命令に遭遇した場合に入力を行うそれ自身のローカル分岐制御キャッシュも備えられている。これにより、ターゲットアドレスへの分岐に関連するトレース要素を継続して生成しつつも、その分岐が発生しなかったことを特定することによって、トレース分析装置がトレースストリーム内で受け取る一連のトレース要素に正常に対応できるようにする。
【００４０】
またさらに起こり得る状況の例としては、命令実行情報が分岐制御情報によって分岐が発生したことを示すが、トレース生成回路は、前の分岐未来命令が処理回路によって実行されたかどうかを知るのに十分な情報を持っていない場合がある。これは、例えば、処理回路の活動のサブセットのみがトレースされ、分岐未来命令がそのサブセット外にある場合に起こり得る。この場合、一実施例では、トレース生成回路は、特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するよう構成されている。このトレース要素は、前述の特別なトレース要素と同じ形態を取ることができるため、必要なすべての情報を入手するためにトレース要素の既存の例外型の形式を用いてもよい。この情報には、一実施例では、特定の命令のアドレスとターゲットアドレスが含まれる。
【００４１】
また、分岐制御キャッシュが処理回路と関連付けられ、処理回路が分岐未来命令の実行後に特定の命令に遭遇した場合に分岐未来命令によって特定されたターゲットアドレスへの分岐を行うのに使用する分岐制御情報を保持するのに用いられるさらなる実施例では、トレース生成回路は、命令実行情報が処理回路によって分岐未来命令が実行されたことを示す場合に設定される記憶要素を有するよう構成されていてもよい。また、命令実行情報が、分岐制御キャッシュの関連する分岐制御情報を有する特定の命令に遭遇したため、処理回路がターゲットアドレスへの分岐を行なったことを示し、記憶要素が設定されている場合、トレース生成回路は、ターゲットアドレスへの分岐が生じたことを示すトレース要素をトレースストリームに発行するよう構成され、さらにその記憶要素をクリアするよう構成されている。
【００４２】
従って、本実施例では、トレース生成回路は、分岐制御情報自体を保持しないが、上述のように設定されたりクリアされたりする単純な記憶要素を有する。これにより、トレース生成回路は、処理回路がその分岐制御キャッシュにヒットがあったために分岐を行う場合に、トレース要素を確実に発行することができる。
【００４３】
一実施例では、命令実行情報が、分岐制御キャッシュに関連する分岐制御情報を有する特定の命令に遭遇したために、処理回路がターゲットアドレスへの分岐を行なったことを示し、記憶要素が設定されていない場合、トレース生成回路は、特定の命令と、その特定の命令に遭遇した際に取られた分岐との両方を特定するトレース要素を発行するよう構成されている。このトレース要素は、前述の特別なトレース要素と同じ形態を取ることができるため、必要なすべての情報を入手するためにトレース要素の既存の例外型の形式を用いてもよい。
【００４４】
一実施例では、命令実行情報が、分岐命令が実行されたために分岐の処理が行われたことを示す場合、トレース生成回路は、処理回路によって分岐が取られたか否かを示すタイプのトレース要素を発行するよう構成され、さらに記憶要素をクリアするよう構成されている。従って、トレース生成回路には、通常の分岐が生じた（すなわち、分岐未来命令がそれより前に実行されたためではなく生じた）ことと、記憶要素がクリアされたことが通知される。
【００４５】
さらなる実施例では、トレース分析機能を行う装置が提供されてもよい。具体的には、この装置は、処理回路によって実行される命令シーケンス内の所定の命令が処理回路によって実行されることを示す複数のトレース要素を有するトレースストリームを受け取る入力インタフェースを備えていてもよい。そのシーケンスには、一つ又は複数の前述の分岐未来命令が含まれてもよい。この装置は、各トレース要素に応じて、上記所定の命令のうちの次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースする展開回路をさらに備えている。この展開回路は、現在の命令アドレスと、検出された次の所定の命令との間の命令を示すプログラムイメージ情報から生成する。この装置は、上記展開回路に対応する分岐制御キャッシュをさらに備えている。この展開回路は、プログラムイメージをトラバースする際、分岐未来命令の検出に応じて、その分岐未来命令から得られた分岐制御情報を分岐制御キャッシュに格納する。さらに、展開回路は、分岐制御情報を参照して、プログラムイメージのトラバース時に特定の命令に到達したことを検出する際、その特定の命令を所定の命令のうちの次の命令として扱うよう構成されている。
【００４６】
このように、所定の命令が分岐命令である例を考えると、特定の命令自体が分岐命令ではなかったとしても、展開回路に関連して分岐制御キャッシュを使用することにより、展開回路は、プログラムイメージ内でその特定の命令にいつ遭遇したかを検出することができ、その時点で、その特定の命令をまるで分岐命令であるかのように扱うことができる。これにより、実行される命令シーケンスに分岐未来命令が含まれ、任意の命令が分岐になる可能性があったとしても、処理回路によって実行される特定の命令についてのトレース要素しか生成しないトレースストリームの生成について、トレース分析回路による分析を正常に行うことができる。
【００４７】
上記展開回路に対応する分岐制御キャッシュに格納された情報は、さまざまな形態をとることができる。一実施例では、この展開回路は、分岐制御情報として、分岐未来命令によって特定され、特定の命令を判別するのに用いられる分岐点データを記憶するよう構成されている。さらに、一実施例では、展開回路は、分岐未来命令内で特定された即値からターゲットアドレスを直接導出可能な場合に、そのターゲットアドレスを分岐制御情報として記憶するよう構成されている。これにより、そのターゲットアドレスが即値から直接導出可能である場合、展開回路は、プログラムイメージからターゲットアドレスを判別することができ、そのローカル分岐制御キャッシュ内でそのターゲットアドレスを入手することができる。これにより、特定の命令に遭遇した場合にプログラムイメージ内のどこに分岐を行うべきかを直接判定可能となる。一方、ターゲットアドレスが直接特定できない場合、そのターゲットアドレスを直接特定する情報がトレースストリームに含まれ、展開回路はトレースストリームを含む情報からターゲットアドレスを判定可能であることが上記説明から理解されるであろう。
【００４８】
次に、特定の実施例について図面を参照して説明する。
【００４９】
図１は、一実施例に係るシステムを概略的に示す図である。このシステムには、監視回路１０、トレースモジュール２０、トレースバッファ３０、トレース分析装置４０が備えられている。図１にはトレースバッファ３０を備えたシステムを示すが、他の実施例では、トレースモジュール２０は、その出力をトレースバッファを介さずトレース分析装置４０に直接渡すようにしてもよい。このトレースモジュール２０は、一連のトレース要素を有するトレースストリームを生成するよう構成され、トレース分析装置が監視回路１０の活動を再構築できるようにする。この監視回路１０は、さまざまな形態を取ることができるが、一実施例では、命令シーケンスを実行するよう構成された少なくとも一つの処理装置、例えば、プロセッサコアを備えている。この監視回路は、監視回路で実行されている命令を示す命令実行情報をトレースモジュール２０に出力する。
【００５０】
一実施例ではオンチップ実装され、例えば、イギリス、ケンブリッジのＡＲＭ社製ＥＴＭ回路の形態を取り得るトレースモジュールは、命令シーケンス内の所定の命令の実行を示す一連のトレース要素を含むトレースストリームを生成するよう構成されている。よって、監視回路によって実行される各命令を示すトレース要素を生成するのではなく、トレースストリーム内のトレース要素は、ある所定の命令の実行しか示さず、トレース分析装置には、そのようなトレース要素が与えられた所定の命令間で事項された命令についての情報を再構築するのに十分な知識が（例えば、プログラムイメージを介して）与えられる。例えば、一実施例では、トレースモジュールは、シーケンス内で実行されるすべての分岐命令についてトレース要素を生成するよう構成されてもよく、そのトレース要素によって、分岐が取られたか否かについての情報が与えられる。トレース分析装置４０は、分岐命令の処理に関する情報に基づいて、実際に実行された命令シーケンスの判別を可能にするプログラムイメージを備えている。これにより、生成されるトレース要素の量を大幅に低減させることが可能となる。このことは、トレース分析装置４０は通常オフチップ実装され、トレースストリームにはその分析装置へとチップのピンを介したルーティングが必要となるため、非常に有用である。
【００５１】
監視回路によって実行される命令シーケンスには、分岐未来命令が含まれてもよい。分岐未来命令は、その分岐未来命令に続く任意の命令を特定することができ、その特定された命令に後に遭遇した場合、監視回路は、その命令を実行しない代わりに、分岐未来命令に特定されたターゲットアドレスへの分岐を取るようにしてもよい。この挙動をサポートするため、一実施例では、監視回路は、一つ又は複数のエントリを有する関連する分岐先アドレスキャッシュ（ＢＴＡＣ）を備えていてもよい。分岐未来命令が実行されると、ＢＴＡＣにエントリが割り当てられ、そのエントリには、処理回路がその特定の命令に遭遇した際に分岐を行うべきアドレスを特定するターゲットアドレスと共に、分岐未来命令が示す特定の命令のアドレスをソースアドレスとして記録されている。一実施例では、分岐未来命令の実行と、ＢＴＡＣのポピュレーションが上記のように行われた後、処理回路がそのＢＴＡＣのエントリの一つにヒットを検出すると、例えば、そのプログラムカウンタが更新された、もしくはまさに更新されようとしていることを検出したため、そのアドレスでは特定の命令が実行されない代わりに、命令フローがそのＢＴＡＣのエントリでも得られたターゲットアドレスへと分岐する。
【００５２】
そのような方法によって、分岐未来命令を用いて任意の命令を効果的に分岐に変えることができることが分かる。上記のような方法で分岐未来命令によって特定される場合、処理回路は実際その特定の命令を実行せず、その代わりに分岐未来命令によって特定された分岐を行うので、その特定の命令の形態は重要ではない。分岐未来命令は、必要に応じて、条件的に実行することができる。従って、分岐未来命令を実行する条件が満たされた場合、上記処理が発生し、その後特定の命令に遭遇した場合、監視回路は特定の命令を実行するのではなく、ターゲットアドレスへの分岐を行う。一方、分岐未来命令を実行する時点で上記条件が満たされなかった場合、分岐未来命令は実行されず、そのうちに特定の命令が通常の方法で実行され、その特定の命令で特定された機能が実行される。
【００５３】
このような分岐未来命令を用いることによって、監視回路で行われ得る動作に大きな柔軟性が付加され、トレースモジュール２０が前述のタイプのトレースストリームを生成するよう構成されている場合に、監視回路によって実行されるシーケンス内のある所定の命令に対してしかトレース要素が生成されないという重要な問題がトレースモジュールに対して生じる。具体的には、トレースモジュールが、実行された各分岐命令に対してトレース要素を生成するよう設定されている場合に、分岐未来命令によって分岐を生じるものとしてフラグが付けられた特定の命令についてトレース要素を通常は生成しない。そのような分岐が生じたことについて、トレースストリームによって正しくフラグが付けられないと、トレース分析装置は、監視回路によって実行された命令シーケンスを正確に推測することができない。
【００５４】
例外が起きた場合についての情報をトレースするのと同じ方法で、監視回路のＢＴＡＣにおけるエントリによってフラグが付けられた特定の命令に到達した結果発生した上記分岐をトレースするトレース生成回路を設けることもできる。しかしながら、この方法では、特定の命令のアドレスと分岐先のターゲットアドレスの両方をトレースする必要があるので、トレース帯域幅の観点から見ても費用がかかってしまい、トレースストリーム形式の効率性を大幅に低下させてしまうこともある。
【００５５】
後でさらに説明するように、事前に分岐未来命令が実行されたため、監視回路のＢＴＡＣ内のエントリにマッチする特定の命令に遭遇したために、監視回路内で生じる分岐をトレース生成回路が効率的にトレースできるようにする機構が提供される。
【００５６】
図２は、一実施例のトレースモジュール２０を示すブロック図である。図示のように、トレースモジュール２０は処理部５０に接続され、その処理部５０は、一実施例では、監視回路１０の少なくとも一部を形成する。この処理部５０は、各分岐未来命令の実行時に入力される分岐制御情報を保持する関連するＢＴＡＣ５５を有する。このＢＴＡＣ５５は一つ又は複数のエントリを有し、処理部５０が分岐未来命令を実行するたびに、ＢＴＡＣ５５内のエントリの一つに特定の分岐制御情報が入力される。具体的には、一実施例では、図４Ａに示すように、ＢＴＡＣ５５内の各エントリには、分岐未来命令が示す特定の命令のアドレスを保存するソースアドレスフィールド１５５と、分岐未来命令が示すターゲットアドレスを記憶するターゲットアドレスフィールド１６０とが含まれる。一実施例では、フィールド１５５には、特定の命令のアドレスが記憶される、より一般的には、前述のいずれかの形態を取ることができ、処理部が命令ストリームでいつ特定の命令に遭遇したかを検出するのに十分な分岐点データが記憶される。命令ストリーム内で特定の命令に遭遇したことを示すヒットがＢＴＡＣ５５のいずれかのエントリで検出されるたびに、その特定の命令は実行されず、代わりに、処理部が関連するターゲットアドレスフィールド１６０のターゲットアドレスへの分岐を行う。
【００５７】
処理部５０によって命令シーケンスが実行されると、命令実行情報がトレースモジュール２０の入力インタフェース６５に渡され、そこからトレース生成回路６０に転送される。トレース生成回路６０は、必要に応じて、入力インタフェース６５を介して受け取った命令実行情報から得られた特定の分岐制御情報が格納される関連するトレースＢＴＡＣ７５を備えていてもよい。一実施例では、このトレースＢＴＡＣ７５は、図４Ｂに示す形態を取り、一つ又は複数のエントリを有している。各エントリは、処理部によって実行された分岐未来命令が示す特定の命令のアドレス（又は、前述したものと同等の他の分岐点データ）をソースアドレスとして記憶するフィールド１６５を有する。さらに、そのような各エントリには、ターゲットアドレスが分岐未来命令から、例えば、分岐未来命令における即値として与えられることによって、直接判定できるかどうかを示すフィールド１７０がさらに設けられている。また、その内容がターゲットアドレスの導出に用いられるレジスタが分岐未来命令によって特定される場合、そのターゲットアドレスは間接ターゲットアドレスであると考えられ、そのターゲットアドレスは直接ではない、すなわち、間接であるというフラグがフィールド１７０に立てられる。トレースＢＴＡＣには、ターゲットアドレス自体を実際に保存する必要はない。
【００５８】
一実施例では、分岐未来命令の実行に関連する条件コードが満たされたかどうかに関係なく、トレースＢＴＡＣ７５にエントリがなされる。
【００５９】
トレースモジュール２０は、一つ又は複数の所定のトレース制御イベントが発生した際に、そのトレースＢＴＡＣ７５の内容を無効にするよう構成されていてもよい。これらのトレース制御イベントは、さまざまな形態を取ることができるが、例えば、所定のトレースフィルタリング動作の終了を示す同期イベントや「トレースオン」イベントであってもよい。このようなイベントは、トレースの断絶を示すものであってもよい。これにより、古い情報がトレースＢＴＡＣ７５に保持されないようにする。
【００６０】
後述するように、いくつかの実施例では、トレースＢＴＡＣはフィールド１６５を有していなくてもよく、フィールド１７０内にターゲットアドレスの直接的／間接的な性質を保存してさえいればよい。さらに、図７及び図８の実施例を参照して説明するように、いくつかの実施例では、トレースモジュール２０は、トレースＢＴＡＣ７５を別個に保持していなくてもよく、トレース生成回路６０が必要なトレース要素を生成するには、処理部５０から得られたそのローカルＢＴＡＣ５５とのやりとりを示す情報で十分であってもよい。図８を参照して後述する実施例では、図８で説明する方法でその内容が設定されたりクリアされたりする小さな記憶要素７８がトレースモジュールに保持されている。
【００６１】
一実施例では、トレース生成回路６０は、命令シーケンスで分岐命令が実行されるたび、そのトレースストリーム内のトレース要素を出力するよう構成されている。そのトレース要素は、分岐が取られたか否かも示し、このことは、処理部５０から入力インタフェース６５を介して受け取った命令実行情報から導出可能である。トレース要素のストリームは、出力インタフェース７０を介して転送され、さらにトレースバッファ３０及び／又はトレース分析装置４０へ向かって伝播される。各トレース要素は、本明細書では「アトム」ということもある。
【００６２】
また、トレース生成回路は、そのローカルトレースＢＴＡＣ７５に記憶された分岐制御情報に基づいて（又は、いくつかの実施例では、処理部のローカルＢＴＡＣ５５に発生したヒットを示す処理部５０によって転送されたＢＴＡＣヒット情報に基づいて）処理部５０が実行済み分岐未来命令によって特定された命令にいつ遭遇したかを検出するよう構成されている。また、この場合、トレース生成回路は、ターゲットアドレスへの分岐が発生したことを示すトレース要素をトレースストリームに発行する。このターゲットアドレス自体は、その後トレース分析装置４０によって判定可能なため、分岐未来命令から直接推測可能であれば、トレースストリームにおいて特定されなくてもよい。しかしながら、ターゲットアドレスが直接推測可能ではない場合、トレース生成回路６０は、処理部５０から得られた情報からターゲットアドレスを判定し、そのターゲットアドレスがその後トレース分析装置４０によって使用可能なように、トレースストリームに出力する。
【００６３】
図３は、一実施例のトレース分析装置４０を概略的に示す図である。トレース分析装置４０は、その入力インタフェース１０５でトレースストリーム（一連のアトム）を受け取り、そこからその情報を展開回路１００に転送する。この展開回路１００は、開始回路が実行したプログラムコードのコピーを提供するプログラムイメージ１１０にアクセスできる。展開回路１００は、そのプログラムイメージ内の現アドレスを追跡し（この現アドレスは、トレースがオンになった時点など、所定の時点での所定の初期値に設定される）、新しいアトムを受け取るたびに、プログラムイメージにおける特定のタイプの次の命令、例えば、トレースストリーム内の各トレース要素が分岐命令の実行を示す上記例では分岐命令に到達するまで、プログラムイメージをトラバースする。この展開回路は、現アドレスとその次の所定の命令との間に実行された各命令に関する情報をプログラムイメージから抽出し、その実行情報をすべて分析回路１２０に出力して分析を行う。プログラムイメージでその次の所定の命令に遭遇すると、トレースストリームで次のアトムを受け取った場合に同じプログラムイメージのトラバース処理を新しい現アドレスから再開できるように、その遭遇した分岐のターゲットアドレスに基づいて現アドレスを更新する。
【００６４】
前述のように、トレースストリームには、通常の分岐命令に加えて、監視回路が分岐未来命令によって示される特定の命令に遭遇したためにターゲットアドレスへの分岐が発生したことがトレースモジュール２０によって検出された際に挿入されたトレース要素も含まれる。そのような場合に、展開回路１００がプログラムイメージのトラバース処理を適切に行うため、展開回路には、図３では展開ＢＴＡＣ１１５という関連するローカルＢＴＡＣも備えられている。展開回路１００は、分岐未来命令に遭遇した際に、プログラムイメージ１１０のトラバース処理を行う場合、その分岐未来命令から得られた分岐制御情報を展開ＢＴＡＣ１１５に記憶する。一実施例では、展開ＢＴＡＣは、図４Ｃに示す形態を取理、一つ又は複数のエントリを有する。各エントリは、分岐未来命令が特定する命令のアドレス（又は、前述したものと同等の他の分岐点データ）をソースアドレスとして記憶するフィールド１７５と、ターゲットアドレスが分岐未来命令から直接判定できる場合にそのターゲットアドレスを記憶するフィールド１８０とが含まれる。具体的には、その場合、展開回路１００は、プログラムイメージの内容から直接ターゲットアドレスを判定することができ、そのターゲットアドレスをフィールド１８０に保存する。そのターゲットアドレスが直接判定可能ではない場合、フィールド１８０は空白のままとなり、展開回路は、後にトレースストリームに与えられた情報からターゲットアドレスを判定する。
【００６５】
展開ＢＴＡＣ１１５のポピュレーションが上記の方法で行われると、展開回路１００は、プログラムイメージのトラバース処理を行う際にこの展開ＢＴＡＣ１１５を参照することができる。プログラムイメージ内で考慮されている現命令のアドレスから、展開ＢＴＡＣ１１５のエントリの一つにソースアドレス情報とのヒットがあることが検出されるたびに、現在考慮中の命令が、分岐未来命令によって特定された特定の命令であると判断し、次の分岐命令に到達するまで待つのではなく、その特定の命令が次の所定の命令として扱われる。その時点で、展開回路１００は、プログラムイメージの現在のトラバース処理中にトラバースされたすべての命令に関する情報を分析回路１２０に提供することができ、その時点で、現アドレスをターゲットアドレスに更新することもできる。直接ターゲットアドレスとしては、展開ＢＴＡＣ１１５内の関連するエントリのフィールド１８０に示すターゲットアドレスであり、その一方で、間接ターゲットアドレスとしては、そのターゲットアドレス情報は、現在考慮中のアトムに関連して、トレースストリームに直接提供される。
【００６６】
トレースモジュール２０のＢＴＡＣ７５に関して前述した方法と同様に、トレース分析装置４０は、一つ又は複数の所定のトレース制御イベントが発生すると、その展開ＢＴＡＣ１１５の内容を無効化し、その展開ＢＴＡＣ１１５に古い情報が保持されないようにするよう構成されてもよい。
【００６７】
図５は、一実施例に係る図２のトレースモジュール２０が実行し得る処理を示すフロー図である。ステップ２００では、監視回路が現在実行中の命令に関する情報を待ち、その情報を受け取った時点で、入力インタフェース６５を介してトレース生成回路６０へ送る。ステップ２０５では、トレース生成回路は、その現在の命令がトレースされるかどうかを判定する。いくつかの実施例では、命令シーケンス全体がトレースされると判断されてもよいが、他の実施例では、トレース機構は、現在実行中の命令によって選択的にオン・オフされてもよい。これにより、コードの特定の部分をトレース可能とし、その他の部分はトレースされない。そのような実施例では、それらのトレース対象のコードの部分に関してのみトレースストリームが生成され、前述の機構により、実際のトレース要素／アトムはそれらの部分で実行される特定の命令にしか関連しない。こうすることで、トレース分析装置は、それらの部分のその他の命令に関する情報を再構築することができる。
【００６８】
ステップ２０５で現在の命令がトレースされないと判定された場合、処理は単にステップ２００に戻り、監視回路が実行する次の命令に関する情報を待つ。
【００６９】
ステップ２０５で現在の命令がトレースされると判定された場合、トレース生成回路は、ステップ２１０で、現在の命令のアドレスがトレースＢＴＡＣ７５のエントリにヒットするかどうかを判定する。ヒットする場合、現在の命令が以前に実行された分岐未来命令によって特定された特定の命令であることを示すため、まるで分岐であるかのように処理されなければならない。そのため、ステップ２１５では、その現在の命令は、分岐命令として扱われ、トレースストリームにアトムが発行される。
【００７０】
一実施例では、トレース生成回路がトレースアトムを発行するよう構成された所定の命令を「Ｐ０命令」といい、このＰ０命令の例として、一実施例では、分岐命令が挙げられる。Ｐ０命令としては、その他のタイプの命令も考えられ、対応するアトムをトレースストリームに発生させる。分岐未来命令によって特定される命令は必ずしもそれ自体がＰ０命令ではないが、トレースＢＴＡＣ７５にヒットが存在するため、まるでＰ０命令であるかのように扱われ、Ｐ０命令に相応しいアトムがステップ２１５でトレースストリームに発行される。トレースＢＴＡＣ７５の関連するエントリの直接／間接ターゲットアドレスフィールド１７０が、分岐未来命令からターゲットアドレスを直接判定可能であることを示す場合、ターゲットアドレス情報をトレースストリームに出力する必要はない。さらに、この時点では、現在の命令が単にＰ０命令として扱われるので、ソースアドレス情報も出力する必要はなく、必要なのはＰ０命令が実行されたことを特定するアトムだけである。そのようなアトムのことを、一実施例では、「Ｅ」アトムという。これにより、分岐が発生したことを示す符号化が非常に効率的に行われる。
【００７１】
トレースＢＴＡＣの関連するエントリのフィールド１７０が、ターゲットアドレスが間接ターゲットアドレスであることを示す場合、トレース生成回路は、処理部５０によって提供された命令実行情報からターゲットアドレスを判定し、そのターゲットアドレスが後にトレース分析装置４０によって利用可能となるよう、そのターゲットアドレスの指標がトレースストリーム内のＥアトムの後に続く。ステップ２１５の後、処理はステップ２００に戻り、処理部５０が実行する次の命令の情報を待つ。
【００７２】
ステップ２１０で現在の命令のアドレスがトレースＢＴＡＣ７５のエントリにヒットしない場合、現在の命令が通常のＰ０命令、例えば、通常の分岐命令であるかどうかを判定する。そうである場合、ステップ２２５で、そのＰ０命令に対する通常のアトムが命令ストリームに発行される。分岐命令を考慮すると、命令実行情報は、分岐命令が実行された際に分岐が取られたか否かを特定し、この情報をステップ２２５で発行したアトムに提示することができる。具体的には、前述の「Ｅ」アトムは、分岐が取られた場合に発行されるが、分岐が取られなかった場合には「Ｎ」アトムが発行される。このようにアトムが存在すること自体によりＰ０命令に遭遇したことが示され、そのアトムのＥ／Ｎフレーバーは、分岐が取られたか否かを示す。前のステップ２１５を参照して、トレースＢＴＡＣでヒットが検出され、それにより現在の命令がＰ０命令として扱われる場合、以前に行われた分岐未来命令の実行により処理回路がターゲットアドレスへの分岐を行うため、分岐が取られたことが分かり、ステップ２１５では生成されるアトムが常にＥアトムであることが理解されよう。
【００７３】
ステップ２１５で前述したのと同様に、ステップ２２５では、ターゲットアドレスが分岐命令から直接導出可能である場合、ターゲットアドレス情報を発行する必要がない。しかしながら、直接導出可能ではない場合、トレース生成回路は、ターゲットアドレスの判定を行い、そのターゲットアドレスの指標をＥ／Ｎアトムに関連付けてトレースストリームに出力する。その後、処理はステップ２００に戻る。
【００７４】
ステップ２２０で現在の命令が通常のＰ０命令ではないと判定された場合、ステップ２３０では、現在の命令によって、処理部のＢＴＡＣ５５にヒットが存在するため、処理部がそのプログラムカウンタを変更したかどうかを判定する。これは、例えば、処理部の命令サブセットのみがトレースされるトレースフィルタリング動作によって行われることもある。関連する以前の分岐未来命令がそのトレースされた命令サブセットの範囲外である場合、その分岐未来命令に関する情報はトレースＢＴＡＣ７５に保存されず、ステップ２１０からは「いいえ」の経路をたどることになる。一方、ステップ２３０で処理部のＢＴＡＣ５５にヒットが存在するため、処理部に分岐が発生したと判定された場合、処理かステップ２３５に進んで、現在の命令とターゲットアドレスに関して必要なすべての情報を入手する特別なタイプのアトムによって、トレースストリームで現在の命令をトレースする。具体的には、そのアトムによって現在の命令のアドレスと分岐先のターゲットアドレスが特定される。このために、一実施例では、処理部５０において命令実行中に発生する例外に関する情報を入手するのに用いられる既存のタイプのアトムを使用することができる。ステップ２３５で発行されたアトムとそれに関連する情報は、ステップ２１５、２２５で発行したアトムに比べて、トレース帯域幅の観点からも費用がかかるが、トレースＢＴＡＣが関連する分岐未来命令についての情報を入手できない場合にのみ発行すればよい。ステップ２３５の後、処理はステップ２００に戻る。
【００７５】
ステップ２３０で、現在の命令により、処理部のＢＴＡＣ５５にヒットが存在するため、処理部がそのプログラムカウンタを変更しないと判定された場合、ステップ２４０では、現在の命令により処理部ＢＴＡＣ５５をプリロードするかどうか、すなわち、現在の命令が前述の分岐未来命令の一つであるかどうかを判定する。そうであった場合、ステップ２４５では、トレースＢＴＡＣ７５内のエントリを割り当て、ソースアドレスフィールド１６５と直接／間接フィールド１７０に処理部から転送された命令実行情報から得られた情報を入力する。その後、処理はステップ２００に戻る。
【００７６】
トレースＢＴＡＣ７５は、一実施例では、図４Ｂに示す形態を取り、ステップ２４５では、ソースアドレスと直接／間接ターゲットアドレス情報の両方がフィールド１６５、１７０に保存されるが、一実施例では、ソースアドレスフィールド１６５を削除して、直接／間接ターゲットアドレスフィールド１７０のみをトレースＢＴＡＣに保持してもよい。具体的には、処理部ＢＴＡＣ５５に１つのエントリしかなく、１つの分岐未来命令についての情報しか記憶できない場合に、処理部５０から転送された命令実行情報がそのローカルＢＴＡＣ５５にヒットがあったことを示す場合、トレース生成回路６０は、そのトレースＢＴＡＣ７５に保持しているエントリがその同じ分岐未来命令に関するものであると推測してもよく、ソースアドレスのチェックを行う必要なく、直接／間接ターゲットアドレス情報１７０を直接使用することができる。
【００７７】
図６は、一実施例に係る図３の展開回路１００が行う処理を示すフロー図である。ステップ３００では、入力インタフェース１０５でトレースストリームのアトムを受け取ったかどうかを判定する。アトムを受け取った場合、ステップ３０５では、展開回路１００が現アドレスからプログラムイメージ１１０のトラバース処理を開始する。トレース開始点もしくはトレース活動内の同期点では、現アドレスが特定値に設定されていてもよい。その後、以下の図６についての詳細な説明からも分かるように、展開回路が行うプログラムトラバース動作に基づいて更新される。
【００７８】
ステップ３１０では、現在の命令の詳細が分析回路１２０に出力され、ステップ３１５では、プログラムイメージを参照して、現在の命令（すなわち、現アドレスが指す命令）が処理部のＢＴＡＣ５５をプリロードする命令、すなわち、上記分岐未来命令のうちの一つであるかどうかを判定する。そうである場合、処理はステップ３２０に進み、そこで展開回路１００は、その展開ＢＴＡＣ１１５にエントリを割り当て、分岐未来命令が特定した命令のアドレスをソースアドレスとしてそのエントリに記憶する。また、現在の命令、すなわち、分岐未来命令から直接算出可能な場合、そのターゲットアドレスをそのエントリに記憶する。その後、処理はステップ３３５に進み、そこでプログラムイメージの次の命令を（指示するアドレスをプログラムイメージの次の命令に進めることにより）現在の命令に設定し、処理がステップ３１０に戻る。
【００７９】
ステップ３１５で現在の命令が分岐未来命令ではないと判定された場合、ステップ３２５では、現在の命令のアドレスが展開ＢＴＡＣ１１５に記憶されたソースアドレスと一致するかどうかを判定する。一致する場合、現在の命令が事前に実行された分岐未来命令によって特定された特定の命令であることを示すため、Ｐ０命令の場合と同様に、プログラムイメージのトラバース処理を停止させる命令として扱われなければならない。これにより、処理はステップ３４０へと進み、展開回路が保持している現アドレスがターゲットアドレスに更新される。これは、ターゲットアドレスが直接ターゲットアドレスであれば、展開ＢＴＡＣエントリから直接入手できるし、ターゲットアドレスが間接ターゲットアドレスであれば、トレースストリームに与えられた情報から入手できる。ステップ３４５では、処理はプログラムイメージのトラバース処理を停止させ、ステップ３００に戻って次のアトムを待つ。
【００８０】
ステップ３２５で現在の命令のアドレスが展開ＢＴＡＣに保持されたソースアドレスと一致しないと判定された場合、ステップ３３０では、プログラムイメージの現在の命令が通常のＰ０命令、例えば、分岐命令であるかどうかを判定する。そうであれば、処理は再びステップ３４０に進み、それでなければステップ３３５に進む。
【００８１】
このような方法により、通常のＰ０命令に関連付けられるか、分岐未来命令に特定された命令に関連付けられた各アトムを受け取ると、プログラムイメージがトラバースされるということが分かる。図６で説明した方法により入力が行われる展開ＢＴＡＣ１１５を用いることで、展開回路１００は、トレースストリームを正しく解釈する、具体的には、各アトムに応じてプログラムイメージのトラバース処理を停止するタイミングを正確に判断することができ、それによって、命令フローの分岐を、それらが分岐命令によるものなのか、分岐未来命令によって分岐へと任意に変換されたその他の命令によるものなのかどうかに関係なく、正しく追跡することが可能となる。
【００８２】
図７は、トレースＢＴＡＣ７５を必要としない他の実施例における図２のトレースモジュール２０の動作を示すフロー図である。
【００８３】
ステップ４００では、トレース生成回路は、処理部から受け取った命令実行情報を、分岐が処理部によって処理されたという指標がその情報に含まれるまで蓄積させる。一実施例では、処理部は、各命令が処理部によって実行されると、命令実行情報を提供してもよい。一方、ウェイポイントインタフェースが処理部５０とトレースモジュール２０の間に保持される（ウェイポイントインタフェースは、処理部５０とトレースモジュール２０の間に保持されている次の分岐のアドレスを前の分岐のターゲットアドレスに提供することによる命令の実行を意味する）他の実施例では、処理部自身によって、分岐のようなポイントが処理されるまで、必要な命令実行情報のバッファリングが行われてもよく、そのすべての命令実行情報を一括してトレースモジュール２０に提供する。
【００８４】
ステップ４０５では、処理部から提供された情報が、分岐未来命令が分岐の前に実行されたことを示すかどうかを判定する。そうであれば、ステップ４１０で、処理部からの情報が、発生した分岐は処理部のＢＴＡＣ５５におけるヒットによるもの、すなわち、処理部が実行された分岐未来命令により特定された命令に遭遇した結果生じたものであることも示しているかどうかを判定する。そうであれば、処理はステップ４１５に進み、ターゲットアドレスに対するＢＴＡＣヒット分岐を示すＥアトムをトレースストリームに発行する。ターゲットアドレスが分岐未来命令から直接判定可能であれば、そのＥアトムに加えてさらなる情報は必要ないが、ターゲットアドレスが間接的なものである場合、トレース生成回路６０は、処理部５０から提供された命令実行情報からターゲットアドレスを判定し、そのターゲットアドレスはトレースストリームのＥアトムに関連付けられて転送される。その後、ステップ４４５では、トレースモジュール２０に現在保持されている命令実行情報がクリアされて、処理がステップ４００に戻る。
【００８５】
処理部に提供された情報が、分岐の前に分岐未来命令が実行されたことを示しているとステップ４０５で判定されたにも関わらず、分岐が処理部ＢＴＡＣのヒットによるものではなかったとステップ４１０で判定された場合、処理はステップ４２０に進む。この時点で、トレース生成回路６０は、ＢＴＡＣベースの分岐に対してＮアトムを発行して、ＢＴＡＣベースの分岐が発生しなかったとフラグを立て、その後発生した通常の分岐を特定するアトムをさらに発行する。前述のように、このアトムは、処理部５０により提供された命令実行情報から判定されるような、その分岐命令の取られたか／取られなかったかの挙動によって、Ｅアトム又はＮアトムである。ステップ４２０の後、処理はステップ４４５に進む。
【００８６】
処理部からの情報が、分岐の前に分岐未来命令が実行されたことを示していないとステップ４０５で判定された場合、処理はステップ４２５に進み、分岐未来命令が実行されたか否かが命令実行情報から実際にわかっているかどうかを判定する。分岐未来命令が実行されなかったことがその情報から分かっている場合、処理はステップ４３０に進み、命令実行情報における取られたか／取られなかったかに関する情報によって、Ｅアトム又はＮアトムであるアトムが発生した通常の分岐に対して発行される。
【００８７】
一方、処理部に実行された命令シーケンスのある特定の部分だけがトレースの対象となる実施例では、分岐未来命令が実行されたか否かをトレースモジュールが断定できない場合がある。その場合、ステップ４２５からは「はい」の経路をたどり、ステップ４３５では、処理部によって提供された情報が、分岐がそれでもなお処理部ＢＴＡＣ５５のＢＴＡＣヒットによるものであることを示しているかどうかを判定する。そうであれば、処理はステップ４４０に進み、発生した分岐イベントに関するすべての必要な情報が含まれる前述の「例外型」アトムが発行される。具体的には、そのアトムには、分岐を発生させた命令のアドレスと、分岐先ターゲットとが含まれる。
【００８８】
処理部からの情報が、分岐がＢＴＡＣヒットによるものではなかった、すなわち、通常の分岐によるものであったことを示している場合、処理はステップ４３５からステップ４３０へと進む。ステップ４３０又は４４０の後、処理はステップ４４５に進む。
【００８９】
図７を参照して説明したような実施例では、トレース生成回路に対応するトレースＢＴＡＣ７５がなくてもシステムを運用可能であることが理解されよう。その代わり、トレース生成回路は、処理部ＢＴＡＣ５５内で発生したＢＴＡＣヒットを示す、処理部５０から提供された情報により動作を行い、トレース要素を生成する。なお、図７の方法を採用する場合も、トレース分析装置４０は展開ＢＴＡＣ１１５を含み、展開回路１００は図６を参照して説明した方法で動作を行う。
【００９０】
図８は、さらに他の実施例に係るトレースモジュール２０の動作を示すフロー図である。本実施例では、トレースモジュール２０は、前述のトレースＢＴＡＣ７５を備えておらず、図８で説明する方法で設定されたりクリアされたりするフィールド（一実施例では、単一ビットであってもよい）を保持する単純な記憶要素７８を備えている。図８のステップ５００及び５０５は、前述の図５のステップ２００及び２０５に対応し、ステップ５１０及び５１５は、図５のステップ２２０及び２２５に対応する。本実施例では、トレースモジュールがそれ自身のＢＴＡＣ７５を備えていないので、図５のステップ２１０及び２１５は図８では反復され図、ステップ５０５からの「はい」の経路が直接ステップ５１０へ進む。処理がステップ５１５に進んで現在の命令に対してアトムが発行される場合、ステップ５２９では、トレースモジュールの記憶要素７８がクリアされて、その後処理がステップ５００に戻る。
【００９１】
現在の命令が通常のＰ０命令ではないとステップ５１０で判定された場合、図５のステップ２３０に対応するステップ５２５に処理が進む。現在の命令によって、処理部５０にそのローカルＢＴＡＣ５５にヒットが存在するために、そのプログラムカウンタを変更させるとステップ５２５で判定された場合、ステップ５３０では、トレースモジュールの記憶要素７８が設定されているかどうかを判定する。設定されている場合、ステップ５３５では、現在の命令がＰ０命令として扱われ、トレースストリームにアトムが発行される。このステップ５３５は、基本的には図５のステップ２１５に対応している。その後、ステップ５４０では、トレースモジュールの記憶要素がクリアされて、処理がステップ５００に戻る。
【００９２】
ステップ５３０で記憶要素７８がセットされていないと判定された場合、図５のステップ２３５に対応するステップ５４５へと処理が進み、「例外型」アトムが発行された後、処理がステップ５００に戻る。
【００９３】
現在の命令によって、ＢＴＡＣ５５にヒットが存在するために、処理部にそのプログラムカウンタを変更させないとステップ５２５で判定された場合、ステップ５５０では、現在の命令が分岐未来命令であるかどうかを判定し、処理部５０によって処理部のＢＴＡＣ５５にエントリの割り当てを行う。そうであれば、ステップ５５５では、記憶要素７８のビットを設定し、その後処理がステップ５００に戻る。一方、ステップ５５０から「いいえ」経路をたどる場合、処理はただ直接ステップ５００に戻る。
【００９４】
一実施例では、図８で説明した方法によって設定やクリアが行われる前述の単一ビットが記憶要素７８に単に保持される。その際、処理部５０からトレースモジュール２０に転送された命令実行情報は、処理回路が特定の命令に遭遇した場合に発生する分岐に対するターゲットアドレスが分岐未来命令内で特定される即値から直接導出可能なものであるか否かを示すよう構成することができる。図５のステップ２１５を参照して前述したのと同様に、ステップ５３５でＥアトムを発行する際に、ターゲットアドレスが直接導出可能ではないと判定された場合、トレース生成回路は、処理部５０によって提供された命令実行情報からターゲットアドレスを判定し、トレース分析装置４０が後にそのターゲットアドレスを入手できるよう、そのターゲットアドレスの指標がトレースストリームのＥアトムに続く。
【００９５】
他の実施例において、記憶要素は、ステップ５５５では、トレースＢＴＡＣ７５のフィールド１７０について前述した方法と同様に、直接的／間接的な指標を必要に応じて保持し、トレースモジュール２０は、ターゲットアドレスが直接的か間接的か、ひいてはターゲットアドレスの指標をトレースストリームに出力する必要があるか否かを決定する際にその情報を参照することができる。
【００９６】
上記実施例から、分岐未来命令を実行することにより、分岐挙動と、シーケンスで特定の命令に遭遇した場合に分岐未来命令によって特定されるターゲットアドレスへの分岐を処理回路に行わせる特定の命令とを対応付けることが可能となることが理解されよう。このトレース機構により、トレース分析装置が処理回路によって実行された命令フローを正確に判定することができるよう、上記分岐挙動をトレースすることが可能となる。
【００９７】
上記実施例で説明した分岐未来命令は、命令シーケンスで後に遭遇する任意の命令をターゲットアドレスへの分岐を発生させる命令と見なす。一方、上記技術を採用し得る分岐未来命令と見なされる他の形態の命令としては、プログラムループ本体の終了時点でのループエンド命令がある。その時点では、そのループエンド命令は、プログラムループ本体内での直前の命令を特定の命令と見なし、ターゲットアドレスがプログラムループ本体の開始時点における命令のアドレスである。この場合、プログラムループの性質上、特定の命令がまずループエンド命令の前に現れるが、そのループがさらに反復して行われると、後に何度も命令シーケンスでも遭遇することになる。従って、トレース生成部は、上記直前の命令に対する分岐制御情報が処理部の分岐制御キャッシュに格納される時点でその直前の命令に遭遇するために分岐が発生したことを命令実行情報が示すたびに分岐がトリガされたことを示すトレース要素を発行するよう構成することができる。
【００９８】
このようなループエンド命令は、いわゆる「ゼロオーバーヘッドループ」の実施に利用可能である。この「ゼロオーバーヘッドループ」では、ループエンド命令（ゼロオーバーヘッドループエンド（ＺＯＬＥ）命令ともいう）が、ループが反復されるたびに実行されなくてもよく、最初の反復が行われた後、プログラムループ本体の最後から二番目の命令に遭遇した際にさらなる反復に必要な分岐処理をトリガすることができる。上記の方法でトレース生成部にトレース要素を生成させることにより、分析回路は、処理回路によるそのようなゼロオーバーヘッドループの実行を正確に追跡することが可能となる。
【００９９】
本明細書で説明した実施例によれば、監視回路によって実際に実行された命令の（通常小さな）サブセットに対してのみトレース要素を生成するが、任意の命令を効果的に分岐に変換することができる一つ又は複数の分岐未来命令を含む命令シーケンスが監視回路によって実行された場合も、監視回路の活動を正確に追跡可能な非常に効率的なトレース機構を実現可能である。
【０１００】
本出願において、「〜ように構成される」という表記は、装置の要素が、定められた動作を行うことが可能な構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェア又はソフトウェアの相互接続の配置又は方法を意味する。例えば、装置が定められた動作を提供する専用のハードウェアを有するか、又は、プロセッサもしくは他の処理デバイスがその機能を行うようにプログラムされていてもよい。「〜ように構成される」とは、定められた動作を提供するために、その装置の要素を変更する必要が決してないことを意味する。
【０１０１】
本明細書では本発明の例示的な実施例について、添付の図面を参照しながら詳しく説明してきたが、本発明がそれらの厳密な実施例に制限されず、当業者によって、添付の特許請求の範囲によって定められる発明の範囲及び趣旨を逸脱することなく、さまざまな変更、追加、修正がそこに加えられてもよいことが理解される。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴のさまざまな組み合わせが独立請求項の特徴と共になされることも可能である。
【図１】
2019521436.tif 000003
【図２】
2019521436.tif 000004
【図３】
2019521436.tif 000005
【図４Ａ】
2019521436.tif 000006
【図４Ｂ】
2019521436.tif 000007
【図４Ｃ】
2019521436.tif 000008
【図５】
2019521436.tif 000009
【図６】
2019521436.tif 000010
【図７】
2019521436.tif 000011
【図８】
2019521436.tif 000012
【国際調査報告】
2019521436.tif 000013
2019521436.tif 000014
2019521436.tif 000015