JP3786603B2 - 変換した命令を実行しつつコンテキストを維持する方法および装置 - Google Patents
変換した命令を実行しつつコンテキストを維持する方法および装置 Download PDFInfo
- Publication number
- JP3786603B2 JP3786603B2 JP2001530687A JP2001530687A JP3786603B2 JP 3786603 B2 JP3786603 B2 JP 3786603B2 JP 2001530687 A JP2001530687 A JP 2001530687A JP 2001530687 A JP2001530687 A JP 2001530687A JP 3786603 B2 JP3786603 B2 JP 3786603B2
- Authority
- JP
- Japan
- Prior art keywords
- context
- instruction
- conversion
- host
- sequence
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000013519 translation Methods 0.000 claims abstract description 22
- 238000006243 chemical reaction Methods 0.000 claims description 47
- 230000009466 transformation Effects 0.000 claims description 29
- 230000008859 change Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000000844 transformation Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
- G06F7/20—Comparing separate sets of record carriers arranged in the same sequence to determine whether at least some of the data in one set is identical with that in the other set or sets
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Debugging And Monitoring (AREA)
- Steroid Compounds (AREA)
Description
(発明の背景)
発明の分野
本発明は、コンピュータ・システムに関し、更に特定すれば、異なるプロセッサによる実行のために設計されたプログラムから変換されたプログラムを実行する際にマイクロプロセッサの性能を向上させる装置および方法に関する。
従来技術の説明
最近、単純であるが高速のホスト・プロセッサ(「モーフ・ホスト」と呼ぶ)とソフトウエア(「コード・モーフィング・ソフトウエア」と呼ぶ)とを組み合わせ、モーフ・ホスト・プロセッサのそれとは異なる命令セットを有するターゲット・プロセッサ用に設計したアプリケーション・プログラムを実行する新たなマイクロプロセッサが開発された。モーフ・ホスト・プロセッサは、コード・モーフィング・ソフトウエアを実行し、ターゲット・アプリケーション・プログラムを、当該ターゲット・アプリケーション・プログラムの目的を達成出来るホスト・プロセッサ命令に動的に変換する。前記命令を変換する際、それらは変換バッファに格納され、それらは、更に変換を行わずにアクセスすることができる。プログラムの初期変換は低速であるが、一旦変換されれば、プログラムを実行するためにハードウエアで通常必要となるステップの多くは不要となる。新たなマイクロプロセッサは、単純で高速な低消費電力設計のプロセッサが、変換した「ターゲット」命令を、プログラムを設計した対象である「ターゲット」プロセッサと同等の速度で実行可能であることを実証した。
【0002】
変換の問題を複雑化させているのは、コンピュータ・システムを動作させるために、ターゲット・コンピュータのハードウエアおよびそのオペレーティング・システムによって実行される種々の割込および例外である。ターゲット・コンピュータの動作中にターゲット例外が発生すると、その例外の時点におけるコンピュータの状態をセーブすべく、通例では、その動作を遂行するマイクロコード・シーケンスをコールし、正しい例外ハンドラを読み出し、例外を処理し、ついでプログラムを継続するためにプログラムにおける正しい地点を探しださなければならない。多くの場合、このためには、例外が発生した時点におけるターゲット・コンピュータの状態にプログラムを戻さなければならない。これらの動作を遂行するためにターゲット・コンピュータのハードウエアおよびソフトウエアによってもたらされる結果は、モーフ・ホスト・プロセッサがこれらの例外に正しく応答できるように、何らかの方法で変換のプロセスによって与えられなければならない。
【0003】
他のプロセッサのために設計されたプログラムを高速で走らせることを可能にするために、モーフ・ホスト・プロセッサは多くのハードウエア強化策を盛り込んでいる。これら強化策の1つに、ゲート付きストア・バッファがある。これは、変換された命令シーケンスの実行の結果生じたメモリ・ストアを一時的に変換バッファに格納する。第2の強化策は、変換されているターゲット命令の任意のシーケンスの先頭におけるターゲット・プロセッサの状態を格納する、通常のワーキング・レジスタに追加された1組のホスト・レジスタである。ターゲット命令シーケンスは、ホスト命令に変換され実行される。シーケンスは、ターゲット状態が既知の時点で開始し終了する。変換された命令が例外を発生させることなく実行した場合、変換されたホスト命令の実行によって発生したメモリ・ストアを、コミット命令によってメモリに格納し(記憶し)、次いでターゲット状態を保持しているレジスタを、シーケンスが完了した時点におけるターゲット状態に更新する。
【0004】
しかしながら、ホスト命令シーケンスの実行中に例外が発生した場合、処理を停止し、ターゲット・プロセッサの既知の状態が存在する、ターゲット命令シーケンスの先頭に、動作全体を戻せばよい。これによって、命令を動的に変換および実行しつつ、発生した例外の迅速かつ精確な処理が可能となる。
【0005】
変換の実行が成功裏に完了するまで一時記憶ユニットに実行によって生成された結果を置いておくことによって、新たなマイクロプロセッサが変換の実行を処理する際に用いる方法は、実際上高速な推定方法であることが注目される。実際に、新たなマイクロプロセッサは、他の動作の成果(outcome)を推定するのと同じ回路を用いる。例えば、単純に変換された命令から、ソフトウエア・スケジューラによって並び替えられた命令シーケンスの実行結果を一時的に保持することによって、従来技術が企図したものよりも一層強力な並び替えを行うことができる。このように並び替えられた命令シーケンスを実行して正しい結果を得た時、並び替えたシーケンスの実行によって生じたメモリ・ストアをメモリに記憶することができ、ターゲット状態を更新することができる。並び替えたシーケンスが、実行中に、例外を発生した場合、プロセッサの状態は、シーケンスの先頭におけるターゲット状態にロールバックし、より保守的な手法を採用してシーケンスの実行を行う。
【0006】
新たなマイクロプロセッサの最も有効な特徴の1つは、変換された命令の長いシーケンスを共にリンクできることにある。一度短いターゲット命令シーケンスが変換され、例外を発生することなく実行できることが見出されると、命令の長いシーケンスを形成するために、多数のこれらの短いシーケンスを共にリンクすることが可能である。これによって、変換されたプログラムを非常に高速で実行することが可能となる。何故なら、マイクロプロセッサは、ハードウエア・プロセッサが命令を実行するために通常行う(より短い変換されたシーケンスの各々を調べるような)ステップの全てを経る必要がないからである。予測したよりも更に高い速度を達成する場合もある。何故なら、一旦長いシーケンスをリンクすれば、多くの場合、最適化器は、生成される結果を変更することなく、長いシーケンスからステップの多くを排除することが可能となるからである。ハードウエアの最適化器は、際だった最適化を可能にするパターンを顕在化させることができるほど長い命令シーケンスの最適化をこれまで全くできなかった。
【0007】
プロセッサが命令を実行しているときは何時でも、種々の特性を有する何らかの特定的なモードで走っている。アプリケーションの命令は、常に正しい結果を生成するために正しいモードで実行しなければならない。あるモードのこれらの特性は、実際上命令に対する背景であり、命令の一部と考えることもできる。プロセッサが命令を実行する際、これらの命令の内あるものは特性を変化させ、したがって動作モードを変化させる場合がある。このため、これら異なるモードを処理するためには、マイクロプロセッサの多数の特性を別々に設定しなければならない。命令が正しい結果をもたらすために正しく設定しなければならない機械状態の特性のことを、命令が実行するコンテキストと呼ぶのが通例である。コンテキストは、命令の実行から正しい結果を生成するために必要な機械の正しい状態と要約して言うこともできよう。
【0008】
新たなプロセッサが、第1命令セットを有するターゲット・プロセッサのために設計された命令シーケンスを、異なる命令セットのホスト命令シーケンスに変換する際に、変換および実行しつつコンテキストを維持する必要性から重大な問題に直面する。
【0009】
プログラムを実行する際、何千もの異なる事柄がコンテキストを構成する可能性がある。コンテキストを構成し得る多くの要素の内わずか数個をあげるだけでも、問題がいかに複雑であるか例示することになろう。当業者は、文字どおり何百もの可能な項目がコンテキストにはあることがわかるであろう。
【0010】
多くのマイクロプロセッサは、使用するオペレーティング・システムの能力に応じて、8ビット、16ビット、および32ビット・ワード長の命令を有するアプリケーション・プログラムと共に機能するように設計されている。多くの場合、同じ命令が、異なるワード長の命令で書かれたアプリケーションで利用されている。しかしながら、マイクロプロセッサの特性が32ビット命令を実行するために設定されているにも関わらず、16ビット命令を実行しようとすると、恐らく命令は正しく実行しない。このように、命令のワード長は、実行の目的のためのターゲット・プロセッサ・コンテキストと見なすことができる。
【0011】
別の例として、命令は異なるレベルのパーミッションで実行する。つまり、ある命令は最高レベルのアクセスを有するものでのみ実行可能であり、別の命令は、より低いレベルのユーザやより高いレベルのユーザによって実行可能な場合もある。変換された命令を実行する際、同じアクセス・レベルを維持し、アプリケーションが、無関係のアプリケーションの資産(asset)に干渉できないようにする必要がある。
【0012】
Intel X86を基本とするマイクロプロセッサでは、コードおよびデータの様々な部分(セグメント)をメモリのどこに格納するか、アプリケーションに指定させている。例えば、プログラムは、当該プログラムのセグメントに対するベース・アドレスおよび長さを指定するので、コード・セグメントは1つのベース・アドレスで開始してあるメモリ量にわたって継続し、一方データ・セグメントは異なるベース・アドレスで開始して、異なるメモリ量を含むようにすることができる。あるいは、プログラムは、単一のフラット・セグメントを指定し、プログラムの全ての命令、データ、およびその他の要素を格納するために用いることも可能である。更に、1つのプログラムのセグメント全てを同じベース・アドレスで開始し、異なる終了アドレスまで及ばせることも可能である。したがって、利用するベース・アドレスの構成は、命令を実行する上で非常に重要な特性である。異なる用途に割り振ったメモリのエリアが混乱すると、恐らくプログラムは適正な結果が得られるような命令の実行が出来なくなるであろう。つまり、これはコンテキストの重要な要素となり得るのである。
【0013】
アプリケーションが、ページングをイネーブルして実行するように設計されている場合、アプリケーションは、発生し得るページング例外に対処しなければならない。アプリケーションが、ページングをオフにして設計されている場合、ページング例外は発生し得ない。したがって、ページングも、コンテキストの重要な要素となり得る。
【0014】
命令を実行するときにはいつでも、正しい結果を生成する命令に命令をコンパイルするときと同じでなければならない特性が他にも数多くある。Intel X85プロセッサが用いるような複雑な命令セットでは、コンテキストを構成する特性の数は非常に大きい。
【0015】
ターゲット・プロセッサによる命令の実行と同様、ターゲット命令から変換されたホスト命令は、これら変換された命令を実行しホスト・システムによって同じ結果を生成しようとする場合、ターゲット命令を設計した対象である元のプロセッサのコンテキストを維持する必要がある。命令から異なる結果を得る可能性があるコンテキストの項目は、変換から実行まで一定のままでなければならないので、正しい結果が生成されることを保証するためには、文字通り何百ものコンテキストの要素を、各変換の一部とする必要があるように思われる。
【0016】
いつプロセッサ上で命令を実行して正しい結果を生成するかは非常に重大であるが、できるだけ迅速に命令を実行することも望ましいのである。一般に、これを達成するには、できるだけ効率的に走るコードを生成する。コンテキストまたは機械状態は、どれくらい効率的にコードを作成できるかを制御するに過ぎない。命令を実行する機械状態には多くの特性があり、変換および実行の効率に影響を与え、命令をより速く走らせたり、実行に対して他の何らかの望ましい効果を有する場合もある。全ての場合において、ターゲット・マイクロプロセッサ上で特定のモードで実行される命令が、ホスト・システムにおける同じモードで命令を実行するように設定された特性を有する環境において実行されることが重要である。更に、ターゲット・コードの最適化変換を実行する変換コンテキストを、最適化コードを実行するときに維持しておくことが重要である。
【0017】
したがって、異なる命令セットを有するターゲット・プロセッサのために設計された命令から変換された命令を実行するマイクロプロセッサが、ターゲット・プロセッサのコンテキストを維持することができ、変換された命令の実行によって正しい結果が得られるようにする装置および方法を提供することが望ましい。
【0018】
同様に、動的変換によって確保された速度、および新たなプロセッサによって実用化した最適化を、元々設計されたのと同じコンテキストで変換を実行することを保証するプロセスにおいて維持することも望ましい。
(発明の概要)
したがって、本発明の目的は、変換された命令を、それらが元々変換されたのと同じ変換コンテキストで実行されることを保証し、可能なときはいつでも、変換された命令の実行速度を落とすことなく、これを行うことである。
【0019】
本発明のこの目的およびその他の目的は、変換された命令の部分毎に変換コンテキストを維持し、変換された命令の新たな部分を実行すべきときにはいつでも、モーフ・ホストが機能する変換コンテキストを、変換された命令の当該部分の変換における変換コンテキストと比較し、変換コンテキストが同じである場合は実行を許可し、変換コンテキストが異なる場合は、異なる変換の検索、または変換された命令の部分が得られた元の命令の再変換を行わせる方法によって達成される。
【0020】
本発明のこれらおよびその他の目的ならびに特徴は、図面と共に以下に続く詳細な説明を参照することによって、一層良く理解されよう。図面においては、いくつかの図を通じて同様の要素を同様の符号で示すこととする。
(詳細な説明)
先に多少詳しく説明したように、新たなマイクロプロセッサは、コード・モーフィング・ソフトウエアを実行する。コード・モーフィング・ソフトウエアは、ターゲット命令シーケンスをホスト命令シーケンスに変換し、これら変換した命令シーケンスを再利用のために変換バッファに格納し、これら変換した命令シーケンスを実行しようとし、変換したシーケンスが実行して正しい結果を生成した場合状態およびメモリを更新し、変換した命令シーケンスを実行しようとして、実行しても正しい結果を生成しない場合、その効果を破棄する。格納されている変換した命令シーケンスは、最適化され、多くの場合互いにリンクして変換した命令の長いシーケンスを生成することができる。これら長いシーケンスを更に最適化してその長さを短縮し、実行の効率を高めることにより、多くの場合新たなプロセッサが元の変換よりもはるかに速く動作を実行できるようにする。
【0021】
変換した命令シーケンスが、元のターゲット命令によって生成される結果を生成するために、新たなプロセッサは、ターゲット命令の各々を正しくデコードしなければならない。これが意味するのは、新たなプロセッサは、変換した命令が元の命令のコンテキスト全てを含み、これら元の命令の意味が完全に変換されることを保証しなければならないということである。例えば、変換は、セグメント型、そのベース・アドレス、および適正なメモリ・アクセスを実行可能な範囲を規定する情報を決定できなければならない。変換は、実行中にページングがイネーブルされているか否か判断し、アドレスをどのように計算するか、そしてページ例外を受け入れるべきか否かを把握しなければならない。変換は、変換されたターゲット・シーケンスによって達成される結果が、変換されたシーケンスがホスト・プロセッサによって実行されるときにも得ることを可能にする、コンテキストの他の要素全てを決定できなければならない。
【0022】
例えば、X86プロセッサ用の以下のような命令
add $eax, 4($ebp);
は、X86プロセッサに、「ebp」レジスタ内の値に4を加算して、セグメント・オフセットを決定するように指令する。このセグメント・オフセットをチェックして、これが、アクセスされているメモリ・セグメント(スタック・セグメント)のセグメント境界内にあるか否か判定を行う。加えて、X86プロセッサは、命令が、アクセスされているメモリ・セグメントに対して読み出しおよび/または書き込みを行うことを許されているか否かチェックを行い、最後に、セグメント・オフセットをセグメント・ベースに加算して、線形アドレスを生成する。次に、線形アドレスを用いて、命令によってアクセスされたメモリ位置の物理アドレスを決定する。次に、物理アドレスを用いて、当該メモリ位置に格納されている値をフェッチし、このメモリの値を「eax」レジスタ内の値に加算する。
【0023】
しかしながら、命令のこれらの要素に加えて、多数の暗示的要素がある。例えば、ここでは、「ebp」レジスタの使用は、スタック・セグメントの使用を暗示する。異なるレジスタの使用は、異なるセグメントの使用を伴うことを意味する場合もある。
【0024】
X86セグメントは、「拡大」(grow up)や「縮小」(grow down)をすることができる。スタック・セグメントは頻繁に縮小し、他のセグメントは大抵の場合拡大する。セグメント・オフセットが特定のセグメントに対して有効か否かについての判定は、アクセスされているセグメントが拡大するかまたは縮小するかによって異なる。拡大セグメントでは、有効なオフセットは0からセグメント限界までの範囲を取る。縮小セグメントでは、有効なオフセットはセグメント限界から、16ビット・セグメントでは最大のオフセット(216-1)および32ビット・セグメントでは最大のオフセット(232-1)までの範囲を取る。
【0025】
線形アドレスを計算したなら、ページングがイネーブルされているか否か判定を行う。イネーブルされていない場合、線形アドレスはメモリ・データの物理アドレスである。ページングがイネーブルされている場合、物理アドレスを計算しなければならない。いずれの場合でも、メモリ・セグメントの限界を検査し、アドレスが正当か否か判定を行う必要があり、最終的にデータにアクセスし、eaxレジスタ内の値に加算する。
【0026】
このように、この単純な命令では、ebpレジスタがスタック・レジスタであるという知識、メモリ内のスタックのベース・アドレス、セグメントが拡大するか縮小するかに依存するセグメントの有効オフセット範囲、ページングがイネーブルされているか否か、アドレスされているメモリ・セグメントの型、およびそのベース・アドレスは、全て、コンテキストを構成する特性であって、実行時に動作を適正に遂行できるためには、変換した命令について知っていなければならないことである。
【0027】
実際、インタープリタ(interpreter)がターゲット命令を実行するとき、これら暗示的な(即ち、背景)ステップを全て実行し、命令を正しく実行するためにチェックを行う。暗示的ステップおよびチェックは、明示的に実行しなければならず、大きな負担となる虞れがある。同じことは、ターゲット命令からホスト命令への単純な(naive)変換にも言えよう。
【0028】
当業者であれば認めるだろうが、命令は、動作モードを構成する特性の1つを変えることによって、命令が実行するコンテキストを変えることができる。このため、新たなプロセッサは、命令を追跡し、変換した命令シーケンスを実行すべきコンテキストをターゲット命令が変化させたとき、変換されたシーケンス内でコンテキストの要素が変化することを保証しなければならない。このようにして、変換したシーケンスのコンテキストが、変換したシーケンスが実行を完了するときに、新たなプロセッサに対して正しく表現されるようになる。
【0029】
変換した命令シーケンスの各々が、コンテキストを構成する必要な特性全てを決定することができる情報を含まなければならないだけでなく、変換した命令シーケンスのいずれもが正しく実行され、次のシーケンスを実行しようとするときにはいつでも、新たなプロセッサは、現在それが動作しているコンテキストが、次のシーケンスの先頭を正しく実行するために必要なコンテキストであることを保証しなければならない。このため、新たなプロセッサは、変換した命令の最初のシーケンスの終了時に存在するコンテキストを検査し、これが、変換した命令の次のシーケンスが必要とするコンテキストと同一であることを保証しなければならず、そうして初めて次のシーケンスの実行を開始することができる。
【0030】
同様に、変換した命令シーケンスを2つリンクして単一のシーケンスにするためには、新たなプロセッサは、第1シーケンスが実行を終了するときのコンテキストが、リンクされるシーケンスが実行を開始するときのコンテキストと同一であることを確認しなければならない。
【0031】
以上からわかるように、変換した命令シーケンス各々にコンテキストの要素全てを含ませ、実行を開始する前に新たなシーケンス各々のコンテキストをチェックする必要性があるため、効率的なコードが生成できない。
【0032】
本発明は、これらの問題を克服し、ターゲット・プロセッサが同じコードを実行する速度に匹敵する速度で効率的に実行するコードを生成する。本発明は、局在性(locality)の性質に基づいて、一層効率的に実行するコードを発生する。
【0033】
更に具体的には、殆どの場合、いずれのプロセスまたはプログラムにおいてもプロセッサが実行する命令は、1回よりも多く実行されるか、または殆どの時間他の命令と共に実行される傾向がある。これは、ある命令シーケンスと次の命令シーケンスのコンテキストが同様または同一となるという効果を有する。例えば、コンテキストの要素の多くは、アクセスされる特定のメモリ・セグメントに依存し、セグメントのベース・アドレスおよび範囲、セグメントが拡大するのかまたは縮小するのか、ならびにセグメントは書き込み可能かまたは読み出しのみが可能かということは、全て、アクセスされるセグメントに依存する要素である。これらの要素は、セグメントがあるシーケンスと次のシーケンスで同じであれば、同じである。殆どの場合、第1のシーケンスに用いられるメモリ・セグメントは、次のシーケンスに用いられるセグメントと同じである。また、コンテキストの他の要素も、局在性の特性を表す。局在性の性質によって、本発明はシーケンス同士でコンテキストが同一であることを仮定することが可能となる。
【0034】
コンテキストが同一であるという仮定によって、新たなプロセッサは、命令シーケンスを変換する際に、変換を適正に実行するためのコンテキストをある不変量としての様式で表現することが可能となる。次いで、変換に対するコンテキストが正しいことを判定するために必要な検査の各々を隈無く行う代わりに、プロセッサは、コンテキスト全体が同じであることを判定するために、前記表現を単にチェックするのみとする。これが同一であれば、変換したシーケンスを実行することができる。同一でない場合、プロセッサは、判断基準を満たす別の変換を探す。何も見つからない場合、新たな変換を発生しなければならない。概略的な方法を図1のフロー・チャートに示す。
【0035】
尚、局在性の性質をこのように用いることによって、変換した命令シーケンスを、不変量として扱われているコンテキストの要素に内在する命令の分だけ、短縮できることがわかるであろう。図2は、インタープリタが前述の加算(add)関数のステップを実行するために必要なステップを表す動作シーケンスを示す。見てわかるように、これらのステップの内少なくとも10個は、加算関数と同じ結果を与えるように動作が実行されることを保証するためにシーケンスに挿入されるコンテキストによって必要とされるステップである。アステリスクを付けた動作は、命令シーケンスから除去し、変換したシーケンスの先頭において何らかの方法で表すことができる。例えば、2つの状態の一方または他方であり得るコンテキストの要素は、各々、コンテキストの最初の表現(例えば、クアッド・ワード(quad word))のいずれかの指定位置における単一ビットによって表すことができ、一方、より多くの状態を有する特性は、クアッド・ワードの他のいずれかの指定位置において、より多くのビット数を必要としよう。
【0036】
図3は、変換した命令の第1のシーケンスの実行を完了し、次のシーケンスを開始する際における、新たなプロセッサの動作を示すフロー・チャートである。図示する第1のステップは、次の命令シーケンスのコンテキストの検査である。新たなプロセッサは、コンテキストの現在の表現を見て(第1のシーケンスが完了したときに機械が動作していたコンテキスト)、このコンテキストを次のシーケンスのコンテキストの表現と比較する。コンテキストが全体的に同じであれば、以前のシーケンスと同じコンテキストで、変換した命令の次のシーケンスを実行する。これによって、以前のシーケンスにおいて、コンテキストが正しいか否か判定するために必要とされたステップ全てが不要となる。図2においてアステリスクを付けたステップを実行する代わりに、新たなプロセッサは、各条件を満たすことを仮定し、それに応じて以下のステップを実行する。
【0037】
コンテキスト全体が同じでない場合、次の命令シーケンスを実行しない。代わりに、新たなプロセッサは、次のシーケンスに対する判断基準を満たす、別の変換した命令シーケンスを検索する。通例、これは同じターゲット命令シーケンスの別の変換であるが最後に実行したシーケンスのコンテキスト表現と同じコンテキスト表現を有するものである。このようなシーケンスは存在しない可能性がある。その場合、新たなプロセッサは、コード・モーフィング・ソフトウエアを実行してかかる変換を作成し、この変換をそのコンテキスト表現と共に将来の利用のために変換バッファに格納する。
【0038】
変換した命令シーケンスが実行するコンテキストが正しいことを保証するためには、コード・モーフィング・ソフトウエアがコンテキストの予測可能な変化を追跡し、何らかの変化が生じたときにはいつでも、コンテキストの表現を正しい表現に変更する必要がある。このようにして、ホスト・プロセッサが現在実行しているコンテキストは、次のシーケンスのコンテキストの検査を行うときには、正しく表現されることになる。
【0039】
また、コード・モーフィング・ソフトウエアが、予測不可能にコンテキストを変化させる命令を検出することも重要である。例えば、命令が新たなセグメント・レジスタにロードする場合、セグメント毎に変化する可能性のある判断基準が全て変化する場合がある。セグメント・レジスタにロードした後、実際上新しいコンテキストがあれば、シーケンスにおけるその時点以降は、この新しいコンテキストを命令の実行に用いるべきである。影響を受けたコンテキストの部分に依存する後続の命令(例えば、ロードされたセグメント・レジスタにアクセスするあらゆる命令)はどれも、新たなコンテキストが適切であることを検証せずに実行することはできない。コード・モーフィング・ソフトウエアは、2つの間のいずれの地点においても変換を終了することが出来、および/またはコンテキストが変化した地点と、後続の命令が更新値に依存する地点との間でコンテキストを検証するように構成することが出来る。
【0040】
変換した異なるシーケンスをリンクし、これらが単一のより長いシーケンスとして機能するようにすることによって、著しい実行の加速が得られるので、リンク・プロセスの使用は非常に望ましい。2つのシーケンスをリンクしようとする場合、より長いシーケンスの各部分が正しく実行しなければならないことは理解されよう。したがって、より長いシーケンスの各部分が正しく実行するためには、コンテキストが適切でなければならない。これを達成するには、本発明の一実施形態では、第2の変換したシーケンスのアドレスを用いることによって、第1の変換したシーケンスを第2のシーケンスにリンクする。新たなプロセッサでは、アドレスはプログラム制御ユニットに保持されるのが通例である。1つのシーケンスを他のシーケンスにリンクしようとする場合、第1のシーケンスは、プログラム制御におけるアドレスを指示することによって終了する。第2のシーケンスに入ると、変換がコンテキストの表現をチェックし、これが、第2のシーケンスが要求するコンテキストと同一であることを確認する。
【0041】
ホストのコンテキストを、リンクしたシーケンス毎に第2のシーケンスが要求するコンテキストの表現と突き合わせて検査するには、ある数の動作サイクルを要する。このため、本発明の更に高度化した実施形態では、変換からコンテキスト検査を除去し、図4に示すように、元のリンク・プロセスにこれを置く。即ち、2つのシーケンスをリンクすることを最初に決定するときには、第1のシーケンスが終了する際にこれが実行しているコンテキストを、第2のシーケンスが実行を開始する際のコンテキストと比較する。この場合、各々のコンテキストの表現を比較する。コンテキストの表現が同じである場合、リンクを実施する。その後、より長いシーケンスを実行するときには、2つのシーケンスをリンクした時点におけるコンテキストの検査はもはや不要である。第1のシーケンスの終点は、単に第2のシーケンスのアドレスを示すだけであり、リンクが行われる。命令の実行を加速するには、リンクしたシーケンスを実行する毎にチェックするのではなく、元のリンク時点でのみコンテキストをチェックする。
【0042】
同様に、変換の検索を実行するときにはいつでも、一実施形態では、特定の変換および特定のコンテキスト双方を探す。このようにして、機械動作コンテキストの要求変換コンテキストに対するチェックを、変換したシーケンスから完全に除去し、図5に示すように、コード・モーフィング・ソフトウエアのディスパッチ機能に置く。本質的に、ディスパッチ機能は、新たな変換が必要とされるときまたは提案されたリンクを実行すべきときにはいつでも、変換バッファを検索して正しい変換および正しいコンテキストを求めることによって、変換した命令の次のシーケンスを探して実行する。
【0043】
本発明は、命令の実行速度を更に高める拡張機能を設ける。本発明によって設けられる拡張機能の1つは、命令が予測不可能にコンテキストを変化させる場合に、リンクを行うことを可能にする。この動作は、プログラム・コントローラによって保持されているアドレスへのリンク、次いで現コンテキストに対する新コンテキストの検査を行うことを可能にする。コンテキストの表現が同じであれば、リンクを継続することができる。
【0044】
別の拡張機能(図5にも示されている)は、新たに変換したシーケンスが、正しい結果を生成するためには、ホストが実行中の現コンテキストと同じコンテキストを有することは常に必要な訳ではないという事実に依存する。変換したシーケンスの中には、ホストが実行中のコンテキストよりも少ないコンテキストの要素、または制限の少ないコンテキストの要素に依存するものもある。このようなシーケンスは、更に実行すべきシーケンスの正しい実行のために必要なコンテキストがある限り、実行し且つ以前のシーケンスにリンクすることができる。これは、実行すべき変換したシーケンスのコンテキストの表現を、ホストの現コンテキストの表現と比較し、異なるコンテキストの要素を判定することによって、検査することができる。次いで、異なる要素を検討し、これらが、実行すべきシーケンスに対して必要であるか否か判定を行い、必要であれば、相違は、実行すべきシーケンスにおいてこれらの制約が少なくなることであるか否か判定を行う。コンテキスト要素が必要でないかあるいは制約が少ない場合、シーケンスは実行またはリンクすることができる。
【0045】
コンテキストを表現する態様は、図6に示すように、広い範囲にわたって様々に異なる可能性がある。例えば、互いに連結したときのコンテキスト要素全てが、機械レジスタ(例えば、32または64ビット)において容易に利用可能なビット以下を占める場合、コンテキストはこのような連結によって表現することができ、表現に対する単純なビット演算(例えば、XORおよびAND)を実行することによって、容易に検査を行うことができる。あるいは、コンテキストにおける要素の数およびサイズが、レジスタにおいて容易に利用可能なビット数を上回る場合、コンテキスト要素をメモリ内のデータ構造に格納すればよく、そのデータ構造内へのポインタを用いて、比較を行い正確なコンテキストの一致を求めることができる。すると、ポインタはコンテキストの表現となる。コンテキストの個々の要素に依存する、一層複雑な比較(正確な一致ではない)を行うのであれば、メモリ内のデータ構造にアクセスしなければならないであろう。
【0046】
コンテキストを表現する別の方法は、これら2つの技法の混成である。要素の一部は直接表現することができ、一方他の要素はメモリに格納する。表現の残りは、メモリ内のデータ構造に対するポインタ/インデックスである。この場合も、正確な比較は単純であり、一方要素に依存する比較はより複雑である。
【0047】
以上、好適な実施形態に関して本発明を説明したが、本発明の精神および範囲から逸脱することなく、種々の変更や変形が可能であることが当業者によって認められよう。したがって、本発明は、特許請求の範囲に関して判断するべきである。
【図面の簡単な説明】
【図1】 図1は、本発明による方法を示すフロー・チャートである。
【図2】 図2は、1つの特定の命令を実行する際に必要なステップを示す図である。
【図3】 図3は、本発明を実施する方法を示すフロー・チャートである。
【図4】 図4は、本発明の方法の一部を示すフロー・チャートである。
【図5】 図5は、本発明の方法の別の一部を示すフロー・チャートである。
【図6】 図6は、本発明によるコンテキストの表現を示す図である。
Claims (14)
- ホスト・マイクロプロセッサ上で走らせるために、ターゲット・マイクロプロセッサのために設計された命令から変換された命令に対する変換コンテキストを維持する方法であって、
変換された各ホスト命令に関係する変換コンテキストを格納するステップと、
前記ホスト・プロセッサによって現在実行されているホスト命令に対する変換コンテキストを指示するステップと、
次のホスト命令のために格納されている変換コンテキストを、現在実行中のホスト命令に対する変換コンテキストと比較するステップと、
前記次のホスト命令の変換コンテキストと現在実行中のホスト命令の変換コンテキストとが一致した場合、前記次のホスト命令を実行するステップと、
前記次のホスト命令の変換コンテキストと、前記現在実行中のホスト命令の変換コンテキストが一致しない場合、前記現在実行中のホスト命令の変換コンテキストに相当する変換コンテキストを有する命令を検索するステップと、
から成る方法。 - 請求項1記載の方法において、変換された各ホスト命令に関係する変換コンテキストを格納する前記ステップは、変換コンテキストの表現を、変換されたホスト命令の一部として格納することから成る方法。
- 請求項2記載の方法において、前記表現は、変換コンテキストを格納してあるアドレスに対するポインタである方法。
- 請求項2記載の方法において、前記表現は、変換コンテキストを示す1組のビットである方法。
- 請求項2記載の方法において、前記表現は、変換コンテキストを示す1組のビットと、および追加の変換コンテキストを格納してあるアドレスに対するポインタである方法。
- 請求項1記載の方法において、変換された各ホスト命令に関係する変換コンテキストを格納するステップは、変換されたホスト命令以外に変換コンテキストの表現を格納することから成る方法。
- 請求項1記載の方法において、次のホスト命令のために格納されている変換コンテキストを、現在実行中のホスト命令に対する変換コンテキストと比較する前記ステップは、変換にアクセスするときに行われる方法。
- 請求項1記載の方法であって、更に、変換されたホスト命令の第1のシーケンスの変換コンテキストと後続の変換されたホスト命令の変換コンテキストが一致した場合、前記変換されたホスト命令の第1のシーケンスを、前記変換されたホスト命令の後続のシーケンスとリンクするステップを含む方法。
- 請求項8記載の方法において、次のホスト命令のために格納されている変換コンテキストを、現在実行中のホスト命令に対する変換コンテキストと比較する前記ステップは、第1の変換シーケンスを後続の変換シーケンスにリンクするときに行われる方法。
- 請求項1記載の方法であって、更に、後続の変換されたホスト命令に影響を与える第1の変換されたホスト命令の変換コンテキストが、前記後続の変換されたホスト命令の変換コンテキストと一致する場合、前記第1の変換されたホスト命令を前記後続の変換されたホスト命令にリンクするステップを含む方法。
- 1つ以上のターゲット命令から成るソースグループと、1つ以上のターゲット命令から成る目標グループとであって、前記ソースグループが次の命令が前記目標グループに有ることを示す終点を含むもの、を実行する方法であって、
前記ソースグループをソース変換に変換するステップと、
前記目標グループを目標変換コンテキストを伴う目標変換に変換するステップと、
前記目標変換コンテキストを記憶するステップと、
前記ソース変換を終点まで実行し、実行コンテキストを指示するステップと、
前記実行コンテキストと前記目標変換コンテキストとを比較するステップと、
前記比較が成功した場合、前記目標変換を実行するステップと、
から成る方法。 - 請求項11記載の方法であって、更に、前記比較が成功した場合、前記ソース変換を前記目標変換にリンクするステップを含む方法。
- 請求項12記載の方法であって、前記リンクするステップが更に、前記ソース変換を前記目標変換に直接ジャンプするように修正するステップを含む方法。
- 請求項11記載の方法であって、更に、前記比較が成功した場合、前記ソース変換の次の実行後の前記比較ステップを負うことなく、前記ソース変換を修正するステップを含む方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/417,981 US6415379B1 (en) | 1999-10-13 | 1999-10-13 | Method and apparatus for maintaining context while executing translated instructions |
US09/417,981 | 1999-10-13 | ||
PCT/US2000/040856 WO2001027741A1 (en) | 1999-10-13 | 2000-09-06 | Method and apparatus for maintaining context while executing translated instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003511787A JP2003511787A (ja) | 2003-03-25 |
JP3786603B2 true JP3786603B2 (ja) | 2006-06-14 |
Family
ID=23656160
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001530687A Expired - Lifetime JP3786603B2 (ja) | 1999-10-13 | 2000-09-06 | 変換した命令を実行しつつコンテキストを維持する方法および装置 |
Country Status (9)
Country | Link |
---|---|
US (1) | US6415379B1 (ja) |
EP (1) | EP1226492B1 (ja) |
JP (1) | JP3786603B2 (ja) |
KR (1) | KR100498272B1 (ja) |
CN (2) | CN1264083C (ja) |
AT (1) | ATE326721T1 (ja) |
CA (1) | CA2379976C (ja) |
DE (1) | DE60028069T2 (ja) |
WO (1) | WO2001027741A1 (ja) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6199152B1 (en) | 1996-08-22 | 2001-03-06 | Transmeta Corporation | Translated memory protection apparatus for an advanced microprocessor |
US8065504B2 (en) | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7275246B1 (en) * | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7761857B1 (en) * | 1999-10-13 | 2010-07-20 | Robert Bedichek | Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts |
US6845353B1 (en) | 1999-12-23 | 2005-01-18 | Transmeta Corporation | Interpage prologue to protect virtual address mappings |
US7036106B1 (en) | 2000-02-17 | 2006-04-25 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6763327B1 (en) * | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US6594821B1 (en) | 2000-03-30 | 2003-07-15 | Transmeta Corporation | Translation consistency checking for modified target instructions by comparing to original copy |
US6968469B1 (en) | 2000-06-16 | 2005-11-22 | Transmeta Corporation | System and method for preserving internal processor context when the processor is powered down and restoring the internal processor context when processor is restored |
US6615300B1 (en) | 2000-06-19 | 2003-09-02 | Transmeta Corporation | Fast look-up of indirect branch destination in a dynamic translation system |
US6826682B1 (en) | 2000-06-26 | 2004-11-30 | Transmeta Corporation | Floating point exception handling in pipelined processor using special instruction to detect generated exception and execute instructions singly from known correct state |
US7310723B1 (en) | 2003-04-02 | 2007-12-18 | Transmeta Corporation | Methods and systems employing a flag for deferring exception handling to a commit or rollback point |
US7681046B1 (en) | 2003-09-26 | 2010-03-16 | Andrew Morgan | System with secure cryptographic capabilities using a hardware specific digital secret |
US7694151B1 (en) | 2003-11-20 | 2010-04-06 | Johnson Richard C | Architecture, system, and method for operating on encrypted and/or hidden information |
US8413162B1 (en) | 2005-06-28 | 2013-04-02 | Guillermo J. Rozas | Multi-threading based on rollback |
US7496727B1 (en) | 2005-12-06 | 2009-02-24 | Transmeta Corporation | Secure memory access system and method |
US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
US9672019B2 (en) | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
WO2013048468A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
US9032381B2 (en) | 2012-06-29 | 2015-05-12 | Intel Corporation | State recovery methods and apparatus for computing platforms |
US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
US9250900B1 (en) | 2014-10-01 | 2016-02-02 | Cadence Design Systems, Inc. | Method, system, and computer program product for implementing a microprocessor with a customizable register file bypass network |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4456954A (en) * | 1981-06-15 | 1984-06-26 | International Business Machines Corporation | Virtual machine system with guest architecture emulation using hardware TLB's for plural level address translations |
US4951195A (en) * | 1988-02-01 | 1990-08-21 | International Business Machines Corporation | Condition code graph analysis for simulating a CPU processor |
US5926832A (en) * | 1996-09-26 | 1999-07-20 | Transmeta Corporation | Method and apparatus for aliasing memory data in an advanced microprocessor |
US6591414B2 (en) * | 1996-10-28 | 2003-07-08 | Fujitsu Limited | Binary program conversion apparatus, binary program conversion method and program recording medium |
-
1999
- 1999-10-13 US US09/417,981 patent/US6415379B1/en not_active Expired - Lifetime
-
2000
- 2000-09-06 KR KR10-2002-7004740A patent/KR100498272B1/ko active IP Right Grant
- 2000-09-06 CN CNB008143153A patent/CN1264083C/zh not_active Expired - Lifetime
- 2000-09-06 AT AT00974084T patent/ATE326721T1/de not_active IP Right Cessation
- 2000-09-06 CA CA002379976A patent/CA2379976C/en not_active Expired - Fee Related
- 2000-09-06 JP JP2001530687A patent/JP3786603B2/ja not_active Expired - Lifetime
- 2000-09-06 EP EP00974084A patent/EP1226492B1/en not_active Expired - Lifetime
- 2000-09-06 DE DE60028069T patent/DE60028069T2/de not_active Expired - Lifetime
- 2000-09-06 CN CNB2005101188818A patent/CN100401258C/zh not_active Expired - Lifetime
- 2000-09-06 WO PCT/US2000/040856 patent/WO2001027741A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
CN1379872A (zh) | 2002-11-13 |
WO2001027741A1 (en) | 2001-04-19 |
US6415379B1 (en) | 2002-07-02 |
EP1226492B1 (en) | 2006-05-17 |
JP2003511787A (ja) | 2003-03-25 |
EP1226492A4 (en) | 2005-03-30 |
KR20020039688A (ko) | 2002-05-27 |
ATE326721T1 (de) | 2006-06-15 |
CA2379976A1 (en) | 2001-04-19 |
CA2379976C (en) | 2009-04-07 |
CN1862495A (zh) | 2006-11-15 |
CN1264083C (zh) | 2006-07-12 |
EP1226492A1 (en) | 2002-07-31 |
CN100401258C (zh) | 2008-07-09 |
DE60028069T2 (de) | 2006-12-21 |
DE60028069D1 (de) | 2006-06-22 |
KR100498272B1 (ko) | 2005-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3786603B2 (ja) | 変換した命令を実行しつつコンテキストを維持する方法および装置 | |
US5721927A (en) | Method for verifying contiquity of a binary translated block of instructions by attaching a compare and/or branch instruction to predecessor block of instructions | |
EP4099152B1 (en) | Extending a virtual machine instruction set architecture | |
US6820255B2 (en) | Method for fast execution of translated binary code utilizing database cache for low-level code correspondence | |
EP1955153B1 (en) | Method and apparatus for converting program code with access coordination for a shared resource | |
JP3499252B2 (ja) | コンパイル装置及びデータ処理装置 | |
JP4399268B2 (ja) | ポインタ識別及び自動データプリフェッチ | |
US7725677B1 (en) | Method and apparatus for improving segmented memory addressing | |
JPH04225431A (ja) | 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法 | |
US9235397B2 (en) | Method and apparatus for increasing task-execution speed | |
US20090055814A1 (en) | Just-in-time compiler support for interruptible code | |
US6931638B2 (en) | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine | |
US6687807B1 (en) | Method for apparatus for prefetching linked data structures | |
JP2002366367A (ja) | プログラム命令解釈 | |
US6260191B1 (en) | User controlled relaxation of optimization constraints related to volatile memory references | |
WO2021036173A1 (zh) | 解释执行字节码指令流的方法及装置 | |
US10802854B2 (en) | Method and apparatus for interpreting bytecode instruction stream | |
JPH025138A (ja) | シミユレーシヨン方法 | |
JPH08161169A (ja) | Vliw方式の計算機システム及びvliwの解釈・実行方法 | |
US20080077777A1 (en) | Register renaming for instructions having unresolved condition codes | |
EP1451681B1 (en) | System and method for low overhead boundary checking of java arrays | |
CN112559064A (zh) | 一种启动动态链接程序的方法和装置 | |
JPS6337416B2 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050517 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050816 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050823 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051110 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051215 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060127 |
|
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: 20060217 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060320 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 3786603 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: 20090331 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100331 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100331 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100331 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110331 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130331 Year of fee payment: 7 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140331 Year of fee payment: 8 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |