JP3801643B2 - スタックを用いる演算マシンのための命令フォールディング処理 - Google Patents
スタックを用いる演算マシンのための命令フォールディング処理 Download PDFInfo
- Publication number
- JP3801643B2 JP3801643B2 JP52705397A JP52705397A JP3801643B2 JP 3801643 B2 JP3801643 B2 JP 3801643B2 JP 52705397 A JP52705397 A JP 52705397A JP 52705397 A JP52705397 A JP 52705397A JP 3801643 B2 JP3801643 B2 JP 3801643B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- operand
- stack
- virtual machine
- cache
- 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
- 238000012545 processing Methods 0.000 title claims description 35
- 238000000034 method Methods 0.000 claims description 217
- 239000000872 buffer Substances 0.000 claims description 65
- 230000008569 process Effects 0.000 claims description 46
- 238000004590 computer program Methods 0.000 claims description 3
- 238000007667 floating Methods 0.000 description 36
- 238000007726 management method Methods 0.000 description 34
- 238000010586 diagram Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 13
- 238000007792 addition Methods 0.000 description 12
- 230000008901 benefit Effects 0.000 description 11
- 230000004044 response Effects 0.000 description 11
- 238000013519 translation Methods 0.000 description 11
- 230000007246 mechanism Effects 0.000 description 10
- 239000003795 chemical substances by application Substances 0.000 description 7
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000005055 memory storage Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 239000002957 persistent organic pollutant Substances 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000001629 suppression Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 4
- 239000002131 composite material Substances 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 241000700605 Viruses Species 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000002699 waste material Substances 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- 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
-
- 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
-
- 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/30181—Instruction operation extension or modification
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/451—Stack data
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
付録IのJAVA(商標)仮想マシン仕様書とこの仕様書に添付された付録Aとを含む本明細書の一部分は、著作権で保護された内容を含んでいる。著作権の所持者は、米国特許庁に提出され記録された特許文書のファクシミリ伝送による複製に異議を唱えるものではないが、他の場合については、無断転載を禁ず。
技術分野
本発明はスタックマシン用の命令デコーダに関するものである。本発明は、特に、多数の命令のシーケンスに対して複数の命令を一つの命令に一体化するフォールディング処理を施し、その命令群を一つのフォールディング処理済オペレーションに変換する方法及び装置に関するものである。
背景技術
コンピュータ業界及び通信業界の多くの業界人や組織は、インターネットを、地球上で最も急成長しているマーケットであると、もてはやしている。1990年代において、インターネットのユーザの数は指数関数的に増加し、いまだとどまるところを知らない。1995年6月時点でのインターネットに接続しているホストの数は推計6,642,000であり、同年1月の推計値4,852,000に対して増加が見られた。ホスト数は年間約75%増加している。ホストの中には、約120,000のネットワークサーバ、及び27,000以上のWebサーバが存在していた。Webサーバの数は53日毎に約2倍になっているとみなせる。
1995年7月には、アクティブユーザが100万人以上、USENETニュースグループが12,505以上、USENETの購読者が1000万人以上に達し、インターネットは、様々な情報及びマルチメディアサービスの巨大なマーケットとなるべく運命付けられた。
加うるに、公共のキャリアネットワークあるいはインターネットに対し、多くの会社及び他のビジネスが、企業ネットワーク、あるいは私的なネットワークの中でいっそう効率的に情報を共有するための方法としてイントラネットにそれらの内部情報システムを移行しつつある。イントラネットのための基本的なインフラはサーバーとデスクトップを結ぶ内部のネットワークである、そしてそれはファイアウォールを通してインターネットに接続してもよく、接続しなくてもよい。これらのイントラネットは業界で確立している標準的な開放ネットワークプロトコルに従ってデスクトップにサービスを提供する。イントラネットにより、それらを採用している企業は、内部の情報管理の単純化や、ブラウザパラダイムを用いる内部の通信の改善といった多くの利益が得られる。インターネット技術を会社の企業インフラ及び旧式なシステムと統合することは、イントラネットを使用するグループに対する既存の技術投資のてこ入れにもなる。上に論じられているように、イントラネットとインターネットは、イントラネットがビジネスの中での内部的で保全性が高いコミュニケーションのために使われ、インターネットがビジネスにおいて外の世界との連絡、つまり外部取引のために使われており、このような状況の下で密接に関連し合っている。本明細書においては、用語「ネットワーク」はインターネットとイントラネットの両方を含む。しかしながら、インターネットとイントラネットの区別については、それが適用可能である場合には、記憶に留めおかれたい。
1990年に、サン・マイクロシステムズ(Sun Microsystems)社のプログラマーが普遍的なプログラミング言語を書いた。この言語は最終的にJavaプログラミング言語と命名された。(Javaは米国カリフォルニア州Mountain Viewのサン・マイクロシステムズの商標である。)Javaプログラミング言語は初めにC++プログラミング言語でコード化されることを意図したプログラムの努力から生まれた。それ故、Javaプログラミング言語はC++プログラミング言語と多くの共通性を持っている。しかしながら、Javaプログラミング言語は単純で、オブジェクト指向で、分散型で、インタプリート型であるが高性能で、強靭であるが安全で、保全性が高く、ダイナミックで、アーキテクチャによらず、移植性がある、マルチスレッド型の言語である。
Javaプログラミング言語は、多くのハードウェア会社やソフトウェア会社がサン・マイクロシステムズから使用許諾を得たときから、特にインターネット用のプログラミング言語として出現した。Javaプログラミング言語及び環境は、最近のプログラミングの実行における問題を解決するよう設計されている。Javaプログラミング言語では、C++プログラミング言語における、めったに使われず理解されにくく紛らわしい多くの機能を取り除いてある。これらの取り除かれた機能には、主として、オペレーターに負担をかけ過ぎる機能、多重継承、及び広範囲の自動強制型変換などがある。Javaプログラミング言語は自動ガーベジコレクション機能を有し、この自動ガーベジコレクションは、Cプログラミング言語のように割り当てられたメモリ及び開放メモリが必要ではないため、プログラミングのタスクが単純化される。Javaプログラミング言語は、Cプログラミング言語で定義されているポインタの用途を限定し、その代わりに、配列の上下限が明示的にチェックされる真数配列を持っており、これにより、多くのウイルスといやらしいバグに対する脆弱さなくしている。また、Javaプログラミング言語はオブジェクティブ−Cインタフェースと特定の例外ハンドラを有している。
また、Javaプログラミング言語は、TCP/IPプロトコル(Transmission Control Protocol based on Internet protocol)、HTTP(Hypertext Transfer Protocol)とFTP(File Transfer Protocol)に容易に対処できるようにするためのルーチンの広範囲のライブラリを持っている。Javaプログラミング言語はネットワークで結ばれた分散環境における使用を意図されている。Javaプログラミング言語により、ウイルスがなく、破壊工作から守られたシステムの建設が可能となった。また、その認証技術は公開鍵暗号化に基づいている。
従来技術として、WO−A−94/27214には、命令シーケンスの個々の命令のデコードやタスク指名のオーバヘッドを取り除くゲスト命令のシーケンスをデコードする方法が開示されている。
また従来技術として、EP−A−0 071 028には、ある多重命令シーケンスが関与するアドレス発生インターロック(AGI)の問題を回避するための命令置換機構が開示されている。
発明の開示
Java仮想マシンはスタック指向の抽象的な演算マシンである、そしてそれは物理的な演算マシンのように命令セットを持ち、種々の記憶領域を使用する。Java仮想マシンはJavaプログラミング言語を理解する必要はなく、代わりにそれは、classファイルフォーマットを理解する。classファイルは、Java仮想マシン命令(あるいはバイトコード)と、他の補助的な情報と同様シンボルテーブルを含む。Javaプログラミング言語で(あるいは他の言語で)書かれたプログラムはコンパイルされてJava仮想マシン命令のシーケンスが生成され得る。
一般にスタックを用いる演算マシンにおいては、命令は通常オペランドスタックの先頭のデータに作用する。ローカル変数命令からのロードのような、1又は2以上の最初の命令が実行され、このような命令に後続する命令の実行の先行動作として、オペランドデータがオペランドスタック上にプッシュされる。例えばADDオペレーションのような次に続く命令は、オペランドデータをスタックの最上部からPOPして、そのオペランドデータに作用し、その演算結果をオペランドスタックの先頭にプッシュし、オペランドスタックの先頭のデータと置き換えている。
適切に構成された命令デコーダにより、スタックオペランドの先頭に作用する第2の命令に対する単なる先行動作としての、オペランドをスタックの最上部の上にプッシュする命令を一体化、即ちフォールディング処理することができる。この命令デコーダは、フォールディング処理可能な命令(一般に2、3、あるいは4つの命令)のシーケンスを識別し、そして等価な1つのフォールディング処理済オペレーション(一般に1つのオペレーション)を実行ユニットに供給し、これによって、この処理を行わなければ必要となる、フォールディング処理された命令シーケンスの多数の命令に対応する多数のオペレーションの実行のための処理サイクルを減らす。本発明による命令デコーダを用いて、多数のロード命令とストア命令を、命令シーケンスのそれらの命令の間に現われる命令の実行の中に一体化、即ちフォールディングすることができる。例えば、(ローカル変数からスタックの先頭に整数オペランドをロードするための)1対のロード命令、(スタックの整数オペランドをPOPして、それらを加算し、スタックの先頭に演算結果を置くための)ADD命令、(演算結果をスタックからPOPして、そして結果をローカルな変数に格納するための)ストア命令のような命令シーケンスを、ランダムにアクセス可能なスタック及びローカル変数のストレージにおけるソースアドレスと行先アドレスとを指定する、一つの等価なオペレーションに一体化、即ちフォールディングすることができる。
本発明の一実施例の装置は、命令記憶装置、オペランドスタック、データ記憶装置、実行ユニット、及び命令デコーダを含む。命令デコーダは命令記憶装置に接続され、その中に表現される命令のフォールディング可能なシーケンスを識別する。フォールディング可能なシーケンスは第1命令及び第2命令を含み、第1命令は、単に第2命令のための第1ソースオペランドとして、第1オペランド値をデータストアからオペランドスタックにプッシュするためのものである。命令デコーダは実行ユニットに接続され、実行ユニットに、フォールディング処理可能なシーケンスと等価で、データストアにおける第1オペランド値に対して選択的な第1オペランドアドレス識別子を含む、一つのフォールディング済オペレーションを供給する。これにより、第1命令に対応する明示的なオペレーションが取り除かれる。
更に別の実施例では、命令バッファにおいて表される命令のシーケンスがフォールディング可能なシーケンスでない場合には、命令デコーダが、第1の命令のみに対応するオペレーション識別子及びオペランドアドレス識別子を実行ユニットに供給する。
更に別の実施例では、指示デコーダがフォールディング可能なシーケンスにおいて更に第3の命令を識別する。この第3の命令は、第2命令のための単なる第2ソースオペランドとして、データストアから第2のオペランド値をオペランドスタックの上にプッシュするための命令である。一つのフォールディングされたオペレーションは、フォールディング可能なシーケンスと等価で、データストアにおける第2のオペランド値に対して選択的な第2のオペランドアドレス識別子を含み、これによって第3の命令に対応する明示的なオペレーションが取り除かれる。
更に別の実施例では、命令デコーダは更にフォールディング可能なシーケンスにおける第4の命令を識別する。この第4の命令は第2の命令の結果をオペランドスタックからPOPし、その結果をデータストアの演算結果の場所にストアするためのものである。一つのフォールディングされたオペレーションは、フォールディング可能なシーケンスと等価で、データストアにおける演算結果の領域に対して選択的な行先アドレス識別子を含む、これによって第4の命令に対応する明示的なオペレーションが取り除かれる。
更に別の実施例によれば、命令デコーダが標準的なフォールディングされたデコード経路及びスイッチング手段を含む。スイッチング手段は、フォールディング処理されたデコード経路からのフォールド表示に応じて、そこからオペレーション、オペランド、及び行先識別子を選択し、フォールド表示がない場合には、通常のデコード経路であるノーマルでコード経路からオペレーション、オペランド、及び行先識別子を選択するための手段である。
様々な他の実施例における装置は、命令がオペランドスタックの最上部のエントリからオペランドを取出したり、そこに演算結果を入れる、仮想マシン命令プロセッサ用の装置である。このような別の実施例の1つにおいては、仮想マシン命令プロセッサは、ハードウェアの仮想マシン命令プロセッサであり、命令デコーダは、デコードロジックを有する。更に別の実施例の1つでは、仮想マシン命令プロセッサが、ジャストインタイム(just-in-time)コンパイラインプリメンテーションを含み、命令デコーダはハードウェアプロセッサ上で実行可能なソフトウェアを含む。ハードウェアプロセッサは実行ユニットを含む。更に別の実施例では、仮想マシン命令プロセッサが、ハードウェアプロセッサ上で実行可能なソフトウェアを含む命令デコーダとバイトコードインタプリターインプリメンテーションとを含む。ハードウェアプロセッサは実行ユニットを含む。
本発明の別の実施例による方法は、仮想マシン命令のシーケンスの第1の命令が、単に第2命令のために第1オペランド値をデータストアからオペランドスタックにプッシュするための命令であるか否かを判定する(a)過程と、(a)過程の判定の結果がイエスである場合は、第1の命令と第2の命令とを含むフォールディング可能なシーケンスと等価な一つのフォールディングされたオペレーションを実行ユニットに供給する過程とを含む。この一つのフォールディングされたオペレーションは、第1オペランド値に対して選択的な第1オペランド識別子を含み、これによって第1の命令に対応している明示的なオペレーションが取り除かれる。
別の実施例では、前記方法が、(a)過程の判定の結果がノーである場合には、仮想マシン命令シーケンスにおける第1命令に等価なオペレーションを実行ユニットに供給する過程を含む。
更に別の実施例では、前記方法が、仮想マシン命令シーケンスの第3命令が、オペランドスタックから第2命令の演算結果値をPOPし、その演算結果をデータストアの演算結果領域にストアするための命令であるか否かを判定する(b)過程と、(b)過程の判定の結果がイエスである場合には、結果領域に対して選択的な演算結果識別子を一つの等価なフォールディングされたオペレーションに含める過程を含む。これによって、第3命令に対応する明示的なオペレーションが取り除かれる。更に別の実施例では、前記方法が、(b)過程の判定の結果がノーである場合には、仮想マシン命令シーケンスにおけるオペランドスタックの先頭領域に対して選択的な結果識別子を一つの等価なフォールディングされたオペレーションに含める過程を含む。実施例によっては、(a)の判定過程と(b)の判定過程とが概ね同時並行的に実行される。
本発明の更に別の実施例によれば、スタックベースの仮想マシンインプリメンテーションが、ランダムアクセス可能なオペランドスタック表現、ランダムアクセス可能なローカル変数ストレージ表現、及び仮想マシン命令を選択的にデコードし、選択されたシーケンスと共にフォールディングして、オペランドスタック上の不必要なオペランドの一時ストレージをなくすための仮想マシン命令デコーダを含む。
様々な別の実施例において、スタックベースの仮想マシンインプリメンテーションは、ハードウェアスタックキャッシュ、ハードウェア命令デコーダ、及び実行ユニットを備えたハードウェア仮想マシン命令プロセッサ(1)であるか、またはコンピュータが読み出し可能な媒体上にコード化されハードウェアプロセッサ上で実行可能なソフトウェア(2)を含む。ハードウェア仮想マシン命令プロセッサの実施例では、(a)ランダムアクセス可能なオペランドスタックローカル変数ストレージ表現が、少なくとも部分的にハードウェアスタックキャッシュ内に存在し、(b)仮想マシン命令デコーダが、オペレーションコード(オペコード)、オペランド、及びそれぞれハードウェア仮想マシン命令プロセッサオペレーション及びハードウェアスタックキャッシュにおける領域に対して選択的な結果識別子を、仮想マシン命令の選択されたシーケンスと等価な一つのハードウェア仮想マシン命令プロセッサオペレーションとして、実行ユニットに供給するように接続されている。ソフトウェアの実施例では、(a)ランダムアクセス可能なオペランドスタックローカル変数ストレージ表現が、少なくとも部分的にハードウェアプロセッサのレジスタ内に存在し、(b)仮想マシン命令デコーダが、少なくとも部分的にソフトウェアにおいて実現され、(c)仮想マシン命令デコーダが、オペレーションコード(OPコード)、オペランド、及びそれぞれハードウェアプロセッサオペレーション及びレジスタ内の領域に対して選択的な結果識別子を、仮想マシン命令の選択されたシーケンスと等価な一つのハードウェアプロセッサオペレーションとして、供給するように接続されている。
本発明の更に別の実施例では、ハードウェア仮想マシン命令デコーダが、ノーマルデコード経路、フォールドデコード経路、及びスイッチング手段を有する。フォールドデコード経路は、仮想マシン命令のシーケンスをデコードし、そのシーケンスがフォールディング可能な場合は、(a)一つのオペレーション識別子、(b)1又は2以上のオペランド識別子、及び(c)行先識別子を供給する。これらの識別子は、全体として仮想マシン命令のシーケンスと等価である。スイッチング手段は、フォールディングされたデコード経路に応答し、フォールディングされたデコード経路からのフォールド表示に応じてそこからオペレーション、オペランド、及び行先識別子を選択し、そのフォールド表示がない場合には、ノーマルデコード経路からオペレーション、オペランド、及び行先識別子を選択する。
【図面の簡単な説明】
以下に説明する添付の図面を参照することにより、本発明はよりよく理解され、その様々な目的、特徴、及び利点は、当業者には明らかなものとなろう。
第1図は、本発明による命令フォールディング処理が可能な命令デコーダを含む、仮想マシンハードウェアプロセッサの一実施例のブロック図である。
第2図は、本発明の一実施例において用いられる仮想マシン命令の生成のためのプロセスフロー図である。
第3図は、第1図のハードウェアプロセッサにおいて実現された命令パイプラインを示した図である。
第4A図は、スタック構造の論理的編成の一実施例を示した図であり、ここでは各メソッドフレームが、第1図のハードウェアプロセッサが使用するローカル変数ストレージエリア、環境ストレージエリア、及びオペランドスタックを含む。
第4B図は、スタック構造の論理的編成の別の一実施例を示した図であり、ここでは各メソッドフレームが、ローカル変数ストレージエリア及びスタック上のオペランドスタックを含み、メソッドフレームのための環境ストレージエリアが、個別実行環境スタック上に含められている。
第4C図は、第4B図の実行環境スタック及びスタック用のスタック管理ユニットの別の実施例を示した図である。
第4D図は、第1のスタック管理ユニットにおけるローカル変数ルックアサイドキャッシュの一実施例を示した図である。
第5図は、第1図のハードウェアプロセッサに対するいくつかの可能なアドオンを示した図である。
第6図は、スタックデータ構造のコンテキストにおける、一対のスタック構造が関与するデータフローを示した図であり、ここではスタックから最上部2つのスタックエントリをポップし、それらの合計をスタックの先頭にプッシュする第2スタック命令により消費されるのみであるスタックの先頭に第1スタック命令がデータ項目をプッシュする。
第7図は、第6図に示されたもののような第1及び第2スタック命令のフォールディングされた実行を対照して示した図であり、ここでは、本発明の実施例により第1オペレーション(データ項目をスタックの先頭にプッシュする)が不要になっている。
第8図は、本発明の実施例による。オペランドスタック、ローカル変数ストレージ、及びメモリストレージのコンスタントプール部分、並びにそれにアクセスするためのレジスタ変数の間の関係を示したブロック図である。
第9A図〜第9D図は、オペランドスタック及びローカル変数ストレージに作用するiload(整数ロード)/iadd(整数加算)/istore(整数ストア)命令シーケンスを示した図である。第9A図、第9B図、第9C図、及び第9D図はそれぞれ、iload命令前のオペランドスタックの内容、iload命令の後iadd命令の前のオペランドスタックの内容、iadd命令の後istore命令の前のオペランドスタックの内容、及びistoreの後のオペランドスタックの内容を示した図である。第9B図及び第9C図に示す中間段階は、本発明の実施例による命令フォールディング処理により省くことができる。
第10A図、第10B図、及び第10C図は、オペランドスタック及びローカル変数ストレージ上に作用するaload(オブジェクト参照ロード)/arraylength(定数加算)命令シーケンスを示した図である。第10A図、第10B図、及び第10C図はそれぞれ、aload命令前のオペランドスタックの内容、aload命令後arraylength前の(命令フォールディングなし)オペランドスタックの内容、及びarraylength命令後のオペランドスタックの内容を示している。第10B図に示す中間段階は、本発明の実施例による命令フォールディング処理によって省くことができる。
第11図は、本発明の実施例による命令フォールディング処理を提供する命令デコーダを含むスタックを利用するプロセッサの機能ブロック図である。
第12図は、本発明の実施例による命令デコーダを示すフローブロック図であり、フォールディング処理済オペレーションを実行ユニットに供給し、オペランドアドレスをアドレススタック、ローカル変数ストレージ、又はコンスタントプールに供給し、行先アドレスをオペランドスタック又はローカル変数ストレージに供給するように外部命令デコーダが接続されているところが示されており、供給される1つのオペレーション及びアドレスはフォールディングされていない命令のシーケンスと等価である。
第13図は、本発明の実施例による命令フォールディング処理をサポートしている命令デコーダの機能ブロック図である。
第14図は、本発明の実施例による命令フォールディング処理をサポートしている命令デコーダのフォールドデコード部の機能ブロック図である。
第15図は、本発明の実施例によるフォールディング可能な命令シーケンスを特定するためのオペレーションのシーケンスの1例を示した流れ図である。
第16図は、本発明の実施例によるフォールドアドレスジェネレータの行先アドレスジェネレータ及び構成要素オペランドを示した機能ブロック図である。
第17図は、本発明の実施例による、オペランドアドレスジェネレータのための構造の例を示した機能ブロック図である。
図面全体を通して、類似した機能には同じ記号を付して示してある。
発明の実施の形態
第1図に示すのは、数の命令のシーケンスを一体化、即ちフォールディング処理して一つのフォールディング済オペレーションに変換する本発明による命令デコーダ135を含み、プロセッサアーキテクチャに依存しない仮想マシン命令を直接実行する仮想マシンハードウェアプロセッサ100(以下ハードウェアプロセッサ100)の一実施例である。仮想マシン命令の実行におけるハードウェアプロセッサ100の性能は、インテルのPENTIUMのマイクロプロセッサやサンマイクロシステムズULTRASPARCプロセッサのようなハイエンドのCPUよりずっと優れている(ULTRASPARCはサンマイクロシステムズ社の商標であり、PENTIUMはインテル社の商標である)。ソフトウェアJAVAインタプリタや、JAVAジャストインタイムコンパイラ(just-in-time compiler)で同じ仮想マシンをインタプリートすることは、低コストであって、電力消費量も低い。この結果、ハードウェアプロセッサ100は、移植性があるアプリケーションに非常に適したものとなる。ハードウェアプロセッサ100は、他の仮想マシンスタックベースのアーキテクチャや、ガーベジコレクション、スレッド同期などのような機能を用いてる仮想マシンに対しても似たような利点をもたらす。
これらの特徴の点から言えば、ハードウェアプロセッサ100に基づいたシステムは、最も良い全体的な性能について言うのでなければ、ソフトウェアインタプリタやジャストインタイムコンパイラを含む他の仮想マシン実行環境と比較して魅力的なコストパフォーマンスを提供する。しかし、本発明は、仮想マシンハードウェアプロセッサの実施例に限定されず、本発明の範囲には、JAVA仮想マシン命令を特定のハードウェアプロセッサにネイティブなマシン命令にコンパイル(バッチかあるいはジャストインタイムコンパイルの何れかで)するソフトウェアインタプリタとしてJAVA仮想マシンをエミュレートするインプリメンテーションを備えたインプリメンテーションや、或いはJAVA仮想マシンをマイクロコードとして実現する、或いは直接チップ上に実現する、又はそれらの組み合わせとして実現するハードウェアを提供する、適当なスタックベースの、又は非スタックベースの演算マシンインプリメンテーションも含まれている。
コストパフォーマンスについては、ハードウェアプロセッサ100は、250キロバイト(Kbytes)〜500キロバイトのメモリストレージが不要であるという利点を有している。例えば一般にソフトウェアインタプリタによって必要とされるROM或いはRAMが不要である。ハードウェアプロセッサ100のシュミレーションにより、ハードウェアプロセッサ100が、そのプロセッサ100と同じクロックレートで同じ仮想マシン命令を実行するPENTIUMプロセッサ上の様々なアプリケーション上を走るソフトウェアインタプリタと比較して20倍高速で仮想マシンを実行することが分かった。別のハードウェアプロセッサ100のシュミレーションにより、ハードウェアプロセッサ100は、そのプロセッサ100と同じクロックレートで、同じ仮想マシン命令を実行するPENTIUMプロセッサ上を走るジャストインタイムコンパイラと比較して5倍高速で仮想マシンを実行することが分かった。
ソフトウェア仮想マシン命令インタプリタが必要とするメモリ消費が禁じられているような環境の下では、ハードウェアプロセッサ100は有利である。これらのアプリケーションは、例えばネットワーク機器、携帯電話プロセッサ、及び他の遠距離通信用集積回路、若しくは埋め込み型プロセッサやポータブルデバイスのような低電力低コストの他のアプリケーションのためのインターネットチップを含む。
ここに説明するように、命令デコーダ135は、スタックオペランドの先頭に作用する第2のJAVA仮想マシン命令に対する単なる先行処理としてオペランドをスタックの最上部にプッシュするJAVA仮想マシン命令を第2の命令に一体化、即ちフォールディング処理を行うことができる。このような命令デコーダは、フォールディング可能な命令のシーケンスを識別して、実行ユニットに1つの等価なフォールディング処理済オペレーションを供給する。これによって、この処理を行わなければフォールディング処理された命令のシーケンスの多数の命令に対応する多数のオペレーション実行に必要であった処理サイクルを減らすことができる。ここに開示された命令デコーダの実施例は、2、3、4個の命令のフォールディング処理、或いはもっと多くの命令のフォールディング処理が可能である。例えば、ここに開示された命令デコーダの一実施例では、2つのロード命令とストア命令を、それらの命令の間の命令シーケンスに現れる命令に対応するオペレーションの中にフォールディングすることができる。
本明細書において、仮想マシンとは、現実の演算マシンのように命令セットを有し、様々なメモリエリアを使用する抽象的な演算マシンである。仮想マシンの使用は、例えばハードウェアプロセッサ100のような仮想マシンインプリメンテーションにより実行されるプロセッサアーキテクチャに依存しない仮想マシン命令セットを定義する。各仮想マシン命令は実行される特定のオペレーションを定める。仮想演算マシンは、仮想マシン命令を生成するのに用いられるコンピュータ言語や、仮想マシンの下に位置するインプリメンテーションを理解する必要がない。理解する必要があるのは仮想マシン命令用の特定のファイルフォーマットのみである。好適実施例では、仮想マシン命令はJAVA仮想マシン命令である。各JAVA仮想マシン命令は、情報、オペランド、及び他の必要な情報を特定する命令をコード化する1又は2以上のバイトを含んでいる。
付録IはJAVA仮想マシン命令セットを説明したものであり、その全体を本明細書と一体に参照されたい。但し、使用された特定の仮想マシン命令のセットは、本発明において不可欠な要素ではない。付録I及びこの明細書における仮想マシン命令を参照することにより、当業者は特定の仮想マシン命令セットやJAVA仮想マシン仕様の変更に対して、発明を変更して実施することができよう。
コンピュータプラットフォーム上で実行するJAVAコンパイラのJAVAC(第2図参照)は、JAVAプログラム言語で書かれたアプリケーション201を、JAVA仮想マシン仕様に従って、コンパイル済命令セットを含むコンパイル済命令シーケンス203をコード化するアーキテクチャに対して中立なオブジェクトファイルフォーマットに変換する。しかしながら、本発明において必要なのは、仮想マシン命令のソースコード及び関連情報のみである。仮想マシン命令のソース及び関連情報を生成するのに用いられる方法及び技術は本明細書において不可欠の要素ではない。
コンパイル済命令シーケンス203は、ハードウェアプロセッサ100上で実行可能であると共に、例えばソフトウェアインタプリタやジャストインタイムコンパイラを用いるJAVA仮想マシンを実現する任意のコンピュータプラットフォーム上で実行可能である。しかし、上述のように、ハードウェアプロセッサ100はソフトウェアインプリメンテーションより著しく優れた性能上の利点をもたらす。
この実施例において、ハードウェアプロセッサ100(第1図参照)は、JAVAバイトコードを含む仮想マシン命令を処理する。ハードウェアプロセッサ100は、後により完全に説明するように、バイトコードの大部分を直接実行する。しかし、バイトコードのいくつかの実行は、マイクロコードを介して実現される。
ハードウェアプロセッサ100によって直接実行される仮想マシン命令を選択するための1つの戦略について、以下実例を通して説明する。JAVA仮想マシン命令の30%は純粋なハードウェア翻訳である。即ち、このようにして実現される命令には、定数ローディング及び単なるスタックオペレーションが含まれる。仮想マシン命令の次の50%は、完全にではないが大抵ハードウェアで実行され、若干のファームウェアによる補助を必要とする命令である。このような命令には、スタックを利用するオペレーション及び配列命令が含まれる。JAVA仮想マシン命令の次の10%は、ハードウェア上で実現されるがファームウェアによる補助はほとんど不要な命令である。このような命令には関数呼び出し及び関数復帰命令が含まれる。JAVA仮想マシン命令の残りの10%は、ハードウェアではサポートされていないが、ファームウェアトラップかマイクロコードの何れか、或いはその両方によってサポートされている命令である。これらの命令には例外ハンドラのような関数が含まれる。ここで、ファームウェアとは、ハードウェアプロセッサ100のオペレーションを実行時に制御する、ROMに格納されたマイクロコードを意味する。
一実施例において、ハードウェアプロセッサ100は、I/Oバス及びメモリインタフェースユニット110、命令キャッシュ125を含む命令キャッシュユニット120、命令デコードユニット130、一体に統合(unified)された実行ユニット140、スタックキャッシュ155を含むスタック管理ユニット150、データキャッシュ165を含むデータキャッシュユニット160、及びプログラムカウンタ及びトラップコントロールロジック170を有する。これらの機能ユニットのそれぞれについては、後に完全に説明する。
同じく、第1図に示すように、それぞれのユニットがいくつかの要素を含む。図面において明確に示すため、又注意が発明の内容からそれることを避けるために、第1図にはユニットの中の要素間の相互接続は示していない。しかし、次の説明を参照することにより、当業者は、ユニット内の各要素間の、及び様々なユニット間の相互接続及びその改変について理解されよう。
第1図に示すユニット群を用いて実現されたパイプライン処理段には、フェッチ段階、デコード段階、実行段階、及びライトバック段階が含まれる。必要ならば、メモリアクセスや例外解決のための別の段階がハードウェアプロセッサ100内に設けられる。
第3図は、プロセッサ100の実施例における命令の実行のための4段パイプラインを図解したものである。フェッチ段階301においては、仮想マシン命令がフェッチされ命令バッファ124(第1図)に置かれる。仮想マシン命令は、(i)命令キャッシュ125からの固定サイズキャッシュラインか、(ii)実行ユニット140内のマイクロコードROM141の何れか一方からフェッチされる。
命令のフェッチ(取出し)については、命令tableswitch及びlookupswitchは別にして、(付録I参照)各仮想マシン命令は1バイトから5バイトの間の長さを有する。従って、処理の単純化のため、与えられた命令の全てを確実にフェッチできるようにするために少なくとも40ビットは必要である。
別の形態では、常に所定のバイト数、例えばオペコードで始まる4バイトをフェッチする。このバイト数は、JAVA仮想マシン命令の95%に対して十分なバイト数である(付録I参照)。3バイト以上のオペランドが必要な命令に対しては、4バイトがフェッチされる場合にはフロントエンドでの別の処理サイクルが許容されなければならない。この場合、命令の実行は、たとえオペランドの全ての組が利用可能でない段階でも、フェッチされた第1オペランドで開始することができる。
デコード段階302(第3図)においては、命令バッファ124(第1図)の前で仮想マシン命令がデコードされ、可能ならば命令フォールディング処理が実行される。スタックキャッシュ155へのアクセスは、仮想マシン命令が要求した場合のみ行われる。スタック400(第4図)の先頭を指定するポインタOPTOPを含むレジスタOPTOPも、デコード段階302(第3図)において更新される。
ここで説明の便宜上、レジスタにおける値及びレジスタは、同じ符号を付して示した。更に、次の議論において、ポインタをストアするためのレジスタの使用は、一実施例についてのみ説明する。本発明の特定の実施例によれば、ポインタは、ハードウェアレジスタ、ハードウェアカウンタ、ソフトウェアカウンタ、ソフトウェアポインタ、又は他の当業者に周知の等価な要素を用いて実現され得る。選択された特定のインプリメンテーションは、本発明において必要不可欠なものではなく、その選択の仕方は価格と性能のトレードオフに基づいて通常決められるものである。
実行段階303において、仮想マシン命令は、1又は2以上の処理サイクルで実行される。一般に、実行段階303において、定数ユニット142(第1図)におれるALUは、算術演算を行うか、或いはデータキャッシュユニット(DCU)160からのロードやそこへのストアのアドレスを計算するために用いられる。必要ならば、トラップが優先順位付けされて、実行段階303(第3図)の終わりに行われる。制御フロー命令に対しては、実行段階303において分岐アドレスが、分岐が従属している条件と共に計算される。
キャッシュ段階304はパイプライン処理に含まれない非パイプラインの段階である。データキャッシュ165(第1図)は、実行段階303(第3図)の間に必要があればアクセスされる。段階304がパイプライン処理に含まれない理由は、ハードウェアプロセッサ100がスタックベースのマシンだからである。従って、ロードに続く命令は、大抵ロード命令によって戻された値に依存している。この結果、この実施例においては、このパイプラインはデータキャッシュアクセスのための1サイクルの間保持される。これにより、パイプライン段階が少なくなり、パイプラインによって占められて他が使用不可能な領域を他のレジスタやバイパスのために開放することができる。
ライトバック段階305はパイプラインの最終段階である。段階305において、計算されたデータがスタックキャッシュ155にライトバックされる。
ハードウェアプロセッサ100は、この実施例においては、JAVA仮想マシンスタックベースアーキテクチャ(付録I参照)をサポートするスタック400(第4A図)を直接的に実現する。スタック400上の64個のエントリは、スタック管理ユニット150のスタックキャッシュ155に含められる。スタック400のエントリのいくつかは、スタックキャッシュ150に複製され得る。データ上のオペレーションは、スタックキャッシュ150を介して実行される。
ハードウェアプロセッサ100のスタック400は、主にメソッド用の情報のリポジトリとして使用される。任意の時点において、ハードウェアプロセッサ100は1つのメソッドを実行している。それぞれのメソッドは、メモリ空間、即ちローカル変数、オペランドスタック、及び実行環境構造の組に対して割り当てられたスタック400上のメソッドフレームを有する。
新たなメソッドフレーム、例えばメソッドフレーム410は、実行段階303(第3図)におけるメソッド呼び出し時にハードウェアプロセッサ100により割り当てられ、現在フレーム、即ちその時点で処理されているメソッドのフレームとなる。現在フレーム410(第4A図)は、他のメソッドフレームと共に、様々なメソッド呼び出し状況に応じて、以下の6つのエントリの全て又は一部を含み得る。その6つのエントリとは即ち、
1.オブジェクト参照
2.渡される引数
3.ローカル変数
4.呼び出しを行ったメソッドコンテキスト
5.オペランドスタック
6.メソッドからの戻り値
である。
第4A図において、オブジェクト参照、渡される引数、及びローカル変数は、引数及びローカル変数エリア421に含められる。呼び出しを行ったメソッドコンテキストは、フレーム状態とも称される実行環境422に含められ、それは更にメソッド呼び出し命令の隣の仮想マシン命令、例えばJAVAオペコードのアドレスである復帰プログラムカウンタ値431、呼び出しメソッドのフレームの位置である復帰フレーム432、呼び出しメソッドのコンスタントプールテーブルを指定する復帰コンスタントプールポインタ433、現在メソッドのベクトルテーブルである現在メソッドベクトル434、及び現在メソッドのモニタのアドレスである現在モニタアドレス435を含む。
このオブジェクト参照は、メソッド呼び出しのために標的にされたオブジェクトを表すオブジェクトストレージに対する間接ポインタである。JAVAコンパイラJAVAC(第2図参照)は、このポインタを呼び出し命令が発生する前にオペランドスタック423にプッシュする命令を発生する。このオブジェクト参照は、メソッドの実行の間にローカル変数ゼロとしてアクセス可能である。間接ポインタは、スタティックメソッド呼び出しに対して定義されたターゲットオブジェクトが存在しないのでスタティックメソッド呼び出しは利用不可能である。
渡される引数のリストは、呼び出しメソッドから呼び出されたメソッドへ情報を転送する。オブジェクト参照のように、渡される引数は命令によって生成されたJAVAコンパイラによりスタック400上にプッシュされ、ローカル変数によってアクセスされ得る。JAVAコンパイラJAVAC(第2図参照)は、現在メソッド410(第4A図)に対する引数のリストをスタティックに生成し、ハードウェアプロセッサ100はリストから引数の数を求める。非スタティックメソッド呼び出しに対するオブジェクト参照がフレーム内に存在するとき、第1引数は、ローカル変数1としてアクセス可能である。スタティックメソッド呼び出しに対しては、第1引数がローカル変数ゼロになる。
64ビット引数に対しては、一般の64ビットエントリと同様に、上側の32ビット、即ち64ビットエントリの最上位32ビットが、スタック400の上側の位置に置かれる。即ちスタックの最下位にプッシュされる。例えば、64ビットエントリがスタック400の先頭にある時、64ビットエントリの最上位32ビット部分は、スタックの先頭にあり、64ビットエントリの下位32ビット部分は、スタック400の先頭に隣接するストレージ位置に存在する。
現在メソッド410に対してスタック400(第4A図)上のローカル変数エリアは割り当てられた一次変数ストレージ空間を表し、メソッド410の呼び出しの間有効である。JAVAコンパイラJAVAC(第2図)は、必要なローカル変数の数をスタティックに決定し、ハードウェアプロセッサ100はそれに従って一次変数ストレージ空間を割り当てる。
メソッドがハードウェアプロセッサ100上で実行されている間、ローカル変数は、通常スタックキャッシュ155内に存在し、ポインタVARS(第1図及び第4A図)からのオフセットとして処理される。このポインタVARSは、ローカル変数0の位置を指定するポインタである。ローカル変数の値をオペランドスタック423にロードし、オペランドスタックからローカル変数エリア421に値をストアするための命令が供給される。
実行環境422における情報には、呼び出しを行うメソッドコンテキストが含まれる。新たなフレームが現在メソッドのために構築されたとき、ハードウェアプロセッサ100は呼び出しを行うメソッドコンテキストを新たに割り当てられたフレーム410にプッシュし、後にリターンが行われる前に呼び出しを行うメソッドコンテキストを再びストアするためにこの情報を利用する。ポインタFRAME(第1図及び第4A図参照)は、現在メソッドの実行環境を指定するためのポインタである。ここに示す実施例においては、レジスタセット144(第1図)のそれぞれのレジスタが32ビットの幅を有する。
オペランドスタック423は現在メソッド内の仮想マシン命令の実行をサポートするために割り当てられる。プログラムカウンタレジスタPC(第1図)は、次の命令のアドレス、例えば実行されるオペレーションのオペコードを含む。オペランドスタック423(第4A図)上の位置を用いて、命令実行のためのソースストレージ位置及びターゲットストレージ位置の双方を提供する仮想マシン命令のオペランドを格納する。オペランドスタック423のサイズは、JAVAコンパイラJAVAC(第2図)にスタティックに決定され、ハードウェアプロセッサ100はそれに従ってオペランドスタック423用の空間を割り当てる。レジスタOPTOP(第1図及び第4A図)は、オペランドスタック423の先頭を指定するポインタを保持する。
呼び出されたメソッドは、その実行の結果を呼び出しを行ったスタックの先頭に戻し、従って呼び出しを行った側は、オペランドスタック参照を有するリターン値にアクセスできることになる。このリターン値は、オブジェクト参照又は引数がメソッドの呼び出しの前にプッシュされる領域に置かれる。
JAVA仮想マシン上でのシミュレーションの結果により、メソッド呼び出しは、実行時間の多くの部分を(20〜40%)を占めていることが分かった。仮想マシン命令の実行を促進するためのこの魅力的な目標が与えられたことにより、メソッド呼び出しのためのハードウェアサポートは、後に完全に説明するようにハードウェアプロセッサ100に含められる。
新たに呼び出されたメソッドのスタックフレームの始まり、即ち呼び出した側によって渡される引数及びオブジェクト参照は、オブジェクト参照及び入ってくる引数が呼び出し側のスタックの先頭から来ているため、スタック400上に既にストアされている。上に説明したように、スタック400上のこれらの項目に後続して、ローカル変数がロードされ、次いで実行環境がロードされる。
このプロセスをスピードアップするための1つの方法は、ハードウェアプロセッサ100がバックグラウンドで実行環境をロードし、それまでに何がロードされたかを、例えば単純な1ビットのスコアボードにより示すことである。ハードウェアプロセッサ100は、例えスタック400が完全にロードされていなくても、呼び出されたメソッドのバイトコードをできる限り速く実行しようとする。既にロードされた変数にアクセスがなされる場合、スタック400のロードと実行がオーバーラップし、そうでない場合には、ハードウェアインターロックが生じ、ハードウェアプロセッサ100が、ロードされるべき実行環境における変数を待つ状態となる。
第4B図に示すのはメソッド呼び出しを加速する他の方法である。スタック400にメソッドフレーム全体をストアする代わりに、各メソッドフレームの実行環境が、メソッドフレームのオペランドスタック及びローカル変数エリアは別にストアされる。従って、この実施例では、スタック400Bが改変されたメソッドフレーム、例えばローカル変数エリア421及びオペランドスタック423のみを有する改変されたメソッドフレーム410Bを含むことになる。メソッドフレームの実行環境422は、実行環境メモリ440にストアされる。実行環境メモリ440実行環境をストアすることにより、スタックキャッシュ155におけるデータ量が少なくなる。従って、スタックキャッシュ155のサイズを小さくすることができる。更に、実行環境メモリ440及びスタックキャッシュ155は同時にアクセスすることになる。従って、メソッド呼び出しは、スタック400Bへのデータのロード又はストアと同時並行的に実行環境のロード又はストアを行うことにより加速できることになる。
スタック管理ユニット150の一実施例では、実行環境メモリ440のメモリアーキテクチャもスタック式である。改変型メソッドフレームがスタックキャッシュ155を介してスタック400Bにプッシュされる時、対応する実行環境が実行環境メモリ440にプッシュされる。例えば、第4B図に示すような改変型メソッドフレーム0〜2は、スタック400Bにあるので、実行環境(EE)0〜2はそれぞれ実行環境メモリ回路440にストアされる。
メソッド呼び出しを更に強化するために、実行環境キャッシュを追加して、メソッド呼び出しの間実行環境をセーブしたり取り出したりする速度を高めることができる。後により完全に説明するスタックキャッシュ155、ドリブル管理ユニット151、及びスタック400のキャッシングのためのスタックコントロールユニット152に対するアーキテクチャも、実行環境メモリ440のキャッシングに適用することができる。
第4C図に示すのは、スタック400B及び実行環境メモリ440の双方をサポートするように改変されたスタック管理ユニット150の実施例である。詳述すると、第4C図におけるスタック管理ユニット150の実施例は、実行管理スタックキャッシュ450、実行環境ドリブル管理ユニット(execution environment dribble manager unit)460、及び実行管理スタック制御ユニット470を加えている。一般に、実行ドリブル管理ユニット460は、スピル(spill)オペレーション又はフィル(fill)オペレーションの間に、実行環境キャッシュ450と実行環境メモリ440との間で実行環境全体を転送する。
I/Oバス及びメモリインタフェースユニット
I/Oバス及びメモリインタフェースユニット110(第1図)はインタフェースユニット110とも称し、ハードウェアプロセッサ100と、実施例においては外部メモリを含み、所望に応じてハードウェアプロセッサ100と同じチップ上のメモリストレージ及びインタフェース或いはその何れかを含み得るメモリ階層を実現する。この実施例においては、I/Oコントローラ111が外部I/Oデバイスに対してインタフェースし、メモリコントローラ112が、外部メモリに対してインタフェースする。ここで、外部メモリとは、ハードウェアプロセッサ100の外部にあるメモリを意味する。しかし、外部メモリは、ハードウェアプロセッサ100と同じチップ上に含められても良く、或いはハードウェアプロセッサ100を含みチップの外部に設けられても良く、又はチップの内外双方に設けられても良い。
別の実施例では、I/Oデバイスに対するリクエストはメモリコントローラ112を通り、メモリコントローラ112はハードウェアプロセッサ100を含むシステム全体のアドレスマップを保持する。この実施例のメモリバス上では、ハードウェアプロセッサ100が唯一のマスタ(master)であり、メモリバスの使用を調整する必要はない。
従って、I/Oバス及びメモリインタフェースユニット110をインタフェースする入出力バスの別の実施例は、PCI、PCMCIA、又は他の標準的なバスに対する直接のサポートを提供する、サポーティングメモリマップスキームを含む。高速グラフィックス(w/VIS又は他の技術)は、所望に応じてハードウェアプロセッサ100と同一のチップ上に含められ得る。
I/Oバス及びメモリインタフェースユニット110は、外部メモリに対する読み出し及び書き込みリクエストを発生する。詳述すると、インタフェースユニット110は、命令キャッシュ及びデータキャッシュコントローラ121及び161を外部メモリに対してインタフェースする。インタフェースユニット110は、命令キャッシュコントローラ121及びデータキャッシュコントローラ161からの内部リクエストに対する管理ロジックを含み、これによって外部メモリにアクセスし、リクエストに応じてメモリバス上の外部メモリに対する読み出し又は書き込みリクエストの何れかを開始するデータキャッシュコントローラ121からのリクエストは、常に命令キャッシュコントローラ161からのリクエストに対して高いプライオリティを持つものとして取り扱われる。
インタフェースユニット110は、リクエストしている命令キャッシュコントローラ121又はデータキャッシュコントローラ161に対して、読み出しサイクルの間に肯定応答信号を供給し、リクエストしているコントローラがそのデータをキャッチできるようにする。書き込みサイクルにおいては、インタフェースユニット110からの肯定応答信号は、フローコントロールのために用いられ、リクエストしている命令キャッシュコントローラ121又はデータキャッシュコントローラ161は、ペンディングが生じている場合新たなリクエストを発生しない。インタフェースユニット110は又、メモリバス上で外部メモリに対して発生されたエラーも取り扱う。
命令キャッシュユニット
命令キャッシュユニット(ICU)120(第1図)は、命令キャッシュ125から仮想マシン命令をフェッチして、その命令を命令デコードユニット130に供給する。この実施例においては、命令キャッシュヒット時に、命令キャッシュコントローラ121が、1サイクルにおいて、命令キャッシュ125から命令を命令バッファ124に転送し、そこでこの命令は定数実行ユニットIEU(後に完全に説明する)が命令を処理できるようになるまで保持する。これによって、ハードウェアプロセッサ100におけるパイプライン300(第3図)のフェッチ段階301と残りの段階とが分離される。命令−バッファタイプの編成をサポートする複雑さを避けることが望ましくないならば、1命令レジスタが大抵の目的に十分である。しかし、後に説明するように、命令のフェッチング、キャッシング、及びバッファリングは、命令フォールディング処理をサポートできるだけの十分な命令バンド幅を提供するべきである。
ハードウェアプロセッサ100のフロントエンドは、ハードウェアプロセッサ100の残りの部分から完全に独立している。理想的には、1サイクルあたり1命令が実行パイプラインに供給される。
この命令は、命令デコードユニット130からの信号に応じてバイトアライナ回路122により任意の8ビット境界の上に位置あわせされる。従って、ハードウェアプロセッサ100のフロントエンドは、任意のバイト位置からのフェッチングを効果的に取り扱うことができる。同様に、ハードウェアプロセッサ100はキャッシュ125の複数のキャッシュラインに渡る命令の問題を処理する。この場合、オペコードが常に最初のバイトであるため、オペランドに対するフェッチ支援の余分な処理サイクルを保養できる。従って、バイトコードのフェッチングと実行との間の非常に単純な非干渉化が可能となる。
命令キャッシュミスの場合には、命令キャッシュコントローラ121が、I/Oバスとメモリインタフェースユニット110にミスとなった命令の外部メモリリクエストを生成する。命令バッファ124が空であるか、ほとんど空である場合には、命令キャッシュミスが生じたとき、命令デコードユニット130が機能停止する。即ちパイプライン300が機能停止する。詳述すると、命令キャッシュコントローラ121はキャッシュミス時に機能停止信号を発生し、これは命令バッファエンピティ信号と共にパイプライン300を機能停止するか否かを決定するために用いられる。命令キャッシュ125は自己修正コードを受け入れるべく無効にすることができる。例えば、命令キャッシュコントローラ121が命令キャッシュ125における特定のラインを無効にすることができる。
従って、命令キャッシュコントローラ121はフェッチされるべき次の命令を決定する。即ち命令キャッシュ125におけるアクセスされることが必要な命令を決定し、命令キャッシュ125におけるデータ及びタグRAMに対するアドレス、データ、及びコントロール信号を発生する。キャッシュヒット時には、4バイトのデータが1つの処理サイクルの間に命令キャッシュ125からフェッチされ、命令バッファ124には最大4バイトを書き込むことができる。
バイトアライナ回路122は、命令キャッシュRAMからのデータを位置合わせし、位置合わせされたデータを命令バッファ124に入れる。後に詳細に説明するように、命令バッファ124における初めの2バイトがデコードされて、仮想マシン命令の長さが決定される。命令バッファ124はキューにおける有効な命令を追跡し、エントリを更新する。これについては後に詳細に説明する。
命令キャッシュコントローラ121も、データ経路及び命令キャッシュミスを処理するための制御を提供する。命令キャッシュミスの発生時には、命令キャッシュコントローラ121は、I/Oバス及びメモリインタフェースユニット110にキャッシュフィルリクエストを発生する。
外部メモリからデータを受け取ったとき、命令キャッシュコントローラ121はそのデータを命令キャッシュ125に書き込み、そのデータは又命令バッファ124にバイパスされる。データは、それが外部メモリから利用可能になるとすぐに、又キャッシュフィルが終了する前に命令バッファ124にバイパスされる。
命令キャッシュコントローラ121は、命令バッファ124が一杯になるか、分岐又はトラップが生ずるまで、連続したデータをフェッチし続ける。一実施例においては、命令バッファ124は命令バッファ124に8バイト以上の有効エントリが存在する場合、一杯になっていると見なされる。従って、一般に8バイトのデータが命令キャッシュユニット120によってインタフェースユニット110に送られたキャッシュフィルリクエストに応じて外部メモリから命令キャッシュ125に書き込まれる。命令キャッシュミスの処理中に分岐又はトラップが生じた場合は、ミスの処理が終了した直後にトラップ又は分岐が実行される。
命令キャッシュフィルの発生時にエラーが生じたときには、フォールト表示が生成され、仮想マシン命令と共に命令バッファ124にストアされる。即ちフォールトビットがセットされる。このラインが命令キャッシュ125には書き込まれない。従って、誤りキャッシュフィルトランザクションはフォールトビットがセットされる点を除いてキャッシュ不可能なトランザクションのような役目を果たす。この命令がデコードされた時、割り込みが実行される。
命令キャッシュコントローラ121もキャッシュ不可能な命令読み出しを提供する。レジスタセット144内のプロセッサステータスレジスタにおける命令キャッシュイネーブル(ICE)ビットが、ロードがキャッシュされ得るか否かを定めるために用いられる。命令キャッシュイネーブルビットがクリアされた場合には、命令キャッシュユニット124が全てのロードオペレーションをキャッシュ不可能なロードとして取り扱う。命令キャッシュコントロラ121は、キャッシュ不可能な命令のためにインタフェースユニット110にキャッシュ不可能なリクエストを発行する。データがキャッシュ不可能な命令のためにキャッシュフィルバス上で利用可能である時、このデータは命令バッファ124にバイパスされ、命令キャッシュ125には書き込まれない。
この実施例において、命令キャッシュ125は直接マッピングされる、8バイトラインサイズのキャッシュである。命令キャッシュ125は1サイクルの遅延を有する。このキャッシュサイズは0K、1K、2K、4K、8K、及び16Kバイトサイズに構成されている。ここでKはキロを意味する。デフォルトサイズは4Kバイトである。各ラインはそのラインが関係するキャッシュタグエントリを有する。デフォルトの4Kバイトサイズでは、それぞれのキャッシュタグは、20ビットのアドレスタグフィールド及び1つの有効ビットを有する。
命令バッファ124は、この実施例においては、12バイトの深さのFIFOバッファであって、性能上の理由からフェッチ段階301(第3図)をパイプライン300の残りの段階から分離している。バッファ124(第1図)におけるそれぞれの命令は関連する有効ビット及びエラービットを有する。この有効ビットがセットされている時、その有効ビットに関連する命令は、有効な命令である。エラービットがセットされている時、そのエラービットが関連する命令のフェッチはエラーの処理であった。命令バッファ124はデータを命令バッファ124とやり取りする信号を発生し、命令バッファ124における有効エントリ、即ちセットされた有効ビットを追跡する命令バッファコントロール回路(図示せず)を有する。
類似した実施例において、所定のサイクルにおいて4バイトを命令バッファ124に読み込ませることができる。最大2つの仮想マシン命令を表す最大5バイトは、所定のサイクルで命令バッファ124から読み出すことができる。別の実施例では、複数のバイトの仮想マシン命令をフォールディング処理したり、或いは2以上の仮想マシン命令のフォールディングをすることにより、より大きい入出力のバンド幅が提供される。当業者は、例えば位置あわせロジック、環状バッファ等を含む様々な適当な命令バッファの設計を理解されよう。分岐又は割り込みが生じた時、命令バッファ124における全てのエントリはヌル化され、分岐/割り込みデータは命令バッファ124の先頭に移動する。
第1図の実施例においては、統合型実行ユニット140が示されている。しかし、他の実施例では、命令デコードユニット120、整数ユニット142、及びスタック管理ユニット150は、1つの整数実行ユニットと考えられ、浮動小数点実行ユニット143は別のオプションのユニットである。更に別の実施例では、実行ユニットにおける様々な要素が、他のプロセッサの実行ユニットを用いて実現され得る。一般に、第1図の様々なユニットに存在する様々な要素は、一実施例のみの典型的な例である。それぞれのユニットは、図示された要素の全て又はその一部を用いて実現され得る。設計上の決定は、価格と性能のトレードオフに基づいて行われる。
命令デコードユニット
上述したように、仮想マシン命令はパイプライン300のデコード段302(第3図)においてデコードされる。典型的な実施例では、2バイトが、2つの仮想マシン命令に対応することができ、命令バッファ124(第1図)からフェッチされる。2バイトは並列にデコードされ、2バイトが2つの仮想マシン命令、例えば、1つの等価な演算にフォールディングされることができる、第1のロードトップスタック命令及び第2のアドトップ2スタックエントリ命令、に対応するか否かを判定される。フォールディングは、2つ或いは3つ以上の仮想マシン命令に対応する1つの等価な演算を供給することである。
典型的なハードウエアプロセッサ100の実施例では、1バイト第1命令が第2命令にフォールディングされる。しかしながら、別の実施例は、命令デコーダの複雑化及び命令バンド幅の増加という損失はあるものの、2つより多い仮想マシン命令、例えば2〜4仮想マシン命令、並びに多数バイト仮想マシン命令のフォールディングを提供する。本発明の譲渡人に譲渡され、代理人整理番号SP2036にて同じ日に出願された、"INSTRUCTION FOLDING FOR A STACK-BASED MACHINE"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Connor)を参照されたい。これを参照して、全体をここに組み込んでいる。典型的なプロセッサ100の実施例では、第1バイトが、第1の仮想マシン命令に対応し、多数バイト命令であるなら、第1及び第2の命令はフォールディングされない。
付加的な現在オブジェクトローダフォルダ132は、上記の、さらにより詳細には本発明の譲渡人に譲渡され、代理人整理番号SP2036にて同じ日に出願された、"INSTRUCTION FOLDING FOR A STACK-BASED MACHINE"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Connor)に記載されており、参照して全体をここに組み込んでいるような、命令フォールディングを、シミュレーション結果が特に頻繁に、それゆえ最適化のための所望のターゲットになるように示される仮想マシン命令シーケンスにおいて利用する。特に、メソッド呼出し(method invocation)は一般的に、スタックオペランド上の対応するオブジェクトに対するオブジェクトリファレンスをロードし、そのオブジェクトからフィールドをフェッチする。命令フォールディングにより、ほとんど共通の仮想マシン命令シーケンスが、等価的にフォールディングされた演算を用いて実行されるようになる。
高速型命令(quick variant)は、仮想マシン命令セットの一部ではなく(付録Iの第3章を参照されたい)、JAVA仮想マシンインプリメンテーリョンの外側には現れない。しかしながら、仮想マシンインプリメンテーリョンの内側では、高速型命令は有効に最適化されいることがわかる(本明細書の不可欠な部分である、付録Iの付録Aを参照されたい)。非高速−高速翻訳(quick translator)キャッシュ131において、種々の命令を高速型命令に更新するための書込みをサポートすることにより、通常の仮想マシン命令は高速仮想マシン命令に変更され、高速型命令によりもたらされる大きな利点を利用することができる。特に、より詳細に、本発明の譲渡人に譲渡され、代理人整理番号SP2039にて同じ日に出願された、NON-QUICK INSTRUCTION ACCELERATOR AND METHOD OF IMPLEMENTING SAMEというタイトルの米国特許出願第08/xxx,xxx号(発明者Mark Tremblay and James Michael O'Connor)に記載されており、参照して全体をここに組み込んでいように、命令の実行を開始するために必要とされる情報が初めにアセンブルされているとき、その情報は非高速−高速翻訳キャッシュ131におけるタグとしてプログラムカウンタPCと共にキャッシュ内にストアされ、その命令は高速型命令として識別される。1つの実施例では、これが自己修飾コード(self-modifying code)を用いて行われる。
その命令の後続呼出しにおいて、命令デコードユニット130は、その命令が高速型命令として識別され、実際、非高速−高速翻訳キャッシュ131の命令の実行を開始するために必要とされる情報を回収するということを検出する。非高速−高速翻訳キャッシュはハードウエアプロセッサ100の付加的な機構である。
分岐に関しては、ほとんどのインプリメンテーリョンに対して高速分岐分解を有する非常に短いパイプで十分である。しかしながら適切で簡単な分岐予測機構、例えば分岐予測回路133を別に導入することができる。分岐予測回路133に対するインプリメンテーリョンは、オペコードに基づく分岐、オフセットに基づく分岐、或いは2ビットカウンタ機構に基づく分岐を含む。
JAVA仮想マシン仕様は、実行の際にメソッドを呼出す、命令invokenonvirtual、オペコード183を定義する。そのオペコードには、インデクスバイト1及びインデクスバイト2が後続する(付録I参照)。オペランドスタック423は、この命令が実行されるとき、1つのオブジェクトに対する1つのリファレンス及びいくつかの数の引数(argument)を含む。
インデクスバイト1及び2は、現在クラスのコンスタントプール内にインデクスを発生させるために用いられる。そのインデクスにおけるコンスタントプール内の項目は、完全なメソッドシグネチャ及びクラスを指示する。シグネチャは付録Iにおいて定義され、その記載は参照してここに組み込んでいる。
メソッドシグネチャ、すなわち各メソッドに対する、短い、固有の識別子は、指示されるクラスのメソッドテーブルにおいて探索される。その探索(lookup)の結果は、メソッドのタイプとそのメソッドに対する引数の数を示すメソッドブロックである。オブジェクトリファレンス及び引数は、このメソッドのスタックからポップされ、新しいメソッドのローカル変数の初期値になる。その後実行が新しいメソッドの第1の命令を用いて再開される。実行の際に、命令invokevirtual、オペコード182及びinvokestatic、オペコード184は、まさに記載された処理と同様の処理を呼出す。各場合に、ポインタがメソッドブロックを探索するために用いられる。
メソッド引数キャッシュ134は、ハードウェアプロセッサ100の付加的な機構でもあり、第1の実施例において、タグとなるそのメソッドブロックに対するポインタと共に、そのメソッドに対する第1の呼出し後に用いるためのメソッドのメソッドブロックをストアするために用いられる。命令デコードユニット130は、インデクスバイト1及び2を用いてポインタを発生させ、その後ポインタを用いてキャッシュ134におけるそのポインタに対するメソッドブロックを回収する。これにより、後続するメソッドの呼出しにおいて、背景内でより迅速に新たに呼出されるメソッドに対するスタックフレームを構築することができるようになる。別の実施例は、キャッシュ134内のリファレンスとして、プログラムカウンタ或いはメソッド識別子を用いることもある。もしキャッシュミスがあるなら、その命令は通常の形態において実施され、キャッシュ134は適宜更新される。どのキャッシュエントリが上書きされるかを判定するために用いられる特定の処理は本発明の本質的面ではない。例えば、ごく最近用いられている判定基準がインプリメントされることができる。
別の実施例では、メソッド引数キャッシュ134が、タグとなるそのプログラムカウンタPCの値と共に、そのメソッドに対する第1の呼出し後に用いるために、そのメソッドブロックに対するポインタをストアするために用いられる。命令デコードユニット130は、プログラムカウンタPCの値を用いて、キャッシュ134にアクセスする。プログラムカウンタPCの値がキャッシュ134内のタグの1つに等しければ、キャッシュ134は、命令デコードユニット130に対するそのタグを用いてストアされたポインタを供給する。命令デコードユニット139は、供給されたポインタを用いて、そのメソッドに対するメソッドブロックを回収する。これらの2つの実施例から見て、他の別の実施例が当業者には、明らかになるであろう。
ワイドインデクスフォワーダ136は、ハードウエアプロセッサ100の付加構成要素であり、命令wideに対する命令フォールディングの特定の具体例である。ワイドインデクスフォワーダ136は、直後に後続する仮想マシン命令に対するインデクスオペランドの拡張をエンコードするオペコードを取り扱う。このようにして、ワイドインデクスフォワーダ136により、命令デコードユニット130は、ローカル変数の数が命令wideに対する別々の実行サイクルを招くことなく、1つバイトインデクスを用いてアドレス指定可能な数を越えるとき、ローカル変数記憶装置421内に誘導することができる。
命令デコーダ135、特に命令フォールディング、非高速−高速翻訳キャッシュ131、現在オブジェクトローダフォルダ132、分岐予測部133、メソッド引数キャッシュ134並びにワイドインデクスフォワーダ136の態様は、これらの構成要素がソフトウエアインタプリタ或いはジャストインタイムコンパイラの演算を促進するために用いることができるため、ソフトウエアインタプリタ或いはジャストインタイムコンパイラを利用するインプリメンテーリョンにおいても有用である。そのようなインプリメンテーリョンでは一般的に、仮想マシン命令はインタプリタ或いはコンパイラを実行するプロセッサ、すなわち例えばSun社製プロセッサ、DEC社製プロセッサ、Intel社製プロセッサ或いはMotorola社製プロセッサの任意の1つ対する命令に翻訳され、その構成要素の演算はそのプロセッサ上の実行をサポートするように変更される。仮想マシン命令から他のプロセッサ命令への翻訳は、ROM内の翻訳部、或いは単にソフトウエア翻訳部のいずれかを用いて行われる。デュアル命令セットプロセッサのさらなる例としては、本発明の譲渡人に譲渡され、代理人整理番号SP2042にて同じ日に出願された、"A PROCESSOR FOR EXECUTING INSTRUCTION SETSRECEIVED FROM A NETWORK OR FROM A LOCAL MEMORY"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Connor)を参照されたい。これを参照して、全体をここに組み込んでいる。
上に説明したように、プロセッサ100の一実施例は、プロセッサ100の性能を高める命令フォール、例えば、ハードウェアプロセッサのインプリメンテーション、ソフトウェアインタプリタのインプリメンテーション、ジャストインタイムコンパイラのインプリメンテーション等を含むスタックベースの仮想マシンインプリメンテーションにおいて利用され得る。従って、命令フォールディング処理のさまざまな実施例について以下ハードウェアプロセッサを用いた実施例で詳細に説明するが、当業者は、この説明を参照して、命令フォールディング処理の、他のスタックベースの仮想マシンインプリメンテーションへの適切な拡張を理解されよう。
第7図には、本発明の原理に基づく、第1スタック命令及び第2スタック命令のフォールディング処理された実行が示されている。この実施例において、スタック710の先頭エントリであるトップオブスタック(TOS)エントリ711aには、加算命令のための第1オペランドが存在している。第2オペランドは、スタック710のエントリ712に存在している。エントリ712がトップオブスタックエントリ711aの物理的に隣の位置に存在しておらず、スタック710の内部に存在していることに注意されたい。命令ストリームは、第2オペランドをスタックの先頭にプッシュするためのロードトップオブスタック命令(付録Iの命令iloadの説明を参照)及びスタック710の最上部の2つのエントリに存在する第1及び第2オペランドに作用する加算命令(付録Iの命令iaddの説明を参照)を含む。しかし、命令ストリームの実行速度を上げるために、ロードトップオブスタック命令及び加算命令は1つのオペレーションにフォールディングされ、これによりロードトップオブスタック命令の明示的で連続的な実行と関連実行サイクルが取り除かれることになる。その代わりに、加算命令に対応するフォールディング済オペレーションは、スタック710のTOSエントリ711a及びエントリ712に存在する第1及び第2オペランドに作用する。フォールディング処理済オペレーションの演算結果はスタック710のTOSエントリ711bにプッシュされる。従って、本発明の原理によるフォールディング処理により、計算能力を、同じ命令シーケンスの実行をフォールディングしないで行う場合と比較して高めることができる。
命令フォールディング処理を行わない場合は、加算命令の第1オペランドは、スタック610(第6図参照)の先頭であるトップオブスタック(TOS)エントリ611aに存在する。第2オペランドは、スタック610のエントリ612に存在する。ロードトップオブスタック命令は、この第2オペランドをスタック610のトップにプッシュし、通常実行サイクルを要求する。このプッシュにより第2オペランド及び第1オペランドはそれぞれTOSエントリ611bと(TOS-1)エントリ613に存在することになる。このため、加算命令は、別の実行サイクルにて、スタックアーキテクチャの意味論に基づき、スタック610の最上位の2つのエントリ、即ちTOSエントリ611b及び(TOS-1)エントリ613に適切に存在する第1及び第2オペランドに作用する。加算命令の演算結果は、スタック610のTOSエントリ611cにプッシュされ、加算命令の実行が終わった後、この演算結果は第1及び第2オペランドデータがスタック610にプッシュされなかったかのような状態となる。上述のように、フォールディング処理により加算処理を完逐するのに必要な実行サイクルが減り、命令ストリームの実行速度が高められる。更に複雑なフォールディング処理、例えばストア命令のフォールディング処理及びより多くの数の命令を含むフォールディング処理については以下に詳細に説明する。
一般に、命令デコードユニット130(第1図)は、命令のストリームにおける複数の命令を検証する。命令デコードユニット130は第1の命令及び第2の隣接する命令を共にフォールディングし、命令デコードユニット130が第1及び第2命令が構造的な独立性もソースからの独立性も有しておらず、第2命令が第1命令によって供給されたデータに作用することを検出した時、実行ユニット140によって実行するための1つの等価なオペレーションを供給する。1つのオペレーションの実行により、実行サイクルが取り除かれた点を除いて第1命令に相当するオペレーションの実行の後、第2命令に相当するオペレーションの実行が行われた場合と同じ結果が得られる。
上述のように、JAVA仮想マシンはスタックベースで、命令セット、レジスタセット、オペランドスタック、及び実行環境を特定する。本発明はJAVA仮想マシンに関連して説明されているが、当業者は、本発明がJAVA仮想マシン命令を実現する実施例や、或いはJAVA仮想マシン命令に関連する実施例に限定されず、仮想的なもの及び物理的なものの双方の様々なスタックマシン環境に対するシステム、もの、方法、及び装置を含むことを理解されよう。
第4A図に示すように、JAVA仮想マシン使用に従って、各メソッドは、オペランドスタック及びローカル変数の組に対して割り当てられたストレージを有する。同様に、第8図の実施例(第4A図も参照)においては、一連のメソッドフレーム、例えばスタック803上のメソッドフレーム801及びメソッドフレーム802がそれぞれJAVAプログラムの実行経路に沿って呼び出される各メソッドに対するオペランドスタックインスタンス、ローカル変数ストレージインスタンス、及びフレームステート情報インスタンスを含む。メソッドが呼び出される度に新たなフレームが生成され現在フレームとなり、メソッドの実行が終了するとそれは破壊される。そのメソッドが別のメゾッドを呼び出す場合、フレームは現在フレームであることをやめる。メソッドが戻されたとき、現在フレームはそのメソッド呼び出しの結果があればそれをスタック803を介して前フレームに戻す。次いで現在フレームは廃棄され、前フレームが現在フレームとなる。本発明に基づくフォールディング処理については後に完全に説明するが、フレームのようなメソッドのためのメモリ空間を割り当てたり定義するために用いられる特定の処理から独立しており、一般にスタックベースのアーキテクチャにおいて使用することができる。
この一連のメソッドフレームは、例えばレジスタ/キャッシュ/メモリ階層を含む様々な適切なメモリ階層の任意のものにおいて実現され得る。しかし、選択されたメモリ階層に関わりなく、オペランドスタックインスタンス812(第8図)は、ランダムにアクセス可能なストレージ810においてインプリメントされる。即ち、オペランドスタックインスタンス812のエントリの少なくとも一部には、オペランドスタックインスタンス812の先頭以外の位置からもアクセス可能である。これはスタックの先頭エントリ或いは先頭のエントリにのみアクセス可能な従来のスタックインプリメンテーションとは対照的である。上述のように、レジスタOPTOPは、現在メソッドが関係するオペランドスタックインスタンス812の先頭を指定するポインタを格納する。レジスタOPTOPに格納された値は、現在メソッドに対応するオペランドスタックインスタンスの先頭エントリが指定されている状態を維持する。
加えて、現在メソッドに対するローカル変数は、ランダムにアクセス可能なストレージ810において表現される。レジスタVARSにストアされたポインタは、現在メソッドが関係するローカル変数ストレージインスタンス813の開始アドレスを特定する。レジスタVARSの値は、現在メソッドに対応するローカル変数ストレージインスタンスのベースアドレスを特定した状態を維持される。
オペランドスタックインスタンス812及びローカル変数ストレージインスタンス813におけるエントリは、それぞれレジスタOPTOP及びVARSに表された値のインデクシングオフ(indexing off)により参照される。これらのレジスタOPTOP及びVARSは、第1図の実施例において、レジスタセット144に含められ、第8図の実施例においては、ポインタレジスタ822に含められている。ポインタレジスタ822は、JAVA仮想マシンを実現するプロセッサの物理的レジスタにおいて表されるが、若しくは所望に応じてランダムにアクセス可能なストレージ810において表され得る。好適実施例において、一般に使用されるオフセットOPTOP-1、OPTOP-2、VARS+1、VARS+2、及びVARS+3は、それぞれレジスタOPTOP及びVARSから誘導される。別の形態では、追加のオフセットがポインタレジスタ822にストアされ得る。
現在メソッドが関係するオペランドスタックインスタンス812及びローカル変数ストレージインスタンス813は、好ましくはフラットな64エントリキャッシュ、例えばその内容が更新し続けられ、オペランドスタック及びローカル変数ストレージエントリの機能している組がキャッシュされることになるようなスタックキャッシュ155(第1図参照)において表現される。しかし、現在フレームのサイズに応じて、オペランドスタックインスタンス812及びローカル変数ストレージインスタンス813を含む現在フレームはキャッシュにおいて全体的に或いは部分的に表され得る。現在フレーム以外のフレームに対するオペランドスタック及びローカル変数ストレージエントリも、空間があればキャッシュ内に表され得る。本発明のフォールディング処理に使用するために適切なキャッシュの適切な表現は、Mark Tremblay及びJames Michael O'Connorを発明者とし、本発明の譲受人に譲渡された、METHODS AND APPARATI FOR STACK CACHINGなる名称の米国特許出願においてより詳細に説明されている。上述の特許出願と共に、発明者を同じくし本発明の譲受人に譲渡されたMETHOD FRAME STORAGE USING MULTIPLE MEMORY CIRCUITSなる名称の米国特許出願も同様に参照されたい。しかし、分離された、キャッシュされない、或いはその両方のオペランドスタック及びローカル変数ストレージエリアを含む他の表現も適応可能である。
メソッドフレーム及びそれらの関係するオペランドスタック及びローカル変数ストレージインスタンスに加えて定数エリア814がJAVA仮想マシンをインプリメントするプロセッサのアドレス空間内に設けられる。これは共通に使用される定数、例えば命令iconstのようなJAVA仮想マシン命令により指定された定数のための領域である。場合によっては、オペランドソースがインデクスとして定数エリア814に表される。第8図の実施例では、定数エリア814がランダムにアクセス可能なストレージ810において表されている。所望に応じて、定数エリア814のエントリも例えばスタックキャッシュ155にキャッシュされ得る。
当業者は各メソッドに対するオペランドスタック及びローカル変数ストレージインスタンスを保持することの利点を、スタック指向の構造におけるオペランドスタック及びローカル変数ストレージの様々なインスタンスを維持することによって生成されるパラメータ及び演算結果を渡すための機会の利点と共に理解されようが、以下の記述は、それぞれが現在メソッドに関連する特定のインスタンス(オペランドスタックインスタンス812及びローカル変数ストレージインスタンス813)に焦点をあてたものである。以下、オペランドスタック及びローカル変数ストレージのこれら特定のインスタンスを、単にオペランドスタック812及びローカル変数ストレージ813と称する。説明のための単純化を行ってはいるが、当業者は、オペランドスタック812及びローカル変数ストレージ813は、インスタンスを結合して複合表現にする表現及び各メソッドに対する個別のインスタンスを維持する表現を含む、現在メソッドが関係するオペランドスタック及び変数ストレージの任意のインスタンスを意味することを理解されよう。
JAVA仮想マシン命令に対するオペランドソース及び演算結果ターゲットは、通常オペランドスタックインスタンス812又はローカル変数ストレージインスタンス813のエントリを特定する。即ちそれらは現在メソッドに対するオペランドスタック及びローカル変数ストレージのエントリを特定する。1例として、限定を意図するものではないが、代表的なJAVA仮想マシン命令は、付録Iに含められるJAVA仮想マシン使用の第3章に記述されている。
JAVA仮想マシン命令はオペランド及び演算結果の行先の双方を明示的に示すことは滅多にない。代わりに、ソース又は行先の何れかはオペランドスタック812の先頭に暗示的に示されている。JAVAバイトコードのいくつかはソース及び行先の何れも明示的に示さない。例えば、命令iconst_0は、定数である整数0をオペランドスタック812にプッシュする。この定数0は、命令内に暗示されているが、命令は0オペランドに対するソースとして、定数エリア814のような定数のプールから値0の表現を用いて特定のJAVA仮想マシンインプリメンテーションによって実際に実現され得る。命令iconst_0をこのように実現するJAVA仮想マシンインプリメンテーション用の命令デコーダは、ソースアドレスとして定数0が表現される定数エリア814のエントリのインデクスを発生し得る。
(p24c)現在メソッドが関係するオペランドスタック及びローカル変数ストレージ構造に焦点を当て、第9A図〜第9D図を参照すると、JAVA仮想マシン定数加算命令iaddは、第1及び第2整数オペランド(それぞれオペランド1及びオペランド2と称する)の合計を発生する。これらのオペランドはオペランドスタック812の最上部の2つの位置に存在する。この最上部の2つの位置は、命令iaddの実行時に、レジスタOPTOPにおけるポインタOPTOP及びポインタOPTOP-1によって特定される。命令iaddの実行の結果、即ち第1及び第2整数オペランドの合計はオペランドスタック812にプッシュされる。
第9A図に示すのは、一対のJAVA仮想マシン整数ロード命令iloadの実行の前に、第1及び第2値(値1及び値2とも称される)を含むオペランドスタック812及びローカル変数ストレージ813の状態である。第9A図において、ポインタOPTOPは値AAC0hを有する。
第9B図は、一対の命令iload(ローカル変数ストレージ813からの整数値をオペランドスタック812にロードする命令)の実行の後のオペランドスタック812である。命令の実行時には、レジスタVARSにおけるポインタVARS及びポインタVARS+2により特定された位置からの値1及び値2が位置AAC4hにあるオペランド1及び位置AAC8hにあるオペランド2としてオペランドスタック812にプッシュされ、処理中にポインタOPTOPが値AAC8hに更新される。第9C図に示すのは命令iaddが実行された後のオペランドスタック812の状態である。命令iaddの実行によりオペランド1及びオペランド2がオペランドスタック812からポップされ、オペランド1とオペランド2の合計が計算されて、その合計値がAAC4hの位置にあるオペランドスタック812にプッシュされる。命令iaddの実行の後、ポインタOPTOPは値AAC0hを有し、その合計値をストアしているオペランドスタック812のエントリを指定する。
第9D図は、命令istoreが実行された後のオペランドスタック812の状態を示した図である。命令istoreの実行により、オペランドスタック812から合計値がポップされ、その合計値がポインタVARS+2によって特定される位置のローカル変数ストレージ813のエントリにストアされる。
オペランドをオペランドスタック812にプッシュしたりオペランドスタック812のトップに存在する値に作用する他の命令に対する変数は、当業者には明らかであろう。例えば、多数のオペランドスタック812エントリを要求するデータタイプの為の及び別のオペレーションのための変数、例えば倍長整数値や倍精度浮動小数点値等はここに開示される内容を参照すれば当業者には明らかであろう。
第10A図〜第10C図のフォールディング処理の例は、第9A図〜第10D図を参照して説明したものと類似しているが、ここではロードのフォールディング処理のみが説明されている。JAVA仮想マシン配列長命令arraylengthを実行することにより、そのオブジェクト参照ポインタobjectrefがオペランドスタック812のトップにあり。オペランドスタック812に長さをプッシュする配列長が決定される。第10A図に示すのは、ローカル変数ストレージ813からのオブジェクト参照をオペランドスタック812のトップにロードするのに用いられるJAVA仮想マシン参照ロード命令aloadの実行の後のオペランドスタック812及びローカル変数ストレージ813の状態を示した図である。第10A図において、ポインタOPTOPは値AAC0hを有する。
第10B図は、命令aloadの実行により、オブジェクト参照ポインタobjectrefがオペランドスタック812のトップにプッシュ即ちコピーされ、処理中にポインタOPTOPがAAC4hに更新された後のオペランドスタック812の状態を示した図である。
第10C図は、命令arraylengthが実行された後のオペランドスタック812の状態である。命令arraylengthの実行により、オブジェクト参照ポインタobjecterfがオペランドスタック812からポップされ、これによって参照された配列の長さが計算され、その長さがオペランドスタック812にプッシュされる。この命令arraylengthの適切なインプリメンテーションにより、オブジェクト参照ポインタobjectrefを実行ユニット例えば実行ユニット140に供給することができる。この実行ユニットはオブジェクト参照ポインタobjectrefに値の長さを続けて書き込む。オブジェクト参照ポインタobjectrefがオペランドスタック812からポップされても、或いは単にオーバーライトされても、命令arraylengthの実行の後に、ポインタOPTOPは値AAC4hを有し、値の長さをストアするオペランドスタック812のエントリを指定している。
第11図は、プロセッサ1100を示した図であり、このプロセッサ1100では、第9A図及び第9B図及び第10A図及び第10B図に示すようなロード処理が後続の命令の実行、例えば後続する命令iadd又は命令arraylengthにフォールディング処理で一体化される。このようにして、命令iaddについてはオペランド1及びオペランド2、命令arraylengthについてはポインタobjectrefのオペランドスタック812のトップへのローディングの関係する直後の実行サイクルが取り除かれ得る。この結果、JAVA仮想マシン命令のグループ、例えば命令iload、aload、iadd、及びistore、又は命令aload及びarraylengthのグループの1サイクルでの実行がプロセッサ1100により行われる。プロセッサ1100の一実施例はハードウェアプロセッサ100として第1図に提示されている。しかし、ハードウェアプロセッサ1100は、ハードウェアプロセッサ100の様々な最適化を含まない他の実施例も包含している。更に、以下に説明するフォールディング処理は、ソフトウェアインタプリタ、又は内部に含められたジャストインタイムコンパイラにおいても実現され得る。第11図のプロセッサ1100の実施例においては、第9D図に示されているようなストアが前の命令の実行、例えば第9D図におけるすぐ前の命令iaddの実行にフォールディングされる。
命令フォールディング処理は、主として命令デコーダ1118によって行われる。命令デコーダ1118は命令バッファ1116からフェッチされた命令を検索し、フェッチされた命令シーケンスにおける命令の性質に応じて、実行ユニット1120に命令シーケンスを1つのフォールディングされたオペレーションとして実現するオペランドアドレシング情報及びデコード済オペレーションを供給する。命令バッファ1116からの命令シーケンスが準拠するJAVA仮想マシン命令セットの命令とは異なり、命令デコーダ1118により実行ユニット1120に供給されたデコードされたオペレーションはローカル変数ストレージ813、オペランドスタック812、及び定数エリア814のエントリに表現されたオペランド値に作用する。
第11図の実施例においては、有効オペランドソースがポインタVARS、VARS+1、VARS+2、及びVARS+3により特定されたローカル変数ストレージ813のエントリを、ポインタOPTOP、OPTOP-1、及びOPTOP-2により特定されたオペランドスタック812のエントリと共に含む。同様に、有効結果ターゲットは、オペランドVARS、VARS+1、VARS+2、及びVARS+3により特定されたローカル変数ストレージ813のエントリを含む。第11図による実施例は、有効オペランドソースとして定数エリア814のエントリを、オペランドスタック812及びローカル変数ストレージ813における他の位置と共に供給し得る。
第11図及び第12図では、JAVA仮想マシン命令のシーケンスがメモリからフェッチされ、命令バッファ1116にロードされている。この結果、命令バッファ1116はJAVAバイトコード用のシフトレジスタとして編成される。各命令サイクルにおいて命令デコーダ1118が複数のバイトコードをデコードし、オペレーションが命令デコードバスinstr_dec上に、コードされたオペレーションの形態で実行ユニット1120に供給され、かつ、このオペレーションは命令アドレスバスinstr_addr上をオペランドソース及び結果行先アドレシング情報と関連付けられる。命令デコーダ1118も、命令有効信号instr_validを実行ユニット1120に供給する。信号instr_validがアサートされた時、それは命令デコードバスinstr_dec上の情報が有効なオペレーションを指定していることを表している。
1又は2以上のバイトコードは、デコード済オペレーション及びオペランドアドレシング情報の実行ユニット1120の供給に対応する各サイクルにおいて、命令バッファ1116からシフトされて命令デコードユニット1118に移される。後続のデコードされていないバイトコードは、シフトされて命令バッファ1116に入れられる。ノーマルデコードオペレーションの場合は、1つの命令が命令バッファ1116からシフトして出され、命令デコードユニット1118によりデコードされる。1つの対応するオペレーションは、各命令サイクルの間に実行ユニット1120により実行される。
これに対し、フォールディングされたデコードオペレーションの場合は、多数の命令、例えば命令のグループが命令バッファ1116からシフトされて命令デコードユニット1118に移される。この多数の命令に応じて、命令デコードユニット1118は1つの等価なフォールディングされたオペレーションを発生し、このオペレーションは実行ユニット1120により各命令サイクルにおいて実行される。
第9A図〜第9D図と共に以前に説明した命令シーケンスについては、命令デコーダ1118は以下の4つのJAVA仮想マシン命令が関係するバイトコードを選択的にデコードする。
1.iload値1
2.iload値2
3.iadd
4.istore
これらの命令については第9A図〜第9D図を参照しつつ前に説明した。)で説明するように、命令iload及び命令istoreの双方は命令デコーダ1118によりフォールディングされて、命令iaddに対応する加算オペレーションに組み込まれる。命令デコーダ1118のオペレーションは、4つの命令のフォールディング可能なシーケンスを用いて示されているが、当業者は本発明の適応対象がこの4つの命令に限定されないことは理解されよう。2、3、4、5、或いはそれ以上の命令から成るフォールディング可能なシーケンスが考えられる。例えば、命令istoreに類似した1以上の命令及び命令iloadに類似した2以上の命令がフォールディング可能なシーケンスに含められ得る。
命令デコーダ1118はデコードされたオペレーション情報を、バスinstr_decを介して、又関係するオペランドソース及び結果行先アドレシング情報をバスinstr_addrを介して供給する。これにより実行ユニット1120がポインタVARSにより特定されるローカル変数ストレージ813の位置0の内容と、ポインタVARS+2によって特定されるローカル変数ストレージ813の位置2の内容とを加算し、その結果をポインタVARS+2によって特定されるローカル変数ストレージ813の位置2にストアすることが指定される。このようにして、2つのロード命令がフォールディングされ、命令iaddに対応するオペレーションの実行に一体化される。第9B図に示す2つの命令サイクル及び中間のデータ状態はなくなる。加えて、命令istoreもフォールディングされて、命令iaddに相当するオペレーションの実行と一体化され、他の命令サイクル、全部で3つの命令サイクル及び第9C図における中間のデータ状態がなくなることになる。様々な他の実施例において、本発明による命令フォールディング処理によりロード、ストア、又はロードとストアの双方をなくすことができる。
第13図に示すのはバイトコードのフォールディング処理を行うデコーディング及びフォールディング処理を行わないデコーディングの双方を提供する命令デコーダ1118の実施例である。命令デコーダ1118のフォールディング動作モードか、非フォールディング動作モードかの選択は、フェッチされて命令バッファ1116に入れられ、次いで命令デコーダ1118によってアクセスされるバイトコードの特定のシーケンスに基づいている。命令デコーダ1118のノーマルデコード部1302及びフォールドデコード部1304は、パラレルに配置されており、非フォールディング及びフォールディングされた実行のそれぞれをサポートする。
第13図の実施例では、フォールドデコード部1304が命令バッファ1116にフェッチされたバイトコードシーケンスにおけるバイトコードのフォールディング処理実行の機会を検出する。このようなフォールディング可能なシーケンスが検出されると、ノーマルデコード部1302ではなくフォールドデコード部1304の出力が実行ユニット1120への供給源として選択されることがトリガされる。有益なことは、フォールディングされたデコーディング又はフォールディングされないデコーディングの選択が実行ユニット1120に対して透過的であることである。これによりオペレーション情報がバスinstr_decを介して、関係するオペランドソース及び結果行先アドレシング情報がバスinstr_addrを介して受け取られ、単なる命令なのか、又はフォールディングされた命令シーケンスに相当する情報なのかを知る必要がなくなる。
ノーマルデコード部1302は、各命令サイクルの間に命令バッファ1116からの1つのバイトコードを検査し、それに応答して以下の表示を発生する。即ち、
1.デコードされた命令に対応するオペレーション、例えば整数加算を特定するノーマル命令デコード信号n_instr_decが、スイッチ1306の第1の入力端の組に供給される。
2.デコードされた命令に対する明示的なソース及び行先アドレス、例えば命令iaddに対する第1オペランドアドレス=OPTOP、第2オペランドアドレス=OPTOP-1、及び行先アドレス=OPTOP-1も作り出すノーマルアドレス信号n_adrがスイッチ1310の第1のバス入力に供給される。
3.例えば第13図の実施例における、命令iaddに対するネットの変化=−1であるポインタOPTOPにおけるネットの変化n_delta_optopがノーマルアドレス信号n_adrの成分としてエンコードされる。
4.ノーマル命令デコード信号n_instr_decが有効のオペレーションを特定しているか否かを示す命令有効信号instr_validがスイッチ1308の第1の入力端に供給される。
ノーマルデコード部802に対して、以下に詳細に説明するように、命令デコーダ618のフォールドデコード部804は命令バッファ616からのバイトコードのシーケンスを検査し、こけらのシーケンス(例えばローカル変数0からのiload値1、ローカル変数2からのiload値2、iadd、及びローカル変数2に対する合計のistore)がフォールディングされて、オペランドスタック上の命令オペランド及び/又は結果の一次ストレージで不必要なものを取り除くことができるか否かを判定する。フォールドデコード部804がバッファ616におけるバイトコードのシーケンスがフォールディング可能である場合には、フォールドデコード部804が以下の表示を発生する。
1.等価なオペレーション、例えばフォールディングされた命令シーケンスに対応する整数加算オペレーションを特定するフォールディングされた命令デコード信号f_instr_decがスイッチ1306の第2の入力端の組に供給される。
2.等価なオペレーションに対するソース及び行先アドレス、例えば第1オペランドアドレス=VARS、第2オペランドアドレス=VARS+2、及び行先アドレス=VARS+2を特定するフォールディングされたアドレス信号f_adrがスイッチ1310の第2のバス入力に供給される。
3.例えば第13図の実施例において上のシーケンスのネットの変化=0であるポインタOPTOPにおけるネットの変化信号f_delta_optopが、ノーマルアドレス信号n_adrの成分としてエンコードされる。
4.フォールディングされた命令デコード信号f_instr_decが有効なオペレーションを指定しているか否かを表示するフォールド済命令有効信号f_validがスイッチ1308の第2入力末端に供給される。
フォールドデコード部804又、命令バッファ1116におけるバイトコードのシーケンスがフォールディング可能であるか否かを表示するフォールドラインf/nf上の信号を発生する。フォールドラインf/nf上の信号は、スイッチ1306、1310及び1308のコントロール入力に供給される。命令バッファ1116におけるバイトコードのシーケンスがフォールディング可能である場合、フォールドラインf/nf上の信号は、スイッチ1306、1310、及び1308に、実行ユニット1120への供給のための各第2入力の選択、即ちソースフォールド済命令デコード信号f_instr_dec、フォールド済アドレス信号f_adr、及びフォールド済命令有効信号f_validをフォールドデコード部804から供給するために各第2入力を選択させる。命令バッファ1116におけるバイトコードのシーケンスがフォールディング不可能である場合には、フォールドラインf/nf上の信号によりスイッチ1306、1310、及び1308が、フォールドデコード部804から実行ユニット1120へのソースノーマル命令デコード信号f_instr_dec、ノーマルアドレス信号n_adr、及びノーマル命令有効信号n_validの供給の為の各第1入力を選択する。
本発明によるいくつかの実施例においては、フォールドデコード部1304のオペレーションが外部の命令デコーダ1118から供給されたアクティブ抑制フォールディング信号suppress_foldに応じて抑制される。アサートされた抑制フォールディング信号suppress_fold(第14図参照)に応じて、フォールドラインf/nf上の信号は、命令バッファ1116により提供された特定のバイトコードシーケンスかそうでなければフォールディングのトリガとなる場合ですら、スイッチ1306、1310、及び1308の各第1入力を選択した状態に維持される。例えば、このような実施例の1つでは、フォールディング抑制信号suppress_foldが、ポインタVARSにより特定されたローカル変数ストレージ813のエントリがキャッシュされない時、例えばオペランドスタック812におけるエントリがスタックキャッシュ155からローカル変数ストレージ813を置き換えたとき、アサートされる。ここに開示される実施例では、オペランドスタック812及びローカル変数ストレージ813の少なくとも1部分を表すスタックキャッシュ及びキャッシュコントロール機構が、ローカル変数ストレージ813又はオペランドスタック812のフォールディングされるエントリがスタックキャッシュ155に存在しない場合、抑制フォールディング信号suppress_foldをアサートし得るという利点がある。
第14図は、命令デコーダ1118のフォールドデコード部1304をより詳細に示した図である。フォールド判定部1404は、選択的に命令バッファ1116におけるバイトコードのシーケンスを検査する。(第15図を参照しつつ以下に説明するように)2のバイトコード及び1又は2以上の後続のバイトコードがフォールディング可能なオペレーションのシーケンスを表す場合、フォールド判定部1404がフォールドラィンf/nf上にフォールド表示信号を、及び等価なフォールディング処理済オペレーションを特定するフォールド済命令デコード信号f_instr_decを供給する。フォールディングされた命令デコード信号f_instr_decは、コードされた命令instr_decとして実行ユニット1120に供給される。好適実施例では、フォールディング可能なオペレーションのシーケンスが、命令デコーダ1118から2、3、又は4つのバイトコードが関係するオペレーションを含む。即ち、オペランドをオペランドスタック812にロードする最大2個のバイトコード、オペランドをポップする1個のバイトコード、そのオペランドに作用する1個のバイトコード、結果をオペランドスタック812にプッシュする1個のバイトコード、及び結果をオペランドスタック812からポップしてストアする1個のバイトコードである。等価なフォールディングされたオペレーションは、フォールド命令デコード信号f_insn_decによりエンコードされ、フォールディングされた実行アドレシング情報と結合されたとき、オペランドスタック812へのロード及びそこからのデータのストアをなくすオペレーションを特定する。
別の実施例は2つの命令のみをフォールディングし得る。例えば命令iloadを命令iaddに、若しくは命令istoreをすぐその前の命令iaddにフォールディングする。他の実施例は、オペランドをオペランドスタックにプッシュする命令、例えば1又は2以上の命令iloadを命令iaddにフォールディングするか、或いはオペランドスタックから演算結果をポップする命令のみ、例えば命令istoreをすぐその前の命令iaddにフォールディングし得る。更に別の実施例は、特定の仮想マシン命令セットの命令に基づき、オペランドをオペランドスタックにプッシュする多数の命令及び/又は演算結果をオペランドスタックからポップする多数の命令をフォールディングし得る。このような実施例では、命令シーケンスの通常のデコーディング及び実行と比較して上述のような利点が得られる。
フォールド判定部1404は、成分第1オペランドインデクス信号first_adr_ind、第2オペランドインデクス信号second_adr_ind及び行先インデクス信号dest_adr_indを含む一連のフォールドアドレスインデクス複合信号f_adr_indを発生する。上述の成分はそれぞれ等価なフォールディングされたオペレーションに対する第1オペランドアドレス、第2オペランドアドレス、及び行先アドレスに対して選択的である。フォールド判定部1404は、等価なフォールディングされたオペレーションに対するオペランド及び行先アドレスを供給する場合において使用するためのアドレスジェネレータ1402をフォールドする複合信号f_adr_indを供給する。フォールド判定部1404は、スイッチ1306、1310、及び1308(第13図参照)を制御するためのフォールドラインf/nf上のフォールド表示信号をアサートし、信号f_instr_dec、f_adr、及びf_validを信号instr_dec、instr_adr、及びinstr_validとして供給する。他の場合、各信号はノーマルデコード部1302から実行ユニット1102に供給される。
フォールド判定部1404の動作について第15図のフローチャートを参照しつつここに説明する。開始1501において、フォールド判定部1404は命令デコードサイクルを開始し、処理を初期インデクス1502に進める。初期インデクス1502において、命令バッファ1116にはいる命令インデクスinstr_indexが初期化され、命令バッファ1116におれるバイトコードシーケンスの次のバイトコードを特定する。好適実施例では、命令インデクスinstr_indexは、1に初期化され、次のバイトコードが命令バッファ1116における最初のバイトコードとなる。というのは、前のバイトコードが既に命令バッファ1116からシフトアウトされているからである。しかし、様々な他のインデキシング及び命令バッファ管理スキームも適切なものとなり得る。処理の完了時に、初期化インデクス1502は、処理を第1命令チェック1504に進める。
第1命令チェック1504において、フォールド判定部1404は、instr_index、即ち例えば整数値、浮動小数点値、参照値等の値をオペランドスタック812にプッシュするオペレーションに相当する第1バイトコードにより命令が特定されているか否かを判定する。JAVA仮想マシンの実施例では、第1命令チェック1504が、インデクスinstr_indexにより指定された命令が、第1データ項目をオペランドスタックにプッシュするためのものとしてJAVA仮想マシン仕様(付録I参照)が定義するものであるか否かを判定する。そうである場合は、第1オペランドインデクス信号first_adr_indが(第1オペランドアドレスセッティング1506において)アサートされ、第オペランド値のソースを特定する。好適実施例では、第1オペランドインデクス信号first_adr_indが、OPTOP、OPTOP-1、OPTOP-2、VARS、VARS+1、VARS+2、及びVARS3の1つに対して選択的であるが、別の実施例は、例えば、定数エリア814におけるソースアドレスを含むソースアドレスのより大きい、より小さい、又は異なる組をコードし得る。後続のバイトコードに応じて、この第1バイトコードは、後続のオペレーションの実行にフォールディングされ得るオペレーションに相当するものであり得る。しかし、第1バイトコードが第1命令チェック1504の基準を満たさない場合には、フォールディング処理が適合せず、フォールド判定部1404は、フォールドラインf/nf上に非フォールド表示信号を供給し、そこで、ノーマルデコード部1302からの表示がデコーディングを提供する。
第1バイトコードが第1命令チェック1504の基準を満たすものと仮定すると、インデクスinstr_indexは、(インプリメンテーション1508において)実現され、命令バッファ1116における次のバイトコードを指定する状態となる。次いで、第2命令チェック1510において、フォールド判定部1404は、インデクスinstr_indexによって指定された命令、即ち第2バイトコードが、例えば整数値、浮動小数点値、参照値等の値をオペランドスタック812にプッシュするオペレーションに相当するか否かを判定する。JAVA仮想マシンの実施例の場合には、第2命令チェック1510が、インデクスinstr_indexによって特定された命令が、第1データ項目をオペランドスタックにブッシュするためのものとしてJAVA仮想マシン仕様(付録I参照)が定義したものであるか否かを判定する。そうである場合には、第2オペランドインデクス信号second_adr_indが、(第2オペランドアドレスセッティング1512において)アサートされ、第2オペランド値のソースが表示され、インデクスinstr_indexは、(インプリメンティング1514において)インプリメントされ、命令バッファ1116における次のバイトコードを指定する状態となる。前に説明したように、第2オペランドインデクス信号second_adr_indは、OPTOP、OPTOP-1、OPTOP-2、VARS、VARS+1、VARS+2、及びVARS3の1つに対して選択的であるが、別の実施例も適切であり得る。フォールド判定部1404は、第3命令チェック1516において命令バッファ1116における第2バイトコード又は第3バイトコードの何れかを指定するインデクスinstr_indexについて継続する。
第3命令チェック1516において、フォールド判定部1404は、インデクスinstr_indexによって指定される命令、即ち第2バイトコード又は第3バイトコードの何れかが、例えば整数値、浮動小数点値、参照値等の、オペランドスタック812の先頭エントリからのオペランド値に作用し、このようなオペランド値をオペランドスタック812から効果的にポップし、演算結果をオペランドスタック812にプッシュするオペレーションに相当するか否かを判定する。オペレーション値のポップは、明示的なものであり得るか、単に、オペランドスタック812の先頭エントリに演算結果を書き込み、ポインタOPTOPをそのエントリがオペランドスタック812の先頭として特定されるように更新するネットの効果を有するものであり得る。JAVA仮想マシンの実施例では、第3命令チェック1516が、インデクスinstr_indexによって特定された命令が、JAVA仮想マシン仕様(付録I参照)が、オペランドスタックからデータ項目をポップし、ポップされたデータ項目に作用し、演算結果をオペランドスタックにプッシュするものとして定義したオペレーションに対応するか否かを判定する。そうである場合は、インデクスinstr_indexが(インプリメンティング1518において、インプリメントされ、命令バッファ1116内の次のバイトコードを指定する状態となる。そうでない場合はフォールディング処理が適合せず、フォールド判定部1404は、フォールドラインf/nfに非フォールド表示信号を供給し、そこでノーマルデコード部1302がデコーディングを行う。
第4命令チェック1520において、フォールド判定部1404は、インデクスinstr_indexにより特定された命令、即ち第3バイトコード又は第4バイトコードの何れかが、オペランドスタック812から値をポップし、その値をローカル変数ストレージ813のようなデータストアに格納するオペレーションに相当するか否かを判定する。JAVA仮想マシンの実施例では、第4命令チェック1520が、インデクスinstr_indexによって特定された命令が、JAVA仮想マシン仕様(付録I参照)が、演算結果データ項目をオペランドスタックからポップするものとして定義したオペレーションに相当するか否かを判定する。そうである場合には、インデクス信号dest_adr_indが、(行先アドレスセッティング1522において)アサートされ、等価なフォールディングされたオペレーションの演算結果値の行先を特定された状態となる。そうでない場合には、命令バッファ1116のインデクスinstr_indexによって特定された位置にあるバイトコードが第4命令チェック1520の判定基準を満たしていない場合には、インデクス信号dest_adr_indが、(行先アドレスセッティング1124)においてアサートされ、オペランドスタック812の先頭を指定する状態となる。JAVA仮想マシン命令の実施例では、インデクスinstr_indexによって特定された命令が、第4命令チェック1520の基準に一致しない場合には、インデクス信号dest_adr_indが、(行先アドレスセッティング1124において)アサートされ、ポインタOPTOPが特定される。オペランドスタック812の先頭又はストアオペレーションの何れかが選択され、フォールディングされた命令有効信号f-validが(有効フォールドアサーティング1126において)アサートされ、ラインf/nf上のフォールド表示信号が供給されて、スイッチ1306、1308、及び1310のフォールドデコード入力が実行ユニット1120への供給のために選択される。フォールド判定部1404は、終了1550において命令デコードサイクルを終了する。
単純化のため、ハードウェアプロセッサ100のための命令デコーダ、例えば命令デコーダ135は、フォールドデコーディングを、2つの命令の命令シーケンスへの、及び/又は1つのバイトコード命令のシーケンスへのフォールドデコーディングに限定され得る。当業者は、命令デコーダ1118のフォールドデコード部1304に対する適切な単純化を理解されよう。
第16図は、第1オペランドアドレスジェネレータ1602、第2オペランドアドレスジェネレータ1604、及び行先アドレスジェネレータ1606の3つのアドレスジェネレータを含むフォールドアドレスジェネレータ1402を示した図である。この3つのジェネレータはそれぞれ、そこに供給されたインデクス及びポインタレジスタ822からのポインタVARS及びポインタOPTOPに基づいて対応する第1オペランド、第2オペランド、及び行先アドレスを供給する。好適実施例では、第1オペランドアドレスジェネレータ1602、第2オペランドアドレスジェネレータ1604、及び行先アドレスジェネレータ1606が、オペランドスタック812及びローカル変数ストレージ813エントリサブセットに対応するランダムにアクセス可能なストレージ810におけるアドレスを供給する。別の実施例では、ランダムアクセスメモリ以外のストレージ、例えば物理的レジスタ(特にJAVA仮想マシンインプリメンテーションが下層を成すオペランドスタック及びローカル変数ストレージを供給するもの)に対して選択的な識別子を供給し得る。
第1オペランドアドレスジェネレータ1602は、フォールド判定部1404からの第1オペランドインデクス信号first_adr_indを受け取り、ポインタレジスタ822からのポインタVARS及びポインタOPTOP値を用いて、等価なフォールディングされたオペレーションのための第1オペランドに対する第1オペランドアドレス信号first_adr_indを発生する。第2オペランドアドレスジェネレータ1604及び行先アドレスジェネレータ1606の動作は類似している。第2オペランドアドレスジェネレータ1604は、第2オペランドインデクス信号second_adr_indを受け取り、等価なフォールディングされたオペレーションの為の第2オペランド(もしあれば)に対する第2オペランドアドレス信号、second_op_adrを発生する。行先アドレスジェネレータ1606は、行先インデクス信号dest_adr_indを受け取り、等価なフォールディングされたオペレーションの演算結果のための行先アドレス信号dest_adrを発生する。13図、第14図、及び第16図の実施例では、第1オペランドアドレス信号first_op_adr、第2オペランドアドレス信号second_op_adr、及び行先アドレス信号dest_adrが、集団で等価なフォールディングされたオペレーションのための第1オペランド、第2オペランド、及び行先アドレスとして実行ユニット1120に供給するためのフォールドアドレス信号はf_adrとしてスイッチ1310に供給される。
第17図には、第1オペランドアドレスジェネレータ1602の好適実施例が示されている。第2オペランドアドレスジェネレータ1604及び行先アドレスジェネレータ1606はこれに類似したものである。第17図の実施例では、第1オペランドアドレス信号first_op_adrが、ローカル変数ストレージ813及びオペランドスタック812の位置のサブセットから選択される。別の実施例では、より大きい、より小さい、又は異なるオペランドスタック812及びローカル変数ストレージ813の位置のサブセットから、或いはランダムにアクセス可能なストレージ810におけるより広い幅の位置からオペランド及び行先アドレスが生成され得る。例えば、別の実施例は、定数エリア814における位置に対して選択的なアドレスを発生し得る。第17図の実施例に適切な変更を加えることは、当業者には明らかであろう。第1オペランドアドレスジェネレータ1602、第2オペランドアドレスジェネレータ1604、及び行先アドレスジェネレータ1606は、位置の異なる組を定義できるという利点を有する。例えば、定数エリア814における位置及びオペランドスタック812の内部における位置がオペランドソースとして有効であるが、これらの位置は通常適切な演算結果のターゲットではない。このため、行先アドレスジェネレータ1606の実施例によって与えられる位置の組は、ローカル変数ストレージ813エントリ及びオペランドスタック812の先端エントリに限定されるが、別の位置の組を利用することも可能である。
第17図では、ポインタOPTPOがレジスタ1702に供給され、レジスタ1702はこの値をラッチし、ラッチされた値をデータセレクタ1750の第1入力に供給する。同様に、ポインタOPTOPはレジスタ1704及び1706に供給され、これらのレジスタはそれぞれこの値から1及び2を引いた数をラッチし、ラッチされた値をデータセレクタ1750の第1入力及び第3入力に供給する。このようにして、値OPTOP、OPTOP-1、及びOPTOP-2によって特定されたアドレスが、データセレクタ1750による選択のために利用可能となる。同様に、ポインタVARSは、一連のレジスタ1708、1710、1712、及び1714に供給され、これらのレジスタはそれぞれ値VARS、VARS+1、VARS+2、及びVARS+3を、デーダセレクタ1750の第4、第5、第6、及び第7入力への供給のためにラッチする。このようにして、値VARS、VARS+1、VARS+2、及びVARS+3で特定されたアドレスは、データセレクタ1750の選択のために利用可能となる。ここに開示した実施例では、ポインタVARSからのオフセットは防いである。この理由は、ローカル変数ストレージ813が(ポインタVARSによって特定される)そのベースからアドレス指定されるからである。ポインタOPTOPに対するオフセットはマイナスであるが、この理由はオペランドスタック812が(ポインタOPTOPにより特定される)そのトップからアドレス指定されるからである。
データセレクタ1750は、その入力において利用可能となったラッチされたアドレスの中から選択を行う。第1オペランドアドレスジェネレータ1602の第17図の実施例によるフォールド判定部1404の実施例では、値VARS、VARS+1、VARS+2、及びVARS+3でアドレス指定されたものでなくローカル変数ストレージ813におけるロードソースアドレスが、フォールディング不可能なものとして取り扱われ、ノーマルデコード部1302によってデコードされる。しかし、ロードアドレスにサポートされた組を拡張するための適切な改変は、当業者には明らかであろう。第2オペランドアドレスジェネレータ1604及び行先アドレスジェネレータ1606は、類似した設計であるが、行先アドレスジェネレータ1606は定数エリア814に対するアドレス指定をサポートしていない。
本発明による一実施例では、信号RS1_Dがデータセレクタ1750の0番目の入力に供給される。この実施例では、追加のデコードロジック(図示せず)により、別の命令セットをサポートするためのレジスタ識別子情報の直接の供給が可能となる。このような別の命令セットをサポートするための追加のデコードロジックについてはも本出願の譲受人に譲渡された、Marc Tremblay及びJames Michael O' Connorを発明者とする“A PROCESSOR FOR EXECUTING INSTRUCTION SETS RECEIVED FROM A NETWORK OR FROM A LOCAL MEMORY”なる名称の米国特許出願に詳細に記載されており、本明細書と一体にこれを参照されたい。
第13図に戻ると、フォールドデコード部1304のフォールド判定部1404がフォールディング可能なバイトコードシーケンスを特定したとき、フォールド判定部1404はラインf/nf上にフォールド表示信号をアサートし、フォールドされた命令デコード信号f_instr_decとして等価なフォールディングされたオペレーションを供給し、且つフォールディング可能なバイトコードシーケンスからのロード及びストア命令に基づいて、第1オペランドアドレスジェネレータ1602、第2オペランドアドレスジェネレータ1604、及び行先アドレスジェネレータ1606によって維持されているラッチされたアドレスに対するインデクスを供給する。フォールドデコード部1304は、フォールディングされたアドレス信号f_adrとしてインデクス付けされたアドレスを供給する。ラインf/nf上の信号に応じて、スイッチ1306、1308、1310は、等価なフォールディングされたオペレーションに対するデコード情報を実行ユニット1120に供給する。
フォールドデコード部804については、4つの命令フォールディング可能なシーケンスの例をとって説明してきたが、実施例はこれに限定されない、ここに開示した内容に基づき、当業者は追加の命令のフォールディング及びより長いフォールディング可能な命令シーケンス、例えば5個以上の命令のシーケンスのフォールディングをサポートできるような適切な拡張した実施例を考えることができよう。実施例によれば、限定を意図するものではないが、追加のオペランドアドレス信号、例えば第3オペランドアドレス信号及び/又は追加の行先アドレス信号、例えば第2行先アドレス信号をサポートする形態も可能である。
整数実行ユニット
第1図に示すように、整数実行ユニットIEUは、命令デコードユニット130、整数ユニット142並びにスタック管理ユニット150を含む、浮動小数点関連命令を除く、全ての仮想マシン命令の実行を支配する。浮動小数点関連命令は浮動小数点ユニット142において実行される。
整数実行ユニットIEUは、命令キャッシュユニット120とフロントエンドにて対話し、浮動小数点命令を実行するための浮動小数点ユニット(FPU)143を用いて、最終的にはロード/ストア命令関連命令を実行するためのデータキャッシュユニット(DCU)160を用いて、命令をフェッチする。また整数実行ユニットIEUは、マイクロコードROMを有し、マイクロコードROMは、整数演算に関連する一定の仮想マシン命令を実行するような命令を含む。
整数実行ユニットIEUは、スタック400のキャッシュ部分、すなわちスタックキャッシュ155を含む。スタックキャッシュ155は、現在メソッド(current method)に関連するオペランドスタックエントリ及びローカル変数エントリ(local variable entry)、すなわちオペランドスタック423エントリ及びローカル変数記憶421エントリを迅速に記憶する。スタックキャッシュ155は、現在の命令に関連する全てのオペランドスタックエントリ及びローカル変数エントリを十分に記憶することができるが、オペランドスタックエントリ及びローカル変数エントリの数によっては、全てのローカル変数エントリより少ない数、或いはローカル変数エントリとオペランドスタックエントリの両方の数より少ない数が、スタックキャッシュ155において表されるかもしれない。同様に付加的なエントリ、すなわち呼出しメソッド(calling method)に対するオペランドスタックエントリ及びローカル変数エントリは、もし空間的に許容されるなら、スタックキャッシュ155において表されるかもしれない。
スタックキャッシュ155は、64エントリ32ビット幅のレジスタ配列であり、1つの実施例ではレジスタファイルとして物理的にインプリメントされる。スタックキャッシュ155は3つの読出しポートを有しており、その内の2つは整数実行ユニットIEU専用であり、残りの1つはドリブル(dribble)管理ユニット151用である。またスタックキャッシュ155は、2つの書込みポートを有し、1つは整数実行ユニットIEU専用であり、もう1つはドリブル管理ユニット151用である。
整数ユニット142は、種々のポインタを保持しており、ポインタは、スタックキャッシュ155内にあるローカル変数のような変数値、並びにオペランドスタック値にアクセスするために用いられる。また整数ユニット142はスタックキャッシュヒットが起こるか否かを検出するためのポインタを保持する。実行時例外は捕捉され、マイクロコードROM149及び回路170における情報を用いてインプリメントされる例外ハンドラにより処理される。
整数ユニット142は、算術演算をサポートするための32ビットALUを含む。ALUによりサポートされる演算は、加算、減算、けた送り(シフト)、論理積、論理和、排他的論理和、比較、超過(greater than)、未満(less than)並びに読飛ばし(バイパス)を含む。またALUは、別々の比較器が分岐命令の結果を判定する間に、条件付き分岐のアドレスを判定するための用いられる。
パイプラインを介して手際よく実行される大部分の共通命令セット(most common set of instructions)は、ALU命令の集合体である。ALU命令はデコード段302内のスタック400の先頭からオペランドを読出し、結果を計算するための実行段303においてALUを用いる。その結果はライトバック段305内のスタック400にライトバックされる。2段階のバイパスがあり、連続ALU演算がスタックキャッシュ155にアクセスしている場合に、必要とされることがある。
スタックキャッシュポートは本実施例では32ビット幅であるため、倍精度及び長データ演算は2サイクルかかる。またシフタはALUの一部として存在する。もしオペランドがデコード段302内の命令に対して利用できない、すなわち実行段303の初めにおいて最大であるなら、実行段303前にインターロックがパイプライン段をホールドする。
整数実行ユニットIEUの命令キャッシュユニットインターフェースは有効/許容インターフェースであり、そこで命令キャッシュユニット120は、固定フィールドにおける整数デコードユニット130に、有効ビットと共に命令を引き渡す。命令デコーダ135は、アライナ(aligner)回路122がシフトするために何バイト必要とするか、或いは命令デコードユニット130がデコード段302において何バイト消費するかをシグナリングすることにより応答する。また命令キャッシュユニットインタフェースは命令キャッシュユニット120に対して、分岐誤り予測(branch mis-predict)条件、並びに実行段303における分岐アドレスをシグナリングする。また、必要なときには、同様にトラップが命令キャッシュユニット120に対して指示される。命令キャッシュユニット120は、命令デコードユニット130に対していかなる有効データもアサートしないことにより、整数ユニット142をホールドすることができる。命令デコードユニット130はバイトアライナ回路122に対してシフト信号をアサートしないことにより命令キャッシュユニット120をホールドすることができる。
また整数実行ユニットIEUのデータキャッシュインターフェースは、有効−許容インターフェースであり、そこでは整数ユニット142が、実行段303において、データキャッシュユニット160内のデータキャッシュコントローラ161に対して、例えば非キャッシュ、特殊ストア(special store)等の属性と共に、ロード或いはストア演算をシグナリングする。データキャッシュユニット160は、ロード演算中のデータを復帰し、データコントロールユニットホールド信号を用いて整数ユニット142を制御することができる。データキャッシュヒット中に、データキャッシュユニット160は要求データを復帰し、それからパイプラインを解放する。
またストア演算中に整数ユニット142は、実行段303内にアドレスと共にデータを供給する。データキャッシュユニット165は、もしデータキャッシュユニット165がビジー、すなわちラインフィルであるなら、キャッシュ段304内のパイプラインをホールドすることができる。
浮動小数点演算は、整数実行ユニットIEUにより専用に処理される。命令デコーダ135は、浮動小数点ユニット143関連命令をフェッチし、かつデコードする。命令デコーダ135は、デコード段302における浮動小数点ユニット142に対して実行するための浮動小数点演算オペランドを送出する。浮動小数点ユニット143が浮動小数点演算を実行ビジーの間に、整数ユニット142はパイプラインを停止し、浮動小数点ユニット143が、整数ユニット142に対して、結果が利用可能であるということをシグナリングするまで待機する。
浮動小数点ユニット143からの浮動小数点実行可能信号は浮動小数点演算の実行段303が終了したということ示す。浮動小数点実行可能信号に応じて、その結果が整数ユニット142によりスタックキャッシュ155内にライトバックされる。浮動小数点ユニット143及び整数ユニット142がスタックキャッシュ155内に見出されるため、浮動小数点ロード及びストア演算は、整数実行ユニットIEUにより完全に処理される。
スタック管理ユニット
スタック管理ユニット150は情報をストアし、実行ユニット140に対するオペランドを提供する。またスタック管理ユニット150はスタックキャッシュ155のオーバーフロー及びアンダーフロー条件を処理する。
1つの実施例では、スタック管理ユニット150は、上述のように1つの実施例では3つの読出しポート、2つの書込みポートであるスタックキャッシュ155、実行ユニット140に対するオペランドを回収し、ライトバックレジスタ、すなわちデータキャッシュ165から戻されるデータをスタックキャッシュ155内にストアするために用いられる2つの読出しポート及び1つの書込みポートに必要な制御信号を供給するスタック制御ユニット152、並びにスタックキャッシュ155においてオーバーフロー或いはアンダーフローが生じるときはいつでも、スタックキャッシュ155に入るデータ及びスタックキャッシュ155から出るデータをメモリ内に投機的にドリブルするドリブル管理部151を含む。第1図の典型的な実施例では、メモリはデータキャッシュ165及びメモリインターフェースユニット110によりインターフェースされる任意のメモリ記憶装置を含む。一般に、メモリは、キャッシュ、アドレス指定可能読出し/書込みメモリ記憶装置、第2の記憶装置、等を含む任意の適切なメモリ階層を含む。またドリブル管理部151は、背景でのドリブル目的に対して専用に用いられるスタックキャッシュ155の1つの読出しポート及び1つの書込みポートに対する必要な制御信号を供給する。
ある実施例では、スタックキャッシュ155は、そのスタックがある予測メソッドに基づいて増減し、オーバーフロー及びアンダーフローを防ぐことを確実にする循環バッファとして管理される。データキャッシュ165への値及びデータキャッシュ165からの値の退避及び再生は、ある実施例では、高水位マーク(high-water mark)及び低水位マークを用いてドリブル管理部151により制御される。
スタック管理ユニット150は、実行ユニット140に、所定のサイクルにおける2つの32−bitオペランドを供給する。スタック管理ユニット150は、所定のサイクルにおける1つの32−bit結果をストアすることができる。
ドリブル管理部151は、データキャッシュ165からスタックキャッシュ155への、並びにスタックキャッシュ155からデータキャッシュ165へのデータを投機的にドリブルすることにより、スタックキャッシュ155のスピル(spill)及びフィル(fill)を処理する。ドリブル管理部151は、パイプラインストール信号(pipeline stall signal)を発生させ、スタックオーバーフロー条件或いはアンダーフロー条件が検出されるとき、パイプラインをストールする。またドリブル管理部151はデータキャッシュユニット160に送出される要求のスタックを保持する。データキャッシュユニット160に対する1つの要求は32−bit連続ロード或いはストア要求である。
スタックキャッシュ155のハードウエア構成は、長オペランド(長い整数及び倍精度浮動小数点数)の場合を除き、オペコードに対する暗黙のオペランドフェッチにより、オペコードの実行に対する待ち時間が加わらないようにする。スタックキャッシュ155において維持されるオペランドスタック423(第4A図)及びローカル変数記憶装置422におけるエントリの数は、ハードウエア/パフォーマンスのトレードオフを表す。少なくとも数個のオペランドスタック423及びローカル変数記憶装置エントリが良好なパフォーマンスを得るために必要とされる。第1図の典型的な実施例では、少なくともオペランドスタック423及び最初の4つのローカル変数記憶装置422エントリの上位の3エントリがスタックキャッシュ155内に好適に表される。
スタックキャッシュ155により供給される1つの重要な機能(第1図)は、レジスタファイルをエミュレートすることであり、上位2つのレジスタへのアクセスが余分なサイクルを用いずに常に可能である。もし適用な知的機能が、背景においてメモリから値をロードするために、或いはメモリに値をストアするために与えられ、従って入ってくる仮想マシン命令のためにスタックキャッシュ155を準備するなら、小さいハードウエアスタックでも十分である。
上述のように、スタック400上の全アイテムが(サイズに関係なく)、32−bitワード内に置かれる。これは、もし数多くの小さなデータアイテムが用いられるなら、空間を無駄にしてしまうが、比較的簡単に、かつ多くのタギング(tagging)或いはマクシング(muxing)から束縛されずにデータアイテムを保持できる。従ってスタック400内の1つのエントリは、1つの値を表し、多くのバイトを表さない。長整数及び倍精度浮動小数点数は、2つのエントリを必要とする。読出し及び書込みポート数を少なくしておくために、2つの長整数或いは2つの倍精度浮動小数点数を読出すために2サイクルが必要となる。
スタックキャッシュ155から出てメモリに入るオペランドスタックをドリブル管理部151によりフィル及びスピルするための機構は、いくつかの別の形態のうちの1つを呈することができる。ある時点において1つのレジスタが、フィル或いはスピルされるか、或いはいくつかのレジスタのブロックが同時にフィル或いはスピルされることができる。1つのスコアボードされたメソッドは、スタック管理に対して適切である。その最も簡単な形態では、1つのビットが、スタックキャッシュ155内のそのレジスタが現在有効であるか否かを示す。さらにスタックキャッシュ155のいくつかの実施例は、そのレジスタのデータ内容がスタック400に退避されるか否か、すなわちそのレジスタが汚れているか否かを示すために1つのビットを用いる。ある実施例では、高水位マーク/低水位マークが、いつエントリがそれぞれ、スタック400に退避される、或いはスタック400から再生されるかを自発的に判定する(第4A図)。別法では、先頭スタックが、固定された、或いはプログラマブルなエントリ数だけスタックキャッシュ155の底部401に近づくとき、ハードウェアがスタック400からスタックキャッシュ155内へのレジスタのロードを開始する。スタック管理ユニット150及びドリブル管理部ユニット151の詳細な実施例は、以下に、並びに本発明の譲渡人に譲渡され、代理人整理番号SP2038にて同じ日に出願された、"METHOD FRAME STORAGE USING MULTIPLE MEMORY CIRCUITS"というタイトルの米国特許出願第08/xxx,xxx号(発明者James Michael O'Connor and Marc Tremblay)に記載されており、参照して、全体をここに組み込んでいる。
ある実施例では、スタック管理ユニット150は、付加的なローカル変数ルックアサイド(look-aside)キャッシュ153を含む。キャッシュ153は応用時に最も重要であり、あるメソッドに対するローカル変数及びオペランドスタック423(第4A図)がスタックキャッシュ155上に配置されない。キャッシュ153がハードウェアプロセッサ100に含まれないような場合には、ローカル変数がアクセスされるとき、スタックキャッシュ155においてミスがあり、実行ユニット140はデータキャッシュユニット160にアクセスし、次々に実行を遅らせる。対照的に、キャッシュ153を有する場合は、ローカル変数はキャッシュ153から回収され、実行に遅れは生じない。
ローカル変数ルックアサイドキャッシュ153のある実施例は、スタック400のメソッド0〜2の場合に、第4D図に示される。ローカル変数0〜Mは、Mが整数の場合に、メソッド0に対して、キャッシュ153の面421A_0においてストアされ、面421A_0はメソッド番号402が0のときアクセスされる。ローカル変数0〜Nは、Nが整数の場合に、メソッド1に対して、キャッシュ153の面421A_1においてストアされ、面421A_1はメソッド番号402が1のときアクセスされる。ローカル変数0〜Pは、Pが整数の場合に、メソッド1に対して、キャッシュ153の面421A_2においてストアされ、面421A_2はメソッド番号402が2のときアクセスされる。キャッシュ153の種々に面は異なるサイズである場合もあるが、一般にそのキャッシュの各面は経験的に画定される固定サイズを有するということに注意されたい。
新しいメソッド、例えばメソッド2が呼出されるとき、キャッシュ153の新しい面421A_2がそのメソッドのローカル変数と共にロードされ、ある実施例ではカウンタであるメソッド番号レジスタ402が、変更、すなわちインクリメントされ、その新しいメソッドに対するローカル変数を含むキャッシュ153の面を示す。ローカル変数はキャッシュ153の面内にオーダされ、キャッシュ153は有効に直接マップ化(direct-mapped)キャッシュとなることに注意されたい。従って、ローカル変数が現在メソッドに対して必要とされるとき、その変数はキャッシュ153の最も新しい面、すなわちメソッド番号402により識別される面から直接アクセスされる。現在メソッドが、例えばメソッド21に戻るとき、メソッド番号レジスタ402は変更、例えばデクリメントされ、キャッシュ153の以前の面421A_1を示す。キャッシュ153は必要とされる広さ及び深さになることができる。
データキャッシュユニット
データキャッシュユニット160(DCU)は、データキャッシュ165内のデータに対する全ての要求を管理する。データキャッシュ要求は、ドリブル管理部151或いは実行ユニット140から起こる。データキャッシュ制御部161は、実行ユニット要求に先行して与えられるこれらの要求間の調整をする。ある要求に応じて、データキャッシュ制御部161は、そのデータに対するアドレス、データ並びに制御信号を発生し、データキャッシュ165内のRAMにタグ付けする。データキャッシュヒットに対して、データキャッシュ制御部161はデータRAM出力をリオーダし、その正確なデータを与える。
またデータキャッシュ制御部161は、データキャッシュミスの場合、並びにキャッシュ不可能なロード及びストアの場合に、I/Oバス及びメモリインタフェースユニット110に対する要求を発生する。データキャッシュ制御部161はデータパス及び制御ロジックを与え、キャッシュ不可能要求、並びにキャッシュミスを処理するためのデータパス及びデータパス制御機能を処理する。
データキャッシュヒットに対して、データキャッシュユニット160は、ロードに対する1サイクル内に、データを実行ユニット140に戻す。またデータキャッシュユニット160は、書込みヒットに対して1サイクルかかる。キャッシュミスの場合に、データキャッシュユニット160は、要求データが外部メモリから利用可能になるまで、パイプラインをストールする。キャッシュ不可能ロード及びストアに対して、データキャッシュ161はバイパスされ、要求はI/Oバス及びメモリインタフェースユニット110に送られる。データキャッシュ165に対する非配列化(non-aligned)ロード及びストアはソフトウエアにおいてトラップされる。
データキャッシュ165は、双方向セット連想型、ライトバック、ライトアロケート(write allocate)、16−byteラインキャッシュである。キャッシュサイズは0,1,2,4,8,16Kbyteサイズに構成可能である。デフォルトサイズは8Kbyteである。各ラインはそのラインに関連するキャッシュタグストアエントリを有する。キャッシュミス時に、16byteのデータが外部メモリからキャッシュ165内に書き込まれる。
各データキャッシュタグは、20−bitアドレスタグフィールド、1つの有功ビット、1つのダーティビットを含む。また各キャッシュタグは、置換えポリシー(replacement policy)のために用いられる最低使用頻度ビット(least recently used bit)に関連する。多重キャッシュサイズをサポートするために、タグフィールドの幅は変更することができる。もしプロセッササービスレジスタ内のキャッシュイネーブルビットがセットされていないなら、ロード及びストアはデータキャッシュ制御部161により、キャッシュ不可能命令のように扱われる。
1つの16−byteライトバックバッファが、置換えられるために必要となるダーティキャッシュラインをライトバックするために与えられる。データキャッシュユニット160は、読出し時に4byteの最大値を与えることができ、データの4byteの最大値は1サイクル内にキャッシュ161に書き込まれることができる。診断読出し及び書込みは、キャッシュ上で行うことができる。
メモリ割当てアクセラレータ
1つの実施例において、データキャッシュユニット165はメモリ割当てアクセラレータ166を含む。一般に、新しいオブジェクトが生成されるとき、そのオブジェクトに対するフィールドは外部メモリからフェッチされ、データキャッシュ165内にストアされ、それからそのフィールドは0にクリアされる。これがメモリ割当てアクセラレータ166により削除される処理にかかる時間である。新しいオブジェクトが生成されるとき、いかなるフィールドも外部メモリから回収されない。むしろ、メモリ割当てアクセラレータ166は単に、データキャッシュ165内に0の列をストアし、データキャッシュ165のその列をダーティとしてマークする。メモリ割当てアクセラレータ166はライトバックキャッシュについて特に有利である。メモリ割当てアクセラレータ166は、新しいオブジェクトが生成される度に、外部メモリにアクセスすることを削除するので、ハードウエアプロセッサ100のパフォーマンスが向上する。
浮動小数点ユニット
浮動小数点ユニット(FPU)143は、マイクロコードシーケンサ、入力/出力レジスタを有する入出力部分、浮動小数点加算器、すなわちALU、並びに浮動小数点乗算/除算ユニットを含む。マイクロコードシーケンサは、マイクロコードフロー及びマイクロコード分岐を制御する。入出力部分は入出力データトランザクションを制御し、入力データロードレジスタ及び出力データ非ロードレジスタを与える。またこれらのレジスタは中間結果記憶領域を与える。
浮動小数点加算器ALUは、浮動小数点加算、浮動小数点減算並びに変換演算を実行するために用いられる組み合わせロジックを含む。浮動小数点乗算/除算ユニットは乗算/除算及び剰余を実行するためのハードウエアを含む。
浮動小数点ユニット143は、32−bitデータパスを有するマイクロコード用エンジンとして構成される。このデータパスは、その結果の計算中、何回も再利用される。倍精度演算は、単精度演算としてのサイクル数のおよそ2倍〜4倍を必要とする。浮動小数点実行可能信号は、所定の浮動小数点演算の完了に先行する1サイクルにアサートされる。これにより整数ユニット142は、全くインタフェースサイクルを無駄にせず、浮動小数点ユニット出力レジスタを読出すことができる。従って、出力データは、浮動小数点実行可能信号がアサートされた後の1サイクルで読出すために利用することができる。
実行ユニットアクセラレータ
付録IのJAVA仮想マシン仕様はハードウエアに依存しないので、仮想マシン命令は特定の汎用タイプのプロセッサ、例えば複雑命令セットコンピュータ(CISC)プロセッサ、或いは限定命令セットコンピュータ(RISC)プロセッサに対して最適化されてない。実際に、ある仮想マシン命令はCISC性を有し、他のものはRISC性を有する。この、重性は演算及びハードウエ」アプロセッサ100の最適化を複雑にする。
例えば、JAVA仮想マシン仕様は、従来のスイッチステートメントである、命令lookupswitchに対するオペコード171を定義する。命令キャッシュユニット120に対するデータストリームは、オペコード171を含み、オペコード171によりN方向スイッチステートメントを識別し、3byteの埋込みバイトに0を生じさせる。埋込みバイト数は、第1のオペランドバイトが4の倍数であるアドレスで開始するように選択される。ここで、データストリームは、特定の要素ブロック、素子或いはユニットに提供される情報を包括的に示すために用いられる。
データストリーム内の埋込みバイトに後続するのは、一連の符号付4byte量の組である。第1組内の第1のオペランドは、スイッチステートメントに対するデフォルトオフセットであり、整数キー、或いは現在照合(match)値として参照される、そのスイッチステートメントの引数が、そのスイッチステートメント内のいかなる照合値とも等しくないとき用いられる。第1組内の第2のオペランドは、データストリーム内に後続する組数を定義する。
データストリーム内の各後続するオペランドの組は、照合値である第1のオペランド及びオフセットである第2のオペランドを有する。もし整数キーが照合値の1つに等しいなら、その組のオフセットはそのスイッチステートメントのアドレスに加えられ、実行が分岐するアドレスを定義する。逆にもしその整数キーがいかなる照合値にも等しくないなら、第1組のデフォルトオフセットがそのスイッチステートメントに加えられ、実行が分岐するアドレスを定義する。この仮想マシン命令の直接の実行が多くのサイクルを必要とする。
ハードウエアプロセッサ100のパフォーマンスを向上させるために、ルックアップスイッチアクセラレータ145がプロセッサ100に含まれる。ルックアップスイッチアクセラレータ145は、1つ或いは2つ以上のルックアップスイッチステートメントに関連する情報をストアする連想メモリを含む。各ルックアップスイッチステートメント、すなわち各命令lookupswitchの場合、この情報はルックアップスイッチ識別子値、すなわちルックアップスイッチステートメントに関連するプログラムカウンタ値、複数の照合値並びに対応する複数のジャンプオフセット値を含む。
ルックアップスイッチアクセラレータ145はハードウエアプロセッサ100により受信される現在命令が連想メモリ内にストアされるルックアップスイッチステートメントに対応するか否かを判定する。ルックアップスイッチアクセラレータ145はさらに、その現在命令に関連する現在照合値が、その連想メモリ内にストアされる照合値の1つに一致するか否かを判定する。ルックアップスイッチアクセラレータ145は、その現在命令がメモリ内にストアされるルックアップスイッチステートメントに対応し、かつ現在照合値がメモリ内にストアされる照合値の1つに一致するとき、連想メモリからのジャンプオフセット値にアクセスする。そのアクセスされたジャンプオフセット値は現在照合値に一致する。
ルックアップスイッチアクセラレータ145はさらに、その連想メモリが、現在ルックアップスイッチステートメントに関連する照合値及びジャンプオフセット値をまだ含んでいないとき、現在ルックアップスイッチステートメントに関連する照合値及びジャンプオフセット値を回収するための回路を含む。ルックアップスイッチアクセラレータ145は、本発明の譲渡人に譲渡され、代理人整理番号SP2040にて同じ日に出願された、"LOOK-UP SWITCH ACCELERATOR AND METHOD OF OPERATING SAME"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Connor)にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。あるオブジェクトのメソッドの実行を開始するための処理において、実行ユニット140は、メソッドベクトルにアクセスし、メソッドベクトル内のメソッドポインタの1つ、すなわち無方向(indirection)の1つのレベルを回収する。その後実行ユニット140は、アクセスされるメソッドポインタを用いて、対応するメソッド、すなわち無方向の第2のレベルにアクセスする。
実行ユニット140内の無方向のレベルを減少させるために、各オブジェクトは、そのオブジェクトによりアクセスされるべき各メソッドの専用の複製を与える。その後実行ユニット140は、無方向の1つのレベルを用いてそのメソッドにアクセスする。すなわち、各メソッドはそのオブジェクトから導出されるポインタにより、直接アクセスされる。これはそのメソッドポインタにより予め導入されていた無方向のレベルを削除する。無方向のレベルを減少させることにより、実行ユニット1140の演算を加速することができる。実行ユニット140により経験された無方向のレベルを減少させることによる実行ユニット140の加速は、本発明の譲渡人に譲渡され、代理人整理番号SP2043にて同じ日に出願された、"REPLICATING CODE TO ELIMINATE A LEVEL OF INDIRECTION DURING EXECUTION OF AN OBJECT ORIENTED COMPUTER PROGRAM"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Connor)にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。
ゲットフィールド−プットフィールドアクセラレータ
他の特定の機能ユニット及び種々の翻訳ルックアサイドバッファ(TLB)タイプの構造は、ハードウエアプロセッサ100に任意に含まれ、コンスタントプールへのアクセスを加速する。例えば、JAVA仮想マシン仕様は、実行時にオブジェクト内にフィールドをセットする、命令putfield、オペコード181、並びに実行時にオブジェクトからフィールドをフェッチする、命令getfield、オペコード180を定義する。これら両方の命令では、そのオペコードには、インデクスバイト1及びインデクスバイト2が後続する。オペランドスタック423は、命令getfieldの場合のオブジェクトに対する参照のみを除いて、命令putfieldに対する値により後続されるオブジェクトに対する参照を含む。
インデクスバイト1及び2は、現在クラスのコンスタントプール内にインデクスを発生させるために用いられる。そのインデクスでのコンスタントプールにおける項目は、クラス名及びフィールド名に対するフィールド参照である。その項目は、バイト状態でのフィールド幅及びバイト状態でのフィールドオフセットの両方を有するフィールドブロックポインタに分解される。
実行ユニット140内の任意のゲットフィールド−プットフィールドアクセラレータ146は、タグとしてフィールドブロックポインタに分解されたコンスタントプール内の項目を識別するために用いられるインデクスと共に、命令の最初の呼出し後に用いるために、キャッシュ内に命令getfield及び命令putfieldに対するフィールドブロックポインタをストアする。引き続いて、実行ユニット140はインデクスバイト1及び2を用いて、インデクスを発生させ、ゲットフィールド−プットフィールドアクセラレータ146にインデクスを供給する。もしそのインデクスがタグとしてストアされたインデクスの1つに一致する、すなわちヒットであるなら、そのタグに関連するフィールドブロックポインタは回収され、実行ユニット140により用いられる。逆にもし一致が見出されなければ、実行ユニット140は、上述の演算を実行する。ゲットフィールド−プットフィールドアクセラレータ146は、上述の迅速な命令翻訳の1つの実施例において用いられた自己修飾コード(self-modifying code)を用いることなくインプリメントされる。
1つの実施例では、ゲットフィールド−プットフィールドアクセラレータ146はタグとして機能するインデクスを保持する第1の部分、及びフィールドブロックポインタを保持する第2の部分を有する連想メモリを含む。あるインデクスが、入力部分を通して、その連想メモリの第1の部分に加えられる、かつストアされたインデクスの1つに一致するとき、入力インデクスに一致したストアされたインデクスに関連するフィールドブロックポインタは、その連想メモリの第2の部分から出力される。
境界チェックユニット
実行ユニット140内のバウンドチェックユニット147(第1図)は、任意のハードウエア回路であり、配列(array)の要素への各アクセスをチェックし、そのアクセスがその配列内の位置に対するものであるか否かを判定する。そのアクセスがその配列内の位置に対するものであるとき、境界チェックユニット147は、実行ユニット140に対して、アクティブ配列境界例外信号を発行する。アクティブ配列境界例外信号に応じて、実行ユニット140は、マイクロコードROM141内にストアされた、その境界外配列アクセス(out of bounds array access)を処理する例外ハンドラの実行を開始する。
1つの実施例では、境界チェックユニット147は、配列に対する配列識別子、例えばプログラムカウンタ値、並びにその配列に対する最大値及び最小値をストアされた連想メモリ素子を含む。ある配列がアクセスされる、すなわちその配列に対する配列識別子が連想メモリ素子に適用されるとき、さらにその配列がその連想メモリ素子において表されると仮定するとき、ストアされた最小値は、比較素子とも呼ばれる、第1の比較器素子に対する第1の入力信号であり、ストアされた最大値は、比較素子とも呼ばれる、第2の比較器素子に対する第1の入力信号である。その第1及び第2の比較器素子に対する第2の入力信号は、配列の素子のアクセスに関連する値である。
もし配列の素子のアクセスに関連する値が、ストアされた最大値以下で、かつストアされた最小値以上であるなら、いずれの比較器素子も出力信号を発生しない。しかしながら、もしこれらの条件のいずれかが正しくないなら、適切な比較器素子がアクティブ配列境界例外信号を発生する。境界チェックユニット147の1つの実施例のさらに詳細な内容は、本発明の譲渡人に譲渡され、代理人整理番号SP2041にて同じ日に出願された、"PROCESSOR WITH ACCELERATED ARRAY ACCESS BOUNDS CHECKING"というタイトルの米国特許出願第08/xxx,xxx号(発明者Marc Tremblay,James Michael O'Connor,and William N.Joy)にさらに詳細に記載されており、参照して、全体をここに組み込んでいる。
JAVA仮想マシン仕様は、一定の命令は一定の例外を引き起こすことを定義している。この例外条件に対するチェックはインプリメントされ、それらを処理するためのハードウエア/ソフトウエア機構が、マイクロコードROM149、並びにプログラムカウンタ及びトラップ制御ロジック170内の情報により、ハードウエアプロセッサ100に与えられる。代替の機構は、トラップベクトルスタイル或いは単一のトラップターゲットを有し、スタック上のトラップタイプをプッシュし、専用のトラップハンドラルーチンが適切な動作を画定するような機構を含む。
ハードウエアプロセッサ100には、いかなる外部キャッシュも必要ではない。いかなる翻訳ルックアサイドバッファのサポートも必要ではない。
第5図は固有のシステムを形成するためのハードウエアプロセッサ100に対するいくつかの可能なアドオンを示す。そこに示す任意の8つの機能をサポートする回路、すなわちNTSCエンコーダ501、MPEG502、イーサネット制御部503、VIS504、ISDN505、1/O制御部506、ATMアセンブリ/リアセンブリ507、並びに無線リンク508は、本発明のハードウエアプロセッサ100と同じチップ内に集積化される。
本発明の様々な実施例について説明してきたが、これらの実施例は例示に過ぎず本発明の範囲を限定しようとするものではないということは理解されよう。例えば第1命令、第2命令、第3命令等の用語は、内容を区別するために使用した用語に過ぎず、命令の特定の順序付けを必要とするように構成する必要はない。ここに開示した実施例の多くの様々な改変、追加、及び改良が可能である。例えば、本発明のJAVAプログラム言語及びJAVA仮想マシンに関連した実施例のみについて説明したが、実施例はこれに限定されず、代わりに様々なスタックマシン環境(仮想環境及び物理的環境の双方)に対するシステム、もの、方法、及び装置が本発明の範囲に含まれる。更に、ここに開示した実施例はハードウェアの実施例であるが、上述の内容に基づく命令フォールディング処理を組み込んだ適切な仮想マシンインプリメンテーション(JAVAが関連するもの又はそうでないもの)が、命令フォールディングバイトコードインタプリタ、特定のマシンアーキテクチャにネイティブなオブジェクトコードにおけるフォールディングされたオペレーションを生成するジャストインタイムコンパイラ、及び仮想マシンをインプリメントする命令フォールディングハードウェアを提供するソフトウェアもその範囲に含まれている。これらの及び他の様々な変更及び追加及び改良は、請求の範囲に記載の本発明の範囲を逸脱することなく実現され得る。
Claims (27)
- オペランドスタックの先頭エントリからオペランドを取出し、演算結果をそこへ入れることによって命令を実行する仮想マシン命令処理装置において、
命令ストアと、
オペランドスタックと、
データストアと、
実行ユニットと、
前記命令ストアから供給された第1命令が、前記データストアから第1オペランド値を単に第2命令のための第1ソースオペランドとして前記オペランドスタックにプッシュする命令である場合には、第1命令及び第2命令をフォールディング可能な命令シーケンスと特定する命令デコーダとを有することを特徴とし、
さらに、前記命令デコーダは、特定した前記フォールディング可能な命令シーケンスを、前記データストアにおける前記第1ソースオペランドに対して選択的な第1オペランド識別子を含む等価な一つのフォールディングされたオペレーションとして、前記実行ユニットに供給し、前記第1命令に相当する明示的なオペレーションを不要にすることを特徴とする仮想マシン命令処理装置。 - 前記データストアが、ローカル変数ストレージを含むことを特徴とする請求項1に記載の装置。
- 前記データストアが、定数をストアするコンスタントストレージを含むことを特徴とする請求項1に記載の装置。
- 前記オペランドスタック及び前記データストアがスタックキャッシュを含むストレージ階層に設けられることを特徴とし、
前記スタックキャッシュが、オペランドスタック及びデータストアにおけるエントリの少なくとも一部をキャッシュすることを特徴とする請求項1に記載の装置。 - 前記第1オペランド値が前記ストレージ階層の前記スタックキャッシュ部分に存在していない場合、前記命令デコーダが、前記等価な一つのフォールディングされたオペレーションの供給をディスエーブル状態にし、代わりに実行ユニットに前記第1命令のみに相当するオペレーション識別子及びオペランド識別子を供給することを特徴とする請求項4に記載の装置。
- 命令バッファに表現された命令のシーケンスがフォールディング可能なシーケンスでない場合、前記命令デコーダが、前記第1命令のみに対応するオペレーション識別子及びオペランド識別子を実行ユニットに供給することを特徴とする請求項1に記載の装置。
- 前記命令デコーダが、前記フォールディング可能な命令シーケンスにおける第3命令を識別し、前記第3命令は、前記データストアから第2オペランド値を、単に第2命令のための第2ソースオペランドとして前記オペランドスタックにプッシュすることを特徴とし、
前記フォールディング可能な命令シーケンスに等価な一つのフォールディングされたオペレーションが、前記データストアにおける前記第2オペランド値に対して選択的な第2オペランド識別子を有し、これによって前記第3命令に相当する明示的なオペレーションを不要にしていることを特徴とする請求項1に記載の装置。 - 前記命令デコーダが更に、前記フォールディング可能な命令シーケンスにおける第4命令を識別し、前記第4命令は、前記オペランドスタックから前記第2命令の演算結果をポップし、その結果を前記データストアの演算結果位置にストアすることを特徴とし、
前記フォールディング可能な命令シーケンスと前記等価な一つのフォールディングされたオペレーションが、前記データストアにおける前記演算結果位置に対して選択的な行先アドレス識別子を含み、これによって第4命令に相当する明示的なオペレーションを不要にしていることを特徴とする請求項1に記載の装置。 - 前記命令デコーダが更に前記フォールディング可能な命令シーケンスにおける第3及び第5命令を識別し、前記第3及び第5命令はそれぞれ、前記データストアから第2及び第3オペランド値を単にそれぞれ前記第2命令のための第2及び第3ソースオペランドとして、前記オペランドスタックにプッシュするための命令であることを特徴とし、
前記フォールディング可能な命令シーケンスと前記等価な一つのフォールディングされたオペレーションが、前記データストアにおけるそれぞれ前記第2及び第3オペランドに対して選択的な第2及び第3オペランド識別子を含み、これによって前記第3及び第5命令に相当する明示的なオペレーションを不要にしていることを特徴とする請求項1に記載の装置。 - 前記命令デコーダが更に、前記フォールディング可能な命令シーケンスにおける第4及び第6命令を識別し、前記第4及び第6命令はそれぞれ、前記オペランドスタックから前記第2命令の第1及び第2演算結果をポップし、その第1及び第2演算結果を、それぞれ前記データストアの第1及び第2演算結果位置にストアする命令であることを特徴とし、
前記フォールディングされた命令シーケンスと前記等価な一つのフォールディングされたオペレーションが、前記データストアにおける前記第1及び第2演算結果位置に対してそれぞれ選択的な第1及び第2行先アドレス識別子を含み、これによって前記第4及び第6命令に相当する明示的なオペレーションを不要としていることを特徴とする請求項1に記載の装置。 - 前記フォールディング可能な命令シーケンスが2以上の命令を含むことを特徴とする請求項1に記載の装置。
- 前記フォールディング可能な命令シーケンスが4つの命令を含むことを特徴とする請求項1に記載の装置。
- 前記フォールディング可能な命令シーケンスが5つの命令を含むことを特徴とする請求項1に記載の装置。
- 前記フォールディング可能な命令シーケンスが5以上の命令を含むことを特徴とする請求項1に記載の装置。
- 前記命令デコーダが、フォールドデコード経路からのフォールド表示に応じて、そこからオペレーション、オペランド、及び行先識別子を選択し、そのフォールド表示がない場合には、前記ノーマルデコード経路からオペレーション、オペランド、及び行先識別子を選択する、前記フォールディングされたデコード経路に応答するスイッチング手段を有することを特徴とする請求項1に記載の装置。
- 前記仮想マシン命令プロセッサが、ハードウェア仮想マシン命令プロセッサであり、前記命令デコーダがデコードロジックを有することを特徴とする請求項1に記載の装置。
- 前記仮想マシンマイクロプロセッサが、ジャストインタイムコンパイラのインプリメンテーションであり、前記命令デコーダが前記実行ユニットを含むハードウェアプロセッサ上で実行可能なソフトウェアを含むことを特徴とする請求項1に記載の装置。
- 前記仮想マシンプロセッサがバイトコードインタプリタのインプリメンテーションであり、前記命令デコーダが、前記実行ユニットを含むハードウェアプロセッサ上で実行可能なソフトウェアを含むことを特徴とする請求項1に記載の装置。
- ノーマルオペランドスタックの先頭エントリからオペランドを取り出し、演算結果をそこに入れる、仮想マシン命令プロセッサにおける仮想マシン命令のデコード方法であって、
仮想マシン命令シーケンスの第1命令がデータストアから第1オペランド値を、単に第2命令のための第1ソースオペランドとして前記オペランドスタックにプッシュする命令であるか否かを判定する第1判定過程と、
前記第1判定過程における判定の結果が真である場合、前記実行ユニットに、第1命令及び第2命令を含むフォールディング可能なシーケンスと等価な一つフォールディングされたオペレーションを供給する過程であって、前記一つのフォールディングされたオペレーションが、前記第1オペランド値に対して選択的な第1オペランド識別子を含み、これによって前記第1命令に相当する明示的なオペレーションを不要にしている、該過程とを含むことを特徴とする仮想マシン命令プロセッサにおける仮想マシン命令のデコード方法。 - 前記第1判定過程の判定結果が偽である場合、前記仮想マシン命令シーケンスにおける前記第1命令に相当するオペレーションを前記実行ユニットに供給する過程を更に含むことを特徴とする請求項19に記載の方法。
- 前記仮想マシン命令シーケンスの第3命令が前記オペランドスタックから前記第2命令の演算結果値をポップし、その演算結果値を前記データストアの演算結果位置にストアする命令であるか否かを判定する第2判定過程と、
前記第2判定過程の判定結果が真である場合、前記等価な一つのフォールディングされたオペレーションに前記演算結果位置に対して選択的な演算結果識別子を含め、これによって前記第3命令に相当する明示的なオペレーションを不要にする過程とを更に含むことを特徴とする請求項19に記載の方法。 - 前記第2判定過程の判定結果が偽である場合、前記オペランドスタックの先頭位置に対して選択的な演算結果識別子を前記等価な一つのフォールディングされたオペレーションに含める過程を更に含める過程を更に含むことを特徴とする請求項21に記載の方法。
- 前記第1判定過程が、
前記第1命令が前記データストアから前記第1オペランド値を前記オペランドスタックにプッシュする命令であるか否かを判定する第1−1判定過程と、
前記第2命令がオペランドスタック上の第1オペランド値に作用して、前記第2命令の演算結果を前記オペランドスタックにプッシュし、前記第1オペランド値が前記オペランドスタックの先頭エントリに存在しないようになっているか否かを判定する第1−2判定過程とを更に含むことを特徴とする請求項19に記載の方法。 - 前記第1−1判定過程と前記第1−2判定過程とを概ね同時並行的に実行することを特徴とする請求項23に記載の方法。
- 前記第1判定過程と前記第2判定過程とを概ね同時並行的に実行することを特徴とする請求項23に記載の方法。
- ランダムにアクセス可能なオペランドスタックと、
ランダムにアクセス可能なローカル変数ストレージと、
仮想マシン命令を選択的にデコードする仮想マシン命令デコーダであって、第1命令が、第1オペランド値を単に第2命令のための第1ソースオペランドとして前記オペランドスタックにプッシュする命令である場合には、第1命令及び第2命令をフォールディング可能な命令シーケンスと特定し、特定した前記フォールディング可能な命令シーケンスを、前記第1ソースオペランドに対して選択的な第1オペランド識別子を含む等価な一つのフォールディングされたオペレーションとして供給し、前記オペランドスタック上へのオペランドの一時的な格納を不要にする、該仮想マシン命令デコーダとを含むスタックベースの仮想マシンを実現する装置であって、
ハードウェアスタックキャッシュ、ハードウェア命令デコーダ、及び実行ユニットを含むハードウェア仮想マシン命令プロセッサを有することを特徴とし、
前記ランダムにアクセス可能なオペランドスタックローカル変数ストレージが、少なくとも部分的に前記ハードウェアスタックキャッシュに存在することを特徴とし、
前記ハードウェア命令デコーダが、前記フォールディングされたオペレーションを実行ユニットに供給するべく接続されていることを特徴とするスタックベースの仮想マシンを実現する装置。 - ランダムにアクセス可能なオペランドスタックと、
ランダムにアクセス可能なローカル変数ストレージと、
仮想マシン命令を選択的にデコードする仮想マシン命令デコーダであって、第1命令が、第1オペランド値を単に第2命令のための第1ソースオペランドとして前記オペランドスタックにプッシュする命令である場合には、第1命令及び第2命令をフォールディング可能な命令シーケンスと特定し、特定した前記フォールディング可能な命令シーケンスを、前記第1ソースオペランドに対して選択的な第1オペランド識別子を含む等価な一つのフォールディングされたオペレーションとして供給し、前記オペランドスタック上へのオペランドの一時的な格納を不要にする、該仮想マシン命令デコーダとを含むスタックベースの仮想マシンを実現する装置であって、
ハードウェアプロセッサと、
前記ハードウェアプロセッサで実行可能なコンピュータプログラムを格納した媒体とを有し、
前記ランダムにアクセス可能なオペランドスタックローカル変数ストレージが、少なくとも部分的に前記ハードウェアプロセッサのレジスタに存在することを特徴とし、
前記仮想マシン命令デコーダが少なくとも部分的に前記媒体上に格納されたコンピュータプログラムにおいて実現されていることを特徴とし、
前記仮想マシン命令デコーダが、前記フォールディングされたオペレーションを前記ハードウェアプロセッサオペレーションとして供給するべく動作することを特徴とするスタックベースの仮想マシンを実現する装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US1052796P | 1996-01-24 | 1996-01-24 | |
US64398496A | 1996-05-07 | 1996-05-07 | |
US643,984 | 1996-05-07 | ||
US60/010,527 | 1996-05-07 | ||
PCT/US1997/001221 WO1997027536A1 (en) | 1996-01-24 | 1997-01-23 | Instruction folding for a stack-based machine |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006051700A Division JP4171496B2 (ja) | 1996-01-24 | 2006-02-28 | スタックを用いる演算マシンのための命令フォールディング処理 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2000515269A JP2000515269A (ja) | 2000-11-14 |
JP2000515269A5 JP2000515269A5 (ja) | 2004-11-25 |
JP3801643B2 true JP3801643B2 (ja) | 2006-07-26 |
Family
ID=26681282
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP52705397A Expired - Lifetime JP3801643B2 (ja) | 1996-01-24 | 1997-01-23 | スタックを用いる演算マシンのための命令フォールディング処理 |
JP2006051700A Expired - Lifetime JP4171496B2 (ja) | 1996-01-24 | 2006-02-28 | スタックを用いる演算マシンのための命令フォールディング処理 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006051700A Expired - Lifetime JP4171496B2 (ja) | 1996-01-24 | 2006-02-28 | スタックを用いる演算マシンのための命令フォールディング処理 |
Country Status (6)
Country | Link |
---|---|
US (3) | US6026485A (ja) |
EP (1) | EP0976030B1 (ja) |
JP (2) | JP3801643B2 (ja) |
KR (1) | KR100529416B1 (ja) |
DE (1) | DE69738810D1 (ja) |
WO (1) | WO1997027536A1 (ja) |
Families Citing this family (187)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3634379B2 (ja) * | 1996-01-24 | 2005-03-30 | サン・マイクロシステムズ・インコーポレイテッド | スタックキャッシングのための方法及び装置 |
JPH1091443A (ja) * | 1996-05-22 | 1998-04-10 | Seiko Epson Corp | 情報処理回路、マイクロコンピュータ及び電子機器 |
AU731871B2 (en) * | 1996-11-04 | 2001-04-05 | Sun Microsystems, Inc. | Method and apparatus for thread synchronization in object-based systems |
DE69839913D1 (de) * | 1997-10-02 | 2008-10-02 | Koninkl Philips Electronics Nv | Datenverarbeitungsgerät zur verarbeitung von befeh |
WO1999018485A2 (en) * | 1997-10-02 | 1999-04-15 | Koninklijke Philips Electronics N.V. | Variable instruction set computer |
EP1359501A3 (en) * | 1997-10-02 | 2007-11-21 | Koninklijke Philips Electronics N.V. | A processing device for executing virtual machine instructions |
US5933635A (en) * | 1997-10-06 | 1999-08-03 | Sun Microsystems, Inc. | Method and apparatus for dynamically deoptimizing compiled activations |
JPH11296381A (ja) * | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 仮想マシン及びコンパイラ |
US6237086B1 (en) * | 1998-04-22 | 2001-05-22 | Sun Microsystems, Inc. | 1 Method to prevent pipeline stalls in superscalar stack based computing systems |
US6434741B1 (en) | 1998-04-30 | 2002-08-13 | Hewlett-Packard Company | Method and apparatus for debugging of optimized code using emulation |
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US6397242B1 (en) | 1998-05-15 | 2002-05-28 | Vmware, Inc. | Virtualization system including a virtual machine monitor for a computer with a segmented architecture |
US6230311B1 (en) * | 1998-06-12 | 2001-05-08 | International Business Machines Corporation | Apparatus and method for disabling methods called on an object |
US7028163B2 (en) * | 1998-06-22 | 2006-04-11 | Samsung Electronics, Co., Ltd. | Apparatus for controlling multi-word stack operations using a multi-bank stack in digital data processors |
US6314445B1 (en) * | 1998-08-03 | 2001-11-06 | International Business Machines Coproration | Native function calling |
US6205578B1 (en) * | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
US8631066B2 (en) * | 1998-09-10 | 2014-01-14 | Vmware, Inc. | Mechanism for providing virtual machines for use by multiple users |
US6349383B1 (en) * | 1998-09-10 | 2002-02-19 | Ip-First, L.L.C. | System for combining adjacent push/pop stack program instructions into single double push/pop stack microinstuction for execution |
US6289446B1 (en) * | 1998-09-29 | 2001-09-11 | Axis Ab | Exception handling utilizing call instruction with context information |
JP2000122875A (ja) * | 1998-10-19 | 2000-04-28 | Internatl Business Mach Corp <Ibm> | 例外処理方法およびシステム |
US7516453B1 (en) | 1998-10-26 | 2009-04-07 | Vmware, Inc. | Binary translator with precise exception synchronization mechanism |
US6434575B1 (en) * | 1998-11-12 | 2002-08-13 | International Business Machines Corporation | Method of instrumenting garbage collection generating a trace file making a single pass analysis of object heap |
US6233725B1 (en) * | 1998-12-03 | 2001-05-15 | International Business Machines Corporation | Method and apparatus to coordinate and control the simultaneous use of multiple just in time compilers with a java virtual machine |
US6321377B1 (en) * | 1998-12-03 | 2001-11-20 | International Business Machines Corporation | Method and apparatus automatic service of JIT compiler generated errors |
US7225436B1 (en) | 1998-12-08 | 2007-05-29 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6487652B1 (en) * | 1998-12-08 | 2002-11-26 | Sun Microsystems, Inc. | Method and apparatus for speculatively locking objects in an object-based system |
US6826749B2 (en) | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US20050149694A1 (en) * | 1998-12-08 | 2005-07-07 | Mukesh Patel | Java hardware accelerator using microcode engine |
US6415436B1 (en) * | 1998-12-11 | 2002-07-02 | Hewlett-Packard Company | Mechanism for cross validating emulated states between different emulation technologies in a dynamic compiler |
TW477936B (en) * | 1998-12-29 | 2002-03-01 | Ind Tech Res Inst | Instruction folding method and device used in a stack machine |
US6327702B1 (en) * | 1998-12-30 | 2001-12-04 | Microsoft Corporation | Generating a compiled language program for an interpretive runtime environment |
US8225002B2 (en) | 1999-01-22 | 2012-07-17 | Network Disk, Inc. | Data storage and data sharing in a network of heterogeneous computers |
US6487630B2 (en) | 1999-02-26 | 2002-11-26 | Intel Corporation | Processor with register stack engine that dynamically spills/fills physical registers to backing store |
FR2790844B1 (fr) * | 1999-03-09 | 2001-05-25 | Gemplus Card Int | Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme |
US6330635B1 (en) * | 1999-04-16 | 2001-12-11 | Intel Corporation | Multiple user interfaces for an integrated flash device |
US6507946B2 (en) * | 1999-06-11 | 2003-01-14 | International Business Machines Corporation | Process and system for Java virtual method invocation |
JP3648100B2 (ja) * | 1999-07-26 | 2005-05-18 | 理想科学工業株式会社 | 丁合装置 |
US6418310B1 (en) * | 1999-08-05 | 2002-07-09 | Ericsson Inc. | Wireless subscriber terminal using java control code |
DE19950249C1 (de) * | 1999-10-18 | 2001-02-01 | Siemens Ag | Elektronisches Gerät mit Softwareschutz |
US7219335B1 (en) * | 1999-12-08 | 2007-05-15 | Intel Corporation | Method and apparatus for stack emulation during binary translation |
AU2001250039A1 (en) * | 2000-03-16 | 2001-09-24 | World Wireless Communications, Inc. | An improved method of connecting devices to the internet |
US6675375B1 (en) * | 2000-04-28 | 2004-01-06 | Sun Microsystems, Inc. | Method and apparatus for optimized multiprocessing in a safe language |
US20020194267A1 (en) * | 2000-06-23 | 2002-12-19 | Daniel Flesner | Portal server that provides modification of user interfaces for access to computer networks |
US6766460B1 (en) | 2000-08-23 | 2004-07-20 | Koninklijke Philips Electronics N.V. | System and method for power management in a Java accelerator environment |
US6782407B1 (en) | 2000-09-26 | 2004-08-24 | Koninklijke Philips Electronics N.V. | System and method for low overhead boundary checking of java arrays |
US6704926B1 (en) * | 2000-09-28 | 2004-03-09 | International Business Machines Corporation | Bimodal Java just-in-time complier |
US7340592B1 (en) | 2000-09-29 | 2008-03-04 | Intel Corporation | Executing a translated block of instructions and branching to correction code when expected top of stack does not match actual top of stack to adjust stack at execution time to continue executing without restarting translating |
GB2367654B (en) * | 2000-10-05 | 2004-10-27 | Advanced Risc Mach Ltd | Storing stack operands in registers |
GB2367653B (en) * | 2000-10-05 | 2004-10-20 | Advanced Risc Mach Ltd | Restarting translated instructions |
US20020069402A1 (en) * | 2000-10-05 | 2002-06-06 | Nevill Edward Colles | Scheduling control within a system having mixed hardware and software based instruction execution |
EP1197847A3 (en) * | 2000-10-10 | 2003-05-21 | Nazomi Communications Inc. | Java hardware accelerator using microcode engine |
US6996813B1 (en) * | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
GB2369464B (en) | 2000-11-27 | 2005-01-05 | Advanced Risc Mach Ltd | A data processing apparatus and method for saving return state |
US7076771B2 (en) | 2000-12-01 | 2006-07-11 | Arm Limited | Instruction interpretation within a data processing system |
JP2002169696A (ja) | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
US6968557B1 (en) * | 2000-12-18 | 2005-11-22 | Stratum8 Corporation | Reducing stack memory resources in a threaded computer system |
US7873814B1 (en) | 2000-12-22 | 2011-01-18 | Lsi Corporation | Microcode based hardware translator to support a multitude of processors |
US6990567B1 (en) * | 2000-12-22 | 2006-01-24 | Lsi Logic Corporation | Use of internal general purpose registers of a processor as a Java virtual machine top of stack and dynamic allocation of the registers according to stack status |
US7284274B1 (en) * | 2001-01-18 | 2007-10-16 | Cigital, Inc. | System and method for identifying and eliminating vulnerabilities in computer software applications |
US7055019B2 (en) * | 2001-02-13 | 2006-05-30 | Ellipsis Digital Systems, Inc. | Matched instruction set processor systems and method, system, and apparatus to efficiently design and implement matched instruction set processor systems by mapping system designs to re-configurable hardware platforms |
US7020874B2 (en) * | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
US7096466B2 (en) | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
US7543288B2 (en) * | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
US6957428B2 (en) | 2001-03-27 | 2005-10-18 | Sun Microsystems, Inc. | Enhanced virtual machine instructions |
WO2002086699A2 (en) * | 2001-04-23 | 2002-10-31 | Atmel Corporation | Microprocessor for executing byte compiled java code |
CA2346762A1 (en) * | 2001-05-07 | 2002-11-07 | Ibm Canada Limited-Ibm Canada Limitee | Compiler generation of instruction sequences for unresolved storage devices |
US7065747B2 (en) * | 2001-05-08 | 2006-06-20 | Sun Microsystems, Inc. | Identifying references to objects during bytecode verification |
US6804681B2 (en) * | 2001-05-08 | 2004-10-12 | Sun Microsystems, Inc. | Identifying and tracking object references in a java programming environment |
GB2376097B (en) | 2001-05-31 | 2005-04-06 | Advanced Risc Mach Ltd | Configuration control within data processing systems |
GB2376098B (en) | 2001-05-31 | 2004-11-24 | Advanced Risc Mach Ltd | Unhandled operation handling in multiple instruction set systems |
GB2376100B (en) * | 2001-05-31 | 2005-03-09 | Advanced Risc Mach Ltd | Data processing using multiple instruction sets |
GB2376099B (en) * | 2001-05-31 | 2005-11-16 | Advanced Risc Mach Ltd | Program instruction interpretation |
US7231460B2 (en) * | 2001-06-04 | 2007-06-12 | Gateway Inc. | System and method for leveraging networked computers to view windows based files on Linux platforms |
DE10127195A1 (de) * | 2001-06-05 | 2002-12-19 | Infineon Technologies Ag | Prozessor mit interner Speicherkonfiguration |
US6934726B2 (en) * | 2001-06-20 | 2005-08-23 | Sun Microsystems, Inc. | Storing and retrieving of field descriptors in Java computing environments |
US20030023958A1 (en) * | 2001-07-17 | 2003-01-30 | Patel Mukesh K. | Intermediate language accelerator chip |
WO2003014921A1 (en) * | 2001-07-02 | 2003-02-20 | Nazomi Communications, Inc. | Intermediate language accelerator chip |
US6832307B2 (en) * | 2001-07-19 | 2004-12-14 | Stmicroelectronics, Inc. | Instruction fetch buffer stack fold decoder for generating foldable instruction status information |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
US8769508B2 (en) | 2001-08-24 | 2014-07-01 | Nazomi Communications Inc. | Virtual machine hardware for RISC and CISC processors |
US20030041319A1 (en) * | 2001-08-24 | 2003-02-27 | Sun Microsystems, Inc. | Java bytecode instruction for retrieving string representations of java objects |
US7039904B2 (en) * | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US6988261B2 (en) * | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
US7131121B2 (en) * | 2001-11-14 | 2006-10-31 | Axalto, Inc. | Method and apparatus for linking converted applet files without relocation annotations |
US20040215444A1 (en) * | 2002-03-25 | 2004-10-28 | Patel Mukesh K. | Hardware-translator-based custom method invocation system and method |
US7379860B1 (en) * | 2002-03-29 | 2008-05-27 | Cypress Semiconductor Corporation | Method for integrating event-related information and trace information |
US6973644B2 (en) * | 2002-04-12 | 2005-12-06 | The Mathworks, Inc. | Program interpreter |
US6950838B2 (en) * | 2002-04-17 | 2005-09-27 | Sun Microsystems, Inc. | Locating references and roots for in-cache garbage collection |
US6990610B2 (en) * | 2002-05-15 | 2006-01-24 | Hewlett-Packard Development Company, L.P. | Combining commands to form a test command |
US7290080B2 (en) * | 2002-06-27 | 2007-10-30 | Nazomi Communications Inc. | Application processors and memory architecture for wireless applications |
US7131118B2 (en) * | 2002-07-25 | 2006-10-31 | Arm Limited | Write-through caching a JAVA® local variable within a register of a register bank |
EP1387274A3 (en) * | 2002-07-31 | 2004-08-11 | Texas Instruments Incorporated | Memory management for local variables |
EP1387277B1 (en) * | 2002-07-31 | 2009-07-15 | Texas Instruments Incorporated | Write back policy for memory |
EP1387258A3 (en) * | 2002-07-31 | 2008-01-02 | Texas Instruments Incorporated | Processor-processor synchronization |
US9207958B1 (en) | 2002-08-12 | 2015-12-08 | Arm Finance Overseas Limited | Virtual machine coprocessor for accelerating software execution |
US7051322B2 (en) | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7051324B2 (en) * | 2003-01-16 | 2006-05-23 | International Business Machines Corporation | Externalized classloader information for application servers |
JP3902147B2 (ja) * | 2003-03-04 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
GB2399897B (en) * | 2003-03-26 | 2006-02-01 | Advanced Risc Mach Ltd | Memory recycling in computer systems |
GB2401217B (en) * | 2003-05-02 | 2005-11-09 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
GB0315165D0 (en) * | 2003-05-02 | 2003-08-06 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
US8719242B2 (en) * | 2003-08-29 | 2014-05-06 | Sap Ag | System and method for a database access statement interceptor |
US7114153B2 (en) * | 2003-09-10 | 2006-09-26 | Qualcomm Inc. | Method and apparatus for continuation-passing in a virtual machine |
US20050066305A1 (en) * | 2003-09-22 | 2005-03-24 | Lisanke Robert John | Method and machine for efficient simulation of digital hardware within a software development environment |
US7444632B2 (en) * | 2003-09-25 | 2008-10-28 | International Business Machines Corporation | Balancing computational load across a plurality of processors |
US20050071828A1 (en) * | 2003-09-25 | 2005-03-31 | International Business Machines Corporation | System and method for compiling source code for multi-processor environments |
US7415703B2 (en) * | 2003-09-25 | 2008-08-19 | International Business Machines Corporation | Loading software on a plurality of processors |
US7549145B2 (en) * | 2003-09-25 | 2009-06-16 | International Business Machines Corporation | Processor dedicated code handling in a multi-processor environment |
US7516456B2 (en) * | 2003-09-25 | 2009-04-07 | International Business Machines Corporation | Asymmetric heterogeneous multi-threaded operating system |
US7523157B2 (en) * | 2003-09-25 | 2009-04-21 | International Business Machines Corporation | Managing a plurality of processors as devices |
US7389508B2 (en) * | 2003-09-25 | 2008-06-17 | International Business Machines Corporation | System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment |
US7496917B2 (en) * | 2003-09-25 | 2009-02-24 | International Business Machines Corporation | Virtual devices using a pluarlity of processors |
US7478390B2 (en) * | 2003-09-25 | 2009-01-13 | International Business Machines Corporation | Task queue management of virtual devices using a plurality of processors |
US20050138340A1 (en) * | 2003-12-22 | 2005-06-23 | Intel Corporation | Method and apparatus to reduce spill and fill overhead in a processor with a register backing store |
GB2412192B (en) * | 2004-03-18 | 2007-08-29 | Advanced Risc Mach Ltd | Function calling mechanism |
US7930526B2 (en) | 2004-03-24 | 2011-04-19 | Arm Limited | Compare and branch mechanism |
US7802080B2 (en) | 2004-03-24 | 2010-09-21 | Arm Limited | Null exception handling |
US7363475B2 (en) * | 2004-04-19 | 2008-04-22 | Via Technologies, Inc. | Managing registers in a processor to emulate a portion of a stack |
US7941807B2 (en) * | 2004-04-30 | 2011-05-10 | International Business Machines Corporation | Transitional resolution in a just in time environment |
US7421539B1 (en) * | 2004-05-18 | 2008-09-02 | Sun Microsystems, Inc. | Method and system for concurrent garbage collection and mutator execution |
US7350059B2 (en) * | 2004-05-21 | 2008-03-25 | Via Technologies, Inc. | Managing stack transfers in a register-based processor |
US7730482B2 (en) * | 2004-06-08 | 2010-06-01 | Covia Labs, Inc. | Method and system for customized programmatic dynamic creation of interoperability content |
US20050289329A1 (en) * | 2004-06-29 | 2005-12-29 | Dwyer Michael K | Conditional instruction for a single instruction, multiple data execution engine |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7506338B2 (en) * | 2004-08-30 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for simplifying the deployment and serviceability of commercial software environments |
KR100597413B1 (ko) * | 2004-09-24 | 2006-07-05 | 삼성전자주식회사 | 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터 |
JP4602047B2 (ja) * | 2004-10-29 | 2010-12-22 | ルネサスエレクトロニクス株式会社 | 情報処理装置 |
JP4486483B2 (ja) * | 2004-11-26 | 2010-06-23 | 古野電気株式会社 | Tdma通信装置 |
US20060200811A1 (en) * | 2005-03-07 | 2006-09-07 | Cheng Stephen M | Method of generating optimised stack code |
US7478224B2 (en) * | 2005-04-15 | 2009-01-13 | Atmel Corporation | Microprocessor access of operand stack as a register file using native instructions |
KR100725393B1 (ko) * | 2005-05-19 | 2007-06-07 | 삼성전자주식회사 | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 |
US7669191B1 (en) * | 2005-06-14 | 2010-02-23 | Xilinx, Inc. | Compile-time dispatch of operations on type-safe heterogeneous containers |
US7823151B2 (en) * | 2005-06-15 | 2010-10-26 | Intel Corporation | Method of ensuring the integrity of TLB entries after changing the translation mode of a virtualized operating system without requiring a flush of the TLB |
US7702855B2 (en) * | 2005-08-11 | 2010-04-20 | Cisco Technology, Inc. | Optimizing cached access to stack storage |
US7743370B1 (en) * | 2005-10-17 | 2010-06-22 | Unisys Corporation | System and methods for determination of independence of sub-graphs in a graph-based intermediate representation of program instructions |
US8612970B2 (en) * | 2005-11-30 | 2013-12-17 | Red Hat, Inc. | Purpose domain for low overhead virtual machines |
US8104034B2 (en) * | 2005-11-30 | 2012-01-24 | Red Hat, Inc. | Purpose domain for in-kernel virtual machine for low overhead startup and low resource usage |
US8429629B2 (en) | 2005-11-30 | 2013-04-23 | Red Hat, Inc. | In-kernel virtual machine for low overhead startup and low resource usage |
US7502029B2 (en) * | 2006-01-17 | 2009-03-10 | Silicon Integrated Systems Corp. | Instruction folding mechanism, method for performing the same and pixel processing system employing the same |
US8099724B2 (en) * | 2006-02-28 | 2012-01-17 | Oracle America, Inc. | Fast patch-based method calls |
US20070288909A1 (en) * | 2006-06-07 | 2007-12-13 | Hong Kong Applied Science and Technology Research Institute Company Limited | Hardware JavaTM Bytecode Translator |
US7756911B2 (en) * | 2006-06-09 | 2010-07-13 | International Business Machines Corporation | Method and system for executing a task and medium storing a program therefor |
US8429634B2 (en) * | 2006-07-26 | 2013-04-23 | Semiconductor Energy Laboratory Co., Ltd. | Semiconductor device, memory circuit, and machine language program generation device, and method for operating semiconductor device and memory circuit |
DE102006041002B4 (de) * | 2006-08-31 | 2009-01-02 | Infineon Technologies Ag | Verfahren, um ein Programm an einen Zwischenspeicher anzupassen, und Schaltungsanordnung |
US8613080B2 (en) | 2007-02-16 | 2013-12-17 | Veracode, Inc. | Assessment and analysis of software security flaws in virtual machines |
US7698534B2 (en) * | 2007-02-21 | 2010-04-13 | Arm Limited | Reordering application code to improve processing performance |
DE102007039425A1 (de) * | 2007-08-21 | 2009-02-26 | Beckhoff Automation Gmbh | Steuerknoten und Steuerung |
US7836282B2 (en) * | 2007-12-20 | 2010-11-16 | International Business Machines Corporation | Method and apparatus for performing out of order instruction folding and retirement |
CN101236489B (zh) * | 2008-02-26 | 2011-04-20 | 北京深思洛克软件技术股份有限公司 | 虚拟硬件系统及其指令执行方法、以及虚拟机 |
US8522015B2 (en) * | 2008-06-27 | 2013-08-27 | Microsoft Corporation | Authentication of binaries in memory with proxy code execution |
EP2309458B1 (en) * | 2008-08-07 | 2020-09-02 | Mitsubishi Electric Corporation | Semiconductor integrated circuit device, facility apparatus control device, and apparatus state display device |
US7853827B2 (en) * | 2008-08-29 | 2010-12-14 | International Business Machines Corporation | Isotropic processor |
US10802990B2 (en) * | 2008-10-06 | 2020-10-13 | International Business Machines Corporation | Hardware based mandatory access control |
US8321878B2 (en) | 2008-10-09 | 2012-11-27 | Microsoft Corporation | Virtualized storage assignment method |
US20100186024A1 (en) * | 2009-01-21 | 2010-07-22 | Telefonaktiebolaget Lm Ericsson (Publ) | System and Method of Invoking Multiple Remote Operations |
US8209523B2 (en) * | 2009-01-22 | 2012-06-26 | Intel Mobile Communications GmbH | Data moving processor |
US8312219B2 (en) * | 2009-03-02 | 2012-11-13 | International Business Machines Corporation | Hybrid caching techniques and garbage collection using hybrid caching techniques |
US7712093B1 (en) | 2009-03-19 | 2010-05-04 | International Business Machines Corporation | Determining intra-procedural object flow using enhanced stackmaps |
US9003377B2 (en) | 2010-01-07 | 2015-04-07 | Microsoft Technology Licensing, Llc | Efficient resumption of co-routines on a linear stack |
EP2482184A1 (en) * | 2011-02-01 | 2012-08-01 | Irdeto B.V. | Adaptive obfuscated virtual machine |
US9396117B2 (en) * | 2012-01-09 | 2016-07-19 | Nvidia Corporation | Instruction cache power reduction |
US9286063B2 (en) | 2012-02-22 | 2016-03-15 | Veracode, Inc. | Methods and systems for providing feedback and suggested programming methods |
US9547358B2 (en) | 2012-04-27 | 2017-01-17 | Nvidia Corporation | Branch prediction power reduction |
US9552032B2 (en) | 2012-04-27 | 2017-01-24 | Nvidia Corporation | Branch prediction power reduction |
WO2013187864A1 (en) * | 2012-06-11 | 2013-12-19 | Empire Technology Development Llc | Modulating dynamic optimizations of a computer program |
US9189399B2 (en) | 2012-11-21 | 2015-11-17 | Advanced Micro Devices, Inc. | Stack cache management and coherence techniques |
US9734059B2 (en) | 2012-11-21 | 2017-08-15 | Advanced Micro Devices, Inc. | Methods and apparatus for data cache way prediction based on classification as stack data |
RU2522019C1 (ru) | 2012-12-25 | 2014-07-10 | Закрытое акционерное общество "Лаборатория Касперского" | Система и способ обнаружения угроз в коде, исполняемом виртуальной машиной |
US9886277B2 (en) * | 2013-03-15 | 2018-02-06 | Intel Corporation | Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources |
US8943462B2 (en) * | 2013-06-28 | 2015-01-27 | Sap Se | Type instances |
US10649775B2 (en) * | 2013-07-15 | 2020-05-12 | Texas Instrum Ents Incorporated | Converting a stream of data using a lookaside buffer |
US9513904B2 (en) * | 2013-10-15 | 2016-12-06 | Mill Computing, Inc. | Computer processor employing cache memory with per-byte valid bits |
CN104318135B (zh) * | 2014-10-27 | 2017-04-05 | 中国科学院信息工程研究所 | 一种基于可信执行环境的Java代码安全动态载入方法 |
US9460284B1 (en) * | 2015-06-12 | 2016-10-04 | Bitdefender IPR Management Ltd. | Behavioral malware detection using an interpreter virtual machine |
US10564929B2 (en) * | 2016-09-01 | 2020-02-18 | Wave Computing, Inc. | Communication between dataflow processing units and memories |
US11036509B2 (en) | 2015-11-03 | 2021-06-15 | Intel Corporation | Enabling removal and reconstruction of flag operations in a processor |
US20170123799A1 (en) * | 2015-11-03 | 2017-05-04 | Intel Corporation | Performing folding of immediate data in a processor |
GB2552153B (en) | 2016-07-08 | 2019-07-24 | Advanced Risc Mach Ltd | An apparatus and method for performing a rearrangement operation |
US10191745B2 (en) * | 2017-03-31 | 2019-01-29 | Intel Corporation | Optimized call-return and binary translation |
US10915320B2 (en) | 2018-12-21 | 2021-02-09 | Intel Corporation | Shift-folding for efficient load coalescing in a binary translation based processor |
US10901739B2 (en) * | 2019-01-21 | 2021-01-26 | Rankin Labs, Llc | Systems and methods for controlling machine operations using stack entries comprising instruction configuration parameters |
US11526357B2 (en) | 2019-01-21 | 2022-12-13 | Rankin Labs, Llc | Systems and methods for controlling machine operations within a multi-dimensional memory space |
KR102263692B1 (ko) * | 2019-12-30 | 2021-06-14 | 충남대학교 산학협력단 | 이더리움 스마트계약 가상머신 바이트코드 보안성 향상 방법 |
US11809839B2 (en) | 2022-01-18 | 2023-11-07 | Robert Lyden | Computer language and code for application development and electronic and optical communication |
CN115686759B (zh) * | 2023-01-04 | 2023-04-07 | 恒丰银行股份有限公司 | 一种计算虚拟机唯一识别码的方法及系统 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3735363A (en) * | 1971-04-07 | 1973-05-22 | Burroughs Corp | Information processing system employing stored microprogrammed processors and access free field memories |
US3889243A (en) * | 1973-10-18 | 1975-06-10 | Ibm | Stack mechanism for a data processor |
JPS5569855A (en) * | 1978-11-20 | 1980-05-26 | Panafacom Ltd | Data processing system |
US4439828A (en) * | 1981-07-27 | 1984-03-27 | International Business Machines Corp. | Instruction substitution mechanism in an instruction handling unit of a data processing system |
US4530049A (en) * | 1982-02-11 | 1985-07-16 | At&T Bell Laboratories | Stack cache with fixed size stack frames |
US5043870A (en) * | 1982-02-24 | 1991-08-27 | At&T Bell Laboratories | Computer with automatic mapping of memory contents into machine registers during program execution |
US4849880A (en) * | 1985-11-18 | 1989-07-18 | John Fluke Mfg. Co., Inc. | Virtual machine programming system |
US4811208A (en) * | 1986-05-16 | 1989-03-07 | Intel Corporation | Stack frame cache on a microprocessor chip |
US5313614A (en) * | 1988-12-06 | 1994-05-17 | At&T Bell Laboratories | Method and apparatus for direct conversion of programs in object code form between different hardware architecture computer systems |
US5187793A (en) * | 1989-01-09 | 1993-02-16 | Intel Corporation | Processor with hierarchal memory and using meta-instructions for software control of loading, unloading and execution of machine instructions stored in the cache |
US4951194A (en) * | 1989-01-23 | 1990-08-21 | Tektronix, Inc. | Method for reducing memory allocations and data copying operations during program calling sequences |
US5107457A (en) * | 1989-04-03 | 1992-04-21 | The Johns Hopkins University | Stack data cache having a stack management hardware with internal and external stack pointers and buffers for handling underflow and overflow stack |
US5359507A (en) * | 1989-04-07 | 1994-10-25 | Mitsubishi Denki Kabushiki Kaisha | Sequence controller |
JP2818249B2 (ja) * | 1990-03-30 | 1998-10-30 | 株式会社東芝 | 電子計算機 |
US5471591A (en) * | 1990-06-29 | 1995-11-28 | Digital Equipment Corporation | Combined write-operand queue and read-after-write dependency scoreboard |
US5448707A (en) * | 1991-10-29 | 1995-09-05 | Intel Corporation | Mechanism to protect data saved on a local register cache during inter-subsystem calls and returns |
US5522051A (en) * | 1992-07-29 | 1996-05-28 | Intel Corporation | Method and apparatus for stack manipulation in a pipelined processor |
US5471602A (en) * | 1992-07-31 | 1995-11-28 | Hewlett-Packard Company | System and method of scoreboarding individual cache line segments |
US5367650A (en) * | 1992-07-31 | 1994-11-22 | Intel Corporation | Method and apparauts for parallel exchange operation in a pipelined processor |
WO1994027214A1 (en) * | 1993-05-07 | 1994-11-24 | Apple Computer, Inc. | Method for decoding sequences of guest instructions for a host computer |
US5499352A (en) * | 1993-09-30 | 1996-03-12 | Intel Corporation | Floating point register alias table FXCH and retirement floating point register array |
US5548776A (en) * | 1993-09-30 | 1996-08-20 | Intel Corporation | N-wide bypass for data dependencies within register alias table |
JPH07114473A (ja) * | 1993-10-19 | 1995-05-02 | Fujitsu Ltd | コンパイラの命令列最適化方法 |
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
DE4435183C2 (de) * | 1994-09-30 | 2000-04-20 | Siemens Ag | Verfahren zum Betrieb eines Magnetresonanzgeräts |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US5600726A (en) * | 1995-04-07 | 1997-02-04 | Gemini Systems, L.L.C. | Method for creating specific purpose rule-based n-bit virtual machines |
US5634118A (en) * | 1995-04-10 | 1997-05-27 | Exponential Technology, Inc. | Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation |
US5862370A (en) * | 1995-09-27 | 1999-01-19 | Vlsi Technology, Inc. | Data processor system with instruction substitution filter for deimplementing instructions |
US5765035A (en) * | 1995-11-20 | 1998-06-09 | Advanced Micro Devices, Inc. | Recorder buffer capable of detecting dependencies between accesses to a pair of caches |
US5657486A (en) * | 1995-12-07 | 1997-08-12 | Teradyne, Inc. | Automatic test equipment with pipelined sequencer |
US5699537A (en) * | 1995-12-22 | 1997-12-16 | Intel Corporation | Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions |
US5761408A (en) * | 1996-01-16 | 1998-06-02 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution |
-
1997
- 1997-01-23 US US08/786,351 patent/US6026485A/en not_active Expired - Lifetime
- 1997-01-23 US US08/786,955 patent/US6125439A/en not_active Expired - Lifetime
- 1997-01-23 US US08/788,807 patent/US6021469A/en not_active Expired - Lifetime
- 1997-01-23 JP JP52705397A patent/JP3801643B2/ja not_active Expired - Lifetime
- 1997-01-23 DE DE69738810T patent/DE69738810D1/de not_active Expired - Lifetime
- 1997-01-23 KR KR1019980705674A patent/KR100529416B1/ko not_active IP Right Cessation
- 1997-01-23 WO PCT/US1997/001221 patent/WO1997027536A1/en active IP Right Grant
- 1997-01-23 EP EP97904872A patent/EP0976030B1/en not_active Expired - Lifetime
-
2006
- 2006-02-28 JP JP2006051700A patent/JP4171496B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
WO1997027536A1 (en) | 1997-07-31 |
KR100529416B1 (ko) | 2006-01-27 |
KR19990081956A (ko) | 1999-11-15 |
EP0976030A1 (en) | 2000-02-02 |
EP0976030B1 (en) | 2008-07-02 |
JP2000515269A (ja) | 2000-11-14 |
US6125439A (en) | 2000-09-26 |
US6021469A (en) | 2000-02-01 |
US6026485A (en) | 2000-02-15 |
JP4171496B2 (ja) | 2008-10-22 |
JP2006216069A (ja) | 2006-08-17 |
DE69738810D1 (de) | 2008-08-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3801643B2 (ja) | スタックを用いる演算マシンのための命令フォールディング処理 | |
JP3634379B2 (ja) | スタックキャッシングのための方法及び装置 | |
US5925123A (en) | Processor for executing instruction sets received from a network or from a local memory | |
US6014723A (en) | Processor with accelerated array access bounds checking | |
US6148391A (en) | System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses | |
US6038643A (en) | Stack management unit and method for a processor having a stack | |
US5970242A (en) | Replicating code to eliminate a level of indirection during execution of an object oriented computer program | |
US7080362B2 (en) | Java virtual machine hardware for RISC and CISC processors | |
US6076141A (en) | Look-up switch accelerator and method of operating same | |
US6065108A (en) | Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same | |
JPWO2003025743A1 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
KR100618718B1 (ko) | 스택메모리구조에서의캐싱방법및장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040115 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040116 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050412 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050712 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050822 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051012 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051129 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060227 |
|
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: 20060418 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060426 |
|
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: 20100512 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110512 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110512 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120512 Year of fee payment: 6 |
|
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: 20120512 Year of fee payment: 6 |
|
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: 20130512 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130512 Year of fee payment: 7 |
|
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 |