(57)【要約】回路構成および方法が、ジャバ・ルックアップスイッチおよびテーブルスイッチ命令のようなスイッチ命令の実行を、スイッチ命令としての同じ命令から複数の条件分岐命令を使用してこの種の命令のエミュレーションによって容易にし、ハードウエア内で直接実行できる。条件分岐命令が一般的にスイッチ命令処理ロジック（１１８）によって生成され、条件分岐命令を本来実行することの可能な実行ロジック（８２）に通させる。同じ命令セットから複数の条件分岐命令を使用してスイッチ命令処理ロジック内で複雑なスイッチ命令をエミュレートすることにより、しばしば複雑なスイッチ命令を完全にサポートすることが必要とされるカスタム回路の量が、本来サポートすることを必要とされるハードウエア・プロセッサ（４８）の実行ロジック（８２）内でスイッチ命令が実質的に低減される。さらに、一般的にソフトウエア翻訳装置への制御を通す必要のあるソフトウエア・エミュレーションと比較して、実行ロジック（８２）によって本来実行することのできる多数の条件分岐命令を使用する命令フェッチ・ロジック（６６）内のスイッチ命令のエミュレートに関連するオーバーヘッドが、性能において実質的に利得を提供する。【選択図】図２
2004519775.tif 000002
【特許請求の範囲】
【請求項１】
（ａ）命令セットによって規定された複数の命令を実行するように構成され、命令セットが少なくとも一つの条件分岐命令と少なくとも一つのスイッチ命令を規定し、条件分岐命令を実行するように構成された実行ロジックと；
（ｂ）実行ロジックによって実行されるために命令セットによって規定された命令をフェッチするように構成された命令フェッチ・ロジックと；
（ｃ）実行ロジックによって実行するために複数の条件分岐命令を生成して命令フェッチ・ロジックにフェッチされたスイッチ命令を処理してフェッチされたスイッチ命令をエミュレートするように構成されたスイッチ命令処理ロジックと；
を備える回路配置。
【請求項２】
フェッチされたスイッチ命令がスタックに記憶されたキー値を試験するように構成され、条件分岐命令がスタックに記憶された少なくとも一つの引数に依存した試験条件に関連しており、実行ロジックが引数をスタックにポップオフするとともに、試験条件を引数に適用することによって条件分岐命令を実行するように構成されており、また、スイッチ命令処理ロジックが実行ロジックによって実行するための命令セットによって規定された少なくとも一つのスタック操作命令を生成してスイッチ命令処理ロジックによって生成された多数の条件分岐命令に基づいてスタック上のキー値を二倍にしてフェッチされたスイッチ命令をエミュレートするように構成されている、請求項１に記載の回路配置。
【請求項３】
フェッチされたスイッチ命令がＮ回の試験を規定し、またスイッチ命令処理ロジックがＮ個の条件分岐命令とＮ−１個のスタック操作命令を生成してフェッチされたスイッチ命令をエミュレートする請求項２に記載の回路配置。
【請求項４】
各条件分岐命令がジャバｉｆｅｑ命令からなり、また各スタック処理命令がジャバ・ｄｕｐ命令を備える、請求項３に記載の回路配置。
【請求項５】
バイトコード・レーンと複数のバイトレーンを含む命令キューを備え、スイッチ命令処理ロジックが各ｉｆｅｑ命令を命令キューのバイトコード・レーンに伝送するように構成され、さらに適合値を少なくとも一つのバイトレーンに伝送することによって各ｉｆｅｑ命令と適合値を関連付けるように構成され、実行ロジックは、各ｉｆｅｑ命令を、同等にするためにスタックからポップされた値をこれに関する適合値と比較することによって実行するように構成されている、請求項４に記載の回路配置。
【請求項６】
スイッチ命令処理ロジックがさらに実行ロジックによる実行のためのスイッチ命令バイトコードを生成し、このスイッチ命令バイトコードが、フェッチされたスイッチ命令のサイズと関連する命令サイズ値に関連しているように構成され、また実行ロジックがスイッチ命令バイトコードと関連する命令サイズ値に基づいたプログラム・カウンタを更新することによってスイッチ命令バイトコードを処理するように構成されている、請求項３に記載の回路配置。
【請求項７】
実行ロジックがさらに、フェッチされたスイッチ命令のエミュレーションを完了する前に、スタックにキー値の残りのコピーをポップオフするように構成されている、請求項３に記載の回路配置。
【請求項８】
フェッチされたスイッチ命令がさらにデフォルト分岐アドレスを規定し、またスイッチ命令処理ロジックがさらに、条件分岐命令のいずれも実行中になされなければ実行されるべき無条件分岐命令を生成するように構成されている、請求項１に記載の回路配置。
【請求項９】
フェッチされたスイッチ命令が、低い値Ｌと高い値Ｈによって境界付けられた適合値の範囲を規定するジャバ・テーブルスイッチ命令を備え、このジャバ・テーブルスイッチ命令がさらに、適合値の範囲から適合値に各々関連する分岐オフセット値（Ｈ−Ｌ＋１）をさらに特定付け、またスイッチ命令処理ロジックが（Ｈ−Ｌ＋１）条件分岐命令を生成し、各条件分岐命令が関連する適合値に対してキー値と比較し、さらに適合に応答して関連するオフセット値を使用して生成されたターゲット・アドレスに分岐するように構成されている、請求項１に記載の回路配置。
【請求項１０】
フェッチされたスイッチ命令が、Ｎ個の適合・オフセット対を特定付けるジャバ・ルックアップ命令を備え、各適合・オフセット対が適合値と、関連するオフセット値を特定付け、またスイッチ命令処理ロジックが適合・オフセット対に関連し、さらに各々の関連する適合対に対してキー値と比較するように構成され、適合に応答して関連するオフセット値を使用して生成されたターゲット・アドレスに分岐するＮ個の条件分岐命令を生成するように構成される、請求項１に記載の回路配置。
【請求項１１】
請求項１に記載の回路配置を備える集積回路デバイス。
【請求項１２】
請求項１に記載の回路配置を備えるデータ処理システム。
【請求項１３】
請求項１に記載の回路配置を規定するハードウエア規定プログラムと；ハードウエア規定プログラムを保持している信号保持媒体とを備えるプログラム製品。
【請求項１４】
信号保持媒体が少なくとも一つの送信タイプ媒体と記録可能媒体を備える、請求項１３に記載のプログラム製品。
【請求項１５】
ハードウエア回路配置によってスイッチ命令の実行を加速する方法であって、スイッチ命令が少なくとも一つの条件分岐命令をさらに規定する命令セットによって規定され、さらに回路配置が条件分岐命令を実行するように構成されたハードウエア実行ロジックを備えている方法において：
（ａ）命令ストリームからスイッチ命令をフェッチする工程と；
（ｂ）フェッチされたスイッチ命令を、複数の条件分岐命令を生成することによってエミュレートし、ハードウエア実行ロジックを使用して複数の条件分岐命令を実行する工程と；
からなるスイッチ命令の実行を加速する方法。
【請求項１６】
フェッチされたスイッチ命令がスタックに記憶されたキー値を試験するように構成されており、条件分岐命令がスタックに記憶された少なくとも一つの引数に依存した試験条件に関連しており、条件分岐命令の実行が引数をスタックにポップオフし、試験条件を引数に適用することを含んでおり、さらにフェッチされたスイッチ命令をエミュレートする工程がさらに、命令セットによって規定された少なくとも一つのスタック操作命令を生成しハードウエア実行ロジックで実行して、生成された条件分岐命令の数に基づいてスタック上のキー値を２倍にする工程からなる、請求項１５に記載の方法。
【請求項１７】
フェッチされたスイッチ命令がＮ個の試験を規定し、フェッチされたスイッチ命令をエミュレートする工程がＮ個の条件分岐命令とＮ−１個のスタック処理命令を含んでいる、請求項１６に記載の方法。
【請求項１８】
各条件分岐命令がジャバｉｆｅｑ命令を備え、また各スタック処理命令がジャバ・ダップ命令を備える、請求項１７に記載の方法。
【請求項１９】
ハードウエア回路配置がバイトコード・レーンと複数のバイトレーンを含む命令キューをさらに含んでおり、フェッチされたスイッチ命令をエミュレートする工程が：
（ａ）各ｉｆｅｑ命令を命令キューのバイトコード・レーンに伝送し、適合値を少なくとも一つのバイトレーンに伝送することによって適合値を各ｉｆｅｑ命令に関連付ける工程と；
（ｂ）同等性のためにスタックからポップされた値をこれに関連する適合値と比較することによって各ｉｆｅｑ命令を実行する工程と；
をさらに含む、請求項１８に記載の方法。
【請求項２０】
フェッチされたスイッチ命令をエミュレートする工程が：
（ａ）フェッチされたスイッチ命令のサイズに関連した命令サイズ値に関連するスイッチ命令バイドコードを生成する工程と；
（ｂ）スイッチ命令バイドコードに関連する命令サイズ値に基づいてプログラム・カウンタを更新することによってハードウエア実行ロジックでスイッチ命令バイトコードを処理する工程と；
（ｃ）フェッチされたスイッチ命令のエミュレートを完了する前に、スタックに、キー値の残りのコピーをポップオフする工程と；
（ｄ）実行中に条件分岐命令がなければ、フェッチされたスイッチ命令から導出されたデフォルト分岐アドレスを含む実行されるべき無条件分岐命令を生成する工程と；
からなるフェッチされたスイッチ命令をエミュレートする、請求項１７に記載の方法。
【請求項２１】
フェッチされたスイッチ命令が、低い値Ｌと高い値Ｈによって境界付けられた適合値の範囲を規定するジャバ・テーブルスイッチ命令を備え、このジャバ・テーブルスイッチ命令がさらに、適合値の範囲から適合値に各々関連する分岐オフセット値（Ｈ−Ｌ＋１）をさらに特定付け、またフェチされたスイッチ命令をエミュレートする工程が（Ｈ−Ｌ＋１）条件分岐命令を生成し、各条件分岐命令が関連する適合値に対してキー値と比較し、さらに適合に応答して関連するオフセット値を使用して生成されたターゲット・アドレスに分岐する工程とを含む、請求項１５に記載の方法。
【請求項２２】
フェッチされたスイッチ命令が、Ｎ個の適合・オフセット対を特定付けるジャバ・ルックアップ命令を備え、各適合・オフセット対が適合値と、関連するオフセット値を特定付け、またフェチされたスイッチ命令をエミュレートする工程がＮ個の条件分岐命令を生成し、各条件分岐命令が適合オフセット対に関連し、さらに各々が関連する適合対に対してキー値と比較するように構成され、適合に応答して関連するオフセット値を使用して生成されたターゲット・アドレスに分岐する、請求項１５に記載の方法。
【請求項２３】
（ａ）ｉｆｅｑ命令、ｄｕｐ命令およびｇｏｔｏ＿ｗ命令を含むジャバ命令によって規定された複数のジャバ・バイトコードを実行するように構成された実行ロジックと；
（ｂ）ジャバ・ルックアップスイッチ命令と、実行ロジックによって実行するためのジャバ・テーブルスイッチ命令からなるグループから選択されたジャバ・スイッチ命令をフェッチするように構成された命令フェッチ・ロジックと；
（ｃ）実行ロジックによって実行するためにｉｆｅｑ、ｄｕｐ命令およびｇｏｔｏ＿ｗ命令の組み合わせを生成することによって、フェッチされたスイッチ命令をエミュレートするように構成されたスイッチ命令処理ロジックと；
を備える回路配置。
【請求項２４】
ジャバ・テーブルスイッチ命令およびジャバ・ルックアップスイッチ命令からなるグループから選択されたジャバ・スイッチ命令の実行を加速する方法であって、
（ａ）ジャバ・スイッチ命令をフェッチする工程と；
（ｂ）ジャバ・スイッチ命令をエミュレートするジャバｉｆｅｑ、ｄｕｐおよびｇｏｔｏ＿ｗ命令の組み合わせを生成する工程と；
（ｃ）ジャバｉｆｅｑ、ｄｕｐおよびｇｏｔｏ＿ｗ命令を実行するように構成されたハードウエア実行ロジックを使用してジャバｉｆｅｑ、ｄｕｐおよびｇｏｔｏ＿ｗ命令の組み合わせの実行によってジャバ・スイッチ命令の実行をエミュレートする工程と；
を備えるジャバ・スイッチ命令の実行を加速する方法。
【発明の詳細な説明】
【０００１】
（発明の分野）
本発明は概して集積回路デバイス設計およびアーキテクチャに関し、より詳しくはバイドコード命令プロセッサ上のスイッチ命令の処理に関する。
【０００２】
（発明の背景）
サン・マイクロシステムズ社による「ジャバ」プログラミング言語のようなプラットホーム独立プログラミング言語は、従来のプラットホーム特定言語に対して顕著な利点を有する。プラットホーム独立プログラミング言語は一般的に、ハードウエア・プラットホームのための特定命令セットを無視して多数のハードウエア・プラットホーム上で実行するのに適したプラットホーム独立プログラム・コード（機械読取可能命令）を利用している。ハードウエア・プラットホームは、時々ネイティブ命令セットと呼ばれる特定フォーマットを有する命令の特定セットを実行する一つまたはそれ以上のプロセッサ（例えば、マイクロプロセッサまたはマイクロコントローラ）を有するコンピュータ・システムを一般的に有する。これはプラットホーム特定言語と対比して、プラットホーム特定コンパイラを利用して、一つの特定ハードウエア・プラットホームに固有のプログラム・コードを生成する。同じソース・コードが、ある例において、異なるプラットホーム特定コンパイラによって、多数プラットホームのために適切なプログラム・コードにコンパイルされる一方で、得られるプログラム・コードはプラットホーム独立ではない。
【０００３】
様々な環境において、プラットホーム独立プログラミム・コードは中間コード・フォーマットにある。これはさらなる処理が特定ハードウエア・プラットホーム上でこの種のコードを実行する必要があるからである。例えば、ジャバについて、中間コードはバイトコードと呼ばれる。一般的に、コンパイラはソース・ファイルから一連の中間コードを生成するのに使用される。従って、この中間コードはソフトウエア・インタープリタ（ジャバ・バーチャル・マシン（ＪＶＭ）として知られている）によって実行され、コンピュータ・システムのためにこれらのコードが実行中にネイティブ命令に変換される。その結果、中間コードは適切なプラットホーム独立プログラム・コード・インタープリタを有するいずれのコンピュータ・システム上で実行可能である。
【０００４】
多数のプラットホーム独立プログラミム・コードは一般的に比較的コンパクトであり、これらはネットワークまたはモデムを介してダウンロードするのに適している。さらに、プログラム・コードがプラットホーム独立であるから、ダウンロード・コンピュータ・システム（またはサーバ）は実行コンピュータ・システム（またはクライアント）の特定ハードウエア・プラットホームに関係なく同じプログラム・コードをダウンロードできる。結果的に、ジャバのようなプラットホーム独立プログラミム・コードは、インターネットを介してソフトウエア・プログラムの分配に対して多大な人口が享受しはじめている。一般的に、インターネットからダウンロードされたプラットホーム・ソフトウエア・プログラムは、ウエブ・ブラウザ内で実行されるアプレットの形態にある。しかし、プラットホーム独立プログラム・コードは、スタンドアロン・アプリケーション、ＯＳ、および実時間埋込システム等々を含む多数の他のユーザを保有していることが理解されなければならない。
【０００５】
しかし、プラットホーム独立プログラミム・コードのもつ一つの問題は、プログラム・コードがしばしば稼働時間中に翻訳されなければならず、これが特定ハードウエア・プラットホームに対して固有なプログラム・コードと比較して実行速度を著しく低下させる。例えば、ほとんどのネイティブ命令のための一般的に一つのクロック・サイクルと比較して各バイトコードを処理するのにあるＪＶＭは５０までのプロセッサ・クロック・サイクルを必要とする。
【０００６】
別の実時間翻訳として、ソフトウエア基準ジット（ＪＩＴ）コンパイラがプラットホーム独立プログラム・コードの翻訳を、特に、ネイティブ・コードを使用してプラットホーム独立コードの機能性をエミュレートすることによって最適化するために開発されてきている。実行速度が簡易なルーチン翻訳上で増している一方で、プラットホーム独立プログラム・コードはなおもネイティブ・コードよりも遅く、付加メモリ・スペースがコンパイラ・コードを記憶するのに必要である。
【０００７】
他の手段において、専用のスタンドアロン・ジャバ・プロセッサが、そのネイティブ命令セットとしてプラットホーム独立命令を利用するのに提案されている。これらのプロセッサは他のハードウエア・プラットホームのための他のネイティブ・プログラムと同様の速さの稼働プラットホーム独立プログラム・コードの能力を有している一方で、プロセッサは非ネイティブ・プログラム・コードを実行するときに、他のプロセッサと同じ問題に悩まされている。
【０００８】
ネイティブ命令プロセッサをジャバ・コプロセッサまたはハードウエア翻訳回路と合成してジャバ・バイトコードの処理を加速することも提案されている。前者の例において、ジャバ・プロセッサは一般的にネイティブ・プロセッサの制御下にあり、かつ、ジャバ・プログラム・コードが実行される必要があるときにはいつでも呼び出される。後者の例において、翻訳回路はジャバ・バイトコードを収集することを試行し、バイトコードをネイティブ命令に翻訳し、これによってジャバ・プログラム・コードがネイティブ・プロセッサによって要求されたときに、要求に応答してネイティブ・プロセッサに帰還された命令がプロセッサに対して固有なフォーマットとされる。
【０００９】
いずれの場合においても、しばしばジャバ・バイトコードのサブセットのみがコプロセッサやハードウェア翻訳回路によりサポートされている。なぜなら、ジャバ・バイトコードは複雑であり、ジャバ・バイトコード命令セットのすべてをサポートするために付加回路が要求されるためである。ジャバはスタックを基準とする言語であって、しばしばハードウエア内で効率よく実行することが困難である。さらに、より複雑な命令のいくつかが、一般的なジャバ・コンピュータ・プログラム内で比較的あまり生成しないと考えられているハードウエア内に設けられるカスタム回路が過度の量を必要とする。各命令に対して、ハードウエア内で命令を実行する付加的費用と、達成されることになる性能中の付加的な利得との間にもともとトレードオフが存在する。
【００１０】
ハードウエア内で直接実行できない命令のために、一般的にネイティブ・プロセッサで実行されるＪＶＭはこれらの命令を、しばしば相当な性能ペナルティを伴って処理する。コプロセッサ機構内で非実行命令を処理するために、例えば制御がコプロセッサからネイティブ・プロセッサに伝送されなければならず、また命令がネイティブ・プロセッサ上で実行されるＪＶＭによって翻訳されなければならず、さらに制御はジャバ・プロセッサに帰還されなければならない。
【００１１】
結果として、当該技術において、できる限り多数のジャバ・バイトコード命令をハードウエア内で実行する方法が相当必要であり、これによりＪＶＭ翻訳を必要とする命令の頻度を最小化する。
【００１２】
ハードウエアで実行することが困難である一つの特定のタイプの命令として、スイッチ命令がある。例えば、ジャバは二つのタイプのスイッチ命令、すなわち、ルックアップスイッチ命令とテーブルスイッチ命令をサポートする。各々多数のプログラミング言語によってサポートされた「ケース」ステートメントの類似方法で作動する。
【００１３】
例えば、ルックアップスイッチ命令は、命令の前にスタックの方に押しやられるキー値に加えられる複数の試験を規定する多数の適合−オフセット対を一般的に含んでいる。各適合−オフセット対は、キー値と比較される適合値と、適合が関連する適合値で生成するときはいつでもジャンプするターゲット・アドレスを計算するために使用される関連するオフセット値を含んでいる。この命令を実行するために、ＪＶＭはキーをスタックにポップし、これを各適合値と比較する。キーが適合値の一つに等しければ、ＪＶＭが適合する適合値に関連するオフセットをルックアップスイッチ・バイトコードのアドレスに加算することによってターゲット・アドレスを計算する。ＪＶＭがターゲット・アドレスにジャンプし、そこで実行を続行する。適合値のどれもキーに等しくなければ、ＪＶＭがデフォルト・ターゲット・アドレスにジャンプし、またルックアップスイッチ命令によって特定付けられる。
【００１４】
テーブルスイッチ命令は、適合オフセット対を特定付けることを除いてルックアップスイッチ命令と類似しており、というよりはむしろ適合値の範囲は命令によって規定された高低値で特定付けられる。範囲内に規定された適合値の数に等しいオフセット値のリストも命令によって特定付けられる。この命令を実行するために、ＪＶＭがキーをオペランド・スタックにポップオフし、これを高低値と比較し、特定範囲内の適合ング値に対応するオフセット値を使用して、ＪＶＭによってジャンプされたターゲット・アドレスを計算する。キーが低値未満であり、また高値を超えていれば、命令によっても特定付けられたデフォルト・オフセットがターゲット・アドレスを計算するのに使用される。
【００１５】
両タイプのジャバ・スイッチ命令はハードウエア内で実行するのが困難であり、両者ともその長さが変化し、また両者とも命令を完全に実行するのに必要とするシーケンス試験を実行するために相当量の処理を必要とする。従って、しばしばこれらのタイプの命令は制御をソフトウエアＪＶＭに送ることによって実行され、これによってこの種の命令の処理オーバーヘッドを増大させ、システムの実行を低下させている。
【００１６】
従って、当該技術において、ジャバ・ルックアップスイッチおよびテーブルスイッチ・バイトコード命令のようなスイッチ命令を実行するデータ処理システムの性能を改善する方法が相当必要である。
【００１７】
（発明の概要）
本発明は、ジャバ・ルックアップスイッチおよびテーブルスイッチ命令のようなスイッチ命令を、スイッチ命令と同じ命令セットから条件分岐命令を用いた命令のエミュレーションにより、ハードウエアで実行する回路配置および方法を提供することによる従来の技術に関連する問題を述べる。この発明はハードウエアで直接実行することもできる。条件分岐命令は一般的にスイッチ命令処理ロジック（命令フェッチ・ロジック内で実行される）によって生成され、条件分岐命令を本質的に実行できる実行ロジックに送られる。
【００１８】
同じ命令セットから複数の条件分岐命令を使用してスイッチ命令処理ロジック内で複雑なスイッチ命令をエミュレートすることにより、しばしば複雑なスイッチ命令を完全にサポートするのに必要とされるカスタム回路の量が、ハードウエア・プロセッサの実行ロジック内でスイッチ命令を本質的にサポートする為に必要とされるものから実質的に減じられる。さらに、制御をソフトウエア翻訳に伝送するのに一般的に必要とされるソフトウエア・エミュレーションと比較して、実行ロジックの実行によって本質的に実行できる多数条件分岐命令を使用する命令フェッチ・ロジック内のスイッチ命令のエミュレートに関連するオーバーヘッドが実行において実質的な利得を提供する。
【００１９】
本発明と一致した一実施形態において、例えばジャバ・ルックアップスイッチとテーブルスイッチ命令が、ｉｆｅｑバイトコード命令を本質的にサポートする実行ロジックによる実行によって、実行のための命令フェッチ・ロジック内の複数のジャバｉｆｅｑバイトコード命令の生成によりエミュレートされる。さらに、スタック管理を簡単にするために、一つまたはそれ以上のダップ・バイトコード命令も生成されてスタック上でルックアップスイッチまたはテーブルスイッチ命令のためのキー値を２倍にする。これによってキー値が各ｉｆｅｑバイトコード命令のために利用可能になる。無条件分岐命令、例えば、ｇｏｔｏ＿ｗバイトコード命令も生成されルックアップスイッチまたはテーブルスイッチ命令のデフォルト分岐をエミュレートする。
【００２０】
本発明を特徴付けるこれらのおよび他の利点と特徴は、ここに添付の請求の範囲で説明し、そのさらなる部分を形成する。しかし、本発明とその使用によって達成される利点および目的をよりよく理解するために、図面および本発明の代表的な実施形態を説明した添付の説明事項を参照する。
【００２１】
（発明の詳細な説明）
本発明の図示実施形態はジャバ互換性プロセッサまたはコプロセッサのようなバイトコード命令プロセッサ内で複雑なスイッチ命令の処理を、多数条件分岐命令を使用するこの種のスイッチ命令のエミュレーションを介して加速する。
【００２２】
以後に説明する実施形態は、ハードウエア内のジャバ・テーブルスイッチおよびルックアップスイッチ・バイトコード命令のエミュレーションに合焦する。これはジャバ・ダップ命令およびｇｏｔｏ＿ｗ命令のような付加的なサポート命令と結合したジャバ命令セットからのｉｆｅｑバイトコード命令のような条件分岐命令を使用してなされる。これについては以下により詳しく説明する。さらに、これから説明する実施形態は、それ自体テーブルスイッチおよびルックアップスイッチ命令のハードウエア実装を直接行うことを要求されるカスタムでない回路であるにもかかわらず、エミュレートされたテーブルスイッチおよびルックアップスイッチ命令を処理するようにカスタム化された実行ロジックを利用する。
【００２３】
しかし、この開示の特典を有する当該技術に習熟した人は、ここに説明したハードウエア基準スイッチ命令エミュレーションが、例えば、ジャバ・バイトコード以外の中間及び／又はプラットホーム命令セットを含むハードウエア内の少なくとも一部（すなわち、命令セットからの命令の少なくともサブセットがハードウエアによって直接実行されることが可能である）が実行可能である命令セットを共動する他のプログラミング環境内でスイッチ命令をエミュレートするのに利用できることが理解されるであろう。この開示の特典を有する当該技術に習熟した人にとって理解できるであろうことは、他のジャバ命令がここに開示した以外のスイッチ命令をエミュレートするように使用できることである。さらに、実行ロジックはここに開示した以外の方法でハードウエア基準スイッチ命令エミュレーションをサポートするようにカスタム化でき、あるいはハードウエア基準スイッチ命令をサポートするようにカスタム化することがまったくできない。むしろ全てのカスタム化回路はハードウエア設計中のどこにでも、例えば命令フェッチ及び／又はディスパッチ・ロジック内に存在する。
【００２４】
図面を参照して、いくつかの図を通して同じ番号は同じ部材を示す。図１は本発明と一致するハードウエア基準スイッチ命令エミュレーションと共動するデータ処理システム１０を示す。図示された実施形態において、データ処理システム１０は図１に示した要素全てを含む単一の集積回路デバイス、またはチップを使用して実行される。だだし、オフ−チップ要素２８のみは除く。集積回路デバイスは内蔵システム・オン・チップ（ＳＯＣ）環境を備えている。その回路内には、マスター・プロセッサないしＣＰＵ１２を含むマルチプロセッサ、例えばＡＲＭ、ＭＩＰＳまたはＰｏｗｅｒＰＣプロセッサ・コアのようなＲＩＳＣプロセッサが設けられている。プロセッサ１２は一般的に、例えばプライマリ（Ｌ１）キャッシュ１４のような１階層以上のキャッシュ・メモリを含んでいる。ＣＰＵバス１６は、プロセッサ１２をブリッジ１８を介してシステム・バス２０に接続している。このバスは、ＳＲＡＭ２２、バス・アービタ２４および外部バス・インターフェース・ユニット（ＥＢＩＵ）２６のような多数の要素を含んでいる。ユニット２６はシステム・バスを一つ以上のオフチップ・デバイス２８、例えばＤＲＡＭ、外部バス、外部デバイス等々を結合するのに使用されている。
【００２５】
ＣＰＵバス１６は、プロセッサ１２をブリッジ３０を介して周辺バス３２に結合している。例えば、プロセッサを、ビデオ処理コア３４、音響処理コア３６およびＩ２Ｃコア３８のような多数のアプリケーション特定コアに接続している。システム・バス２０は一般的に機能制限操作を実行するための高速バスであり、また一般的にプロセッサ１２の特定アーキテクチャに基づいている。一方、周辺バス３２は一般的に低速バスであり、例えばバスに接続された種々のコア内のレジスタとのアクセスに使用するＶＬＳＩ周辺バス（ＶＢＰ）である。
【００２６】
ハードウエア基準ジャバの加速は、第２（Ｌ２）キャッシュ４４を伴うメモリ管理ユニット（ＭＭＵ）４２、翻訳コントローラ４６および一つまたはそれ以上のジャバ・プロセッサ・コア４８を含むジャバ加速回路配置４０を介して実行される。メモリ管理ユニット４２はシステム・バス２０に接続され、ジャバ・オブジェクトの管理、ガーベッジ・コレクションの実行およびメモリ・アクセスの管理を含むメモリで種々のデータ管理操作を実行する。ＭＭＵ４２はまた、メモリの従来のぺージングを、より遅い仮想メモリ・システムにする。
【００２７】
割り込みコントローラ４６はハードウエア基準割り込み処理を実行し、また周辺バス３２に接続される。割り込みコントローラ４６は概してどのプロセッサとも独立して割り込みを取り込むことによって作動し、またプロセッサへの割り込みを最小にすることが可能ならば、割り込みを処理する。
【００２８】
各ジャバ・プロセッサ・コア４８が周辺バス３２に結合され、さらにＭＭＵ４２にも直接高速ポイント間接続を介して結合される。
【００２９】
ＭＭＵ４２および割り込みコントローラ４６内に実装された機能性が、従来のメモリ管理及び／又は割り込みデバイスによって、他の実施形態ではソフトウエアで部分的にまたは全体的に処理されることが理解できる。さらに、どの数のジャバ・プロセッサ・コア４８も種々の実施形態に利用できることが理解できる。他のシステム・アーキテクチャおよびデータ処理環境も、例えば図７（以下に詳細に説明する）を使用できる。さらに、付加的なデバイスがＣＰＵ１２およびジャバ・プロセッサ４８、例えば内蔵ＤＲＡＭ、他のアプリケーション特定コア等々を組み込む集積回路デバイス上に配備される。さらに、図１に示す種々の要素をこれに代わるものとして多数の集積回路デバイスに配備することもできる。
【００３０】
他の修正例も当該技術に習熟した人には理解できるであろう。
【００３１】
本発明と一致するハードウエア基準スイッチ命令エミュレーションは、一般的にプロセッサ、コプロセッサまたはシステム−オン−チップ（ＳＯＣ）デバイスのような他のプログラム可能な集積回路デバイスのための回路構成内に設けられ、さらに広範囲なプログラム可能なデバイスがここに開示した種々の特徴を利用できることが理解できる。さらに、当該技術において周知のように、集積回路デバイスは一般的に一つまたはそれ以上のコンピュータ・データ・ファイルを使用して設計され、製造される。ここではハードウエア規定プログラムと呼ぶことにし、デバイス上の回路配置のレイアウトを規定する。このプログラムは一般的に設計ツールによって生成され、また続いて製造中使用され半導体ウエハに適用される回路配置を規定するレイアウト・マスクを生成する。一般的に、プログラムは事前規定フォーマット内に、ＶＨＤＬ、ｖｅｒｉｌｏｇ、ＥＤＩＦ等のようなハードウエア記述言語（ＨＤＬ）を使用して用意される。本発明はこれまで、また以後において完全に機能する集積回路デバイスおよびこの種のデバイスを利用するデータ処理システムに実行された回路配置に関して説明してきており、また説明するが、当該技術に習熟した人は本発明と一致する回路配置が多様な形態にあるプログラム製品としての配布が可能であり、また本発明は配布を実際に実行するのに使用される信号保持媒体の特定タイプに関係なく等しく適用することが理解できる。信号保持媒体の例には、これに限定するのもではないが、揮発性および不揮発性メモリ・デバイス、フロッピーディスク、ハードディスク・ドライブ、ＣＤ−ＲＯＭおよびＤＶＤ等々、さらにデジタルおよびアナログ通信リンクのような伝送タイプの媒体のような記録可能なタイプの媒体が挙げられる。
【００３２】
図２は各ジャバ・プロセッサ・コア４８をより詳しく示す。システム・メモリとの接続が、ＭＭＵ４２のＬ２キャッシュ（図１）に直接結合されたメモリ・インターフェース及びアービタ・ブロック６０を介して設けれている。命令およびデータ・ストリームがそれぞれ、メモリ・インターフェース及びアービタ・ブロック６０に結合された命令キャッシュ６２とデータ・キャッシュ６４内でキャッシュされる。命令キャッシュ６２内に受信された命令が命令フェッチ・ユニット６６に送られ、これが命令発送ユニット７０に結合されたマルチステージ命令キュー６８に供給する。
【００３３】
データ・キャッシュ６４に保持されたデータが同様に、命令キュー６８内に待機している命令の実行に関係して使用するためにデータ・キュー７２に供給される。さらに、ジャバ実行環境を設けるために、ジャバ仮想マシンのための付加的な内部データがブロック７４、７６および７８に記憶され、それら全てが第２データ・キュー８０に供給される。ブロック７４がジャバ仮想マシンによって信頼されている種々のスタックを記憶し、一方ブロック７６が定数のプールを記憶する。ブロック７８がジャバ・プロセッサによって実行される現在の方法のためのローカル変数を記憶する（以下に説明する方法アドレスを含む）。
【００３４】
マルチポート・メモリ構造を使用してブロック７４内でスタックを実行するためのあるアプリケーションが望まれる。従って、多数スタック操作が所与のサイクルで実行される。例えば、特定サイクル内で生成する四つのスタック操作を許容する４ポート・メモリをサポートすることが望まれる。このようにすると、サイクル当り多数の命令の実行が容易になる。この種の機能性をサポートするようにマルチ−ポート・メモリ構造を設けることは、この開示の利益を得る当該技術に習熟した人の能力範囲内にある。
【００３５】
命令発送ユニット７０を初めとしてキュー７２と８０の各々は命令および関連データを実行ユニット８２に供給し、ここで処理される。実行ユニット８２はステージＤＥＣ、Ｅ０、Ｅ１およびＥ２を含む四つのステージ実行として示されているが、これに変わって他の実行ユニット形態も使用できる。
【００３６】
多数の従来アーキテクチャにより、実行ユニット８２が演算論理ユニット（ＡＬＵ）８４と浮動小数点ユニット（ＦＰＵ）８６を使用する。それらはデータをデータ・キャッシュ６４に書き込む。さらに、トレース・ブロック８８がキュー８７を介して実行ユニット８２に結合されており、回路のデバグ能力を提供している。クロックおよびリセット回路がブロック９０で示されており、それ自体レジスタ・インターフェース９２として周辺バス３２に結合されている。レジスタ・インターフェース・ブロック９２は一つまたはそれ以上の割り込み信号を出力することが可能である。この信号は割り込みコントローラ４６（図１）によって検出、処理される。
【００３７】
図３は各ジャバ・プロセッサ４８の命令処理ロジックをより詳しく示す。特に、命令キュー６８だけでなく命令フェッチ・ユニット６６は、ここで説明する命令処理ロジックを実行する主要ロジック要素から取り出して示している。
【００３８】
ジャバ・プロセッサ４８内の命令処理ロジックは概してＮ−ステージ・キュー６８を維持するとともに、ルックアヘッド組合せロジックを使用して、最適にできるシーケンスを検索する。図示実施形態において、キューは６ステージの長さである。各キュー要素Ｑ０−Ｑ５は、バイトコード・レーン１２２内に配列されたレジスタを含み、また０から８のレジスタが複数のバイト・レーン１２４に配列されて、バイトコード１２２を通過する命令の実行に使用するための引数とオペランドを記憶する。一対のピンポン・バッファ１００、１０２が、命令キャッシュ・ユニット（ＩＣＵ）６２から連続して充填され、これによってバッファ１００、１０２の内の一つがバイトコード・パーサ１０４によって分析され、バッファ１００、１０２の他方が充填される。
【００３９】
バイトコード・パーサ１０４が対をなす命令を調査し、一対の同様のＲＯＭ１１０を含むデコード・マイクロコード１０８からの調査を実行する。デコード・マイクロコードを含む一対のＲＯＭを提供することにより、バイドコード・パーサ１０４が一度にキュー６６内で二つの命令を同時に識別、配置することができる。キュー６８のバイトコード・レーン１２２とバイトレーン１２４が、実行ユニットないしロジック（図３では省略）を実行して発送するために命令発送ユニットないしロジック７０に出力する。
【００４０】
各バッファ１００、１０２は、一般的に長さが１２８ビット（４個の３２ビット・ワード）であり、また命令キャッシュ６２のキャッシュ・レーン幅に等しいが、他のサイズもこれに代わって使用することもできる。さらに、命令キュー６８は長さが６ステージであり、また幅が９バイトであるが、他の長さ及び／又は幅もこれに代わって使用することができる。キュー６８は命令ストリーム内でルックアヘッドおよびルックビハインド処理をある程度可能にする十分な長さ、例えばルックアヘッド・ロジック１２６はキューの種々のステージに接続された複数のロジック・ブロック１２８を含んでいるのが望ましい。
【００４１】
さらに、バイトコード命令が実行されるときに、各ＲＯＭ１１０は一般的にバイトコード命令に関連する適切なデータを、実行ユニットによって使用するためのバイトレーンに選択的にルーチングする手助けに使用するデコード信号を含んでいる（例えば、２５６個の８ビットエントリ、各バイトコードにつき一つ）。一例として、ｉｌｏａｄ命令の分析がデコード信号の生成となり、バイトコード命令（実行ユニットによって予想されるインデックス値）に続くバイトを命令キュー内のバイトレーン０にルートする。マイクロコード命令がＲＯＭ（例えば、ＰＬＡまたはレジスタ）以外のロジックに記憶され、また他の実施形態中にコピーする必要はない。しかし、二重ルックアップを提供することにより、バイトコード・パーサ１０４はクロック・サイクルで多数の命令を処理することができ、実行ロジックが、キュー内の不十分な命令データのために枯渇することから回避される。
【００４２】
バイトコード・パーサ１０４が種々の機能ブロックを含み、基本命令デコーディングに渡って種々の性能エンハンスメントを提供する。例えば、ワイド・ビルダ・ブロック１１２がジャバ・ワイド・バイトコードを処理するのに使用され、付加的なバイトを伴うローカル可変指数を大きくする。同様にして、分岐検出ブロック１１４が分岐予想能力を提供するのに使用され、またバイトレーン・ソータ・ブロック１１６がデコード・ロジックを割り込みして適切なデータを種々のバイトレーンにルートし、特定バイトコードのためのデータの既知ルーティングに基づく実行ロジックを実質的に簡易化することができる。
【００４３】
さらに、ハードウエア基準スイッチ命令エミュレーションを実行するために、スイッチ・ビルダー・ブロック１１８がバイドコード・パーサ内に設けられ、ジャバ・バイトコード命令の「ジャンプ」クラスを検出し処理し、ジャバ環境（例えば、ルックアップスイッチおよびテーブルスイッチ）によってサポートされた種々のスイッチタイプの命令を提示する。他のデータのうちで、ブロック１０４が記憶されたローカル変数７８から方法アドレス変数１２０を受信しベース・アドレスを提供し、ここからターゲット・アドレスが処理されたスイッチ命令によって生成される。
【００４４】
しかし、ブロック１１８のハードウエア基準スイッチ命令エミュレーションを説明する前に、ワイド・ビルダー・ブロック１１２およびルックアヘッド・ロジック１２６について簡単に説明する。
【００４５】
ワイド・ビルダー
ジャバ・ワイド・バイトコードは付加バイトを伴ってローカル可変インデックスを伸長している。このタイプの命令の処理を加速するために、ブロック１１２が特にこれらの命令を処理するのに使用され、従って、ワイド・バイトコードに遭遇したときに、命令はこれがキュー内に配置される前に、事前処理される。ワイド・バイトコードのための二つの命令フォーマットがある。
【００４６】
フォーマット１：ｗｉｄｅ＜ｏｐｃｏｄｅ＞、ｉｎｄｅｘｂｙｔｅｌ、ｉｎｄｅｘｂｙｔｅ２；ここに＜ｏｐｃｏｄｅ＞は、ｉｌｏａｄ、ｆｌｏａｄ、ａｌｏａｄ、ｌｌｏａｄ、ｄｌｏａｄ、ｉｓｔｏｒｅ、ｆｓｔｏｒｅ、ａｓｔｏｒｅ、ｌｓｔｏｒｅ、ｄｅｓｔｏｒｅまたはｒｅｔのいずれかである。
フォーマット２：ｗｉｄｅ、ｉｉｎｃ、ｉｎｄｅｘｂｙｔｅ１、ｉｎｄｅｘｂｙｔｅ２、ｃｏｎｓｔｂｙｔｅ１、ｃｏｎｓｔｉｂｙｔｅ２。
【００４７】
概して、ワイド・バイトコードはバイトコードが、修正されたバイトコードの符号なしの８ビット・ローカル可変インデックスを符号なしの１６ビットインデックスに拡張することによってこれに直ちに追従するようにバイトコードを修正する。ワイドに追従するバイトコードがｉｉｎｃであれば、ｉｉｎｃバイトコードのローカル可変インデックスとそのインクリメントの両者がエキストラ・バイトによって拡大される。
【００４８】
ワイド・バイトコード修正命令の処理を加速するために、ブロック１１２が拡大データを伴うバイトレーンを満たすように形成され、次にバイトコードが（例えば、「ｗｉｄｅ」ビットを介して、またはユニーク・バイトコードを介して）ワイド修正された実行ロジックに通知する。こうして、実行ロジックは拡大データを使用して命令を処理するように修正される必要があるだけで、命令の非ワイド修正例のための実行ロジックから最小カスタム化される。
【００４９】
従って、例えばｉｉｎｃ命令に追従されたワイド命令を含む命令ストリームのために、ブロック１１２がｗｉｄｅとｉｉｎｃ命令を合成して新しいバイトコード、すなわち、ｉｉｎｃ＿ｍｏｄにするように構成されている。これはｉｉｎｃバイトコードと同じ値を有しているが、デコード・マイクロコードが修正に反映する。ブロック１１２がバイトコード・レーン内に０ｘ８４のｉｉｎｃバイトコード値を配置し、バイトレーン・ソータ１１６に通知して４オペランドをキューのバイトレーン０−３に通知する。さらに、ワイド・ビットがセットされ、バイトレーン内でワイド・データの存在の実行ロジックが通知される。実行ロジックの適切な形態によって、０ｘ８４バイトコードに関する「ｗｉｄｅ」ビットのアサートの検出がワイド命令としてのバイトコードの処理を開始する。
【００５０】
別の例として、ｉｌｏａｄバイトコードに追従されたワイド・バイトコードを処理するために、ブロック１１２が、ワイドとｉｌｏａｄ命令を合成して新しいバイトコード、すなわち、ｉｌｏａｄ＿ｍｏｄが形成される。これはｉｌｏａｄと同じ値を有するが、修正を反映するマイクロコードをデコードする。ブロック１１２はバイトコード・レーン内に０ｘ１５のｉｌｏａｄバイトコード値を配置し、バイトレーン・ソータ１１６に通知して二つのオペランドをキューのバイトレーン０−１に配置する。さらに、ワイド・ビットがバイトレーン中のワイド・データのある実行ロジックを通知するようセットする。実行ロジックの適切な形態により、０ｘ１５バイトコードに関する「ｗｉｄｅ」ビットのアサートの検出が、ワイド命令としてのバイトコードの処理を開始する。
【００５１】
他のワイド修正バイトコードは同様にして処理され、また実行ロジックをこの種の機能性をサポートするように修正することは、この開示の利益を有する当該技術に習熟した人によって理解できる。さらに、ワイド・バイトコード事前処理はある実施形態には使用しない。
【００５２】
ルックアヘッド・ロジック
命令フェッチ・ユニットないしロジック６６は、ルックアヘッド・ロジック１２６も含んでおり、命令キュー６８を試験し、スタック操作ないしＡＬＵ操作が適正化されるか、及び／又は命令がリソース制限を有しているかどうかを決定する。これはしばしば実行ユニットに一度に一つを超える命令を実行せしめる。すなわち、スーパースケラー操作を実行する。
【００５３】
スーパースケラー操作は、キュー内に少なくとも二つの命令の存在を必要とする。スーパースケラー操作が行われると、デコードを介する命令キューからの第２命令の通過によって生成され、実行ロジックに発送される。従って、ルックアヘッド・ロジックの一つの目的はスタックの適正化、ＡＬＵの適正化およびリソースの制限を探索し、これらを命令発送ユニット７０に報告する。
【００５４】
スタック操作適正化
スタックはサイクル当たり４ワード操作を処理するように形成されている。従って、スタックを使用する全ての命令は、ルックアヘッド・ロジックによって試験され、またスタックの使用を最大にすることができるときに合成される。
【００５５】
例えば、多数のスタック操作はより大きい命令に合成される。例えば、四つのサインされた整数プッシュ、すなわち、ＳＩＰＵＳＨ０ｘ０００３、ＳＩＰＵＳＨ０ｘ０００２、 ＳＩＰＵＳＨ０ｘ０００１、およびＳＩＰＵＳＨ０ｘ００００を含むバイトコード・ストリームが必要である。四つの連続サイクルでこれらを処理する代わりに、ルックアヘッド・ロジックが形成されてこれらの命令が、適切な値で満たされたバイトレーン０−７でプッシュされる単一のＰＵＳＨ命令、例えばＰＵＳＨ０ｘ００００００００ ０ｘ０００００００１ ０ｘ０００００００２ ０ｘ０００００００３に合成される。実行ロジックのカスタム化により、またプッシュされる値の数を識別するデコード信号の供給により、実行ロジックが同じクロック・サイクル内でスタック上に四つの値を押し上げるように構成されている。この結果、実質的な性能改善が得られる。
【００５６】
別の実施形態として、スタック操作が同時実行のための他の関連するバイトコードと合成される。例えば、通常４サイクルで実行されるバイトコード、すなわち、ＳＩＰＵＳＨ ０ｘ００００、 ＳＩＰＵＳＨ ０ｘ０００１ ＳＩＰＵＳＨ ０ｘ０００２およびＡＡＳＴＯＲＥ を含むバイトコード・ストリームを必要とする。ルックアヘッド・ロジックによる命令のこの合成の検出は実行ロジック、例えば：
ＡＡＳＴＯＲＥ ０ｘ０００００００２ ０ｘ０００００００１ ０ｘ００００００００によって処理するための新しい拡張命令の生成となる。これは単一サイクル内で適切な実行ロジックによって実行される。例えば、実行ロジックはスタックをバイパスし、拡張ＡＡＳＴＯＲＥ命令内で三つのオペランドで直接操作し、従って、単一サイクルで命令を処理するように構成される。
【００５７】
なおも別の例として、スタック操作は他の関連しない命令と合成される。例えば、ダブル・トウ・ロング（ＤＬ２）バイトコードおよび二つのプッシュを含むバイトコード・ストリームを考慮する：すなわち、Ｄ２Ｌ，ＢＩＰＵＳＨ ０ｘ０００１とＢＩＰＵＳＨ０Ｘ００００は通常６サイクルで実行される。ルックアヘッド・ロジックによる命令のこの合成の検出は実行ロジック、例えば、
Ｄ２Ｌ ＰＵＳＨ ０ｘ００００００００ ０ｘ０００００００１  による処理のための新しい命令を生成することになる。これは適切な実行ロジックを使用して２サイクルで実行される。第１サイクルにおいて、Ｄ２Ｌバイトコードのための二つの値がスタックからポップされる。次に、第２サイクルにおいて、値がプッシュ・バイトコードのために二つの引数と一緒にスタックに変換され、プッシュされる。
【００５８】
ＡＬＵ操作適正化
ＡＬＵは一つまたは二つの操作に対して一度に多数ワード（例えば、４ワードまで）を処理する二重機能性を含んでいる。例えば、ＡＬＵが整数に対して二つの演算を、あるいは二重またはフロートに対して一つの演算を実行するように形成されることが望ましい。従って、ルックアヘッド・ロジックは、バイトコードが最大ＡＬＵ使用を最大になるように合成できるかどうか決定するように形成されるのが望ましい。
【００５９】
例えば、二つの整数のためのバイドコード・ストリームのたし算を考慮してみよう：
ＩＡＤＤ（二つのポップス、二つの補集合加算、一つのプッシュ） ３＋ｎ サイクル
ＩＡＤＤ（二つのポップス、二つの補集合加算、一つのプッシュ） ３＋ｎ サイクルここにｎは数学的演算を実行するたのに必要なサイクル数である。
【００６０】
これらの命令の処理を加速するために、ルックアヘッド・ロジックが実行ユニットに伝達するための次の命令を生成するように形成される。すなわち、
ＰＯＰ ｖａｌ１ ｖａｌ２ ｖａｌ３ ｖａｌ４ （１サイクルで一度に全て四つをポップ）
ＩＡＤＤ ｖａｌ１ ｖａｌ２ ｖａｌ３ ｖａｌ４（ｎサイクルでＡＬＵに２セットの整数を送る）
ＰＵＳＨ ｒｅｓｕｌｔ１
ｒｅｓｕｌｔ２（１サイクルに両方のｒｅｓｕｌｔをプッシュ）
実行ロジックの適切な形態により、命令のこのストリームを実行する時間が６＋２＊ｎサイクルから２＋ｎサイクルに短くなる。両方のＡＤＤ操作が並行して実行され、これによってｎサイクルの合計を得ることができる。
【００６１】
リソース制限の適正化
スーパースケーラ（他と一緒に実行する）を作動させる命令のためには、互いに干渉し合わないことである。データ・キャッシュ・メモリまたはローカル可変メモリのような種々のリソースへのアクセスは、互いに実行する命令のある一定の組み合わせを制限する。命令スタック・ユニット（ＩＳＵ）の集中的使用により、命令がスーパースケラーになることが回避できる。ルックアヘッド・ロジック査定に基づいているのはキューであり、命令発送ロジックは、命令がある一定の従属ルールに基づいて命令がスーパースケーラーに行くときを決定するのに必要とされる。例えば、表１は一般的にジャバ・プログラミング環境内の他の命令と一緒に実行することができる命令の分類（使用されるリソースに基づいて）を示す。
【００６２】
【表１】
2004519775.tif 000003
スタック・プッシュまたは変化なしを含む命令に対しては、データ・キャッシュ・メモリ、ローカル可変メモリ、一定プールまたはスタックへの読取アクセスは必要でない。ある命令が一つの値をスタックにプッシュするか、またはスタックをまったく変化させなければ、一般的にこれらの命令に対する従属ルールはない。しかし、この種の命令はスーパースケーラ・ロックアウトに課せられる（以下に説明）。さらに、ｎｏｐ命令がスタックに影響を与えていないときは、ｎｏｐは一般的に別々に処理され、また命令間にスペースを置くように通常使用されるのでスーパースケーラーを実行することが許容されない。
【００６３】
スタック・プッシュおよびポップを組み込み、浮動小数点（ＦＰ）ロジック・ユニットの使用を必要としない命令に対して、読取アクセスは一般的にデータ・キャッシュ・メモリ、ローカル可変メモリまたは一定プールを必要としないが、読取（ポップ）アクセスはスタックを必要とする。従って、これらの命令は同時実行命令に依存している。従って、これらの命令に対する従属ルールは、データ従属性がより古い命令プッシュ中にスタックへの妨害がないときのみ、実行される。
【００６４】
スタック・プッシュおよびポップを組み込むとともに浮動小数点（ＦＰ）ロジック・ユニットも必要とする命令に対して、これらの命令はデータ・キャッシュ・メモリ、ローカル可変メモリまたは一定プールへの読取アクセスを必要としないが、スタックへの読取アクセス（ポップ）を必要とするとともに、ＦＰユニットを使用しないこれらの命令に対して上述したと同様の一般ルールによって管理される。しかし、図示の構成は単一ＦＰユニットを使用しているだけであるので、これらの命令はさらに第２従属ルールによって制限され、より古い命令が浮動小数点を必要としない場合のみ実行される。
【００６５】
スーパースケーラー・ロックアウト
上述したルックアヘッド・ロジック・ルールに付加して、全ての命令は次のように場合にスーパースケーラー・ルックアウト・ルールにも課される：
１．一時停止起因命令が実行（Ｅ２）ステージにあれば、どの命令スーパースケーラーにも入らない。
【００６６】
２．デバック（ＤＢＧ）ビットが制御レジスタにあれば、どの命令スーパースケーラーにも入らない。これは、必要ならば、リアルタイムデバッガにスーパースケーラー演算を停止させる。
【００６７】
３．スタック集中命令がデコード（ＤＥＢ）ステージにあれば、どの命令もスーパースケーラーに入らない。スタック強化命令の例は：ｄｕｐ＿ｘ２、ｄｕｐ２＿ｘ１、ｄｕｐ２およびｄｕｐ２＿ｘ２である。一般的に、全て四つのＩＳＵポートが、三つのステージでこれらの命令を実行することが必要となる。
【００６８】
４．ｎｏｐ命令がデコード・ステージにあれば、どの命令スーパースケーラーに入らない。
【００６９】
上述のルックアヘッド・ルールの実行が、本開示の利益を受ける当該技術に習熟した人の能力範囲にあることが理解できるであろう。さらに、この種のルールのある部分または全ての実行がある一定の実施形態で省略され、また付加的なルールがなおも他の実施形態中で実行される。他の修正例が本明細書の利益を受ける当該技術に習熟した人にとって理解されるでろう。
【００７０】
スイッチ・ビルダー
ジャバ「ジャンプ」バイトコード・クラスは二つのスイッチ・バイトコード、すなわち、ルックアップスイッチとテーブルスイッチを有する。両命令は複雑であると考えられる。なぜならオペランドの数が変化するとともに、この数はルーチンで知られているだけであるからだ。命令が命令フェッチ・ロジックによって読取りされるときに、スイッチ・ビルダー・ブロック１１８がこの数を利用して実行中に命令を事前処理するのに必要とされる。二つのスイッチ・バイトコードのための命令フォーマットを以下の表２と表３に示す。
【００７１】
【表２】
2004519775.tif 000004
【表３】
2004519775.tif 000005
各タイプの命令に対して、命令の実行前に、キー値がスタックのトップにプッシュされる。ルックアップスイッチ命令の場合において、キー値が各適合値と比較され、キーが適合値と一致すれば、関連するオフセットがターゲット・アドレスを生成して分岐するのに使用される。テーブルスイッチの場合において、キー値が高い値と低い値を含めてその間の各適合値と比較され、キーが適合値と一致すれば、関連するオフセットがターゲット・アドレスを生成して分岐するのに使用される。一致するものがいずれの命令にも見つからなければ、デフォルト・オフセットがターゲット・アドレスを生成するために使用される。いずれかの命令の実行後、キー値がスタックから除去される。
【００７２】
命令の各タイプの重要な特徴は、各々サイズに変化があることである。サイズに変化のある命令は一般的にハードウエア・プロセッサに対して問題を提起し、同じサイズの命令が一般的に最も効果的なプロセッサ・パイプラインをもたらす。命令キューとプロセッサの実行ロジック両方は一般的に命令がオペランドの限定範囲を有していることを期待する。
【００７３】
従って、本発明と一致して、図３のスイッチ・ビルダー・ブロック１１８は、同じ機能を実行する複数のより小さい、あまり複雑でない固定サイズのビットコードを生成することによってこの種のスイッチ命令を事前処理する。例えば、図示実施形態において、ｉｆｅｑおよびｄｕｐ命令はスイッチ命令のためのデフォルト分岐を表すのに使用されるｇｏｔｏ＿ｗを伴う一連の条件分岐としてスイッチ命令をエミュレートするのに使用される。
【００７４】
従来のｉｆｅｑ命令はトップ値をスタックにポップオフすることで作動し、またこの値を試験条件中の引数として使用し、この引数をゼロと比較する。以下に説明するように、ここで説明する実行ロジックは、引数を、ゼロの代わりにバイトレーン中に記憶された値と比較することでカスタム化できる。引数がその値（または従来のｉｆｅｑ命令の場合にゼロ）と一致すれば、分岐は命令（一般的にｉｆｅｑ命令のアドレスと合計されターゲット・アドレスを生成する）に関連するオフセット値から生成されたターゲット・アドレスに取り入れられる。そうでなければ、実行は命令ストリーム内の次順の命令に進行する。
【００７５】
ｄｕｐ命令がスタックを、スタック上のトップ値の別のコピーに押し上げることにより作動し、これでトップ値がスタック上に有効にコピーされる。ｇｏｔｏ＿ｗ命令は、命令に関連するオフセット値から計算されたターゲット・アドレスに分岐する非条件分岐命令である。
【００７６】
スイッチ命令によって規定されたＮ回の試験に対して、命令フェッチ・ロジックが順番に生成する：
引数として本来の命令ストリーム内の命令のサイズを伴うスイッチ命令バイトコード。
【００７７】
ｄｕｐおよびｉｆｅｑバイトコードのＮ−１対のインターリーブされたシーケンス、各ｉｆｅｑバイトコードが試験の一つのための適合値と一つの引数として、またその適合値に関連するオフセット値を別の引数として含んでいる。
【００７８】
適合値とスイッチ命令によって規定された最終試験のためのオフセット値を含んでいる付加的なｉｆｅｑバイトコード。
【００７９】
デフォルト・アドレスに対する非条件分岐を含んでいるｇｏｔｏ＿ｗバイトコード。
【００８０】
ブロック１１８は一般的にバイトコード・パーサーによって検出されたスイッチ命令を処理するステートマシンまたは他のロジックを介してロジックを処理するスイッチ命令を実行する。一度、パーサーがルックアップスイッチまたはテーブルスイッチ命令としてバイトコードを識別すると、スイッチ・ビルダー内のステートマシンが通知を受ける。図４はブロック１１８による使用に適した代表的な状態図１４０を示す。
【００８１】
ステートマシン１４０は五つの状態を含む：
アイドル状態１４２：この状態はシステムのリセット（例えば、ＩＮＲＥＳＴ信号のアサートを介して）で初期化される。ステートマシン１４０は、パーサーからのＳＷＩＴＣＨ＿ＦＯＵＮＤ信号が作動（例えば、ルックアップスイッチ（０ｘＡＢ）またはテーブルスイッチ（０ｘＡＡ）バイトコードに応答して）されるまでＩＤＬＥ状態を保持する。
【００８２】
パッド状態１４４：これがルックアップスイッチ・バイトコードであれば、この状態が方法アドレス１２０を使用して３２−ビット・デフォルト・アドレスおよび３２−ビットｎｐａｉｒｓサイン・カウント値を見つけ、これを二つのスクラッチ・レジスタ（図示省略）に保有する。これがテーブルスイッチ・バイトコードであれば、デフォルト・アドレスと低値および高値が三つのスクラッチ・レジスタに保有される。デフォルト・アドレスを見つける必要がある。これは０−３バイト・パッドが一般的にバイトコードと、テーブルスイッチまたはルックアップスイッチ命令のオペランドとの間に挿入され、ワード境界線上にオペランドを整列させるからである。さらに、ＣＯＵＮＴ変数が、生成される必要のある条件分岐数に基づいて別のレジスタ（図示省略）内で初期化される。
【００８３】
ＰＰ状態１４６：この状態は命令の長さを含む一つの引数でスイッチ・バイトコード（ルックアップスイッチに対して０ｘＡＢ、およびテーブルスイッチに対して０ｘＡＡ）を生成し、命令を命令キューに挿入する。オペランドは元のルッアップスイッチ・バイトコードに追従するバイトの数である。これが実行ユニットによって使用されＰＣカウンタを更新する。
【００８４】
ＧＥＮ状態１４８：この状態は、ＣＯＵＮＴ変数の値と、ルックアップスイッチまたはテーブルスイッチであるスイッチ・バイトコードのタイプに基づいてＮ条件分岐命令（例えば、ｉｆｅｑ命令）を生成する。各分岐バイトコードは対応する３２−ビット・適合値とバイト・レーン０−７の３２−ビット・オフセット値に追従されている。さらに、Ｎ−１ｄｕｐ命令は最初のＮ−１条件分岐命令の前方で生成され、配置される。全ての生成された命令は命令キューに挿入され、ＣＯＵＮＴ変数は、ゼロ値に達するまで各サイクルでデクリメントされる。
【００８５】
デフォルト状態１５０：この状態はゼロに変化するＣＯＵＮＴをデクリメントしたときに、３２−ビット・デフォルト・アドレスを含む四つのバイト・レーンを伴う単一のバイトコード（ｇｏｔｏ＿ｗ）を生成する。この命令はキューに挿入され、また制御がＩＤＬＥ状態に復帰する。
【００８６】
ブロック１１８によって生成され、命令キューに配置された命令は実行ユニットによって後ほど実行される。概して、実行ユニットはわずかな重要な例外を伴うが、ソフトウエアを基準とするジャバ仮想マシンと類似する方法でジャバ・バイトコード命令の一部または全部を実行するためのハードウエア実行ロジックを使用する。例えば、実行ロジックは命令フェッチ・ユニットによって満たされたバイトレーンの使用をサポートしている。例えば、合成命令が同時に実行され、及び／又は満たされたオペランドがスタック操作の代わりに使用される。さらに、機能性を処理するここで説明したスイッチ命令をサポートする目的で、実行ロジックはｉｆｅｑ、ルックアップスイッチおよびテーブルスイッチ・バイトコードを処理するために特定する機能性をサポートする。
【００８７】
ｉｆｅｑバイトコードに対し、従来のジャバ命令セットが一般的にこの命令を制限しゼロと比較する。しかし、図示実施形態において、実行ロジックはｉｆｅｑ命令に関連する最初の四つのバイト・レーンから３２−ビットの比較値を検索するように構成されている。従来のｉｆｅｑ命令に対し、ゼロの値が命令フェッチ・ロジックによって最初の四つのバイト・レーン内に配置される。ｉｆｅｑ命令によって実行された条件分岐がスタックからのトップ値をポップし、この値を最初の四つのバイトレーン内に保有された直前値と比較するのに使用される。
【００８８】
さらに、スイッチ命令バイトコード（ルックアップスイッチおよびテーブルスイッチ）に対し、プログラム・カウンタ（ＰＣ）がスイッチ命令のアドレスの値を有することになり、これによって実行ロジックがルックアップスイッチまたはテーブルスイッチのアドレスを使用して、これに追従する各分岐命令のためのターゲット・アドレスを算出するように構成されている。さらに、一度全体にエミュレートされたスイッチ命令シーケンスが実行されると、実行ロジックは一般的にスイッチ命令の引数を使用して、ＰＣをインクリメントするように構成される。さらに、命令フェッチ・ロジックが一つまたはそれ以上のｄｕｐ命令を生成してスタック上のトップ値を２倍にするので、スイッチ操作の結果として生成する分岐が、デフォルト分岐または適合による分岐であればどのような場合でも実行された後、実行ロジックはトップ値をスタックにポップオフするように構成されている。
【００８９】
ここで説明するスイッチ命令処理機能性の操作をさらに示すように、図５および６はそれぞれ代表的なルックアップスイッチおよびテーブルスイッチ命令のエミュレーション内に生成されたバイトコードのシーケンスを示す。
【００９０】
種々の修正例が本発明の概念と範囲から逸脱することなく図示実施形態でなされうる。例えば、種々の別のバイトコード・シーケンスが本発明に一致するスイッチ命令をエミュレートするように生成できる。ｉｆｅｑ、ｄｕｐおよびｇｏｔｏ＿ｗ命令の異なる組み合わせが、本発明に一致するジャバ・スイッチ命令をエミュレートするのに使用される。さらに、ｉｆｅｑ命令ではなく、ｉｆ＿ｉｃｍｐｅｑ（一般的に付加的なｐｕｓｈ命令、または実行ロジック内でのカスタム化処理を組み込む）のような他の条件分岐命令、または命令の合成が条件分岐を実行するのに使用される。さらに、ｄｕｐ命令以外のスタック操作命令が、スタック上にキー値の十分なコピーを維持するのに使用される。さらに、実行ロジックが、ここに説明する以外の他の方法でＰＣの更新、分岐ターゲット・アドレスの算出、スタックから、あるいはスタックへのポップまたはプッシュ等のような操作を処理するように形成される。例えば、実行ロジックはスイッチ・バイトコードに応答するキー値を保有できなければならず、スタックを変更せずに、すべての次の条件分岐命令の値を用いて、ｄｕｐ命令または他のスタック処理操作のための必要性を潜在的に除去できる。
【００９１】
さらに、ここに説明する機能性は本発明と一致する他のデータ処理環境に使用できる。例えば、図７は図１のデータ処理システム１０と同じ要素を多数含んでいるが、マスター・プロセッサ１２’とＣＰＵバス１６間に直接挿入された別のジャバ加速装置４０’を含んでいる別のデータ処理システム１０’を示す。この実装において、メモリ管理ユニット（ＭＭＵ）４２’はプロセッサとの直接ポイント間相互接続がなされており、またシステム内の全てのプロセッサ１２’、４８のためのシステム・バス２０と周辺バス３２へのメモリ・アクセスを処理する。この結果、比較的高いクロック速度が可能であり、またシステム・バスのためにトランザクションがＬ２キャッシュ４４を包含しておらず、Ｌ２キャッシュ・コントローラが単にデータを遅いシステム・バスに通過させる。しかし、この構成において、マスター・プロセッサ１２’およびジャバ・プロセッサ４８はＭＭＵ４２’内でＬ２キャッシュ４４に保有されたジャバ・オブジェクトへの高速アクセスを有する。
【００９２】
他の修正例も本発明の概念と範囲から逸脱することなしに図示実施形態を構成することができる。従って、本発明は添付の請求の範囲に開示する。
【図面の簡単な説明】
【図１】
本発明と一致するハードウエア基準スイッチ命令エミュレーションを実行するデータ処理システムのブロック図。
【図２】
図１のデータ処理システムからのジャバ・プロセッサのブロック図。
【図３】
本発明と一致するハードウエア基準スイッチ命令エミュレーションに使用されるスイッチ・ビルダー・ロジックを含む図２のジャバ・プロセッサ内の主要命令フェッチおよび発送回路のブロック図。
【図４】
図３のスイッチ・ビルダー・ロジックのプログラム流れを示す状態図。
【図５】
図３のスイッチ・ビルダーによる代表的ルックアップスイッチ命令のエミュレーションを示すブロック図。
【図６】
図３のスイッチ・ビルダーによる代表的テーブルスイッチ命令のエミュレーションを示すブロック図。
【図７】
図１のものとは別のデータ処理システムであって、本発明と一致するハードウエア基準スイッチ命令エミュレーションを実行するのに適したシステムのブロック図。
【図１】
2004519775.tif 000006
【図２】
2004519775.tif 000007
【図３】
2004519775.tif 000008
【図４】
2004519775.tif 000009
【図５】
2004519775.tif 000010
【図６】
2004519775.tif 000011
【図７】
2004519775.tif 000012
【国際公開パンフレット】
2004519775.tif 000013
2004519775.tif 000014
2004519775.tif 000015
2004519775.tif 000016
2004519775.tif 000017
2004519775.tif 000018
2004519775.tif 000019
2004519775.tif 000020
2004519775.tif 000021
2004519775.tif 000022
2004519775.tif 000023
2004519775.tif 000024
2004519775.tif 000025
2004519775.tif 000026
2004519775.tif 000027
2004519775.tif 000028
2004519775.tif 000029
2004519775.tif 000030
2004519775.tif 000031
2004519775.tif 000032
2004519775.tif 000033
2004519775.tif 000034
2004519775.tif 000035
2004519775.tif 000036
2004519775.tif 000037
2004519775.tif 000038
2004519775.tif 000039
2004519775.tif 000040
2004519775.tif 000041
2004519775.tif 000042
2004519775.tif 000043
2004519775.tif 000044
2004519775.tif 000045
2004519775.tif 000046
2004519775.tif 000047
【国際公開パンフレット（コレクトバージョン）】
2004519775.tif 000048
【国際調査報告】
2004519775.tif 000049
2004519775.tif 000050