JP4573189B2 - プログラムコード変換方法 - Google Patents
プログラムコード変換方法 Download PDFInfo
- Publication number
- JP4573189B2 JP4573189B2 JP2000576360A JP2000576360A JP4573189B2 JP 4573189 B2 JP4573189 B2 JP 4573189B2 JP 2000576360 A JP2000576360 A JP 2000576360A JP 2000576360 A JP2000576360 A JP 2000576360A JP 4573189 B2 JP4573189 B2 JP 4573189B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- representation
- objects
- processor
- expression
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime 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)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Stored Programmes (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Description
本発明は、プログラムコードをあるフォーマットから別のフォーマットに変換するための方法及びシステムに関する。特に、本発明は、コンピュータプログラム又はプログラムのBasic Blockの中間表現を提供するための方法及びシステムに関する(プログラムのBasic Blockとは、ただ1つのエントリーポイントを第1の命令に有し、ただ1つのエクジットポイントをそのブロックの最後の命令に有する、命令のブロックである)。例えば本発明は、あるプロセッサ用に書かれたコンピュータプログラムを異なるプロセッサ上で効率的に実行できるように変換するための方法及びシステムを提供する。この変換は、中間表現を利用し、ブロックごとのモードで行われる。
【0002】
中間表現とは、プログラムを表現できるが、どの特定プロセッサにも特有ではなく、どのプロセッサ上で直接に実行するようにも意図されていない抽象的なコンピュータ言語の形式を呼ぶのに、コンピュータ業界で広く使用されている用語である。例えば、中間表現は一般に、プログラムの最適化を可能にするために作成される。例えばコンパイラは、高級言語コンピュータプログラムを中間表現に変換し、その中間表現に様々な最適化技術を適用することによってプログラムを最適化し、次いで、最適化した中間表現を実行可能バイナリコードに変換することになる。中間表現はまた、プログラムを、どのプロセッサにも特有ではない形式でインターネットを横断して送信できるようにもする。例えばSun Microsystemsは、この目的のためにバイトコードと呼ばれる中間表現の形式を開発した。バイトコードは、周知のJava(商標)ランタイムシステムが採用されたプロセッサ上ならどんなプロセッサ上にも実装することができる。
【0003】
中間表現はまた、バイナリ変換を採用するエミュレーション・システムによっても一般的に使用されている。このタイプのエミュレーション・システムは、所与のプロセッサタイプ用にコンパイルされたソフトウェアコードを取り込み、それを中間表現に変換し、その中間表現を最適化し、次いでその中間表現を別のプロセッサタイプ上で実行できるコードに変換する。中間表現生成の最適化は、エミュレートされたプログラムを実行するのに必要なコードの量を最小限に抑えるのに使用される周知のプロシージャである。中間表現の最適化には、周知の様々な方法が存在する。
【0004】
バイナリ変換を行うために中間表現を使用する周知のエミュレーション・システムの一例は、AT&Tによって運営されるFlashPortシステムである。顧客は、変換すべきプログラムをAT&Tに提供する(プログラムは第1のタイプのプロセッサ上で実行されるようにコンパイルされている)。プログラムは、AT&Tによって中間表現に変換され、中間表現は、技術者の補助により自動最適化ルーチンのアプリケーションを介して最適化される。技術者は、最適化ルーチンが失敗したときに入力を提供する。最適化された中間変換は、次いでAT&Tによって所望のタイプのプロセッサ上で実行できるコードに変換される。このような、実行される前にプログラム全体が変換されるタイプのバイナリ変換は、「静的」バイナリ変換と呼ばれる。変換時間は、数カ月までのどんな時間になる可能性もある。
【0005】
エミュレーションの代替形式では、サブジェクトプロセッサ(すなわち、コードがそれに向けて書かれている、エミュレートされることになる第1のタイプのプロセッサ)のコードのプログラムが、中間表現を介してBasic Blockでターゲットプロセッサ(すなわち、エミュレーションがその上で行われる第2のタイプのプロセッサ)のコードに変換される。
【0006】
本発明の第1の態様の一目的は、プログラムコードの中間表現を生成する方法を提供することであり、この方法は、抽象レジスタを表す複数のレジスタオブジェクトを生成するコンピュータ実施ステップであって、単一のレジスタオブジェクトがそれぞれの抽象レジスタを表すコンピュータ実施ステップと、
表現オブジェクトを生成するコンピュータ実施ステップであって、各表現オブジェクトが、プログラム中に生じる異なるサブジェクトコード要素を表し、直接的に、又は他の表現オブジェクトからの参照を介して間接的に関係するレジスタオブジェクトから参照されるコンピュータ実施ステップとを含む。
サブジェクトコードの要素は、サブジェクトコード命令の演算又は副次演算である。各サブジェクトコード命令はこのような要素をいくつか含むこともでき、したがって、いくつかの表現オブジェクトを生成して、単一のサブジェクトコード命令を表すこともできる。
【0007】
また本発明の第1の態様によれば、プログラム可能なマシン上で実行するために書かれたコンピュータプログラムコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、
前記オブジェクトは、すべてのレジスタオブジェクトをネットワークの最下部の基本ルート又はツリートランクのレベルに有する分岐したツリーのようなネットワークに構成され、レジスタオブジェクトは他のどのレジスタオブジェクトにも供給されない。
中間表現を形成するときは、中間表現によって表されているサブジェクトプロセッサの状況(例えばそのレジスタ又はメモリ空間の状況)の表現を含めることが必要である。本発明ではこれは、抽象レジスタを作成することにより、特に効率的な方式で行われる。
【0008】
本発明によれば、所与の抽象レジスタを表すのに単一のレジスタオブジェクトしか生成する必要がなく(これは、初期化時にすべての抽象レジスタに対して行うことが好ましい)、各抽象レジスタの状態は、対応するレジスタオブジェクトから参照される表現オブジェクトによって定義される。所与のレジスタオブジェクトから複数の表現オブジェクトが参照される場合、レジスタオブジェクトをその「ルート」として有する表現オブジェクトの「ツリー」が生成される。各レジスタオブジェクトから参照される表現ツリーは、共に「表現フォレスト」を形成することになる。
【0009】
本発明の利点は、いずれかの所与の表現オブジェクトを複数のレジスタに関連付けることができることであり、したがって、異なるいくつかのレジスタによって使用される表現をこれらのレジスタそれぞれに別個に作成して割り当てる必要はなく、一度だけ作成して各レジスタに関連付ければよい。言い換えれば、表現ツリーは、複数のレジスタオブジェクトから参照される表現オブジェクトによって相互にリンクさせることができる。したがって、所与の表現オブジェクトを、表現フォレスト内のいくつかの表現ツリーに共通とすることができる。同じ表現のコピーを複数作成することを避けることにより、本発明は、中間表現を作成するのに必要な時間を削減し、中間表現に占有されるメモリ空間を削減する。
【0010】
本発明の別の利点は、冗長になる表現を非常に効率的に識別できることである。新しい表現がレジスタオブジェクトに割り当てられたとき、以前にそのレジスタオブジェクトから参照されていた表現は、他のレジスタオブジェクトから参照されていない限り冗長になる。これらの多重参照は、以下に述べる参照カウンティングを使用して検出される。
【0011】
いずれかの所与の表現オブジェクトは、それから他の表現オブジェクトへの参照と、他の表現オブジェクト又は抽象レジスタからそれへの参照とを有することができる。各表現オブジェクトにつながる参照の数のカウントが維持されることが好ましい。表現オブジェクトへの(レジスタ又は別の表現オブジェクトからの)参照が作成又は除去されるたびに、その表現オブジェクトに対するカウントが調整される。所与の表現オブジェクトに対するカウントが0であるのは、その表現オブジェクトにつながる参照がなく、したがってその表現オブジェクトが冗長であることを示す。所与の表現オブジェクトに対するカウントが0であるとき、その表現オブジェクトは、中間表現から除去されることが好ましい。
【0012】
ある表現オブジェクトが除去されるとき、その表現オブジェクトからつながるすべての参照が削除されることにより、参照先である各表現オブジェクトはその参照カウントをデクリメントする。このデクリメントされた値が0に達したとき、今度はその参照先オブジェクトを除去することができ、それにより、そのオブジェクトの参照先であるオブジェクトがそれらの参照カウントをデクリメントする。
【0013】
したがって、本発明の中間表現によれば、効率的に冗長コードを突き止めて除去することができる。バイナリ変換プログラムでは、レジスタの内容が定義された後に一度も使用されることなく再定義されるとき、冗長コードが頻繁に現れる。知られている既存の中間表現は、所与のレジスタの内容がいつ定義されたか、及びそのレジスタの内容がいつ使用されたかを示す記録を保持することを必要とする。この記録保持は、非効率的な冗長コード識別方法である。本発明では、冗長コードは、レジスタオブジェクトへの割当ての順序及びレジスタオブジェクトの使用から即座に明らかとなる。
【0014】
本発明の第2の態様によれば、プログラム可能なマシン上で実行するために書かれたコンピュータコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、
少なくとも1つの可変サイズのレジスタが複数のレジスタオブジェクトによって表され、可変サイズのレジスタの可能な各サイズにつき1つのレジスタオブジェクトが提供される。
【0015】
この本発明の第2の態様によれば、可変サイズのレジスタを少なくとも1つ備えるサブジェクトプロセッサの命令セットで表されたプログラムコードの中間表現を生成する方法が提供され、この方法は、
1つの又はそれぞれの可変サイズのプロセッサレジスタを表す、関連する抽象レジスタオブジェクトのセットを生成するコンピュータ実施ステップであって、このセットが可変サイズの各レジスタの可能な各幅につき1つの抽象レジスタを含むコンピュータ実施ステップと、
可変サイズのレジスタへのあるフィールド幅の書込み動作ごとに、同じ幅の抽象レジスタに書き込むコンピュータ実施ステップと、
どの抽象レジスタが有効データを含むかの記録を保持するコンピュータ実施ステップであって、この記録が書込み動作ごとに更新されるコンピュータ実施ステップと、
有効データが前記異なるサイズの抽象レジスタのセットのうちの1つ以上あってそれらを可変サイズのレジスタに対して行われる同じ読取り動作と同じ効果をもたらすように結合しなければならないかどうかを、所与のフィールド幅の書込み動作ごとに前記記録から判定するコンピュータ実施ステップと、
a)そのように結合が必要とされないと判定された場合は、適切なレジスタから直接に読み取り、あるいは
b)複数のレジスタからのデータをそのように結合しなければならないと判定された場合は、それらのレジスタの内容を結合するコンピュータ実施ステップを含む。
【0016】
上記において可変サイズのレジスタとは、サブフィールドに値を書き込み、レジスタの幅全体の一部をオーバーレイすることによって、その内容を修正することができるレジスタを意味する。
【0017】
複数のレジスタからデータを結合しなければならないか否か、また結合しなければならない場合にはどれを結合しなければならないかは、異なるサイズの抽象レジスタの各セットに関して以下の条件に従って決定することができる。
i)アクセスに必要とされるデータが1つの有効抽象レジスタ内に完全にある場合は、そのレジスタだけがアクセスされる。
ii)アクセスに必要とされるデータが複数の有効抽象レジスタ内にある場合は、それらの有効抽象レジスタからデータが結合されて、アクセスが行われる。
【0018】
例えば、Motolora68000シリーズを含めた周知のサブジェクトプロセッサでは、以下のとき、上記のステップ(i)に従ってただ1つのレジスタにアクセスすることが必要となる。すなわち、
a)前記抽象レジスタのうち1つだけに有効データがあるときは、そのレジスタがアクセスされる。
b)アクセスの幅に対応するサイズのレジスタ中に有効データがあり、それよりも小さいどのレジスタ中にも有効データがない場合は、そのアクセスの幅にサイズが対応するそのレジスタだけがアクセスされる。
c)有効データを含むレジスタが、アクセスの幅に対応するサイズのレジスタよりも長い場合は、有効データを含むレジスタのうち最小のレジスタがアクセスされる。
【0019】
周知のサブジェクトプロセッサではまた、アクセスに必要とされるデータが複数の有効抽象レジスタ内にあり、したがって2つ又はそれ以上のレジスタからのデータを結合しなければならない場合、以下のようにして結合を行うことができる。
a)読取り動作の幅に対応するか又はそれよりも小さいサイズの2つ又はそれ以上のレジスタ中に有効データがある場合は、これらの各レジスタからのデータが結合される。
b)読取り動作のサイズに対応するサイズのレジスタ中にデータがなく、より大きいレジスタ及びより小さいレジスタ中にデータがある場合は、これらの各レジスタからのデータが結合される。
【0020】
中間表現が、すべてのレジスタアクセスが同じ幅であるプログラムの領域(1つ又は複数のBasic Blockを含む)を表すときは、抽象レジスタの内容を結合する必要はなく、データは単に、単一の動作で単一の抽象レジスタに書き込むか又はそれから読み取ることができる。したがって、ターゲットプロセッサコードが単純化されることになる。2つの抽象レジスタの内容を結合するより複雑なプロシージャは、いずれかの特定のコード領域が、異なるビット幅のレジスタアクセスを含む場合にのみ必要となる。
【0021】
この本発明の第2の態様は、プロセッサのエミュレーション中、具体的には、エミュレートされるプロセッサが可変サイズのレジスタを利用するときに起こる問題を克服する。対象とするこの問題の性質は、例によって最もよく理解される。 可変サイズのレジスタを使用する命令セットの一例は、Motorola68000アーキテクチャである。68000アーキテクチャでは、「ロング」(.l)と指定された命令は、レジスタ又はメモリ位置の32ビットすべてに作用する。「ワード」(.w)又は「バイト」(.b)と指定された命令は、レジスタ又はメモリ位置のボトム16ビット及びボトム8ビットにしかそれぞれ作用しない。例えば、バイト追加によって繰上がりが生成される場合でも、その繰上がりはレジスタの9番目のビットには伝わらない。可変サイズのレジスタ中で発生する状況は、以下の表1に示す68000コードの例に示される。
【0022】
【表1】
【0023】
この例において、最初の「move.l」命令は、レジスタアドレス「d0」の32ビットすべてに書き込む。これを、レジスタ「d0」を表すボックスの全部分をカバーする薄い方の陰影によって上に示す。「add.b」命令は、レジスタ「d0」のボトム8ビットだけに書き込み、トップ24ビットは「add.b」命令の前の状態と全く同じ状態のままである。レジスタ「d0」の、「add.b」命令によって影響された部分を、濃い方の陰影によって示す。ここで、レジスタ「d0」の全内容が別のレジスタ又はメモリにコピーされる場合、コピーされるボトム8ビットは、「add.b」命令によって生成されたものとなり、コピーされるトップ24ビットは、「move.l」命令によって生成されたものとなる。
【0024】
エミュレーション・システムは、エミュレートしているサブジェクトプロセッサによって使用される各レジスタを表さなければならない。エミュレーションの一部としてプログラムの中間表現が作成されるとき、その中間表現は、どんなアーキテクチャのターゲットプロセッサ上でも実行されるコードに変換できることが好ましい。したがって、好ましくは中間表現は、コードを実行するのに使用されるターゲットプロセッサのタイプに関するどんな仮定も含むべきではない。この場合、回避すべき特定の仮定は、上記の例で述べたように8ビットのデータがレジスタに書き込まれるときにターゲットプロセッサ上の32ビットレジスタの上位24ビットがそれらの既存の形で維持されるであろうという仮定である。この代わりに、8ビットのデータをレジスタの最下位8ビットに書き込み、次いで残りの24ビットを0で埋めることになるターゲットプロセッサもあり得る。中間表現は、(適切なコードに変換された後は)どちらの形式のターゲットプロセッサ上でも実行できるような方式で構築することが好ましい。
【0025】
この問題を克服できる方式の1つは、ターゲットプロセッサレジスタの異なるセクションを適切な方式で操作する複雑な式を作成することであり、この例で必要とされる式は次のようになる。
d0=((d0+x)&0xff)|(d0&0xffffff00)
この式は、ターゲットプロセッサレジスタ上で32ビット追加を行い、ボトム8ビットを抽出し、次いでトップ24ビットをそれらの元の値に復元する。
【0026】
異なる幅のデータを操作する2つの命令間においてある幅のデータを操作する命令を見つける(上に例示した状況)のは普通でない。プログラム中で共にグループ化される同じ幅のデータを操作する命令のグループを見つけることの方が普通である。例えば、プログラムのある領域はバイトのデータ、例えば文字処理コードに作用し、プログラムの別の領域は32ビット幅のデータ、例えばポインタ操作コードに作用する場合がある。独立型コード領域のそれぞれが単一の幅しかないデータに作用するこれらの優勢なケースでは、特別なアクションを行う必要はない。例えば、プログラムの領域がバイトだけを動かし操作している場合、これらのバイト値をターゲットプロセッサの32ビットレジスタに記憶することができ、レジスタのトップ24ビットは、アクセスされることがないので無視される。このプログラムが、次いで16ビット幅データの操作を開始する場合、16ビット演算に関わるターゲットプロセッサレジスタには、何らかのワード演算が行われる前に16ビット項目がロードされる可能性が非常に高く、したがって何の対立も発生しない(すなわちデータのトップ16ビットが無視される)。しかし、バイト値を使用するより早い段階の演算中は、16又は32ビットを使用する演算が発生するまで、レジスタのトップ24ビット(例えば)を保存する必要があるかどうかが分からない。
【0027】
レジスタ中に保持されたビットのすべて又はいくつかを廃棄してよいかどうかが分からないので、対立するオペランド幅を使用する演算を表すために複雑な式を構築する前述の技術は、あらゆる命令に適用しなければ正しく機能しない。したがって、周知の中間表現で使用されるこの技術は、たまにしか発生しない問題を解決するために大きなオーバーヘッドを課す。
【0028】
本発明により、前述のようにサブジェクトプロセッサレジスタの可能な各サイズを表すために別個の抽象レジスタを使用することは、1つのデータ幅しか使用しないプログラム領域の間に追加の処理を必要とせずにデータを中間表現中の抽象レジスタに書き込むか又はそれから動かすことが可能になるので有利である。本発明は、サブジェクトプロセッサレジスタに書き込まれ、それから読み取られる、異なる幅のデータを中間表現が表す必要があるというまれにしか起こらない状況で、計算(すなわち異なる幅のデータの結合)を行うことしか必要としない。
【0029】
本発明の第3の態様は、変換されるコードの量を削減する。サブジェクトコードの特性は以下のとおりである。
i)コードのBasic Blockは、代替かつ未使用の入口条件を有することができる。これは、変換を行う時に検出することができる。
ii)コードのBasic Blockは、代替かつ未使用の可能な効果又は機能を有することができる。一般に、これは、変換されたコードが実行されるときにだけ検出可能となる。
本発明の第3の態様によれば、コンピュータプログラムコードの中間表現を生成する方法が提供され、この方法は、
サブジェクトコードの所与の部分を最初に変換する際に、プログラムコードのその部分を優勢な条件セットで実行するのに必要な中間表現だけを生成及び記憶するコンピュータ実施ステップと、
サブジェクトコードの同じ部分が後で入力されたときは常に、サブジェクトコードのその部分のための中間表現が後続の条件に対して以前に生成及び記憶されたかどうかを判定し、そのような中間表現が以前に生成されていない場合は、サブジェクトコードの前記部分を前記後続の条件で実行するのに必要な追加の中間表現を生成するコンピュータ実施ステップとを含む。
【0030】
本発明の第3の態様は、サブジェクトコードの単一のBasic Blockに対して複数だがより単純な中間表現コードのブロックを可能にすることにより、変換されるコードの量を削減する。ほとんどの場合、より単純な変換ブロックが1つだけ必要とされることになる。
【0031】
本発明によれば、プログラム可能なマシン上で実行するために書かれたコンピュータコードの中間表現を生成する方法が提供され、前記方法は、
(i)プログラムコードによって生成されることになる可変値を保持するための複数のレジスタオブジェクトを生成すること、ならびに
(ii)固定値、及び/又は前記固定値と前記プログラムコードに従った前記可変値との関係を表す、複数の表現オブジェクトを生成することを含み、前記中間表現は、コンピュータコードのブロックに対して生成及び記憶され、同じコードブロックが後で再入力された場合には後で再利用され、前記第1のコンピュータプログラムコードの少なくとも1ブロックが、代替の未使用入口条件又は効果又は機能を有することができ、前記中間表現は、プログラムコードのそのブロックをその時の優勢な条件で実行するのに必要なとき、最初にだけ生成及び記憶される。
【0032】
例えば本発明の好ましい実施形態では、この方法は、プログラムによって必要とされるときに、プログラムコードのBasic Blockごとの中間表現の中間表現ブロック(IR Block)を生成するコンピュータ実施ステップであって、各IR Blockが特定の入口条件に対するプログラムコードの各Basic Blockを表すコンピュータ実施ステップと、
各IR Blockに対応するターゲットコードを記憶するコンピュータ実施ステップと、
プログラムが所与の入口条件に対するBasic Blockの実行を必要とするときに、
a)その所与の入口条件に対するそのBasic Blockを表す記憶済みターゲットコードがある場合は、前記記憶済みターゲットコードを使用し、あるいは
b)その所与の入口条件に対するそのBasic Blockを表す記憶済みターゲットコードがない場合は、その所与の入口条件に対するそのBasic Blockを表す別のIR Blockを生成するコンピュータ実施ステップを含む。
【0033】
Basic Blockは、サブジェクトプロセッサ中の順次命令のグループ、すなわちサブジェクトコードである。Basic Blockは、ただ1つのエントリーポイントを有し、別のBasic Blockの直前に終了するか、あるいはジャンプ、呼出し、又は分岐(条件付きでも無条件でも)の命令時に終了する。IR Blockは、中間表現のブロックであり、サブジェクトコードのBasic Blockの変換を表す。同じBasic Blockだが異なる入口条件に対するBasic Blockを表すIR Blockのセットが生成された場合、そのセット内のIR Blockは、以下、IsoBlockと呼ぶ。
【0034】
本発明のこの態様は、静的変換に適用することもできるが、動的バイナリ変換を介したエミュレーションに特に適用可能である。本発明によれば、エミュレーション・システムは、サブジェクトプロセッサプログラムをBasic Blockごとに変換するように構成することができる。この手法を使用するときは、プログラムのBasic Blockの実行に続く、エミュレートされるプロセッサの状態が、プログラムの後続のBasic Blockを表すのに使用されるIR Blockの形式を決定する。
【0035】
対照的に、変換を利用する周知のエミュレータでは、Basic Blockの中間表現が生成されるが、これは、プログラムのそのBasic Blockの最初の入口条件から独立している。したがって、中間表現は優勢な形式をとることが必要とされ、例えば抽象レジスタの有効性(又はその反対)を決定するテストを含むことになる。これとは対照的に、本発明では、抽象レジスタの有効性(又はその反対)はすでに分かっており、したがってIR blockは有効性テストを含む必要はない。さらに、抽象レジスタの有効性がわかっているので、IR blockは、有効な抽象レジスタを結合するのに必要なコードだけを含むことになり、すべての抽象レジスタを結合できるコードを含む必要はない。これにより、実行するために中間表現に変換する必要のあるコードの量が削減されるので、大きな性能の利点がもたらされる。プログラムのBasic Blockが以前に所与の入口条件のセットに対する中間表現に変換されており、かつ、それが異なる入口条件で開始する場合、プログラムのそのBasic Blockが中間表現のIsoBlockに再変換されることになる。
【0036】
本発明による第3の態様の別の利点は、得られる中間表現のIR block及びIsoBlockが、すべての入口条件を表すことのできる中間表現よりも複雑でなく、したがってより迅速に最適化でき、また、より迅速に実行されるターゲットプロセッサコードに変換されることである。
【0037】
本発明の第3の態様はまた、可能な効果又は機能をいくつか有することのできるサブジェクトコード命令を利用し、命令が最初に実行されるとき、これらの効果又は機能のすべてが必要とされるわけではない可能性もあり、これらのいくつかは、実際にはまったく必要とされない可能性もある。本発明のこの態様は、中間表現が動的に生成されるときにだけ使用することができる。
【0038】
すなわち、本発明によるこの方法は、プログラムの実行中にそのプログラムの中間表現が動的に生成されるときに、
複数の可能な効果又は機能を有する特定のサブジェクトコード命令の第1の反復時に、その反復で必要とされる特定の機能だけを表す特殊ケース中間表現を生成及び記憶するコンピュータ実施ステップと、同じサブジェクトコード命令の後続の各反復で、前記後続の反復で必要とされる機能に対して特殊ケース中間表現が生成されているかどうかを判定し、そのような特殊ケース中間表現が以前に生成されていない場合に、その機能特有の追加の特殊ケース中間表現を生成するコンピュータ実施ステップとを含むことが好ましい。
【0039】
本発明のこの態様は、エミュレーション・システムに関連付けられた問題、すなわちサブジェクトプロセッサコードの不必要な機能部分の変換という問題を克服する。サブジェクトプロセッサコードから、複雑な命令が中間表現にデコードされるとき、その命令の可能な効果のサブセットだけが、サブジェクトプロセッサプログラム中の所与の位置で使用されるのが普通である。例えばCISC(複雑命令セットコンピュータ)の命令セットにおいては、メモリロード命令は、基準レジスタ内にどのタイプの記述子が含まれているかによって異なった動作をするよう定義されることがある(記述子は情報がどのようにメモリ中に記憶されているかを記述する)。しかしながら大半のプログラムにおいては、そのプログラムの個々のロード命令により1つの記述子タイプだけが使用される。本発明による変換プログラムは、その記述子タイプだけのために定義されたロード命令を含む特殊ケース中間表現を生成する。
【0040】
好ましくは、特殊ケースの中間表現が生成され記憶されると、関連付けられた試験手順が生成され記憶されてその後各々の対象コード命令が反復される際に、必要とされる機能が、関連付けられ記憶された特殊ケースの中間表現により表される機能と同一であるかを判定し、追加の特殊ケースの中間表現が必要とされる場合は、その特殊ケースの中間表現と関連付けられた追加の試験手順が生成され、その追加の特殊ケース中間表現とともに記憶される。
【0041】
好ましくは、特定のサブジェクトコード命令及び追加の関連する試験手順についての追加の特殊ケース中間表現は、少なくとも初めは、同一のサブジェクト命令を表すために記憶されている既存の特殊ケース中間表現及び関連する試験手順に対して下位の関係で記憶されるのがよい。その場合、サブジェクトコード命令の2番目の及び後続の反復の際に、前記試験手順をそれが生成され記憶された順番で行うことにより、必要な特殊ケース中間表現がそれ以前に生成されているか否かの判定が行われ、それは必要とされる機能の特殊ケースの中間表現が存在すると判定されるまで、又はそうした必要とされる特殊ケースの中間表現が存在せず、その場合さらなる追加の中間表現及び別の試験手順が生成されるまで行われる。
【0042】
試験手順をそれが生成される順序で順序付けするのではなく、使用される頻度がより高い特殊ケース中間表現と関連付けられた試験手順が、使用頻度の低い特殊ケース中間表現と関連付けられた試験手順より先に行われるように試験手順の順序付けを調整することにより、中間表現を最適化することが好ましい。
【0043】
上記方法のいずれにより生成された中間表現を、例えば、第1タイプのプロセッサが実行するために書かれたコンピュータプログラムの変換において使用し、そのプログラムが異なるプロセッサにより実行され、かつコンピュータプログラムの最適化における1つのステップとして実行されるようにする。後者の場合、中間表現は特定のプロセッサが実行するために書かれたコンピュータプログラムを表すように生成することができ、その中間表現は次いで最適化され、次いでその同一のプロセッサにより実行可能なコードに変換し直される。
【0044】
上記の発明の第3の態様は中間表現の生成に関連するが、その中で説明したステップは、中間表現を生成せずにサブジェクトコードから直接ターゲットコードを生成することにも適用することができる。
【0045】
したがって、本発明はコンピュータプログラムコードのターゲットコード表現を生成する方法も提供し、この方法は、サブジェクトコードの所与の部分を最初に変換する際、プログラムコードのその部分を、優勢な条件セットで実行するのに必要とされるターゲットコードだけを生成し記憶するステップと、その後サブジェクトコードの同一の部分が入力された時に、そのサブジェクトコードの部分について、ターゲットコードがその後続の条件で以前に生成及び記憶されているかどうかを判定するステップと、そのようなターゲットコードが以前に生成されていない場合は、前記その後続の条件でサブジェクトコードの前記部分を実行するのに必要な追加のターゲットコードを生成する、コンピュータ実施ステップを含む。中間表現の生成に関連して説明した特性及び利点の多くは、ターゲットコードの生成に同様に適用されることが理解されよう。
【0046】
本発明の第4の態様によると、第1のプログラム可能なマシン上でコンパイル及び/又は変換するため、及び実行するために書かれた第1のコンピュータプログラムコードを、異なる第2のプログラム可能なマシンで実行するために第2のコンピュータプログラムコードに動的に変換する方法が提供される。前記方法は、
(a)前記第1のコンピュータプログラムコードのブロックの中間表現を生成することと、
(b)前記中間表現から前記第2のコンピュータプログラムコードのブロックを生成することと、
(c)第2コンピュータプログラムコードの前記ブロックを前記第2のプログラム可能なマシン上で実行することと、
(d)前記第2のプログラム可能なマシン上の第1のコンピュータプログラムコードのエミュレートされる現在の実行のために必要とされる、少なくとも第1のコンピュータプログラムコードのブロックについてステップa〜cをリアルタイムで繰り返すこと、
とを含む。
【0047】
本発明は、コンピュータコードのリアルタイム変換において中間表現を使用することの利点を実現する。動的エミュレーション・システムに適用される本発明の具体的な実施形態を、図面を例としてのみ参照しながら以下に説明する。
【0048】
図1から図5は、本発明による動的エミュレーション・システムが、プログラム又はプログラムのBasic Blockの中間表現を生成する方式の概略図であり、これらの図はまた本発明の新規性のある特徴である表現フォレスト(表現ツリーのグループ)をも表している。
【0049】
図6及び図7は、動的エミュレーション・システムがプログラムのBasic Blockの中間表現を生成する方式の概略図であり、それはプログラムのそのBasic Blockを開始する際の開始条件に依存する。
【0050】
下記に説明する本発明の実施形態は、異なるタイプのプロセッサ上で、1つのプロセッサの命令セットをエミュレートするためのシステムである。以下の説明において、サブジェクトプロセッサという用語は、エミュレーション・システムによりエミュレートされるべきプロセッサを言い、ターゲットプロセッサとはエミュレートシステムが実行されるプロセッサを言う。このシステムは、基本的に、サブジェクトプロセッサコード中の命令のBasic Blockを、実行する必要に応じてターゲットプロセッサコードに変換することにより動作する動的バイナリ変換システムである。下記で説明するこのエミュレーション・システムは、それぞれFront End、Core、Back Endと呼ばれる3つの主要な構成要素を含む。サブジェクトプロセッサ命令は、エミュレーション・システムのFront Endによりデコードされ中間表現に変換される。エミュレーション・システムのCoreはサブジェクトプロセッサ命令の中間表現を分析及び最適化し、Back Endは中間表現を、ターゲットプロセッサ上で実行するターゲットプロセッサコードに変換する。
【0051】
システムのFront Endは、エミュレートされているサブジェクトプロセッサに固有のものである。Front Endは、サブジェクトプロセッサの形態に応じてエミュレーション・システムを構成し、例えばエミュレーションにより必要とされるサブジェクトプロセッサレジスタの番号及び名前を指定し、必要とされる仮想メモリマッピングをBack Endに指定する。
【0052】
サブジェクトプロセッサ命令はBasic Blockにおいて中間表現に変換され、その効果生じた各中間表現ブロック(IR Block)は次いでエミュレーション、キャッシング(caching)、最適化の目的でCoreによりユニットとして扱われる。
【0053】
CoreはFront Endが生成した中間表現を最適化する。Coreは、エミュレーション・システムに接続されたサブジェクトプロセッサ及びターゲットプロセッサとは無関係の標準形を有する。ただし、いくつかのCore資源、具体的にはレジスタ番号、名前付け、IR Blockの詳細な性質は個々のFront Endにより構成されてその固有のサブジェクトプロセッサ構造要件に適応する。
【0054】
Back Endはターゲットプロセッサに固有のもので、中間表現をターゲットプロセッサ命令に変換するためにCoreにより起動される。Back Endは、ターゲットプロセッサレジスタを割当てし管理することと、サブジェクトプロセッサを正確にエミュレートするために適切なメモリロード及び記憶命令を生成することと、Coreが動的ルーチンを呼び出し、それらの動的ルーチンがBack End及びFront Endを適切に呼び出せるようにするために呼び出し手順を実施することに責任を負う。
【0055】
次いでエミュレーション・システムの動作をより詳細に説明する。システムは初期化されるとFront End、Core、Back Endの間に適切なリンクを生成する。初期化の終了時に命令実行ステップが開始され、Coreはfront Endを呼び出してサブジェクトプロセッサ命令の第1のBasic Blockをデコードする。Front Endは命令ごとに動作し、Basic Blockの各サブジェクトプロセッサ命令を順にデコードし、Coreルーチンを呼び出して各命令のサブ操作ごとに中間表現を生成する。Front Endが、プログラムシーケンスの変更を生じさせる可能性がある命令(例えば条件付又は無条件の、ジャンプ、呼び出し又は分岐命令)をデコードするとき、Front Endはさらなるサブジェクトプロセッサ命令をデコードする前にCoreに戻る(それによりコードのBasic Blockを終了する)。
【0056】
Front Endがサブジェクトプロセッサ命令のBasic Blockを中間表現に変換すると、Coreはその中間表現を最適化し、次いでBack Endを起動して、ターゲットプロセッサコード(ターゲット命令)内に、Basic Blockの中間表現を実施する命令のシーケンスを動的に生成する。ターゲット命令のそのシーケンスが生成されるとそれは直ちに実行される。ターゲットプロセッサ命令のシーケンスは、後の再使用のためにキャッシュ内で保持される(最初に上書きされる場合を除いて)。
【0057】
ターゲットプロセッサ命令が実行されると、次に実行されるべきアドレスを示す値が戻される。言い換えれば、ターゲットプロセッサコードは、Basic Blockの終わりに、条件付き又は無条件に関わらずどの分岐、呼び出し、ジャンプ命令をも評価しその効果を戻す。Basic Blockのこの変換及び実行のプロセスは、すでに変換されたBasic Blockに出会うまで続行する。
【0058】
次のBasic Blockを表すターゲットコードが以前に使用されておりキャッシュ内に記憶されているとき、Coreは単にそのターゲットコードを呼び出す。Basic Blockの終わりに達したとき、ターゲットコードは実行されるべき次のサブジェクト命令のアドレスを再度供給し、サイクルは続行する。
【0059】
中間表現及びターゲットプロセッサコードはどちらもサブジェクトプロセッサ命令のBasic Blockとリンクされている。中間表現はオプティマイザが頻繁に実行されるIR Blockのグループの効果的なエミュレーションを生成できるようにリンクされ、ターゲットコードは、同一のBasic Blockの第2及び後続の実行がターゲットコードを直接実行でき、命令を再度デコードするというオーバーヘッドを生じさせないようにリンクされる。
【0060】
Front Endは、抽象レジスタの必要とされる番号がCoreにおいて初期化時に定義されることを要求する。これらの抽象レジスタ(Riとラベルされる)は、サブジェクトプロセッサ上で実行する場合にサブジェクトプロセッサ命令により使用されることになる物理レジスタを表す。抽象レジスタは、サブジェクトプロセッサレジスタで命令の予測される効果を表すことにより、エミュレートされているサブジェクトプロセッサの状態を定義する。
【0061】
中間表現は、表現オブジェクトを抽象レジスタに割り当てることにより、サブジェクトプロセッサプログラムを表す。表現オブジェクトは、例えば個々の演算操作、論理演算、条件付演算の効果を中間表現において表す手段である。多数のサブジェクトプロセッサ命令はデータの操作を実行するので、大半の命令はその個々のサブ操作を表すために表現オブジェクトを生成する。表現オブジェクトは、例えば追加操作、条件設定操作、条件付き分岐における条件付き評価、メモリ読出し操作を表すために使用される。抽象レジスタは表現オブジェクトに関係付けられ、表現オブジェクトは他の表現オブジェクトに関係付けられて、サブジェクトプロセッサ命令の各Basic Blockが、表現フォレストと考えられる相互参照された表現オブジェクトの数によって表されるようにする。
【0062】
一連の図示した例を使用して、サブジェクトプロセッサ命令の中間表現を作成するために、エミュレーション・システムがどのように表現オブジェクト(Expressionと呼ばれる)及び抽象レジスタを使用するのかを伝える。図1から図5は、抽象レジスタを使用して下記の擬似アセンブラコードがCore内でどのように表されるかを段階的に示している。
【0063】
【表2】
【0064】
ライン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をその定義として戻す。
【0065】
サブジェクトプロセッサ命令のオペランドは、定数又は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つの参照を有する。
【0066】
上記コードのライン4に含まれるMUL命令は、典型的なデータフロー命令と見てよい。トップレベルのExpressionは新しいサブExpressionを生成するか又は現存のExpressionを参照することにより構築され、このトップレベルのExpressionはその定義としてRegisterに割当てられる。MUL命令の中間表現を図3に示す。抽象RegisterR1に保持されるExpressionを参照し、Long Constant Expression#5を参照するMul Expressionは、生成され抽象RegisterR5に割当てられる。
【0067】
上記コードのAnd Expressionを図4に示す。このExpressionは、図1に関連して上記で説明したのと同様の方法でRegRefExpressionを使用して、定義がまだ構築されていないRegister(すなわちR3)を参照する。
【0068】
ここまでに示した例において、Registerは特定のBasic Block内で最初に定義されることが想定される。図5は、すでに定義されているRegisterが、上記コードのライン6のMOVE命令により再定義されるとき何が起こるかを示している。一方図2から図4では、矢印がR1をAdd Expressionに関係付けているが、この参照はここで消去され、R1をLong Constant Expression#5に関係付けるために新しい参照矢印を作成する。
【0069】
R1に結合されているのと同様に、Add ExpressionはMul Expression及びAnd Expressionにも結合されており、したがって図5に示すように存在し続ける(ただしAdd Expressionが、RegisterR1からの参照1つだけを有する場合、R1が再定義された後AddExpressionには参照が残されない;この場合このAdd Expressionは「死んだ」ものとして知られることになり、冗長になる)。さらに、図5は、擬似アセンブラコードのライン7のSUB演算の効果を図示する。
【0070】
中間表現として表されるべき擬似アセンブラコードの最後のラインであるライン8はLOAD命令である。この命令を表すLoad Expressionは図5にRegisterR0に関係付けられて示されている。Load Expressionは、LOAD演算をその単一のExpressionオペランドに適用した効果を表す、単項演算子のタイプとして考えることができる。図5で、LOAD→#3fd0は、それがどのような値であれメモリ位置3fd0における値を表す。メモリ内に記憶されているデータに応じて1つのLoad Expressionがどの可能な値でも表すという点において、Load ExpressionはRegRefExpressionと類似の特性を有する。
【0071】
各表現オブジェクトにつながる参照の数を示す参照カウントは保持される(任意の所与の表現オブジェクトの参照カウントは、その表現オブジェクトからの参照は含まない)。表現オブジェクトに参照が行われる(レジスタ又は別の表現オブジェクトから)たびに、又は参照がその表現から除去されるたびに、その表現オブジェクトに対する参照カウントは調節される。所与の表現オブジェクトに対するゼロの参照カウントは、その表現オブジェクトにつながる参照がなく、したがってその表現オブジェクトが冗長であることを示す。所与の表現オブジェクトに対する参照カウントがゼロの時、その表現オブジェクトは中間表現から除去される。
【0072】
表現オブジェクトが除去されると、その表現オブジェクトからつながるいずれの参照、及びその参照がつながる先の表現オブジェクトの参照カウントはそれに従って調整される。ゼロ参照カウントの表現オブジェクトを除去するプロセス、及びそのようなオブジェクトからつながる参照を除去するプロセスは、表現フォレストに沿ってたどられる。中間般化のさらなる最適化は、下記で説明するようにサブジェクトプロセッサコードの冗長なラインを除去することにより達成することができる。
【0073】
複雑な命令がサブジェクトプロセッサコードから中間表現にデコードされるとき、その命令の可能な効果のサブセットだけがサブジェクトプログラムの所与の場所で使用されるのが通常である。例えばCISC命令セットにおいて、メモリロード命令は、基準レジスタに含まれている記述子のタイプに応じて異なった動作をするように定義することができる(記述子は情報がどのようにメモリ内に記憶されているかを記述する)。ただし、大半のプログラムではプログラム中の個々のロード命令により1つの記述子タイプしか使用されない。
【0074】
本発明のエミュレーション・システムでは、サブジェクトプロセッサプログラムが実行されるとFront Endは実行時間値を問い合せ、必要に応じて特殊ケースの中間表現を生成する。上記の例では、プログラムが使用しない記述子タイプに関連する、メモリロード命令のその部分を省略する、特殊ケースの中間表現が生成されることになる。
【0075】
特殊ケースはテストにより保護されており、このテストは追加機能が必要とされていることを実行時に検出した場合に、追加コードを生成するためにFront Endへの再エントリを生じさせる。最適化中に、当初の推定が誤りであることが発見された場合(例えば特定の記述子タイプがプログラムを通じて使用されるという推定)、オプティマイザはそのテストの方向を反転し、使用頻度の高い機能が、最初に選択された使用頻度の低い機能より迅速に選択されるようにする。
【0076】
本発明のエミュレーション・システムは、下記で説明するように可変サイズのレジスタを使用するサブジェクトプロセッサをエミュレートすることができる。可変サイズのレジスタを使用する、命令セット構造の例は、Motorola68000シリーズのプロセッサの構造である。68000構造では、「ロング」(.1)と指定された命令はレジスタ又はメモリ位置の32ビットすべての上で動作する。「ワード」(.w)又は「バイト」(.b)と指定された命令はそれぞれ、32ビットのレジスタ又はメモリ位置のボトム16ビット及びボトム8ビットでのみ動作する。例えばバイト追加が繰り上がりを生成する場合でも、その繰り上がりはレジスタの9番目のビットには伝搬されない。
【0077】
異なる幅のデータで動作する(この例では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」だけである。
【0078】
サブジェクトプロセッサ命令の特定のBasic Block内で、命令サイズに関して対立が起きない場合(すなわちそのBasic Block内の命令のすべてが同一のビット幅である場合)、適切な抽象レジスタに含まれているデータには自由にアクセスすることができる。ただし対立が起こった場合には(すなわち所与のサブジェクトプロセッサレジスタから、異なるビット幅の命令が記憶され/読み出される場合)、2つ又はそれ以上の抽象レジスタの内容を適切な方法で組み合わせることにより、正しいデータを引き出すことができる。この手法の利点は、抽象レジスタ上のすべての演算が32ビットのデータ項目上で実行されるのでCoreが単純化されることである。
【0079】
サブジェクトプロセッサレジスタと抽象レジスタとの相違は、可変サイズのレジスタの効果を考慮する際に重要である。68000構造の「d0」などのサブジェクトプロセッサレジスタは、サブジェクトプロセッサ中の高速記憶域のユニットであり、このユニットはアセンブラのオペランドではそのラベル(この場合は「d0」)により参照される。これとは対照的に、抽象レジスタはCoreの中間表現の整数部を形成するオブジェクトであり、サブジェクトプロセッサレジスタのセットを表すために使用される。抽象レジスタは、サブジェクトプロセッサレジスタ中の意味論に加えて余分の意味論を含んでおり、サブジェクトプロセッサとの相互作用に対して正しい意味論が維持されるならば、任意の数の抽象レジスタを使用して単一のサブジェクトプロセッサレジスタを表す。上記で説明したように、本発明では、Front Endは各68000データレジスタを表すために3つの抽象レジスタを必要とし(すなわち、バイト、ワード、ロングワードの各データの幅ごとに1つの)、各68000アドレスレジスタを表すために2つの抽象レジスタを必要とする。これとは対照的に、例えばMIPSFront Endの実施は、単一の抽象レジスタに単一のサブジェクトプロセッサレジスタをマップする。
【0080】
下記の表は68000について、異なるサイズの命令がサブジェクトプロセッサレジスタを読み出し、またこれに書き込む際に、2つ又はそれ以上の抽象レジスタの内容がどのように扱われるかを要約するものである。データが組み合わせられる方式は、サブジェクトプロセッサレジスタの現在の状態によって決まる。
【0081】
【表3】
【0082】
【表4】
【0083】
表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行により表されるようになる(×の記号は、その印のついたレジスタが有効なデータを含まないことを示す)。
【0084】
表3bの「書込み後の新状態」は、本発明に従って実行された書込み命令の効果を表す。表3aの第1行で示されるように、d0が32ビットのデータを含み、長い命令により書込みをされる場合、書込み操作の効果は、表3bの「Long Word」の部分の第1行で示されるものになる。「レ」の記号で示されるように抽象レジスタD0_Lは有効なままであり(すなわち有効なデータを含む)、一方で抽象レジスタD0_W及びD0_Bにはデータが書き込まれないので「×」の記号で示されるように無効のままである。したがって「d0」の状態は変更されていない。
【0085】
表3aの第1行に示される状態で、「d0」にデータのバイトによって書込みがされる場合、「d0」の新しい現在の状態は表3bの「バイト」部分により表される。この場合レジスタはロングデータ及びバイトデータの両方について有効である(すなわち、抽象レジスタD0_L及びD0_Bがどちらも有効データを含む)。
【0086】
表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を参照せずに直接読み出すことができた。
【0087】
上記で説明したように、データの幅ごとに別の抽象レジスタを使用することにより、データの単一幅を使用するサブジェクトプロセッサコードのセクションがエミュレートされている時に、データに容易にアクセスすることができるようになる。これは非常に優勢な状況であり、例えばプログラムの1つのセクションがデータのバイト上、例えば文字処理コードで動作し、プログラムの別のセクションが例えばポインタ操作コードの32ビットのデータ上で動作する場合に生じる。異なる幅のデータがサブジェクトプロセッサレジスタに書き込まれ、またそこから読み出されるというまれな場合に、本発明は行われるべき計算(すなわち異なる幅のデータの組合せ)しか必要としない。
【0088】
サブジェクトプロセッサレジスタの異なるセクションを適切な方式で操作する、複雑な表現を生成すると知られている技術は、サブジェクトプロセッサレジスタの読出し及び/又はそこへの書込みごとに、計算を行うことを必要とする。これとは対照的に本発明はまれな場合に計算を必要とし、それによりサブジェクトプロセッサレジスタのより効率的な表現を提供する。
【0089】
本発明は、各サブジェクトプロセッサレジスタの明白な現在の状態(すなわち、構成要素抽象レジスタの有効性又は類似のもの(otherwise))が常に知られていることを必要とし、それによりそれらの抽象レジスタが表すサブジェクトプロセッサレジスタに対して読出し命令が行われたときに、抽象レジスタの正しい組合せが行われるようにする。
【0090】
Basic Block2に入力する際のサブジェクトプロセッサレジスタの初期状態が変換時に知られていない場合、レジスタの状態をテストするためのターゲットプロセッサコードを生成する必要がある。この理由により、本発明によるエミュレーション・システムは、各サブジェクトプロセッサレジスタの状態が変換時に常に知られていることを確実にする。本発明によるシステムにおいてこれは、1つのIntermediate Representation(IR)Blockからのレジスタ状態を次に伝搬することにより行われる。例えばIR Block1は「d0」の状態をその後継のIR Block2に伝搬し、IR Block2は同様の方法でレジスタ状態をIR Block3に伝搬する。サブジェクトプロセッサレジスタのこの伝搬の例は、図6に示される。
【0091】
図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の境界を超える本発明の動作とは整合しない。
【0092】
この問題を克服するために、本発明は、異なる入口条件の複数の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」の状態がレレ×であるとの当初の推定を使用することにより生成される。
【0093】
IsoBlock2bから発している後継ルート「c」が最初にトラバースされる際、IR Block3に整合性テストが行われる。ルート「c」はIR Block3と整合性があるので、新しいIsoBlockを生成する必要はなく、後継ルート「a」及び後継ルート「c」はともにIR Block3に結合される。
【0094】
上記で述べた整合性テストに関する低レベルの詳細は、それがサブジェクトプロセッサ構造で提供される重複するレジスタの性質そのものに依存することから、異なるFront Endモジュール間で異なったものになる。これらの詳細の必要な修正点は、当分野の技術者には明らかであろう。
【0095】
抽象レジスタの状態の所与のセットに対して中間表現のIsoBlockを入力時に生成することの原理は、幅広いセットの初期状態の固有の値についてのサブジェクトプロセッサコードのBasic Blockを表す中間表現に広げることができる。知られている中間表現は、可能性のあるすべての初期開始条件についての命令のブロックを表し、したがってかなりの量の柔軟性を含むことを必要とされる。この方式で形成された中間表現は必然的に複雑になり、一般に実行中には使用されない要素を含むことになる。
【0096】
本発明による中間表現は、入口条件の固有の値についてのコードのBasic Blockを表し、したがって知られている中間表現よりもコンパクトであるので有利である。本発明のさらなる利点は、生成されるすべての中間表現が少なくとも1回は使用され、不必要な追加表現を生成することに時間が浪費されないことである。
【0097】
上記の説明はエミュレーションに向けられるものであるが、当分野の技術者は、本発明は例えばコンパイル中のコードの最適化など他のアプリケーションにも使用できることを理解されよう。
【図面の簡単な説明】
【図1】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(MOVE命令)
【図2】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(ADD命令)
【図3】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(MUL命令)
【図4】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(AND Expression)
【図5】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(ライン6のMOVE命令による再定義)
【図6】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(サブジェクトプロセッサレジスタの伝搬の例)
【図7】本発明に係る動的エミュレーション・システムが中間表現を生成する方式の概略図(2つのIsoBlockを適用した例)
Claims (28)
- プロセッサのレジスタのセットを参照するプログラムコードの中間表現をメモリ内に生成する方法であって、
複数のレジスタオブジェクトを生成するステップであって、各レジスタオブジェクトは前記プログラムコードによって参照される場合に前記レジスタの個々の1つを表す、前記生成するステップと、
1以上の表現オブジェクトを生成するステップであって、前記プログラムコードの要素が前記プログラムコード中に生じる場合に各表現オブジェクトは前記プログラムコードの個々の演算子又はオペランドを表す、前記生成するステップと、
前記レジスタオブジェクト及び表現オブジェクトのネットワークを生成するステップであって、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1以上の前記レジスタオブジェクトによって参照される、前記生成するステップと
をコンピュータに実行させることを含む、前記方法。 - 前記プログラムコードがサブジェクトプロセッサの命令セットで表される、請求項1に記載の方法。
- 前記レジスタオブジェクトが前記サブジェクトプロセッサの抽象レジスタを表す、請求項2に記載の方法。
- 少なくともいくつかの前記表現オブジェクトが複数のレジスタオブジェクトに供給される、請求項1〜3のいずれか一項に記載の方法。
- 前記表現オブジェクトが複製されない、請求項1〜4のいずれか一項に記載の方法。
- 単一の表現オブジェクトが前記プログラムコードの所与の演算子又はオペランドに対して生成され、前記各表現オブジェクトが、関係するすべての前記レジスタオブジェクトによって参照される、請求項1〜5のいずれか一項に記載の方法。
- 1以上の前記レジスタオブジェクト又は1つの前記表現オブジェクトが冗長又は不要であると識別される場合にそれが除去されるステップをコンピュータにさらに実行させるステップを含む、請求項1〜6のいずれか一項に記載の方法。
- レジスタと表現オブジェクトとの前記ネットワークが前記中間表現で構築されるときに当該オブジェクトに対してなされる参照の継続カウントを維持することによって、冗長又は不要な前記レジスタオブジェクト又は前記1つの表現オブジェクトを識別するステップをコンピュータにさらに実行させるステップを含む、請求項7に記載の方法。
- 各表現オブジェクトに対して、他の表現オブジェクトからの又はレジスタからのその表現オブジェクトへの参照の数のカウントが維持され、特定の表現オブジェクトに関連付けられたカウントが、その表現オブジェクトが作成されるか又は除去されるたびに調整される、請求項8に記載の方法。
- 前記表現オブジェクトに対する前記カウントが0のとき、その表現オブジェクトと、その表現オブジェクトからのすべての参照とが除去される、請求項9に記載の方法。
- 前記生成された中間表現を使用して、第1のタイプのプロセッサによって実行するために書かれたコンピュータプログラムを、第2のタイプのプロセッサによって実行できるように変換するステップをコンピュータにさらに実行させるステップを含む、請求項1〜10のいずれか一項に記載の方法。
- 前記変換するステップが、プログラムの実行中に動的に行われる、請求項11に記載の方法。
- 前記生成された中間表現を最適化することによって、前記プログラムコードを最適化するステップをコンピュータにさらに実行させるステップを含む、請求項1〜12のいずれか一項に記載の方法。
- 前記最適化するステップが、前記第1のタイプのプロセッサによって実行するために書かれたコンピュータプログラムを、当該第1のプロセッサによってより効率的に実行できるように最適化するために使用される、請求項13に記載の方法。
- コンピュータシステムであって、
第1のプロセッサと、
レジスタのセットを参照するプログラムコードの中間表現をメモリ内に生成することを介して、第2のプロセッサのために書かれた前記プログラムコードを前記第1のプロセッサ上で実行するために操作可能なエミュレーション・システムと
を備えており、
前記中間表現の生成が、
複数のレジスタオブジェクトを生成することであって、各レジスタオブジェクトは前記プログラムコードによって参照される場合に前記レジスタの個々の1つを表す、前記生成することと、
1以上の表現オブジェクトを生成することであって、前記プログラムコードの要素が前記プログラムコード中に生じる場合に各表現オブジェクトは前記プログラムコードの個々の演算子又はオペランドを表す、前記生成することと、
前記レジスタオブジェクト及び表現オブジェクトのネットワークを生成することであって、各表現オブジェクトは、直接的に又は前記表現オブジェクトのうちの他の表現オブジェクトからの参照を介して間接的に関係する1以上の前記レジスタオブジェクトによって参照される、前記生成することと
を含む、前記エミュレーション・システム。 - 前記プログラムコードがサブジェクトプロセッサの命令セットで表される、請求項15に記載のエミュレーション・システム。
- 前記レジスタオブジェクトが前記サブジェクトプロセッサの抽象レジスタを表す、請求項16に記載のエミュレーション・システム。
- 少なくともいくつかの前記表現オブジェクトが複数のレジスタオブジェクトに供給される、請求項15〜17のいずれか一項に記載のエミュレーション・システム。
- 前記表現オブジェクトが複製されない、請求項15〜18のいずれか一項に記載のエミュレーション・システム。
- 単一の表現オブジェクトが前記プログラムコードの所与の演算子又はオペランドに対して生成され、前記各表現オブジェクトが、関係するすべての前記レジスタオブジェクトによって参照される、請求項15〜19のいずれか一項に記載のエミュレーション・システム。
- 前記中間表現を生成することが、1以上の前記レジスタオブジェクト又は1つの前記表現オブジェクトが冗長又は不要であると識別される場合にそれが除去されることをさらに含む、請求項15〜20のいずれか一項に記載のエミュレーション・システム。
- 前記中間表現を生成することが、レジスタと表現オブジェクトとの前記ネットワークが前記中間表現で構築されるときに当該オブジェクトに対してなされる参照の継続カウントを維持することによって、冗長又は不要な前記レジスタオブジェクト又は前記1つの表現オブジェクトを識別することをさらに実行させることを含む、請求項21に記載のエミュレーション・システム。
- 各表現オブジェクトに対して、他の表現オブジェクトからの又はレジスタからのその表現オブジェクトへの参照の数のカウントが維持され、特定の表現オブジェクトに関連付けられたカウントが、その表現オブジェクトが作成されるか又は除去されるたびに調整される、請求項22に記載のエミュレーション・システム。
- 前記表現オブジェクトに対する前記カウントが0のとき、その表現オブジェクトと、その表現オブジェクトからのすべての参照とが除去される、請求項23に記載のエミュレーション・システム。
- 前記中間表現を生成することが、前記生成された中間表現を使用して、第1のタイプのプロセッサによって実行するために書かれたコンピュータプログラムを、第2のタイプのプロセッサによって実行できるように変換することをさらに実行させることを含む、請求項15〜24のいずれか一項に記載のエミュレーション・システム。
- 前記変換することが、プログラムの実行中に動的に行われる、請求項25に記載のエミュレーション・システム。
- 前記中間表現を生成することが、前記生成された中間表現を最適化することによって、前記プログラムコードを最適化することをさらに含む、請求項15〜26のいずれか一項に記載のエミュレーション・システム。
- 前記最適化することが、前記第1のタイプのプロセッサによって実行するために書かれたコンピュータプログラムを、当該第1のプロセッサによってより効率的に実行できるように最適化するために使用される、請求項27に記載のエミュレーション・システム。
Applications Claiming Priority (5)
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 | |
US9822075.9 | 1999-01-14 | ||
US60/115,952 | 1999-01-14 | ||
PCT/GB1999/003168 WO2000022521A1 (en) | 1998-10-10 | 1999-10-11 | Program code conversion |
Related Child Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010094372A Division JP4640685B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
JP2010094371A Division JP4640684B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
JP2010094369A Division JP4709933B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
JP2010094370A Division JP4640683B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002527815A JP2002527815A (ja) | 2002-08-27 |
JP4573189B2 true JP4573189B2 (ja) | 2010-11-04 |
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 | プログラムコード変換方法 |
JP2010094371A Expired - Lifetime JP4640684B2 (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 | プログラムコード変換方法 |
JP2010094370A Expired - Lifetime JP4640683B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
Family Applications After (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010094371A Expired - Lifetime JP4640684B2 (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 | プログラムコード変換方法 |
JP2010094370A Expired - Lifetime JP4640683B2 (ja) | 1998-10-10 | 2010-04-15 | プログラムコード変換方法 |
Country Status (8)
Country | Link |
---|---|
US (11) | US7426722B2 (ja) |
EP (3) | EP1385090B1 (ja) |
JP (5) | JP4573189B2 (ja) |
AT (2) | ATE293808T1 (ja) |
AU (1) | AU6211899A (ja) |
DE (2) | DE69942011D1 (ja) |
ES (1) | ES2340370T3 (ja) |
WO (1) | WO2000022521A1 (ja) |
Families Citing this family (96)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000022521A1 (en) * | 1998-10-10 | 2000-04-20 | The Victoria University Of Manchester | Program code conversion |
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 |
GB2411990B (en) * | 2003-05-02 | 2005-11-09 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
GB0315165D0 (en) * | 2003-05-02 | 2003-08-06 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
US20070186076A1 (en) * | 2003-06-18 | 2007-08-09 | Jones Anthony M | Data pipeline transport system |
JP2007526539A (ja) | 2003-06-18 | 2007-09-13 | アンブリック, インコーポレイテッド | 集積回路開発システム |
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 |
GB2424092A (en) * | 2005-03-11 | 2006-09-13 | Transitive Ltd | Switching between code translation and execution using a trampoline |
EP1866761A1 (en) | 2005-03-11 | 2007-12-19 | Transitive Limited | Execution control during program code conversion |
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 | 삼성전자주식회사 | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 |
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. |
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 |
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 |
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 |
US7813909B2 (en) * | 2006-05-03 | 2010-10-12 | Sony Computer Entertainment Inc. | Register mapping in emulation of a target system on a host system |
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 |
US7716653B2 (en) * | 2006-04-06 | 2010-05-11 | International Business Machines Corporation | Configurable importers and resource writers for converting data into another format |
US8812556B2 (en) * | 2006-04-06 | 2014-08-19 | International Business Machines Corporation | Storing modification data for recreating modifications |
EP2013680B1 (en) * | 2006-05-03 | 2018-08-08 | Sony Interactive Entertainment Inc. | Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code |
JP4778359B2 (ja) * | 2006-05-17 | 2011-09-21 | エヌイーシーコンピュータテクノ株式会社 | エミュレーション方法及びコンピュータシステム |
US8108844B2 (en) * | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling 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 |
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 |
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 |
US20070294675A1 (en) * | 2006-06-20 | 2007-12-20 | Transitive Limited | Method and apparatus for handling exceptions during binding to native code |
US8136102B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for 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 |
US8443348B2 (en) | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8261270B2 (en) | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
GB2442497B (en) | 2006-10-02 | 2010-03-31 | Transitive Ltd | Method and apparatus for administering a process filesystem with respect to program code conversion |
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 |
WO2008068519A1 (en) | 2006-10-02 | 2008-06-12 | Transitive Limited | Computer system and method of adapting a computer system to support a register window architecture |
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 | 한국전자통신연구원 | 가상화 장치 및 그 처리 방법 |
US9141806B2 (en) | 2010-08-24 | 2015-09-22 | 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 |
US9417855B2 (en) * | 2011-09-30 | 2016-08-16 | 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 | 提供較小目標編碼空間之碼轉換的方法、電腦裝置與程式產品 |
US9557974B2 (en) * | 2012-07-10 | 2017-01-31 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
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 | Закрытое акционерное общество "Лаборатория Касперского" | Способ повышения эффективности работы аппаратного ускорения эмуляции приложений |
US8990789B2 (en) * | 2013-04-18 | 2015-03-24 | Facebook, Inc. | Optimizing intermediate representation of script code by eliminating redundant reference count operations |
US9152400B2 (en) | 2013-04-18 | 2015-10-06 | Facebook, Inc. | Eliminating redundant reference count operations in intermediate representation of script code |
KR101462347B1 (ko) * | 2013-07-08 | 2014-12-04 | 충북대학교 산학협력단 | 가상 머신 바이너리 변환 방법 |
US9223553B2 (en) * | 2013-09-26 | 2015-12-29 | 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 |
WO2017153815A1 (en) | 2016-03-11 | 2017-09-14 | Lzlabs Gmbh | Load module compiler |
US10191745B2 (en) * | 2017-03-31 | 2019-01-29 | Intel Corporation | Optimized call-return and binary translation |
EP3401827A1 (en) | 2017-05-10 | 2018-11-14 | Checkmarx Ltd. | Method and system of static and dynamic data flow analysis |
US11234235B2 (en) | 2019-04-30 | 2022-01-25 | Bank Of America Corporation | Resource distribution hub generation on a mobile device |
US11196737B2 (en) | 2019-04-30 | 2021-12-07 | Bank Of America Corporation | System for secondary authentication via contactless distribution of dynamic resources |
US10998937B2 (en) | 2019-04-30 | 2021-05-04 | Bank Of America Corporation | Embedded tag for resource distribution |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
US11532309B2 (en) * | 2020-05-04 | 2022-12-20 | Austin Cox | Techniques for converting natural speech to programming code |
US11836258B2 (en) | 2020-07-28 | 2023-12-05 | Checkmarx Ltd. | Detecting exploitable paths 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)
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 |
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 |
US5659753A (en) * | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
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 |
WO1998059292A1 (en) | 1997-06-25 | 1998-12-30 | Transmeta Corporation | 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 | 썬 마이크로시스템즈, 인코포레이티드 | 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 |
WO2000022521A1 (en) * | 1998-10-10 | 2000-04-20 | The Victoria University Of Manchester | Program code conversion |
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 |
US7543284B2 (en) * | 2003-04-22 | 2009-06-02 | Transitive Limited | Partial dead code elimination optimizations for program code conversion |
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 |
-
1999
- 1999-10-11 WO PCT/GB1999/003168 patent/WO2000022521A1/en active IP Right Grant
- 1999-10-11 EP EP03020510A patent/EP1385090B1/en not_active Expired - Lifetime
- 1999-10-11 JP JP2000576360A patent/JP4573189B2/ja not_active Expired - Fee Related
- 1999-10-11 DE DE69942011T patent/DE69942011D1/de not_active Expired - Lifetime
- 1999-10-11 AT AT99949129T patent/ATE293808T1/de not_active IP Right Cessation
- 1999-10-11 AU AU62118/99A patent/AU6211899A/en not_active Abandoned
- 1999-10-11 ES ES03020509T patent/ES2340370T3/es not_active Expired - Lifetime
- 1999-10-11 DE DE69924857T patent/DE69924857T2/de not_active Expired - Lifetime
- 1999-10-11 AT AT03020509T patent/ATE457492T1/de not_active IP Right Cessation
- 1999-10-11 EP EP99949129A patent/EP1119807B1/en not_active Expired - Lifetime
- 1999-10-11 EP EP03020509A patent/EP1380946B1/en not_active Expired - Lifetime
-
2001
- 2001-04-06 US US09/828,049 patent/US7426722B2/en not_active Expired - Fee Related
- 2001-04-06 US US09/827,971 patent/US7409680B2/en not_active Expired - Fee Related
- 2001-04-06 US US09/827,974 patent/US7203933B2/en not_active Expired - Lifetime
-
2002
- 2002-06-06 US US10/165,378 patent/US7346900B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/165,012 patent/US7356810B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/164,772 patent/US7328431B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/164,789 patent/US7203934B2/en not_active Expired - Lifetime
- 2002-06-06 US US10/165,457 patent/US7210133B2/en not_active Expired - Lifetime
- 2002-06-06 US US10/165,029 patent/US7421686B2/en not_active Expired - Fee Related
-
2007
- 2007-03-27 US US11/728,957 patent/US8006237B2/en not_active Expired - Fee Related
- 2007-03-27 US US11/728,723 patent/US8037461B2/en not_active Expired - Fee Related
-
2010
- 2010-04-15 JP JP2010094371A patent/JP4640684B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094369A patent/JP4709933B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094372A patent/JP4640685B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094370A patent/JP4640683B2/ja not_active Expired - Lifetime
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4573189B2 (ja) | プログラムコード変換方法 | |
US8448152B2 (en) | High-level language, architecture-independent probe program 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 | |
US6684394B1 (en) | Relocation format for linking with relocation instructions containing operations for combining section data | |
JPH02176938A (ja) | 機械語命令最適化方式 | |
JP3424596B2 (ja) | シンボル参照情報のキャッシュ方法ならびに装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061011 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20061225 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20061226 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20090731 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090731 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090824 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20090824 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090826 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100115 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100415 Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100415 |
|
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: 20100802 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20100803 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20100803 |
|
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: 20100806 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4573189 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: 20130827 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |