(57)【要約】命令経路コプロセッサ（ＩＰＣ）（１６）はＣＰＵ（１０）のＣＰＵプログラムカウンタ（１４）の値を監視して、ＩＰＣ（１６）は動作すべきか否かを検出する。また、ＩＰＣ（１６）はＣＰＵプログラムカウンタの値を用いて、ＩＰＣがそのプログラムカウンタを如何に更新すべきかを判断する。関数の呼び出し、例外または割り込みの処理、またはレジスタ内に指定された目標への飛び越しが行われると、アドレスが準備されて、このアドレスはＣＰＵプログラムカウンタからロードされた時に、前記関数呼び出し、例外または割り込み、または飛び越しからの戻りに対して、ＩＰＣにそのＩＰＣプログラムカウンタを必要に応じて更新させる。この準備されたアドレスはＣＰＵ（１０）のプログラムカウンタにロードされる。プログラムカウンタ（１４）の戻りアドレスは、例えば、このアドレスは飛び越しからサブルーチンへの戻りとして扱われるべきであるということを示すように設定された仮想のマシーン戻りアドレスおよびビットを含んでいる。
2004519027.tif 000002
【特許請求の範囲】
【請求項１】
処理ユニットプログラムカウンタを有する処理ユニットと、ＩＰＣプログラムカウンタを有するＩＰＣとを備え、前記処理ユニット（ＣＰＵ）が命令経路コプロセッサ（ＩＰＣ）と同期している装置であって、
前記ＩＰＣは、前記処理ユニットプログラムカウンタから受けた命令アドレスを解読し、この処理ユニットプログラムカウンタから受けた命令アドレスの制御の下に前記ＩＰＣプログラムカウンタの更新が必要とされる形式を選択し、選択された形式に従って前記ＩＰＣプログラムカウンタを更新する動作が可能であり、
前記ＩＰＣはまた、前記ＩＰＣプログラムカウンタによってアドレス指定された命令を取り出し、命令を解読し、命令を実行のために前記処理ユニットに送る動作が可能であることを特徴とする、装置。
【請求項２】
前記ＩＰＣは、前記処理ユニットプログラムカウンタから受けた命令アドレスの制御の下に、
（ａ）実行の様々な段階においてＩＰＣ命令のパイプラインにおけるＩＰＣ命令のＩＰＣプログラムカウンタ値からＩＰＣプログラムカウンタ値を検索すること、
（ｂ）前記処理ユニットから受けた命令アドレスに含まれる値からＩＰＣプログラムカウンタ値を判断すること、
（ｃ）通常のＩＰＣプログラムの流れに従ってＩＰＣプログラムカウンタ値を変更すること、
の更新の形式の少なくとも２つを含む一連の形式から、必要とされる更新の形式を選択するように配列されている、請求項１に記載の装置。
【請求項３】
前記ＩＰＣは、前記処理ユニットプログラムカウンタからの所定ビットの制御の下に一連の形式から選択をする、請求項２に記載の装置。
【請求項４】
前記ＩＰＣは、所定の範囲の命令アドレス値を受けると、実行の様々な段階においてＩＰＣ命令のパイプラインにおけるＩＰＣ命令のＩＰＣプログラムカウンタ値からＩＰＣプログラムカウンタ値を検索する動作が可能であり、
前記装置は、通常のプログラム制御へ戻る前に、割り込みおよび／または例外から戻るための戻りアドレスの変更を行うように配列されている割り込みおよび／または例外ハンドラプログラムでプログラムされ、この変更によって戻りアドレスを前記所定の範囲の値に変える、請求項１に記載の装置。
【請求項５】
前記ＩＰＣは、所定の範囲の命令アドレス値を受けると、関数呼び出し動作からの戻りを実行する動作が可能であって、
前記ＩＰＣは制御を関数に変換する前に関数戻りアドレスを格納する動作が可能であり、前記ＩＰＣは所定の範囲の関数戻りアドレスを選択する、請求項１に記載の装置。
【請求項６】
前記ＩＰＣは、所定の範囲の命令アドレス値を受けると、前記処理ユニットプログラムカウンタから決定したアドレスで目標の場所へのＩＰＣプログラムの飛び越しを実行する動作が可能であり、
ＩＰＣは、
−  処理ユニットに、格納場所内の所定の範囲から目標の場所を識別する目標値を格納させ、
−  処理ユニットに、プログラムカウンタを格納場所からロードするプログラムカウンタ変更命令を実行させる
動作が可能である、請求項１に記載の装置。
【請求項７】
命令アドレス値はワード合わせ（ｗｏｒｄ ａｌｉｇｎ）され、ＩＰＣは目標場所のアドレスのワード合わせされていない値が可能となるように目標場所のアドレスを決定する、請求項６に記載の装置。
【請求項８】
目標場所のアドレスの決定は、命令アドレス値のビットの少なくとも一部をサブワード合わせされた場所のビット位置へシフトすることを含む、請求項７に記載の装置。
【請求項９】
ＩＰＣは異なる長さの命令を有する、請求項１に記載の装置。
【請求項１０】
上記請求項のいずれかに記載の装置を含む携帯電話、テレビ受像機トップボックスまたは携帯用のＰＣ。
【請求項１１】
中央演算処理装置（ＣＰＵ）を命令経路コプロセッサ（ＩＰＣ）と同期させる方法であって、
ＩＰＣに、処理ユニットの処理ユニットプログラムカウンタから受けた命令アドレスを解読させ、これによってＩＰＣが命令アドレスを決定することが可能になり、
受けた命令アドレスのタイプを判断し、
命令アドレスのタイプによってＩＰＣのＩＰＣプログラムカウンタを更新し、
命令を取り出し、
命令を解読し、
命令を実行のために処理ユニットに送ることを含む、方法。
【請求項１２】
処理ユニットから受けた命令アドレスを解読する前に、ＩＰＣは処理ユニットに命令を送り、これによって処理ユニットは、命令アドレスおよび命令タイプ情報の両方を含む処理ユニットプログラムカウンタにアドレスをロードする、請求項１１に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、命令経路コプロセッサと中央演算処理装置とを同期させる装置およびその方法に関する。
【０００２】
【従来の技術】
図１を参照すると、中央演算処理装置（ＣＰＵ）１０は通常メモリ１２に格納された命令を読み出し、且つ実行する。プログラムカウンタ（ＰＣ）１４は、ＣＰＵ１０に対してメモリ１２内の特定の命令のアドレスを示し、これによってＣＰＵ１０がこの命令にアクセスし、その必要な実行を遂げることができる。
【０００３】
ＣＰＵが命令を取り出し解読することを助けるために、命令経路コプロセッサ（ＩＰＣ）が使用される。図２において、ＩＰＣ１６は、メモリ１２とそのプログラムカウンタ１４を備えているＣＰＵ１０との間に配置されている。ＩＰＣ１６は、それ自身の命令セットアーキテクチャ（ＩＳＡ）およびバイトコードカウンタ（ＢＣＣ）１８と呼ばれるそれ自身のプログラムカウンタを有している。重要なことは、ＩＰＣ１６がＣＰＵ１０に対して異なるＩＳＡを有してもよいことである。その場合で、且つＩＰＣのＩＳＡにおける命令がＣＰＵのＩＳＡの命令と異なる長さを有しているならば、ＩＰＣはＢＣＣ１８と共にプログラムにおける現在の位置を追跡しなければならない。このことは、ＩＰＣの命令が様々な長さを有し、且つＣＰＵ１０内のＰＣ１４とＩＰＣ１６のプログラムカウンタ１８との間の関係がかなり緊密である場合に、特に是認すべきことである。
【０００４】
ＩＰＣコードにおける命令は次のように処理される。即ち、ＩＰＣ１６がこれらの命令を取り出し、解読し、ＣＰＵコード命令セットへ変換する。ＩＰＣ命令は「固有の」ＣＰＵ命令セットに変換され、次に実行のためＣＰＵ１０に送られる。
【０００５】
ＣＰＵ１０をＩＰＣ１６と共に動作させるために必要とされるＣＰＵ１０への介入は最小限であることが望ましい。ＩＰＣは、ＣＰＵがＩＰＣ１６なしで動作する場合においても発生する必要のある信号から、その動作を判断できることが好ましい。
【０００６】
一般的に、ＩＰＣ１６を作動させるために、プログラムカウンタ１４のアドレスの画定された「ＩＰＣ範囲」が用いられる。ＣＰＵ１０がＩＰＣ範囲内から命令を取り出そうとすると、ＩＰＣ１６は取り出し命令を妨害し、ＩＰＣ１６自身が取り出したＩＰＣ命令からＣＰＵ１０のための命令を生成する。
【０００７】
通常、ＩＰＣ１６はプログラム内の位置の軌道を保持している。しかしＩＰＣ命令を実行する際、（連続的な流れ、または分岐等があるかによって）ＣＰＵからの応答が、プログラムの制御流れに影響することがある。
【０００８】
ＡＲＭ社に一般譲渡された米国特許６，０２１，２６５は、プログラムカウンタレジスタのビットに応答する命令デコーダを開示している。
【０００９】
以下の状況において上述したような命令経路コプロセッサを使用した場合、問題が生じる。
【００１０】
ＣＰＵ１０が割り込みコマンドを受けると、ＣＰＵ１０はある割り込みベクトルで実行を開始し、例えば、ＣＰＵのプログラムカウンタ１４はそのベクトルに設定されて、割り込みの結果として要求されたサブルーチン等を行う。尚、ＩＰＣ１０のバイトコードカウンタ（ＢＣＣ）１８はプログラムカウンタ１４に対する変化の原因を認識しない。割り込みから戻ると、ＰＣ１４によって現在保持される値で具体的に示されるＣＰＵ１０の状態は、割り込みが発生した時の値に復元される。この場合、バイトコードカウンタ１８の値によって特定されるＩＰＣ１６の状態も復元する必要がある。
【００１１】
ＩＰＣとＣＰＵとの組み合わせが例外を扱う場合（例えば、ゼロ除算等の実行不能なコマンドが発せられた場合）、ＣＰＵ１０はその特定の例外に対して適宜の例外ベクトルで実行を開始する。以前のように、プログラムカウンタ１４は値を変化させるが、ＩＰＣ１６のバイトコードカウンタ１８はこれに従って変化しない。例外から戻ると、ＣＰＵの状態は例外が起こる前の状態に近い状態に復元される。注意すべきことは、例外はＣＰＵパイプラインの異なる段階においてあり得るものであり、異なる復元機能が必要とされることがある。ＩＰＣ１６の状態も再び復元されなければならない。
【００１２】
関数呼び出し、レジスタの飛び越し、および関数呼び出しからの戻りを処理する場合、以下の問題が起こる。順次実行の際、ＩＰＣ１６は、プログラムカウンタ１４の値が増加されているということを検出または通知されればよく、この場合、ＩＰＣ１６はそのバイトコードカウンタ１８を増加させることができ、これによってＩＰＣ１６とＣＰＵ１０が同期化される。条件付き分岐に対しては、ＩＰＣ１６はＣＰＵにＣＰＵ分岐命令を送り、ＣＰＵ分岐が行われたか否かを検出することによって条件付き情報を監視することができ、そしてそれに従ってＩＰＣドメインにおける分岐を処理することができる。関数呼び出しおよびレジスタの内容によって指定された位置への飛び越し（「レジスタの飛び越し」）に対しては、異なるメカニズムが必要とされる。例えば、ＩＰＣドメインにおけるレジスタの飛び越し命令は、ＣＰＵドメインにおけるレジスタの飛び越し命令に変換してもよく、最終飛び越し命令が実行され、プログラムカウンタ１４がＣＰＵレジスタに設定される。ＩＰＣ１６はＣＰＵプログラムカウンタのアドレスを用いることによって、その状態（例えば、バイトコードカウンタ１８の値）を適宜更新することができる。
【００１３】
ワード合わせされていない飛び越しを処理する際にさらなる問題が起こる。ＩＰＣ１６が、ワード合わせされていない関数に飛び越しをしなければならない場合、ＣＰＵ１０上の対応する飛び越しは、そのＣＰＵの合わせ制限（ａｌｉｇｎｍｅｎｔ  ｒｅｓｔｒｉｃｔｉｏｎ）をも守らなければならない。
【００１４】
言い換えれば、ＣＰＵ１０がＩＰＣ範囲の絶対アドレスに分岐する（例えば、関数からのレジスタの戻りの分岐、例外からの戻り等）決定する、という問題が生じる。ＣＰＵによって決定された絶対アドレスは、ＩＰＣ１６がそのＢＣＣ１８をその値に設定できるようにするために、何とかしてＩＰＣ１６に送らなければならない。
【００１５】
戻りはレジスタの飛び越しと見なすこともでき、この場合、戻りアドレスがレジスタまたはスタックからロードされる。ＩＰＣ１６のバイトコードカウンタ１８は戻りの後、何らかの方法で再び更新されなければならない。ＩＰＣ１６がＣＰＵ１０に固有の命令の関数を呼び出させる場合、ＣＰＵ１０のプログラムカウンタが戻りの後にＩＰＣ範囲に戻るということから、ＩＰＣ１６は関数実行の終了を検出することができる。しかし、ＩＰＣ１６はこれが戻りによるものであるか呼び出し関数が何らかのＩＰＣ命令の実行を引き起こしたためであるかを区別する必要がある。
【００１６】
本発明の好ましい実施の形態の目的は、対応するＣＰＵと絶対的に同期する命令経路コプロセッサを提供することにある。本発明の好ましい実施の形態のさらなる目的は、上記欠点の１つ以上を解決することである。
【００１７】
本発明による装置は請求項１に記載されている。本発明によれば、プロセッサ（例えばＣＰＵ）のプログラムカウンタを用いて、単なるＩＰＣプログラムカウンタを更新するための値についての情報でなく、ＩＰＣプログラムカウンタの更新方法を制御する情報を送る。その結果、例えば割り込みからの戻り、例外からの戻り、レジスタの飛び越し等の信号を送るために、プロセッサとＩＰＣとの間でプログラムカウンタ以外の通信を必要としない。
【００１８】
ＩＰＣプログラムカウンタを更新する方法についての情報は、例えば、この目的のためにＩＰＣが確保しておくプログラミングユニットプログラムカウンタの１またはそれ以上のビットに含まれている。これらのビットは、例えば、処理ユニットプログラムカウンタがＩＰＣ範囲内にあるか否か、即ちＩＰＣが処理ユニットに対して命令を与えるべきか否かをＩＰＣに示すために保存されているビットに加えて確保されている。これは必要とされる更新の形式を符号化する簡単な方法であり、ハードウェア経費をほとんど必要としない。より一般的には、ＩＰＣは、各々それ自身の更新の形式に関連した幾つかの所定のプログラムカウンタアドレス範囲を使用してもよく、このようにしてＩＰＣは処理ユニットプログラムカウンタが下がる範囲と関連している更新の形式に応じてＩＰＣプログラムカウンタを更新する。
【００１９】
割り込みまたは例外の場合において、例えば、割り込みまたは例外からの戻りの後にＩＰＣが処理ユニットプログラムカウンタによって出力されたアドレスからのこのような戻りを認識する場合においては、ＩＰＣは適宜の動作を行うことがきるようにしてもよい。このようにしてＩＰＣは割り込みに応答することを決定するためにプログラムカウンタ以外の信号を必要としない。この動作によって、ＩＰＣの状態は、割り込みまたは例外から戻った時に処理ユニットが復元される状態に対応する状態に復元される。この動作は、「古い」ＩＰＣプログラムカウンタ値ダウンストリームを、先行するＩＰＣ命令に使用されたこのような値のパイプラインから再ロードすることを含んでもよい。それぞれ異なるタイプの割り込みおよび／または例外が処理ユニットをそれぞれ異なる周期数前の状態に復元することができる場合、処理ユニットプログラムカウンタからの情報に応じて、ＩＰＣはパイプラインの異なる段階からのアドレスから選択をして、ＩＰＣの状態を処理ユニットの状態に対応した状態に復元してもよい。
【００２０】
割り込みまたは例外の処理プログラムは、割り込みまたは例外を処理した後に制御を返すアドレスを変更することが好ましい。この変更の選択は、戻りアドレスが有する値によってＩＰＣが適宜にその状態を復元するように行われる。
【００２１】
同様に関数呼び出しの場合、例えば、ＩＰＣが処理ユニットプログラムカウンタによって出力されたアドレスから、関数呼び出しからの戻りを認識している場合、ＩＰＣはこのような関数呼び出しからの戻りに応答する動作ができるようにしてもよい。従って、ＩＰＣは関数からの戻りに必要とされる動作の実行を決定するために、プログラムカウンタ以外に応答する信号を必要とせず、異なるプログラムカウンタ値を比較するための費用を必要としない。ＩＰＣによって関数が呼び出される場合において、関数に与えられる戻りアドレスは必ず、処理ユニットプログラムカウンタにロードされた時、関数呼び出しからの戻りに関連した動作をＩＰＣに行わせるアドレスである。
【００２２】
レジスタの飛び越し命令の場合は、ＩＰＣは処理ユニットから新しいＩＰＣアドレスを得る必要がある。このアドレスに関する情報は処理ユニットからそのプログラムカウンタを通して送られることが好ましい。処理ユニットプログラムカウンタ内の情報は、ＩＰＣが処理ユニットプログラムカウンタから新しいアドレスを得る必要があるということをＩＰＣに対して示す。従って、ＩＰＣにそのアドレスを変更させるためのさらなる信号は必要とされない。ＩＰＣはこの目的のために処理ユニットから戻される可能性のあるアドレスを準備して、これらのアドレスが、ＩＰＣにレジスタの飛び越しを行わせる範囲内にあるようにすることが好ましい。
【００２３】
多くの場合、処理ユニットは、メモリ内のある境界に合わせられた処理ユニットプログラムカウンタアドレス（例えば、ある数の最も重要性の低いビットが０であるアドレス）のみを作成することが可能である。ここにおいては、これらの境界を「ワード境界」と呼ぶ。しかし、ＩＰＣは他の境界（例えば、１ワードにおけるバイトまたは１バイトにおけるニブルの境界、またはビット境界まで）に合わせられた命令を処理できるようにしてもよい。レジスタ飛び越しＩＰＣ命令の場合にＩＰＣが処理ユニットプログラムカウンタからＩＰＣプログラムカウンタを得る時、例えば処理ユニットプログラムカウンタアドレスのビットの一部を重要度の低い位置にシフトすることによって、ＩＰＣは、処理ユニットプログラムカウンタアドレスを上記のような他の境界に合わせてもよいアドレスに変換する。処理ユニットプログラムカウンタアドレスがレジスタの飛び越しに対応する更新を必要とするタイプのものであるということを検出した時も、ＩＰＣはこの動作を行う。
【００２４】
ＣＰＵアドレスを符号化することによって、ＩＰＣは必ずしもワードアドレスではないアドレスを使用することができる。このようにして、ＣＰＵ分岐はＩＰＣプログラムカウンタの更新とアドレスのタイプの判断をするアドレスで符号化される。本発明は、ＣＰＵプログラムカウンタとＩＰＣプログラムカウンタとの間に重要な関係を持つ様々な長さの命令を有するＩＰＣに関しては特に有利である。
【００２５】
好ましくは、ＩＰＣは、ＣＰＵに対して命令を送ることによって、ＣＰＵがＩＰＣに対してＣＰＵプログラムカウンタとＩＰＣプログラムカウンタとを同期させるためのＩＰＣ命令アドレスおよび命令のタイプを含むＣＰＵプログラムカウンタアドレスを送るようにする動作をすることができる。
【００２６】
ＩＰＣ（１６）がＣＰＵ（１０）にアドレス情報および命令タイプを提供させるようにすることによって、特別な実施費用またはＣＰＵ（１０）の変更なしに、ＩＰＣ（１６）をシステムにおいて有利に実施することができる。
【００２７】
命令は、レジスタ値の分岐または、割り込みまたは例外からの戻りなどの絶対分岐命令であってよい。
【００２８】
命令アドレスは、戻りアドレス、好ましくは、割り込み、例外、関数呼び出し、レジスタの飛び越し、および／またはＩＰＣプログラムカウンタへの戻りからの戻りアドレスであってよい。関数呼び出しはワード合わせされていないアドレスに対するものであってよい。命令アドレスは、ワード、ハーフワード、バイト、ニブルまたはビットアドレスであってよい。
【００２９】
ＩＰＣは、圧縮コードをＣＰＵ命令に圧縮解除するＩＰＣまたはジャババイトコード（Ｊａｖａ  ｂｙｔｅ  ｃｏｄｅ）をＣＰＵ命令に変換するＩＰＣであってよい。
【００３０】
ＩＰＣは、ＣＰＵプログラムカウンタとＩＰＣプログラムカウンタとの間に重要な関係を持つ様々な長さの命令を有してもよい。
【００３１】
本発明は、第１の態様の装置を含む携帯電話、テレビ受像機トップボックスまたは携帯用のＰＣ（パーソナルコンピュータ）に拡大適用してもよい。
【００３２】
本発明のこれらおよび他の態様は以下に説明される実施の形態によって明らかとなり、例証される。
【００３３】
【発明の実施の形態】
以下の例において、命令経路コプロセッサ（ＩＰＣ）１６は、ＣＰＵ１０のプログラムカウンタ１４が画定されたＩＰＣ範囲内にある時に動作できるように定められる。動作可能な状態、即ちＩＰＣ範囲にある場合、ＩＰＣ１６はＣＰＵ１０からの命令取り出しを妨害し、ＩＰＣ命令の配信、取り出し、解読、ＣＰＵ命令への変換を行い、このＣＰＵ命令を実行のためにＣＰＵ１０へ送る。３２ビットプログラムカウンタ１４およびＩＰＣ１６の２４ビットバイトコードカウンタ１８に対して、以下が画定される。
Ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ）＝（ＰＣ＆０ｘ８０００００００）＝＝０ｘ８０００００００
Ｉｎ＿ＲＦＥ＿ｒａｎｇｅ（ＰＣ）＝（ＰＣ＆０ｘｆ０００００００）＝＝０ｘｆ０００００００
Ｉｎ＿ＲＥＴ＿ｒａｎｇｅ（ＰＣ）＝（ＰＣ＆０ｘｃ０００００００）＝＝０ｘｃ０００００００
（Ｃプログラミング言語の表記法が使用される。ここにおいては、「＆」はビット単位の論理ＡＮＤ演算を示し、「０ｘ．．．」は１６進法で表される数字を示し、「＝＝」はその左右のオペランドが等しい場合に「ＴＲＵＥ」を生成し、等しくない場合は「ＦＡＬＳＥ」を生成する比較演算を示す。）
【００３４】
上記において、ＲＦＥは例外からの戻りを示し、ＲＥＴは戻りを示す。このようにしてＰＣは、その最も重要なビットが設定されていれば、ＩＰＣ範囲内にある。ＰＣはその最も重要な４ビットが設定されていれば（「ｆ」は２進法の値１１１１の１６進法）ＲＦＥ範囲内にある。ＰＣはその最も重要な２ビットが設定され、次の重要度の低い２ビットが０であれば（「ｃ」は２進法の値１１００の１６進法）ＲＥＴ範囲内にある。
【００３５】
図３に示すように、実施の形態は以下のようにして実現される。
【００３６】
この例において、割り込みベクトルは画定されたＩＰＣ範囲の外にある。同様に、例外ベクトルは画定されたＩＰＣ範囲の外にある。
【００３７】
上記から導き出されるように、ＩＰＣ１６はｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ）の時のみ動作している。
【００３８】
この実施の形態において、割り込みは以下のように処理される。プログラムカウンタ１４がＩＰＣ範囲内にない（即ち、（ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ）ではない）場合、ＣＰＵ１０は通常の動作をする。ＩＰＣモード（即ち、ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ））にある場合、上に画定されたように割り込みベクトルはＩＰＣ範囲の外にあるため、割り込みハンドラーはＣＰＵモードに入る。
【００３９】
例外は以下のように処理される。プログラムカウンタ１４がＩＰＣ範囲の外にある（即ち、（ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ）ではない）場合、ＣＰＵは通常の機能をする。ＩＰＣモード（ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ））にある場合、上に画定されたように例外ベクトルはＩＰＣ範囲の外にあるため、例外ハンドラーはＣＰＵモードに入る。
【００４０】
例外（または割り込み）からの戻りは（戻りアドレスＰＣ’に対して）以下のように処理される。戻りアドレスＰＣ’がＩＰＣ範囲内にない（即ち、（ｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ’）ではない）場合、ＣＰＵはＣＰＵモードへの戻りに対して通常の機能をする。ＩＰＣモードへの戻りについては（戻りアドレスＰＣ’がＩＰＣ範囲、即ちｉｎ＿ＩＰＣ＿ｒａｎｇｅ（ＰＣ’）内にある場合）、例外／割り込みハンドラーは、０ｘｃ０００００００で戻りアドレス（ＰＣ’）の論理和演算を行うことによって、戻りアドレス（ＰＣ’）を変更して、ｉｎ＿ＲＦＥ＿ｒａｎｇｅ（ＰＣ’）が戻りの実行を持続させるようにする。ＩＰＣ１６はこの例外からの戻りを検出し、復元された状態から実行を再開する。
【００４１】
状態の復元は、例えば、ＩＰＣプログラムカウンタに割り込みまたは例外が起こる所定の命令周期数前にＩＰＣプログラムカウンタとして使用された値を再ロードすることが含まれる。好ましくは、ＩＰＣはレジスタのパイプラインを含み、このパイプラインを通して新たな処理ユニット命令周期が開始されるたびに、ＩＰＣプログラムカウンタの値がシフトされる（必要に応じてこのパイプラインによってプログラムカウンタの値に加えて他の状態情報をシフトしてもよい）。割り込みまたは例外から戻ると、ＩＰＣプログラムカウンタの値（および必要に応じて他の状態情報）は、処理ユニット（ＣＰＵ）の状態が復元される処理周期に対応するパイプラインの段階に含まれる値に復元される。
【００４２】
（できる限りワード合わせされていないアドレスへの）関数呼び出し、およびＩＰＣ１６のバイトコードカウンタ１８への戻りは、以下のように処理される。ＩＰＣは戻りアドレスＰＣ’をＣＰＵへ送り、このＣＰＵのために、ＰＣ’を０ｘｃ０００００００│（ＢＣＣ＜＜２）（「│」はビット単位の論理和を示し、「ＢＣＣ＜＜２」はＢＣＣのビットを２ビットごとにより重要なビット位置へシフトすることを表す。）に設定することにより、ｉｎ＿ＲＥＴ＿ｒａｎｇｅ（ＰＣ’）が持続する。このアドレスＰＣ’はワード合わせされている（即ち、少なくともその２つの重要性の低いビットは０である）ので、ＣＰＵ１０はこのアドレスを使用することに問題はない。ＣＰＵが戻り演算を行い、これによって戻りアドレスＰＣ’がＣＰＵプログラムカウンタにロードされると、ＩＰＣ１６はｉｎ＿ＲＥＴ＿ｒａｎｇｅ（ＰＣ）を検出し、そしてそのバイトコードカウンタ１８をプログラムカウンタ１６から、下位２６ビットを取り且つ２つずつ右にシフトすることによって、再構築／設定する。
【００４３】
ＣＰＵレジスタから（またはメモリから）検索されなければならない対象ＩＰＣプログラムカウンタアドレスへ飛び越す飛び越し命令の場合においても同様の手順に従う。ＩＰＣはレジスタまたはメモリに値ＰＣ’＝（ＪＯＲ│（ＴＡＲＧＥＴ）＜＜２）を格納する（ＪＯＲは、関数呼び出しからの戻りの場合のように同様の動作が必要とされる場合、たとえば０ｘｄ０００００００または０ｘｃ００００００等のレジスタの飛び越しを識別するビットパターンを示し、ＴＡＲＧＥＴはＢＣＣの目標値を示す）。このアドレスＰＣ’はワード合わせされている（即ち、少なくともその２つの重要性の低いビットは０である）ので、ＣＰＵ１０はこのアドレスを使用することに問題はない。ＣＰＵが固有のレジスタの飛び越しを行い、これによって戻りアドレスＰＣ’がレジスタまたはメモリからＣＰＵプログラムカウンタにロードされると、ＩＰＣ１６は「ＪＯＲ」ビットパターンを検出し、そしてそのバイトコードカウンタ１８を、下位２６ビットを取り２つずつ右シフトすることによって、プログラムカウンタ１６から設定する。
【００４４】
復元された状態に基づいたまたはプログラムカウンタ１４からの、バイトコードカウンタ（ＢＣＣ）１８の更新は、例えば以下の条件のもとに行われる。
ＣＰＵ範囲からＩＰＣドメイン関数への呼び出し
割り込み／例外からの戻り
ＣＰＵドメインの関数からＩＰＣドメインの呼び出し側への戻り
ＩＰＣドメインからＩＰＣドメインへの関数呼び出し／絶対飛び越し
ＩＰＣドメインからＩＰＣドメインへの戻り
【００４５】
以下は関数呼び出しおよび戻りシーケンスの一例である。
【表１】
2004519027.tif 000003
「ｃａｌｌ」命令で関数が呼び出される。「ｌｉｎｋ  ｔｏ  ＢＣＣ」命令で、戻りアドレスがＣＰＵレジスタにロードされる。実行後、関数によってＣＰＵがＢＣＣ命令へのリンクに指定された戻りアドレスへ制御を戻す。
【００４６】
戻りアドレスの最も重要なビットは１６進法の値「Ｃ」（＝１１００）を有しているため、ＲＥＴ範囲内となる。重要性の低いビットは、６＜＜２に等しい１６進法の値「１８」、即ち呼び出し命令に従うＩＰＣ命令のＩＰＣプログラムカウンタアドレスを有している。
【００４７】
呼び出し命令によって、ＣＰＵはそのプログラムカウンタをアドレス０ｘｃ０００００５ｃに更新する。ＣＰＵプログラムカウンタにロードされると、このアドレスはＩＰＣに対し、（最も重要なビットは１６進法の値「Ｃ」に等しいので）そのＩＰＣプログラムカウンタをＣＰＵプログラムカウンタからロードすべきであることを示す。また、ＣＰＵプログラムカウンタは新しいＩＰＣプログラムカウンタ値ＢＣＣが（ＣＰＵプログラムカウンタの重要性の低いビット（１６進法５Ｃ）の２ビットを右にシフトすることによって得た）１６進法の１７であることを示す。ＩＰＣはこの新しいプログラムカウンタ値ＢＣＣをＣＰＵプログラムカウンタから算出する。
【００４８】
関数を実行した後（本発明にとっては必要以上である多すぎる命令を回避するため、例において関数はＡＤＤ命令のみを含む）、ＭＯＶ命令によってＣＰＵは戻りアドレス０ｘｃ０００００１８をＣＰＵプログラムカウンタ内へ移動させる。これによってＩＰＣはそのアドレスを０ｘ０００００００６に復元し、その後元の関数呼び出しに従った命令が実行される。
【００４９】
例においては、すべてのＣＰＵ命令はＩＰＣ命令に応答してＩＰＣによって生成される。本発明はこの状況に限定されることはなく、本発明から逸脱せずに、ＩＰＣはＣＰＵにＩＰＣ範囲外の関数を呼び出させて、メモリから固有の命令を実行するようにしてもよい。これらの命令は戻りアドレスをロードすることによってＩＰＣ命令に順に飛び越して戻ることができ、またはこれらの命令は、戻りアドレスをロードする前に、ＩＰＣ命令と固有の命令との間を前後に飛び越すことができる。
【００５０】
上述した実施の形態は、圧縮サムスクリューズ（ＴｈｕｍｂＳｃｒｅｗｓ）命令セットをＡＲＭコードに変換するサムスクリューズデコーダ（ＴｈｕｍｂＳｃｒｅｗｓ  Ｄｅｃｏｄｅｒ）として知られるＩＰＣを用いることによって実現してもよい。サムスクリューズデコーダは、メガバイト級の組み込みソフトを含むＧＳＭ携帯電話、テレビ用のセットトップボックス（ｓｅｔ−ｔｏｐ  ｂｏｘ）または携帯用のパーソナルコンピュータのような製品において使用することができる。コード圧縮技術（および対応するデコーダ）を用いることによって、ＡＲＭサム（Ｔｈｕｍｂ）のような現在主要なプロセッサと比較して必要なメモリの大きさおよび装置のコストを縮小することが可能になる。
【００５１】
さらに上述した技術は、例えば、いわゆるＶＭＩ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）において使用することができ、これはジャババイトコード（Ｊａｖａ  ｂｙｔｅ  ｃｏｄｅ）をＭＩＰＳプロセッサ用のコードに変換するＩＰＣである。
【００５２】
上述した実施の形態は、関数呼び出し、例外、割り込みからの戻り等の場合において処理ユニットとの同期化に使用することのできる命令経路コプロセッサ同期化メカニズムを開示している。命令経路コプロセッサとＣＰＵとの同期化は、ＣＰＵのプログラムカウンタのために生成された命令によって絶対的とされる。
【００５３】
ＩＰＣ１６はＣＰＵ１０のプログラムカウンタ１４の値を監視して、ＩＰＣ１６は動作すべきか否かを検出する。ＰＣ１４が所定の範囲内にある場合には、ＩＰＣ１６は動作すべきである。ＩＰＣ１６はさらにＰＣ１４を用いてどのサブルーチンが呼び出されたかを検出する。上述の実施の形態では、サブルーチン（または割り込みからの戻り等）から戻った時に戻りアドレスを検出するためにもＰＣ１４が使用される。関数が呼び出さる時、ＩＰＣ１６は特別に準備したＰＣ戻りアドレスを準備し、これをプロセッサスタックにロードする。ＰＣ戻りアドレスは、飛び越しからサブルーチンへの戻りがあることを示すように設定された仮想のマシーン戻りアドレスおよびビットを含んでいる。ＩＰＣ１６は、ＰＣ戻りアドレスが復元された時に、戻りアドレスを用いて処理を再開する。
【００５４】
戻しプログラムが戻りアドレスを変更することでＩＰＣが戻りを検出し、その戻りをＩＰＣマシーン命令および固有の命令の実行と区別することが可能となり、これによって同期化が達成される。
【００５５】
従って、上述した実施の形態の重要な利点は、そのＣＰＵと同期した命令経路コプロセッサを提供することである。
【図面の簡単な説明】
【図１】
ＣＰＵ、プログラムカウンタおよびメモリのブロック図を示している。
【図２】
ＣＰＵ、プログラムカウンタ、命令経路コプロセッサおよびメモリのブロック図を示している。
【図３】
本発明の実施の形態の動作が行われる際のイベントの手順を示す流れ図である。
【符号の説明】
１０  処理ユニット
１２  メモリ
１４  プログラムカウンタ
１６  ＩＰＣ
１８  ＩＰＣプログラムカウンタ
【図１】
2004519027.tif 000004
【図２】
2004519027.tif 000005
【図３】
2004519027.tif 000006
【国際公開パンフレット】
2004519027.tif 000007
2004519027.tif 000008
2004519027.tif 000009
2004519027.tif 000010
2004519027.tif 000011
2004519027.tif 000012
2004519027.tif 000013
2004519027.tif 000014
2004519027.tif 000015
2004519027.tif 000016
2004519027.tif 000017
2004519027.tif 000018
2004519027.tif 000019
2004519027.tif 000020
2004519027.tif 000021
2004519027.tif 000022
【国際調査報告】
2004519027.tif 000023
2004519027.tif 000024