(57)【要約】      （修正有） 【課題】  仮想マシン命令をネイティブ命令に変換してＣＰＵに実行させるアクセレータと共に、ＦＰＵを有するデータ処理装置において、仮想マシン命令の実行効率を向上させる。【解決手段】  浮動小数点バイトコードに対し、ＦＰＵ（５）を使用するための命令列（ＩＮＳＴ）をバイトコードアクセラレータＢＣＡ（６）がＣＰＵ（４）に対し供給する。ＦＰＵを使用する際は、汎用レジスタからＦＰＵレジスタ（ＦＲＥＧ＿ＦＩＬＥ）にデータを転送した後、ＦＰＵ演算を行う。非正規化数等のＦＰＵで処理できないデータに対してはソフトウェアのライブラリ関数をコールするために、ＢＣＡの処理を終了し、ソフト処理に移行する。これを実現するのに、ＣＰＵからＦＰＵへのデータ転送（ＤＡＴＡ＿ＸＦＥＲ）バス上のデータをスヌープし、データチェック部（３１）で検出した際、ＣＰＵにキャンセル要求を通知し、ＦＰＵ演算実行を抑止する。【選択図】        図１
2005044336.tif 000002
【特許請求の範囲】
【請求項１】
メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサが実行可能なネイティブ命令と異なる命令セットに含まれる仮想マシン命令をネイティブ命令に変換可能なアクセラレータとを有し、
前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するレジスタ間転送用のネイティブ命令に変換し、
前記メインプロセッサは、コプロセッサが前記演算用のネイティブ命令を実行する前に前記レジスタ間転送用のネイティブ命令を実行することを特徴とする情報処理装置。
【請求項２】
前記レジスタ間転送用のネイティブ命令は、メインプロセッサのレジスタファイルからコプロセッサのレジスタファイルに前記データバスを介してデータを転送するデータ転送命令であることを特徴とする請求項１記載の情報処理装置。
【請求項３】
アクセラレータは、メインプロセッサの汎用レジスタをオペランドスタックの対象とし、コプロセッサの演算レジスタをオペランドスタックの非対象とすることを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサのアーキテクチャに依存しない仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有し、
前記アクセラレータは、コプロセッサに入力されるデータがコプロセッサが取り扱えるデータか否かをチェックし、前記コプロセッサが取り扱えないデータと判断したときはコプロセッサの演算を抑止し、
メインプロセッサは前記抑止に応答して前記コプロセッサが取り扱えないデータに対する演算を行うソフトウェア処理に移行することを特徴とする情報処理装置。
【請求項５】
前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するデータ転送用のネイティブ命令に変換してメインプロセッサに与え、
前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記データ転送用のネイティブ命令を実行することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記アクセラレータによるコプロセッサが取り扱えないデータのチェックはメインプロセッサからコプロセッサに転送されるデータに対して行なわれることを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記アクセラレータによるコプロセッサが取り扱えないデータのチェックはメモリからコプロセッサに転送されるデータに対して行なわれることを特徴とする請求項４記載の情報処理装置。
【請求項８】
メインプロセッサはパイプライン形態で命令を実行し、
前記アクセラレータはメインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、
前記模擬パイプライン部は、メインプロセッサのパイプラインステージの遷移に応答してフラグ情報のシフト動作を行うレジスタ手段を有し、フラグ情報のシフト位置が参照可能にされることを特徴とする請求項４記載の情報処理装置。
【請求項９】
第１フォーマットの命令を第２フォーマットの命令に変換する命令変換回路と、
第１フォーマット及び第２フォーマットの命令のフェッチを行ない、フェッチした第１フォーマットの命令を前記命令変換回路に与え、前記命令変換回路で変換された第２フォーマットの命令及びフェッチした第２フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うメインプロセッサと、
メインプロセッサから与えられた第２フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うコプロセッサと、
メインプロセッサとコプロセッサを接続するデータバスと、を備え、
前記命令変換回路は、前記命令変換回路がメインプロセッサに与える第２フォーマットの命令に、前記コプロセッサを利用して演算を行う第２フォーマットの命令を含むとき、メインプロセッサから前記コプロセッサにデータバス経由でデータ転送を行う命令を含む命令列を出力し、
前記コプロセッサは前記データ転送の後に、前記演算を行う第２フォーマットの命令を実行することを特徴とする情報処理装置。
【請求項１０】
前記第２フォーマットの命令はメインプロセッサに依存するネイティブ命令であり、前記第１フォーマットの命令はメインプロセッサに依存しない仮想マシン命令であることを特徴とする請求項９記載の情報処理装置。
【請求項１１】
前記命令変換回路は、前記データバスのデータを入力し所定の数値と比較するデータチェック回路を有し、データチェック回路による比較結果が一致であるとき、メインプロセッサにコプロセッサの実行を抑止する抑止信号を出力することを特徴とする請求項９記載の情報処理装置。
【請求項１２】
前記命令変換回路は、メインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、データチェック回路で比較するデータの入力タイミングの把握に模擬パイプライン部を利用することを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
前記メインプロセッサに接続されるメモリを更に具備し、
前記メインプロセッサは、前記メモリから前記仮想マシン命令及び前記ネイティブ命令を取り込むための命令フェッチ部と、前記ネイティブ命令をデコードするためのデコーダ部と、前記命令フェッチ部に取り込まれた命令が前記仮想マシン命令である場合に前記アクセラレータの出力を選択し前記命令フェッチ部に取り込まれた命令が前記ネイティブ命令である場合に前記命令フェッチ部の出力を選択する選択回路とを有することを特徴とする請求項１に記載の情報処理装置。
【請求項１４】
前記アクセラレータは、前記メインプロセッサに含まれるパイプラインステージの段数と同じ段数を有する模擬パイプラインを有することを特徴とする請求項１に記載の情報処理装置。
【請求項１５】
前記仮想マシン命令は、Ｊａｖａバイトコードであることを特徴とする請求項１に記載の情報処理装置。
【請求項１６】
前記アクセラレータは、前記メインプロセッサに含まれるパイプラインステージの段数と同じ段数を有する模擬パイプラインを有することを特徴とする請求項４に記載の情報処理装置。
【請求項１７】
前記仮想マシン命令は、Ｊａｖａバイトコードであることを特徴とする請求項４に記載の情報処理装置。
【請求項１８】
前記第１フォーマットの命令は、Ｊａｖａバイトコードであることを特徴とする請求項９に記載の情報処理装置。
【請求項１９】
前記メインプロセッサ及び前記コプロセッサは、第１チップに形成され、
前記アクセラレータは、前記第１チップとは異なる第２チップに形成され、
第１チップと第２チップが外部バスで接続され、
前記アクセラレータは、前記コプロセッサに入力されるデータがコプロセッサが取り扱えないデータか否かを前記外部バスを用いてチェックし、コプロセッサが取り扱えないデータのときは、メインプロセッサに割込み信号を出力することでコプロセッサの演算を抑止し、メインプロセッサは前記割込み信号に応答して前記コプロセッサが取り扱えないデータに対する演算を行なうソフトウェア処理に移行することを特徴とする情報処理装置。
【請求項２０】
メインプロセッサと、コプロセッサと、前記メインプロセッサが実行可能なネイティブ命令と異なる命令セットに含まれる仮想マシン命令をネイティブ命令に変換可能なアクセラレータと、メモリとを有し、
メインプロセッサは、汎用レジスタと、第１保存プログラムカウンタと、第２保存プログラムカウンタを備え、
前記メモリは、前記仮想マシンプログラムと例外ハンドラプログラムとサブルーチンプログラムと格納し、
メインプロセッサは、前記コプロセッサで例外が発生する場合に、前記第１保存プログラムカウンタにアクセラレータ起動命令のアドレスを保存し、前記汎用レジスタに仮想マシン命令のアドレスを保存し、
前記サブルーチンプログラムが呼び出されると、例外ハンドラプログラムのアドレスを前記第２保存プログラムカウンタに保存することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに使用される半導体集積回路、特に所定の中間言語をマイクロプロセッサの固有命令に変換するハードウェアアクセラレータを搭載する情報処理装置に関する。
【背景技術】
【０００２】
近年、特定のハードウェア及びＯＳといったプラットフォームに依存せず、様々な機器で動作が可能なＪａｖａが大型のサーバーから携帯電話まで広く普及している。Ｊａｖａとはサン・マイクロシステムズ社により開発されたＣ＋＋に類似したオブジェクト指向プログラミング言語であり、”Ｊａｖａ”はサン・マイクロシステムズ社の登録商標である。
【０００３】
Ｊａｖａは、コンパイル時にソースコードからプラットフォームに依存しないバイトコードと呼ばれる中間言語に翻訳される。バイトコードは、Ｊａｖａ仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：ＶＭ）と呼ばれるソフトウェアを用いて、マイクロプロセッサ固有のネイティブコードに解釈され、実行される。プラットフォームに対応するＪａｖａ仮想マシンを用意することで、プラットフォームの差異は、Ｊａｖａ仮想マシンが吸収する。
【０００４】
バイトコードのＪａｖａ仮想マシンでの実行は、インタープリタ方式でバイトコードを逐一解釈しながら処理するために低速である。そこで、インタプリタ処理ループによるオーバヘッドを削減するために、使用頻度の高いバイトコードにおいて、バイトコードからネイティブコードへの変換をハードウェアで実行することで高速化を行なっている。例えば、特許文献１には、バイトコードをマイクロプロセッサのネイティブコードへ変換するハードウェアが示されている。使用頻度の低いバイトコードはソフトウェアのＪａｖａ仮想マシンを用いて処理するようになっている。
【０００５】
ところで、組み込み機器向けのＪａｖａ言語仕様であるＪ２ＭＥに定義された想定実行環境(コンフィグレーション)の一つにＣＬＤＣがある。ＣＬＤＣは主に小型携帯機器や携帯電話を対象としており、対応仮想マシンはＫＶＭである。
【０００６】
ＣＬＤＣ１．１では、対象バイトコードに浮動小数点バイトコードが追加された。浮動小数点バイトコードをハードウェアで実行するためには、ＦＰＵを使用することが必要となる。特許文献２には、ＦＰＵ（Ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を使用し、浮動小数点バイトコードをＦＰＵ命令へ変換するハードウェアが示されている。
【０００７】
【特許文献１】米国特許第６，３３２，２１５号明細書
【０００８】
【特許文献２】英国特許出願公開第２３７６０９９号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００９】
スタックベースのバイトコードをレジスタベースのネイティブコードに変換するハードウェアをバイトコードアクセラレータと呼ぶことにする。このバイトコードアクセラレータにおいてＪａｖａの各フレームに保持されるオペランドスタックの上位をＣＰＵの汎用レジスタの一部にコピーして利用することができる。レジスタの値を再利用することにより、スタックベースのロードストア命令を削減することができる。このとき、例えばＦＰＵが命令コードをＣＰＵから受け取り、ＣＰＵのコプロセッサとして動作する場合、バイトコードアクセラレータは浮動小数点バイトコードに対して、ＦＰＵ命令をＣＰＵに供給し、ＦＰＵにて演算を行なう。ＣＰＵの汎用レジスタと同様にＦＰＵの演算レジスタもスタックの対象にすると、バイトコードアクセラレータは、ＣＰＵの汎用レジスタとＦＰＵの演算レジスタとのデータに対する整合性を考慮することが必要になり、スタックのデータ管理が複雑化する虞がある。
【００１０】
また、浮動小数点データの中には、ＦＰＵで取り扱えないデータが存在する。例えば、ＮａＮ（非数）を入力とする演算などである。特許文献２では、ＶＦＰ（ＦＰＵ）で取り扱えないデータの場合には、未定義の命令例外を発生し、未定義の命令ベクトルに設定されている未定義の命令ハンドラ（例外ハンドラ）を実行する。そして、命令ストリームを点検することにより、ＶＦＰ（ＦＰＵ）動作を引き起こした命令が実際にＶＦＰ命令であることを理解することとしている。未定義の命令ハンドラによる命令ストリームの点検はＦＰＵのステータスレジスタの値をＣＰＵに転送して行うようになっており、例外発生を引き起こした浮動小数点動作を正確に把握できない場合のあることも想定しなければならない。これにより、アクセラレータで取り扱われない浮動小数点動作の検出が正確な場合と不正確な場合の両方に対処できる例外ハンドラを準備することが必要になる。
【００１１】
本発明の一つの目的は、仮想マシン命令をネイティブ命令に変換してメインプロセッサに実行させることが可能なアクセラレータと共に、メインプロセッサからコプロセッサ命令を受取って動作するコプロセッサを有するデータ処理装置において仮想マシン命令の実行効率を向上させることにある。
【００１２】
更に詳しくは、第１に、ＣＰＵを有するメインプロセッサとＦＰＵ等のコプロセッサに対するオペランドスタックの管理を簡素化することができる情報処理装置を提供することを目的とする。
【００１３】
第２に、アクセラレータを用いる時にもＦＰＵ等のコプロセッサが取り扱えない演算動作に対して当該取り扱えない演算動作の検出を正確に行うことができる情報処理装置を提供することを目的とする。
【００１４】
第３に、アクセラレータを用いる時にもＦＰＵ等のコプロセッサが取り扱えない演算動作への例外ハンドラを修正せずに使用することができる情報処理装置を提供することを目的とする。
【００１５】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１６】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１７】
〔１〕スタック管理の観点に立った本発明に係る情報処理装置は、メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサが実行可能なネイティブ命令と異なる命令セットに含まれる仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有する。前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するレジスタ間転送用のネイティブ命令に変換する。前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記レジスタ間転送用のネイティブ命令を実行する。上記により、コプロセッサの演算オペランドは、メインプロセッサがレジスタ間転送用のネイティブ命令を実行することにより、メインプロセッサの汎用レジスタのようなレジスタから、コプロセッサの演算レジスタのようなレジスタに転送される。要するに、アクセラレータはコプロセッサの演算レジスタのようなレジスタをテンポラリレジスタのように利用する。換言すれば、オペランドスタックの管理からコプロセッサのレジスタを除外してメインプロセッサのレジスタに一元化でき、アクセラレータによるオペランドのスタック管理を簡素化することができる。
【００１８】
本発明の具体的な形態として、前記レジスタ間転送用のネイティブ命令は、メインプロセッサのレジスタファイルからコプロセッサのレジスタファイルに前記データバスを介してデータを転送するデータ転送命令である。
【００１９】
アクセラレータは、メインプロセッサの汎用レジスタをオペランドスタックの対象とし、コプロセッサの演算レジスタをオペランドスタックの非対象とする。
【００２０】
本発明の具体的な形態として前記メインプロセッサに接続されるメモリを更に具備し、前記メインプロセッサは、前記メモリから前記仮想マシン命令及び前記ネイティブ命令を取り込むための命令フェッチ部と、前記ネイティブ命令をデコードするためのデコーダ部と、前記命令フェッチ部に取り込まれた命令が前記仮想マシン命令である場合に前記アクセラレータの出力を選択し前記命令フェッチ部に取り込まれた命令が前記ネイティブ命令である場合に前記命令フェッチ部の出力を選択する選択回路とを有する。
【００２１】
前記アクセラレータは、例えば前記メインプロセッサに含まれるパイプラインステージの段数と同じ段数を有する模擬パイプラインを有する。
【００２２】
前記仮想マシン命令は、例えばＪａｖａバイトコードである。
【００２３】
〔２〕コプロセッサが取り扱えない演算動作等への例外ハンドラの観点に立った本発明に係る情報処理装置は、メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサのアーキテクチャに依存しない仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有する。前記アクセラレータは、コプロセッサに入力されるデータがコプロセッサが取り扱えないデータか否かをチェックし、コプロセッサが取り扱えないデータのときはコプロセッサの演算動作の実行、あるいは演算結果の格納を抑止する。メインプロセッサは前記抑止に応答して前記コプロセッサが取り扱えないデータに対する演算を行うソフトウェア処理に移行する。前記アクセラレータは、コプロセッサに入力されるデータに対して演算前にデータチェックを行ない、コプロセッサで例外検出を行なうより前にアクセラレータ側でコプロセッサが取り扱えない演算動作を正確に検出する。演算データの種類に関わらず、コプロセッサで例外検出しないことにより、アクセラレータはコプロセッサ演算処理の把握が不正確になることはないため、不正確な場合に対応する例外ハンドラを準備する必要はない。
【００２４】
本発明の具体的な形態として、前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するデータ転送用のネイティブ命令に変換してメインプロセッサに与える。前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記データ転送用のネイティブ命令を実行する。前述の通り、アクセラレータによるオペランドのスタック管理を簡素化することができる。
【００２５】
このとき、前記アクセラレータによるコプロセッサが取り扱えるデータか否かのチェックはメインプロセッサからコプロセッサに転送されるデータに対して行うのが望ましい。これにより、取り扱えない演算動作が実行される前にそれを正確に検出することを保証することができる。
【００２６】
前記アクセラレータによるコプロセッサが取り扱えるデータ否かのチェックはメモリからコプロセッサに転送されるデータに対して行なわれてもよい。
【００２７】
メインプロセッサがパイプライン形態で命令を実行する場合、データチェックタイミングの把握に模擬パイプライン部を採用してもよい。即ち、模擬パイプライン部は前記アクセラレータが保有し、メインプロセッサのパイプラインを模擬するために、メインプロセッサのパイプラインステージの遷移に応答してフラグ情報のシフト動作を行うレジスタ手段を有し、フラグ情報のシフト位置が参照可能にされる。
【００２８】
〔３〕上記二つの観点に立った発明を別の表現形態で表す。情報処理装置は、第１フォーマットの命令を第２フォーマットの命令に変換する命令変換回路と、第１フォーマット及び第２フォーマットの命令のフェッチを行ない、フェッチした第１フォーマットの命令を命令変換回路に与え、命令変換回路で変換された第２フォーマットの命令及びフェッチした第２フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うメインプロセッサと、メインプロセッサから与えられた第２フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うコプロセッサと、メインプロセッサとコプロセッサを接続するデータバスと、を備える。前記命令変換回路がメインプロセッサに与える第２フォーマットの命令に、コプロセッサを利用して演算を行う第２フォーマットの命令を含むとき、メインプロセッサからコプロセッサにデータバス経由でデータ転送を行う命令を含み、コプロセッサは前記データ転送の後に、前記演算を行う第２フォーマットの命令を実行する。上述と同様に、アクセラレータによるオペランドのスタック管理を簡素化することができる。
【００２９】
例えば、前記第２フォーマットの命令はメインプロセッサに依存するネイティブ命令であり、前記第１フォーマットの命令はメインプロセッサに依存しない仮想マシン命令である。
【００３０】
第１コプロセッサは、前記データバスのデータを入力し所定の数値と比較するデータチェック回路を有し、データチェック回路による比較結果が一致であるとき、メインプロセッサに第２コプロセッサの実行を抑止する抑止信号を出力する。前述と同様に、アクセラレータのような第１コプロセッサによるオペランドのスタック管理を簡素化することができる。
【００３１】
第１コプロセッサは、メインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、データチェック回路で比較するデータの入力タイミングの把握に模擬パイプライン部を利用して行う。
【００３２】
上記情報処理装置を利用する情報処理システムは、例えば、アンテナと、アンテナとの間で信号を符号化復号処理する第１情報処理装置と、前記第１情報処理装置に結合された第１主記憶と、上述の発明に係る情報処理装置と共に前記第１情報処理装置との接続手段を有する第２情報処理装置とを備える。第１情報処理装置は第１主記憶に前記アンテナを介して受信したネイティブ命令又は仮想マシン命令で記述されたプログラムを格納する。第２情報処理装置は前記第１主記憶に格納された前記プログラムをリードして実行する。
【発明の効果】
【００３３】
情報処理装置の高速化を実現することができる。
【発明を実施するための最良の形態】
【００３４】
図１には本発明の一例に係るマイクロプロセッサの要部が示される。同図に示されるマイクロプロセッサ（ＭＰＵ）１は、特に制限されないが、公知のＣＭＯＳ（相補型ＭＯＳトランジスタ）やバイポーラトランジスタなどを形成する半導体集積回路技術によって、単結晶シリコンのような１個の半導体基板に形成される。
【００３５】
マイクロプロセッサ（ＭＰＵ）１は、代表的に示されたキャッシュ（ＣＡＣＨＥ）２、メモリ（ＭＥＭ）３、メインプロセッサとしての中央処理装置（ＣＰＵ）４、コプロセッサとしての浮動小数点演算ユニット（ＦＰＵ）５、及びバイトコードアクセラレータ（ＢＣＡ）６を有する。
【００３６】
中央処理装置（ＣＰＵ）４はキャッシュ（ＣＡＣＨＥ）２と命令バスＩ＿ＢＵＳ及びデータバスＤ＿ＢＵＳ等を介して接続される。中央処理装置（ＣＰＵ）４は、メモリ（ＭＥＭ）３等から命令をフェッチする命令フェッチ部（ＦＥＴｃ）１０、セレクタ１１、命令のデコードを行うデコード部（ＤＥＣｃ）１２、命令デコード結果に基づいて命令の演算と実行を行う命令実行部（ＥＸＥｃ）１３、制御信号を生成する制御部（ＣＴＬｃ）１４、レジスタファイル（ＧＲＥＧ＿ＦＩＬＥｃ）１５から構成される。
【００３７】
浮動小数点演算ユニット（ＦＰＵ）５は、中央処理装置（ＣＰＵ）４から与えられる命令（コプロセッサ命令）を解読するデコード部（ＤＥＣｆ）２０、命令デコード結果に基づいて浮動小数点命令の演算と実行を行なう命令実行部（ＥＸＥｆ）２１、制御信号を生成する制御部（ＣＴＬｆ）２２、及びレジスタファイル（ＦＲＥＧ＿ＦＩＬＥｆ）２３から構成される。また、図示されていないが、浮動小数点ユニット（ＦＰＵ）５は、データバスＤ＿ＢＵＳと接続され、メモリ（ＭＥＭ）３とデータのやり取りを行うことも可能である。特に、ネイティブコードであるＦＰＵ命令が入力された場合は、浮動小数点ユニット（ＦＰＵ）５が直接メモリ（ＭＥＭ）３にアクセスする。
【００３８】
バイトコードアクセラレータ（ＢＣＡ）６は、バイトコードをネイティブコードに変換する変換テーブル部（ＴＲＳ＿ＴＢＬ）３０、中央処理装置（ＣＰＵ）４と浮動小数点演算ユニット（ＦＰＵ）５間のレジスタ転送のデータをスヌープしながらチェックするデータチェック部（ＤＡＴＡ＿ＣＨＫ）３１、中央処理装置（ＣＰＵ）４のパイプライン動作を模擬する模擬パイプライン部（ＰＬ＿ＳＩＭ）３２、及びそれらを全体的に制御する制御部（ＣＴＬ）３３から構成される。バイトコードとは中央処理装置（ＣＰＵ）４のアーキテクチャに依存しない仮想マシン命令を意味し、例えばＪａｖａバイトコードを意味する。ネイティブコードとは中央処理装置（ＣＰＵ）４のアーキテクチャに依存するネイティブ命令を意味する。ここでは、仮想マシン命令もネイティブ命令もメモリ（ＭＥＭ）３に格納されている。
【００３９】
特に制限されないが、中央処理装置（ＣＰＵ）４のレジスタファイル（ＲＥＧ＿ＦＩＬＥｃ）１５には１６本の汎用レジスタが含まれ、浮動小数点演算ユニット（ＦＰＵ）５のレジスタファイル（ＲＥＧ＿ＦＩＬＥｆ）２３には１６本の浮動小数点レジスタ（汎用レジスタ）が含まれ、ＣＰＵ４用のレジスタはＲ０〜Ｒ１５、ＦＰＵ５用のレジスタはＦＲ０〜ＦＲ１５で表される。
【００４０】
図２には命令フェッチ部（ＦＥＴｃ）１０からデコード部（ＤＥＣｃ，ＤＥＣｆ）１２，２０への命令伝達経路が示される。命令フェッチ部（ＦＥＴｃ）１０にフェッチされたネイティブコードは経路Ｐ１を通る。命令フェッチ部（ＦＥＴｃ）１０にフェッチされた命令がバイトコードのときバイトコードは経路Ｐ２を通ってバイトコードアクセラレータ（ＢＣＡ）６に供給され、ここで変換されたネイティブコードは経路Ｐ３に出力される。経路Ｐ１，Ｐ３はセレクタ１１で選択され、デコード部（ＤＥＣｃ，ＤＥＣｆ）１２，２０に接続される。セレクタ１１はバイトコードアクセラレータ（ＢＣＡ）６の起動に応答して経路Ｐ３を選択する。デコード部（ＤＥＣｃ）１２は全ての命令をデコードして制御信号を生成する。デコード部（ＤＥＣｆ）２０は浮動小数点命令を認識してデコードする。アドレス空間に対するアドレシングはＣＰＵ４が行う。従って、メモリアクセスを伴う浮動小数点演算命令に対するアドレシングは中央処理装置（ＣＰＵ）４が行う。中央処理装置（ＣＰＵ）４がバイトコードの処理に移行するときは、バイトコードアクセラレータ（ＢＣＡ）６を起動するための所定の分岐命令を実行して、中央処理装置（ＣＰＵ）４のプログラムカウンタＰＣの値をバイトコードエリアの所定バイトコードアドレスに変化させる。これにより、中央処理装置（ＣＰＵ）４のプログラムカウンタ（ＰＣ）はバイトコードをフェッチするためのＪａｖａＰＣとして機能する。バイトコードの処理から復帰するには所定の分岐命令を実行すればよい。
【００４１】
ここで、バイトコードアクセラレータ（ＢＣＡ）６の主な機能を説明する。第１は、前述の命令変換機能である。ＢＴＣＯＤＥはバイトコード、ＩＮＳＴはネイティブコードを意味する。特に、浮動小数点演算を伴う浮動小数点バイトコードに対しては、浮動小数点演算ユニット５が実行する演算用のネイティブコード（浮動小数点演算ネイティブコード）と中央処理装置４が実行するレジスタ間転送用のネイティブ命令（レジスタ間転送ネイティブコード）に変換して中央処理装置４に与える。変換された浮動小数点演算ネイティブコードはアドレシングモードとしてメモリアクセスを伴わない。アドレシングモードはレジスタ指定、特に制限されないが、浮動小数点レジスタに対するレジスタ直接指定とされる。浮動小数点演算のオペランドに関しては、中央処理装置４が前記変換されたレジスタ間転送ネイティブコードを実行して、データを中央処理装置４の汎用レジスタ１５から浮動小数点演算ユニット５の浮動小数点レジスタ２３にデータバスＤＡＴＡ＿ＸＦＥＲ経由で転送される。転送されたデータに対する演算結果は浮動小数点演算ユニット５のレジスタファイル（ＲＥＧ＿ＦＩＬＥｆ）２３から中央処理装置４のレジスタファイル（ＲＥＧ＿ＦＩＬＥｃ）１５に転送される。
【００４２】
第２はデータチェック機能である。データチェック機能とは、浮動小数点演算ユニットが取り扱えないデータ（以下、「演算非サポートデータ」と言う）か否かをチェックする機能である。浮動小数点演算ユニットが取り扱えないデータとは、非正規化数を持たないハードウェアへの入力データが非正規化数のときや、入力データが非数（ＮａＮ）の時である。夫々の詳細については後述する。
【００４３】
データバスＤＡＴＡ＿ＸＦＥＲを介して転送されるデータが浮動小数点演算ユニット５による演算非サポートデータ（演算サポート外データ）であるかを判別する。演算非サポートデータのときは浮動小数点演算ユニット５による演算命令の実行を抑止するために、中央処理装置４に対し信号ＣＮＣＬ＿ＲＥＱでキャンセル要求を出す。これを受けて中央処理装置４はキャンセル信号ＣＮＣＬを浮動小数点演算ユニット５とバイトコードアクセラレータ６に出力する。これによって浮動小数点演算ユニット５による演算非サポートデータに対する演算が抑止される。キャンセルが指示されたバイトコードアクセラレータ６は、キャンセルされた演算非サポートデータに対する演算をソフトウェアで実現するために、中央処理装置４の命令実行シーケンスを移行させる処理を行って、動作停止（ＤＥＡＣＴ）する。そのようなソフトウェア処理は、浮動小数点演算ユニット５が対応していない演算処理を含むバイトコードの処理を中央処理装置４のソフトウェアで実現するためのネイティブ命令列の発生と管理を行う所謂ソフトＶＭプログラムとされる。ソフトＶＭプログラムはメモリ（ＭＥＭ）３に格納されている。ソフトＶＭプログラムにはバイトコードアクセラレータ６を起動するためのフックアップ処理ルーチンを有する。ＣＰＵ４がフックアップ処理ルーチンを実行することによりバイトコードアクセラレータ６が動作可能（ＡＣＴＩＶＥ）にされる。前記フックアップ処理ルーチンには前述のＰＣの機能をＪａｖａＰＣとして機能させるための分岐命令を含んでいる。
【００４４】
上述の機能を詳細する。先ず、マイクロプロセッサ（ＭＰＵ）１による整数バイトコードの実行動作について説明する。整数バイトコードはキャッシュ２に格納され、命令バスＩ＿ＢＵＳを用いて、中央処理装置４のフェッチ部１０にバイトコードがフェッチされる。中央処理装置４はバイトコードＢＴＣＯＤＥをバイトコードアクセラレータ６に供給する。バイトコードアクセラレータ６では、変換テーブル部（ＴＲＳ＿ＴＢＬ）３０にて、ネイティブコードＩＮＳＴに変換し、中央処理装置４に出力する。中央処理装置４はデコード部１２において、命令のデコードを行なった後、命令実行部１３で命令を実行し、結果をレジスタファイル１５あるいはデータバスＤ＿ＢＵＳに出力する。レジスタファイル１５の一部はＪａｖａのオペランドスタックの上位がキャッシュされている。バイトコードアクセラレータ６の終了時、例えばハードウェアで実行しない非サポートバイトコードやＪａｖａランタイム例外検出時では、レジスタファイル１５上のオペランドスタックはメモリ３に退避された後、ソフトウェアの仮想マシン、即ちソフトＶＭプログラムに分岐する。
【００４５】
次に、マイクロプロセッサ１による浮動小数点バイトコードの実行動作を説明する。浮動小数点バイトコードは整数バイトコードと同様に、キャッシュ２に格納され、命令バスＩ＿ＢＵＳを用いて、中央処理装置４のフェッチ部１０にフェッチされる。中央処理装置４はバイトコードＢＴＣＯＤＥをバイトコードアクセラレータ６に供給する。バイトコードアクセラレータ６では、変換テーブル部３０にて、中央処理装置４と浮動小数点演算ユニット５間の転送命令とＦＰＵ演算命令を含むネイティブコードＩＮＳＴに変換し、中央処理装置４に出力する。
【００４６】
例えば図３にはｆａｄｄ（浮動小数点加算命令）のバイトコードをネイティブコードに変換した例を示す。最初の２命令が入力データを中央処理装置４から浮動小数点演算ユニット５へ転送する命令ＦＭＯＶ、次の１命令が浮動小数点加算命令ＦＡＤＤ、最後の１命令が結果を浮動小数点演算ユニット５から中央処理装置４へ転送する命令ＦＭＯＶである。
【００４７】
中央処理装置４ではデコード部１２にてネイティブコードをデコードし、命令に必要な制御信号を生成する。同様に浮動小数点演算ユニット５でもデコード部にて浮動小数点命令をデコードし、命令に必要な制御信号を生成する。浮動小数点バイトコードの変換されたネイティブコードは、次のように実行される。まず、中央処理装置４のレジスタファイル１５から入力データを読出し、読み出したデータを中央処理装置４と浮動小数点演算ユニット５間のデータ転送バスＤＡＴＡ＿ＸＦＥＲを用いて転送し、浮動小数点演算ユニット５のレジスタファイル２３に書き込む。次に、浮動小数点演算ユニット５の実行部２１で浮動小数点演算を行ない、演算結果をレジスタファイル２３に書き込む。最後に、浮動小数点演算ユニット５のレジスタファイル２３を読出し、読み出したデータをデータ転送バスＤＡＴＡ＿ＸＦＥＲを用いて中央処理装置４に転送した後、中央処理装置４のレジスタファイル１５に書き込む。
【００４８】
オペランドスタックのキャッシュは中央処理装置４のレジスタファイル１５のみにあり、浮動小数点演算ユニット５のレジスタは一時的な使用、即ちテンポラリレジスタとして使用される。これはレジスタ上のスタックの管理を容易にするためである。スタック管理の論理を単純にするだけでなく、浮動小数点演算ユニット５のないマイクロプロセッサにおいては、バイトコードのハードウェア実行をサポートするかどうかを設定する制御レジスタで浮動小数点バイトコードを非サポートとするだけでよく、スタック管理の論理変更が不要であるという利点も持つ。従って、浮動小数点演算ユニット５にオペランドスタックのデータを転送するために、中央処理装置４と浮動小数点演算ユニット５間のレジスタで転送が必要となる。
【００４９】
中央処理装置４から浮動小数点演算ユニット５へデータ転送バスＤＡＴＡ＿ＸＦＥＲを用いて入力データを転送する際に、バイトコードアクセラレータ６はデータ転送バスをスヌープして入力データチェックを行う。その必要性について説明する。
【００５０】
まず、Ｊａｖａは言語規定上、無効演算（Ｉｎｖａｌｉｄ）、ゼロ除算、オーバフロー、アンダフロー、不正確等の例外条件の通知（ｓｉｇｎａｌ）やＮａＮ値の通知も行なわず、それら事象の発生に対して演算結果に単一のデフォルト値を与えることが定められている。例えば、ゼロ除算の結果は符号付無限大を出力する。演算結果で生成されるＮａＮはｑＮａＮデフォルト値である。例えば、単精度では７ＦＢＦＦＦＦＦ、倍精度では７ＦＦ７ＦＦＦＦ  ＦＦＦＦＦＦＦＦである。ここで、ＮａＮに関しては、Ｊａｖａの使用でプログラマがＮａＮ値の違いを見分けるメソッドが用意されているため、入力がＮａＮとなる浮動小数点演算はソフト仮想マシン上で処理することが望ましい。そこで、上述の例外条件となりうるデータを浮動小数点演算ユニット５を用いて演算する場合には、例外ディスエーブル（例外受付禁止）で浮動小数点演算を行なうこととする。そして、例外条件となりうるデータが入力された場合は、ソフト仮想マシンに処理を受け渡すとよい。このとき、そのような事象の発生に対して例外処理を発生することはない。
【００５１】
ところで、非正規化数データを処理する場合には、非正規化数を処理するためのハードウェアが必要となる。非正規化数ハードウェアを持たない浮動小数点演算ユニット５の場合、演算が行えないために常にＦＰＵ例外が発生し、例外ハンドラで再実行の際にフラグを設定し、復帰後にフラグ値に従って、ソフトウェアのライブラリ演算関数に分岐する必要がある。ソフトウェアのライブラリ演算関数に分岐するためには、バイトコードアクセラレータを終了し、ソフト仮想マシンに処理を移す必要がある。これらの処理を高速に行うために、ＦＰＵ例外発生の後に、例外ハンドラでフラグを設定させる方法ではなく、ＦＰＵで例外が発生する前に、バイトコードアクセラレータで検出する手段をとる。すなわち、バイトコードアクセラレータが、入力データを演算開始前にチェックしておき、非正規化数の場合にはその浮動小数点バイトコードを非サポートのバイトコードとしてソフト仮想マシン上で処理すればよい。
【００５２】
以上のことから、中央処理装置４から浮動小数点演算ユニット５へデータ転送バスＤＡＴＡ＿ＸＦＥＲを用いて入力データを転送する際に、バイトコードアクセラレータ６はデータ転送バスをスヌープして入力データチェックを行なうことで、浮動小数点演算ユニット５において、ＦＰＵ例外による例外ハンドラの分岐が起こらないために、高速にソフト仮想マシンへの移行ができることと、既存の例外ハンドラを修正不要という利点がある。
【００５３】
図４及び図５にはデータチェック部（ＤＡＴＡ＿ＣＨＫ）３１でチェックすべきデータを示す。図４は非数（ＮａＮ）および非正規化数（ＤＥＮＯＲＭ）の単精度（Ｓｉｎｇｌｅ）データとされ、図５は倍精度（Ｄｏｕｂｌｅ）データとされる。非正規化数が処理できない浮動小数点演算ユニット５を仮定している。データチェック部３１は、データ転送バスＤＡＴＡ＿ＸＦＥＲが３２ビット幅のときは、３２ビット比較器、データ転送バスが６４ビット幅のときは、６４ビット比較器で入力データがＮａＮかＤＥＮＯＲＭかを調べればよい。
【００５４】
図６はＦＰＵ例外イネーブルでの浮動小数点命令ＦＡＤＤのオペランドに対する処理をマトリックスで示し、図７はＦＰＵ例外ディスエーブルでの浮動小数点命令ＦＡＤＤのオペランドに対する処理をマトリックスで示す。バイトコードアクセラレータを使用するときは浮動小数点演算を常にＦＰＵ例外ディスエーブルとして処理する。＋ＩＮＦは＋無限大、−ＩＮＦは−無限大を意味する。（＋ＩＮＦ）＋（−ＩＮＦ）のとき、図６のＦＰＵ例外イネーブルではＦＰＵ無効演算例外（Ｉｎｖａｌｉｄ）が発生し、図７のバイトコードアクセラレータ６を用いた浮動小数点演算では演算結果がｑＮａＮとなる。入力がＮａＮのときは、バイトコードアクセラレータ６では該命令ＦＡＤＤを含むバイトコードは非サポートバイトコードとして扱われる。非正規化数（ＤＥＮＯＲＭ）に関しては、命令毎にハードウェア処理の可否が異なることもある。即ち、非正規化数データの演算を実現するための回路は、演算の種類により異なるため、すべての演算について非正規化数データの演算を実現する回路を設けることは、回路面積の増大を招き現実的でないが、一部の演算（例えば、加算）について非正規化数データの演算を実現する回路を設けることにより演算の高速化を図ることも効果的である。ここでは、非正規化数の加算は、ハードウェア処理が可能であると仮定している。
【００５５】
転送バスＤＡＴＡ＿ＸＦＥＲ上のデータがＮａＮである場合の動作について説明する。バイトコードアクセラレータ６のデータチェック部３１にＮａＮが入力され、ＮａＮ用比較器と一致することからキャンセル要求信号（ＣＮＣＬ＿ＲＥＱ）が中央処理装置４に対して出力される。該キャンセル要求信号は、他の割込みや例外情報と中央処理装置４内の制御部１４で優先度チェックが行なわれる。中央処理装置４で受付けられた際は、キャンセル受付信号（ＣＮＣＬ＿ＡＣＫ）と共に、中央処理装置４はキャンセル信号（ＣＮＣＬ）をバイトコードアクセラレータ６と浮動小数点演算ユニット５に出力し、データ転送命令以降の浮動小数点演算命令（ＦＰＵ命令）の実行を抑止する。そして、バイトコードアクセラレータ６はキャンセル要求を行なったバイトコードを非サポートバイトコードとして扱うために、バイトコードアクセラレータ６から非サポート用の終了シーケンス命令が中央処理装置４に出力され、中央処理装置４はソフトＶＭプログラムによるソフト仮想マシンに分岐し、バイトコードアクセラレータ６は処理を終了する。
【００５６】
図３を参照しながらｆａｄｄバイトコードの入力データチェックとキャンセルタイミングを説明する。ＩＤはデコードステージ、Ｅ１からＥ４は実行ステージである。ここでＲｓ０とＲｓ１はそれぞれレジスタ上のオペランドスタックのトップとその次を指す。ＦＲ０、ＦＲ２は浮動小数点演算ユニット５のレジスタである。最初の命令であるＦＭＯＶ  Ｒｓ１，ＦＲ２とＦＭＯＶ  Ｒｓ０，ＦＲ０にＥ２ステージにてデータ転送バスＤＡＴＡ＿ＸＦＥＲのデータＤＡＴＡ１、ＤＡＴＡ０がレジスタＦＲ２、ＦＲ０に入力される。バイトコードアクセラレータ６内のデータチェック部（ＤＡＴＡ＿ＣＨＫ）３１は、Ｅ２ステージにてデータ転送バス（ＤＡＴＡ＿ＸＦＥＲ）にてそのデータが非数（ＮａＮ）か非正規化数（ＤＥＮＯＲＭ）に一致する場合には、第２命令のＥ３ステージにて中央処理装置４に対してキャンセル要求信号（ＣＮＣＬ＿ＲＥＱ）がアサートされる。データチェック部３１でチェックすべきデータはＦＰＵ命令の種類毎に異なっていてもよい。中央処理装置４の制御部１４にて例外の優先度チェックを行ない、該キャンセル信号を受け付ける場合には、キャンセル受付け信号（ＣＮＣＬ＿ＡＣＫ）とキャンセル信号（ＣＮＣＬ）を第２命令のＥ４ステージにてアサートする。そして、第２命令以下、続行の命令の実行がキャンセルされる。ＦＡＤＤ命令もキャンセルされるため、ＦＰＵ例外は発生しない。第３命令のＥ４ステージでＦＰＵ例外の受付けが行なわれるためである。
【００５７】
キャンセル信号を受取った中央処理装置４とバイトコードアクセレレータ６の処理について説明する。キャンセル受付け信号（ＣＮＣＬ＿ＡＣＫ）とキャンセル信号（ＣＮＣＬ）をバイトコードアクセラレータ６が受け取ると、該当バイトコードの非サポートシーケンスの命令列を開始する。キャンセル受付け信号（ＣＮＣＬ＿ＡＣＫ）を受け取った際、バイトコードアクセラレータ６は別のバイトコードの変換を行っていることもあり得るが、図３の第２命令のＥ４ステージのバイトコードの場所すなわちＪａｖａＰＣの値を使用することにより、キャンセル要求を行なったバイトコードを正確に知ることができる。図３ではｆａｄｄバイトコード実行中にキャンセル受付け信号を受け取った例である。非サポートシーケンスの命令列を中央処理装置４が実行すると、中央処理装置４はソフト仮想マシンに分岐し、バイトコードアクセラレータ６は処理を終了する。
【００５８】
任意の命令において、中央処理装置４の任意のステージ伝播情報を知ることを可能にするために、バイトコードアクセラレータ６は模擬パイプライン部（ＰＬ＿ＳＩＭ）３２を有する。先に述べた第２命令のＥ２ステージでデータ転送バスＤＡＴＡ＿ＸＦＥＲのデータをスヌープすることや、第２命令のＥ４ステージのバイトコードを知ることは、模擬パイプライン部３２を用いることにより実現している。ここで非サポートシーケンスとはソフト処理を行なうためにレジスタ上のオペランドスタックのメモリ退避とソフト仮想マシンへの分岐処理のネイティブ命令列を指す。
【００５９】
図８にバイトコードアクセラレータ６の模擬パイプライン（ＰＬ＿ＳＩＭ）３２を示す。ＢＴはバイトコードアクセラレータ６の動作ステージ、ＩＤはデコードステージ、Ｅ１以降は実行ステージである。Ｅ３ステージ以降の構成は前段と同じであるから図示を省略してある。ＩＮＦＯ［Ｎ：０］で示されるＮ＋１ビットの情報は、ＣＰＵで実行されるネイティブ命令に対応付けられたフラグ情報である。模擬パイプライン部は、前記フラグ情報をＣＰＵ４のパイプラインステージの遷移に応答して後段にシフトするシフトレジスタ構成とされ、ＩＮＦ［Ｎ：０］に対応してＮ＋１個のシフトレジスタを有する。シフトレジスタの各記憶段はフリップフロップ４０によって構成される。フリップフロップ４０の前段に配置されたセレクタ４１はパイプラインステージが遷移するまで帰還ループを選択して状態保持を行う。パイプラインステージの遷移、リセット時には前段からの入力を選択する。命令発行はＩＤステージで行ない、Ｅ１以降はキャッシュのバスレディ信号ＢＵＳＲＤＹに同期してステージが遷移する。ＩＤステージからＥ１ステージへの遷移は、中央処理装置４の命令発行信号Ｅ１ＧＯとバスレディ信号ＢＵＳＲＤＹを用いて制御する。ＢＴステージの遷移信号はＩＤステージと同期して動作させるために、命令受付信号ＩＤＧＥＴとバスレディ信号ＢＵＳＲＤＹを使用する。各ステージでバイトコードアクセラレータＢＣＡを動作させるのに必要なＮ＋１ビットの情報ＩＮＦＯ［Ｎ：０］をステージの遷移に同期シフトして持ちまわる。ＩＮＦＯ＿ＩＤ［Ｎ：０］、ＩＮＦＯ＿Ｅ１［Ｎ：０］、ＩＮＦＯ＿Ｅ２［Ｎ：０］等が内部で参照されて利用される。各ステージの情報は、ＩＤＣＮＣＬやＥ１ＣＮＣＬ等の各ステージのキャンセル信号ＣＮＣＬの否定と論理積が採られる。これにより、中央処理装置４からキャンセル信号がアサートされると、各ラッチ段の入力が論理値“０”にされてクリアされる。ステート間で持ちまわる情報の例としては、中央処理装置４から浮動小数点演算ユニット５へのデータ転送情報やオペランドスタックのレジスタ管理情報などがある。Ｅ３、Ｅ４ステージに関しては、Ｅ２ステージと同様に構成できる。
【００６０】
以上のように、浮動小数点演算ユニット５を使用するにあたり、中央処理装置４から浮動小数点演算ユニット５へのデータ転送バスＤＡＴＡ＿ＸＦＥＲのデータをバイトコードアクセラレータ６がスヌープして、データチェックを行ない、バイトコードアクセラレータ６はライブラリ関数をコールすべきデータを正確に検出することができる。この後に、該浮動小数点バイトコードを非サポートとして、ソフト仮想マシンに分岐する。ＦＰＵ例外が起こり得るデータに関して、例えば非正規化数に対する演算ハードウェアを持たない浮動小数点演算ユニット５で非正規化数が入力されたときは、ＦＰＵ例外が発生する前に、それに対応するバイトコードを非サポートバイトコードにしてから、ソフト仮想マシン（ソフトＶＭプログラム）に分岐する。そして、ソフト仮想マシンにて該浮動小数点バイトコードのインタプリタ処理を行なう際、浮動小数点ライブラリをコールし、浮動小数点演算をソフトエミュレートする。
【００６１】
バイトコードアクセラレータ６はバイトコードのハードウェア実行を行い、それ以外のソフトウェアによる実装部分と協調して仮想マシンを構成する。このソフトウェアによる実装部分がソフト仮想マシン（ＳＯＦＴ＿ＶＭ）である。図９には浮動小数点バイトコードの実行時におけるバイトコードアクセラレータ６とソフト仮想マシンとの動作の分担及び相互の遷移状態が示される。
【００６２】
ソフト仮想マシン（ＳＯＦＴ＿ＶＭ）５０は、ソフトＶＭ実行の初期設定を行う初期化部分（ＩＮＩＴＩＡＬＩＺＥ）５１、バイトコードアクセラレータ６を起動する際の起動命令（Ｊ＿ＪＰ命令）が置かれたフックアップ部（ＨＯＯＫＵＰ）５２、ソフトウェアで解釈実行を行うために各バイトコードの処理開始アドレスを示すディスパッチテーブル（ＤＩＳＰＡＴＣＨ  ＴＡＢＬＥ）５３、ディスパッチテーブルに示されたアドレスにネイティブ命令が配置され、ソフトウェアで解釈実行を行うインタプリタ部（ＩＮＴＥＲＰＲＥＴＥＲ）５４から構成される。中央処理装置４、浮動小数点演算ユニット５、バイトコードアクセラレータ６は以上の説明通りである。
【００６３】
浮動小数点バイトコードの処理において入力データが例えば非数（ＮａＮ）でライブラリ関数をコールする場合の動作を説明する。
【００６４】
中央処理装置４の汎用レジスタ（ＧＲＥＧ＿ＦＩＬＥ）１５のオペランドスタックから浮動小数点演算ユニット５の汎用レジスタ（ＦＲＥＧ＿ＦＩＬＥ）２３にデータバスを介してＦＰＵ入力データ（ＤＡＴＡ）が出力される。バイトコードアクセラレータ６はデータバス上のデータ（ＤＡＴＡ）をスヌープ（ＳＮＯＯＰ）し、バイトコードアクセラレータ６のデータチェック部（ＤＡＴＡ＿ＣＨＫ）３１に入力する。データチェック部３１で非数（ＮａＮ）検出すると、該浮動小数点演算命令を含むバイトコードを非サポートバイトコード（ＵＮＳＵＰＰＯＲＴ  ＢＣＯＤＥ）と認識する。バイトコードアクセラレータ６、中央処理装置４、浮動小数点演算ユニット５間で信号のやりとりがあるが、図１と同様なのでここでは省略する。バイトコードアクセラレータ６は非サポートバイトコード時のネイティブ命令のシーケンスを中央処理装置４に出力後、処理を終了する。そして、図では省略しているが、プログラムカウンタが該バイトコードのソフト仮想マシンのディスパッチテーブルアドレスに設定され、バイトコードアクセラレータは処理を終了する（ＤＥＡＣＴ）。
【００６５】
非サポートバイトコード時は、ディスパッチテーブル部（ＤＩＳＰＡＴＣＨ  ＴＡＢＬＥ）５３の該当するバイトコードよりインタプリタ５４の処理アドレス（ＡＤＤＲＥＳＳ）が与えられ、インタプリタ部（ＩＮＴＥＲＰＲＥＴＥＲ）５４上で解釈実行を行う。ディスパッチテーブル部５３は８ビットのバイトコード数分の２５６個の配列で構成される。インタプリタ部でデータチェックを行い、入力データが非数であることから浮動小数点のライブラリ関数（Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｌｉｂｒａｒｙ）がコールされ、浮動小数点バイトコードのソフトウェアエミュレーションを行なう。
【００６６】
フックアップ部５２はバイトコードアクセラレータ６を起動する際にソフトウェアで実行すべき起動命令が配置されたソフトウェアルーチンである。非サポートバイトコードをインタプリタ部５４を介して実行した後、フックアップ部５２に分岐後、再びバイトコードアクセラレータ６が起動され、次のバイトコードが処理される。ここで、フックアップ部５２は１箇所ではなく、複数箇所存在してもよい。例えば、非サポートバイトコードの処理はソフトＶＭのインタプリタ部分、インタプリタの各バイトコード処理部分の末尾に起動命令（Ｊ−ＪＰ命令）を置いてもよい。
【００６７】
また、携帯端末等に使用される場合は、低消費電力化が必要である。その場合、コプロセッサ（例えばＦＰＵ）を搭載するチップにおいて、中央処理装置（ＣＰＵ）のステータスレジスタがＦＰＵ非搭載モードとし、コプロセッサを停止させ低消費電力を図ることが考えられる。このようにＦＰＵ非搭載モードとした場合に、バイトコードアクセラレータを用いて浮動小数点バイトコードを実行する場合の処理を説明する。バイトコードアクセラレータは浮動小数点命令を含む浮動小数点バイトコードをＣＰＵに供給する。このとき、ＣＰＵはコプロセッサ（例えばＦＰＵ）不当例外を発生し、バイトコードアクセラレータに通知する。ＣＰＵが例外ハンドラに分岐する前に、バイトコードアクセラレータはプログラムカウンタを起動命令のアドレスに設定し、終了する。例外ハンドラ内ではCPUが
ステータスレジスタをコプロセッサ搭載モードに設定し、通常モードに復帰する。このとき、復帰先のアドレスが起動命令なので、該バイトコードからバイトコードアクセラレータは復帰できる。バイトコードのアドレス（ＪａｖａＰＣ）は起動命令の引数のレジスタ値として与えればよい。
【００６８】
上記マイクロプロセッサ１によれば以下の作用効果を得ることができる。バイトコードアクセラレータ６は、メインプロセッサとしての中央処理装置（ＣＰＵ）４やコプロセッサとしての浮動小数点演算ユニット（ＦＰＵ）５と連携して、浮動小数点バイトコードを実行することができる。このとき、コプロセッサ５の例外事象、例えば、ライブラリ関数の呼出しが必要な浮動小数点データ（ＮａＮ、非正規化数など）において、高速かつ正確に該当箇所、ここでは浮動小数点バイトコードを検出し、ソフト仮想マシンに分岐させることができる。非正規化数を非正規化数処理ハードウェアを持たない浮動小数点演算ユニット５で実行すると、ＦＰＵ例外を発生し、例外ハンドラに通常分岐するが、上記構成では、ＦＰＵ例外が発生しないため、例外ハンドラの変更は不要である。このことは、既存のソフトウェア資産の例外ハンドラを使用可能であることを意味し、バイトコードアクセラレータ６追加によっても既存のソフト資産の例外ハンドラを継承することができる。
【００６９】
図１０には前記マイクロプロセッサの好適な応用例としての携帯情報システムの一例を示す。携帯電話システムは、大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波をアンテナで送受信する高周波部（ＲＦ）６０、ベースバンドのモデム及びコーデックを行うベースバンドプロセッサ（ＢＢＰ）６１、メモリ（ＭＲＹａ）６２を有する。アプリケーション部分は、前記バイトコードアクセラレータ６、中央処理装置４及び浮動小数点演算ユニット５を内蔵するマイクロプロセッサ１を中心に構成される。マイクロプロセッサ１はインターフェース（Ｉ／Ｆ）６４を介してバスＢＵＳでベースバンドプロセッサ６が接続され、周辺インターフェース（ＰＰＨ）６５を介してカメラ（ＣＭＲ）６６、メモリカード（ＣＡＲＤ）６７、音源部（ＳＯＤ）６８、及びキーボード（ＫＥＹ）６９が接続され、外部バスを介して液晶ディスプレイ（ＬＣＤ）７０、メモリ（ＭＲＹｂ）７１が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【００７０】
本システム構成例では、例えば、次のようにメモリが使用される。Ｊａｖａアプリケーションは、外部サーバーより高周波部ＦＲを介して配給され、ベースバンドプロセッサ６１を使用し、メモリ６２に格納される。また、メモリ６２に格納されたＪａｖａアプリケーションは、メモリ７１に転送され、マイクロプロセッサ１で実行される。ソフト仮想マシン５０はメモリ６２又は７１のどちらに配置してもよい。ソフト仮想マシン５０のインタプリタ部５４はアクセス頻度が高いため、１チップの半導体集積回路化プロセッサ（ＭＰＵ）１の内蔵メモリ上に配置されることが望ましい。このシステムにより、バイトコードの処理が高速に行えるので、携帯情報システムの付加価値を高めることができる。
【００７１】
図１１には前記マイクロプロセッサの好適な応用例として車載情報システム例えばカーナビゲーションの構成が例示される。前記中央処理装置４、浮動小数点演算ユニット５及びバイトコードアクセラレータ６を備えたマイクロプロセッサ（ＭＰＵ）１には、３次元グラフィックアクセラレータ（３ＤＧ）８０、２次元グラフィックアクセラレータ（２ＤＧ）８１、全地球測位システム（ＧＰＳ）８２、周辺インターフェース（ＰＰＨ）８３が集積される。外部バスＥＸＢを介して液晶ディスプレイ（ＬＣＤ）８４、メモリ（ＭＲＹｃ）８５が接続される。
【００７２】
本システム構成例では、Ｊａｖａアプリケーション及びソフト仮想マシン５０はメモリ（ＭＲＹｃ）８５に格納される。ソフト仮想マシン５０のインタプリタ部５４はアクセス頻度が高いため半導体集積回路化されたマイクロプロセッサのオンチップメモリ上に配置されることが望ましい。この発明により、バイトコードの処理が高速に行えるため、車載情報システムの付加価値を高めることができる。
【００７３】
図１２にはマイクロプロセッサの別の例が示される。同図に示される情報処理装置は、バイトコードアクセラレータ６をマイクロプロセッサ（ＭＰＵ）１Ａとは別チップで構成した点が図１と相違される。マルチチップで構成されることにより以下の構成が相違されることになる。第１は、バイトコードアクセラレータ６を用いるバイトコードの処理において浮動小数点演算データの転送は中央処理装置４がメモリ（ＭＥＭｄ）８８から行う。特に制限されないが、浮動小数点演算ユニット５のレジスタファイル（ＲＥＧ＿ＦＩＬＥｆ）２３はテンポラリレジスタとして利用される。第２に、データチェック回路（ＤＡＴＡ＿ＣＨＫ）３１が浮動小数点演算ユニット５の非サポートデータを検出したとき、制御部（ＣＴＬ）３３は中央処理装置４に割込み信号ＩＮＴ＿ＲＥＱで割り込みを要求してソフトＶＭプログラム５０による処理への移行を要求する。バイトコードアクセラレータ６は割込みアクノレッジ信号ＩＮＴ＿ＡＣＫによってその割込み要求の受付を確認した後に動作停止する。マルチチップ構成に対応すれば、中央処理装置４と浮動小数点演算ユニット５を持つ既存のＭＰＵにバイトコードアクセラレータ６を外付けすることによって図１のマイクロププロセッサ１と同様にバイトコードアクセラレータ６の処理において浮動小数点演算ユニット５で例外が発生する事態を抑止することができる。
【００７４】
図１３には、本発明の別の実施例が示される。これまでの説明では浮動小数点ライブラリをソフトウェア仮想マシンから呼び出す例であったが、ここでは例外ハンドラから浮動小数点ライブラリを呼んでいる。倍精度浮動小数点乗算に非正規化数ハードウェアがないと仮定する。このとき、ｄｍｕｌバイトコードで入力が非正規化数のときにＦＰＵ例外が発生した例である。ＦＰＵ例外が発生すると、例外ハンドラが起動される。そして、例外ハンドラの中で浮動小数点演算ライブラリがコールされ、適切な処理が実行され、復帰する。
【００７５】
ＣＰＵのハードウェアでは、汎用レジスタのうちの一つのＲｊｐ、例外保存用プログラムカウンタとしてのＳＰＣとサブルーチン保存用プログラムカウンタとしてのＰＲレジスタを用いて実現する。まず、ＦＰＵ例外が発生したときには、バイトコード列への戻りアドレスとして、ＳＰＣに起動命令のアドレスを格納し、ＲｊｐにＪａｖａＰＣを格納する。次に、浮動小数点演算ライブラリがコールされるときは、例外ハンドラへの戻りアドレスとしてＰＲにＰＣ１が格納される。演算ライブラリからの復帰時はＰＲの値をＰＣに格納することにより、適切に例外ハンドラに復帰する。例外ハンドラからの復帰時はＳＰＣの値をＰＣに格納することにより起動命令のアドレスから復帰し、そのときのＪａｖａＰＣとしてＲｊｐを参照することにより正しく復帰できる。
【００７６】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００７７】
例えば、ＦＰＵに代表されるコプロセッサはそれに限定されない。例えばディジタル信号処理プロセッサ、或いは暗号演算プロセッサなどであってもよい。また、組み込み機器向けのＪａｖａ言語仕様に好適な例を説明したが、本発明はその他のＪａｖａ言語仕様に対応することは妨げられない。更に、仮想マシン命令はＪａｖａ言語による生成コードに限定されず、プロセッサのアーキテクチャに依存しないコードを生成するためのその他の言語仕様に依存する命令であってもよい。
【００７８】
以上説明したマイクロプロセッサによって得られる効果を簡単に説明すれば下記の通りである。
【００７９】
すなわち、ＦＰＵなどのコプロセッサのレジスタをテンポラリレジスタに見立てて利用することにより、ＣＰＵを有するメインプロセッサとＦＰＵ等のコプロセッサに対するオペランドスタックの管理を簡素化することができる。
【００８０】
演算非サポートデータを直接検出するから、ＦＰＵ等のコプロセッサが取り扱えない演算動作に対して、取り扱えない演算動作の検出を正確に行うことができる。
【００８１】
演算非サポートデータを直接検出してその演算を抑止するから、ＦＰＵ等のコプロセッサが取り扱えない演算動作に対するソフトウェア処理への移行にも既存の例外ハンドラを修正せずに使用することができる。
【００８２】
上記より、仮想マシン命令をネイティブ命令に変換してメインプロセッサに実行させることが可能なアクセラレータと共に、メインプロセッサからコプロセッサ命令を受取って動作するコプロセッサを有するデータ処理装置において仮想マシン命令の実行効率を向上させることができる。
【図面の簡単な説明】
【００８３】
【図１】本発明の一例に係るマイクロプロセッサの要部を示すブロック図である。
【図２】命令フェッチ部（ＦＥＴｃ）からデコード部（ＤＥＣｃ，ＤＥＣｆ）への命令伝達経路を示すブロック図である。
【図３】ｆａｄｄ（浮動小数点加算命令）バイトコードをネィティブ命令に変換した例とそのｆａｄｄバイトコードの入力データチェックとキャンセルタイミングを例示する説明図である。
【図４】データチェック部（ＤＡＴＡ＿ＣＨＫ）でチェックすべきデータとして非数（ＮａＮ）および非正規化数（ＤＥＮＯＲＭ）の単精度（Ｓｉｎｇｌｅ）データを示す説明図である。
【図５】データチェック部（ＤＡＴＡ＿ＣＨＫ）でチェックすべきデータとして非数（ＮａＮ）および非正規化数（ＤＥＮＯＲＭ）の倍精度（Ｄｏｕｂｌｅ）データを示す説明図である。
【図６】ＦＰＵ例外イネーブルでの浮動小数点命令ＦＡＤＤの入力オペランドに対するマトリックスを示す説明図である。
【図７】バイトコードアクセラレータを用いる場合のＦＰＵ例外ディスエーブルでの浮動小数点命令ＦＡＤＤの入力オペランドに対するマトリックスを示す説明図である。
【図８】バイトコードアクセラレータの模擬パイプラインの構成を例示する説明図である。
【図９】浮動小数点バイトコード実行時のバイトコードアクセラレータとソフト仮想マシンとの動作の分担及び相互の遷移状態を示す説明図である。
【図１０】図１のマイクロプロセッサの好適な応用例としての携帯情報システムの一例を示すブロック図である。
【図１１】図１のマイクロプロセッサの好適な応用例として車載情報システム例えばカーナビゲーションの構成を例示するブロック図である。
【図１２】バイトコードアクセラレータをマイクロプロセッサとは別チップで構成したデータ処理装置の例を示すブロック図である。
【図１３】例外ハンドラから浮動小数点ライブラリを呼び出す例を示す図である。
【符号の説明】
【００８４】
１  マイクロプロセッサ
３  メモリ（ＭＥＭ）
２  キャッシュ（ＣＡＣＨＥ）
４  中央処理装置（ＣＰＵ）
１０  命令フェッチ部（ＦＥＴｃ）
１２、２０  デコード部（ＤＥＣｃ、ＤＥＣｆ）
１３、２１  実行部（ＥＸＥｃ、ＥＸＥｆ）
１４、２２、３３  制御部（ＣＴＬｃ、ＣＴＬｆ、ＣＴＬ）
１５  ＣＰＵレジスタファイル（ＧＲＥＧ＿ＦＩＬＥ）
２３  ＦＰＵレジスタファイル（ＦＲＥＧ＿ＦＩＬＥ）
６  バイトコードアクセラレータ（ＢＣＡ）
３０  変換テーブル部（ＴＲＳ＿ＴＢＬ）
３１  データチェック部（ＤＡＴＡ＿ＣＨＫ）
３２  模擬パイプライン部（ＰＬ＿ＳＩＭ）
５０  ソフト仮想マシン（ＳＯＦＴ＿ＶＭ）
５１  初期化ルーチン部（ＩＮＩＴＩＡＬＩＺＥ）
５２  起動部（ＨＯＯＫＵＰ）
５３  ディスパッチテーブル部（ＤＩＳＰＡＣＴＨ  ＴＡＢＬＥ）
５４  インタプリタ部（ＩＮＴＥＲＰＲＥＴＥＲ）
ＡＣＴＩＶＥ  起動
ＤＥＡＣＴ  停止
ＵＮＳＵＰＰＯＲＴ  ＢＣＯＤＥ  非サポートバイトコード検出
ＩＤＧＥＴ  命令受理信号
Ｅ１ＧＯ  命令発行信号
ＢＴＣＮＣＬ、ＩＤＣＮＣＬ、Ｅ１ＣＮＣＬ、Ｅ２ＣＮＣＬ  キャンセル信号
ＥＸＰ＿ＢＵＳ  外部バス
ＰＣ  プログラムカウンタ
ＳＰＣ  例外保存用プログラムカウンタ
ＰＲ  サブルーチン保存用プログラムカウンタ
Ｒｊｐ  汎用レジスタの一つ
【図１】
2005044336.tif 000003
【図２】
2005044336.tif 000004
【図３】
2005044336.tif 000005
【図４】
2005044336.tif 000006
【図５】
2005044336.tif 000007
【図６】
2005044336.tif 000008
【図７】
2005044336.tif 000009
【図８】
2005044336.tif 000010
【図９】
2005044336.tif 000011
【図１０】
2005044336.tif 000012
【図１１】
2005044336.tif 000013
【図１２】
2005044336.tif 000014
【図１３】
2005044336.tif 000015