JP4485198B2 - Javaアクセラレータを備えたプロセッサシステム - Google Patents
Javaアクセラレータを備えたプロセッサシステム Download PDFInfo
- Publication number
- JP4485198B2 JP4485198B2 JP2003529306A JP2003529306A JP4485198B2 JP 4485198 B2 JP4485198 B2 JP 4485198B2 JP 2003529306 A JP2003529306 A JP 2003529306A JP 2003529306 A JP2003529306 A JP 2003529306A JP 4485198 B2 JP4485198 B2 JP 4485198B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- instruction
- java
- bytecode
- general
- 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
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000013507 mapping Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 3
- 239000000872 buffer Substances 0.000 description 22
- 238000013519 translation Methods 0.000 description 18
- 238000001514 detection method Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000000034 method Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
Images
Classifications
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
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)
- Advance Control (AREA)
Description
【0001】
本発明はプロセッサシステムに関し、特にJavaアクセラレータを備えたプロセッサシステムに関する。
【背景技術】
【0002】
近年、マイクロプロセッサの組み込み用途では、アプリケーションソフトとしてJavaが広く使われ始めている。その理由は、ハードウェアまたはソフトウェアの形式でJVM(Java Virtual Machine)が実装されたマシンであれば、プロセッサの種類やシステムの構成に関係なくJavaプログラムを動作できるというプログラムの可搬性に優れているからである。Javaプログラムでは、スタック演算を基本としており、プログラム命令(Javaでは「バイトコード」と称されている)にオペランド指定部が不要であることから、オブジェクトコードのサイズが小さいと言う利点がある。また、Javaプログラムでは、データ型式についての概念が厳密で、且つ、プログラムの実行前にバイトコードのベリフィケーションが行われるため、セキュリティに優れると言う利点もある。
【0003】
Javaを利用した組み込みシステムの多くは、JVM機能をソフトウェアで実現している。その理由は、Javaプログラムが、Java以外のソフトウェア、例えば、OSやMPG4のようなマルチメディア・アプリケーションプログラムなどと同一プロセッサで実行できるためである。しかしながら、ソフトウェアで実現されたJVM環境下でJavaプログラムを実行した場合、同一の処理内容をプロセッサに固有の命令で記述したプログラムを実行した場合と比較して、プログラムの実行速度の方が極端に遅くなるという問題がある。例えば、Dhrystoneベンチマーク・プログラムをC言語で記述し、これをコンパイルして実行した場合と、上記プログラムをJavaで記述してJVM上で実行した場合を比較すると、数十倍の性能差がある。その主な原因として、次の2点が挙げられる。
【0004】
(1)JVM上では、Java命令(バイトコード)がインタプリタによって実行されるため、インタプリタのオーバヘッドが生じる。
(2)Javaの実行モデルは、スタック上での演算を仮定しているため、Javaプログラムをレジスタベースの通常のプロセッサで実行した場合、必然的にメモリアクセスが頻発し、演算器で余計な実行サイクルを必要とする。
【0005】
Javaプログラムを高速に実行するための従来技術として、ソフトウェアで構成されたJIT(Just In Compiler)と、ハードウェアで構成されたアクセラレータが知られている。但し、JITは大きなメモリ容量を必要とするため、今後、メモリ容量に制約のある組み込み用途の多くは、ハードウェア・アクセラレータを採用する傾向にある。
【0006】
ハードウェア・アクセラレータとしては、専用プロセッサタイプのものから、既存のプロセッサの一部にアクセラレータ機能を組み込んだタイプのものまで、種々の形態のものが提案されている。後者のアクセラレータとしては、例えば、ARM社のJazelleや、Nazomi Communication社のJSTARなどがある。
【0007】
例えば、文献"Java to Go:Part1, Microprocessor Report, Feb 12, 2001"(非特許文献1)や、WO 00/34844(PCT/US99/28782)号公報(特許文献1)に記載された“Java Virtual Machine Hardware for RISC and CISC Processors”では、命令キャッシュから読み出したバイトコードをハードウェア・トランスレータでプロセッサに固有の命令に変換することによって、原因(1)のインタプリタ・オーバヘッドを低減してプログラムの実行速度を高速化している。
【0008】
JVMは、例えば、第6図に概略的に示すように、インタプリタ90が参照する領域として、バイトコード列81とコンスタントプール82とが定義されるクラスデータ領域80と、配列オブジェクト84とインスタンス変数などのフィールド85が定義されるインスタンスデータ領域83と、フレームスタック86とを含む。フレームスタック86は、それぞれオペランドスタック88とローカル変数領域89とからなる複数のフレーム87からなり、JVM内で演算に使用される変数は、基本的に各フレームスタック86内のローカル変数領域89に定義される。JVMのインタプリタ90は、バイトコード列81から順次にバイトコードを読み込み、各バイトコードが示すJava命令をプロセッサ91に固有の命令形式に次々と変換する。第6図において、括弧内は、代表的なJava命令を上述した各領域と対応付けて例示したものである。
【0009】
Javaプログラムでは、各演算に先立って、ローカル変数領域89に定義された変数のうち、演算に必要なものをオペランドスタック88のスタックトップに積み込む操作が行なわれる。この操作は、バイトコードで指定されたロード命令(例えば、iload)によって行われ、演算に必要なオペランドがオペランドスタック88に積み込まれた後、上記スタックトップを暗黙的なオペランドとして指定した演算命令が発行される。上記演算命令によって、スタックトップの内容をオペランドとした演算動作が実行され、演算結果は、オペランドスタック88のスタックトップに一時的に格納される。上記演算結果は、最終的にはフレームスタック内のローカル変数領域89に格納する必要があり、演算結果のローカル変数領域89への格納は、次のバイトコードが示すストア命令(例えば、istore)によって実現される。
【特許文献】
【0010】
【特許文献】
【0011】
WO 00/34844(PCT/US99/28782)号公報
【非特許文献】
【0012】
【非特許文献】
【0013】
Java to Go: Part1, Microprocessor Report, Feb 12, 2001
【発明の概要】
【発明が解決しようとする課題】
【0014】
このように、JVMの実行環境においては、各演算の都度、ローカル変数をスタックトップに移し、演算結果をスタックトップからローカル変数領域に移すという動作が発生するため、汎用レジスタをオペランド領域として使用する通常のプロセッサでJavaプログラムを実行しようとすると、汎用レジスタへのアクセスが頻繁に発生する。
【0015】
前述したWO 00/34844(PCT/US99/28782)号公報では、汎用レジスタのうち、例えば、R0〜R5をオペランドスタックの上位6つにマッピングし、R6とR7をローカル変数用にマッピングしている。また、文献"Java to Go: Part1, Microprocessor Report, Feb 12, 2001" では、第3頁に記載されているように、汎用レジスタのR0〜R3をオペランドスタックの上位4つにマッピングし、R4に0番目のローカル変数をマッピングしている。
【0016】
然るに、これらの従来技術では、汎用レジスタへのオペランドスタックとローカル変数のマッピングが双方とも固定的なものとなっているため、汎用レジスタの使用に柔軟性を欠き、汎用レジスタの使用効率を低下させている。また、これらの従来技術では、レジスタベースのプロセッサによって、バイトコード列が指定する全てのJava命令を忠実に実行しており、Javaプログラム実行速度の遅延原因(2)として指摘した余計な実行サイクルの回避について何ら考慮されていない。
【0017】
本発明の目的は、冗長な命令の実行サイクルを省略し、Javaプログラムの実行速度を向上させたプロセッサシステムを提供することにある。
本発明の他の目的は、オペランドスタックとローカル変数の汎用レジスタへのマッピングを柔軟に制御できるJavaアクセラレータを備えたプロセッサシステムを提供することにある。
【課題を解決するための手段】
【0018】
上記課題を解決するために、本発明は、命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、Javaバイトコード列を上記プロセッサに固有の命令列に変換して上記命令デコーダに供給するJavaアクセラレータとからなるプロセッサシステムにおいて、上記Javaアクセラレータが、上記プロセッサにとって冗長となるバイトコードを検出するための手段を備え、該検出手段によって冗長バイトコードが検出された時、上記命令デコーダへの固有命令の供給を抑制することを特徴とする。
【0019】
更に詳述すると、上記Javaアクセラレータは、Javaバイトコード列を前記プロセッサに固有の命令列に変換するバイトコードトランスレータと、上記バイトコードトランスレータで処理中のJavaバイトコードに応じて、Javaのオペランドスタックを前記汎用レジスタの何れかのレジスタ領域にマッピングするためのレジスタ状態制御ユニットとからなり、
上記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている間に、上記レジスタ状態制御ユニットが、上記バイトコードが冗長か否かを判定し、冗長バイトコードとして検出された時、上記バイトコードトランスレータに対して固有命令の出力抑制信号を発行する。
【0020】
本発明の1つの特徴は、上記レジスタ状態制御ユニットが、上記汎用レジスタの各レジスタ領域の使用状態を記憶するための手段を備え、上記汎用レジスタの使用状態に応じてJavaのオペランドスタックを上記汎用レジスタの何れかのレジスタ領域に動的にマッピングすることにある。
【0021】
本発明の1実施例では、上記レジスタ状態制御ユニットが、汎用レジスタの各レジスタ領域と該レジスタ領域に設定されている変数との対応関係を記憶するためのレジスタ内容管理手段を有し、上記バイトコードトランスレータにおいてオペランドスタックへの変数ロード命令を示すバイトコードが処理されている時、上記変数ロード命令で扱う変数と上記レジスタ内容管理手段に記憶された変数とを照合することによって、上記バイトコードが冗長か否かを判定する。
【発明の効果】
【0022】
本発明のプロセッサシステムによれば、Javaアクセラレータをバイトコードトランスレータとレジスタ状態制御ユニットで構成し、レジスタ状態制御ユニットで汎用レジスタの各レジスタ領域の使用状態を管理することによって、Javaのオペランドスタックを汎用レジスタの何れかのレジスタ領域に動的にマッピングすることが可能となる。
【図面の簡単な説明】
【0023】
【図1】 第1図は、本発明によるJavaアクセラレータ30を備えたプロセッサの概略的な構成を示すブロック図。
【図2】 第2図は、第1図に示したJavaアクセラレータ30を構成するバイトコードトランスレータ40の1実施例を示すブロック図。
【図3】 第3図は、第1図に示したJavaアクセラレータ30を構成するレジスタ状態制御ユニット50の1実施例を示すブロック図。
【図4】 第4図(A)〜(C)は、それぞれJavaバイトコード列と、バイトコードトランスレータ40で変換されたバイトコード列と、Javaバイトコード列の他の例を示す図。
【図5】 第5図は、本発明によるプロセッサの組み込み用途の1例を示すシステム構成図。
【図6】 第6図は、JVMの特徴を説明するための図。
【発明を実施するための形態】
【0024】
以下、本発明によるプロセッサシステムの実施例について図面を参照して説明する。
第1図は、本発明によるJavaアクセラレータ30を備えたプロセッサの概略的な構成を示す。
プロセッサ1は、主記憶2と接続されている。主記憶2には、プロセッサ1に固有の命令形式で記述された通常のプログラムとデータの他に、Javaプログラムを実行するためのJVM、バイトコード列、フレームスタックなどが保持されている。プロセッサ1は、主記憶2に格納されたプログラム(プロセッサ1に固有の命令列またはJavaバイトコード列)の一部を保持するための命令キャッシュ10と、主記憶2に格納されたデータまたはフレームスタックの一部を保持するためのデータキャッシュ11と、主記憶2に接続された主記憶制御ユニット12とを有し、該主記憶制御ユニット12によって、主記憶2と命令キャッシュ10およびデータキャッシュ11の間のデータ受け渡しが制御される。
【0025】
一般的なプロセッサと同様に、プロセッサ1は、命令バッファ20と、命令デコーダ22と、汎用レジスタ61と、演算器60と、命令フェッチユニット23とを備えている。ここでは、便宜的に、演算器60が一つのブロックとして表示されているが、上記演算器60は、複数個の演算器から構成されるものであってもよい。命令デコーダ22がデコードする命令は、例えば、日立製作所が提供する制御用マイコンSH3の命令セットのように、このプロセッサに固有の命令のみである。命令キャッシュ10に一時的に保持されたプロセッサ固有の命令コード列またはJavaのバイトコード列は、命令フェッチユニット23からの制御信号に応答して信号線(内部バス)S10に読み出され、命令バッファ20とJavaアクセラレータ30に入力される。
【0026】
Javaアクセラレータ30は、Javaのバイトコード列をプロセッサ1に固有の命令列に変換するバイトコードトランスレータ40と、汎用レジスタ61の状態を管理するレジスタ状態制御ユニット50とから構成されている。
【0027】
プロセッサ1に固有のプログラムを実行中は、命令バッファ20の出力が有効となり、命令バッファ20の出力がセレクタ21を介して命令デコーダ22に入力される。一方、Javaプログラムを実行中は、バイトコードトランスレータ40の出力が有効となり、命令キャッシュ10から読み出されたJavaのバイトコード列が、上記バイトコードトランスレータ40でプロセッサ1に固有の命令列に変換された後、セレクタ21を介して命令デコーダ22に入力される。
【0028】
第2図は、バイトコードトランスレータ40の1実施例を示す。
バイトコードトランスレータ40は、命令キャッシュ10から読み出されたバイトコード列を一時的に保持するためのバッファjava_inst420と、該java_inst420から読み出されたバイトコードをプロセッサ1に固有の命令コードに変換するためのトランスレートエンジン430と、上記java_inst420へのバイトコード列の読み込みを制御するためのバッファ管理ユニット400と、入力バイトコードがローカル変数領域からオペランドスタックへの変数ロード命令(iload、aloadなど)か否かを検出するためのロード検出ユニット410と、入力バイトコードがオペランドスタックへのローカル変数ロード命令であった場合に、入力バイトコードが示すindexを出力するためのゲート411を備える。
【0029】
トランスレートエンジン430は、ソフトウェアで記述されたJVMのインタプリタの機能をハードウェア(LSI)にマッピングしたものであり、例えば、ソフトウェア記述のインタプリタ部分をVerilogのようなハードウェア記述言語に変換し、論理合成する方法によって形成される。トランスレートエンジン430で入力バイトコードを固有命令コードに変換する際に、バイトコードの種類によっては、1つのバイトコードが複数個の固有命令コードに分割される場合がある。カウンタcnt440は、このように1つのバイトコードを複数個の固有命令コードに分割する場合に、それまでに変換された固有命令の数あるいはサイクル数をカウントするためのものである。
【0030】
トランスレートエンジン430で生成された固有命令のうち、オペレーションコード部は、信号線430Aを介して出力バッファtr_inst421に入力される。オペランド部は、第1オペランドが信号線430B、第2オペランドが430Cに出力され、それぞれセレクタ431、432を介して出力バッファtr_inst421に入力される。本実施例では、プロセッサ1の命令アーキテクチャが、日立製作所のSHプロセッサのように2オペランド形式ものを仮定しているが、MIPSやARMのような一般的プロセッサで採用されている3オペランド命令形式の場合は、オペランドの出力信号線とセレクタの数を3本にすればよい。
【0031】
ここで、セレクタ431、432を設けた理由は、本発明では、バイトコードトランスレータ40の出力オペランドとして、トランスレートエンジン430の出力オペランドに代えて、後述するレジスタ状態制御ユニット50からの出力値が使用される場合があるからである。レジスタ状態制御ユニット50の動作は、入力バイトコードがオペランドスタックに対するローカル変数のロード命令(iloadなど)の場合にオン状態となるロード検出ユニット410からの出力信号load_vldと、ゲート411の出力信号load_indexによって制御されている。
【0032】
第3図は、レジスタ状態制御ユニット50の1実施例を示す。
レジスタ状態制御ユニット50は、汎用レジスタ61の各エントリと対応して設けられた複数のレジスタ内容管理ロジック500−i(i=1〜N)と、第6図に示したJVMのオペランドスタック88の汎用レジスタ61へのマッピングを管理するためのスタック管理レジスタid_stack540とを備えている。
【0033】
各レジスタ内容管理ロジック500−iは、汎用レジスタの対応エントリがJava実行環境において有効なデータを保持しているか否かを示す有効性表示メモリreg_valid501と、上記汎用レジスタの対応エントリがJVMにおけるオペランドスタック用として使用中か否かを示すオペランドスタック表示メモリstack_vld502と、上記汎用レジスタの対応エントリに設定されたローカル変数のインデックス値を記憶するためのインデックスメモリreg_idx503とを含んでいる。
【0034】
JVMの規定では、任意のローカル変数は、フレームスタック86におけるカレントフレーム87を示すポインタと、当該ポインタからの相対位置であるインデックスのみによって指定されており、例えば、C言語のように、任意の変数をアドレスポインタによって参照することは禁止されている。従って、ローカル変数領域89に設定された任意のローカル変数は、仮にカレントフレームが固定されているとすれば、インデックス値のみで特定することができる。この特性を利用すれば、各ローカル変数に関して、それがロードされた汎用レジスタ61のエントリ番号(レジスタ番号)とインデックス値とを1対1の対応関係で管理することが可能となる。
【0035】
スタック管理レジスタid_stack540は、汎用レジスタ61のエントリ数と同数またはこれよりも少数のエントリからなる。id_stack540のエントリ位置は、トップポインタtop_ptr530とボトムポインタbtm_ptr531によってリングバッファ的に管理され、各エントリには汎用レジスタ61のレジスタ番号が保持される。但し、上記id_stack540は、概念的にスタック構造を実現できるものであればよく、上述したリングバッファ構造に限定されるものではない。レジスタ状態制御ユニット50は、上記レジスタ内容管理ロジック500−i(i=1〜N)とスタック管理レジスタid_stack540の他に、エンコーダやセレクタなど種々の回路要素を備えているが、これらの回路要素の機能については、後述する詳細動作説明において明らかにする。
【0036】
ここで、本発明のJavaアクセラレータ30に入力されるJavaバイトコード列と、Javaアクセラレータ30から出力されるプロセッサ1に固有の命令コード列との関係について、第4図を参照して説明する。
【0037】
第4図(A)は、Javaバイトコード列の1例を示し、(B)は、上記バイトコード列を変換して得られる固有命令コード列を示す。ここで、"iload_1"(1)と"iload_2"(2)は、それぞれローカル変数領域89の第1、第2エントリにあるデータ(変数aとb)を第6図に示したオペランドスタック88に順次にロードすることを指示するバイトコード(命令)である。また、"iadd"(3)は、上記iload命令(1)、(2)によってオペランドスタックに積まれた上位2つのデータ“a”と“b”を加算し、加算結果“c”をオペランドスタック88のトップに積み込むことを指示する命令であり、"istore_3"(4)は、オペランドスタックのトップにあるデータ“c”をローカル変数領域89の第3エントリにストアすることを指示する命令である。
【0038】
これらのバイトコードをプロセッサ1に固有の命令に変換する場合、対象となるプロセッサ1のアーキテクチャがレジスタベースとなっているため、汎用レジスタ61の一部を上記オペランドスタック88として使用する必要がある。第4図(B)に示した例では、汎用レジスタ61の第9レジスタ領域:R9と第10レジスタ領域:R10がオペランドスタックとして使用されている。
【0039】
第4図(A)に示したバイトコード(1)〜(4)は、主記憶2から命令キャッシュ10に移され、命令キャッシュ10からJavaアクセラレータ30のバイトコードトランスレータ40に順次に供給される。バイトコードトランスレータ40では、例えば、最初のバイトコード"iload_1"を、トランスレートエンジン430に実装された命令変換機構によって、第4図(B)に示す最初の固有命令"MOV.L @(1,fp),R9"に変換する。
【0040】
ここで、MOV.Lは、4バイト幅のデータ転送を意味しており、fpはフレームポインタ、R9は汎用レジスタ61の第9レジスタ領域を示している。フレームポインタfpは、実際には汎用レジスタ61の特定の領域に格納された値であるが、本明細書では、理解を容易にするためにfpというニーモニックで表すことにする。上記固有命令"MOV.L @(1,fp),R9"は、データキャッシュの「フレームポインタ+(1×4)」で示されるアドレス位置の内容(ローカル変数)を汎用レジスタ61の第9レジスタ領域:R9にロードすることを意味している。
【0041】
トランスレートエンジン430で変換された固有命令は、一時的に出力バッファtr_inst421に蓄積された後、セレクタ21を経由して命令デコーダ22に取り込まれる。上記命令デコーダ22に取り込まれた固有命令は、プロセッサ1における通常の命令実行時と同様のプロセスで実行される。すなわち、命令で指定されたデータが汎用レジスタ61から読み出され、演算器60に送付される。固有命令"MOV.L @(1,fp), R9"の場合は、フレームポインタfpの値と即値1が演算器60に送付され、演算器60によって「フレームポインタ+(1×4)」のアドレス値が演算され、データキャッシュ11から上記アドレス位置の内容が演算器60に読み込まれ、汎用レジスタ61の第9レジスタ領域:R9に格納される。命令キャッシュ10に格納されたバイトコード列は、Javaアクセラレータ30のバイトコードトランスレータ40にパイプライン的に供給され、それぞれ対応する固有命令に変換された後、実行される。
【0042】
第4図(A)に示したバイトコード列は、最も単純な加算ルーチンの1例を示しているが、更に複雑なバイトコード列として、配列されたデータの総和を算出するルーチンを実行する場合を考える。第4図(C)は、このような総和算出ルーチンのバイトコード列の1例を示す。ここで注目すべきことは、Javaはスタックマシンであるため、演算の都度、必要なデータをローカル変数領域89からオペランドスタック88に積み込むためのiload(またはaload)命令が実行されるという点にある。
【0043】
第4図(C)において下線を付したバイトコード(iloadまたはaload)は、ループを繰り返す度に実行されるが、毎回同じ値をローカル変数領域からオペランドスタックにロードしている。これらのバイトコードを固有命令に変換して命令デコーダ22に供給した場合、演算器60は、値に変化のないデータあるいは既に汎用レジスタに格納済みとなっているデータ(演算結果)について、冗長なロード命令を何回も繰り返して実行すると言う無駄な動作が発生する。
【0044】
本発明は、レジスタ状態制御ユニット50において、このような冗長なロード命令を検出し、実行しても意味のない固有命令がバイトコードトランスレータ40から命令デコーダ22に供給されるのを阻止することによって、Javaプログラムの実行速度を高速化することを特徴とする。例えば、第4図(C)に示したバイトコード列の場合、本発明を適用することによって、2回目以降の各イタレーションで実行される固有命令の個数を従来の10命令から6命令に減少でき、ループの繰り返し回数は増えれば増える程、演算所要時間の短縮効果が顕著になる。
【0045】
以下、第1図〜第3図を参照して、本発明によるJavaアクセラレータ30の機能と動作について詳細に説明する。
命令キャッシュ10からバイトコードトランスレータ40に供給されたJavaバイトコードは、バッファjava_inst420に一時的に格納された後、トランスレートエンジン430に取り込まれ、各バイトコードに対応した固有命令に変換される。トランスレートエンジン430で生成された固有命令うち、オペコード部は、信号線430Aを介して出力バッファtr_inst421に入力される。
【0046】
一方、信号線430B、430Cに出力されるオペランド部に関しては、もし、そのオペランド部が既に汎用レジスタに存在し、汎用レジスタから読み出し可能なものであれば、トランスレートエンジン430からの出力オペランドに代えて、レジスタ状態制御ユニット50から出力されるレジスタ番号、すなわち、dst_reg_idと、src_reg_id1と、src_reg_id2がセレクタ431、432で選択され、出力バッファtr_inst421に入力される。尚、オペランドが、入力バイトコードで暗黙的に指定される場合や、例えば、入力バイトコードの次のバイトで明示的に指定される場合は、トランスレートエンジン430で生成したオペランドが選択され、出力バッファtr_inst421に入力される。
【0047】
例えば、第4図(A)に示したバイトコード列において、iadd命令(3)がトランスレートエンジン430に入力された場合、出力バッファtr_inst421には、オペコード部として、トランスレートエンジンで生成された固有命令のADDが入力され、第1オペランドと第2オペランドとして、レジスタ状態制御ユニット50から出力されたレジスタ番号R9、R10が入力される。レジスタ状態制御ユニット50におけるレジスタ番号の生成方法については後述する。
【0048】
もし、或るバイトコードと対応して複数の固有命令が生成される場合、バイトコードの変換処理に複数サイクルを要する。この場合、トランスレートエンジン430は、入力バイトコードの種類とカウンタcnt440の値によって生成すべき固有命令を決定する。入力バイトコードが、例えば、iload命令のようにローカル変数領域の内容をオペランドスタックに移動する命令の場合、これをロード検出ユニット410によって検出し、load_vld信号としてレジスタ状態制御ユニット50に通知する。また、上記ロード検出ユニット410によって、フレームスタックへの変数ロード命令が検出された場合、暗黙的に指定されているインデックスの値や、次バイトにより明示的に指定されたインデックスの値が、load_index信号としてレジスタ状態制御ユニット50に通知される。
【0049】
バッファ管理ユニット400は、上記バッファjava_inst420に有効なバイトコードが存在するか否かを監視し、もし有効なバイトコードが無くなった場合、バイトコード・フェッチ要求信号java_fetch_reqをアサートし、命令フェッチユニット23に次バイトコードのフェッチを要求する。
【0050】
次に、レジスタ状態制御ユニット50の動作について説明する。
最初に、バイトコードトランスレータ40が上述したフレームスタックへの変数ロード命令以外の一般的な入力バイトコードを処理している場合のレジスタ状態制御ユニット50の動作について述べる。
【0051】
バイトコードトランスレータ40が一般的な入力バイトコードを処理している時、ロード検出回路410の出力信号load_vldはオフ(ネゲート)状態となる。信号load_vldがネゲート状態にあるとき、レジスタ状態制御ユニット50は、変換後の固有命令のソースオペランド用として使用するために、スタック管理レジスタid_stack540のトップにあるレジスタ番号を信号線src_reg_id1またはsrc_reg_id2経由でバイトコートトランスレータ40に送付する。
【0052】
すなわち、スタック管理レジスタid_stack540から、トップポインタtop_ptr530が指定するエントリの内容をセレクタ541で選択して、src_reg_id1として出力する。もし、入力バイトコードがオペランドスタックの上位2つをオペランドとして使用している場合は、デクリメンタ544によって上記top_ptr530の値から1を減算し、上記id_stack540から上記デクリメンタ544の出力で指示されたエントリの内容をセレクタ542で選択して、src_reg_id2として出力する。
【0053】
バイトコードトランスレータ40で生成される固有命令が2つのソースオペランドを使用する場合、第1オペランドのソースレジスタが演算結果のディスティネーションレジスタとして使用される。この場合、信号src_reg_id1がディスティネーションレジスタの指定信号として兼用される。固有命令で使用するソースオペランドが1個の場合は、汎用レジスタ61の中から使用可能なレジスタ(エントリ)を検索し、これをディスティネーションレジスタとして用いる。使用可能なレジスタの検索は、例えば、次の条件で行われる。
【0054】
(a) レジスタ内容管理ロジック500−1〜500−Nの中から、有効性表示メモリreg_valid501の値が“0”で、且つ、オペランドスタック表示メモリstack_vld502の値が“0”となっている管理ロジックを選択する。上記条件を満たす管理ロジックが1個以上見つかった場合は、プライオリティエンコーダ521によって、1つの管理ロジックを選択し、その管理ロジックの番号を使用可能なレジスタ番号としてセレクタ523に入力する。これによって、汎用レジスタ61の中から、オペランドスタック用またはローカル変数用としてマッピングされていない未使用エントリが選択され、新たなディスティネーションレジスタ候補に指定される。
【0055】
(b) レジスタ内容管理ロジック500−1〜500−Nの中から、有効性表示メモリreg_valid501の値が“1”で、且つ、オペランドスタック表示メモリstack_vld501の値が“0”の管理ロジックを選択する。上記条件を満たす管理ロジックが1個以上見つかった場合は、プライオリティエンコーダ520によって1つの管理ロジックを選択し、その管理ロジック番号を使用可能なレジスタ番号としてセレクタ523に入力する。これによって、汎用レジスタ61の中から、オペランドスタック用にはなっていないが、ローカル変数用として使用中のエントリが選択され、新たなディスティネーションレジスタ候補に指定される。
【0056】
(c) スタック管理レジスタid_stack540に登録されている汎用レジスタ61のエントリ番号の中から、セレクタ543によって、ボトムポインタbtm_ptr531で指示されたエントリ番号を使用可能なレジスタ番号として選択し、セレクタ523に入力する。これによって、オペランドスタック用として既にマッピング済みの汎用レジスタ・エントリのうち、オペランドスタックの最も下に位置するエントリが選択され、新たなディスティネーションレジスタ候補に指定される。上記ディスティネーションレジスタ候補がセレクタ523でディスティネーションレジスタとして選択された場合は、当該レジスタの内容についてスピルアウト処理が必要となるため、バイトコードトランスレータ40にスピルアウト用ストア命令を発行させるための信号ovr_flwをポインタ制御回路523から出力する。
【0057】
上記条件(a)、(b)、(c)で選択されたディスティネーションレジスタ候補は、セレクタ523において、(a)、(b)、(c)の順番で優先順位付けされ、使用可能なレジスタ番号が選択される。セレクタ523で選択されたレジスタ番号は、dst_reg_id信号として、バイトコードトランスレータ40に通知される。尚、条件(b)によって指定されたレジスタがセレクタ523でディスティネーションレジスタとして選択された場合、該レジスタに対応するレジスタ内容管理ロジック500−kの有効性表示メモリreg_vld501の設定値を“0”に変更する必要がある。上記メモリreg_vldの設定値変更は、平易な論理回路で実現できるため、第3図では省略してある。
【0058】
レジスタ状態制御ユニット50では、JVMで仮想的に定義されている図6に示したオペランドスタック88を管理する必要がある。すなわち、ソースオペランド用として使用された汎用レジスタ・エントリのレジスタ番号については、スタック管理レジスタid_stack540からポップ(pop)し、ディスティネーションオペランド用として使用されたエントリのレジスタ番号については、スタック管理レジスタid_stack540にプッシュ(push)する必要がある。
【0059】
そこで、本実施例では、バイトコードトランスレータ40のトランスレートエンジン430に、入力バイトコードの解読結果に応じてスタック・インクリメント信号stack_incを発生させ、レジスタ制御ユニット50のポインタ制御532に、上記stack_incに応じてトップポインタtop_ptr530の値を更新させる。例えば、オペランドスタックで2つのソースオペランドをポップし、1つのディスティネーションをプッシュするバイトコード列を実行する場合、トランスレートエンジン430から、−1を示すstack_incを出力し、ポインタ制御532に、トップポインタtop_ptr530の値を現在値より1だけ減算させる。セレクタ523から出力されたディスティネーション用のレジスタ番号は、格納制御回路533によって、スタック管理レジスタid_stack540中の上記top_ptr530が指定するエントリに格納(push)される。
【0060】
スタック管理レジスタid_stack540に新しいレジスタ番号kがpushされた時、格納制御回路533によって、上記レジスタ番号kに対応するレジスタ内容管理ロジック500−kのオペランドスタック表示メモリstack_vld502に“1”をセットする。なお、スタック管理レジスタid_stack540からpopされたレジスタ番号については、該レジスタ番号iに対応するレジスタ内容管理ロジック500−iにおいて、オペランドスタック表示メモリstack_vld502の値をクリアする必要がある。上記レジスタ番号iは、スタック管理レジスタid_stack540の読出し用セレクタ541、542から信号src_reg_id1またはsrc_reg_id2として出力されている。従って、上記stack_vldのクリア制御信号は、これらのセレクタ541、542の出力信号をデコードする比較的簡単な論理回路(図示せず)によって生成できる。
【0061】
次に、本発明で特徴とするオペランドスタックへの変数ロード命令を含むバイトコードの変換時におけるJavaアクセラレータの動作について述べる。
先ず、繰り返しループにおける上記ロード命令の第1回目の変換処理、すなわち、当該ロード命令によって読み出されるローカル変数がまだ汎用レジスタ61にマッピングされていない場合の動作について説明する。
【0062】
バッファjava_inst420に格納された変数ロード命令は、ロード検出ユニット410により解読され、その結果、信号load_vldがアサートされ、上記ロード命令で扱うローカル変数のインデックスがゲート411を介してload_indexとして出力される。信号load_vldがオン状態となった時、レジスタ状態制御ユニット50では、通知されたインデックスload_indexに基づいて、オペランドスタックにロードすべきローカル変数が既に汎用レジスタ61にマッピングされているか否かを検索する。
【0063】
すなわち、各レジスタ内容管理ロジック500−1〜500−Nにおいて、インデックスメモリreg_idx503の内容と上記通知インデックスload_indexとを比較回路504で比較し、各管理ロジックのAND回路505から出力される判定信号をOR回路510に入力することによって、通知インデックスload_indexが汎用レジスタ61の何れかのエントリに登録済みか否かを示す検知信号reg_hitを得る。この論理は、一般的なキャッシュメモリにおけるヒット検出論理に類似している。変数ロード命令を含むバイトコードの第1回目の変換時には、通知インデックスload_indexは汎用レジスタに未登録状態となっているため、検知信号reg_hitはアサートされない。
【0064】
この場合、バイトコードトランスレータ40から変換後の変数ロード命令を発行し、レジスタ状態制御ユニット50からローカル変数のディスティネーションレジスタを指定する必要がある。セレクタ523は、検知信号reg_hitがオフ状態の時、前述した条件(a)、(b)、(c)で指定された候補の中からディスティネーションレジスタを選択し、レジスタ番号をdst_reg_idとして出力する。
【0065】
オペランドスタックへの変数ロード命令が発行され、ローカル変数が汎用レジスタ61の上記dst_reg_idが示すエントリにマッピングされることになった場合、変数とレジスタ番号との関係を記憶し、上記変数ロード命令の次回の処理に備える必要がある。このために、本実施例では、変数のディスティネーションレジスタ番号kと対応するレジスタ内容管理ロジック500−kにおいて、上記変数ロード命令が使用したインデックス値load_indexをインデックスメモリreg_idx503に登録し、有効性表示メモリreg_vld501に“1”を設定する。この動作は、reg_idx書き込み制御512によって行なわれる。reg_idx書き込み制御512は、検知信号reg_hitがオフ状態となった時、セレクタ523から出力されるレジスタ番号dst_reg_idをデコードし、該レジスタ番号と対応するレジスタ内容管理ロジック500−kのメモリreg_valid501とreg_idx503に書き込みイネーブル信号を与えることによって、有効性表示メモリreg_valid501とオペランドスタック表示メモリreg_idx503の内容を更新する。
【0066】
第4図(C)に示したバイトコード列の場合、上記動作によって、iload命令(2)、(4)、(6)で指定されたローカル変数”i”、”sum”、”array pointer”と、aload命令(5)で指定されたreferenceタイプの変数”array pointer”が、それぞれセレクタ523で選択されたレジスタ番号dst_reg_idと対応するレジスタ内容管理ロジックに記憶されることになる。
【0067】
次に、繰り返しループにおける変数ロード命令を含むバイトコードの2回目以降の変換時におけるJavaアクセラレータの動作について説明する。
バイトコードトランスレータ40から出力された信号load_vldがアサートされ、変数ロード命令のインデックス値がload_indexにより通知されると、何れかのレジスタ内容管理ロジック500−kにおいて、インデックスメモリreg_idx503の内容と通知インデックスload_indexとが一致し、AND回路505の出力がオン状態となる。この時、OR回路510から出力される検知信号reg_hitがアサートされる。また、上記AND回路505に接続されたエンコーダ511から、上記レジスタ内容管理ロジック500−kと対応するレジスタ番号kが出力される。
【0068】
変数ロード命令のインデックス値が既に汎用レジスタに格納済みとなっていた場合、演算器60で上記変数ロード命令を実行する必要はなく、従って、バイトコードトランスレータ40で生成した固有命令を命令デコーダ22に与える必要ない。この場合にJavaアクセラレータ30で実行すべき動作は、既に汎用レジスタ61にマッピングされているローカル変数をオペランドスタックに積むこと、換言すれば、レジスタ状態制御ユニット50において、上記ローカル変数用のレジスタ番号kをスタック管理レジスタid_stack540にpushすることである。
【0069】
OR回路510から出力される検知信号reg_hitは、バイトコードトランスレータ40のトランスレートエンジン430に、変数ロード命令の変換抑止信号として入力されている。検知信号reg_hitがアサート状態になると、トランスレートエンジン430は、現在変換中のバイトコードを廃棄し、バッファjava_inst420から取り込んだ次のバイトコードの変換処理を開始する。
【0070】
検知信号reg_hitがアサート状態になると、セレクタ523が上記エンコーダ511から出力されたレジスタ番号を選択する。この結果、ローカル変数を保持しているレジスタの番号が、スタック管理レジスタid_stack540内のトップポインタtop_ptr530で指定されたエントリに格納され、上記レジスタ番号に対応するレジスタ内容管理ロジック500−kのメモリstack_vld502に“1”がセットされる。この動作は、前述した一般的なバイトコードの変換処理時と同様である。
【0071】
1つのフレームについて処理が完了し、フレームスタック86内の別フレームのローカル変数を処理する場合、フレームの切替えに伴って、インデックス値と実際のローカル変数との対応関係が変わる。この場合、レジスタ内容管理ロジック500−1〜500−Nにおける有効性表示メモリreg_valid501の設定値を全てクリアする必要がある。この動作は、フレームポインタfpの変更、すなわち、フレームポインタfp用として割当てられている汎用レジスタ61の特定領域へのデータ書込みを検出して、各有効性表示メモリreg_valid501にクリア信号を発行する制御回路(図示せず)によって制御される。
【0072】
第5図は、上述した本発明のプロセッサを利用した組み込みシステムの1例として、携帯電話システムのブロック構成図を示す。
本発明のJavaアクセラレータを備えたプロセッサは、アプリケーション処理プロセッサ1として使用される。Javaプログラムは、上記プロセッサ1に接続されたアプリケーションメモリ2に予め登録される。但し、Javaプログラムの一部は、ネットワークを介して上記メモリ2にダウンロードされてもよい。この場合、アンテナ6で受信されたJavaプログラムは、RFインターフェース5を介してベースバンド処理プロセッサ3に入力され、フォーマット変換された後、プロセッサ1を介してアプリケーションメモリ2に格納される。
Javaプログラムは、マイク71またはテンキー73からの入力に応答して実行され、実行結果は、I/O処理部7を介して液晶ディスプレイ70あるいはスピーカ72に出力される。上記システム構成により、予めメモリに内蔵されたJavaアプリケーションプログラム、あるいはインターネットを介して配信されるJavaアプリケーションプログラムを高速に実行可能な携帯端末システムを提供できる。
【産業上の利用可能性】
【0073】
以上の説明から理解されるように、本発明プロセッサシステムによれば、上記レジスタ状態制御ユニットで冗長バイトコードを検出した時、バイトコードトランスレータから命令デコーダへの固有命令の供給を抑制することによって、プロセッサによる余計な命令実行を回避し、Javaプログラムの実行速度を向上させることが可能となる。
【0074】
一般的に、Javaプログラムでは、オペランドスタックへのローカル変数のロード命令が全バイトコードの3割程度を占めているが、本発明によれば、繰り返しループに含まれるローカル変数のロード命令を冗長バイトコードとして扱い、その実行を省略すること可能となるため、Javaプログラムの内容によっては、実行速度において従来の20%〜30%の性能向上を図ることができる。
【符号の説明】
【0075】
1:プロセッサ、2:主記憶、10:命令キャッシュ、
11:データキャッシュ、12:主記憶制御ユニット、
20:命令バッファ、21:セレクタ、22:命令デコーダ、
23:命令フェッチユニット、30:Javaアクセラレータ、
40:バイトコードトランスレータ、50:レジスタ状態制御ユニット、
60:演算器、61:汎用レジスタ。
Claims (11)
- 命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、Javaバイトコード列を上記プロセッサに固有の命令列に変換して上記命令デコーダに供給するJavaアクセラレータとからなるプロセッサシステムにおいて、
上記Javaアクセラレータが、
Javaバイトコード列を上記プロセッサに固有の命令列に変換するバイトコードトランスレータと、上記バイトコードトランスレータで処理中のJavaバイトコードに応じて、Javaのオペランドスタックを上記汎用レジスタの何れかのレジスタ領域にマッピングするためのレジスタ状態制御ユニットとを有し、
上記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている間に、上記レジスタ状態制御ユニットが、上記Javaのオペランドスタックにロードすべき変数が上記汎用レジスタの何れかのレジスタ領域にマッピング済みか否かを判定し、既にマッピング済みの場合は、上記バイトコードを上記演算器で実行不要の冗長バイトコードと判断し、上記バイトコードトランスレータに対して、該冗長バイトコードから変換された固有命令の上記命令デコーダへの出力を抑制させることを特徴とするプロセッサシステム。 - 前記レジスタ状態制御ユニットが、前記汎用レジスタの各レジスタ領域と該レジスタ領域に設定されている変数との対応関係を記憶するためのレジスタ内容管理手段を有し、前記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている時、該ロード命令で扱う変数と上記レジスタ内容管理手段に記憶された変数とを照合することによって、上記バイトコードが前記冗長バイトコードか否かを判断することを特徴とする請求項1に記載のプロセッサシステム。
- 前記レジスタ状態制御ユニットが、前記汎用レジスタの各レジスタ領域と該レジスタ領域に設定されているローカル変数のインデックス値との対応関係を記憶するためのレジスタ内容管理手段を有し、前記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている時、上記ロード命令で扱うローカル変数のインデックス値と上記レジスタ内容管理手段に記憶されたインデックス値とを照合することによって、上記バイトコードが前記冗長バイトコードか否かを判断することを特徴とする請求項1に記載のプロセッサシステム。
- 前記レジスタ内容管理手段が、前記汎用レジスタの各レジスタ領域の使用状態を示す状態情報を記憶しており、前記レジスタ状態制御ユニットが、上記状態情報に基づいて、Javaオペランドスタックを前記汎用レジスタにマッピングすることを特徴とする請求項2または請求項3に記載のプロセッサシステム。
- 命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、
主記憶から読み出されたJavaバイトコード列または上記プロセッサに固有の命令列を記憶するためのキャッシュメモリと、
Javaバイトコード列を上記プロセッサに固有の命令列に変換するJavaアクセラレータと、
上記キャッシュメモリから読み出された上記プロセッサに固有の命令列、または上記Javaアクセラレータから出力された上記プロセッサに固有の命令列を上記命令デコーダに選択的に供給するためのセレクタとからなるプロセッサシステムにおいて、
上記Javaアクセラレータが、Javaバイトコード列を上記プロセッサに固有の命令列に変換するバイトコードトランスレータと、上記バイトコードトランスレータで処理中のJavaバイトコードに応じて、Javaのオペランドスタックを上記汎用レジスタの何れかのレジスタ領域にマッピングするためのレジスタ状態制御ユニットとを有し、
上記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが処理されている間に、上記レジスタ状態制御ユニットが、上記Javaのオペランドスタックにロードすべき変数が上記汎用レジスタの何れかのレジスタ領域にマッピング済みか否かを判定し、既にマッピング済みの場合は、上記ロード命令を示すバイトコードを上記演算器で実行不要の冗長バイトコードと判断し、上記バイトコードトランスレータに、該冗長バイトコードから変換された固有命令の上記命令デコーダへの出力を抑制させることを特徴とするプロセッサシステム。 - 前記バイトコードトランスレータが、オペランドスタックへのローカル変数のロード命令を示すバイトコードを検知して第1の信号を発生するための手段を備え、
前記レジスタ状態制御ユニットが、上記第1の信号に応答して、前記Javaのオペランドスタックにロードすべき変数が前記汎用レジスタの何れかのレジスタ領域にマッピング済みか否かを判定することを特徴とする請求項5に記載のプロセッサシステム。 - 前記バイトコードトランスレータが、前記ロード命令で扱うローカル変数を特定する第2の信号を発生するための手段を備え、
前記レジスタ状態制御ユニットが、前記汎用レジスタの各レジスタ領域と該レジスタ領域に設定されている変数との対応関係を記憶するためのレジスタ内容管理手段を有し、上記バイトコードトランスレータから前記第1の信号が出力されている時、上記第2の信号が示すローカル変数と上記レジスタ内容管理手段に記憶された変数とを照合することによって、前記ロード命令を示すバイトコードが前記冗長バイトコードか否かを判断することを特徴とする請求項6に記載のプロセッサシステム。 - 前記バイトコードトランスレータが、前記ロード命令で扱うローカル変数のインデックス値を示す第2の信号を発生するための手段を備え、
前記レジスタ状態制御ユニットが、前記汎用レジスタの各レジスタ領域と該レジスタ領域に設定されているローカル変数のインデックス値との対応関係を記憶するためのレジスタ内容管理手段を有し、上記バイトコードトランスレータから前記第1の信号が出力されている時、上記第2の信号が示すインデックス値と上記レジスタ内容管理手段に記憶されたインデックス値とを照合することによって、前記ロード命令を示すバイトコードが前記冗長バイトコードか否かを判断することを特徴とする請求項6に記載のプロセッサシステム。 - 前記レジスタ内容管理手段が、前記汎用レジスタの各レジスタ領域の使用状態を示す状態情報を記憶しており、前記レジスタ状態制御ユニットが、上記状態情報に基づいて、Javaオペランドスタックの前記汎用レジスタへのマッピングを行なうことを特徴とする請求項7または請求項8に記載のプロセッサシステム。
- 命令デコーダと、複数のレジスタ領域からなる汎用レジスタと、少なくとも1つの演算器とを有するプロセッサと、
Javaバイトコード列を上記プロセッサに固有の命令列に変換して上記命令デコーダに供給するJavaアクセラレータとを備え、
上記Javaアクセラレータが、上記Javaバイトコード列を上記プロセッサに固有の命令列に変換するバイトコードトランスレータと、上記バイトコードトランスレータで変換中のJavaバイトコードに応じて、Javaのオペランドスタックを上記汎用レジスタの何れかのレジスタ領域にマッピングするためのレジスタ状態制御ユニットとを含み、
上記レジスタ状態制御ユニットが、上記汎用レジスタの各レジスタ領域と該レジスタ領域に設定されている変数との対応関係を記憶するためのレジスタ内容管理手段を有し、
上記バイトコードトランスレータにおいてオペランドスタックへのローカル変数のロード命令を示すバイトコードが固有命令に変換されている間に、上記レジスタ状態制御ユニットが、上記ローカル変数のロード命令で扱う変数と上記レジスタ内容管理手段に記憶された変数とを照合することによって、上記ローカル変数が上記汎用レジスタにマッピングされているか否かを判定し、上記ローカル変数がマッピングされていない場合は、上記レジスタ内容管理手段に新たな対応関係を記憶し、上記バイトコードトランスレータに上記バイトコードから変換された固有命令を上記プロセッサに供給させ、上記ローカル変数が既にマッピングされていた場合は、上記レジスタ内容管理手段への新たな対応関係の記憶と、上記バイトコードから変換された固有命令の上記プロセッサへの供給を阻止することを特徴とするプロセッサシステム。 - 前記レジスタ内容管理手段が、前記汎用レジスタの各レジスタ領域の使用状態を示す状態情報を記憶しており、前記レジスタ状態制御ユニットが、上記状態情報に基づいて、Javaオペランドスタックの前記汎用レジスタへのマッピングを行なうことを特徴とする請求項10に記載のプロセッサシステム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2001/007909 WO2003025743A1 (fr) | 2001-09-12 | 2001-09-12 | Systeme processeur ayant un accelerateur java |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009069256A Division JP4418509B2 (ja) | 2009-03-23 | 2009-03-23 | Javaアクセラレータを備えたプロセッサシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2003025743A1 JPWO2003025743A1 (ja) | 2004-12-24 |
JP4485198B2 true JP4485198B2 (ja) | 2010-06-16 |
Family
ID=11737719
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003529306A Expired - Fee Related JP4485198B2 (ja) | 2001-09-12 | 2001-09-12 | Javaアクセラレータを備えたプロセッサシステム |
Country Status (3)
Country | Link |
---|---|
US (1) | US7434030B2 (ja) |
JP (1) | JP4485198B2 (ja) |
WO (1) | WO2003025743A1 (ja) |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2380003A (en) * | 2001-07-03 | 2003-03-26 | Digital Comm Technologies Ltd | Method and apparatus for executing stack based programs using a register based processor |
GB2377288A (en) * | 2001-07-06 | 2003-01-08 | Digital Comm Technologies Ltd | Executing branch instructions of a stack based program on a register based processor |
US20040215444A1 (en) * | 2002-03-25 | 2004-10-28 | Patel Mukesh K. | Hardware-translator-based custom method invocation system and method |
US20050060272A1 (en) * | 2003-09-11 | 2005-03-17 | Wen-Hua Lin | Embedded system program code reduction method and system |
US7770147B1 (en) * | 2004-03-08 | 2010-08-03 | Adaptec, Inc. | Automatic generators for verilog programming |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
KR100577366B1 (ko) * | 2004-09-25 | 2006-05-10 | 삼성전자주식회사 | 이종의 자바 메소드를 실행하는 방법 및 장치 |
JP2006120956A (ja) * | 2004-10-22 | 2006-05-11 | Ibiden Co Ltd | 多層プリント配線板 |
JP4602047B2 (ja) * | 2004-10-29 | 2010-12-22 | ルネサスエレクトロニクス株式会社 | 情報処理装置 |
US7707547B2 (en) * | 2005-03-11 | 2010-04-27 | Aptana, Inc. | System and method for creating target byte code |
US7478224B2 (en) | 2005-04-15 | 2009-01-13 | Atmel Corporation | Microprocessor access of operand stack as a register file using native instructions |
US7725125B2 (en) * | 2005-10-14 | 2010-05-25 | Research In Motion Limited | Audio management in a dual processor environment |
EP1993272B1 (en) * | 2005-10-14 | 2010-11-24 | Research In Motion Limited | Audio management in a dual processor environment |
KR100809293B1 (ko) * | 2006-03-10 | 2008-03-04 | 삼성전자주식회사 | 가상 머신에서 스택을 관리하는 장치 및 그 방법 |
KR101407629B1 (ko) | 2007-06-04 | 2014-06-13 | 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 | 자바 변환 가속 장치 및 방법 |
US8914774B1 (en) | 2007-11-15 | 2014-12-16 | Appcelerator, Inc. | System and method for tagging code to determine where the code runs |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8260845B1 (en) | 2007-11-21 | 2012-09-04 | Appcelerator, Inc. | System and method for auto-generating JavaScript proxies and meta-proxies |
US8566807B1 (en) | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
US8719451B1 (en) | 2007-11-23 | 2014-05-06 | Appcelerator, Inc. | System and method for on-the-fly, post-processing document object model manipulation |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US8291079B1 (en) | 2008-06-04 | 2012-10-16 | Appcelerator, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8880678B1 (en) | 2008-06-05 | 2014-11-04 | Appcelerator, Inc. | System and method for managing and monitoring a web application using multiple cloud providers |
US7596620B1 (en) | 2008-11-04 | 2009-09-29 | Aptana, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
KR100930831B1 (ko) * | 2009-03-24 | 2009-12-10 | 주식회사 에이디칩스 | 바이트코드 변환 가속 장치 및 그 방법 |
JP2012088909A (ja) * | 2010-10-19 | 2012-05-10 | Tokyo Univ Of Agriculture & Technology | 変換器及び変換方法 |
JP5922353B2 (ja) * | 2011-08-22 | 2016-05-24 | サイプレス セミコンダクター コーポレーション | プロセッサ |
US9836316B2 (en) * | 2012-09-28 | 2017-12-05 | Intel Corporation | Flexible acceleration of code execution |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US9542211B2 (en) * | 2014-03-26 | 2017-01-10 | Intel Corporation | Co-designed dynamic language accelerator for a processor |
CN105573814A (zh) * | 2015-09-01 | 2016-05-11 | 北京中电华大电子设计有限责任公司 | 一种java卡局部变量字节码采用芯片硬件解析执行的方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6021273A (en) * | 1997-06-30 | 2000-02-01 | Sun Microsystems, Inc. | Interpreter generation and implementation utilizing interpreter states and register caching |
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US6826749B2 (en) * | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
JP2000242495A (ja) * | 1999-02-18 | 2000-09-08 | Matsushita Electric Ind Co Ltd | 仮想マシン及びプログラム生成装置 |
EP1197847A3 (en) * | 2000-10-10 | 2003-05-21 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
GB2376097B (en) * | 2001-05-31 | 2005-04-06 | Advanced Risc Mach Ltd | Configuration control within data processing systems |
GB2376100B (en) * | 2001-05-31 | 2005-03-09 | Advanced Risc Mach Ltd | Data processing using multiple instruction sets |
GB2376098B (en) * | 2001-05-31 | 2004-11-24 | Advanced Risc Mach Ltd | Unhandled operation handling in multiple instruction set systems |
GB2376099B (en) * | 2001-05-31 | 2005-11-16 | Advanced Risc Mach Ltd | Program instruction interpretation |
-
2001
- 2001-09-12 JP JP2003529306A patent/JP4485198B2/ja not_active Expired - Fee Related
- 2001-09-12 US US10/488,537 patent/US7434030B2/en not_active Expired - Lifetime
- 2001-09-12 WO PCT/JP2001/007909 patent/WO2003025743A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20040236927A1 (en) | 2004-11-25 |
JPWO2003025743A1 (ja) | 2004-12-24 |
US7434030B2 (en) | 2008-10-07 |
WO2003025743A1 (fr) | 2003-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4485198B2 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
JP4171496B2 (ja) | スタックを用いる演算マシンのための命令フォールディング処理 | |
JP3634379B2 (ja) | スタックキャッシングのための方法及び装置 | |
US5925123A (en) | Processor for executing instruction sets received from a network or from a local memory | |
EP0976050B1 (en) | Processor with array access bounds checking | |
US6349377B1 (en) | Processing device for executing virtual machine instructions that includes instruction refeeding means | |
US7243213B2 (en) | Process for translating instructions for an arm-type processor into instructions for a LX-type processor; relative translator device and computer program product | |
JP2616182B2 (ja) | データ処理装置 | |
JP2001195250A (ja) | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 | |
JP2008536240A (ja) | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス | |
US7840782B2 (en) | Mixed stack-based RISC processor | |
US20150227373A1 (en) | Stop bits and predication for enhanced instruction stream control | |
KR100249631B1 (ko) | 데이터 처리장치 | |
WO1999041659A1 (en) | Microprocessor including multiple register files occupying the same logical space | |
US7873810B2 (en) | Microprocessor instruction using address index values to enable access of a virtual buffer in circular fashion | |
JP2021174513A (ja) | データ依存脆弱分岐の機会主義的再誘導のための命令セットアーキテクチャベース自動負荷追跡 | |
JP3345787B2 (ja) | データ処理装置 | |
JP4502532B2 (ja) | データ処理装置 | |
JP2556182B2 (ja) | デ−タ処理装置 | |
JP4418509B2 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
US8583897B2 (en) | Register file with circuitry for setting register entries to a predetermined value | |
WO1999027439A1 (fr) | Systeme informatique | |
WO2002071211A2 (en) | Data processor having multiple operating modes | |
US20240036866A1 (en) | Multiple instruction set architectures on a processing device | |
JP2696578B2 (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060126 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20060126 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090120 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20090316 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090323 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090316 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091104 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091224 |
|
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: 20100302 |
|
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: 20100324 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4485198 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: 20130402 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130402 Year of fee payment: 3 |
|
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: 20140402 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |