JP4640684B2 - プログラムコード変換方法 - Google Patents

プログラムコード変換方法 Download PDF

Info

Publication number
JP4640684B2
JP4640684B2 JP2010094371A JP2010094371A JP4640684B2 JP 4640684 B2 JP4640684 B2 JP 4640684B2 JP 2010094371 A JP2010094371 A JP 2010094371A JP 2010094371 A JP2010094371 A JP 2010094371A JP 4640684 B2 JP4640684 B2 JP 4640684B2
Authority
JP
Japan
Prior art keywords
register
computer
program code
objects
code
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 - Lifetime
Application number
JP2010094371A
Other languages
English (en)
Other versions
JP2010198628A (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
Priority claimed from GBGB9822075.9A external-priority patent/GB9822075D0/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010198628A publication Critical patent/JP2010198628A/ja
Application granted granted Critical
Publication of JP4640684B2 publication Critical patent/JP4640684B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • 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
    • 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)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Description

本発明は、プログラムコードをあるフォーマットから別のフォーマットに変換するための方法及びシステムに関する。特に、本発明は、コンピュータプログラム又はプログラムのBasic Blockの中間表現を提供するための方法及びシステムに関する(プログラムのBasic Blockとは、ただ1つのエントリーポイントを第1の命令に有し、ただ1つのエクジットポイントをそのブロックの最後の命令に有する、命令のブロックである)。例えば本発明は、あるプロセッサ用に書かれたコンピュータプログラムを異なるプロセッサ上で効率的に実行できるように変換するための方法及びシステムを提供する。この変換は、中間表現を利用し、ブロックごとのモードで行われる。
中間表現とは、プログラムを表現できるが、どの特定プロセッサにも特有ではなく、どのプロセッサ上で直接に実行するようにも意図されていない抽象的なコンピュータ言語の形式を呼ぶのに、コンピュータ業界で広く使用されている用語である。例えば、中間表現は一般に、プログラムの最適化を可能にするために作成される。例えばコンパイラは、高級言語コンピュータプログラムを中間表現に変換し、その中間表現に様々な最適化技術を適用することによってプログラムを最適化し、次いで、最適化した中間表現を実行可能バイナリコードに変換することになる。中間表現はまた、プログラムを、どのプロセッサにも特有ではない形式でインターネットを横断して送信できるようにもする。例えばSun Microsystemsは、この目的のためにバイトコードと呼ばれる中間表現の形式を開発した。バイトコードは、周知のJava(商標)ランタイムシステムが採用されたプロセッサ上ならどんなプロセッサ上にも実装することができる。
中間表現はまた、バイナリ変換を採用するエミュレーション・システムによっても一般的に使用されている。このタイプのエミュレーション・システムは、所与のプロセッサタイプ用にコンパイルされたソフトウェアコードを取り込み、それを中間表現に変換し、その中間表現を最適化し、次いでその中間表現を別のプロセッサタイプ上で実行できるコードに変換する。中間表現生成の最適化は、エミュレートされたプログラムを実行するのに必要なコードの量を最小限に抑えるのに使用される周知のプロシージャである。中間表現の最適化には、周知の様々な方法が存在する。
バイナリ変換を行うために中間表現を使用する周知のエミュレーション・システムの一例は、AT&Tによって運営されるFlashPortシステムである。顧客は、変換すべきプログラムをAT&Tに提供する(プログラムは第1のタイプのプロセッサ上で実行されるようにコンパイルされている)。プログラムは、AT&Tによって中間表現に変換され、中間表現は、技術者の補助により自動最適化ルーチンのアプリケーションを介して最適化される。技術者は、最適化ルーチンが失敗したときに入力を提供する。最適化された中間変換は、次いでAT&Tによって所望のタイプのプロセッサ上で実行できるコードに変換される。このような、実行される前にプログラム全体が変換されるタイプのバイナリ変換は、「静的」バイナリ変換と呼ばれる。変換時間は、数カ月までのどんな時間になる可能性もある。
エミュレーションの代替形式では、サブジェクトプロセッサ(すなわち、コードがそれに向けて書かれている、エミュレートされることになる第1のタイプのプロセッサ)のコードのプログラムが、中間表現を介してBasic Blockでターゲットプロセッサ(すなわち、エミュレーションがその上で行われる第2のタイプのプロセッサ)のコードに変換される。
本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(MOVE命令) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(ADD命令) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(MUL命令) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(AND Expression) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(ライン6のMOVE命令による再定義) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(サブジェクトプロセッサレジスタの伝搬の例) 本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(2つのIsoBlockを適用した例)
本発明の第1の態様の一目的は、プログラムコードの中間表現を生成する方法を提供することであり、この方法は、抽象レジスタを表す複数のレジスタオブジェクトを生成するコンピュータ実施ステップであって、単一のレジスタオブジェクトがそれぞれの抽象レジスタを表すコンピュータ実施ステップと、
表現オブジェクトを生成するコンピュータ実施ステップであって、各表現オブジェクトが、プログラム中に生じる異なるサブジェクトコード要素を表し、直接的に、又は他の表現オブジェクトからの参照を介して間接的に関係するレジスタオブジェクトから参照されるコンピュータ実施ステップとを含む。
サブジェクトコードの要素は、サブジェクトコード命令の演算又は副次演算である。各サブジェクトコード命令はこのような要素をいくつか含むこともでき、したがって、いくつかの表現オブジェクトを生成して、単一のサブジェクトコード命令を表すこともできる。
また本発明の第1の態様によれば、プログラム可能なマシン上で実行するために書かれたコンピュータプログラムコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、
前記オブジェクトは、すべてのレジスタオブジェクトをネットワークの最下部の基本ルート又はツリートランクのレベルに有する分岐したツリーのようなネットワークに構成され、レジスタオブジェクトは他のどのレジスタオブジェクトにも供給されない。
中間表現を形成するときは、中間表現によって表されているサブジェクトプロセッサの状況(例えばそのレジスタ又はメモリ空間の状況)の表現を含めることが必要である。本発明ではこれは、抽象レジスタを作成することにより、特に効率的な方式で行われる。
本発明によれば、所与の抽象レジスタを表すのに単一のレジスタオブジェクトしか生成する必要がなく(これは、初期化時にすべての抽象レジスタに対して行うことが好ましい)、各抽象レジスタの状態は、対応するレジスタオブジェクトから参照される表現オブジェクトによって定義される。所与のレジスタオブジェクトから複数の表現オブジェクトが参照される場合、レジスタオブジェクトをその「ルート」として有する表現オブジェクトの「ツリー」が生成される。各レジスタオブジェクトから参照される表現ツリーは、共に「表現フォレスト」を形成することになる。
本発明の利点は、いずれかの所与の表現オブジェクトを複数のレジスタに関連付けることができることであり、したがって、異なるいくつかのレジスタによって使用される表現をこれらのレジスタそれぞれに別個に作成して割り当てる必要はなく、一度だけ作成して各レジスタに関連付ければよい。言い換えれば、表現ツリーは、複数のレジスタオブジェクトから参照される表現オブジェクトによって相互にリンクさせることができる。したがって、所与の表現オブジェクトを、表現フォレスト内のいくつかの表現ツリーに共通とすることができる。同じ表現のコピーを複数作成することを避けることにより、本発明は、中間表現を作成するのに必要な時間を削減し、中間表現に占有されるメモリ空間を削減する。
本発明の別の利点は、冗長になる表現を非常に効率的に識別できることである。新しい表現がレジスタオブジェクトに割り当てられたとき、以前にそのレジスタオブジェクトから参照されていた表現は、他のレジスタオブジェクトから参照されていない限り冗長になる。これらの多重参照は、以下に述べる参照カウンティングを使用して検出される。
いずれかの所与の表現オブジェクトは、それから他の表現オブジェクトへの参照と、他の表現オブジェクト又は抽象レジスタからそれへの参照とを有することができる。各表現オブジェクトにつながる参照の数のカウントが維持されることが好ましい。表現オブジェクトへの(レジスタ又は別の表現オブジェクトからの)参照が作成又は除去されるたびに、その表現オブジェクトに対するカウントが調整される。所与の表現オブジェクトに対するカウントが0であるのは、その表現オブジェクトにつながる参照がなく、したがってその表現オブジェクトが冗長であることを示す。所与の表現オブジェクトに対するカウントが0であるとき、その表現オブジェクトは、中間表現から除去されることが好ましい。
ある表現オブジェクトが除去されるとき、その表現オブジェクトからつながるすべての参照が削除されることにより、参照先である各表現オブジェクトはその参照カウントをデクリメントする。このデクリメントされた値が0に達したとき、今度はその参照先オブジェクトを除去することができ、それにより、そのオブジェクトの参照先であるオブジェクトがそれらの参照カウントをデクリメントする。
したがって、本発明の中間表現によれば、効率的に冗長コードを突き止めて除去することができる。バイナリ変換プログラムでは、レジスタの内容が定義された後に一度も使用されることなく再定義されるとき、冗長コードが頻繁に現れる。知られている既存の中間表現は、所与のレジスタの内容がいつ定義されたか、及びそのレジスタの内容がいつ使用されたかを示す記録を保持することを必要とする。この記録保持は、非効率的な冗長コード識別方法である。本発明では、冗長コードは、レジスタオブジェクトへの割当ての順序及びレジスタオブジェクトの使用から即座に明らかとなる。
本発明の第2の態様によれば、プログラム可能なマシン上で実行するために書かれたコンピュータコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、
少なくとも1つの可変サイズのレジスタが複数のレジスタオブジェクトによって表され、可変サイズのレジスタの可能な各サイズにつき1つのレジスタオブジェクトが提供される。
この本発明の第2の態様によれば、可変サイズのレジスタを少なくとも1つ備えるサブジェクトプロセッサの命令セットで表されたプログラムコードの中間表現を生成する方法が提供され、この方法は、
1つの又はそれぞれの可変サイズのプロセッサレジスタを表す、関連する抽象レジスタオブジェクトのセットを生成するコンピュータ実施ステップであって、このセットが可変サイズの各レジスタの可能な各幅につき1つの抽象レジスタを含むコンピュータ実施ステップと、
可変サイズのレジスタへのあるフィールド幅の書込み動作ごとに、同じ幅の抽象レジスタに書き込むコンピュータ実施ステップと、
どの抽象レジスタが有効データを含むかの記録を保持するコンピュータ実施ステップであって、この記録が書込み動作ごとに更新されるコンピュータ実施ステップと、
有効データが前記異なるサイズの抽象レジスタのセットのうちの1つ以上あってそれらを可変サイズのレジスタに対して行われる同じ読取り動作と同じ効果をもたらすように結合しなければならないかどうかを、所与のフィールド幅の書込み動作ごとに前記記録から判定するコンピュータ実施ステップと、
a)そのように結合が必要とされないと判定された場合は、適切なレジスタから直接に読み取り、あるいは
b)複数のレジスタからのデータをそのように結合しなければならないと判定された場合は、それらのレジスタの内容を結合するコンピュータ実施ステップを含む。
上記において可変サイズのレジスタとは、サブフィールドに値を書き込み、レジスタの幅全体の一部をオーバーレイすることによって、その内容を修正することができるレジスタを意味する。
複数のレジスタからデータを結合しなければならないか否か、また結合しなければならない場合にはどれを結合しなければならないかは、異なるサイズの抽象レジスタの各セットに関して以下の条件に従って決定することができる。
i)アクセスに必要とされるデータが1つの有効抽象レジスタ内に完全にある場合は、そのレジスタだけがアクセスされる。
ii)アクセスに必要とされるデータが複数の有効抽象レジスタ内にある場合は、それらの有効抽象レジスタからデータが結合されて、アクセスが行われる。
例えば、Motolora68000シリーズを含めた周知のサブジェクトプロセッサでは、以下のとき、上記のステップ(i)に従ってただ1つのレジスタにアクセスすることが必要となる。すなわち、
a)前記抽象レジスタのうち1つだけに有効データがあるときは、そのレジスタがアクセスされる。
b)アクセスの幅に対応するサイズのレジスタ中に有効データがあり、それよりも小さいどのレジスタ中にも有効データがない場合は、そのアクセスの幅にサイズが対応するそのレジスタだけがアクセスされる。
c)有効データを含むレジスタが、アクセスの幅に対応するサイズのレジスタよりも長い場合は、有効データを含むレジスタのうち最小のレジスタがアクセスされる。
周知のサブジェクトプロセッサではまた、アクセスに必要とされるデータが複数の有効抽象レジスタ内にあり、したがって2つ又はそれ以上のレジスタからのデータを結合しなければならない場合、以下のようにして結合を行うことができる。
a)読取り動作の幅に対応するか又はそれよりも小さいサイズの2つ又はそれ以上のレジスタ中に有効データがある場合は、これらの各レジスタからのデータが結合される。
b)読取り動作のサイズに対応するサイズのレジスタ中にデータがなく、より大きいレジスタ及びより小さいレジスタ中にデータがある場合は、これらの各レジスタからのデータが結合される。
中間表現が、すべてのレジスタアクセスが同じ幅であるプログラムの領域(1つ又は複数のBasic Blockを含む)を表すときは、抽象レジスタの内容を結合する必要はなく、データは単に、単一の動作で単一の抽象レジスタに書き込むか又はそれから読み取ることができる。したがって、ターゲットプロセッサコードが単純化されることになる。2つの抽象レジスタの内容を結合するより複雑なプロシージャは、いずれかの特定のコード領域が、異なるビット幅のレジスタアクセスを含む場合にのみ必要となる。
この本発明の第2の態様は、プロセッサのエミュレーション中、具体的には、エミュレートされるプロセッサが可変サイズのレジスタを利用するときに起こる問題を克服する。対象とするこの問題の性質は、例によって最もよく理解される。 可変サイズのレジスタを使用する命令セットの一例は、Motorola68000アーキテクチャである。68000アーキテクチャでは、「ロング」(.l)と指定された命令は、レジスタ又はメモリ位置の32ビットすべてに作用する。「ワード」(.w)又は「バイト」(.b)と指定された命令は、レジスタ又はメモリ位置のボトム16ビット及びボトム8ビットにしかそれぞれ作用しない。例えば、バイト追加によって繰上がりが生成される場合でも、その繰上がりはレジスタの9番目のビットには伝わらない。可変サイズのレジスタ中で発生する状況は、以下の表1に示す68000コードの例に示される。
Figure 0004640684
この例において、最初の「move.l」命令は、レジスタアドレス「d0」の32ビットすべてに書き込む。これを、レジスタ「d0」を表すボックスの全部分をカバーする薄い方の陰影によって上に示す。「add.b」命令は、レジスタ「d0」のボトム8ビットだけに書き込み、トップ24ビットは「add.b」命令の前の状態と全く同じ状態のままである。レジスタ「d0」の、「add.b」命令によって影響された部分を、濃い方の陰影によって示す。ここで、レジスタ「d0」の全内容が別のレジスタ又はメモリにコピーされる場合、コピーされるボトム8ビットは、「add.b」命令によって生成されたものとなり、コピーされるトップ24ビットは、「move.l」命令によって生成されたものとなる。
エミュレーション・システムは、エミュレートしているサブジェクトプロセッサによって使用される各レジスタを表さなければならない。エミュレーションの一部としてプログラムの中間表現が作成されるとき、その中間表現は、どんなアーキテクチャのターゲットプロセッサ上でも実行されるコードに変換できることが好ましい。したがって、好ましくは中間表現は、コードを実行するのに使用されるターゲットプロセッサのタイプに関するどんな仮定も含むべきではない。この場合、回避すべき特定の仮定は、上記の例で述べたように8ビットのデータがレジスタに書き込まれるときにターゲットプロセッサ上の32ビットレジスタの上位24ビットがそれらの既存の形で維持されるであろうという仮定である。この代わりに、8ビットのデータをレジスタの最下位8ビットに書き込み、次いで残りの24ビットを0で埋めることになるターゲットプロセッサもあり得る。中間表現は、(適切なコードに変換された後は)どちらの形式のターゲットプロセッサ上でも実行できるような方式で構築することが好ましい。
この問題を克服できる方式の1つは、ターゲットプロセッサレジスタの異なるセクションを適切な方式で操作する複雑な式を作成することであり、この例で必要とされる式は次のようになる。
d0=((d0+x)&0xff)|(d0&0xffffff00)
この式は、ターゲットプロセッサレジスタ上で32ビット追加を行い、ボトム8ビットを抽出し、次いでトップ24ビットをそれらの元の値に復元する。
異なる幅のデータを操作する2つの命令間においてある幅のデータを操作する命令を見つける(上に例示した状況)のは普通でない。プログラム中で共にグループ化される同じ幅のデータを操作する命令のグループを見つけることの方が普通である。例えば、プログラムのある領域はバイトのデータ、例えば文字処理コードに作用し、プログラムの別の領域は32ビット幅のデータ、例えばポインタ操作コードに作用する場合がある。独立型コード領域のそれぞれが単一の幅しかないデータに作用するこれらの優勢なケースでは、特別なアクションを行う必要はない。例えば、プログラムの領域がバイトだけを動かし操作している場合、これらのバイト値をターゲットプロセッサの32ビットレジスタに記憶することができ、レジスタのトップ24ビットは、アクセスされることがないので無視される。このプログラムが、次いで16ビット幅データの操作を開始する場合、16ビット演算に関わるターゲットプロセッサレジスタには、何らかのワード演算が行われる前に16ビット項目がロードされる可能性が非常に高く、したがって何の対立も発生しない(すなわちデータのトップ16ビットが無視される)。しかし、バイト値を使用するより早い段階の演算中は、16又は32ビットを使用する演算が発生するまで、レジスタのトップ24ビット(例えば)を保存する必要があるかどうかが分からない。
レジスタ中に保持されたビットのすべて又はいくつかを廃棄してよいかどうかが分からないので、対立するオペランド幅を使用する演算を表すために複雑な式を構築する前述の技術は、あらゆる命令に適用しなければ正しく機能しない。したがって、周知の中間表現で使用されるこの技術は、たまにしか発生しない問題を解決するために大きなオーバーヘッドを課す。
本発明により、前述のようにサブジェクトプロセッサレジスタの可能な各サイズを表すために別個の抽象レジスタを使用することは、1つのデータ幅しか使用しないプログラム領域の間に追加の処理を必要とせずにデータを中間表現中の抽象レジスタに書き込むか又はそれから動かすことが可能になるので有利である。本発明は、サブジェクトプロセッサレジスタに書き込まれ、それから読み取られる、異なる幅のデータを中間表現が表す必要があるというまれにしか起こらない状況で、計算(すなわち異なる幅のデータの結合)を行うことしか必要としない。
本発明の第3の態様は、変換されるコードの量を削減する。サブジェクトコードの特性は以下のとおりである。
i)コードのBasic Blockは、代替かつ未使用の入口条件を有することができる。これは、変換を行う時に検出することができる。
ii)コードのBasic Blockは、代替かつ未使用の可能な効果又は機能を有することができる。一般に、これは、変換されたコードが実行されるときにだけ検出可能となる。
本発明の第3の態様によれば、コンピュータプログラムコードの中間表現を生成する方法が提供され、この方法は、
サブジェクトコードの所与の部分を最初に変換する際に、プログラムコードのその部分を優勢な条件セットで実行するのに必要な中間表現だけを生成及び記憶するコンピュータ実施ステップと、
サブジェクトコードの同じ部分が後で入力されたときは常に、サブジェクトコードのその部分のための中間表現が後続の条件に対して以前に生成及び記憶されたかどうかを判定し、そのような中間表現が以前に生成されていない場合は、サブジェクトコードの前記部分を前記後続の条件で実行するのに必要な追加の中間表現を生成するコンピュータ実施ステップとを含む。
本発明の第3の態様は、サブジェクトコードの単一のBasic Blockに対して複数だがより単純な中間表現コードのブロックを可能にすることにより、変換されるコードの量を削減する。ほとんどの場合、より単純な変換ブロックが1つだけ必要とされることになる。
本発明によれば、プログラム可能なマシン上で実行するために書かれたコンピュータコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、前記中間表現は、コンピュータコードのブロックに対して生成及び記憶され、同じコードブロックが後で再入力された場合には後で再利用され、前記第1のコンピュータプログラムコードの少なくとも1ブロックが、代替の未使用入口条件又は効果又は機能を有することができ、前記中間表現は、プログラムコードのそのブロックをその時の優勢な条件で実行するのに必要なとき、最初にだけ生成及び記憶される。
例えば本発明の好ましい実施形態では、この方法は、プログラムによって必要とされるときに、プログラムコードのBasic Blockごとの中間表現の中間表現ブロック(IR Block)を生成するコンピュータ実施ステップであって、各IR Blockが特定の入口条件に対するプログラムコードの各Basic Blockを表すコンピュータ実施ステップと、
各IR Blockに対応するターゲットコードを記憶するコンピュータ実施ステップと、
プログラムが所与の入口条件に対するBasic Blockの実行を必要とするときに、
a)その所与の入口条件に対するそのBasic Blockを表す記憶済みターゲットコードがある場合は、前記記憶済みターゲットコードを使用し、あるいは
b)その所与の入口条件に対するそのBasic Blockを表す記憶済みターゲットコードがない場合は、その所与の入口条件に対するそのBasic Blockを表す別のIR Blockを生成するコンピュータ実施ステップを含む。
Basic Blockは、サブジェクトプロセッサ中の順次命令のグループ、すなわちサブジェクトコードである。Basic Blockは、ただ1つのエントリーポイントを有し、別のBasic Blockの直前に終了するか、あるいはジャンプ、呼出し、又は分岐(条件付きでも無条件でも)の命令時に終了する。IR Blockは、中間表現のブロックであり、サブジェクトコードのBasic Blockの変換を表す。同じBasic Blockだが異なる入口条件に対するBasic Blockを表すIR Blockのセットが生成された場合、そのセット内のIR Blockは、以下、IsoBlockと呼ぶ。
本発明のこの態様は、静的変換に適用することもできるが、動的バイナリ変換を介したエミュレーションに特に適用可能である。本発明によれば、エミュレーション・システムは、サブジェクトプロセッサプログラムをBasic Blockごとに変換するように構成することができる。この手法を使用するときは、プログラムのBasic Blockの実行に続く、エミュレートされるプロセッサの状態が、プログラムの後続のBasic Blockを表すのに使用されるIR Blockの形式を決定する。
対照的に、変換を利用する周知のエミュレータでは、Basic Blockの中間表現が生成されるが、これは、プログラムのそのBasic Blockの最初の入口条件から独立している。したがって、中間表現は優勢な形式をとることが必要とされ、例えば抽象レジスタの有効性(又はその反対)を決定するテストを含むことになる。これとは対照的に、本発明では、抽象レジスタの有効性(又はその反対)はすでに分かっており、したがってIR blockは有効性テストを含む必要はない。さらに、抽象レジスタの有効性がわかっているので、IR blockは、有効な抽象レジスタを結合するのに必要なコードだけを含むことになり、すべての抽象レジスタを結合できるコードを含む必要はない。これにより、実行するために中間表現に変換する必要のあるコードの量が削減されるので、大きな性能の利点がもたらされる。プログラムのBasic Blockが以前に所与の入口条件のセットに対する中間表現に変換されており、かつ、それが異なる入口条件で開始する場合、プログラムのそのBasic Blockが中間表現のIsoBlockに再変換されることになる。
本発明による第3の態様の別の利点は、得られる中間表現のIR block及びIsoBlockが、すべての入口条件を表すことのできる中間表現よりも複雑でなく、したがってより迅速に最適化でき、また、より迅速に実行されるターゲットプロセッサコードに変換されることである。
本発明の第3の態様はまた、可能な効果又は機能をいくつか有することのできるサブジェクトコード命令を利用し、命令が最初に実行されるとき、これらの効果又は機能のすべてが必要とされるわけではない可能性もあり、これらのいくつかは、実際にはまったく必要とされない可能性もある。本発明のこの態様は、中間表現が動的に生成されるときにだけ使用することができる。
すなわち、本発明によるこの方法は、プログラムの実行中にそのプログラムの中間表現が動的に生成されるときに、
複数の可能な効果又は機能を有する特定のサブジェクトコード命令の第1の反復時に、その反復で必要とされる特定の機能だけを表す特殊ケース中間表現を生成及び記憶するコンピュータ実施ステップと、同じサブジェクトコード命令の後続の各反復で、前記後続の反復で必要とされる機能に対して特殊ケース中間表現が生成されているかどうかを判定し、そのような特殊ケース中間表現が以前に生成されていない場合に、その機能特有の追加の特殊ケース中間表現を生成するコンピュータ実施ステップとを含むことが好ましい。
本発明のこの態様は、エミュレーション・システムに関連付けられた問題、すなわちサブジェクトプロセッサコードの不必要な機能部分の変換という問題を克服する。サブジェクトプロセッサコードから、複雑な命令が中間表現にデコードされるとき、その命令の可能な効果のサブセットだけが、サブジェクトプロセッサプログラム中の所与の位置で使用されるのが普通である。例えばCISC(複雑命令セットコンピュータ)の命令セットにおいては、メモリロード命令は、基準レジスタ内にどのタイプの記述子が含まれているかによって異なった動作をするよう定義されることがある(記述子は情報がどのようにメモリ中に記憶されているかを記述する)。しかしながら大半のプログラムにおいては、そのプログラムの個々のロード命令により1つの記述子タイプだけが使用される。本発明による変換プログラムは、その記述子タイプだけのために定義されたロード命令を含む特殊ケース中間表現を生成する。
好ましくは、特殊ケースの中間表現が生成され記憶されると、関連付けられた試験手順が生成され記憶されてその後各々の対象コード命令が反復される際に、必要とされる機能が、関連付けられ記憶された特殊ケースの中間表現により表される機能と同一であるかを判定し、追加の特殊ケースの中間表現が必要とされる場合は、その特殊ケースの中間表現と関連付けられた追加の試験手順が生成され、その追加の特殊ケース中間表現とともに記憶される。
好ましくは、特定のサブジェクトコード命令及び追加の関連する試験手順についての追加の特殊ケース中間表現は、少なくとも初めは、同一のサブジェクト命令を表すために記憶されている既存の特殊ケース中間表現及び関連する試験手順に対して下位の関係で記憶されるのがよい。その場合、サブジェクトコード命令の2番目の及び後続の反復の際に、前記試験手順をそれが生成され記憶された順番で行うことにより、必要な特殊ケース中間表現がそれ以前に生成されているか否かの判定が行われ、それは必要とされる機能の特殊ケースの中間表現が存在すると判定されるまで、又はそうした必要とされる特殊ケースの中間表現が存在せず、その場合さらなる追加の中間表現及び別の試験手順が生成されるまで行われる。
試験手順をそれが生成される順序で順序付けするのではなく、使用される頻度がより高い特殊ケース中間表現と関連付けられた試験手順が、使用頻度の低い特殊ケース中間表現と関連付けられた試験手順より先に行われるように試験手順の順序付けを調整することにより、中間表現を最適化することが好ましい。
上記方法のいずれにより生成された中間表現を、例えば、第1タイプのプロセッサが実行するために書かれたコンピュータプログラムの変換において使用し、そのプログラムが異なるプロセッサにより実行され、かつコンピュータプログラムの最適化における1つのステップとして実行されるようにする。後者の場合、中間表現は特定のプロセッサが実行するために書かれたコンピュータプログラムを表すように生成することができ、その中間表現は次いで最適化され、次いでその同一のプロセッサにより実行可能なコードに変換し直される。
上記の発明の第3の態様は中間表現の生成に関連するが、その中で説明したステップは、中間表現を生成せずにサブジェクトコードから直接ターゲットコードを生成することにも適用することができる。
したがって、本発明はコンピュータプログラムコードのターゲットコード表現を生成する方法も提供し、この方法は、サブジェクトコードの所与の部分を最初に変換する際、プログラムコードのその部分を、優勢な条件セットで実行するのに必要とされるターゲットコードだけを生成し記憶するステップと、その後サブジェクトコードの同一の部分が入力された時に、そのサブジェクトコードの部分について、ターゲットコードがその後続の条件で以前に生成及び記憶されているかどうかを判定するステップと、そのようなターゲットコードが以前に生成されていない場合は、前記その後続の条件でサブジェクトコードの前記部分を実行するのに必要な追加のターゲットコードを生成する、コンピュータ実施ステップを含む。中間表現の生成に関連して説明した特性及び利点の多くは、ターゲットコードの生成に同様に適用されることが理解されよう。
本発明の第4の態様によると、第1のプログラム可能なマシン上でコンパイル及び/又は変換するため、及び実行するために書かれた第1のコンピュータプログラムコードを、異なる第2のプログラム可能なマシンで実行するために第2のコンピュータプログラムコードに動的に変換する方法が提供される。前記方法は、
(a)前記第1のコンピュータプログラムコードのブロックの中間表現を生成することと、
(b)前記中間表現から前記第2のコンピュータプログラムコードのブロックを生成することと、
(c)第2コンピュータプログラムコードの前記ブロックを前記第2のプログラム可能なマシン上で実行することと、
(d)前記第2のプログラム可能なマシン上の第1のコンピュータプログラムコードのエミュレートされる現在の実行のために必要とされる、少なくとも第1のコンピュータプログラムコードのブロックについてステップa〜cをリアルタイムで繰り返すこと、
とを含む。
本発明は、コンピュータコードのリアルタイム変換において中間表現を使用することの利点を実現する。動的エミュレーション・システムに適用される本発明の具体的な実施形態を、図面を例としてのみ参照しながら以下に説明する。
図1から図5は、本発明による動的エミュレーション・システムが、プログラム又はプログラムのBasic Blockの中間表現を生成する方式の概略図であり、これらの図はまた本発明の新規性のある特徴である表現フォレスト(表現ツリーのグループ)をも表している。
図6及び図7は、動的エミュレーション・システムがプログラムのBasic Blockの中間表現を生成する方式の概略図であり、それはプログラムのそのBasic Blockを開始する際の開始条件に依存する。
下記に説明する本発明の実施形態は、異なるタイプのプロセッサ上で、1つのプロセッサの命令セットをエミュレートするためのシステムである。以下の説明において、サブジェクトプロセッサという用語は、エミュレーション・システムによりエミュレートされるべきプロセッサを言い、ターゲットプロセッサとはエミュレートシステムが実行されるプロセッサを言う。このシステムは、基本的に、サブジェクトプロセッサコード中の命令のBasic Blockを、実行する必要に応じてターゲットプロセッサコードに変換することにより動作する動的バイナリ変換システムである。下記で説明するこのエミュレーション・システムは、それぞれFront End、Core、Back Endと呼ばれる3つの主要な構成要素を含む。サブジェクトプロセッサ命令は、エミュレーション・システムのFront Endによりデコードされ中間表現に変換される。エミュレーション・システムのCoreはサブジェクトプロセッサ命令の中間表現を分析及び最適化し、Back Endは中間表現を、ターゲットプロセッサ上で実行するターゲットプロセッサコードに変換する。
システムのFront Endは、エミュレートされているサブジェクトプロセッサに固有のものである。Front Endは、サブジェクトプロセッサの形態に応じてエミュレーション・システムを構成し、例えばエミュレーションにより必要とされるサブジェクトプロセッサレジスタの番号及び名前を指定し、必要とされる仮想メモリマッピングをBack Endに指定する。
サブジェクトプロセッサ命令はBasic Blockにおいて中間表現に変換され、その効果生じた各中間表現ブロック(IR Block)は次いでエミュレーション、キャッシング(caching)、最適化の目的でCoreによりユニットとして扱われる。
CoreはFront Endが生成した中間表現を最適化する。Coreは、エミュレーション・システムに接続されたサブジェクトプロセッサ及びターゲットプロセッサとは無関係の標準形を有する。ただし、いくつかのCore資源、具体的にはレジスタ番号、名前付け、IR Blockの詳細な性質は個々のFront Endにより構成されてその固有のサブジェクトプロセッサ構造要件に適応する。
Back Endはターゲットプロセッサに固有のもので、中間表現をターゲットプロセッサ命令に変換するためにCoreにより起動される。Back Endは、ターゲットプロセッサレジスタを割当てし管理することと、サブジェクトプロセッサを正確にエミュレートするために適切なメモリロード及び記憶命令を生成することと、Coreが動的ルーチンを呼び出し、それらの動的ルーチンがBack End及びFront Endを適切に呼び出せるようにするために呼び出し手順を実施することに責任を負う。
次いでエミュレーション・システムの動作をより詳細に説明する。システムは初期化されるとFront End、Core、Back Endの間に適切なリンクを生成する。初期化の終了時に命令実行ステップが開始され、Coreはfront Endを呼び出してサブジェクトプロセッサ命令の第1のBasic Blockをデコードする。Front Endは命令ごとに動作し、Basic Blockの各サブジェクトプロセッサ命令を順にデコードし、Coreルーチンを呼び出して各命令のサブ操作ごとに中間表現を生成する。Front Endが、プログラムシーケンスの変更を生じさせる可能性がある命令(例えば条件付又は無条件の、ジャンプ、呼び出し又は分岐命令)をデコードするとき、Front Endはさらなるサブジェクトプロセッサ命令をデコードする前にCoreに戻る(それによりコードのBasic Blockを終了する)。
Front Endがサブジェクトプロセッサ命令のBasic Blockを中間表現に変換すると、Coreはその中間表現を最適化し、次いでBack Endを起動して、ターゲットプロセッサコード(ターゲット命令)内に、Basic Blockの中間表現を実施する命令のシーケンスを動的に生成する。ターゲット命令のそのシーケンスが生成されるとそれは直ちに実行される。ターゲットプロセッサ命令のシーケンスは、後の再使用のためにキャッシュ内で保持される(最初に上書きされる場合を除いて)。
ターゲットプロセッサ命令が実行されると、次に実行されるべきアドレスを示す値が戻される。言い換えれば、ターゲットプロセッサコードは、Basic Blockの終わりに、条件付き又は無条件に関わらずどの分岐、呼び出し、ジャンプ命令をも評価しその効果を戻す。Basic Blockのこの変換及び実行のプロセスは、すでに変換されたBasic Blockに出会うまで続行する。
次のBasic Blockを表すターゲットコードが以前に使用されておりキャッシュ内に記憶されているとき、Coreは単にそのターゲットコードを呼び出す。Basic Blockの終わりに達したとき、ターゲットコードは実行されるべき次のサブジェクト命令のアドレスを再度供給し、サイクルは続行する。
中間表現及びターゲットプロセッサコードはどちらもサブジェクトプロセッサ命令のBasic Blockとリンクされている。中間表現はオプティマイザが頻繁に実行されるIR Blockのグループの効果的なエミュレーションを生成できるようにリンクされ、ターゲットコードは、同一のBasic Blockの第2及び後続の実行がターゲットコードを直接実行でき、命令を再度デコードするというオーバーヘッドを生じさせないようにリンクされる。
Front Endは、抽象レジスタの必要とされる番号がCoreにおいて初期化時に定義されることを要求する。これらの抽象レジスタ(Riとラベルされる)は、サブジェクトプロセッサ上で実行する場合にサブジェクトプロセッサ命令により使用されることになる物理レジスタを表す。抽象レジスタは、サブジェクトプロセッサレジスタで命令の予測される効果を表すことにより、エミュレートされているサブジェクトプロセッサの状態を定義する。
中間表現は、表現オブジェクトを抽象レジスタに割り当てることにより、サブジェクトプロセッサプログラムを表す。表現オブジェクトは、例えば個々の演算操作、論理演算、条件付演算の効果を中間表現において表す手段である。多数のサブジェクトプロセッサ命令はデータの操作を実行するので、大半の命令はその個々のサブ操作を表すために表現オブジェクトを生成する。表現オブジェクトは、例えば追加操作、条件設定操作、条件付き分岐における条件付き評価、メモリ読出し操作を表すために使用される。抽象レジスタは表現オブジェクトに関係付けられ、表現オブジェクトは他の表現オブジェクトに関係付けられて、サブジェクトプロセッサ命令の各Basic Blockが、表現フォレストと考えられる相互参照された表現オブジェクトの数によって表されるようにする。
一連の図示した例を使用して、サブジェクトプロセッサ命令の中間表現を作成するために、エミュレーション・システムがどのように表現オブジェクト(Expressionと呼ばれる)及び抽象レジスタを使用するのかを伝える。図1から図5は、抽象レジスタを使用して下記の擬似アセンブラコードがCore内でどのように表されるかを段階的に示している。
Figure 0004640684
ライン1のMOVE命令の表現が図1に示される;Long Constant Expression#3が生成され、R0から#3に導く参照を生成することにより抽象RegisterR0に割当てられる。ライン2のMOVE命令は抽象レジスタR6の値を参照し、Register Reference Expressionはこれを表すために使用され、R2に割当てられる。図1のRegister Reference(RegRef)Expression@R6は、それがいずれの値であれRegisterR6の値を表す。RegRefExpression@6は、RegisterR6の現在の定義になる。この時点以降、RegisterR6が再定義されない限り、それはExされpression@6をその定義として戻す。
サブジェクトプロセッサ命令のオペランドは、定数又はRegisterへの参照のいずれかである。定数オペランドの表現は図1に示したように単純である。ただし、オペランドがレジスタを参照するときは状況が異なる。擬似アセンブラコードのライン3の表現は図2に示、ADD演算は、R1からAddExpressionへの参照により、抽象レジスタR1に割当てられていることがそこから分かる。ライン3のADD命令はレジスタR0及びR2を参照し、これらの各レジスタを定義するExpressionはすでに中間表現に構築されている。AddExpressionが生成されると、それは抽象RegisterR0及びR2に問合せを行いそれらを定義するExpressionを生じ、Add Expression(抽象レジスタR1に割当てられている)はこれに対する参照を行う。ADD命令の中間表現を図2に示す。言い換えれば、抽象RegisterR1の内容は、抽象RegisterR0及びR2に保持されているExpressionを参照するExpressionである。図1及び図2中の各矢印は参照を表しており、それはR0→#3の場合にRegisterをExpressionに関係付けるか、又は#3←+→@R6の場合にExpressionを別のExpressionに関係付けることができる。Expression@R6は、RegisterR2からの参照及びAdd Expressionからのもう一方の参照の2つの参照を有する。
上記コードのライン4に含まれるMUL命令は、典型的なデータフロー命令と見てよい。トップレベルのExpressionは新しいサブExpressionを生成するか又は現存のExpressionを参照することにより構築され、このトップレベルのExpressionはその定義としてRegisterに割当てられる。MUL命令の中間表現を図3に示す。抽象RegisterR1に保持されるExpressionを参照し、Long Constant Expression#5を参照するMul Expressionは、生成され抽象RegisterR5に割当てられる。
上記コードのAnd Expressionを図4に示す。このExpressionは、図1に関連して上記で説明したのと同様の方法でRegRefExpressionを使用して、定義がまだ構築されていないRegister(すなわちR3)を参照する。
ここまでに示した例において、Registerは特定のBasic Block内で最初に定義されることが想定される。図5は、すでに定義されているRegisterが、上記コードのライン6のMOVE命令により再定義されるとき何が起こるかを示している。一方図2から図4では、矢印がR1をAdd Expressionに関係付けているが、この参照はここで消去され、R1をLong Constant Expression#5に関係付けるために新しい参照矢印を作成する。
R1に結合されているのと同様に、Add ExpressionはMul Expression及びAnd Expressionにも結合されており、したがって図5に示すように存在し続ける(ただしAdd Expressionが、RegisterR1からの参照1つだけを有する場合、R1が再定義された後AddExpressionには参照が残されない;この場合このAdd Expressionは「死んだ」ものとして知られることになり、冗長になる)。さらに、図5は、擬似アセンブラコードのライン7のSUB演算の効果を図示する。
中間表現として表されるべき擬似アセンブラコードの最後のラインであるライン8はLOAD命令である。この命令を表すLoad Expressionは図5にRegisterR0に関係付けられて示されている。Load Expressionは、LOAD演算をその単一のExpressionオペランドに適用した効果を表す、単項演算子のタイプとして考えることができる。図5で、LOAD→#3fd0は、それがどのような値であれメモリ位置3fd0における値を表す。メモリ内に記憶されているデータに応じて1つのLoad Expressionがどの可能な値でも表すという点において、Load ExpressionはRegRefExpressionと類似の特性を有する。
各表現オブジェクトにつながる参照の数を示す参照カウントは保持される(任意の所与の表現オブジェクトの参照カウントは、その表現オブジェクトからの参照は含まない)。表現オブジェクトに参照が行われる(レジスタ又は別の表現オブジェクトから)たびに、又は参照がその表現から除去されるたびに、その表現オブジェクトに対する参照カウントは調節される。所与の表現オブジェクトに対するゼロの参照カウントは、その表現オブジェクトにつながる参照がなく、したがってその表現オブジェクトが冗長であることを示す。所与の表現オブジェクトに対する参照カウントがゼロの時、その表現オブジェクトは中間表現から除去される。
表現オブジェクトが除去されると、その表現オブジェクトからつながるいずれの参照、及びその参照がつながる先の表現オブジェクトの参照カウントはそれに従って調整される。ゼロ参照カウントの表現オブジェクトを除去するプロセス、及びそのようなオブジェクトからつながる参照を除去するプロセスは、表現フォレストに沿ってたどられる。中間般化のさらなる最適化は、下記で説明するようにサブジェクトプロセッサコードの冗長なラインを除去することにより達成することができる。
複雑な命令がサブジェクトプロセッサコードから中間表現にデコードされるとき、その命令の可能な効果のサブセットだけがサブジェクトプログラムの所与の場所で使用されるのが通常である。例えばCISC命令セットにおいて、メモリロード命令は、基準レジスタに含まれている記述子のタイプに応じて異なった動作をするように定義することができる(記述子は情報がどのようにメモリ内に記憶されているかを記述する)。ただし、大半のプログラムではプログラム中の個々のロード命令により1つの記述子タイプしか使用されない。
本発明のエミュレーション・システムでは、サブジェクトプロセッサプログラムが実行されるとFront Endは実行時間値を問い合せ、必要に応じて特殊ケースの中間表現を生成する。上記の例では、プログラムが使用しない記述子タイプに関連する、メモリロード命令のその部分を省略する、特殊ケースの中間表現が生成されることになる。
特殊ケースはテストにより保護されており、このテストは追加機能が必要とされていることを実行時に検出した場合に、追加コードを生成するためにFront Endへの再エントリを生じさせる。最適化中に、当初の推定が誤りであることが発見された場合(例えば特定の記述子タイプがプログラムを通じて使用されるという推定)、オプティマイザはそのテストの方向を反転し、使用頻度の高い機能が、最初に選択された使用頻度の低い機能より迅速に選択されるようにする。
本発明のエミュレーション・システムは、下記で説明するように可変サイズのレジスタを使用するサブジェクトプロセッサをエミュレートすることができる。可変サイズのレジスタを使用する、命令セット構造の例は、Motorola68000シリーズのプロセッサの構造である。68000構造では、「ロング」(.1)と指定された命令はレジスタ又はメモリ位置の32ビットすべての上で動作する。「ワード」(.w)又は「バイト」(.b)と指定された命令はそれぞれ、32ビットのレジスタ又はメモリ位置のボトム16ビット及びボトム8ビットでのみ動作する。例えばバイト追加が繰り上がりを生成する場合でも、その繰り上がりはレジスタの9番目のビットには伝搬されない。
異なる幅のデータで動作する(この例では68000プロセッサにおいて)異なる命令間の対立を回避するために、本発明によるシステムは、サブジェクトプロセッサレジスタごとに、3つの抽象レジスタのセットを生成し、このセットの各レジスタは所与の幅のデータ専用になっている(すなわち、バイトデータ、ワードデータ、ロングワードデータごとに1つのレジスタ)。68000プロセッサの各レジスタは32ビットのデータを常に記憶し、一方で命令はこの32ビットのデータの8ビット又は16ビットのサブセット上で動作することができる。そのFront Endが68000に結合されるように構成されたシステムCoreでは、サブジェクトプロセッサ「d0」についてのバイト値は、例えば「D0_B」とラベルされた抽象レジスタに記憶され、一方でワード値は「D0_W」とラベルされた別の抽象レジスタに記憶され、ロング値は「D0_L」とラベルされた第3の抽象レジスタに記憶される。データレジスタとは対照的に、68000のアドレスレジスタは、ワード及びロングの2つの有効なアドレスサイズしか有さない。したがってこの例では、各68000アドレスレジスタを表すのにCoreが必要とするのは、2つの抽象レジスタ「A0_L」及び「A0_W」だけである。
サブジェクトプロセッサ命令の特定のBasic Block内で、命令サイズに関して対立が起きない場合(すなわちそのBasic Block内の命令のすべてが同一のビット幅である場合)、適切な抽象レジスタに含まれているデータには自由にアクセスすることができる。ただし対立が起こった場合には(すなわち所与のサブジェクトプロセッサレジスタから、異なるビット幅の命令が記憶され/読み出される場合)、2つ又はそれ以上の抽象レジスタの内容を適切な方法で組み合わせることにより、正しいデータを引き出すことができる。この手法の利点は、抽象レジスタ上のすべての演算が32ビットのデータ項目上で実行されるのでCoreが単純化されることである。
サブジェクトプロセッサレジスタと抽象レジスタとの相違は、可変サイズのレジスタの効果を考慮する際に重要である。68000構造の「d0」などのサブジェクトプロセッサレジスタは、サブジェクトプロセッサ中の高速記憶域のユニットであり、このユニットはアセンブラのオペランドではそのラベル(この場合は「d0」)により参照される。これとは対照的に、抽象レジスタはCoreの中間表現の整数部を形成するオブジェクトであり、サブジェクトプロセッサレジスタのセットを表すために使用される。抽象レジスタは、サブジェクトプロセッサレジスタ中の意味論に加えて余分の意味論を含んでおり、サブジェクトプロセッサとの相互作用に対して正しい意味論が維持されるならば、任意の数の抽象レジスタを使用して単一のサブジェクトプロセッサレジスタを表す。上記で説明したように、本発明では、Front Endは各68000データレジスタを表すために3つの抽象レジスタを必要とし(すなわち、バイト、ワード、ロングワードの各データの幅ごとに1つの)、各68000アドレスレジスタを表すために2つの抽象レジスタを必要とする。これとは対照的に、例えばMIPSFront Endの実施は、単一の抽象レジスタに単一のサブジェクトプロセッサレジスタをマップする。
下記の表は68000について、異なるサイズの命令がサブジェクトプロセッサレジスタを読み出し、またこれに書き込む際に、2つ又はそれ以上の抽象レジスタの内容がどのように扱われるかを要約するものである。データが組み合わせられる方式は、サブジェクトプロセッサレジスタの現在の状態によって決まる。
Figure 0004640684
Figure 0004640684
表3及び表4は、抽象レジスタD0_L、D0_W、D0_Bに関してのサブジェクトプロセッサレジスタ「d0」の状態を表す(すなわちサブジェクトプロセッサレジスタ「d0」を表す抽象レジスタ)。表3aの「現在の状態」は、各抽象レジスタD0_L、D0_W、D0_Bが有効なデータを含むか含まないかを示すことにより、レジスタd0の所与の状態を表す。表3aの第1行は、レジスタd0の所与の状態、すなわちこのレジスタが32ビットのデータを含んでいることを表し、抽象レジスタD0_L(32ビットデータに対応する)だけが有効なデータを含んでいることを示す。例えばサブジェクトプロセッサレジスタ「d0」の32ビットすべてが有効であると初めに想定される場合、「d0」の現在の状態は、表3aの第1行により表されるようになる(×の記号は、その印のついたレジスタが有効なデータを含まないことを示す)。
表3bの「書込み後の新状態」は、本発明に従って実行された書込み命令の効果を表す。表3aの第1行で示されるように、d0が32ビットのデータを含み、長い命令により書込みをされる場合、書込み操作の効果は、表3bの「Long Word」の部分の第1行で示されるものになる。「レ」の記号で示されるように抽象レジスタD0_Lは有効なままであり(すなわち有効なデータを含む)、一方で抽象レジスタD0_W及びD0_Bにはデータが書き込まれないので「×」の記号で示されるように無効のままである。したがって「d0」の状態は変更されていない。
表3aの第1行に示される状態で、「d0」にデータのバイトによって書込みがされる場合、「d0」の新しい現在の状態は表3bの「バイト」部分により表される。この場合レジスタはロングデータ及びバイトデータの両方について有効である(すなわち、抽象レジスタD0_L及びD0_Bがどちらも有効データを含む)。
表4a「現在の状態」及び表4b「読出し前の組合せ」は、データがサブジェクトプロセッサレジスタ「d0」から読み出される際に、抽象レジスタD0_L、D0_W、D0_Bの内容がどのように組み合わされるかを表している。例えばレジスタd0の現在の状態が表4aの第2行に示されるものである場合、抽象レジスタD0_L及びD0_Bは有効データを含んでいる。レジスタd0が長い命令により読み出される場合(すなわち32ビットすべてが「d0」から読み出される場合)、表4bの行2は列Lで、抽象レジスタD0_L及びD0_Bの内容を適切な方法で組み合わせることにより、「d0」の正しい値を引き出さなければならないことを示している。この場合は、レジスタD0_Bのボトムの8ビットをレジスタD0_Lのトップ24ビットと組み合わせなければならない。一方、サブジェクトプロセッサレジスタ「d0」をバイト命令により読み出すべき場合、D0_Bの内容は抽象レジスタD0_L又はD0_Wを参照せずに直接読み出すことができた。
上記で説明したように、データの幅ごとに別の抽象レジスタを使用することにより、データの単一幅を使用するサブジェクトプロセッサコードのセクションがエミュレートされている時に、データに容易にアクセスすることができるようになる。これは非常に優勢な状況であり、例えばプログラムの1つのセクションがデータのバイト上、例えば文字処理コードで動作し、プログラムの別のセクションが例えばポインタ操作コードの32ビットのデータ上で動作する場合に生じる。異なる幅のデータがサブジェクトプロセッサレジスタに書き込まれ、またそこから読み出されるというまれな場合に、本発明は行われるべき計算(すなわち異なる幅のデータの組合せ)しか必要としない。
サブジェクトプロセッサレジスタの異なるセクションを適切な方式で操作する、複雑な表現を生成すると知られている技術は、サブジェクトプロセッサレジスタの読出し及び/又はそこへの書込みごとに、計算を行うことを必要とする。これとは対照的に本発明はまれな場合に計算を必要とし、それによりサブジェクトプロセッサレジスタのより効率的な表現を提供する。
本発明は、各サブジェクトプロセッサレジスタの明白な現在の状態(すなわち、構成要素抽象レジスタの有効性又は類似のもの(otherwise))が常に知られていることを必要とし、それによりそれらの抽象レジスタが表すサブジェクトプロセッサレジスタに対して読出し命令が行われたときに、抽象レジスタの正しい組合せが行われるようにする。
Basic Block2に入力する際のサブジェクトプロセッサレジスタの初期状態が変換時に知られていない場合、レジスタの状態をテストするためのターゲットプロセッサコードを生成する必要がある。この理由により、本発明によるエミュレーション・システムは、各サブジェクトプロセッサレジスタの状態が変換時に常に知られていることを確実にする。本発明によるシステムにおいてこれは、1つのIntermediate Representation(IR)Blockからのレジスタ状態を次に伝搬することにより行われる。例えばIR Block1は「d0」の状態をその後継のIR Block2に伝搬し、IR Block2は同様の方法でレジスタ状態をIR Block3に伝搬する。サブジェクトプロセッサレジスタのこの伝搬の例は、図6に示される。
図6で、IR Block2は、IR Block3又はIR Block2の始めという、可能性のある後継を2つ有している。IR Block2とIR Block3の間のルートは、「a」の印の矢印で表される。エンドバックからIR Block2の始めへのルートは、「b」の印の点線で示されている(このルートは存在するものの、変換されたプログラムの現在の実行においてはまだトラバースされていないので点線を使用している)。変換されたプログラムの実行中に、IR Block2がルート「b」を通ってそれ自体にブランチバックした場合、それが伝搬する状態は、IR Block1により初めにIR Block2に伝えられた抽象レジスタの状態とは整合しないものになる。中間表現は抽象レジスタの状態に固有であることから、IR Block2を再実行することはできない。IR Blockの境界を越えて本発明を正しく操作するために、各IR Blockはサブジェクトプロセッサレジスタの現在の状態の明白な表現(抽象レジスタにより表現される)を有していなければならない。したがって、ルート「b」の存在は、IR Block及びIR Block2の境界を超える本発明の動作とは整合しない。
この問題を克服するために、本発明は、異なる入口条件の複数のIR Blockを使用して、サブジェクトプロセッサコードのBasic Blockを表すことができる。異なる入口条件の単一のBasic Blockを表すために使用されるIR Blockは、IsoBlockと呼ばれる。各IsoBlockはサブジェクトプロセッサコードの、同一ではあるが入口条件が異なるBasic Blockを表す。図7には、図6に図示した問題を克服するために使用される2つのIsoBlockを示す。Iso Block2aは、Basic Block2の正確な表現であるが、これはIR Block2の始めのサブジェクトプロセッサレジスタ「d0」の状態がレ××の場合に限る(これは図6のIR Block2に対応する)。図7の後継ルート「b」が最初にトラバースされるとき、Basic Block2(この場合1つのIR Blockしかない)を表すすべての現存のIsoBlockは、伝搬されるべき抽象レジスタ状態(すなわちレレ×)との整合性をテストされる。整合性のあるIsoBlockが見つかった場合(すなわちレジスタ状態レレ×で始まるもの)、後継ルート「b」は常にそのIsoBlockと結合されることになる。図7に示した例では、ルート「b」と整合性のあるIso Blockは存在せず、したがって新しいIsoBlock2bを生成しなければならない。IsoBlock2bは、Basic Block2を構成しているサブジェクトプロセッサ命令を2回目にデコードし、Basic Block2の開始におけるサブジェクトプロセッサレジスタ「d0」の状態がレレ×であるとの当初の推定を使用することにより生成される。
IsoBlock2bから発している後継ルート「c」が最初にトラバースされる際、IR Block3に整合性テストが行われる。ルート「c」はIR Block3と整合性があるので、新しいIsoBlockを生成する必要はなく、後継ルート「a」及び後継ルート「c」はともにIR Block3に結合される。
上記で述べた整合性テストに関する低レベルの詳細は、それがサブジェクトプロセッサ構造で提供される重複するレジスタの性質そのものに依存することから、異なるFront Endモジュール間で異なったものになる。これらの詳細の必要な修正点は、当分野の技術者には明らかであろう。
抽象レジスタの状態の所与のセットに対して中間表現のIsoBlockを入力時に生成することの原理は、幅広いセットの初期状態の固有の値についてのサブジェクトプロセッサコードのBasic Blockを表す中間表現に広げることができる。知られている中間表現は、可能性のあるすべての初期開始条件についての命令のブロックを表し、したがってかなりの量の柔軟性を含むことを必要とされる。この方式で形成された中間表現は必然的に複雑になり、一般に実行中には使用されない要素を含むことになる。
本発明による中間表現は、入口条件の固有の値についてのコードのBasic Blockを表し、したがって知られている中間表現よりもコンパクトであるので有利である。本発明のさらなる利点は、生成されるすべての中間表現が少なくとも1回は使用され、不必要な追加表現を生成することに時間が浪費されないことである。
上記の説明はエミュレーションに向けられるものであるが、当分野の技術者は、本発明は例えばコンパイル中のコードの最適化など他のアプリケーションにも使用できることを理解されよう。

Claims (13)

  1. 複数の種々の幅において前記プログラムコードによってアドレス可能である少なくとも1つの可変サイズのレジスタを含むレジスタのセットを有する第1のコンピュータのために書かれたプログラムコードをエミュレートして実行可能な第2のコンピュータであって、
    メモリと、
    前記第1のコンピュータのために書かれたプログラムコードをエミュレートして実行可能なプロセッサであって、下記手順によって前記プログラムコードの中間表現をメモリ内に生成するように操作可能である、前記プロセッサと、
    を備えており、
    前記手順は、
    前記プログラムコードによって参照される場合に前記第1のコンピュータのレジスタを表す複数のレジスタオブジェクトを生成すること、
    前記レジスタオブジェクトの関連付けられたセットによって、前記第1のコンピュータの少なくとも1つの可変サイズのレジスタを表すことであって、前記レジスタオブジェクトの1つは、前記プログラムコードによって参照される場合に前記可変サイズのレジスタの各あり得る幅を提供する、前記表すこと
    を含み、
    前記手順は表現オブジェクトを前記コンピュータに生成させることをさらに含み、前記プログラムコードの要素が前記プログラムコード中に生じる場合に各表現オブジェクトは前記プログラムコードの個々の演算子又はオペランドを表し、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1以上の前記レジスタオブジェクトによって参照される、前記第2のコンピュータ
  2. 特定の幅での前記可変サイズのレジスタに対する書込み命令が前記適切な幅に対応する前記レジスタオブジェクトに書込むことみ、そして、どのレジスタオブジェクトは有効データを含むかのレコードを維持することによって、前記中間表現において表される、請求項1に記載の第2のコンピュータ
  3. 前記可変サイズのレジスタからの読込み命令が前記可変サイズのレジスタから読込む場合に、前記同じ効果をもたらすように組み合わされなければならない複数の対応するレジスタオブジェクト中に有効データがあるかどうかを前記レコードから判定すること、
    そのような組み合わせが必要でないと判定された場合は、前記適切なレジスタオブジェクトから読込むこと、
    そのような組み合わせが必要であると判定された場合は、適切なレジスタオブジェクトの内容を組み合わせて読取り値を提供すること
    によって前記中間表現に表される、請求項1又は2に記載の第2のコンピュータ
  4. 第1のコンピュータのために書かれたプログラムコードをエミュレートして実行可能な第2のコンピュータあって、前記プログラムコードは複数の種々の幅において前記プログラムコードによってアドレス可能である少なくとも1つの可変サイズのレジスタを含むレジスタのセットを参照し、前記第2のコンピュータ下記手順によって前記プログラムコードの中間表現をメモリ内に生成するように操作可能であり、
    前記手順は、
    前記プログラムコードによって参照される場合に前記第1のコンピュータのレジスタを表す複数のレジスタオブジェクトを生成すること、
    関連付けられたレジスタオブジェクトの少なくとも1つのセットを生成することであって、前記レジスタオブジェクトの各セットは、可変サイズのレジスタの個々の1つを表し、該セットは、前記個々の可変サイズのレジスタの各あり得る幅についての1つのレジスタオブジェクトを含む、前記生成すること
    を含み、
    前記手順
    前記可変サイズのレジスタに対する或るフィールドの幅の各書込み命令について、前記同じ幅の前記レジスタオブジェクトを書き込むこと、
    レジスタオブジェクトが有効データを含むレコードを維持すること、
    前記同じ読込み命令が可変サイズのレジスタに応じて実行される場合に同じ効果をもたらすために、所与のフィールド幅の各読込み命令について、組み合わされなければならない前記レジスタオブジェクトの複数において有効データがあるかどうかを前記レコードから判定すること、
    そのような組み合わせが必要でないと判定された場合は、前記適切なレジスタオブジェクトから読込むこと、
    そのような組み合わせが必要であると判定された場合は、前記適切なレジスタオブジェクトの内容を組み合わせるステップと
    を含む、前記第2のコンピュータ
  5. 前記判定することにおいて、そのような組み合わせが必要であるかを判定することが、種々のサイズのレジスタオブジェクトの各セットに関連して以下の条件、
    すなわち
    アクセスに必要とされるデータが1つの有効レジスタオブジェクト内に完全にある場合は、そのレジスタオブジェクトだけがアクセスされ、
    アクセスのために必要とされるデータが複数の有効レジスタオブジェクト内にある場合は、データは、前記アクセスを行うためにそれらの有効レジスタオブジェクトから組み合わされる、
    に従って判定される、請求項4に記載の第2のコンピュータ
  6. 前記手順が、表現オブジェクトを生成することをさらに含み、各表現オブジェクトが前記プログラムコード中に生じる場合に各表現オブジェクトは前記プログラムコードの種々の演算子又はオペランドを表し、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1つのレジスタオブジェクトによって参照される、請求項4又は5に記載の第2のコンピュータ
  7. 第1のコンピュータのために書かれたプログラムコードをエミュレートして実行可能な第2のコンピュータであって、
    下記手順によって、複数の種々のにおいてプログラムコードによってアドレス可能である少なくとも1つの可変サイズのレジスタを含むレジスタを参照するプログラムコードの中間表現をメモリ内に生成するように操作可能であり、
    前記手順は、
    前記プログラムコード中で参照される場合にレジスタを表す複数のレジスタオブジェクトを生成すること、
    前記複数のレジスタオブジェクトによって、少なくとも1つの可変サイズのレジスタを表すことであって、前記プログラムコードにおいて参照される場合に1つのレジスタオブジェクトは前記可変サイズのレジスタの各あり得るサイズについて提供される、前記表すことと
    を含み、
    前記手順は表現オブジェクトを前記コンピュータに生成させることをさらに含み、前記プログラムコードの要素が前記プログラム中に生じる場合に各表現オブジェクトは前記プログラムコードの個々の演算子又はオペランドを表し、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1以上の前記レジスタオブジェクトによって参照される、前記第2のコンピュータ
  8. 前記可変サイズのレジスタに対する前記プログラム中の書込み命令に応答して、前記手順は、前記適切なサイズに対応する前記レジスタオブジェクトに書き込むこと及びどのレジスタオブジェクトが有効データを含むかのレコードを維持することによって前記中間表現において前記書込み命令を表すことを含む、請求項7に記載の第2のコンピュータ
  9. 前記可変サイズのレジスタからの前記プログラムコード中の読込み命令に応答して、前記手順は、前記可変サイズのレジスタから読込む場合に、前記同じ効果をもたらすように組み合わされなければならない複数の対応するレジスタオブジェクト中に有効データがあるかどうかを前記レコードから判定し、
    そのような組み合わせが必要でないと判定された場合は、前記適切なレジスタオブジェクトから読込み、
    そのような組み合わせが必要であると判定された場合は、適切なレジスタオブジェクトの内容を組み合わせて読取り値を提供する、請求項7又は8に記載の第2のコンピュータ
  10. 第1のコンピュータのために書かれたプログラムコードをエミュレートして実行可能な第2のコンピュータあって、前記プログラムコードは複数の種々の幅において前記プログラムコードによってアドレス可能である少なくとも1つの可変サイズのレジスタを含むレジスタのセットを参照し、前記第2のコンピュータ下記手順によって前記プログラムコードの中間表現をメモリ内に生成するように操作可能であり、
    前記手順は、
    前記可変サイズのレジスタに対する或るフィールドの幅の各書込み命令について、前記同じ幅の前記レジスタオブジェクトを書き込むこと、
    レジスタオブジェクトが有効データを含むレコードを維持すること、
    所与のフィールド幅の各読込み命令について、組み合わされなければならない前記レジスタオブジェクトの複数において有効データがあるかどうかを前記レコードから判定すること、
    そのような組み合わせが必要でないと判定された場合は、前記適切なレジスタオブジェクトから読込むこと、
    そのような組み合わせが必要であると判定された場合は、前記適切なレジスタオブジェクトの内容を組み合わせること
    を含む、前記第2のコンピュータ
  11. 前記判定することにおいて、そのような組み合わせが必要であるかを判定することが、種々のサイズのレジスタオブジェクトの各セットに関連して以下の条件、
    すなわち
    アクセスに必要とされるデータが1つの有効レジスタオブジェクト内に完全にある場合は、そのレジスタオブジェクトだけがアクセスされ、
    アクセスのために必要とされるデータが複数の有効レジスタオブジェクト内にある場合は、データは、前記アクセスを行うためにそれらの有効レジスタオブジェクトから組み合わされる、
    に従って判定される、請求項10に記載の第2のコンピュータ
  12. 前記手順が、表現オブジェクトを生成することをさらに含み、各表現オブジェクトが前記プログラム中に生じる場合に各表現オブジェクトは前記プログラムコードの種々の演算子又はオペランドを表し、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1つのレジスタオブジェクトによって参照される、請求項10又は11に記載の第2のコンピュータ
  13. 下記手順によってサブジェクトコードをターゲットコードに変換するために操作可能なコンピュータであって、
    前記手順は、
    (a)少なくとも1つの可変サイズのレジスタを有するサブジェクトプロセッサの命令セット中で表現されるサブジェクトコードを受信することであって前記可変サイズのレジスタは、当該可変サイズのレジスタの完全長の一部又は全部をオーバーレイする複数の種々の幅のサブフィールド中のサブジェクトコードによってアクセス可能であり、前記サブジェクトコードは前記可変サイズのレジスタに関連する少なくとも書込み命令及び読込み命令を含む、前記受信すること、
    (b)前記サブジェクトコードからの中間表現をメモリ内に生成することであって、
    関連付けられたレジスタオブジェクトのセットを生成することであって、各レジスタオブジェクトは前記可変サイズのレジスタの種々の幅の細部フィールドを表す、前記生成すること、
    前記同じ幅の前記レジスタオブジェクトに対する書込み命令として、前記可変サイズのレジスタに対する或るサブフィールド幅のサブジェクトコードにおいて各書込み命令を表すこと、そして、前記レジスタオブジェクトが有効データを含むレコードを保持することであって、当該レコードは、そのような書込み命令のそれぞれに応じて更新される、前記保持すること、
    前記読込命令が前記サブジェクトコード中の前記可変サイズのレジスタ上で実行される場合に、前記同じ効果をもたらすように組み合わされなければならないレジスタオブジェクトの前記複数の関連付けられたセット中の有効データがあることを前記レコードから判定すること、そして、
    (i)そのような組み合わせが必要でないと判定された場合は、適切なレジスタオブジェクトから直接に読み取ること、
    (ii)そのような組み合わせが必要であると判定された場合は、適切なレジスタオブジェクトの内容を組み合わせること
    によって複数のレジスタオブジェクトからの読込み命令として、実行される前記可変サイズのレジスタからの或るサブフィールド幅の前記サブジェクトコードにおいて各読込み命令を表すこと
    を含む、前記生成すること、
    (c)ターゲットプロセッサの命令セット中に表現されるターゲットコードに前記中間表現を変換することであって、前記決定されたレジスタオブジェクトを前記ターゲットプロセッサのレジスタに割り当てること、前記中間表現中に定義された書込み命令及び読取り命令に従い、前記割り当てられたターゲットレジスタに書込み、且つそれから読込まれるターゲットコード命令を生成することを含む、前記変換すること
    を含む、前記コンピュータ
JP2010094371A 1998-10-10 2010-04-15 プログラムコード変換方法 Expired - Lifetime JP4640684B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB9822075.9A GB9822075D0 (en) 1998-10-10 1998-10-10 Program code conversion
US11595299P 1999-01-14 1999-01-14

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2000576360A Division JP4573189B2 (ja) 1998-10-10 1999-10-11 プログラムコード変換方法

Publications (2)

Publication Number Publication Date
JP2010198628A JP2010198628A (ja) 2010-09-09
JP4640684B2 true JP4640684B2 (ja) 2011-03-02

Family

ID=26314485

Family Applications (5)

Application Number Title Priority Date Filing Date
JP2000576360A Expired - Fee Related JP4573189B2 (ja) 1998-10-10 1999-10-11 プログラムコード変換方法
JP2010094370A Expired - Lifetime JP4640683B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法
JP2010094369A Expired - Lifetime JP4709933B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法
JP2010094372A Expired - Lifetime JP4640685B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法
JP2010094371A Expired - Lifetime JP4640684B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法

Family Applications Before (4)

Application Number Title Priority Date Filing Date
JP2000576360A Expired - Fee Related JP4573189B2 (ja) 1998-10-10 1999-10-11 プログラムコード変換方法
JP2010094370A Expired - Lifetime JP4640683B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法
JP2010094369A Expired - Lifetime JP4709933B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法
JP2010094372A Expired - Lifetime JP4640685B2 (ja) 1998-10-10 2010-04-15 プログラムコード変換方法

Country Status (8)

Country Link
US (11) US7426722B2 (ja)
EP (3) EP1380946B1 (ja)
JP (5) JP4573189B2 (ja)
AT (2) ATE293808T1 (ja)
AU (1) AU6211899A (ja)
DE (2) DE69924857T2 (ja)
ES (1) ES2340370T3 (ja)
WO (1) WO2000022521A1 (ja)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4573189B2 (ja) * 1998-10-10 2010-11-04 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムコード変換方法
US7058932B1 (en) * 1999-04-19 2006-06-06 Unisys Corporation System, computer program product, and methods for emulation of computer programs
US7353163B2 (en) * 1999-04-27 2008-04-01 Transitive Limited Exception handling method and apparatus for use in program code conversion
US6802056B1 (en) * 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
GB0315165D0 (en) * 2003-05-02 2003-08-06 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
GB2411990B (en) * 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
KR20060063800A (ko) * 2003-06-18 2006-06-12 앰브릭, 인크. 집적 회로 개발 시스템
US20070186076A1 (en) * 2003-06-18 2007-08-09 Jones Anthony M Data pipeline transport system
US7617490B2 (en) * 2003-09-10 2009-11-10 Intel Corporation Methods and apparatus for dynamic best fit compilation of mixed mode instructions
US20050102488A1 (en) * 2003-11-07 2005-05-12 Bullis George A. Firmware description language for accessing firmware registers
US7770034B2 (en) * 2003-12-16 2010-08-03 Intel Corporation Performance monitoring based dynamic voltage and frequency scaling
US8694802B2 (en) * 2004-04-30 2014-04-08 Apple Inc. System and method for creating tamper-resistant code
US7464375B2 (en) * 2004-06-24 2008-12-09 International Business Machines Corporation Method for flattening hierarchically structured flows
JP4846226B2 (ja) * 2004-10-26 2011-12-28 株式会社日立ソリューションズ 情報処理装置、情報処理方法、およびプログラム
US7861234B1 (en) * 2005-02-23 2010-12-28 Oracle America, Inc. System and method for binary translation to improve parameter passing
KR101244063B1 (ko) 2005-03-11 2013-03-19 인터내셔널 비지네스 머신즈 코포레이션 프로그램 코드 변환시의 실행 제어
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
GB2424727B (en) 2005-03-30 2007-08-01 Transitive Ltd Preparing instruction groups for a processor having a multiple issue ports
GB2425372B (en) 2005-04-20 2007-06-13 Transitive Ltd Method and apparatus for precise handling of exceptions during program code conversion
US7805708B2 (en) * 2005-05-13 2010-09-28 Texas Instruments Incorporated Automatic tool to eliminate conflict cache misses
KR100725393B1 (ko) * 2005-05-19 2007-06-07 삼성전자주식회사 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
WO2006131695A1 (en) 2005-06-04 2006-12-14 Transitive Limited Method and apparatus for combined execution of native code and target code during program code conversion
GB2426840A (en) 2005-06-04 2006-12-06 Transitive Ltd Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion.
GB2427045B (en) 2005-06-06 2007-11-21 Transitive Ltd Method and apparatus for converting program code with access coordination for a shared resource
US7757289B2 (en) * 2005-12-12 2010-07-13 Finjan, Inc. System and method for inspecting dynamically generated executable code
GB0525597D0 (en) * 2005-12-16 2006-01-25 Isis Innovation Emulation system
US9830174B2 (en) * 2005-12-22 2017-11-28 Synopsys, Inc. Dynamic host code generation from architecture description for fast simulation
US7792666B2 (en) * 2006-05-03 2010-09-07 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
US7813909B2 (en) * 2006-05-03 2010-10-12 Sony Computer Entertainment Inc. Register mapping in emulation of a target system on a host system
US7770050B2 (en) * 2006-05-03 2010-08-03 Sony Computer Entertainment Inc. Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code
GB2435531A (en) * 2006-02-27 2007-08-29 Sharp Kk Control Flow Protection Mechanism
US8751946B2 (en) * 2006-04-05 2014-06-10 International Business Machines Corporation Enhanced display of properties for a program object
US8812556B2 (en) * 2006-04-06 2014-08-19 International Business Machines Corporation Storing modification data for recreating modifications
US7716653B2 (en) * 2006-04-06 2010-05-11 International Business Machines Corporation Configurable importers and resource writers for converting data into another format
WO2007130805A2 (en) * 2006-05-03 2007-11-15 Sony Computer Entertainment Inc. Translation block invalidation prehints in emulation of a target system on a host system
JP4778359B2 (ja) * 2006-05-17 2011-09-21 エヌイーシーコンピュータテクノ株式会社 エミュレーション方法及びコンピュータシステム
US8375368B2 (en) * 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US8108844B2 (en) 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US8443348B2 (en) 2006-06-20 2013-05-14 Google Inc. Application program interface of a parallel-processing computer system that supports multiple programming languages
US8136104B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
US8146066B2 (en) 2006-06-20 2012-03-27 Google Inc. Systems and methods for caching compute kernels for an application running on a parallel-processing computer system
US7814486B2 (en) * 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8136102B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using a parallel-processing computer system
US8024708B2 (en) 2006-06-20 2011-09-20 Google Inc. Systems and methods for debugging an application running on a parallel-processing computer system
US8381202B2 (en) * 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in a parallel-processing computer system
GB2442495B (en) 2006-10-02 2009-04-01 Transitive Ltd Method and apparatus for handling dynamically linked function cells with respect to program code conversion
GB2442566B (en) 2006-10-02 2009-02-11 Transitive Ltd Computer system and method of adapting a computer system to support a register window architecture
GB2442497B (en) 2006-10-02 2010-03-31 Transitive Ltd Method and apparatus for administering a process filesystem with respect to program code conversion
WO2008047351A2 (en) * 2006-10-19 2008-04-24 Checkmarx Ltd. Locating security vulnerabilities in source code
GB0623276D0 (en) 2006-11-22 2007-01-03 Transitive Ltd Memory consistency protection in a multiprocessor computing system
US8341609B2 (en) * 2007-01-26 2012-12-25 Oracle International Corporation Code generation in the presence of paged memory
US8413125B2 (en) 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
US8601452B2 (en) * 2007-03-02 2013-12-03 Oracle International Corporation Compiler for JAVA and .NET
GB2447968B (en) 2007-03-30 2010-07-07 Transitive Ltd Improvements in and relating to floating point operations
US8245202B2 (en) * 2007-04-18 2012-08-14 Sony Computer Entertainment Inc. Processor emulation using speculative forward translation
GB2448523B (en) 2007-04-19 2009-06-17 Transitive Ltd Apparatus and method for handling exception signals in a computing system
US20090122067A1 (en) * 2007-11-13 2009-05-14 Microsoft Corporation Open fonts including human-readable fonts for compilation
US8060356B2 (en) 2007-12-19 2011-11-15 Sony Computer Entertainment Inc. Processor emulation using fragment level translation
US7991915B2 (en) * 2008-05-05 2011-08-02 Sentilla Corporation Software platform for radio network
GB0813833D0 (en) 2008-07-29 2008-09-03 Transitive Ltd Apparatus and method for handling page protection faults in a computing system
US8346531B2 (en) * 2008-11-05 2013-01-01 Oracle America, Inc. Handling mutex locks in a dynamic binary translation across heterogeneous computer systems
EP2216695B1 (de) * 2009-02-09 2013-03-27 Siemens Aktiengesellschaft Verfahren zum Betrieb eines Automatisierungssystems, korrespondierendes Computerprogramm und System oder Gerät, das nach dem Verfahren arbeitet
US8276128B2 (en) * 2009-07-14 2012-09-25 Unisys Corporation Systems, methods, and computer programs for dynamic binary translation in a master control program interpreter
US8024374B2 (en) * 2009-07-24 2011-09-20 Oracle International Corporation Computer object conversion using an intermediate object
KR101247259B1 (ko) * 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
WO2012025865A1 (en) 2010-08-24 2012-03-01 Checkmarx Ltd. Mining source code for violations of programming rules
JP5614348B2 (ja) * 2011-03-18 2014-10-29 富士通株式会社 命令処理方法、命令処理装置、及び命令処理プログラム
US20130024674A1 (en) 2011-07-20 2013-01-24 International Business Machines Corporation Return address optimisation for a dynamic code translator
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
WO2013048468A1 (en) * 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
US8600727B2 (en) * 2011-10-11 2013-12-03 Unisys Corporation Streamlined execution of emulated code using block-based translation mode
TW201339861A (zh) 2012-03-30 2013-10-01 Ibm 提供較小目標編碼空間之碼轉換的方法、電腦裝置與程式產品
US9195442B2 (en) * 2012-07-10 2015-11-24 Oracle International Corporation System and method for compiling lambda expression in a programming language environment
US9262416B2 (en) 2012-11-08 2016-02-16 Microsoft Technology Licensing, Llc Purity analysis using white list/black list analysis
US8752021B2 (en) * 2012-11-08 2014-06-10 Concurix Corporation Input vector analysis for memoization estimation
RU2514142C1 (ru) * 2012-12-25 2014-04-27 Закрытое акционерное общество "Лаборатория Касперского" Способ повышения эффективности работы аппаратного ускорения эмуляции приложений
US9152400B2 (en) 2013-04-18 2015-10-06 Facebook, Inc. Eliminating redundant reference count operations in intermediate representation of script code
US8990789B2 (en) * 2013-04-18 2015-03-24 Facebook, Inc. Optimizing intermediate representation of script code by eliminating redundant reference count operations
KR101462347B1 (ko) * 2013-07-08 2014-12-04 충북대학교 산학협력단 가상 머신 바이너리 변환 방법
EP3049921A4 (en) * 2013-09-26 2017-05-17 Intel Corporation Methods and apparatus to validate translated guest code in a dynamic binary translator
US20160187862A1 (en) * 2014-12-29 2016-06-30 Sling Media Pvt Ltd Systems and methods for home automation via a media device
EP3427148B1 (en) 2016-03-11 2022-01-12 LZLabs GmbH Load module compiler
US10191745B2 (en) * 2017-03-31 2019-01-29 Intel Corporation Optimized call-return and binary translation
US11087002B2 (en) 2017-05-10 2021-08-10 Checkmarx Ltd. Using the same query language for static and dynamic application security testing tools
US10998937B2 (en) 2019-04-30 2021-05-04 Bank Of America Corporation Embedded tag for resource distribution
US11196737B2 (en) 2019-04-30 2021-12-07 Bank Of America Corporation System for secondary authentication via contactless distribution of dynamic resources
US11234235B2 (en) 2019-04-30 2022-01-25 Bank Of America Corporation Resource distribution hub generation on a mobile device
US11074055B2 (en) * 2019-06-14 2021-07-27 International Business Machines Corporation Identification of components used in software binaries through approximate concrete execution
WO2021225901A1 (en) * 2020-05-04 2021-11-11 Lingua Robotica, Inc. Techniques for converting natural speech to programming code
IL285079B2 (en) 2020-07-28 2024-07-01 Checkmarx Ltd Discovery of exploitable routes in application software that uses third-party libraries
WO2022265411A1 (ko) * 2021-06-16 2022-12-22 주식회사 모레 프로그램의 중간표현에 대한 최적화 적용 가능성을 판단하는 방법 및 시스템
US11900087B1 (en) * 2022-03-23 2024-02-13 Amazon Technologies, Inc. Application binary replatforming as a service
WO2023248424A1 (ja) * 2022-06-23 2023-12-28 日本電気株式会社 演算装置、演算方法、および、記録媒体

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US549121A (en) * 1895-11-05 Deflector for blast-stackers
US467290A (en) * 1892-01-19 Paint-can
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPS63245529A (ja) 1987-03-31 1988-10-12 Toshiba Corp レジスタ退避復元装置
JP2958386B2 (ja) 1988-09-30 1999-10-06 富士ゼロックス株式会社 計算機システム
JPH0695309B2 (ja) 1988-12-02 1994-11-24 日本電気株式会社 中間言語テキストの再利用方式
JP2834171B2 (ja) * 1989-02-06 1998-12-09 株式会社日立製作所 コンパイル方法
JPH0630063B2 (ja) * 1989-02-17 1994-04-20 株式会社東芝 マイクロプロセッサ
JPH02236638A (ja) * 1989-03-10 1990-09-19 Hitachi Ltd レジスタ割付け管理方式
US5119465A (en) * 1989-06-19 1992-06-02 Digital Equipment Corporation System for selectively converting plurality of source data structures through corresponding source intermediate structures, and target intermediate structures into selected target structure
US5274820A (en) * 1989-08-14 1993-12-28 International Business Machines Corporation Method and system for eliminating operation codes from intermediate prolog instructions
JPH03229327A (ja) * 1990-02-05 1991-10-11 Mitsubishi Electric Corp 計算機プログラム実行方式
US5210837A (en) * 1990-06-15 1993-05-11 Digital Equipment Corporation Methods and apparatus for transforming machine language program control into high-level language constructs by manipulating graphical program representations
US5659753A (en) 1991-02-27 1997-08-19 Digital Equipment Corporation Interface for symbol table construction in a multilanguage optimizing compiler
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
JPH04316133A (ja) * 1991-04-15 1992-11-06 Nec Corp プログラムのインタプリタ処理方式
JP3602857B2 (ja) * 1991-04-23 2004-12-15 株式会社日立製作所 多機種対応型情報処理システム、および、方法
JPH0553821A (ja) * 1991-06-17 1993-03-05 Fujitsu Ltd コンパイル処理方式
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
US5448737A (en) * 1992-03-17 1995-09-05 International Business Machines Corporation System and method for optimizing computer code using a compact data flow representation
JP3450382B2 (ja) * 1992-09-24 2003-09-22 株式会社東芝 画像処理装置
US5491821A (en) * 1993-02-24 1996-02-13 International Business Machines Corporation Method and system for incremental processing of computer objects
US5471633A (en) * 1993-09-30 1995-11-28 Intel Corporation Idiom recognizer within a register alias table
JP3276479B2 (ja) * 1993-10-05 2002-04-22 富士通株式会社 コンパイル方式
US5787285A (en) * 1995-08-15 1998-07-28 International Business Machines Corporation Apparatus and method for optimizing applications for multiple operational environments or modes
JPH09171467A (ja) * 1995-12-21 1997-06-30 Nec Corp エミュレーション装置及びその方法
US5850554A (en) * 1995-12-29 1998-12-15 Intel Corporation Compiler tool set for efficiently generating and easily managing multiple program versions of different types
FR2743646B1 (fr) * 1996-01-12 1998-03-06 Sgs Thomson Microelectronics Coprocesseur d'arithmetique modulaire comportant un circuit de division entiere
FR2743907B1 (fr) * 1996-01-18 1998-02-27 Sgs Thomson Microelectronics Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
US6226789B1 (en) 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
US5901317A (en) 1996-03-25 1999-05-04 Sun Microsystems, Inc. Method and system for register allocation using multiple interference graphs
JPH09265400A (ja) * 1996-03-28 1997-10-07 Hitachi Ltd コンパイル最適化方式
US5805895A (en) * 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5901316A (en) * 1996-07-01 1999-05-04 Sun Microsystems, Inc. Float register spill cache method, system, and computer program product
US5832205A (en) 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
US6199152B1 (en) * 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
US5872950A (en) * 1997-03-31 1999-02-16 International Business Machines Corporation Method and apparatus for managing register renaming including a wraparound array and an indication of rename entry ages
US5784588A (en) * 1997-06-20 1998-07-21 Sun Microsystems, Inc. Dependency checking apparatus employing a scoreboard for a pair of register sets having different precisions
EP0991994A4 (en) 1997-06-25 2001-11-28 Transmeta Corp IMPROVED MICROPROCESSOR
US6072953A (en) * 1997-09-30 2000-06-06 International Business Machines Corporation Apparatus and method for dynamically modifying class files during loading for execution
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
FR2775369B1 (fr) * 1998-02-26 2001-08-03 Sgs Thomson Microelectronics Procede de mise en oeuvre d'une multiplication modulaire specifique relative a la methode de montgomery
US6820266B1 (en) * 1998-02-27 2004-11-16 Oracle International Corporation Application code conversion architecture
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
KR20010072477A (ko) 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
JP4573189B2 (ja) * 1998-10-10 2010-11-04 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムコード変換方法
US6463582B1 (en) * 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US7353163B2 (en) * 1999-04-27 2008-04-01 Transitive Limited Exception handling method and apparatus for use in program code conversion
US7143401B2 (en) * 2000-02-17 2006-11-28 Elbrus International Single-chip multiprocessor with cycle-precise program scheduling of parallel execution
US7536682B2 (en) * 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
US7200841B2 (en) * 2003-04-22 2007-04-03 Transitive Limited Method and apparatus for performing lazy byteswapping optimizations during program code conversion
US7543284B2 (en) * 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion

Also Published As

Publication number Publication date
US20030033596A1 (en) 2003-02-13
EP1385090B1 (en) 2012-06-13
ATE457492T1 (de) 2010-02-15
US20020100030A1 (en) 2002-07-25
US20070256063A1 (en) 2007-11-01
EP1119807A1 (en) 2001-08-01
US20030126588A1 (en) 2003-07-03
US7409680B2 (en) 2008-08-05
US20030088859A1 (en) 2003-05-08
JP4640683B2 (ja) 2011-03-02
US20030106050A1 (en) 2003-06-05
JP2002527815A (ja) 2002-08-27
US20070250824A1 (en) 2007-10-25
US7203933B2 (en) 2007-04-10
US20040205733A1 (en) 2004-10-14
US20040210880A1 (en) 2004-10-21
JP2010225162A (ja) 2010-10-07
US8037461B2 (en) 2011-10-11
DE69942011D1 (de) 2010-03-25
JP4709933B2 (ja) 2011-06-29
ES2340370T3 (es) 2010-06-02
US7421686B2 (en) 2008-09-02
EP1385090A3 (en) 2007-08-29
US20030159134A1 (en) 2003-08-21
EP1385090A2 (en) 2004-01-28
US7203934B2 (en) 2007-04-10
ATE293808T1 (de) 2005-05-15
EP1380946A3 (en) 2007-08-15
JP4573189B2 (ja) 2010-11-04
US7346900B2 (en) 2008-03-18
WO2000022521A1 (en) 2000-04-20
US8006237B2 (en) 2011-08-23
US7210133B2 (en) 2007-04-24
US7328431B2 (en) 2008-02-05
EP1119807B1 (en) 2005-04-20
US7356810B2 (en) 2008-04-08
EP1380946B1 (en) 2010-02-10
JP2010198629A (ja) 2010-09-09
US20030149965A1 (en) 2003-08-07
DE69924857T2 (de) 2006-03-02
US7426722B2 (en) 2008-09-16
DE69924857D1 (de) 2005-05-25
JP4640685B2 (ja) 2011-03-02
EP1380946A2 (en) 2004-01-14
JP2010211816A (ja) 2010-09-24
JP2010198628A (ja) 2010-09-09
AU6211899A (en) 2000-05-01

Similar Documents

Publication Publication Date Title
JP4640684B2 (ja) プログラムコード変換方法
US5577253A (en) Analyzing inductive expressions in a multilanguage optimizing compiler
IL100987A (en) Method and device for encoding
IL100990A (en) Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
US6658655B1 (en) Method of executing an interpreter program
AU663311B2 (en) Multilanguage optimizing compiler using templates in multiple pass code generation
JPH02176938A (ja) 機械語命令最適化方式
IE920608A1 (en) Interface for symbol table construction in a multilanguage¹optimizing compiler

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20100924

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100924

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20101116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20101116

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20101116

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20101119

R150 Certificate of patent or registration of utility model

Ref document number: 4640684

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131210

Year of fee payment: 3

EXPY Cancellation because of completion of term