[go: up one dir, main page]

JP2000501217A - 配列アクセス境界チェックを加速したプロセッサ - Google Patents

配列アクセス境界チェックを加速したプロセッサ

Info

Publication number
JP2000501217A
JP2000501217A JP9527086A JP52708697A JP2000501217A JP 2000501217 A JP2000501217 A JP 2000501217A JP 9527086 A JP9527086 A JP 9527086A JP 52708697 A JP52708697 A JP 52708697A JP 2000501217 A JP2000501217 A JP 2000501217A
Authority
JP
Japan
Prior art keywords
array
value
memory
section
size
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
JP9527086A
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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=26681279&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2000501217(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000501217A publication Critical patent/JP2000501217A/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • 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
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/264Microinstruction selection based on results of processing
    • 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/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/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

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 Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】 配列境界チェック装置は、情報配列の参照される要素が最大配列サイズ境界値と最小配列サイズ境界値との間に存在するということを照合するために構成される。本発明の配列境界チェック装置は、複数の配列境界値をストア及び回収する連想メモリ素子を含む。複数の配列境界値の各1つは、複数の配列アクセス命令の1つに関連する。入力セクションは同時に、配列アクセス命令を識別する配列アクセス命令識別子と少なくとも各ストアされた配列参照エントリの一部とを比較する。出力セクションは、配列境界出力値として、その関連するメモリ素子の複数のメモリ位置の1つにストアされた複数の配列境界値の1つを与えるための構成される。第1の比較素子は、参照された素子の値と最大配列インデクス境界値とを比較し、その素子の値が最大配列サイズ境界値より大きい場合には、最大値違反信号を供給する。第2の比較素子はその素子の値と最小配列サイズ境界値とを比較し、その素子の値が最小配列境界値より小さい場合には、最小値違反信号を供給する。最大値違反信号或いは最小値違反信号のいずれかが、例外を生じる。

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プログラミング言語及び環境は、 最近のプログラミングの実行における問題を解決するよう設計されている。Jav aプログラミング言語では、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プログラミング言語により、ウイルスがなく、破壊工作から守られたシ ステムの建設が可能となった。 また、その認証技術は公開鍵暗号化に基づいている。 多くのコンピュータシステム応用例では配列を利用している。配列は、1つ或 いはそれ以上の次元、例えばリスト、表、或いはデータの多次元の配列の状態に ある情報の配列である。 配列に対する特定の命令をインプリメントするコンピュータシステムでは、一 般に反復型の比較過程が必要とされ、それにより特定の配列アクセス命令を関連 する配列に一致させる。そのとき、そのコンピュータシステムの定義されたアー キテクチャにより取扱うことができる許容可能な境界内にあるということを照合 するために、配列のサイズをチェックする必要がある。 配列アクセス命令は配列により画定されるそれらのデータ要素にのみアクセス し、隣接データにはアクセスできないので、配列境界チェックすることにより、 より強固なシステムにすることができる。この結果バグはほとんどなくなり、シ ステムの安全性も向上する。しかしながら、配列境界チェックのために必要とさ れるステップバイステップ比較及び照合は、一般にステップ当たり1サイクル必 要となるため、照合が生じるまで、貴重な処理時間を消費する。 そこで必要となるのが、配列アクセスをインプリメントし、境界チェックを加 速し、それにより配列情報を回収し、かつ従来のシステムに相応するサイズを照 合するために必要とされる時間を著しく減少させることができる装置及び方法で ある。発明の概要 本発明は、連想記憶装置のような、完全連想メモリを利用して、配列アクセス 境界チェックをインプリメントし、かつ配列アクセス境界チェックを加速し、そ れにより従来のシステムに相応するサイズを照合するために必要とされる時間を 著しく減少させる。 本発明の1つに実施例では、情報配列の各アクセスが最大配列サイズ境界値と 最小配列サイズ境界値(一般に0)との間にあるということを検証するために構 成された配列境界チェック装置を提供する。その装置は、複数の配列サイズ値を ストアし、回収する連想メモリ素子を含む。 その配列サイズ値の各組は、複数の配列アクセス命令の1つに関連する。 各配列アクセス命令は、配列内の参照要素に対して用いられる。その連想メモリ 素子は、第1のメモリセクション、第2のメモリセクション、入力セクション並 びに出力セクションを含む。 第1のメモリセクションは、複数の配列参照エントリを受信し、ストアするた めに構成される、第1の複数のメモリ位置を含む。その第1の複数のメモリ位置 の各1つは、複数の配列参照エントリの1つをストアするために構成される。複 数の配列参照エントリの各1つは、複数の配列アクセス命令の1つに対応する。 第2のメモリセクションは、複数の配列サイズ値を受信し、ストアするために 構成される第2の複数のメモリ位置を含む。第2の複数のメモリ位置の各1つは 、1組の配列サイズ値をストアするために構成され、 第1の複数のメモリ位置に1つに関連する。複数の配列サイズ値の各1つは、複 数の配列アクセス命令の1つに関連する。 本発明の原理に従って、入力セクションは第1のメモリセクションに結合され 、配列アクセス命令識別子を受信するために構成される。その入カセクションは 同時に、配列アクセス命令を識別する配列アクセス命令識別子と、少なくともス トアされた各配列参照エントリの一部とを比較する。出力セクションは、第2の メモリセクションに結合され、配列サイズ出力値として、複数の配列サイズ値の 1組を与えるために構成され、複数の配列サイズ値の1組は、その配列アクセス 命令識別子と一致する複数の配列参照エントリの1つをストアする第1の複数の メモリ位置の1つに関連する第2の複数のメモリ位置の1つにストアされる。 第1の比較素子は、参照される要素の値と最大配列サイズ境界値とを比較し、 もしその要素の値が配列サイズ境界値より大きければ、最大値違反信号を供給す る。第2の比較素子は、その要素の値と最小配列サイズ境界値とを比較し、もし その要素の値が配列サイズ境界値より小さいなら、最小値違反信号を供給する。 最大値違反信号或いは最小値違反信号のいずれかは、例外を生じる。 本発明の別の実施例は、ソフトウエア翻訳部、実行ユニット、配列アクセスプ ロセッサ、並びに上述のような連想メモリ素子を含む。本発明のこの実施例では 、翻訳ユニットがソフトウエアプログラムを受信し、翻訳するために構成され、 それにより、複数の翻訳されたソフトウエア命令及び関連する命令識別子を供給 する。翻訳されたソフトウエア命令の各1つは、命令識別子の1つに対応する。 翻訳された命令は、複数の配列アクセス命令を含む。本発明のこの実施例では、 実行ユニットが、翻訳された命令を受信し、実行するために構成される。その実 行ユニットはさらに、例外出力信号に応答するために構成される。例外出力信号 は、配列アクセス境界例外サブルーチンを定義する一連の翻訳された命令を実行 することにより、連想メモリ素子及び例外素子により発生する。 本発明のこれらの、並びに他の機構及び利点は、発明の詳細な説明において議 論されるような図面から明らかになるであろう。図面の簡単な説明 第1図は、仮想マシンハードウェアプロセッサの一実施例のブロック図である 。 第2図は、本発明の一実施例において用いられる仮想マシン命令の生成のため のプロセスフロー図である。 第3図は、第1図のハードウェアプロセッサにおいて実現された命令パイプラ インを示した図である。 第4A図は、スタック構造の論理的編成の一実施例を示した図であり、ここで は各メソッドフレームが、第1図のハードウェアプロセッサが使用するローカル 変数ストレージエリア、環境ストレージエリア、及びオペランドスタックを含む 。 第4B図は、スタック構造の論理的編成の別の実施例を示した図であり、ここ では各メソッドフレームが、ローカル変数ストレージエリア及びスタック上のオ ペランドスタックを含み、メソッドフレームのための環境ストレージエリアが、 個別実行環境スタック上に含められている。 第4C図は、第4B図の実行環境スタック及びスタック用のスタック管理ユニ ットの別の実施例を示した図である。 第4D図は、第1のスタック管理ユニットにおけるローカル変数ルックアサイ ドキャッシュの一実施例を示した図である。 第5図は、第1図のハードウェアプロセッサに対するいくつかの可能なアドオ ンを示した図である。 第6A図は、翻訳ユニット、配列アクセスプロセッサ、連想メモリ装置を含む 配列境界チェック素子、並びに本発明の原理に従った実行ユニットを含むコンピ ュータシステムを示す。 第6B図は、第6A図或いは第6C図のコンピュータシステムにおいて用いら れる典型的な配列命令を示す。 第6C図は、本発明の原理に従った第1図の仮想マシンハードウエアプロセッ サを用いて動作し、その一部を含むためのコンピュータシステムを示す。 本発明のこれらの、並びに他の機構及び利点は、発明の詳細な説明において議 論されるような図面から明らかになるであろう。同様の、或いは類似の機構は、 図面及び発明の詳細な説明全体を通して同じ参照番号が付される。発明の詳細な説明 第1図に示すのは、プロセッサアーキテクチャに依存しない仮想マシン命令を 直接実行する仮想マシンハードウェアプロセッサ100(以下ハードウェアプロ セッサ100)の一実施例である。仮想マシン命令の実行におけるハードウェア プロセッサ100の性能は、インテルのPENTIUMのマイクロプロセッサや サンマイクロシステムズULTRASPARCプロセッサのようなハイエンドの CPUよりずっと優れている(ULTRASPARCはサンマイクロシステムズ 社の商標であり、PENTIUMはインテル社の商標である)。ソフトウェアJ AVAインタプリタや、JAVAジャストインタイムコンパイラ(just-in-time compiler)で同じ仮想マシンをインタプリートすることは、低コストであって、 電力消費量も低い。この結果、ハードウェアプロセッサ100は、移植性がある アプリケーションに非常に適したものとなる。ハード ウェアプロセッサ100は、他の仮想マシンスタックベースのアーキテクチャや 、ガーべジコレクション、スレッド同期などのような機能を用いてる仮想マシン に対しても似たような利点をもたらす。 これらの特徴の点から言えば、ハードウェアプロセッサ100に基づいたシス テムは、最も良い全体的な性能について言うのでなければ、ソフトウェアインタ プリタやジャストインタイムコンパイラを含む他の仮想マシン実行環境と比較し て魅力的なコストパフォーマンスを提供する。 しかし、本発明は、仮想マシンハードウェアプロセッサの実施例に限定されず、 本発明の範囲には、JAVA仮想マシン命令を特定のハードウェアプロセッサに ネイティブなマシン命令にコンパイル(バッチかあるいはジャストインタイムコ ンパイルの何れかで)するソフトウェアインタプリタとしてJAVA仮想マシン をエミュレートするインプリメンテーションを備えたインプリメンテーションや 、或いはJAVA仮想マシンをマイクロコードとして実現する、或いは直接チッ プ上に実現する、又はそれらの組み合わせとして実現するハードウェアを提供す る、適当なスタックベースの、又は非スタックベースの演算マシンインプリメン テーションも含まれている。 コストパフォーマンスについては、ハードウェアプロセッサ100は、250 キロバイト(Kbytes)〜500キロバイトのメモリストレージが不要であるとい う利点を有している。例えば一般にソフトウェアインタプリタによって必要とさ れるROM或いはRAMが不要である。ハードウェアプロセッサ100のシュミ レーションにより、ハードウェアプロセッサ100が、そのプロセッサ100と 同じクロックレートで同じ仮想マシン命令を実行するPENTIUMプロセッサ 上の様々なアプリケーション上を走るソフトウェアインタプリタと比較して20 倍高速で仮想マシンを実行することが分かった。別のハードウェアプロセッサ1 00 のシュミレーションにより、ハードウェアプロセッサ100は、そのプロセッサ 100と同じクロックレートで、同じ仮想マシン命令を実行するPENTIUM プロセッサ上を走るジャストインタイムコンパイラと比較して5倍高速で仮想マ シンを実行することが分かった。 ソフトウェア仮想マシン命令インタプリタが必要とするメモリ消費が禁じられ ているような環境の下では、ハードウェアプロセッサ100は有利である。これ らのアプリケーションは、例えばネットワーク機器、携帯電話プロセッサ、及び 他の遠距離通信用集積回路、若しくは埋め込み型プロセッサやポータブルデバイ スのような低電力低コストの他のアプリケーションのためのインターネットチッ プを含む。 本発明の境界チェックユニット147は、配列に対する各アクセスをチェック するための高速ハードウエア回路を形成し、そのアクセスが配列の境界から外側 にないことを確実にする。ハードウエア回路の使用は、より完全に以下に示すよ うに、通常配列境界チェックに関連する多重プロセッササイクルを削除する。さ らに詳細に境界チェックユニット137を検討する前に、本発明を含むハードウ エアプロセッサの1つの実施例が、ハードウエア仮想マシンインプリメンテーリ ョンにおける境界チェックユニット137のインプリメンテーリョンに対する背 景を与えるために記載される。 本明細書において、仮想マシンとは、現実の演算マシンのように命令セットを 有し、様々なメモリエリアを使用する抽象的な演算マシンである。仮想マシンの 使用は、例えばハードウェアプロセッサ100のような仮想マシンインプリメン テーションにより実行されるプロセッサアーキテクチャに依存しない仮想マシン 命令セットを定義する。各仮想マシン命令は実行される特定のオペレーションを 定める。仮想演算マシンは、仮想マシン命令を生成するのに用いられるコンピュ ータ言語や、仮想マ シンの下に位置するインプリメンテーションを理解する必要がない。理解する必 要があるのは仮想マシン命令用の特定のファイルフォーマットのみである。好適 実施例では、仮想マシン命令はJAVA仮想マシン命令である。各JAVA仮想 マシン命令は、情報、オペランド、及び他の必要な情報を特定する命令をコード 化する1又は2以上のバイトを含んでいる。 付録IはJAVA仮想マシン命令セットを説明したものであり、その全体を本 明細書と一体に参照されたい。但し、使用された特定の仮想マシン命令のセット は、本発明において不可欠な要素ではない。付録I及びこの明細書における仮想 マシン命令を参照することにより、当業者は特定の仮想マシン命令セットやJA VA仮想マシン仕様の変更に対して、発明を変更して実施することができよう。 コンピュータプラットフォーム上で実行するJAVAコンパイラのJAVAC (第2図参照)は、JAVAプログラム言語で書かれたアプリケーション201 を、JAVA仮想マシン仕様に従って、コンパイル済命令セットを含むコンパイ ル済命令シーケンス203をコード化するアーキテクチャに対して中立なオブジ ェクトファイルフォーマットに変換する。しかしながら、本発明において必要な のは、仮想マシン命令のソースコード及び関連情報のみである。仮想マシン命令 のソース及び関連情報を生成するのに用いられる方法及び技術は本明細書におい て不可欠の要素ではない。 コンパイル済命令シーケンス203は、ハードウェアプロセッサ100上で実 行可能であると共に、例えばソフトウェアインタプリタやジャストインタイムコ ンパイラを用いるJAVA仮想マシンを実現する任意のコンピュータプラットフ ォーム上で実行可能である。しかし、上述のように、ハードウェアプロセッサ1 00はソフトウェアインプリメンテー ションより著しく優れた性能上の利点をもたらす。 この実施例において、ハードウェアプロセッサ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図)の先頭を指定するポインタOPT0Pを含むレジスタ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にプッシュし、後にリターンが行われる前に呼び出しを行うメ ソッドコンテキストを再びストアするためにこの情報を利用する。ポインタFR AME(第1図及び第4A図参照)は、現在メソッドの実行環境を指定するため のポインタである。ここに示す実施例においては、レジスタセット144(第1 図)のそれぞれのレジスタが32ビットの幅を有する。 オペランドスタック423は現在メソッド内の仮想マシン命令の実行をサポー トするために割り当てられる。プログラムカウンタレジスタPC (第1図)は、次の命令のアドレス、例えば実行されるオペレーションのオペコ ードを含む。オペランドスタック423(第4A図)上の位置を用いて、命令実 行のためのソースストレージ位置及びターゲットストレージ位置の双方を提供す る仮想マシン命令のオペランドを格納する。オペランドスタック423のサイズ は、JAVAコンパイラJAVAC(第2図)にスタティックに決定され、ハー ドウェアプロセッサ100はそれに従ってオペランドスタック423用の空間を 割り当てる。レジスタ0PTOP(第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 environme nt dribble manager unit)460、及び実行管理スタック制御ユニット470を 加えている。一般に、実行ドリブル管理ユニット460は、スピル(spill)オペ レーション又はフィル(fill)オペレーションの間に、実行環境キャッシュ450 と実行環境メモリ440との間で実行環境全体を転送する。I/Oバス及びメモリインタフェースユニット I/Oバス及びメモリインタフェースユニット110(第1図)はインタフェー スユニット110とも称し、ハードウェアプロセッサ100と、 実施例においては外部メモリを含み、所望に応じてハードウェアプロセッサ10 0と同じチップ上のメモリストレージ及びインタフェース或いはその何れかを含 み得るメモリ階層を実現する。この実施例においては、I/OコントローラI/Oが 外部110デバイスに対してインタフェースし、メモリコントローラ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及び1 61を外部メモリに対してインタフェースする。インタフェースユニット110 は、命令キャッシュコントローラ121 及びデータキャッシュコントローラ161からの内部リクエストに対する管理ロ ジックを含み、これによって外部メモリにアクセスし、リクエストに応じてメモ リバス上の外部メモリに対する読み出し又は書き込みリクエストの何れかを開始 するデータキャッシュコントローラ121からのリクエストは、常に命令キャッ シュコントローラ161からのリクエストに対して高いプライオリティを持つも のとして取り扱われる。 インタフェースユニット110は、リクエストしている命令キャッシュコント ローラ121又はデータキャッシュコントローラ161に対して、読み出しサイ クルの間に肯定応答信号を供給し、リクエストしているコントローラがそのデー タをキャッチできるようにする。書き込みサイクルにおいては、インタフェース ユニット110からの肯定応答信号は、フローコントロールのために用いられ、 リクエストしている命令キャッシュコントローラ121又はデータキャッシュコ ントローラ161は、ペンディングが生じている場合新たなリクエストを発生し ない。インタフェースユニット110は又、メモリバス上で外部メモリに対して 発生されたエラーも取り扱う。 命令キャッシュユニット 命令キャッシュユニット(ICU)120(第1図)は、命令キャッシュ12 5から仮想マシン命令をフェッチして、その命令を命令デコードユニット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/0バス及びメモリインタフェースユニット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バイトの深さのFIF0 バッファであって、性能上の理由からフェッチ段階301(第3図)をパイプラ イン300の残りの段階から分離している。バッファ124(第1図)における それぞれの命令は関連する有効ビット及びエラービットを有する。この有効ビッ トがセットされている時、その有効ビットに関連する命令は、有効な命令である 。エラービットがセットされている時、そのエラービットが関連する命令のフェ ッチはエラーの処理であった。命令バッファ124はデータを命令バッファ12 4とやり取りする信号を発生し、命令バッファ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にて同じ日に出願された、”INSTRUCTION FOLD ING FOR A STACK-BASED MACHINE”というタイトルの米国特許出願第08/xx x,xxx号(発明者Marc Tremblay and James Michael 0'Connor)を参 照されたい。これを参照して、全体をここに組み込んでいる。典型的なプロセッ サ100の実施例では、第1バイトが、第1の仮想マシン命令に対応し、多数バ イト命令であるなら、第1及び第2の命令はフォールディングされない。 付加的な現在オブジェクトローダフォルダ132は、上記の、さらにより詳細 には本発明の譲渡人に譲渡され、代理人整理番号SP2O36にて同じ日に出願 された、”INSTRUCTI0N F0LDING FOR A STACK-BASED MACHINE”というタイトル の米国特許出願第08/xxx,xxx号(発明者Marc Tremblay and James Michael 0'Connor)に記載されており、参照して全体をここに組み込んでい るような、命令フォールディングを、シミュレーション結果が特に頻繁に、それ ゆえ最適化のための所望のターゲットになるように示される仮想マシン命令シー ケンスにおいて利用する。特に、メソッド呼出し(method invocation)は一般的 に、スタックオペランド上の対応するオブジェクトに対するオブジェクトリファ レンスをロードし、そのオブジェクトからフィールドをフェッチする。命令フォ ールディングにより、ほとんど共通の仮想マシン命令シーケンスが、等価的にフ ォールディングされた演算を用いて実行されるようになる。 高速型命令(quick variant)は、仮想マシン命令セットの一部ではなく(付録 Iの第3章を参照されたい)、JAVA仮想マシンインプリメンテーリョンの外 側には現れない。しかしながら、仮想マシンインプ リメンテーリョンの内側では、高速型命令は有効に最適化されいることがわかる (本明細書の不可欠な部分である、付録Iの付録Aを参照されたい)。非高速− 高速翻訳(quicktranslator)キャッシュ131において、種々の命令を高速型命 令に更新するための書込みをサポートすることにより、通常の仮想マシン命令は 高速仮想マシン命令に変更され、高速型命令によりもたらされる大きな利点を利 用することができる。特に、より詳細に、本発明の譲渡人に譲渡され、代理人整 理番号SP2039にて同じ日に出願された、NON−QUICK INSTR UCTIONACCELERATOR AND ME THOD OF IMP LEMENTING SAMEというタイトルの米国特許出願第08/xxx, xxx号(発明者Mark Tremblay and James Michael 0'Connor)に記載さ れており、参照して全体をここに組み込んでいように、命令の実行を開始するた めに必要とされる情報が初めにアセンブルされているとき、その情報は非高速− 高速翻訳キャッシュ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の命令を用いて再開される。実行の際に、命令invokevirtua l、オペコード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内の翻訳部、或いは単に ソフトウエア翻訳部のいずれかを用いて行われる。デュアル命令セットプロセッ サのさらなる例としては、本発明の譲渡人に譲渡され、代理人整理番号SP2O 42にて同じ日に出願された、”A PROCESSOR FOREXECUT ING INSTRUCTIONSETSRECEIVED FROM A N ETWORK OR FROM A LOCALMEMORY”というタイトル の米国特許出願第08/xxx,xxx号(発 明者Marc Tremblay and James Michael O'Connor)を参照されたい。 これを参照して、全体をここに組み込んでいる。整数実行ユニット 整数実行ユニットIEUは、命令デコードユニット130、整数ユニット14 2並びにスタック管理ユニット150を含む、浮動小数点関連命令を除く、全て の仮想マシン命令の実行を支配する。浮動小数点関連命令は浮動小数点ユニット 142において実行される。 整数実行ユニットIEUは、命令キャッシュユニット120とフロントエンド にて対話し、浮動小数点命令を実行するための浮動小数点ユニット(FPU)1 43を用いて、最終的にはロード/ストア命令関連命令を実行するためのデータ キャッシュユニット(DCU)160を用いて、命令をフェッチする。また整数 実行ユニットIEUは、マイクロコードROMを有し、マイクロコードROMは 、整数演算に関連する一定の仮想マシン命令を実行するような命令を含む。 整数実行ユニットIEUは、スタック400のキャッシュ部分、すなわちスタ ックキャッシュ155を含む。スタックキャッシュ155は、現在メソッド(cur rent method)に関連するオペランドスタックエントリ及びローカル変数エントリ (local variable entry)、すなわちオペランドスタック423エントリ及びロー カル変数記憶421エントリを迅速に記憶する。スタックキャッシュ155は、 現在の命令に関連する全てのオペランドスタックエントリ及びローカル変数エン トリを十分に記憶することができるが、オペランドスタックエントリ及びローカ ル変数エントリの数によっては、全てのローカル変数エントリより少ない数、或 いはローカル変数エントリとオペランドスタックエントリの両方の数より少ない 数が、スタックキャッシュ155において表されるかもしれ ない。同様に付加的なエントリ、すなわち呼出しメソッド(callingmethod)に 対するオペランドスタックエントリ及びローカル変数エントリは、もし空間的に 許容されるなら、スタックキャッシュ155において表されるかもしれない。 (p33) スタックキャッシュ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 comm on set of instructions)は、ALU命令の集合体である。ALU命令はデコー ド段302内のスタック400の先頭からオペランドを読出し、結果を計算する ための実行段303においてALUを用いる。その結果はライトバック段305 内のスタック400にライトバックされる。2段階のバイパスがあり、連続AL U演算がスタックキャッシュ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内のデータキャッシュコントローラ1 61に対して、例えば非キャッシュ、特殊ストア(special store)等の属性と共 に、ロード或いはストア演算をシグナリングする。データキャッシュユニット1 60は、ロード演算中のデータを復帰し、データコントロールユニットホールド 信号を用いて整数ユニット142を制御することができる。データキャッシュヒ ット中に、データキャッシュユニット160は要求データを復帰し、それからパ イプラインを解放する。 またストア演算中に整数ユニット142は、実行段303内にアドレスと共に データを供給する。データキャッシュユニット165は、もしデータキャッシュ ユニット165がビジー、すなわちラインフィルであるなら、キャッシュ段30 4内のパイプラインをホールドすることができる。 浮動小数点演算は、整数実行ユニットIEUにより専用に処理される。 命令デコーダ135は、浮動小数点ユニット143関連命令をフェッチし、かつ デコードする。命令デコーダ135は、デコード段302における浮動小数点ユ ニット142に対して実行するための浮動小数点演算オペランドを送出する。浮 動小数点ユニット143が浮動小数点演算を実行ビジーの間に、整数ユニット1 42はパイプラインを停止し、浮動小数点ユニット143が、整数ユニット14 2に対して、結果が利用可能であるということをシグナリングするまで待機する 。 浮動小数点ユニット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からの値の退避及び再生は、ある実施例では、高水位マーク(h igh-water mark)及び低水位マークを用いてドリブル管理部151により制御さ れる。 スタック管理ユニット150は、実行ユニット140に、所定のサイクルにお ける2つの32−bitオペランドを供給する。スタック管理ユニット150は 、所定のサイクルにおける1つの32−bit結果をストアすることができる。 ドリブル管理部151は、データキャッシュ165からスタックキャッシュ1 55への、並びにスタックキャッシュ155からデータキャッシュ165へのデ ータを投機的にドリブルすることにより、スタックキャッシュ155のスピル(s pill)及びフィル(fill)を処理する。ドリブル管理部151は、パイプラインス トール信号(pipeline stall signal)を発生させ、スタックオーバーフロー条件 或いはアンダーフロー条件が検出されるとき、パイプラインをストールする。ま たドリブル管理部151はデータキャッシュユニット160に送出される要求の スタックを保持する。データキャッシュユニット160に対する1つの要求は3 2−bit連続ロード或いはストア要求である。 スタックキャッシュ155のハードウエア構成は、長オペランド(長い整数及 び倍精度浮動小数点数)の場合を除き、オペコードに対する暗 黙のオペランドフェッチにより、オペコードの実行に対する待ち時間が加わらな いようにする。スタックキャッシュ155において維持されるオペランドスタッ ク423(第4A図)及びローカル変数記憶装置422におけるエントリの数は 、ハードウエア/パフォーマンスのトレードオフを表す。少なくとも数個のオペ ランドスタック423及びローカル変数記憶装置エントリが良好なパフォーマン スを得るために必要とされる。第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 STORAGE USING MU LTIPLEMEMORY CIRCUITS”というタイトルの米国特許出願 第08/xxx,xxx号(発明者James Michael O'Connor and Marc Trem blay)に記載されており、参照して、全体をここに組み込んでいる。 ある実施例では、スタック管理ユニット150は、付加的なローカル変数ルッ クアサイド(look-aside)キャッシュ153を含む。キャッシュ153は応用時に 最も重要であり、あるメソッドに対するローカル変数及びオペランドスタック4 23(第4A図)がスタックキャッシュ1 55上に配置されない。キャッシュ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)キャッシュとなることに注意され たい。従って、ロ ーカル変数が現在メソッドに対して必要とされるとき、その変数はキャッシュ1 53の最も新しい面、すなわちメソッド番号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 recen tly 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 A CCELERATOR AND METHOD OFOPERATING SA ME”というタイトルの米国特許出願第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 LEVELOF INDIRECTION DURING EXEC UTION OF AN OBJECTORIENTED C0MPUTER PROGRAM"というタイトルの米国特許出願 第08/xxx,xxx号(発明者Marc Tremblay and James MichaelO'Co nnor)にさらに詳細に記載されており、参照して、全体をここに組み込んでいる 。ゲットフィールド−プットフィールドアクセラレータ 他の特定の機能ユニット及び種々の翻訳ルックアサイドバッファ(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)の要素への各アクセスをチェックし、 そのアクセスがその配列内の位置に対するものであるか否かを判定する。そのア クセスがその配列内の位置に対するものであるとき、境界チェックユニット14 7は、実行ユニット140に対して、アクティブ配列境界例外信号を発行する。 アクティブ配列境界例外信号に応じて、実行ユニット140は、マイクロコード ROM141内にストアされた、その境界外配列アクセス(out of bounds array access)を処理する例外ハンドラの実行を開始する。 1つの実施例では、境界チェックユニット147は、配列に対する配列識別子 、例えばプログラムカウンタ値、並びにその配列に対する最大値及び最小値をス トアされた連想メモリ素子を含む。ある配列がアクセスされる、すなわちその配 列に対する配列識別子が連想メモリ素子に適用されるとき、さらにその配列がそ の連想メモリ素子において表されると仮定するとき、ストアされた最小値は、比 較素子とも呼ばれる、第1 の比較器素子に対する第1の入力信号であり、ストアされた最大値は、比較素子 とも呼ばれる、第2の比較器素子に対する第1の入力信号である。その第1及び 第2の比較器素子に対する第2の入力信号は、配列の素子のアクセスに関連する 値である。 もし配列の素子のアクセスに関連する値が、ストアされた最大値以下で、かつ ストアされた最小値以上であるなら、いずれの比較器素子も出力信号を発生しな い。しかしながら、もしこれらの条件のいずれかが正しくないなら、適切な比較 器素子がアクティブ配列境界例外信号を発生する。境界チェックユニット147 の1つの実施例のさらに詳細な内容は、本発明の譲渡人に譲渡され、代理人整理 番号SP2041にて同じ日に出願された、”PROCESSOR WITH ACCELERATED ARRAYACCESS BOUNDS CHECK ING”というタイトルの米国特許出願第08/xxx,xxx号(発明者Mar c 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図は、翻訳ユニット610、配列アクセスプロセッサ612、連想メモ リ素子614、並びに実行ユニット616を含むコンピュータシステム600を 示す。翻訳ユニット610はソフトウエアプログラム情報609、例えばJAV A仮想マシン命令を受信し、プログラム情報609を翻訳された命令に翻訳し、 その翻訳された命令は、バス611上の配列アクセス命令及びバス613上の配 列アクセス命令識別子を含み、それぞれが翻訳された命令の1つに対応する。 翻訳ユニット610は、仮想マシン命令を特定のコンピュータアーキテクチャ に対するネイティブ命令に変換するROM、仮想マシン命令を特定のコンピュー タアーキテクチャに対するネイティブ命令に変換するソフトウエアプログラム、 或いはもし入ってくる命令の翻訳が必要でない場合は、単に命令デコーダである ことができる。 1つの実施例では、翻訳ユニット610は、どの配列アクセス命令が頻繁に利 用されるかを判定する。例えば、プロファイルフィードバック(profile feedbac k)を利用して、翻訳ユニット610は、動的実行回数が、これらのステートメン ト識別子及び連想メモリに対応する境界をロードすることによりパフォーマンス に利益をもたらすほど十分に高い配列アクセス命令を識別する。別の実施例では 、各配列に対する適切な配列情報が、配列が生成されるとき連想メモリ内にスト アされ、連想メ モリが一杯になるとき、適切な置換えポリシーがインプリメントされる。 配列が生成されるとき、配列アクセスプロセッサ612は、バス611上で配 列定義命令を、かつ翻訳されたソフトウエア命令のバス613上で配列アクセス 命令識別子を受信する。配列アクセスプロセッサ612は、この情報を利用して 、配列参照エントリARRAYi 615、並びに連想メモリ素子614内にす べてストアされるその配列参照エントリARRAYi 615に関連する、最小 及び最大配列サイズ値MINi 617A及びMAXi 617Bをそれぞれ発 生する。1つの実施例では、配列アクセスプロセッサ612は、その識別子、並 びに最小及び最大配列サイズ値を、連想メモリ素子614内にロードするために 実行ユニット612により実行される単なる命令である。これらの命令は、マイ クロコードであるか、或いは翻訳ユニット610により供給される。 連想メモリ素子614は、配列内の要素がアクセスされるとき、その配列に対 して、その要素が最小配列サイズ値MINi 617A(一般に0)と最大配列 サイズ値MAXi 617Bとの間にあるということを照合するために構成され る。以下に議論され、第6A図に示される例では、配列境界チェック装置は、第 6B図に示すように、以下の配列アクセス命令load_array[ARRA Y3][ELEM26]に応答する。 第6A図に戻ると、連想メモリ素子614は、第1のメモリセクション618 A、最小値セクション620Aと最大値セクション620Bに分割されるように 示される第2のメモリセクション618B、入力セクション622、並びに出力 セクション624を含む。 第1のメモリセクション618Aは、複数の配列参照エントリARRAYi 615(ただしi=1〜N)を受信し、ストアするために構成 される第1の複数のメモリ位置を含む。複数の配列参照エントリの各1つは、翻 訳ユニット610により供給されることができる翻訳されたソフトウエア命令か らなる複数の配列アクセス命令の1つに対応する。 第2のメモリセクション618Bは、最小配列サイズ値MINi 617A及 び最大配列サイズ値MAXi 617Bを受信し、ストアするための構成される 第2の複数のメモリ位置を含む。第2のメモリセクション618B内の第2の複 数のメモリ位置の各1つは、ARRAYi 615第1メモリセクション618 Aの複数のメモリ位置の各1つに関連する最小及び最大配列サイズ値617A及 び617Bの1組をストアするために構成される。それ故、配列サイズ値の組の 1つは、翻訳されたソフトウエア命令からなる複数の配列アクセス命令の1つに 関連する。 入力セクション622は、第1のメモリセクション618Aに結合されており 、翻訳されたソフトウエア命令に対するバス上の配列アクセス命令識別子613 を受信し、同時に、配列アクセス命令識別子613と、第1のメモリセクション 618A内にストアされた各配列参照エントリARRAYi 615の少なくと も一部とを比較するための構成される。各配列アクセス命令識別子613は、そ の翻訳されたソフトウエア命令の固有の配列アクセス命令を識別する。 出力セクション624は、第2のメモリセクション618Bに結合されており 、最小配列サイズ出力値630及び最大配列サイズ出力値621を供給するため に構成されており、配列サイズ値の組(MINi 617A、MAXi 617 B)の1つは第2のメモリセクション618B内の第2の複数のメモリ位置の1 つにストアされ、それは、翻訳されたソフトウエア命令のバス613上の配列ア クセス命令識別子と一致する複数の配列参照エントリARRAYi 615の1 つをストアする複数のメモリ位置の1つに関連する。最大配列サイズ出力値62 1及び参 照される要素の値619は比較器626により比較され、参照された要素の値6 19が最大配列サイズ出力値621より大きい場合には、最大値違反信号ライン 628上に最大値違反信号を与える。同様に、最小配列サイズ出力値630は、 一般には0であり、比較器632により参照される要素の値619と比較され、 参照された要素の値619が最小配列サイズ出力値630より小さい場合には、 最小値違反信号ライン634上に最小値違反信号を与える。ライン628上の最 大値違反信号或いはライン634上の最小値違反信号のいずれかの発生は、結果 としてORゲート638によりライン636上に例外出力信号を発生させる。 従って、第6A図及び第6B図の例では、配列アクセス信号load_arr ay[ARRAY3][ELEM26](第6B図参照)は、配列参照エントリ ARRAY3に関連する配列内の要素26を参照する。 一般に、スタックの最上位にある値は、配列3の要素26にロードされる。もし 要素26が配列3の境界の外側にあったなら、メモリ内の情報は、境界チェック が用いられなかったとしても上書きされる。 連想メモリ素子614内の行690は、配列参照エントリARRAY3に関連 する。入力セクション622は、バス613上の関連する配列アクセス命令識別 子と配列参照エントリARRAY3との間を一致させる。その一致により、配列 参照エントリARRAY3に関連する値MIN3(この例では0)及びMAX3 (この例では99)が生じ、出力セクション624を介して、それぞれライン6 30及び621上に供給される。その後MAN3値99は、値26と比較され( 第6B図参照)、参照された値が参照された配列に対して確立された最大境界値 より小さいということが照合される。同様にMIN3値0は、値26と比較され 、参照された要素が参照された配列に対して確立された最小境界値より大きいと いうことが照合される。値26は確立された境界内にあるので、 例外信号はライン636上に発生しない(第6A図参照)。 当業者には、種朱の論理関数が、上述の内容に加えて、境界を照合し、例外信 号を発生されるために用いることができるということが認識されるであろう。比 較関数626及び632、並びにORゲート638はれ例示のためのみに用いら れており、本発明を限定するものではない。 1つの実施例では、実行ユニット616は、配列アクセス境界例外サブルーチ ンを定義する一連の翻訳された命令を実行することにより、ライン636上の例 外出力信号に応答するために構成される。 第6C図は第6A図のコンピュータシステム600に類似のコンピュータシス テム600Cである。第6C図に示される本発明の実施例では、配列アクセスプ ロセッサ612、連想メモリ素子614、比較器626及び632、並びにOR ゲート638が第1図の境界チェックユニット147を構成する。本発明の実施 例では、命令キャッシュ125(第1図及び6C図)は、命令デコーダ135( 第1図及び6C図)にソフトウエアプログラム情報609を転送し、命令デコー ダ135が第6A図における翻訳ユニット610の役割を果たす。コンピュータ システム600で用いたように、コンピュータシステム600Cでは、命令デコ ーダ135(第1図及び6C図)が、そのセットアップ手順の一部として、どの 配列アクセス命令が頻繁に利用されるかを判定し、動的実行回数が、これらのス テートメント識別子及び対応する境界を連想メモリ内にロードすることによりパ フォーマンスに影響するほど十分に大きい配列アクセス命令を識別する。それか ら配列アクセスプロセッサ612は配列アクセス命令611、並びに翻訳された ソフトウエア命令の配列アクセス命令識別子613を受信し、選択的に、配列参 照エントリARRAYi615、並びにユニット147にロードするための配列 参照エントリARRAYi 615に関連する、最小及び最大配列サイズ値MI Ni 617A及びMAXi 617Bをそれぞれ出力する。 本発明のこの実施例では、配列アクセスプロセッサ612、連想メモリ素子6 14、比較器626、比較器632、並びにORゲート638の動作は、第6A 図に示され、上でより詳細に議論された、同じ番号を付したユニットの動作を全 て同じである。 第6C図に示される本発明の実施例では、ライン636上のORゲート638 の例外出力信号は実行ユニット140内の整数ユニット142に結合される(第 1図及び6C図)。整数ユニット142は、配列アクセス境界例外サブルーチン を定義する一連の翻訳された命令を実行することにより、ライン636上で例外 出力信号に応答するために構成される。 当業者は本開示により、必要に応じて、本発明の種々の態様の範囲及び精神の 範囲内で、様々な方法において本発明の実施例を追加したり、変更したりするこ とができるであろう。従って、本発明が属する分野の当業者には明らかな種々の 変形及び変更は、本発明の精神及び範囲の中にあると考えられる。
【手続補正書】特許法第184条の8第1項 【提出日】1998年1月9日(1998.1.9) 【補正内容】請求の範囲 1. 各配列へのアクセスが、最大配列サイズ境界値と最小配列サイズ境界値と の間にあることを照合するために構成される配列境界チェック装置であって、前 記装置が、 連想メモリ素子であって、複数の配列アクセス命令の1つに関連する配列サイ ズ値をストア、かつ回収するために構成され、前記各配列アクセス命令が前記配 列内の要素の位置を参照する、該連想メモリ素子と、 第1の比較素子であって、前記比較素子は前記連想メモリ素子の出力セクショ ンに動作可能に接続され、また前記比較素子は、前記連想メモリからの所定最大 配列サイズ値と前記配列内の前記参照された要素の位置とを比較し、さらに前記 参照された要素の位置が前記所定最大配列サイズ値より大きい場合、最大値違反 信号を供給するために構成される、該第1の比較素子と、 第2の比較素子であって、前記比較素子は前記連想メモリ素子の前記出力セク ションに動作可能に接続され、また前記比較素子は最小配列サイズ値と前記配列 内の前記参照された要素の位置とを比較し、さらに前記参照された要素の位置が 前記所定最小配列サイズ値より小さい場合、最小値違反信号を供給するために構 成される、該第2の比較素子とを有することを特徴とする配列境界チェック装置 。 2. 前記配列境界チェック装置がさらに、 例外素子であって、前記第1及び第2の比較素子に動作可能に接続され、また 前記例外素子は、前記最大値違反信号或いは前記最小値違反信号のいずれかの受 信に応じて例外信号を供給するために構成される、該例外素子を有することを特 徴とする請求項1に記載の配列境界チェック装置。 3. 前記連想メモリ素子がさらに、 第1のメモリセクションであって、複数の配列参照エントリを受信し、かつス トアするために構成される第1の複数のメモリ位置を含み、前記第1の複数のメ モリ位置の各1つが、前記複数の配列参照エントリの1つをストアするために構 成され、また前記複数の配列参照エントリの各1つが前記複数の配列アクセス命 令の1つに対応する、該第1のメモリセクションと、 入力セクションであって、前記第1のメモリセクションに動作可能に接続され 、また前記入力セクションは配列アクセス命令識別子を受信し、かつ同時に前記 配列アクセス命令識別子と、少なくとも前記ストアされた複数の配列参照エント リの一部とを比較するために構成され、前記配列アクセス命令識別子が配列アク セス命令を識別する、該入力セクションと、 第2のメモリセクションであって、複数の配列サイズ値を受信、かつストアす るために構成される第2の複数のメモリ位置を含み、前記第2の複数のメモリ位 置の各1つは前記配列サイズ値の1つをストアするために構成され、前記第1の 複数のメモリ位置に関連し、さらに前記複数の配列サイズ値の各1つは前記複数 の配列アクセス命令の1つに関連し、最大配列サイズ値及び最小配列サイズ値を 含む、該第2のメモリセクションとを有することを特徴とし、さらに 前記連想メモリ素子の前記出力セクションが前記第2のメモリセクションに 動作可能に接続され、また前記出力セクションが、配列サイズ出力値として、前 記配列アクセス命令識別子と一致する前記複数の配列参照エントリの1つがスト アされる前記第1の複数のメモリ位置の1つに関連する前記第2の複数のメモリ 位置の1つにストアされる前記複数の配列サイズの1つを与えることを特徴とす る請求項1に記載の配列境界チェック装置。 4. 前記境界配列チェック装置がコンピュータシステムに含まれ、前記コンピ ュータシステムが、 前記連想メモリ素子に接続され、ソフトウエアプログラムを受信し、かつ翻訳 し、ソフトウエアプログラムに従って複数の翻訳された命令と複数の命令識別子 を供給するために構成される翻訳ユニットであって、前記命令識別子の各1つが 前記複数の翻訳された命令の1つに対応し、前記複数の翻訳された命令が複数の 配列アクセス命令を含む、該翻訳ユニットと、 前記複数の命令識別子に従って、前記複数の翻訳された命令を受信し、それに より受信した翻訳命令を実行するために構成された実行ユニットとを有すること を特徴とし、 前記実行ユニットが、前記最大値違反信号或いは前記最小値違反信号のいず れかの発生に応じて、例外信号を受信するように構成されることを特徴とする請 求項1に記載の配列境界チェック装置。 5. 前記境界配列チェック装置がコンピュータシステムに含まれ、前記コンピ ュータシステムが、 前記連想メモリ素子に接続され、ソフトウエアプログラムを受信し、かつ翻訳 し、ソフトウエアプログラムに従って複数の翻訳された命令と複数の命令識別子 を供給するために構成される翻訳ユニットであって、前記命令識別子の各1つが 前記複数の翻訳された命令の1つに対応し、前記複数の翻訳された命令が前記複 数の配列アクセス命令を含む、該翻訳ユニットと、 前記複数の命令識別子に従って、前記複数の翻訳された命令を受信し、それに より受信した翻訳命令を実行するために構成された実行ユニットとを有すること を特徴とし、 前記実行ユニットが、配列アクセス境界例外サブルーチンを定義す る一連の翻訳された信号を実行することにより、例外信号に対応するように構成 されることを特徴とする請求項2に記載の配列境界チェック装置。 6. 前記境界配列チェック装置がコンピュータシステムに含まれ、前記コンピ ュータシステムが、 前記連想メモリ素子に接続され、ソフトウエアプログラムを受信し、かつ翻訳 し、ソフトウエアプログラムに従って複数の翻訳された命令と複数の命令識別子 を供給するために構成される翻訳ユニットであって、前記命令識別子の各1つが 前記複数の翻訳された命令の1つに対応し、前記複数の翻訳された命令が複数の 配列アクセス命令を含む、該翻訳ユニットと、 前記複数の命令識別子に従って、前記複数の翻訳された命令を受信し、それに より受信した翻訳命令を実行するために構成された実行ユニットであって、前記 実行ユニットが、前記最大値違反信号或いは前記最小値違反信号のいずれかの発 生に応じて例外信号を受信するように構成される、該実行ユニットと有するを特 徴とする請求項3に記載の配列境界チェック装置。 7. 前記配列境界チェック装置がコンピュータシステムに含まれ、前記コンピ ュータシステムが、 前記連想メモリ素子に接続される命令デコーダであって、前記命令デコーダは コンピュータ命令を受信し、それに応じて複数のデコードされた命令と複数の命 令識別子とを与えるように構成され、前記命令識別子の各1つが前記複数のデコ ードされた命令の1つに対応し、前記複数のデコードされた命令が前記複数の配 列アクセス命令を含む、該命令デコーダと、 前記複数の命令識別子に従って、前記複数のデコードされた命令を受 信し、それに応じて受信したデコード命令を実行するように構成される実行ユニ ットとを有することを特徴とする請求項1に記載の配列境界チェック装置。 8. 情報配列の要素が、最大配列サイズ境界値と最小配列サイズ境界値との間 にあることを照合するための方法であって、前記方法が、 第1のメモリセクションにおける複数の配列参照エントリをストアする過程で あって、前記第1のメモリセクションは第1の複数のメモリ位置を含み、前記第 1の複数のメモリ位置の各1つが前記複数の配列参照エントリの1つをストアす るために構成され、さらに前記複数の配列参照エントリの各1つが複数の配列ア クセス命令の1つに対応する、該配列参照エントリストア過程と、 第2のメモリセクションにおける複数の配列サイズ値をストアする過程であっ て、前記第2のメモリセクションは第2の複数のメモリ位置を含み、前記第2の 複数のメモリ位置の各1つが前記配列サイズ値の1つをストアするために構成さ れ、かつ前記第1の複数のメモリ位置の1つに関連し、さらに前記複数の配列サ イズ値の各1つが前記複数の配列アクセス命令の1つに関連し、かつ最大配列サ イズ値及び最小配列サイズ値を含む、該配列サイズ値ストア過程と、 配列アクセス命令識別子を、少なくとも前記ストアされた各配列参照エントリ の一部と同時に比較する過程であって、前記配列アクセス命令識別子が配列アク セス命令を識別する、該比較過程と、 前記第2の複数のメモリ位置の1つにストアされる前記複数の配列サイズ値の 1つの配列サイズ出力値を発生する過程であって、前記第2の複数のメモリ位置 の1つが、前記配列アクセス命令識別子と一致する複数の配列参照エントリの1 つがストアされる前記第1の複数のメモリ位置の1つに関連し、前記配列サイズ 出力値が最大配列サイズ出力値と最 小配列サイズ出力値とを含む、該配列サイズ出力値発生過程と、 前記最大配列サイズ出力値と前記情報配列内の参照された要素の位置とを比較 し、前記参照された要素の位置が前記最大配列サイズ出力値より大きい場合、最 大値違反信号を発生する過程と、 前記最小配列サイズ出力値と前記参照された要素の位置とを比較し、前記参照 された要素の位置が前記最小配列サイズ出力値より小さい場合、最小値違反信号 を発生する過程と、 前記最大値違反信号或いは前記最小値違反信号の発生に応じて、例外信号を供 給する過程とを有することを特徴とする配列サイズ照合方法。 9. 情報配列の要素が、最大配列サイズ境界値と最小配列サイズ境界値との間 にあることを照合するための方法であって、前記方法が、 前記最大値違反信号或いは前記最小値違反信号のいずれかの発生に応じて、例 外出力信号を発生する過程をさらに有することを特徴とする請求項8に記載の方 法。 10. 情報配列の要素が、最大配列サイズ境界値と最小配列サイズ境界値との 間にあることを照合するための方法であって、 前記演算ストア過程が配列サイズ値をストアし、回収するように構成される連 想メモリ素子を使用し、前記配列サイズ値が複数の配列アクセス命令の1つに関 連し、各配列アクセス命令が前記配列内の要素の値を参照し、 前記最大配列サイズ出力値を比較する過程が、前記連想メモリ素子の出力セク ションに動作可能に接続される第1の比較素子を使用し、前記第1の比較素子は 所定の最大配列サイズ値と、前記参照された要素の前記位置とを比較し、前記参 照された要素の前記位置が前記所定の最大配列サイズ値より大きい場合に、前記 最大値違反信号を供給するように構成され、 前記最小配列サイズ出力値を比較する過程が、前記連想メモリ素子の前記出力 セクションに動作可能に接続される第2の比較素子を使用し、前記第2の比較素 子は前記所定の最小配列サイズ値と、前記参照された素子の位置とを比較し、前 記参照された素子の位置が前記所定の最小配列サイズ値より小さい場合に、前記 最小値違反信号を供給するように構成されることを特徴とする請求項8に記載の 方法。
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,DE, DK,ES,FI,FR,GB,GR,IE,IT,L U,MC,NL,PT,SE),CN,JP,KR (72)発明者 オコナー、ジェイムズ・マイケル アメリカ合衆国カリフォルニア州94043・ マウンテンビュー・ルースアベニュー 345 (72)発明者 ジョイ、ウィリアム・エヌ アメリカ合衆国カリフォルニア州94043― 1100・マウンテンビュー・ガルシアアベニ ュー 2550

Claims (1)

  1. 【特許請求の範囲】 1. 各配列へのアクセスが、最大配列サイズ境界値と最小配列サイズ境界値と の間にあることを照合するために構成される配列境界チェック装置であって、前 記装置が、 連想メモリ素子であって、複数の配列アクセス命令の1つに関連する配列サイ ズ値をストア、かつ回収するために構成され、前記各配列アクセス命令が前記配 列内の要素の値を参照する、該連想メモリ素子と、 第1の比較素子であって、前記比較素子は前記連想メモリ素子の出力セクショ ンに動作可能に接続され、また前記比較素子は所定の最大配列サイズ値と前記参 照された要素の値とを比較し、さらに前記参照された要素の値が前記所定最大配 列サイズ値より大きい場合、最大値違反信号を供給するために構成される、該第 1の比較素子と、 第2の比較素子であって、前記比較素子は前記連想メモリ素子の前記出力セク ションに動作可能に接続され、また前記比較素子は最小配列サイズ値と前記参照 された要素の値とを比較し、さらに前記参照された要素の値が前記所定最小配列 サイズ値より小さい場合、最小値違反信号を供給するために構成される、該第2 の比較素子とを有することを特徴とする配列境界チェック装置。 2. 前記配列境界チェック装置がさらに、 例外素子であって、前記第1及び第2の比較素子に動作可能に接続され、また 前記例外素子は、前記最大値違反信号或いは前記最小値違反信号のいずれかの受 信に応じて例外信号を供給するために構成される、該例外素子を有することを特 徴とする請求項1に記載の配列境界チェック装置。 3. 前記連想メモリ素子がさらに、 第1のメモリセクションであって、複数の配列参照エントリを受信し、 かつストアするために構成される第1の複数のメモリ位置を含み、前記第1の複 数のメモリ位置の各1つが、前記複数の配列参照エントリの1つをストアするた めに構成され、また前記複数の配列参照エントリの各1つが前記複数の配列アク セス命令の1つに対応する、該第1のメモリセクションと、 入力セクションであって、前記第1のメモリセクションに動作可能に接続され 、また前記入力セクションは配列アクセス命令識別子を受信し、かつ同時に前記 配列アクセス命令識別子と、少なくとも前記ストアされた配列参照エントリの一 部とを比較するために構成され、前記配列アクセス命令識別子が配列アクセス命 令を識別する、該入力セクションと、 第2のメモリセクションであって、複数の配列サイズ値を受信、かつストアす るために構成される第2の複数のメモリ位置を含み、前記第2の複数のメモリ位 置の各1つは前記配列サイズ値の1つをストアするために構成され、前記第1の 複数のメモリ位置に関連し、さらに前記複数の配列サイズ値の各1つは前記複数 の配列アクセス命令の1つに関連し、最大配列サイズ値及び最小配列サイズ値を 含む、該第2のメモリセクションとを有することを特徴とし、さらに 前記連想メモリ素子の前記出力セクションが前記第2のメモリセクションに動 作可能に接続され、また前記出力セクションが、配列サイズ出力値として、前記 配列アクセス命令識別子と一致する前記複数の配列参照エントリの1つがストア される前記第1の複数のメモリ位置の1つに関連する前記第2の複数のメモリ位 置の1つにストアされる前記複数の配列サイズの1つを与えることを特徴とする 請求項1に記載の配列境界チェック装置。 4. 情報配列のサイズが最大配列サイズ境界値と最小配列サイズ境界値との間 にあることを照合するために構成される配列境界チェック装置 であって、前記装置が、 (a) 配列サイズ値をストアし、各回収するために構成される連想メモリ素 子であって、前記配列サイズ値が複数の配列アクセス命令の1つに関連し、各配 列アクセス命令は前記配列内の要素の値を参照する、該連想メモリ素子を有する ことを特徴とし、前記連想メモリ素子が、 (i) 第1のメモリセクションであって、複数の配列参照エントリを受信 、かつストアするために構成される第1の複数のメモリ位置を含み、前記第1の 複数のメモリ位置の各1つが前記複数の配列参照エントリの1つをストアするた めに構成され、さらに前記複数の配列参照エントリの1つが前記複数の配列アク セス命令の1つに対応する、該第1のメモリセクションと、 (ii) 第2のメモリセクションであって、複数の配列サイズ値を受信、 かつストアするために構成される第2の複数のメモリ位置を含み、前記第2の複 数のメモリ位置の各1つが前記配列サイズ値の1つをストアするために構成され 、かつ前記第1の複数のメモリ位置の1つに関連し、さらに前記複数の配列サイ ズ値の各1つが前記複数の配列アクセス命令の1つに関連し、かつ最大配列サイ ズ値及び最小配列サイズ値を含む、該第2のメモリセクションと、 (iii) 入力セクションであって、前記第1のメモリセクションに動作 可能に接続され、また前記入力セクションは、配列アクセス命令識別子を受信し 、かつ同時に前記配列アクセス命令識別子と、少なくとも前記ストアされた各配 列参照エントリの一部とを比較するために構成され、前記配列アクセス命令識別 子が配列アクセス命令を識別する、該入力セクションと、 (iv) 出力セクションであって、前記第2のメモリセクションに動作可 能に接続され、また前記出力セクションは、配列サイズ出力値 として、前記配列アクセス命令識別子に一致する前記複数の配列参照エントリの 1つがストアされる前記第1の複数のメモリ位置の1つに関連する前記第2の複 数のメモリ位置の1つにストアされる前記複数の配列サイズ値の1つを与える、 該出力セクションとを有することを特徴とし、 (b)第1の比較素子であって、前記出力セクションに動作可能に接続され、ま た前記第1の比較素子は前記最大配列サイズ出力値と前記参照された要素の値と を比較し、かつ前記参照された要素の値が前記最大配列サイズ出力値より大きい 場合、最大値違反信号を与えるために構成される、該第1の比較素子と、 (c)第2の比較素子であって、前記出力セクションに動作可能に接続され、ま た前記第2の比較素子は前記最小配列サイズ出力値と前記参照された要素の値と を比較し、かつ前記参照された要素の値が前記最小配列サイズ出力値より小さい 場合、最小値違反信号を与えるために構成される、該第2の比較素子と、 (d)例外素子であって、前記第1及び第2の比較素子に動作可能に接続され、 また前記例外素子は前記最大値違反信号或いは最小値違反信号のいずれかの受信 に応じて例外出力信号を与えるために構成される、該例外素子とを有することを 特徴とする配列境界チェック装置。 5. 情報配列のサイズが、最大配列サイズ境界値と最小配列サイズ境界値との 間にあることを照合するための方法であって、前記方法が、 第1のメモリセクションにおける複数の配列参照エントリをストアする過程で あって、前記第1のメモリセクションは第1の複数のメモリ位置を含み、前記第 1の複数のメモリ位置の各1つが前記複数の配列参照エントリの1つをストアす るために構成され、さらに前記複数の配列参照エントリの各1つが複数の配列ア クセス命令の1つに対応する、該配列参照エントリストア過程と、 第2のメモリセクションにおける複数の配列サイズ値をストアする過程であっ て、前記第2のメモリセクションは第2の複数のメモリ位置を含み、前記第2の 複数のメモリ位置の各1つが前記配列サイズ値の1つをストアするために構成さ れ、かつ前記第1の複数のメモリ位置の1つに関連し、さらに前記複数の配列サ イズ値の各1つが前記複数の配列アクセス命令の1つに関連し、かつ最大配列サ イズ値及び最小配列サイズ値を含む、該配列サイズ値ストア過程と、 配列アクセス命令識別子を、少なくとも前記ストアされた各配列参照エントリ の一部と同時に比較する過程であって、前記配列アクセス命令識別子が配列アク セス命令を識別する、該比較過程と、 配列サイズ出力値として、前記配列アクセス命令と一致する前記複数の配列参 照エントリの1つがストアされる前記第1の複数のメモリ位置の1つに関連する 前記第2の複数のメモリ位置の1つにストアされる前記複数の配列サイズ値の1 つを与える過程と、 前記最大配列サイズ出力値と前記参照された要素の値とを比較し、前記参照さ れた要素の値が前記最大配列サイズ出力値より大きい場合、最大値違反信号を発 生する過程と、 前記最小配列サイズ出力値と前記参照された要素の値とを比較し、前記参照さ れた要素の値が前記最小配列サイズ出力値より小さい場合、最小値違反信号を発 生する過程と、 前記最大値違反信号或いは前記最小値違反信号の発生に応じて、例外信号を供 給する過程とを有することを特徴とする配列サイズ照合方法。 6. 情報配列のサイズが、最大配列サイズ境界値と最小配列サイズ境界値との 間にあることを照合するための方法であって、前記方法が、 連想メモリ素子を与える過程であって、前記連想メモリ素子が複数の配列アク セス命令の1つに関連する配列サイズ値をストアし、かつ回収 するために構成され、また各配列アクセス命令が前記配列内の要素の値を参照す る、該連想メモリ素子を与える過程と、 第1の比較素子を与える過程であって、前記第1の比較素子が前記連想メモリ 素子の出力セクションに動作可能に接続され、また前記第1の比較素子が所定の 最大配列サイズ値と前記参照された要素の値とを比較し、さらに前記参照された 要素の値が前記所定の最大配列サイズ値より大きい場合、最大値違反信号を供給 するために構成される、該第1の比較素子を与える過程と、 第2の比較素子を与える過程であって、前記第2の比較素子は前記メモリ素子 の前記出力セクションに動作可能に接続され、また前記第2の比較素子が所定の 最小配列サイズ値と前記参照された要素の値とを比較し、さらに前記参照された 要素の値が前記所定の最小配列サイズ値より小さい場合、最小値違反信号を供給 するために構成される、該第2の比較素子を与える過程と、 例外素子を与える過程であって、前記例外素子は前記第1及び前記第2の比較 素子に動作可能に接続され、また前記例外素子が、前記最大値違反信号或いは前 記最小値違反信号の受信に応じて、例外信号を供給するために構成される、該例 外素子を与える過程とを有することを特徴とする配列サイズ照合方法。 7. さらに第1の複数のメモリ位置を含む前記連想メモリ内の第1のメモリセ クションを与える過程であって、前記第1の複数のメモリ位置が複数の配列参照 エントリを受信し、かつストアするために構成され、前記第1の複数のメモリ位 置の各1つが前記複数の配列参照エントリの1つをストアするために構成され、 さらに前記複数の配列参照エントリの各1つが、前記複数の配列アクセス命令の 1つに対応する、該第1のメモリセクションを与える過程と、 入力セクションを与える過程であって、前記入力セクションは前記第1のメモ リセクションに動作可能に接続され、また前記入力セクションは配列アクセス命 令識別子を受信し、かつ同時に前記配列アクセス命令識別子を、少なくとも前記 ストアされた各配列参照エントリの一部と比較するために構成され、前記配列ア クセス命令識別子が配列アクセス命令を識別する、該入力セクションを与える過 程と、 第2の複数のメモリ位置を含む前記連想メモリ素子内の第2のメモリセクショ ンを与える過程であって、前記第2のメモリ位置が複数の配列サイズ値を受信し 、かつストアするために構成され、かつ前記第1の複数のメモリ位置の1つに関 連し、さらに前記複数の配列サイズ値の各1つが前記複数の配列アクセス命令の 1つに関連し、かつ最大配列サイズ値及び最小配列サイズ値を含む、該第2のメ モリセクションを与える過程とを有することを特徴とし、 前記連想メモリ素子の前記出力セクションが前記第2のメモリセクションに動 作可能に接続され、かつ配列サイズ出力値として、前記配列アクセス命令識別子 と一致する前記複数の配列参照エントリの1つがストアされる前記第1の複数の メモリ位置の1つに関連する前記第2の複数のメモリ位置の1つにストアされる 前記複数の配列サイズ値の1つを与えることを特徴とする請求項6に記載の方法 。 8. 情報配列のサイズが、最大配列サイズ境界値と最小配列サイズ境界値との 間にあることを照合するために構成される配列境界チェック装置を与えるための 方法であって、前記方法が、 (a) 配列サイズ値をストアし、各回収するために構成される連想メモリ素 子を与える過程であって、前記配列サイズ値の各1つが複数の配列アクセス命令 の1つに関連する、該連想メモリ素子を与える過程を有することを特徴とし、前 記連想メモリ素子が、 (i) 第1のメモリセクションであって、複数の配列参照エントリを受信 、かつストアするために構成される第1の複数のメモリ位置を含み、前記第1の 複数のメモリ位置の各1つが前記複数の配列参照エントリの1つをストアするた めに構成され、さらに前記複数の配列参照エントリの1つが前記複数の配列アク セス命令の1つに対応する、該第1のメモリセクションと、 (ii) 第2のメモリセクションであって、複数の配列サイズ値を受信、 かつストアするために構成される第2の複数のメモリ位置を含み、前記第2の複 数のメモリ位置の各1つが前記配列サイズ値の1つをストアするために構成され 、かつ前記第1の複数のメモリ位置の1つに関連し、さらに前記複数の配列サイ ズ値の各1つが前記複数の配列アクセス命令の1つに関連し、かつ最大配列サイ ズ値及び最小配列サイズ値を含む、該第2のメモリセクションと、 (iii) 入力セクションであって、前記第1のメモリセクションに動作 可能に接続され、また前記入力セクションは、配列アクセス命令識別子を受信し 、かつ同時に前記配列アクセス命令識別子と、少なくとも前記ストアされた各配 列参照エントリの一部とを比較するために構成され、前記配列アクセス命令識別 子が配列アクセス命令を識別する、該入力セクションと、 (iv) 出力セクションであって、前記第2のメモリセクションに動作可 能に接続され、また前記出力セクションは、配列サイズ出力値として、前記配列 アクセス命令識別子に一致する前記複数の配列参照エントリの1つがストアされ る前記第1の複数のメモリ位置の1つに関連する前記第2の複数のメモリ位置の 1つにストアされる前記複数の配列サイズ値の1つを与える、該出力セクション とを有することを特徴とし、 (b)第1の比較素子を与える過程であって、前記第1の比較素子は前 記出力セクションに動作可能に接続され、また前記第1の比較素子は前記最大配 列サイズ出力値と前記参照された要素の値とを比較し、かつ前記参照された要素 の値が前記最大配列サイズ出力値より大きい場合、最大値違反信号を与えるため に構成される、該第1の比較素子を与える過程と、 (c)第2の比較素子を与える過程であって、前記第2の比較素子は前記出力セ クションに動作可能に接続され、また前記第2の比較素子は前記最小配列サイズ 出力値と前記参照された要素の値とを比較し、かつ前記参照された要素の値が前 記最小配列サイズ出力値より小さい場合、最小値違反信号を与えるために構成さ れる、該第2の比較素子を与える過程と、 (d)例外素子を与える過程であって、前記例外素子は前記第1及び第2の比較 素子に動作可能に接続され、また前記例外素子は前記最大値違反信号或いは最小 値違反信号のいずれかの受信に応じて例外出力信号を与えるために構成される、 該例外素子を与える過程とを有することを特徴とする配列境界チェック装置を与 える方法。 9. コンピュータシステムであって、 ソフトウエアプログラムを受信し、かつ翻訳し、ソフトウエアプログラムに従 って複数の翻訳された命令と複数の命令識別子を供給するために構成される翻訳 ユニットであって、前記命令識別子の各1つが前記複数の翻訳された命令の1つ に対応し、前記複数の翻訳された命令が複数の配列アクセス命令を含む、該翻訳 ユニットと、 前記複数の命令識別子に従って、前記複数の翻訳された命令を受信し、それに より受信した翻訳命令を実行するために構成された実行ユニットと、 連想メモリ素子であって、複数の配列アクセス命令の1つに関連する 配列サイズ値をストアし、かつ回収するために構成され、各配列アクセス命令が 前記配列内の要素の値を参照する、該連想メモリ素子と、 第1の比較素子であって、前記連想メモリ素子の出力セクションに動作可能に 接続され、また前記第1の比較素子は所定の最大配列サイズ値と前記参照された 要素の値とを比較し、かつ前記参照された要素の値が前記所定の最大配列サイズ 値より大きい場合、最大値違反信号を供給するために構成される、該第1の比較 素子と、 第2の比較素子であって、前記連想メモリ素子の前記出力セクションに動作可 能に接続され、また前記第2の比較素子は所定最小配列サイズ値と前記参照され た要素の値とを比較し、かつ前記参照された要素の値が前記所定の最小配列サイ ズ値より小さい場合、最小値違反信号を供給するために構成される、該第2の比 較素子と、 例外素子であって、前記第1及び前記第2の比較素子、並びに実行ユニットに 動作可能に接続され、また前記例外ユニットは前記最大値違反信号或いは前記最 小値違反信号のいずれかの受信に応じて、前記実行ユニットに例外信号を供給す るために構成される、該例外素子とを有することを特徴とするコンピュータシス テム。 10. 前記連想メモリ素子がさらに、 第1のメモリセクションであって、複数の配列参照エントリを受信し、かつス トアするために構成される第1の複数のメモリ位置を含み、前記第1の複数のメ モリ位置の各1つが前記複数の配列参照エントリの1つをストアするために構成 され、さらに前記複数の配列参照エントリの各1つが、前記複数の配列アクセス 命令の1つに対応する、該第1のメモリセクションと、 入力セクションであって、前記第1のメモリセクションに動作可能に接続され 、また前記入力セクションは、配列アクセス命令識別子を受信 し、さらに同時に前記配列アクセス命令識別子と少なくとも前記ストアされた各 配列参照エントリの一部とを比較するために構成され、前記配列アクセス命令識 別子が配列アクセス命令を識別する、該入力セクションと、 第2のメモリセクションであって、複数の配列サイズ値を受信し、かつストア するために構成される第2の複数のメモリ位置を含み、前記第2の複数のメモリ 位置の各1つが、前記第1の複数のメモリ位置の1つに関連する前記配列サイズ 値の1つをストアするために構成され、さらに前記複数の配列サイズ値の各1つ が前記複数の配列アクセス命令の1つに関連し、かつ最大配列サイズ値及び最小 配列サイズ値を含む、該第2のメモリセクションとを有することを特徴とし、 前記連想メモリ素子の前記出力セクションが前記第2のメモリセクションに動 作可能に接続され、かつ配列サイズ出力値として、前記配列アクセス命令識別子 と一致する前記複数の配列参照エントリの1つがストアされる前記第1の複数の メモリ位置の1つに関連する前記第2の複数のメモリ位置の1つにストアされる 前記複数の配列サイズ値の1つを与えることを特徴とする請求項9に記載のコン ピュータシステム。 11. コンピュータシステムであって、 ソフトウエアプログラムを受信し、かつ翻訳し、ソフトウエアプログラムに従 って複数の翻訳された命令と複数の命令識別子を供給するために構成される翻訳 ユニットであって、前記命令識別子の各1つが前記複数の翻訳された命令の1つ に対応し、前記複数の翻訳された命令が複数の配列アクセス命令を含む、該翻訳 ユニットと、 前記複数の命令識別子に従って、前記複数の翻訳された命令を受信し、それに より受信した翻訳命令を実行するために構成された実行ユニットと、 連想メモリ素子であって、複数の配列サイズ値をストアし、かつ回収するため に構成され、前記配列サイズ値の各1つが複数の配列アクセス命令の1つに関連 する、該連想メモリ素子とを有することを特徴とし、前記連想メモリ素子がさら に、 (i) 第1のメモリセクションであって、複数の配列参照エントリを受信 し、かつストアするために構成される第1の複数のメモリ位置を含み、前記第1 の複数のメモリ位置の各1つが、前記複数の配列参照エントリの1つをストアす るために構成され、さらに前記複数の配列参照エントリの各1つが前記複数の配 列アクセス命令の1つに対応する、該第1のメモリセクションと、 (ii) 第2のメモリセクションであって、複数の配列サイズ値を受信し 、かつストアするために構成される第2の複数のメモリ位置を含み、前記第2の 複数のメモリ位置の各1つが、前記配列サイズ値の1つをストアするために構成 され、かつ前記第1の複数のメモリ位置の1つに関連し、さらに前記複数の配列 サイズ値の各1つが前記複数の配列アクセス命令の1つに関連し、かつ最大配列 サイズ値及び最小配列サイズ値を含む、該第2のメモリセクションと、 (iii) 入力セクションであって、前記第1のメモリセクションに動作 可能に接続され、また前記入力セクションは配列アクセス命令識別子を受信し、 かつ同時に前記配列アクセス命令識別子と、少なくとも前記ストアされた各配列 参照エントリの一部とを比較するために構成され、前記配列アクセス命令識別子 が配列アクセス命令を識別する、該入力セクションと、 (iv) 出力セクションであって、前記第2のメモリセクションに動作可 能に接続され、また前記出力セクションは配列サイズ出力値として、前記配列ア クセス命令識別子と一致する前記複数の配列参照エン トリの1つがストアされる前記第1の複数のメモリ位置の1つに関連する前記第 2の複数のメモリ位置の1つにストアされる前記複数の配列サイズ値の1つを与 える、該出力セクションと、 第1の比較素子であって、前記連想メモリ素子の前記出力セクションに動作可 能に接続され、また前記第1の比較素子は前記参照された要素の値と前記最大配 列サイズ出力値とを比較し、かつ前記参照された要素の値が前記最大配列サイズ 出力値より大きい場合、最大値違反信号を供給するために構成される、該第1の 比較素子と、 第2の比較素子であって、前記連想メモリ素子の前記出力セクションに動作可 能に接続され、また前記第2の比較素子は前記参照された要素の値と前記最小配 列サイズ出力値とを比較し、かつ前記参照された要素の値が前記最小配列サイズ 出力値より小さい場合、最小値違反信号を供給するために構成される、該第2の 比較素子と、 例外素子であって、前記第1及び第2の比較素子、並びに前記実行ユニットに 動作可能に接続され、また前記例外素子は、前記最大値違反信号或いは前記最小 値違反信号のいずれかの受信に応じて、前記実行ユニットに例外出力信号を供給 するために構成される、該例外素子とを有することを特徴とし、 前記実行ユニットが配列アクセス境界例外サブルーチンを定義する一連の翻訳 された命令を実行することにより、前記例外出力信号に応答するために構成され ることを特徴とするコンピュータシステム。
JP9527086A 1996-01-24 1997-01-23 配列アクセス境界チェックを加速したプロセッサ Pending JP2000501217A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US1052796P 1996-01-24 1996-01-24
US64224896A 1996-05-02 1996-05-02
US08/642,248 1996-05-02
US60/010,527 1996-05-02
PCT/US1997/001305 WO1997027544A1 (en) 1996-01-24 1997-01-23 Processor with accelerated array access bounds checking

Publications (1)

Publication Number Publication Date
JP2000501217A true JP2000501217A (ja) 2000-02-02

Family

ID=26681279

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9527086A Pending JP2000501217A (ja) 1996-01-24 1997-01-23 配列アクセス境界チェックを加速したプロセッサ

Country Status (6)

Country Link
US (1) US6014723A (ja)
EP (1) EP0976050B1 (ja)
JP (1) JP2000501217A (ja)
KR (1) KR100466722B1 (ja)
DE (1) DE69713400T2 (ja)
WO (1) WO1997027544A1 (ja)

Families Citing this family (103)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998043431A1 (en) * 1997-03-21 1998-10-01 Canal+ Societe Anonyme Method of downloading of data to an mpeg receiver/decoder and mpeg transmission system for implementing the same
US6343375B1 (en) * 1998-04-24 2002-01-29 International Business Machines Corporation Method for optimizing array bounds checks in programs
WO2000026902A1 (en) * 1998-11-04 2000-05-11 Syvox Corporation Apparatus and method for improved memory and resource management in a single-user or multi-user speech recognition system
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
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) * 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
JP4235299B2 (ja) * 1998-12-22 2009-03-11 キヤノン株式会社 カラー画像形成装置の製造方法
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
US8453133B2 (en) 1999-11-12 2013-05-28 Oracle America, Inc. Optimization of N-base typed arithmetic instructions via rework
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
JP3556556B2 (ja) * 2000-02-08 2004-08-18 株式会社東芝 命令コード変換装置及び情報処理システム
US6578094B1 (en) * 2000-03-02 2003-06-10 International Business Machines Corporation Method for preventing buffer overflow attacks
US7028170B2 (en) * 2000-03-08 2006-04-11 Sun Microsystems, Inc. Processing architecture having a compare capability
KR20030016234A (ko) 2000-03-08 2003-02-26 선 마이크로시스템즈, 인코포레이티드 어레이 바운드 체크 수용능력을 가진 아퀴텍쳐 처리
US6408383B1 (en) * 2000-05-04 2002-06-18 Sun Microsystems, Inc. Array access boundary check by executing BNDCHK instruction with comparison specifiers
US6782407B1 (en) * 2000-09-26 2004-08-24 Koninklijke Philips Electronics N.V. System and method for low overhead boundary checking of java arrays
GB2367653B (en) 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
GB2367654B (en) 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
KR20020028814A (ko) * 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
US8149048B1 (en) 2000-10-26 2012-04-03 Cypress Semiconductor Corporation Apparatus and method for programmable power management in a programmable analog circuit block
US6724220B1 (en) 2000-10-26 2004-04-20 Cyress Semiconductor Corporation Programmable microcontroller architecture (mixed analog/digital)
US8103496B1 (en) 2000-10-26 2012-01-24 Cypress Semicondutor Corporation Breakpoint control in an in-circuit emulation system
US8160864B1 (en) 2000-10-26 2012-04-17 Cypress Semiconductor Corporation In-circuit emulator and pod synchronized boot
US8176296B2 (en) 2000-10-26 2012-05-08 Cypress Semiconductor Corporation Programmable microcontroller architecture
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
US7284274B1 (en) * 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
US7137103B2 (en) * 2001-03-08 2006-11-14 International Business Machines Corporation Coverage analysis of message flows
GB2376098B (en) * 2001-05-31 2004-11-24 Advanced Risc Mach Ltd Unhandled operation handling in multiple instruction set systems
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
US6601160B2 (en) 2001-06-01 2003-07-29 Microchip Technology Incorporated Dynamically reconfigurable data space
US6985986B2 (en) * 2001-06-01 2006-01-10 Microchip Technology Incorporated Variable cycle interrupt disabling
US6552625B2 (en) 2001-06-01 2003-04-22 Microchip Technology Inc. Processor with pulse width modulation generator with fault input prioritization
US20030005269A1 (en) * 2001-06-01 2003-01-02 Conner Joshua M. Multi-precision barrel shifting
US20030023836A1 (en) * 2001-06-01 2003-01-30 Michael Catherwood Shadow register array control instructions
US20030005268A1 (en) * 2001-06-01 2003-01-02 Catherwood Michael I. Find first bit value instruction
US6975679B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Configuration fuses for setting PWM options
US7467178B2 (en) * 2001-06-01 2008-12-16 Microchip Technology Incorporated Dual mode arithmetic saturation processing
US6728856B2 (en) 2001-06-01 2004-04-27 Microchip Technology Incorporated Modified Harvard architecture processor having program memory space mapped to data memory space
US20020184566A1 (en) * 2001-06-01 2002-12-05 Michael Catherwood Register pointer trap
US6937084B2 (en) * 2001-06-01 2005-08-30 Microchip Technology Incorporated Processor with dual-deadtime pulse width modulation generator
US7007172B2 (en) * 2001-06-01 2006-02-28 Microchip Technology Incorporated Modified Harvard architecture processor having data memory space mapped to program memory space with erroneous execution protection
US20030028696A1 (en) * 2001-06-01 2003-02-06 Michael Catherwood Low overhead interrupt
US7003543B2 (en) * 2001-06-01 2006-02-21 Microchip Technology Incorporated Sticky z bit
US6952711B2 (en) * 2001-06-01 2005-10-04 Microchip Technology Incorporated Maximally negative signed fractional number multiplication
US6604169B2 (en) 2001-06-01 2003-08-05 Microchip Technology Incorporated Modulo addressing based on absolute offset
US6934728B2 (en) * 2001-06-01 2005-08-23 Microchip Technology Incorporated Euclidean distance instructions
US6976158B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Repeat instruction with interrupt
US7020788B2 (en) * 2001-06-01 2006-03-28 Microchip Technology Incorporated Reduced power option
US20030023958A1 (en) * 2001-07-17 2003-01-30 Patel Mukesh K. Intermediate language accelerator chip
US7062761B2 (en) 2001-07-10 2006-06-13 Micron Technology, Inc. Dynamic arrays and overlays with bounds policies
US7127559B2 (en) * 2001-07-10 2006-10-24 Micron Technology, Inc. Caching of dynamic arrays
US8769508B2 (en) * 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US6552567B1 (en) 2001-09-28 2003-04-22 Microchip Technology Incorporated Functional pathway configuration at a system/IC interface
US20040021483A1 (en) * 2001-09-28 2004-02-05 Brian Boles Functional pathway configuration at a system/IC interface
US7406674B1 (en) 2001-10-24 2008-07-29 Cypress Semiconductor Corporation Method and apparatus for generating microcontroller configuration information
US8078970B1 (en) 2001-11-09 2011-12-13 Cypress Semiconductor Corporation Graphical user interface with user-selectable list-box
US8042093B1 (en) 2001-11-15 2011-10-18 Cypress Semiconductor Corporation System providing automatic source code generation for personalization and parameterization of user modules
US7844437B1 (en) 2001-11-19 2010-11-30 Cypress Semiconductor Corporation System and method for performing next placements and pruning of disallowed placements for programming an integrated circuit
US6971004B1 (en) 2001-11-19 2005-11-29 Cypress Semiconductor Corp. System and method of dynamically reconfiguring a programmable integrated circuit
US8069405B1 (en) 2001-11-19 2011-11-29 Cypress Semiconductor Corporation User interface for efficiently browsing an electronic document using data-driven tabs
US20040215444A1 (en) * 2002-03-25 2004-10-28 Patel Mukesh K. Hardware-translator-based custom method invocation system and method
US8103497B1 (en) 2002-03-28 2012-01-24 Cypress Semiconductor Corporation External interface for event architecture
US7260658B2 (en) * 2002-05-31 2007-08-21 Oracle International Corporation Verifying input/output command data by separately sending data to be written and information about contents of the data
US7231666B2 (en) * 2002-06-20 2007-06-12 International Business Machines Corporation Method and apparatus for preventing buffer overflow security exploits
US7290080B2 (en) * 2002-06-27 2007-10-30 Nazomi Communications Inc. Application processors and memory architecture for wireless applications
KR100497671B1 (ko) * 2002-07-08 2005-07-25 주식회사 인터와이즈 메모리 접근 위반 처리 방법 및 이를 위한 컴퓨터 시스템
US7131118B2 (en) * 2002-07-25 2006-10-31 Arm Limited Write-through caching a JAVA® local variable within a register of a register bank
KR100506522B1 (ko) * 2003-02-24 2005-08-03 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
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
US7295049B1 (en) 2004-03-25 2007-11-13 Cypress Semiconductor Corporation Method and circuit for rapid alignment of signals
US7448029B2 (en) * 2004-04-26 2008-11-04 International Business Machines Corporation Modification of array access checking in AIX
US7836434B1 (en) * 2004-05-04 2010-11-16 Oracle America, Inc. Method and system for analyzing array access to a pointer that is referenced as an array
US7636795B2 (en) * 2004-06-30 2009-12-22 Intel Corporation Configurable feature selection mechanism
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
FR2874103B1 (fr) * 2004-08-03 2006-11-17 Trango Systems Sarl Utilisation de la mmu pour la detection de borne de memoire tampon
US7865701B1 (en) 2004-09-14 2011-01-04 Azul Systems, Inc. Concurrent atomic execution
US7332976B1 (en) * 2005-02-04 2008-02-19 Cypress Semiconductor Corporation Poly-phase frequency synthesis oscillator
US7400183B1 (en) 2005-05-05 2008-07-15 Cypress Semiconductor Corporation Voltage controlled oscillator delay cell and method
KR100725393B1 (ko) * 2005-05-19 2007-06-07 삼성전자주식회사 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
US20060271557A1 (en) * 2005-05-25 2006-11-30 Terracotta, Inc. Database Caching and Invalidation Based on Detected Database Updates
US7577801B1 (en) 2005-12-06 2009-08-18 Azul Systems, Inc. Array access
US8067948B2 (en) * 2006-03-27 2011-11-29 Cypress Semiconductor Corporation Input/output multiplexer bus
US8006239B2 (en) * 2007-01-16 2011-08-23 Nec Laboratories America, Inc. Program analysis using symbolic ranges
US9564902B2 (en) * 2007-04-17 2017-02-07 Cypress Semiconductor Corporation Dynamically configurable and re-configurable data path
US8040266B2 (en) * 2007-04-17 2011-10-18 Cypress Semiconductor Corporation Programmable sigma-delta analog-to-digital converter
US7737724B2 (en) 2007-04-17 2010-06-15 Cypress Semiconductor Corporation Universal digital block interconnection and channel routing
US8026739B2 (en) 2007-04-17 2011-09-27 Cypress Semiconductor Corporation System level interconnect with programmable switching
US8516025B2 (en) 2007-04-17 2013-08-20 Cypress Semiconductor Corporation Clock driven dynamic datapath chaining
US8130025B2 (en) 2007-04-17 2012-03-06 Cypress Semiconductor Corporation Numerical band gap
US9720805B1 (en) 2007-04-25 2017-08-01 Cypress Semiconductor Corporation System and method for controlling a target device
US8049569B1 (en) 2007-09-05 2011-11-01 Cypress Semiconductor Corporation Circuit and method for improving the accuracy of a crystal-less oscillator having dual-frequency modes
US7712093B1 (en) 2009-03-19 2010-05-04 International Business Machines Corporation Determining intra-procedural object flow using enhanced stackmaps
US8533695B2 (en) 2010-09-28 2013-09-10 Microsoft Corporation Compile-time bounds checking for user-defined types
US11681806B2 (en) 2019-10-15 2023-06-20 International Business Machines Corporation Protecting against out-of-bounds buffer references

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3573855A (en) * 1968-12-31 1971-04-06 Texas Instruments Inc Computer memory protection
US3905023A (en) * 1973-08-15 1975-09-09 Burroughs Corp Large scale multi-level information processing system employing improved failsaft techniques
US4079453A (en) * 1976-08-20 1978-03-14 Honeywell Information Systems Inc. Method and apparatus to test address formulation in an advanced computer system
US4084225A (en) * 1976-09-24 1978-04-11 Sperry Rand Corporation Virtual address translator
US4262332A (en) * 1978-12-28 1981-04-14 International Business Machines Corporation Command pair to improve performance and device independence
JPH0782458B2 (ja) * 1985-09-06 1995-09-06 株式会社日立製作所 データ処理装置
US5146592A (en) * 1987-09-14 1992-09-08 Visual Information Technologies, Inc. High speed image processing computer with overlapping windows-div
US5014235A (en) * 1987-12-15 1991-05-07 Steven G. Morton Convolution memory
US5341483A (en) * 1987-12-22 1994-08-23 Kendall Square Research Corporation Dynamic hierarchial associative memory
US4905188A (en) * 1988-02-22 1990-02-27 International Business Machines Corporation Functional cache memory chip architecture for improved cache access
US5777608A (en) * 1989-03-10 1998-07-07 Board Of Regents, The University Of Texas System Apparatus and method for in-parallel scan-line graphics rendering using content-searchable memories
JPH0471050A (ja) * 1990-07-12 1992-03-05 Oki Electric Ind Co Ltd スタック領域保護回路
US5373290A (en) * 1991-09-25 1994-12-13 Hewlett-Packard Corporation Apparatus and method for managing multiple dictionaries in content addressable memory based data compression
JPH0594376A (ja) * 1991-10-02 1993-04-16 Toshiba Corp ポータブルコンピユータ
JPH06149675A (ja) * 1992-11-11 1994-05-31 Kofu Nippon Denki Kk キャッシュメモリ装置
US5583988A (en) * 1994-03-09 1996-12-10 National Instruments Corporation Method and apparatus for providing runtime checking features in a compiled programming development environment
US5644709A (en) * 1994-04-21 1997-07-01 Wisconsin Alumni Research Foundation Method for detecting computer memory access errors
JP3713312B2 (ja) * 1994-09-09 2005-11-09 株式会社ルネサステクノロジ データ処理装置

Also Published As

Publication number Publication date
EP0976050B1 (en) 2002-06-12
KR100466722B1 (ko) 2005-04-14
KR19990081958A (ko) 1999-11-15
US6014723A (en) 2000-01-11
WO1997027544A1 (en) 1997-07-31
EP0976050A1 (en) 2000-02-02
DE69713400D1 (de) 2002-07-18
DE69713400T2 (de) 2002-10-31

Similar Documents

Publication Publication Date Title
US6014723A (en) Processor with accelerated array access bounds checking
US5925123A (en) Processor for executing instruction sets received from a network or from a local memory
JP3801643B2 (ja) スタックを用いる演算マシンのための命令フォールディング処理
JP3634379B2 (ja) スタックキャッシングのための方法及び装置
US6038643A (en) Stack management unit and method for a processor having a stack
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
US6065108A (en) Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same
US6122638A (en) Object-oriented processor and method for caching intermediate data in an object-oriented processor
US6076141A (en) Look-up switch accelerator and method of operating same
JPWO2003025743A1 (ja) Javaアクセラレータを備えたプロセッサシステム
KR100618718B1 (ko) 스택메모리구조에서의캐싱방법및장치

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060207

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20060428

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060619

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060804

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060919

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061214

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070111

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20070201

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090226

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090311

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090331

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090409