(57)【要約】【課題】広範なアプリケーションに対して望ましい言語であるJava（登録商標）のようなコードの実行を加速して、パフォーマンスを向上する方法を開示する。【解決手段】この手法は、命令を受信すると、その命令とは別のプログラム可能な情報に基づいて、その命令の意味を動的に変更する。意味の変更には、その命令に関連するパフォーマンス特性、または命令の動作（たとえば、ガーベジ・コレクタを支援する読み出しまたは書き込み障壁動作）を決定するモニタ・コードが含まれる。【選択図】図５
2005011352.tif 000002
【特許請求の範囲】
【請求項１】
命令を受信し、
前記命令とは別であるプログラム可能な情報に基づいて、命令の意味を動的に変更する、
ことを含む方法。
【請求項２】
メモリから命令を取り出すフェッチ論理と、
前記フェッチ論理に接続される復号論理と、
前記復号論理にアクセス可能であるとともに、複数のエントリを含むベクトル・テーブルであって、各エントリは命令に対応するとともに関連する構成ビットを有し、前記構成ビットは前記関連する命令が代替可能な命令シーケンスに置き換えられるか否かを指定し、前記関連する命令が置き換えられることを指定する構成ビットをもつ複数のエントリは代替可能な命令シーケンスに対するポインタを含む前記ベクトル・テーブルと、
を含むプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にプロセッサに関し、より詳細には命令の意味を動的に変更する方法に関する。
【発明の開示】
【発明が解決しようとする課題】
【０００２】
公知のとおり、一般にコンパイラは、コード（たとえば、Java（登録商標）のバイトコード）を機械語にコンパイルする。Java（登録商標）は広範なアプリケーションに対して望ましい言語である。Java（登録商標）コードの実行を加速するため、さらなる向上が望まれている。
【課題を解決するための手段】
【０００３】
本発明のいくつかの実施例における手法は、命令を受け取り、命令と分離していてプログラムで制御可能な情報に基づいて、命令の意味を動的に変更することを含む。意味の変化には、モニタ（monitoring）コードの命令に関連するパフォーマンス特性または命令の動作における変更（たとえば、ガーベジ・コレクタ（garbage collector）をサポートする障壁動作（barrier operation）を読み出したり書き込んだりすることを含むこと）を決定する。
【０００４】
以下の説明と特許請求の範囲を通じて、特定のシステム・コンポーネントに言及するためある種の用語が使用されている。当業者には理解されるように、各種企業は各種名称でコンポーネントに言及することができる。本明細書は、名称は違っているが、機能は同じであるコンポーネントの間を区別することは考えていない。以下の考察および特許請求の範囲における、用語、「含む（including）」および「含む、から成る（comprising）」は自由に使用されているので、「含むが、それに限定されない・・・（including, but not limited to・・・）」という意味に解釈しなければならない。また、用語「結合する、接続する（couple, couples）」は間接的および直接的な接続を意味するものと考えられている。したがって、第１の装置が第２の装置に接続する場合、その接続は、直接的な接続または他の複数の装置と接続を介した間接的な接続を通じてなされうる接続である。
【０００５】
本発明の好適実施例を更に詳細に説明するため、添付の図面を参照する。
【０００６】
本発明の各種実施例に対して以下の考察を行う。１つまたは複数のこれらの実施例が好適であるとは言え、開示した実施例は、とくに指定の無い限り、特許請求の範囲を含む開示の範囲を制限すると解釈されたり、他の方法で使用されたりしてはならない。それだけではなく、以下に示す説明の範囲が広いので、どの実施例に関する考察もその実施例の模範例だけを表しているにすぎず、特許請求の範囲を含む開示の範囲が、その実施例に限定されることを暗示するように意図されていないことは、当業者には理解されるであろう。
【０００７】
ここに開示した主題（subject matter）は、一般に、命令の意味を変更する代替可能な一連の命令で、命令を動的（つまり、実行時、サイクルごとに（on-the-fly））に置き換えることである。このプロセスには、命令の実行中にモニタ・コードを追加すること、またはその命令自体によって実行される動作を追加したり変更したりすることを含めることができる。モニタ・コードを追加する場合、一般にモニタ・コードは、たとえば、モニタ機能で使用される他型式のデータなど、置き換えられた命令に関するパフォーマンス特性を決定する。この手法は、そうしなければプロセッサによって直接実行される命令を含む何らかの命令にモニタ・コードを付与することを可能にする。他の例における意味を変更する手法（semantic modification technique）は、「ガーベジ」コレクタに適用されうる。好適実施例によれば、この手法は、プロセッサのようなプログラム可能な電子デバイスの中で実現されうる。以下、適切なプロセッサを説明し、その後で命令を改造してモニタ・コードを含める好適手法を説明する。
【０００８】
ここで説明するプロセッサは、Java（登録商標）バイトコードまたは共通点のあるコードを実行するためにとくに適している。公知のとおり、Java（登録商標）は組み込みアプリケーションに対してとくに適している。Java（登録商標）は比較的「濃い（dense）」言語であり、このことは、平均して各命令が、他の各種プログラミング言語と比較して多数の機能を実行することを意味している。Java（登録商標）の濃い性質は、スペースと電力を節約するため可能な限り少ないメモリを含むことが望ましい可搬型の電池駆動装置に対してとくに有利である。しかし、Java（登録商標）コードを実行する理由は、この開示または特許請求の範囲の主要なテーマ（material）ではない。更にプロセッサは、Java（登録商標）コードの実行を加速させる１つまたは複数の機能を有利に含んでいる。本発明の好適実施例を説明するためにJava（登録商標）が使用されているが、この開示または特許請求の範囲は、Java（登録商標）に限定されるものではない。
【０００９】
次に図１を参照すると、本発明の好適実施例によるシステム100が示されている。図示のとおり、このシステムは、少なくとも２つのプロセッサ102、104を含む。この開示のため、プロセッサ102は、Java（登録商標）スタック・マシン（「JSM」）と呼ばれており、プロセッサ104は、メイン・プロセッサ・ユニット（「MPU」）と呼ばれている。システム100は、JSM102とMPU104の双方に接続されるメモリ106を含んでいるので、両プロセッサからアクセス可能である。少なくともメモリ106の一部は両プロセッサで共用されており、両プロセッサが同じ共用メモリ位置にアクセスできることを意味している。更に必要ならば、メモリ106の一部は１つのプロセッサまたは他のプロセッサに対して非公開（private）とすることができる。またシステム100は、Java（登録商標）仮想マシン（「JVM」）108、コンパイラ110およびディスプレイ114を含む。MPU104は望ましくは、ユーザがシステム100の各種態様を制御できることを可能にするキーパッドのような１つまたは複数の入出力（「I/O」）装置に対するインタフェースを含む。それだけでなく、JSM102によって処理されるようにI/O空間からJSM102の中にデータストリームを受信することができる。他のコンポーネント（とくに示さず）は、必要に応じ各種アプリケーションとして含まれうる。
【００１０】
一般に公知のとおり、Java（登録商標）コードは、複数の「バイトコード」112を含む。バイトコード112がJVM108に与えられると、コンパイラ110によってコンパイルされ、中で実行されるためにJSM102およびMPU104またはそのいずれかに与えられる。本発明の好適実施例によれば、JSM102は、少なくともいくつかの、一般には殆どのJava（登録商標）バイトコードを実行することができる。しかし、適切な場合、JSM102は、JSM102によって実行されない、または実行不能な１つまたは複数のJava（登録商標）バイトコードを実行するようにMPU104に要求することができる。Java（登録商標）バイトコードを実行するだけでなく、MPU104は非Java（登録商標）命令を実行することができる。MPU104は、システムメモリの管理、JVM108のスケジューリングとシステム上で走行する他の在来のタスクの殆どすべてのスケジューリングを実行するシステムタスク管理、入力装置からの入力の受信、などを含む各種機能を実行するオペレーティング・システム（「O/S」）（とくに示さず）のホストを勤める。Java（登録商標）コードは、制限なしにJava（登録商標）コードを使用し、マルチメディア、ゲーム、またはウェブを使用するアプリケーションを含むいろいろなアプリケーションのどれか１つをシステム100の中で実行することができるが、O/Sと他の在来のアプリケーションを含む非Java（登録商標）コードは、MPU104上のシステムの上で走行することができる。
【００１１】
一般にJVM108は、ソフトウエアとハードウエアの組み合わせを含む。ソフトウエアはコンパイラ110を含み、ハードウエアはプロセッサ102を含むことができる。JVMは、クラスローダ、バイトコードベリファイア（verifier）、ガーベジ・コレクタ、およびJSM102で実行されないバイトコードを解釈するバイトコード・インタプリタ・ループを含むことができる。
【００１２】
本発明の好適実施例によれば、JSM102は少なくとも２つの命令セットを実行することができる。１つの命令セットは標準のJava（登録商標）バイトコードを含むことができる。公知のように、Java（登録商標）はスタックを使用するプログラミング言語であり、命令は一般にスタックを目標とする。たとえば、整数を加算するJava（登録商標）命令（「IADD」）は、スタックの最上部から２つの整数を取り出し、それらを加算して合計をスタックの上に押し戻す。「簡単な（simple)」バイトコードの命令は、JSM102が１サイクル（たとえば、「iadd」命令）または数サイクル（たとえば、「dup2_x2」）のいずれかで直ちに演算を実行することができる命令である。「複雑な（complex）」バイトコード命令は、（たとえば、NULLポインタ、配列境界のように）各種の検証に使うJVMのデータ構造の中で何回かのメモリアクセスを実行することが必要になりうる命令である。以下、更に詳細に説明するように、１つまたは複数の複雑なバイトコードは、各種の他の命令を含む「マイクロ・シーケンス（micro-sequence）」に置き換えることができる。
【００１３】
JSM102によって実行される他の命令セットは、標準のJava（登録商標）命令とは別の命令を含むことができる。本発明の少なくともいくつかの好適実施例によれば、他の命令セットは、レジスタを使用して実行される演算またはメモリを使用して実行される演算を含むことができる。一般にこの他の命令セットは、Java（登録商標）命令を相補うので、相補型命令セットアーキテクチャ（complementary instruction set architecture：「C-ISA」）と呼ぶことができる。相補という言葉により、C-ISA命令を含む「マイクロ・シーケンス」で複雑なJava（登録商標）バイトコードを置き換えることができる。マイクロ・シーケンスは、１つまたは複数の標準Java（登録商標）バイトコード命令を含むことができる。Java（登録商標）の実行は、短くて更に効率的なC-ISA命令シーケンスによってバイトコードのいくつかの系列を置き換えることにより、更に効率的で更に速く走行するようになる。２つの命令セットを相補形式で使用して十分満足すべきコード密度と効率を求めることができる。したがって、JSM102は、レジスタとメモリを使用するC-ISA命令を実行するため、レジスタを使用するアーキテクチャと組み合わせたJava（登録商標）バイトコードを効率的かつ加速度的に実行するため、スタックを使用するアーキテクチャを含むのが一般的である。２つのアーキテクチャは、密結合されてC-ISAを通じて統合されることが望ましい。本明細書で説明される様々なデータ構造は、一般的にJVMに依存する型式であり、１つのJVMの実現から他のJVMの実現まで変化することができるので、マイクロ・シーケンスのソフトウエアの融通性は、既存の各種JVMマシンまたは後で開発されるJVMマシンの最適化に対してメカニズムを提供する。
【００１４】
図２は、JSM102の模範的なブロック図を示す。図示のように、データ記憶（data storage）122と命令記憶（instruction storage）130に接続されたJSMはコア120を含む。図示のように、コアは１つまたは複数のコンポーネントを含むことができる。このようなコンポーネントは、望ましくは複数のレジスタ140、３つのアドレス生成ユニット（AGU）142、147、マイクロ・アドレス変換バッファ（micro-translation lookaside buffer（micro-TLB））144、156、マルチエントリ・マイクロスタック146、算術論理ユニット（「ALU」）148、乗算器150、復号論理152、および命令フェッチ論理154を含む。一般にオペランドは、データ記憶122またはマイクロ・スタック146から受信され、ALU148によって処理されるが、命令はフェッチ論理154によって命令記憶130からフェッチされ、復号論理152によって復号される。アドレス発生ユニット142は、少なくとも或る程度はレジスタ140の中に含まれるデータに依存してアドレスを計算するために使用されうる。AGU142は、C-ISA命令のアドレスを計算することができる。AGU147はマイクロ・スタック146に接続して、望ましくは並列でマイクロ・スタックの中のオーバフローとアンダフローの条件を管理することができる。micro-TLB144、156は一般にアドレス変換と望ましくはMPU104上で走行中のオペレーティング・システムの制御のもとにあるメモリ保護情報ビットのキャッシュの機能を実行する。
【００１５】
次に図３を参照すると、レジスタ140はR0〜R15 と指定された１６個のレジスタを含む。レジスタR0〜R3, R5, R8〜R11およびR13〜R14は、プログラマによりどんな目的にも使用可能な汎用（「GP」）レジスタとして使用されうる。他のレジスタといくつかのGPレジスタは、特定の機能のために使用されうる。たとえば、レジスタR4とR12は、２つのプログラムカウンタとして使用されうる。レジスタR4は、望ましくはプログラムカウンタ（「PC」）を格納するために使用され、レジスタR12は、望ましくはマイクロ・プログラムカウンタ（「micro-PC」）を格納するために使用される。以下、PCとmicroPCの使用を非常に詳細に説明する。GPレジスタとしての使用に加え、現在のJava（登録商標）の方法によって使用される場合、レジスタR5を使用してJava（登録商標）のローカル変数を格納することができるメモリの一部のベースアドレスを格納することができる。マイクロ・スタック146の最上部は、レジスタR6、R7の値によって参照することができる。マイクロ・スタックの最上部のアドレスは、レジスタR6によって指示される外部メモリに一致する。マイクロ・スタックの中に含まれる値は、少なくとも最新の更新された値であるが、それらの値に対応する外部メモリの値は最新の値かどうかわからない。レジスタR7は、マイクロ・スタックの最上部に格納されたデータの値を提供する。またレジスタR8、R9を使用して、アドレス・インデックス０（「AI0」）とアドレス・インデックス１（「AI1」）を保持することができる。レジスタR14を使用して、間接レジスタインデックス（「IRI」）を保持することができる。JSM102の状態と制御のためにレジスタR15を使用することができる。状態レジスタR15の中の（「マイクロ・シーケンス・アクティブ」ビットと呼ばれる）少なくとも１ビットは、JSM102がマイクロ・シーケンスを通じて簡単な命令または複雑な命令を実行中であるか否かを示すために使用される。以下に説明するように、このビットは、R4（PC）またはR12（micro-PC）のうちどちらのプログラムカウンタが使用されて次の命令をフェッチするかということをとくに制御する。
【００１６】
再び図２を参照すると、上に注意したように、JSM102は、少なくとも１つの命令セットが、スタックを使用する命令セット（たとえば、Java（登録商標））からの命令を有する少なくとも２つの命令セットからの命令を処理して実行するようになっている。スタックを使用する命令セットは、Java（登録商標）のバイトコードを含むことができる。空でない限り、Java（登録商標）バイトコードは、マイクロ・スタック146からデータを取り出し、マイクロ・スタック146にデータを押しこむ。マイクロ・スタック146は、望ましくは、データ記憶122の中に実現されるより大きいスタックの最上部のｎ個のエントリを含む。マイクロ・スタック146は、望ましくは、JSM102のコア120の中に複数のゲートを含む。コア120の中のゲートの中にマイクロ・スタック146を実現することによって、マイクロ・スタック146の中に含まれるデータに対するアクセスは一般に非常に速いが、いかなる特定のアクセス速度もこの開示に関する制限とはならない。
【００１７】
ALU148は、データを加算し、減算しさらにシフトする。乗算器150は、１つまたは複数のサイクルで２つの値を乗算するために使用されうる。命令フェッチ論理154は、一般に命令記憶130から命令をフェッチする。これらの命令は、復号論理152によって復号されうる。JSM102は、少なくとも２つの命令セットからの命令を処理するようになっているから、一般に復号論理152は、少なくとも２つの動作モードを含み、命令セットごとに１つのモードを含む。したがって、復号論理ユニット152は、Java（登録商標）の命令を復号することができるJava（登録商標）モードと、C-ISA命令を復号することができるC-ISAモードを含むことができる。
【００１８】
一般にデータ記憶122は、データキャッシュ（「Dキャッシュ（D-cache）」）124とデータ・ランダム・アクセス・メモリ（「D-RAMset」）126を含む。（テキサス・インスツルメンツ社案件TI-29884の）2000年6月9日出願の同時係属米国特許出願、シリアル番号第09/591,537号、（テキサス・インスツルメンツ社案件TI-29960の）2000年6月9日出願のシリアル番号第09/591,656号および（テキサス・インスツルメンツ社案件TI-31351の）2001年8月17日出願のシリアル番号第09/932,794号を参照することができるが、ここでこれらの特許出願に言及することにより、これらの特許出願の開示内容を本願に明確に組み入れることにする。スタック（マイクロ・スタック146を除く）、配列および重要ではないデータは、Dキャッシュ124の中に格納され、Java（登録商標）ローカル変数、重要データおよび非Java（登録商標）変数（たとえば、C、C＋＋）は、D-RAM126の中に格納されうる。命令記憶130は、命令RAM（「I-RAMset」）132と命令キャッシュ（「I-cache」）134を含むことができる。命令RAM132は、以下に説明するように、「複雑な」マイクロ・シーケンスになったバイトコードまたはマイクロ・シーケンスまたは所定の系列数のコードのために使用されうる。Iキャッシュ134は、他の型式のJava（登録商標）バイトコードとJava（登録商標）/C-ISA命令が混在した命令を格納するために使用されうる。
【００１９】
図４は、Java（登録商標）バイトコードをマイクロ・シーケンスに置き換えるJSM102の動作を示す。図４は、JSMのコンポーネントのすべては不必要であるが、そのいくつかを示す。とくに命令記憶130、復号論理152およびマイクロ・シーケンス・ベクトル・テーブル162が示されている。復号論理152は、命令記憶130とマイクロ・シーケンス・ベクトル・テーブル162にアクセスする。一般に、そして上に説明したように、復号論理152は命令フェッチ論理154（図２）を介して命令記憶130から命令（たとえば、命令170）を受信し、これらの命令を復号して後続動作と実行のために命令の型式を決定する。本発明の好適実施例によれば、JSM102は命令170からのバイトコードを実行するか、または命令170からのバイトコードを以下に説明するマイクロ・シーケンスに置き換える。
【００２０】
マイクロ・シーケンス・ベクトル・テーブル162は復号論理152の中で実現されるか、JSM102の中の別の論理として実現される。マイクロ・シーケンス・ベクトル・テーブル162は、望ましくは複数のエントリ164を含む。これらのエントリ164には、JSMが受信することができるバイトコードごとに１エントリが含まれる。たとえば、全部で256バイトコードを備えている場合、マイクロ・シーケンス・ベクトル・テーブル162は望ましくは少なくとも256個のバイトコードを含む。各エントリ164は、望ましくは少なくとも２つのフィールド、すなわち、フィールド166と関連するフィールド168を含む。フィールド168は命令170が直接実行されるか、または関連するフィールド166がマイクロ・シーケンスへの参照を含むかを示す１つの構成ビット（configuration bit）を含むことができる。たとえば、値が「０」のビット168は、フィールド166が無効であることを示すことができるので、命令170の対応するバイトコードは、JSMにより直接的に実行可能である。値が「１」のビット168は、関連するフィールド166がマイクロ・シーケンスに対する参照を含んでいることを示す。
【００２１】
関連するフィールド166がマイクロ・シーケンスに対する参照を含んでいることをビット168が示している場合、その参照は、マイクロ・シーケンスの命令記憶130の中の完全な開始アドレス、またはJSMの中でプログラム可能でありうるベースアドレスに連結されうる開始アドレスの一部を含む。前者の場合、フィールド166は、全メモリ空間にアクセスすることが要求されるほど多数のアドレスビットを与えることができる。後者の場合、JSMのレジスタ140の中のレジスタ、または望ましくは、IRIレジスタを使用する間接アドレス指定メカニズムを通じてアクセス可能なJSM構成レジスタの中のレジスタがベースアドレスを保持するようにプログラムされ、マイクロ・シーケンスの先頭にアクセスするのに、ベクトル・テーブル162はオフセットだけを供給すればよい。殆どまたはすべてのJSM内部レジスタ140と何らかの他のレジスタは、望ましくは、メイン・プロセッサ・ユニット104によりアクセス可能であるから、必要に応じてJVMによって改造されうる。必要では無いが、フィールド166の中で必要なビットの数を減らすためには、後者のアドレス指定手法が好適でありうる。マイクロ・シーケンスの記憶装置のために、少なくとも命令記憶130の一部分180を割り当てることができるので、開始アドレスは、マイクロ・シーケンスの記憶装置130の中で特定のマイクロ・シーケンスを見付けることができる位置を示すことができる。上記図２の中に示す命令RAM132で一部分180を実現することができる。
【００２２】
マイクロ・シーケンス・ベクトル・テーブル162は、各種の手法によってロードされ、かつ改造されうるが、以下の考察には好適な手法が含まれている。ベクトル・テーブル162は、望ましくは、上述の間接レジスタ・インデックス（「IRI」）レジスタとして機能するレジスタR14を介してアドレス指定が可能であるJSMの資源を含む。ベクトル・テーブル162の中の１つのエントリ164または１ブロックのエントリは、データキャッシュ124（図２）からの情報によってロードされうる。ベクトル・テーブル162の中に複数のエントリ（たとえば、エントリ164のすべて）をロードする場合、命令の繰り返しループを実行することができる。繰り返しループを実行する前に、レジスタ（たとえば、R0）は、望ましくは、テーブルの中にロードするデータを含むメモリ・ブロックの開始アドレスでロードされる。他のレジスタ（たとえば、R1）は、望ましくは、ブロックの中にロードするブロックのサイズでロードされる。レジスタR14は、更新／ロードされるベクトル・テーブルの中の第１のエントリに対応する値がロードされる。望ましくは、状態レジスタR15の中に「１」ビットが設定されると、レジスタR14がIRIレジスタとして使用されることを示す。それ以外の場合、この「１」ビットはレジスタR14が汎用レジスタとして使用されることを指定する。
【００２３】
繰り返される命令のループは、望ましくは、ｎ回繰り返される２つの命令を含む。値ｎは、望ましくは、レジスタR1に格納される値である。ループの中の第１の命令は、望ましくは、ブロック（R0）の開始アドレスからベクトル・テーブル162の第１のエントリへのロードを実行する。ループの中の第１の命令は、望ましくは、ブロックの開始アドレスに「即（immediate）」値を加算する。ベクトル・テーブルの中の各エントリが16ビット幅の場合、即値は「２」である。このループは、このループ自体を繰り返し、開始アドレスに依存して全体のうちの所望の部分をロードする。
【００２４】
動作する場合、復号論理152はベクトル・テーブル162に対するインデックスとして命令170からのバイトコードを使用する。復号論理152がインデックス付きエントリ164の位置を見付けると、復号論理152は、関連ビット168を調べて、バイトコードがマイクロ・シーケンスによって置き換えられるか否かを決定する。そのバイトコードがJSMによって直接処理され実行されうることをビット168が示している場合、その命令はそのように実行される。しかし、そのバイトコードがマイクロ・シーケンスによって置き換えられることをビット168が示している場合、復号論理152は、望ましくは、この命令を「NOP」に変更し、状態レジスタR15の中に（上に説明した）マイクロ・シーケンス・アクティブ・ビットを設定する。他の実施例においては、JSMのパイプを止めてこのマイクロ・シーケンスになった命令をフェッチし、そのマイクロ・シーケンスの第１の命令で置き換えることができる。マイクロ・シーケンスの第１の命令をフェッチしながら、マイクロ・シーケンスになったバイトコードをNOPに変更することは、パイプの中で更に前進するマルチサイクル命令を、待ち時間を追加せずにJSMが処理することを可能にする。マイクロ・シーケンス・アクティブ・ビットは、マイクロ・シーケンスがJSMの実行段階（とくに明示せず）に入る時のような適当な時間に設定されうる。
【００２５】
上に説明したように、JSM102は、２つのプログラムカウンタ、PC（レジスタR4）とマイクロPC（レジスタR12）を実現している。好適実施例によれば、これら２つのプログラムカウンタの１つは、命令をフェッチして復号するアクティブなプログラムカウンタである。レジスタR4の中の格納されたPC186は、復号論理152がマイクロ・シーケンスに置き換えられるバイトコードに遭遇するそのときには（currently）、アクティブなプログラムカウンタでありうる。状態レジスタのマイクロ・シーケンス・アクティブ・ビットを設定すると、マイクロ・プログラムカウンタ188（レジスタR12）がPC186に代わってアクティブなプログラムカウンタになる。またマイクロ・シーケンスになったバイトコードに関連するフィールド166の内容もマイクロ・プログラムカウンタ188にロードされる。この時点でJSM102は、マイクロ・シーケンスを含む命令のフェッチと復号を開始する用意ができている。復号論理がレジスタR12からのマイクロ・プログラムカウンタ188の使用を開始する時点、またはほぼその時点で、PC186は、望ましくは、適切な値だけ増分されて、マイクロ・シーケンスに置き換えられるバイトコードが後に続く次の命令に対してPCを示す。少なくともいくつかの実施例における状態レジスタR15の中のマイクロ・シーケンス・アクティブ・ビットは、マイクロ・シーケンスの第１の命令がJSM102のパイプの実行フェーズに入る場合に変更されるだけである。PC186からマイクロPC188へのスイッチは、望ましくは、マイクロ・シーケンスになった命令が復号されて待ち時間を減らした直後に有効になる。
【００２６】
マイクロ・シーケンスは、所定の値、または、シーケンスの終了を表示する「RtuS（マイクロ・シーケンスからの戻り）」と呼ばれるC-ISAからのバイトコードで終了することができる。このC-ISA命令は、シーケンスが完了すると、マイクロ・プログラムカウンタ188（レジスタR12）からPC（レジスタR4）へのスイッチを生じる。望ましくは、上で考察したように、PC186が増分されたので、PC186の値は、復号される次の命令を示している。命令の効果は、実現される実施例に依存して遅れて発生したり、直ちに発生したりする。すぐに効果が現れる実施例におけるマイクロPCからPCへのスイッチは命令が復号された直後に実行され、RtuS命令の後の命令は、PC186の中に存在するアドレスによって指定される命令である。
【００２７】
上で考察したように、１つまたは複数のバイトコードは、シーケンスまたは他の命令グループに置き換えられうる。このような置き換え（replacement）命令は、特定のアプリケーションと手元の状態に対して何らかの適当な命令を含むことができる。少なくともいくつかのそのような命令は、「混合スタックを使用するRISCプロセッサ（Mixed Stack-Based RISC Processor）」という（テキサス・インスツルメンツ社案件TI-35433の）同時係属特許出願の中で開示されている。ここでこの特許出願に言及することにより、この特許出願の開示内容を本願に明確に組み入れることにする。
【００２８】
次に図５を参照すると、マイクロ・シーケンス・ベクトル・テーブル162の表示が、前と同様、複数のエントリ164とフィールド166、168を含むものとして示されている。フィールド167も、バイトコードに対する参照を含むように示されている。バイトコードの値は、０から255までの範囲である。フィールド167は、ベクトル・テーブル162の中に明確に含まれているか、あるいは、フィールド167の内容は、インデックスのメカニズムを介して暗示されている。たとえば、バイトコードの数の２は、ベクトル・テーブルの中の目標エントリを識別する参照位置（たとえば、バイトコード０）に関連するインデックスまたはオフセットを表示することができる。
【００２９】
望ましくは、ベクトル・テーブル162は少なくとも１つであり、一般には複数のバイトコードが、マイクロ・シーケンス・メモリ200からのマイクロ・シーケンスに置き換えられるようにプログラムされている。マイクロ・シーケンス・メモリ200は、望ましくは命令RAM132の中に命令記憶130の一部として実現されている。本発明の好適実施例によれば、１つまたは複数のバイトコードは、モニタ・コードを含むマイクロ・シーケンスに置き換えられうる。図５の例におけるバイトコード162（「GOTO」）とバイトコード182（「INVOKE」）は、202と206にあるマイクロ・シーケンス・メモリの中に位置するマイクロ・シーケンスに置き換えられる。これらのマイクロ・シーケンスのそれぞれは、望ましくは、置き換え中の命令に関連するパフォーマンス特性をモニタする１つまたは複数の命令とともに、置き換え中の命令を実行することが要求される動作を実行するC-ISA命令のような１つまたは複数の命令を含む。GOTOバイトコードの例におけるGOTOバイトコードは、図５に示すように、モニタ用に付与された命令シーケンス202の一部であり、直接実行されるGOTOを置き換える。オリジナルのバイトコードを置き換える命令シーケンス202の中に含まれるGOTOのインスタンスは、復号論理152によって直接実行される。他の実施例におけるマイクロ・シーケンスは、モニタ・コードを含むことができるだけであるから、命令をモニタすること以外の機能を実行しない。モニタ・コードを含むだけのマイクロ・シーケンスを有することは、それ以外ではプロセッサによって直接実行される命令を動的に付与するために望ましいことでありうる。その上、モニタ・コードを含むマイクロ・シーケンスに置き換えられる命令は、その代わりとしてモニタ・コードを含まないマイクロ・シーケンスに置き換えられうる。
【００３０】
マイクロ・シーケンスに含まれるモニタ・コードは、一般にマイクロ・シーケンスに置き換えられる命令に関連する１つまたは複数のパフォーマンス特性を決定する。モニタ・コードは、置き換えられた命令が実行されるたびに増分して、命令が実行される回数の総数の記録をとっておくカウンタ命令を含むことができる。他の実施例におけるモニタ・コードは、たとえば、単位時間当たりの実行回数、あるいは、命令実行、実行時間およびメモリ使用回数の全数当たりの実行回数を単位として置き換えられた命令が実行される頻度の記録をとっておくために使用できる。付与された命令によって決定されたパフォーマンス特性は、必要に応じて使用されうる。
【００３１】
本発明の各種好適実施例によれば、ベクトル・テーブル162は動的にプログラム可能である。ベクトル・テーブル162を動的にプログラムできることは、ユーザからの入力に基づいて、あるいは、モニタされた他の命令に関連するパフォーマンス特性に基づいて、どの命令が付与されるかをシステム100が変更することを可能にする。たとえば、現在命令の構成ビット168がマイクロ・シーケンスに置き換えられないか、あるいは、モニタ・コードを含まないマイクロ・シーケンスに置き換えられることを指定する命令を動的に再プログラムして、モニタ・コードを持たないマイクロ・シーケンスに置き換えることができる。この動的変更は、命令の構成ビットを変更するとともに、可能性としてフィールド166を変更し、新しいマイクロ・シーケンスの位置を指定することによって実現されうる。
【００３２】
一般に、命令は、たとえば、復号論理152によって受信される。更にシステムは、関連するプログラム可能な構成ビット（たとえば、ビットまたはフィールド168）がその命令が置き換えられることを表示している場合、その命令を、モニタ・コードを含む一連の命令に動的に置き換える。この手法は、直接実行可能なバイトコードのような固有の機械語命令に対しても「ホットスポット（hot spots）」が検出されることを可能にする。ホットスポットは、頻繁に実行されるコードの一部分である。この手法は、動的適応型コンパイラ（dynamic adaptive compiler：「DAC」）と呼ばれる動的コンパイラの中で適用可能である。したがって、JSM102を多数のコンパイラ手法と組み合わせて、プログラムの実行パフォーマンスを更に改善することができる。
【００３３】
上に説明した命令の意味を動的に変更する方法を適用する他の例は、上の図１で説明したシステムのような、同時に複数のプロセスを走行させることができるシステムで、ガーベジ・コレクタを実現することに関連する。このコンテクストにおけるJSM102は、プロセッサ104が他のタスクを走行させている間にJava（登録商標）アプリケーションを走行させる。これの１つがガーベジを回収するタスクである。
【００３４】
アプリケーションと（以前に割り当てられたメモリの使用を再主張する）ガーベジ・コレクタとの並行処理（concurrency）を可能にするため、（世代的または印を付けて回収する（generational or mark and sweep））増加型（incremental）ガーベジ・コレクタは、読み出しまたは書き込み障壁の実現を基礎としている。回収プロセス中、コレクタはオブジェクトのルートから記録して、アプリケーションによって使用されるオブジェクトのすべてを識別することを実施する。記録をとるためにはオブジェクトの内部に含まれる参照フィールド（reference field）を使用する。並行処理をしているため、漸増するガーベジにより、アプリケーションがアクセスできるようになったり、オブジェクトに含まれる参照フィールドが変わったりすることが可能になる。ガーベジ・コレクタの実行中、ガーベジ・コレクタは、オブジェクトのアプリケーションのコンテクストの何らかの変化に気付かされる。読み出し障壁は、オブジェクトの参照フィールドに対して読み出しアクセスをする場合にアプリケーションによって実行される動作である。書き込み障壁は、オブジェクトの参照フィールドに対して書き込みアクセスをする場合にアプリケーションによって実行される動作である。したがって、ガーベジ・ステップ中、そしてそのステップ中だけ、障壁（読み出し障壁に対して読み出しアクセス、書き込み障壁に対して書き込みアクセス）をつくるフィールドのアクセスにしたがってオブジェクト・フィールドにアクセスする前に特殊な動作が加えられる。これらの障壁は、アプリケーションの一時的な停止、あるいは、障壁リストの中へのオブジェクト参照の挿入を起こすことができる。これらの動作は、ガーベジ・コレクタ自体によって定義される。
【００３５】
したがって、ガーベジ回収ステップ中、オブジェクトの参照フィールドに対してアクセスするバイトコードの動作は、getfieldとputfieldのオペレーション・コード（opcodes）を介して変化する。その上、JSM102のようなJava（登録商標）アクセラレータの場合、putfield_quickとgetfield_quickのオペレーション・コードはハードウエア的にコード化（hard-coded）されている。したがって、ガーベジの回収中と書き込み障壁が必要な場合、getfield_quickオペレーション・コードの意味は変化して書き込み障壁を実現し、フィールドが参照フィールドの場合、オブジェクト・フィールドの参照に対してアクセスを実行する。
【００３６】
上に説明した命令を動的に改造する手法を使用すると、オペレーション・コードに対して２つの異なる構成を使用することができる。第１の構成の場合、getfield_quickはハードウエア的にコード化されたオペレーション・コードである。第２の構成の場合、望ましくは、マイクロ・シーケンスはgetfield_quickを置き換える。このマイクロ・シーケンスは、今でもgetfield_quickのハードウエア的にコード化されたバージョンを使用しているが、書き込み障壁を付与することが含まれている。このように、以下に示す特徴のどれでも、あるいは、すべてが実現される。すなわち、ガーベジ・コレクタが走行していない場合、関連する実行上のオーバヘッドはまったく存在せず、書き込み障壁があっても、getfield_quickのハードウエア的にコード化されたバイトコードを使用することができ、ハードウエアは、将来またはユーザの必要性から変化するかもしれないソフトウエアのアルゴリズムに依存せず、さらにハードウエア的にコード化されたオペレーション・コードが、その意味を変更しても、ソフトウエアのマイクロ・シーケンスを使用してハードウエアを使用することは、依然として可能である。
【００３７】
システム100は、図６に示すような、セルラ方式の携帯電話機として実現することができる。図示のように、移動通信装置は、統合されたキーパッド412とディスプレイ414を含む。JSMプロセッサ102とMPUプロセッサ104、それと他のコンポーネントは、キーパッド412、ディスプレイ414および無線周波（「RF」）回路416に接続される電子パッケージの中に含めることができる。RF回路416はアンテナ418に接続されうる。
【００３８】
本発明の好適実施例を示して説明してきたが、本発明の趣旨と教示を逸脱することなく、当業者によってこれらの改造をすることができる。本明細書で説明した実施例は、模範的なものだけであり、制限されることは意図されていない。本明細書で開示した本発明の変形と改造の多くは可能であり、かつ本発明の範囲内にあるものである。したがって、権利を防衛する範囲は上記説明によって制限されない。すべての特許請求の範囲は本発明の実施例として本明細書の中に組み込まれているものとする。
【００３９】
以上の説明に関して更に以下の項を開示する。
（１）命令を受信し、
前記命令とは別のプログラム可能な情報に基づいて、命令の意味を動的に変更する、
ことを含む方法。
【００４０】
（２）（１）に記載の方法において、前記命令の意味を動的に変更することは、前記命令に関連するモニタ・コードを含むことから構成される前記方法。
【００４１】
（３）（１）に記載の方法において、命令の意味を動的に変更することは、前記命令を、モニタ・コードを含む一連の命令に置き換えることを含む前記方法。
【００４２】
（４）（１）に記載の方法において、前記命令の意味を変更することは、意味を変更すべき命令に関連する複数系列の命令に対する参照を含むベクトル・テーブルを再プログラムすることを含む前記方法。
【００４３】
（５）（２）に記載の方法において、前記モニタ・コードは、ホットスポットを検出する前記方法。
【００４４】
（６）（１）に記載の方法において、前記命令によって演算が実行され、前記命令の意味を動的に変更することは、前記命令によって実行された演算を変更することを含む前記方法。
【００４５】
（７）（６）に記載の方法において、前記演算を変更することは、読み出し参照または書き込み参照に対して読み出しまたは書き込み障壁動作を加えて、ガーベジ・コレクタに対して最新の情報を提供することを含む前記方法。
【００４６】
（８）メモリから命令を取り出すフェッチ論理と、
前記フェッチ論理に接続される復号論理と、
前記復号論理にアクセス可能であるとともに、複数のエントリを含むベクトル・テーブルであって、各エントリは命令に対応するとともに関連する構成ビットを有し、前記構成ビットは前記関連する命令が代替可能な命令シーケンスに置き換えられるか否かを指定し、前記関連する命令が置き換えられることを指定する構成ビットをもつ複数のエントリは、代替可能な命令シーケンスに対するポインタを含む前記ベクトル・テーブルと、
を含むプロセッサ。
【００４７】
（９）（８）に記載のプロセッサにおいて、前記代替可能な命令シーケンスは、ホットスポットを検出するモニタ・コードを含む前記プロセッサ。
【００４８】
（１０）（８）に記載のプロセッサにおいて、ベクトル・テーブルのエントリは、演算が実行される命令に対応し、前記代替可能な命令シーケンスは、異なる演算を含む前記プロセッサ。
【００４９】
（１１）（１０）に記載のプロセッサにおいて、前記異なる演算は、読み出しまたは書き込み参照に対する読み出しまたは書き込み障壁動作を含み、ガーベジ・コレクタに対して最新の情報を提供する前記プロセッサ。
【００５０】
（１２）（８）に記載のプロセッサにおいて、置き換えられる命令は、インタープリタにかけられることなくプロセッサによって直接実行されるJava（登録商標）命令を含む前記プロセッサ。
【００５１】
（１３）（８）に記載のプロセッサにおいて、前記ベクトル・テーブルは、プログラム可能である前記プロセッサ。
【００５２】
（１４）（８）に記載のプロセッサにおいて、現在は、前記エントリに関連する前記命令が代替可能な命令シーケンスに置き換えられないことを指定するエントリの構成ビットは、前記命令が置き換えられることを指定するように動的にプログラム可能である前記プロセッサ。
【００５３】
（１５）（８）に記載のプロセッサにおいて、現在は、各エントリに関連する前記命令が、モニタ・コードを含まない代替可能な命令シーケンスに置き換えられることを指定する各ベクトル・テーブルのエントリは、前記関連する命令が、モニタ・コードを含む代替可能な命令シーケンスに置き換えられることを指定するように再プログラム可能である前記プロセッサ。
【００５４】
（１６）（１５）に記載のプロセッサにおいて、前記関連する命令が、モニタ・コードを含む代替可能な命令シーケンスに置き換えられることを指定するように再プログラム可能である各エントリはポインタを含み、前記ポインタは、モニタ・コードを含む前記代替可能な命令シーケンスを指定するように動的にプログラム可能である前記プロセッサ。
【００５５】
（１７）メモリから命令を取り出すフェッチ論理と、
前記フェッチ論理に接続される復号論理と、
モニタ・コードを含む一連の命令と或る命令が動的に置き換えられるか否かを示す手段であって、前記置き換えられた命令に該当する特性を前記モニタ・コードが決定する前記手段と、
を含むプロセッサ。
【００５６】
（１８）（１７）に記載のプロセッサにおいて、前記特性は、実行頻度、実行時間およびメモリ使用頻度から成るグループから選択された特性を含む前記プロセッサ。
【００５７】
（１９）（１７）に記載のプロセッサにおいて、前記置き換えられた命令は、置き換えられなければ、インタープリタにかけられることなく、前記プロセッサによって直接実行される命令である前記プロセッサ。
【００５８】
（２０）この手法は、命令を受信して、その命令とは別のプログラム可能な情報に基づいて、その命令の意味を動的に変更することを含む。意味の変更は、その命令に関連するパフォーマンス特性、またはその命令の動作（たとえば、ガーベジ・コレクタを支援する読み出しまたは書き込み障壁動作を含むこと）を決定するモニタ・コードの包含を含むことができる。
【図面の簡単な説明】
【００５９】
【図１】本発明の好適実施例のとおりJava（登録商標）スタック・マシン（JSM）とメイン・プロセッサ・ユニット（MPU）を含むシステムを示す図である。
【図２】本発明の好適実施例による図１のJSMのブロック図を示す図である。
【図３】図１，図２のJSMで使用される各種レジスタを示す図である。
【図４】「マイクロ・シーケンス」を含むJSMの好適動作を示す図である。
【図５】命令をモニタ・コードを含むマイクロ・シーケンスに置き換える好適実施例を示す図である。
【図６】本明細書で説明したシステムの模範的実施例を示す図である。
【符号の説明】
【００６０】
１００  システム
１０２  Java（登録商標）スタック・マシン（JSM）
１０４  メイン・プロセッサ・ユニット（MPU）
１０６  メモリ
１０８  Java（登録商標）仮想マシン
１１０  コンパイラ
１１２  バイトコード
１１４  ディスプレイ
【図１】
2005011352.tif 000003
【図２】
2005011352.tif 000004
【図３】
2005011352.tif 000005
【図４】
2005011352.tif 000006
【図５】
2005011352.tif 000007
【図６】
2005011352.tif 000008