JP5840014B2 - コンパイル方法、プログラムおよび情報処理装置 - Google Patents

コンパイル方法、プログラムおよび情報処理装置 Download PDF

Info

Publication number
JP5840014B2
JP5840014B2 JP2012019524A JP2012019524A JP5840014B2 JP 5840014 B2 JP5840014 B2 JP 5840014B2 JP 2012019524 A JP2012019524 A JP 2012019524A JP 2012019524 A JP2012019524 A JP 2012019524A JP 5840014 B2 JP5840014 B2 JP 5840014B2
Authority
JP
Japan
Prior art keywords
instruction
page
offset
indirect branch
memory page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012019524A
Other languages
English (en)
Other versions
JP2013156971A (ja
Inventor
俊彦 孝壽
俊彦 孝壽
シェイク・アリ・アイ
シン・トング
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2012019524A priority Critical patent/JP5840014B2/ja
Priority to US13/755,020 priority patent/US8869128B2/en
Publication of JP2013156971A publication Critical patent/JP2013156971A/ja
Application granted granted Critical
Publication of JP5840014B2 publication Critical patent/JP5840014B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30061Multi-way branch instructions, e.g. CASE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、プログラムの実行時にコンパイルする動的コンパイル処理の最適化技術に関し、より詳細には、動的コンパイラがコンパイルコードを最適化するコンパイル方法、プログラムおよび情報処理装置に関する。
従来、コンピュータの動作をエミュレートする仮想マシン(VM(Virtual Machine))が利用されている。このような仮想マシンには、インタープリタが機械語コードを低速実行し、動的コンパイラが当該機械語で記述された命令列であるトレースから中間コードを生成し、最適化を施してコンパイルコードを生成し、インタープリタがコンパイルコードを実行するものがある。
通常、コンパイル対象の機械語コードには、相対分岐命令や間接分岐命令などの種々の分岐命令が含まれている。相対分岐命令は、当該相対分岐命令のアドレスからの差分で分岐先を指定する命令であり、間接分岐命令は、CPU等のプロセッサが内蔵するレジスタの値と、当該レジスタの値との差分で分岐先を指定する命令である。
間接分岐命令で使用するレジスタの値は、プログラムの実行時によって異なる。また、仮想マシンが行う物理アドレスから仮想アドレスへのマッピングでは、仮想メモリにマッピングされた仮想アドレスは、プログラムの実行時によって異なる。このため、コンパイル対象の機械語コードに間接分岐命令が含まれる場合には、当該間接分岐命令の分岐先として予測したアドレスが、コンパイルコードの実行時に実際に分岐するメモリアドレスと同一であるか確認する必要がある。
この点につき、特許文献1は、実際の分岐先のメモリアドレスと、分岐先として予測したメモリアドレスとが同一であるか確認するガードコードを利用するコンパイルの最適化方法を開示する。このような従来の最適化方法では、例えば、図8に示すようなガードコードをコンパイルコードに埋め込み、コンパイルコードの実行時に実際の分岐先のメモリアドレスと分岐先として予測したメモリアドレスとが同一であるか確認する。
具体的には、図8に示すガードコードでは、分岐先の仮想アドレスページ(branch-target-virtual-address&~0xfff)と現在の仮想アドレスページ(current-virtual-pc&~0xfff)が同一であるか判断することにより、間接分岐によって処理がページ境界を越える否か判断する。
ページ境界を越えない場合には、分岐先の仮想アドレスのページオフセットアドレス(branch-target-virtual-address & 0xfff)と、当該間接分岐命令の分岐先として予測された分岐アドレスのページオフセットアドレス(next-physical-pc-on-trace & 0xfff)とが同一であるか判断する。これらのアドレスが同一、すなわち、分岐予測が成功した場合には、コンパイルコードの実行を継続する。一方、ページオフセットアドレスが異なる場合には、コンパイルコードの実行を終了する(side-exit trace)。
一方、間接分岐によって処理がページ境界を越える場合には、実際の分岐先である仮想アドレスを当該仮想アドレスに対応する物理アドレスに変換し、当該物理アドレスが、分岐先として予測した物理アドレスと同一であるか判断する。これらのアドレスが同一であればコンパイルコードの実行を継続し、これらのアドレスが異なる場合には、コンパイルコードの実行を終了する(side-exit trace)。
特開2002−259135号公報
しかしながら、特許文献1に示す最適化方法は、間接分岐命令の分岐先として予測したアドレスと実際に分岐するメモリアドレスとが一致するか確認するガードコードをコンパイルコードに埋め込む必要があり、コンパイルコードを実行する度に、当該ガードコードによってCPU負荷が増大してプログラムの実行処理が遅延する虞があると共に、メモリを浪費するという問題があった。
本発明は上記の課題を解決するものであり、コンパイル対象である機械語コードに間接分岐命令が含まれる場合に、コンパイルコードに埋め込む必要のあるガードコードを削減し、CPU負荷の軽減およびメモリ消費量の低減を可能にするコンパイル方法、プログラムおよび情報処理装置を提供することを目的とする。
すなわち、本発明によれば、機械語で記述された命令列であるトレースをコンパイルする情報処理装置が実行するコンパイル方法が提供される。このコンパイル方法は、情報処理装置が、トレースから中間コードを生成するステップと、間接分岐命令の基点となるアドレス値と、中間コードに含まれる第1の命令の処理直後に情報処理装置が参照すべき仮想アドレスが属するメモリページの開始アドレスとのオフセットを算出するステップと、第1の命令に後続する第2の命令である間接分岐命令による移動量を加算した値をオフセットに使用して、間接分岐命令によって間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移るか否か判断するステップと、当該判断するステップの結果を用いて中間コードを最適化するステップとを含み、最適化するステップは、第2の命令である間接分岐命令によってページ境界を越えるか否か判断する処理を前記中間コードから削除するステップを含む。
本発明は上記構成を採用することにより、コンパイル対象である機械語コードに間接分岐命令が含まれる場合に、コンパイルコードに埋め込む必要のあるガードコードを削減することができ、CPU負荷の軽減およびメモリ消費量の低減することができる。
本発明のプログラムを実行する情報処理装置のハードウェア構成および機能構成を示す図。 図1に示す情報処理装置が実行する処理の一実施形態を示すフローチャート。 本発明の動的コンパイラが実行する最適化処理を示すフローチャート。 本発明の動的コンパイラが実行する最適化処理を示すフローチャート。 本発明の動的コンパイラが実行する変数設定処理を示すフローチャート。 本発明の仮想マシンが行う物理メモリおよび仮想メモリのマッピングの一実施形態を示す概念図。 本発明の仮想マシンが行う物理メモリおよび仮想メモリのマッピングの別の実施形態を示す概念図。 従来のコンパイル処理で使用されるガードコードを示す図。
以下、本発明について実施形態をもって説明するが、本発明は、後述する実施形態に限定されるものではない。図1は、本発明のプログラムを実行する情報処理装置100のハードウェア構成および機能構成を示す図である。以下、図1を参照して、情報処理装置100について説明する。
情報処理装置100は、JAVA(登録商標)、JAVA SCRIPT(登録商標)、C、C++、アセンブラ、PERL、PHP、RUBY、PYTHONなどの種々のプログラム言語で記述されたプログラムを実行可能な情報処理装置である。
情報処理装置100は、後述するOSの管理下で、上記プログラミング言語などで記述された装置読み取り可能な本発明のプログラムを実行することにより、後述する各機能を情報処理装置100上に実現する。
情報処理装置100は、プロセッサ110と、主記憶装置112と、補助記憶装置132とを含んで構成される。
プロセッサ110は、情報処理装置100の全体制御を行うCPU(Central Processing Unit)やMPU(Micro Processing Unit)等の演算処理装置である。プロセッサ110は、主記憶装置112の物理アドレスを保持するレジスタ(図示せず)を備えている。主記憶装置112は、本発明のプログラムを実行するためのメモリ空間を提供するRAM等の記憶装置である。補助記憶装置132は、プログラムやデータなどを持続的に保持するハードディスク装置(HDD)やフラッシュメモリなどの記憶装置である。
プロセッサ110は、補助記憶装置132から本発明のプログラムを読み出し、主記憶装置112に展開して実行することにより、OS(Operating System)114および仮想マシン116を主記憶装置112に展開する。
OS114は、情報処理装置100が有する基本的な機能を提供するソフトウェアである。本実施形態では、Windows(登録商標)7、Windows Vista(登録商標)、Windows XP(登録商標)、Windows200X Server(登録商標)等のWindows(登録商標)シリーズ、Mac OS(登録商標)、UNIX(登録商標)、LINUX(登録商標)などの種々のOSを採用することができる。
仮想マシン116は、機械語コードの低速実行(interpret)、機械語コードのコンパイルおよびコンパイルコードの実行を行うエミュレータである。仮想マシン116は、インタープリタ118と、動的コンパイラ124と、コードキャッシュ130とを含んで構成される。
インタープリタ118は、処理対象の機械語コードおよびコンパイルコードを実行するソフトウェアモジュールであり、低速実行部120と、実行部122とを含んで構成される。
低速実行部120は、処理対象の機械語コードを低速に実行する。また、低速実行部120は、実行した機械語コードの命令列と、低速実行時に得られる機械語コードに含まれる間接分岐命令の分岐先を示す分岐アドレスを主記憶装置112に保存する。
実行部122は、動的コンパイラ124が生成したコンパイルコードを保存するメモリ領域であるコードキャッシュ130から当該コンパイルコードを取得して実行する。
動的コンパイラ124は、動的コンパイルを行うコンパイラである。動的コンパイラ124は、中間コード生成部126と、最適化処理部127と、コンパイル部128とを含んで構成される。本実施形態では、動的コンパイラ124としてJITコンパイラを採用することができる。
中間コード生成部126は、インタープリタ118が主記憶装置112に保存した機械語コードから中間コードを生成する。この中間コードには、図8に示すようなガードコードが含まれる。
最適化処理部127は、中間コード生成部126が生成した中間コードに対して最適化処理を施す。最適化処理部127は、中間コードに最適化処理を施すことにより、コンパイルコードに埋め込む必要のあるガードコードをできるだけ削除する。なお、最適化処理部127が実行する最適化処理については、図3、図4および図5を参照して詳細に説明する。
コンパイル部128は、最適化処理を施した中間コードをコンパイルしてコンパイルコードを生成し、当該コンパイルコードを保存すべきメモリ領域であるコードキャッシュ130に保存する。
図2は、図1に示す情報処理装置が実行する処理の一実施形態を示すフローチャートである。以下、図2を参照して、情報処理装置100が実行する処理について説明する。
図2の処理は、ステップS200から開始し、ステップS201では、仮想マシン116のインタープリタ118の低速実行部120が、処理対象の機械語コードを補助記憶装置132から読み出し、或る決定ポイント(例えば、後方分岐命令等)から次の決定ポイントまで当該機械語コードを低速に実行する。ステップS202では、インタープリタ118の実行部122が、コードキャッシュ130を参照し、次の命令から始まるコンパイルコードが存在するか否か判断する。コンパイルコードが存在する場合には(yes)、処理をステップS203に分岐する。ステップS203では、実行部122が、コードキャッシュ130に保存されたコンパイルコードを実行する。
一方、ステップS202でコンパイルコードが存在しないと判断した場合には(no)、処理をステップS204に分岐する。ステップS204では、低速実行部120は、現在の決定ポイントをステップS201で実行した通算回数が所定の閾値を超えたか否か判断する。決定ポイントの数が所定の閾値を超えない場合には(no)、処理をステップS201に戻す。本実施形態では、所定の閾値として、動的コンパイラ124が使用する任意の定数であるマジックナンバーが使用される。
一方、決定ポイントの数が所定の閾値を超える場合には(yes)、処理をステップS205に分岐する。ステップS205では、低速実行部120は、次の決定ポイントまで機械語コードを低速実行すると共に、間接分岐命令を低速実行した際の実際の分岐アドレスと、実行した機械語コードの命令列とを主記憶装置112に保存する。
ステップS206では、動的コンパイラ124が、低速実行部120が保存した機械語コードの命令列を主記憶装置112から取得し、中間コードを生成する。ステップS207では、動的コンパイラ124は、図3に示す最適化処理を当該中間コードに施す。ステップS208では、動的コンパイラ124は、最適化処理を施した中間コードをコンパイルしてコンパイルコードを生成し、当該コンパイルコードをコードキャッシュ130に保存し、ステップS201以降の処理が実行される。
図3は、本発明の動的コンパイラが実行する最適化処理を示すフローチャートである。以下、図3を参照して、動的コンパイラ124が実行する中間コードの最適化処理について説明する。
図3の処理はステップS300から開始し、ステップS301で動的コンパイラ124の最適化処理部127が、最適化するHWイベントX毎に用意される変数(hw-event-X-page-updated)を「false」で初期化する。ステップS302では、最適化処理部127は、変数(code-base-register)を無効値「−1」で初期化する。ステップS303では、最適化処理部127は、中間コードに含まれる1の命令をフェッチする。ステップS304では、最適化処理部127は、フェッチした1の命令について、図4に示す命令単位の最適化処理を実行する。ステップS305では、最適化処理部127は、フェッチした1の命令について、図5に示す変数設定処理を実行する。
ステップS306では、最適化処理部127は、フェッチすべき次の命令が存在するか否か判断する。フェッチすべき次の命令が存在する場合には(yes)、処理をステップS304に戻す。一方、フェッチすべき次の命令が存在しない場合には(no)、ステップS307に処理を分岐して終了する。
図4は、本発明の動的コンパイラが実行する最適化処理を示すフローチャートである。以下、図4を参照して、動的コンパイラ124が実行する命令単位の中間コードの最適化処理について説明する。
図4の処理は、ステップS400から開始し、ステップS401で動的コンパイラ124が、処理対象の命令によって現在の仮想アドレスの保存を要求するHWイベントが生成されるか判断する。このHWイベントは、現在の仮想アドレスを保存させるイベントであり、仮想マシン116がエミュレートしているHWで発生する。例えば、z/Architectureの場合では、インデックスレジスタを使用しない成立した間接分岐命令(taken indirect branch with no index-register)、成立した相対分岐命令(taken relative branch instruction)、インデックスレジスタを使用した間接分岐命令(taken indirect branch with index register)等の分岐命令によってHWイベントが発生する。
ステップS401の判定でHWイベントが生成されないと判断した場合には(no)、処理をステップS405に分岐する。一方、ステップS401の判定でHWイベントが生成されると判断した場合には(yes)、処理をステップS402に分岐する。ステップS402では、動的コンパイラ124は、変数(hw-event-X-page-updated)の値が「true」であるか否か判断する。変数(hw-event-X-page-updated)の値が「true」である場合には(yes)、処理をステップS403に分岐する。
ステップS403では、動的コンパイラ124は、中間コード生成部126が生成した中間コードから2回目以降のHWイベントの仮想ページを更新するコードを省略する。HWイベントの仮想ページを更新するコードとは、エミュレートしているCPUの内部データ領域を表すメモリアドレスに仮想ページアドレスを保存する処理であり、当該HWイベントを発生する命令がエミュレートされるタイミングで実行される。
一方、変数(hw-event-X-page-updated)の値が「true」でない場合には(no)、ステップS404に処理を分岐する。ステップS404では、動的コンパイラ124は、変数(hw-event-X-page-updated)に「true」を設定する。
ステップS405では、動的コンパイラ124は、処理対象の命令がインデックスレジスタを使用しない成立した間接分岐命令(taken indirect branch)であるか否か判断する。
ここで、間接分岐命令は、1または複数のレジスタの値と所定の移動量とを加算して分岐先のアドレスを算出する分岐命令である。間接分岐命令には、1のレジスタ(ベースレジスタ)の値と所定の移動量とを加算して分岐先のアドレスを算出する分岐命令と、ベースレジスタおよび他のレジスタ(インデックスレジスタ)の値と所定の移動量とを加算して分岐先のアドレスを算出する分岐命令とある。本発明では、前者の間接分岐命令を、インデックスレジスタを使用しない間接分岐命令とし、後者の間接分岐命令を、インデックスレジスタを使用する間接分岐命令とする。また、ベースレジスタのうち間接分岐命令で使用されるベースレジスタをコードベースレジスタとする。
処理対象の命令がインデックスレジスタを使用しない成立した間接分岐である場合には(yes)、ステップS406に処理を分岐する。ステップS406では、動的コンパイラ124は、当該間接分岐命令で使用されるベースレジスタのレジスタ番号(base-register)の値と、図5に示す変数設定処理で設定される変数(code-base-register)値とが一致するか否か判断する。これらが一致する場合には(yes)、ステップS407に処理を分岐する。一方、これらの変数が一致しない場合には(no)、処理をステップS411に分岐する。
ステップS407では、動的コンパイラ124は、図5に示す変数設定処理で設定される変数(code-base-register-offset)の値に所定の移動量(displacement)を加算して得られた値が、0以上かつ仮想ページの1ページ分のメモリサイズである「0x1000」よりも小さいか否か判断することにより、処理対象の命令によってページ境界を越えないか判断することができる。具体的には、動的コンパイラ124は、当該加算によって得られた値が0以上かつ0x1000よりも小さい場合にはページ境界を越えないと判断し、当該値が0未満または0x1000以上である場合にはページ境界を越えると判断する。なお、本実施形態では、ページサイズを「0x1000」としているが、ページサイズはアーキテクチャに依存して任意のサイズを採り得ることに留意すべきである。
ページ境界を越えない場合には(yes)、処理をステップS408に分岐し、動的コンパイラ124が出力するガードコードを省略して最適化を行い、ステップS412で処理が終了する。
本実施形態では、コンパイル時に動的コンパイラ124が、ステップS407に示すように上記変数(code-base-register-offset)の値と所定の移動量とを加算して得られる値を用いて、間接分岐命令によってページ境界を越えた分岐が成されるか否か判断するため、ステップS408に示す最適化処理では、動的コンパイラ124が出力するガードコードから、間接分岐によってページ境界を越えるか否か判定する処理を省略することができる。具体的には、図8に示すガードコードに含まれる分岐先の仮想アドレスページ(branch-target-virtual-address&~0xfff)と現在の仮想アドレスページ(current-virtual-pc&~0xfff)とを比較する処理を省略することができる。
また、ステップS408に示す最適化処理では、図5に示す変数設定処理で設定した変数(code-base-register)が示すレジスタ番号のレジスタの下位12bitは、定数であることが保証されているため、動的コンパイラ124が出力するガードコードからページオフセットアドレスを比較する処理を省略することができる。具体的には、図8に示すガードコードに含まれる分岐先の仮想アドレスの下位12bit(branch-target-virtual-address&0xfff)と、分岐先として予測された分岐アドレスの下位12bit(next-physical-pc-on-trace&0xfff)とを比較する処理を省略することができる。
さらに、ステップS407の処理の結果、同一の仮想ページ内での分岐であることが判明しているため、ステップS408に示す最適化処理では、中間コード生成部126が生成した中間コードから、エミュレートしているCPUのプログラムカウンタの仮想ページアドレス部分を分岐先の仮想ページアドレス部分に更新する処理を省略することができる。
一方、ステップS407の判定でページ境界を越えると判断した場合には(no)、ステップS409に処理を分岐する。ステップS409では、動的コンパイラ124が出力するガードコードを省略して最適化を行う。
具体的には、ステップS409の最適化処理では、動的コンパイラ124が出力するガードコードから、間接分岐命令によってページ境界を越えた分岐が成されるか否か判断する処理を省略する。上述したように、ステップS407に示すように上記変数(code-base-register-offset)の値と所定の移動量とを加算して得られる値を用いて、間接分岐命令によってページ境界を越えた分岐が成されるか否か判断するため、当該処理を省略することができる。
また、ステップS409の最適化処理では、動的コンパイラ124が出力するガードコードに含まれる分岐先アドレスの変換処理および分岐アドレスの評価処理を、分岐先アドレスページの変換処理および分岐先アドレスページの評価処理に変換する。
具体的には、図8に示す従来のガードコードの分岐先アドレスの変換処理(translate branch-target-virtual-address to branch-target-physical-address)および分岐アドレスの評価処理(branch-target-physical-address==next-physical-pc-on-trace)を、分岐先の仮想アドレスページを分岐先の物理アドレスページに変換する分岐先アドレスページの変換処理(translate branch-target-virtual-page-address to branch-target-physical-page-address)および当該物理アドレスページが予測された分岐先アドレスページと同一であるか否か判断する分岐先アドレスページの評価処理(branch-target-physical-page-address==next-physical-pc-on-trace&~0xfff)に変換する。
より詳細には、従来のガードコードの分岐先アドレスの変換処理(translate branch-target-virtual-address to branch-target-physical-address)は、分岐先アドレスページの変換処理(translate branch-target-virtual-page-address to branch-target-physical-page-address)と、分岐先の物理アドレスページに分岐先の仮想アドレス(下位12bit)を換算した値を分岐先アドレスの物理アドレスとする処理(branch-target-physical-address = branch-target-physical-page-address + (branch-target-virtual-address&0xfff))とである。そして、分岐アドレスの評価処理(branch-target-physical-address==next-physical-pc-on-trace)では、下位12bitの値も比較する。ここで、変数(code-base-register)が示すレジスタ番号のレジスタの下位12bitが定数であるため、従来のガードコードで行う必要のあるページオフセット部分の変換処理(branch-target-physical-address = branch-target-physical-page-address + (branch-target-virtual-address&0xfff))と、ページオフセット部分の評価処理(branch-target-physical-address==next-physical-pc-on-trace)が不要となる。
一方、ステップS405の判定で処理対象の命令がインデックスレジスタを使用しない成立した間接分岐でないと判断した場合には(no)、ステップS410に処理を分岐する。ステップS410では、動的コンパイラ124は、処理対象の命令が(1)ページ境界を越える相対分岐命令、(2)ページの終端に存在する命令、(3)変数(hw-event-X-page-updated)に影響を及ぼすシステム命令(例えば、アドレスのサイズ(32bitや64bit)を変更するアドレスモード変更等)、または(4)インデックスレジスタを使用した成立した間接分岐命令のいずれかに該当するか否か判断する。
ページ境界を越える相対分岐命令であるか否かは、当該相対分岐命令の物理アドレスに当該分岐命令による移動量を加算し、ページ境界を越えるか否か判断することによって判断することができる。
ステップS410の判定で処理対象の命令がこれらの命令に該当すると判断した場合には(yes)、ステップS411に処理を分岐する。ステップS411では、変数(hw-event-X-page-updated)を「false」で初期化する。
一方、ステップS410の判定で処理対象の命令がこれらの命令に該当しないと判断した場合には(no)、ステップS412に分岐して処理が終了する。
図5は、本発明の動的コンパイラが実行する変数設定処理を示すフローチャートである。以下、図5を参照して、動的コンパイラ124が、図4に示す最適化処理で使用する変数を設定する変数設定処理について説明する。
図5に示す処理はステップS500から開始し、ステップS501で動的コンパイラ124は、処理対象の命令の種類によって処理を分岐する。処理対象の命令が、インデックスレジスタの値を使用しないで分岐先アドレスを算出する成立した間接分岐命令(例えば、z/Architectureで使用される機械語命令であるBC(Branch On Condition)等の条件付き分岐)である場合には、ステップS502に処理を分岐する。
ステップS502では、動的コンパイラ124は、コードベースレジスタの値を設定すべき変数(code-base-register)に、当該間接分岐命令のベースレジスタのレジスタ番号(base-register)を設定する。そして、動的コンパイラ124は、インタープリタ118が低速実行して主記憶装置112に保存した当該間接分岐命令の分岐先である予測された分岐アドレス(next-physical-pc-on-trace)の下位12bitの値から所定の移動量(displacement)を減算した値を変数(code-base-register-offset)に代入し、ステップS507に分岐して処理が終了する。変数(code-base-register-offset)は、間接分岐命令の基点となるアドレス値と、コンパイル対象である命令の処理直後に情報処理装置100が参照すべき仮想アドレスが属するメモリページの開始アドレスとのオフセットである。この変数は、上述したステップS407において処理対象の命令によってページ境界を越えないか判断する処理で使用される。
また、ステップS501の判定で処理対象の命令が、不成立の呼び出し型(non-taken-call-type)の命令(例えば、z/Architectureで使用される機械語命令であるBALR等)であると判断した場合には、ステップS503に処理を分岐する。不成立の呼び出し型(non-taken-call-type)の命令とは、分岐先に分岐せず、戻りアドレスをレジスタにロードする命令である。
ステップS503では、動的コンパイラ124は、呼び出し命令のパラメータであるリターンアドレスが設定されるリターンレジスタのレジスタ番号(return-register)を変数(code-base-register)に設定する。そして、動的コンパイラ124は、リターンレジスタに設定される戻りアドレスの下位12bit(next-physical-pc-on-trace&0xfff)の値を変数(code-base-register-offset)に代入し、ステップS507に分岐して処理が終了する。
さらに、ステップS501の判定で処理対象の命令が、成立した相対分岐命令(例えば、z/Architectureで使用される機械語命令であるBRC(Branch Relative on Condition)等)であると判断した場合には、ステップS504に処理を分岐する。ステップS504では、動的コンパイラ124は、関数page-increment-by-((current-physical-pc-on-trace&0xfff)+displacement)を使用して、当該相対分岐命令によって越えたページ境界の数と、当該仮想ページの1ページ分のメモリサイズとの乗算値を算出する。そして、動的コンパイラ124は、変数(code-base-register-offset)に設定されている値から当該乗算値を減算して得られた値を変数(code-base-register-offset)に代入し、ステップS507に分岐して処理が終了する。
さらに、ステップS501の判定で処理対象の命令がページの終端に存在する命令であると判断した場合には、ステップS505に処理を分岐する。ステップS505では、動的コンパイラ124は、変数(code-base-register-offset)から仮想ページの1ページ分のメモリサイズ(例えば、0x1000)を減算した値を変数(code-base-register-offset)に代入し、ステップS507に分岐して処理が終了する。
さらに、ステップS501の判定で処理対象の命令が、(1)インデックスレジスタの値を使用して分岐先アドレスを算出する成立した間接分岐命令、(2)コードベースレジスタの値を変更する命令、または(3)コードベースレジスタの値に影響を及ぼすシステム命令のいずれかに該当すると判断した場合には、ステップS506に処理を分岐する。ステップS506では、動的コンパイラ124は、変数(code-base-register)を無効値「−1」で初期化する。
さらに、ステップS501の判定で処理対象の命令が、その他の命令である場合には、ステップS507に分岐して処理が終了する。
図6は、本発明の仮想マシンが行う物理メモリおよび仮想メモリのマッピングの一実施形態を示す概念図である。以下、図6を参照して、仮想マシンがエミュレートするシステムの物理メモリ600および仮想メモリ620のマッピングについて説明する。
トレース602は、インタープリタ118が低速実行して主記憶装置112保存した命令列であり、動的コンパイラ124のコンパイル対象である。図6に示す実施形態では、物理メモリ600上の物理アドレス(0x:456000)および物理アドレス(0x:789000)が、仮想メモリ620のメモリ領域である仮想ページ622の開始アドレス(0x:xxx000)および仮想ページ624の開始アドレス(0x:yyy000)にマッピングされる(ここで、x,yは任意の数である)。なお、割り当てられるメモリアドレスは、プログラムの実行時によって異なる。また、図6に示す実施形態では、仮想ページ622および仮想ページ624は連続する。
図6に示すトレース602は、インタープリタ118が低速実行して保存した命令列である。トレース602には、各命令と当該命令がロードされた物理メモリ600の物理アドレスとが含まれる。物理メモリ600の物理アドレス(0x:123000)は、トレース602の開始位置604であり、インタープリタ118が保存した命令列のうち最初の命令がロードされる。
物理アドレス(0x:123100)には、第1の間接分岐命令(BC 0xf,0x500(R15))606がロードされており、当該命令が実行されることにより、仮想メモリ620上では、当該間接分岐命令のパラメータであるベースレジスタの設定値「R15」が示す仮想アドレスと、移動量「0x500」とを加算した値である仮想アドレスに処理が分岐する。図6に示す本施形態では、「R15」に仮想アドレス(0x:xxx300)が設定されていると仮定する。このため、当該間接分岐命令によって仮想アドレス(0x:xxx800)に処理が分岐する。すなわち、当該間接分岐命令によって、予測された分岐先アドレスである物理アドレス(0x:456800)に処理が分岐する。なお、「R15」に設定される仮想アドレスは、実行によって異なる。
また、物理メモリ600の物理アドレス(0x:456900)には、第2の間接分岐命令(BCTG R1,0x1900(R15))608がロードされており、当該間接分岐命令608が実行されることにより、仮想メモリ620上では、間接分岐命令608のパラメータであるコードベースレジスタの設定値「R15」が示す仮想アドレス(0x:xxx300)と、移動量「0x1900」とを加算した値である仮想アドレス(0x:yyyc00)に処理が分岐する。
本実施形態では、仮想ページ622および仮想ページ624は連続しており、また、仮想ページ622のメモリサイズは「0x:1000」であるため、仮想アドレス(0x:xxx300)に移動量「0x:1900」を加算した値は、「0x:yyyc00」となる。したがって、間接分岐命令608によって、仮想ページ622の仮想アドレス(0x:xxx900)から仮想ページ624の仮想アドレス(0x:yyyc00)に処理が移る。すなわち、当該間接分岐命令によって、予測された分岐先アドレスである物理アドレス(0x:789c00)に処理が分岐する。
さらに、物理メモリ600の物理アドレス(0x:789c80)には、第3の間接分岐命令(BCTG R2,0x1a00(R15))610がロードされており、当該間接分岐命令610が実行されることにより、仮想メモリ620上では、間接分岐命令610のパラメータであるコードベースレジスタの設定値「R15」が示す仮想アドレス(0x:xxx300)と、移動量「0x1a00」とを加算した値である仮想アドレス(0x:yyyd00)に処理が移る。すなわち、当該間接分岐命令によって、予測された分岐先アドレスである物理アドレス(0x:789d00)に処理が分岐する。そして、物理アドレス(0x:789e00)および仮想アドレス(0x:yyye00)で処理が終了する。
第1の間接分岐命令(BC 0xf,0x500(R15))606に対する図3のステップS304および図4に示す処理では、変数(code-base-register)は初期値「−1」のままであり、変数(code-base-register)とレジスタ番号(base-register)とが相違するため、第1の間接分岐命令606に対して最適化処理は施されない。すなわち、図8に示すガードコードに含まれる処理が削減されない。そのため、コンパイルコードの実行時に「R15」に仮想アドレス(0x:xxx300)が設定されていない場合には、分岐予測に失敗したこととなり、ガードコードによってコンパイルコードの実行が終了する。
第1の間接分岐命令(BC 0xf,0x500(R15))606に対する図3のステップS305および図5に示す処理では、ステップS502で動的コンパイラ124が、当該間接分岐命令の分岐先として予測された分岐アドレス(next-physical-pc-on-trace)の下位12bitの値から所定の移動量(displacement)を減算した値を変数(code-base-register-offset)に代入する。
すなわち、第1の間接分岐命令(BC 0xf,0x500(R15))606では、当該間接分岐命令の分岐先として予測された分岐アドレス(next-physical-pc-on-trace)「0x:456800」の下位12bitの値「0x:800」から移動量「0x:500」を減算した値「0x:300」を算出し、この算出値「0x:300」を変数(code-base-register-offset)に代入する。
この変数(code-base-register-offset)に代入された当該算出値「0x:300」は、第1の間接分岐命令の分岐予測が成功した場合のベースレジスタの設定値(R15)が示す仮想アドレス「0x:xxx300」と、第1の間接分岐命令606による分岐先の仮想ページ622の開始アドレス「0x:xxx000」とのオフセット(差分)に相当する。
第2の間接分岐命令(BCTG R1,0x1900(R15))608に対する図3のステップS304および図4に示す処理の実行時には、変数(code-base-register)には、ベースレジスタのレジスタ番号(base-register)が設定されていると共に、第1の間接分岐命令606に対する図3のステップS305および図5に示す処理で変数(code-base-register-offset)に「0x:300」が設定されている。このため、図4に示すステップS407が実行され、動的コンパイラ124は、変数(code-base-register-offset)の値「0x:300」に上記移動量「0x:1900」を加算した値が、0以上かつ仮想ページの1ページ分のメモリサイズ(0x:1000)よりも小さいか否か判断することにより、間接分岐命令608によって現在のメモリページから他のメモリページに処理が移るか否か、すなわち、ページ境界を越えるか否か判断する。
本実施形態では、変数(code-base-register-offset)の値「0x:300」と上記移動量「0x:1900」とを加算して得られる値が「0x:1c00」であることから、第2の間接分岐命令608によって現在のメモリページから他のメモリページに処理が移る、すなわち、ページ境界を越えると判断し、上述したステップS409の最適化処理を実行する。これにより、コンパイルコードの実行時には、ガードコードに含まれる分岐先アドレスページの変換処理(translate branch-target-virtual-page-address to branch-target-physical-page-address)および分岐先アドレスページの評価処理(branch-target-physical-page-address==next-physical-pc-on-trace&~0xfff)が実行され、仮想アドレス「0x:yyy000」が物理アドレス「0x:789000」にマッピングされていない場合には分岐予測に失敗したこととなり、ガードコードによってコンパイルコードの実行が終了する。
第2の間接分岐命令(BCTG R1,0x1900(R15))608に対する図3のステップS305および図5に示す処理では、当該間接分岐命令の分岐先として予測された分岐アドレス(next-physical-pc-on-trace)「0x:789c00」の下位12bitの値「0x:c00」から移動量「0x:1900」を減算した値「0x:−d00」を算出し、この算出値を変数(code-base-register-offset)に代入する。
この変数(code-base-register-offset)に代入された当該算出値「0x:−d00」は、第2の間接分岐命令の分岐予測が成功した場合のコードベースレジスタの設定値(R15)が示す仮想アドレス「0x:xxx300」と、第2の間接分岐命令608による分岐先の仮想ページ624の開始アドレス「0x:yyy000」とのオフセットに相当する。
第3の間接分岐命令(BCTG R2,0x1a00(R15))610に対する図3のステップS304および図4に示す処理の実行時には、変数(code-base-register)には、ベースレジスタのレジスタ番号(base-register)が設定されていると共に、第2の間接分岐命令608に対する図3のステップS305および図5に示す処理で変数(code-base-register-offset)に「0x:−d00」が設定されている。このため、図4に示すステップS407で、動的コンパイラ124は、変数(code-base-register-offset)の値「0x:−d00」に上記移動量「0x:1a00」を加算した値が、0以上かつ仮想ページの1ページ分のメモリサイズ(0x:1000)よりも小さいか否か判断することにより、間接分岐命令610によって現在のメモリページから他のメモリページに処理が移るか否か、すなわち、ページ境界を越えるか否か判断する。
本実施形態では、ステップS407の処理によって、変数(code-base-register-offset)の値「0x:−d00」と上記移動量「0x:1a00」とを加算して得られる値が「0x:d00」となるため、動的コンパイラ124は、間接分岐命令610によって処理がページ境界を越えないと判断し、上述したステップS408の最適化処理を実行する。
図7は、本発明の仮想マシンが行う物理メモリおよび仮想メモリのマッピングの別の実施形態を示す概念図である。以下、図7を参照して、仮想マシンがエミュレートするシステムの物理メモリ700および仮想メモリ720のメモリマッピングについて説明する。
処理対象である機械語コードを構成するトレース702の実行時には、当該トレース702が物理メモリ700にロードされ、物理メモリ700上の物理アドレス(0x:123000)、物理アドレス(0x:456000)および物理アドレス(0x:789000)が、仮想メモリ720のメモリ領域である仮想ページ722の開始アドレス(0x:xxx000)、仮想ページ724の開始アドレス(0x:yyy000)、仮想ページ726の開始アドレス(0x:zzz000)にマッピングされる(ここで、x,y,zは任意の数である)。
なお、これらのマッピングはプログラムの実行時によって異なる。また、図7に示す実施形態では、仮想ページ722と仮想ページ724との間に他の仮想ページ(図示せず)が存在しており、これらの仮想ページは連続していない。一方、仮想ページ724および仮想ページ726は連続する。
物理メモリ700の物理アドレス(0x:123000)には、トレース702の最初の命令がロードされており、物理アドレス(0x:123000)からトレース702が開始する。物理アドレス(0x:123100)には、不成立の呼び出し型(non-taken-call-type)命令である命令(BALR R3,R0)704がロードされており、当該命令が実行されることにより、当該物理アドレスに対応する仮想アドレスの次の仮想アドレスであるリターンアドレス(0x:xxx102)が、設定値(R3)としてリターンレジスタに設定される。なお、当該命令704では分岐処理は行われない。
トレース702をコンパイルする場合、動的コンパイラ124は、命令(BALR R3,R0)704が不成立の呼び出し型命令に該当するため、図5に示すステップS501で処理をステップS503に分岐する。そして、ステップS503で、動的コンパイラ124は、ステップS502と同様に、変数(code-base-register)にリターンレジスタのレジスタ番号(return-register)を設定すると共に、当該不成立の呼び出し型命令の呼出先を示すリターンアドレス(0x:xxx102)であるリターンレジスタの設定値(R3)の下位12bitの値「0x:102」を変数(code-base-register-offset)に代入する。
この変数(code-base-register-offset)の値「0x:102」は、リターンレジスタの設定値(R3)が示す仮想アドレス(0x:xxx102)と、当該仮想アドレスが属する仮想ページ722の開始アドレス(0x:xxx000)とのオフセットに相当する。
また、物理メモリ700の物理アドレス(0x:123200)には、相対分岐命令である命令(BRC 0xf,0x1000)706がロードされており、当該命令706が実行されることにより、処理が物理アドレス(0x:456200)に分岐すると予測される。ここで、BRCとはz/Architecture固有の命令であり、当該命令が割り当てられた仮想アドレスに、パラメータが指定する「0x:1000」の2倍である「0x:2000」を加算した仮想アドレスに処理が移動する。
具体的には、分岐元の物理アドレス(0x:123200)に対応する仮想ページ722内の仮想アドレス(0x:xxx200)に「0x:2000」を加算した値である仮想アドレス(0x:yyy200)に処理が分岐する。
本実施形態では、分岐元の仮想ページ722と、分岐先の仮想ページ724との間には、別の1の仮想ページ(図示せず)が存在するため、分岐元の仮想アドレス(0x:xxx200)と「0x:2000」とを加算した値が、分岐先の仮想アドレス(0x:yyy200)となる。
トレース702をコンパイルする場合、動的コンパイラ124は、命令(BRC 0xf,0x1000)706は相対分岐命令に該当するため、図5に示すステップS501で処理をステップS504に分岐する。そして、ステップS504で、動的コンパイラ124は、関数page-increment-by-((current-physical-pc-on-trace&0xfff)+displacement)を使用して、当該命令706によって越えたページ境界の数と当該仮想ページの1ページ分のメモリサイズとの乗算値「0x:2000」を算出する。
そして、動的コンパイラ124は、変数(code-base-register-offset)に設定されている値から当該乗算値を減算して得られた値を変数(code-base-register-offset)に代入する。このとき、変数(code-base-register-offset)には、上述した不成立の呼び出し型命令である命令704によって「0x:102」が既に設定されているため、動的コンパイラ124は、ステップS504において変数(code-base-register-offset)の値「0x:102」から上記乗算値「0x:2000」を減算した値「0x:−1efe」を変数(code-base-register-offset)に代入する。
さらに、物理メモリ700の物理アドレス(0x:456ffe)、すなわち、ページの終端708にロードされた命令が実行されることにより、次の物理ページの始端710である物理アドレス(0x:789000)に処理が移る。そして、以降の処理(図示せず)が順次実行され、トレース702の終了位置712である物理アドレス(0x:789100)で処理が終了する。
仮想メモリ720上では、ページの終端708にロードされた命令が実行されることにより、物理アドレス(0x:456ffe)に対応する仮想アドレス(0x:yyyffe)が属する仮想ページ724の次のページに該当する仮想ページ726の開始アドレス(0x:zzz000)に処理が移り、物理アドレス(0x:789100)に対応する仮想アドレス(0x:zzz100)で処理が終了する。
トレース702をコンパイルする場合、動的コンパイラ124は、コンパイル対象の命令がページの終端に存在する命令であるため、図5に示すステップS501で処理をステップS505に分岐する。そして、ステップS505で、動的コンパイラ124は、変数(code-base-register-offset)に設定されている値から仮想ページの1ページ分のメモリサイズ(0x:1000)を減算して得られた値を変数(code-base-register-offset)に代入する。このとき、変数(code-base-register-offset)には、上述した相対分岐命令である命令706によって「0x:−1efe」が既に設定されているため、動的コンパイラ124は、ステップS505において変数(code-base-register-offset)の値「0x:−1efe」から上記メモリサイズ「0x:1000」を減算した値「0x:−2efe」を変数(code-base-register-offset)に代入する。
これまで本実施形態につき説明してきたが、本発明は、上述した実施形態に限定されるものではなく、当該実施形態の機能手段の変更や削除、他の機能手段の追加など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
100…情報処理装置、110…プロセッサ、112…主記憶装置、114…OS、116…仮想マシン、118…インタープリタ、120…低速実行部、122…実行部、124…動的コンパイラ、126…中間コード生成部、127…最適化処理部、128…コンパイル部、130…コードキャッシュ、132…補助記憶装置

Claims (18)

  1. 機械語で記述された命令列であるトレースをコンパイルする情報処理装置が実行するコンパイル方法であって、前記コンパイル方法は、前記情報処理装置が、
    前記トレースから中間コードを生成するステップと、
    間接分岐命令の基点となるアドレス値と、前記中間コードに含まれる第1の命令の処理直後に前記情報処理装置が参照すべき仮想アドレスが属するメモリページの開始アドレスとのオフセットを算出するステップと、
    前記第1の命令に後続する第2の命令である間接分岐命令による移動量を前記オフセットに加算した値を使用して、前記間接分岐命令によって前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移るか否か判断するステップと、
    前記判断するステップの結果を用いて前記中間コードを最適化するステップと
    を含み、
    前記最適化するステップは、
    前記第2の命令である間接分岐命令によってページ境界を越えるか否か判断する処理を前記中間コードから削除するステップを含む、コンパイル方法。
  2. 前記最適化するステップは、
    前記判断するステップで前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断した場合に、
    前記情報処理装置のプログラムカウンタを更新する処理を前記中間コードから削除するステップを含む、請求項1に記載のコンパイル方法。
  3. 前記判断するステップは、
    前記オフセットに前記間接分岐命令による移動量を加算した値が0以上かつ前記メモリページの1ページ分のメモリサイズ以下である場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断し、
    それ以外の場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移ると判断するステップを含む、請求項1に記載のコンパイル方法。
  4. 前記オフセットを算出するステップは、
    前記第1の命令である間接分岐命令の分岐先として予測されるアドレス値の一部から前記移動量を減算して前記オフセットを算出するステップを含む、請求項1に記載のコンパイル方法。
  5. 前記オフセットを算出するステップは、
    前記第1の命令である呼び出し型命令の呼出先として予測されるアドレス値の一部を前記オフセットとして算出するステップを含む、請求項1に記載のコンパイル方法。
  6. 前記オフセットを算出するステップは、
    前記第1の命令によって越えるページ境界の数と前記メモリページの1ページ分のメモリサイズとの乗算値を前記第1の命令に先行する命令のオフセットから減算して、前記第1の命令のオフセットを算出するステップを含む、請求項1に記載のコンパイル方法。
  7. 前記オフセットを算出するステップは、
    前記第1の命令に先行する命令のオフセットから前記メモリページの1ページ分のメモリサイズを減算して、前記オフセットを算出するステップを含む、請求項1に記載のコンパイル方法。
  8. 前記方法は、前記情報処理装置が、コンパイル対象の命令がインデックスレジスタを使用しない間接分岐命令であるか否か判断するステップをさらに含み、
    コンパイル対象の命令がインデックスレジスタを使用しない間接分岐命令である場合に、前記情報処理装置が前記判断するステップを実行する、請求項1に記載のコンパイル方法。
  9. 機械語で記述された命令列であるトレースをコンパイルする情報処理装置が実行するコンパイル方法を、前記情報処理装置が実行するためのプログラムであって、前記プログラムは、前記情報処理装置が、
    前記トレースから中間コードを生成するステップと、
    間接分岐命令の基点となるアドレス値と、前記中間コードに含まれる第1の命令の処理直後に前記情報処理装置が参照すべき仮想アドレスが属するメモリページの開始アドレスとのオフセットを算出するステップと、
    前記第1の命令に後続する第2の命令である間接分岐命令による移動量を前記オフセットに加算した値を使用して、前記間接分岐命令によって前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移るか否か判断するステップと、
    前記判断するステップの結果を用いて前記中間コードを最適化するステップと
    を実行するためのプログラムであって、
    前記最適化するステップは、
    前記間接分岐命令によってページ境界を越えるか否か判断する処理を前記中間コードから削除するステップを含む、装置実行可能なプログラム。
  10. 前記最適化するステップは、
    前記判断するステップで前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断した場合に、
    前記情報処理装置のプログラムカウンタを更新する処理を前記中間コードから削除するステップを含む、請求項9に記載の装置実行可能なプログラム。
  11. 前記判断するステップは、
    前記オフセットに前記間接分岐命令による移動量を加算した値が0以上かつ前記メモリページの1ページ分のメモリサイズ以下である場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断し、
    それ以外の場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移ると判断するステップを含む、請求項9に記載の装置実行可能なプログラム。
  12. 前記オフセットを算出するステップは、
    前記第1の命令である間接分岐命令の分岐先として予測されるアドレス値の一部から前記移動量を減算して、前記オフセットを算出するステップと、
    前記第1の命令である呼び出し型の呼出先として予測されるアドレス値の一部を前記オフセットとして算出するステップと、
    前記第1の命令によって越えるページ境界の数と前記メモリページの1ページ分のメモリサイズとの乗算値を前記第1の命令に先行する命令のオフセットから減算して、前記第1の命令のオフセットを算出するステップと、および/または
    前記第1の命令に先行する命令のオフセットから前記メモリページの1ページ分のメモリサイズを減算して、前記第1の命令のオフセットを算出するステップとを含む、請求項9に記載の装置実行可能なプログラム。
  13. 前記プログラムは、前記情報処理装置が、
    コンパイル対象の命令がインデックスレジスタを使用しない間接分岐命令であるか否か判断するステップをさらに含み、
    コンパイル対象の命令がインデックスレジスタを使用しない間接分岐命令である場合に、前記情報処理装置が前記判断するステップを実行するための、請求項9に記載の装置実行可能なプログラム。
  14. 機械語で記述された命令列であるトレースをコンパイルする情報処理装置であって、
    前記トレースから中間コードを生成するインタープリタと、前記中間コードをコンパイルする動的コンパイラとを備え、
    前記動的コンパイラは、
    間接分岐命令の基点となるアドレス値と、前記中間コードに含まれる第1の命令の処理直後に前記情報処理装置が参照すべき仮想アドレスが属するメモリページの開始アドレスとのオフセットに、前記第1の命令に後続する第2の命令である間接分岐命令による移動量を加算した値を使用して、前記間接分岐命令によって前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移るか否か判断し、前記判断の結果を用いて前記中間コードを最適化する最適化処理部を備え、
    前記最適化処理部は、前記間接分岐命令によってページ境界を越えるか否か判断する処理を前記中間コードから削除する、情報処理装置。
  15. 前記最適化処理部は、
    前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断した場合に、前記情報処理装置のプログラムカウンタを更新する処理を前記中間コードから削除する、請求項14に記載の情報処理装置。
  16. 前記最適化処理部は、
    前記オフセットに前記間接分岐命令による移動量を加算した値が0以上かつ前記メモリページの1ページ分のメモリサイズ以下である場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移らないと判断し、
    それ以外の場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移ると判断する、請求項14に記載の情報処理装置。
  17. 前記最適化処理部は、
    前記第1の命令である間接分岐命令の分岐先として予測されるアドレス値の一部から前記移動量を減算して、前記オフセットを算出し、
    前記第1の命令である呼び出し型の呼出先として予測されるアドレス値の一部を前記オフセットとして算出し、
    前記第1の命令に先行する命令のオフセットから前記第1の命令によって越えるページ境界の数と前記メモリページの1ページ分のメモリサイズとの乗算値を減算して、前記第1の命令のオフセットを算出し、または
    前記第1の命令に先行する命令のオフセットから前記メモリページの1ページ分のメモリサイズを減算して、前記第1の命令のオフセットを算出する、請求項14に記載の情報処理装置。
  18. 前記最適化処理部は、
    コンパイル対象の命令がインデックスレジスタを使用しない間接分岐命令である場合に、前記間接分岐命令が割り当てられたメモリページから別のメモリページに処理が移るか否か判断する、請求項14に記載の情報処理装置。
JP2012019524A 2012-02-01 2012-02-01 コンパイル方法、プログラムおよび情報処理装置 Expired - Fee Related JP5840014B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012019524A JP5840014B2 (ja) 2012-02-01 2012-02-01 コンパイル方法、プログラムおよび情報処理装置
US13/755,020 US8869128B2 (en) 2012-02-01 2013-01-31 Compiling method, program, and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012019524A JP5840014B2 (ja) 2012-02-01 2012-02-01 コンパイル方法、プログラムおよび情報処理装置

Publications (2)

Publication Number Publication Date
JP2013156971A JP2013156971A (ja) 2013-08-15
JP5840014B2 true JP5840014B2 (ja) 2016-01-06

Family

ID=48871358

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012019524A Expired - Fee Related JP5840014B2 (ja) 2012-02-01 2012-02-01 コンパイル方法、プログラムおよび情報処理装置

Country Status (2)

Country Link
US (1) US8869128B2 (ja)
JP (1) JP5840014B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009686B2 (en) * 2011-11-07 2015-04-14 Nvidia Corporation Algorithm for 64-bit address mode optimization
DE102012010102A1 (de) * 2012-05-22 2013-11-28 Infineon Technologies Ag Verfahren und Vorrichtung zur Datenverarbeitung
US9569185B2 (en) * 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
US10353680B2 (en) * 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US9921814B2 (en) 2015-08-24 2018-03-20 International Business Machines Corporation Control flow graph analysis
CN107818107B (zh) * 2016-09-12 2020-06-02 平安科技(深圳)有限公司 控制页面跳转的方法和装置
US10409570B2 (en) * 2016-10-19 2019-09-10 Nxp Usa, Inc. Feedback directed program stack optimization
US10691455B2 (en) * 2017-05-23 2020-06-23 Samsung Electronics Co., Ltd Power saving branch modes in hardware
CN112395009A (zh) * 2019-08-13 2021-02-23 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09231088A (ja) * 1996-02-27 1997-09-05 Chubu Nippon Denki Software Kk プログラム変換実行装置およびその方法
US6161217A (en) * 1998-09-14 2000-12-12 Sun Microsystems, Inc. Accurate method for inlining virtual calls
JP2002259135A (ja) * 2001-02-28 2002-09-13 Internatl Business Mach Corp <Ibm> プログラムの最適化方法及びこれを用いたコンパイラ
US7404182B1 (en) * 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7647589B1 (en) * 2005-02-07 2010-01-12 Parallels Software International, Inc. Methods and systems for safe execution of guest code in virtual machine context
US8136091B2 (en) * 2007-01-31 2012-03-13 Microsoft Corporation Architectural support for software-based protection
US7689815B2 (en) * 2007-10-12 2010-03-30 Freescale Semiconductor, Inc Debug instruction for use in a data processing system
US20110078666A1 (en) * 2009-05-26 2011-03-31 University Of California System and Method for Reproducing Device Program Execution
US8495607B2 (en) * 2010-03-01 2013-07-23 International Business Machines Corporation Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations

Also Published As

Publication number Publication date
US8869128B2 (en) 2014-10-21
US20130198498A1 (en) 2013-08-01
JP2013156971A (ja) 2013-08-15

Similar Documents

Publication Publication Date Title
JP5840014B2 (ja) コンパイル方法、プログラムおよび情報処理装置
US9207916B2 (en) Simulation apparatus, method and medium
US7568189B2 (en) Code translation and pipeline optimization
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
KR101332499B1 (ko) 시뮬레이션 장치, 방법, 및 기록 매체
KR102112081B1 (ko) 언어 가상 머신에서 고-사용 중간 코드를 식별하는 방법 및 디바이스
US10268462B2 (en) Emulation device, emulation method, and recording medium storing emulation program
US9465595B2 (en) Computing apparatus, computing method, and computing program
KR20110070468A (ko) 인스트루먼테이션 실행 장치 및 방법
TWI502495B (zh) 以機器指令取代編譯器內建輔助函數之方法、裝置及電腦程式產品
US20240231864A9 (en) Hybrid just in time load module compiler with performance optimizations
US20160196156A1 (en) Simulation apparatus, simulation method, and computer product
US10402510B2 (en) Calculating device, calculation method, and calculation program
US11029929B2 (en) Using emulation to improve startup time for just-in-time compilation
US9606779B2 (en) Data processing system and data simulation method in the system
JP6519228B2 (ja) データ配置決定装置、データ配置決定プログラム及びデータ配置決定方法
Helmstetter et al. Fast instruction set simulation using LLVM-based dynamic translation
KR101088516B1 (ko) 수행 중 선행 컴파일링을 이용한 내장형 시스템을 위한 자바 컴파일링 방법
JP6295914B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ
US20170177772A1 (en) Information processing device that executes simulation and a simulation method
Guan et al. The optimizations in dynamic binary translation
WO2007131089A2 (en) Code translation and pipeline optimization
US9880841B2 (en) Computation method for computing performance value when processor executes code, computation apparatus for computing performance value when processor executes code, and computer readable storage medium storing computation program for computing performance value when processor executes code
Kressel et al. Evaluating the Impact of Optimizations for Dynamic Binary Modification on 64-bit RISC-V
Hanser Performance of the SHA-3 Candidates in Java

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140901

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150924

TRDD Decision of grant or rejection written
RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20151020

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151020

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151110

R150 Certificate of patent or registration of utility model

Ref document number: 5840014

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees