JP2009032263A - 情報処理装置 - Google Patents
情報処理装置 Download PDFInfo
- Publication number
- JP2009032263A JP2009032263A JP2008193209A JP2008193209A JP2009032263A JP 2009032263 A JP2009032263 A JP 2009032263A JP 2008193209 A JP2008193209 A JP 2008193209A JP 2008193209 A JP2008193209 A JP 2008193209A JP 2009032263 A JP2009032263 A JP 2009032263A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- data
- coprocessor
- main processor
- accelerator
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】情報処理装置に浮動小数点バイトコードの実行に好適なハードウェアアクセラレータを実現する。
【解決手段】浮動小数点バイトコードに対し、FPU(5)を使用するための命令列(INST)をバイトコードアクセラレータBCA(6)がCPU(4)に対し供給する。FPUを使用する際は、汎用レジスタからFPUレジスタ(FREG_FILE)にデータを転送した後、FPU演算を行う。非正規化数等のFPUで処理できないデータに対してはソフトウェアのライブラリ関数をコールするために、BCAの処理を終了し、ソフト処理に移行する。これを実現するのに、CPUからFPUへのデータ転送(DATA_XFER)バス上のデータをスヌープし、データチェック部(31)で検出した際、CPUにキャンセル要求を通知し、FPU演算実行を抑止する。
【選択図】図1
【解決手段】浮動小数点バイトコードに対し、FPU(5)を使用するための命令列(INST)をバイトコードアクセラレータBCA(6)がCPU(4)に対し供給する。FPUを使用する際は、汎用レジスタからFPUレジスタ(FREG_FILE)にデータを転送した後、FPU演算を行う。非正規化数等のFPUで処理できないデータに対してはソフトウェアのライブラリ関数をコールするために、BCAの処理を終了し、ソフト処理に移行する。これを実現するのに、CPUからFPUへのデータ転送(DATA_XFER)バス上のデータをスヌープし、データチェック部(31)で検出した際、CPUにキャンセル要求を通知し、FPU演算実行を抑止する。
【選択図】図1
Description
本発明は、マイクロプロセッサに使用される半導体集積回路、特に所定の中間言語をマイクロプロセッサの固有命令に変換するハードウェアアクセラレータを搭載する情報処理装置に関する。
近年、特定のハードウェア及びOSといったプラットフォームに依存せず、様々な機器で動作が可能なJavaが大型のサーバーから携帯電話まで広く普及している。Javaとはサン・マイクロシステムズ社により開発されたC++に類似したオブジェクト指向プログラミング言語であり、”Java”はサン・マイクロシステムズ社の登録商標である。
Javaは、コンパイル時にソースコードからプラットフォームに依存しないバイトコードと呼ばれる中間言語に翻訳される。バイトコードは、Java仮想マシン(Virtual Machine:VM)と呼ばれるソフトウェアを用いて、マイクロプロセッサ固有のネイティブコードに解釈され、実行される。プラットフォームに対応するJava仮想マシンを用意することで、プラットフォームの差異は、Java仮想マシンが吸収する。
バイトコードのJava仮想マシンでの実行は、インタープリタ方式でバイトコードを逐一解釈しながら処理するために低速である。そこで、インタプリタ処理ループによるオーバヘッドを削減するために、使用頻度の高いバイトコードにおいて、バイトコードからネイティブコードへの変換をハードウェアで実行することで高速化を行なっている。例えば、特許文献1には、バイトコードをマイクロプロセッサのネイティブコードへ変換するハードウェアが示されている。使用頻度の低いバイトコードはソフトウェアのJava仮想マシンを用いて処理するようになっている。
ところで、組み込み機器向けのJava言語仕様であるJ2MEに定義された想定実行環境(コンフィグレーション)の一つにCLDCがある。CLDCは主に小型携帯機器や携帯電話を対象としており、対応仮想マシンはKVMである。
CLDC1.1では、対象バイトコードに浮動小数点バイトコードが追加された。浮動小数点バイトコードをハードウェアで実行するためには、FPUを使用することが必要となる。特許文献2には、FPU(Floating−point Processing Unit)を使用し、浮動小数点バイトコードをFPU命令へ変換するハードウェアが示されている。
スタックベースのバイトコードをレジスタベースのネイティブコードに変換するハードウェアをバイトコードアクセラレータと呼ぶことにする。このバイトコードアクセラレータにおいてJavaの各フレームに保持されるオペランドスタックの上位をCPUの汎用レジスタの一部にコピーして利用することができる。レジスタの値を再利用することにより、スタックベースのロードストア命令を削減することができる。このとき、例えばFPUが命令コードをCPUから受け取り、CPUのコプロセッサとして動作する場合、バイトコードアクセラレータは浮動小数点バイトコードに対して、FPU命令をCPUに供給し、FPUにて演算を行なう。CPUの汎用レジスタと同様にFPUの演算レジスタもスタックの対象にすると、バイトコードアクセラレータは、CPUの汎用レジスタとFPUの演算レジスタとのデータに対する整合性を考慮することが必要になり、スタックのデータ管理が複雑化する虞がある。
また、浮動小数点データの中には、FPUで取り扱えないデータが存在する。例えば、NaN(非数)を入力とする演算などである。特許文献2では、VFP(FPU)で取り扱えないデータの場合には、未定義の命令例外を発生し、未定義の命令ベクトルに設定されている未定義の命令ハンドラ(例外ハンドラ)を実行する。そして、命令ストリームを点検することにより、VFP(FPU)動作を引き起こした命令が実際にVFP命令であることを理解することとしている。未定義の命令ハンドラによる命令ストリームの点検はFPUのステータスレジスタの値をCPUに転送して行うようになっており、例外発生を引き起こした浮動小数点動作を正確に把握できない場合のあることも想定しなければならない。これにより、アクセラレータで取り扱われない浮動小数点動作の検出が正確な場合と不正確な場合の両方に対処できる例外ハンドラを準備することが必要になる。
本発明の一つの目的は、仮想マシン命令をネイティブ命令に変換してメインプロセッサに実行させることが可能なアクセラレータと共に、メインプロセッサからコプロセッサ命令を受取って動作するコプロセッサを有するデータ処理装置において仮想マシン命令の実行効率を向上させることにある。
更に詳しくは、第1に、CPUを有するメインプロセッサとFPU等のコプロセッサに対するオペランドスタックの管理を簡素化することができる情報処理装置を提供することを目的とする。
第2に、アクセラレータを用いる時にもFPU等のコプロセッサが取り扱えない演算動作に対して当該取り扱えない演算動作の検出を正確に行うことができる情報処理装置を提供することを目的とする。
第3に、アクセラレータを用いる時にもFPU等のコプロセッサが取り扱えない演算動作への例外ハンドラを修正せずに使用することができる情報処理装置を提供することを目的とする。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
〔1〕スタック管理の観点に立った本発明に係る情報処理装置は、メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサが実行可能なネイティブ命令と異なる命令セットに含まれる仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有する。前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するレジスタ間転送用のネイティブ命令に変換する。前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記レジスタ間転送用のネイティブ命令を実行する。上記により、コプロセッサの演算オペランドは、メインプロセッサがレジスタ間転送用のネイティブ命令を実行することにより、メインプロセッサの汎用レジスタのようなレジスタから、コプロセッサの演算レジスタのようなレジスタに転送される。要するに、アクセラレータはコプロセッサの演算レジスタのようなレジスタをテンポラリレジスタのように利用する。換言すれば、オペランドスタックの管理からコプロセッサのレジスタを除外してメインプロセッサのレジスタに一元化でき、アクセラレータによるオペランドのスタック管理を簡素化することができる。
本発明の具体的な形態として、前記レジスタ間転送用のネイティブ命令は、メインプロセッサのレジスタファイルからコプロセッサのレジスタファイルに前記データバスを介してデータを転送するデータ転送命令である。
アクセラレータは、メインプロセッサの汎用レジスタをオペランドスタックの対象とし、コプロセッサの演算レジスタをオペランドスタックの非対象とする。
本発明の具体的な形態として前記メインプロセッサに接続されるメモリを更に具備し、前記メインプロセッサは、前記メモリから前記仮想マシン命令及び前記ネイティブ命令を取り込むための命令フェッチ部と、前記ネイティブ命令をデコードするためのデコーダ部と、前記命令フェッチ部に取り込まれた命令が前記仮想マシン命令である場合に前記アクセラレータの出力を選択し前記命令フェッチ部に取り込まれた命令が前記ネイティブ命令である場合に前記命令フェッチ部の出力を選択する選択回路とを有する。
前記アクセラレータは、例えば前記メインプロセッサに含まれるパイプラインステージの段数と同じ段数を有する模擬パイプラインを有する。
前記仮想マシン命令は、例えばJavaバイトコードである。
〔2〕コプロセッサが取り扱えない演算動作等への例外ハンドラの観点に立った本発明に係る情報処理装置は、メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサのアーキテクチャに依存しない仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有する。前記アクセラレータは、コプロセッサに入力されるデータがコプロセッサが取り扱えないデータか否かをチェックし、コプロセッサが取り扱えないデータのときはコプロセッサの演算動作の実行、あるいは演算結果の格納を抑止する。メインプロセッサは前記抑止に応答して前記コプロセッサが取り扱えないデータに対する演算を行うソフトウェア処理に移行する。前記アクセラレータは、コプロセッサに入力されるデータに対して演算前にデータチェックを行ない、コプロセッサで例外検出を行なうより前にアクセラレータ側でコプロセッサが取り扱えない演算動作を正確に検出する。演算データの種類に関わらず、コプロセッサで例外検出しないことにより、アクセラレータはコプロセッサ演算処理の把握が不正確になることはないため、不正確な場合に対応する例外ハンドラを準備する必要はない。
本発明の具体的な形態として、前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するデータ転送用のネイティブ命令に変換してメインプロセッサに与える。前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記データ転送用のネイティブ命令を実行する。前述の通り、アクセラレータによるオペランドのスタック管理を簡素化することができる。
このとき、前記アクセラレータによるコプロセッサが取り扱えるデータか否かのチェックはメインプロセッサからコプロセッサに転送されるデータに対して行うのが望ましい。これにより、取り扱えない演算動作が実行される前にそれを正確に検出することを保証することができる。
前記アクセラレータによるコプロセッサが取り扱えるデータ否かのチェックはメモリからコプロセッサに転送されるデータに対して行なわれてもよい。
メインプロセッサがパイプライン形態で命令を実行する場合、データチェックタイミングの把握に模擬パイプライン部を採用してもよい。即ち、模擬パイプライン部は前記アクセラレータが保有し、メインプロセッサのパイプラインを模擬するために、メインプロセッサのパイプラインステージの遷移に応答してフラグ情報のシフト動作を行うレジスタ手段を有し、フラグ情報のシフト位置が参照可能にされる。
〔3〕上記二つの観点に立った発明を別の表現形態で表す。情報処理装置は、第1フォーマットの命令を第2フォーマットの命令に変換する命令変換回路と、第1フォーマット及び第2フォーマットの命令のフェッチを行ない、フェッチした第1フォーマットの命令を命令変換回路に与え、命令変換回路で変換された第2フォーマットの命令及びフェッチした第2フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うメインプロセッサと、メインプロセッサから与えられた第2フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うコプロセッサと、メインプロセッサとコプロセッサを接続するデータバスと、を備える。前記命令変換回路がメインプロセッサに与える第2フォーマットの命令に、コプロセッサを利用して演算を行う第2フォーマットの命令を含むとき、メインプロセッサからコプロセッサにデータバス経由でデータ転送を行う命令を含み、コプロセッサは前記データ転送の後に、前記演算を行う第2フォーマットの命令を実行する。上述と同様に、アクセラレータによるオペランドのスタック管理を簡素化することができる。
例えば、前記第2フォーマットの命令はメインプロセッサに依存するネイティブ命令であり、前記第1フォーマットの命令はメインプロセッサに依存しない仮想マシン命令である。
第1コプロセッサは、前記データバスのデータを入力し所定の数値と比較するデータチェック回路を有し、データチェック回路による比較結果が一致であるとき、メインプロセッサに第2コプロセッサの実行を抑止する抑止信号を出力する。前述と同様に、アクセラレータのような第1コプロセッサによるオペランドのスタック管理を簡素化することができる。
第1コプロセッサは、メインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、データチェック回路で比較するデータの入力タイミングの把握に模擬パイプライン部を利用して行う。
上記情報処理装置を利用する情報処理システムは、例えば、アンテナと、アンテナとの間で信号を符号化復号処理する第1情報処理装置と、前記第1情報処理装置に結合された第1主記憶と、上述の発明に係る情報処理装置と共に前記第1情報処理装置との接続手段を有する第2情報処理装置とを備える。第1情報処理装置は第1主記憶に前記アンテナを介して受信したネイティブ命令又は仮想マシン命令で記述されたプログラムを格納する。第2情報処理装置は前記第1主記憶に格納された前記プログラムをリードして実行する。
情報処理装置の高速化を実現することができる。
図1には本発明の一例に係るマイクロプロセッサの要部が示される。同図に示されるマイクロプロセッサ(MPU)1は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタなどを形成する半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板に形成される。
マイクロプロセッサ(MPU)1は、代表的に示されたキャッシュ(CACHE)2、メモリ(MEM)3、メインプロセッサとしての中央処理装置(CPU)4、コプロセッサとしての浮動小数点演算ユニット(FPU)5、及びバイトコードアクセラレータ(BCA)6を有する。
中央処理装置(CPU)4はキャッシュ(CACHE)2と命令バスI_BUS及びデータバスD_BUS等を介して接続される。中央処理装置(CPU)4は、メモリ(MEM)3等から命令をフェッチする命令フェッチ部(FETc)10、セレクタ11、命令のデコードを行うデコード部(DECc)12、命令デコード結果に基づいて命令の演算と実行を行う命令実行部(EXEc)13、制御信号を生成する制御部(CTLc)14、レジスタファイル(GREG_FILEc)15から構成される。
浮動小数点演算ユニット(FPU)5は、中央処理装置(CPU)4から与えられる命令(コプロセッサ命令)を解読するデコード部(DECf)20、命令デコード結果に基づいて浮動小数点命令の演算と実行を行なう命令実行部(EXEf)21、制御信号を生成する制御部(CTLf)22、及びレジスタファイル(FREG_FILEf)23から構成される。また、図示されていないが、浮動小数点ユニット(FPU)5は、データバスD_BUSと接続され、メモリ(MEM)3とデータのやり取りを行うことも可能である。特に、ネイティブコードであるFPU命令が入力された場合は、浮動小数点ユニット(FPU)5が直接メモリ(MEM)3にアクセスする。
バイトコードアクセラレータ(BCA)6は、バイトコードをネイティブコードに変換する変換テーブル部(TRS_TBL)30、中央処理装置(CPU)4と浮動小数点演算ユニット(FPU)5間のレジスタ転送のデータをスヌープしながらチェックするデータチェック部(DATA_CHK)31、中央処理装置(CPU)4のパイプライン動作を模擬する模擬パイプライン部(PL_SIM)32、及びそれらを全体的に制御する制御部(CTL)33から構成される。バイトコードとは中央処理装置(CPU)4のアーキテクチャに依存しない仮想マシン命令を意味し、例えばJavaバイトコードを意味する。ネイティブコードとは中央処理装置(CPU)4のアーキテクチャに依存するネイティブ命令を意味する。ここでは、仮想マシン命令もネイティブ命令もメモリ(MEM)3に格納されている。
特に制限されないが、中央処理装置(CPU)4のレジスタファイル(REG_FILEc)15には16本の汎用レジスタが含まれ、浮動小数点演算ユニット(FPU)5のレジスタファイル(REG_FILEf)23には16本の浮動小数点レジスタ(汎用レジスタ)が含まれ、CPU4用のレジスタはR0〜R15、FPU5用のレジスタはFR0〜FR15で表される。
図2には命令フェッチ部(FETc)10からデコード部(DECc,DECf)12,20への命令伝達経路が示される。命令フェッチ部(FETc)10にフェッチされたネイティブコードは経路P1を通る。命令フェッチ部(FETc)10にフェッチされた命令がバイトコードのときバイトコードは経路P2を通ってバイトコードアクセラレータ(BCA)6に供給され、ここで変換されたネイティブコードは経路P3に出力される。経路P1,P3はセレクタ11で選択され、デコード部(DECc,DECf)12,20に接続される。セレクタ11はバイトコードアクセラレータ(BCA)6の起動に応答して経路P3を選択する。デコード部(DECc)12は全ての命令をデコードして制御信号を生成する。デコード部(DECf)20は浮動小数点命令を認識してデコードする。アドレス空間に対するアドレシングはCPU4が行う。従って、メモリアクセスを伴う浮動小数点演算命令に対するアドレシングは中央処理装置(CPU)4が行う。中央処理装置(CPU)4がバイトコードの処理に移行するときは、バイトコードアクセラレータ(BCA)6を起動するための所定の分岐命令を実行して、中央処理装置(CPU)4のプログラムカウンタPCの値をバイトコードエリアの所定バイトコードアドレスに変化させる。これにより、中央処理装置(CPU)4のプログラムカウンタ(PC)はバイトコードをフェッチするためのJavaPCとして機能する。バイトコードの処理から復帰するには所定の分岐命令を実行すればよい。
ここで、バイトコードアクセラレータ(BCA)6の主な機能を説明する。第1は、前述の命令変換機能である。BTCODEはバイトコード、INSTはネイティブコードを意味する。特に、浮動小数点演算を伴う浮動小数点バイトコードに対しては、浮動小数点演算ユニット5が実行する演算用のネイティブコード(浮動小数点演算ネイティブコード)と中央処理装置4が実行するレジスタ間転送用のネイティブ命令(レジスタ間転送ネイティブコード)に変換して中央処理装置4に与える。変換された浮動小数点演算ネイティブコードはアドレシングモードとしてメモリアクセスを伴わない。アドレシングモードはレジスタ指定、特に制限されないが、浮動小数点レジスタに対するレジスタ直接指定とされる。浮動小数点演算のオペランドに関しては、中央処理装置4が前記変換されたレジスタ間転送ネイティブコードを実行して、データを中央処理装置4の汎用レジスタ15から浮動小数点演算ユニット5の浮動小数点レジスタ23にデータバスDATA_XFER経由で転送される。転送されたデータに対する演算結果は浮動小数点演算ユニット5のレジスタファイル(REG_FILEf)23から中央処理装置4のレジスタファイル(REG_FILEc)15に転送される。
第2はデータチェック機能である。データチェック機能とは、浮動小数点演算ユニットが取り扱えないデータ(以下、「演算非サポートデータ」と言う)か否かをチェックする機能である。浮動小数点演算ユニットが取り扱えないデータとは、非正規化数を持たないハードウェアへの入力データが非正規化数のときや、入力データが非数(NaN)の時である。夫々の詳細については後述する。
データバスDATA_XFERを介して転送されるデータが浮動小数点演算ユニット5による演算非サポートデータ(演算サポート外データ)であるかを判別する。演算非サポートデータのときは浮動小数点演算ユニット5による演算命令の実行を抑止するために、中央処理装置4に対し信号CNCL_REQでキャンセル要求を出す。これを受けて中央処理装置4はキャンセル信号CNCLを浮動小数点演算ユニット5とバイトコードアクセラレータ6に出力する。これによって浮動小数点演算ユニット5による演算非サポートデータに対する演算が抑止される。キャンセルが指示されたバイトコードアクセラレータ6は、キャンセルされた演算非サポートデータに対する演算をソフトウェアで実現するために、中央処理装置4の命令実行シーケンスを移行させる処理を行って、動作停止(DEACT)する。そのようなソフトウェア処理は、浮動小数点演算ユニット5が対応していない演算処理を含むバイトコードの処理を中央処理装置4のソフトウェアで実現するためのネイティブ命令列の発生と管理を行う所謂ソフトVMプログラムとされる。ソフトVMプログラムはメモリ(MEM)3に格納されている。ソフトVMプログラムにはバイトコードアクセラレータ6を起動するためのフックアップ処理ルーチンを有する。CPU4がフックアップ処理ルーチンを実行することによりバイトコードアクセラレータ6が動作可能(ACTIVE)にされる。前記フックアップ処理ルーチンには前述のPCの機能をJavaPCとして機能させるための分岐命令を含んでいる。
上述の機能を詳細する。先ず、マイクロプロセッサ(MPU)1による整数バイトコードの実行動作について説明する。整数バイトコードはキャッシュ2に格納され、命令バスI_BUSを用いて、中央処理装置4のフェッチ部10にバイトコードがフェッチされる。中央処理装置4はバイトコードBTCODEをバイトコードアクセラレータ6に供給する。バイトコードアクセラレータ6では、変換テーブル部(TRS_TBL)30にて、ネイティブコードINSTに変換し、中央処理装置4に出力する。中央処理装置4はデコード部12において、命令のデコードを行なった後、命令実行部13で命令を実行し、結果をレジスタファイル15あるいはデータバスD_BUSに出力する。レジスタファイル15の一部はJavaのオペランドスタックの上位がキャッシュされている。バイトコードアクセラレータ6の終了時、例えばハードウェアで実行しない非サポートバイトコードやJavaランタイム例外検出時では、レジスタファイル15上のオペランドスタックはメモリ3に退避された後、ソフトウェアの仮想マシン、即ちソフトVMプログラムに分岐する。
次に、マイクロプロセッサ1による浮動小数点バイトコードの実行動作を説明する。浮動小数点バイトコードは整数バイトコードと同様に、キャッシュ2に格納され、命令バスI_BUSを用いて、中央処理装置4のフェッチ部10にフェッチされる。中央処理装置4はバイトコードBTCODEをバイトコードアクセラレータ6に供給する。バイトコードアクセラレータ6では、変換テーブル部30にて、中央処理装置4と浮動小数点演算ユニット5間の転送命令とFPU演算命令を含むネイティブコードINSTに変換し、中央処理装置4に出力する。
例えば図3にはfadd(浮動小数点加算命令)のバイトコードをネイティブコードに変換した例を示す。最初の2命令が入力データを中央処理装置4から浮動小数点演算ユニット5へ転送する命令FMOV、次の1命令が浮動小数点加算命令FADD、最後の1命令が結果を浮動小数点演算ユニット5から中央処理装置4へ転送する命令FMOVである。
中央処理装置4ではデコード部12にてネイティブコードをデコードし、命令に必要な制御信号を生成する。同様に浮動小数点演算ユニット5でもデコード部にて浮動小数点命令をデコードし、命令に必要な制御信号を生成する。浮動小数点バイトコードの変換されたネイティブコードは、次のように実行される。まず、中央処理装置4のレジスタファイル15から入力データを読出し、読み出したデータを中央処理装置4と浮動小数点演算ユニット5間のデータ転送バスDATA_XFERを用いて転送し、浮動小数点演算ユニット5のレジスタファイル23に書き込む。次に、浮動小数点演算ユニット5の実行部21で浮動小数点演算を行ない、演算結果をレジスタファイル23に書き込む。最後に、浮動小数点演算ユニット5のレジスタファイル23を読出し、読み出したデータをデータ転送バスDATA_XFERを用いて中央処理装置4に転送した後、中央処理装置4のレジスタファイル15に書き込む。
オペランドスタックのキャッシュは中央処理装置4のレジスタファイル15のみにあり、浮動小数点演算ユニット5のレジスタは一時的な使用、即ちテンポラリレジスタとして使用される。これはレジスタ上のスタックの管理を容易にするためである。スタック管理の論理を単純にするだけでなく、浮動小数点演算ユニット5のないマイクロプロセッサにおいては、バイトコードのハードウェア実行をサポートするかどうかを設定する制御レジスタで浮動小数点バイトコードを非サポートとするだけでよく、スタック管理の論理変更が不要であるという利点も持つ。従って、浮動小数点演算ユニット5にオペランドスタックのデータを転送するために、中央処理装置4と浮動小数点演算ユニット5間のレジスタで転送が必要となる。
中央処理装置4から浮動小数点演算ユニット5へデータ転送バスDATA_XFERを用いて入力データを転送する際に、バイトコードアクセラレータ6はデータ転送バスをスヌープして入力データチェックを行う。その必要性について説明する。
まず、Javaは言語規定上、無効演算(Invalid)、ゼロ除算、オーバフロー、アンダフロー、不正確等の例外条件の通知(signal)やNaN値の通知も行なわず、それら事象の発生に対して演算結果に単一のデフォルト値を与えることが定められている。例えば、ゼロ除算の結果は符号付無限大を出力する。演算結果で生成されるNaNはqNaNデフォルト値である。例えば、単精度では7FBFFFFF、倍精度では7FF7FFFF FFFFFFFFである。ここで、NaNに関しては、Javaの使用でプログラマがNaN値の違いを見分けるメソッドが用意されているため、入力がNaNとなる浮動小数点演算はソフト仮想マシン上で処理することが望ましい。そこで、上述の例外条件となりうるデータを浮動小数点演算ユニット5を用いて演算する場合には、例外ディスエーブル(例外受付禁止)で浮動小数点演算を行なうこととする。そして、例外条件となりうるデータが入力された場合は、ソフト仮想マシンに処理を受け渡すとよい。このとき、そのような事象の発生に対して例外処理を発生することはない。
ところで、非正規化数データを処理する場合には、非正規化数を処理するためのハードウェアが必要となる。非正規化数ハードウェアを持たない浮動小数点演算ユニット5の場合、演算が行えないために常にFPU例外が発生し、例外ハンドラで再実行の際にフラグを設定し、復帰後にフラグ値に従って、ソフトウェアのライブラリ演算関数に分岐する必要がある。ソフトウェアのライブラリ演算関数に分岐するためには、バイトコードアクセラレータを終了し、ソフト仮想マシンに処理を移す必要がある。これらの処理を高速に行うために、FPU例外発生の後に、例外ハンドラでフラグを設定させる方法ではなく、FPUで例外が発生する前に、バイトコードアクセラレータで検出する手段をとる。すなわち、バイトコードアクセラレータが、入力データを演算開始前にチェックしておき、非正規化数の場合にはその浮動小数点バイトコードを非サポートのバイトコードとしてソフト仮想マシン上で処理すればよい。
以上のことから、中央処理装置4から浮動小数点演算ユニット5へデータ転送バスDATA_XFERを用いて入力データを転送する際に、バイトコードアクセラレータ6はデータ転送バスをスヌープして入力データチェックを行なうことで、浮動小数点演算ユニット5において、FPU例外による例外ハンドラの分岐が起こらないために、高速にソフト仮想マシンへの移行ができることと、既存の例外ハンドラを修正不要という利点がある。
図4及び図5にはデータチェック部(DATA_CHK)31でチェックすべきデータを示す。図4は非数(NaN)および非正規化数(DENORM)の単精度(Single)データとされ、図5は倍精度(Double)データとされる。非正規化数が処理できない浮動小数点演算ユニット5を仮定している。データチェック部31は、データ転送バスDATA_XFERが32ビット幅のときは、32ビット比較器、データ転送バスが64ビット幅のときは、64ビット比較器で入力データがNaNかDENORMかを調べればよい。
図6はFPU例外イネーブルでの浮動小数点命令FADDのオペランドに対する処理をマトリックスで示し、図7はFPU例外ディスエーブルでの浮動小数点命令FADDのオペランドに対する処理をマトリックスで示す。バイトコードアクセラレータを使用するときは浮動小数点演算を常にFPU例外ディスエーブルとして処理する。+INFは+無限大、−INFは−無限大を意味する。(+INF)+(−INF)のとき、図6のFPU例外イネーブルではFPU無効演算例外(Invalid)が発生し、図7のバイトコードアクセラレータ6を用いた浮動小数点演算では演算結果がqNaNとなる。入力がNaNのときは、バイトコードアクセラレータ6では該命令FADDを含むバイトコードは非サポートバイトコードとして扱われる。非正規化数(DENORM)に関しては、命令毎にハードウェア処理の可否が異なることもある。即ち、非正規化数データの演算を実現するための回路は、演算の種類により異なるため、すべての演算について非正規化数データの演算を実現する回路を設けることは、回路面積の増大を招き現実的でないが、一部の演算(例えば、加算)について非正規化数データの演算を実現する回路を設けることにより演算の高速化を図ることも効果的である。ここでは、非正規化数の加算は、ハードウェア処理が可能であると仮定している。
転送バスDATA_XFER上のデータがNaNである場合の動作について説明する。バイトコードアクセラレータ6のデータチェック部31にNaNが入力され、NaN用比較器と一致することからキャンセル要求信号(CNCL_REQ)が中央処理装置4に対して出力される。該キャンセル要求信号は、他の割込みや例外情報と中央処理装置4内の制御部14で優先度チェックが行なわれる。中央処理装置4で受付けられた際は、キャンセル受付信号(CNCL_ACK)と共に、中央処理装置4はキャンセル信号(CNCL)をバイトコードアクセラレータ6と浮動小数点演算ユニット5に出力し、データ転送命令以降の浮動小数点演算命令(FPU命令)の実行を抑止する。そして、バイトコードアクセラレータ6はキャンセル要求を行なったバイトコードを非サポートバイトコードとして扱うために、バイトコードアクセラレータ6から非サポート用の終了シーケンス命令が中央処理装置4に出力され、中央処理装置4はソフトVMプログラムによるソフト仮想マシンに分岐し、バイトコードアクセラレータ6は処理を終了する。
図3を参照しながらfaddバイトコードの入力データチェックとキャンセルタイミングを説明する。IDはデコードステージ、E1からE4は実行ステージである。ここでRs0とRs1はそれぞれレジスタ上のオペランドスタックのトップとその次を指す。FR0、FR2は浮動小数点演算ユニット5のレジスタである。最初の命令であるFMOV Rs1,FR2とFMOV Rs0,FR0にE2ステージにてデータ転送バスDATA_XFERのデータDATA1、DATA0がレジスタFR2、FR0に入力される。バイトコードアクセラレータ6内のデータチェック部(DATA_CHK)31は、E2ステージにてデータ転送バス(DATA_XFER)にてそのデータが非数(NaN)か非正規化数(DENORM)に一致する場合には、第2命令のE3ステージにて中央処理装置4に対してキャンセル要求信号(CNCL_REQ)がアサートされる。データチェック部31でチェックすべきデータはFPU命令の種類毎に異なっていてもよい。中央処理装置4の制御部14にて例外の優先度チェックを行ない、該キャンセル信号を受け付ける場合には、キャンセル受付け信号(CNCL_ACK)とキャンセル信号(CNCL)を第2命令のE4ステージにてアサートする。そして、第2命令以下、続行の命令の実行がキャンセルされる。FADD命令もキャンセルされるため、FPU例外は発生しない。第3命令のE4ステージでFPU例外の受付けが行なわれるためである。
キャンセル信号を受取った中央処理装置4とバイトコードアクセレレータ6の処理について説明する。キャンセル受付け信号(CNCL_ACK)とキャンセル信号(CNCL)をバイトコードアクセラレータ6が受け取ると、該当バイトコードの非サポートシーケンスの命令列を開始する。キャンセル受付け信号(CNCL_ACK)を受け取った際、バイトコードアクセラレータ6は別のバイトコードの変換を行っていることもあり得るが、図3の第2命令のE4ステージのバイトコードの場所すなわちJavaPCの値を使用することにより、キャンセル要求を行なったバイトコードを正確に知ることができる。図3ではfaddバイトコード実行中にキャンセル受付け信号を受け取った例である。非サポートシーケンスの命令列を中央処理装置4が実行すると、中央処理装置4はソフト仮想マシンに分岐し、バイトコードアクセラレータ6は処理を終了する。
任意の命令において、中央処理装置4の任意のステージ伝播情報を知ることを可能にするために、バイトコードアクセラレータ6は模擬パイプライン部(PL_SIM)32を有する。先に述べた第2命令のE2ステージでデータ転送バスDATA_XFERのデータをスヌープすることや、第2命令のE4ステージのバイトコードを知ることは、模擬パイプライン部32を用いることにより実現している。ここで非サポートシーケンスとはソフト処理を行なうためにレジスタ上のオペランドスタックのメモリ退避とソフト仮想マシンへの分岐処理のネイティブ命令列を指す。
図8にバイトコードアクセラレータ6の模擬パイプライン(PL_SIM)32を示す。BTはバイトコードアクセラレータ6の動作ステージ、IDはデコードステージ、E1以降は実行ステージである。E3ステージ以降の構成は前段と同じであるから図示を省略してある。INFO[N:0]で示されるN+1ビットの情報は、CPUで実行されるネイティブ命令に対応付けられたフラグ情報である。模擬パイプライン部は、前記フラグ情報をCPU4のパイプラインステージの遷移に応答して後段にシフトするシフトレジスタ構成とされ、INF[N:0]に対応してN+1個のシフトレジスタを有する。シフトレジスタの各記憶段はフリップフロップ40によって構成される。フリップフロップ40の前段に配置されたセレクタ41はパイプラインステージが遷移するまで帰還ループを選択して状態保持を行う。パイプラインステージの遷移、リセット時には前段からの入力を選択する。命令発行はIDステージで行ない、E1以降はキャッシュのバスレディ信号BUSRDYに同期してステージが遷移する。IDステージからE1ステージへの遷移は、中央処理装置4の命令発行信号E1GOとバスレディ信号BUSRDYを用いて制御する。BTステージの遷移信号はIDステージと同期して動作させるために、命令受付信号IDGETとバスレディ信号BUSRDYを使用する。各ステージでバイトコードアクセラレータBCAを動作させるのに必要なN+1ビットの情報INFO[N:0]をステージの遷移に同期シフトして持ちまわる。INFO_ID[N:0]、INFO_E1[N:0]、INFO_E2[N:0]等が内部で参照されて利用される。各ステージの情報は、IDCNCLやE1CNCL等の各ステージのキャンセル信号CNCLの否定と論理積が採られる。これにより、中央処理装置4からキャンセル信号がアサートされると、各ラッチ段の入力が論理値“0”にされてクリアされる。ステート間で持ちまわる情報の例としては、中央処理装置4から浮動小数点演算ユニット5へのデータ転送情報やオペランドスタックのレジスタ管理情報などがある。E3、E4ステージに関しては、E2ステージと同様に構成できる。
以上のように、浮動小数点演算ユニット5を使用するにあたり、中央処理装置4から浮動小数点演算ユニット5へのデータ転送バスDATA_XFERのデータをバイトコードアクセラレータ6がスヌープして、データチェックを行ない、バイトコードアクセラレータ6はライブラリ関数をコールすべきデータを正確に検出することができる。この後に、該浮動小数点バイトコードを非サポートとして、ソフト仮想マシンに分岐する。FPU例外が起こり得るデータに関して、例えば非正規化数に対する演算ハードウェアを持たない浮動小数点演算ユニット5で非正規化数が入力されたときは、FPU例外が発生する前に、それに対応するバイトコードを非サポートバイトコードにしてから、ソフト仮想マシン(ソフトVMプログラム)に分岐する。そして、ソフト仮想マシンにて該浮動小数点バイトコードのインタプリタ処理を行なう際、浮動小数点ライブラリをコールし、浮動小数点演算をソフトエミュレートする。
バイトコードアクセラレータ6はバイトコードのハードウェア実行を行い、それ以外のソフトウェアによる実装部分と協調して仮想マシンを構成する。このソフトウェアによる実装部分がソフト仮想マシン(SOFT_VM)である。図9には浮動小数点バイトコードの実行時におけるバイトコードアクセラレータ6とソフト仮想マシンとの動作の分担及び相互の遷移状態が示される。
ソフト仮想マシン(SOFT_VM)50は、ソフトVM実行の初期設定を行う初期化部分(INITIALIZE)51、バイトコードアクセラレータ6を起動する際の起動命令(J_JP命令)が置かれたフックアップ部(HOOKUP)52、ソフトウェアで解釈実行を行うために各バイトコードの処理開始アドレスを示すディスパッチテーブル(DISPATCH TABLE)53、ディスパッチテーブルに示されたアドレスにネイティブ命令が配置され、ソフトウェアで解釈実行を行うインタプリタ部(INTERPRETER)54から構成される。中央処理装置4、浮動小数点演算ユニット5、バイトコードアクセラレータ6は以上の説明通りである。
浮動小数点バイトコードの処理において入力データが例えば非数(NaN)でライブラリ関数をコールする場合の動作を説明する。
中央処理装置4の汎用レジスタ(GREG_FILE)15のオペランドスタックから浮動小数点演算ユニット5の汎用レジスタ(FREG_FILE)23にデータバスを介してFPU入力データ(DATA)が出力される。バイトコードアクセラレータ6はデータバス上のデータ(DATA)をスヌープ(SNOOP)し、バイトコードアクセラレータ6のデータチェック部(DATA_CHK)31に入力する。データチェック部31で非数(NaN)検出すると、該浮動小数点演算命令を含むバイトコードを非サポートバイトコード(UNSUPPORT BCODE)と認識する。バイトコードアクセラレータ6、中央処理装置4、浮動小数点演算ユニット5間で信号のやりとりがあるが、図1と同様なのでここでは省略する。バイトコードアクセラレータ6は非サポートバイトコード時のネイティブ命令のシーケンスを中央処理装置4に出力後、処理を終了する。そして、図では省略しているが、プログラムカウンタが該バイトコードのソフト仮想マシンのディスパッチテーブルアドレスに設定され、バイトコードアクセラレータは処理を終了する(DEACT)。
非サポートバイトコード時は、ディスパッチテーブル部(DISPATCH TABLE)53の該当するバイトコードよりインタプリタ54の処理アドレス(ADDRESS)が与えられ、インタプリタ部(INTERPRETER)54上で解釈実行を行う。ディスパッチテーブル部53は8ビットのバイトコード数分の256個の配列で構成される。インタプリタ部でデータチェックを行い、入力データが非数であることから浮動小数点のライブラリ関数(Floating Point Library)がコールされ、浮動小数点バイトコードのソフトウェアエミュレーションを行なう。
フックアップ部52はバイトコードアクセラレータ6を起動する際にソフトウェアで実行すべき起動命令が配置されたソフトウェアルーチンである。非サポートバイトコードをインタプリタ部54を介して実行した後、フックアップ部52に分岐後、再びバイトコードアクセラレータ6が起動され、次のバイトコードが処理される。ここで、フックアップ部52は1箇所ではなく、複数箇所存在してもよい。例えば、非サポートバイトコードの処理はソフトVMのインタプリタ部分、インタプリタの各バイトコード処理部分の末尾に起動命令(J−JP命令)を置いてもよい。
また、携帯端末等に使用される場合は、低消費電力化が必要である。その場合、コプロセッサ(例えばFPU)を搭載するチップにおいて、中央処理装置(CPU)のステータスレジスタがFPU非搭載モードとし、コプロセッサを停止させ低消費電力を図ることが考えられる。このようにFPU非搭載モードとした場合に、バイトコードアクセラレータを用いて浮動小数点バイトコードを実行する場合の処理を説明する。バイトコードアクセラレータは浮動小数点命令を含む浮動小数点バイトコードをCPUに供給する。このとき、CPUはコプロセッサ(例えばFPU)不当例外を発生し、バイトコードアクセラレータに通知する。CPUが例外ハンドラに分岐する前に、バイトコードアクセラレータはプログラムカウンタを起動命令のアドレスに設定し、終了する。例外ハンドラ内ではCPUが
ステータスレジスタをコプロセッサ搭載モードに設定し、通常モードに復帰する。このとき、復帰先のアドレスが起動命令なので、該バイトコードからバイトコードアクセラレータは復帰できる。バイトコードのアドレス(JavaPC)は起動命令の引数のレジスタ値として与えればよい。
ステータスレジスタをコプロセッサ搭載モードに設定し、通常モードに復帰する。このとき、復帰先のアドレスが起動命令なので、該バイトコードからバイトコードアクセラレータは復帰できる。バイトコードのアドレス(JavaPC)は起動命令の引数のレジスタ値として与えればよい。
上記マイクロプロセッサ1によれば以下の作用効果を得ることができる。バイトコードアクセラレータ6は、メインプロセッサとしての中央処理装置(CPU)4やコプロセッサとしての浮動小数点演算ユニット(FPU)5と連携して、浮動小数点バイトコードを実行することができる。このとき、コプロセッサ5の例外事象、例えば、ライブラリ関数の呼出しが必要な浮動小数点データ(NaN、非正規化数など)において、高速かつ正確に該当箇所、ここでは浮動小数点バイトコードを検出し、ソフト仮想マシンに分岐させることができる。非正規化数を非正規化数処理ハードウェアを持たない浮動小数点演算ユニット5で実行すると、FPU例外を発生し、例外ハンドラに通常分岐するが、上記構成では、FPU例外が発生しないため、例外ハンドラの変更は不要である。このことは、既存のソフトウェア資産の例外ハンドラを使用可能であることを意味し、バイトコードアクセラレータ6追加によっても既存のソフト資産の例外ハンドラを継承することができる。
図10には前記マイクロプロセッサの好適な応用例としての携帯情報システムの一例を示す。携帯電話システムは、大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波をアンテナで送受信する高周波部(RF)60、ベースバンドのモデム及びコーデックを行うベースバンドプロセッサ(BBP)61、メモリ(MRYa)62を有する。アプリケーション部分は、前記バイトコードアクセラレータ6、中央処理装置4及び浮動小数点演算ユニット5を内蔵するマイクロプロセッサ1を中心に構成される。マイクロプロセッサ1はインターフェース(I/F)64を介してバスBUSでベースバンドプロセッサ6が接続され、周辺インターフェース(PPH)65を介してカメラ(CMR)66、メモリカード(CARD)67、音源部(SOD)68、及びキーボード(KEY)69が接続され、外部バスを介して液晶ディスプレイ(LCD)70、メモリ(MRYb)71が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
本システム構成例では、例えば、次のようにメモリが使用される。Javaアプリケーションは、外部サーバーより高周波部FRを介して配給され、ベースバンドプロセッサ61を使用し、メモリ62に格納される。また、メモリ62に格納されたJavaアプリケーションは、メモリ71に転送され、マイクロプロセッサ1で実行される。ソフト仮想マシン50はメモリ62又は71のどちらに配置してもよい。ソフト仮想マシン50のインタプリタ部54はアクセス頻度が高いため、1チップの半導体集積回路化プロセッサ(MPU)1の内蔵メモリ上に配置されることが望ましい。このシステムにより、バイトコードの処理が高速に行えるので、携帯情報システムの付加価値を高めることができる。
図11には前記マイクロプロセッサの好適な応用例として車載情報システム例えばカーナビゲーションの構成が例示される。前記中央処理装置4、浮動小数点演算ユニット5及びバイトコードアクセラレータ6を備えたマイクロプロセッサ(MPU)1には、3次元グラフィックアクセラレータ(3DG)80、2次元グラフィックアクセラレータ(2DG)81、全地球測位システム(GPS)82、周辺インターフェース(PPH)83が集積される。外部バスEXBを介して液晶ディスプレイ(LCD)84、メモリ(MRYc)85が接続される。
本システム構成例では、Javaアプリケーション及びソフト仮想マシン50はメモリ(MRYc)85に格納される。ソフト仮想マシン50のインタプリタ部54はアクセス頻度が高いため半導体集積回路化されたマイクロプロセッサのオンチップメモリ上に配置されることが望ましい。この発明により、バイトコードの処理が高速に行えるため、車載情報システムの付加価値を高めることができる。
図12にはマイクロプロセッサの別の例が示される。同図に示される情報処理装置は、バイトコードアクセラレータ6をマイクロプロセッサ(MPU)1Aとは別チップで構成した点が図1と相違される。マルチチップで構成されることにより以下の構成が相違されることになる。第1は、バイトコードアクセラレータ6を用いるバイトコードの処理において浮動小数点演算データの転送は中央処理装置4がメモリ(MEMd)88から行う。特に制限されないが、浮動小数点演算ユニット5のレジスタファイル(REG_FILEf)23はテンポラリレジスタとして利用される。第2に、データチェック回路(DATA_CHK)31が浮動小数点演算ユニット5の非サポートデータを検出したとき、制御部(CTL)33は中央処理装置4に割込み信号INT_REQで割り込みを要求してソフトVMプログラム50による処理への移行を要求する。バイトコードアクセラレータ6は割込みアクノレッジ信号INT_ACKによってその割込み要求の受付を確認した後に動作停止する。マルチチップ構成に対応すれば、中央処理装置4と浮動小数点演算ユニット5を持つ既存のMPUにバイトコードアクセラレータ6を外付けすることによって図1のマイクロププロセッサ1と同様にバイトコードアクセラレータ6の処理において浮動小数点演算ユニット5で例外が発生する事態を抑止することができる。
図13には、本発明の別の実施例が示される。これまでの説明では浮動小数点ライブラリをソフトウェア仮想マシンから呼び出す例であったが、ここでは例外ハンドラから浮動小数点ライブラリを呼んでいる。倍精度浮動小数点乗算に非正規化数ハードウェアがないと仮定する。このとき、dmulバイトコードで入力が非正規化数のときにFPU例外が発生した例である。FPU例外が発生すると、例外ハンドラが起動される。そして、例外ハンドラの中で浮動小数点演算ライブラリがコールされ、適切な処理が実行され、復帰する。
CPUのハードウェアでは、汎用レジスタのうちの一つのRjp、例外保存用プログラムカウンタとしてのSPCとサブルーチン保存用プログラムカウンタとしてのPRレジスタを用いて実現する。まず、FPU例外が発生したときには、バイトコード列への戻りアドレスとして、SPCに起動命令のアドレスを格納し、RjpにJavaPCを格納する。次に、浮動小数点演算ライブラリがコールされるときは、例外ハンドラへの戻りアドレスとしてPRにPC1が格納される。演算ライブラリからの復帰時はPRの値をPCに格納することにより、適切に例外ハンドラに復帰する。例外ハンドラからの復帰時はSPCの値をPCに格納することにより起動命令のアドレスから復帰し、そのときのJavaPCとしてRjpを参照することにより正しく復帰できる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、FPUに代表されるコプロセッサはそれに限定されない。例えばディジタル信号処理プロセッサ、或いは暗号演算プロセッサなどであってもよい。また、組み込み機器向けのJava言語仕様に好適な例を説明したが、本発明はその他のJava言語仕様に対応することは妨げられない。更に、仮想マシン命令はJava言語による生成コードに限定されず、プロセッサのアーキテクチャに依存しないコードを生成するためのその他の言語仕様に依存する命令であってもよい。
以上説明したマイクロプロセッサによって得られる効果を簡単に説明すれば下記の通りである。
すなわち、FPUなどのコプロセッサのレジスタをテンポラリレジスタに見立てて利用することにより、CPUを有するメインプロセッサとFPU等のコプロセッサに対するオペランドスタックの管理を簡素化することができる。
演算非サポートデータを直接検出するから、FPU等のコプロセッサが取り扱えない演算動作に対して、取り扱えない演算動作の検出を正確に行うことができる。
演算非サポートデータを直接検出してその演算を抑止するから、FPU等のコプロセッサが取り扱えない演算動作に対するソフトウェア処理への移行にも既存の例外ハンドラを修正せずに使用することができる。
上記より、仮想マシン命令をネイティブ命令に変換してメインプロセッサに実行させることが可能なアクセラレータと共に、メインプロセッサからコプロセッサ命令を受取って動作するコプロセッサを有するデータ処理装置において仮想マシン命令の実行効率を向上させることができる。
1 マイクロプロセッサ
3 メモリ(MEM)
2 キャッシュ(CACHE)
4 中央処理装置(CPU)
10 命令フェッチ部(FETc)
12、20 デコード部(DECc、DECf)
13、21 実行部(EXEc、EXEf)
14、22、33 制御部(CTLc、CTLf、CTL)
15 CPUレジスタファイル(GREG_FILE)
23 FPUレジスタファイル(FREG_FILE)
6 バイトコードアクセラレータ(BCA)
30 変換テーブル部(TRS_TBL)
31 データチェック部(DATA_CHK)
32 模擬パイプライン部(PL_SIM)
50 ソフト仮想マシン(SOFT_VM)
51 初期化ルーチン部(INITIALIZE)
52 起動部(HOOKUP)
53 ディスパッチテーブル部(DISPACTH TABLE)
54 インタプリタ部(INTERPRETER)
ACTIVE 起動
DEACT 停止
UNSUPPORT BCODE 非サポートバイトコード検出
IDGET 命令受理信号
E1GO 命令発行信号
BTCNCL、IDCNCL、E1CNCL、E2CNCL キャンセル信号
EXP_BUS 外部バス
PC プログラムカウンタ
SPC 例外保存用プログラムカウンタ
PR サブルーチン保存用プログラムカウンタ
Rjp 汎用レジスタの一つ
3 メモリ(MEM)
2 キャッシュ(CACHE)
4 中央処理装置(CPU)
10 命令フェッチ部(FETc)
12、20 デコード部(DECc、DECf)
13、21 実行部(EXEc、EXEf)
14、22、33 制御部(CTLc、CTLf、CTL)
15 CPUレジスタファイル(GREG_FILE)
23 FPUレジスタファイル(FREG_FILE)
6 バイトコードアクセラレータ(BCA)
30 変換テーブル部(TRS_TBL)
31 データチェック部(DATA_CHK)
32 模擬パイプライン部(PL_SIM)
50 ソフト仮想マシン(SOFT_VM)
51 初期化ルーチン部(INITIALIZE)
52 起動部(HOOKUP)
53 ディスパッチテーブル部(DISPACTH TABLE)
54 インタプリタ部(INTERPRETER)
ACTIVE 起動
DEACT 停止
UNSUPPORT BCODE 非サポートバイトコード検出
IDGET 命令受理信号
E1GO 命令発行信号
BTCNCL、IDCNCL、E1CNCL、E2CNCL キャンセル信号
EXP_BUS 外部バス
PC プログラムカウンタ
SPC 例外保存用プログラムカウンタ
PR サブルーチン保存用プログラムカウンタ
Rjp 汎用レジスタの一つ
Claims (13)
- メインプロセッサと、メインプロセッサにデータバスで接続されたコプロセッサと、前記メインプロセッサのアーキテクチャに依存しない仮想マシン命令をメインプロセッサのネイティブ命令に変換可能なアクセラレータとを有し、
前記アクセラレータは、コプロセッサに入力されるデータがコプロセッサが取り扱えるデータか否かをチェックし、前記コプロセッサが取り扱えないデータと判断したときはコプロセッサの演算を抑止し、
メインプロセッサは前記抑止に応答して前記コプロセッサが取り扱えないデータに対する演算を行うソフトウェア処理に移行することを特徴とする情報処理装置。 - 前記アクセラレータは、コプロセッサを利用してデータ演算を行う仮想マシン命令に対しコプロセッサが実行する演算用のネイティブ命令とメインプロセッサが実行するデータ転送用のネイティブ命令に変換してメインプロセッサに与え、
前記メインプロセッサは、コプロセッサに前記演算用のネイティブ命令を実行させる前に前記データ転送用のネイティブ命令を実行することを特徴とする請求項1記載の情報処理装置。 - 前記アクセラレータによるコプロセッサが取り扱えないデータのチェックはメインプロセッサからコプロセッサに転送されるデータに対して行なわれることを特徴とする請求項2記載の情報処理装置。
- 前記アクセラレータによるコプロセッサが取り扱えないデータのチェックはメモリからコプロセッサに転送されるデータに対して行なわれることを特徴とする請求項1記載の情報処理装置。
- メインプロセッサはパイプライン形態で命令を実行し、
前記アクセラレータはメインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、
前記模擬パイプライン部は、メインプロセッサのパイプラインステージの遷移に応答してフラグ情報のシフト動作を行うレジスタ手段を有し、フラグ情報のシフト位置が参照可能にされることを特徴とする請求項1記載の情報処理装置。 - 第1フォーマットの命令を第2フォーマットの命令に変換する命令変換回路と、
第1フォーマット及び第2フォーマットの命令のフェッチを行ない、フェッチした第1フォーマットの命令を前記命令変換回路に与え、前記命令変換回路で変換された第2フォーマットの命令及びフェッチした第2フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うメインプロセッサと、
メインプロセッサから与えられた第2フォーマットの命令をデコードしデコード結果に基づいて演算処理を行うコプロセッサと、
メインプロセッサとコプロセッサを接続するデータバスと、を備え、
前記命令変換回路は、前記命令変換回路がメインプロセッサに与える第2フォーマットの命令に、前記コプロセッサを利用して演算を行う第2フォーマットの命令を含むとき、メインプロセッサから前記コプロセッサにデータバス経由でデータ転送を行う命令を含む命令列を出力し、
前記コプロセッサは前記データ転送の後に、前記演算を行う第2フォーマットの命令を実行することを特徴とする情報処理装置。 - 前記第2フォーマットの命令はメインプロセッサに依存するネイティブ命令であり、前記第1フォーマットの命令はメインプロセッサに依存しない仮想マシン命令であることを特徴とする請求項6記載の情報処理装置。
- 前記命令変換回路は、前記データバスのデータを入力し所定の数値と比較するデータチェック回路を有し、データチェック回路による比較結果が一致であるとき、メインプロセッサにコプロセッサの実行を抑止する抑止信号を出力することを特徴とする請求項6記載の情報処理装置。
- 前記命令変換回路は、メインプロセッサのパイプラインを模擬する模擬パイプライン部を有し、データチェック回路で比較するデータの入力タイミングの把握に模擬パイプライン部を利用することを特徴とする請求項8記載の情報処理装置。
- 前記アクセラレータは、前記メインプロセッサに含まれるパイプラインステージの段数と同じ段数を有する模擬パイプラインを有することを特徴とする請求項1に記載の情報処理装置。
- 前記仮想マシン命令は、Javaバイトコードであることを特徴とする請求項1に記載の情報処理装置。
- 前記第1フォーマットの命令は、Javaバイトコードであることを特徴とする請求項6に記載の情報処理装置。
- 前記メインプロセッサ及び前記コプロセッサは、第1チップに形成され、
前記アクセラレータは、前記第1チップとは異なる第2チップに形成され、
第1チップと第2チップが外部バスで接続され、
前記アクセラレータは、前記コプロセッサに入力されるデータがコプロセッサが取り扱えないデータか否かを前記外部バスを用いてチェックし、コプロセッサが取り扱えないデータのときは、メインプロセッサに割込み信号を出力することでコプロセッサの演算を抑止し、メインプロセッサは前記割込み信号に応答して前記コプロセッサが取り扱えないデータに対する演算を行なうソフトウェア処理に移行することを特徴とする情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008193209A JP2009032263A (ja) | 2003-07-07 | 2008-07-28 | 情報処理装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003192600 | 2003-07-07 | ||
JP2008193209A JP2009032263A (ja) | 2003-07-07 | 2008-07-28 | 情報処理装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004165435A Division JP4224430B2 (ja) | 2003-07-07 | 2004-06-03 | 情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009032263A true JP2009032263A (ja) | 2009-02-12 |
Family
ID=40402648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008193209A Pending JP2009032263A (ja) | 2003-07-07 | 2008-07-28 | 情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009032263A (ja) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05233229A (ja) * | 1992-02-21 | 1993-09-10 | Toshiba Corp | 情報処理装置および情報処理方法 |
JPH11327903A (ja) * | 1998-02-19 | 1999-11-30 | Internatl Business Mach Corp <Ibm> | Ieee準拠浮動小数点ユニット |
JP2002215387A (ja) * | 2001-01-22 | 2002-08-02 | Mitsubishi Electric Corp | 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置 |
WO2002097613A1 (en) * | 2001-05-31 | 2002-12-05 | Arm Limited | Data processing using multiple instruction sets |
-
2008
- 2008-07-28 JP JP2008193209A patent/JP2009032263A/ja active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05233229A (ja) * | 1992-02-21 | 1993-09-10 | Toshiba Corp | 情報処理装置および情報処理方法 |
JPH11327903A (ja) * | 1998-02-19 | 1999-11-30 | Internatl Business Mach Corp <Ibm> | Ieee準拠浮動小数点ユニット |
JP2002215387A (ja) * | 2001-01-22 | 2002-08-02 | Mitsubishi Electric Corp | 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置 |
WO2002097613A1 (en) * | 2001-05-31 | 2002-12-05 | Arm Limited | Data processing using multiple instruction sets |
JP2004520663A (ja) * | 2001-05-31 | 2004-07-08 | エイアールエム リミテッド | 複数の命令セットを用いるデータ処理 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI567646B (zh) | 容許一架構之編碼模組使用另一架構之程式庫模組的架構間相容性模組 | |
JP4224430B2 (ja) | 情報処理装置 | |
US7853776B2 (en) | Handover between software and hardware accelerator | |
US9003422B2 (en) | Microprocessor architecture having extendible logic | |
KR910000364B1 (ko) | 이뮬레이션 시스템 및 그 방법 | |
US7827390B2 (en) | Microprocessor with private microcode RAM | |
US6457115B1 (en) | Apparatus and method for generating 64 bit addresses using a 32 bit adder | |
EP1447742A1 (en) | Method and apparatus for translating instructions of an ARM-type processor into instructions for a LX-type processor | |
US11341085B2 (en) | Low energy accelerator processor architecture with short parallel instruction word | |
US20120032965A1 (en) | Intermediate language accelerator chip | |
JP2001195250A (ja) | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 | |
CN106687972A (zh) | 针对有效gadget控制转移的攻击保护 | |
TWI724065B (zh) | 包含用於控制流向終止的模式特定結束分支之處理器及系統 | |
US7124283B2 (en) | Hardware accelerator for a platform-independent code | |
US20020138712A1 (en) | Data processing device with instruction translator and memory interface device | |
JP2000284973A (ja) | 二重割込みベクトル・マッピング装置とその操作方法 | |
JP4127495B2 (ja) | 情報処理装置 | |
US6405300B1 (en) | Combining results of selectively executed remaining sub-instructions with that of emulated sub-instruction causing exception in VLIW processor | |
JP2009032263A (ja) | 情報処理装置 | |
WO2009032186A1 (en) | Low-overhead/power-saving processor synchronization mechanism, and applications thereof | |
GB2461850A (en) | Memory management unit with address translation for a range defined by upper and lower limits | |
JP2004522236A (ja) | 中間言語アクセラレータチップ | |
JP2008004132A (ja) | 情報処理装置 | |
CN114691203A (zh) | 执行新增指令的方法及系统 | |
CN112631657A (zh) | 用于字符串处理的字节比较方法以及指令处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20100527 |
|
A977 | Report on retrieval |
Effective date: 20101013 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101019 |
|
A02 | Decision of refusal |
Effective date: 20110303 Free format text: JAPANESE INTERMEDIATE CODE: A02 |