(57)【要約】  結合されたネイティブ（ＲＩＳＣまたはＣＩＳＣ）マイクロプロセッサおよびスタック（Ｊａｖａ（登録商標））マシン（１０，１１，１３）は、Ｊａｖａ（登録商標）ＶＭ命令がハードウェアで実行され得るように構築される。ほとんどのＪａｖａ（登録商標）命令は直接実行され（５４）、その一方でより複雑なＪａｖａ（登録商標）命令、たとえばＪａｖａ（登録商標）オブジェクトを操作する命令はネイティブマイクロコード（５６）として実行される。ネイティブマイクロコード命令がＪａｖａ（登録商標）オペランドスタックにアクセスするために、Ｊａｖａ（登録商標）オペランドスタックポインタ（２２，１０２）が、現在のスタックトップ（ＴｏＳ）であるレジスタファイル（１５，９０）位置を指定する一方、状態レジスタ（１０１）の再マップビット（ＲＭ）は、ネイティブ命令において特定されるレジスタが、Ｊａｖａ（登録商標）オペランドスタックポインタ最大値からＪａｖａ（登録商標）オペランドスタックポインタの現在の値を引き算したものとして再マップされる（９０ａ）ことを表わす。
2008536240.tif 000002
【特許請求の範囲】
【請求項１】
バイトコンパイルされたＪａｖａ（登録商標）コードをハードウェアとして実行するためのマイクロプロセッサであって、マイクロプロセッサは、
プロセッサコアと、
前記プロセッサコアにおいてＪａｖａ（登録商標）命令の第１のセットを実行するためのＪａｖａ（登録商標）制御モジュールと、
前記プロセッサコアにおいてネイティブ命令を実行するため、かつ前記プロセッサコアにおいてＪａｖａ（登録商標）命令の第２のセットをネイティブマイクロコードとして実行するための、ネイティブ制御モジュールと、
前記Ｊａｖａ（登録商標）制御モジュールおよびネイティブ制御モジュールにアクセス可能なシステムレジスタのセットとを含み、前記セットは、前記制御モジュールのいずれが所与の時間に動作可能であるかを指定するプロセッサ状態制御情報を包含する状態レジスタを含み、さらに
前記プロセッサコアのデータパスにありかつ両方の制御モジュールによってアクセス可能なレジスタファイルを含み、前記レジスタファイルは複数のレジスタ要素を含み、前記ネイティブ制御モジュールは複数のレジスタ要素をストレージレジスタとして見なし、Ｊａｖａ（登録商標）制御モジュールはレジスタ要素の第１の部分をＪａｖａ（登録商標）オペランドスタックとして、かつレジスタ要素の第２の部分をストレージレジスタとして見なし、
前記システムレジスタのセットは、現在のスタックトップである前記レジスタファイルのそのレジスタ要素を指定するＪａｖａ（登録商標）オペランドスタックポインタをも含み、前記状態レジスタはＪａｖａ（登録商標）レジスタ再マップビットをも包含し、それにより再マップビットが設定されると常に、前記第２のセットのＪａｖａ（登録商標）命令をネイティブマイクロコードとして実行する前記ネイティブ制御モジュールは、ネイティブマイクロコードで命令によって特定されるレジスタ番号をスタックトップに対して特定されたレジスタ要素に対応するよう処理する、マイクロプロセッサ。
【請求項２】
前記再マップビットが設定されると常に、ネイティブマイクロコード命令によってアクセスされるスタックトップに対して対応するレジスタは、オペランドスタックポインタの最大値から、Ｊａｖａ（登録商標）オペランドスタックポインタによって特定されるレジスタ番号を引き算したものである、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記再マップビットがリセットされていると常に、前記ネイティブ制御モジュールは、ネイティブ命令によって特定されるレジスタ番号をレジスタファイルの対応するストレージ要素を指定するよう処理する、請求項１に記載のマイクロプロセッサ。
【請求項４】
前記再マップビットはＪａｖａ（登録商標）制御モジュールによって無視される、請求項１に記載のマイクロプロセッサ。
【請求項５】
前記第２のセットのＪａｖａ（登録商標）命令は前記第１のセットのＪａｖａ（登録商標）命令よりも複雑であって、前記第２のセットの命令は１つのクロックサイクル内でプロセッサコアにおいて実行されることができない、請求項１に記載のマイクロプロセッサ。
【請求項６】
Ｊａｖａ（登録商標）命令の前記第２のセットはＪａｖａ（登録商標）オブジェクトを生成したり操作したりするための命令を含む、請求項５に記載のマイクロプロセッサ。
【請求項７】
Ｊａｖａ（登録商標）命令の前記第２のセットは長いデータタイプおよび浮動小数点データタイプで動作する命令を含む、請求項５に記載のマイクロプロセッサ。
【請求項８】
Ｊａｖａ（登録商標）命令の前記第２のセットはダブルタイプの命令を含む、請求項５に記載のマイクロプロセッサ。
【請求項９】
前記プロセッサコアはＲＩＳＣプロセッサであり、ネイティブ命令はＲＩＣＳ命令であって、Ｊａｖａ（登録商標）命令の第２のセットを実現するためのネイティブマイクロコードはＲＩＳＣマイクロコードである、請求項１に記載のマイクロプロセッサ。
【請求項１０】
前記レジスタファイルは、実行されるべき命令のメモリアドレスを包含するプログラムカウンタをレジスタ要素の１つとして含む、請求項１に記載のマイクロプロセッサ。
【請求項１１】
前記レジスタファイルは、サブプログラム呼出の完了後の実行のための戻りアドレスを包含するリンクレジスタをレジスタ要素の１つとして含む、請求項１に記載のマイクロプロセッサ。
【請求項１２】
前記レジスタファイルは、前記レジスタファイルが一杯である場合は常にローカル変数にアクセスするために一時的なメモリ位置を指定するためのネイティブスタックポインタをレジスタ要素の１つとして含む、請求項１に記載のマイクロプロセッサ。
【請求項１３】
前記システムレジスタのセットは、前記プロセッサコアのデータパスにＪａｖａ（登録商標）ローカル変数レジスタを含み、Ｊａｖａ（登録商標）ローカル変数および前記Ｊａｖａ（登録商標）オペランドスタックの外部のパラメータの一時的な格納のためにＪａｖａ（登録商標）制御モジュールによってアクセス可能である、請求項１に記載のマイクロプロセッサ。
【請求項１４】
システムレジスタのセットは、Ｊａｖａ（登録商標）命令の前記第２のセットのためのマイクロコードへのメモリ基底アドレスを包含するＪａｖａ（登録商標）トラップ基底アドレスレジスタを含む、請求項１に記載のマイクロプロセッサ。
【請求項１５】
マイクロプロセッサにおいてＪａｖａ（登録商標）命令を実行する方法であって、前記Ｊａｖａ（登録商標）命令のサブセットは前記マイクロプロセッサにネイティブなマイクロコードとして実行され、前記方法は、
（ａ）Ｊａｖａ（登録商標）命令の第１のサブセットの前記マイクロプロセッサによる直接の実行を制御するためのＪａｖａ（登録商標）制御モジュールと、ネイティブ命令の前記マイクロプロセッサによる直接の実行を制御するためのネイティブ制御モジュールとを与えるステップを含み、前記ネイティブ制御モジュールは、Ｊａｖａ（登録商標）命令の第２のサブセットのネイティブマイクロコードとしての実行をも制御し、マイクロプロセッサはマイクロプロセッサのデータパスにおけるレジスタファイルとシステムレジスタのセットとを有し、両方とも前記Ｊａｖａ（登録商標）制御モジュールおよび前記ネイティブ制御モジュールによってアクセス可能であり、前記レジスタファイルは複数のレジスタ要素を含み、したがって前記ネイティブ制御モジュールは複数のレジスタ要素をストレージレジスタとして見なし、Ｊａｖａ（登録商標）制御モジュールはレジスタ要素の第１の部分をＪａｖａ（登録商標）オペランドスタックとして見なし、かつレジスタ要素の第２の部分をストレージレジスタとして見なし、システムレジスタのセットはＪａｖａ（登録商標）オペランドスタックポインタを含み、ポインタは現在のスタックトップであるレジスタファイルにおけるレジスタ要素を指定し、システムレジスタのセットはＪａｖａ（登録商標）レジスタ再マップビットを包含する状態レジスタをも含み、さらに
（ｂ）第２のセットのＪａｖａ（登録商標）命令が認識されるまで、Ｊａｖａ（登録商標）制御モジュールの制御下においてＪａｖａ（登録商標）命令の第１のセットをマイクロプロセッサによって実行するステップと、
（ｃ）前記第２のセットのＪａｖａ（登録商標）命令を認識する際に、そのＪａｖａ（登録商標）命令のための対応するネイティブマイクロコードにアクセスし、Ｊａｖａ（登録商標）レジスタ再マップビットを設定し、前記ネイティブ制御部に動作を引き渡してネイティブマイクロコードを実行するステップを含み、そのため、前記マイクロコードにおいてネイティブ命令を実行するとき、これらのネイティブ命令によって特定されるレジスタは、現在のスタックトップに対する前記レジスタファイルの特定されたレジスタ要素に対応するよう処理され、さらに
（ｄ）前記第２のセットのＪａｖａ（登録商標）命令のためのマイクロコード完了の際、前記Ｊａｖａ（登録商標）制御部に動作を戻し、次のＪａｖａ（登録商標）命令において実行を再開するステップと、
（ｅ）すべてのＪａｖａ（登録商標）命令が完了するまで（ｂ）から（ｄ）までのステップを繰返すステップとを含む、方法。
【請求項１６】
前記ネイティブ制御部に動作を引き渡すステップおよび前記Ｊａｖａ（登録商標）制御部に動作を戻すステップは、状態レジスタにおけるプロセッサ状態制御情報によって仲介される、請求項１５に記載の方法。
【請求項１７】
システムレジスタのセットは、ネイティブマイクロコードへのメモリ基底アドレスを包含するＪａｖａ（登録商標）トラップ基底アドレスレジスタを含み、前記第２のセットの特定のＪａｖａ（登録商標）命令のための対応するネイティブマイクロコードにアクセスするステップは、その命令のために特定されたオフセットを基底アドレスに適用し、次いで結果として生じるオフセットアドレスにおいてメモリにアクセスするステップを含む、請求項１５に記載の方法。
【請求項１８】
前記再マップビットが設定されると常に、ネイティブマイクロコード命令によってアクセスされるスタックトップに対して対応するレジスタは、オペランドスタックポインタの最大値からＪａｖａ（登録商標）オペランドスタックポインタによって特定されるレジスタ番号を引き算したものである、請求項１５に記載の方法。
【請求項１９】
前記第２のセットのＪａｖａ（登録商標）命令は前記第１のセットのＪａｖａ（登録商標）命令よりも複雑であって、前記第２のセットの命令は、１つのクロックサイクル内でマイクロプロセッサによって不可分な命令として実行されることができない、請求項１５に記載の方法。
【請求項２０】
Ｊａｖａ（登録商標）命令の前記第２のセットはＪａｖａ（登録商標）オブジェクトを生成したり操作したりするための命令を含む、請求項１９に記載の方法。
【請求項２１】
Ｊａｖａ（登録商標）命令の前記第２のセットは長いデータタイプおよび浮動小数点データタイプで動作する命令を含む、請求項２０に記載の方法。
【請求項２２】
Ｊａｖａ（登録商標）命令の前記第２のセットはダブルタイプの命令を含む、請求項２１に記載の方法。
【請求項２３】
マイクロプロセッサはＲＩＳＣプロセッサであり、ネイティブ命令はＲＩＳＣ命令であって、Ｊａｖａ（登録商標）命令の前記第２のセットを実現するためのネイティブマイクロコードはＲＩＳＣマイクロコードである、請求項２２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
この発明は、メモリ指向のアーキテクチャを備えたマイクロプロセッサ（たとえば複数命令セットコンピュータすなわちＣＩＳＣマシン）およびロード・ストアアーキテクチャを備えたマイクロプロセッサ（たとえば縮小命令セットコンピュータ、すなわちＲＩＳＣマシン）を含むマイクロプロセッサ、ならびにＪａｖａ（登録商標）仮想マシンコアアーキテクチャを有するものを含むスタックマシンの、レジスタファイルスタックへのアクセスに関する。ＲＩＳＣまたはＣＩＳＣ状態およびＪａｖａ（登録商標）状態でも動作可能な結合アーキテクチャが特に適切である。より特定的には、この発明は、ＲＩＳＣ状態からＪａｖａ（登録商標）オペランドスタックにアクセスするなどの、アーキテクチャにネイティブな命令を用いてオペランドスタックにアクセスすることに関する。
【背景技術】
【０００２】
背景技術
マイクロプロセッサはいくつかの基本カテゴリに分類することができる。スタックマシンでは、すべての算術論理演算装置（ＡＬＵ）演算がオペランドスタックの最上位のレジスタで行われる。ＣＩＳＣマシンではメモリにおいて直接演算が行われる（すなわち、オペランドはメモリからアクセスされ、結果がメモリに格納される）。ＲＩＳＣマシンでは、中央処理装置（ＣＰＵ）に存在するアドレス可能なレジスタ上ですべての演算が実行される。初期のマイクロプロセッサはスタックマシンであったが、今日ではほとんどのマイクロプロセッサはＣＩＳＣまたはＲＩＳＣマシンのいずれかである。時間とともにＣＩＳＣマシンとＲＩＳＣマシンとは設計において互いに近づき、最も近代のＣＩＳＣマシンもまた演算が実行されるレジスタファイルを有する。サンマイクロシステムズ（Sun Microsystems）によるＪａｖａ（登録商標）プログラミング言語およびＪａｖａ（登録商標）仮想マシン（Ｊａｖａ（登録商標）ＶＭ）の採用により、近代のマイクロプロセッサにスタックマシンが再び採用された。Ｊａｖａ（登録商標）ＶＭがソフトウェアとして動くように本来意図されていたにもかかわらず、ハードウェアによる実現例もいくつか存在する。
【０００３】
サンマイクロシステムズによって開発されたＪａｖａ（登録商標）はオブジェクト指向のプログラミング言語であってネットワークプログラミングにおけるデファクトスタンダードになっており、さらに組込システムの分野でも利用され始めている。Ｊａｖａ（登録商標）バイトコードは、Ｊａｖａ（登録商標）仮想マシンと呼ばれるソフトウェア層において一般に実行され、その仕様はサンマイクロシステムズによって発行されている。Ｊａｖａ（登録商標）バイトコードを実行するためには、好ましくは、潜在的なプログラムフローのボトルネックを分析するための何らかの形の先読み技術と関連して、インタープリタもしくは「ジャスト・イン・タイム」コンパイラ、または特定のハードウェアプラットフォームのためのクロスコンパイラが用いられ得る。代替的には、Ｊａｖａ（登録商標）はシリコンチップにおいて直接実行することができる。いくつかのＪａｖａ（登録商標）ハードウェアプロセッサは、いくつかの命令が１つの命令として組合わされ、実行されることを意味する、フォールディング機構を有する。しかしながら、ほとんどのＪａｖａ（登録商標）プロセッサはインタープリタとして動作し、そこでは各命令コードが読出され、次に命令を実行するために適切な処置が講じられる。
【０００４】
Ｊａｖａ（登録商標）が組込システムにおいて実現される場合、ハードウェア手法が好ましい技術的解決法であり、近年、Ｊａｖａ（登録商標）仮想マシンのいくつかのハードウェアバージョンが組込プロセッサプラットフォーム用に開発されている。Ｊａｖａ（登
録商標）命令の直接の実行をサポートするこれらのプロセッサは、通常は３２ビットのスタックマシンとして設計されている。そのいくつかは、直接アドレス指定およびビット操作命令などの特徴を提供するために、Ｊａｖａ（登録商標）バイナリフォーマットへの拡張に依存する。他のものはＪａｖａ（登録商標）バイナリコードを直接実行はしないが極めて近いアーキテクチャ上の一致を有し、それによって仮想マシンの性能を向上させる。
【０００５】
ハードウェアにおいてＪａｖａ（登録商標）ＶＭの実現を試みるときの主な難問は、いくつかのＪａｖａ（登録商標）命令が高度な意味内容を有し、そのために不可分な命令として実行するのが非常に困難なことである。複雑なＪａｖａ（登録商標）命令をトラップし、ホストアーキテクチャにネイティブな命令を用いてソフトウェアルーチンとしてそれらを実行することが、可能な解決法である。しかし、これを行うためには、ネイティブな（ＲＩＳＣまたはＣＩＳＣ）命令を用いてＪａｖａ（登録商標）オペランドスタックにアクセスするための機構が必要である。
【０００６】
２００１年４月２３日に出願された米国仮出願番号第６０／２８６，１９７号の優先権を伴って２００２年４月１日に出願された、本譲受人の先の米国特許出願番号第１０／１１４，６７８号であって２００４年１月２２日にＵＳ２００４／００１５６７８Ａｌとして発行された、「バイトコンパイルされたＪａｖａ（登録商標）コードを実行するためのマイクロプロセッサ（Microprocessor for executing byte compiled Java（登録商標）code）」と題された出願、および２００２年１０月３１日にＷＯ２００２／０８６６９９Ａ３として発行された対応する国際出願において、ＲＩＳＣマシンをＪａｖａ（登録商標）ＶＭと組合わせる概念が記載されている。当該以前に発行された出願において、ハードウェアで実現されるＲＩＳＣマイクロプロセッサとＪａｖａ（登録商標）ＶＭとが、ハードウェアがＲＩＳＣ状態またはＪａｖａ（登録商標）状態のいずれかにおいても動作することができるように、結合される。ＲＩＳＣマイクロプロセッサがＪａｖａ（登録商標）オペランドスタックにアクセスして複雑なＪａｖａ（登録商標）命令をＲＩＳＣソフトウェアルーチンとして実行するために、２つのビット「Ｘ」および「Ｙ」が状態レジスタに設定されて、対応するＸ引数またはＹ引数が、オペランドスタックポインタによって指定されたレジスタ番号と置換えられることを可能にする。
【０００７】
プロセッサのＲＩＳＣ（またはＣＩＳＣ）状態からＪａｖａ（登録商標）オペランドスタックへのアクセスを向上させるために、これらの結合マイクロプロセッサのための付加的な機構が求められる。
【発明の開示】
【課題を解決するための手段】
【０００８】
発明の概要
この発明は、同じマイクロプロセッサコアにおいてＲＩＳＣ（またはＣＩＳＣ）マシンおよび（Ｊａｖａ（登録商標）ＶＭなどの）スタックマシンの両方を実現する。マイクロプロセッサはレジスタファイルを含む。先行するＲＩＳＣ（またはＣＩＳＣ）マシンと同じように、レジスタファイル上で演算する命令は、オペランドの出所および結果の行先であるレジスタ番号を特定する。スタックマシンは、Ｊａｖａ（登録商標）オペランドスタックを保持する同じレジスタファイルの部分（たとえば下半分）を用いる。Ｊａｖａ（登録商標）オペランドスタックポインタレジスタが与えられ、それはスタックトップを指定し、したがって、プロセッサがＪａｖａ（登録商標）状態である場合は常に、いずれのレジスタにおいて動作されるかを決定する。状態レジスタは、プロセッサがＪａｖａ（登録商標）状態にあるときを特定するビットを含んでいるだけでなく、プロセッサがＪａｖａ（登録商標）スタックにアクセスするためにＲＩＳＣ（またはＣＩＳＣ）状態である時に用いられるＪａｖａ（登録商標）レジスタ再マップビットを含む。ＲＩＳＣ（またはＣＩＳＣ）状態において、再マップビットは、設定されると、命令で特定されたレジスタ番号
が、Ｊａｖａ（登録商標）オペランドスタックのレジスタに対応する場合は、常に、そのレジスタ番号がスタックトップに関連するアクセスレジスタに再マップされるようにする。すなわち、アクセスされたレジスタ番号は、オペランドスタックポインタの最大値からオペランドスタックポインタ値を引いた値である。再マップビットがゼロにリセットされている場合、アクセスされたレジスタ番号は命令で特定されるものである。再マップビットはＪａｖａ（登録商標）状態では無視される。再マップビットは、ＲＩＳＣ（またはＣＩＳＣ）命令がＪａｖａ（登録商標）スタックのオペランドにアクセスすることを有効に可能にする。たとえば、いずれのレジスタが実際にスタックトップ値を保持しているかにかかわらず、スタックトップからオペランドを、かつスタックトップより下位の要素を得て、結果をスタックトップに置くことを可能にする。
【発明を実施するための最良の形態】
【０００９】
発明の詳細な説明
この発明は、結合ＲＩＳＣ／Ｊａｖａ（登録商標）プロセッサアーキテクチャまたは結合ＣＩＳＣ／Ｊａｖａ（登録商標）プロセッサアーキテクチャのいずれかに、またはより一般にはスタックマシンとネイティブＲＩＳＣまたはネイティブＣＩＳＣプロセッサとの任意の結合に適合され得る。既に説明されたように、この発明は、プロセッサがそのスタックマシンまたはＪａｖａ（登録商標）状態であるときだけでなく、プロセッサがそのネイティブＲＩＳＣまたはネイティブＣＩＳＣ状態であるときも、オペランドスタックへのアクセスのための技術を特に含む。例示目的のために、説明の残りの部分は結合ＲＩＳＣ／Ｊａｖａ（登録商標）プロセッサアーキテクチャに注目し、そのコンテキストにおける創造性のある技術を示す。当業者は、この発明に説明されたＲＩＳＣ／Ｊａｖａ（登録商標）バージョンを他の適用可能な処理アーキテクチャでの使用に適応させる方法を容易に理解するだろう。
【００１０】
Ｊａｖａ（登録商標）ＶＭ命令セットは現在２０１の命令コードを含んでいる。命令セットの大部分はタイプ固有であり、したがって、同じ意味を有するが異なるオペランドタイプに適用されるＪａｖａ（登録商標）命令が多い。ＲＩＳＣプロセッサの命令セットは各アーキテクチャの特定の設計特微によって異なるが、典型的なＲＩＳＣ命令セットは、ＬＯＡＤ、ＳＴＯＲＥ、ＭＯＶＥ、ＡＤＤ、ＳＵＢＴＲＡＣＴ、ＭＵＬＴＩＰＬＹ、ＤＩＶＩＤＥ、ＮＥＧＡＴＥ、ＡＮＤ、ＯＲ、ＸＯＲ、ＣＯＭＰＡＲＥ、ＳＨＩＦＴ、ＲＯＴＡＴＥ、ＳＥＴ、ＣＬＥＡＲ、ＪＵＭＰおよびＲＥＴＵＲＮなどの命令を含み得る。典型的なＲＩＳＣ命令セットの大部分はＪａｖａ（登録商標）ＶＭ命令セットと重複する。たとえば、Ｊａｖａ（登録商標）およびＲＩＳＣ状態の両方において最も頻繁に実行される命令はロード／ストア命令であり、それは両方の状態下で同じ意味内容を有し、結合ＲＩＳＣ／Ｊａｖａ（登録商標）アーキテクチャにおいて同じハードウェア資源を共有することができる。同様に、基本的な算術演算および論理演算は同じ意味を共有し、共有される算術論理演算装置（ＡＬＵ）を同じ方法で利用する。しかしながら、いくらかの低レベルビット操作命令はＲＩＳＣ命令セットでのみ見つけることができ、Ｊａｖａ（登録商標）ＶＭでは見つからない。同様に、Ｊａｖａ（登録商標）は、典型的なＲＩＳＣ命令セットには見つからない高レベルのオブジェクト生成および操作命令を含む。
【００１１】
Ｊａｖａ（登録商標）ＶＭ命令セットは、ハードウェアで実現するのが困難な高度な意味内容を有するいくつかの命令を含む。単一のクロックサイクルでそのような高レベルの命令を実行することは通常は実現可能ではなく、それらをいくつかのさほど複雑でない命令に分割する作業は資源の割振りとタイミングの制約との点で困難である。その代り、これらのＪａｖａ（登録商標）命令は、ハードウェアのオーバーヘッドを減じるために、結合ＲＩＳＣ／Ｊａｖａ（登録商標）プロセッサにおける小さなＲＩＳＣプログラムとしてトラップされて実行されてもよい。トラップされる命令は、典型的には、すべての実行された命令の１０％未満になる。個々のそのような命令のＲＩＳＣプログラムは、プロセッ
サにアクセス可能なプログラムメモリに格納され、プログラマによって必要に応じて変更されてもよい。これは、Ｊａｖａ（登録商標）命令セットのいかなる将来的な拡張に対しても十分な柔軟性を与える。しかし、高レベルなＪａｖａ（登録商標）命令をＲＩＳＣプログラムとして実行することは、結合プロセッサがＲＩＳＣ状態に切替わる場合は常に、それらの命令を実行するために結合プロセッサがなおＪａｖａ（登録商標）オペランドスタックにアクセスできることを必要とする。プロセッサがＪａｖａ（登録商標）状態に戻るときは、演算結果もスタックからアクセスされる必要がある。
【００１２】
図１を参照して、この発明を利用するために適合され得る典型的な結合ＲＩＳＣ／Ｊａｖａ（登録商標）マイクロプロセッサは、ＲＩＳＣプロセッサ、ＲＩＳＣプロセッサにおいてＪａｖａ（登録商標）命令の第１のセットを実行するためのＪａｖａ（登録商標）モジュール、ＲＩＳＣプロセッサにおいてＪａｖａ（登録商標）命令の第２のセットをマイクロコードとして実行するためのＲＩＳＣモジュール、および、両方のモジュールによって共有される、ＲＩＳＣプロセッサにおけるデータパスを含み得、データパスはレジスタファイルを含む。図１に見られるように、この発明によるマイクロプロセッサ１０は、Ｊａｖａ（登録商標）制御部１１およびＲＩＳＣ制御部１３の両方を含み、それは共通のデータパスを共有する。２つの制御部１１および１３は独立して動作するが、プロセッサを同時に動作することはない。プロセッサ１０は、他のＪａｖａ（登録商標）プロセッサのようにＪａｖａ（登録商標）バイナリフォーマットへの翻訳または拡張には依存しないが、２つの直交するプログラムモデルを提供する。プロセッサ１０は、データと命令との両方のための共通バスを共有する基本的なノイマンアーキテクチャ（von-Neumann Architecture）として構築することができ、または個別のデータおよび命令バスを備えたハーバードアーキテクチャ（Harvard Architecture）に容易に拡張することができる。プロセッサは高いクロック周波数および単一のサイクル実行を達成するためにパイプライン化することができる。
【００１３】
マイクロプロセッサは、データバス３０に接続されたレジスタファイル１５を含む。プログラムカウンタ１６、リンクレジスタ１７およびスタックポインタ１８は、任意の数の汎用レジスタ１９と共に、ファイル１５にマップされてもよい。レジスタファイル１５へのこのマッピングは、プログラムカウンタ１６、リンクレジスタ１７およびスタックポインタ１８が汎用レジスタ１９と同じ方法でアドレスされることを可能にし、その結果、通常の命令は、所望の場合は常にこれらのレジスタを用いることができる。スタックポインタ１８を通常のレジスタとしてアドレスできることにより、ローカル変数およびパラメータの割当ておよびアクセスが簡単になる。スタックポインタ１８は、いくつかの命令によって暗黙に用いられてもよい。プログラムカウンタ１６は、実行されている命令のアドレスを包含する。メモリ空間はバイト単位でアドレス指定される。Ｊａｖａ（登録商標）状態を除いて、命令のサイズは２バイトの倍数であり、プログラムカウンタの最下位ビットはゼロに固定されている。プログラムカウンタ１６がレジスタファイル１５にマップされるので、それはレジスタオペランドを用いるすべての命令（たとえばロード／ストア、算術および論理命令）において出所または行先オペランドとして用いることができる。プログラムカウンタ１６をその行先レジスタとして用いる命令はジャンプ命令と同じ方法で処理され、新しいプログラムカウンタ値によって特定されたアドレスにおいてパイプラインが消去され、実行が再開される。リンクレジスタ１７は、監視プログラム呼出しと同様に、サブルーチン呼び出し、割込みリクエスト、および例外処理の戻りアドレスを保持するために用いられる。リンクレジスタ位置は他のすべての場合に汎用レジスタとして用いることができる。割込みモードおよび例外モードについては、より低い割込みレイテンシでのより高い性能を可能にするために、個別のレジスタファイルが含まれてもよい。
【００１４】
状態レジスタ２１はレジスタファイル１５から区別され、その代わり、Ｊａｖａ（登録商標）オペランドスタックポインタ２２、Ｊａｖａ（登録商標）ローカル変数レジスタ２
３、およびＪａｖａ（登録商標）トラップ基底アドレスレジスタ２４とともにシステムレジスタ空間２０にマップされることができる。状態レジスタ２１は、通常の算術論理演算フラグ（たとえば、飽和、オーバーフロー、符号、ゼロおよびキャリーフラグ）、モードビット設定（たとえばアプリケーション、監視プログラム、割込みおよび例外モード）、デバッグ状態ビット、ならびに割込み、例外、およびデバッグマスキングビットを含んでいてもよい。さらに、この発明に特に関連して、状態レジスタ２１はＪａｖａ（登録商標）状態ビットおよびＪａｖａ（登録商標）レジスタ再マップビットを含む。プロセッサ１０は、状態レジスタ２１においてＪａｖａ（登録商標）状態ビットが設定されているときに限り、その場合は常に、Ｊａｖａ（登録商標）状態である。このビットはリセットにおいてクリアされ、Ｊａｖａ（登録商標）実行が完了したとき、または割込みおよび例外によって、または定義済み命令（たとえばＪＣＡＬＬまたはＲＥＴＪなど、前者はＪａｖａ（登録商標）状態を始めるために用いられ、後者は命令トラップ後にＪａｖａ（登録商標）状態に戻るために用いられる）によってのみ、変更されるべきである。このＪａｖａ（登録商標）状態ビットを手動で変更しようとするユーザによる試みは、結果として未定義動作を生じ得る。Ｊａｖａ（登録商標）レジスタ再マップビットが設定される場合は常に、スタックマシンにおけるのと同様に、レジスタファイル１５は変数にアクセスするために再マップされる。このビットはリセットにおいてクリアされる。このビットがＪａｖａ（登録商標）ＶＭの外部に書き出される場合、結果として未定義動作が生じ得る。この再マップビットの効果はより詳細に以下に記載される。システムレジスタ空間２０のＪａｖａ（登録商標）オペランドスタックポインタ２２は、現在のＪａｖａ（登録商標）オペランドスタックトップのレジスタファイル空間で位置を保持するために用いられる。Ｊａｖａ（登録商標）トラップ基底アドレスレジスタ２４は、トラップされたＪａｖａ（登録商標）命令のためのプログラムコードへの基底アドレスを包含している。Ｊａｖａ（登録商標）ローカル変数レジスタ２３は、一時的なＪａｖａ（登録商標）ローカル変数を格納する。追加的に、Ｊａｖａ（登録商標）トラップエントリポイントレジスタは、基底アドレスポインタから実現されていないＪａｖａ（登録商標）命令のエントリポイント用の例外ルーチンまでの、オフセットを包含してもよい。必要に応じて特定のハードウェアプロセッサ設計によって他のシステムレジスタが与えられてもよい。
【００１５】
ＲＩＳＣおよびＪａｖａ（登録商標）状態の両方で用いられる算術論理演算装置（ＡＬＵ）２５はレジスタファイル１５に接続され、ＡＬＵの出力はデータバス３０に与えられる。典型的なＡＬＵは３２ビットの加算器、３２ビットのバレルシフタ、およびハードウェア乗算を含むことができる。算術論理演算は単一クロックサイクルにおいて実行する。３２ビットワードサイズのデータタイプに加えて、プロセッサは典型的には、コードサイズまたは性能における制約なく、ハーフワードおよびバイトのデータタイプをサポートする。メモリのロードおよびストア動作は、典型的には、バイト、ハーフワード、ワード、ならびに、バイトおよびハーフワードデータの自動的な符号拡張またはゼロ拡張を備えたダブルワードのデータを与える。
【００１６】
プログラムカウンタ１６および関連するレジスタファイルの出力は、アドレスマルチプレクサ３３に至る加算器３６を通って処理される。アドレスマルチプレクサ３３もアドレスバス４０に接続される。命令フェッチデコーダ３５はデータバス３０から信号を受け取り、スタック制御部３７に出力を与える。この発明と共に、プロセッサアーキテクチャのこの、または他の典型的な構成が用いられ得る。
【００１７】
ＲＩＳＣの大部分とＪａｖａ（登録商標）ＶＭ命令セットとが重複するので、結合ＲＩＳＣ／Ｊａｖａ（登録商標）プロセッサはハードウェア資源を共有するが、個別のＪａｖａ（登録商標）命令デコーダと、プロセッサがそのＪａｖａ（登録商標）状態にあるときに実行を引き継ぐ制御モジュール１１とを備える。プロセッサは、その状態レジスタ２１を通じて実行状態の経過を追い、実行状態を継目なく変更することができる。プロセッサ
をその一部に含むより大きなランタイムシステムでは、典型的には異なるプロセスの経過を追い、負荷配分するオペレーティングシステムがある。Ｊａｖａ（登録商標）プログラムは典型的にはそのようなプロセスのいくつかのうちの１つである。ネイティブプロセス（ＲＩＳＣまたはＣＩＳＣ）へのコンテキスト切替と比較して、Ｊａｖａ（登録商標）プロセスへのコンテキスト切替に関連する余分のオーバーヘッドは、たとえあったとしても僅かである。さらに、プロセッサが命令デコーダを切り替える（ＲＩＳＣ制御モジュール１３からＪａｖａ（登録商標）制御モジュール１１へ、またはその逆に）とき、それはシステムによって設定されたセキュリティレベルに影響しない。さらに、Ｊａｖａ（登録商標）プログラムは、原則的には、プロセッサのモード設定と干渉することなく異なる割込みレベルから実行することができるが、対応するＲＩＳＣ割込みルーチンに比較してレイテンシが増大しているので、一般に割込みルーチンがＪａｖａ（登録商標）で書かれることは推奨されない。
【００１８】
図２を参照して、マイクロプロセッサは、初期化コードを実行するためにＲＩＳＣ状態で起動する（５１）。初期化５２の後に、マイクロプロセッサは正常なＲＩＳＣプロセッサとしてアプリケーションを実行することができ、またはＪａｖａ（登録商標）状態に切替わって（５３）Ｊａｖａ（登録商標）プログラムの実行を開始してもよい（５４）。Ｊａｖａ（登録商標）プログラムを呼び出すために、他のアプリケーションと同じくＪａｖａ（登録商標）ＶＭが呼び出される。特に、Ｊａｖａ（登録商標）ＶＭは初期化ルーチンを実行し、次に、クラスを解析してＪａｖａ（登録商標）プログラムの実行を開始するのに必要なレジスタを初期化するクラスローダが後続する。クラスローダにおける最後の命令は、プロセッサをＪａｖａ（登録商標）状態に設定するｊｃａｌｌ命令である。これは、命令デコーダがここではネイティブＲＩＳＣ命令コードの代わりにＪａｖａ（登録商標）命令コードをデコードすることを意味する。マイクロプロセッサは、以下の事象のうち１つが生じるまでＪａｖａ（登録商標）状態で動作し続ける：ＲＩＳＣモードに切替わって戻るための指定Ｊａｖａ（登録商標）命令コード（５８）、割込みリクエスト（５９）、または実現されていないＪａｖａ（登録商標）命令（６０）である。これらの事象のうちいずれかが生じれば、プロセッサは定義済みのアドレスにジャンプし、ＲＩＳＣモードに切替わって（５５）このやり方で事象を処理する。ＲＩＳＣルーチンを終了する際（５６）、プロセッサはＲＥＴＪ命令を用いてＪａｖａ（登録商標）状態に戻り（５７）、それが終わった時点においてＪａｖａ（登録商標）コードを実行し続ける。
【００１９】
このように、プロセッサはＪａｖａ（登録商標）状態でプログラムのＪａｖａ（登録商標）部分を実行することができる。このような部分は、企業のソフトウェアライブラリにおいて既に実現されているネットワーク能力またはアルゴリズムであってもよく、再使用のためのレガシーソフトウェア（legacy software）のモジュールを構成することができる。プロセッサのＲＩＳＣ状態は、複雑なＪａｖａ（登録商標）命令をＲＩＳＣマイクロコードとして実行することによって（６０）Ｊａｖａ（登録商標）コードの実行を補助する。それはさらに、たとえばセンサおよびアクチュエータなどの高度に専門化された周辺機器を制御するために用いることができる柔軟なハードウェアインタフェースをも与える。
【００２０】
Ｊａｖａ（登録商標）ＶＭ仕様と互換性を有するために、すべてのＪａｖａ（登録商標）命令を実現する必要がある。しかしながら、中小のアプリケーションをターゲットにした組込プロセッサにおいては、Ｊａｖａ（登録商標）仮想マシンにサポートされる数の書式のいくつかは限度を越えている。たとえば、このセグメントでは浮動小数点ユニットを提供するプロセッサはほとんどない。Ｊａｖａ（登録商標）のより複雑な命令のいくつかはトラップされてマイクロコードとして実行されなければならない。「複雑な」というのは、単一のＪａｖａ（登録商標）命令が、実行のために複数のマシンクロックサイクルを必要とすることを意味する。Ｊａｖａ（登録商標）プログラムの実行中、プロセッサがハ
ードウェアでサポートされないバイトコードに遭遇する場合は常に、命令デコーダは自動的にこれらのバイトコードを認識し、プロセッサをそのＲＩＳＣ状態に切り替えて、同時に、定義済みのエントリポイント（Ｊａｖａ（登録商標）トラップ基底アドレスシステムレジスタに格納されたアドレスに相対して定義され、オフセットは特定のトラップされた命令に依存して基底アドレスに適用される）にジャンプする。次いで、それはトラップされたバイトコードの意味を実施するＲＩＳＣソフトウェアルーチンを実行する。終了すると、ルーチンはＪａｖａ（登録商標）状態に戻る命令（ＲＥＴＪ）で終わる。
【００２１】
いずれのＪａｖａ（登録商標）命令をトラップするか、またいずれをハードウェアで直接実現するかは、通常、設計者によって決定される実現形態固有の問題である。典型的には、Ｊａｖａ（登録商標）オブジェクトを生成したり操作したりする命令がトラップされる。他のトラップされる命令は、長い（６４ビットまたはマルチワード）データタイプで動作するもの、浮動およびダブルのタイプのもの、および設計されたアーキテクチャと互換性がないものを含むことができる。
【００２２】
この発明は、本願明細書に記載されたＲＩＳＣアーキテクチャに加えて他の型のＲＩＳＣアーキテクチャと共に用いることもできるので、いずれのＲＩＳＣ命令セットを用いるかは選ばれるＲＩＳＣモデルに依存する。（上述のように、この発明はまた、ＣＩＳＣアーキテクチャおよび命令セットとともに使用するようにも適合可能である。）
図３を参照して、プロセッサのレジスタファイルは、そのＪａｖａ（登録商標）状態においてプッシュポップスタックの機能を有するが、ネイティブＲＩＳＣ状態においては従来のロード／ストアレジスタファイルとして機能する。これはさらに、２つの仮想プロセッサが通信することを可能にするモジュールでもあり、Ｊａｖａ（登録商標）スタックにおいて与えられた値はＲＩＳＣ状態のプロセッサによってアクセスされ得る。図３は、ＲＩＳＣモードおよびＪａｖａ（登録商標）モードから見られるようにレジスタファイルの半分を示す。レジスタ８０、８１、…、８２は、Ｊａｖａ（登録商標）制御部６１および回路７１のＲＩＳＣ部分の両方から見られる。
【００２３】
レジスタファイルアーキテクチャのＲＩＳＣ図７１は、ロード／ストアレジスタ０からＭまでのセットとしてレジスタ要素８０、８１、…、８２を見、ＲＩＳＣアーキテクチャは、特定のレジスタを出所または行先として指定する対応するロード／ストア命令７２、７３、…、７４を用いてこれらのレジスタをデータメモリとインターフェイスする。プログラムカウンタ、リンクレジスタおよびスタックポインタが汎用レジスタと一緒にレジスタファイルに含まれることを思い出されたい。直交性（orthogonality）を保つために、これらの特別なレジスタは他の任意のレジスタと同じくアクセス可能である。
【００２４】
Ｊａｖａ（登録商標）制御部６１は、典型的には約（Ｍ＋ｌ）／２のレジスタ要素を備えた同じレジスタファイルをプッシュポップスタックとして見る。データはレジスタスタックにプッシュされ（６２）、レジスタスタックからＪａｖａ（登録商標）制御部へポップする（６３）。とりわけ、プログラムカウンタ、スタック制御レジスタおよび一時的スクラッチパッドレジスタ用に、残りのレジスタが用いられてもよい。スタックは循環スタックとして実現され、必要とされるスタックのサイズは比較的小さい。スタックのサイズはスケーラブルであり、スタック要素の数は実現形態固有の問題として残される。スタックオーバーフロー／アンダフローは、オーバーフロー／アンダフロー機構を通してメモリ８３内にコピーすることができる。あり得るスタックオーバーフロー／アンダフロー機構も場合に応じた態様で開発することができる。
【００２５】
図４は、マイクロプロセッサを１つの状態から別の状態へ変換するための機構の１つの可能な実現形態を示す。Ｊａｖａ（登録商標）制御モジュール１２０およびＲＩＳＣ制御モジュール１２２は、マルチプレクサ１２４を通してプロセッサの共用データパスに至る
制御線１３０に接続される。状態レジスタ１２６は、Ｊａｖａ（登録商標）制御モジュール１２０およびＲＩＳＣ制御モジュール１２２に与えられるＪａｖａ（登録商標）状態ビット１２８を包含し、かつこれらの制御部のいずれが動作中かを決定する。Ｊａｖａ（登録商標）状態ビット１２８は、マルチプレクサ１２４による選択制御としても機能する。制御は両方の制御モジュールにおいて定義済みの状態で変換される。したがって制御は同期して変換され、両方の機械が定義された同じ状態になる。
【００２６】
Ｊａｖａ（登録商標）命令トラップは典型的な割込み機構のステップに類似のステップを含む。実現されない命令が発生すると、ＪＡＶＡ（登録商標）制御モジュールはこれを検出し、戻りアドレスがスタックトップに格納される。次いで、プロセッサはＲＩＳＣモードに切替わり、メモリの定義済みの位置からジャンプアドレスをフェッチする。次いで、ＲＩＳＣモジュールは、最後のステップでフェッチされたアドレスにおいて実行を継続する。最初の第１のジャンプアドレスだけが設計中に事前定義されるので、トラップ機構が割込み機構に類似していることにより最大の柔軟度を達成する。これはソフトウェアリンカが、プログラム内に実際に存在するＪａｖａ（登録商標）命令コード用のＲＩＳＣルーチンのみをリンクすることによりメモリ使用量を最適に計画することを可能にし、したがって貴重なメモリ空間を節約する。ＲＩＳＣルーチンは、スタックトップからプログラムカウンタをポップしてプログラムカウンタレジスタ内に保存することにより終了すべきである。これは、Ｊａｖａ（登録商標）プログラムが正しい場所で継続することを確実にする。さらに、マイクロプロセッサはスタックオーバーフロー／アンダフロー処理機構を有する。Ｊａｖａ（登録商標）プッシュポップスタックにおけるこの機構は、命令トラップ用の既存の論理を再使用することにより実現することができる。オーバーフローが発生すると、プロセッサはオーバーフローフラグをトラップして定義済みアドレスにジャンプし、そこでオーバーフロー／アンダフロー条件を処理するソフトウェア手順へのジャンプベクタを見つける。
【００２７】
図５を参照して、Ｊａｖａ（登録商標）状態とＲＩＳＣ状態とではレジスタファイルの機能が異なる。既に上述されたように、両方の状態において、プログラムカウンタ（ＰＣ）、リンクレジスタ（ＬＲ）、およびシステムまたはアプリケーションスタックポインタ（ＳＰ）に対して３つのレジスタ（ここではＲ１５−Ｒ１３）が専ら与えられる。ＲＩＳＣ状態においては、レジスタファイル９０の他のレジスタ（ここではＲ１２−Ｒ０）は、アドレス指定オペランドなどの正常なＲＩＳＣ動作に利用可能である。Ｊａｖａ（登録商標）状態では、Ｊａｖａ（登録商標）ＶＭはゼロオペランドスタックマシンとして実行するので、レジスタファイル機能はプッシュポップスタックを容易にするために変更され、そこでオペランドスタックの現在のトップはＴｏＳからＴｏＳ−７（ここではレジスタＲ７−Ｒ０を使用）のいずれかであり得る。さらに、他のレジスタ（Ｒ９およびＲ８など）は、Ｊａｖａ（登録商標）ローカル変数０（システムレジスタ空間１００における７つのＪａｖａ（登録商標）ローカル変数レジスタ１０４のうち１つ）を指定する現在のフレームのためのアドレスを包含するフレームレジスタとして、かつ現在のＪａｖａ（登録商標）クラスの定数プールへのアドレスを包含する定数プールレジスタとして、Ｊａｖａ（登録商標）において用いられてもよい。Ｊａｖａ（登録商標）ローカル変数レジスタに加えて、システムレジスタ空間１００は、現在のオペランドスタックトップ（ここでもＴｏＳからＴｏＳ−７までのいずれか）を指定するオペランドスタックポインタ１０２を含む。
【００２８】
Ｊａｖａ（登録商標）オペランドスタック（ＴｏＳからＴｏＳ−７）は、Ｊａｖａ（登録商標）命令によって動作される値および動作の結果を保持する。オペランドスタックは現在の方法フレームの一部であり、オペランドスタックの一部は動作を促進するためにレジスタファイルに保持される。ここに示されるように、レジスタファイルは典型的にはオペランドスタックの最大８つの要素を保持し、スタックの残りはＪａｖａ（登録商標）ＶＭフレームの一部としてメモリに格納されている。（フレームは、Ｊａｖａ（登録商標）
メソッドの実行をサポートするためのすべての変数および基準値を保持するランタイムデータ構造であり、メソッドへの入力引数と同様に、呼び出されたメソッドから出力される引数も包含することができる。メソッドが呼び出されるとフレームが割り付けられ、プログラムがメソッドから戻ると破棄される。例示的なフレームは、オペランドスタック、ローカル変数、次のフレームが置かれ得る自由なメモリ空間へのポインタ、メソッドへの戻りアドレス、前のメソッドのためのフレームポインタ、ならびに前のメソッドのための一定のプールポインタおよびスタックポインタを含み得る。システムレジスタ１００は、２つの機能を有するＪａｖａ（登録商標）オペランドスタックポインタ１０２を含む。それはオペランドスタック上の要素の数を示し、かつ現在のスタックトップを保持するレジスタを（たとえばビット［２：０］で）指定する。オペランドスタックポインタが０値に初期化され、これはオペランドスタックが空であることを意味する。オペランドスタックがオーバーフローするかアンダフローした場合は例外が生成され、例外ルーチンは、オペランドスタックのコンテンツをレジスタファイルからメモリに格納された現在のメソッドフレームにコピーすることを担う（たとえば、最大８つの要素のスタックを包含するレジスタファイルにおいて、第９の要素がスタックにプッシュされる場合は常にオーバーフロー条件が生じる。空のスタックからアクセスが試みられる場合はアンダフロー条件が生じる）。
【００２９】
トラップルーチンは、プロセッサのＲＩＳＣ状態においてＪａｖａ（登録商標）オペランドスタックにアクセスする必要がある。Ｊａｖａ（登録商標）オペランドスタックポインタ１０２を読出し、それを正しいレジスタに翻訳しなければならないという厄介なプロセスを回避するために、プロセッサのＪａｖａ（登録商標）制御部は、制御をＲＩＳＣユニットに転送することに先立って、再マップされたレジスタファイル９０ａを生成するレジスタ再マップ動作を実行し、それはスタックトップ（ＴｏＳ）が常にレジスタＲ７にあり、ＴｏＳ−１が常にレジスタＲ６にある、などと続くことを確実にする。状態レジスタ１０１では再マップビットＲＭが与えられる。プロセッサがスタックマシンとして動く場合、すなわちＪａｖａ（登録商標）状態では常にこの再マップビットＲＭは無視される。しかしながら、プロセッサのネイティブＲＩＳＣ状態では、再マップビットＲＭは下記の意味を有する：
if RM is 0, then
アクセスされるレジスタ番号＝特定されるレジスタ番号
（すなわち再マップは生じない）；
if RM is 1, then
アクセスされるレジスタ番号＝オペランドスタックポインタの最大値−オペランドスタックポインタ値。
【００３０】
たとえば、ＴｏＳからＴｏＳ−７までの８つのレジスタスタックでは、オペランドスタックポインタの最大値は７である。再マップビットＲＭが「１」に設定されると、Ｒ７からＲ０へのレジスタ番号は、ＴｏＳからＴｏＳ−７までのスタック要素をそれぞれ保持するレジスタにアクセスする。add R7, R6というＲＩＳＣ命令は、ＴｏＳおよびＴｏＳ−１を有効に加算する。オペランドスタックポインタがレジスタＲ３を指定した場合、ＴｏＳおよびＴｏＳ−１が格納される実際のレジスタはそれぞれＲ３およびＲ２であり、加算演算器はこれら２つの物理レジスタを加算演算に用いる。
【００３１】
図７は、再マップ装置１７３がＲＩＳＣプロセッサの制御部１７１の外部に取付けられる典型的な配列を示す。各再マップ装置１７３を形成する論理回路は、レジスタファイル１７５にある読書きポートの数と同じ回数反復実行される。各再マップ装置１７３は、制御入力ＲＭ（ＲＭ＝１であれば再マップ動作を可能にし、ＲＭ＝０であれば再マップなく受取られるレジスタアドレスをパスする）および、スタックトップの位置を表示するＪａｖａ（登録商標）オペランドスタックポインタ（図５の１０２）からのＪＯＳＰを有する
。（ＪＯＳＰは、一般に再マップ可能なレジスタ位置の数に対応するマルチビット信号である。）各再マップ装置１７３はレジスタアドレス入力１７３Iおよびレジスタアドレス出力１７３Ｏを有する。レジスタアドレス入力１７３Iはプロセッサ制御論理１７１から個別のレジスタアドレスを受取る。次いで、レジスタアドレス出力１７３Ｏは、対応する物理レジスタアドレスをレジスタファイル１７１のポートに出力する。図５において与えられた例では、Ｊａｖａ（登録商標）オペランドスタックポインタ１０２はスタックトップ値３を与え（ＪＯＳＰ＝３）、次いでＲＭ＝１の場合は常に、レジスタアドレス入力１７３Iがそれぞれ７および６であれば（たとえばadd R7, R6という命令について）、レジスタアドレス出力１７３Ｏは、レジスタファイル１７５のレジスタＲ３およびＲ２にアクセスするために、実際の物理的位置として再マップされた値３および２を与える。
【００３２】
オペランドスタックに対して新しい値をプッシュするとき、スタックの一貫性を確実にするために、特別な、インクリメントＪａｖａ（登録商標）オペランドスタックポインタ命令「ｉｎｃｊｏｓｐ」を用いなければならない。この命令は、オペランドスタックポインタ１０２を特定された量Ｎずつインクリメントし、それにより、すべてのオペランドスタック要素をＮ要素分だけ下にプッシュする。これは、スタックトップのＮ要素を自在にする。スタックの上に進む値は、その後Ｒ７に移動させることができる。オペランドスタックポインタをディクリメントすることにより、スタックから要素をポップするためにｉｎｃｊｏｓｐ命令を用いることもできる。命令はさらに、以前に記載された態様でスタックのオーバーフロー／アンダフロー条件が生じれば、これを自動的に処理する。
【００３３】
さらに、Ｊａｖａ（登録商標）ローカル変数は、システムレジスタ１０４が最初の８つの変数についてそうであるように、ＲＩＳＣトラップルーチンに対してアクセス可能である。より多くの変数については、それらはメモリにおける現在のフレームにおいてアクセス可能である。
【００３４】
図６を参照して、このプロセッサ概念を備えたシステムのための典型的なランタイム環境が示される。開発者は、通常のＪａｖａ（登録商標）コンパイラ１４２にＪａｖａ（登録商標）ソースコード１４１をコンパイルし、Ｊａｖａ（登録商標）バイトコード１４４を得ることができる。プロセッサが、ファイルローダおよび自動メモリ管理システムを備えたオペレーティングシステムを収容する場合、このプロセスの残りはダイナミックにかつ自動的に生じることができる。しかしながら、小さな組込システムはしばしばオペレーティングシステムを必要としないので、このプロセスの残りは、プログラムのメモリ画像を外部プラットフォーム上に形成しなければならないという意味で、手動で行われなければならない。Ｊａｖａ（登録商標）バイトコード１４４はリンカ１４８を通して解析しなければならない。リンカを通して走るプログラムは、（１）バイトコードがいかなる不法な命令コードも包含していないことを証明し、使用先ソリューションに依存してコードまたはオペランドを修正し、（２）アプリケーションを特定されたＪａｖａ（登録商標）クラスランタイムライブラリ１４５とリンクし、（３）アセンブリコードをＲＩＳＣ部分１４３にリンクし、ヒープ領域を設定し、ブランチアドレスおよびジャンプアドレスをセットアップし、メモリマップを作る。リンカからの出力は、組込システム１５２におけるＲＯＭまたはフラッシュメモリ１５１に転送することができるメモリイメージである。Ｊａｖａ（登録商標）プロセッサを作る目的の大部分は、プログラマができるだけ制約なくＪａｖａ（登録商標）プログラミング言語を用いることができることである。しかしながら、この場合、サポートされたタイプしか用いることができず、限定されたランタイムライブラリのみが利用可能である。しかしながらこれらの制約は、Ｊａｖａ（登録商標）の主な特徴の使用については限定的ではない。
【００３５】
Ｊａｖａ（登録商標）ＶＭ仕様は現在２０１の命令を包含しており、その多くはタイプ固有であってさまざまなデータタイプのために本質的に複製する。ハードウェアで実現さ
れる命令の数およびトラップされる命令の数は、用いられるＲＩＳＣアーキテクチャに依存する。他の型のＲＩＳＣアーキテクチャは、ハードウェアで実現され、トラップされる多くの命令に影響する。以下の命令は、小さな組込プロセッサにおいては重要なものと考慮されないので、この発明の好ましい実施例においてハードウェアで実現されない。「浮動」タイプのすべての命令、「ダブル」タイプのすべての命令、「長い」タイプのすべての命令である。これにより、２０１のあり得るＪａｖａ（登録商標）命令からおよそ９０の命令がなくなる。残りの命令のうち、６８の命令がＪａｖａ（登録商標）仮想マシンで実現され、４３の命令がトラップされてＲＩＳＣルーチンとして実行される。トラップされ、ＲＩＳＣルーチンとして実行されたＪａｖａ（登録商標）命令は、以下の表１で示される。
【００３６】
【表１】
2008536240.tif 000003
【００３７】
これらの実現例選択で、一般にＪａｖａ（登録商標）命令の少なくとも７０％はプロセッサにおいて直接実行される一方、最大３０％がトラップされてＲＩＳＣプログラムとし
て実行される。これらの率は動的な測定から派生し、典型的にはほとんどのＪａｖａ（登録商標）プログラムについて約９０％と１０％とになるだろう。いずれのＪａｖａ（登録商標）命令をトラップしてＲＩＳＣプログラムとして実行するべきかに関する他の選択は、ハードウェア設計およびレイテンシ要件に大部分依存して行なうことができる。
【００３８】
この発明は、トラップされたＪａｖａ（登録商標）命令の実行中、Ｊａｖａ（登録商標）オペランドスタック値へのＲＩＳＣアクセスを向上させる。レジスタ位置の再マップは、トラップされた命令のＲＩＳＣ実行がＪａｖａ（登録商標）オペランドスタックトップに正確にアクセスし、Ｊａｖａ（登録商標）状態に戻る際にトラップされた動作の結果がアクセス可能であることを確実にする。
【図面の簡単な説明】
【００３９】
【図１】共通のコアプロセッサ要素を共有する結合ＲＩＳＣ／Ｊａｖａ（登録商標）マイクロプロセッサアーキテクチャのブロック図である。
【図２】図１のプロセッサの正常な実行シーケンスのためのフロー図である。
【図３】それぞれのＲＩＳＣおよびＪａｖａ（登録商標）状態に見られるような、マイクロプロセッサのレジスタファイルの関連する部分を示すブロック図である。
【図４】図１のプロセッサをＲＩＳＣ状態とＪａｖａ（登録商標）状態との間で転移するための例示的な機構を示すブロック図である。
【図５】トラップされたＪａｖａ（登録商標）命令をプロセッサのＲＩＳＣ状態において実行するときのこの発明の再マップ動作を示す、システムレジスタ空間およびレジスタファイルの関連する部分のブロック図である。
【図６】図１のマイクロプロセッサが典型的に実現されるランタイムシステムのブロック図である。
【図７】この発明にしたがった、プロセッサ制御部および再マップ装置を備えたマイクロプロセッサのブロック図である。
【図１】
2008536240.tif 000004
【図２】
2008536240.tif 000005
【図３】
2008536240.tif 000006
【図４】
2008536240.tif 000007
【図５】
2008536240.tif 000008
【図６】
2008536240.tif 000009
【図７】
2008536240.tif 000010
【国際調査報告】
2008536240.tif 000011