IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

特許7079241処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法
<>
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図1
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図2
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図3
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図4A
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図4B
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図5
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図6
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図7
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図8
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図9
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図10
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図11
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図12
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図13
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図14
  • 特許-処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-24
(45)【発行日】2022-06-01
(54)【発明の名称】処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法
(51)【国際特許分類】
   G06F 11/34 20060101AFI20220525BHJP
   G06F 11/36 20060101ALI20220525BHJP
   G06F 9/38 20060101ALI20220525BHJP
   G06F 9/32 20060101ALI20220525BHJP
【FI】
G06F11/34 166
G06F11/36 136
G06F9/38 380C
G06F9/32 320A
G06F9/32 330A
【請求項の数】 25
(21)【出願番号】P 2019512749
(86)(22)【出願日】2017-08-09
(65)【公表番号】
(43)【公表日】2019-10-17
(86)【国際出願番号】 GB2017052347
(87)【国際公開番号】W WO2018051056
(87)【国際公開日】2018-03-22
【審査請求日】2020-07-31
(31)【優先権主張番号】1615493.2
(32)【優先日】2016-09-13
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】特許業務法人浅村特許事務所
(72)【発明者】
【氏名】ボットマン、フランソワ クリストファー ジャック
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
(72)【発明者】
【氏名】ホーリー、ジョン マイケル
(72)【発明者】
【氏名】ウィリアムズ、マイケル ジョン
(72)【発明者】
【氏名】ギブズ、マイケル ジョン
【審査官】久保 光宏
(56)【参考文献】
【文献】特開平8-292887(JP,A)
【文献】特開昭59-146342(JP,A)
【文献】特開昭63-113747(JP,A)
【文献】特開2009-146040(JP,A)
【文献】特開昭61-213937(JP,A)
【文献】特表2019-521436(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F11/34-11/36
G06F9/30-9/38
CSDB(日本国特許庁)
IEEEXplore(IEEE)
(57)【特許請求の範囲】
【請求項1】
処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するための入力インターフェースであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェースと、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、
を含み、
前記トレース生成回路は、前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成するようにさらに構成される、装置。
【請求項2】
前記分岐動作設定命令の実行によって前記分岐動作が前記識別された命令に関連付けられると、前記処理回路は、その識別された命令についての分岐制御情報を分岐制御記憶装置内に格納するように構成され、
前記トレース生成回路は、その識別された命令についての分岐制御情報が前記分岐制御記憶装置内に格納される時に、前記シーケンス内で前記識別された命令に遭遇したことにより分岐が発生したことを前記命令実行情報が示す場合に、前記分岐動作がトリガされたことを示すトレース要素を生成するように構成される、請求項1に記載の装置。
【請求項3】
前記分岐動作設定命令はプログラムループ本体の終了時のループ終了命令であり、前記識別された命令は前記プログラムループ本体内の前記ループ終了命令の直前の命令であり、前記ターゲットアドレスは、前記プログラムループ本体の開始時の命令のアドレスであり、
前記トレース生成回路は、前記直前の命令についての分岐制御情報が前記分岐制御記憶装置内に格納される時に、前記直前の命令に遭遇したことにより分岐が発生したことを前記命令実行情報が示すたびに、前記分岐動作がトリガされたことを示すトレース要素を発行するように構成される、請求項2に記載の装置。
【請求項4】
前記直前の命令についての分岐制御情報が前記分岐制御記憶装置内に格納されている間に前記直前の命令に遭遇したときに前記プログラムループ本体の少なくとも1回のさらなる反復が要求される場合に、前記分岐動作がトリガされる、請求項3に記載の装置。
【請求項5】
前記ループ終了命令の実行により前記分岐動作が前記直前の命令に関連付けられた場合に、前記処理回路は前記ターゲットアドレスに分岐するように構成され、前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行された分岐を示すトレース要素を発行するように構成され、
前記ループ本体のさらなる反復が必要とされない場合に、前記ループ終了命令の実行によって前記処理回路が前記プログラムループ本体から抜けて、前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行されなかった分岐を示すトレース要素を発行するように構成される、請求項3または4に記載の装置。
【請求項6】
前記プログラムループ本体のさらなる反復が依然として要求されている間にイベントが前記直前の命令についての前記分岐制御情報を前記分岐制御記憶装置内で無効化させる場合に、前記直前の命令の次の遭遇時には前記分岐動作はトリガされず、
前記処理回路は、前記ループ終了命令の次の実行に応答して前記分岐動作を前記直前の命令に再関連付けて、前記ターゲットアドレスへの分岐を実行し、それによって前記プログラムループ本体の前記さらなる反復の処理を再開し、
前記トレース生成回路は、前記ループ終了命令の前記実行動作として実行された分岐を示すさらなるトレース要素を発行するように構成される、請求項3から5のいずれか一項に記載の装置。
【請求項7】
前記分岐動作設定命令は分岐未来命令であり、前記識別された命令は前記シーケンス内で前記分岐未来命令に続く命令であり、
前記分岐未来命令の実行により前記分岐動作が前記識別された命令に関連付けられる場合に、前記トレース生成回路は、前記分岐未来命令の前記実行動作として、前記分岐動作が関連付けられたことを示すトレース要素を発行するように構成され、
前記分岐未来命令の実行によって前記分岐動作が前記識別された命令に関連付けられない場合に、前記トレース生成回路は、前記分岐未来命令の前記実行動作として、前記分岐動作が関連付けられていないことを示すトレース要素を発行するように構成される、請求項1または2に記載の装置。
【請求項8】
前記トレース生成回路は、前記分岐動作が関連付けられたことを示す前記トレース要素として、実行された分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成され、
前記トレース生成回路は、前記分岐動作が関連付けられていないことを示す前記トレース要素として、実行されていない分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成される、請求項7に記載の装置。
【請求項9】
前記分岐未来命令の実行によって前記分岐動作が前記識別された命令に関連付けられ、かつ、前記分岐制御記憶装置内に前記処理回路によって格納されたその識別された命令についての前記分岐制御情報が、以前に実行された分岐未来命令の前記識別された命令に関連するアクティブ分岐制御情報を上書きする場合に、前記トレース生成回路は、非イベントトレース要素を発行するように構成される、請求項2に従属する場合の請求項7または8に記載の装置。
【請求項10】
前記分岐未来命令の実行と前記シーケンス内の前記識別された命令の遭遇との間の命令実行の時点でトレースが可能になる場合に、前記トレース生成回路は、前記識別された命令に遭遇したときに実行された分岐に応答して、前記識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行する、請求項7から9のいずれか一項に記載の装置。
【請求項11】
前記トレース生成回路は、分岐未来命令の識別された命令に関連する前記分岐制御記憶装置内の各エントリに関連してカウンタ値を維持するように構成され、
前記識別された命令に遭遇して前記分岐が発生したときに、前記分岐制御記憶装置内の前記関連するエントリの前記カウンタ値に予期しない値がある場合に、前記トレース生成回路は、前記識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別する前記トレース要素を発行するように構成される、請求項2に従属する場合の請求項10に記載の装置。
【請求項12】
イベントによって前記分岐制御記憶装置内の前記分岐制御情報が無効にされた場合に、前記トレース生成回路は無効トレース要素を発行するように構成される、請求項2に従属する場合の請求項3から11のいずれか一項に記載の装置。
【請求項13】
前記処理回路は、前記シーケンス内で前記識別された命令に遭遇して前記分岐動作がトリガされた場合に、前記識別された命令も実行するように構成される、請求項1から12のいずれか一項に記載の装置。
【請求項14】
前記処理回路は、前記シーケンス内で前記識別された命令に遭遇して前記分岐動作がトリガされた場合に、前記識別された命令の実行を禁止するように構成される、請求項1から13のいずれか一項に記載の装置。
【請求項15】
前記分岐制御情報は、少なくとも前記識別された命令の表示を提供する分岐点データと、前記ターゲットアドレスの表示を提供するさらなるデータと、を含む、請求項2に従属する場合の請求項3から14のいずれか一項に記載の装置。
【請求項16】
前記分岐点データは、
前記識別された命令のアドレスを示すアドレスデータと、
前記識別された命令の直前の最後の命令のアドレスを示す終了データと、
前記分岐動作設定命令と前記識別された命令との間の距離を示すオフセットデータと、
命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットから始まる、前記識別された命令の前記メモリ記憶アドレスを示すビットの適切なサブセットと、
前記識別された命令の前に処理されるために残っている命令の数を示す残存サイズ命令データと、
前記識別された命令に達する前に処理されるために残っているプログラム記憶位置の数を示す残存サイズデータと、
のうちの1つまたは複数を含む、請求項15に記載の装置。
【請求項17】
処理回路によって実行される命令のシーケンス内の所定の命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェースと、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成するためのデコンプレッション回路と、
前記デコンプレッション回路に関連する分岐制御記憶装置と、
を含み、
前記デコンプレッション回路は、所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を前記分岐制御記憶装置内に格納し、
前記デコンプレッション回路は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出すると、その識別された命令を前記所定の命令の前記次の命令として扱うように構成される、装置。
【請求項18】
前記デコンプレッション回路は、前記分岐動作設定命令によって識別され、前記識別された命令を決定するために使用される分岐点データを前記分岐制御情報として格納するように構成される、請求項17に記載の装置。
【請求項19】
前記デコンプレッション回路は、前記ターゲットアドレスが前記分岐動作設定命令内で指定された即時値から直接導出可能である場合に前記分岐制御情報として前記ターゲットアドレスを格納するようにさらに構成される、請求項18に記載の装置。
【請求項20】
前記デコンプレッション回路は、前記トレースストリーム内の非イベントトレース要素に応答して、その関連する分岐制御記憶装置内のエントリを無効にする、請求項17から19のいずれか一項に記載の装置。
【請求項21】
前記デコンプレッション回路は、前記トレースストリーム内の無効化トレース要素に応答して、その関連する分岐制御記憶装置の内容を無効にする、請求項17から20のいずれか一項に記載の装置。
【請求項22】
処理回路による命令実行を示すトレースストリームを生成する方法であって、
前記処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するステップであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、ステップと、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含む前記トレースストリームを生成するステップと、
前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成するステップと、
を含む方法。
【請求項23】
処理回路によって実行された命令のシーケンスを示す命令実行情報を前記処理回路から受信するための入力インターフェース手段であって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェース手段と、
前記命令実行情報から、前記シーケンス内の命令フロー変更命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するためのトレース生成手段と、
を含み、
前記トレース生成手段はさらに、前記命令実行情報から、前記分岐動作設定命令の実行動作を示すトレース要素と、前記シーケンス内で前記識別された命令に遭遇する際に前記分岐動作がトリガされたことを示すトレース要素と、を生成する、装置。
【請求項24】
処理回路による命令実行を示すために生成されたトレースストリームを処理する方法であって、
前記処理回路によって実行される命令のシーケンス内の所定の命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するステップであって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、ステップと、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成するステップと、
所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納するステップと、
前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出した場合に、その識別された命令を前記所定の命令の前記次の命令として扱うステップと、
を含む方法。
【請求項25】
理回路によって実行される命令のシーケンス内の所定の命令の前記処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェース手段であって、前記シーケンスは、前記シーケンス内の識別された命令を示す分岐動作設定命令を含み、前記分岐動作設定命令の実行は、前記シーケンス内で前記識別された命令に遭遇したときに、前記分岐動作設定命令によって識別されたターゲットアドレスに前記処理回路を分岐させる前記識別された命令に分岐動作を関連付けることを可能にする、入力インターフェース手段と、
各トレース要素に応答して、前記所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスから前記プログラムイメージをトラバースし、前記プログラムイメージから前記現在の命令アドレスと前記所定の命令の前記次の命令との間の命令を示す情報を生成するデコンプレッション手段と、
前記デコンプレッション手段に関連する分岐制御記憶手段と、
を含み、
前記デコンプレッション手段は、所定のタイプの現在のトレース要素に応答して前記プログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、前記分岐動作設定命令から導出された分岐制御情報を前記分岐制御記憶手段内に格納し、
前記デコンプレッション手段は、前記分岐制御情報を参照して、前記プログラムイメージのトラバース中に前記識別された命令に達したことを検出すると、その識別された命令を前記所定の命令の前記次の命令として扱う、装置。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理システム内の処理回路の動作を示すトレースストリームを生成するための機構に関し、特に、そのような処理回路による命令実行を示すトレースストリームを生成し処理するための機構に関する。
【背景技術】
【0002】
トレース回路を使用して、一連のトレース要素を含むトレースストリームを生成し、関連する処理回路の動作を決定するために、例えば処理回路によって実行される命令のシーケンスを決定するために、それらのトレース要素を後で解析することができる。トレースストリーム内のトレース情報の量を減らすために、トレース回路は、実行される各命令に対して別個のトレース要素を生成せずに、実行される特定の所定の命令に対してのみトレース要素を生成するように、例えば、実行された各分岐命令に対してトレース要素を生成するように構成することができる。所定の命令に関する情報から、解析回路はプログラムイメージを使用して実行された命令のシーケンスに関する情報を再構築しようとすることができる。
【0003】
最近、新しいタイプの命令が提案されており、それは本明細書では分岐動作設定命令と呼ばれる。分岐動作設定命令は、その任意の命令に関連する通常の動作の代わりに、またはそれに加えて、その任意の命令に遭遇したときに分岐を発生させるために、分岐動作を任意の命令に効果的に関連付けることができる。
【0004】
これは、トレース要素が特定の所定の命令に対してのみ生成される上述のトレースストリーム手法を使用して処理回路の実行動作をトレースしようとする場合に、重大な問題を引き起こす。特に、トレース機構は分岐命令ごとにトレース要素を生成するように構成することができるが、分岐動作設定命令の使用は任意の命令(トレース機構は分岐命令として認識しない)が命令フロー内で分岐を開始することを可能にし、これは、トレース回路によって生成されたトレースストリームから処理回路の命令実行動作を正しく決定するための解析回路の能力を乱すおそれがある。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本技術は、このような分岐動作設定命令が存在する場合に、信頼性のあるトレースを改善することを目的とする。
【課題を解決するための手段】
【0006】
1つの例示的な構成では装置が提供され、装置は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するための入力インターフェースであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェースと、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、を含み、トレース生成回路は、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するようにさらに構成される。
【0007】
別の例示的な構成では装置が提供され、装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェースと、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するためのデコンプレッション回路と、デコンプレッション回路に関連する分岐制御記憶装置と、を含み、デコンプレッション回路は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納し、デコンプレッション回路は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱うように構成される。
【0008】
さらなる例示的な構成では、処理回路による命令実行を示すトレースストリームを生成する方法が提供され、本方法は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するステップであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、ステップと、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するステップと、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するステップと、を含む。
【0009】
さらなる例示的な構成では装置が提供され、装置は、処理回路によって実行された命令のシーケンスを示す命令実行情報を処理回路から受信するための入力インターフェース手段であって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェース手段と、命令実行情報から、シーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するためのトレース生成手段と、を含み、トレース生成手段はさらに、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成する。
【0010】
別の例示的な構成によれば、処理回路による命令実行を示すために生成されたトレースストリームを処理する方法が提供され、本方法は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するステップであって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、ステップと、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するステップと、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納するステップと、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出した場合に、その識別された命令を所定の命令の次の命令として扱うステップと、を含む。
【0011】
さらなる例示的な構成では、装置が提供され、装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェース手段であって、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする、入力インターフェース手段と、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成する手段と、デコンプレッション手段に関連する分岐制御記憶手段と、を含み、デコンプレッション手段は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶手段内に格納し、デコンプレッション手段は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱う。
【0012】
単なる例として、添付の図面に示す本技術の実施形態を参照して本技術をさらに説明する。
【図面の簡単な説明】
【0013】
図1】一実施形態によるシステムのブロック図である。
図2】一実施形態に従って使用されるトレースモジュールをより詳細に示すブロック図である。
図3】一実施形態に従って使用されるトレース解析回路をより詳細に示すブロック図である。
図4A】一実施形態に従って図1のシステム内で使用することができる分岐ターゲットアドレスキャッシュ(BTAC)の異なる形式を概略的に示す図である。
図4B】一実施形態に従って図1のシステム内で使用することができる分岐ターゲットアドレスキャッシュ(BTAC)の異なる形式を概略的に示す図である。
図5】ゼロオーバーヘッドループの動作を概略的に示す図である。
図6】一実施形態による、ゼロオーバーヘッドループを含む命令シーケンスの実行に関連するトレース要素を生成するためのトレースモジュールの動作を示す流れ図である。
図7】一実施形態による、ゼロオーバーヘッドループの実行、および生成された関連するトレース要素を示す流れ図である。
図8】分岐未来命令を含む例示的なプログラムシーケンスを示す図である。
図9】一実施形態による、1つまたは複数の分岐未来命令を含む一連の命令の実行に関連するトレース要素を生成するためのトレースモジュールの動作を示す流れ図である。
図10】一実施形態による、命令ストリーム内で受信された各Eアトムに関連してトレースアナライザで実行されるデコンプレッション動作を示す流れ図である。
図11】一実施形態による、命令ストリーム内で受信された各Nアトムに関連してトレースアナライザで実行されるデコンプレッション動作を示す流れ図である。
図12】一実施形態による、処理要素のBTACが無効にされるときに実行されるステップを示す流れ図である。
図13】一実施形態による、トレースストリーム内の非イベントパケットの受信時にトレースアナライザによって実行されるステップを示す流れ図である。
図14】一実施形態による、トレースが有効にされたと判定したときにトレースモジュールによって実行される一連のステップを示す流れ図である。
図15図14の方法に従って例外スタイルアトムを発行する必要があるときを評価するために使用することができる、トレースモジュール内の飽和カウンタベースの実施態様を示す流れ図である。
【発明を実施するための形態】
【0014】
データ処理システム内の処理回路の動作をトレースし、それによって処理回路の段階的な動作を識別するために解析することができるトレース要素のストリームを生成することは、システムソフトウェア開発において非常に有用なツールである。トレースストリームは、例えば、処理回路によって実行されている命令のシーケンスのデバッグを容易にするために解析することができる。通常、トレース機構は処理回路を有するオンチップで提供され、そのようなオンチップトレース機構の例は、様々なARMプロセッサに関連して英国ケンブリッジのARM社によって提供される組み込みトレースマクロセル(ETM)である。そのようなトレース機構は潜在的に大量のトレース要素を生成する可能性があり、それはその後さらなる解析のためにチップ外に提供される必要がある。生成されるトレース情報の量を減らしながら、処理回路の段階的な動作を後で解析することを可能にするために、多くの技術が開発されてきた。
【0015】
前述のように、生成されるトレース情報の量を減らすための1つの技術は、処理回路によって実行される命令シーケンス内の特定のタイプの命令についてのトレース要素だけを出力することを含み、トレース解析回路は、それら特定の命令の実行に関する情報から処理回路の段階的な命令実行動作を再構築することができる。一例として、トレース回路は、命令フロー変更命令(通常は分岐命令)が処理されるたびにトレース要素を出力し、その分岐が実行されたか否かを示し、解析回路は、トレース要素が生成された命令間で、処理回路によってどの命令が実行されたかを推定することができる。
【0016】
しかし、前述の分岐動作設定命令は命令シーケンス内に現れる場合がある。分岐動作設定命令を実行することにより、分岐動作設定命令によって識別された別の命令(本明細書では「識別された命令」と呼ぶ)に分岐動作を関連付けることができ、この分岐動作によって、命令シーケンス内で識別された命令に遭遇したときに処理回路を分岐動作設定命令によって識別されたターゲットアドレスへ分岐させる。したがって、分岐動作設定命令は、任意の命令を効果的に分岐に変更することができる。
【0017】
前述のように、これは、トレース要素が特定の所定の命令に対してのみ生成される上述のトレースストリーム手法を使用して処理回路の実行動作をトレースしようとする場合に、重大な問題を引き起こす。説明した実施形態はこれらの問題を軽減することを目的としており、分岐動作設定命令を含む命令シーケンスにも対応しながら、上述した低減された量のトレースストリーム手法を採用し続けることを可能にする。
【0018】
添付の図面を参照して実施形態を説明する前に、以下の実施形態の説明を提供する。
【0019】
一実施形態では、処理回路によって実行される命令のシーケンスを示す命令実行情報を関連する処理回路から受信するための入力インターフェースと、命令実行情報から、そのシーケンス内の命令フロー変更命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを生成するトレース生成回路と、を含む装置が提供される。命令のシーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含むことができる。分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする。
【0020】
さらに、トレース生成回路は、命令実行情報から、分岐動作設定命令の実行動作を示すトレース要素と、シーケンス内で識別された命令に遭遇する際に分岐動作がトリガされたことを示すトレース要素と、を生成するように構成される。トレースストリーム内のこれらの追加のトレース要素により、これはトレースアナライザにとって効率的な機構を提供し、トレースアナライザはその後トレースストリームを受信して処理回路によって実行される命令のシーケンスを決定する。特に、トレースストリーム内でこの追加情報が提供されると、トレースアナライザは、分岐動作設定命令の実行によって分岐動作が識別された命令に関連付けられたときを判定することができ、したがって、命令シーケンス内で命令フローの変更が生じる各時点を決定するためにトレース要素のシーケンスを正しく解釈することが可能である。
【0021】
一実施形態では、分岐動作設定命令の実行によって分岐動作が識別された命令に関連付けられると、処理回路は、その識別された命令についての分岐制御情報を分岐制御記憶装置内に格納するように構成される。次に、トレース生成回路は、その識別された命令についての分岐制御情報が分岐制御記憶装置内に格納される時に、シーケンス内で識別された命令に遭遇したことにより分岐が発生したことを命令実行情報が示す場合に、分岐動作がトリガされたことを示すトレース要素を生成するように構成される。したがって、識別された命令に遭遇した時点で識別された命令に関連する分岐制御情報が依然として分岐制御記憶装置内に存在し、それが分岐の発生をもたらす場合には、トレース生成回路は、分岐動作がトリガされたことを示すトレース要素を生成することができ、トレースアナライザは、識別された命令に遭遇したときに発生した命令フローの変更を後で判定することができる。
【0022】
一実施形態では、識別された命令に遭遇した時点で、分岐制御記憶装置内に対応する分岐制御情報がもはやない場合には、これは分岐動作が処理回路内でトリガされないことを意味しており、したがって、トレース生成回路は、分岐動作がトリガされたことを示すトレース要素を生成しない。いくつかの実施形態では、分岐動作設定命令のタイプに応じて、分岐制御記憶装置の内容が無効になったときに、トレース生成回路はトレースストリーム内に1つまたは複数の追加のパケットを発行するように構成することができるので、そのような状況においてトレースアナライザが処理回路の動作を正しく追跡することが可能になる。
【0023】
分岐動作設定命令は様々な形態を取ることができる。一実施形態では、分岐動作設定命令はプログラムループ本体の終了時のループ終了命令であり、識別された命令はプログラムループ本体内の直前の命令であり、ターゲットアドレスは、プログラムループ本体の開始時の命令のアドレスである。次に、トレース生成ユニットは、直前の命令についての分岐制御情報が分岐制御記憶装置内に格納される時に、直前の命令に遭遇したことにより分岐が発生したことを命令実行情報が示すたびに、分岐動作がトリガされたことを示すトレース要素を発行するように構成される。
【0024】
そのようなループ終了命令は、いわゆる「ゼロオーバーヘッドループ」を実施するために使用することができ、そこでは、ループの各反復中にループ終了命令を実行する必要がなく、代わりに、最初の反復に続いて、プログラムループ本体の最後から2番目の命令に遭遇したときに、さらに反復するために必要な分岐をトリガすることができる。トレース生成ユニットに上述の方法でトレース要素を生成させることによって、解析回路は、そのようなゼロオーバーヘッドループの処理回路の実行を正しく追跡することが可能になる。
【0025】
一実施形態では、分岐動作は、その直前の命令についての分岐制御情報が分岐制御記憶装置内に格納されているときに直前の命令に遭遇しただけでは必ずしもトリガされない。代わりに、それに加えて、その時点でプログラムループ本体の少なくとも1回のさらなる反復が必要であることを決定することも必要であり、その後にだけ分岐動作がトリガされる。したがって、そのような条件下でのみ、トレース生成ユニットは、分岐動作がトリガされたことを示すトレース要素を発行する。一実施形態では、その場合に分岐動作がトリガされない場合には、その時点でトレース生成ユニットがトレース要素を発行する必要はない。
【0026】
一実施形態では、ループ終了命令の実行によって、分岐動作が常に直前の命令に関連付けられるとは限らない。ループ終了命令の実行により分岐動作が直前の命令に関連付けられた場合に、処理回路はターゲットアドレスに分岐するように構成され、トレース生成回路は、ループ終了命令の実行動作として実行された分岐を示すトレース要素を発行するように構成される。逆に、ループ本体のさらなる反復が必要とされない場合に、ループ終了命令の実行によって処理回路がプログラムループ本体から抜けて、トレース生成回路は、ループ終了命令の実行動作として実行されなかった分岐を示すトレース要素を発行するように構成される。
【0027】
一実施形態では、アトムの形式のトレース要素をこの目的のために使用することができ、ループ終了命令の実行によって分岐動作が直前の命令に関連付けられた場合に、Eアトムをそのループ終了命令の実行に関連して発行することができるが、そうでなければ、Nアトムをループ終了命令の実行に関連付けることができる。
【0028】
一実施形態では、プログラムループ本体のさらなる反復が依然として要求されている間にイベントが直前の命令についての分岐制御情報を分岐制御記憶装置内で無効化させる場合に、直前の命令の次の遭遇時には分岐動作はトリガされない。しかしながら、処理回路は、ループ終了命令の次の実行に応答して分岐動作を直前の命令に再関連付けて、ターゲットアドレスへの分岐を実行し、それによってプログラムループ本体のさらなる反復の処理を再開する。次に、トレース生成回路は、ループ終了命令の実行動作として実行された分岐を示すさらなるトレース要素を発行するように構成される。
【0029】
したがって、そのような実施形態では、プログラムループ本体の1つまたは複数の残りの反復が依然として必要とされる間の分岐制御記憶装置の内容の無効化は、トレースの観点からは問題を引き起こさない。なぜなら、ループ終了命令の後続の実行によって分岐動作が直前の命令に再関連付けられるからである。トレースアナライザは、この場合、ループ本体内で直前の命令に遭遇したときに実行された分岐と、ループ終了命令の再実行により実行された分岐と、を区別できないが、これは問題にはならない。それは、トレースアナライザが、発行されたトレース要素からプログラムループ本体の各反復の実行を引き続き正しく追跡するからである。
【0030】
説明した実施形態によってサポートすることができる別のタイプの分岐動作設定命令は、分岐未来命令である。命令シーケンスは、前述のループ終了命令の形式の分岐動作設定命令のみ、分岐未来命令の形式の分岐動作設定命令のみを含むことができ、または、命令シーケンス内にループ終了命令と分岐未来命令の両方が混在していてもよい。
【0031】
分岐動作設定命令が分岐未来命令である場合に、識別された命令はシーケンス内で分岐未来命令に続く命令である。分岐未来命令は、識別された命令として任意の命令を指定することができる。そのような実施形態では、分岐未来命令の実行により分岐動作が識別された命令に関連付けられる場合に、トレース生成回路は、分岐未来命令の実行動作として、分岐動作が関連付けられたことを示すトレース要素を発行するように構成される。逆に、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられない場合に、トレース生成回路は、分岐未来命令の実行動作として、分岐動作が関連付けられていないことを示すトレース要素を発行するように構成される。そのような手法により、各分岐未来命令の実行動作をトレースストリーム内で捕捉することができ、したがって、トレースアナライザが、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられたかどうかを判定することができる。
【0032】
分岐未来命令の実行によって分岐動作が識別された命令に関連付けられない理由はいくつかある。例えば、特定の条件が満たされた場合にのみ分岐動作が識別された命令に関連付けられるように、分岐未来命令を条件付きのものに構成することができる。さらに、いくつかの実施形態では、分岐未来機能を選択的に無効にすることが可能であり、その結果、遭遇した分岐未来命令によって分岐動作が識別された命令に関連付けられない。
【0033】
分岐未来命令の実行動作を識別するためにトレース生成回路によって発行されるトレース要素の形式は、様々な形式を取ることができる。しかしながら、一実施形態では、実行された分岐と実行されなかった分岐を示すために使用されるトレース要素は、この目的のために再利用される。特に、一実施形態では、トレース生成回路は、分岐動作が関連付けられたことを示すトレース要素として、実行された分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成され、トレース生成回路は、分岐動作が関連付けられていないことを示すトレース要素として、実行されていない分岐を示すために使用されたものと同じタイプのトレース要素を発行するように構成される。したがって、特定の一実施形態では、前述のEアトムおよびNアトムをこの目的に使用することができる。
【0034】
一実施形態では、1つの分岐未来命令の実行によって、以前の分岐未来命令に関連する分岐制御記憶装置内のアクティブエントリを上書きすることが可能である。そのような状況では、トレース生成回路は、その事実を識別するためのさらなるトレース要素をトレース解析回路に発行するように構成することができる。特に、一実施形態では、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられ、かつ、分岐制御記憶装置内に処理回路によって格納されたその識別された命令についての分岐制御情報が、以前に実行された分岐未来命令の識別された命令に関連するアクティブ分岐制御情報を上書きする場合に、トレース生成回路は、非イベントトレース要素を発行するように構成される。次に、トレースアナライザは、その以前の分岐未来命令の識別された命令に関連して分岐が発生しないことを識別するために、非イベントトレース要素に応答してその内部保持レコードを更新するように構成することができる。一実施形態では、分岐未来命令の実行によって分岐動作が識別された命令に関連付けられたことを示すために発行されるトレース要素に先立って、非イベントトレース要素がトレースストリーム内で発行される。
【0035】
一実施形態では、分岐制御記憶装置内で使用される置換方針がトレースアナライザに知られており、かつ、エントリが上書きされることがトレースストリーム内の他のトレース要素から決定的である場合には、トレースストリーム内で非イベントトレース要素を個別に発行する必要がない場合もある。
【0036】
一実施形態では、分岐未来命令の実行とシーケンス内の識別された命令の遭遇との間の命令実行の時点でトレースが可能になる場合に、トレース生成回路は、識別された命令に遭遇したときに実行された分岐に応答して、識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行する。
【0037】
したがって、この特別な形式のトレース要素は、直前の分岐未来命令の実行動作もトレースされるようにトレースが十分に早く有効にされたときに識別された命令に遭遇したときに発行される前述のトレース要素よりも多くの情報を取り込む必要がある。なぜなら、識別された命令を明確に識別し、その識別された命令に遭遇したときに実行された分岐を完全に識別するために、トレース要素内に十分な情報を提供する必要があるからである。したがって、一実施形態では、そのトレース要素は、識別された命令のアドレスとターゲットアドレスを識別する必要がある。これはトレース帯域幅に関して比較的高価であるが、そのようなトレース要素の使用が非常に頻繁に必要とされることはほとんどないと理解されよう。なぜなら、ほとんどの場合、トレースは分岐未来命令の実行とシーケンス内の関連する識別された命令の遭遇との間のある時点で有効にされないことが予想されるからである。一実施形態では、既存のタイプのトレース要素フォーマット、すなわち命令実行中に発生する例外に関する情報を提供するために既に使用されているトレース要素のフォーマットをこの特別なトレース要素に使用することができる。
【0038】
トレース生成回路が、分岐未来命令の実行と識別された命令の遭遇との間の命令実行の時点でトレースが可能にされた状況を判定することができるいくつかの方法がある。一実施形態では、トレース生成回路は、分岐未来命令の識別された命令に関連する分岐制御記憶装置内の各エントリに関連してカウンタ値を維持するように構成され、識別された命令に遭遇して分岐が発生したときに、分岐制御記憶域内の関連するエントリのカウンタ値に予期しない値がある場合に、トレース生成回路は、識別された命令とその識別された命令に遭遇したときに実行された分岐との両方を識別するトレース要素を発行するように構成される。
【0039】
特定の一実施形態では、(一実施形態ではEアトムを発行することによって)識別された命令に分岐動作が関連付けられたことを分岐未来命令が示すためのトレース要素をトレース生成回路が発行するときに、カウンタをインクリメントすることができ、また、識別された命令に対して分岐が続いて実行されたことが検出されたときにデクリメントすることができる。したがって、識別された命令に遭遇して分岐が実行された時点でカウンタの値がゼロ以外になることが予想されるが、代わりにそれがゼロである場合には、一実施形態では、これは前述の例外形式のパケットが代わりにトレース生成回路によって発行されるべきであることを示すために使用される。
【0040】
一実施形態では、様々なイベントが、分岐制御記憶装置内の分岐制御情報を無効にすることがある。例えば、一実施形態では、例外が処理回路によって実行されると、分岐制御記憶装置の現在の内容が無効にされる。このような状況では、トレース生成回路は、トレースストリーム内に無効化トレース要素を発行して、トレースアナライザが分岐制御記憶装置の内容がいつ無効にされたかを後で判定できるように構成することができる。しかしながら、他の実施形態では、トレースアナライザは、分岐制御記憶装置の内容がトレースストリーム内で発行された他のパケットから無効にされたと判定することができるので、特別な無効化トレース要素を発行する必要はない。例えば、他の理由で、分岐制御記憶装置の内容が無効にされたときに別のパケットが発行されることがあり、トレースアナライザはそのパケットから分岐制御記憶装置の内容が無効にされたことを判定することができる。特定の例として、割り込みに遭遇すると割り込みパケットを発行することができ、トレースアナライザは割り込みパケットの存在から分岐制御記憶装置の内容が無効にされるであろうことを決定するように構成されてもよい。
【0041】
シーケンス内で識別された命令に遭遇して分岐動作がトリガされると、一実施形態では、処理回路が分岐動作をトリガすることに加えて、識別された命令を依然として実行するように構成することができるが、代替的な実施形態では、それは単に分岐動作をトリガするが、識別された命令自体の実行を禁止することができる。したがって、後者の場合、分岐動作は識別された命令の通常の実行動作を効果的に置き換える。
【0042】
分岐制御記憶装置内に記憶された分岐制御情報は、様々な形態を取ることができるが、一実施形態では、識別された命令の表示を提供する少なくとも分岐点データ、およびさらにターゲットアドレスの表示を提供するデータを含む。分岐点データは様々な形態を取ることができるが、識別された命令が決定されることを可能にし、したがってその識別された命令が処理回路によっていつ遭遇されたかを検出するのに十分である。
【0043】
一実施形態では、分岐点データは、識別された命令のアドレスを示すアドレスデータと、識別された命令の直前の最後の命令のアドレスを示す終了データと、分岐動作設定命令と識別された命令との間の距離を示すオフセットデータと、命令の開始記憶アドレスを区別するメモリ記憶アドレスのビットの最下位ビットから始まる、識別された命令のメモリ記憶アドレスを示すビットの適切なサブセットと、識別された命令の前に処理されるために残っている命令の数を示す残存サイズ命令データと、識別された命令に達する前に処理されるために残っているプログラム記憶位置の数を示す残存サイズデータと、のうちの1つまたは複数を含むことができる。
【0044】
これらの様々なオプションは、識別された命令が命令シーケンス内でいつ到達されたかを判定するための機構を提供することが理解されよう。
【0045】
さらなる実施形態では、トレース解析機能を実行するための装置を提供することができる。特に、そのような装置は、処理回路によって実行される命令のシーケンス内の所定の命令の処理回路による実行を示す複数のトレース要素を含むトレースストリームを受信するための入力インターフェースを含むことができ、シーケンスは、シーケンス内の識別された命令を示す分岐動作設定命令を含み、分岐動作設定命令の実行は、シーケンス内で識別された命令に遭遇したときに、分岐動作設定命令によって識別されたターゲットアドレスに処理回路を分岐させる分岐動作を識別された命令に関連付けることを可能にする。装置は、各トレース要素に応答して、所定の命令の次の命令がプログラムイメージ内で検出されるまで、現在の命令アドレスからプログラムイメージをトラバースし、プログラムイメージから現在の命令アドレスと所定の命令の次の命令との間の命令を示す情報を生成するためのデコンプレッション回路をさらに含む。分岐制御記憶装置はデコンプレッション回路に関連している。デコンプレッション回路は、所定のタイプの現在のトレース要素に応答してプログラムイメージをトラバースするときに少なくとも1つのタイプの分岐動作設定命令を検出することに応答して、分岐動作設定命令から導出された分岐制御情報を分岐制御記憶装置内に格納する。さらに、デコンプレッション回路は、分岐制御情報を参照して、プログラムイメージのトラバース中に識別された命令に達したことを検出すると、その識別された命令を所定の命令の次の命令として扱うように構成される。
【0046】
したがって、所定の命令が分岐命令である例を考えると、分岐動作設定命令自体が分岐命令ではない場合であっても、実際には、識別された命令自体は分岐命令でなくてもよく、デコンプレッション回路と関連して分岐制御記憶装置を使用することにより、デコンプレッション回路は、処理回路が分岐動作を識別された命令に関連付けたときを検出することができ、プログラムイメージ内でその識別された命令に遭遇したときを検出することができる。その時点で、識別された命令を分岐命令であるかのように扱うことができる。したがって、これにより、実行されている命令シーケンスが1つまたは複数の分岐動作設定命令を含む場合であっても、処理回路によって実行される特定の命令についてのトレース要素のみを生成するトレースストリームの生成をトレース解析回路によって正しく解析することが可能になり、したがって、任意の命令を分岐に変えることができる。
【0047】
デコンプレッション回路は、プログラムイメージをトラバースするときに遭遇する各分岐動作設定命令についてその関連する分岐制御記憶装置にエントリを作成するように構成されてもよいが、一実施形態では分岐未来命令についてのみこれを行うが、前述のループ終了命令については行わない。特に、一実施形態では、デコンプレッション回路は、処理回路の命令実行動作を正しく追跡するために、ループ終了命令とそのループ終了命令によって指定される識別された命令(すなわちプログラムループ本体内の直前の命令)とを区別する必要がなく、したがって、識別された命令について、デコンプレッション回路の関連する分岐制御記憶装置にエントリを作成する必要はない。
【0048】
デコンプレッション回路に関連した分岐制御記憶装置内に格納された情報は種々の形式を取ることができる。一実施形態では、デコンプレッション回路は、分岐動作設定命令によって識別され、識別された命令を決定するために使用される分岐点データを分岐制御情報として格納するように構成される。さらに、一実施形態では、デコンプレッション回路は、ターゲットアドレスが分岐動作設定命令内で指定された即時値から直接導出可能である場合に分岐制御情報としてターゲットアドレスを格納するように構成される。したがって、そのターゲットアドレスが即時値から直接導出可能である場合には、デコンプレッション回路はプログラムイメージからターゲットアドレスを決定し、したがってそのローカル分岐制御記憶装置内でターゲットアドレスを取り込むことができる。これにより、識別された命令に後で遭遇したときにプログラムイメージ内のどこに分岐するかを直接決定することができる。代わりにターゲットアドレスが直接識別できない場合には、一実施形態では、トレースストリームはターゲットアドレスを直接識別する情報を含み、したがって、デコンプレッション回路がトレースストリーム内に提供された情報からターゲットアドレスを決定することが可能である。
【0049】
一実施形態では、デコンプレッション回路は、前述の非イベントトレース要素または無効化トレース要素に応答するように構成することもでき、これらのトレース要素は任意選択的に使用される。特に、デコンプレッション回路は、トレースストリーム内の非イベントトレース要素に応答してその関連する分岐制御記憶装置内の特定のエントリを無効にするように構成することができる。同様に、無効化トレース要素に応答して、デコンプレッション回路は、それに関連する分岐制御記憶装置の内容を無効にするように構成することができる。
【0050】
次に、特定の実施形態について図面を参照しながら説明する。
【0051】
図1は、監視対象回路10、トレースモジュール20、トレースバッファ30、およびトレースアナライザ40を提供する、一実施形態によるシステムを概略的に示す。図1はトレースバッファ30を提供するシステムを示しているが、代替的な実施形態では、トレースモジュール20はトレースバッファを介さずにその出力をトレースアナライザ40に直接渡すことができる。トレースモジュール20は、一連のトレース要素を含むトレースストリームを生成するように構成されており、これにより、トレースアナライザは監視対象回路10の動作を再構成することができる。監視対象回路10は様々な形態を取ることができるが、一実施形態では、一連の命令を実行するように構成された少なくとも1つの処理要素、例えばプロセッサコアを含む。監視対象回路は、監視対象回路上で実行されている命令を示す命令実行情報をトレースモジュール20に出力する。
【0052】
トレースモジュールは、一実施形態ではオンチップで具体化され、例えば英国ケンブリッジのARM社によって製造されたETM回路の形態を取ることができ、一連のトレース要素を提供するトレースストリームを生成するように構成され、トレース要素は命令シーケンス内の所定の命令の実行を示す。したがって、監視対象回路によって実行される各命令を表すトレース要素を生成するのではなく、トレースストリーム内のトレース要素は、特定の所定の命令の実行のみを示しており、トレースアナライザには、トレース要素が提供されるそのような所定の各命令間で実行された命令についての情報を再構築することを可能にするのに十分な知識が(例えばプログラムイメージを介して)提供される。例えば、一実施形態では、トレースモジュールは、シーケンス内で実行される命令フロー変更命令(通常は分岐命令)ごとにトレース要素を生成するように構成することができ、そのトレース要素は分岐が実行されたか否かについての情報を提供し、トレースアナライザ40には、分岐命令の処理に関する情報に基づいて、実行された実際の命令シーケンスを決定することを可能にするためのプログラムイメージが提供される。これにより、著しく減少した量のトレース要素を生成することが可能になる。トレースアナライザ40は通常チップ外で具体化されるので、これは非常に有用であり、したがってトレースストリームはチップのピンを介してアナライザにルーティングされる必要がある。
【0053】
監視対象回路によって実行される命令シーケンスは、1つまたは複数の分岐動作設定命令を含むことができる。分岐動作設定命令は、分岐動作設定命令によって明示的または暗黙的に識別される任意の命令に分岐動作を関連付けることができ、その識別された命令に後で遭遇したときに、これにより、監視対象回路は、(識別された命令によって要求される機能を実行する代わりに、またはそれに加えて)分岐動作設定命令によって識別されたターゲットアドレスに分岐することができる。この動作をサポートするために、監視対象回路は関連する分岐制御記憶装置を有することができ、一実施形態では、これは1つまたは複数のエントリを有する分岐ターゲットアドレスキャッシュ(BTAC)の形態を取る。
【0054】
分岐動作設定命令が実行されると、これによりエントリをBTACに割り当てることができ(分岐動作設定命令のタイプに応じて、エントリを割り当てるべきかどうかを判定するために評価を行うことができる)、そのエントリは、その識別された命令に遭遇したときに処理回路が分岐すべきアドレスを識別するターゲットアドレスと共に、分岐未来命令によって示される識別された命令のアドレスをソースアドレスとして記録する。一実施形態では、上記の方法でBTACのポピュレーションを引き起こす分岐動作設定命令の実行に続いて、例えば、そのプログラムカウンタがBTACのエントリのうちの1つに保持されているソースアドレスに対応する値に更新された、または更新されようとしていることを検出することにより、処理回路がそのBTACのエントリの1つにヒットを検出した場合に、BTACのそのエントリにも取り込まれているターゲットアドレスに命令フローを分岐させるように構成することができる(後でより詳細に説明するように、分岐動作設定命令のタイプに応じて、分岐の成立は、他にも存在する条件を条件とすることができる)。
【0055】
このような手法により、分岐動作設定命令を用いて任意の命令を効果的に分岐させることができることがわかる。その識別された命令の形式は重要ではない、というのは、上述の方法で分岐動作設定命令によって識別されると、その後その識別された命令に遭遇すると処理回路は分岐動作設定命令によって識別される分岐を実行するように構成できるからである。分岐動作設定命令は、必要に応じて条件付きで実行することができる。したがって、分岐動作設定命令の実行条件が満たされると、上述した処理が行われ、そして、識別された命令にその後遭遇したときに、(識別された命令を実行することに加えて、またはその代わりに)監視対象回路はターゲットアドレスへの分岐を実行することができる。逆に、分岐動作設定命令を実行する時点で条件が満たされなければ、分岐動作設定命令は実行されず、そしてやがて、識別された命令はその識別された命令によって指定された機能を実行するためにその通常の方法で実行される。
【0056】
そのような分岐動作設定命令の使用は、監視対象回路10によって実行することができる動作に著しい柔軟性を追加するが、トレース要素が監視対象回路によって実行されているシーケンス内の特定の所定の命令に対してのみ生成される、前述のタイプのトレースストリームを生成するようにトレースモジュールが構成されている場合には、それはトレースモジュール20にとって重大な問題を引き起こす。特に、実行される命令フロー変更命令ごとにトレース要素を生成するようにトレースモジュールが設定されている場合には、その識別された命令はそれ自体分岐命令ではない可能性があるので、通常、分岐動作設定命令によって分岐の原因としてフラグが立てられた識別された命令のトレース要素は生成されない。トレースストリームがそのような分岐が起こったことに対して正しくフラグを立てないならば、トレースアナライザは監視対象回路によって実行された命令のシーケンスを正しく推定できないことが理解されよう。
【0057】
例外発生時の情報をトレースするのと同じ方法で、監視対象回路のBTAC内のエントリによってフラグが立てられた識別された命令に到達した結果として発生する分岐をトレースするようにトレース生成回路を構成することができる。しかし、識別された命令のアドレスと分岐先のターゲットアドレスの両方をトレースする必要があるため、トレース帯域幅の点でコストがかかり、したがって、トレースストリームフォーマットの効率を大幅に低下させる可能性がある。
【0058】
さらに後述するように、分岐動作設定命令の従前の実行により、監視対象回路のBTAC内のエントリと一致する識別された命令に遭遇したために監視対象回路内で発生する分岐をトレース生成回路が効率的にトレースできるようにする機構が提供される。
【0059】
図2は、一実施形態のトレースモジュール20を示すブロック図である。図示するように、トレースモジュール20は処理要素50に結合され、それは一実施形態では監視対象回路10の少なくとも一部を形成する。処理要素50は、分岐動作設定命令の実行に基づいて取り込まれる分岐制御情報を維持する関連するBTAC55を有する。BTAC55は1つまたは複数のエントリを有し、処理要素50が分岐動作設定命令を実行すると、分岐動作設定命令の実行が前述の分岐動作を識別された命令に関連付けるべきであることを示すならば、BTAC55内のエントリの1つは特定の分岐制御情報で占められる。
【0060】
図4Aに示すような一実施形態では、BTAC55内の各エントリは、分岐動作設定命令によって示される識別された命令のアドレスが取り込まれるソースアドレスフィールド155と、分岐動作設定命令によって識別されるターゲットアドレスが格納されるターゲットアドレスフィールド160と、を含むことができる。一方、一実施形態では、フィールド155は識別された命令のアドレスを格納し、より一般的にはフィールド155は前述の形式のいずれかを取り得る分岐点データを格納するが、命令ストリーム内で識別された命令に遭遇したときを処理要素が検出できるようにするのに十分である。BTAC55のエントリの1つにおいてヒットが検出されると、識別された命令が命令ストリーム内で発生したことを示し、次に、他の必要条件がすべて満たされていると仮定すると、(識別された命令を実行することに加えて、またはその代わりに)処理要素は関連するターゲットアドレスフィールド160内のターゲットアドレスに分岐する。
【0061】
一実施形態では、複数のタイプの分岐動作設定命令をサポートすることができ、各エントリが関連付けられている分岐動作設定命令のタイプを識別するために各BTACエントリ55内にフィールド165が設けられる。次に、分岐動作を呼び出すべきかどうかを判定するために、BTAC内でヒットが検出された特定のエントリについてそのフィールド165を参照するように分岐およびループ制御回路58を設けることができる。
【0062】
一実施形態では、第1のタイプの分岐動作設定命令がサポートされており、これは、本明細書では分岐未来命令と呼ばれる。分岐未来命令を実行する場合に、識別された命令は、分岐未来命令を実行した後のある時点で処理回路が命令シーケンス内で遭遇する任意の命令であってもよい。分岐未来命令の実行は条件付きにすることができ、実際、いくつかの実施形態では後方互換性の理由で分岐未来機能を無効にすることが可能であってもよい。しかし、分岐未来命令が実行されると仮定すると、BTAC55内のエントリのうちの1つが上述のように取り込まれる。その後に、命令ストリーム内で識別された命令に遭遇すると、BTAC55内の対応するエントリが依然として存在するという条件でこれにより、分岐およびループ制御回路58は分岐動作を呼び出すべきであると判定し、その結果、処理要素50は、BTAC55のそのエントリにおいて識別されたターゲットアドレスに分岐する。この時点で、分岐およびループ制御回路58はそのBTACエントリを無効にすることができる。
【0063】
一実施形態でサポートすることができる第2のタイプの分岐動作設定命令は、プログラムループ内の最終命令として使用されるゼロオーバーヘッドループ終了(ZOLE)命令である。それは、識別された命令としてループ内の直前の命令を識別し、ターゲットアドレスとしてプログラムループの開始位置のアドレス表示を識別するように構成することができる。最初の反復では、プログラムループの少なくとも1回のさらなる反復が必要とされるならば、BTAC55内のエントリを埋めるようにZOLE命令を構成し、次いでプログラムループの開始位置に分岐するように構成することができる。後続の各反復において、識別された命令(すなわちプログラムループの最後から2番目の命令)に遭遇すると、対応するエントリがBTAC55内に依然として存在し、実行するプログラムループの少なくとも1回のさらなる反復が依然としてあることを条件として、分岐およびループ制御回路58は、上述の分岐動作を呼び出すべきであると判定して、その最後から2番目の命令を実行することに加えて、処理要素50をプログラムループの開始位置に分岐させる。これにより、プログラムループの実行のパフォーマンスが大幅に向上する。やがて、ループの最後の反復中に識別された命令に遭遇したときに、関連するBTACエントリがまだ占有されている場合には、分岐およびループ制御回路58はそのBTACエントリを無効にし、分岐動作を呼び出さないことを決定できる。
【0064】
処理要素50が命令シーケンスを実行すると、それがトレース生成回路60に転送されるところからトレースモジュール20の入力インターフェース65に命令実行情報を渡す。一実施形態では、この命令実行情報は、分岐動作設定命令の実行動作を識別する情報(その命令の実行によってBTAC55内にエントリが作成されたかどうかを判定するのに十分である)を含み、BTACエントリの1つにヒットしたために分岐がいつ発生したかを識別する情報を含む。
【0065】
一実施形態では、BTAC55内の各エントリは、ターゲットアドレスが直接ターゲットアドレスであるか、すなわち(例えば、分岐動作設定命令内の即時値として提供されることによって)分岐動作設定命令から直接決定可能であるか、あるいは、例えば、分岐動作設定命令がターゲットアドレスを導出するためにその内容が使用されているレジスタを識別する場合に間接ターゲットアドレスであるか、に関する情報を取り込むための追加のフィールドを有することができ、この情報は、処理要素50によってトレース生成回路60に提供される命令実行情報内に提供することができ、BTEC55内でのヒットによる分岐が発生したときにトレースストリーム内にどのような情報を含めるべきかを決定するときにトレース生成回路60によって使用される。
【0066】
一実施形態では、トレース生成回路60は、命令シーケンス内で分岐命令が実行されるときはいつでもそのトレースストリーム内のトレース要素を出力するように構成される。そのトレース要素はまた分岐が実行されたか否かを示し、これは入力インターフェース65を介して処理要素50から受信した命令実行情報から導出可能である。トレース要素のストリームは、その後に、前方への伝播のために出力インターフェース70を介してトレースバッファ30および/またはトレースアナライザ40に転送される。そのような各トレース要素は、本明細書では「アトム」、分岐が実行されたことを示す「Eアトム」、および分岐が実行されなかったことを示す「Nアトム」とも呼ぶことがある。
【0067】
さらに、トレース生成回路60は、各分岐動作設定命令の実行動作を示すトレース要素を発行するように構成される。そのようなトレース要素の目的は、その分岐動作設定命令の実行によってエントリがBTAC55内に取り込まれたかどうかを判定するために解析回路40に十分な情報を提供することである。以前のZOLE命令の例を考えると、これは実際には分岐命令そのものであり、分岐がプログラムループの先頭に処理を戻すために行われる場合には、これはZOLE命令の実行によってBTAC55においてエントリが生成された状況を示す。逆に、分岐が実行されない場合には、BTAC55にはエントリは生成されない。したがって、その場合、ZOLE命令の分岐動作に応じてEアトムまたはNアトムを発行すれば十分である。
【0068】
分岐未来命令の場合、一実施形態では、これはそれ自体分岐命令ではないが、分岐未来命令の実行によりエントリがBTAC55に正常に登録される場合にはトレース生成回路60によってEアトムが発行され、そうでなければNアトムが発行されるようにトレース機構を構成することができる。
【0069】
さらに、トレース生成回路60は、処理要素のBTAC55におけるヒットのために分岐が生じたときに命令実行情報に基づいて検出するように構成される。その場合、トレース生成回路はまた、トレースストリーム内にターゲットアドレスへの分岐が発生したことを示すトレース要素を発行する(一実施形態ではEアトムを発行することによって)。トレースアナライザ40がターゲットアドレスを決定することができるので、ターゲットアドレス自体が分岐動作設定命令から直接推論できる場合には、ターゲットアドレス自体はトレースストリーム内で識別される必要はない。しかし、ターゲットアドレスが直接推論できない場合には、トレース生成回路60は処理要素50によって提供された情報からターゲットアドレスを決定し、そのターゲットアドレスをトレースストリーム内に出力し、そのターゲットアドレスをトレースアナライザ40が使用することができる。
【0070】
図15を参照して後でより詳細に説明するように、一実施形態では、トレースモジュール20は、BTAC55の各エントリに対して飽和カウンタを維持するためのカウンタ回路62を含むことができ、これは、分岐未来命令が実行される時点と、対応する識別された命令が命令シーケンス内で遭遇する時点との間にトレースが有効になっている状況を検出するために使用することができる。
【0071】
図3は、一実施形態のトレースアナライザ40を概略的に示す図である。トレースアナライザ40はその入力インターフェース105でトレースストリームを受信し、そこからその情報がデコンプレッサ回路100に転送される。デコンプレッサ回路100は、監視対象回路によって実行されるプログラムコードのコピーを提供するプログラムイメージ110へのアクセスを有する。デコンプレッサ回路100は、プログラムイメージ内の現在のアドレスを追跡し(現在のアドレスは、トレースがオンにされたとき、または専用トレース情報などにより、所定の時点で所定の初期値に設定される)、新しいアトムが受け取られるたびに、それはプログラムイメージ内の特定のタイプの次の命令、例えば、トレースストリーム内の各トレース要素が分岐命令の実行を示す上記の例の分岐命令に到達するまでプログラムイメージをトラバースする。デコンプレッサ回路は、現在のアドレスとその次の所定の命令のアドレスとの間で実行された各命令に関する情報をプログラムイメージから抽出し、その実行情報のすべてを解析のために解析回路120に出力する。プログラムイメージ内でその次の所定の命令に遭遇すると、その遭遇した分岐のターゲットアドレスに基づいて現在のアドレスが更新され、その結果、次のアトムがトレースストリーム内で受け取られると、同じプログラムイメージのトラバース処理が再び開始することができて、新しい現在のアドレスから開始する。
【0072】
前述のように、標準の分岐命令に加えて、トレースストリームは、処理要素50が分岐動作設定命令を実行したとき、および処理要素50が遭遇した分岐動作設定命令によって示される識別された命令によりターゲットアドレスへの分岐が生じたことをトレース要素20が検出したときに、トレースモジュール20によって挿入されたトレース要素も含む。そのような場合にデコンプレッサ回路100がプログラムイメージの適切なトラバースを実行することを可能にするために、デコンプレッサ回路はまた、図3においてデコンプレッサBTAC115と呼ばれる、関連するローカルBTACを有する。デコンプレッサ回路100がプログラムイメージ110をトラバースするとき、および、それがBTAC55内のエントリを占める分岐動作設定命令に遭遇したときに、それはその分岐動作設定命令から導出された分岐制御情報をデコンプレッサBTAC115内に格納する。一実施形態では、デコンプレッサBTACは図4Bに示す形態を取り、1つまたは複数のエントリを含み、各エントリは、分岐動作設定命令によって識別された命令のアドレス(または前述のような他の任意の同等の分岐点データ)をソースアドレスとして格納するためのフィールド175を有し、また、ターゲットアドレスが分岐動作設定命令から直接決定可能である場合には、ターゲットアドレスを格納するためのフィールド180を有する。特に、その場合、デコンプレッサ回路100はプログラムイメージの内容から直接ターゲットアドレスを決定することができ、したがってフィールド180内のそのターゲットアドレスを取り込む。ターゲットアドレスを直接決定できない場合には、フィールド180は空白のままにされ、代わりにデコンプレッサ回路はトレースストリーム内に提供された情報からターゲットアドレスを後で決定する。
【0073】
デコンプレッサBTAC115が上述のように埋められると、デコンプレッサ回路100は、プログラムイメージをトラバースするときにデコンプレッサBTAC115を参照することができる。デコンプレッサ回路100が、プログラムイメージ内で考慮されている現在の命令のアドレスから、デコンプレッサBTAC115のエントリのうちの1つにソースアドレス情報とのヒットがあることを検出するときはいつでも、現在考慮されている命令が分岐動作設定命令によって識別された識別された命令であると判断し、したがって、次の分岐命令に達するまで待つのではなく、その識別された命令を次の所定の命令として扱う。その時点で、デコンプレッサ回路100は、プログラムイメージの現在のトラバース中にトラバースされたすべての命令についての情報を解析回路120に提供することができ、またその時点で現在のアドレスをターゲットアドレスに更新することもできる。直接ターゲットアドレスの場合、それはデコンプレッサBTAC115内の関連エントリのフィールド180内に示されるターゲットアドレスであり、一方、間接ターゲットアドレスの場合、そのターゲットアドレス情報は、現在考慮されているアトムに関連するトレースストリーム内で直接提供される。
【0074】
トレースアナライザ40は、1つまたは複数の所定のトレース制御イベントの発生時にそのデコンプレッサBTAC115の内容を無効にして、デコンプレッサBTAC115内に古い情報が維持されないことを保証するように構成することができる。
【0075】
図5は、ゼロオーバーヘッドループと、前述の分岐動作設定命令の一例として、関連するZOLE命令の使用を模式的に示す図である。ループの開始は、WLS命令200(ここで、WLSは「while loop start」を表す)によって示される。これはwhile文に依存する条件付き形式のループ開始命令である。条件が満たされると仮定すると、ループ開始命令はレジスタr内に与えられた値をリンクレジスタLr内に格納し、この値は必要とされるループの反復回数の表示である。この機能が実行されていると仮定すると、WLS命令はNアトムを発行することによって実行されない分岐としてトレースされる。しかしながら、条件が満たされない場合には、代わりにWLS命令の実行は処理を位置「loopend」に分岐させ、それは一実施形態ではプログラムループ本体の終了を示すZOLE命令の直後の命令である。この機能が実行されると仮定すると、WLS命令はEアトムを発行することによって実行された分岐としてトレースされる。
【0076】
最初の反復中に、(ループへの分岐とは対照的に)ループに入ったと仮定すると、ループ本体内の各命令が実行され、ある時点でZOLE命令205が実行される。これは入力としてリンクレジスタ値を取り、リンクレジスタ値がゼロでないと仮定すると、これはBTAC55内のエントリが取り込まれ、ソースアドレスとして命令I210のアドレスを識別し、ZOLE命令で指定されたアドレス「loopstart」をターゲットアドレスとして示す。リンクレジスタのカウント値もデクリメントされ、分岐がloopstartに戻る。したがって、ZOLE命令はEアトムとしてトレースされ、分岐が実行されたことを示す。
【0077】
図5の右側の概略図に示すように、(最終反復以外の)プログラムループ本体の後続の各反復中に、I命令210に遭遇すると、BTAC55のエントリにヒットが検出され、反復回数はまだゼロでないと判定され、したがって反復回数がデクリメントされて、分岐はloopstartへ戻る。したがって、これらの反復のそれぞれの間に、ZOLE命令205を再実行する必要はなく、したがって、著しい性能改善をもたらす。最後の反復において、I命令に遭遇すると、反復カウントは今やゼロであり、したがってさらなる反復は必要とされないことが決定される。したがって、分岐動作は、最後の反復ではI命令に関連付けられず、代わりにZOLE命令205が再実行される。しかし、この時点で、リンクレジスタの値がゼロであると判定され、それに応じて実行されなかった分岐が実行され、プログラムカウンタは「loopend」に更新される。
【0078】
図5にはループ開始命令の条件付き変形例が示されているが、代替的な実施形態ではループ開始は無条件の変形例であってもよく、これは一実施形態ではDLS(do loop start)命令と呼ばれ、常にリンクレジスタをレジスタr内の反復カウント値に更新する。DLS命令は分岐命令ではないので、DLS命令が実行されるときにトレースストリーム内にアトムは発行されない。
【0079】
図6は、一実施形態による、ゼロオーバーヘッドループを含むプログラムシーケンスがどのようにトレースされるかを示す流れ図である。ステップ250において、トレース生成回路60は、処理要素50によって実行されている現在の命令についての情報の受信を待つ。その後に、ステップ255で、その現在の命令をトレースするべきかどうかが決定される。いくつかの実施形態では、命令シーケンス全体をトレースすることを決定することができるが、他の実施形態では、現在実行中の命令に応じてトレース機構を選択的にオンおよびオフにすることができる。これにより、コードの特定の部分をトレースすることができるが、他の部分はトレースされない。そのような実施形態では、トレースするコードのそれらの部分に関してトレースストリームが生成されるだけであり、トレースストリーム内で発行される実際のトレース要素は、コードのそれらの部分内で実行される特定の命令のみに関係する。
【0080】
ステップ255で現在の命令がトレースされないことが決定されると、処理は単にステップ250に戻り、監視対象回路によって実行される次の命令についての情報を待つ。
【0081】
ステップ255で現在の命令をトレースするべきであると決定されると、ステップ260で現在の命令がトレース要素を生成するべき所定の命令の1つであるかどうかが決定される。一実施形態では、そのような命令は命令フロー変更命令、特に分岐命令であり、本明細書ではそのような命令を「P0命令」と呼ぶことにする。一実施形態ではP0命令は分岐命令であるが、他のタイプの命令もP0命令と見なすことができ、したがって対応するアトムをトレースストリーム内で発行させることが可能である。
【0082】
図5の前の例を考慮すると、WLS命令200およびZOLE命令205の両方が分岐命令であり、したがってステップ260でP0命令として扱われることが理解されよう。
【0083】
ステップ260でP0命令が検出されるたびに、ステップ265でその命令に対してアトムが発行される。一実施形態では、このアトムは、その現在の命令に対して分岐が実行される場合にはEアトムであり、分岐が実行されない場合にはNアトムである。
【0084】
分岐が実行されたことを命令実行情報が示す場合には、それは通常ターゲットアドレスが直接ターゲットアドレスであるか間接ターゲットアドレスであるかを識別する。ターゲットアドレスが直接ターゲットアドレスである場合には、ターゲットアドレス情報をトレースストリームに出力する必要はない。しかし、ターゲットアドレスが間接的である場合には、一実施形態では、命令フローがやがて分岐した位置をトレースアナライザが判定することができるように、ターゲットアドレスの表示もEアトムに関連してさらなるパケットで出力される。ステップ265に続いて、処理はステップ250に戻り、次の命令についての情報を待つ。
【0085】
ステップ260で現在の命令がP0命令ではないと判定された場合には、ステップ270で現在の命令が処理要素のBTAC55内でゼロオーバーヘッドループに関連する命令として識別される命令であるかどうかが判定される。一実施形態では、この情報は、現在の命令のソースアドレスをソースアドレスフィールド155と比較することによる、およびヒットされたエントリがZOLE命令の実行の結果として取り込まれたことを示すBF/ZOLEフラグフィールド165による、BTAC55のエントリ内のヒットの検出に基づいて、処理要素50からの命令実行情報の一部として提供される。
【0086】
現在の命令が処理要素のBTAC内でゼロオーバーヘッドループに関連すると識別されたと判定された場合には、ステップ275で、処理要素からの命令実行情報によって示されるように、その命令を処理するときに分岐が実行されたかどうかが判定される。前述のように、これは、命令が発生した時点でプログラムループの少なくとも1回のさらなる反復が必要な場合に当てはまる。分岐が実行された場合には、ステップ280において、トレースストリーム内に含めるためにEアトムが生成される。ステップ265と同様に、ターゲットアドレスが間接ターゲットアドレスであると決定された場合には、ターゲットアドレスの表示もEアトムに関連してトレースストリーム内の追加のパケットとして出力される。しかし、直接ターゲットアドレスの場合には、追加情報は不要で、Eアトムだけを発行すればよい。ステップ270またはステップ275のいずれかから否定の経路が続く場合には、処理はステップ250に戻る。
【0087】
図7は、特定のトレース要素がいつ生成されるかの表示と共にゼロオーバーヘッドループの実行を示す流れ図である。この例では、ゼロオーバーヘッドループは、実行条件が満たされているWLS命令によって開始されると仮定する。したがって、ステップ300で、while条件が満たされていると判断され、処理要素はWLS命令を実行されない分岐として実行する。この時点で、リンクレジスタ値をソースレジスタr内に提供された反復カウント値に設定し、その反復カウント値は反復回数を示す。一実施形態では、WLS命令が実行されない分岐として処理された結果として最初の反復が自動的に実行されるので、カウント値は最初の反復に加えて必要な反復の数を示すように設定される。
【0088】
WLS命令が実行されなかった分岐として処理されると仮定すると、ステップ305でトレースモジュールはWLS命令に関連してNアトムを発行した。前述のように、WLS命令がDLS命令に置き換えられた場合には、リンクレジスタには反復カウント値が設定されるが、DLS命令は分岐命令ではないので、トレースアトムは生成されない。
【0089】
ステップ305の後に、処理はステップ310において次の命令に進む。この時点で、ステップ315で次の命令がZOLE命令であるかどうかが判定され、そうでなければステップ345でその命令によって要求される処理が実行される。これは、ステップ350において、その命令によって処理要素のBTACにおいてヒットが生じるかどうかを判定することを含む。ゼロオーバーヘッドループの最初の反復の間、これは、WLS命令とZOLE命令との間の命令のいずれにも当てはまらず、したがって、処理はステップ310に戻り、ZOLE命令に達するまでステップ315、345、350を通って継続する。最初の反復の終了時にステップ315でZOLE命令が実行されると、分岐およびループ制御回路58はステップ320からステップ335を実行するために使用され、リンクレジスタカウント値が0より大きいかどうかがステップ320で最初に判定される。前述したように、これは少なくとも1回のさらなる反復が必要な場合にのみ当てはまる。
【0090】
少なくとも1回のさらなる反復が必要であると仮定すると、ステップ325でリンクレジスタ値を更新することによってカウンタがデクリメントされ、ステップ330で処理要素のBTAC55にエントリが作成される。前述のように、これはZOLE命令の前の直前の命令をソースアドレスとして識別し、プログラムループ内の最初の命令をターゲットアドレスとして識別する。
【0091】
その後に、ステップ335で分岐が実行されて処理をプログラムループの開始に戻し、その後ステップ340でトレースモジュールはEアトムを発行して、実行された分岐がZOLE命令の実行に関連付けられていることを識別する。次に処理はステップ310における次の命令に移り、この例ではWLS命令の後のプログラム本体ループ内の最初の命令である。
【0092】
次に処理はプログラムループ本体の2回目の反復を通して進行し、ある時点で、ステップ350において、処理中の現在の命令によって処理要素のBTACにヒットが生じたと判定される。これは、例えば、図5のゼロオーバーヘッドループの例を考慮すると、図5の命令I210が実行される場合に当てはまる。その時点で、分岐およびループ制御回路58はリンクレジスタの内容がゼロより大きいかどうかを判定し、もしそうであれば、ステップ360でカウンタをデクリメントし、その後処理はステップ335へ進む。その後に、ステップ335およびステップ340は、ZOLE命令が実行された場合に実行されたのと全く同じ方法で実行される。しかし、この時点では処理はZOLE命令自体には進まず、したがってZOLE命令は再実行される必要がなく、したがって著しい性能改善をもたらすことが理解されよう。
【0093】
プログラムループの最後の反復では、ステップ355で、プログラムループ内の最後から2番目の命令を実行するときにリンクレジスタがもはや0より大きくないと判定され、この時点で処理はステップ365に進み、そこで分岐およびループ制御回路58は、ステップ310に戻る前に、処理要素のBTAC内の関連するエントリを無効にする。次にステップ310で、処理はここで再実行されるZOLE命令に進む。しかし、この場合、ステップ320でリンクレジスタの内容はもはや非ゼロではないと判定され、したがって処理はステップ370へ進み、そこでトレースモジュールがこのZOLE命令の現在の実行に関連してNアトムを発行し、その後に、ステップ375でループが実行される。
【0094】
図7の処理から、処理がゼロオーバーヘッドループの複数の反復の途中である間に何らかの理由で処理要素のBTAC内の関連エントリが無効にされる場合には、これは、最後から2番目の命令が次に遭遇したときにステップ350で処理要素のBTACにヒットしたと識別されないようにし、それは次に処理をZOLE命令に進めるようにすることに留意されたい。しかしながら、リンクレジスタの内容がまだゼロでない時点でZOLE命令が再実行される場合には、ステップ325、330、335、340が再実行され、ゼロオーバーヘッドループの実行が再開される。トレースアナライザの目的のためには、ステップ340で発行されたEアトムが、ZOLE命令の再実行によるものか、または処理要素のBTACにおけるヒットに関連する最後から2番目の命令の実行によるものかは問題ではない。
【0095】
以下の表1は、図7に記載の手法と一致する方法でゼロオーバーヘッドループを実施するために実行することができる例示的なコードシーケンスを示す。
【表1】
【0096】
図8は、一実施形態で使用することができるさらなるタイプの分岐動作設定命令を概略的に示し、このタイプの分岐動作設定命令は、本明細書では分岐未来命令と呼ばれる。分岐未来命令400が実行されると、次に分岐未来命令に関連する条件が満たされると、これはBTAC55内にエントリを取り込んでソースアドレスとして値「B point」を識別し、ターゲットアドレスとして値「foo」410を設定する。次に、命令I405に遭遇し、そのエントリがBTAC55内でまだ有効であると仮定すると、これにより、命令Iを次に実行される命令にするために、処理がアドレスfoo410に分岐する。一実施形態では、この分岐動作は命令Iの実行を無効にすることができるので、命令Iに遭遇したときに実行される唯一の動作は点410へ分岐することである。しかし、代替的な実施形態では、処理は、命令Iを実行するときに必要とされる通常の動作を実行し、次に並行して、実行される次の命令が命令Iであるように点410に分岐する。
【0097】
一実施形態では、分岐命令415は、分岐を生じさせてアドレス「foo」410にするためのバックアップとして提供することができる。これは、例えば、分岐未来機能を無効にすることができる実施態様において、または分岐未来命令400が実行されてから命令I405に遭遇するまでの間にBTAC55の内容が無効にされる状況をカバーするために有用であり得る。しかし、本明細書で説明されているトレース技術は、そのようなバックアップ分岐命令415が提供されることを必要としないことに留意されたい。
【0098】
図9は、分岐未来命令の1つまたは複数の事例を含む一連の命令をトレースするために実行されるステップを示す流れ図である。ステップ450およびステップ455は、図6の前述のステップ250およびステップ255に対応する。ステップ455で現在の命令をトレースするべきであると決定されると、ステップ460で現在の命令が分岐未来命令であるかどうかが判定される。現在の命令が分岐未来命令であると判定された場合には、ステップ465で、その分岐未来命令によって識別される識別された命令がBTACに正常に登録されたかどうかが判定される。これは、処理要素から受信した命令実行情報から導き出すことができる。前述のように、識別された命令がBTACに正常に登録されなかった理由はいくつかある。例えば、分岐未来命令は条件付きであり得るので、特定の条件が満たされたときにのみBTACにエントリが作られる。さらに、一実施形態では、分岐未来機能は選択的に無効にされる場合があり、無効にされた場合には、分岐未来命令の遭遇によってBTAC内にエントリが作成されない。ステップ465で、識別された命令がBTACエントリの1つに正常に登録されたと判定されると、分岐未来命令はステップ475でEアトムとしてトレースされ、そうでなければステップ480でNアトムとしてトレースされる。次に処理はステップ450に戻る。
【0099】
一実施形態では、BTAC55は少数のエントリのみを有することができ、実際には一実施形態では単一のエントリを有してもよい。そのような状況では、ステップ465で識別された命令がBTACに正常に登録されると、これは以前に実行された分岐未来命令の別のアクティブな識別された命令に関する情報を上書きする可能性があり、その場合、BTACは、以前に実行された分岐未来命令によって識別されたが、まだ命令ストリーム内で遭遇していない命令に関する情報を失うことになる。そのような状況がいつ発生したかをトレースアナライザが検出できることが重要である。いくつかの実施形態では、トレースアナライザは、BTAC55内で使用される置換方針を知ることができ、アクティブ分岐制御情報のそのような上書きが行われた状況を既存のトレース情報から決定論的に判定することができる。しかし、そうでなければ、ステップ475でEアトムを発行する前に、BTAC内のそのような保留中の分岐未来エントリが上書きされる場合には、ステップ470でトレース生成回路60はトレースストリーム内に非イベントパケットを発行するように構成することができる。
【0100】
ステップ460で現在の命令が分岐未来命令ではないと判定された場合には、次にステップ482で、現在の命令が分岐未来命令に関連するものとして処理要素のBTAC内で識別されるかどうかが判定される。これは、処理要素が現在の命令のソースアドレスとBTAC内のエントリとの間のヒットを検出した場合に発生し、関連するフィールド165は、そのエントリが前の分岐未来命令の実行により取り込まれたことを示す。そのような状況では、処理はステップ484に進み、そこでEアトムが現在の命令に関連して発行される。
【0101】
ステップ482から「いいえ」の経路がたどられるか、または「はい」の経路がたどられる場合にステップ484の実行に続いて、ステップ486で、現在の命令がP0命令であるかどうかが判定され、前述のように、これは通常分岐命令である。そのようなP0命令に遭遇するときはいつでも、処理はステップ488に進み、そこで現在の命令に対してアトムが発行される(P0命令の分岐命令の例は、分岐が実行される場合にはEアトムであり、または分岐が実行されない場合にはNアトムである)。ステップ482からの「はい」の経路をたどった後に現在の命令がP0命令であるかどうかを評価することは、分岐未来命令によって識別された命令がそれ自体でP0命令でもある状況を検出することを可能にする。例としては、データトレースが有効になっているときのメモリ命令がある。そのような場合、2つのEアトムが発行され、1つは実行された分岐に対するもの(ステップ484のEアトム)であり、もう1つはP0要素自体、すなわちメモリ命令に対するもの(ステップ488で発行されたアトム)である。
【0102】
ステップ484またはステップ488のいずれにおいても、ターゲットアドレスが直接ターゲットアドレスである場合には、発行されたEアトムに関連して追加情報は必要とされない。しかし、ターゲットアドレスが間接的である場合には、ターゲットアドレスを識別するために、Eアトムに関連して追加のトレースパケットを発行することができる。
【0103】
いくつかの実施態様では、プログラムシーケンスは、前述のタイプの分岐動作設定命令のうちの1つだけを含むが、他の実施形態では、命令シーケンスは、関連するZOLE命令を有するゼロオーバーヘッドループを含むことができ、さらに分岐未来命令を含むことができ、処理要素のBTAC55内のフィールド165は、どのタイプの分岐動作設定命令によって対応するエントリがBTAC内に取り込まれたかを示す。
【0104】
以下の表2は、実行可能なプログラムシーケンスの一例を示しており、これは一組の分岐未来命令のネストされた対を有し、一実施形態において非イベントパケットの生成をもたらす(この例は単一エントリBTACを仮定している)。
【表2】
【0105】
図10は、トレース回路によって生成されたEアトムを受信したときに、一実施形態に従って図3のデコンプレッサ回路100によって実行することができる処理ステップを示す流れ図である。この処理は、一方または両方の分岐動作設定命令が命令ストリーム内に含まれるか否かにかかわらず実行することができる。ステップ500では、入力インターフェース105でトレースストリーム内でEアトムが受信されたかどうかが判定される。Eアトムが受信されると、次にステップ505で、デコンプレッサ回路100は現在のアドレスからプログラムイメージ110をトラバースし始める。トレース開始点において、またはトレース動作内の同期点において、現在のアドレスは特定の値に設定されてもよい。その後に、それは、以下の図10のさらなる説明から明らかになるように、デコンプレッサ回路によって実行されるプログラムトラバース動作に基づいて更新される。
【0106】
ステップ510において、現在の命令の詳細が解析回路120に出力され、ステップ515において、現在の命令(すなわち現在のアドレスによって指し示される命令)が処理要素のBTAC55をプリロードする分岐未来命令であるかどうかがプログラムイメージを参照して判定される。もしそうであれば、Eアトムの存在は、その命令の実行により確かに処理要素のBTAC内にエントリが作られたことを示し、それに応じて処理はステップ520へ進み、そこで、デコンプレッサ回路100は、そのデコンプレッサBTAC115内にエントリを割り当て、そのエントリ内にソースアドレスとして、分岐動作設定命令によって識別された命令のアドレスを格納する。さらに、そのターゲットアドレスが現在の命令、すなわち分岐未来命令から直接計算可能である場合には、そのターゲットアドレスをそのエントリ内に格納する。次に処理はステップ540に進み、そこで現在のアドレスが、処理要素のBTACをプリロードする分岐未来命令を実行した後に処理される次の命令を指し示すように更新される。これは通常、その分岐未来命令に続く次の命令である。
【0107】
デコンプレッション回路は、必要に応じて、ステップ515で、現在の命令が処理要素のBTACにエントリを作成させたZOLE命令であることを検出して、ステップ520で、その関連するBTACにエントリを作成するように構成することもできるが、一実施形態では、これは行われず、代わりに、各ZOLE命令の識別された命令について、デコンプレッション回路のBTACにエントリが作成されない。特にZOLE命令の場合、識別された命令はプログラムループ本体の直前の命令になるため、デコンプレッサは、処理回路の命令実行動作を正しく追跡するために、ループ終了命令とその直前の命令とを区別する必要はない。したがって、識別された命令についてデコンプレッション回路のBTACにエントリを作成する必要はない。
【0108】
特に、処理要素のBTACに記録されたZOLE命令の識別された命令に遭遇したことによって分岐が行われたことを示す、図6のステップ280で生成されたEアトムは、ZOLE命令自体に関連しているとデコンプレッション回路によって決定されるだけであり、これは、分岐命令であるため、図10の後のステップ530でP0命令として検出され、それによって分岐が行われてプログラムループの開始に戻る。したがって、その場合、処理はステップ530からステップ540に進み、そこでデコンプレッサ回路によって維持されている現在のアドレスがターゲットアドレスに更新される。ZOLE命令の前述の例では、これは通常、ZOLE命令内の直接のターゲットアドレスとして提供される。ステップ545で、処理はプログラムイメージのトラバースを停止し、処理はステップ500に戻って次のアトムを待つ。
【0109】
ステップ515で、現在の命令が処理要素のBTACをプリロードする分岐未来命令ではないと判定された場合には、ステップ525で、現在の命令のアドレスがデコンプレッサBTAC115に格納されたソースアドレスと一致するかどうかが判定される。もしそうであれば、これは現在の命令が前に実行された分岐未来命令によって識別されている識別された命令であることを示し、これはEアトムに関連するので、これはその命令に遭遇すると分岐動作が呼び出されることを意味する。したがって、この命令は、P0命令と同様にプログラムイメージのトラバース処理を停止させる命令として扱うべきであると判定される。したがって、処理はステップ540に進み、ここでデコンプレッサ回路によって維持されている現在のアドレスがターゲットアドレスに更新される。これは、ターゲットアドレスが直接ターゲットアドレスである場合にはデコンプレッサBTACエントリから直接利用可能になるか、またはターゲットアドレスが間接ターゲットアドレスである場合にはトレースストリームで提供される情報から利用可能になる。次に処理は前述のようにステップ545に進む。
【0110】
ステップ525でデコンプレッサBTAC内の一致を検出した後にステップ540で現在のアドレスをターゲットアドレスに更新することに加えて、デコンプレッサ回路は、場合によってはデコンプレッサBTACエントリを無効にすることができる。特に、処理要素が、先行する分岐未来命令によって取り込まれたエントリに関連してBTAC55内のヒットを検出する場合は、それは通常、要求された分岐動作を開始し、次にBTAC内のエントリを無効にする。同様に、前の分岐未来命令に関連するエントリに起因して、デコンプレッサBTACにおいてステップ525でヒットが検出された後にステップ540に到達する場合には、デコンプレッサBTACはそのローカルBTAC115内の関連するエントリを無効にするように構成することができる。
【0111】
ステップ525で、現在の命令のアドレスがデコンプレッサBTACに保持されているソースアドレスと一致しないと判定された場合には、ステップ530で、プログラムイメージ内の現在の命令が標準的なP0命令、例えば分岐命令であるかどうかが判定される。そうであれば、処理は再びステップ540に進み、そうでなければ処理はステップ535に続く。ステップ530で現在の命令がP0命令であると判定されると、ステップ540で現在のアドレスがターゲットアドレスに更新され、ターゲットアドレスが間接的である場合には、ターゲットアドレス情報はトレースストリーム内に提供された情報から利用可能になる。
【0112】
ステップ535に到達すると、(プログラムイメージ内の次の命令を指し示すようにアドレスを進めることによって)プログラムイメージ内の次の命令が現在の命令に設定され、処理はステップ510に戻る。
【0113】
図11は、Nアトムを受信したときにデコンプレッサ回路100によって実行されるステップを示す流れ図である。ステップ550で、Nアトムがトレースストリーム内で受信されたかどうかが判定される。Nアトムが受信されると、ステップ555において、デコンプレッサ回路100は現在のアドレスからプログラムイメージをトラバースし始める。ステップ560で、現在の命令の詳細が解析回路120に出力され、次にステップ565で、現在の命令がトレースストリーム内でNアトムが予想される命令であるかどうかが判定される。上述の実施形態によれば、Nアトムは、分岐が実行されなかった場合のP0命令に関連して、または、識別された命令が処理要素のBTACに正常に登録されなかった分岐未来命令に関連して、予想される。
【0114】
現在の命令がNアトムが予想されるものではない場合には、ステップ570で次の命令が現在の命令になるように設定され、処理はステップ560に戻る。
【0115】
しかし、ステップ565で、現在の命令がNアトムが予想される命令であると判定された場合には、ステップ575で現在のアドレスが次の命令アドレスを指し示すように更新され、ステップ580でデコンプレッサ回路はプログラムイメージのトラバースを停止する。次に処理はステップ550に戻り、次のNアトムを待つ。
【0116】
ステップ565で検出された命令のタイプに応じて、ステップ575が実行されると、デコンプレッサ回路は、そのデコンプレッサBTAC内の関連するエントリを無効にすることもできる。例えば、これは、受信したNアトムがZOLE命令の最後の実行に関連して発行されたとき(すなわち、図7のステップ370で発行されたNアトム)に発生する可能性がある。
【0117】
図12は、処理要素のBTACが無効にされたと判定された場合に一実施形態において実行することができるステップを示す流れ図である。これは様々な理由で発生する可能性があり、その一例は処理要素によって割り込みが行われる場合である。特に、一実施形態では、そのような割り込みを受けたときにBTACの内容を無効にするように決定して、割り込みを受ける前にその状態をすべて保存する必要性を回避し、したがって割り込みをより迅速に処理できるようにする。ステップ600で、処理要素のBTACが無効にされたと判定された場合には、ステップ605で処理要素はトレースモジュール20に通知し、その後ステップ610でトレースモジュールは一実施形態ではトレースストリーム内に無効化イベントパケットを発行する。ステップ615でそのような無効化イベントパケットを受信すると、デコンプレッサはそのデコンプレッサBTACの内容を無効にする。
【0118】
代替的な実施形態では、トレースアナライザがトレースストリーム内でこの時点で発行された別のパケットを処理するときにローカルデコンプレッサBTACコンテンツ115をクリアするように構成されている場合には、トレースストリーム内で無効化イベントパケットを別々に発行する必要はない。例えば、一実施形態では、割り込みの存在を示すためにトレースストリーム内に割り込みパケットが発行される。トレースアナライザは、そのような状況では処理要素のBTACが無効にされることを認識するように設定することができ、したがって、割り込みパケットを受信した結果として、個別の無効化イベントパケットを必要とせずにデコンプレッサBTACの内容を直接クリアすることができる。
【0119】
図13は、前述したように非イベントパケットに応答してデコンプレッサ回路で実行することができる処理を概略的に示す。ステップ650において、非イベントパケットが受信されたかどうかが判定され、そのような非イベントパケットが受信されたとき、ステップ655においてデコンプレッサBTACの内容が更新される。特に、BTACエントリの1つは、非イベントパケットに応答して無効にされる。1つの特定の実施形態では、BTAC55とデコンプレッサBTAC115の両方が単一のエントリしか含まないことがあるので、どのエントリが非イベントパケットに応答して無効にされるかはすぐに明らかである。しかしながら、代替的に、両方のBTACは複数のエントリを有することができるが、デコンプレッサ回路は処理要素によって使用される置換方針を知っており、したがって、どのエントリが非イベントパケットの受信時に無効にされるべきかに関して決定的である。実際、場合によっては、デコンプレッサ回路は、トレースストリーム内の他のパケットから、トレースストリーム内で非イベントパケットを個別に発行する必要なしに、エントリがBTAC55内で無効にされた状況を判定することができる。
【0120】
デコンプレッサBTAC115が分岐未来命令の識別された命令についてのエントリのみを保持し、ZOLE命令のうちの識別された命令についてのエントリを維持しない実施形態では、その上書きされた内容がZOLE命令の識別された命令に関連する場合には、処理要素のBTAC55内のエントリが上書きされたときにトレースモジュール20が非イベントパケットを発行する必要はない。
【0121】
一実施形態では、トレースが命令シーケンスのすべての部分に対して有効にされないことがあり得る。これは、分岐動作設定命令の実行と対応する識別された命令の実行との間にトレースが可能になるという見込みがあることを意味する。分岐動作設定命令がZOLE命令であるゼロオーバーヘッドループの前の例を考慮すると、前述したように動作はトレースの観点から同じであるので、分岐がプログラムループ内の最後から2番目の命令に遭遇することによってトリガされるかどうかにかかわらず、特別な動作は不要である。具体的には、図7の前述の説明から明らかになるように、トレース生成回路は、それがZOLE命令に遭遇することによってトリガされるか、それとも最後から2番目の命令(すなわち、ZOLE命令の直前の命令)に遭遇することによってトリガされるかにかかわらず、(最終ループ反復以外の)各ループ反復の終わりにEアトムを発行する。
【0122】
しかし、分岐未来命令と、対応する識別された命令の遭遇と、の間でトレースが可能である場合には、分岐未来命令の実行動作は追跡されないので、処理要素の処理動作を正しく追跡できるようにするために、トレースアナライザはそれを可能にする追加情報を提供される必要がある。これを行うために、一実施形態では図14の処理が実行される。
【0123】
ステップ660で、トレースモジュール20は、ステップ660でトレースが可能であるかどうかを判定し、次にトレースが可能になり、次にステップ665で、現在命令フローが分岐未来命令と、関連する識別された命令と、の間にあるかどうかを判定する。そうでなければ、追加の動作は必要とされず、処理はステップ685で終了する。しかし、もしそうであれば、ステップ670においてトレースモジュールは、識別された命令が処理要素によって続いて実行されるときに識別された命令の動作を監視する。特に、ステップ675で、その識別された命令を実行するときに分岐が実行されたかどうかが判定される。分岐が実行されなければ、何の動作も必要とされないが、そうでなければ680でトレースストリーム内で例外スタイルパケットが発行され、これは現在の命令のアドレスと分岐されたターゲットアドレスも明示的に識別する。
【0124】
図14の動作をトレースモジュール20内で実施することができるいくつかの方法がある。一実施形態では、トレースモジュールは、BTAC55内の各エントリについてカウンタを維持するためのカウンタ回路62を含む。特定の一実施形態では、各カウンタは飽和カウンタの形式を取る。図15は、各カウンタに関して実行される処理を示す。ステップ700で、その分岐未来命令の実行により(図9に示す実施形態を考慮すると、ステップ475でEアトムを発行することによって)BTAC55内に対応するエントリが取り込まれたことを示すために分岐未来命令がトレースされているかどうかが判定される。このようにして分岐未来命令がトレースされるたびに、ステップ705でカウンタがインクリメントされる。
【0125】
同様に、ステップ710において、処理要素が遭遇したBTAC55のエントリに関連する識別された命令に応答して分岐が行われたかどうかが判定され、もしそうであれば、ステップ715においてカウンタはその後デクリメントされる。さらに、ステップ720で示すように、BTACが無効にされた場合には、例えば割り込みを受けた場合には、カウンタはステップ725でクリアされる。
【0126】
すべての命令がトレースのために考慮されると仮定すると、BTACのエントリ内の識別された命令に対して分岐を実行することが決定される場合に、カウンタは通常ゼロではないと予想されることが理解されよう。例えば、図9で前述した例示的な実施形態を考慮すると、ステップ482で、現在の命令が関連する分岐未来命令によってBTAC55内で識別された命令であることが検出された時点で、カウンタ値はゼロでなくなり、ステップ484で、通常の方法でEアトムが発行される。次に、ステップ710を実行すると、ステップ715でカウンタがデクリメントされてゼロに戻る。
【0127】
しかし、先行する分岐未来命令がトレースモジュールによって考慮されなかった場合(例えば、図9のステップ455から否定の経路がたどられたため)には、BTACエントリでヒットした識別された命令に対して分岐が行われた時点で、カウンタはゼロになり、ゼロカウンタの存在により、処理は図14のステップ680へ進み、例外スタイルパケットをトレースストリーム内で発行することができる。
【0128】
したがって、図15のカウンタ手法を使用し、BTAC55の各エントリに対して別々のカウンタを維持することによって、図14の機能を通常のトレース動作内に効果的に組み込むことができる。特に、図9の処理は通常通りに実行することができるが、分岐未来命令に関連するBTAC内の各エントリに対するカウンタ値を保持するためにバックグラウンドで図15のカウンタ機構を使用する。ステップ482において、現在の命令が、処理要素のBTAC内で分岐未来命令に関連すると識別されたものであると判定された場合には、カウンタがゼロでなければステップ484においてEアトムが発行され、カウンタ値がゼロであれば例外スタイルパケットが発行される。
【0129】
本明細書に記載の実施形態は、非常に効率的なトレース機構を実現することを可能にし、そこでは、監視対象回路によって実際に実行される命令の(通常は小さい)サブセットに対してのみトレース要素が生成されるが、監視対象回路が1つまたは複数の分岐動作設定命令を含む命令シーケンスを実行するときであっても、監視対象回路の動作を正確にトレースすることができ、任意の命令を分岐に効果的に変換することができる。
【0130】
本出願では、「~に構成される」という単語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。これに関連して、「構成」は、ハードウェアまたはソフトウェアの相互接続の配置または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有してもよく、あるいはプロセッサまたは他の処理装置が機能を実行するようにプログラムされてもよい。「に構成されている」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
【0131】
本発明の例示的な実施形態を添付の図面を参照しながら本明細書で詳細に説明したが、本発明はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される本発明の範囲および趣旨から逸脱することなく、当業者によって様々な変更、追加、および修正がその中で達成され得ることを理解されたい。例えば、本発明の範囲から逸脱することなく、従属請求項の特徴の様々な組み合わせを独立請求項の特徴と共に行うことができる。
図1
図2
図3
図4A
図4B
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15