(57)【要約】【課題】メモリアクセスを削減する変換器及び変換方法を提供する。【解決手段】本発明の変換器は、メモリからフェッチしたレジスタ形式のバイトコードを保持する保持部と、バイトコードの命令コードに対応したネイティブコードのひな形を格納する第１記憶部と、保持部からバイトコードを取り出し、第１記憶部に格納されているネイティブコードのひな形を用いて、当該バイトコードに対応する１または複数のネイティブコードを作成する命令作成部と、物理レジスタと、命令作成部が作成したネイティブコードにより当該物理レジスタに格納されたデータに対応するデータを格納するメモリ上のレジスタとの対応関係を示すデータを格納する第２記憶部と、を備え、命令作成部は、作成するネイティブコードが、第２記憶部に格納されたデータに含まれるメモリ上のレジスタに関するロード命令であると判定した場合、当該ネイティブコードの作成を省略することを特徴とする。【選択図】図２
2012088909.tif 000002
【特許請求の範囲】
【請求項１】
メモリからフェッチしたレジスタ形式のバイトコードを保持する保持部と、
バイトコードの命令コードに対応したネイティブコードのひな形を格納する第１記憶部と、
保持部に保持されているバイトコードを取り出し、第１記憶部に格納されているネイティブコードのひな形を用いて、当該バイトコードに対応する１または複数のネイティブコードを作成する命令作成部と、
物理レジスタの番号と、命令作成部が作成したネイティブコードにより当該番号の物理レジスタに格納されたデータに対応するデータを格納するメモリ上のレジスタとの対応関係を示すデータを格納する第２記憶部と、を備え、
命令作成部は、作成するネイティブコードが、第２記憶部に格納されたデータに含まれるメモリ上のレジスタに関するロード命令であると判定した場合、当該ネイティブコードの作成を省略することを特徴とする変換器。
【請求項２】
命令作成部は、ネイティブコードに格納される物理レジスタの番号を、第２記憶部に格納されたデータに含まれる物理レジスタの番号を用いて特定することを特徴とする請求項１に記載の変換器。
【請求項３】
命令作成部は、作成するネイティブコードがメモリ上のレジスタに関するストア命令であると判定した場合、当該ネイティブコードの作成を省略することを特徴とする請求項１または２に記載の変換器。
【請求項４】
命令作成部は、物理レジスタを割り当てるネイティブコードのひな形を第１記憶部から取得した時、バイトコードに含まれるメモリ上のレジスタの番号と、当該レジスタに割り当てる物理レジスタの番号との対応関係を示すデータを作成し、当該データを第２記憶部に格納することを特徴とする請求項１から３のいずれか１項に記載の変換器。
【請求項５】
命令作成部は、所定の時点において、第２記憶部に格納されているデータを削除し、当該削除するデータに含まれる番号の物理レジスタに格納されたデータを、当該削除するデータに含まれるメモリ上のレジスタに書き込むストア命令のネイティブコードを作成することを特徴とする請求項４に記載の変換器。
【請求項６】
メモリからフェッチしたレジスタ形式のバイトコードを保持するステップと、
保持したバイトコードを取り出し、バイトコードの命令コードに対応したネイティブコードのひな形を格納する第１記憶部に格納されているネイティブコードのひな形を用いて、当該バイトコードに対応する１または複数のネイティブコードを作成するネイティブコード作成ステップと、
物理レジスタの番号と、ネイティブコード作成ステップにより作成されたネイティブコードにより物理レジスタに格納されたデータに対応するデータを格納するメモリ上のレジスタとの対応関係を示すデータを第２記憶部に格納する記憶ステップと、を含み、
ネイティブコード作成ステップでは、作成するネイティブコードが、第２記憶部に格納されたメモリ上のレジスタに関するロード命令またはストア命令であると判定される場合、当該ネイティブコードの作成が省略されることを特徴とする変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、レジスタ形式のバイトコードをネイティブコードに変換する変換器及び変換方法の技術に関する。
【背景技術】
【０００２】
近年、Google（登録商標）社の携帯情報端末向けプラットフォームAndroid（登録商標
）を搭載した携帯電話が急速に普及している。このような携帯電話で実行されるアプリケーションは、ポータビリティを高めるため、通常は、Java（登録商標）などの特定のコンピュータ及びオペレーティングシステムに依存しないプログラム言語により作成される。当該プログラム言語では、すべてのプログラムは一度、中間言語であるバイトコードにコンパイルされる。Androidで採用されているバイトコードは、Javaバイトコードなどとは
異なり、メモリ上に存在するレジスタ（領域）を直接指定して演算を行う、という特徴をもつ。このようなバイトコードは、レジスタ形式のバイトコードと呼ばれている。
【０００３】
バイトコードは、特定のコンピュータ及びオペレーティングシステムに依存しないため、それを解釈及び実行できる環境があれば、任意のプロセッサ上で実行される。通常、VM（Virtual Machine）が、バイトコードを逐次解釈し、実行する。
【０００４】
このようなバイトコードの実行は、VMを介して行われるため、機械語で表されたネイティブコード（オブジェクトプログラムまたはオブジェクトコードとも呼ばれる）の実行と比べて遅い。そのため、バイトコードの実行を高速化する様々な手法がこれまでに提案されてきた。当該手法を開示する文献として、以下の非特許文献１が挙げられる。
【０００５】
非特許文献１には、例えば、プロセッサの一部に、Javaバイトコードをネイティブコードに変換できるハードウェア（アクセラレータ）を追加することにより、バイトコードの実行を高速化する手法が開示されている。このようなアクセラレータが追加されることにより、バイトコードはネイティブコードに変換されるため、プロセッサは、VM等のソフトウェアを介さず、直接バイトコードを解釈及び実行することができるようになる。これによって、VM等のソフトウェアを介することによるオーバヘッドが削減される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】“ＡＲＭアーキテクチャリファレンスマニュアル”、［online］、アーム株式会社、［平成２２年１０月１５日検索］、インターネット〈URL：https://www.jp.arm.com/document/manual/files/051020DDI0100HJ_v6_1.pdf〉
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記非特許文献１において開示される技術により単純に実装されたアクセラレータは、レジスタ形式のバイトコードの場合、バイトコードの各オペランドがメモリ上に存在するため、多数のストア命令及びロード命令に関するネイティブコードを発行してしまう。そのため、メモリアクセスの効率が悪い。
【０００８】
本発明は、このような点を考慮してなされたものであり、メモリアクセスを削減する変換器及び変換方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、上述した課題を解決するために、以下の構成を採用する。
【００１０】
すなわち、本発明の変換器は、メモリからフェッチしたレジスタ形式のバイトコードを保持する保持部と、バイトコードの命令コードに対応したネイティブコードのひな形を格納する第１記憶部と、保持部に保持されているバイトコードを取り出し、第１記憶部に格納されているネイティブコードのひな形を用いて、当該バイトコードに対応する１または複数のネイティブコードを作成する命令作成部と、物理レジスタの番号と、命令作成部が作成したネイティブコードにより当該番号の物理レジスタに格納されたデータに対応するデータを格納するメモリ上のレジスタの番号との対応関係を示すデータを格納する第２記憶部と、を備え、命令作成部は、作成するネイティブコードが、第２記憶部に格納されたメモリ上のレジスタの番号によって特定されるアドレスに関するロード命令であると判定した場合、当該ネイティブコードの作成を省略することを特徴とする。
【００１１】
上記構成によれば、命令作成部は、第２記憶部に格納されたメモリ上のレジスタの番号によって特定されるアドレスに関するロード命令に関するネイティブコードの作成を省略する。したがって、上記構成によれば、一部のロード命令に関するネイティブコードの発行が省かれるため、メモリアクセスを削減することができる。
【００１２】
また、上記命令作成部は、ネイティブコードを作成する際に必要な物理レジスタの番号を、第２記憶部に格納されたデータに含まれる物理レジスタの番号を用いて特定してもよい。
【００１３】
また、上記命令作成部は、作成するネイティブコードがメモリ上のレジスタに関するストア命令であると判定した場合、当該ネイティブコードの作成を省略してもよい。
【００１４】
上記構成によれば、命令作成部は、メモリ上のレジスタに関するストア命令に関するネイティブコードの作成を省略する。したがって、上記構成によれば、一部のストア命令に関するネイティブコードの発行が省かれるため、メモリアクセスを削減することができる。
【００１５】
また、上記命令作成部は、物理レジスタを割り当てるネイティブコードのひな形を第１記憶部から取得した時、バイトコードに含まれるメモリ上のレジスタの番号と、当該アドレスに割り当てる物理レジスタの番号との対応関係を示すデータを作成し、当該データを第２記憶部に格納してもよい。
【００１６】
上記構成によれば、命令作成部により作成されるネイティブコードにより対応付けられる物理レジスタとメモリ上のレジスタの番号との対応関係が第２記憶部に格納される。つまり、第２記憶部は、ネイティブコードの実行状態に対応した、メモリ上のレジスタの番号と物理レジスタの番号との対応関係を示すデータが格納される。これにより、命令作成部は、ネイティブコードの実行状態に対応して、ロード命令に関するネイティブコードの作成を省略することができる。
【００１７】
また、上記命令作成部は、所定の時点において、第２記憶部に格納されているデータを削除し、当該削除するデータに含まれる番号の物理レジスタに格納されたデータを、当該削除するデータに含まれるメモリ上のレジスタの番号によって特定されるアドレスに書き込むストア命令のネイティブコードを作成してもよい。
【００１８】
上記構成によれば、メモリ上のレジスタの番号と物理レジスタの番号との対応関係を示すデータが削除される時に、物理レジスタに格納されたデータを、対応するメモリ上のレジスタの番号によって特定されるアドレスにストアすることができる。
【００１９】
また、本発明の変換方法は、メモリからフェッチしたレジスタ形式のバイトコードを保持するステップと、保持したバイトコードを取り出し、バイトコードの命令コードに対応したネイティブコードのひな形を格納する第１記憶部に格納されているネイティブコードのひな形を用いて、当該バイトコードに対応する１または複数のネイティブコードを作成するネイティブコード作成ステップと、物理レジスタの番号と、ネイティブコード作成ステップにより作成されたネイティブコードにより当該番号の物理レジスタに格納されたデータに対応するデータを格納するメモリ上のレジスタの番号との対応関係を示すデータを第２記憶部に格納する記憶ステップと、を含み、ネイティブコード作成ステップでは、作成するネイティブコードが、第２記憶部に格納されたメモリ上のレジスタの番号に関するロード命令であると判定される場合、当該ネイティブコードの作成が省略されることを特徴とする。
【００２０】
なお、本発明の別態様として、FPGA（Field-Programmable Gate Array）に読み込ませ
ることにより以上の各構成を実現するプログラムであってもよい。
【発明の効果】
【００２１】
本発明によれば、メモリアクセスを削減する変換器及び変換方法を提供することができる。
【図面の簡単な説明】
【００２２】
【図１】実施の形態に係る変換器を含むプロセッサの構成を例示する図
【図２】実施の形態に係る変換器の構成を例示する図
【図３】変換テーブルと命令テーブルの一例を示す図
【図４】DRMTの一例を示す図
【図５】１つ目の加算命令に関するバイトコードの変換例を示す図
【図６】２つ目の加算命令に関するバイトコードの変換例を示す図
【発明を実施するための形態】
【００２３】
以下、本発明の一側面に係る変換器及び変換方法を、実施の形態（以下、「本実施形態」とも表記する）として説明する。ただし、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
【００２４】
本実施形態の変換器を含むプロセッサは、その一例としてMIPSプロセッサである。そして、本実施形態の変換器は、レジスタ形式のバイトコードの一例としてDalvikバイトコードを、MIPS命令セットに対応したネイティブコードに変換する。Dalvikバイトコードとは、Androidにおいて用いられているJavaの実行モデルで採用されている命令セットである
。
【００２５】
なお、MIPS命令セットに対応したネイティブコードの命令長は３２ビットである。これに対して、Dalvikバイトコードの命令長は、可変長であり、最長８０ビットである。また、Dalvikバイトコードでは、各命令は、Dalvikレジスタに対して演算処理を行う。ここで、Dalvikレジスタは、物理レジスタを指すものではなく、メモリ上に割り当てられた領域を指す。そして、当該領域のアドレスは、ベースアドレスと当該Dalvikレジスタの番号とによって特定される。Dalvikバイトコードにおける各命令では、０〜３個のDalvikレジスタをオペランドとして、これらの値を用いた演算が実施される。
【００２６】
§１  プロセッサの構成例
まず、本実施形態に係る変換器を含むプロセッサの構成例について説明する。図１は、本実施形態に係る変換器を含むプロセッサを例示する。図１に示されるとおり、本実施形
態に係る変換器１を含むプロセッサ１００は、変換器１、フェッチャ２、ステータスレジスタ３、ネイティブデコーダ４、演算装置５、及び物理レジスタ６を備える。
【００２７】
フェッチャ２は、メモリ７に格納されたDalvikバイトコードまたはネイティブコードをフェッチする（読み出す）。フェッチしたDalvikバイトコードは、変換器１によってネイティブコードに変換される。そして、変換器１によって変換された又はフェッチャ２が出力したネイティブコードは、ネイティブデコーダ４に入力される。
【００２８】
変換器１は、フェッチャ２がフェッチしたDalvikバイトコードをネイティブコードに変換する。詳細は「§２  変換器の構成例」に後述する。
【００２９】
ステータスレジスタ３は、Dalvikバイトコードによる命令実行モードか、ネイティブコードによる命令実行モードかを特定する識別子を格納する。このステータスレジスタ３により、上述したネイティブデコーダ４に入力されるネイティブコードの入力元が特定される。ステータスレジスタ３は、例えば、ネイティブコードによる命令実行モードにおいて、演算装置５が行う所定の演算処理により、その格納する識別子をDalvikバイトコードによる命令実行モードを示す識別子に書き換えられる。また、ステータスレジスタ３は、例えば、Dalvikバイトコードによる命令実行モードにおいて、変換器１が、フェッチャ２がフェッチしたバイトコードをネイティブコードに変換できなかった時、その格納する識別子をネイティブコードによる命令実行モードを示す識別子に所定の方法によって書き換えられる。このようにステータスレジスタ３の格納する値が書き換えられることにより、ネイティブデコーダ４にネイティブコードを入力する入力元が切り替えられる。
【００３０】
ネイティブデコーダ４は、フェッチャ２または変換器１により入力されるネイティブコードをデコードする。
【００３１】
演算装置５及び物理レジスタ６は、ネイティブデコーダ４のデコード結果に基づいて、所定の演算処理を行う。
【００３２】
なお、これらの構成は、例えば、不図示の制御装置によって制御される。
【００３３】
§２  変換器の構成例
次に、本実施形態に係る変換器１の構成例について説明する。図２は、本実施形態に係る変換器１の構成例を示す。
【００３４】
変換器１は、図２に示されるとおり、そのハードウェア構成として、バイトコードバッファ１１、命令作成部１２、変換テーブル１３、命令テーブル１４、Dalvik Register Map Table（以下、「DRMT」と表記する）１５、を有している。
【００３５】
＜バイトコードバッファ１１＞
バイトコードバッファ１１は、フェッチャ２がフェッチして出力するDalvikバイトコードを保持する。これにより、後述する命令作成部１２は、Dalvikバイトコードを１つ取り出すことが可能となる。
【００３６】
具体的に説明すると、MIPS命令セットに対応したネイティブコードの命令長は３２ビットであるため、フェッチャ２がメモリ７からフェッチするデータ長は３２ビットである。これに対して、Dalvikバイトコードの命令長は、可変長であり、最長８０ビットである。したがって、フェッチャ２は、１回のフェッチでDalvikバイトコードを１つ取り出すことができない場合がある。このため、１つのDalvikバイトコードをメモリ７から取り出すためには、フェッチャ２は複数回にわたりデータをフェッチする必要がある。バイトコード
バッファ１１は、主に、このようなデータを保持するために用いられる。つまり、バイトコードバッファ１１は、フェッチャ２が複数回にわたりメモリ７からフェッチしたデータを保持する。これにより、後述する命令作成部１２は、当該バイトコードバッファ１１に保持されたデータからDalvikバイトコードを１つ取り出すことが可能となる。
【００３７】
なお、このような命令作成部１２の処理を可能にするため、バイトコードバッファ１１は、少なくともDalvikバイトコードの最長の命令長である８０ビットのデータを保持する。
【００３８】
＜命令作成部１２＞
命令作成部１２は、１つのDalvikバイトコードを、対応する１又は複数のネイティブコード（本実施形態では、MIPS命令列）へと変換する。
【００３９】
具体的には、命令作成部１２は、変換テーブル１３、及び命令テーブル１４から読み出された１または複数のネイティブコードのひな形（MIPS命令列のひな形）と、Dalvikバイトコードから得られたオペランドにより、ネイティブコードを作成し、後続するユニット（本実施形態では、ネイティブデコーダ４）へ出力する。ネイティブコードのひな形は、ネイティブコードのオペコード（命令コード）と、仮のオペランドとを有する。命令作成部１２は、このネイティブコードのひな形に含まれる仮のオペランドを、バイトコードから得られたオペランド等を用いて所定のオペランドに置き換えることにより、ネイティブコードを作成する。これにより、命令作成部１２は、１つのDalvikバイトコードを、対応する１又は複数のネイティブコード（本実施形態では、MIPS命令列）へと変換する。
【００４０】
また、命令作成部１２は、当該ネイティブコードの作成の際、DRMT１５を参照することにより、一部のロード命令に関するネイティブコードの発行を停止する。言い換えると、命令作成部１２は、DRMT１５を参照することにより、一部のロード命令に関するネイティブコードの作成を省略する。具体的な処理については後述する。
【００４１】
また、命令作成部１２は、作成したネイティブコードが物理レジスタをDalvikレジスタに割り当てる命令である場合、当該Dalvikレジスタと物理レジスタの対応関係を示すデータ、具体的にはDalvikレジスタの番号と物理レジスタの番号とを保持するデータ（エントリ）をDRMT１５に登録する。具体的な処理については後述する。
【００４２】
なお、物理レジスタをDalvikレジスタに割り当てる命令として、本実施形態では２つの命令が考えられる。
【００４３】
１つ目の命令は、Dalvikレジスタをロードする命令である。当該命令が実行されると、メモリ上のあるアドレスに格納されているデータ（本実施形態では、Dalvikレジスタに格納されているデータ）が、物理レジスタにロードされる。つまり、物理レジスタがDalvikレジスタに割り当てられる。命令作成部１２は、このような命令のネイティブコードのひな形を取得した時、Dalvikレジスタの番号と物理レジスタの番号とを保持するデータ（エントリ）をDRMT１５に登録する。
【００４４】
２つ目の命令は、Dalvikバイトコードのデスティネーションオペランド（Dalvikレジスタ）に物理レジスタを割り当てる命令である。デスティネーションオペランドとは、そのバイトコードによる演算結果を格納するオペランドであり、Dalvikバイトコードの場合は先頭のオペランドがこれに該当する。このような命令も、上記ロード命令と同様に、物理レジスタがDalvikレジスタに割り当てられる。命令作成部１２は、このような命令のネイティブコードのひな形を取得した時、Dalvikレジスタの番号と物理レジスタの番号とを保持するデータ（エントリ）をDRMT１５に登録する。なお、このような命令であることは、
変換テーブル１３及び命令テーブル１４のネイティブコードのひな形を格納するフィールド（後述する、Ｉｎｓｔフィールド）のデータフラグにより示される。命令作成部１２は、このデータフラグにより、変換テーブル１３又は命令テーブル１４から取得したネイティブコードのひな形が、Dalvikバイトコードの先頭のオペランド（Dalvikレジスタ）に物理レジスタを割り当てる命令であることを認識する。
【００４５】
また、命令作成部１２は、変換テーブル１３又は命令テーブル１４から取得したネイティブコードのひな形がストア命令に関するひな形であって、Dalvikレジスタに対するストア命令のひな形である場合、当該ストア命令のネイティブコードの作成を省略する。つまり、命令作成部１２は、Dalvikレジスタに対するストア命令に関するネイティブコードのひな形に対して、オペランドの置き換えを行わず、ネイティブコードの作成をしない。これにより、メモリアクセスが削減される。
【００４６】
なお、本実施形態では、命令作成部１２は、特定の時にDalvikレジスタに対するストア命令に関するネイティブコードを作成する。特定の時とは、後述するDRMT１５がDalvikレジスタの番号と物理レジスタの番号とを保持するデータ（エントリ）を削除する時である。命令作成部１２は、後述するDRMT１５がDalvikレジスタの番号と物理レジスタの番号とを保持するデータ（エントリ）を削除する時、当該物理レジスタに格納されるデータを当該Dalvikレジスタにストアする命令に関するネイティブコードを作成する。
【００４７】
＜変換テーブル１３＞
変換テーブル１３は、例えば、SRAM（Static Random Access Memory）により構成され
る。変換テーブル１３は、Dalvikバイトコードのオペコードに対応付けられたネイティブコードのひな形を格納する命令テーブル１４へのポインタを格納する。また、変換テーブル１３は、Dalvikバイトコードのオペコードに対応づけられた１又は複数のネイティブコードのひな形が変換テーブル１３又は命令テーブル１４に存在するかどうかを示すフラグを格納する。言い換えると、変換テーブル１３は、Dalvikバイトコードをネイティブコードに変換可能かどうかを示すフラグを格納する。
【００４８】
ここで、変換テーブル１３は、命令作成部１２が命令テーブル１４を参照してネイティブコードを作成する際のレイテンシの増加を抑えるため、命令テーブル１４上の上記対応する１又は複数のネイティブコードのひな形の一部（例えば、数命令分のネイティブコードのひな形）を格納していてもよい。本実施形態では、１命令分のネイティブコードを格納している。
【００４９】
図３は、変換テーブル１３及び後述する命令テーブル１４の一例を示す。図３に示されるとおり、一例としての変換テーブル１３の各エントリは、Ｏｐフィールドと、Ｅフィールドと、Ｉｎｓｔフィールドと、ＮＥＸＴフィールドと、を含む。
【００５０】
Ｏｐフィールドには、当該エントリに対応付けられたDalvikバイトコードのオペコードが格納される。
【００５１】
Ｅフィールドには、Dalvikバイトコードのオペコードに対応づけられた１又は複数のネイティブコードのひな形が変換テーブル１３又は命令テーブル１４に存在するかどうかを示すフラグが格納される。本実施形態では、Ｅフィールドには、オペコードに対応付けられた１又は複数のネイティブコードのひな形が変換テーブル１３又は命令テーブル１４に存在する場合に「１」が格納され、存在しない場合に「０」が格納される。
【００５２】
Ｉｎｓｔフィールドには、１命令分のネイティブコードのひな形が格納される。なお、図３では、説明をわかり易くするため自然言語を用いてネイティブコードを表現している
（図５及び図６、以下の説明においても同様）。
【００５３】
ＮＥＸＴフィールドには、当該ネイティブコードのひな形の次に続く命令（ネイティブコード）のひな形を格納する命令テーブルに含まれる所定のエントリへのポインタが格納される。なお、次に続く命令のひな形が存在しない場合、ＮＥＸＴフィールドには、このようなポインタは格納されていない。つまり、次に続く命令のひな形が存在しない場合、当該ＮＥＸＴフィールドには何も格納されていない。
【００５４】
＜命令テーブル１４＞
命令テーブル１４は、例えば、SRAMにより構成される。命令テーブル１４は、Dalvikバイトコードのオペコードに対応づけられた１又は複数のネイティブコードのひな形を格納する。例えば、命令テーブル１４は、Dalvikバイトコードのオペコードに対応づけられた複数のネイティブコードのひな形を１つ１つのネイティブコードのひな形毎に実行される順にポインタでつないで格納する。
【００５５】
図３に示されるとおり、一例としての命令テーブル１４の各エントリは、１命令分のネイティブコードのひな形（図中のＩｎｓｔフィールド）と、当該ネイティブコードのひな形の次に続く命令のひな形を格納する命令テーブルの所定のデータへのポインタ（図中のＮＥＸＴフィールド）と、を格納する。上述の変換テーブル１３と同様に、次に続く命令のひな形が存在しない場合、当該ＮＥＸＴフィールドには、このようなポインタは格納されていない。
【００５６】
＜DRMT１５＞
DRMT１５は、Dalvikレジスタと物理レジスタ（本実施形態では、物理レジスタ６）との対応関係を管理する。
【００５７】
Dalvikバイトコードでは、すべてのDalvikレジスタのデータがメモリ上の所定の領域に存在するため、同一のDalvikレジスタに対するロード命令が頻繁に生じうる。このDRMT１５は、主に、このような頻発するロード命令を削減するために用いられる。つまり、後述するように、このDRMT１５により、命令作成部１２は、一部のロード命令の作成を省略する。これにより、メモリアクセスが削減される。
【００５８】
言い換えると、DRMT１５は、不要なネイティブコードの作成を防止するため、既に行われたメモリアクセスを管理する。具体的には、DRMT１５は、既に行われたメモリアクセスの管理するため、Dalvikレジスタがどの物理レジスタに対応づけられているかを示す情報を格納する。
【００５９】
図４は、DRMT１５の一例を示す。DRMT１５は、Dalvikレジスタがどの物理レジスタに対応づけられているかを示す情報として、図４に示される各情報を格納する。DRMT１５は、図４に示されるとおり、DMフィールド、Validフィールド、Dirtyフィールド、Timeフィールドを含む。
【００６０】
DMフィールドには、エントリに対応するDalvikレジスタの番号が格納される。命令作成部１２は、Dalvikレジスタがどの物理レジスタに対応づけられているかを示す情報をDRMT１５から検索するため、当該DMフィールドに格納されたDalvikレジスタの番号を用いる。
【００６１】
Validフィールドには、エントリが有効であるか否かを示すValidビットが格納される。Validビットは、当該エントリが有効であることを「１」で示し、当該エントリが無効で
あることを「０」で示す。
【００６２】
Dirtyフィールドには、物理レジスタに格納されている値が、対応するDalvikレジスタ
に格納されている値よりも新しいか否かを示すDirtyビットが格納される。Dirtyビットは、物理レジスタに格納されているデータが、対応するDalvikレジスタに格納されているデータよりも新しいことを「１」で示す。また、Dirtyビットは、物理レジスタに格納され
ているデータが対応するDalvikレジスタに格納されているデータよりも新しくない（例えば、同一である）ことを「０」で示す。なお、物理レジスタに格納されているデータが、対応するDalvikレジスタに格納されているデータよりも新しいとは、Dalvikレジスタに格納されているデータが物理レジスタにロードされた後に、所定の演算処理が行われることで、物理レジスタに格納されているデータがDalvikレジスタに格納されているデータと異なった状態を指す。本実施形態では、命令作成部１２が、ストア命令に関するネイティブコードの作成を省略した時に、当該ストア命令に関するDalvikレジスタと同一の番号をDMフィールドに格納するエントリの当該Dirtyフィールドに格納される値を「１」に置き換
える。
【００６３】
Timeフィールドには、DMフィールドに格納された番号のDalvikレジスタに関する処理を命令作成部１２が行った時刻を記録するタイムスタンプを格納する。なお、本実施形態では、当該Timeフィールドに格納される値は、その値が大きいほど新しい時間を表す。
【００６４】
DRフィールドには、DMフィールドに格納された番号のDalvikレジスタに対応する物理レジスタの番号が格納される。
【００６５】
命令作成部１２は、このDRMT１５を用いて、Dalvikレジスタと物理レジスタの対応関係を認識する。つまり、命令作成部１２は、DRMT１５により、物理レジスタが割り当てられているDalvikレジスタの番号を、割り当てられている物理レジスタの番号と共に認識する。
【００６６】
なお、Dalvikレジスタに割り当てる物理レジスタは、例えば、オペレーティングシステムや所定のアプリケーションのために保持されておらず、自由に用いることができる物理レジスタから選ばれてもよい。
【００６７】
また、Dalvikレジスタに割り当てる物理レジスタの数は任意でよい。本実施形態では、Dalvikレジスタに割り当てることができる物理レジスタの数は１２個であるとする。そして、物理レジスタの番号は、０番から１１番までであるとする。このため、DRMT１５は１２のエントリを格納する記憶部である。
【００６８】
＜まとめ＞
変換器１は、Dalvikバイトコードから１又は複数のネイティブコードを作成する。この時、変換器１は、一部のロード命令に関するネイティブコードについては、その作成を実行しない。
【００６９】
なお、バイトコードバッファ１１は、本発明に係る「保持部」に相当する。また、変換テーブル１３及び命令テーブル１４は、本発明に係る「第１記憶部」に相当する。さらに、DRMT１５は、本発明に係る「第２記憶部」に相当する。
【００７０】
§３  動作例
以下、図５及び図６を用いて、本実施形態に係る変換器１の動作例を説明する。図５及び図６は、本実施形態に係る変換器１の動作例を示す。以下、Dalvikレジスタを「Mx（x
は自然数であり、Dalvikレジスタの番号を示す）」で表す。物理レジスタを「Rx（xは自
然数であり、物理レジスタの番号を示す）」で表す。仮の物理レジスタを「DRx（xは自然数であり、仮の物理レジスタの番号を示す）」で表す。仮のDalvikレジスタを「DMy（yは
自然数、但し、yは、Dalvikバイトコードのオペランドの番号）」で表す。加算命令を「add」で表す。ロード命令を「load」で表す。ストア命令を「store」で表す。ただし、こ
れらは、より具体的には、それぞれのコードにおける所定の方法で指定される。
【００７１】
なお、簡単に説明するため、本動作例では、２つの連続する加算命令のDalvikバイトコードを、変換器１がネイティブコードに変換する例を示す。２つの連続する加算命令とは、１つ目が「M0, add, M1, M2」（M0 = M1 + M2）であり、２つ目が「M3, add, M2, M0」（M3 = M2 + M0）である。
【００７２】
また、本動作例では、当初DRMT１５には何も格納されていないものとして、当該２つの加算命令のネイティブコードが作成される処理手順の一例を説明する。図５は、命令作成部１２が１つ目の加算命令「M0, add, M1, M2」のネイティブコードを作成する時の処理
手順の一例を示す。また、図６は、命令作成部１２が２つ目の加算命令「M3, add, M2, M0」のネイティブコードを作成する時の処理手順の一例を示す。なお、以下ではネイティ
ブコードを１サイクルに１命令ずつ作成および出力することを想定して説明しているが、同一サイクルに複数の命令を作成および出力してもよい。
【００７３】
＜１つ目の加算命令＞
図５に示されるとおり、まず、命令作成部１２は、バイトコードバッファ１１からDalvikバイトコードを１つ分取得する（Ｓ１００）。当該取得したDalvikバイトコードは、加算命令「M0, add, M1, M2」である。
【００７４】
次に、命令作成部１２は、取得したDalvikバイトコードのオペコード（add）を参照し
て、Ｏｐフィールドに当該オペコードを格納するエントリが変換テーブル１３に存在するかどうかを検索する（Ｓ１０１）。本実施形態では、図５に示されるとおり、エントリが検索される。なお、命令作成部１２は、取得したDalvikバイトコードのオペコードに対応するエントリが変換テーブル１３から検索できなかった場合、上記ステータスレジスタ３の格納する識別子をネイティブコードによる命令実行モードを示す識別子に所定の方法によって書き換えてもよい。
【００７５】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＥフィールドに格納される値を参照し、当該オペコード（add）に対応する１又は複数のネイティブコード
のひな形が変換テーブル１３又は命令テーブル１４に存在するかを判定する（Ｓ１０２）。本実施形態では、図５に示されるとおり、Ｅフィールドには「１」が格納されているので、オペコード（add）に対応する１又は複数のネイティブコードのひな形が変換テーブ
ル１３又は命令テーブル１４に存在すると判定される。
【００７６】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＩｎｓｔフィールドに格納されている１命令分のネイティブコードのひな形「load DR0, DM2」（ロード命
令）を取得する（Ｓ１０３）。
【００７７】
次に、命令作成部１２は、取得したひな形である「load DR0, DM2」の仮のオペランド
の置き換えを行う（Ｓ１０４、Ｓ１０５）。ここで、「load DR0, DM2」の仮のオペラン
ドは、「DR0」と「DM2」である。
【００７８】
まず、命令作成部１２は、「DM2」に置き換えるオペランドを１つ目の加算命令であるDalvikバイトコード（M0, add, M1, M2）より取得する。「DM2」は、Dalvikバイトコード
の２番目のオペランドを指すため、命令作成部１２は、「DM2」を、Dalvikバイトコード
の２番目のオペランドである「M1」（Dalvikレジスタの１番）に置き換える。次に、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「１」（置き換えたオペラ
ンドのDalvikレジスタの番号）を格納したエントリを検索する（Ｓ１０４）。
【００７９】
この時点では、DRMT１５には何も格納されていないので、命令作成部１２は、DMフィールドに「１」（Dalvikレジスタの１番）を格納したエントリを検索することはできない。この場合、命令作成部１２は、Dalvikレジスタの割り当てに用いられていない物理レジスタを所定の方法で割り当てる。例えば、本実施形態のように、命令作成部１２は、Dalvikレジスタに割り当てられていない物理レジスタの中から番号の一番小さい物理レジスタを割り当てる。具体的には、命令作成部１２は、「DR0」を「R0」に置き換える。これによ
り、命令作成部１２は、ネイティブコード「load R0, M1」の作成を完了し、当該作成し
たネイティブコードをネイティブデコーダ４へ出力する（Ｓ１０５）。
【００８０】
次に、命令作成部１２は、作成したネイティブコード「load R0, M1」に基づいて、DRMT１５にエントリを登録する（Ｓ１０６）。これは、当該ネイティブコード「load R0, M1」が実行されることにより、メモリアクセスが行われ、Dalvikレジスタの１番が物理レジスタの０番に割り当てられることによる。命令作成部１２は、例えば、DMフィールドに「１」、Validフィールドに「１」、Dirtyフィールドに「０」、Timeフィールドに「１」、DRフィールドに「０」を格納したエントリをDRMT１５に登録する。
【００８１】
Ｓ１０４〜Ｓ１０６の処理により変換テーブル１３から取得したひな形である「load DR0, DM2」に関する処理が完了する。
【００８２】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ１０７）。
【００８３】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「load DR1, DM3」（ロード命令）の仮のオペラ
ンドの置き換えを行う（Ｓ１０８、Ｓ１０９）。ここで、「load DR1, DM3」の仮のオペ
ランドは、「DR1」と「DM3」である。
【００８４】
まず、命令作成部１２は、「DM3」に置き換えるオペランドを１つ目の加算命令であるDalvikバイトコード（M0 add, M1, M2）より取得する。「DM3」は、Dalvikバイトコードの３番目のオペランドを指すため、命令作成部１２は、「DM3」を、Dalvikバイトコードの
３番目のオペランドである「M2」に置き換える。次に、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「２」を格納したエントリを検索する（Ｓ１０８）。
【００８５】
この時点では、DRMT１５には、DMフィールドに「１」を格納したエントリしか登録されていないので、上記と同様、命令作成部１２は、DMフィールドに「２」を格納したエントリを検索することはできない。この場合、命令作成部１２は、「DR1」を「R1」に置き換
える。これにより、命令作成部１２は、ネイティブコード「load R1, M2」の作成を完了
し、当該作成したネイティブコードをネイティブデコーダ４へ出力する（Ｓ１０９）。
【００８６】
次に、命令作成部１２は、作成したネイティブコード「load R1, M2」に基づいて、DRMT１５にエントリ登録をする（Ｓ１１０）。これは、当該ネイティブコード「load R1, M2」が実行されることにより、メモリアクセスが行われ、Dalvikレジスタの２番が物理レジスタの１番に割り当てられることによる。命令作成部１２は、例えば、DMフィールドに「２」、Validフィールドに「１」、Dirtyフィールドに「０」、Timeフィールドに「２」、DRフィールドに「１」を格納したエントリをDRMT１５に登録する。
【００８７】
Ｓ１０８〜Ｓ１１０の処理により命令テーブル１４から取得したひな形である「load D
R1, DM3」に関する処理が完了する。
【００８８】
次に、命令作成部１２は、Ｓ１０７で取得したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ１１１）。
【００８９】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「add DR2, DR0, DR1」（加算命令）の仮のオペ
ランドの置き換えを行う（Ｓ１１２、Ｓ１１３）。ここで、「add DR2, DR0, DR1」の仮
のオペランドは、「DR2」、「DR0」、「DR1」である。また、当該エントリのＩｎｓｔフ
ィールドには、Dalvikバイトコードの先頭のオペランド（Dalvikレジスタ）に物理レジスタを割り当てる命令であることを示すデータフラグが存在する（不図示）。
【００９０】
命令作成部１２は、当該データフラグの存在により、まずはDalvikバイトコードの先頭のオペランド「M0」を取得する。そして、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「０」を格納したエントリを検索する（Ｓ１１２）。これは、当該命令が、Dalvikバイトコードの先頭のオペランド（M0）に物理レジスタ（「DR2」に置き換
えられる物理レジスタ）を割り当てる命令であることによる。したがって、命令作成部１２は、DRMT１５のDMフィールドに「０」を格納したエントリを検索することにより、Dalvikレジスタ「M0」にすでに割り当てられた物理レジスタが存在するか否かを判定する。
【００９１】
この時点では、DRMT１５には、DMフィールドに「０」を格納したエントリは登録されていないので、上記と同様、命令作成部１２は、DMフィールドに「０」を格納したエントリを検索することはできない。この場合、Dalvikレジスタ「M0」にすでに割り当てられた物理レジスタが存在しないので、仮のオペランド「DR2」を適当な物理レジスタの番号に置
き換える。この場合、命令作成部１２は、「DR2」を「R2」に置き換える。なお、DRMT１
５からエントリが検索された場合、命令作成部１２は、「DR2」を、検索されたエントリ
のDRフィールドに格納された物理レジスタの番号に置き換える。
【００９２】
また、命令作成部１２は、例えば、同一バイトコード内の別のネイティブコードと共通の番号が割り当てられている仮の物理レジスタを、当該別のネイティブコードにおいて割り当てた物理レジスタにより置き換える。つまり、命令作成部１２は、「DR0」を「R0」
（１番目のネイティブコードのひな形を参照）と置き換え、「DR1」を「R1」（２番目の
ネイティブコードのひな形を参照）と置き換える。これにより、命令作成部１２は、ネイティブコード「add R2, R0, R1」の作成を完了し、当該完成したネイティブコードをネイティブデコーダ４へ出力する（Ｓ１１３）。なお、これらの仮の物理レジスタと物理レジスタとの対応関係（上記の「DR0」と「R0」との対応関係、および、「DR1」と「R1」との対応関係）は命令作成部１２内のテーブル（不図示）によって管理される。
【００９３】
次に、命令作成部１２は、作成したネイティブコード「add R2, R0, R1」に基づいて、DRMT１５にエントリ登録をする（Ｓ１１４）。当該命令は、上述のとおり、Dalvikバイトコードの先頭のオペランド（M0）に物理レジスタ（R2）を割り当てる命令であることによる。命令作成部１２は、例えば、DMフィールドに「０」、Validフィールドに「１」、Dirtyフィールドに「１」、Timeフィールドに「３」、DRフィールドに「２」を格納したエントリをDRMT１５に登録する。なお、上述までのエントリと異なりDirtyフィールドに「１
」を格納する理由は、この時点において、当該add命令によりR2（物理レジスタ）に格納
されるデータがDalvikレジスタ（M0）にストアされていないからである。つまり、Dalvikレジスタ（M0）よりも、当該Dalvikレジスタ（M0）に割り当てられた物理レジスタ（R2）の方が新しいデータを格納しているからである。
【００９４】
Ｓ１１２〜Ｓ１１４の処理により命令テーブル１４から取得したひな形である「add DR2, DR0, DR1」に関する処理が完了する。
【００９５】
次に、命令作成部１２は、Ｓ１１１で取得したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ１１５）。
【００９６】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「store DR2, DM1」（ストア命令）の仮のオペランドの置き換えを行う。ここで、「store DR2, DM1」の仮のオペランドは、「DR2」と「DM1」である。ただし、当該ネイティブコードのひな形は、Dalvikレジスタに対するストア命令に関するネイティブコードのひな形であるため、ネイティブコードの作成は省略される。
【００９７】
この時、命令作成部１２は、ネイティブコードの作成については実行しないが、「DM1
」に置き換えるはずであったオペランドを１つ目の加算命令であるDalvikバイトコード（M0 add, M1, M2）より取得する。「DM1」は、Dalvikバイトコードの１番目のオペランド
を指すため、命令作成部１２は、「DM1」に置き換えるはずであったオペランドとして、
「M0」（Dalvikレジスタの０番）を取得する。そして、命令作成部１２は、当該Dalvikレジスタの番号「０」をDMフィールドに格納したエントリを検索する（Ｓ１１６）。図５に示されるとおり、DMフィールドに「０」を格納したエントリが検索される。命令作成部１２は、検索したエントリのDirtyフィールドに格納された値を「１」に置き換える。なお
、この時点においてすでに当該エントリのDirtyフィールドに格納された値は「１」であ
るため、命令作成部１２は、当該処理を省略してもよい。
【００９８】
以上までのＳ１００〜Ｓ１１６の処理により、命令作成部１２は、１つ目の加算命令「M0, add, M1, M2」のネイティブコードの作成を完了する。具体的に、命令作成部１２は
、１つ目の加算命令「M0, add, M1, M2」に対して、「load R0, M1」、「load R1, M2」
、「add R2, R0, R1」の３つのネイティブコードを作成する。
【００９９】
＜２つ目の加算命令＞
次に、図６を用いて、２つ目の加算命令「M3, add, M2, M0」（M3 = M2 + M0）のネイ
ティブコードを作成するときの処理手順について説明する。
【０１００】
図６に示されるとおり、まず、命令作成部１２は、バイトコードバッファ１１からDalvikバイトコードを１つ分取得する（Ｓ２００）。当該取得したDalvikバイトコードは、加算命令「M3, add, M2, M0」である。
【０１０１】
次に、命令作成部１２は、取得したDalvikバイトコードのオペコード（add）を参照し
て、変換テーブル３のＯｐフィールドに当該オペコードを格納するエントリが変換テーブル１３に存在するかどうかを検索する（Ｓ２０１）。本実施形態では、図６に示されるとおり、エントリが検索される。
【０１０２】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＥフィールドに格納される値を参照し、当該オペコード（add）に対応する１又は複数のネイティブコード
のひな形が変換テーブル１３又は命令テーブル１４に存在するかを判定する（Ｓ２０２）。本実施形態では、図６に示されるとおり、Ｅフィールドには「１」が格納されているので、オペコード（add）に対応する１又は複数のネイティブコードのひな形が変換テーブ
ル１３又は命令テーブル１４に存在すると判定される。
【０１０３】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＩｎｓｔフィールドに格納されている１命令分のネイティブコードのひな形「load DR0, DM2」（ロード命
令）を取得する（Ｓ２０３）。
【０１０４】
次に、命令作成部１２は、取得したひな形である「load DR0, DM2」の仮のオペランド
の置き換えを行う。ここで、「load DR0, DM2」の仮のオペランドは、「DR0」と「DM2」
である。
【０１０５】
まず、命令作成部１２は、「DM2」に置き換えるオペランドを２つ目の加算命令であるDalvikバイトコード（M3, add, M2, M0）より取得する。「DM2」は、Dalvikバイトコード
の２番目のオペランドを指すため、命令作成部１２は、「DM2」を、Dalvikバイトコード
の２番目のオペランドである「M2」（Dalvikレジスタの２番）に置き換える。次に、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「２」（置き換えたオペランドのDalvikレジスタの番号）を格納したエントリを検索する（Ｓ２０４）。
【０１０６】
この時点において、DRMT１５にはDMフィールドに「２」（Dalvikレジスタの２番）を格納したエントリが検索される。したがって、この時、命令作成部１２は、当該ロード命令のネイティブコードの作成は省略される。つまり、命令作成部１２は、仮のオペランドの置き換えを実行せず、ネイティブコードの作成を実行しない。この時点で、「load DR0, DM2」に関する処理が完了する。
【０１０７】
次に、命令作成部１２は、変換テーブル１３から検索したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ２０５）。
【０１０８】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「load DR1, DM3」（ロード命令）の仮のオペラ
ンドの置き換えを行う。ここで、「load DR1, DM3」の仮のオペランドは、「DR1」と「DM3」である。
【０１０９】
まず、命令作成部１２は、「DM3」に置き換えるオペランドを２つ目の加算命令であるDalvikバイトコード「M3, add, M2, M0」より取得する。「DM3」は、Dalvikバイトコード
の３番目のオペランドを指すため、命令作成部１２は、「DM3」を、Dalvikバイトコード
の３番目のオペランドである「M0」に置き換える。次に、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「０」を格納したエントリを検索する（Ｓ２０６）。
【０１１０】
この時点において、DRMT１５にはDMフィールドに「０」（Dalvikレジスタの０番）を格納したエントリが検索される。したがって、この時、命令作成部１２は、当該ロード命令のネイティブコードの作成は省略される。つまり、命令作成部１２は、仮のオペランドの置き換えを実行せず、ネイティブコードの作成を実行しない。この時点で、「load DR1, DM3」に関する処理が完了する。
【０１１１】
次に、命令作成部１２は、Ｓ２０５で取得したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ２０７）。
【０１１２】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「add DR2, DR0, DR1」（加算命令）の仮のオペ
ランドの置き換えを行う。ここで、「add DR2, DR0, DR1」の仮のオペランドは、「DR2」、「DR0」、「DR1」である。また、当該エントリのＩｎｓｔフィールドには、Dalvikバイ
トコードの先頭のオペランド（Dalvikレジスタ）に物理レジスタを割り当てる命令であることを示すデータフラグが存在する（不図示）。
【０１１３】
命令作成部１２は、当該データフラグの存在により、まずはDalvikバイトコードの先頭のオペランド「M3」を取得する。そして、命令作成部１２は、DRMT１５から、当該DRMT１５のDMフィールドに「３」を格納したエントリを検索する（Ｓ２０８）。以上のＳ１１２と同様の処理である。
【０１１４】
この時点では、DRMT１５には、DMフィールドに「３」を格納したエントリは登録されていないので、上記と同様、命令作成部１２は、DMフィールドに「３」を格納したエントリを検索することはできない。この場合、Dalvikレジスタ「M3」にすでに割り当てられた物理レジスタが存在しないので、仮のオペランド「DR2」を適当な物理レジスタの番号に置
き換える。この場合、命令作成部１２は、「DR2」を「R3」に置き換える。
【０１１５】
また、命令作成部１２は、例えば、同一バイトコード内の別のネイティブコードと共通の番号が割り当てられている仮の物理レジスタを、当該別のネイティブコードにおいて割り当てた物理レジスタにより置き換える。つまり、命令作成部１２は、「DR0」を「R1」
（１番目のネイティブコードのひな形を参照）と置き換え、「DR1」を「R2」（２番目の
ネイティブコードのひな形を参照）と置き換える。なお、１番目及び２番目のネイティブコードは作成されていない。命令作成部１２は、これらをDRMT１５から取得する。命令作成部１２は、１番目のネイティブコードのひな形「load DR0, DM2」に対する処理（Ｓ２
０４）の際、検索されたエントリ（DMフィールドに「２」を格納したエントリ）のDRフィールドから「１」を取得する。これにより、命令作成部１２は、「DR0」と置き換える物
理レジスタの番号を取得する。また、命令作成部１２は、２番目のネイティブコードのひな形「load DR1, DM3」に対する処理（Ｓ２０６）の際、検索されたエントリ（DMフィー
ルドに「０」を格納したエントリ）のDRフィールドから「２」を取得する。これにより、命令作成部１２は、「DR1」と置き換える物理レジスタの番号を取得する。なお、これら
の仮の物理レジスタ「DRx」と物理レジスタ「Rx」との対応関係は、命令作成部１２内に
存在するテーブル（不図示）によって管理されている。
【０１１６】
これにより、命令作成部１２は、ネイティブコード「add R3, R1, R2」の作成を完了し、当該完成したネイティブコードをネイティブデコーダ４へ出力する（Ｓ２０９）。
【０１１７】
次に、命令作成部１２は、作成したネイティブコード「add R3, R1, R2」に基づいて、DRMT１５にエントリを登録する（Ｓ２１０）。当該命令は、上述のとおり、Dalvikバイトコードの先頭のオペランド（M3）に物理レジスタ（R3）を割り当てる命令であることによる。命令作成部１２は、例えば、DMフィールドに「３」、Validフィールドに「１」、Dirtyフィールドに「１」、Timeフィールドに「４」、DRフィールドに「３」を格納したエントリをDRMT１５に登録する。この時点で「add DR2, DR0, DR1」に関する処理が完了する
。
【０１１８】
次に、命令作成部１２は、Ｓ２０７で取得したエントリのＮＥＸＴフィールドに格納されるポインタを用いて、当該ネイティブコードの次に続く命令のひな形を格納する命令テーブル１４の所定のエントリを取得する（Ｓ２１１）。
【０１１９】
次に、命令作成部１２は、命令テーブル１４から取得したエントリのＩｎｓｔフィールドからネイティブコードのひな形である「store DR2, DM1」の仮のオペランドの置き換えを行う。ここで、「store DR2, DM1」の仮のオペランドは、「DR2」と「DM1」である。ただし、当該ネイティブコードのひな形は、Dalvikレジスタに関するストア命令に関するネイティブコードのひな形であるため、ネイティブコードの作成は省略される。
【０１２０】
この時、命令作成部１２は、ネイティブコードの作成については実行しないが、「DM1
」に置き換えるはずであったオペランドを２つ目の加算命令であるDalvikバイトコード「M3, add, M2, M0」より取得する。「DM1」は、Dalvikバイトコードの１番目のオペランドを指すため、命令作成部１２は、「DM1」に置き換えるはずであったオペランドとして、
「M3」（Dalvikレジスタの３番）を取得する。そして、命令作成部１２は、当該Dalvikレジスタの番号「３」をDMフィールドに格納したエントリを検索する（Ｓ２１２）。図６に示されるとおり、DMフィールドに「３」を格納したエントリが検索される。命令作成部１２は、検索したエントリのDirtyフィールドに格納された値を「１」に置き換える。なお
、この時点においてすでに当該エントリのDirtyフィールドに格納された値は「１」であ
るため、命令作成部１２は、当該処理を省略してもよい。
【０１２１】
以上までのＳ２００〜Ｓ２１２の処理により、命令作成部１２は、２つ目の加算命令「M3, add, M2, M0」のネイティブコードの作成を完了する。具体的に、命令作成部１２は
、２つ目の加算命令「M3, add, M2, M0」に対して、「add DR2, DR0, DR1」の１つのネイティブコードを作成する。
【０１２２】
＜その他＞
以上のようにして、命令作成部１２は、Dalvikバイトコードからネイティブコードを作成する。また、以上のようにして、DRMT１５にエントリが追加されていく。このように追加されるエントリについて、命令作成部１２は、所定のタイミングでエントリの削除を行う。所定のタイミングとは、例えば、DRMT１５のエントリが一杯で命令作成部１２によるエントリの追加が出来ない時である。この時、命令作成部１２は、DRMT１５から所定のエントリを削除し、当該エントリの追加を実行する。また、所定のタイミングの他の例として、バイトコードによる命令実行モードからネイティブコードによる命令実行モードに遷移する時が挙げられる。この時、命令作成部１２はDRMT１５の全エントリを削除する。
【０１２３】
なお、所定のエントリとは、例えば、登録されてから一番時間が経っているエントリである。命令作成部１２は、このようなエントリをTimeフィールドに格納されている時刻から判断する。またその他の例として、所定のエントリとは、例えば、命令作成部１２がランダムに選択したエントリである。
【０１２４】
また、命令作成部１２が削除するエントリの数は任意でよい。例えば、命令作成部１２は、DRMT１５のエントリを削除する時、一度に３つのエントリを削除してもよい。
【０１２５】
なお、このようなDRMT１５のエントリを削除する時、命令作成部１２は、削除する対象のエントリのDirtyフィールドの値（Dirtyビット）を確認する。
【０１２６】
削除する対象のエントリのDirtyフィールドに「０」が格納されている場合、当該エン
トリに含まれた番号の物理レジスタに格納されているデータは、当該エントリに含まれた番号のDalvikレジスタに格納されているデータと同一である。すなわち、対応関係にあるDalvikレジスタと物理レジスタとは同一のデータを格納しているため、物理レジスタに格納されているデータをDalvikレジスタにストアする必要はない。したがって、この時、命令作成部１２は、何らネイティブコードを作成しない。
【０１２７】
他方、削除するエントリのDirtyフィールドに「１」が格納されている場合、当該エン
トリに含まれた番号の物理レジスタに格納されているデータは、更新されているため、当該エントリに含まれた番号のDalvikレジスタに格納されているデータと異なる。すなわち、対応関係にあるDalvikレジスタと物理レジスタとは異なるデータを格納しているため、物理レジスタに格納されているデータをDalvikレジスタにストアする必要がある。命令作
成部１２は、当該物理レジスタに格納されるデータを当該Dalvikレジスタにストアする命令に関するネイティブコードを作成する。例えば、命令作成部１２は、命令テーブル１４等に格納されたストア命令に関するネイティブコードのひな形を取得する。そして、命令作成部１２は、当該取得したネイティブコードのひな形に含まれた仮のオペランドを、当該削除する対象のエントリに含まれたDMフィールド及びDRフィールドに格納されている値で置き換える。このようにして、命令作成部１２は、削除する対象のエントリに含まれた番号の物理レジスタとDalvikレジスタとに関するストア命令のネイティブコードを作成する。これにより、物理レジスタに格納されている新しいデータがDalvikレジスタ（メモリ）に格納される前に、当該新しいデータを格納する物理レジスタに別のDalvikレジスタが割り当てられることを防ぐことができる。
【０１２８】
§４  実施の形態に係る作用及び効果
以上によれば、本実施形態に係る変換器は、Dalvikバイトコードに対応するネイティブコードを作成する。この時、命令作成部１２は、DRMT１５を参照して、一部のロード命令のネイティブコードの作成を省略する。また、命令作成部１２は、DRMT１５からエントリを削除する時にのみDalvikレジスタに対するストア命令のネイティブコードの作成を行い、それ以外の時はDalvikレジスタに対するストア命令のネイティブコードの作成を省略する。これにより、本実施形態に係る変換器によれば、ロード命令及びストア命令の発行を抑えることができ、メモリアクセスを削減することができる。
【０１２９】
§５  補足
以上、本発明の実施の形態を詳細に説明してきたが、前述までの説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈される。また、当業者は、上記本実施形態の記載から、特許請求の範囲の記載および技術常識に基づいて等価な範囲を実施することができる。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられる。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解される意味と同じ意味を有する。両者が矛盾する場合、本明細書において使用される用語は、本明細書（定義を含めて）に記載された意味において理解される。
【符号の説明】
【０１３０】
１  変換器
２  フェッチャ
３  ステータスレジスタ
４  ネイティブデコーダ
５  演算装置
６  物理レジスタ
７  メモリ
１１  バイトコードバッファ
１２  命令作成部
１３  変換テーブル
１４  命令テーブル
１５  DRMT（Dalvik Register Map Table）
１００  プロセッサ
【図１】
2012088909.tif 000003
【図２】
2012088909.tif 000004
【図３】
2012088909.tif 000005
【図４】
2012088909.tif 000006
【図５】
2012088909.tif 000007
【図６】
2012088909.tif 000008