JP4088418B2 - ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令 - Google Patents

ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令 Download PDF

Info

Publication number
JP4088418B2
JP4088418B2 JP2000539410A JP2000539410A JP4088418B2 JP 4088418 B2 JP4088418 B2 JP 4088418B2 JP 2000539410 A JP2000539410 A JP 2000539410A JP 2000539410 A JP2000539410 A JP 2000539410A JP 4088418 B2 JP4088418 B2 JP 4088418B2
Authority
JP
Japan
Prior art keywords
instruction
routine
emulation
value
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2000539410A
Other languages
English (en)
Other versions
JP2002508563A (ja
Inventor
デビット・ダブリュー・トリッセル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NXP USA Inc
Original Assignee
NXP USA Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NXP USA Inc filed Critical NXP USA Inc
Publication of JP2002508563A publication Critical patent/JP2002508563A/ja
Application granted granted Critical
Publication of JP4088418B2 publication Critical patent/JP4088418B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

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)

Description

(先行出願への参照)
本出願は、米国特許出願第08/990,780号として出願されている。
【0001】
(産業上の利用分野)
本発明は、一般にコンピュータに関し、さらに詳しくは、ソフトウェアのエミュレーションまたは翻訳済みソフトウェアの実行に関する。
【0002】
(従来の技術)
コンピュータ産業においては、現在、ソフトウェアを多くの異なるハードウェア・プラットフォーム上で実行することを可能にするエミュレーション技術および翻訳済みコンピュータ言語の実行を重要視している。エミュレーションと翻訳済み言語実行を利用することの利点は、1つのハードウェア・プラットフォームで実行するためにソフトウェアを書くと、余り多くの労力を費やすことなく同じソフトウェアを他のハードウェア・プラットフォームに移植することができることである。しかし、エミュレーションや翻訳済み言語実行を行うには、ユーザのソフトウェア・コードのハードウェアに対する独立性を得るために、ユーザの実行可能なソフトウェア・コードと実際のハードウェアとの間に追加のソフトウェア・レイヤが必要になる。この追加のレイヤのソフトウェアは、ユーザ・ソフトウェアが特定のハードウェア・プラットフォームに関して直接的に編集され、そのハードウェア・プラットフォームで直接実行される他のコンピュータ・システムでは通常見られないエミュレーション・オーバーヘッドとなる。エミュレーションに追加のソフトウェア・レイヤを加えると、ハードウェアの微妙な差異の影響を受けないで、より大きな互換性が得られるが、ユーザ・ソフトウェアの実行は遅くなる。
【0003】
コンピュータ産業の目標は、この追加のソフトウェア・レイヤの性能に与える影響を小さくして、それにより種々のエミュレータまたは翻訳済み言語装置(たとえばJava,Smalltalk,BASIC)の速度を上げることである。エミュレーション・オーバーヘッドを小さくするために、コンピュータ業界は、カスタマイズされたハードウェアを作成し、中間レイヤのソフトウェアを簡略にして、性能を改善しようと試みている。従って、オーバーヘッドを小さくした新規のエミュレーション取出解読ルーチンであって、それによりエミュレーション/翻訳性能が改善されるルーチンが必要とされる。
【0004】
(好適な実施例の説明)
一般に、本発明は取出解読エミュレータ・オーバーヘッド(fetch and decode emulator overhead)を削減し、さらにエミュレータ・システムの演算コード・エミュレーション済み実行オーバーヘッドを削減するための方法および装置である。本明細書に教示されるシステムを用いて、任意の種類のエミュレーションまたは翻訳済み言語実行を行い、Java,Small Talk,BASICコンピュータ・コードなどの任意のコンピュータ言語のエミュレーションまたは実行を行うことができる。詳しくは、本件においては新規のコンピュータ命令が採用される。すなわち、新規のコンピュータ命令が命令オペランドを処理して、複数のレジスタに格納される複数の結果を生成する。このとき、各レジスタは異なるデータ・フォーマットにおいてその結果を格納する。この命令(ここではLGMDTと略する)は、結果に関して異なるフォーマットまたは予備処理を用いて異なるレジスタ内に結果を提供するので、エミュレータ・ルーチンで必要とされる演算コード・エミュレーション命令の数を減らすことができ、それによってエミュレーションまたは翻訳済み言語実行をより高速で行うことができる。さらに、このLGDMT命令により、システム内でエミュレーションされる命令毎に実行される取出解読エミュレータ・オーバーヘッドも削減されることになり、それによってエミュレーションの性能がさらに改善される。実験結果から、本明細書に教示される方法を介して得られる改善は、10%以上であることがわかっている。
【0005】
本発明は、図1ないし図8を参照することでさらに理解することができる。図1は、本発明によりエミュレーションまたは翻訳済み言語実行を実施するために用いられるエミュレータ・システム10のブロック図である。エミュレーション・システム10は、各々が1つ以上のソフトウェア命令を含む多数の部分/ルーチンによって構成される。図1は、このような部分/ルーチンの1つがセットアップ・コード11である場合を示す。セットアップ・コード11は、レジスタを初期化して適切なソフトウェア・エミュレーションを可能にするコンピュータ命令を含む。エミュレーション・システム10は、命令エミュレーション演算コードとオペランド・データとをメモリ124(図8を参照)から繰り返し取り出して、命令に関して適切な解読動作を実施し、どのベクトル・エミュレーション・ルーチンを実行すべきかを判断する取出および解読ループ12も備える。ルーチン12が実施する「解読」処理には、通常、エミュレーション・ソフトウェア実行の流れをテーブル14内の1つ以上のエミュレーション・ルーチンに送るテーブル・ベクトル・アドレスの生成が含まれる。
【0006】
図1は、ルックアップ・テーブル14内の複数のベクトル・エミュレーション・ルーチンを示す。図1のベクトル・エミュレーション・ルーチン14は、特に、5つのエミュレーション・ルーチン16〜24を示す。しかし、これは例として行われるに過ぎず、任意の数のエミュレーション・ルーチンを用いることができる。図1の各ルーチン16〜24には、16個の32ビット・ワードの情報が含まれる。従って、第1のエミュレーション・ルーチンは、図1のテーブルベース(TABLEBASE)と記されるアドレスで始まり、バイトレベルのアドレス指定を用いる場合はアドレスTABLEBASE+63で終了する。第2のエミュレーション・ルーチンは、図1ではTABLEBASE+64と記されるアドレスで始まり、さらにメモリ・アレイ内で64バイト(すなわち16ワード)進んだところで終了する。64バイトでは特定の命令をエミュレーションするのに足りない場合は、この特定の命令のエミュレーションを完了させるために、テーブル14のブロック終点で分岐またはジャンプ命令を用いて、テーブル14の外側にある別の場所に分岐/ジャンプしなければならない。各エミュレーション・ルーチン(通常、各エミュレーション命令について1つのルーチンが存在する)に対して、エミュレーション・ルーチンを格納するために64バイト(すなわち16ワード)のスペースが割り当てられるので、各エミュレーション・ルーチンは、アドレスTABLEBASEから64の倍数であるアドレス値で始まる。64バイト以外の他のサイズのテーブル・エントリを用いることができることにも留意されたい。
【0007】
図1は、アドレスTABLEADDRESS始まり、アドレスTABLEADDRESS+63で終了する無演算(NOP:no operation)ルーチンを示す。あるルーチンに関して提供されるテーブル・スペースのすべてが個々のルーチンに用いられる訳ではないので、ある程度のスペースの無駄は容易に許容することができる。図1は、BIPUSH(バイト整数プッシュ・ルーチン)命令に関するBIPUSHルーチンを示す。BIPUSHルーチンは、アドレス・テーブルベース+64xNに位置する。このBIPUSHルーチン20には、エミュレーション中にバイト整数プッシュを実施するコンピュータ命令が含まれる。図1のエミュレーションPOPルーチン22は、アドレスTABLEBASE+64xMで始まり、メモリ内のオペランド・スタックのトップ・ワードをポップオフさせるために用いられるコンピュータ命令を含む。図1の最後のエミュレーション・ルーチン24は、アドレスTABLEBASE+64x255で始まるものとして図示される。言い換えると、詳しくは、図1は、図1のテーブル14内には28=256ルーチンが存在することを示す。この256ルーチンの実施例においては、Javaで用いられるような単独の演算コード・バイトが図1の256個のルーチンのうち任意のルーチンを一意的にアドレス指定することができる。任意の数のルーチンを用いることができ、それによって本明細書に教示される方法を用いて、Java,ペンティアム・コード,BASIC,Smalltalkなどの任意の言語のエミュレーションを実施することができることに注目されたい。
【0008】
図2は、図1に示される種々の関数を実現するために用いられる特定のソフトウェア・コードを示す。たとえば、図2は、図1のセットアップ・コード11を実現するために用いられる特定の命令(命令群)を示す。図2は、アセンブラの決定したTABLEBASEアドレスをTABLEBASEレジスタ内にコピーするために、ロード・アドレス(LA)命令がセットアップ・コード11の一部として実行される様子を示す。この中央処理装置(CPU)ハードウェア・レジスタをRTABLEBASEと称する。このロード・アドレス(LA)命令に加えて、他の命令を図2のセットアップ・コード11の一部として実行し、エミュレーションまたは翻訳済み言語実行にハードウェア・システムを備えることもできる。
【0009】
セットアップ・コード11が実行されると、図2の取出解読ループ12が実行される。図2の取出/解読ループ12には、「取出」と「取出2」と題された各アセンブラ・ラベルが含まれる。これらは、コンピュータ・コード12の実行時のアドレスを象徴的に示す。取出解読ユニット12の取出解読動作は、更新を伴うバイト・ゼロのロード(LBZU)命令を実行することにより始まる。この命令を実行すると、プログラム・カウンタ・レジスタ(RPC)内に格納されるアドレスからROPCODEと称されるCPUハードウェア・レジスタ内に演算コードがロードされる。詳しくは、図2のループ12内の最初のLBZU命令により、プログラム・カウンタ・レジスタ(RPC)に整数1が加えられ、次にこの増分されたアドレスを用いてメモリから演算コードにアクセスし、この演算コードをROPCODEレジスタに格納する。ROPCODEレジスタ値は32ビット長の値で、これにはJavaに関して256個の一意値のうちの1つを含めることができる。この8ビットの一意的演算コード値を図2のテーブル14内の特定のエミュレーション・ルーチンにアクセスするための指標値として用いる。テーブル14内のルーチンは、長さにして16ワード(すなわち64バイト)のメモリのブロックであるので、図2の第1のLBZU命令を介して読み込まれた演算コードを6ビット位置だけ左にシフトしなければならない。この指標シフト関数を実施するためには、ワード直左シフト(SWLI:shift word left immediate)命令を用いて、ROPCODEレジスタに格納される値を左に6ビット位置だけシフトさせ、それによってシフトされた結果をROPCODEに戻す。
【0010】
次に、ADD(加算)命令を用いて、ROPCODEレジスタ内に格納されるシフトされた指標をRTABLEBASEレジスタに格納されるTABLEBASEアドレスと加算する。RTABLEBASEレジスタ値とROPCODEレジスタ値とのこの加算は、RTEMPと記される一時レジスタである宛先内に行われる。ここで、RTEMP値はテーブル14内の特定のエミュレータ命令のアドレスを含む。所望のコンピュータ命令を適切にエミュレーションするためには、この命令をエミュレータにより実行しなければならない。
【0011】
テーブル14内の特定のエミュレーション・ルーチンを適切に分岐するためには、カウント・レジスタへの移動(MTCTR:move to count register)命令を実行して、RTEMPレジスタに格納されるアドレスを、CPUハードウェア・アーキテクチャ内のカウント・レジスタ(RCTR)に移動する。カウント・レジスタとは、中央処理装置(CPU)のアーキテクチャ内部のレジスタ、またはこのカウント・レジスタがCPUの分岐処理装置(BPU:branch processing unit)に結合されるプロセッサである。次に、ルーチン12内のMTCTR命令に続いて後続のカウント・レジスタ分岐(BCTR:branch count register)命令により、エミュレーションされたプログラムはカウント・レジスタ内に格納されるアドレスに分岐され、テーブル14内のルーチンへの実行の流れの変更が可能になる。図2に示されるように、取出解読ループ12の最後の命令はこのBCTR命令で、これによってテーブル14内のルーチンの1つをこの後で実行することができる。
【0012】
図2のルーチン12においてMTCTR命令とBCTR命令の実行の間に、予備取出動作が実施される。予備取出動作は、追加のLBZU命令を図2の取出解読ループ12の終点付近で実行することにより実施される。ルーチン12内のこの第2のLBZU命令により、プログラム・カウンタ・レジスタ(RPC)が1だけ増分され、この増分されたプログラム・カウンタ値に位置するメモリからデータ値にアクセスする。このとき、プログラムは、この第2のLBZU命令を介してアクセスされたデータがエミュレーション・データ・オペランドであるのか、新規のエミュレーション命令演算コードであるのかについて不確定である。この予備取出命令によって何が含まれるのかの決定が、図2のルーチン12のBCTR命令の実行に続いて、テーブル14内で実行されるコードによりなされる。
【0013】
図2は、図1に当初示される3つのエミュレーション・ルーチン16,20,22を詳しく示す。ルーチン16は、テーブル14内の最初のルーチンであり、0の8ビットの演算コード値(たとえば00000000バイナリ)によりアクセスされる。すべてゼロの値を有する演算コードがルーチン12により読み込まれると、このゼロ値がシフトされ、指標としてTABLEBASE値に加えられる。これによりRTEMPレジスタにはTABLEBASE+0が含まれることになる。読み込まれた演算コードがゼロに等しい場合、ルーチン12におけるBCTR命令の実行により、BCTR命令の実行に続きテーブル16内でルーチン16のソフトウェア命令が実行されることになる。ルーチン16は非演算(NOP)ルーチンを実現し、それによってシステムは関数演算を実施しない。また、システムは単純に時間を止めようとする。ルーチン16は何の動作も実施しないので、ルーチン16には図2の取出解読ループ12に戻る分岐が含まれるに過ぎない。ルーチン16は、NOP命令エミュレーション・ルーチンであり、NOP命令にはオペランドがないので、ルーチン16は、ルーチン12の第2のLBZU命令からの予備取出値が演算コードでありデータ/オペランドでないことを理解している。これは、ルーチン12の第2のLBZU命令がアクセスしたメモリからの予備取出値が演算コードであることを意味する。この予備取出値が演算コードであるために、ルーチン16はルーチン12内のラベル取出2(FETCH2)に分岐して、予備取出値を演算コードとして処理する。テーブル14の全ルーチンの最後に取出2(FETCH2)または取出(FETCH)分岐を実施することによって、ソフトウェアが終了するまで、エミュレータにより取出解読動作の連続ループと実行が実施される。
【0014】
図2のルーチン12により読み込まれた演算コードがバイナリ値N(たとえばN=01101100バイナリ)である場合、ルーチン12の実行後のRTEMP値とカウント・レジスタは、値TABLEBASE+Nx64を含むことになる。従って、ルーチン12の終点のBCTR命令により、実行の流れが変化し、テーブル14内のルーチン12内の命令が実行される。ルーチン20において、最初の命令は符号バイト延長(EXTEB:extend sign byte)命令であり、これはROPCODEの内容に関して実施される。この演算は、演算コード・レジスタ上で実施されるが、これは、BIPUSH命令が適切なエミュレーションを行うため必要とされる1つの命令オペランドを含むエミュレーション済み命令であるので、ルーチン12の第2のLBZU命令により取り出された予備取出値がデータ値を表さねばならないことがルーチン20には理解されているためである。ルーチン20が実施するBIPUSH演算は、命令LBZUのみが符号の内8ビット値を32ビットのスペースに読み込む符号付きデータ値を必要とするので、符号バイト延長命令を実行しなければならない。
【0015】
ROPCODEレジスタの値の符号を延長した後で、更新を伴うワード格納(STWU:store word with update)命令が実行される。この命令は、まずJavaスタック・ポインタ(RSP)を4だけ減分し、次にROPCODEの34ビット(4バイト)値をこのRSP位置に置くことにより、ROPCODEの値をJavaオペランド・スタックに入れる。ルーチン20においてコードによりこのスタックが適切に処理されると、ルーチン12内でアセンブラ・ラベル取出(FETCH)へ分岐が戻る。ルーチン12の分岐は、ルーチン20がルーチン12の予備取出バイトをすでに使用/消費してしまったために、ラベル取出2(FETCH2)へは戻らないので、新規の命令取出によりルーチン12を開始しなければならない。
【0016】
ルーチン12が読み込んだ演算コードがM(たとえばM=11100110バイナリ)に等しい場合、ルーチン12の終点のRTEMP値およびカウント・レジスタはTABLEBASE+Mx64に等しくなる。この場合、ルーチン12の終点のBCTR命令により、テーブル14のルーチン22に実行の流れが続く。ルーチン22は、オペランド・スタック上でPOP演算を実施する。このPOP演算を実施するために、ロード・アドレス(LA)命令が、オペランド・スタック・ポインタ(RSP)を用いて実施される。このロード・アドレス命令は、オペランド・スタック・ポインタに4の値を加えて、このアドレス値をスタック・ポインタ(RSP)に戻して、オペランド・スタックから効率的に1ワードを削除する。このアドレス処理がルーチン22において実施されると、POP演算は終了し、実行はルーチン12のラベルFETCH2に戻る。これは、ルーチン12の第2のLBZU命令からの予備取出値に、ルーチン12においてルーチン12の第1LBZU命令を介する別の新規の命令取出を必要とせずに演算コードとして処理しなければならない演算コードが含まれるためである。
【0017】
従って、図2は、外部メモリから演算コードおよびデータのうち1つ以上のものを取り出すようループ状に実行する特定のエミュレータ・ルーチン12を示す。ルーチン12を介して読み込まれた演算コードは、分岐命令BCTRが特定の演算コードに関してエミュレーション・ルーチンを起動するために用いる適切なソフトウェア・エミュレーション・ベクトルを導くために処理される。命令BCTRを実施することにより、テーブル14内の個々のルーチンが適切に実行され、それによってルーチンのすべては最終的に実行制御を取り出した解読ルーチン12に戻る。プログラムが終了されるまで、反復エミュレーション/翻訳は、このループ状に進行する。
【0018】
図2を用いて、エミュレーションおよび翻訳済み言語実行の両方に関するエミュレーション・オーバーヘッドの効果を示すことができる。オーバーヘッドの例として、図2のルーチン22がPOP演算を実施する。エミュレーション環境を用いてこのPOP演算を実施するために、ルーチン12からの6つの命令と、ルーチン22からの2つの命令とを実行して、エミュレーション済みPOP演算を実施する必要がある。しかし、合成されたルーチン12,22内の合計8個の命令のうちから、1つの命令だけ(「LA RSP,4(RSP)」命令)が実際のPOP演算を実施し、8個の命令のうち残りの7つはエミュレーション・オーバーヘッドの一部として実行される。それに由来するPOPエミュレーション・オーバーヘッドは図2のプロセスに関しては80%以上である。さらに、図2のルーチン12は、エミュレーションを必要とする各命令毎に実行されるので、ルーチン12内のオーバーヘッドがエミュレーションの性能全体に大きな影響を与える。これは、ルーチン12がループ状に連続して再実行されるためである。従って、ルーチン12の命令が削減されると、それがいかなるものであっても、各エミュレーション済み命令に関して必要とされるループ状に実行されるオーバーヘッドを大幅に削減することで、エミュレーションの性能全体に大きな影響を与える。また、テーブル14のルーチン16〜22内に位置するコードもより少ない命令に最適化できるように取出解読ループ12を調整することができると、エミュレーション中にさらに大幅な性能の改善を行うことができる。
【0019】
このオーバーヘッドと性能の削減は、図1のアーキテクチャを用いて図3ないし図7により得られる。図3は、図2に示される従来技術による取出解読ループ12の代わりに用いることのできる新規の取出解読ループ12’を示す。図3の新規の取出解読ループ12’は、TABLEBASEアドレス値をメモリ・マップ内の16Kバイトの倍数アドレス(たとえば32K,128K,2048Kなど)に配置することを要する。このL*16K TABLEBASE値が設定されると(ただしLは正の整数)、図3のコードを用いて図2の取出解読ループ12のオーバーヘッドを削減することができる。
【0020】
図3のコードは、図2に関して前述されたのと同じLBZU命令を実施することにより始まる。しかし、図3では図2のSWLIおよびADD命令を単独のINSRWI命令と置き換える。INSRWIは「レジスタの右側からワード隣接値を挿入(insert from the right side of the register with a word immediate value)」を意味する。INSRWI命令により実施される演算を図4のブロック図においてグラフでさらに説明する。
【0021】
図4は、TABLEBASE値が16Kメモリ境界に位置することを示す。TABLEBASE値がこのように配置されるので、位置0からビット位置17までの最高位ビット(MSB:most significant bit)には、TABLEBASE値の高次ビットが含まれ、TABLEBASE値の低次ビット位置18ないし31は、固有のバイナリ値0を有する。INSRWI命令はROPCODEレジスタに格納される演算コード値を取り、この値を6だけシフトさせる。6ビット位置左へのシフトで、演算コード値は、図4に示されるようにRTABLEBASEレジスタのビット位置18ないし25に一致する。このシフトされた演算コード値を次に、ADD命令の必要なしに、以前はTABLEBASE値の16Kバイト一致により0であった図4のビット位置18ないし25に直接挿入することができる。INSRWI命令は、値8,6を指定する命令オペランドを有する。これは、6ビット位置シフト演算を実施した後で8ビットをRTABLEBASEに挿入することを表す。これら8個の演算コード・ビットが、RTABLEBASEレジスタのRTABLEBASEベース・アドレスでは0の論理値で満たされた部分に挿入されるので、加算演算を実施する必要がなくなる。それによってルーチン12に比べてルーチン12’では1つの命令が節約される。さらに低次のビット位置26ないし31は図4に示されるようにゼロのままになる。これらの低次0ビットは、テーブル14が長さ16ワードのルーチンを含むために必要とされる。従って、TABLEBASE値を適切に配置および調整することにより、図3において単独の命令INSRWIを用いて、図2の以前の2つの命令SWLIとADDに置き換えることができる。ルーチン12’をこのように簡略化するだけで、図2の例に比較してJava準拠エミュレータの性能にほぼ10%の改善が見られることが実験的にわかっている。
【0022】
図3においてINSRWI命令を実施後、RTABLEBASEに格納された値がカウント・レジスタ(PCTR)に移され、予備取出演算LBZUが実施される。これらの命令MTCTRとLBZUとは、図2に関して前述されたものと同様である。予備取出LBZU演算の実行後、分岐カウント・レジスタ(BCTR)命令が用いられて、エミュレータの実行の流れは、テーブル14に位置するルーチン16〜24のうち1つで進行される。
【0023】
図3および図4の方法は、図2の従来技術によるルーチンに比べて改善されているが、図5のルーチンには、図3に論じられるものに比べてさらに性能上の利点が加わる。図5は、図2または図3に示されるものに比べてさらに最適化される新規の取出解読ループ12”を示す。さらに、図5のルーチン12”により、テーブル14に位置する個々の命令エミュレーション・ルーチン16〜24の最適化が改善される。詳しくは、図2のBIPUSHルーチン20を、図5の取出解読ループ12”における変更により、図5のBIPUSHルーチン20”に簡略化することができる。
【0024】
図5の取出解読ループ12”は、図3に関して前述したようにLBZU命令およびINSRWI命令を実行することにより始まる。従って、図5のプロセスは、図3のエミュレーション方法に関して前述したすべての利点を有する。図5のこれら2つの命令の実行後は、RTABLEBASEレジスタは、テーブル14で実行されるエミュレーション・ルーチンのベクトル・アドレスを含む。RTABLEBASE内のこのベクトル・アドレスは、RTABLEBASE内の値をMTCTR命令を介してカウント・レジスタ(RCTR)に移動させることにより維持される。MTCTR命令の実行後に、「複数データ・タイプのロードと生成」(LGMDT:load and generate multiple data types)と称される新しい命令が実施される。LGMDTは、一般に、メモリまたは同様のソースから入力値をロードし、入力値から、各々が異なるデータ・フォーマットを有する複数の結果値を生成する任意の実行可能なコンピュータ命令である。LDMDT命令は、一般に、異なるデータ・フォーマットを有する各結果値を、複数のCPUレジスタ内の異なるレジスタに格納して、エミュレータがLGMDT命令の実行に続いて1つのデータ・フォーマットを用いることができるようにする。
【0025】
詳しくは、図5に示されるLGMDT命令はJavaプログラム・カウンタ(RPC)を1だけ増分し、次にJavaプログラム・カウンタ(RPC)が示すアドレスからバイト値(すなわち8ビット)を読み込む。バイト値は、実際はメモリから読み込んだ演算コードであるが、図5のLGMDT命令は、メモリから読み込んだバイト値をデータ・オペランドとして扱う。バイト値をデータ・オペランドとして扱うことにより、LGMDT命令は読み込んだデータ・バイトを32ビット符号付きまたは符号なしのデータ値に変換する。このとき、符号なしのデータ値は第1ROPCODEレジスタ(たとえばROPCODEレジスタ)に格納され、符号付きデータ値は第2ROPCODEレジスタ(たとえばROPCODE+1レジスタ)に格納される。LGMDT命令の実行後、BCTR命令を用いて、テーブル14内のルーチンの1つを上述のように実行するために実行の流れを変える。
【0026】
図5は、BIPUSH命令を利用したLGMDT命令の利点を詳しく示す。BIPUSHルーチン20”は、ルーチン12”のLGMDT命令の存在により図5において簡略化されている。LGMDT命令の実行により、図2に示されるようにルーチン20に以前から存在する符号バイト延長命令を図5のルーチン20”から削除することができる。LGMDT命令がテーブル14のルーチンに関して符号付きの結果と付いていない結果の両方を提供して利用できるようにしたことで、この削除が可能になる。さらに、ルーチン20”のSTWU命令は図2に示されるようにROPCODE位置にはもはやアクセスしないが、ルーチン12”のLGMDT命令により生成される符号付き値を含むROPCODE+1レジスタにアクセスする。レジスタROPCODEは、ルーチン20”では必要とされない符号なしの値を含む。従って、比較すると、BIPUSH命令をエミュレーションするためには図2では9個の命令が必要であるが、図5の方法を用いると、BIPUSH命令をエミュレーションするために7個の命令で済む。
【0027】
図6では、図5に示されるよりもさらに性能が改善されオーバーヘッドが削減される。図6は、図5に示されるものよりも拡大されさらに複雑なLGMDT命令を示す。しかし、この改善されたLGMDT命令を用いて、エミュレーション・システム10を用いて実施されるエミュレーション・アルゴリズムをさらに簡略化することができる。図6のLGMDT命令は、4個の命令オペランドを含む。第1オペランドは、ROPCODEレジスタ宛先であり、第2オペランドはJavaプログラム・カウンタ(RPC)を用いてメモリから取り出すための次の演算コードのアドレスであり、第3オペランドは外部メモリから読み込まれる演算コード内のビット数(たとえばこの例では8)であり、LGMDT命令の第4オペランドはベクトル生成に先立ち演算コードを左にシフトすべきビット位置数(たとえば、この例では6)である。LGMDT命令のオペランドは、特定のオペランドをハードウェアまたはLGMDT命令解読処理における特定の値または位置にハード配線または固定することにより削減することができることに注目することが重要である。たとえば、ビット・サイズ8と左シフト値6とをLGMDT命令内に「ハード配線」することができ、これによって、これらのパラメータはプログラミング可能とはならずに命令の実行により固定される。
【0028】
LGMDT命令は外部メモリから8ビット値を読み込み、3つの異なる内部CPUレジスタに3つの結果を生成する。図6のLGMDT命令により生成される第1値は、図4または同様のプロセスにより生成されるベクトル・アドレスである。LGMDT命令により生成される第2値は、図5に関して前述された符号なしの32ビットのオペランド/データ値である。図6のLGMDT命令により生成される第3値は、演算コードから生成され、内部ROPCODEレジスタの1つに配置される32ビットの符号付きオペランド/データ値である。一般に、LGMDT命令からのベクトル・アドレスはROPCODE+2レジスタ内に、符号付き32ビット・オペランド/データ値はROPCODE+1レジスタ内に、符号なし32ビット・オペランド/データ値はROPCODEレジスタ内に配置される。LGMDT命令から3つの結果がこのように配置されると、MTCTR命令がROPCODE+2レジスタの内容をカウント・レジスタ(RCTR)に移動させる。第2LGMDT命令が実行されて、新規の演算コード,符号付きオペランドまたは符号なしオペランドのいずれか1つの予備取出を可能にする。BCTR命令により、テーブル14内に位置するルーチンの1つにおいて実行の流れを継続することが可能になる。
【0029】
図6は、BIPUSH演算20”’を詳しく示す。ルーチン20”’は、図5に関して説明されたものと同様である。
【0030】
図6は、POP演算22”’を示す。LGMDT命令は32ビットの符号付きおよび符号なしデータ値に加えてベクトル計算を行っているので、図6のルーチン22”’は、図5および図2にそれぞれ示されるように、INSRWI命令またはSWLI命令に戻る代わりに、MTCTR命令に戻ることができる。言い換えると、22”’のルーチンは、ルーチン12”’内の位置に単純に戻ることができ、それによってカウント・レジスタ(RCTR)を更新して、カウント・レジスタに対するこのような移動を実施する前にレジスタの予備処理を実施する必要がなくなる。従って、図6で用いられるコードにより、POP演算22”’の実行において命令が1つ節約され、BIPUSH演算20”’を実行する際に図5に示されるものと比べて追加の命令を1つ節約する。要するに、図6で用いられるコードは、BIPUSH演算を実施するには6個の命令を必要とするのに対して、従来技術では図2の同じBIPUSHプロセスを実施するのに9個の演算を必要とした。これは、BIPUSHルーチンの命令用途においては30%超の節約である。エミュレーション・パッケージまたは翻訳済み言語システムにおける他のすべての命令に関しても同様の節約が見られる。要するに、本明細書において種々の新規命令が導入され、それによってコード・エミュレーションおよび翻訳済み言語実行におけるオーバーヘッドの削減が可能になる。そのためにコンピュータの性能を大幅に改善することができる。
【0031】
図7は、図6に示されるLGMDT命令を実現するために用いることのできるレジスタ・ファイル100とロード・ユニット101とを示す。レジスタ・ファイル100は6個のレジスタ:すなわちROPCODE102,ROPCODE+1 104,ROPCODE+2またはRTABLEBASE106,RSP108,RPC110およびRCTR112を備えて図示される。中央処理装置(CPU)ハードウェアRSP108レジスタはオペランド「スタック・ポインタ」であり、RPC110レジスタはエミュレーション「プログラム・カウンタ」であり、RCTR112レジスタは分岐ユニットを用いて分岐演算を実施するCPU「カウント・レジスタ」である。RSP108およびRPC110レジスタは、ロード・ユニット101がキャッシュおよび/または外部メモリから情報を読み込むことを可能にする。
【0032】
ロード・ユニット101は、LGMDT命令に応答してメモリから1バイトを読み込む。このバイトは、3つのロード・サブユニット114,116,118に平行に送られる。ゼロ延長ユニットは、バイト値が符号なしオペランドであったかのように、バイト値を32ビットの符号なし値に延長する。この符号なしオペランドは次にROPCODEレジスタ102に送られる。バイト値は、符号延長ユニット116を用いて符号延長される。符号延長ユニット116は、ROPCODE+1レジスタ104(これはROPCODEレジスタ102よりも数字的に1だけ大きいレジスタである)にアクセスすることにより、符号付きオペランドとして用いるためにバイト値を32ビット符号付き値に変換する。図7のベクトル・ビット・プロセッサ118は、SWLIおよびADD命令のシフトおよび加算演算を実施するか、あるいは図4に論じられる演算を実施して、RTABLEBASE/ROPCODE+2およびバイト値をテーブル14内の少なくとも1つのルーチンにアクセスするために用いられるルックアップ・ベクトルに変換する。テーブル14およびルーチン12内のコードは、3つのレジスタのいずれか1つにアクセスして、必要とされる値を得て、レジスタ102〜106で必要とされないその他のすべての値を無視する。
【0033】
図8は、図7に示されるロード/格納ユニット101およびレジスタ・ファイル100を含む汎用コンピュータ120を示すブロック図である。汎用コンピュータ120は、ロード/格納ユニット101およびレジスタ・ファイル100を含む中央処理装置(CPU)またはプロセッサ122を有する。メモリ124はバス126によりプロセッサ122に接続される。メモリ124は、比較的高速の機械読取可能な媒体であり、DRAMおよびSRAMなどの揮発性メモリと、ROM,フラッシュ,EPROM,EEPROMおよびバブル・メモリなどの不揮発性メモリとを備える。バス126には、二次記憶装置130,外部記憶装置132,モニタ134などの出力装置,キーボード(マウス付き)136などの入力装置およびプリンタ138も接続される。二次記憶装置130は、ハードウェア・ディスク・ドライブ,磁気ドラムおよびバブル・メモリなどの機械読取可能な媒体を備える。外部記憶装置132は、フロッピー・ディスク,リムーバブル・ハードウェア・ドライブ,磁気テープ,CD-ROMなどの機械読取可能な媒体を備え、通信回線を介して接続されることもある他のコンピュータを含むこともある。二次格納装置130と外部格納装置132との間にここで描かれる区別は、主に本発明を説明するための便宜上のものである。そのため、これらの要素の間には実質的に機能が重複する部分があることを理解頂きたい。エミュレーション・コード20〜24およびユーザ・プログラムなどのコンピュータ・ソフトウェアは、メモリ124,二次格納装置130および外部格納装置132などのコンピュータ・ソフトウェア格納媒体に格納することができる。コンピュータ・ソフトウェア133の実行可能なバージョンは、外部記憶装置132,二次記憶装置130および不揮発性メモリなどの不揮発性記憶媒体から読み込み、揮発性メモリ内に直接的に実行のためにロードするか、不揮発性メモリから直接的に実行するか、あるいは揮発性メモリにロードする前に二次記憶装置130に格納してから実行することができる。
【0034】
本発明は、特定の実施例を参照して説明および図示されたが、これらの実証例に本発明を制限する意図はない。本発明の精神および範囲から逸脱することなく変更および変形が可能であることは、当業者には認識頂けよう。たとえば、本明細書に教示されるLGMDT命令は、8ビット値の出力の処理を行うだけでなく、任意のサイズ(16ビット,4ビット,32ビット,64ビットなど)の値を異なるデータ・フォーマットに処理して、異なるレジスタに格納することもできる。本明細書において用いられるプロセスを用いて、任意の符号付き数値,符号なし数値,浮動小数点フォーマット,異なる整数フォーマット,左または右揃え数値,シフトまたは回転値,大エンジアン(big endian)値,小エンジアン(little endian)値,ASCII出力または他の数値フォーマットに平行する他の数値フォーマットに生成して、エミュレーション性能または翻訳済み言語実行を改善することができる。場合によっては、ルーチン12のコードをテーブル14のルーチン内において、分岐予測および分岐キャッシュ・ロードを節約することもできる。従って、本発明は添付の請求項の範囲内に入るこれら変形および変更のすべてを包含するものである。
【図面の簡単な説明】
本発明の特徴および利点は、詳細説明と添付の図面とを関連させることにより、さらに明確に理解頂けよう。図面においては、同様の番号は同様の対応する部品を指す。
【図1】 本発明により用いられるエミュレータ・ソフトウェア・アーキテクチャをブロック図に示す。
【図2】 図1のソフトウェア・エミュレータの特定のソフトウェア命令内容をブロック図に示すが、このソフトウェア内容は当技術では周知であり、大量のエミュレーション・オーバーヘッドを有する。
【図3】 本発明によりエミュレーション・オーバーヘッドを削減した、図1のソフトウェア・エミュレータを構築するために用いることのできる改善されたソフトウェア命令内容をブロック図に示す。
【図4】 本発明によるソフトウェア命令エミュレーション・ルーチンのベクトル・アドレスを生成する方法をブロック図に示す。
【図5】 本発明によりエミュレーション・オーバーヘッドを削減した、図1のソフトウェア・エミュレータを構築するために用いることのできる改善されたソフトウェア命令内容をブロック図に示す。
【図6】 本発明によりエミュレーション・オーバーヘッドを削減した、図1のソフトウェア・エミュレータを構築するために用いることのできる改善されたソフトウェア命令内容をブロック図に示す。
【図7】 本発明による図6に図示されるソフトウェアを構築する特定のハードウェアをブロック図に示す。
【図8】 図7に示される特定のハードウェアを含む汎用コンピュータを示すブロック図である。
図例を簡単明瞭にするために、図面に図示される要素は必ずしも同尺に描かれないことを認識頂きたい。たとえば、ある要素の寸法を明確にするために、他の要素に関して誇張する。さらに、適切と思われる場合には、参照番号は図面間で繰り返し用いられて、対応するまたは類似の要素を標示する。

Claims (2)

  1. 多重関数命令を実行することのできるプロセッサであって:
    複数のレジスタ;および
    多重演算命令実行回路によって構成され、前記多重演算命令実行回路が対応する複数のフォーマットにおける複数のオペランドを、前記多重関数命令の1回の実行に応答して共通位置から対応する複数のレジスタ内に移動し、前記対応する複数のフォーマットのうち第1フォーマットは符号なしのバイト・フォーマットにおいてメモリ内にエンコードされる整数であり、前記対応する複数のフォーマットのうち第2フォーマットは符号付きのバイト・フォーマットにおいてメモリ内にエンコードされる整数であり、前記対応する複数のフォーマットのうち第3フォーマットが、前記共通位置からの一定数のビットを前記対応する複数のレジスタのうちの第3レジスタ内の一定位置に挿入することにより、前記プロセッサにより生成されることを特徴とするプロセッサ。
  2. 前記対応する複数のフォーマットのうち第1フォーマットが、前記共通位置からの一定数のビットを前記対応する複数のレジスタのうち第1レジスタ内の一定位置に挿入することにより前記プロセッサによって生成されることを特徴とする請求項1記載のプロセッサ。
JP2000539410A 1997-12-15 1998-12-10 ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令 Expired - Lifetime JP4088418B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/990,780 1997-12-15
US08/990,780 US6039765A (en) 1997-12-15 1997-12-15 Computer instruction which generates multiple results of different data types to improve software emulation
PCT/US1998/026288 WO1999031579A2 (en) 1997-12-15 1998-12-10 Computer instruction which generates multiple data-type results

Publications (2)

Publication Number Publication Date
JP2002508563A JP2002508563A (ja) 2002-03-19
JP4088418B2 true JP4088418B2 (ja) 2008-05-21

Family

ID=25536521

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000539410A Expired - Lifetime JP4088418B2 (ja) 1997-12-15 1998-12-10 ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令

Country Status (8)

Country Link
US (1) US6039765A (ja)
EP (1) EP1040412B1 (ja)
JP (1) JP4088418B2 (ja)
KR (1) KR100601745B1 (ja)
AU (1) AU1998399A (ja)
DE (1) DE69830804T2 (ja)
TW (1) TW446916B (ja)
WO (1) WO1999031579A2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6578193B1 (en) * 1998-03-24 2003-06-10 Novell, Inc. Endian-neutral loader for interpretive environment
US6295638B1 (en) * 1998-07-30 2001-09-25 International Business Machines Corporation Method and apparatus for loading native object code in data processing system
GB9822191D0 (en) * 1998-10-13 1998-12-02 Kubiczek Maciej High performance low cost microprocessor
US6550027B1 (en) * 2000-05-26 2003-04-15 Oak Technology, Inc. Method and article of manufacture for differentiating between a non-volatile memory device and an emulator for purposes of in-circuit programming
DE10196446T1 (de) * 2000-07-31 2003-08-28 Caterpillar Inc Verfahren und Vorrichtung für Emulationssoftware
GB2367653B (en) * 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
GB2367654B (en) * 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
US6857063B2 (en) 2001-02-09 2005-02-15 Freescale Semiconductor, Inc. Data processor and method of operation
US20030018909A1 (en) * 2001-07-17 2003-01-23 International Business Machines Corporation Method and apparatus for enforcing security policies in Java applications
US7228266B1 (en) * 2003-12-05 2007-06-05 Unisys Corporation Instruction processor emulator having separate operand and op-code interfaces
US7408484B1 (en) * 2007-02-20 2008-08-05 International Business Machines Corporation Method of doing PACK unicode zSeries instructions
US7394409B1 (en) * 2007-02-20 2008-07-01 International Business Machines Corporation Method of doing pack ASCII zSeries instructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3982229A (en) * 1975-01-08 1976-09-21 Bell Telephone Laboratories, Incorporated Combinational logic arrangement
DE69125674T2 (de) * 1990-09-04 1997-10-23 Motorola Inc Automatische analog digital Convertierung mit auswählbaren Formatresultaten
ATE188786T1 (de) * 1991-07-08 2000-01-15 Seiko Epson Corp Risc-mikroprozessorarchitektur mit schnellem unterbrechungs- und ausnahmemodus
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
EP0574980B1 (en) * 1992-06-15 1999-06-09 Koninklijke Philips Electronics N.V. Time-discrete signal processor
WO1994027215A1 (en) * 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5408622A (en) * 1993-09-23 1995-04-18 Apple Computer, Inc. Apparatus and method for emulation routine control transfer via host jump instruction creation and insertion
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5694565A (en) * 1995-09-11 1997-12-02 International Business Machines Corporation Method and device for early deallocation of resources during load/store multiple operations to allow simultaneous dispatch/execution of subsequent instructions
US5898885A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native stack-based instruction within a computer system

Also Published As

Publication number Publication date
DE69830804D1 (de) 2005-08-11
KR20010040298A (ko) 2001-05-15
EP1040412B1 (en) 2005-07-06
JP2002508563A (ja) 2002-03-19
US6039765A (en) 2000-03-21
WO1999031579A3 (en) 1999-10-21
KR100601745B1 (ko) 2006-07-19
TW446916B (en) 2001-07-21
WO1999031579A2 (en) 1999-06-24
EP1040412A2 (en) 2000-10-04
AU1998399A (en) 1999-07-05
DE69830804T2 (de) 2005-12-01

Similar Documents

Publication Publication Date Title
US5937193A (en) Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
US6324686B1 (en) Just in time compiler technique
US7725736B2 (en) Message digest instruction
US6332215B1 (en) Java virtual machine hardware for RISC and CISC processors
US20010010072A1 (en) Instruction translator translating non-native instructions for a processor into native instructions therefor, instruction memory with such translator, and data processing apparatus using them
US7770024B2 (en) Security message authentication instruction
EP1359501A2 (en) A processing device for executing virtual machine instructions
EP1447742A1 (en) Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US6205578B1 (en) Interpreter for stack-based languages
JPH01201729A (ja) デコード方法
JP4088418B2 (ja) ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令
JP2014510971A (ja) データ処理装置内におけるアドレス生成
JP2004519775A (ja) スイッチ命令処理ロジックによるバイトコード命令処理装置
JP2002366367A (ja) プログラム命令解釈
JP4004915B2 (ja) データ処理装置
US6467037B1 (en) Utilizing a program counter with one or more data counters for executing instructions
WO2002097552A2 (en) Method for fast compilation of preverified java bytecode to high quality native machine code
JPH0668724B2 (ja) シミユレーシヨン方法
JP4545777B2 (ja) データ処理装置
JP4498338B2 (ja) データ処理装置
EP1684167A2 (en) Method of processing signed displacement computer instruction

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20041217

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051206

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20051206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060912

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071009

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071226

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: 20080129

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080225

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

Free format text: PAYMENT UNTIL: 20110228

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110228

Year of fee payment: 3

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D03

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

Free format text: PAYMENT UNTIL: 20110228

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120229

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20130228

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130228

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20140228

Year of fee payment: 6

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

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term