(57)【要約】【課題】データ処理装置が高速になるに従って命令の実行の追跡が複雑になることに対処して、追跡中に作られるデータ・ストリームの大きさを削減する方法を開示する。【解決手段】追跡論理（４０）は命令ストリーム内の命令の処理を検出する監視論理（４２）を含み、命令ストリーム内の命令のどれが条件付き直接分岐命令か、条件付き間接分岐命令か、無条件間接分岐命令かを検出する。追跡論理（４０）は更に圧縮論理（５０）を含み、前記条件付き直接分岐命令、条件付き間接分岐命令、または間接分岐命令をマーカ命令に指定し、マーカ命令毎に、マーカ命令を実行したことを示す実行標識またはマーカ命令を実行しなかったことを示す不実行標識は出力し、処理したがマーカ命令でない命令に関するデータは出力しない。【選択図】図２
2014220003.tif 000002
【特許請求の範囲】
【請求項１】
データ・プロセッサが処理中のプログラムからの処理命令のストリームを監視するための追跡論理回路であって、前記追跡論理回路は、監視論理であって、
前記命令ストリーム内の前記命令の処理を検出し、
前記命令ストリーム内の前記命令のどれが条件付き直接分岐命令か、前記命令ストリーム内の前記命令のどれが条件付き間接分岐命令か、および前記命令ストリーム内の前記命令のどれが無条件間接分岐命令かを検出する、
監視論理を含み、
前記追跡論理回路は更に、圧縮論理であって、
前記条件付き直接分岐命令、前記条件付き間接分岐命令、および前記無条件間接分岐命令をマーカ命令に指定し、
マーカ命令毎に、前記マーカ命令を処理したときの前記データ・プロセッサの挙動を示す標識は出力し、処理したがマーカ命令でない命令に関するデータは出力しない、
圧縮論理を含む、
追跡論理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野はデータ処理に関するもので、特にデータ処理動作を監視するための診断機構に関するものである。
【背景技術】
【０００２】
処理回路が実行中の処理を追跡したいことが多いが、その場合に、命令を処理している順序を確認しまた任意の時点でどの命令を処理中であるか判断できることが望ましい。かかる情報は、例えばデータ処理装置の開発中に有用であって、処理回路の動作を追跡したい場合が多い。かかるプロセスを援助するのに用いられるツールの例として追跡ツールがある。
【０００３】
データ処理装置の動作を追跡して、装置内のステップ・バイ・ステップの動作を表すデータを含む追跡ストリームを作ることは、装置開発のツールとして非常に有用である。かかる追跡ツールはプログラム・フローを追跡するために種々の手段を用いる。一例として、処理を監視する対象のチップ上に設ける埋込み追跡マクロセル（ＥＴＭ）がある。これはケンブリッジのＡＲＭ社の商標である。
【０００４】
多くのプロセッサ命令セット・アーキテクチャは、分岐を処理する箇所でのデータ処理装置の状態を条件とする分岐命令を含む。すなわち、或る条件が真の場合はその命令を実行してその行先に分岐し、条件が偽の場合はその命令を実行せずに次に続く命令に進む（すなわちノーオペ命令として処理する）。また多くの命令セット・アーキテクチャは間接分岐命令を含む。これは分岐を処理する箇所でのデータ処理装置の現在の状態から分岐の行先を計算するものである。２００１年のＡＲＭ構造参照マニュアル、ＩＳＢＮ  ０−２０１−７３７１９−１に記載されているＡＲＭ（Ｒ）命令セット・アーキテクチャは分岐命令でない条件付き命令も含む。これは、命令を処理する箇所でのプロセッサの現在の状態に従って実行するかまたは実行しない命令である。しばしばプレディケイテッド（ｐｒｅｄｉｃａｔｅｄ）と呼ばれる条件付き命令を含む命令セット・アーキテクチャもある。条件付きでない命令（必ず実行する命令）は無条件命令と呼ぶ。
【０００５】
既存のＡＲＭ（Ｒ）（ケンブリッジのＡＲＭ社の登録商標）プロセッサ・コアのサイクル不正確追跡（ｎｏｎ−ｃｙｃｌｅ−ａｃｃｕｒａｔｅ  ｔｒａｃｅ）用として埋込み追跡マクロセルで用いられている現在のプロトコルは、サイクル正確追跡用として用いられたものから発展したものである。したがって、ストリーム内の命令毎に、ＥＴＭはＣＰＵからの情報をＥアトム（命令を実行したとき）またはＮアトム（命令を実行しなかったとき）として符号化する。次に、ＥＴＭは生成されたＥアトムおよびＮアトムのシーケンスを含むデータ・ストリームを出力する。データ・ストリームは一般に、ランレングス符号化などの符号化方式を用いた圧縮形で出力する。
これは２００２年１２月のＡＲＭ埋込み追跡マクロセル・アーキテクチャ仕様書、ＡＲＭ  ＩＨＩ  ００１４Ｉに記述されている。
【０００６】
このデータ・ストリームは、チップ上またはチップ外に記憶した後に、ＥＴＭデコンプレッサと呼ばれるデバッグ・エージェント・プログラムに送ってよい。このデコンプレッサは追跡中のプログラムのコピーを有するので、Ｅアトムや、Ｎアトムや、データ・ストリーム内の他の情報（間接分岐などの、データに依存するプログラム・フローの変更を符号化する）を復号することにより、埋込みＣＰＵ内でプログラム・フローを再構築することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
データ・プロセッサ・コアの動作周波数が高くなりまた複数のコアを有するプロセッサが普及するに従って、データ処理装置の開発中に用いられるデバッグおよび追跡のツールおよび機構を改善する必要が生じる。コア周波数が高くなると追跡に特殊な問題が生じる。例えば、既存のＡＲＭプロセッサ・コアおよびＥＴＭプロトコルでは、命令だけを追跡するときのビット率は命令当たり約１．２から１．６ビットである。したがって、サイクル毎に１命令を処理する１ＧＨｚプロセッサは毎秒１．２から１．６ギガビットの追跡データを生成し、このデータをチップ外に取り出してバッファ内に記憶する必要がある。更に、多プロセッサ・システムではこのデータ率は整数倍になる。
【０００８】
個々の命令を追跡するのに用いられる平均ビット数を減らすには圧縮が用いられる。しかし、絶えず高速化するコアを追跡する必要があるので、このデータ率を更に減らすことが望ましい。
データ処理装置のデータ動作を追跡する別の周知の方法にはＸＳｃａｌｅ（Ｒ）と呼ばれる、データ処理装置内に埋め込まれるＩｎｔｅｌ（Ｒ）の製品がある。これはＩｎｔｅｌ（Ｒ）ＸＳｃａｌｅ（Ｒ）ｃｏｒｅというタイトルの、２００４年１月発行のインテル開発マニュアル内に記述されている。
【０００９】
このＸＳｃａｌｅ（Ｒ）という追跡機構では、実行した命令または実行しなかった命令の全ての詳細を出力するのではなく、実行した分岐命令に到るまでに処理した命令をカウントする。すなわち、処理した命令の数と、プログラムの分岐先についての情報とを出力する。したがって、実行せずに条件付き分岐命令を通った場合はこの命令についての情報は出力しない。なぜなら、上に述べた他の従来の追跡機構とは異なり、この追跡機構は不実行標識を出力しないからである。ＸＳｃａｌｅ（Ｒ）の１つの欠点は、実行しなかった条件付き分岐命令に関する情報を出力しないので、実行した条件付き分岐命令の標識は、命令ストリーム内の可能な分岐命令のどれを実行したかをデコンプレッサが判断できるだけの十分な情報を含まなければならないことである。これはカウンタの形をとり、多数のビットを符号化する必要がある。更にこのカウンタは、処理したが実行しなかった分岐命令を全て数えるのでオーバーフローする可能性がある。したがって、追跡ストリームはオーバーフロー・マーカも符号化しなければならない。もう１つの欠点は、これは分岐命令に関する情報だけを出力し、他の条件付き命令に関する情報は出力しないことである。したがって追跡は不完全であり、有用な場合が限られる。
【課題を解決するための手段】
【００１０】
本発明の第１の態様は、データ・プロセッサが処理中のプログラムからの処理命令のストリームを監視するための追跡論理を提供する。前記追跡論理は、監視論理であって、前記命令ストリーム内の前記命令の処理を検出し、前記命令ストリーム内の前記命令のどれが条件付き直接分岐か、前記命令ストリーム内の前記命令のどれが条件付き間接分岐か、および前記命令ストリーム内の前記命令のどれが無条件間接分岐命令かを検出する監視論理を含み、また前記追跡論理は更に、圧縮論理であって、前記条件付き直接分岐命令、前記条件付き間接分岐命令、および前記無条件間接分岐命令をマーカ命令に指定し、マーカ命令毎に、前記マーカ命令を処理したときの前記データ・プロセッサの挙動を示す標識は出力し、処理したがマーカ命令でない命令に関するデータは出力しない、圧縮論理を含む。
【００１１】
プロセッサの速度が絶えず大きくなりまた場合によってはマルチプロセッサが同時に動作する環境ではプロセッサ・プログラム・フローの追跡中に得られるデータの量は絶えず増える。この問題に対処するため、本発明では、一般に追跡を形成する情報の一部は推測することができるので出力する必要がなく、したがって出力する情報の量を減らすことができると考える。この点で本発明は、条件付き直接分岐命令、条件付き間接分岐命令、および無条件間接分岐命令を（すなわち、静的にその挙動を決定することができない命令の少なくとも一部を）マーカ命令に指定する。これらの命令が重要である理由は、これらの命令を処理する箇所のプログラム挙動が、動的に（すなわちプログラムの実行中に）決定されるいくつかの要素に依存するからである。したがって、命令ストリームを追跡するときは、これらの条件付き直接分岐命令、条件付き間接分岐命令（まとめて条件付き分岐命令と呼ぶ）、または無条件間接分岐命令を処理するときのプロセッサの挙動が分かることが重要である。すなわち、条件付き分岐命令の条件が満たされているか、間接分岐命令の分岐先はどこか、である。マーカ命令に指定されない他の命令の挙動は一般に分かるので、この情報を出力する必要はないことが認識された。したがって、マーカ命令の挙動に関する情報およびプログラム自身の知識だけからプログラム・ストリームを追跡することができる。これにより、命令ストリームを追跡するために出力する必要のあるデータの量を大幅に減らすことができる。
【００１２】
認識されるように、命令の追跡を簡単にするために間接分岐命令と条件付き分岐命令だけでマーカ命令を構成するが、他の形の追跡では他のクラスの命令もマーカ命令に指定する必要があろう。
或る実施の形態では、前記監視論理は更に前記命令ストリームのどれが条件付き命令かを検出し、前記圧縮論理は更に前記条件付き命令をマーカ命令に指定する。
【００１３】
条件付き分岐命令および無条件間接分岐命令に加えて条件付き命令をマーカ命令に更に指定することにより、追跡論理は、挙動を静的に決定することができない全ての命令の挙動を示す標識を出力する。データ・プロセッサが処理する命令ストリームを完全に決定するのにこれらの命令の挙動を追跡する必要はないが、プログラムをデバッグするときには、これらの命令の挙動を追跡するとプログラムの完全な挙動を決定できることが多い。したがって、プログラム・ストリームを追跡するとき、条件付き命令の条件が満たされているかどうかが分かることは重要である。
【００１４】
或る実施の形態では、前記監視論理は更に前記命令ストリームのどれがデータ・メモリ転送命令かを検出し、前記圧縮論理は更に前記データ・メモリ転送命令をマーカ命令に指定する。
【００１５】
命令の追跡を拡張して、データ処理装置上で実行したデータ・メモリ転送命令が生成したデータ・メモリ転送の追跡も含めることが多い。しかし、一般にデータ・メモリ・アドレスおよび１つ以上のデータ・メモリ値から成るデータ・メモリ転送を全て追跡すると、大量の追跡データが生成されることが観測されている。したがって追跡論理の既存の実施の形態は、通常は転送のアドレス部に基づいて、データ・メモリ転送を濾波する手段を含む。かかる装置では、どのデータ・メモリ転送命令も追跡を生成することは可能であるが、実際に生成するのはその一部だけである。追跡したデータ・メモリ転送を生成したのはどのデータ・メモリ転送命令かを決定できるようにしたい。全てのデータ・メモリ転送動作をマーカ命令と見なすことにより、追跡ストリームは、追跡したデータ・メモリ転送とデータ・メモリ転送命令とを比較的低コストで関連付けるのに十分な情報を含む。なぜなら、追跡したデータ・メモリ転送を生成しなかったデータ・メモリ転送命令の挙動についての標識はデータ・メモリ転送命令を処理したことを示すだけでよいからである。
【００１６】
或る実施の形態では、前記圧縮論理は前記間接分岐命令を処理したことの検出に応じて前記命令の分岐先の表示を前記標識として出力する。
この標識は、プロセッサの挙動に関して何かを示すものでさえあれば、多くの形をとってよい。間接分岐命令の場合は、命令の分岐先に関する情報を標識として出力するのがよいことが分かっている。この情報を受けると、間接分岐命令を検出したこととプログラムの分岐先とが分かる。したがって、これは実行の表示と追跡に必要な更なる情報とを出力する効率的な方法である。
【００１７】
或る実施の形態では、前記監視論理は更にカウンタを含み、各マーカ命令に続いて処理した非マーカ命令の数を前記カウンタでカウントしまた例外事象を検出し、前記圧縮論理は前記例外事象の検出に応じて前記例外を検出したことを示す例外標識を前記カウンタ値と共に出力する。
【００１８】
プログラムの実行中に例外事象が起こった場合は、プログラムを追跡中にどの箇所でこの例外事象が起こったかを知ることが重要である。一般にマーカ命令に指定されていない命令はその処理の出力に関する情報を有する必要はないが、例外が起こった場合は外事象が起こった場所をつきとめるのに必要なので、この情報は重要である。マーカ命令の間に命令をいくつ処理したかを数えるにはカウンタを用いる。次のマーカ命令に来るとこの情報は一般に捨ててよいので、カウンタを初期値にリセットしてよい。しかし、例外事象がこれより前に起こった場合は、この情報を、例外事象が起こったことを示す標識と共に出力する。この情報を出力した後は、カウンタはリセットしてもよいし、カウントを続けてもよい。カウント値を出力したので、カウントを続けていれば、次に例外が起こった場所は出力値とその箇所でのカウンタの値から得ることができる。
【００１９】
或る実施の形態では、前記カウンタ値が或る予め決められた値を超えたことに応じて、前記非マーカ命令の性質に関わらず、前記圧縮論理は前記カウンタ値が或る予め決められた値を超える点に達した前記非マーカ命令をマーカ命令に指定した後、前記カウンタをリセットする。
【００２０】
マーカ命令の間に起こる命令の数は変化するし、場合によっては大きいことがある。したがって、これらの命令をカウントする場合は全ての事態に対処するために大きなカウンタを設ける必要がある。大きな数をカウントすることができるカウンタを必要としないようにするためには、或る予め決められた値（一般にカウンタの最大値であるが、カウント・ダウンするカウンタの場合は最小値でよい）をカウント値が超えるとカウンタをリセットして、次の命令をマーカ命令に指定しまたは昇格させるのがよいことが分かった。これは、カウンタを不当に大きくせずに、しかもプログラム・ストリーム内のどこで例外事象が起こったかを知るのに効率的な方法である。代替策として、予め決められた値をカウンタのカウント値が超えると「カウンタ・リセット」標識を出力してリセットすることであろう。この方法の欠点は、これが追加の情報であって、これを認識するためのフォーマットを必要とすることである。対照的に、マーカ命令はすでに用いられている。当業者に明らかなように、カウンタは多くの方法で実現することができるが、ゼロから最大数までカウント・アップしたり、最初の最大値からゼロまでカウント・ダウンしたりするなどを含めて、全ては機能的に同じものである。
【００２１】
或る実施の形態では、前記監視論理は更に前記命令ストリームのどれが無条件直接分岐命令かを検出し、前記圧縮論理は更に前記無条件直接分岐命令をマーカ命令に指定する。
全ての分岐命令（直接または間接、条件付きまたは無条件の）をマーカ命令に指定することにより、追跡ストリームはプログラム・フローの中の不連続が存在する箇所についての情報だけを含む。無条件直接分岐は通常は追跡する必要はない。なぜなら、追跡ストリームを参照しなくてもその挙動を静的に決定することができるから、すなわち、命令の分岐先を必ず決定することができるし（分岐が直接なので）また必ず分岐する（無条件なので）からである。しかし、これらの命令を追跡すると、追跡したマーカ命令の間のプログラム挙動はプログラム内の順次の場所の命令だけから成る。これは或る形の処理では利点である。
【００２２】
或る実施の形態では、前記監視論理は更に例外事象を検出し、前記圧縮論理は前記例外事象の検出に応じて、前記例外を検出したことを示す例外標識を、前記例外が起こった前記プログラム内の場所を示す値と共に出力する。
プログラムの実行中に例外事象が起こった場合は、命令ストリームの追跡中にどの箇所でこの例外事象が起こったかを知ることが重要である。一般に、プログラム内の場所が分かれば十分である。なぜなら、ほとんどのコード・シーケンスで、任意の所定の場所の命令は２つのマーカ命令の間で一度だけ処理するからである。ただし、無条件直接分岐のために１つの場所を繰り返し実行するコード・シーケンスもある。したがって、命令ストリーム内の例外の場所は一般にプログラム内の例外の場所を示す値を出力して示すとよい。
【００２３】
或る実施の形態では、前記圧縮論理は前記諸標識を出力する前に標識データのストリームを圧縮し、この圧縮されたデータを出力する。
標識に関するデータを圧縮し、この圧縮されたデータを出力することによりデータ出力を更に減らすのは利点である。命令の集合と条件付き命令または間接分岐命令の挙動とを分析することにより頻繁に起こる標識のパターンを見つけることができるので、これらのパターンを少数のビットに符号化してデータ出力を圧縮してよい。
【００２４】
或る実施の形態では、前記追跡論理は更に前記マーカ命令の少なくとも１つの挙動を前のマーカ命令の挙動から決定できるかどうか判断し、前記追跡論理は前記少なくとも１つのマーカ命令をマーカ命令でない命令に降格させる。
静的に決定することができない命令の挙動でも、前に処理した命令の挙動が、特定の間接分岐命令または条件付き命令をどのように処理するかを決定できるだけの十分な情報を追跡ストリーム内で与える場合は、動的に決定できることがある。この場合は、その挙動の知識は追跡ストリーム内に別個の標識を必要とせずに得ることができる。したがって、かかる命令をマーカ命令に指定せず、したがってその挙動の指標を出力しなければ、データ・ストリームを更に減らすことができる。
【００２５】
本発明の第２の態様は、本発明の第１の態様に係るプログラム命令の前記ストリームおよび追跡論理を処理するためのデータ・プロセッサを含むデータ処理装置を含む。
或る実施の形態では、前記データ処理装置は更に、前記マーカ命令の少なくとも１つの処理挙動の少なくとも１つの予測を与える予測論理を含み、前記監視論理は、前記少なくとも１つの予測が正しいかどうかを前記監視した挙動から判断し、前記少なくとも１つのマーカ命令について前記少なくとも１つの予測が正しいかどうかについての表示を前記標識として出力する。
【００２６】
予測論理を用いて少なくとも１つのマーカ命令の挙動を予測することにより、追跡データ・ストリーム内のデータの量を減らすことができる。その理由は２つある。第１に、「正しい予測の表示」を送るシンボルは、単なるブール演算か、または多くの予測の場合に単なる列挙でよい。これに必要なデータの数は、起こったことを正確に追跡するために出力すべきデータの数より少ない。第２に、その予測方式から一般に正しい予測が得られる場合は、予測結果のシーケンスは簡単な圧縮技術を用いて元のデータより更に圧縮することができる。したがって、追跡データ出力の量を減らすことができる。
【００２７】
或る実施の形態では、前記予測論理は少なくとも１つの条件付き命令について予測を与える。前記予測論理は前記条件付き命令の条件が真か偽かを予測し、前記少なくとも１つの条件付き命令の前記標識は、前記予測が正しい場合は予測正確表示を、前記予測が不正確な場合は予測不正確表示を含む。
条件付き命令の予測は、その条件付き命令に関する条件が真か偽かを予測することでよい。監視論理は監視した挙動から予測が正しくて適切な標識出力かどうかを判断してよい。
【００２８】
或る実施の形態では、前記予測論理は前記データ処理装置の前記部分の前記挙動の対応する複数のステップに関する複数の予測を与える。前記追跡論理は前記複数の予測の少なくとも一部が正しいかどうか判断して前記複数の予測標識の対応する少なくとも一部を作り、前記圧縮論理は前記複数の予測標識の前記少なくとも一部を圧縮して圧縮されたデータを作り、前記追跡論理は前記圧縮されたデータを出力する。
【００２９】
一般に予測論理は、監視中のデータ処理装置のその部分の挙動の複数のステップに対応する複数の予測を与える。追跡論理はそれらが正しいかどうか判断し、圧縮論理を用いてこの情報を圧縮する。大部分の予測が正しいと期待することができる予測方式の場合は、これは利点である。値の可能な集合の間にデータ値が不均等に分散されているデータの方が、値の可能な集合の間にデータ値が均等に分散されているデータより容易に圧縮できることが分かった。
【００３０】
非マーカ命令の実行に関する情報を出力しないように追跡論理が構築されているとき、得られる出力は、第１に間接分岐命令の標識と、第２に条件付き命令の実行または不実行に関する標識とから成る。ただし、出力のこの第２の部分内の「実行」標識と「不実行」標識の分布は一般に均等である。或る予測アルゴリズムを用いる場合は、これらの「実行」標識と「不実行」標識を、「予測正確」標識と「予測不正確」標識で置き換えてよい。予測が一般に正しい場合は、これらの標識が均一に分布されることは非常に少ないので、一層よく圧縮することができる。
【００３１】
或る実施の形態では、前記追跡論理は埋込み追跡マクロセルを含む。
或る実施の形態では、前記データ処理装置は更にデータ記憶装置を含み、前記圧縮論理はデータを前記データ記憶装置に出力する。
或る実施の形態では圧縮論理はデータを外部装置に出力するが、別の実施の形態では単にデータ処理装置自身内のデータ記憶装置に出力する。
【００３２】
或る実施の形態では、前記データ処理装置は更に前記プログラムおよび圧縮解除論理を記憶するためのプログラム・データ記憶装置を含み、前記圧縮解除論理は前記圧縮論理が出力したデータを受けて、前記マーカ命令の前記実行標識および不実行標識と前記記憶されたプログラムからプログラム・フローを決定する。
圧縮解除論理およびプログラム・データ記憶装置は別個の診断装置内に設けてよいが、或る実施の形態では命令を処理する同じデータ処理装置上にこれを設けてよい。したがって、１台のデータ処理装置でプログラム・フローの処理とその追跡を共に行ってよい。
【００３３】
本発明の第３の態様は、データ・プロセッサを監視する追跡論理から出力されるデータ・ストリームを受ける診断装置を含む。前記データ・ストリームは、マーカ命令を処理したときの前記データ・プロセッサの挙動を示す標識は含み、処理したがマーカ命令でない命令に関するデータは含まず、前記マーカ命令は条件付き直接分岐命令、条件付き間接分岐命令、および無条件間接分岐命令を含み、前記診断装置は圧縮解除論理およびデータ記憶装置を含み、前記データ記憶装置は前記データ・プロセッサが処理した前記プログラムの前記命令を記憶し、前記圧縮解除論理は前記データ・ストリームを受けて、前記マーカ命令の前記標識と前記記憶されたプログラムからプログラム・フローを決定する。
【００３４】
本発明の第１の態様の追跡論理が出力した情報は本発明の第３の態様に係る診断装置が受けて分析してよい。圧縮解除論理はマーカ命令の実行標識および不実行標識と分析対象のデータ・プロセッサが処理中のプログラムの知識だけからプログラム・フローを決定することができる。
或る実施の形態では、前記診断装置は更に、前記圧縮解除論理に送る前に前記データ・ストリームを受けて記憶するためのバッファを含む。
バッファは追跡論理と診断装置との間に置くのがよく、したがって一般に設けられる。
【００３５】
本発明の第４の態様は、データ・プロセッサが処理中のプログラムからの処理命令のストリームを監視する方法を提供する。前記方法は、前記命令ストリーム内の前記命令の処理を検出するステップと、前記命令ストリーム内の前記命令のどれが条件付き命令か、および前記命令ストリーム内の前記命令のどれが条件付き間接分岐命令または無条件間接分岐命令かを検出するステップと、前記条件付き直接分岐命令、前記条件付き間接分岐命令、および前記無条件間接分岐命令をマーカ命令に指定するステップと、マーカ命令毎に、前記マーカ命令を実行したことを示す実行標識または前記マーカ命令を実行しなかったことを示す不実行指標は出力し、前に処理したがマーカ命令でない命令に関するデータは出力しないステップと、を含む。
【００３６】
本発明の第５の態様は、データ・プロセッサが処理中のプログラムを診断する方法を提供する。すなわち、本発明の第４の態様に係る方法を実行することにより出力されるデータを受け、前記データ・プロセッサが処理中の前記プログラムの前記命令をデータ記憶装置内に記憶し、前記マーカ命令の前記実行標識および非実行標識と前記記憶されたプログラムから処理中の前記プログラムのプログラム・フローを決定することを含む。
本発明の第６の態様は、データ・プロセッサ上で実行すると、データ・プロセッサを制御して本発明の第５の態様に係る方法の各ステップを実行するコンピュータ・プログラム製品を提供する。
本発明の上記の目的、機能および利点は、添付の図面を参照して以下の例示的な実施の形態の詳細な説明を読めば明らかになる。
【図面の簡単な説明】
【００３７】
【図１】本発明の或る実施の形態に係るプログラム・フローのトレースを示す。
【図２】本発明の或る実施の形態に係る埋込み追跡マクロセルを含むデータ処理装置と、本発明の或る実施の形態に係るプログラム・フローを分析するための診断装置とを示す。
【図３】本発明の或る実施の形態に係る、追跡論理および圧縮解除論理を含む装置を示す。
【図４Ａ】本発明の或る実施の形態に係る、プログラムの追跡中に実行するステップを示す流れ図を示す。
【図４Ｂ】本発明の別の実施の形態に係る、プログラムの追跡中に実行するステップを示す流れ図を示す。
【図４Ｃ】本発明の別の実施の形態に係る、プログラムの追跡中に実行するステップを示す流れ図を示す。
【図５】本発明の別の実施の形態に係る、プログラムの追跡中に実行するステップを示す流れ図を示す。
【図６】図４Ａに示す方法で作られた追跡データの分析中に実行するステップを示す流れ図を示す。
【図７Ａ】本発明の或る実施の形態に係る、処理した命令のシーケンスおよび得られた出力の一例を示す。
【図７Ｂ】従来の追跡装置に係る、処理した命令のシーケンスおよび得られた出力の同じ例を示す。
【図８】本発明の或る実施の形態に係る、共に予測論理を有するデータ処理装置および診断装置を含むシステムを示す。
【図９】予測方式の一例を示す流れ図を示す。
【実施例】
【００３８】
図１は処理中の命令１０のストリームを簡単な形で示す。命令ストリームは条件付き分岐命令１０ａ１および１０ａ２と例外事象１０ｂとを含む。
本発明のこの実施の形態において、図に示す命令では、マーカ命令だけが命令に関する情報出力を有する。したがってこの事例では、命令１０ａ１の不実行のときはＮアトムを出力し、命令１０ａ２の実行のときはＥアトムを出力する。例例外事象１０ｂに応じて、例外表示と、前のマーカ命令１０ａ２に続いて実行した命令の数を示すカウント値とを出力する。
【００３９】
図２はＣＰＵ３０を含むデータ処理装置２０を示す。ＣＰＵ３０は命令メモリ２２から送られる命令ストリームを含むプログラムを処理する。ＣＰＵ３０は、命令取出しユニット３２、パイプライン３４、および追跡インターフェース３６を含む。またデータ処理装置２０は、追跡インターフェース３６を介してプログラムの処理を追跡する埋込み追跡マクロセル（ＥＴＭ）４０を含む。ＥＴＭ４０は、カウンタ４５を有する監視論理４２と圧縮論理５０とを含む。監視論理４２はＣＰＵ３０内の命令の処理を監視し、処理したがマーカ命令に指定しなかった命令毎にカウンタ４５を増分する。また条件付き分岐命令または間接分岐命令（すなわち、その挙動を静的に決定できない少なくとも一部の命令）をマーカ命令に指定する。或る命令をマーカ命令に指定すると、カウンタをリセットし、前に記憶した情報を捨てる。
【００４０】
追跡は一般に循環バッファ（すなわち、新しい項目が最も古い項目を上書きするバッファ）内に記憶するので、追跡ストリームは一般に、ＥＴＭから定期的に出力される同期データも含む。この同期データは圧縮解除論理がその同期点から追跡の圧縮解除を開始するための十分な情報を含む。したがって、同期点でのカウンタ値を知らなければならない。このための１つの方法は同期データ内にカウンタ値を含めることである。ただし、好ましい方法は同期点で単にカウンタをリセットすることであることが分かった。
【００４１】
例外事象が起こると、監視論理４２はこれも検出して、この情報をこの時点のカウンタ値（すぐ前のマーカ命令以後に実行した非マーカ命令の数を表す）と共に圧縮論理５０に送り、その後でカウンタをリセットする。
【００４２】
したがって圧縮論理５０は、マーカ命令を処理したときのプロセッサの挙動と、カウンタ値と、例外事象が起こったことの表示とを示すデータ・ストリームを受ける。圧縮論理５０は一般にこの情報を圧縮し、出力ポート６０を介して出力する。この場合は、出力ポート６０はデータ処理装置２０の出力ポート６５に接続する。したがって、実行標識と不実行標識と例外事象標識のデータ・ストリームをカウンタ値と共に出力する。これらの標識は種々の形をとってよい。例えば、プログラムの分岐先のアドレスを含んでよい。同様に例外事象標識は、例外の性質やプログラムの分岐先などの種々の形をとってよい。
【００４３】
データ処理装置２０から出力する情報は一般に圧縮論理５０で圧縮する。これについては後で説明する。情報は追跡ポート・アダプタ７０を介して診断装置８０に送られる。追跡ポート・アダプタ７０は診断装置８０が要求するまで情報を緩衝してもよいし、情報を直接に診断装置８０に送ってもよい。診断装置８０は種々の形をとってよく、この実施の形態ではデバッグ・プログラム１１０を実行するホスト・コンピュータを含む。診断装置８０は更に、ＣＰＵ３０上で実行中のプログラムのイメージを含むデータ記憶装置９０を含む。これにより圧縮解除論理１００は、処理中のプログラムに関するデータ記憶装置９０内の情報とマーカ命令の挙動および全ての例外事象に関する情報とを用いて、処理中のプログラムのプログラム・フローを再構築することができる。この追跡情報はホスト・コンピュータ上のデバッグ・プログラム１１０に送って、表示および／または分析する。圧縮解除論理は多くの異なる形をとってよいが、多くの実施の形態ではソフトウエア・プログラムとして実現される。
【００４４】
図３は本発明の別の実施の形態に係る装置を示す。装置２４はＥＴＭ４０を含み、ＥＴＭ４０はオンチップ・データ記憶装置１２０にデータを出力する出力ポート６０を備える。このデータは圧縮解除プログラム３１で分析する。圧縮解除プログラム３１はプログラム・データ記憶装置１３０からの処理中のプログラムに関するデータを用いる。ＣＰＵ３０もプログラム・データ記憶装置１３０からのプログラムを用いる。圧縮解除プログラム３１はＣＰＵ３０上で、または別のプロセッサ上で実行してよいことに注意していただきたい。したがってこの実施の形態では、データ処理装置はプログラムの実行とデバッグとを共に行うことができる。図３の装置では装置全体を単一のチップ上に形成するが、例えば図２に示すように、別個のチップ上に形成してよいことは明らかである。
【００４５】
図４Ａは本発明の或る実施の形態に係る、プログラム・フローを追跡する方法を図示する流れ図を示す。この方法は例外の事象または条件を監視し、例外が見つからない場合は命令ストリーム内の次の命令を調べ、それが条件付き命令かまたは間接分岐命令かを確認する。どちらかであることを確認した場合はこの命令をマーカ命令に指定し、その挙動を示す標識を出力し、カウンタをゼロにリセットした後、流れ図の始めに戻る。標識は多くの形をとってよい。例えば条件付き命令の場合は１ビットを用いて、条件が真であって命令を実行した場合は１の値をとり、条件が偽であって命令を実行しなかった場合は０の値をとるようにしてよい。例えば間接分岐命令の場合は、標識はプログラム・フローの分岐先に関する情報を含んでよい。「次」の命令が条件付き命令でも間接分岐命令でもない場合は、カウンタを１だけ増分する。認識されるように、カウンタは固定サイズなので、最大値のときにカウンタを増分するとオーバーフローする。カウンタがオーバーフローすると、この命令をマーカ命令に指定する。言い換えると、普通の命令をマーカ命令に昇格し、「マーカ」命令の挙動を示す情報を出力し、カウンタをゼロにリセットする。カウンタがオーバーフローしない場合は流れ図の始めに戻って、例外事象が起こったかどうか検出する。したがって、カウンタはマーカ命令の間に処理された非マーカ命令の数を記録する。
【００４６】
最初のステップで例外を検出した場合は、カウンタの値を、例外のタイプに関する情報および／または例外の分岐先と共に出力する。次にカウンタをゼロにリセットし、更に進んで次の命令を検出する（その前に別の例外を検出しない限り）。この場合は、これは例外に応じたプログラムの分岐先の命令（例えば、割込みサービス・ルーチン内の最初の命令）でよい。
【００４７】
図４Ｂは図４Ａと同様の流れ図であるが、追加のステップを含む。この実施の形態は、データ・メモリ転送動作もマーカ命令と見なす場合を含む。したがって、或る命令が条件付き命令か間接分岐命令かを判断した後に、或る命令がデータ・メモリ転送命令かどうか判断してこれをマーカに指定するという追加のステップを実行する。認識されるように、命令をマーカに指定した後で、追跡論理は命令の挙動の標識を出力する。標識を出力するとき、追跡論理はこの標識の性質に関する更なる決定を行ってよい。例えば、データ・メモリ転送を追跡すると決定した場合は、標識は転送アドレスおよび／または値の表示を含んでよい。しかし転送を追跡しない場合は、標識はデータ・メモリ転送命令を処理したことを示す単一ビットを含んでよい。
【００４８】
図４Ｃは図４Ａと同様の流れ図であるが、本発明の別の実施の形態に関するものを示す。この方法は例外事象または条件を監視することを含む。例外を検出しなかった場合は、命令ストリーム内の次の命令を調べて、それが分岐命令かどうか確認する。分岐命令と確認した場合はこの命令をマーカ命令に指定して、その挙動を示す標識を出力した後、流れ図の始めに戻る。標識は種々の形をとってよい。例えば、無条件分岐命令の場合は１ビットを用いて、これが１の値のときは分岐を処理したことを示してよい。例えば、条件付き分岐命令の場合は１ビットを用いて、条件が真であって分岐命令を実行した場合は１の値をとり、条件が偽であって分岐命令を実行しなかった場合は０の値をとるようにしてよい。例えば間接分岐命令の場合は、標識はプログラム・フローの分岐先に関する情報を含んでよい。「次」の命令が分岐命令でない場合は、流れ図の始めに戻って、例外事象が起こったかどうか検出する。
【００４９】
最初のステップで例外を検出した場合は、プログラム内の位置を、例外のタイプに関する情報および／または例外の分岐先と共に出力する。認識されるように、位置標識は多くの形をとってよく、また圧縮した形で出力してよい。例えば、例外が起こる前に処理した最後の命令のアドレスの形をとってよい。別の例外を検出しない場合は、更に進んで次の命令を検出する。この場合は、これは例外に応じたプログラムの分岐先の命令（例えば、割込みサービス・ルーチン内の最初の命令）でよい。
【００５０】
図５は図４Ａと同様の流れ図であるが、追加のステップを含む。この実施の形態は、動的に決定できる命令および静的に決定できる命令（すなわち、処理する箇所でのその挙動を追跡ストリーム内の前に処理した命令の挙動に関する情報から決定することができる命令）に関する標識を出力しない可能性を含む。したがって、命令を条件付き命令または間接分岐命令と判断した後で追加のステップを実行し、その命令の挙動を前のプログラム挙動から決定できるかどうか判断する。決定できない場合はこの命令をマーカ命令に指定して、この方法は図４Ａに進む。しかし決定できる場合はこの命令をすぐにはマーカ命令に指定せず、この方法はカウンタ値を増分するステップに戻る。しかし、カウンタがオーバーフローした場合はこの命令をマーカ命令に指定してよい。
【００５１】
図６は、図４Ａに示す方法で作られた追跡データの分析中に実行するステップの概要を示す略図である。図２の出力ポート６５から出力されたデータ・ストリームは追跡ポート・アダプタ７０を介して圧縮解除論理１００（これは診断装置上で走るプログラムでよい）に入る。診断装置は、分析中のプログラムの少なくとも一部を記憶するデータ記憶装置９０も含む。圧縮解除論理は追跡データ・ストリームおよび記憶されたプログラムからプログラム・データ・フローを得ることができる。詳しく述べると、圧縮解除論理は両者を一緒に分析して、条件付き命令または間接分岐命令であることをプログラムが示す場合は追跡データ・ストリームを調べて、どのように処理したかを確認する。データ・ストリーム内に例外事象の表示がない限り、他の命令は実行したと見なす。例外事象の表示がある場合はデータ・ストリームを調べて、この例外事象の前の最も近い条件付き命令または間接分岐命令に続いて処理した命令の数を確認する。次に例外事象に関する情報をとり、この情報を、処理した命令の数に関する情報と共に出力する。したがって診断装置は、記憶されたプログラム情報と、間接分岐命令および条件付き命令や例外事象の発生および位置に関する情報を与えるデータ・ストリームとを用いて、プログラムを処理する処理装置の挙動のステップ・バイ・ステップ分析を行うことができる。
【００５２】
静的に決定できる命令に関する情報を出力しないことにより追跡データ・ストリームが有するデータの量を減らすことに加えて、圧縮技術を用いることによりデータを更に減らすことができる。適切な圧縮領域を見つけるには、圧縮論理が出力する実行、不実行、および例外事象に関するデータの一般的なパターンを分析し、最も共通のパターンに特定の符号化を与える。これを用いれば、このデータを出力するのに必要なビット数を減らすことができる。
【００５３】
図７Ａは、本発明の或る実施の形態に係る、処理中の命令のストリーム（第３列）と得られる追跡出力の一例を示す。マーカ命令に指定された命令を、カウント値および最終の圧縮された出力と共に示す。命令はＡＲＭ（Ｒ）命令セット・アーキテクチャからのものである。条件付き命令は命令に条件コード接尾辞を付けた命令アセンブリ言語で示す。接尾辞は例えば、ＥＱ（等しい；すなわち、ゼロ［Ｚ］フラグが１）、ＮＥ（等しくない；Ｚ＝０）、ＣＳ（キャリー・セット；Ｃ＝１）、ＨＩ（無符号で高い；Ｃ＝１かつＺ＝０）などである。
【００５４】
第１列は命令を処理する順序を示すステップ・シーケンス番号である。第２列は命令のプログラム・カウンタ値を示す。第４列は処理した各命令を実行したか実行しなかったかを示す。
追跡論理の機能は、診断装置が動作のシーケンスを再構築できるだけの十分な情報を含む追跡ストリームをこの動作のシーケンスから作ることである。
図７Ａの出力（第８列）を理解するには、用いた圧縮技術を理解することが重要である。本発明の或る実施の形態における追跡データを圧縮するための可能な圧縮方式の概要を、従来の追跡データのための圧縮技術と比較して以下に示す。
【００５５】
既存のフォーマット（従来の技術）
追跡ストリームは以下の符号化を用いた一連のバイトから成る。
【表１】
2014220003.tif 000003
【００５６】
既存のフォーマット（従来の技術）：ＰＮおよびＰ２
処理した命令のシーケンスを示すために追跡論理はＰＮバイトまたはＰ２バイトを出力する。
ＰＮバイトは処理した最大１６命令を示し、実行した０から１５の命令と、その後に続く実行しなかった最大１命令とを含む。ビット７、１、０はＰＮバイトを識別するのに用いる。実行した命令の数はフィールドＥ［３．．０］内に符号化し、実行しなかった命令の数はフィールドＮ内に符号化する。
【表２】
2014220003.tif 000004
【表３】
2014220003.tif 000005
【００５７】
Ｐ２バイトは２命令を処理したことを示し、実行および不実行の任意の混合から成る。
【表４】
2014220003.tif 000006
ビット７から４と１と０とはＰ２バイトを識別するのに用いる。
【００５８】
追跡論理は処理中の命令を追跡するが、処理した更に別の命令を現在のバイト内で符号化できないとき、または実行中の間接分岐命令に出会ったとき、または例外が起こったときは、Ｐ２バイトまたはＰＮバイトだけを出力する。
【００５９】
例えば、５命令のシーケンスを処理して全てを実行した場合は、出力する現在のバイトはＰＮバイトであって、Ｅ［３．．０］＝０１０１かつＮ＝０である。次の命令を処理して実行した場合は、追跡論理はこのバイトは出力せず、代わりにＰＮバイトの符号化をＥ［３．．０］＝０１１０かつＮ＝０にする。しかし次の命令を処理したが実行しなかった場合は、追跡論理はＥ［３．．０］＝０１１０かつＮ＝１（実行した６命令とその後に続く実行しなかった１命令から成るシーケンスを示す）というＰＮバイトを出力する。なぜなら、そのＰＮバイト内で更に命令を符号化することはできないからである。すなわち、バイト８’ｂ１１０１１０００を出力する。
【００６０】
本発明の或る実施の形態に係る、追跡データを圧縮するのに適した可能な圧縮フォーマット：  ＰＮ，Ｐ２，Ｐ３，Ｐ４
従来の符号化方法は、実行した命令のランが長く、実行しなかった命令が少ない場合に優れている。本発明の特定の実施の形態では、実行した条件付き命令と実行しなかった命令（これは定義により条件付きである）だけをＰＮおよびＰ２フォーマットで符号化し、ＰＮバイト内のＥ［３．．０］は処理して実行した条件付きのマーカ命令の数を符号化する。Ｎビットの符号化そのままで変わらない。
【００６１】
【表５】
2014220003.tif 000007
同様に、Ｐ２バイトの定義を次のように変更する。
【表６】
2014220003.tif 000008
【００６２】
実行した条件付き命令のランは実行した（条件付きまたは無条件）命令のランほど一般的でないので、処理した３および４マーカ命令を示す新しいフォーマットを導入した。これは実行した条件付きマーカ命令および実行しなかった（条件付き）マーカ命令の全ての組合せから成る。
【表７】
2014220003.tif 000009
【００６３】
Ｆ１およびＦ２ビットの符号化はＰ２フォーマット・バイトの場合と同様である。Ｆ３ビットと、Ｐ４バイトの場合のＦ４ビットの符号化は次の通りである。
【表８】
2014220003.tif 000010
【００６４】
既存のフォーマット：  Ｂパケット
或る実行した間接分岐命令に出会うと、追跡論理はまずその前の命令およびその間接分岐を追跡したことを確認し（それらを符号化したＰＮまたはＰ２バイトを出力することにより）、次にＢパケットを出力する。Ｂパケットは、Ｂ１バイトと、その後にオプションで続くＢ２バイトと、その後にオプションで続くＢ３バイトなど、から成る。各Ｂバイト内の「Ｃ」ビットは更にバイトが１つ続くことを示す。すなわち、Ｃ＝０はこれが最終バイトであることを示し、Ｃ＝１は次のバイトが続くことを示す。
【００６５】
ＢパケットのＡ［  ］ビットは分岐したときのプログラム・カウンタ（ＰＣ）の変化したビットを符号化する。例えば、アドレス０ｘ８０１３（１６’ｂ１００００００００００１００１１）での間接分岐がアドレス０ｘ８０１Ｆ（１６’ｂ１００００００００００１１１１１）に分岐する場合は、ＰＣの最後の４ビットだけが変化するので、Ｂパケットは新しい値を含む単一のＢ１バイトとして符号化される。このバイトは必然的にＰＣの変化しないビット５および４も含む。すなわち、単一のバイト８’ｂ００１１１１１０を出力する。
ＡＲＭ（Ｒ）プロセッサは２つ以上の命令セットを実現する。或る実施の形態は、ＡＲＭ命令セット、Ｔｈｕｍｂ命令セット、Ｔｈｕｍｂ−２ＥＥ命令セット、Ｊａｖａ（登録商標）命令セットと呼ばれる４つの可能な命令セットを実現する。
【００６６】
ＡＲＭ命令セット（ＡＲＭ状態で処理された）内の全ての命令は３２ビットであり、４の倍数のアドレスで揃っているので、全てのＰＣアドレスのビット１および０は０にセットされる。したがって、分岐パケットを計算する前に、発信元および宛先のアドレスを２進で右に２位置シフトする。すなわち、Ｂ１ビットＡ［０］はＰＣビット２に対応し、ビットＡ［１］はＰＣのビット３に対応する、などである。
同様に、Ｔｈｕｍｂ命令セット（Ｔｈｕｍｂ状態で処理された）およびＴｈｕｍｂ２−ＥＥ命令セット（ＴｈｕｍｂＥＥ状態で処理された）の命令は１６ビットで、２の倍数で揃っているので、アドレスを２進で１位置右にシフトする。すなわち、Ｂ１ビットＡ［０］はＰＣビット１に対応し、ビットＡ［１］はＰＣビット２に対応する、などである。
【００６７】
Ｊａｖａ（登録商標）命令セット（Ｊａｚｅｌｌｅ（登録商標）状態で処理される）では、命令は８ビットであってどのアドレスにあってもよいので、アドレスのシフトは起こらない。すなわち、Ｂ１ビットＡ［０］はＰＣビット０に対応し、ビットＡ［１］はＰＣビット１に対応する、などである。
したがって３２ビットのアドレス空間では、必要なのは、ＡＲＭアドレスは最大でも３０ビット、ＴｈｕｍｂまたはＴｈｕｍｂ−２ＥＥアドレスは最大でも３１ビット、Ｊａｖａ（登録商標）アドレスは３２ビットである。全部で５バイトのＢパケットを用いる場合は、第５バイトは３つのフォーマットＢ５Ａ，Ｂ５Ｔ，Ｂ５Ｊのどれかである。これは、ターゲット・アドレスが、ＡＲＭ命令アドレス、ＴｈｕｍｂまたはＴｈｕｍｂ−２ＥＥ命令アドレス、またはＪａｖａ（登録商標）命令アドレスの１つであることを示す。
【００６８】
命令セットを変更するときは、ターゲット命令セットを示すために、必ず全部で５バイトのパケットを生成する。第５バイト内のＣビットは、間接分岐のときは通常はセットされない。これは例外か、またはＴｈｕｍｂＥＥ状態への分岐またはＴｈｕｍｂＥＥ状態からの分岐であることを示すのに用いる。
例外の場合は、常に５バイトを含むＢパケットを生成する。しかし第５バイト内で継続ビット（Ｃ）はセットされ、フォーマットＢ６の第６バイトがあることを示す。Ｂ６は例外のタイプ（例外が最も近い命令を取り消したかどうか、確かな例外として命令を処理したかどうか）を符号化する。
【００６９】
ＴｈｕｍｂＥＥ状態への分岐またはＴｈｕｍｂＥＥ状態からの間接分岐の場合は、Ｂ５Ｔバイトに続いて第６バイトも生成する。これも符号化し、例外タイプ・フィールドは例外がないことを示す。
【表９】
2014220003.tif 000011
【００７０】
したがって間接分岐の場合は、生成されるバイトのシーケンスは必ず次のどれかである。
【表１０】
2014220003.tif 000012
（ＰＮまたはＰ２バイトは分岐前および分岐を含む命令を符号化することに注意していただきたい。）
【００７１】
例外の場合は、次のバイトのシーケンスが生成される。
【表１１】
2014220003.tif 000013
バイト５のタイプとバイト６内のＴＥＥビットは例外を処理した状態を示す。
【００７２】
本発明の或る実施の形態に係る新しいフォーマット：  Ｂ７バイト
プロトコルを拡張して、最後のマーカ命令の後に処理した非マーカ命令のカウントを符号化するため、Ｂ６バイトに続いてＢ７バイトと呼ばれる別のバイトを出力する。このバイトが存在することを示すには、継続ビットをＢ６バイトに追加する。
本発明の１つの実施の形態では、このＢ７バイトはカウンタ値を含む。
【表１２】
2014220003.tif 000014
【００７３】
ビットＩ［４．．０］は５ビット・カウンタを符号化する。用いるにはこれが妥当な長さであることが実験から分かった。したがって、例外が起こると追跡論理は次を出力する。
【表１３】
2014220003.tif 000015
【００７４】
本発明の或る実施の形態に係る新しいフォーマット：  Ｂ７からＢ１１バイト
本発明の別の実施の形態では、例外を検出すると、プログラム内の例外が起こった場所を示す値を出力する。好ましい実施の形態では、Ｂバイトに続いて、例外が起こった命令のアドレスを符号化する一連のバイトとしてこれを出力する。これを圧縮するには、各バイト内の継続ビットを用いて、分岐バイトＢ１からＢ４と同様にして、最後のマーカ命令のアドレス（デコンプレッサはこれを知っている）と例外箇所での命令のアドレスとのビット毎の差の値を符号化する。必要であれば、最終バイトＢ１１はアドレスの３２番目のビットまで含んでよい。ただし認識されるように、例外がＡＲＭ、Ｔｈｕｍｂ、またはＴｈｕｍｂ−２ＥＥの命令セット内で起こった場合は、これらのビットの全てが必要ではないので、余分のビットはゼロである。
【表１４】
2014220003.tif 000016
【００７５】
したがって、例外が起こったとき、例えばこの命令アドレスを示すのに３ビットしか必要としない場合は、追跡論理は次を出力する。
【表１５】
2014220003.tif 000017
しかしこの実施の形態は図５に示したものではない。
【００７６】
新しいフォーマットでは、任意のＢパケット・シーケンス（例外であってもなくてもよい）の前のＰＮ／Ｐ２またはＰ４バイトは分岐命令自身は符号化しない。なぜなら、これはＢパケットの存在により暗に含まれているからである。
図７Ａの第５列は、各命令が間接分岐命令または条件付き命令（すなわち、この実施の形態ではマーカ命令）であることを示す。命令がマーカ命令の場合はその理由を示している。すなわち、「（ｃｃ）」は、この命令が条件付き命令なのでマーカ命令に指定したことを示し、「（ｉｂ）」は、この命令が間接分岐命令なのでマーカ命令に指定したことを示す。また、例外を処理するのに用いるカウンタがオーバーフローすると、命令をマーカ命令に昇格させる。しかし、この例ではかかるオーバーフローは起こっていない。
【００７７】
第６列はマーカ命令のときに作られたアトムを示す。
第７列は、本発明のこの実施の形態で例外を処理するのに用いるカウンタの値を示す。このカウンタは非マーカ命令を処理する度に増分する。
第８列は、本発明のこの実施の形態の出力を示す。作られたバイトのタイプと、そのアトムの種々のフィールド内の値とを示す。
【００７８】
図７に示す例における命令処理はステップ１のＳＵＢ命令の処理で開始する。この命令は条件付きでないので実行し、また間接分岐命令でないので、ＥＴＭは第５列に示すように非マーカ命令として扱う。したがって、第７列に示すようにカウンタを１に増分する。
ステップ２の命令は同様にマーカ命令でないのでカウンタを２に増分する。
ステップ３の命令はＢＥＱである。これは条件付き分岐命令なので、ＥＴＭはマーカ命令として扱う。この命令は実行しなかったのでＥＴＭはＮアトムを生成し、カウンタを０にリセットする。ＥＴＭはアトムのストリームを更に圧縮するので、このアトムをこのステップで出力しない。
【００７９】
このようにして引き続きステップ１０まで処理する。更に２つのマーカ命令に出会い、それぞれはＮアトムを生成し、各ステップでカウンタをリセットする。ステップ１０で第４のマーカ命令を処理する。これもＮアトムを生成する。このステップで、ＥＴＭはアトム・ストリームを更に圧縮することができないので、４つのＮアトムを符号化するＰ４バイトを出力しなければならない。
処理がステップ１７まで進むと、条件付き分岐命令ＢＨＩを実行するので、プログラム・カウンタは０ｘ８０５０の命令に戻る。次に処理はステップ１８に進む。ステップ１８までは、生成されたアトムのシーケンスは全てＥアトムであるが、ステップ１９の命令は実行しないので、ＥＴＭはここで４つのＥアトムと１つのＮアトムのランを符号化するＰＮバイトを出力しなければならない。
【００８０】
処理は更に続き、ステップ２６でプロセッサは割込み例外（ＡＲＭ（Ｒ）アーキテクチャではＩＲＱと呼ばれる）を受ける。このステップまでにＥＴＭは３つのＮアトムを記録した（最も近くはステップ２４で）。そのステップの後、非マーカ命令を１つ処理したので、カウンタは１である。したがって、ＥＴＭはまず一連の３つのＮアトムを符号化するＰ３バイトを出力し、その後に続いて７バイトの分岐パケット（０ｘ１８でのＩＲＱ例外ハンドラの分岐、ＩＲＱ例外の発生、およびカウンタの現在の値（１）を符号化する）を出力する。このステップでカウンタをリセットする。
【００８１】
ＩＲＱ例外ハンドラの命令はステップ２７で処理する。この命令（ＬＤＲ  ｐｃ，［ｐｃ、＃２０］）は間接分岐命令の一例なのでマーカ命令である。このマーカ命令に応じて、ＥＴＭはこの間接分岐の行先（この場合はアドレス０ｘ１０００）を符号化する別の分岐パケットを生成する。０ｘ１０００の命令はステップ２８で処理する。
【００８２】
一例として、図７Ｂは図７Ａに示したのと同じ命令セットに応じて従来のＥＴＭおよびＸＳｃａｌｅが生成する追跡出力を示す。この図から分かるように、本発明の実施の形態では従来のＥＴＭに比べて追跡データ出力が少ない。ＸＳｃａｌｅの追跡はロールオーバー、直接分岐、例外、および間接分岐のバイトを含むが、ＸＳｃａｌｅ自身が作る出力データは本発明のこの実施の形態より少ない。しかし分岐命令でない条件付き命令に関する情報を出力しないので、ＸＳｃａｌｅはプロセッサのステップを正確に追跡できるだけの十分なデータを出力しないことに注意していただきたい。またＸＳｃａｌｅは例外のときの分岐先のアドレスに関する情報を出力しない。なぜなら、ＸＳｃａｌｅプロセッサでは例外タイプの分岐先アドレスは固定だからである。更に、この例の命令のシーケンスは比較的短いので、作られた追跡の量は長い命令ストリームの場合を表していない。
【００８３】
図７Ｂから分かるように、従来のＥＴＭ法はＮアトム（実行しなかった命令を示す）よりはるかに多いＥアトム（実行した命令を示す）を有する追跡を作る。かかるデータ・パターンは、上に述べたＰＮ符号化で用いられるランレングス符号化方式などの周知の圧縮技術を用いて比較的容易に圧縮することができる。しかし本発明の実施の形態はほぼ等しい数のＥアトムおよびＮアトムを有するデータ・パターンを形成する傾向があるので、圧縮するのは一層困難である。
【００８４】
ほぼ等しい数の２つの出力を有するデータを効果的に処理することができる圧縮技術を見つける１つの方法は、ほとんど全てが１つの値になるように情報出力を調整する何らかの方法を見つけることであろう。これは、命令によりプロセッサがどのように行動するかを予測する予測技術を用いることにより可能になる。予測技術がかかる予測を行うのに優れている場合は、追跡出力はほとんどが「予測正確」標識から成り、「予測不正確」標識はごく少数であろう。診断装置が同じ予測を行うことができる場合は、かかる追跡データ・ストリームを用いてプロセッサの挙動を追跡することができよう。
上に示した実施の形態では、マーカ命令に指定されるのは条件付き命令と無条件間接分岐命令だけであるが、本発明の実施の形態はこれに限定されないことに注意していただきたい。
【００８５】
或る場合には、条件付き命令および無条件間接分岐命令に加えて他のクラスの処理した命令に関するデータを出力することが重要なことがある。したがって或る実施の形態では、監視論理は別の指定されたクラスの命令を検出してよく、圧縮論理はこの別の指定されたクラスの命令をマーカ命令に指定してよい。また他の実施の形態では、条件付き直接命令、条件付き間接分岐命令、および無条件間接分岐命令だけをマーカ命令に指定してよい。
【００８６】
例えば、ロード命令と格納命令で開始した或るデータ・アクセスのメモリ・アドレスおよびデータ値も追跡しているときは、これらのロード命令と格納命令をいつ処理したかを知ることが重要である。なぜなら、かかるメモリ・アドレスおよびデータ値は必ずしも全てを追跡しないからである。ロード命令と格納命令をマーカ命令に指定することにより、追跡ストリームはこれらの命令の挙動に関する最小限の情報（すなわち、実行したか実行しなかったか）を必ず含むので、追跡した情報は後で正しく識別することができる。
【００８７】
かかる場合は、追跡論理は命令ストリーム内の指定されたクラスの命令を検出するので、それらをマーカ命令に指定してその挙動を示す標識を出力することができる。任意の追加のクラスの命令をマーカ命令に指定するのは一般にＥＴＭ自身であることに注意していただきたい。何を追跡することを求められたかに従って、ＥＴＭはこれを行う。
【００８８】
図８は図２に対応するデータ処理装置を示すが更に、プロセッサ３０の挙動を予測するための予測論理７２を含む。予測論理７２が行った予測と監視論理４５が監視したＣＰＵ３０の実際の挙動とを比較して、予測が正しい場合は「予測正確」標識を圧縮論理５０に出力し、予測が正しくない場合は「予測不正確」標識を圧縮論理５０に出力する。処理装置の実際の挙動の追加の表示も、適当であればこの段階で出力する。予測システムが一般に正しい場合は大部分は「予測正確」標識を出力するので、圧縮するとデータは元の追跡ストリームより少なくなる。
【００８９】
例えば、予測論理７２が行う予測は条件付き命令の条件が真か偽かに関することでよい。条件の値と予測論理７２が行った予測とが一致する場合は１（「予測正確」標識）を圧縮論理５０に出力し、条件の値と予測論理７２が行った予測とが一致しない場合は０（「予測不正確」標識）を圧縮論理５０に出力する。この場合は実際の挙動の追加の標識は必要ない。なぜなら可能な挙動は２つだけだからである。
【００９０】
予測方式の一例を以下に示す。
１．  条件付き命令が無条件命令に続くときは実行したと予測する。
２．  第２の条件付き命令が第１の条件付き命令に続くときは、
ａ．  第２の命令の条件が第１の命令の条件と同じ場合は、第２の命令の実行状態は第１の命令の実際の実行状態と同じであると予測し、
ｂ．  第２の命令の条件が第１の命令の条件と異なる場合は、第２の命令の実行状態は第１の命令の実際の実行状態の逆であると予測する。
【００９１】
診断装置８０は更に、プロセッサの挙動について同じ予測を行うようにした予測論理９２を含む。予測論理９２が同じ予測を行うことができる理由は、ＣＰＵが処理した命令のシーケンスに圧縮解除論理１００からアクセスできるからである。圧縮解除論理１００は予測論理９２から予測を受け、また追跡ポート・アダプタ７０から受けた追跡ストリーム内の標識を用いて、実際のＣＰＵ挙動を再構築する。
【００９２】
図９は上に設定した予測規則に従う予測方式を示す流れ図を示す。この予測方式では、或る命令を調べて、これが無条件の場合は規則１に従って「実行した」と予測する。これが無条件でない場合は、その前の命令を調べて無条件だったかどうか確認し、無条件であれば「実行した」と予測する（規則２）。無条件でなかった場合は、現在の命令条件を調べてその前の命令条件と一致するかどうか確認し、一致する場合は、規則３ａに従って、その前の命令を実行した場合は「実行した」と予測し、実行しなかった場合は「実行しなかった」と予測する。命令条件がその前の命令条件と一致しない場合は、その前の命令を実行した場合は「実行しなかた」と予測し、前の命令を実行しなかった場合は「実行した」と予測する（規則３ｂ）。
【００９３】
本発明の例示の実施の形態について添付の図面を参照して詳細に説明したが、本発明はこれらの正確な実施の形態に限定されないことと、特許請求の範囲に規定されている本発明の範囲と精神から逸れずに当業者は種々の変更および修正を行ってよいことを理解すべきである。
【符号の説明】
【００９４】
４０  追跡論理
４２  監視論理
５０  圧縮論理
【図１】
2014220003.tif 000018
【図２】
2014220003.tif 000019
【図３】
2014220003.tif 000020
【図４Ａ】
2014220003.tif 000021
【図４Ｂ】
2014220003.tif 000022
【図４Ｃ】
2014220003.tif 000023
【図５】
2014220003.tif 000024
【図６】
2014220003.tif 000025
【図７Ａ】
2014220003.tif 000026
【図７Ｂ】
2014220003.tif 000027
【図８】
2014220003.tif 000028
【図９】
2014220003.tif 000029