(57)【特許請求の範囲】
【請求項１】
データ処理装置であって、前記装置は、
複数のレジスタを含むレジスタバンクを有し、前記レジスタ内に保持されているレジスタオペランドに対して、第１の命令セットの命令内で指定されているように演算を実行するように動作するプロセッサコアと、
第２の命令セットの命令を前記第１の命令セットの命令に対応するトランスレータ出力信号に変換するように動作する命令トランスレータであって、前記第２の命令セットの命令はスタック内に保持されているスタックオペランドに実行される演算を指定する、命令トランスレータと、を含み、
前記命令トランスレータは、前記スタックの一部からのスタックオペランドを保持するために、前記レジスタバンク内の一組のレジスタを割り当てるように動作し、
前記命令トランスレータはレジスタの内容により複数のマッピング状態を有し、それぞれのマッピング状態において、前記レジスタセット内のそれぞれ異なるレジスタが前記スタックの前記部分内のそれぞれ異なる位置からのスタックオペランドを保持し、
前記命令トランスレータは前記第２の命令セットの命令を前記第１の命令セットの命令に変換するための複数の命令テンプレートを使用し、
前記命令テンプレートにおいて、一つ以上のスタックオペランドを含む前記第２の命令セットの命令は前記第１の命令セットの一つ以上の命令に対応し、
前記命令テンプレートの前記第１の命令セットの命令のレジスタフィールドと前記命令トランスレータのマッピング状態に応じて、前記命令トランスレータは前記レジスタセット内に保持されたスタックオペランドを追加または除去する命令を発生し、その発生した命令に応じて前記命令トランスレータはそのマッピング状態を変えることにより、前記第１の命令セットの命令のレジスタオペランドを前記スタックオペランドにマッピングするデータ処理装置。
【請求項２】
請求項１記載の装置であって、前記トランスレータ出力信号は前記第１の命令セットの命令を形成する信号を含む装置。
【請求項３】
請求項１および２のいずれか一項に記載の装置であって、前記トランスレータ出力信号は前記プロセッサコアの動作を制御する制御信号および前記第１の命令セットの命令のデコード時に作り出される整合制御信号を含む装置。
【請求項４】
請求項１，２および３のいずれか一項に記載の装置であって、前記トランスレータ出力信号は前記プロセッサコアの動作を制御する制御信号を含み、前記第１の命令セットの命令のデコード時に作り出される制御信号により指定されないパラメータを指定する装置。
【請求項５】
請求項１から４のいずれか一項に記載の装置であって、前記命令トランスレータは前記レジスタセット内のレジスタ間でスタックオペランドを移動させずに前記レジスタセットに対してスタックオペランドが追加または除去されるようにマッピング状態を提供する装置。
【請求項６】
請求項１から５のいずれか一項に記載の装置であって、前記レジスタセットは前記スタック内の最上部位置からのトップオブスタックオペランドを含む前記スタックの最上部からのスタックオペランドを保持するように動作する装置。
【請求項７】
請求項１から６のいずれか一項に記載の装置であって、前記スタックはさらにスタックオペランドを保持する複数のアドレス可能なメモリ場所を含む装置。
【請求項８】
請求項７記載の装置であって、スタックオペランドは前記レジスタセットから前記複数のアドレス可能なメモリ場所へオーバフローする装置。
【請求項９】
請求項７および８のいずれか一項に記載の装置であって、前記複数のアドレス可能なメモリ場所内に保持されたスタックオペランドは使用する前に前記レジスタセット内にロードされる装置。
【請求項１０】
請求項１から９のいずれか一項に記載の装置であって、前記命令トランスレータは、
ハードウェア変換論理、
コンピュータ装置を制御する命令解釈プログラムコード、
コンピュータ装置を制御する命令コンパイルプログラムコード、およびハードウェアコンパイル論理、
の一つ以上を含む装置。
【請求項１１】
請求項１から１０のいずれか一項に記載の装置であって、前記命令トランスレータは前記レジスタセット内に保持されたいくつかのスタックオペランドを示す第１の複数の状態ビットを含む装置。
【請求項１２】
請求項６及び請求項５，７から１１のいずれか一項に記載の装置であって、前記命令トランスレータは前記レジスタセット内のどのレジスタが前記トップオブスタックオペランドを保持するかを示す第２の複数の状態ビットを含む装置。
【請求項１３】
請求項１から１２の前記いずれか一項に記載の装置であって、前記第２の命令セットはＪａｖａ（登録商標）仮想マシン命令セットである装置。
【請求項１４】
複数のレジスタを含むレジスタバンクを有し、前記レジスタ内に保持されているレジスタオペランドに対して、第１の命令セットの命令内に指定されているように演算を実行するように動作するプロセッサコアを使用するデータ処理方法であって、前記方法は、
一つ以上のスタックオペランドを含む第２の命令セットの命令が、前記第１の命令セットの一つ以上の命令に対応する複数の命令テンプレートを使用して、前記第２の命令セットの命令を前記第１の命令セットの命令に対応するトランスレータ出力信号に変換するステップであって、前記第２の命令セットの命令はスタック内に保持されているスタックオペランドに対して実行される演算を指定する、ステップと、
前記レジスタバンク内の一組のレジスタを前記スタックの一部からのスタックオペランドを保持するために割り当てるステップと、
レジスタの内容により複数のマッピング状態の１つを選択するステップであって、それぞれのマッピング状態において、前記レジスタセット内のそれぞれ異なるレジスタが前記スタックの前記部分内のそれぞれ異なる位置からのスタックオペランドを保持する、ステップと、
前記第１の命令セットの命令のレジスタオペランドを前記スタックオペランドにマッピングするために、前記命令テンプレートの前記第１の命令セットの命令のレジスタフィールドと前記マッピング状態に応じて、前記レジスタセット内に保持されたスタックオペランドを追加または除去する命令を発生し、その発生した命令に応じてマッピング状態を変えるステップと、
を含む方法。
【請求項１５】
請求項１４記載の方法を実施するようにコンピュータを制御するコンピュータプログラムが記録されたコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
（レジスタ内へのスタックオペランドの格納）
本発明は一般的にデータ処理システムに関する。特に、本発明は第２の命令セットの命令を第１の命令セットの命令に変換するように動作する命令トランスレータと共に使用される第１の命令セットの命令を実行する、レジスタバンクを有するプロセッサコアを有するデータ処理システムに関する。
【０００２】
多数の命令セットをサポートするデータ処理システムを提供することが知られている。このようなシステムの例は１６ビットＴｈｕｍｂ命令および３２ビットＡＲＭ命令の両方を実行することができる、英国ケンブリッジのＡＲＭ社製Ｔｈｕｍｂイネーブルプロセッサである。Ｔｈｕｍｂ命令およびＡＲＭ命令は共に命令内のレジスタフィールドにより指定されるプロセッサコアのレジスタ内に格納されたオペランドに対して演算（数学的操作、ロード、ストア等）を実行する。プロセッサコアのレジスタリソースを効率的に使用して迅速に実行する命令ストリームを作り出すことができるコンパイラの開発に相当な努力が費やされている。
【０００３】
命令セットのもう一つのクラスはスタック方法を使用して作用するオペランドを格納および操作するものである。このようなシステム内のスタックは特定の順序でスタック内に入れられ次に逆順でスタックから取り出される一系列のオペランド値を格納することができる。したがって、スタック内に入れられる最後のオペランドは典型的にスタックから取り出される最初のオペランドでもある。スタックベースプロセッサはスタック内の現在の“最上部”位置を示すスタックポインターと共にスタックオペランドを書き込みかつ読み出すことができる記憶要素ブロックを提供することができる。スタックポインターはスタック内に格納される最終スタックオペランドでありそこからスタックへの他のアクセスを参照することができるスタックメモリ内の基準点を指定する。このようなスタックベースプロセッサシステム内でスタックハードウェアリソースを効率的に利用することができるコンパイラを作り出すのにも相当な努力が費やされている。
【０００４】
スタックベース命令セットの特定の例はサンマイクロシステムズ社により規定されたＪａｖａ仮想マシン命令セットである。Ｊａｖａ(登録商標）プログラミング言語はＪａｖａで書かれたコンピュータソフトウェアを多くの異なる処理ハードウェアプラットフォーム上でＪａｖａソフトウェアを変えずに実行することができる環境を提供しようとするものである。
【０００５】
データ処理システムをできるだけ迅速に制御するコンピュータソフトウェアを実行できなければならないことがデータ処理システムにおける不変の目標である。コンピュータソフトウェアを実行できる速度を増すことができる方策は非常に望ましい。
【０００６】
命令セットと他の背景情報間の既知の変換システムの例は下記の文献で見つけることができる。US-A-5,805,895;US-A-3,955,180;US-A-5,970,242; US-A-5,619,665;US-A-5,826,089;US-A-5,925,123;US-A-5,875,336;US-A-5,937,193;US-A-5,953,520;US-A-6,021,469;US-A-5,568,646;US-A-5,758,115;US-A-5,367,685;IBM Technical Disclosure Bulletin, March 1988, pp308-309, “System/370 Emulator Assist Processor For a Reduced Instruction Set Computer”; IBM Technical Disclosure Bulletin, July 1986, pp548-549, “Full Function Series/1 Instruction Set Emulator”; IBM Technical Disclosure Bulletin, March 1994, pp605-606, “Real-Time CISC Architecture HW Emulator On A RISC Processor”; IBM Technical Disclosure Bulletin, March 1998, p272, “Performance Improvement Using An EMULATION Control Block”; IBM Technical Disclosure Bulletin, January 1995, pp537-540, “Fast Instruction Decode For Code Emulation on Reduced Instruction Set Computer/Cycles Systems”; IBM Technical Disclosure Bulletin, February 1993, pp231-234, “High Performance Dual Architecture Processor”; IBM Technical Disclosure Bulletin, August 1989, pp40-43, “System/370 I/O Channel Program Channel Command Word Prefetch”; IBM Technical Disclosure Bulletin, June 1985, pp305-306, “Fully Microcode-Controlled Emulation Architecture”; IBM Technical Disclosure Bulletin, March 1972, pp3074-3076, “Op Code and Status Handling For Emulation”; IBM Technical Disclosure Bulletin, August 1982, pp954-956, “On-Chip Microcoding of a Microprocessor With Most Frequently Used Instructions of Large System and Primitives Suitable for Coding Remaining Instructions”; IBM Technical Disclosure Bulletin, April 1983, pp5576-5577, “Emulation Instruction”;the book ARM System Architecture by S Furber; the book Computer Architecture: A Quantitative Approach by Hennessy and Patterson; および the book The Java Virtual Machine Specification by Tim Lindholm and Frank Yellin 1st and 2nd Editions.
【０００７】
一側面から見ると、本発明はデータ処理装置を提供し、前記装置は、
複数のレジスタを含むレジスタバンクを有し、前記レジスタ内に保持されたレジスタオペランドに対して、第１の命令セットの命令内に指定されているように演算を実行するように動作するプロセッサコアと、
第２の命令セットの命令を前記第１の命令セットの命令に対応する出力信号に変換するように動作する命令トランスレータであって、前記第２の命令セットの命令はスタック内に保持されたスタックオペランドに対して実行される演算を指定する命令トランスレータと、を含み、
前記命令トランスレータは、前記スタックの一部分からのスタックオペランドを保持するために、前記レジスタバンク内の一組のレジスタを割り当てるように動作することができ、
前記命令トランスレータは、前記レジスタセット内の異なるレジスタが前記スタックの前記部分内の異なる位置からの各スタックオペランドを保持する、複数のマッピング状態を有し、
前記命令トランスレータは前記レジスタセット内に保持されたスタックオペランドを追加または除去する演算に応じてマッピング状態間で変化するように動作することができる。
【０００８】
本発明は第２のスタックベース命令セットをプロセッサコアに対して実行する第１のレジスタベース命令セットに変換することにより、第２のスタックベース命令セットの命令を実行する。本発明はレジスタバンク内の一組のレジスタをスタックの一部分からのスタックオペランドを保持するために提供する。それによりプロセッサコア内のスタックオペランドが有効にキャッシュされて実行速度を高める。さらに、スタックオペランドに割り当てられたレジスタをより効率的に使用するために、命令トランスレータは異なるレジスタがキャッシュされたスタック部分内の異なる位置からの各スタックオペランドを保持する複数の異なるマッピング状態を有する。マッピング状態は、スタック内のスタックポインタのそれと同様な関数を与えるように、スタックに使用されるレジスタセット内に保持されたスタックオペランドを追加または除去する演算に応じて変化される。この方法によりレジスタベースプロセッサのレジスタ内にスタック状記憶装置を設けるのに必要な処理オーバヘッドが低減される。
【０００９】
本発明の好ましい実施例では、前記命令トランスレータは前記レジスタセット内のレジスタ間でスタックオペランドを移動させずにスタックオペランドが前記レジスタセットに対して追加または除去されるようにマッピング状態を与える。
【００１０】
この好ましい特徴として、レジスタ内に格納された後で任意のスタックオペランドをこれらのレジスタ間で移動させる必要性を回避するためにマッピング状態が使用され、スタック内の特定の位置を有するスタックオペランドが予め定められたレジスタ内で常に見つかるシステムを提供するために蒙る著しい処理オーバヘッドが回避される。
【００１１】
レジスタセットはスタック内の任意の位置からのスタックオペランドを保持できることが理解されると思われるが、レジスタセットはスタックオペランドの最上部を含むスタックの最上部を格納することが非常に望ましい。スタックベース処理システムはしばしばスタックに最近格納されたばかりのスタックオペランドにアクセスすることがあり、したがって、これらのスタックオペランドを迅速にアクセスできるレジスタ内に維持することが非常に有利である。さらに、トップオブスタックオペランドはスタックオペランドがスタックに対してプッシュまたはポップされるとしばしば変化するため、トップオブスタックオペランドをレジスタ内に保持することにより命令トランスレータの異なるマッピング状態間を移動する能力は非常に有利とされる。
【００１２】
スタックのレジスタ内に保持されない部分にはさまざまな異なるハードウェア構成を提供することができるが、好ましい実施例では、スタックはスタックオペランドを保持する複数のアドレス可能なメモリ場所を含んでいる。
【００１３】
アドレス可能なメモリはしばしばこのようなアドレス可能なメモリ内のデータへの高速アクセスを可能とする精巧なキャッシュメモリ等の機構と一緒に処理システム内で見つかる。
【００１４】
スタックオペランドの格納に専念できるプロセッサコアのレジスタは、第２の命令セットから第１の命令セットへの変換の管理および、スタックベース処理システム内で見つかることがある、変数ポインタまたは定数プールポインター等の、他の制御値のエミュレーション等の機能に対する他のレジスタを設ける必要性により制限される。このような状況において、スタックオペランド記憶装置のために設けられたレジスタセットからオーバフローするスタックオペランドはアドレス可能なメモリ内に保持することができる。
【００１５】
補足的に、多くの高速レジスタベース処理システムは、比較的長いメモリアクセスレーテンシ等により生じることがある問題を回避するために、レジスタ内に保持されたデータ値だけに対するデータ処理操作を行うように構成される。このような状況において、本発明はスタックオペランドが常に使用する前にレジスタセット内にロードされるようにする。
【００１６】
命令トランスレータは簡便に命令テンプレートを使用して第２の命令セットと第１の命令セット間の変換を行うように構成することができる。このような命令テンプレートは第２の命令セットの命令と第１の命令セットの典型的にはいくつかの命令との間で達成することができるマッピングの性質に有利な柔軟性を与える。
【００１７】
命令トランスレータは広範な形式をとることができることが理解される。特に、命令トランスレータは第２の命令セットを変換またはコンパイルする特殊目的ハードウェアまたは同様な変換またはコンパイル機能を実施するようにプロセッサコアを制御するソフトウェアとして提供することができる。混合した方法も有効に利用することができる。ソフトウェアインタプリタの場合には、トランスレータ出力信号はソフトウェアインタプリタにより作り出された第１の命令セットの変換された命令とすることができる。
【００１８】
特に、第２の命令セット内の簡単で頻繁に生じる命令の高速変換を達成するハードウェアトランスレータを提供することができ、このような変換を提供するハードウェアオーバヘッドが実際的すなわち効率的ではないような第２の命令セットの複雑なまたは頻繁には生じない命令に対してはソフトウェア変換を使用することができる。
【００１９】
命令トランスレータのマッピング状態を制御することができる特に好ましい方法は、レジスタセット内に保持されたスタックオペランド数を示す複数の状態ビットおよびどのレジスタがトップオブスタックオペランドを保持しているかを示す複数の状態ビットを提供することである。
【００２０】
第２の命令セットは多くの異なる形式をとることができることが理解されるであろうが、本発明は第２の命令セットがＪａｖａ仮想マシン命令セットである実施例において特に有用である。
【００２１】
もう一つの側面から見ると、本発明は複数のレジスタを含むレジスタバンクを有し第１の命令セットの命令内で指定された前記レジスタ内に保持されたレジスタオペランドに対して演算を実行するように動作するプロセッサコアを使用するデータ処理方法を提供し、前記方法は、
第２の命令セットの命令を前記第１の命令セットの命令に対応するトランスレータ出力信号に変換するステップであって、前記第２の命令セットの命令はスタック内に保持されたスタックオペランドに対して実行される演算を指定するステップと、
前記レジスタバンク内の一組のレジスタを前記スタックの一部分からのスタックオペランドを保持するために割り当てるステップと、
前記レジスタセット内の異なるレジスタが前記スタックの前記部分内の異なる位置からの各スタックオペランドを保持する複数のマッピング状態の中の一つを採用するステップと、
前記レジスタセット内に保持されたスタックオペランドを追加または除去する演算に応じてマッピング状態間で変化するステップと、を含んでいる。
【００２２】
本発明は前記した技術に従って汎用コンピュータを制御するコンピュータプログラムを格納するコンピュータプログラムプロダクトも提供する。コンピュータプログラムプロダクトはフロッピー（登録商標）ディスク、コンパクトディスクまたはコンピュータネットワークからダウンロードされるコンピュータファイル等の多様な形をとることができる。発明の実施例は、例として、図を参照して記述される。
【００２３】
図１はＡＲＭプロセッサベースシステムで使用するのに適切なタイプの命令パイプライン３０の第１の例を示す。命令パイプライン３０はフェッチステージ３２、ネーティブ（ｎａｔｉｖｅ）命令（ＡＲＭ／Ｔｈｕｍｂ命令）デコードステージ３４、実行ステージ３６、メモリアクセスステージ３８およびライトバックステージ４０を含んでいる。実行ステージ３６、メモリアクセスステージ３８およびライトバックステージ４０は実質的に従来のものである。フェッチステージ３２の下流、およびネーティブ命令デコードステージ３４の上流には、命令トランスレータステージ４２が設けられている。命令トランスレータステージ４２は可変長のＪａｖａバイトコード命令をネーティブＡＲＭ命令に変換する有限状態機械である。命令トランスレータステージ４２はマルチステップ演算が可能であり、単独Ｊａｖａバイトコード命令が命令パイプライン３０の残りに沿って送られてＪａｖａバイトコード命令により指定された演算を実施するＡＲＭ命令系列を発生することができる。簡単なＪａｖａバイトコード命令はそれらの演算を実施するのに単独のＡＲＭ命令しか必要とせず、より複雑なＪａｖａバイトコード命令、または周囲のシステム状態がそのように指令する状況では、Ｊａｖａバイトコード命令により指定された演算を実施するのにいくつかのＡＲＭ命令を必要とすることがある。このマルチステップ演算はフェッチステージ３２の下流で行われ、したがって、メモリシステムから多数の変換されたＡＲＭ命令やＪａｖａバイトコードをフェッチするのに電力は費やされない。Ｊａｖａバイトコード命令は従来の方法で、Ｊａｖａバイトコード変換操作をサポートするためにメモリシステムに追加拘束が加えられないように、メモリシステム内に格納される。
【００２４】
例示されているように、命令トランスレータステージ４２にはバイパスが設けられている。命令変換モードで動作していない時は、命令パイプライン３０は命令トランスレータステージ４２をバイパスして本質的に変更されていない方法で動作してネーティブ命令のデコーディングを行うことができる。
【００２５】
命令パイプライン３０において、命令トランスレータステージ４２は対応するＡＲＭ命令を完全に表わしマルチプレクサを介してネーティブ命令デコーダ３４に通されるトランスレータ出力信号を発生するものとして例示されている。命令トランスレータ４２はネーティブ命令デコーダ３４に通すことができるいくつかの特別な制御信号も発生する。ネーティブ命令エンコーディング内のビットスペース拘束により、ネーティブ命令により指定することができるオペランドの範囲が制限されることがある。これらの制限は必ずしも非ネーティブ命令により共有されない。特別な制御信号はメモリ内に格納されたネーティブ命令内に指定することができない非ネーティブ命令から引き出される信号を指定する追加命令を通すために与えられる。例として、ネーティブ命令はその中の即値オペランドフィールドとして使用する比較的少数のビットしか与えることができず、非ネーティブ命令は拡張された範囲を与えることができ、それは追加制御信号を使用してやはりネーティブ命令デコーダ３４に通される変換されたネーティブ命令の外部のネーティブ命令デコーダ３４に即値オペランドの拡張部を通すように開発することができる。
【００２６】
図２にもう一つの命令パイプライン４４を示す。この例では、システムには非ネーティブ命令デコーダ５０だけでなく二つのネーティブ命令デコーダ４６，４８が設けられている。非ネーティブ命令デコーダ５０はネーティブ命令をサポートするために設けられる実行ステージ５２、メモリステージ５４およびライトバックステージ５６により指定することができる操作において拘束される。したがって、非ネーティブ命令デコーダ５０は非ネーティブ命令をネーティブ操作（単独ネーティブ操作または一連のネーティブ操作とすることができる）に有効に変換し、次に適切な制御信号を実行ステージ５２に送ってこれら一つ以上のネーティブ操作を実施しなければならない。この例では、非ネーティブ命令デコーダはネーティブ命令を形成する信号は発生せず、ネーティブ命令（または拡張ネーティブ命令）操作を指定する制御信号を与えることが理解できる。発生された制御信号はネーティブ命令デコーダ４６，４８により発生された制御信号と一致しないことがある。
【００２７】
動作において、フェッチステージ５８によりフェッチされた命令は例示されているデマルチプレクサを使用する特定の処理モードに応じて命令デコーダ４６，４８または５０の中の一つに選択的に与えられる。
【００２８】
図３に命令パイプラインのフェッチステージをより詳細に例示する。フェッチ論理６０がメモリシステムから固定長命令語をフェッチして命令語バッファ６２に与える。命令語バッファ６２は現在の命令語と次の命令語の両方を格納できるように二面を有するスイングバッファである。現在の命令語が完全にデコードされており次の命令語までデコーディングが進行している時は常に、フェッチ論理６０は前の現在命令語をメモリからフェッチされる次の命令語と置換するように働く、すなわち、スイングバッファの各面が連続的に格納する命令語をインターリーブ式に２だけ増分する。
【００２９】
図示する例では、Ｊａｖａバイトコード命令の最大命令長は３バイトである。したがって、３つのマルチプレクサが設けられそれらは選択され命令トランスレータ６４に供給されるワードバッファ６２の各側内の任意の３つの隣接バイトをイネーブルする。ワードバッファ６２および命令トランスレータ６４にはネーティブ命令がフェッチされデコードされる時に使用するバイパス６６も設けられている。
【００３０】
各命令語は一度メモリからフェッチされてワードバッファ６２内に格納されることが理解できる。単独命令語は命令トランスレータ６４がＪａｖａバイトコードのＡＲＭ命令への変換を実施する時にそこから読み出される多数のＪａｖａバイトコードを有することがある。多数のメモリシステムリードを必要とせずまた命令変換操作が命令パイプライン内に限定される時にメモリリソースを消耗したりメモリシステムに他の拘束を課すことなくネーティブ命令の可変長変換系列を発生することができる。
【００３１】
プログラムカウンタ値が現在変換されている各Ｊａｖａバイトコードに関連づけられる。このプログラムカウンタ値は、必要であれば、各ステージが処理している特定のＪａｖａバイトコードに関する情報を使用することができるようにパイプラインのステージに沿って通される。複数のＡＲＭ命令操作の系列に変換されるＪａｖａバイトコードに対するプログラムカウンタ値は、その系列内の最終ＡＲＭ命令操作が実行開始されるまでは増分されない。有利に実行されているメモリ内の命令を直接指示し続けるようにプログラムカウンタ値を維持することにより、デバッギングおよび分岐目標計算等のシステムの他の側面が簡単化される。
【００３２】
図４は命令バッファ６２からの可変長Ｊａｖａバイトコード命令の読出しを略示している。第１のステージにおいて、１の長さを有するＪａｖａバイトコード命令が読み出されデコードされる。次のステージは３バイト長でありメモリからフェッチされている二つの隣接する命令語間にまたがるＪａｖａバイトコード命令である。これらの両方の命令語が命令バッファ６２内に存在し、そのため命令デコーディングおよび処理はフェッチされた命令語間にこのように可変長命令がまたがることにより遅延されることはない。三つのＪａｖａバイトコードが命令バッファ６２から読み出されていると、既に存在している次の命令語からのＪａｖａバイトコードのデコーディングにより後続処理が継続する時に、前にフェッチされた命令語のリフィルを開始することができる。
【００３３】
図４に示す最終ステージは読み出される第２の３バイトコード命令である。これも命令語間にまたがっている。先行する命令語がそのリフィルをまだ完了していない場合には、適切な命令語が命令バッファ６２内に格納されるまで命令の読出しはパイプラインストールだけ遅延されることがある。ある実施例では、この種の挙動によりパイプラインは決してストールしないようにされる。大概のＪａｖａバイトコードは例示された例よりも短いため特定の例は比較的まれにしか生ぜず、したがって、共に命令語間にまたがる二つの連続的デコードは比較的まれであることが理解できる。Ｊａｖａバイトコードが読み出される前に命令語が適切にリフィルされているかどうかを知らせることができるような方法で、有効信号を命令バッファ６２内の各命令語と関連づけることができる。
【００３４】
図５はプロセッサコア１０４およびレジスタバンク１０６を含むデータ処理方法１０２を示す。命令トランスレータ１０８が命令パス内に設けられてＪａｖａ仮想マシン命令をネーティブＡＲＭ命令（またはそれに対応する制御信号）に変換し、それは次にプロセッサコア１０４に供給することができる。ネーティブＡＲＭ命令がアドレス可能なメモリからフェッチされる場合には命令トランスレータ１０８はバイパスすることができる。アドレス可能なメモリはさらにオフチップＲＡＭメモリを有するキャッシュメモリ等のメモリシステムとすることができる。命令トランスレータ１０８をメモリシステム、特にキャッシュメモリ、の下流に設けることによりメモリシステムの記憶容量を効率的に使用することができ、それは変換を要する稠密な命令がメモリシステム内に格納されプロセッサコア１０４に通される直前にネーティブ命令に拡張できるためである。
【００３５】
この例では、レジスタバンク１０６は１６の汎用３２ビットレジスタを含み、その内の四つがスタックオペランドの格納に使用するために割り当てられる、すなわちスタックオペランドを格納するレジスタセットはレジスタＲ０，Ｒ１，Ｒ２およびＲ３である。
【００３６】
レジスタセットは空、スタックオペランドで一部充満またはスタックオペランドで完全充満とすることができる。現在トップオブスタックオペランドを保持している特定のレジスタはレジスタセット内のいずれかのレジスタとすることができる。したがって、全レジスタが空で各々が各異なる数のスタックオペランドに対応する四つの状況の四つのグループがレジスタセット内に保持されておりかつトップオブスタックオペランドを保持する異なるレジスタを有する場合には、命令トランスレータは一つの状況に対応する１７の異なるマッピング状態の中のいずれか一つの状態にあることが理解できる。表１は命令トランスレータ１０８に対する状態マッピングの１７の異なる状態を示す。スタックオペランド記憶装置に対して異なる数のレジスタが割り当てられるか、あるいは特定のプロセッサコアがレジスタ内に保持されたデータ値を操作できる途中で有することがある拘束の結果、マッピング状態は特定のインプリメンテーションに応じて非常に著しく変動することがあり、表１は一つの特定のインプリメンテーションの例として与えられるに過ぎないことが理解できる。
【表１】
0004833499.tif 000002
【００３７】
表１内で状態値の最初の３ビットはレジスタセット内の非空レジスタ数を示すことが観察される。状態値の最後の２ビットはトップオブスタックオペランドを保持しているレジスタのレジスタ番号を示す。このようにして、ハードウェアトランスレータまたはソフトウェアトランスレータの動作を制御するのに状態値を容易に使用してレジスタセットの現在の占有度およびトップオブスタックオペランドの現在位置を考慮することができる。
【００３８】
図５に示すように、ＪａｖａバイトコードＪ１，Ｊ２，Ｊ３のストリームがアドレス可能なメモリシステムから命令トランスレータ１０８に供給される。次に、命令トランスレータ１０８は、他の変数だけでなく、入力Ｊａｖａバイトコードおよび命令トランスレータ１０８の瞬時マッピング状態に応じてＡＲＭ命令（または、おそらくは拡張された等価制御信号）のストリームを出力する。図示する例では、ＪａｖａバイトコードＪ１がＡＲＭ命令Ａ1１およびＡ1２にマッピングされる。ＪａｖａバイトコードＪ２はＡＲＭ命令Ａ2１，Ａ2２およびＡ2３にマッピングされる。最後に、ＪａｖａバイトコードＪ３がＡＲＭ命令Ａ3１にマッピングされる。各Ｊａｖａバイトコードは入力として一つ以上のスタックオペランドを必要とすることがあり、出力として一つ以上のスタックオペランドを作り出すことができる。この例におけるプロセッサコア１０４はロード／ストアアーキテクチュアを有するＡＲＭプロセッサコアでありレジスタ内に保持されたデータ値しか操作できないため、命令トランスレータ１０８は、必要ならば、任意の所要スタックオペランドを操作される前にレジスタセット内にフェッチするかまたはレジスタセット内の任意の現在保持されているスタックオペランドをアドレス可能なメモリに格納して発生することができる結果スタックオペランド用の場所を空けるＡＲＭ命令を発生するようにされる。各Ｊａｖａバイトコードは、Ｊａｖａ  ｏｐｃｏｄｅを表わすＡＲＭ命令を実行する前に入手できなければならないレジスタセット内の空レジスタ数を示す“require empty”値と共に、それを実行する前にレジスタセット内に存在しなければならないスタックオペランド数を示す関連する“require full”値を有すると見なすことができることが理解できる。
【００３９】
表２は初期マッピング状態値、require full値、最終状態（final state）値および関連するＡＲＭ命令間の関係を示す。初期状態値および最終状態値は表１に示すマッピング状態に対応する。命令トランスレータ１０８はそれが変換している特定のＪａｖａバイトコード（opcode）に関連するrequire full値を決定する。命令トランスレータ（１０８）は、それが有する初期マッピング状態に応じて、Ｊａｖａバイトコードを実行する前にレジスタセット内にさらにスタックオペランドをロードする必要があるか否かを決定する。表１は、このようなスタックキャッシュ操作の後で採用される最終マッピング状態だけでなく関連するＡＲＭ命令（ＬＤＲ命令）を使用してレジスタセット内にスタックオペランドがロードされる必要があるかどうかを決定するために一緒に適用されるＪａｖａバイトコードのrequire full値に適用されるテストと共に初期状態を示す。実際上、Ｊａｖａバイトコードを実行する前に二つ以上のスタックオペランドをレジスタセット内にロードする必要がある場合には、多数のマッピング状態遷移が生じ、各々がレジスタセットの中の一つのレジスタ内にスタックオペランドをロードする関連するＡＲＭ命令を有する。異なる実施例では、単独状態遷移内に多数のスタックオペランドをロードすることができ、したがって、表２に示すものを越えてマッピング状態を変化させることができる。
【表２】
0004833499.tif 000003
【００４０】
表２からお判りのように、スタックオペランドを格納するレジスタセット内にロードされた新しいスタックオペランドは新しいトップオブスタックオペランドを形成し、これは初期状態に応じてレジスタセット内の特定の一つのレジスタ内にロードされる。
【００４１】
表３は同様に、初期状態（initial state）、require empty値、最終状態（final state）およびレジスタセット内のレジスタを空にして、Ｊａｖａバイトコードが実行される前に初期状態があたえられる必要のあることを特定のＪａｖａバイトコードのrequire empty値が示す場合、初期状態と最終状態間を移動する関連するＡＲＭ命令間の関係を示す。
【表３】
0004833499.tif 000004
【００４２】
前記したシステム例では、require fullおよびrequire empty状態は互いに排他的である、すなわち命令トランスレータが変換しようと試みている特定のＪａｖａバイトコードに対して任意所与の時間にrequire fullまたはrequire empty状態の一方しか真とはならないことが理解できる。命令トランスレータ１０８により使用される命令テンプレートは、ハードウェア命令トランスレータ１０８によりサポートするように選択される命令と共に、この互いに排他的である要求条件を満たすことができるように選択される。この要求条件が適当でなければ、所望により実行結果がレジスタ内に保持されるのを許すＪａｖａバイトコードを表わす命令の実行後に十分な空レジスタを利用することができないレジスタセット内にいくつかの入力スタックオペランドが存在することを特定のＪａｖａバイトコードが要求した状況が生じることがある。
【００４３】
所与のＪａｖａバイトコードはその実行時に消耗されるスタックオペランド数と発生されるスタックオペランド数間のバランスを表わす全体正味スタックアクションを有することが理解できる。消耗されるスタックオペランド数は実行前要求条件であり発生されるスタックオペランド数は実行後要求条件であるため、各Ｊａｖａバイトコードに関連するrequire fullおよびrequire empty値は正味の全体アクション自体が満たされてもそのバイトコードの実行前に満たされなければならない。表４は初期状態、全体スタックアクション、最終状態およびレジスタ使用とトップオブスタックオペランド（ＴＯＳ）の相対位置の変化との間の関係を示す。Ｊａｖａバイトコードのrequire fullおよびrequire empty値に応じて所与のＪａｖａバイトコードに対する予条件を確立するために、表２または表３に示す一つ以上の状態遷移を表４に示す状態遷移を実施する前に実施する必要があることがある。
【表４】
0004833499.tif 000005
【表５】
0004833499.tif 000006
【００４４】
表２、表３および表４に示す状態および条件間の関係は結合して単独状態遷移表または状態図とすることができるが、判り易くするために別々に示されていることが理解できる。
【００４５】
異なる状態、条件、および正味のアクション間の関係を使用して命令トランスレータ１０８の動作のこの側面を制御するためのハードウェア状態機械（有限状態機械形状の）を定義することができる。あるいは、これらの関係をソフトウェアまたはハードウェアとソフトウェアの組合せによりモデル化することができる。
【００４６】
サブセットの各Ｊａｖａバイトコードについて、表２，３および４と共に使用することができるそのバイトコードに対する関連するrequire full，require emptyおよびスタックアクション値を示す可能なＪａｖａバイトコードのサブセットの例を下記に示す。
0004833499.tif 000007
0004833499.tif 000008
【００４７】
上記した各Ｊａｖａバイトコード命令に対する命令テンプレートの例も下記に示す。示された命令は各Ｊａｖａバイトコードの所要の挙動を実現するＡＲＭ命令である。レジスタフィールド“ＴＯＳ-３”，“ＴＯＳ-２”，“ＴＯＳ-１”，“ＴＯＳ”，“ＴＯＳ＋１”および“ＴＯＳ＋２”は現在採用されているマッピング状態に応じて表１から読み出される適切なレジスタ指定子と置換することができる。“ＴＯＳ＋ｎ”という表示はトップオブスタックオペランドを格納しているレジスタから開始してレジスタセット内の最初のレジスタにラップされるレジスタセットの終点に達するまでレジスタ値を上向きにカウントするトップオブスタックスタックオペランドを現在格納しているレジスタよりも上の第Ｎ番レジスタを示す。
0004833499.tif 000009
【００４８】
前記した技術に従ってハードウェア変換ユニット１０８により実行される単独Ｊａｖａバイトコードの実行シーケンス例を下記に示す。実行シーケンスは実行される命令に応じて状態系列中を進行し、各状態遷移に対して実施されるアクションの結果としてＡＲＭ命令系列を発生し、全体がＪａｖａバイトコードをＡＲＭ命令系列に変換する効果を有する初期状態に関して示される。
0004833499.tif 000010
【００４９】
図６はさらにいくつかのＪａｖａバイトコード命令の異なる実行方法を示す。図６の最上部はＡＲＭ命令系列およびｉａｄｄ  Ｊａｖａバイトコード命令の実行時に生じるマッピング状態およびレジスタ内容の変化を示す。初期マッピング状態は空であるレジスタセット内の全レジスタに対応する０００００である。発生される最初の二つのＡＲＭ命令は二つのスタックオペランドをスタックオペランドを格納するレジスタ内にＰＯＰするように働きトップオブスタック“ＴＯＳ”レジスタはＲ０である。第３のＡＲＭ命令は、レジスタＲ１内に予め保持されたスタックオペランドを消耗しながら、実際に加算演算を実施して結果をレジスタＲ３内に書き込み（今度はそれがトップオブスタックオペランドとなる）−１の全体スタックアクションを作り出す。
【００５０】
次に、処理は各々が二つのスタックオペランドのロングロードを表わす二つのＪａｖａバイトコードの実行に進む。第１のＪａｖａバイトコードに対する２のrequire empty条件は即座に満たされ、したがって、二つのＡＲＭ  ＬＤＲ命令を発行して実行することができる。第１のロングロードＪａｖａバイトコードの実行後のマッピング状態は０１１０１である。この状態において、レジスタセットは単独空レジスタしか含んでいない。次のＪａｖａバイトコードロングロード命令は満たされない２のrequire empty値を有し、したがって、要求される第１のアクションはＡＲＭ  ＳＴＲ命令を使用してアドレス可能なメモリにスタックオペランドをＰＵＳＨすることである。それによりレジスタセット内のレジスタが解放されて新しいスタックオペランドにより使用され、それは次に下記の二つのＬＤＲ命令の一部としてロードすることができる。前記したように、命令遷移はハードウェア、ソフトウェア、または両者の組合せにより達成することができる。前記した技術に従って発生されるソフトウェアインタプリタの例のサブセクションを下記に示す。
0004833499.tif 000011
0004833499.tif 000012
0004833499.tif 000013
0004833499.tif 000014
【００５１】
図７はトップオブスタック位置で開始するデータの二つの語により指定されるデータアレイ内からのデータの二つの語を読み出す機能を有するＪａｖａバイトコード命令“laload”を示す。データアレイから読み出された二つの語は次にそれらの位置を指定した二つの語と置換され最上部スタックエントリを形成する。
【００５２】
アレイおよびデータのアレイ内の位置を指定する入力スタックオペランドをオーバライトすることなくアレイからフェッチされるスタックオペランドの一時記憶装置に対する十分なレジスタスペースを“laload”命令が有するように、Ｊａｖａバイトコード命令は２のrequire empty値を有するように指定される、すなわち“laload”命令をエミュレートするＡＲＭ命令を実行する前にスタックオペランド記憶装置専用のレジスタバンク内の二つのレジスタ空にしなければならない。このＪａｖａバイトコードに遭遇する時に二つの空のレジスタがなければ、ストア演算（ＳＴＲｓ）を実施して現在レジスタ内に保持されているスタックオペランドをメモリにＰＵＳＨ outして一時記憶装置に対する必要なスペースを作り命令に対するrequire empty値を満たすことができる。
【００５３】
データの位置がアレー位置およびそのアレー内のインデクスにより二つの別々のスタックオペランドとして指定されるため、命令は２のrequire full値も有する。図はrequire fullおよびrequire empty条件を既に満たし“０１００１”のマッピング状態を有する第１の状態を示す。“laload”命令は三つのＡＲＭ命令に分解される。第１の命令はスタックオペランドのレジスタキャッシュとして作用するレジスタセットの外部のスペア作動レジスタ内にアレー基準をロードする。次に、第２の命令がアレー内のインデクス値と共にこのアレー基準を使用してスタックオペランド記憶装置専用の空レジスタの一つ内に書き込まれる第１のアレー語にアクセスする。
【００５４】
最初の二つのＡＲＭ命令の実行後に、システムのマッピング状態は変化せずトップオブスタックポインタはその開始位置に留まり、空と指定されたレジスタはまだそのように指定されているということは重要である。
【００５５】
ＡＲＭ命令列内の最終命令は第２のアレー語をスタックオペランドを格納するレジスタセット内にロードする。これは最終命令であるため、その間に割込みが生じなければ、それは命令が完了するまで使える状態にされず、そのためスタックオペランドを格納するレジスタのマッピング状態への変化により入力状態をこの命令で変えるのが安全である。この例では、マッピング状態は“０１０１１”に変化しそれは新しいトップオブスタックポインタを第２のアレー語に配置してアレー基準およびインデクス値の入力変数は現在空レジスタであることを表示す、すなわちレジスタを空とマークすることはそれらがスタックから保持した値を除去するのと等価である。
【００５６】
“laload”命令の全体スタックアクションはレジスタ内に保持されたスタックオペランド数を変えていないが、それでもマッピング状態スワップが生じていることは注目される。最終操作の実行時に実施されたマッピング状態の変化は変換されるＪａｖａバイトコードの関数として命令トランスレータ内にハードワイヤされ“laload”命令の特徴として示される“スワップ”パラメータにより表示される。
【００５７】
この図の例は一つの特定命令であるが、記載された原理はＡＲＭ命令または他のタイプの命令としてエミュレートされる多くの異なるＪａｖａバイトコード命令に拡張できることが理解される。
【００５８】
図８は前記した技術を略示するフロー図である。ステップ１０において、メモリからＪａｖａバイトコードがフェッチされる。ステップ１２において、そのＪａｖａバイトコードに対するrequire fullおよびrequire empty値が調べられる。require emptyまたはrequire full条件のいずれかが満たされなければ、ステップ１４および１６によりスタックオペランド（おそらくは、多数のスタックオペランド）のそれぞれＰＵＳＨおよびＰＯＰ操作を実施することができる。この特定のシステムはrequire emptyおよびrequire full条件が同時に満たされないことを許さないことは注目される。ステップ１２の条件が満たされるまでステップ１４および１６を何回も通過することが必要とされることがある。
【００５９】
ステップ１８において、関連するＪａｖａバイトコードに対して変換テンプレート内に指定された第１のＡＲＭ命令が選択される。ステップ２０において、選択されたＡＲＭ命令はステップ１０においてフェッチされたＪａｖａバイトコードのエミュレーションにおいて実行される最終命令であるかどうかチェックされる。実行されるＡＲＭ命令が最終命令であれば、ステップ２１は実行される命令系列内の次のＪａｖａバイトコードを指示するようにプログラムカウンタ値を更新する。ＡＲＭ命令が最終命令であれば、それは現在割込みが生じるか否かにかかわらずその実行を完了し、したがって、プログラムカウンタ値を次のＪａｖａバイトコードに更新してシステムの状態がＪａｖａバイトコードのその整合する正規の、割込みの無い、完全実行に達する点から実行を再開するのが安全であることが理解される。ステップ２０におけるテストが最終バイトコードに達していないことを示す場合には、プログラムカウンタ値の更新はバイパスされる。
【００６０】
ステップ２２は現在のＡＲＭ命令を実行する。ステップ２４において、テンプレートの一部として実行を必要とするＡＲＭ命令がさらにあるかどうかテストされる。さらにＡＲＭ命令があれば、ステップ２６において次が選択されて処理はステップ２０に戻る。これ以上命令がなければ、処理はステップ２８に進みそこで所望トップオブスタック位置およびスタックオペランドを保持しているさまざまなレジスタの満杯／空状態を反映させるために関連するＪａｖａバイトコードに対して指定された任意のマッピング変更／スワップが実施される。
【００６１】
図８は表明される場合の割込みが使えるようにされ割込後に処理が再開される点も略示している。割込みは現在ステップ２２において現在進行中のＡＲＭ命令の実行後に使えるようにされ始め、現在のプログラムカウンタ値であるものはなんでもバイトコード系列を有する復帰点として格納される。実行している現在のＡＲＭ命令がテンプレート系列内の最終命令であれば、ステップ２１はプログラムカウンタ値を更新したばかりであり、したがって、これは次のＪａｖａバイトコード（命令セット切替えが開始されたばかりであればＡＲＭ命令）を指示する。現在実行しているＡＲＭ命令が系列内の最終命令以外のものであれば、プログラムカウンタ値は関連するＪａｖａバイトコードの実行開始時に表示されたものとまだ同じであり、したがって、復帰すると全Ｊａｖａバイトコードが再実行される。
【００６２】
図９はＪａｖａバイトコードのストリームを受信しＡＲＭ命令の変換されたストリーム（または、対応する制御信号）を出力してプロセッサコアのアクションを制御するＪａｖａバイトコード変換ユニット６８を示す。前記したように、Ｊａｖａバイトコードトランスレータ６８は命令テンプレートを使用して簡単なＪａｖａバイトコードをＡＲＭ命令またはＡＲＭ命令系列に変換する。各Ｊａｖａバイトコードが実行されていると、スケジュール制御論理７０内のカウンタ値が減分される。このカウンタ値が０に達すると、Ｊａｖａバイトコード変換ユニット６８はスレッドまたはタスク間のスケジューリングを適切なものとして管理するスケジューリングコードに分岐するＡＲＭ命令を発行する。
【００６３】
簡単なＪａｖａバイトコードはこれらのバイトコードの高速ハードウェアベース実行を行うＪａｖａバイトコード変換ユニット６８自体により処理されるが、より複雑な処理操作を必要とするバイトコードは解釈ルーチンの集まりの形で提供されるソフトウェアインタプリタに送られる（このようなルーチンの選択の例はこの説明の始めに与えられている）。特に、Ｊａｖａバイトコード変換ユニット６８はそれが受信しているバイトコードはハードウェア変換によりサポートされるものではなく、したがって、そのバイトコードを解釈するためのソフトウェアルーチンが見つかるすなわち参照されるＪａｖａバイトコードによって決まるアドレスに分岐できることを確認することができる。この機構はスケジューリングコードに分岐するためのスケジューリング操作が必要であることをスケジューリング論理７０が表示する時にも利用することができる。
【００６４】
図１０は図９の実施例の操作およびハードウェアとソフトウェア間のタスクの分離をより詳細に示す。全てのＪａｖａバイトコードはＪａｖａバイトコード変換ユニット６８により受信され、ステップ７２においてカウンタを減分させる。ステップ７４において、カウンタ値が０に達しているかどうかチェックされる。カウンタ値が０に達しておれば（システム内にハードワイヤされた予め定められた値またはユーザ制御／プログラム可能な値からのカウントダウン）、ステップ７６においてスケジューリングコードに分岐される。ステップ７６においてスケジューリングコードが完了しておれば、制御はハードウェアに戻され処理はステップ７２に進み、そこで次のＪａｖａバイトコードがフェッチされカウンタが再度減分される。カウンタは０に達したため、新しい非ゼロ値に巡り合う。あるいは、ステップ７６において新しい値はスケジューリング工程の出口（exiting）の一部としてカウンタに押し込むことができる。
【００６５】
ステップ７４におけるテストでカウンタが０に等しくなかったことが表示されると、ステップ７８はＪａｖａバイトコードをフェッチする。ステップ８０において、フェッチされたバイトコードはステップ８２においてハードウェア変換により実行することができる簡単なバイトコードであるかあるいはより複雑な処理を必要とし、したがって、ステップ８４においてソフトウェア解釈を行うために通さなければならないかどうか確認される。処理がソフトウェア解釈に通される場合には、これが完了したら制御はハードウェアに戻されそこでステップ７２はカウンタを再度減分して次のＪａｖａバイトコードのフェッチングを考慮する。
【００６６】
図１１は別の制御構成を示す。ステップ８６における処理の開始時に命令信号（スケジューリング信号）の表明が中止される。ステップ８８において、フェッチされたＪａｖａバイトコードはハードウェア変換がサポートされる簡単なバイトコードであるか調べられる。ハードウェア変換がサポートされない場合には、ステップ９０において制御は解釈ソフトウェアに通され、それは次にＡＲＭ命令ルーチンを実行してＪａｖａバイトコードを解釈する。バイトコードがそれに対してハードウェア変換がサポートされる簡単なものであれば、処理はステップ９２に進みそこで一形式のマルチサイクル有限状態機械として作用するＪａｖａバイトコード変換ユニット６８により一つ以上のＡＲＭ命令が逐次発行される。ステップ９０または９２においてＪａｖａバイトコードが適切に実行されておれば、処理はステップ９４に進みそこでステップ８６において表明中止される前に短期間命令信号が表明される。命令信号の表明は解釈または変換された命令の部分実行によるデータ完全性損失の危険にさらされることなくタイマベーススケジューリング割込みを行うことができる適切な安全点に達していることを外部回路に表示する。
【００６７】
図１２は図１１で発生された命令信号に応答するのに使用することができる回路例を示す。タイマ９６が所与の期間が切れた後で周期的にタイマ信号を発生する。このタイマ信号はクリアタイマ割込み信号によりクリアされるまでラッチ９８内に格納される。ラッチ９８の出力はステップ９４において表明された割込み信号とＡＮＤゲート１００により論理的に結合される。ラッチがセットされ命令信号が表明されると、ＡＮＤゲート１００の出力として割込みが発生され標準割込み処理システム内に設けられた割込み処理機構を使用するスケジューリング操作を実施する割込みをトリガーするのに使用される。割込み信号が発生されていると、これは次のタイマ出力パルスが発生するまでラッチ９８をクリアするクリアタイマ割込み信号の生成をトリガーする。
【００６８】
図１３は図１２の回路の動作を示す信号図である。プロセッサコアクロック信号が規則正しい周波数で生じる。タイマ９６が予め定められた周期でタイマ信号を発生し、安全であれば、スケジューリング操作を開始すべきであることを表示する。タイマ信号はラッチされる。特定のＪａｖａバイトコードがどれだけ迅速に実行されたかによって決まる期間だけ間隔がとられた時間に命令信号が発生される。簡単なＪａｖａバイトコードは単独プロセッサコアクロックサイクル、より典型的には２または３サイクル、で実行することができるが、ハイレベル管理型機能を提供するより複雑なＪａｖａバイトコードはその実行がソフトウェアインタプリタにより完了される前に数百プロセッサクロックサイクルをとることがある。いずれの場合にも、命令信号を発行してスケジューリング操作を開始するのに安全であることが表示されるまで保留表明ラッチタイマ信号はスケジューリング操作をトリガーするように作用することはない。ラッチされたタイマ信号と命令信号の同時発生によりラッチ９８をクリアするクリア信号がすぐ続く割込み信号の発生がトリガーされる。
【図面の簡単な説明】
【図１】  命令パイプライン構成例を示す略図である。
【図２】  命令パイプライン構成例を示す略図である。
【図３】  フェッチステージ構成をより詳細に示す図である。
【図４】  フェッチステージ内のバッファされた命令語内からの可変長非ネーティブ命令の読出しを示す略図である。
【図５】  プロセッサコアネーティブ命令および変換を要する命令の両方を実行するデータ処理システムを示す略図である。
【図６】  一連の命令および状態の例に対する、スタックオペランド記憶装置に使用されたレジスタの内容、マッピング状態および変換を要する命令とネーティブ命令間の関係を示す略図である。
【図７】  ネーティブ命令系列としての非ネーティブ命令の実行を示す略図である。
【図８】  変換された命令に対する割込みレーテンシを保存するように命令トランスレータが動作することができる方法を示すフロー図である。
【図９】  ハードウェアおよびソフトウェア技術を使用するＪａｖａバイトコードのＡＲＭ opcodesへの変換を示す略図である。
【図１０】  ハードウェアベーストランスレータ、ソフトウェアベースインタプリタおよびソフトウェアベーススケジューリング間の制御フローを示す略図である。
【図１１】  タイマベース方法を使用するスケジューリング操作のもう一つの制御方法を示す略図である。
【図１２】  タイマベース方法を使用するスケジューリング操作のもう一つの制御方法を示す略図である。
【図１３】  図１２の回路の動作を制御する信号を示す信号図である。
【図１】
0004833499.tif 000015
【図２】
0004833499.tif 000016
【図３】
0004833499.tif 000017
【図４】
0004833499.tif 000018
【図５】
0004833499.tif 000019
【図６】
0004833499.tif 000020
【図７】
0004833499.tif 000021
【図８】
0004833499.tif 000022
【図９】
0004833499.tif 000023
【図１０】
0004833499.tif 000024
【図１１】
0004833499.tif 000025
【図１２】
0004833499.tif 000026
【図１３】
0004833499.tif 000027