【手続補正書】
【提出日】平成17年4月1日(2005.4.1)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンと共に用いられ、実行対象となる一部の仮想マシン命令列をその実行に先立って実マシン命令列に変換するその場式コンパイラであって、
前記仮想マシン命令列を構成する仮想マシン命令それぞれについて、前記仮想マシン命令列を基本ブロックに分割した場合の各基本ブロックの先頭となる仮想マシン命令であるか否かを示すブロック先頭情報の入力を受け付けるブロック先頭情報獲得手段と、
前記仮想マシン命令列を構成する仮想マシン命令それぞれについて、対応する実マシン命令列に変換する変換手段と、
前記変換手段によって得られた実マシン命令列における実マシン命令であって、前記ブロック先頭情報獲得手段が受け付けたブロック先頭情報によって特定された基本ブロックの先頭となる仮想マシン命令に対応する実マシン命令が、前記実マシンによってアドレシングされ得ない位置に配置される命令であるか否かを判定する分岐違反判定手段と、
前記分岐違反判定手段によって前記実マシン命令が前記位置に配置される命令であると判定された場合に、前記実マシン命令が前記位置に配置されないよう１個以上の無動作命令を前記実マシン命令列に追加挿入して出力する出力手段と
を備えることを特徴とするコンパイラ。
【請求項２】
前記出力手段は、前記実マシン命令が前記実マシンによってアドレシングされ得る後続位置にずらせるために必要な個数の無動作命令を前記実マシン命令列における基本ブロックの先頭位置に追加挿入することを特徴とする請求項１記載のコンパイラ。
【請求項３】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンであって、
実行対象となる仮想マシン命令列を記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令を読み出す読み出し手段と、
読み出された仮想マシン命令に対応する演算処理を特定し実行する解読実行手段とを備え、
前記命令記憶手段は、前記仮想マシン命令列を構成する基本ブロックそれぞれに対応する命令ブロックの集まりからなり、
各命令ブロックは、その命令ブロックの前記命令記憶手段における先頭位置を特定するための識別子を格納した識別子領域と、対応する基本ブロックの非分岐命令だけを格納した非分岐命令領域と、対応する基本ブロックの分岐命令を格納した分岐命令領域とを含み、
前記分岐命令領域に格納された分岐命令は、その分岐先が前記識別子によって指定され、
前記解読実行手段は、読み出された仮想マシン命令が前記分岐命令である場合には、その分岐先として指定されている識別子に対応する命令ブロックの非分岐命令領域の先頭に実行制御を分岐させることを特徴とする仮想マシン。
【請求項４】
前記解読実行手段は、
次に読み出すべき仮想マシン命令が属する命令ブロックの識別子を格納する識別子レジスタと、その仮想マシン命令のその命令ブロックにおける相対的な記憶位置を示すオフセットを格納するオフセットカウンタとからなるプログラムカウンタを備え、
前記読み出し手段は、前記プログラムカウンタに格納された識別子とオフセットに基づいて前記仮想マシン命令を読み出し、
前記解読実行手段は、読み出された仮想マシン命令が前記分岐命令である場合には、その分岐先として指定されている識別子を前記識別子レジスタに書き込むと共に前記オフセットカウンタを初期値にリセットし、読み出された仮想マシン命令が前記非分岐命令である場合には、前記オフセットカウンタを増加させ、
前記読み出し手段は、前記解読実行手段によって更新されたプログラムカウンタの識別子とオフセットに基づいて次に実行すべき仮想マシン命令を読み出すことを特徴とする請求項３記載の仮想マシン。
【請求項５】
前記解読実行手段はさらに、対象とする全ての種類の仮想マシン命令それぞれに対応する実マシン命令列を記憶する実マシン命令列記憶部を備え、
前記命令記憶手段の各命令ブロックはさらに、その命令ブロックの非分岐命令領域及び分岐命令領域に格納された仮想マシン命令それぞれに対応する実マシン命令列を前記実マシン命令列記憶部に記憶された実マシン命令列から特定するためのデコードデータを含むデコードデータ列を格納したデコードデータ列領域を含み、
前記読み出し手段は、デコードデータ列が格納された命令ブロックについては前記仮想マシン命令に代えて前記デコードデータを読み出し、デコードデータ列が格納されていない命令ブロックについては仮想マシン命令を読み出した後に、その仮想マシン命令に対応する実マシン命令列を前記実マシン命令列記憶部に記憶された実マシン命令列から特定するためのデコードデータを生成し、
前記解読実行手段は、前記読み出し手段から読み出し又は生成されたデコードデータによって特定される実マシン命令列を前記実マシン命令列記憶部から読み出して実行することを特徴とする請求項４記載の仮想マシン。
【請求項６】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンにおいて、実行対象となる仮想マシン命令列を格納しておくための命令記憶手段における前記格納方法であって、
前記命令記憶手段は、前記仮想マシン命令列を構成する基本ブロックそれぞれに対応する命令ブロックの集まりからなり、
各命令ブロックは、その命令ブロックの前記命令記憶手段における先頭位置を特定するための識別子を格納した識別子領域と、対応する基本ブロックの非分岐命令だけを格納した非分岐命令領域と、対応する基本ブロックの分岐命令を格納した分岐命令領域とを含み、
前記分岐命令領域に格納された分岐命令は、その分岐先が前記識別子によって指定されていることを特徴とする仮想マシン命令列の格納方法。
【請求項７】
コンピュータを仮想マシンとして機能させるためのプログラムを記録した記録媒体であって、
前記仮想マシンは、
実行対象となる仮想マシン命令列を記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令を読み出す読み出し手段と、
読み出された仮想マシン命令に対応する演算処理を特定し実行する解読実行手段とを備え、
前記命令記憶手段は、前記仮想マシン命令列を構成する基本ブロックそれぞれに対応する命令ブロックの集まりからなり、
各命令ブロックは、その命令ブロックの前記命令記憶手段における先頭位置を特定するための識別子を格納した識別子領域と、対応する基本ブロックの非分岐命令だけを格納した非分岐命令領域と、対応する基本ブロックの分岐命令を格納した分岐命令領域とを含み、
前記分岐命令領域に格納された分岐命令は、その分岐先が前記識別子によって指定され、
前記解読実行手段は、読み出された仮想マシン命令が前記分岐命令である場合には、その分岐先として指定されている識別子に対応する命令ブロックの非分岐命令領域の先頭に実行制御を分岐させることを特徴とする記録媒体。
【請求項８】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンにおいて、実行対象となる仮想マシン命令列を格納しておくための命令記憶手段における前記格納方法であって、
前記命令記憶手段は、前記仮想マシン命令列を構成する基本ブロックそれぞれに対応する命令ブロックの集まりと、少なくともひとつ以上の前記仮想マシン命令列からなり、
各命令ブロックは、その命令ブロックの前記仮想マシン命令列の基本ブロックの先頭位置を特定するための識別子を格納した識別子領域を含み、
前記仮想マシン命令列に格納された分岐命令の分岐先が前記識別子によって指定されていることを特徴とする仮想マシン命令列の格納方法。
【請求項９】
実マシンによる制御の下で仮想マシン命令を実行するスタック型仮想マシンであって、
データを後入れ先出し方式で一時的に記憶するためのスタック手段と、
実行対象となる仮想マシン命令列と、それら仮想マシン命令それぞれに対応づけられた情報であって、対応づけられた仮想マシン命令に後続する仮想マシン命令が実行された場合の前記スタック手段でのデータの格納状態の変化を示す先行命令情報とを記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令及び対応する先行命令情報を読み出す読み出し手段と、
読み出された仮想マシン命令と先行命令情報との組み合わせに対応する演算処理を特定し実行する解読実行手段と
を備えることを特徴とする仮想マシン。
【請求項１０】
前記解読実行手段は、
対象とする全ての種類の仮想マシン命令と全ての種類の先行命令情報との組み合わせそれぞれに対応する実マシン命令列を記憶する実マシン命令列記憶部と、
前記読み出し手段によって読み出された仮想マシン命令と先行命令情報との組み合わせに対応する実マシン命令列を前記実マシン命令列記憶部に記憶された実マシン命令列から特定する特定部と、
特定された実マシン命令列を実行する実行部と
を有することを特徴とする請求項９記載の仮想マシン。
【請求項１１】
前記先行命令情報は、対応する仮想マシン命令に後続する仮想マシン命令が実行された場合の前記スタック手段に格納されるデータ数の増減を示し、
前記実マシン命令列記憶部に記憶された実マシン命令列には、対応する先行命令情報に基づいて前記スタック手段を先行処理する実マシン命令が含まれていることを特徴とする請求項１０記載の仮想マシン。
【請求項１２】
前記実マシン命令列記憶部に記憶された実マシン命令列は、前記スタック手段において最後に格納されたデータと最後から２番目に格納されたデータそれぞれを記憶する領域が前記実マシンが備える２つのレジスタに割り当てられていることを前提とする内容であることを特徴とする請求項１１記載の仮想マシン。
【請求項１３】
前記命令記憶手段は、前記仮想マシン命令列と前記先行命令情報とを、対応する１つの仮想マシン命令と１つの先行命令情報との組を１つの拡張仮想マシン命令とする拡張仮想マシン命令列として記憶し、
前記読み出し手段は、前記命令記憶手段から拡張仮想マシン命令を読み出し、
前記解読実行手段は、読み出された拡張仮想マシン命令に対応する演算処理を特定し実行することを特徴とする請求項９記載の仮想マシン。
【請求項１４】
スタック型仮想マシンを対象とするコンパイラであって、
ソースプログラムを前記仮想マシンが実行する仮想マシン命令列に変換する命令列変換手段と、
変換によって得られた仮想マシン命令列を構成する仮想マシン命令それぞれについて、後続する仮想マシン命令が前記仮想マシンによって実行された場合の前記スタック手段でのデータの格納状態の変化を示す先行命令情報を生成する先行命令情報生成手段と、
生成された先行命令情報と対応する仮想マシン命令とを関連付けて出力する関連付け手段と
を備えることを特徴とする仮想マシンコンパイラ。
【請求項１５】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンであって、
実行対象となる仮想マシン命令列を記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令を読み出す読み出し手段と、
読み出された仮想マシン命令に対応する演算処理を特定し実行する解読実行手段とを備え、
前記解読実行手段は、
読み出された仮想マシン命令が実行制御の流れを分岐させる分岐命令であるか否かを判定する分岐命令判定部と、
分岐命令であると判定される度に、その分岐命令の実行に加えて、この仮想マシンへの割込み要求の発生の有無の検出と、発生している場合の割込み処理とを実行する割込み処理部とを有することを特徴とする仮想マシン。
【請求項１６】
前記解読実行手段はさらに、
対象とする全ての種類の仮想マシン命令に対応する実マシン命令列とこの仮想マシンへの割込み要求に対処するための実マシン命令列を記憶する実マシン命令列記憶部と、
指定された実マシン命令列を実行する実行部とを備え、
前記割込み処理部は、前記分岐命令判定部によって分岐命令であると判定される度に、前記実行部に、前記割込み要求に対処するための実マシン命令列を実行させた後に前記分岐命令に対応する実マシン命令列を実行させることを特徴とする請求項１５記載の仮想マシン。
【請求項１７】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンであって、
実行対象となる仮想マシン命令列を記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令を読み出す読み出し手段と、
読み出された仮想マシン命令に対応する演算処理を特定し実行する解読実行手段とを備え、
前記解読実行手段は、
読み出された仮想マシン命令が一定個数の仮想マシン命令の集まりをブロックとした場合の各ブロックを代表する仮想マシン命令に相当するか否かを判定するブロック判定部を備え、
各ブロックを代表する仮想マシン命令であると判定される度に、その仮想マシン命令の実行に加えて、この仮想マシンへの割込み要求の発生の有無の検出と、発生している場合の割込み処理とを実行する割込み処理部とを有することを特徴とする仮想マシン。
【請求項１８】
前記解読実行手段はさらに、
対象とする全ての種類の仮想マシン命令に対応する実マシン命令列とこの仮想マシンへの割込み要求に対処するための実マシン命令列を記憶する実マシン命令列記憶部と、
指定された実マシン命令列を実行する実行部とを備え、
前記ブロック判定部は、仮想マシン命令が読み出される度に、それまでに読み出された仮想マシン命令の総数が一定値の倍数に一致するか否か比較し、一致する場合に、前記仮想マシン命令は各ブロックを代表する仮想マシン命令に相当すると判定し、
前記割込み処理部は、前記分岐命令判定部によって各ブロックを代表する仮想マシン命令であると判定される度に、前記実行部に、前記割込み要求に対処するための実マシン命令列を実行させた後に前記仮想マシン命令に対応する実マシン命令列を実行させることを特徴とする請求項１７記載の仮想マシン。
【請求項１９】
実マシンによる制御の下で仮想マシン命令を実行する仮想マシンであって、
実行対象となる仮想マシン命令列を圧縮符号で記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令の圧縮符号を読み出し、対応する仮想マシン命令に復号する読み出し手段と、
復号された仮想マシン命令に対応する演算処理を特定し実行する解読実行手段とを備え、
前記命令記憶手段は、前記仮想マシン命令列を構成する基本ブロックそれぞれに対応する命令ブロックの集まりからなり、
各命令ブロックは、その命令ブロックの前記命令記憶手段における先頭位置を特定するための識別子を格納した識別子領域と、対応する基本ブロックの非分岐命令だけを格納した非分岐命令領域と、対応する基本ブロックの分岐命令を格納した分岐命令領域とを含み、
前記分岐命令領域に格納された分岐命令は、その分岐先が前記識別子によって指定され、
前記解読実行手段は、復号された仮想マシン命令が前記分岐命令である場合には、その分岐先として指定されている識別子に対応する命令ブロックの非分岐命令領域の先頭に実行制御を分岐させることを特徴とする仮想マシン。
【請求項２０】
実マシンによる制御の下で仮想マシン命令を実行するスタック型仮想マシンにおいて、実行対象となる仮想マシン命令列を格納しておくための命令記憶手段における前記格納方法であって、
実行対象となる仮想マシン命令列と、それら仮想マシン命令それぞれに対応づけられた情報であって、対応づけられた仮想マシン命令に後続する仮想マシン命令が実行された場合の前記スタックでのデータの格納状態の変化を示す先行命令情報とを関連付けて格納することを特徴とする仮想マシン命令列の格納方法。
【請求項２１】
コンピュータをスタック型仮想マシンとして機能させるためのプログラムを記録した記録媒体であって、
前記仮想マシンは、
データを後入れ先出し方式で一時的に記憶するためのスタック手段と、
実行対象となる仮想マシン命令列と、それら仮想マシン命令それぞれに対応づけられた情報であって、対応づけられた仮想マシン命令に後続する仮想マシン命令が実行された場合の前記スタック手段でのデータの格納状態の変化を示す先行命令情報とを記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令及び対応する先行命令情報を読み出す読み出し手段と、
読み出された仮想マシン命令と先行命令情報との組み合わせに対応する演算処理を特定し実行する解読実行手段と
を備えることを特徴とする記録媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２２７
【補正方法】変更
【補正の内容】
【０２２７】
また、実施形態５〜８では、各命令ブロック格納領域はユニークな識別子を保持していたが、本明細書発明の骨子が基本ブロックの識別にあることに照らし合わせれば、各命令ブロック格納領域の識別子が、他の場所に格納されている仮想マシン命令列への参照になっており、これにより該当仮想マシン命令が基本ブロックの先頭であることを識別するような方法も考えられる。
さらに、本発明に係る仮想マシン、仮想マシンコンパイラ及びその場式コンパイラは、いずれも、汎用のコンピュータによって実行されるプログラムとして実現することができるので、これら発明に係るプログラムをCD-ROM等の記録媒体に収納したり、伝送路を介して通信したりすることによって、流通させることができるのは言うまでもない。