JP2000515270A - ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ - Google Patents

ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ

Info

Publication number
JP2000515270A
JP2000515270A JP09527087A JP52708797A JP2000515270A JP 2000515270 A JP2000515270 A JP 2000515270A JP 09527087 A JP09527087 A JP 09527087A JP 52708797 A JP52708797 A JP 52708797A JP 2000515270 A JP2000515270 A JP 2000515270A
Authority
JP
Japan
Prior art keywords
instruction
instructions
processor
decoder
network
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.)
Pending
Application number
JP09527087A
Other languages
English (en)
Inventor
トレンブレイ、マーク
オコナー、ジェイムズ・マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 JP2000515270A publication Critical patent/JP2000515270A/ja
Pending legal-status Critical Current

Links

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • G06F15/7846On-chip cache and off-chip main memory
    • 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
    • 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
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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/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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 二重命令セットプロセッサは、ネットワークから受取ったコードと、ローカルメモリから供給された他のコードとの双方をデコードし、実行できる。従って、この二重命令セットプロセッサは、2つの異なるコードの発信元に由来する、2つの異なる型の命令を実行することができ、最大限の効率を達成することができる。前述の二重命令セットプロセッサ、ローカルメモリ、及び例えばモデムのような、インターネットやイントラネット等のネットワークとの接続のための通信インタフェースデバイスを備えたコンピュータシステムは、ネットワークからのJAVAコードの実行や、ローカルにストアされた非JAVAコードの実行、またはネットワークから取出したものであるが信用できる環境や許可された環境における非JAVAコードの実行のために最適化され得る。

Description

【発明の詳細な説明】 ネットワークまたはローカルメモリから受け取った命令セットの実行のための二 重命令セットプロセッサ付録Iの参照 付録IのJAVA仮想マシン仕様書とこの仕様書に添付された付録Aとを含む 本明細書の一部分は、著作権で保護された内容を含んでいる。著作権の所持者は 、米国特許庁に提出され記録された特許文書のファクシミリ伝送による複製に異 議を唱えるものではないが、他の場合については、無断転載を禁ず。発明の背景 発明の分野 本発明は、一般にコンピュータ及び情報システムに関するものであり、特に、 インターネットやイントラネットのようなネットワークとローカルメモリとの双 方からの命令セットを実行するための改良型プロセッサ及びコンピュータシステ ムに関するものである。関連技術の説明 コンピュータ業界及び通信業界の多くの業界人や組織は、インターネットを、 地球上で最も急成長しているマーケットであると、もてはやしている。1990 年代において、インターネットのユーザの数は指数関数的に増加し、いまだとど まるところを知らない。1995年6月時点でのインターネットに接続している ホストの数は推計6,642,000であり、同年1月の推計値4,852,0 00に対して増加が見られた。ホスト数は年間約75%増加している。ホストの 中には、約120,000のネットワークサーバ、及び27,000以上のWe bサーバが存在していた。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 Contro l Protocol based on Internet protocol)、HTTP(Hypertext Transfer Protoco l)とFTP(File Transfer Protocol)に容易に対処できるようにするためのルーチ ンの広範囲のライブラリを持っている。Javaプログラミング言語はネットワーク で結ばれた分散環境における使用を意図されている。Javaプログラミング言語に より、ウイルスがなく、破壊工作から守られたシステムの建設が可能となった。 また、その認証技術は公開鍵暗号化に基づいている。発明の要約 本発明は、ネットワークから受取った、仮想計算マシンアーキテクチャのため の命令セットのような仮想マシン命令セットをデコードし実行するように設計さ れたプロセッサである。しかし、このプロセッサは、例えばローカルメモリから 供給された第2のコンピュータ命令セットをデコードし、実行することもできる 。この第2のコンピュータ命令セットは、仮想計算マシンアーキテクチャとは異 なるコンピュータプロセッサアーキテクチャ用のものである。2つの異なるソー スからの2つの異なる命令セットを実行できるプロセッサのコンセプトにより、 様々な機能を実施するアプリケーションの実行において、最大限の効率が達成で きる。 本発明は、前述のプロセッサ、ローカルメモリ、及び例えばモデムのような、 インターネットやイントラネット等のネットワークとの接続のための通信インタ フェースデバイスを備えたコンピュータシステムを含む。究極的には、本発明の 範囲には、コンパイル済のコードがネットワークを介して取出され実行されたか 、若しくはローカルメモリのような 信用できる環境(trusted environment)から取出されて実行されたかに応じて 、コンパイル済のコードが、例えば配列境界検査のようなセキュリティ機能と共 に、あるいはそのようなセキュリティ機能無しで実行され得る、JAVAソース コードプログラムで書かれたアプリケーションのコンパイル方法が含まれる。 (P4C)一実施例では、仮想マシン命令が翻訳ユニットにより処理される。 この翻訳ユニットは、各仮想マシン命令を、従来のプロセッサの実行ユニットの ためのルーチンマイクロコードや、ネイティブな命令に変換する。上記の従来の プロセッサの例には、サンマイクロシステム社のSPARCファミリー、DEC 社のAlpha、シリコングラフィクス社のMIPSファミリー、モトローラ/ IBM/アップルPowerPCファミリー、やインテルx86及びiA4ファ ミリーのプロセッサがある。従って、第1の実施例における仮想マシン命令は、 RISCプロセッサのネイティブ命令に変換され、第2の実施例においては、C ISCプロセッサのネイティブ命令に変換され、第3の実施例においては、VL IW(very long instruction word)プロセッサのネイティブ命令に変換される 。これらの各実施例では、翻訳ユニットからのネイティブ命令が、従来のデコー ドユニットによりデコードされ、デコード済のネイティブ命令は、従来の実行ユ ニットにより実行される。別形態では、翻訳ユニットが、仮想マシン命令または 仮想マシン命令セットのルーチンマイクロコードを供給する場合、命令デコーダ はバイパスされ、マイクロコードルーチンは、従来の実行ユニットで直接実行さ れる。 別の実施例では、本発明のプロセッサは、ネットワーク及びローカルメモリと 通信できるように構成されている。このプロセッサの第1の命令デコーダは、第 1命令セットにおける複数の第1命令をデコードするように構成されている。こ のプロセッサの第2の命令デコーダは、第2 命令セットにける複数の第2命令をデコードするように構成されている。第2命 令セットは第1命令セットとは異なっている。このプロセッサの命令実行ユニッ トは、第1命令デコーダによりデコードされた前記複数の第1命令を実行し、第 2命令デコーダによりデコードされた前記複数の第2命令を実行するように構成 されている。 第1命令デコーダは、第1命令セットにおけるセットモード命令をデコードす るように構成されている。セットモード命令に応じて、このセットモード命令の 後続の命令が、第2命令デコーダに渡される。 一実施例では、前記第1命令セットのそれぞれは仮想マシン命令である。仮想 マシン命令は、オペコードを含む。更に、この実施例では、第1実行ユニットが 、スタックベースの実行ユニットである。図面の簡単な説明 第1図は、本発明の一実施例の二重命令セットプロセッサに含められる仮想マ シンハードウェアプロセッサの一実施例のブロック図である。 第2図は、本発明の一実施例において用いられる仮想マシン命令の生成のため のプロセスフロー図である。 第3図は、第1図のハードウェアプロセッサにおいて実現された命令パイプラ インを示した図である。 第4A図は、スタック構造の論理的編成の一実施例を示した図であり、ここで は各メソッドフレームが、第1図のハードウェアプロセッサが使用するローカル 変数ストレージエリア、環境ストレージエリア、及びオペランドスタックを含む 。 第4B図は、スタック構造の論理的編成の別の実施例を示した図であり、ここ では各メソッドフレームが、ローカル変数ストレージエリア及びスタック上のオ ペランドスタックを含み、メソッドフレームのための環境ストレージエリアが、 個別実行環境スタック上に含められている。 第4C図は、第4B図の実行環境スタック及びスタック用のスタック管理ユニ ットの別の実施例を示した図である。 第4D図は、第1のスタック管理ユニットにおけるローカル変数ルックアサイ ドキャッシュの一実施例を示した図である。 第5図は、第1図のハードウェアプロセッサに対するいくつかの可能なアドオ ンを示した図である。 第6A図は、本発明の原理による、第1二重命令セットプロセッサのブロック 図である。 第6B図は、本発明の原理による、第2二重命令セットプロセッサのブロック 図である。 第6C図は、本発明の原理による、第1図のハードウェアプロセッサを含むプ ロセッサのブロック図である。 第7図は、RISC命令やCISC命令のような異なる命令のデコードや実行 のために本発明のプロセッサを切り換えるのに用いられるバイトコードの例を示 した図である。 第8図は、本発明の原理によるプロセッサを用いたコンピュータシステムのブ ロック図である。 本発明のこれらの特徴及び他の特徴は、以上の図面とともに下記の発明の詳細 な説明を参照することにより明らかとなろう。図面及び発明の詳細な説明におい ては、同一の、或いは類似の構成要素には同一の符号を付して示してある。発明の詳細な説明 以下により完全に説明するように、JAVAプログラム言語で書かれたアプリ ケーションは、ハードウェアプロセッサ100(第1図)のようなプロセッサで 実行するための、例えばインターネットやイントラネットのようなネットワーク を介して送られ得る仮想マシン命令形態の実行 可能なコードのソースを生成して使用するのに特に良く適合するものである。し かし、アプリケーションによっては、例えばローカルメモリからの、或いはネッ トワークを介して供給される仮想マシン命令以外の命令のデコードや実行をも可 能なプロセッサを備えておく必要がある。 ある実施例では、ハードウェアプロセッサ100が仮想マシン命令の実行には 使用されず、この代わりにサン・マイクロシステムズ社のSPARCファミリの アーキテクチャ、DAC社のAlphaアーキテクチャ、シリコングラフィックス社のMI PSアーキテクチャ、モトローラ/IBM/アップルPower PCアーキテクチャ、又は インテル社のx86及びiA4アーキテクチャのような従来型マイクロプロセッサアー キテクチャが、翻訳ユニットと共に用いられる。 詳述すると、翻訳ユニットを従来型マイクロプロセッサに加え、従来型マイク ロプロセッサが仮想マシン命令とそのプロセッサのネイティブ命令の双方を実行 できるようにしている。即ち、従来型マイクロプロセッサが二重命令セットマイ クロプロセッサとなる。勿論、追加のマイクロコードが、仮想マシン命令が必要 とする環境をサポートし、且つ翻訳済みの命令の実行をサポートするために必要 となり得る。必要となる特定の追加物は、仮想マシン命令セット及び選択された 従来型プロセッサアーキテクチャによって決まる。 以下により完全に説明するように、翻訳ユニットは仮想マシンを従来型マイク ロプロセッサのネイティブ命令セットに属する命令に変換し、この命令はその従 来型マイクロプロセッサにより直接実行される。しかし、仮想マシン命令の中に は、従来型のマイクロプロセッサで実行されるマイクロコードに変換され得るも のもある。この為、以下により詳細に説明するように、本発明の二重命令セット プロセッサは、ネットワークやローカルメモリのような2つの異なるソースに由 来する2つの異な る命令セットを実行可能である。ここで、命令セットとは、特定の型のコンピュ ータプロセッサアーキテクチャの命令を指す。 別の実施例では、本発明の二重命令セットプロセッサが、ハードウェアプロセ ッサ100のような仮想マシン命令プロセッサ、及び仮想マシン命令以外の命令 を実行する第2プロセッサを有する。この二重命令セットプロセッサはいくつか の利点を有する。例えば、利用可能な命令の数が増えている。詳述すると、バイ トコードの制約に基づき、JAVA仮想マシン命令セットにおける命令の数は、 256命令未満に制限されている。この制約は、アプリケーションによっては最 適なものではない。この二重命令セットプロセッサが第2命令セットを有する為 、仮想マシン命令セットが提供するものより多くの機能性を必要とする場合、ア プリケーションが第2命令セットにおける命令のセットを呼び出したり、アプリ ケーション全体を第2命令セットで書くことが可能である。 詳述すると、JAVA仮想マシン命令のセットは、データストリームにおける 第2プロセッサ用のネイティブ命令を含めることにより拡張され得る。データス トリームの中のこのネイティブ命令を実行する前に、二重命令セットプロセッサ の動作モードが第2プロセッサ上で命令を実行するようにセットされ、データス トリームの中のネイティブ命令は第2プロセッサにより実行される。第2プロセ ッサによるネイティブ命令の実行が終了すると、二重命令セットプロセッサの動 作モードは仮想マシン命令を直接実行する動作モードに戻される。このようにし て、仮想マシンの命令空間が、第2プロセッサネイティブ命令を仮想マシンの命 令空間に効果的にマッピングすることにより増強される。 又、JAVA仮想マシン仕様は、配列の境界制限のセットのようなウィルスや 他のソフトウェア上の問題がネットワークからユーザのコンピュータシステムに 転送できない状態を保証するための厳格なセキュリティ チェックを有している。しかし、アプリケーションによっては、これらのセキュ リティチェックが使いづらいものとなり、不要な時間を浪費するプロセスとなっ てしまうことがある。この様なアプリケーションに対しては、アプリケーション 又は他の実行可能なコード(例えばマルチメディアライブラリ)が、ローカルメ モリや他の信用できる環境からロードされ得る。実行可能なコードが信用できる 環境からロードされたとき、セキュリティチェックは利用されず、処理能力が増 強される。 別形態では、以下により詳細に説明するように、JAVAプログラム言語で書 かれたアプリケーションの2つのバージョンがコンパイルされて、2つの異なる 仮想マシンアプリケーションが供給され得る。第1仮想マシンアプリケーション は、好適なキャリアを介して情報を送るネットワークのようなセキュリティのな い環境において使用され、JAVA仮想マシン仕様が提供する安全上の機能の全 てを有する。第2仮想マシンアプリケーションは、ローカルエリアネットワーク や個別のコンピュータ内のような安全な環境において使用され、JAVA仮想マ シン命令の安全上の機能のいくつか或いは全てを含んでおらず、例えばコードベ リファイ機能を含んでおらず、このため実行がより高速となる。 以下により詳細に説明するように、本発明の二重命令セットプロセッサはプロ セッサに供給された命令の情報に基づいて、命令を適切な実行ユニットに自動的 にルーティングする。二重命令セットプロセッサの詳細について考える前に、ハ ードウェアプロセッサ100の実施例について説明し、その説明に続けて、ハー ドウェアプロセッサ100が、仮想マシン命令を実行する等価なプロセッサを備 えた本発明の二重命令セットプロセッサについて説明する。 第1図に示すのは、プロセッサアーキテクチャに依存しない仮想マシン命令を 直接実行する仮想マシンハードウェアプロセッサ100(以下 ハードウェアプロセッサ100)の一実施例である。このハードウェアプロセッ サ100は、本発明による二重命令プロセッサにおいて使用され得る。仮想マシ ン命令の実行におけるハードウェアプロセッサ100の性能は、インテルのPENT IUMのマイクロプロセッサやサンマイクロシステムズULTRASPARCプロセッサのよ うなハイエンドのCPUよりずっと優れている(ULTRASPARCはサンマイクロシステ ムズ社の商標であり、PENTIUMはインテル社の商標である)。ソフトウェアJA VAインタプリタや、JAVAジャストインタイムコンパイラ(just-in-time c ompiler)で同じ仮想マシンをインタプリートすることは、低コストであって、 電力消費量も低い。この結果、ハードウェアプロセッサ100は、移植性がある アプリケーションに非常に適したものとなる。ハードウェアプロセッサ100は 、他の仮想マシンスタックベースのアーキテクチャや、ガーベジコレクション、 スレッド同期などのような機能を用いてる仮想マシンに対しても似たような利点 をもたらす。 これらの特徴の点から言えば、ハードウエアプロセッサ100に基づいたシス テムは、最も良い全体的な性能について言うのでなければ、ソフトウェアインタ プリタやジャストインタイムコンパイラを含む他の仮想マシン実行環境と比較し て魅力的なコストパフォーマンスを提供する。しかし、本発明は、仮想マシンハ ードウェアプロセッサの実施例に限定されず、本発明の範囲には、JAVA仮想 マシン命令を特定のハードウェアプロセッサにネイティブなマシン命令にコンパ イル(バッチかあるいはジャストインタイムコンパイルの何れかで)するソフト ウェアインタプリタとしてJAVA仮想マシンをエミュレートするインプリメン テーションを備えたインプリメンテーションや、成いはJAVA仮想マシンをマ イクロコードとして実現する、或いは直接チップ上に実現する、又はそれらの組 み合わせとして実現するハードウェアを提供する、適当な スタックベースの、又は非スタックベースの演算マシンインプリメンテーション も含まれている。 コストパフォーマンスについては、ハードウェアプロセッサ100は、250 キロバイト(Kbytes)〜500キロバイトのメモリストレージが不要であるとい う利点を有している。例えば一般にソフトウェアインタプリタによって必要とさ れるROM或いはRAMが不要である。ハードウェアプロセッサ100のシュミレーシ ョンにより、ハードウェアプロセッサ100が、そのプロセッサ100と同じク ロックレートで同じ仮想マシン命令を実行するPENTIUMプロセッサ上の様々なア プリケーション上を走るソフトウェアインタプリタと比較して20倍高速で仮想 マシンを実行することが分かった。別のハードウェアプロセッサ100のシュミ レーションにより、ハードウェアプロセッサ100は、そのプロセッサ100と 同じクロックレートで、同じ仮想マシン命令を実行するPENTIUMプロセッサ上を 走るジャストインタイムコンパイラと比較して5倍高速で仮想マシンを実行する ことが分かった。 ソフトウェア仮想マシン命令インタプリタが必要とするメモリ消費が禁じられ ているような環境の下では、ハードウェアプロセッサ100は有利である。これ らのアプリケーションは、例えばネットワーク機器、携帯電話プロセッサ、及び 他の遠距離通信用集積回路、若しくは埋め込み型プロセッサやポータブルデバイ スのような低電力低コストの他のアプリケーションのためのインターネットチッ プを含む。 本明細書において、仮想マシンとは、現実の演算マシンのように命令セットを 有し、様々なメモリエリアを使用する抽象的な演算マシンである。仮想マシンの 使用は、例えばハードウェアプロセッサ100のような仮想マシンインプリメン テーションにより実行されるプロセッサアーキテクチャに依存しない仮想マシン 命令セットを定義する。各仮想マシ ン命令は実行される特定のオペレーションを定める。仮想演算マシンは、仮想マ シン命令を生成するのに用いられるコンピュータ言語や、仮想マシンの下に位置 するインプリメンテーションを理解する必要がない。理解する必要があるのは仮 想マシン命令用の特定のファイルフォーマットのみである。好適実施例では、仮 想マシン命令はJAVA仮想マシン命令である。各JAVA仮想マシン命令は、 情報、オペランド、及び他の必要な情報を特定する命令をコード化する1又は2 以上のバイトを含んでいる。 付録IはJAVA仮想マシン命令セットを説明したものであり、その全体を本 明細書と一体に参照されたい。但し、使用された特定の仮想マシン命令のセット は、本発明において不可欠な要素ではない。付録I及びこの明細書における仮想 マシン命令を参照することにより、当業者は特定の仮想マシン命令セットやJA VA仮想マシン仕様の変更に対して、発明を変更して実施することができよう。 コンピュータプラットフォーム上で実行するJAVAコンパイラのJAVAC(第 2図参照)は、JAVAプログラム言語で書かれたアプリケーション201を、 JAVA仮想マシン仕様に従って、コンパイル済命令セットを含むコンパイル済 命令シーケンス203をコード化するアーキテクチャに対して中立なオブジェク トファイルフォーマットに変換する。しかしながら、本発明において必要なのは 、仮想マシン命令のソースコード及び関連情報のみである。仮想マシン命令のソ ース及び関連情報を生成するのに用いられる方法及び技術は本明細書において不 可欠の要素ではない。 コンパイル済命令シーケンス203は、ハードウェアプロセッサ100上で実 行可能であると共に、例えばソフトウェアインタプリタやジャストインタイムコ ンパイラを用いるJAVA仮想マシンを実現する任意 のコンピュータプラットフォーム上で実行可能である。しかし、上述のように、 ハードウェアプロセッサ100はソフトウェアインプリメンテーションより著し く優れた性能上の利点をもたらす。 この実施例において、ハードウェアプロセッサ100(第1図参照)は、JA VAバイトコードを含む仮想マシン命令を処理する。ハードウェアプロセッサ1 00は、後により完全に説明するように、バイトコードの大部分を直接実行する 。しかし、バイトコードのいくつかの実行は、マイクロコードを介して実現され る。 ハードウェアプロセッサ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図に示すユニット群を用いて実現されたパイプライン処理段には、フェッ チ段階、デコード段階、実行段階、及びライトバック段階が含まれる。必要なら ば、メモリアクセスや例外解決のための別の段階がハードウェアプロセッサ10 0内に設けられる。 第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図)の先頭を指定するポインタOPTO Pを含むレジスタ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は、主にメソッド用の情報の リポジトリとして使用される。任意の時点において、ハードウェアプロセッサ1 00は1つのメソッドを実行している。それぞれのメソッドは、メモリ空間、即 ちローカル変数、オペランドスタック、及び実行環境構造の組に対して割り当て られたスタック400上のメソッドフレームを有する。 新たなメソッドフレーム、例えばメソッドフレーム410は、実行段階303 (第3図)におけるメソッド呼び出し時にハードウェアプロセッサ100により 割り当てられ、現在フレーム、即ちその時点で処理されているメソッドのフレー ムとなる。現在フレーム410(第4A図)は、他のメソッドフレームと共に、 様々なメソッド呼び出し状況に応じて、以下の6っのエントリの全て又は一部を 含み得る。その6つのエントリとは即ち、 1.オブジェクト参照 2.渡される引数 3.ローカル変数 4.呼び出しを行ったメソッドコンテキスト 5.オペランドスタック 6.メソッドからの戻り値 である。 第4A図において、オブジェクト参照、渡される引数、及びローカル変数は、 引数及びローカル変数エリア421に含められる。呼び出しを行ったメソッドコ ンテキストは、フレーム状態とも称される実行環境422に含められ、それは更 にメソッド呼び出し命令の隣の仮想マシン命令、例えばJAVAオペコードのア ドレスである復帰プログラムカウンタ値431、呼び出しメソッドのフレームの 位置である復帰フレーム4 32、呼び出しメソッドのコンスタントプールテーブルを指定する復帰コンスタ ントプールポインタ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にプッシュし、後にリターンが行われる前に呼び出しを行うメ ソッドコンテキストを再びストアするためにこの情報を利用する。ポインタFRAM E(第1図及び第4A図参照)は、現在メソッドの実行環境を指定するためのポ インタである。ここに示す実施例においては、レジスタセット144(第1図) のそれぞれのレジスタが32ビットの幅を有する。 オペランドスタック423は現在メソッド内の仮想マシン命令の実行 をサポートするために割り当てられる。プログラムカウンタレジスタPC(第1図 )は、次の命令のアドレス、例えば実行されるオペレーションのオペコードを含 む。オペランドスタック423(第4A図)上の位置を用いて、命令実行のため のソースストレージ位置及びターゲットストレージ位置の双方を提供する仮想マ シン命令のオペランドを格納する。オペランドスタック423のサイズは、JA VAコンパイラJAVAC(第2図)にスタティックに決定され、ハードウェアプロ セッサ100はそれに従ってオペランドスタック423用の空間を割り当てる。 レジスタOPTOP(第1図及び第4A図)は、オペランドスタック423の先頭を 指定するポインタを保持する。 呼び出されたメソッドは、その実行の結果を呼び出しを行ったスタックの先頭 に戻し、従って呼び出しを行った側は、オペランドスタック参照を有する戻り値 にアクセスできることになる。この戻り値は、オブジェクト参照又は引数がメソ ッドの呼び出しの前にプッシュされる領域に置かれる。 JAVA仮想マシン上でのシミュレーションの結果により、メソッド呼び出し は、実行時間の多くの部分を(20〜40%)を占めていることが分かった。仮 想マシン命令の実行を促進するためのこの魅力的な目標が与えられたことにより 、メソッド呼び出しのためのハードウェアサポートは、後に完全に説明するよう にハードウェアプロセッサ100に含められる。 新たに呼び出されたメソッドのスタックフレームの始まり、即ち呼び出した側 によって渡される引数及びオブジェクト参照は、オブジェクト参照及び入ってく る引数が呼び出し側のスタックの先頭から来ているため、スタック400上に既 にストアされている。上に説明したように、スタック400上のこれらの項目に 後続して、ローカル変数がロードさ れ、次いで実行環境がロードされる。 このプロセスをスピードアップするための1つの方法は、ハードウェアプロセ ッサ100がバックグラウンドで実行環境をロードし、それまでに何がロードさ れたかを、例えば単純な1ビットのスコアボードにより示すことである。ハード ウェアプロセッサ100は、例えスタック400が完全にロードされていなくて も、呼び出されたメソッドのバイトコードをできる限り速く実行しようとする。 既にロードされた変数にアクセスがなされる場合、スタック400のロードと実 行がオーバーラップし、そうでない場合には、ハードウェアインターロックが生 じ、ハードウェアプロセッサ100が、ロードされるべき実行環境における変数 を待つ状態となる。 第4B図に示すのはメソッド呼び出しを加速する他の方法である。スタック4 00にメソッドフレーム全体をストアする代わりに、各メソッドフレームの実行 環境が、メソッドフレームのオペランドスタック及びローカル変数エリアは別に ストアされる。従って、この実施例では、スタック400Bが改変されたメソッ ドフレーム、例えばローカル変数エリア421及びオペランドスタック423の みを有する改変されたメソッドフレーム410Bを含むことになる。メソッドフ レームの実行環境422は、実行環境メモリ440にストアされる。実行環境メ モリ440実行環境をストアすることにより、スタックキャッシュ155におけ るデータ量が少なくなる。従って、スタックキャッシュ155のサイズを小さく することができる。更に、実行環境メモリ440及びスタックキャッシュ155 は同時にアクセスすることになる。従って、メソッド呼び出しは、スタック40 0Bへのデータのロード又はストアと同時並行的に実行環境のロード又はストア を行うことにより加速できることになる。 スタック管理ユニット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 environm ent dribble manager unit)460、及び実行管理スタック制御ユニット470 を加えている。一般に、実行ドリブル管理ユニット460は、スピル(spill) オペレーション又はフィル(fill)オペレーションの間に、実行環境キャッシュ 450と実行環境メモリ440との間で実行環境全体を転送する。I/Oバス及びメモリインタフェースユニット I/Oバス及びメモリインタフェースユニット110(第1図)はインタフェー スユニット110とも称し、ハードウェアプロセッサ100と、 実施例においては外部メモリを含み、所望に応じてハードウェアプロセッサ10 0と同じチップ上のメモリストレージ及びインタフェース或いはその何れかを含 み得るメモリ階層を実現する。この実施例においては、I/Oコントローラ111 が外部I/Oデバイスに対してインタフェースし、メモリコントローラ112が、 外部メモリに対してインタフェースする。ここで、外部メモリとは、ハードウェ アプロセッサ100の外部にあるメモリを意味する。しかし、外部メモリは、ハ ードウェアプロセッサ100と同じチップ上に含められても良く、或いはハード ウェアプロセッサ100を含みチップの外部に設けられても良く、又はチップの 内外双方に設けられても良い。 別の実施例では、I/Oデバイスに対するリクエストはメモリコントローラ11 2を通り、メモリコントローラ112はハードウェアプロセッサ100を含むシ ステム全体のアドレスマップを保持する。この実施例のメモリバス上では、ハー ドウェアプロセッサ100が唯一のマスタ(master)であり、メモリバスの使用 を調整する必要はない。 従って、I/Oバス及びメモリインタフェースユニット110をインタフェース する入出力バスの別の実施例は、PCI、PCMCIA、又は他の標準的なバスに対する 直接のサポートを提供する、サポーティングメモリマップスキームを含む。高速 グラフィックス(w/VIS又は他の技術)は、所望に応じてハードウェアプロセッ サ100と同一のチップ上に含められ得る。 I/Oバス及びメモリインタフェースユニット110は、外部メモリに対する読 み出し及び書き込みリクエストを発生する。詳述すると、インタフェースユニッ ト110は、命令キャッシュ及びデータキャッシュコントローラ121及び16 1を外部メモリに対してインタフェースする。インタフェースユニット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バイトを命令バッファ1 24に読み込ませることができる。最大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にて同じ日に出願された、"INSTRUCTI ON FOLDING FOR A STACK-BASED MACHINE"というタイトルの米国特許出願第08 /xxx,xxx号(発明者Marc Tremblay and Jas Michael O'Connor)を参照 されたい。これを参照して、全体をここに組み込んでいる。典型的なプロセッサ 100の実施例では、第1バイトが、第1の仮想マシン命令に対応し、多数バイ ト命令であるなら、第1及び第2の命令はフォールディングされない。 付加的な現在オブジェクトローダフォルダ132は、上記の、さらにより詳細 には本発明の譲渡人に譲渡され、代理人整理番号SP2036にて同じ日に出願 された、"INSTRUCTION FOLDING FOR A STACK-BASED MACHINE"というタイトルの 米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Mich ael O'Connor)に記載されており、参照して全体をここに組み込んでいるような 、命令フォールディングを、シミュレーション結果が特に頻繁に、それゆえ最適 化のための所望のターゲットになるように示される仮想マシン命令シーケンスに おいて利用する。特に、メソッド呼出し(method invocation)は一般的に、ス タックオペランド上の対応するオブジェクトに対するオブジェクトリファレンス をロードし、そのオブジェクトからフィールドをフェッチする。命令フォールデ ィングにより、ほとんど共通の仮想マシン命令シーケンスが、等価的にフォール ディングされた演算を用いて実行されるようになる。 高速型命令(quick variant)は、仮想マシン命令セットの一部ではなく(付 録Iの第3章を参照されたい)、JAVA仮想マシンインプリメンテーリョンの 外側には現れない。しかしながら、仮想マシンインプリメンテーリョンの内側で は、高速型命令は有効に最適化されいること がわかる(本明細書の不可欠な部分である、付録Iの付録Aを参照されたい)。 非高速−高速翻訳(quick translator)キャッシュ131において、種々の命令 を高速型命令に更新するための書込みをサポートすることにより、通常の仮想マ シン命令は高速仮想マシン命令に変更され、高速型命令によりもたらされる大き な利点を利用することができる。特に、より詳細に、本発明の譲渡人に譲渡され 、代理人整理番号SP2039にて同じ日に出願された、NON-QUICK INSTRUCTIO N ACCELERATOR AND METHOD OF IMPLEMENTING SAMEというタイトルの米国特許出 願第08/xxx,xxx号(発明者Mark Tremblay and James Michael O'Conn or)に記載されており、参照して全体をここに組み込んでいように、命令の実行 を開始するために必要とされる情報が初めにアセンブルされているとき、その情 報は非高速−高速翻訳キャッシュ131におけるタグとしてプログラムカウンタ PCと共にキャッシュ内にストアされ、その命令は高速型命令として識別される 。1つの実施例では、これが自己修飾コード(self-modifying code)を用いて 行われる。 その命令の後続呼出しにおいて、命令デコードユニット130は、その命令が 高速型命令として識別され、実際、非高速−高速翻訳キャッシュ131の命令の 実行を開始するために必要とされる情報を回収するということを検出する。非高 速−高速翻訳キャッシュはハードウエアプロセッサ100の付加的な機構である 。 分岐に関しては、ほとんどのインプリメンテーリョンに対して高速分岐分解を 有する非常に短いパイプで十分である。しかしながら適切で簡単な分岐予測機構 、例えば分岐予測回路133を別に導入することができる。分岐予測回路133 に対するインプリメンテーリョンは、オペコードに基づく分岐、オフセットに基 づく分岐、或いは2ビットカウンタ 機構に基づく分岐を含む。 JAVA仮想マシン仕様は、実行の際にメソッドを呼出す、命令invokenonvir tual、オペコード183を定義する。そのオペコードには、インデクスバイト1 及びインデクスバイト2が後続する(付録I参照)。オペランドスタック423 は、この命令が実行されるとき、1つのオブジェクトに対する1つのリファレン ス及びいくつかの数の引数(argument)を含む。 インデクスバイト1及び2は、現在クラスのコンスタントプール内にインデク スを発生させるために用いられる。そのインデクスにおけるコンスタントプール 内の項目は、完全なメソッドシグネチャ及びクラスを指示する。シグネチャは付 録Iにおいて定義され、その記載は参照してここに組み込んでいる。 メソッドシグネチャ、すなわち各メソッドに対する、短い、固有の識別子は、 指示されるクラスのメソッドテーブルにおいて探索される。その探索(lookup) の結果は、メソッドのタイプとそのメソッドに対する引数の数を示すメソッドブ ロックである。オブジェクトリファレンス及び引数は、このメソッドのスタック からポップされ、新しいメソッドのローカル変数の初期値になる。その後実行が 新しいメソッドの第1の命令を用いて再開される。実行の際に、命令invokevirt ual、オペコード182及びinvokestatic、オペコード184は、まさに記載さ れた処理と同様の処理を呼出す。各場合に、ポインタがメソッドブロックを探索 するために用いられる。 メソッド引数キャッシュ134は、ハードウエアプロセッサ100の付加的な 機構でもあり、第1の実施例において、タグとなるそのメソッドブロックに対す るポインタと共に、そのメソッドに対する第1の呼出し後に用いるためのメソッ ドのメソッドブロックをストアするために用 いられる。命令デコードユニット130は、インデクスバイト1及び2を用いて ポインタを発生させ、その後ポィンタを用いてキャッシュ134におけるそのポ インタに対するメソッドブロックを回収する。これにより、後続するメソッドの 呼出しにおいて、背景内でより迅速に新たに呼出されるメソッドに対するスタッ クフレームを構築することができるようになる。別の実施例は、キャッシュ13 4内のリファレンスとして、プログラムカウンタ或いはメソッド識別子を用いる こともある。もしキャッシュミスがあるなら、その命令は通常の形態において実 施され、キャッシュ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内の翻訳部、或いは単に ソフトウエア翻訳部のいずれかを用いて行われる。デュアル命令セットプロセッ サのさらなる例としては、本発明の譲渡人に譲渡され、代理人整理番号SP20 42にて同じ日に出願された、"A PROCESSOR FOR EXECUT INGINSTRUCTION SETSR ECEIVED FROM ANETWORK OR FROM ALOCAL MEM0RY"というタイトルの米国特許出 願第08/xxx,xxx号(発明者Marc Tremblay and James Michael O'Conn or)を参照され たい。これを参照して、全体をここに組み込んでいる。整数実行ユニット 整数実行ユニットIEUは、命令デコードユニット130、整数ユニット14 2並びにスタック管理ユニット150を含む、浮動小数点関連命令を除く、全て の仮想マシン命令の実行を支配する。浮動小数点関連命令は浮動小数点ユニット 142において実行される。 整数実行ユニットIEUは、命令キャッシュユニット120とフロントエンド にて対話し、浮動小数点命令を実行するための浮動小数点ユニット(FPU)1 43を用いて、最終的にはロード/ストア命令関連命令を実行するためのデータ キャッシュユニット(DCU)160を用いて、命令をフェッチする。また整数 実行ユニットIEUは、マイクロコードROMを有し、マイクロコードROMは 、整数演算に関連する一定の仮想マシン命令を実行するような命令を含む。 整数実行ユニットIEUは、スタック400のキャッシュ部分、すなわちスタ ックキャッシュ155を含む。スタックキャッシュ155は、現在メソッド(cu rrent method)に関連するオペランドスタックエントリ及びローカル変数エント リ(local variable entry)、すなわちオペランドスタック423エントリ及び ローカル変数記憶421エントリを迅速に記憶する。スタックキャッシュ155 は、現在の命令に関連する全てのオペランドスタックエントリ及びローカル変数 エントリを十分に記憶することができるが、オペランドスタックエントリ及びロ ーカル変数エントリの数によっては、全てのローカル変数エントリより少ない数 、或いはローカル変数エントリとオペランドスタックエントリの両方の数より少 ない数が、スタックキャッシュ155において表されるかもしれない。同様に付 加的なエントリ、すなわち呼出しメソッド(calling method)に対するオペラン ドスタックエントリ及びローカル変数エン トリは、もし空間的に許容されるなら、スタックキャッシュ155において表さ れるかもしれない。 スタックキャッシュ155は、64エントリ32ビット幅のレジスタ配列であ り、1つの実施例ではレジスタファイルとして物理的に実現される。スタックキ ャッシュ155は3つの読出しポートを有しており、その内の2つは整数実行ユ ニットIEU専用であり、残りの1つはドリブル(dribble)管理ユニット15 1用である。またスタックキャッシュ155は、2つの書込みポートを有し、1 つは整数実行ユニットIEU専用であり、もう1つはドリブル管理ユニット15 1用である。 整数ユニット142は、種々のポインタを保持しており、ポインタは、スタッ クキャッシュ155内にあるローカル変数のような変数値、並びにオペランドス タック値にアクセスするために用いられる。また整数ユニット142はスタック キャッシュヒットが起こるか否かを検出するためのポインタを保持する。実行時 例外は捕捉され、マイクロコードROM149及び回路170における情報を用 いて実現される例外ハンドラにより処理される。 整数ユニット142は、算術演算をサポートするための32ビットALUを含 む。ALUによりサポートされる演算は、加算、減算、けた送り(シフト)、論 理積、論理和、排他的論理和、比較、超過(greater than)、未満(less than )並びに読飛ばし(バイパス)を含む。またALUは、別々の比較器が分岐命令 の結果を判定する間に、条件付き分岐のアドレスを判定するための用いられる。 パイプラインを介して手際よく実行される大部分の共通命令セット(most com mon 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がデコード段3 02において何バイト消費するかをシグナリングすることにより応答する。また 命令キャッシュユニットインタフェースは命令キャッシュユニット120に対し て、分岐誤り予測(branch mis-predict)条件、並びに実行段303における分 岐アドレスをシグナリングする。また、必要なときには、同様にトラップが命令 キャッシュユニット120に対して指示される。命令キャッシュユニット120 は、命令デコードユニット130に対していかなる有効データもアサートしない ことにより、整数ユニット142をホールドすることができる。命令デコードユ ニット130はバイトアライナ回路122に対してシフト信号をアサートしない ことにより命令キャッシュユニット120をホールドすることができる。 また整数実行ユニットIEUのデータキャッシュインターフェースは、有効− 許容インターフェースであり、そこでは整数ユニット142が、 実行段303において、データキャッシュユニット160内のデータキャッシュ コントローラ161に対して、例えば非キャッシュ、特殊ストア(special stor e)等の属性と共に、ロード或いはストア演算をシグナリングする。データキャ ッシュユニット160は、ロード演算中のデータを復帰し、データコントロール ユニットホールド信号を用いて整数ユニット142を制御することができる。デ ータキャッシュヒット中に、データキャッシュユニット160は要求データを復 帰し、それからパイプラインを解放する。 またストア演算中に整数ユニット142は、実行段303内にアドレスと共に データを供給する。データキャッシュユニット165は、もしデータキャッシュ ユニット165がビジー、すなわちラインフィルであるなら、キャッシュ段30 4内のパイプラインをホールドすることができる。 浮動小数点演算は、整数実行ユニット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つの書込みポートであるスタックキャッシュ15 5、実行ユニット140に対するオペランドを回収し、ライトバックレジスタ、 すなわちデータキャッシュ165から戻されるデータをスタックキャッシュ15 5内にストアするために用いられる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からスタックキャッシュ1 55への、並びにスタックキャッシュ155からデータキャッシュ165へのデ ータを投機的にドリブルすることにより、スタックキャッシュ155のスピル( spill)及びフィル(fill)を処理する。ドリブル管理部151は、パイプライ ンストール信号(pipeline stall signal)を発生させ、スタックオーバーフロー 条件或いはアンダーフロー条件が検出されるとき、パイプラインをストールする 。またドリブル管理部151はデータキャッシュユニット160に送出される要 求のスタックを保持する。データキャッシュユニット160に対する1つの要求 は32−bit連続ロード或いはストア要求である。 スタックキャッシュ155のハードウエア構成は、長オペランド(長い整数及 び倍精度浮動小数点数)の場合を除き、オペコードに対する暗黙のオペランドフ ェッチにより、オペコードの実行に対する待ち時間が加わらないようにする。ス タックキャッシュ155において維持されるオペランドスタック423(第4A 図)及びローカル変数記憶装置422におけるエントリの数は、ハードウエア/ パフォーマンスのトレードオフを表す。少なくとも数個のオペランドスタック4 23及びローカル 変数記憶装置エントリが良好なパフォーマンスを得るために必要とされる。第1 図の典型的な実施例では、少なくともオペランドスタック423及び最初の4つ のローカル変数記憶装置422エントリの上位の3エントリがスタックキャッシ ュ155内に好適に表される。 スタックキャッシュ155により供給される1つの重要な機能(第1図)は、 レジスタファイルをエミュレートすることであり、上位2つのレジスタへのアク セスが余分なサイクルを用いずに常に可能である。もし適用な知的機能が、背景 においてメモリから値をロードするために、或いはメモリに値をストアするため に与えられ、従って入ってくる仮想マシン命令のためにスタックキャッシュ15 5を準備するなら、小さいハードウエアスタックでも十分である。 上述のように、スタック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 STORAG E USING MULTIPLE MEMORY CIRCUITS"というタイトルの米国特許出願第08/x xx,xxx号(発明者James Michael O'Connor and Marc Tremblay)に記載さ れており、参照して、全体をここに組み込んでいる。 ある実施例では、スタック管理ユニット150は、付加的なローカル変数ルッ クアサイド(look-aside)キャッシュ153を含む。キャッシュ153は応用時 に最も重要であり、あるメソッドに対するローカル変数及びオペランドスタック 423(第4A図)がスタックキャッシュ155上に配置されない。キャッシュ 153がハードウエアプロ七ッサ100に含まれないような場台には、ローカル 変数がアクセスされるとき、スタックキャッシュ155においてミスがあり、実 行ユニット140はデータキャッシュユニット160にアクセスし、次々に実行 を遅らせる。対照的に、キャッシュ153を有する場合は、ローカル変数はキャ ッシ ュ153から回収され、実行に遅れは生じない。 ローカル変数ルックアサイドキャッシュ153のある実施例は、スタック40 0のメソッド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のときアクセスされる。キャッシュ1 53の種々に面は異なるサイズである場合もあるが、一般にそのキャッシュの各 面は経験的に画定される固定サイズを有するということに注意されたい。 新しいメソッド、例えばメソッド2が呼出されるとき、キャッシュ153の新 しい面421A_2がそのメソッドのローカル変数と共にロードされ、ある実施 例ではカウンタであるメソッド番号レジスタ402が、変更、すなわちインクリ メントされ、その新しいメソッドに対するローカル変数を含むキャッシュ153 の面を示す。ローカル変数はキャッシュ153の面内にオーダされ、キャッシュ 153は有効に直接マップ化(direct-mapped)キャッシュとなることに注意さ れたい。従って、ローカル変数が現在メソッドに対して必要とされるとき、その 変数はキャッシュ153の最も新しい面、すなわちメソッド番号402により識 別される面から直接アクセスされる。現在メソッドが、例えばメソッド2に戻る とき、メソッド番号レジスタ402は変更、例えばデクリメントされ、キャッシ ュ153の以前の面421A_1を示す。キャッシュ1 53は必要とされる広さ及び深さになることができる。データキャッシュユニット データキャッシュユニット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に送られる。データキャッシュ1 65に対する非配列化(non-aligned)ロード及びストアはソフトウエアにおい てトラップされる。 データキャッシュ165は、双方向セット連想型、ライトバック、ライトアロ ケート(write allocate)、16−byteラインキャッシュである。キャッシ ュサイズは0,1,2,4,8,16Kbyteサイズに構成可能である。デフ ォルトサイズは8Kbyteである。各ラインはそのラインに関連するキャッシ ュタグストアエントリを有する。キャッシュミス時に、16byteのデータが 外部メモリからキャッシュ165内に書き込まれる。 各データキャッシュタグは、20−bitアドレスタグフィールド、1つの有 功ビット、1つのダーティビットを含む。また各キャッシュタグは、置換えポリ シー(replacement policy)のために用いられる最低使用頻度ビット(least re cently used bit)に関連する。多重キャッシュサイズをサポートするために、 タグフィールドの幅は変更することができる。もしプロセッササービスレジスタ 内のキャッシュイネーブルビットがセットされていないなら、ロード及びストア はデータキャッシュ制御部161により、キャッシュ不可能命令のように扱われ る。 1つの16−byteライトバックバッファが、置換えられるために必要とな るダーティキャッシュラインをライトバックするために与えられる。データキャ ッシュユニット160は、読出し時に4byteの最大値を与えることができ、 データの4byteの最大値は1サイクル内にキャッシュ161に書き込まれる ことができる。診断読出し及び書込みは、キャッシュ上で行うことができる。メモリ割当てアクセラレータ 1つの実施例において、データキャッシュユニット165はメモリ割当てアク セラレータ166を含む。一般に、新しいオブジェクトが生成されるとき、その オブジエクトに対するフィールドは外部メモリからフ ェッチされ、データキャッシュ165内にストアされ、それからそのフィールド は0にクリアされる。これがメモリ割当てアクセラレータ166により削除され る処理にかかる時間である。新しいオブジェクトが生成されるとき、いかなるフ ィールドも外部メモリから回収されない。むしろ、メモリ割当てアクセラレータ 166は単に、データキャッシュ165内に0の列をストアし、データキャッシ ュ165のその列をダーティとしてマークする。メモリ割当てアクセラレータ1 66はライトバックキャッシュについて特に有利である。メモリ割当てアクセラ レータ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を含み、オペコード1 71により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にて同じ日に出願された、"L0OK-UP SWITCH ACCELERATOR AND ME THOD OF OPERATING SAME"というタイトルの米国特許出願第08/xxx,xx x号(発明者Marc Tremblay and James Michael O'Connor)にさらに詳細に記載 されており、参照して、全体をここに組み込んでいる。 あるオブジェクトのメソッドの実行を開始するための処理において、実行ユニ ット140は、メソッドベクトルにアクセスし、メソッドベクトル内のメソッド ポインタの1つ、すなわち無方向(indirection)の1つのレベルを回収する。 その後実行ユニット140は、アクセスされるメソッドポインタを用いて、対応 するメソッド、すなわち無方向の第2のレベルにアクセスする。 実行ユニット140内の無方向のレベルを減少させるために、各オブジェクト は、そのオブジェクトによりアクセスされるべき各メソッドの専用の複製を与え る。その後実行ユニット140は、無方向の1つのレベルを用いてそのメソッド にアクセスする。すなわち、各メソッドはそのオブジェクトから導出されるポイ ンタにより、直接アクセスされる。 これはそのメソッドポインタにより予め導入されていた無方向のレベルを削除す る。無方向のレベルを減少させることにより、実行ユニット140の演算を加速 することができる。実行ユニット140により経験された無方向のレベルを減少 させることによる実行ユニット140の加速は、本発明の譲渡人に譲渡され、代 理人整理番号SP2043にて同じ日に出願された、"REPLICATING CODE TO ELI MINATE ALEVEL OF INDIRECTION DURING EXECUTION OF AN OBJECT ORIENTE D COMPUTER PR0GRAM"というタイトルの米国特許出願第08/xxx,xxx号 (発明者MarcTremblay and James Michael O'Connor)にさらに詳細に記載され ており、参照して、全体をここに組み込んでいる。ゲットフィールド−プットフィールドアクセラレータ 他の特定の機能ユニット及び種々の翻訳ルックアサイドバッファ(TLB)タ イプの構造は、ハードウエアプロセッサ100に任意に含まれ、コンスタントプ ールへのアクセスを加速する。例えば、JAVA仮想マシン仕様は、実行時にオ ブジェクト内にフィールドをセットする、命令putfield、オペコード181、並 びに実行時にオブジェクトからフィールドをフェッチする、命令getfield、オペ コード180を定義する。これら両方の命令では、そのオペコードには、インデ クスバイト1及びインデクスバイト2が後続する。オペランドスタック423は 、命令getfieldの場合のオブジェクトに対する参照のみを除いて、命令putfield に対する値により後続されるオブジェクトに対する参照を含む。 インデクスバイト1及び2は、現在クラスのコンスタントプール内にインデク スを発生させるために用いられる。そのインデクスでのコンスタントプールにお ける項目は、クラス名及びフィールド名に対するフィールド参照である。その項 目は、バイト状態でのフィールド幅及びバイ ト状態でのフィールドオフセットの両方を有するフィールドブロックポインタに 分解される。 実行ユニット140内の任意のゲットフィールド−プットフィールドアクセラ レータ146は、タグとしてフィールドブロックポインタに分解されたコンスタ ントプール内の項目を識別するために用いられるインデクスと共に、命令の最初 の呼出し後に用いるために、キャッシュ内に命令getfield及び命令putfieldに対 するフィールドブロックポインタをストアする。引き続いて、実行ユニット14 0はインデクスバイト1、及び2を用いて、インデクスを発生させ、ゲットフィ ールド−プットフィールドアクセラレータ146にインデクスを供給する。もし そのインデクスがタグとしてストアされたインデクスの1つに一致する、すなわ ちヒットであるなら、そのタグに関連するフィールドブロックポインタは回収さ れ、実行ユニット140により用いられる。逆にもし一致が見出されなければ、 実行ユニット140は、上述の演算を実行する。ゲットフィールド−プットフィ ールドアクセラレータ146は、上述の迅速な命令翻訳の1つの実施例において 用いられた自己修飾コード(self-modifying code)を用いることなく実現され る。 1つの実施例では、ゲットフィールド−プットフィールドアクセラレータ14 6はタグとして機能するインデクスを保持する第1の部分、及びフィールドブロ ックポインタを保持する第2の部分を有する連想メモリを含む。あるインデクス が、入力部分を通して、その連想メモリの第1の部分に加えられる、かつストア されたインデクスの1つに一致するとき、入力インデクスに一致したストアされ たインデクスに関連するフィールドブロックポインタは、その連想メモリの第2 の部分から出力される。境界チェックユニット 実行ユニット140内のバウンドチェックユニット147(第1図)は、任意 のハードウエア回路であり、配列(array)の要素への各アクセスをチェックし 、そのアクセスがその配列内の位置に対するものであるか否かを判定する。その アクセスがその配列内の位置に対するものであるとき、境界チェックユニット1 47は、実行ユニット140に対して、アクティブ配列境界例外信号を発行する 。アクティブ配列境界例外信号に応じて、実行ユニット140は、マイクロコー ドROM141内にストアされた、その境界外配列アクセス(out of bounds ar ray access)を処理する例外ハンドラの実行を開始する。 1つの実施例では、境界チェックユニット147は、配列に対する配列識別子 、例えばプログラムカウンタ値、並びにその配列に対する最大値及び最小値をス トアされた連想メモリ素子を含む。ある配列がアクセスされる、すなわちその配 列に対する配列識別子が連想メモリ素子に適用されるとき、さらにその配列がそ の連想メモリ素子において表されると仮定するとき、ストアされた最小値は、比 較素子とも呼ばれる、第1の比較器素子に対する第1の入力信号であり、ストア された最大値は、比較素子とも呼ばれる、第2の比較器素子に対する第1の入力 信号である。その第1及び第2の比較器素子に対する第2の入力信号は、配列の 素子のアクセスに関連する値である。 もし配列の素子のアクセスに関連する値が、ストアされた最大値以下で、かつ ストアされた最小値以上であるなら、いずれの比較器素子も出力信号を発生しな い。しかしながら、もしこれらの条件のいずれかが正しくないなら、適切な比較 器素子がアクティブ配列境界例外信号を発生する。境界チェックユニット147 の1つの実施例のさらに詳細な内容は、本発明の譲渡人に譲渡され、代理人整理 番号SP2041にて同じ日に出願された、"PROCESSOR WITH ACCELERATED ARRA Y ACCESS BOUNDS CHECKING"というタイトルの米国特許出願第08/xxx,xx x号(発明者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と同じチップ内に集積化される。 第6A図は、本発明の一実施例による1つのシリコンチップ上に実現された二 重命令セットプロセッサ690のブロック図である。二重命令セットプロセッサ 690は仮想マシン命令、即ち例えばネットワークから受け取った第1命令セッ トをデコードし実行すると共に、例えばロー カルメモリやネットワークから供給された第2命令セットをデコードし実行する ことができる。 第1命令セット及び第2命令セットは、それぞれ異なるコンピュータプロセッ サアーキテクチャに適したものである。一実施例では、第1命令セットがJAV A仮想マシン命令のような仮想マシン命令であり、第2命令セットが、上述のア ーキテクチャの様な従来型マイクロプロセッサアーキテクチャのネイティブ命令 である。 初めに、二重命令セットプロセッサ690の起動時、二重命令セットプロセッ サ690上で実行されるオペレーティングシステムがネイティブ命令セットの命 令を実行するプロセッサを起動する。仮想マシン命令セットの命令を必要とし又 は利用するアプリケーションがロードされたとき、このオペレーティングシステ ムはそのデータストリームを翻訳ユニット691に送る。 一実施例では、翻訳ユニット691は仮想マシン命令からネイティブ命令に変 換する翻訳部を備えたROMである。このROMは、プロセッサ690上に仮想マシン 命令を実現するのに使用されるマイクロコードも有し得る。別形態では、翻訳部 のソフトウェアインプリメンテーションが、プロセッサ690により実行され、 データストリームの仮想マシン命令がネイティブ命令に変換される。 翻訳ユニット691からのネイティブ命令は、デコードユニット692により デコードされる。このデコードユニット692は従来型のマイクロプロセッサア ーキテクチャで使用するための従来型のデコードユニットである。デコード済み の命令は、実行ユニット693で実行される。この実行ユニット693は従来型 マイクロプロセッサアーキテクチャで使用される従来型実行ユニットである。マ イクロコードルーチンが、翻訳ユニット691に含められ、JAVA仮想マシン 命令を実現する場合、 マイクロコードルーチンは実行ユニット693にその実行のため直接渡される。 当業者は、プロセッサ690が本発明の特徴から注意がそれることを避けるた めに第6A図においては示されていない他の機能ユニットや構造等を含むことを 理解されよう。更に、使用される特定の従来型マイクロプロセッサアーキテクチ ャによっては、興味の対象である仮想マシン環境をサポートするために追加のマ イクロコードが必要となるものがある。勿論、従来型マイクロプロセッサアーキ テクチャの処理能力の向上のためにそれが必要な場合は、上述の様々なキャッシ ュやアクセラレタユニットを、従来型マイクロプロセッサアーキテクチャ内に組 み込むことができる。 二重命令セットプロセッサ690は翻訳済みの仮想マシン命令を直接実行し、 従ってソフトウェアインタープリタやジャストインタイムコンパイラは不要であ る。翻訳済みの仮想マシン命令が直接実行されることから、その処理能力はソフ トウェアインタープリタやジャストインタイムコンパイラよりも優れている。 二重命令セットプロセッサ690の一実施例では、プロセッサステータスレジ スタの1つのビットが、動作モード選択ビットとして定義されている。この動作 モード選択ビットが第1状態にあるとき、信号MODE(第6A図)がアクティブで あり、データストリーム695はダマルチプレクサ696を介してデコードユニ ット692に渡される。動作モード選択ビットが第2状態にあるとき、動作モー ド信号MODEはアクティブ状態にはなく、データストリーム695はダマルチプレ クサ696を介して翻訳ユニット691に渡され、翻訳ユニット691からの翻 訳済みの命令ストリームはデコードユニット692に入力される。従って、この 実施例では、仮想マシンが従来型マイクロプロセッサアーキテクチ ャにおいて実現されている。 第6B図に示す別の実施例では、二重命令セットプロセッサ600(プロセッ サ600とも称する)が、スタック655(第4A図のスタック400と同一の スタックであり得る)、ネットワーク又はローカルメモリからの命令ストリーム を受け取る第1命令デコーダ635、ネットワーク又はローカルメモリから選択 された命令を受け取る第2命令デコーダ660、第1実行ユニット640を備え た命令実行ユニット650、及び第2実行ユニット662を備えており、スタッ ク655(第4A図のスタック400であり得る)は、第1実行ユニット640 によって使用される。当業者は、プロセッサ600が他の機能ユニットを備える ことを理解されよう。しかし、この他の機能ユニットは、本発明においては重要 ではなく、従って説明が本発明の内容からそれるのを避けるためここでは省略さ れている。更に、第2実行ユニット622は第1実行ユニット640が必要とす る環境のサポートのためのマイクロコードルーチンを備え得る。 この実施例では様々な機能ユニットが1つのチップ上に示されているが、これ は実施例に過ぎず、本発明をこのような形態の実施例に限定しようとするもので はない。この明細書の説明を参照することで、当業者は、本発明の原理を個別の プロセッサを用いる形態で、立体型のプロセッサを用いる形態で、或いは他の必 要な物理的形態で実現することができよう。 第2命令デコーダ660は従来より周知の型のデコーダであり得る。このよう なデコーダには、限定を意図していないが、スタック命令の他のセットをデコー ドするデコーダが含まれる。本発明の一実施例では、第2命令デコーダ660は 、RISC型命令デコーダである。この実施例では、第2実行ユニット662は 命令実行ユニット650におれる第1 実行ユニット640のスタックアーキテクチャの反対側のフラットレジスタに接 続されたRISC型命令実行ユニットである。本発明の更に別の実施例では、第 2命令デコーダ660はCISC型命令デコーダであり、第2実行ユニット66 2はCISC型実行ユニットである。更に別の実施例では、第2命令デコーダ6 60はVLIW型命令デコーダであり、第2実行ユニット662はVLIW型実 行ユニットである。 以下に詳細に説明するように、本発明の一実施例では、第1命令デコーダ63 5が命令デコードユニット130(第1図)における命令デコーダ135と等価 なものである。第2命令デコーダ660(第6B図)は、仮想モード命令のスト リームにおけるセットモード命令の実行に応じて稼働され、命令ストリームは第 1命令デコーダユニット635への接続から、第2命令デコーダ660に切り替 えられる。第2命令デコーダ660が一度稼働されると、第2命令デコーダ66 0からのデコード済みの命令が命令実行ユニット650における第2実行ユニッ ト662に供給される。 この構成はいくつかの利点を有する。付録Iに示すように、JAVA仮想マシ ン仕様では、更に拡張を行うためのいくつかのオペコードについては省略してい る。即ち、この仕様では全ての可能な256個のオペコードを定義していない。 しかし、この更なる拡張の可能性をもってしても、必要となり得る全ての命令を 供給するには不十分である。プロセッサ600では、実行ユニット662のネイ ティブ命令を用いて、JAVA仮想マシン仕様における命令を補足することがで きる。例えば、アプリケーションが例えばサイン関数やコサイン関数のような超 越関数を必要とする場合、この超越関数は、セットモード命令及び必要な関数を 実行するために実行ユニット662のネイティブ命令セットにおいて使用される 命令を用いて実現することができる。 従って、本発明の原理によれば、仮想マシン命令の数を限度の256個を越え て増やすための1つの方法はオペコード255の様な特定のオペコードをセット モード命令として割り当てることである。上述のように、セットモード命令の実 行により、第2命令デコーダ660が稼働され、RISC型の命令のような第2 命令セットが、JAVA仮想マシン仕様においてサポートされていない計算を実 行するための第1命令デコーダ660に切り替えられる。 セットモード命令の実行により、オペレーティングシステムがモードビットの 状態を変え、これにより第2命令デコーダ660及び第2実行ユニット662が 稼働される。この計算が終了すると、オペレーティングシステムがその終了を検 出して、オペレーティングシステムはモードビットをリセットし、入力データス トリームが第1命令デコーダ635に戻されることになる。 従って、本発明のこの実施例では、第2命令実行ユニット662がRISC型 実行ユニットである場合、第2命令デコーダ660及び第2実行ユニット662 によるRISC命令の稼働及び実行の仕方は、第7図を参照することにより見る ことができる。セットモード命令701、即ちデータストリーム700(第7図 )におけるオペコード255が、命令デコーダ135(第6B図)によりデコー ドされ、第1実行ユニット640により実行された時、セットモードビットの状 態は第2命令デコーダ660及び第2実行ユニット662を稼働するように変え られる。セットモード命令701のすぐ後に続くデータストリーム700におけ る命令は、RISC命令、即ちRISC実行ユニットに対するオペコード及びそ れが関連するオペランドである。 従って、命令デコーダ135又はプロセッサ600における他のハードウェア は、情報702を第2命令デコーダ660にルーティングし、 命令デコーダ135によるデコードはバイパスされる。例えば、第6A図のデマ ルチプレクサ及び信号MODEが、プロセッサ600に組み込まれ得る。 第6C図は、第1命令デコーダ635、第1実行ユニット640、及びスタッ ク655が、それぞれ以下に詳細に説明するハードウェアプロセッサ100の命 令デコーダ135、実行ユニット140、及びスタックキャッシュ155である 本発明の別の実施例を詳細に示した図である。この実施例では、第1実行ユニッ ト及び第2実行ユニットが分けられて、第2実行ユニット662はフラットレジ スタ664に接続されたRISC実行ユニットである。又、第2実行ユニット6 62は、JAVA仮想マシン環境をサポートするために実行されるマイクロコー ドを含み得る。従って、プロセッサ600及び600Aは、オペコードを含むJ AVA仮想マシン命令を実行することができ、又他のコンピュータプロセッサア ーキテクチャの第2命令セットを実行するために最適化されてもいる。 従って、本発明の原理によれば、命令を含むデータストリームは、第1命令デ コーダ636に供給される。データストリームにおける予め定義された命令の実 行時に、このデータストリームは第2命令デコーダ660へと切り替えられ、こ のデコーダが駆動されてデータストリームにおける後続の情報を処理する。従っ て、命令セットの2つの異なる型、例えばフラットフォーム独立命令セット及び フラットフォーム依存命令セットが本発明の二重命令セットプロセッサ600に よりデコードされ実行され得る。これは、上述のような、第2実行ユニットのオ ペコード空間が、仮想マシンオペコード空間に含められ、仮想マシンの処理能力 を高められるという利点を有する。 第8図には、本発明のプロセッサ690、600、及び600Aの1つである プロセッサ801を用いた、モデム802及びローカルメモリ 804に接続されたコンピュータシステム800のブロック図が示されている。 本発明のこの実施例では、モデム802がインターネットやイントラネットのよ うなネットワークと通信を行い、実行のための仮想マシン命令をそこから受け取 る。別形態では、イントラネットに対して、モデム802がコンピュータシステ ム800においてネットワークカードに置き換えられ得る。従って、モデム80 2はネットワークに接続されて通信か行えるようにする通信インタフェースユニ ットの1例として設けられているものである。当業者には周知のように、通信イ ンタフェースユニットは第1フォーマットの第1命令セットを受け取り、その第 1命令セットを第2フォーマットで出力信号として供給する。 本発明のこの実施例では、プロセッサ801が2つのオペレーションモードを 有する。オペレーションの第1モードでは、プロセッサ801がネットワークか ら実行のため仮想マシン命令のみを受け取る。オペレーションの第2モードでは 、仮想マシン命令における予め定義された命令を受け取った際に、プロセッサ8 01は実行のためローカルメモリ804にストアされた、RISC、X86、Power PC、及び/又は他のプロセッサアーキテクチャの命令セットを受け取って処理 し得る。このようにして、目に見える形でのオペレーションのための命令のよう な仮想マシン命令において実現されていない命令、例えば、モデリング、立体フ ローイング等が、プロセッサ801を用いて完全に実現され得る。当業者は、プ ロセッサ801が、第2の命令型、即ち非JAVA仮想マシン命令を、そのアプ リケーションがセキュリティをかけられていないことをはっきりと認識しつつ、 ネットワークから受取ることができる。 プロセッサ600及び600Aは、多数のアプリケーションを有する。例えば 、コンピュータシステム800は、例えばインターネットのような好適なキャリ アらの、又はローカルメモリ804から供給された JAVA仮想マシン命令をプロセッサ801に供給するように構成される。コン ピュータシステム800のユーザは、JAVAプログラム言語で書かれ、第2図 に示すように処理されて、仮想マシン命令を生成し、JAVA仮想マシン命令が ローカルメモリ804から供給されるようなコンピュータプログラムが、ウイル スや他のソフトウェア上の問題について比較的安全であることを認識できよう。 例えば、ネットワークから受け取ったアプリケーションが必要とするライブラ リは、ローカルメモリ804にストアされ得る。特定のオペレーティングシステ ムやグラフィカルユーザインタフェースは、それらの一部としてライブラリを含 み得る。従って、JAVAプログラミング言語で書かれたコンピュータプログラ ムは、2つの異なるバージョンにコンパイルされ得る。1つのバージョンはセキ ュリティをかけられていないネットワークを介して供給され、他のプロセッサ6 00或いは600A、若しくは他のハードウェアプロセッサ100で処理される ものである。もう1つはローカルメモリ804や他の信用できる環境のようなロ ーカル環境で使用されるものである。 JAVA言語ソースプログラムの2つのコンパイル済みのバージョンの違いは 、ローカルに実行するためにコンパイルされたバージョン、例えばローカルメモ リ804にストアされたバージョンが、セキュリティをかけられていないネット ワークのためのバージョンとして配列境界チェックのような拡張セキュリティチ ェックを有する必要がないという点である。従って、時間がかかり厄介なセキュ リティチェック処理が不要であるためにバイパスされ得る。これによってローカ ル環境におけるプロセッサ600及び600Aの処理能力が増加し、好適なキャ リアを介して受け取った仮想マシン命令を処理するのにもプロセッサを使用する ことができるようになる。 上記の説明では、ネットワークを安全でない環境として考え、ローカルメモリ を信用できる環境として考えていた。しかし、これは1つの例に過ぎない。当業 者はインターネット、イントラネット又は他のネットワークを介した、伝送が保 護されており信用できることを理解されよう。従って、このような状況の下、信 用できる環境用の本発明の機能を使用することができる。同様に、ある状況では ローカルメモリが信用できる環境ではなく、その際には本発明の保護されていな い環境用の機能をそこで使用すべきである。 当業者は、本発明の範囲及び精神の範囲内で、本発明を、ここに開示した実施 例を元に様々に改変して実施することができる。従って、本発明の範囲に属する ことが当業者には明らかな様々な改変は、請求項に記載の本発明の精神及び範囲 に含まれるものと考えられる。
【手続補正書】特許法第184条の8第1項 【提出日】平成10年2月23日(1998.2.23) 【補正内容】請求の範囲 1.ネイティブ命令セットを有する二重命令セットプロセッサにおいて、 コンピュータ独立仮想マシン命令セットに属するコンピュータ独立仮想マシン 命令群をデコードして前記二重命令セットプロセッサのネイティブ命令に変換す るように構成されたコンピュータ独立仮想マシン命令−ネイティブ命令翻訳ユニ ットであって、前記コンピュータ独立仮想マシン命令セットが前記ネイティブ命 令のセットとは異なる、該コンピュータ独立仮想マシン命令−ネイティブ命令翻 訳ユニットと、 前記コンピュータ独立仮想マシン命令−ネイティブ命令翻訳ユニット、及びメ モリからの前記ネイティブ命令をデコードするように構成されている命令デコー ダであって、前記命令デコーダが、第1動作モードでは前記コンピュータ独立仮 想マシン命令−ネイティブ命令翻訳ユニットに接続され、第2動作モードでは前 記メモリに接続される、該命令デコーダと、 前記命令デコーダからのデコード済ネイティブ命令を実行するように構成され ている命令実行ユニットとを有することを特徴とする二重命令セットプロセッサ 。 2.前記コンピュータ独立仮想マシン命令−ネイティブ命令翻訳ユニットが、前 記命令実行ユニットによるセットモード命令の実行に応じて前記命令デコーダに 接続されることを特徴とする請求項1に記載の二重命令セットプロセッサ。 3.前記命令デコーダが、VLIW命令デコーダであることを特徴とする請求項 1に記載の二重命令セットプロセッサ。 4.前記命令デコーダが、CISC命令デコーダであることを特徴とする請求項 1に記載の二重命令セットプロセッサ。 5.前記命令デコーダが、RISC命令デコーダであることを特徴とす る請求項1に記載の二重命令セットプロセッサ。 6.ネットワーク及びローカルメモリと通信可能に接続されるように構成された 二重命令セットプロセッサであって、 前記ネットワーク、または前記ローカルメモリの何れかから受取った第1命令 セットに属する複数の第1命令をデコードするように構成された第1コンピュー タプラットフォーム独立命令デコーダであって、前記第1命令セットがコンピュ ータプラットフォーム独立命令である、該第1コンピュータプラットフォーム独 立命令デコーダと、 第2命令セットに属する複数の第2命令をデコードするように構成された第2 命令デコーダであって、前記第2命令セットが前記第1命令セットとは異なるも のである、該第2命令デコーダと、 前記第1コンピュータプラットフォーム独立命令デコーダによってデコードさ れた前記複数の第1命令を実行し、かつ前記第2命令デコーダによってデコード された前記複数の第2命令を実行するように構成された命令実行ユニットとを有 することを特徴とする二重命令セットプロセッサ。 7.前記第1命令デコーダが、セットモード命令をデコードするように構成され ており、前記セットモード命令が、前記第1命令の1つであって、それに応じて 、前記セットモード命令の後続の命令が前記第2命令デコーダに送られることを 特徴とする請求項6に記載の二重命令セットプロセッサ。 8.前記第1命令のそれぞれが、仮想マシン命令であることを特徴とする請求項 6に記載の二重命令セットプロセッサ。 9.前記仮想マシン命令が、オペコードを含むことを特徴とする請求項8に記載 の二重命令セットプロセッサ。 10.前記ネットワークが、インターネットであることを特徴とする請 求項6に記載の二重命令セットプロセッサ。 11.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項6に記載の二重命令セットプロセッサ。 12.前記二重命令セットプロセッサが、ネットワーク及びローカルメモリと通 信可能に接続され、2つの動作モードの1つで動作可能なように構成されている ことを特徴とし、 前記2つの動作モードの1つでは、前記第1コンピュータプラットフォーム独 立命令デコーダ及び前記命令実行ユニットが、前記ネットワークから受取った命 令を処理し、前記2つの動作モードの他方では、前記第1コンピュータプラット フォーム独立命令デコーダ、前記第2命令デコーダ、及び前記命令実行ユニット が、前記ローカルメモリから受取った命令を処理することを特徴とする請求項6 に記載の二重命令セットプロセッサ。 13.前記二重命令セットプロセッサが、公的キャリアネットワークに通信可能 に接続できるコンピュータシステムに含められていることを特徴とし、 前記コンピュータシステムが、 前記ネットワークに通信可能に接続でき、第1命令セットを受取ることがで きる通信インタフェースユニットと、 第2命令セットのコンピュータプログラムをストアできるメモリとを有する ことを特徴とし、 前記第1コンピュータプラットフォーム独立命令デコーダが、前記通信インタ フェースユニットに接続されて、そこから前記第1命令セットを受取り、前記第 2命令セットデコーダが、前記メモリに接続されて、そこから前記第2命令セッ トを受取ることを特徴とする請求項6に記載の二重命令セットプロセッサ。 14.前記第1コンピュータプラットフォーム独立命令デコーダが、セットモー ド命令をデコードし、前記セットモード命令が、前記第1命令セットに属する命 令であって、それに応じて、前記第2命令デコーダが稼動し、前記セットモード 命令の後続の第2命令をデコードすることを特徴とする請求項13に記載のシス テム。 15.前記第1命令セットに属する各命令が、仮想マシン命令であることを特徴 とする請求項13に記載のシステム。 16.前記仮想マシン命令が、オペコードを含むことを特徴とする請求項15に 記載のシステム。 17.前記ネットワークが、インターネットであることを特徴とする請求項13 に記載のシステム。 18.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項13に記載のシステム。 19.前記第1命令コンピュータプラットフォーム独立命令デコーダと協働する スタックと、 前記第2命令デコーダと協働するフラットレジスタと、 前記スタック及び前記フラットレジスタと協働して、前記複数の第1命令及び 前記複数の第2命令を実行する命令実行ユニットとを有することを特徴とする請 求項6に記載の二重命令セットプロセッサ。 20.前記第1コンピュータプラットフォーム独立命令デコーダが、セットモー ド命令をデコードするように構成されており、前前記セットモード命令が、前記 第1命令セットに属する命令の1つであって、それに応じて、前記第2命令デコ ーダが稼動し、前記セットモード命令の後続の第2命令をデコードすることを特 徴とする請求項19に記載の二重命令セットプロセッサ。 21.前記ネットワークが、インターネットであることを特徴とする請 求項19に記載の二重命令セットプロセッサ。 22.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項19に記載の二重命令セットプロセッサ。 23.ソースコード形態のコンピュータプログラムの実行可能なコードを発生す る方法であって、 前記実行可能なコードが、ネットワークに通信可能に接続されて、そこから実 行のための実行可能なコードを受取るマイクロプロセッサにより実行するための コードであるかどうかを判定する過程と、 前記実行可能なコードが、ローカルメモリに通信可能に接続されて、そこから 実行のための実行可能なコードを受取るマイクロプロセッサにより実行するため のコードであるかどうかを判定する過程と、 第1の実行可能なコードを発生する過程であって、前記第1の実行可能なコー ドが前記マイクロプロセッサによる実行のために前記ネットワークから受取られ たとき前記コード検証がなされる、該過程と、 第2の実行可能なコードを発生する過程であって、前記第2の実行可能なコー ドが前記マイクロプロセッサによる実行のために前記ローカルメモリから受取ら れたとき前記コード検証がなされない、該過程とを有することを特徴とするソー スコード形態のコンピュータプログラムの実行可能なコードを発生する方法。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FI,FR,GB,GR,IE,IT,L U,MC,NL,PT,SE),CN,JP,KR

Claims (1)

  1. 【特許請求の範囲】 1.ネイティブ命令セットを有する二重命令セットプロセッサにおいて、 仮想マシン命令セットに属する仮想マシン命令群をデコードして前記二重命令 セットプロセッサのネイティブ命令に変換するように構成された翻訳ユニットで あって、前記仮想マシン命令セットが前記ネイティブ命令のセットとは異なる、 該翻訳ユニットと、 前記翻訳ユニット、及びメモリからの前記ネイティブ命令をデコードするよう に構成されている命令デコーダであって、前記命令デコーダが、第1動作モード では前記翻訳ユニットに接続され、第2動作モードでは前記メモリに接続される 、該命令デコーダと、 前記命令デコーダからのデコード済ネイティブ命令を実行するように構成され ている命令実行ユニットとを有することを特徴とする二重命令セットプロセッサ 。 2.前記翻訳ユニットが、前記命令実行ユニットによるセットモード命令の実行 に応じて前記命令デコーダに接続されることを特徴とする請求項1に記載の二重 命令セットプロセッサ。 3.前記命令デコーダが、VLIW命令デコーダであることを特徴とする請求項 1に記載の二重命令セットプロセッサ。 4.前記命令デコーダが、CISC命令デコーダであることを特徴とする請求項 1に記載の二重命令セットプロセッサ。 5.前記命令デコーダが、RISC命令デコーダであることを特徴とする請求項 1に記載の二重命令セットプロセッサ。 6.ネットワーク及びローカルメモリと通信可能に接続されるように構成された 二重命令セットプロセッサであって、 前記ネットワーク、または前記ローカルメモリの何れかから受取った第1命令 セットに属する複数の第1命令をデコードするように構成され た第1命令デコーダと、 第2命令セットに属する複数の第2命令をデコードするように構成された第2 命令デコーダであって、前記第2命令セットが前記第1命令セットとは異なるも のである、該第2命令デコーダと、 前記第1命令デコーダによってデコードされた前記複数の第1命令を実行し、 かつ前記第2命令デコーダによってデコードされた前記複数の第2命令を実行す るように構成された命令実行ユニットとを有することを特徴とする二重命令セッ トプロセッサ。 7.前記第1命令デコーダが、セットモード命令をデコードするように構成され ており、前記セットモード命令が、前記第1命令の1つであって、それに応じて 、前記セットモード命令の後続の命令が前記第2命令デコーダに送られることを 特徴とする請求項6に記載の二重命令セットプロセッサ。 8.前記第1命令のそれぞれが、仮想マシン命令であることを特徴とする請求項 6に記載の二重命令セットプロセッサ。 9.前記仮想マシン命令が、オペコードを含むことを特徴とする請求項8に記載 の二重命令セットプロセッサ。 10.前記ネットワークが、インターネットであることを特徴とする請求項6に 記載の二重命令セットプロセッサ。 11.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項6に記載の二重命令セットプロセッサ。 12.ネットワーク及びローカルメモリと通信可能に接続され、2つの動作モー ドの1つで動作可能なように構成された二重命令セットプロセッサであって、 第1命令セットに属する命令をデコードし、それに応じて第1のデコード済命 令を発生するように構成された第1命令デコーダと、 第2命令セットに属する命令をデコードし、それに応じて第2のデコード済命 令を発生するように構成された第2命令デコーダと、 前記第1のデコード済命令と前記第2のデコード済命令とを実行するように構 成された命令実行ユニットとを有することを特徴とし、 前記2つの動作モードの一つでは、前記第1命令デコーダ及び前記命令実行ユ ニットが、前記ネットワークから受取った命令を処理し、 前記2つの動作モードの他方では、前記第1命令デコーダ、前記第2命令デコ ーダ、及び前記命令実行ユニットが、前記ローカルメモリから受取った命令を処 理することを特徴とする二重命令セットプロセッサ。 13.公的キャリアネットワークに通信可能に接続できるコンピュータシステム であって、 前記ネットワークに通信可能に接続でき、第1命令セットを受取ることができ る通信インタフェースユニットと、 第2命令セットのコンピュータプログラムをストアできるメモリであって、前 記第2命令セットが前記第1命令セットとは全体として異なっている、該メモリ と、 前記通信インタフェースユニットに接続されて、そこから前記第1命令セット を受取り、かつ、前記メモリに接続されて、そこから前記第2命令セットを受取 るマイクロプロセッサとを有することを特徴とし、 前記マイクロプロセッサが、 前記第1命令セットに属する命令をデコードし、それに応じてそこに第1の デコード済命令を発生するように構成された第1命令デコーダと、 前記第2命令セットに属する命令をデコードし、それに応じてそこに第2の デコード済命令を発生するように構成された第2命令デコーダと、 前記第1のデコード済命令及び前記第2のデコード済命令を実行するように 構成された命令実行ユニットとを有することを特徴とするコンピュータシステム 。 14.前記第1命令デコーダが、セットモード命令をデコードし、前記セットモ ード命令が、前記第1命令セットに属する命令であって、それに応じて、前記第 2命令デコーダが稼動し、前記セットモード命令の後続の第2命令をデコードす ることを特徴とする請求項13に記載のシステム。 15.前記第1命令セットに属する各命令が、仮想マシン命令であることを特徴 とする請求項13に記載のシステム。 16.前記仮想マシン命令が、オペコードを含むことを特徴とする請求項15に 記載のシステム。 17.前記ネットワークが、インターネットであることを特徴とする請求項13 に記載のシステム。 18.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項13に記載のシステム。 19.二重命令セットプロセッサであって、 複数の第1命令をデコードできる第1命令デコーダと、 前記第1命令デコーダと協働するスタックと、 複数の第2命令をデコードできる第2命令デコーダと、 前記第2命令デコーダと協働するフラットレジスタと、 前記スタック及び前記フラットレジスタと協働して、前記複数の第1命令及び 前記複数の第2命令を実行する命令実行ユニットとを有することを特徴とする二 重命令セットプロセッサ。 20.前記第1命令デコーダが、セットモード命令をデコードするように構成さ れており、前前記セットモード命令が、前記第1命令セットに 属する命令の1つであって、それに応じて、前記第2命令デコーダが稼動し、前 記セットモード命令の後続の第2命令をデコードすることを特徴とする請求項1 9に記載の二重命令セットプロセッサ。 21.前記ネットワークが、インターネットであることを特徴とする請求項19 に記載の二重命令セットプロセッサ。 22.前記ネットワークが、イントラネットのネットワークであることを特徴と する請求項19に記載の二重命令セットプロセッサ。 23.ソースコード形態のコンピュータプログラムの実行可能なコードを発生す る方法であって、 前記実行可能なコードが、ネットワークに通信可能に接続されて、そこから実 行のための実行可能なコードを受取るマイクロプロセッサにより実行するための コードであるかどうかを判定する過程と、 前記実行可能なコードが、ローカルメモリに通信可能に接続されて、そこから 実行のための実行可能なコードを受取るマイクロプロセッサにより実行するため のコードであるかどうかを判定する過程と、 第1の実行可能なコードを発生する過程であって、前記第1の実行可能なコー ドが前記マイクロプロセッサによる実行のために前記ネットワークから受取られ たとき前記コード検証がなされる、該過程と、 第2の実行可能なコードを発生する過程であって、前記第2の実行可能なコー ドが前記マイクロプロセッサによる実行のために前記ローカルメモリから受取ら れたとき前記コード検証がなされない、該過程とを有することを特徴とするソー スコード形態のコンピュータプログラムの実行可能なコードを発生する方法。
JP09527087A 1996-01-24 1997-01-23 ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ Pending JP2000515270A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US1052796P 1996-01-24 1996-01-24
US60/010,527 1996-01-24
US64310496A 1996-05-02 1996-05-02
US643,104 1996-05-02
PCT/US1997/001307 WO1997027537A2 (en) 1996-01-24 1997-01-23 A processor for executing instruction sets received from a network or from a local memory

Publications (1)

Publication Number Publication Date
JP2000515270A true JP2000515270A (ja) 2000-11-14

Family

ID=26681281

Family Applications (1)

Application Number Title Priority Date Filing Date
JP09527087A Pending JP2000515270A (ja) 1996-01-24 1997-01-23 ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ

Country Status (5)

Country Link
US (1) US5925123A (ja)
EP (1) EP0976029A2 (ja)
JP (1) JP2000515270A (ja)
KR (2) KR100513138B1 (ja)
WO (1) WO1997027537A2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004511041A (ja) * 2000-10-05 2004-04-08 エイアールエム リミテッド 変換した命令の再始動
US7162611B2 (en) 2001-05-31 2007-01-09 Arm Limited Unhandled operation handling in multiple instruction set systems
JP2011515750A (ja) * 2008-03-17 2011-05-19 中国科学院▲計▼算技▲術▼研究所 X86の仮想機をサポートするriscプロセッサ装置及び方法
JP4833499B2 (ja) * 2000-10-05 2011-12-07 エイアールエム リミテッド レジスタ内へのスタックオペランドの格納
JP2013546100A (ja) * 2010-12-16 2013-12-26 マイクロソフト コーポレーション セキュリティサンドボックス

Families Citing this family (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3634379B2 (ja) * 1996-01-24 2005-03-30 サン・マイクロシステムズ・インコーポレイテッド スタックキャッシングのための方法及び装置
GB2337434B (en) 1997-03-14 2002-01-30 Ian Charles Ogilvy Method and apparatus for controlling communications
JPH113225A (ja) * 1997-06-13 1999-01-06 Nec Corp 情報処理装置
US6513156B2 (en) 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
GB9715005D0 (en) * 1997-07-17 1997-09-24 Philips Electronics Nv Graphic image texture generation
GB2327784B (en) * 1997-07-28 2002-04-03 Microapl Ltd A method of carrying out computer operations
EP1002409B1 (de) * 1997-08-07 2003-10-22 Siemens Aktiengesellschaft Verfahren zum laden einer funktion, die von einem ersten rechner (server) bereitgestellt wird, auf einen zweiten rechner (client)
EP1019794B1 (en) * 1997-10-02 2008-08-20 Koninklijke Philips Electronics N.V. Data processing device for processing virtual machine instructions
EP0950216B1 (en) * 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
EP0941508B1 (en) * 1997-10-02 2007-01-17 Koninklijke Philips Electronics N.V. Variable instruction set computer
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6009517A (en) 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US6366999B1 (en) * 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
US6110226A (en) * 1998-02-19 2000-08-29 Cygnus Solutions Java development environment using optimizing ahead-of-time compiler
US6275903B1 (en) * 1998-04-22 2001-08-14 Sun Microsystems, Inc. Stack cache miss handling
US6480952B2 (en) 1998-05-26 2002-11-12 Advanced Micro Devices, Inc. Emulation coprocessor
US6308255B1 (en) * 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6493740B1 (en) * 1998-06-16 2002-12-10 Oracle Corporation Methods and apparatus for multi-thread processing utilizing a single-context architecture
WO2000004484A2 (en) * 1998-07-17 2000-01-27 Intergraph Corporation Wide instruction word graphics processor
US6289446B1 (en) * 1998-09-29 2001-09-11 Axis Ab Exception handling utilizing call instruction with context information
GB2343022B (en) * 1998-10-19 2003-01-08 Ibm Encrypting of java methods
JP2002528813A (ja) * 1998-10-23 2002-09-03 ユニシス コーポレイシヨン ソフトウェアの、コード化されたアプリケーションのための自動化されたウェブインターフェイス生成
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
US7114056B2 (en) 1998-12-03 2006-09-26 Sun Microsystems, Inc. Local and global register partitioning in a VLIW processor
US7117342B2 (en) * 1998-12-03 2006-10-03 Sun Microsystems, Inc. Implicitly derived register specifiers in a processor
US6718457B2 (en) * 1998-12-03 2004-04-06 Sun Microsystems, Inc. Multiple-thread processor for threaded software applications
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
KR20010040742A (ko) * 1998-12-08 2001-05-15 롤페스 요하네스 게라투스 알베르투스 인터프리터 프로그램을 실행하는 방법
JP2001142692A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
US7761857B1 (en) * 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
EP1197847A3 (en) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
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
US6704746B2 (en) 2000-12-12 2004-03-09 Sun Microsystems, Inc. Method and apparatus for lazy instantiation of objects in a virtual machine
US20020095502A1 (en) * 2001-01-16 2002-07-18 Chester James S. Business-to-business service provider system for intranet and internet applications
US7284274B1 (en) * 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
EP1358550A1 (en) * 2001-01-30 2003-11-05 Koninklijke Philips Electronics N.V. Synchronization of a main processor with an instruction path coprocessor
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
AU2002307080A1 (en) * 2001-04-23 2002-11-05 Atmel Corporation Microprocessor for executing byte compiled java code
GB2376097B (en) 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
US7103008B2 (en) * 2001-07-02 2006-09-05 Conexant, Inc. Communications system using rings architecture
US20030023958A1 (en) * 2001-07-17 2003-01-30 Patel Mukesh K. Intermediate language accelerator chip
US7240203B2 (en) * 2001-07-24 2007-07-03 Cavium Networks, Inc. Method and apparatus for establishing secure sessions
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
GB0121064D0 (en) * 2001-08-31 2001-10-24 Transitive Technologies Ltd Obtaining translation of generic code representation
EP1324191A1 (en) * 2001-12-27 2003-07-02 STMicroelectronics S.r.l. Processor architecture, related system and method of operation
EP1463992A1 (en) * 2002-01-11 2004-10-06 Sierra Wireless, Inc. Host extensible wireless application interface
US7305567B1 (en) 2002-03-01 2007-12-04 Cavium Networks, In. Decoupled architecture for data ciphering operations
US20040215444A1 (en) * 2002-03-25 2004-10-28 Patel Mukesh K. Hardware-translator-based custom method invocation system and method
US6782349B2 (en) 2002-05-03 2004-08-24 International Business Machines Corporation Method and system for updating a root of trust measurement function in a personal computer
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
EP1387252B1 (en) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Instruction prefix to indicate system commands
US20060149927A1 (en) * 2002-11-26 2006-07-06 Eran Dagan Processor capable of multi-threaded execution of a plurality of instruction-sets
US7444471B1 (en) * 2002-12-30 2008-10-28 Transmeta Corporation Method and system for using external storage to amortize CPU cycle utilization
EP1447742A1 (en) * 2003-02-11 2004-08-18 STMicroelectronics S.r.l. Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor
US7366352B2 (en) * 2003-03-20 2008-04-29 International Business Machines Corporation Method and apparatus for performing fast closest match in pattern recognition
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US7310723B1 (en) 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
US7698539B1 (en) * 2003-07-16 2010-04-13 Banning John P System and method of instruction modification
US7606997B1 (en) 2003-07-18 2009-10-20 Guillermo Rozas Method and system for using one or more address bits and an instruction to increase an instruction set
US20050071656A1 (en) * 2003-09-25 2005-03-31 Klein Dean A. Secure processor-based system and method
CA2452077A1 (en) * 2003-12-03 2005-06-03 Daniel A. Rose Verification of stream oriented locale files
GB2412192B (en) * 2004-03-18 2007-08-29 Advanced Risc Mach Ltd Function calling mechanism
US7930526B2 (en) 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
US7802080B2 (en) 2004-03-24 2010-09-21 Arm Limited Null exception handling
US7751431B2 (en) * 2004-12-30 2010-07-06 Motorola, Inc. Method and apparatus for distributed speech applications
TWI318359B (en) * 2005-04-13 2009-12-11 Ind Tech Res Inst Unified single-core & multi-mode processor and its program execution method
US7478224B2 (en) * 2005-04-15 2009-01-13 Atmel Corporation Microprocessor access of operand stack as a register file using native instructions
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
KR100573334B1 (ko) * 2005-08-31 2006-04-24 주식회사 칩스앤미디어 실시간 동적 수정이 가능한 명령어 집합을 가지는 컴퓨터
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
US8041958B2 (en) * 2006-02-14 2011-10-18 Lenovo (Singapore) Pte. Ltd. Method for preventing malicious software from execution within a computer system
US8694797B2 (en) * 2006-02-14 2014-04-08 Lenovo (Sinapore) Pte Ltd Method for preventing malicious software from execution within a computer system
US20090044159A1 (en) * 2007-08-08 2009-02-12 Mplicity Ltd. False path handling
US7979685B1 (en) 2007-11-27 2011-07-12 Oracle America, Inc. Multiple instruction execution mode resource-constrained device
JP5953867B2 (ja) * 2012-03-26 2016-07-20 富士ゼロックス株式会社 プログラム、及びプログラム保護装置
US9069701B2 (en) * 2012-12-11 2015-06-30 International Business Machines Corporation Virtual machine failover
KR102522442B1 (ko) * 2019-07-30 2023-04-18 아서스테크 컴퓨터 인코포레이션 무선 통신 시스템에서 미리 구성된 업링크 자원을 위한 빔 선택을 위한 방법 및 장치
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4325118A (en) * 1980-03-03 1982-04-13 Western Digital Corporation Instruction fetch circuitry for computers
JPS6133546A (ja) * 1984-07-25 1986-02-17 Nec Corp 情報処理装置
EP0476722B1 (en) * 1985-04-08 1997-02-26 Hitachi, Ltd. Data processing system
US5115500A (en) * 1988-01-11 1992-05-19 International Business Machines Corporation Plural incompatible instruction format decode method and apparatus
US5701417A (en) * 1991-03-27 1997-12-23 Microstar Laboratories Method and apparatus for providing initial instructions through a communications interface in a multiple computer system
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US6496922B1 (en) * 1994-10-31 2002-12-17 Sun Microsystems, Inc. Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US5630066A (en) * 1994-12-20 1997-05-13 Sun Microsystems, Inc. System and method for locating object view and platform independent object
US5638525A (en) * 1995-02-10 1997-06-10 Intel Corporation Processor capable of executing programs that contain RISC and CISC instructions

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004511041A (ja) * 2000-10-05 2004-04-08 エイアールエム リミテッド 変換した命令の再始動
JP4833499B2 (ja) * 2000-10-05 2011-12-07 エイアールエム リミテッド レジスタ内へのスタックオペランドの格納
US7162611B2 (en) 2001-05-31 2007-01-09 Arm Limited Unhandled operation handling in multiple instruction set systems
JP2011515750A (ja) * 2008-03-17 2011-05-19 中国科学院▲計▼算技▲術▼研究所 X86の仮想機をサポートするriscプロセッサ装置及び方法
JP2013546100A (ja) * 2010-12-16 2013-12-26 マイクロソフト コーポレーション セキュリティサンドボックス

Also Published As

Publication number Publication date
KR100618756B1 (ko) 2007-05-04
WO1997027537A3 (en) 1997-10-16
KR100513138B1 (ko) 2005-09-07
US5925123A (en) 1999-07-20
KR20050037609A (ko) 2005-04-22
WO1997027537A2 (en) 1997-07-31
EP0976029A2 (en) 2000-02-02
KR19990081959A (ko) 1999-11-15

Similar Documents

Publication Publication Date Title
US5925123A (en) Processor for executing instruction sets received from a network or from a local memory
US6961843B2 (en) Method frame storage using multiple memory circuits
JP4171496B2 (ja) スタックを用いる演算マシンのための命令フォールディング処理
US6038643A (en) Stack management unit and method for a processor having a stack
US6014723A (en) Processor with accelerated array access bounds checking
US6148391A (en) System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
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
US6065108A (en) Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same
US6076141A (en) Look-up switch accelerator and method of operating same
US20050240915A1 (en) Java hardware accelerator using microcode engine
KR100618718B1 (ko) 스택메모리구조에서의캐싱방법및장치

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040831

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20041124

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050225

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050419