(57)【要約】処理システムは命令パイプライン（３０）とプロセッサ・コアとを有する。非ネイティブ命令をネイティブ命令演算に翻訳する命令翻訳器（４２）がフェッチ段（３２）の下流の命令パイプライン内に設けられる。この命令翻訳器は、非ネイティブ命令をエミュレートするために可変長ネイティブ命令演算列が発生可能となるように、ネイティブ命令の複数ステップ列を発生可能である。フェッチ段には、現在命令語と次の命令語の両方を記憶する語バッファ（６２）が設けられる。従って、メモリから読取られた命令語間に跨る可変長非ネイティブ命令が即時デコード用に与えられ、複数の電力を消費するメモリ・フェッチが避けられる。
2004522215.tif 000002
【特許請求の範囲】
【請求項１】
データを処理する装置において、前記装置は、
第１命令セットの命令により指定されるような演算を実行するよう動作するプロセッサ・コアであって、実行される命令がメモリからフェッチされ、かつ命令がこれに沿って進行する命令パイプラインを有する前記プロセッサ・コアと、
第２命令セットの命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳するよう動作する命令翻訳器と、を含み、ここで、
前記命令翻訳器は前記命令パイプライン内にあって、前記メモリから前記命令パイプラインにフェッチされた前記第２命令セットの命令を翻訳し、
前記プロセッサ・コアにより実行されるために、前記第２命令セットの少なくとも１つの命令は、前記第１命令セットの命令により指定される複数個の演算を必要とする複数ステップ演算を指定し、
前記命令翻訳器は前記複数ステップ演算を実行するため前記プロセッサ・コアを制御する一連の翻訳器出力信号を発生するよう動作する、
データを処理する装置。
【請求項２】
請求項１に記載の装置において、前記翻訳器出力信号は前記第１命令セットの命令を形成する信号を含む、装置。
【請求項３】
請求項１及び請求項２のいずれかに記載の装置において、前記翻訳器出力信号は、前記プロセッサ・コアの動作を制御し、前記第１命令セットの命令のデコード時に発生された制御信号と整合する制御信号を含む、装置。
【請求項４】
請求項１、請求項２及び請求項３のいずれかに記載の装置において、前記翻訳器出力信号は、前記プロセッサ・コアの動作を制御し、前記第１命令セットの命令のデコード時に発生された制御信号により指定されないパラメータを指定する制御信号を含む、装置。
【請求項５】
請求項１〜請求項４のいずれかに記載の装置において、前記プロセッサ・コアは、前記プロセッサ・コアにより保持されたプログラム・カウンタ値により指定された前記メモリ内の命令アドレスから命令をフェッチする、装置。
【請求項６】
請求項５に記載の装置において、前記第２命令セットの命令を実行する時、前記第２命令セットの前記命令が複数ステップ演算を指定しているかどうかとは独立なある量だけ前記プログラム・カウンタ値が進められる、装置。
【請求項７】
請求項５及び請求項６のいずれかに記載の装置において、前記第２命令セットの命令を実行する時、前記プログラム・カウンタ値は実行すべき前記第２命令セットの次の命令を指定するよう進められる、装置。
【請求項８】
請求項５、請求項６及び請求項７のいずれかに記載の装置において、前記第２命令セットの命令をそのように実行している時に割込みが発生した場合前記プログラム・カウンタ値が保存され、前記割込み後に前記第２命令セットの前記命令の実行を再開するために使用される、装置。
【請求項９】
請求項１〜請求項８のいずれかに記載の装置において、前記第２命令セットの命令はスタックに保持されたスタック・オペランドに対して実行される演算を指定する、装置。
【請求項１０】
請求項１〜請求項９のいずれかに記載の装置において、前記プロセッサは複数個のレジスタを含むレジスタ・バンクを有し、前記第１命令セットの命令は前記レジスタに保持されたレジスタ・オペランドに対する演算を実行する、装置。
【請求項１１】
請求項１０に記載の装置において、前記レジスタ・バンク内のレジスタの組が、前記スタックの先頭部分からのスタック・オペランドを保持している、装置。
【請求項１２】
請求項９及び請求項１１に記載の装置において、前記命令翻訳器は、前記レジスタの組内の異なるレジスタが前記スタック内の異なる位置からの各スタック・オペランドを保持している複数個のマッピング状態を有し、前記命令翻訳器は、前記スタック内で保持されたスタック・オペランドを追加または除去する演算に依存してマッピング状態間で移動するよう動作する、装置。
【請求項１３】
請求項１〜請求項１２のいずれかに記載の装置において、前記第２命令セットの命令を処理していない時には前記命令翻訳器がバイパスされるように、前記命令パイプライン内にバイパス路をさらに含む、装置。
【請求項１４】
請求項１〜請求項１３のいずれかに記載の装置において、前記第２命令セットの前記命令はジャバ仮想マシン・バイトコードである、装置。
【請求項１５】
実行される命令がメモリからフェッチされ、かつこれに沿って命令が進行する命令パイプラインを有するプロセッサ・コアを使用してデータを処理する方法において、前記プロセッサ・コアは第１命令セットの命令により指定された演算を実行するよう動作可能であり、前記方法は、
前記命令パイプラインに命令をフェッチする段階と、
前記命令パイプライン中の命令翻訳器を使用して第２命令セットのフェッチされた命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳する段階と、を含み、ここで、
前記プロセッサ・コアにより実行されるために、前記第２命令セットの少なくとも１つの命令が前記第１命令セットの命令により指定される複数個の演算を必要とする複数ステップ演算を指定し、
前記命令翻訳器は前記複数ステップ演算を実行するため前記プロセッサ・コアを制御するための一連の翻訳器出力信号を発生するよう動作する、データを処理する方法。
【請求項１６】
請求項１３の方法を実行するためコンピュータを制御するコンピュータ・プログラムを保持するコンピュータ・プログラム製品。
【請求項１７】
データを処理する装置において、前記装置は、
第１命令セットの命令により指定された演算を実行可能なプロセッサ・コアであって、実行されるべき命令がメモリからフェッチされ、かつこれに沿って命令が進行する命令パイプラインを有する前記プロセッサ・コアと、
第２命令セットの命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳可能な命令翻訳器と、を含み、ここで、
前記第２命令セットの前記命令は可変長命令であり、
前記命令翻訳器は前記命令パイプライン内にあって、前記メモリから前記命令パイプラインのフェッチ段にフェッチされた前記第２命令セットの命令を翻訳し、
前記命令パイプラインの前記フェッチ段は、前記第２命令セットの可変長命令が前記現在命令語内から開始して前記次の命令語まで延長している場合に、さらなるフェッチ操作を必要とすることなく前記命令翻訳器による翻訳用に前記次の命令語が前記パイプライン内で利用可能となるように、前記メモリからフェッチされた少なくとも現在命令語と次の命令語を保持する命令バッファを含む、データを処理する装置。
【請求項１８】
請求項１７に記載の装置において、前記命令バッファはスィング・バッファである、装置。
【請求項１９】
請求項１７及び請求項１８のいずれかに記載の装置において、前記フェッチ段は、１つ以上の前記現在命令語と前記次の命令語から可変長命令を選択するための複数個のマルチプレクサを含む、装置。
【請求項２０】
請求項１７、請求項１８及び請求項１９のいずれかに記載の装置において、前記第２命令セットの前記命令はジャバ仮想マシン・バイトコードである、装置。
【請求項２１】
請求項１７〜請求項２０のいずれかに記載の装置において、前記第２命令セットの命令を処理していない時には前記命令翻訳器がバイパスされるように、前記命令パイプライン内にバイパス路をさらに含む、装置。
【請求項２２】
請求項１７〜請求項２１のいずれかに記載の装置において、
前記プロセッサ・コアにより実行されるために、前記第２命令セットの少なくとも１つの命令は、前記第１命令セットの命令により指定される複数個の演算を必要とする複数ステップ演算を指定し、
前記命令翻訳器は、前記複数ステップ演算を実行するために前記プロセッサ・コアを制御する一連の翻訳器出力信号を発生するよう動作する、装置。
【請求項２３】
請求項２２と、請求項２〜請求項１２とのいずれかに記載の装置。
【請求項２４】
第１命令セットの命令により指定された演算を実行するよう動作するプロセッサ・コアを使用してデータを処理する方法において、前記プロセッサ・コアは実行されるべき命令がメモリからフェッチされかつこれに沿って命令が進行する命令パイプラインを有し、前記方法は、
命令を前記命令パイプラインにフェッチする段階と、
前記命令パイプライン内の命令翻訳器を使用して第２命令セットのフェッチされた命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳する段階と、を含み、ここで、
前記第２命令セットの前記命令は可変長命令であり、
前記命令翻訳器は前記命令パイプライン内にあり、前記メモリから前記命令パイプラインのフェッチ段にフェッチされた前記第２命令の命令を翻訳し、
前記命令パイプラインの前記フェッチ段は、前記第２命令セットの可変長命令が前記現在命令語内から開始して前記次の命令語まで延長している場合に、さらなるフェッチ操作を必要とすることなく前記命令翻訳器による翻訳用に前記次の命令語が前記パイプライン内で利用可能となるように、前記メモリからフェッチされた少なくとも現在命令語と次の命令語を保持する命令バッファを含む、
データを処理する方法。
【請求項２５】
請求項２４の方法を実行するためコンピュータを制御するコンピュータ・プログラムを保持するコンピュータ・プログラム製品。
【発明の詳細な説明】
【０００１】
本発明はデータ処理システムと関係する。特に、本発明は、ある命令セットから他の命令セットへの命令翻訳がプロセッサ・パイプライン内で発生するデータ処理システムと関係する。
【０００２】
第１命令セットから第２命令セットへの命令翻訳が命令パイプライン内で発生する処理システムを提供することは公知である。これらのシステムでは、翻訳される各命令は単一のネイティブ（ｎａｔｉｖｅ）命令にマップされる。このようなシステムの例は、ＡＲＭとＴｈｕｍｂ命令コードの両方をサポートするＡＲＭ社により生産されたプロセッサである。
【０００３】
非ネイティブ（ｎｏｎ−ｎａｔｉｖｅ）命令を複数のネイティブ命令を含むネイティブ命令列に翻訳する処理システムを提供することも公知である。このようなシステムの例はＵＳ−Ａ−５，９３７，１９３号に記載されている。このシステムはジャバ・バイトコードを３２ビットＡＲＭ命令にマップする。命令がプロセッサ・パイプラインに渡される前に翻訳が発生しメモリ・アドレス再マップ技術を利用する。ジャバ・バイトコードを使用して、ジャバ・バイトコードの動作をエミュレートするメモリ中の一連のＡＲＭ命令を探索する。
【０００４】
ＵＳ−Ａ−５，９３７，１９３号のシステムはいくつかの関連欠点を有する。前記システムはメモリとメモリ・フェッチを利用する方法が非効率的である。ＡＲＭ命令列は、より少なく占有するよう配列可能であったとしても、同量のメモリを全て占有する。各ジャバ・バイトコードのデコード時に、メモリからのＡＲＭ命令の複数フェッチが必要であり、これは電力消費が不利であり、かつ性能に不利に影響する。翻訳された命令列は固定であり、異なる、またはより良く最適化された命令翻訳を生じ得る各ジャバ・バイトコードを実行する時の異なっている開始システム状態のものを考慮することが困難である。
【０００５】
命令セット間の翻訳用の既知システムの例とその他の背景情報は以下に見出される：ＵＳ−Ａ−５，８０５，８９５号；ＵＳ−Ａ−３，９５５，１８０号；ＵＳ−Ａ−５，９７０，２４２号；ＵＳ−Ａ−５，６１９，６６５号；ＵＳ−Ａ−５，８２６，０８９号；ＵＳ−Ａ−５，９２５，１２３号；ＵＳ−Ａ−５，８７５，３３６号；ＵＳ−Ａ−５，９３７，１９３号；ＵＳ−Ａ−５，９５３，５２０号；ＵＳ−Ａ−６，０２１，４６９号；ＵＳ−Ａ−５，５６８，６４６号；ＵＳ−Ａ−５，７５８，１１５号；ＵＳ−Ａ−５，３６７，６８５号；ＩＢＭ技術開示報告、１９８８年３月、３０８−３０９頁、「縮小命令セット・コンピュータ用のシステム／３７０エミュレータ・アシスト・プロセッサ」；ＩＢＭ技術開示報告、１９８６年７月、５４８−５４９頁、「全機能シリーズ／１命令セット・エミュレータ」；ＩＢＭ技術開示報告、１９９４年３月、６０５−６０６頁、「ＲＩＳＣプロセッサ上での実時間ＣＩＳＣアーキテクチャＨＷエミュレータ」；ＩＢＭ技術開示報告、１９９８年３月、２７２頁、「ＥＭＵＬＡＴＩＯＮ制御ブロックを使用した性能改善」；ＩＢＭ技術開示報告、１９９５年１月、５３７−５４０頁、「縮小命令セット・コンピュータ／サイクル・システム上のコード・エミュレーション用高速命令デコード」；ＩＢＭ技術開示報告、１９９３年２月、２３１−２３４頁、「高速２重アーキテクチャ・プロセッサ」；ＩＢＭ技術開示報告、１９８９年８月、４０−４３頁、「システム／３７０  Ｉ／Ｏチャネル・プログラム・チャネル命令語プリフェッチ」；ＩＢＭ技術開示報告、１９８５年６月、３０５−３０６頁、「完全マイクロコード制御のエミュレーション・アーキテクチャ」；ＩＢＭ技術開示報告、１９７２年３月、３０７４−３０７６頁、「エミュレーション用の演算コード及び状態処理」；ＩＢＭ技術開示報告、１９８２年８月、９５４−９５６頁、「大規模システムの最も頻繁に使用された命令によるマイクロプロセッサのオンチップ・マイクロコーディングと残りの命令をコード化するのに適したプリミティブ」；ＩＢＭ技術開示報告、１９８３年４月、５５７６−５５７７頁、「エミュレーション命令」；エス・ファーバーによるＡＲＭシステム・アーキテクチャの本；ヘネシーとパターソンによるコンピュータ・アーキテクチャ：量的アプローチの本；ティム・リンドホルムとフランク・イェーリンによるジャバ仮想マシン仕様の本第１及び第２版。
【０００６】
ある観点から見ると、本発明はデータを処理する装置を提供し、前記装置は、
第１命令セットの命令により指定されるような演算を実行するよう動作するプロセッサ・コアであって、実行される命令がメモリからフェッチされ、かつ命令がこれに沿って進行する命令パイプラインを有する前記プロセッサ・コアと、
第２命令セットの命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳するよう動作する命令翻訳器と、を含み、ここで、
前記命令翻訳器は前記命令パイプライン内にあって、前記メモリから前記命令パイプラインにフェッチされた前記第２命令セットの命令を翻訳し、
前記プロセッサ・コアにより実行されるために、前記第２命令セットの少なくとも１つの命令は、前記第１命令セットの命令により指定される複数個の演算を必要とする複数ステップ演算を指定し、
前記命令翻訳器は前記複数ステップ演算を実行するため前記プロセッサ・コアを制御する一連の翻訳器出力信号を発生するよう動作する。
【０００７】
本発明はフェッチ段の下流にプロセッサ・コア自体の命令パイプライン内に命令翻訳器を設ける。この方法で、非ネイティブ命令（第２命令セット命令）をネイティブ命令（第１命令セット命令）と同様な方法でメモリ・システム内に記憶し、こうしなければメモリ・システム使用に対して制約となるものをこれにより除去する。さらに、各非ネイティブ命令に対して、メモリ・システムからの非ネイティブ命令の単一のメモリ・フェッチは、プロセッサ・パイプライン内で発生するネイティブ命令演算の複数ステップ列の発生を引き起こす。これはメモリ・フェッチにより消費される電力を減少し、かつ性能を改善する。加えて、パイプライン内の命令翻訳器は、デコードされている特定の非ネイティブ命令に依存して、かつネイティブ演算が所要の非ネイティブ演算を効率的に実行するものに影響するであろう任意の周囲システム状態に依存して、実行されるべきパイプラインの残り下流に可変数のネイティブ命令演算を発行可能である。
【０００８】
命令翻訳器は、第１命令セットからネイティブ命令を完全かつ十分に表す翻訳器出力信号を発生可能であることが認められるであろう。このような構成は、第１命令セットの命令により演算するように設計されたハードウェア論理の簡単な再使用を可能とする。しかしながら、命令翻訳器は、直接対応することのないネイティブ命令と同様の効果を発生可能な、または第１命令セットの命令により直接それ自身の中で与えられない、拡張演算子フィールドのような、別の演算を追加的に与える制御信号である翻訳器出力信号も発生することが認められるであろう。
【０００９】
命令翻訳器を命令パイプライン中に設けることは、非ネイティブ命令のネイティブ命令への翻訳がメモリ機構に依存することなく発生する時に従来方法でメモリから非ネイティブ命令をフェッチするためにプロセッサ・コアのプログラム・カウンタ値を使用可能である。さらに、これらの非ネイティブ命令がネイティブ命令の単一ステップまたは複数ステップ演算に翻訳されるかどうかに依存することなく非ネイティブ命令の実行に従って進行されるようにプログラム・カウンタ値を制御できる。非ネイティブ命令の実行を追跡するためにプログラム・カウンタ値を使用することは、割込み、分岐及びシステム設計のその他の面を処理する方法を有利に簡単化できる。
【００１０】
有限ステートマシンを設けるものとして考えられる方法で、命令翻訳器を命令パイプライン中に設けることは、命令翻訳器が翻訳された命令演算をより容易に調節してシステム状態と共に翻訳されている非ネイティブ命令を反映可能とする結果となる。この特に望ましい例として、第２命令セットがスタックベースの処理を指定し、プロセッサ・コアがレジスタベースの処理を指向している時、処理を高速化するためレジスタの組を使用してスタック・オペランドを有効にキャッシュすることが可能である。この状況下では、翻訳された命令列は、特定のスタック・オペランドがレジスタ内にキャッシュされているかまたはフェッチされなければならないかに依存して変化する。
【００１１】
命令翻訳器がネイティブ命令の実行に対して与える影響を少なくするため、望ましい実施例は、ネイティブ命令処理モードで演算している時、ネイティブ命令が命令翻訳器により影響されることなく処理可能であるように、命令パイプライン内の命令翻訳器にはバイパス路が設けられるようになっている。
【００１２】
ネイティブ命令と非ネイティブ命令は多数の異なる形式を取りうることが認められる。しかしながら、本発明は第２命令セットの非ネイティブ命令がジャバ仮想マシン命令である時に特に有用であり、これはこれらの命令のネイティブ命令への翻訳が、本発明が対処可能な多くの問題と困難を提示するからである。
【００１３】
他の観点から見ると、本発明は実行される命令がメモリからフェッチされ、かつこれに沿って命令が進行する命令パイプラインを有するプロセッサ・コアを使用してデータを処理する方法を提供し、前記プロセッサ・コアは第１命令セットの命令により指定された演算を実行するよう動作可能であり、前記方法は、
前記命令パイプラインに命令をフェッチする段階と、
前記命令パイプライン内の命令翻訳器を使用して第２命令セットのフェッチされた命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳する段階と、を含み、ここで、
前記プロセッサ・コアにより実行されるために、前記第２命令セットの少なくとも１つの命令が前記第１命令セットの命令により指定される複数個の演算を必要とする複数ステップ演算を指定し、
前記命令翻訳器は、前記複数ステップ演算を実行するために前記プロセッサ・コアを制御するための一連の翻訳器出力信号を発生するよう動作する。
【００１４】
本発明は、上記技術に従ってコンピュータを制御するためのコンピュータ・プログラムを保持するコンピュータ・プログラム製品も提供する。
【００１５】
命令パイプライン内に翻訳すべき命令をフェッチする時、翻訳すべき命令が可変数命令であると問題が生じる。命令パイプラインのフェッチ段階は固定長命令をフェッチする時には相対的に予測可能な演算である。例えば、命令が各命令サイクルで実行される場合、命令パイプラインを充填状態に保持するためにフェッチ段は各命令サイクルで命令をフェッチするよう配置されている。しかしながら、フェッチしている命令が可変長のものである場合、命令間の境界を識別するのが困難である。従って、固定長メモリ読取りを提供するメモリ・システムでは、特定の可変長命令は命令の最終部分を読取るために第２のフェッチを必要とするメモリ読取り間で跨っている。
【００１６】
他の観点から見ると、本発明はデータを処理する装置を提供し、前記装置は、
第１命令セットの命令により指定された演算を実行可能なプロセッサ・コアであって、実行されるべき命令がメモリからフェッチされ、かつこれに沿って命令が進行する命令パイプラインを有する前記プロセッサ・コアと、
第２命令セットの命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳するよう動作する命令翻訳器と、を含み、ここで、
前記第２命令セットの前記命令は可変長命令であり、
前記命令翻訳器は前記命令パイプライン内にあって、前記メモリから前記命令パイプラインのフェッチ段にフェッチされた前記第２命令セットの命令を翻訳し、
前記命令パイプラインの前記フェッチ段は、前記第２命令セットの可変長命令が前記現在命令語内から開始して前記次の命令語まで延長している場合に、さらなるフェッチ操作を必要とすることなく前記命令翻訳器による翻訳用に前記次の命令語が前記パイプライン内で利用可能となるように、前記メモリからフェッチされた少なくとも現在命令語と次の命令語を保持する命令バッファを含む。
【００１７】
本発明は少なくとも現在命令語と次の命令語とを記憶するフェッチ段内のバッファを提供する。この方法で、特定の可変長命令が現在命令語から次の命令語へ延長している場合、その命令語は既にフェッチされていて直ちにデコードと使用に利用可能である。第２の、電力的に非効率なフェッチも避けられる。次の命令語と共に現在命令語をバッファし、可変長命令をサポートするフェッチ段をパイプライン内に設けることで、命令パイプライン内の残りの段に対してフェッチ段をより非同期的に動作することが認められるであろう。これはパイプライン段が同期して動作する傾向がある固定長命令を実行するための命令パイプライン内の通常動作傾向と相反する。
【００１８】
フェッチ段内で命令をバッファする本発明の実施例は、本発明の第１の特徴と関連して記述した上記の望ましい特徴も有するシステム内の使用に非常に適している。
【００１９】
他の観点から見ると、本発明は第１命令セットの命令により指定された演算を実行するよう動作するプロセッサ・コアを使用してデータを処理する方法を提供し、前記プロセッサ・コアは実行されるべき命令がメモリからフェッチされかつこれに沿って命令が進行する命令パイプラインを有し、前記方法は、
命令を前記命令パイプラインにフェッチする段階と、
前記命令パイプライン内の命令翻訳器を使用して第２命令セットのフェッチされた命令を前記第１命令セットの命令に対応する翻訳器出力信号に翻訳する段階と、を含み、ここで、
前記第２命令セットの前記命令は可変長命令であり、
前記命令翻訳器は前記命令パイプライン内にあり、前記メモリから前記命令パイプラインのフェッチ段にフェッチされた前記第２命令の命令を翻訳し、
前記命令パイプラインの前記フェッチ段は、前記第２命令セットの可変長命令が前記現在命令語内から開始して前記次の命令語まで延長している場合に、さらなるフェッチ操作を必要とすることなく前記命令翻訳器による翻訳用に前記次の命令語が前記パイプライン内で利用可能となるように、前記メモリからフェッチされた少なくとも現在命令語と次の命令語とを保持する命令バッファを含む。
【００２０】
図１はＡＲＭプロセッサベースのシステムでの使用に適した型式の第１例の命令パイプライン３０を示す。命令パイプライン３０はフェッチ段３２、ネイティブ命令（ＡＲＭ／Ｔｈｕｍｂ命令）デコード段３４、実行段３６、メモリ・アクセス段３８及び書き戻し段４０を含む。実行段３６、メモリ・アクセス段３８及び書き戻し段４０は実質的に従来のものである。フェッチ段３２の下流、そしてネイティブ命令デコード段３４の上流に、命令翻訳器段４２が設けられる。命令翻訳器段４２は可変長のジャバ・バイトコード命令をネイティブＡＲＭ命令に翻訳する有限ステートマシンである。命令翻訳器段４２は複数ステップ演算が可能で、これにより単一のジャバ・バイトコード命令が、命令パイプライン３０の残りの部分に沿って送入される一連のＡＲＭ命令を発生して、ジャバ・バイトコード命令により指定された演算を実行する。単純なジャバ・バイトコード命令はその演算を実行するために単一のＡＲＭ命令のみを必要とするが、一方より複雑なジャバ・バイトコード命令、または周囲のシステム状態がそのように指令した場合には、ジャバ・バイトコード命令により指定された演算を行うためにはいくつかのＡＲＭ命令が必要となることもある。この複数ステップ演算はフェッチ段３２の下流で発生し、従って複数の翻訳されたＡＲＭ命令またはジャバ・バイトコードをメモリ・システムからフェッチする時に電力が消費されない。ジャバ・バイトコード翻訳操作をサポートするためにメモリ・システムに追加の制約を与えることのないように、ジャバ・バイトコード命令はメモリ・システム内に従来の方法で記憶される。
【００２１】
図示したように、命令翻訳器段４２にはバイパス路が設けられている。命令翻訳モードで動作していない時、命令パイプライン３０は命令翻訳器段４２をバイパスして基本的には変更されない方法で動作してネイティブ命令のデコードを行う。
【００２２】
命令パイプライン３０では、対応するＡＲＭ命令を完全に表現しマルチプレクサを介してネイティブ命令デコーダ３４へ渡される翻訳器出力信号を発生するものとして命令翻訳器段４２が図示されている。命令翻訳器段４２はまたネイティブ命令デコーダ３４へ渡されるその他の制御信号も発生する。ネイティブ命令コード化内のビット空間制約は、ネイティブ命令により指定されたオペランドの範囲に対して制限を課する。これらの制限は非ネイティブ命令によって必ずしも共有されていない。他の制御信号は、メモリ内に記憶されたネイティブ命令内で指定することが不可能な非ネイティブ命令から得られた信号を指定する追加命令を渡すために設けられる。例として、ネイティブ命令はネイティブ命令内の即値オペランド・フィールドとして使用するための比較的小さいビット数のみを提供するが、一方非ネイティブ命令は拡大された範囲を許容し、ネイティブ命令デコーダ３４にこれも渡される翻訳されたネイティブ命令以外のネイティブ命令デコーダ３４への即値オペランドの拡張部分を渡すため別の制御信号を使用することによりこれが利用可能である。
【００２３】
図２は別の命令パイプライン４４を図示する。この例では、システムには非ネイティブ命令デコーダ５０と共に２個のネイティブ命令デコーダ４６、４８が設けられる。非ネイティブ命令デコーダ５０は、ネイティブ命令をサポートするために設けられている実行段５２、メモリ段５４及び書き戻し段５６により指定可能である演算に制約がある。従って、非ネイティブ命令デコーダ５０は非ネイティブ命令をネイティブ命令（これは単一のネイティブ演算または一連のネイティブ演算である）に有効に翻訳し、次いで適切な制御信号を実行段５２に与えてこれらの１つ以上のネイティブ演算を実行しなければならない。この例では、非ネイティブ命令デコーダはネイティブ命令を形成する信号を発生するのではなく、ネイティブ命令（または拡張ネイティブ命令）演算を指定する制御信号を与えることが認められるであろう。発生された制御信号はネイティブ命令デコーダ４６、４８により発生された制御信号とは整合しない。
【００２４】
動作中、フェッチ段５８によりフェッチされた命令は、図示のデマルチプレクサを使用して特定の処理モードに依存して命令デコーダ４６、４８または５０のいずれかに選択的に供給される。
【００２５】
図３はより詳細に命令パイプラインのフェッチ段を概略的に図示する。フェッチ論理６０はメモリ・システムから固定長命令語をフェッチしこれを命令語バッファ６２に与える。命令語バッファ６２は、現在命令語と次の命令語との両方を記憶するように２面を有するスィング・バッファである。現在命令語が完全にデコードされデコードが次の命令語に進行した時には常に、フェッチ論理６０は以前の現在命令語とをメモリからフェッチされた次の命令語に置換える役割を果たし、すなわちスィング・バッファの各側は、連続的に記憶する命令語をインターリーブ的に２つずつ増加する。
【００２６】
図示の例では、ジャバ・バイトコード命令の最大命令長は３バイトである。従って、語バッファ６２のどちらかの側内で任意の３隣接バイトを選択し命令翻訳器６４に送ることを可能とする３個のマルチプレクサが設けられる。語バッファ６２と命令翻訳器６４にも、ネイティブ命令がフェッチされデコードされた時に使用するためのバイパス路６６が設けられる。
【００２７】
各命令語はメモリから一旦フェッチされ、語バッファ６２内に記憶されることが分かるだろう。命令翻訳器６４がＡＲＭ命令へのジャバ・バイトコードの翻訳を実行するにつれて単一命令語はそれから読取られた複数のジャバ・バイトコードを有してもよい。命令翻訳動作が命令パイプライン内に制限されているため、複数のメモリ・システム読取りを必要とすることなく、またメモリ・リソースを消費したりまたはメモリ・システムにその他の制約を課すことなく、ネイティブ命令の可変長翻訳列が発生される。
【００２８】
プログラム・カウンタ値は現在翻訳している各ジャバ・バイトコードと関連している。このプログラム・カウンタ値は、必要に応じて、各段が処理している特定のジャバ・バイトコードに関する情報を使用可能とするように、パイプラインの各段に沿って渡される。複数のＡＲＭ命令演算の列に翻訳されるジャバ・バイトコードのプログラム・カウンタ値は、その列内の最終のＡＲＭ命令演算が実行を開始するまで増分されない。実行されているメモリ内の命令を直接指示し続けるようにプログラム・カウンタ値を保持することは、デバッグや分岐ターゲット計算のような、システムのその他の面を有利に簡略化する。
【００２９】
図４は命令バッファ６２からの可変長ジャバ・バイトコードの読取りを概略的に図示する。第１段では、長さ１のジャバ・バイトコード命令が読取られデコードされる。次の段は、３バイト長でメモリからフェッチされた２つの隣接命令語間に跨るジャバ・バイトコードである。これらの命令語の両方が命令バッファ６２内に存在し、従って命令デコードと処理とは、フェッチされた命令語間の可変長命令のこの跨りによって遅延されない。命令バッファ６２から一旦３ジャバ・バイトコードが読取られると、以前にフェッチされた命令語の再充填が開始され、以後の処理は既に存在している後続の命令語からのジャバ・バイトコードのデコードを続行する。
【００３０】
図４に図示した最終段は読取られている第２の３バイトコード命令を図示する。これは再び命令語間を跨る。先行する命令語がその再充填をまだ完了していない場合、適切な命令語が命令バッファ６２に記憶されるまでパイプライン・ストールにより命令の読取りは遅延されてもよい。ある実施例では、パイプラインはこの型式の挙動により決してストールしないようなタイミングである。大多数のジャバ・バイトコードは図示の例より短く、従って命令語間に両方跨る２つの連続するデコードは相対的に一般的でないため、この特定の例は相対的にまれな発生であることが認められる。ジャバ・バイトコードが読取られる前に、命令語が適切に再充填されたかどうかを信号することが可能なように、有効信号を命令バッファ６２内の各命令語に関連付けてもよい。
【００３１】
図５はプロセッサ・コア１０４とレジスタ・バンク１０６とを含むデータ処理システム１０２を示す。プロセッサ・コア１０４に与えられるネイティブＡＲＭ命令（またはこれに対応する制御信号）にジャバ仮想マシン命令を翻訳するために命令路内に命令翻訳器１０８が設けられる。ネイティブＡＲＭ命令がアドレス可能なメモリからフェッチされている時には命令翻訳器１０８はバイパスされてもよい。アドレス可能なメモリは、別のオフチップＲＡＭメモリを有するキャッシュ・メモリのようなメモリ・システムでもよい。メモリ・システム、特にキャッシュ・メモリの下流に命令翻訳器１０８を設けることは、翻訳を必要とする濃縮された命令をメモリ・システム内に記憶し、プロセッサ・コア１０４へ渡される直前にのみネイティブ命令に展開されるため、メモリ・システムの記憶容量の有効使用が可能となる。
【００３２】
この例のレジスタ・バンク１０６は１６個の汎用３２ビット・レジスタを含み、その内４個がスタック・オペランドを記憶する使用に割当てられる、すなわち、スタック・オペランドを記憶するレジスタの組はＲ０、Ｒ１、Ｒ２及びＲ３である。
【００３３】
レジスタの組は空であるか、スタック・オペランドで部分的に充填されているかまたはスタック・オペランドで完全に充填されているか、である。スタック・オペランドの最上部を現在保持している特定のレジスタはレジスタの組内の任意のレジスタでよい。従って、命令翻訳器は、レジスタの全てが空の時の１状態と、レジスタの組内に保持されているスタック・オペランドの各異なる数とスタック・オペランドの最上部を保持する異なるレジスタに各々対応する４状態の４グループに対応する、１７の異なるマッピング状態のうちの１つであることが認められる。表１は命令翻訳器１０８の状態マッピングの１７の異なる状態を図示する。スタック・オペランド記憶用に割当てた異なるレジスタ数により、または特定のプロセッサ・コアがレジスタ内に保持されたデータ値を処理可能な方法を有する制約の結果として、マッピング状態は特定の実装に特に著しく依存可能であり、表１はある特定の実装の１例としてのみ与えられていることが認められるであろう。
2004522215.tif 000003
表１
【００３４】
表１内で、状態値の最初の３ビットはレジスタの組内の空でないレジスタ数を指示することが観察される。状態値の最後の２ビットはスタック・オペランドの最上部を保持するレジスタのレジスタ番号を指示する。このようにして、レジスタの組の現在の占有度とスタック・オペランドの最上部の現在位置とを考慮して、ハードウェア翻訳器またはソフトウェア翻訳器の動作を制御するために状態値が容易に使用できる。
【００３５】
図５に図示するように、アドレス可能なメモリ・システムからジャバ・バイトコードのストリームＪ１、Ｊ２、Ｊ３が命令翻訳器１０８に送込まれる。次いで命令翻訳器１０８は、入力ジャバ・バイトコードと命令翻訳器８の瞬間的なマッピング状態、と共にその他の変数に依存してＡＲＭ命令（または等価な制御信号、多分拡張されている）のストリームを出力する。図示の例はＡＲＭ命令Ａ１１とＡ１２にマップされているジャバ・バイトコードＪ１を示す。ジャバ・バイトコードＪ２はＡＲＭ命令Ａ２１、Ａ２２、Ａ２３にマップする。最後に、ジャバ・バイトコードＪ３はＡＲＭ命令Ａ３１にマップする。ジャバ・バイトコードの各々は入力として１個以上のスタック・オペランドを必要とし、出力として１個以上のスタック・オペランドを発生する。本例のプロセッサ・コア１０４がロード／ストア・アーキテクチャを有するＡＲＭプロセッサ・コアであって、レジスタ内に保持されたデータ値のみを処理できる場合、命令翻訳器１０８は、処理する前にレジスタの組へ必要なスタック・オペランドを、必要に応じてフェッチし、または発生される結果のスタック・オペランド用の余地を作成するためにレジスタの組内に現在保持されているスタック・オペランドをアドレス可能なメモリへ記憶する、ＡＲＭ命令を発生するよう構成されている。各ジャバ・バイトコードは、その実行の前にレジスタの組内に存在しなければならないスタック・オペランドの数を指定する関係「所要充填」値と共に、ジャバ・演算コードを表すＡＲＭ命令の実行の前に利用可能でなければならないレジスタの組内の空レジスタ数を指定する「所要空」値とを有すると考えられるものと認められるであろう。
【００３６】
表２は初期マッピング状態値、所要充填値、最終状態値及び関係するＡＲＭ命令間の関係を図示する。初期状態値と最終状態値は表１に図示したマッピング状態に対応する。命令翻訳器１０８は、それが翻訳している特定のジャバ・バイトコード（演算コード）と関係する所要充填値を決定する。命令翻訳器（１０８）は、それが有している初期マッピング状態に依存して、ジャバ・バイトコードの実行前にレジスタの組にさらにスタック・オペランドをロードする必要があるかどうかを決定する。表１は、初期マッピング状態と共に、関係するＡＲＭ命令（ＬＤＲ命令）を使用してスタック・オペランドをレジスタの組にロードする必要かあるかどうかを決定するために共に印加されるジャバ・バイトコードの所要充填値に適用される検査、さらに前記のスタック・キャッシュ・ロード演算後に採択される最終マッピング状態を示す。実際には、ジャバ・バイトコードの実行前に１個以上のスタック・オペランドをレジスタの組にロードする必要がある場合、スタック・オペランドをレジスタの組の内のレジスタの１つにロードする関係ＡＲＭ命令を各々が有する、複数マッピング状態遷移が発生する。異なる実施例では、単一の状態遷移で複数スタック・オペランドをロードし、従って表２に図示したものを越えるマッピング状態変化を生じることも可能である。
2004522215.tif 000004
表２
【００３７】
表２から分かるように、スタック・オペランドを記憶するレジスタの組にロードされた新たなスタック・オペランドは新たなスタック・オペランドの最上部を形成し、これは初期状態に依存してレジスタの組内のレジスタの特定のものにロードされる。
【００３８】
表３は、特定のジャバ・バイトコードの所要空値がジャバ・バイトコードを実行する前に初期状態を与えることが必要であることを指示している場合に、初期状態と最終状態との間で移動するための、初期状態、所要空値、最終状態及びレジスタの組内でレジスタを空にするための関連ＡＲＭ命令との間の関係を同様な方法で図示する。ＳＴＲ命令によりアドレス可能なメモリへ記憶される特定のレジスタ値は、どのレジスタが現在のスタック・オペランドの最上部であるかに依存して変化する。
2004522215.tif 000005
表３
【００３９】
上述の例示システムでは、所要充填及び所要空条件は相互に排他的である、すなわち命令翻訳器が翻訳しようとしている特定のジャバ・バイトコードに対してある与えられた時に所要充填または所要空条件の一方のみが真であると言えると認められるであろう。命令翻訳器１０８により使用された命令テンプレートと共にハードウェア命令翻訳器１０８によりサポートされるよう選択された命令は、この相互に排他要件が満たされるように選択される。この要件が正しくない場合、必要に応じてレジスタ内に実行の結果を保持することを可能とするためジャバ・バイトコードを表す命令の実行後に、十分な空のレジスタが利用可能であることを許容しない、特定のジャバ・バイトコードがある数の入力スタック・オペランドがレジスタの組内に存在することを必要とする状況が発生する可能性がある。
【００４０】
特定のジャバ・バイトコードは、ジャバ・バイトコードの実行時に消費されるスタック・オペランド数と発生されたスタック・オペランド数との間の差額を表す全体の正味スタック動作を有することが認められるであろう。消費されるスタック・オペランド数は実行前の要件であり、発生されるスタック・オペランド数は実行後の要件であるため、各ジャバ・バイトコードと関係する所要充填及び所要空値は、正味の全体動作がそれ自体満たされている場合でさえも、そのバイトコードの実行の前に満足されなければならない。表４は初期状態、全体スタック動作、最終状態及びレジスタ使用の変化とスタック・オペランドの最上部（ＴＯＳ）の相対位置の間の関係を図示する。ジャバ・バイトコードの所要充填及び所要空値に依存して、特定のジャバ・バイトコードに対する予めの条件を確立するために、表４に図示した状態遷移を実行する前に表２または表３に図示した１つ以上の状態遷移を実行する必要があるかもしれない。
2004522215.tif 000006
2004522215.tif 000007
表４
【００４１】
表２、表３及び表４に図示した状態と条件との間の関係は単一の状態遷移表または状態線図に組合わせることが可能であるが、明瞭性を向上させるため以上に別々に図示したことが認められるであろう。
【００４２】
異なる状態、条件及び正味の動作の間の関係を使用して、命令翻訳器１０８の動作のこの面を制御するハードウェア・ステートマシン（有限ステートマシンの形式で）を定義してもよい。または、これらの関係をソフトウェアまたはハードウェアとソフトウェアの組合わせによりモデル化することも可能である。
【００４３】
サブセットの各ジャバ・バイトコードに対して、表２、表３及び表４と関連して使用してもよいそのバイトコードの関係する所要充填、所要空及びスタック動作値を指示する、可能なジャバ・バイトコードのサブセットの例を以下に図示する。
2004522215.tif 000008
2004522215.tif 000009
【００４４】
これに上述したジャバ・バイトコード命令の各々に治して例示命令テンプレートが続く。図示の命令は、ジャバ・バイトコードの各々の所要挙動を実装するＡＲＭ命令である。現在採択されているマッピング状態に依存して、レジスタ・フィールド「ＴＯＳ−３」、「ＴＯＳ−２」、「ＴＯＳ−１」、「ＴＯＳ」、「ＴＯＳ＋１」、及び「ＴＯＳ＋２」は表１から読取られるような適切なレジスタ指定子により置換される。表記法「ＴＯＳ＋ｎ」は、スタック・オペランドの最上部を記憶するレジスタから開始して、レジスタの組の終わりに到達するまでレジスタ値を上方にカウントして行き、ここでレジスタの組内で最初のレジスタに巻き戻すようにして、スタック・オペランドの最上部を現在記憶しているレジスタの上方Ｎ番目のレジスタを指示する。
2004522215.tif 000010
【００４５】
上記の技術に従ってハードウェア翻訳装置１０８により実行される単一ジャバ・バイトコードの例示実行列を以下に図示する。実行している命令に依存する状態の列を通して進行する初期状態、各状態遷移で実行される動作の結果としての一連のＡＲＭ命令の発生に関連して、実行列が図示され、その全てがジャバ・バイトコードをＡＲＭ命令に翻訳する効果を有する。
2004522215.tif 000011
【００４６】
図６は異なる方法で多数の別なジャバ・バイトコード命令の実行を図示する。図６の最上部は、ｉａｄｄジャバ・バイトコード命令の実行時に発生する一連のＡＲＭ命令とマッピング状態とレジスタ内容の変化を図示する。初期マッピング状態は、レジスタの組内の全てのレジスタが空である状態に対応する０００００である。最初の２つの発生されたＡＲＭ命令は、Ｒ０であるスタック最上部「ＴＯＳ」により２つのスタック・オペランドをスタック・オペランドを記憶するレジスタにポップ（ＰＯＰ）する役割を果たす。第３のＡＲＭ命令が実際には加算演算を実行し、結果をレジスタＲ３（これは現在スタック・オペランドの最上部となっている）に書込み、その間レジスタＲ１内に以前保持されたスタック・オペランドを消費し、従って−１の全体スタック動作を生じる。
【００４７】
次いで各々が２個のスタック・オペランドのロング・ロードを表す２つのジャバ・バイトコードの実行に処理が進行する。最初のジャバ・バイトコードの２の所要空条件は即時に満たされ、従って２つのＡＲＭ  ＬＤＲ命令が発行され実行される。最初のロング・ロード・ジャバ・バイトコードの実行後のマッピング状態は０１１０１である。この状態ではレジスタの組は単一の空レジスタのみを含む。次のジャバ・バイトコードのロング・ロードは満たされない２の所要空値を有し、従って必要な最初の動作は、ＡＲＭ  ＳＴＲ命令を使用したアドレス可能メモリへのスタック・オペランドのプッシュ（ＰＵＳＨ）である。これは、２つの後続するＬＤＲ命令の一部として次にロードされる新たなスタック・オペランドによる使用のためにレジスタの組内のレジスタを解放する。上述したように、命令翻訳はハードウェア、ソフトウェア、またはこの２つの組合わせにより実行される。以下には、上述の技術により発生された例示ソフトウェア・インタープリータの一部分を与える。
2004522215.tif 000012
2004522215.tif 000013
2004522215.tif 000014
2004522215.tif 000015
2004522215.tif 000016
【００４８】
図７は、スタック位置の最上部から開始したデータの２語により指定されるデータ・アレイ内からデータの２語を読取る機能を有するジャバ・バイトコード命令「ｌａｌｏａｄ」を図示する。データ・アレイから読取った２語はその位置を指定した２語と置換わり、最上部のスタック・エントリを形成する。
【００４９】
アレイとデータのアレイ内の位置を指定する入力スタック・オペランドに重ね書きすることなく、「ｌａｌｏａｄ」命令がアレイからフェッチしたスタック・オペランドの一時記憶用の十分なレジスタ空間を有するために、ジャバ・バイトコード命令は２の所要空値を有するものとして指定される、すなわち、「ｌａｌｏａｄ」命令をエミュレートするＡＲＭ命令を実行する前に、スタック・オペランド記憶に割当てられたレジスタ・バンク内の２個のレジスタを空にしなければならない。このジャバ・バイトコードに出会った時に２個の空レジスタがない場合、必要な一時記憶用に空間を作り命令の所要空値を満足するようレジスタ内に現在保持されているスタック・オペランドをメモリにプッシュするためストア演算（ＳＴＲ）が実行される。
【００５０】
２個の別々なスタック・オペランドとしてデータの位置がアレイ位置とそのアレイ内のインデックスにより指定されているため、この命令はまた２の所要充填値を有する。図面は既に所要充填及び所要空条件を満たし、かつ「０１００１」のマッピング状態を有する最初の状態を図示している。「ｌａｌｏａｄ」命令は３個のＡＲＭ命令に分解される。この最初のものは、スタック・オペランドのレジスタ・キャッシュとして作用するレジスタの組の外側の予備作業レジスタにアレイ参照をロードする。次いで第２命令はアレイ内のインデックス値と関連してこのアレイ参照を使用して、スタック・オペランド記憶に割当てた空のレジスタのうちの１つに書込まれる第１のアレイ語にアクセスする。
【００５１】
最初の２つのＡＲＭ命令の実行後、システムのマッピング状態は変化せず、スタック・ポインタの最上部は開始した状態のままに留まり、空と指定されたレジスタは依然として指定されたままであることに注意することが重要である。
【００５２】
一連のＡＲＭ命令の最後の命令は、スタック・オペランドの記憶用のレジスタの組に第２アレイ語をロードする。これは最後の命令であるため、割り込みがその間に発生した場合、命令が完了するまでこれはサービスされず、従ってスタック・オペランドを記憶するレジスタのマッピング状態への変更によりこの命令で入力状態を変更しても安全である。この例では、マッピング状態は「０１０１１」に変化し、これはスタック・ポインタの新たな最上部を第２アレイ語に配置し、アレイ参照とインデックス値との入力変数は今や空レジスタであることを指示する、すなわちレジスタを空であるものとマークすることはスタックから保持している値を削除することと等価である。
【００５３】
「ｌａｌｏａｄ」命令の全体スタック動作はレジスタ内に保持されるスタック・オペランド数を変更しないが、それにもかかわらずマッピング状態のスワップは発生することに注意されたい。最終の演算の実行時に実行されるマッピング状態の変更は、翻訳されているジャバ・バイトコードの機能として命令翻訳器にハード的に配線され、「ｌａｌｏａｄ」命令の特徴として示される「スワップ」パラメータにより指示される。
【００５４】
この図面の例はある１つの特定の命令であるが、記載した原理はＡＲＭ命令またはその他の型式の命令としてエミュレートされる多数の異なるジャバ・バイトコード命令に拡張できることが認められる。
【００５５】
図８は上記の技術を概略的に図示する流れ図である。段階１０でジャバ・バイトコードがメモリからフェッチされる。段階１２でジャバ・バイトコードの所要充填と所要空値とが検査される。所要空または所要充填条件のどちらかが満たされない場合、段階１４と１６でスタック・オペランド（多分複数スタック・オペランド）の各プッシュ及びポップ演算が実行される。この特定のシステムは所要空及び所要充填条件が同時に満たされていないことを許していないことに注意されたい。段階１２の条件が満たされるまで段階１４および１６を経た複数パスが必要となる。
【００５６】
段階１８で、問題のジャバ・バイトコードの翻訳テンプレート内で指定された最初のＡＲＭ命令が選択される。段階２０で、選択されたＡＲＭ命令が段階１０でフェッチされたジャバ・バイトコードのエミュレーションで実行される最後の命令であるかどうか検査される。実行されるＡＲＭ命令が最終命令である場合、段階２１は実行される一連の命令で次のジャバ・バイトコードを指すようプログラム・カウンタ値を更新する役割を果たす。ＡＲＭ命令が最終命令である場合、割り込みが今発生しているかどうかに係わらずこれはその実行を完了し、従ってシステムの状態はジャバ・バイトコードの整合した正常、非割込み、完全実行に到達するため、プログラム・カウンタ値を次のジャバ・バイトコードに更新し、この点から実行を再開しても安全であることが理解できる。段階２０の検査が、最終バイトコードに到達していないことを指示している場合、プログラム・カウンタ値の更新はバイパスされる。
【００５７】
段階２２は現在のＡＲＭ命令を実行する。段階２４でテンプレートの一部として実行を必要とするさらなるＡＲＭ命令があるかどうかに関しての検査が実行される。さらにＡＲＭ命令がある場合、この次のものが段階２６で選択され処理は段階２０に復帰する。これ以上命令がない場合、処理は段階２８に進み、ここでスタック位置の所要最上部とスタック・オペランドを保持する各種レジスタの充填／空状態を反映するために問題のジャバ・バイトコードに指定されたマッピング変更／スワップが実行される。
【００５８】
図８はまた、アサートされた場合に割込みをサービスし、割込み後に次いで処理を再開する点を概略的に図示している。現在のプログラム・カウンタ値が何であれ、バイトコード列の復帰点として記憶されて、段階２２で現在進行中のＡＲＭ命令の実行後に割込みはサービスされることを開始する。現在のＡＲＭ命令実行がテンプレート列内の最後の命令である場合、段階２１はプログラム・カウンタ値を更新し、従ってこれは次のジャバ・バイトコード（命令セット・スイッチが丁度開始された場合はＡＲＭ命令）を指す。現在実行しているＡＲＭ命令が列中の最終命令以外のものである場合、プログラム・カウンタ値は問題のジャバ・バイトコードの実行の開始時に指示されたものと依然として同一であり、従って復帰が実行された時に、全ジャバ・バイトコードが再実行される。
【００５９】
図９はジャバ・バイトコードのストリームを受取りプロセッサ・コアの動作を制御するためＡＲＭ命令（または対応する制御信号）の翻訳されたストリームを出力するジャバ・バイトコード翻訳装置６８を図示する。上述したように、ジャバ・バイトコード翻訳器６８は命令テンプレートを使用して簡単なジャバ・バイトコードをＡＲＭ命令または一連のＡＲＭ命令に翻訳する。各ジャバ・バイトコードを実行すると、スケジューリング論理７０内のカウンタ値が減少される。このカウンタ値が０に到達すると、ジャバ・バイトコード翻訳装置６８は、スレッドまたはタスク間で適切にスケジュールを管理するスケジュール・コードへ分岐するＡＲＭ命令を発行する。
【００６０】
簡単なジャバ・バイトコードは、これらのバイトコードの高速ハードウェア・ベースの実行を行うジャバ・バイトコード翻訳装置６８自体により処理されるが、より複雑な処理演算を必要とするバイトコードは、解釈ルーチンの集成の形式で与えられているソフトウェア・インタープリータに送られる（このようなルーチンの選択の例は本説明で既に与えてある）。特に、ジャバ・バイトコード翻訳装置６８は、受取ったバイトコードがハードウェア翻訳によりサポートされていないことを決定可能で、従ってそのバイトコードを解釈するソフトウェア・ルーチンが見出されるまたは参照されるアドレスへそのジャバ・バイトコードに依存して分岐が実行可能である。スケジューリング論理７０が、スケジュール・コードへの分岐を発生するスケジュール演算が必要であることを指示している時にもこの機構が使用可能である。
【００６１】
図１０は図９の実施例の動作と、ハードウェアとソフトウェアとの間のタスクの分離をより詳細に図示している。全てのジャバ・バイトコードはジャバ・バイトコード翻訳装置６８により受取られて段階７２でカウンタを減少させる。段階７４で、カウンタ値が０に到達したかどうかに関して検査が行われる。カウンタが０に到達した（システムにハード的に配線された所定値またはユーザ制御／プログラムされた値のどちらかから減少カウントする）場合、段階７６でスケジューリング・コードへの分岐が行われる。段階７６でスケジューリング・コードが完了すると、制御はハードウェアに戻され、処理は段階７２に進み、ここで次のジャバ・バイトコードがフェッチされてカウンタは再び減少される。カウンタが０に到達してからは、これは新たな、非零値にここで戻される。または、段階７６のスケジューリング過程の終了時の一部として新たな値をカウンタに強制してもよい。
【００６２】
段階７４の検査が、カウンタが０に等しくないことを示している場合、段階７８はジャバ・バイトコードをフェッチする。段階８０で、フェッチされたバイトコードが段階８２でハードウェア翻訳により実行される簡単なバイトコードであるか、またはより複雑な処理を必要として従って段階８４のソフトウェア解釈に渡さなければならないかに関して決定が行われる。処理がソフトウェア解釈に渡される場合、これが一旦完了すると制御はハードウェアに復帰され、ここで段階７２はカウンタを再度減少して次のジャバ・バイトコードのフェッチを考慮する。
【００６３】
図１１は別の制御装置を図示する。段階８６の処理の開始時に、命令信号（スケジューリング信号）がデアサートされる。段階８８で、フェッチされたジャバ・バイトコードを検査して、ハードウェア翻訳がサポートされている簡単なバイトコードであるかどうか調べる。ハードウェア翻訳がサポートされていない場合、ジャバ・バイトコードを解釈するためＡＲＭ命令ルーチンを実行する段階９０の解釈ルーチンに制御が渡される。バイトコードがハードウェア翻訳がサポートされている簡単なものである場合、処理は段階９２に進み、ここで複数サイクル有限ステートマシンの形式として動作するジャバ・バイトコード翻訳装置６８により１つ以上のＡＲＭ命令が連続して発行される。段階９０または段階９２のどちらかでジャバ・バイトコードが適切に実行されると、処理は段階９４に進み、ここで段階８６でデアサートされる前に命令信号は短期間アサートされる。命令信号のアサーションは、解釈または翻訳命令の部分実行によるデータ統一性の損失の危険を冒すことなくタイマベースのスケジュール割込みが発生可能である適切な安全点に到達したことを外部回路に指示する。
【００６４】
図１２は図１１で発生された命令信号に応答するために使用される例示回路を図示する。タイマ９６は一定の時間間隔の経過後にタイマ信号を周期的に発生する。このタイマ信号は、クリア・タイマ割込み信号によりクリアされるまで、ラッチ９８内に記憶される。ラッチ９８の出力はＡＮＤゲート１００により段階９４でアサートされた命令信号と論理的に組合される。ラッチがセットされ命令信号がアサートされると、ＡＮＤゲート１００の出力として割込みが発生され、標準割込み処理用にシステム内に設けた割込み処理機構を使用してスケジューリング操作を実行する割り込みをトリガするために使用される。割込み信号が一旦発生されると、これは次のタイマ出力パルスが発生するまでラッチ９８をクリアするクリア・タイマ割込み信号の作成をトリガする。
【００６５】
図１３は図１２の回路の動作を図示する信号線図である。プロセッサ・コアのクロック信号は通常の周波数で発生する。タイマ９６は、安全な、スケジューリング操作を開始すべき時であることを指示するために周期的な間隔でタイマ信号を発生する。タイマ信号はラッチされる。命令信号は、特定のジャバ・バイトコードがどの程度迅速に実行されたかに依存する間隔だけ離れた時間に発生される。簡単なジャバ・バイトコードは単一のプロセッサ・コア・クロック時間、またはより標準的には２または３クロック時間で実行するが、高レベル管理型式機能を提供する複雑なジャバ・バイトコードは、ソフトウェア・インタープリータによりその実行が完了する前に数百プロセッサ・クロックサイクルがかかる。どちらの場合でも、スケジューリング操作を開始しても安全であることを指示する命令信号が発行されるまで、未決のアサートされラッチされたタイマ信号はスケジューリング操作をトリガするために作動されない。ラッチされたタイマ信号と命令信号の同時発生が割込み信号の発生をトリガし、その直後にラッチ９８をクリアするクリア信号が続く。
【図面の簡単な説明】
単なる一例として、添付図面を参照して本発明の実施例を以下に説明する。
【図１】
例示の命令パイプライン配列の概略的な図。
【図２】
例示の命令パイプライン配列の概略的な図。
【図３】
フェッチ段構成をより詳細に図示する図。
【図４】
フェッチ段内のバッファされた命令語内からの可変長非ネイティブ命令の読取りを概略的に図示する図。
【図５】
プロセッサ・コア・ネイティブ命令と翻訳を必要とする命令の両方を実行するデータ処理システムを概略的に図示する図。
【図６】
一連の例示命令と状態に対して、スタック・オペランド記憶用に使用されたレジスタの内容、マッピング状態及び翻訳を必要とする命令とネイティブ命令との間の関係を概略的に図示する図。
【図７】
一連のネイティブ命令として非ネイティブ命令の実行を概略的に図示する図。
【図８】
翻訳された命令に対して割込みレイテンシを保存する方法で命令翻訳器が動作する方法を図示する流れ図。
【図９】
ハードウェア及びソフトウェア技術を使用したジャバ・バイトコードのＡＲＭ演算コードへの翻訳を概略的に図示する図。
【図１０】
ハードウェアベースの翻訳器、ソフトウェアベースのインタープリータ及びソフトウェアベースのスケジューリングとの間の制御の流れを概略的に図示する図。
【図１１】
タイマベースの方式を使用したスケジューリング操作を制御する他の方法を図示する図。
【図１２】
タイマベースの方式を使用したスケジューリング操作を制御する他の方法を図示する図。
【図１３】
図１２の回路の動作を制御する信号を図示する信号図。
【図１】
2004522215.tif 000017
【図２】
2004522215.tif 000018
【図３】
2004522215.tif 000019
【図４】
2004522215.tif 000020
【図５】
2004522215.tif 000021
【図６】
2004522215.tif 000022
【図７】
2004522215.tif 000023
【図８】
2004522215.tif 000024
【図９】
2004522215.tif 000025
【図１０】
2004522215.tif 000026
【図１１】
2004522215.tif 000027
【図１２】
2004522215.tif 000028
【図１３】
2004522215.tif 000029
【国際公開パンフレット】
2004522215.tif 000030
2004522215.tif 000031
2004522215.tif 000032
2004522215.tif 000033
2004522215.tif 000034
2004522215.tif 000035
2004522215.tif 000036
2004522215.tif 000037
2004522215.tif 000038
2004522215.tif 000039
2004522215.tif 000040
2004522215.tif 000041
2004522215.tif 000042
2004522215.tif 000043
2004522215.tif 000044
2004522215.tif 000045
2004522215.tif 000046
2004522215.tif 000047
2004522215.tif 000048
2004522215.tif 000049
2004522215.tif 000050
2004522215.tif 000051
2004522215.tif 000052
2004522215.tif 000053
2004522215.tif 000054
2004522215.tif 000055
2004522215.tif 000056
2004522215.tif 000057
2004522215.tif 000058
2004522215.tif 000059
2004522215.tif 000060
2004522215.tif 000061
2004522215.tif 000062
2004522215.tif 000063
2004522215.tif 000064
2004522215.tif 000065
2004522215.tif 000066
2004522215.tif 000067
2004522215.tif 000068
2004522215.tif 000069
2004522215.tif 000070
2004522215.tif 000071
2004522215.tif 000072
2004522215.tif 000073
【国際公開パンフレット（コレクトバージョン）】
2004522215.tif 000074
【国際調査報告】
2004522215.tif 000075
2004522215.tif 000076
2004522215.tif 000077
2004522215.tif 000078
2004522215.tif 000079