JP2006216069A - スタックを用いる演算マシンのための命令フォールディング処理 - Google Patents

スタックを用いる演算マシンのための命令フォールディング処理 Download PDF

Info

Publication number
JP2006216069A
JP2006216069A JP2006051700A JP2006051700A JP2006216069A JP 2006216069 A JP2006216069 A JP 2006216069A JP 2006051700 A JP2006051700 A JP 2006051700A JP 2006051700 A JP2006051700 A JP 2006051700A JP 2006216069 A JP2006216069 A JP 2006216069A
Authority
JP
Japan
Prior art keywords
instruction
stack
operand
cache
virtual machine
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.)
Granted
Application number
JP2006051700A
Other languages
English (en)
Other versions
JP4171496B2 (ja
Inventor
James Michael O'connor
オコナー、ジェイムズ・マイケル
Marc Tremblay
トレンブレイ、マーク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2006216069A publication Critical patent/JP2006216069A/ja
Application granted granted Critical
Publication of JP4171496B2 publication Critical patent/JP4171496B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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)

Abstract

【課題】JAVA仮想マシン命令シーケンスを実行する際のオペレーションの数を減らし、処理サイクルを短くする。
【解決手段】JAVA仮想マシン命令の命令デコーダが、オペランドをスタックの一番上にプッシュする命令であって、単にスタックオペランドの一番上に作用する第2の命令の先行処理として実行されるに過ぎないものを、中心のオペレーションに一体化、即ちフォールディング処理する。この命令デコーダは、フォールディング処理可能な命令シーケンスを特定して、実行ユニットに一つの等価なフォールディング処理済オペレーションを供給する。
【選択図】 図11

Description

本発明はスタックマシン用の命令デコーダに関するものである。本発明は、特に、多数の命令のシーケンスに対して複数の命令を一つの命令に一体化するフォールディング処理を施し、その命令群を一つのフォールディング処理済オペレーションに変換する方法及び装置に関するものである。
コンピュータ業界及び通信業界の多くの業界人や組織は、インターネットを、地球上で最も急成長しているマーケットであると、もてはやしている。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に示すのは、多数の命令のシーケンスを一体化、即ちフォールディング処理して一つのフォールディング済オペレーションに変換する本発明による命令デコーダ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の実行により、オブジェクト参照ポインタobjectrefがオペランドスタック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_instr_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_op_adrを発生する。第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では、ポインタOPTOPがレジスタ1702に供給され、レジスタ1702はこの値をラッチし、ラッチされた値をデータセレクタ1750の第1入力に供給する。同様に、ポインタOPTOPはレジスタ1704及び1706に供給され、これらのレジスタはそれぞれこの値から1及び2を引いた数をラッチし、ラッチされた値をデータセレクタ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により識別される面から直接アクセスされる。現在メソッドが、例えばメソッド2に戻るとき、メソッド番号レジスタ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つのレベルを用いてそのメソッドにアクセスする。すなわち、各メソッドはそのオブジェクトから導出されるポインタにより、直接アクセスされる。これはそのメソッドポインタにより予め導入されていた無方向のレベルを削除する。無方向のレベルを減少させることにより、実行ユニット140の演算を加速することができる。実行ユニット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、I/O制御部506、ATMアセンブリ/リアセンブリ507、並びに無線リンク508は、本発明のハードウエアプロセッサ100と同じチップ内に集積化される。
本発明の様々な実施例について説明してきたが、これらの実施例は例示に過ぎず本発明の範囲を限定しようとするものではないということは理解されよう。例えば第1命令、第2命令、第3命令等の用語は、内容を区別するために使用した用語に過ぎず、命令の特定の順序付けを必要とするように構成する必要はない。ここに開示した実施例の多くの様々な改変、追加、及び改良が可能である。例えば、本発明のJAVAプログラム言語及びJAVA仮想マシンに関連した実施例のみについて説明したが、実施例はこれに限定されず、代わりに様々なスタックマシン環境(仮想環境及び物理的環境の双方)に対するシステム、もの、方法、及び装置が本発明の範囲に含まれる。更に、ここに開示した実施例はハードウェアの実施例であるが、上述の内容に基づく命令フォールディング処理を組み込んだ適切な仮想マシンインプリメンテーション(JAVAが関連するもの又はそうでないもの)が、命令フォールディングバイトコードインタプリタ、特定のマシンアーキテクチャにネイティブなオブジェクトコードにおけるフォールディングされたオペレーションを生成するジャストインタイムコンパイラ、及び仮想マシンをインプリメントする命令フォールディングハードウェアを提供するソフトウェアもその範囲に含まれている。これらの及び他の様々な変更及び追加及び改良は、請求の範囲に記載の本発明の範囲を逸脱することなく実現され得る。
図1Bとともに、本発明による命令フォールディング処理が可能な命令デコーダを含む、仮想マシンハードウェアプロセッサの一実施例を示すブロック図である。 図1Aとともに、本発明による命令フォールディング処理が可能な命令デコーダを含む、仮想マシンハードウェアプロセッサの一実施例を示すブロック図である。 本発明の一実施例において用いられる仮想マシン命令の生成のためのプロセスフロー図である。 図1のハードウェアプロセッサにおいて実現された命令パイプラインを示した図である。 スタック構造の論理的編成の一実施例を示した図であり、ここでは各メソッドフレームが、図1のハードウェアプロセッサが使用するローカル変数ストレージエリア、環境ストレージエリア、及びオペランドスタックを含む。 スタック構造の論理的編成の別の実施例を示した図であり、ここでは各メソッドフレームが、ローカル変数ストレージエリア及びスタック上のオペランドスタックを含み、メソッドフレームのための環境ストレージエリアが、個別実行環境スタック上に含められている。 図4Bの実行環境スタック及びスタック用のスタック管理ユニットの別の実施例を示した図である。 第1のスタック管理ユニットにおけるローカル変数ルックアサイドキャッシュの一実施例を示した図である。 図1のハードウェアプロセッサに対するいくつかの可能なアドオンを示した図である。 スタックデータ構造のコンテキストにおける、一対のスタック構造が関与するデータフローを示した図であり、ここではスタックから最上部2つのスタックエントリをポップし、それらの合計をスタックの先頭にプッシュする第2スタック命令により消費されるのみであるスタックの先頭に第1スタック命令がデータ項目をプッシュする。 図6に示されたもののような第1及び第2スタック命令のフォールディングされた実行を対照して示した図であり、ここでは、本発明の実施例により第1オペレーション(データ項目をスタックの先頭にプッシュする)が不要になっている。 本発明の実施例による。オペランドスタック、ローカル変数ストレージ、及びメモリストレージのコンスタントプール部分、並びにそれにアクセスするためのレジスタ変数の間の関係を示したブロック図である。 オペランドスタック及びローカル変数ストレージに作用するiload(整数ロード)/iadd(整数加算)/istore(整数ストア)命令シーケンスを示した図であり、iload命令前のオペランドスタックの内容を示した図である。 オペランドスタック及びローカル変数ストレージに作用するiload(整数ロード)/iadd(整数加算)/istore(整数ストア)命令シーケンスを示した図であり、iload命令の後iadd命令の前のオペランドスタックの内容を示した図である。図9B及び図9Cに示す中間段階は、本発明の実施例による命令フォールディング処理により省くことができる。 オペランドスタック及びローカル変数ストレージに作用するiload(整数ロード)/iadd(整数加算)/istore(整数ストア)命令シーケンスを示した図であり、iload命令の後iadd命令の前のオペランドスタックの内容を示した図である。図9B及び図9Cに示す中間段階は、本発明の実施例による命令フォールディング処理により省くことができる。 オペランドスタック及びローカル変数ストレージに作用するiload(整数ロード)/iadd(整数加算)/istore(整数ストア)命令シーケンスを示した図であり、istoreの後のオペランドスタックの内容を示した図である。 オペランドスタック及びローカル変数ストレージ上に作用するaload(オブジェクト参照ロード)/arraylength(定数加算)命令シーケンスを示した図であり、aload命令前のオペランドスタックの内容を示している。 オペランドスタック及びローカル変数ストレージ上に作用するaload(オブジェクト参照ロード)/arraylength(定数加算)命令シーケンスを示した図であり、aload命令後arraylength前の(命令フォールディングなし)オペランドスタックの内容を示している。図10Bに示す中間段階は、本発明の実施例による命令フォールディング処理によって省くことができる。 オペランドスタック及びローカル変数ストレージ上に作用するaload(オブジェクト参照ロード)/arraylength(定数加算)命令シーケンスを示した図であり、arraylength命令後のオペランドスタックの内容を示している。 本発明の実施例による命令フォールディング処理を提供する命令デコーダを含むスタックを利用するプロセッサの機能ブロック図である。 本発明の実施例による命令デコーダを示すフローブロック図であり、フォールディング処理済オペレーションを実行ユニットに供給し、オペランドアドレスをアドレススタック、ローカル変数ストレージ、又はコンスタントプールに供給し、行先アドレスをオペランドスタック又はローカル変数ストレージに供給するように外部命令デコーダが接続されているところが示されており、供給される1つのオペレーション及びアドレスはフォールディングされていない命令のシーケンスと等価である。 本発明の実施例による命令フォールディング処理をサポートしている命令デコーダの機能ブロック図である。 本発明の実施例による命令フォールディング処理をサポートしている命令デコーダのフォールドデコード部の機能ブロック図である。 図15Bとともに、本発明の実施例によるフォールディング可能な命令シーケンスを特定するためのオペレーションのシーケンスの1例を示した流れ図である。 図15Aとともに、本発明の実施例によるフォールディング可能な命令シーケンスを特定するためのオペレーションのシーケンスの1例を示した流れ図である。 本発明の実施例によるフォールドアドレスジェネレータの行先アドレスジェネレータ及び構成要素オペランドを示した機能ブロック図である。 本発明の実施例による、オペランドアドレスジェネレータのための構造の例を示した機能ブロック図である。

Claims (6)

  1. レジスタストレージに存在するデータを操作するべく動作可能な実行ユニットと、
    複数の連続したスタックベースの命令をデコードし、デコードされた前記複数の連続したスタックベースの命令に対応する1個のレジスタベースのオペレーションを前記実行ユニットに実行させるべく動作可能な命令デコーダとを有することを特徴とする装置。
  2. 前記1個のレジスタベースのオペレーションが、前記レジスタストレージにおける処理結果の格納位置、及び前記レジスタストレージにおける2以上のソースの格納位置を明示的に特定することを特徴とする請求項1に記載の装置。
  3. 前記命令デコーダが、前記レジスタストレージの複数のエントリを選択するべく動作可能であり、選択された前記複数のエントリは、デコードされた前記複数の連続したスタックベースの命令によって明示的及び暗示的に標的とされるスタック及びローカル変数の格納位置の部分集合に対応することを特徴とする請求項1に記載の装置。
  4. 前記レジスタストレージにおけるスタック及びローカル変数の部分をさらに含み、デコードされた前記複数の連続したスタックベースの命令の少なくとも1つが、1つのローカル変数から前記スタックの先頭への情報の転送を定義することを特徴とする請求項1に記載の装置。
  5. スタックベースの命令のシーケンスをフェッチする過程と、
    複数の連続したスタックベースのめ異例をデコードする過程と、デコードされた前記複数の連続したスタックベースの命令に対応する1個のレジスタベースのオペレーションを前記実行ユニットに実行させる過程とを含むことを特徴とする方法。
  6. コンピュータシステムであって、
    命令ソースと、
    レジスタストレージと、
    プロセッサと、
    前記命令ソースからスタックベースの命令を受け取り、前記プロセッサに、前記レジスタストレージにおけるソースと処理結果の位置に対する明示的な識別子を用いて前記レジスタに存在する存在するデータを操作させる手段であって、前記手段は、前記スタックベースの命令の一部である複数の連続した命令群を、1個の対応するレジスタベースのオペレーションに変換する、該手段とを有することを特徴とするコンピュータシステム。
JP2006051700A 1996-01-24 2006-02-28 スタックを用いる演算マシンのための命令フォールディング処理 Expired - Lifetime JP4171496B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US1052796P 1996-01-24 1996-01-24
US64398496A 1996-05-07 1996-05-07

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP52705397A Division JP3801643B2 (ja) 1996-01-24 1997-01-23 スタックを用いる演算マシンのための命令フォールディング処理

Publications (2)

Publication Number Publication Date
JP2006216069A true JP2006216069A (ja) 2006-08-17
JP4171496B2 JP4171496B2 (ja) 2008-10-22

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 Before (1)

Application Number Title Priority Date Filing Date
JP52705397A Expired - Lifetime JP3801643B2 (ja) 1996-01-24 1997-01-23 スタックを用いる演算マシンのための命令フォールディング処理

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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014194755A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
JP2019519865A (ja) * 2016-07-08 2019-07-11 エイアールエム リミテッド 並べ替え動作を実行するための装置および方法

Families Citing this family (185)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69734399D1 (de) * 1996-01-24 2006-03-02 Sun Microsystems Inc Verfahren und vorrichtung zur stapel-cachespeicherung
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
EP0950216B1 (en) * 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
KR100623403B1 (ko) * 1997-10-02 2006-09-13 코닌클리케 필립스 일렉트로닉스 엔.브이. 가상 머신 명령을 처리하기 위한 데이터 처리 장치
DE69836902T2 (de) * 1997-10-02 2007-10-18 Koninklijke Philips Electronics N.V. Auf variable instruktionen eingestellter computer
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
US6321377B1 (en) * 1998-12-03 2001-11-20 International Business Machines Corporation Method and apparatus automatic service of JIT compiler generated errors
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
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
US6487652B1 (en) * 1998-12-08 2002-11-26 Sun Microsystems, Inc. Method and apparatus for speculatively locking objects in an object-based system
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
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
WO2001069408A1 (en) * 2000-03-16 2001-09-20 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
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
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
KR20020028814A (ko) * 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
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
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
US7873814B1 (en) 2000-12-22 2011-01-18 Lsi Corporation Microcode based hardware translator to support a multitude of processors
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
US6957428B2 (en) 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7543288B2 (en) * 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
KR20040034601A (ko) * 2001-04-23 2004-04-28 아트멜 코포레이숀 바이트 컴파일된 자바 코드를 실행하는 마이크로 프로세서
CA2346762A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Compiler generation of instruction sequences for unresolved storage devices
US6804681B2 (en) * 2001-05-08 2004-10-12 Sun Microsystems, Inc. Identifying and tracking object references in a java programming environment
US7065747B2 (en) * 2001-05-08 2006-06-20 Sun Microsystems, Inc. Identifying references to objects during bytecode verification
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
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
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
WO2003014921A1 (en) * 2001-07-02 2003-02-20 Nazomi Communications, Inc. Intermediate language accelerator chip
US20030023958A1 (en) * 2001-07-17 2003-01-30 Patel Mukesh K. 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
US20030041319A1 (en) * 2001-08-24 2003-02-27 Sun Microsystems, Inc. Java bytecode instruction for retrieving string representations of java objects
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
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
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
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
EP1387274A3 (en) * 2002-07-31 2004-08-11 Texas Instruments Incorporated Memory management for local variables
US7747989B1 (en) * 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
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
GB0315165D0 (en) * 2003-05-02 2003-08-06 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
GB2401217B (en) * 2003-05-02 2005-11-09 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
US7496917B2 (en) * 2003-09-25 2009-02-24 International Business Machines Corporation Virtual devices using a pluarlity of processors
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
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
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
US7478390B2 (en) * 2003-09-25 2009-01-13 International Business Machines Corporation Task queue management of virtual devices using 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
US7444632B2 (en) * 2003-09-25 2008-10-28 International Business Machines Corporation Balancing computational load across 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
US7802080B2 (en) 2004-03-24 2010-09-21 Arm Limited Null exception handling
US7930526B2 (en) 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
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
US7613881B2 (en) * 2004-06-08 2009-11-03 Dartdevices Interop Corporation Method and system for configuring and using virtual pointers to access one or more independent address spaces
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
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
US8612970B2 (en) * 2005-11-30 2013-12-17 Red Hat, Inc. Purpose domain for low overhead virtual machines
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
EP1887462A1 (en) * 2006-07-26 2008-02-13 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
JP5355573B2 (ja) * 2008-08-07 2013-11-27 三菱電機株式会社 半導体集積回路装置及び設備機器制御装置
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
US9552032B2 (en) 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9547358B2 (en) 2012-04-27 2017-01-17 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 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения угроз в коде, исполняемом виртуальной машиной
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
WO2015057828A1 (en) 2013-10-15 2015-04-23 Mill Computing, Inc. Computer processor employing cache memory storing backless cache lines
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
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
US11526357B2 (en) 2019-01-21 2022-12-13 Rankin Labs, Llc Systems and methods for controlling machine operations within a multi-dimensional memory space
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
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)

* Cited by examiner, † Cited by third party
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

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014194755A (ja) * 2013-03-15 2014-10-09 Intel Corp 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
JP2019519865A (ja) * 2016-07-08 2019-07-11 エイアールエム リミテッド 並べ替え動作を実行するための装置および方法
US11036502B2 (en) 2016-07-08 2021-06-15 Arm Limited Apparatus and method for performing a rearrangement operation
JP7084882B2 (ja) 2016-07-08 2022-06-15 アーム・リミテッド 並べ替え動作を実行するための装置および方法

Also Published As

Publication number Publication date
WO1997027536A1 (en) 1997-07-31
EP0976030B1 (en) 2008-07-02
KR100529416B1 (ko) 2006-01-27
JP2000515269A (ja) 2000-11-14
DE69738810D1 (de) 2008-08-14
KR19990081956A (ko) 1999-11-15
EP0976030A1 (en) 2000-02-02
US6026485A (en) 2000-02-15
US6125439A (en) 2000-09-26
JP4171496B2 (ja) 2008-10-22
JP3801643B2 (ja) 2006-07-26
US6021469A (en) 2000-02-01

Similar Documents

Publication Publication Date Title
JP4171496B2 (ja) スタックを用いる演算マシンのための命令フォールディング処理
JP3634379B2 (ja) スタックキャッシングのための方法及び装置
US5925123A (en) Processor for executing instruction sets received from a network or from a local memory
US6148391A (en) System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
EP0976050B1 (en) Processor with array access bounds checking
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
JP4485198B2 (ja) Javaアクセラレータを備えたプロセッサシステム
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
KR100618718B1 (ko) 스택메모리구조에서의캐싱방법및장치

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080408

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080703

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080808

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

Free format text: PAYMENT UNTIL: 20110815

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110815

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20120815

Year of fee payment: 4

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

Year of fee payment: 4

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20130815

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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