(57)【要約】ＣＰＵ（１０）のプログラムカウンタ（１４）と、命令パス・コプロセッサ（ＩＰＣ）（１６）のバイトコードカウンタ（１８）との間のミスマッチの問題は、ＩＰＣ（１６）にＩＰＣ分岐命令をＣＰＵ分岐命令に移させることによって対処され、これにおいて、ＣＰＵ分岐命令は、対応するＩＰＣ分岐命令が取られるべきかを暗に示し、ＣＰＵ分岐命令は、ＣＰＵ（１０）に自分自身のプログラムカウンタ（１４）をオーバーフローするのを避けるためにＩＰＣ範囲の安全な位置に設定させる。
2004519796.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタ及び命令パス・コプロセッサを持つ中央処理ユニットを有する命令パス・コプロセッサの分岐処理を行うデータ処理ユニットにおいて、前記命令パス・コプロセッサは、前記中央処理ユニットのアドレス状態情報を読み出すのに使用される対応する分岐命令に対するターゲットアドレスを計算するように動作可能であり、前記中央処理ユニットの前記プログラムカウンタは、当該プログラムカウンタ内の現在のアドレス値が前記命令パス・コプロセッサのアクティブアドレス範囲内にあるように調節されるよう動作可能であることを特徴とするデータ処理装置。
【請求項２】
前記プログラムカウンタ内のアドレス値は、当該アドレス値が前記命令パス・コプロセッサのアクティブアドレス範囲内に残っているように調節されるように前記プログラムカウンタは動作可能である請求項１に記載のデータ処理装置。
【請求項３】
前記アドレス値は、下方へ調節される請求項１又は２に記載のデータ処理装置。
【請求項４】
前記アドレス値は、前記命令パス・コプロセッサの前記アクティブアドレス範囲の下限に近い値に調節される請求項１、２又は３に記載のデータ処理装置。
【請求項５】
前記下方での調節は、前記命令パス・コプロセッサが超過できない順次命令の数である約Ｎ個のアドレス値によって行われる請求項３又は４に記載のデータ処理装置。
【請求項６】
前記プログラムカウンタは、当該カウンタのアドレス値が固定オフセットにより調節可能であるように動作可能である請求項１乃至５の何れか一項に記載のデータ処理装置。
【請求項７】
請求項１乃至６の何れか一項に記載の前記装置に備え付けられるセルラー電話、セットトップボックス又はハンドヘルドコンピュータ。
【請求項８】
命令パス・コプロセッサ及び中央処理ユニットにおける分岐命令をハンドリングする方法において、
−前記命令パス・コプロセッサは、前記中央処理ユニットのアドレス状態情報の読み出しを許容する、対応する分岐命令用のターゲットアドレスを計算し、
−プログラムカウンタ内の現在のアドレス値が前記命令パス・コプロセッサのアクティブアドレス範囲内にあり、これによって前記命令パス・コプロセッサのオーバーフローを回避するように、先行するステップからの前記情報に基づいて、前記中央処理ユニットのプログラムカウンタを調整する、
ことを特徴とする方法。
【請求項９】
前記プログラムカウンタは、前記アドレス値が前記命令パス・コプロセッサのアクティブアドレス範囲の第１の値から前記命令パス・コプロセッサのアクティブアドレス範囲の第２の値へ修正されるように調節され、前記第１の値は、前記第２の値よりも高い請求項８に記載の方法。
【請求項１０】
前記第２の値は、前記命令パス・コプロセッサのアクティブアドレス範囲の下限に近い請求項９に記載の方法。
【請求項１１】
前記プログラムカウンタは、固定オフセットにより調節される請求項８乃至１０の何れか一項に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令パス・コプロセッサ（ｉｎｓｔｒｕｃｔｉｏｎ ｐａｔｈ ｃｏｐｒｏｃｅｓｓｏｒ）の分岐処理を行うデータ処理装置と、命令パス・コプロセッサにおいて分岐命令を処理する方法とに関する。
【０００２】
【従来の技術】
図１を参照して、中央処理ユニット（ＣＰＵ）１０は通常、メモリ１２に記憶された命令を読み取り、実行する。プログラムカウンタ（ＰＣ）１４は、ＣＰＵ１０が適切な命令にアクセスし、その命令を実行することを許容する、メモリ１２における特定の命令のアドレスをＣＰＵ１０に示す。
【０００３】
データパス・コプロセッサは、中央処理ユニット（ＣＰＵ）を含む計算システムにおける命令の実行を早めるのに用いられることができる。同様に、図２に示されるような命令パス・コプロセッサ（ＩＰＣ）１６は、処理器が命令をフェッチ（ｆｅｔｃｈ）し、復号するのを助けるのに用いられる。ＩＰＣ１６は、自分自身の命令セットアーキテクチャ（ＩＳＡ）を有する。ＩＰＣ１６は、自分自身のＩＰＣ命令をフェッチし、これら命令を復号し、これら復号された命令をＣＰＵ命令に変換する。この後、ＩＰＣは、これらの生じた命令を実行するＣＰＵ１０に送る。
【０００４】
一般的に、ＩＰＣ１６は、ＩＰＣ１６が反応するＣＰＵ範囲（いわゆるＩＰＣ範囲）を規定することによって動作する。ＣＰＵ１０が前記範囲内から命令をフェッチしようとする場合、ＩＰＣ１６は、このフェッチを途中で止め、ＩＰＣ１６自身によりフェッチされたＩＰＣ１６の命令からＣＰＵ命令を発生させる。このようなＩＰＣ１６がＣＰＵ１０と結合されるとき、以下のような問題が存在する。
【０００５】
【発明が解決しようとする課題】
ＩＰＣは、バイトコードカウンタＢＣＣ１８と呼ばれる自分自身のプログラムカウンタを持ち、ＣＰＵのプログラムカウンタ（ＰＣ）１４を間接的にのみ認識している。ＩＰＣ１６がＩＰＣ分岐命令を復号し、ＣＰＵ分岐命令を発生させる場合、このＣＰＵ分岐命令は、ＣＰＵのプログラムカウンタ１４に直接影響するだろう。しかしながら、これによってＢＣＣ１８は変化しない。これは、プログラムカウンタ１４の値とＢＣＣ１８との間にミスマッチを生じさせ、この問題は対処されなければならない。
【０００６】
ＩＰＣ１６は、ＣＰＵ１０とは異なるＩＳＡを持ってもよいことに注意することが重要である。もしそうであり、ＩＰＣのＩＳＡにおける命令がＣＰＵのＩＳＡにおける命令とは異なる長さを持つ場合、ＩＰＣは、ＢＣＣ１８でプログラムにおける現在位置のトラックを保持しなければならない。
【０００７】
第２の問題は、ＣＰＵ１０はこのＩＰＣ範囲の外に実行又はジャンプすることができ、ＩＰＣ１６の望まない非動作の原因となるということであり、ＣＰＵ１０がＩＰＣ範囲の外にあるときＩＰＣ１６は動作しないからである。
【０００８】
これらの問題は、ＢＣＣ１８及びＰＣ１４がありふれたやり方（例えばＢＣＣ＝ＰＣ÷４）では結合されない場合にのみ存在することは明らかである。固定長のＣＰＵコードに変換する可変長のＩＰＣコードの場合、ＢＣＣ１８とＰＣ１４との間に、このようなはっきりとした結合は起こらない。
【０００９】
上述された第１の問題は、ＣＰＵ１０とＩＰＣとの明示的に又は暗黙的な通信により解決されることができる。明示的な通信は、ＩＰＣ分岐命令を受信したとき、ＩＰＣ１６は、ＣＰＵ１０にそれの状態（及び／又は宛先アドレス）をＩＰＣに書き込ませるネイティブ命令を発生させ、これがその後分岐するか及び何処へ分岐するかを決めることで達成される。
【００１０】
暗黙的な通信は、ＩＰＣ分岐命令を受信したとき、ＩＰＣ１６は、ＣＰＵ１０にそれのアドレスライン上に観測可能な動きを持たせるネイティブ命令（分岐）を発生させ、対応するＩＰＣ分岐が行われるべきかを決めるのに用いられることを達成される。
【００１１】
上述された第２の問題（すなわち、範囲の外という問題）は、ＣＰＵがＩＰＣ範囲のすぐ外で実行するときは常に、ＩＰＣに追加の分岐をこのＩＰＣ範囲内に発生させる（すなわち、対応する分岐がＩＰＣコードに存在しない）ことによって解決される。
【００１２】
上述された２つの問題の先の解決法は、これら問題の各々を別々に解決するための個々のアクションによって行われている。
【００１３】
米国特許公報第６，０２１，２６５号は、プログラムカウンタのレジスタのビットに反応する命令デコーダを開示している。
【００１４】
【課題を解決するための手段】
本発明の好ましい実施例の目的は、２つの上述された問題を同時に対処することである。本発明の好ましい実施例の他の目的は、上述された２つの問題を低コストのアプリケーションを用いて同時に対処することである。
【００１５】
本発明の好ましい実施例の他の目的は、命令パス・コプロセッサの動作をさらに効率良くさせることである。
【００１６】
本発明の第１の様態に従い、命令パス・コプロセッサの分岐処理を行うデータ処理装置は、プログラムカウンタ（ＰＣ）を持つ中央処理ユニット（ＣＰＵ）と、命令パス・コプロセッサ（ＩＰＣ）とを有し、このデータ処理装置は、ＣＰＵのアドレス状態情報を読み出すのに使用される対応する分岐命令に対するターゲットアドレスを計算するように動作可能であり、このＣＰＵのプログラムカウンタは、このカウンタ内の現在のアドレス値がＩＰＣのアクティブアドレス範囲内にあるように調節されるように動作可能であることを特徴とする。
【００１７】
アドレス値の修正は、ＩＰＣ範囲内にアドレス値を保持することによりＩＰＣにおけるオーバーフローを有利に且つ安価に防ぐ。
【００１８】
プログラムカウンタは、アドレス値がＩＰＣのアクティブアドレス範囲内に残るようにカウンタ内のアドレス値が調節されるように動作可能であってもよい。好ましくは、このアドレス値は下方へ、最も好ましくは、ＩＰＣのアクティブアドレス範囲の下限に近い値に調節される。好ましくは、下方への調節は、約Ｎ個のアドレス値によって行われ、ここでＮはＩＰＣが超過できない順次命令の数である。
【００１９】
プログラムカウンタは、このカウンタのアドレス値は、好ましくは偶数のアドレス値の固定オフセットにより調節可能であるように動作することができる。
【００２０】
これは、必要ならばマルチバイトの命令長が原因による数個の下方位ビットを捨てる、プログラムカウンタの最下位ビット（ＬＳＢ）から分岐が行われているかを決めることを許容する。
【００２１】
本発明は、第１の様態からなる装置に取り付けられるセルラー電話、セットトップボックス又はハンドヘルド・コンピュータにも適用される。
【００２２】
本発明の第２の様態に従って、命令パス・コプロセッサ（ＩＰＣ）及び中央処理ユニット（ＣＰＵ）における分岐命令を処理する方法は、ＩＰＣが対応する分岐命令に対するターゲットアドレスを計算し、このターゲットアドレスは、ＣＰＵのアドレス状態情報の読み出しを許容し、プログラムカウンタにある現在のアドレス値がＩＰＣのアクティブアドレス範囲内にあるように、先行するステップからの情報に基づいてＣＰＵのプログラムカウンタを調節して、これによりＩＰＣのオーバーフローが避けられることを有する方法により特徴付けられる。
【００２３】
プログラムカウンタは、アドレス値がＩＰＣアクティブアドレス範囲の第１の値からＩＰＣアクティブアドレス範囲の第２の値へ修正されるように調節されてもよい。好ましくは、ＩＰＣアクティブアドレス範囲において、前記第１の値が第２の値よりも高い。好ましくは、前記第２の値がＩＰＣアクティブアドレス範囲の下限に近い。
【００２４】
プログラムカウンタの調節は、固定されるオフセット、好ましくは偶数のアドレス値によって行われてもよい。
【００２５】
ここに記載された特徴の全ては、如何なる上記様態、如何なる組み合わせと結合されるだろう。
【００２６】
【発明の実施の形態】
本発明のこれら及び他の特徴は、以下に記載される実施例を参照から明らかであり、これから説明される。
【００２７】
ＣＰＵ１０のプログラムカウンタ１４とＩＰＣ１６のバイトコードカウンタ１８との間のミスマッチという問題は、図３に示されるように、ＩＰＣ１６にＩＰＣ分岐命令をネイティブ（ＣＰＵ）分岐命令に変換させることによって対処される。これは、以下のような特徴を共に持っている。
−ネイティブ（ＣＰＵ）分岐命令は、場合によって、対応するＩＰＣ分岐命令がＩＰＣ命令内にある又は無いことによって行われるかを暗に示す。
−その上、ネイティブ（ＣＰＵ）分岐命令は、（Ｎは整数であるＮ個の連続した順次命令の後でさえ、プログラムカウンタ１４は、依然としてＩＰＣ範囲の中にあるように）ＣＰＵ１０にそれのプログラムカウンタ１４をＩＰＣ内の安全な位置に設定させる。
【００２８】
ＩＰＣプログラムにおいて、順次命令の最大数はＮを決して越えないとする場合、ＣＰＵ１０のプログラムカウンタ１４は、他のアクションを行うこと無く、ＩＰＣ範囲内の値にリセットする、すなわち余分な分岐命令がＩＰＣ１６によって発生されるべき必要は無く、ＩＰＣ範囲の外で意図することなくＣＰＵ１０が実行することを考慮してプログラミングされる必要も無い。特に、本実施例は、以下の手法によって効果を説明されることができる。
【００２９】
【表１】
2004519796.tif 000003
【００３０】
本実施例において、最も重要なプログラムカウンタビットがＩＰＣ範囲を示すのに取られる、ＰＣ（３１）＝＝“１”を持つアドレスからの全命令フェッチに対し、ＩＰＣ命令は、ＣＰＵ１０に送られるＣＰＵ命令に変換される。順次フローに対し、プログラムカウンタ１４のカウンタは、全命令フェッチに対し、ＣＰＵ命令の大きさ（本実施例では４バイト）で増大する。ＩＰＣ命令は長さが様々なので、ＩＰＣ１６のＢＣＣ１８は、可変数のバイトで増大する。ＩＰＣ分岐命令（本実施例ではＩＰＣ＿ＢＮＥ＃ｘ３０）は、行われるとき、プログラムカウンタ１４の連続値を調べることにより容易に観測される（２つの分岐遅延スロット後の）ＣＰＵ内の分岐となるＣＰＵ分岐命令に変換される。ここでは、分岐が行われたかが分かる（行内にある２つの偶数、又は２つの奇数のワードアドレスが行われた分岐を示すことが分かる）ために、ＰＣ（２）を調べることだけが必要である。（他のプログラミングを必要とせずに）起こる他の事は、前記プログラムカウンタ１４が（偶数又は奇数のワードプログラムカウンタ値１４が行われた分岐を示すことが必要であるかに依存して、本実施例では０ｘ８００００００４又は０ｘ８０００００００である）ＩＰＣ範囲の最初にあるアドレスにリセットされる。
【００３１】
上記手法を達成するために、ＩＰＣ１６は、適切なオフセットを発生させなければならず、これは（３２ビットＰＣ、２４ビットオフセット及び２４ビットＢＣＣに対し）以下のように行われる。
2004519796.tif 000004
ここで、
−”０ｘ８０００００”は、オフセットが負になることを確かめる。（ＩＰＣ範囲のスタートアドレスの方向に）
−ｂａは、関連する分岐命令のＰＣの位置であり、〜ｂａは、−ｂａ、もっと正確に言えば〜ｂａ＝−ｂａ−１の値を殆ど得るような安価で素早いやり方である。
−”＞＞２”は、バイトの代わりにワードで数えるオフセットに必要とされる。
−”０ｘｆｆｆｆｆｅ”は、（行われていない分岐は、アドレスが奇数のワード（すなわち更に１ワード）ずつ増大することを意味する順次フローとなるので）行われた分岐が検出されることができるように、行われた分岐が偶数のワードを常に分岐する。
【００３２】
（２つの遅延スロットを持つ）ＣＰＵ１０において、行われた分岐に対し以下のようなことが起こっている。
2004519796.tif 000005
【００３３】
上述される実施例は、コンパクトなサムスクリューズ命令セットをＡＲＭコードに変換するＩＰＣであるサムスクリューズデコーダ（ＴｈｕｍｂＳｃｒｅｗｓ Ｄｅｃｏｄｅｒ）において実施される。サムスクリューズデコーダは、ＧＳＭ電話器、テレビジョンセットトップボックス及び何メガバイトもの組み込まれたソフトウェアを含むハンドヘルドＰＣのような製品に用いられることができる。コード圧縮技術（及び対応するデコーダ）の場合、ＡＲＭサム（ＡＲＭ Ｔｈｕｍｂ）のような現在主要な処理器と比較される場合、必要とされるメモリサイズ及び関連するコストを減少させることが可能である。同様に、記載される技術は、ＪＡＶＡ（Ｒ）バイトコードをＭＩＰＳコードに変換する他のＩＰＣであるＶＭＩにおいて用いられることができる。
【００３４】
上述したものから、上記実施例の実施がより効果的なバーチャルマシンプログラミングの実施となる。
【００３５】
ＩＰＣを適切に使用し、このＩＰＣ範囲にアドレスを保持する値にアドレス情報を調節することによって、オーバーフローが避けられる。同時に、述べられた問題を解決する従来の方法により必要とされていたような特別な分岐命令の発生が避けられる。
【図面の簡単な説明】
【図１】ＣＰＵ及びメモリセットアップの概略的ブロック図。
【図２】メモリストアにリンクされるＣＰＵ及び命令パス・コプロセッサの概略的ブロック図。
【図３】本発明の第１の実施例の動作におけるステージを示すフローチャート。
【図３】
2004519796.tif 000006
【国際公開パンフレット】
2004519796.tif 000007
2004519796.tif 000008
2004519796.tif 000009
2004519796.tif 000010
2004519796.tif 000011
2004519796.tif 000012
2004519796.tif 000013
2004519796.tif 000014
2004519796.tif 000015
2004519796.tif 000016
2004519796.tif 000017
【国際調査報告】
2004519796.tif 000018
2004519796.tif 000019