(57)【特許請求の範囲】
【請求項１】
複数の浮動小数点レジスタを含む浮動小数点レジスタヒープを備えるＲＩＳＣプロセッサ装置であって、
前記ＲＩＳＣプロセッサの操作命令をデコードすることに使われるデコーダと、前記のデコーダと接続し、前記のデコーダの出力値に基づき前記の浮動小数点レジスタヒープを読み書きして、浮動小数点演算を行う浮動小数点演算部分とをさらに備え、
前記ＲＩＳＣプロセッサ装置は、前記の浮動小数点レジスタの状態を制御する制御レジスタを更に備え、該制御レジスタは、前記のデコーダと前記の浮動小数点演算部分が前記の浮動小数点レジスタヒープを利用してＸ８６のプロセッサの浮動小数点レジスタスタックの操作をシミュレートすることを制御し、
前記のデコーダはポインタレジスタを含み、該ポインタレジスタは、スタックの操作ポインタを維持し、スタック操作ポインタの値を保存することに使われ、
前記の浮動小数点演算部分はポインタ操作モジュールを含み、該ポインタ操作モジュールは、前記のポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、前記スタック操作ポインタの状態を変更かつ監視することに使われ、
前記デコーダは、前記複数の浮動小数点レジスタから一群の浮動小数点レジスタを選択して前記浮動小数点レジスタスタックとして用いることで、前記浮動小数点レジスタスタック操作をシミュレートし、
前記の制御レジスタはひとつのスタックイネーブルビットを維持し、イネーブルビットが１に設定された場合には、ＲＩＳＣプロセッサが浮動小数点レジスタスタック操作をシミュレートすることが表され、イネーブルビットが０に設定された場合には、ＲＩＳＣプロセッサが浮動小数点レジスタスタック操作をシミュレートしないことが表され、
前記スタック操作ポインタの値がｎであり、前記スタックイネーブルビットは１であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７以下である場合、浮動小数点演算部レジスタ番号ｊが該浮動小数点演算部レジスタ番号ｉを代替し、ここでｊ＝（ｉ＋ｎ）ｍｏｄ８であり、
操作中の前記浮動小数点演算部レジスタ番号ｉが７より大きい場合、該浮動小数点演算部レジスタ番号ｉが操作を実行するために直接用いられることを特徴とするＲＩＳＣプロセッサ装置。
【請求項２】
前記の浮動小数点レジスタヒープは番号が０〜３１である３２個の浮動小数点レジスタを含むことを特徴とする請求項１に記載のＲＩＳＣプロセッサ装置。
【請求項３】
前記のスタック操作ポインタは、読み出される操作、書き込まれる操作、１増加する操作、１減少する操作が行われるスタック操作ポインタであることを特徴とする請求項１または２に記載のＲＩＳＣプロセッサ装置。
【請求項４】
前記の制御レジスタのスタックイネーブルビットが１に設定されたとき、前記のデコーダは前記のスタック操作ポインタの値に基づき、３２個の浮動小数点レジスタにおける八つのレジスタの番号を変換し、前記Ｘ８６のプロセッサの浮動小数点レジスタスタックの、番号が０〜７であるスタックレジスタをシミュレートすることを特徴とする請求項２に記載のＲＩＳＣプロセッサ装置。
【請求項５】
ＲＩＳＣプロセッサが浮動小数点のスタック操作をシミュレートする方法であって、
前記ＲＩＳＣプロセッサは、複数の浮動小数点レジスタを含む浮動小数点レジスタヒープと、デコーダと浮動小数点演算部分が前記の浮動小数点レジスタヒープを利用してＸ８６のプロセッサの浮動小数点レジスタスタックの操作をシミュレートすることを制御する制御レジスタと、前記のＲＩＳＣプロセッサの操作命令をデコードすることに使われるデコーダと、前記のデコーダと接続し、前記のデコーダの出力値に基づき前記の浮動小数点レジスタヒープを読み書きして、浮動小数点演算を行う浮動小数点演算部分とを含み、前記の制御レジスタはひとつのスタックイネーブルビットを維持し、前記のデコーダはポインタレジスタを含み、前記の浮動小数点演算部分はポインタ操作モジュールを含む方法において、
前記のスタックイネーブルビットに基づき、前記複数の浮動小数点レジスタから一群の浮動小数点レジスタを選択して前記浮動小数点レジスタスタックとして用いる、前記浮動小数点レジスタのスタック操作をシミュレートするかどうかを決め、ポインタレジスタを設定するステップＡと、
前記浮動小数点レジスタスタック操作をシミュレートするとき、前記ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、当該スタック操作ポインタの状態を変更かつ監視するステップＢと、
を含み、
前記のステップＡは、
前記制御レジスタにおいて前記浮動小数点スタックイネーブルビットとして１ビットを選択し、当該浮動小数点スタックイネーブルビットが１に設定された場合には、前記Ｘ８６の浮動小数点レジスタスタックをシミュレートし、浮動小数点レジスタスタック操作を行うことが表され、前記浮動小数点スタックイネーブルビットが０に設定された場合には、前記Ｘ８６の浮動小数点レジスタスタックをシミュレートせず、且つ浮動小数点レジスタスタック操作を行わず、ＲＩＳＣプロセッサは通常の流れで処理を行うことが表されるステップＡ１と、
一つの少なくとも３ビットの前記ポインタレジスタを設置し、前記スタック操作ポインタの値を保存するステップＡ２と、を含み、
前記スタック操作ポインタの値がｎであり、前記スタックイネーブルビットは１であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７以下である場合、浮動小数点演算部レジスタ番号ｊが該浮動小数点演算部レジスタ番号ｉを代替し、ここでｊ＝（ｉ＋ｎ）ｍｏｄ８であり、
操作中の前記浮動小数点演算部レジスタ番号ｉが７より大きい場合、該浮動小数点演算部レジスタ番号ｉが操作を実行するために直接用いられることを特徴とするＲＩＳＣプロセッサが浮動小数点のスタック操作をシミュレートする方法。
【請求項６】
前記のステップＢは、前記スタック操作モードを設置し、前記浮動小数点スタックイネーブルビットを１に設定し、ユーザが前記浮動小数点レジスタスタックの操作をシミュレートすることを許可することを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【請求項７】
前記のステップＢは、前記スタック操作モードをリセットし、前記浮動小数点スタックイネーブルビットを０に設定し、ユーザが前記浮動小数点レジスタスタックの操作をシミュレートすることを禁止することを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【請求項８】
前記のステップＢは、前記スタック操作ポインタの値が１増加することを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【請求項９】
前記のステップＢは、前記スタック操作ポインタの値が１減少することを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【請求項１０】
前記のステップＢは、前記スタック操作ポインタの値を読み出すことを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【請求項１１】
前記のステップＢは、前記スタック操作ポインタの値を書き込むことを含むことを特徴とする請求項５に記載の浮動小数点のスタック操作をシミュレートする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロ・プロセッサの技術に関し、より詳細には縮小命令セットコンピュータ（RISC）のプロセッサ装置、及びその浮動小数点のスタック操作のシミュレーション、並びに浮動小数点データのスタックプッシュとスタックポップ等のスタック操作の方法に関する。
【背景技術】
【０００２】
中央処理装置（CPU）は、略称がマイクロ・プロセッサであり、コンピュータの中最も重要な部分である。マイクロ・プロセッサに使用された命令セット、設計標準（アーキテクチャ）は、コンピュータにおいて最も重要な特徴であり、コンピュータに利用できる周辺装置及びアプリケーションソフトを決めている。
【０００３】
現在に流行している二つのプロセッサアーキテクチャはMIPS社のMIPS32/64命令セットを代表とした縮小命令セットコンピュータ（Reduced Instruction Set Computing，RISC）のプロセッサアーキテクチャとIntel会社のX86を代表とした複合命令セットコンピュータ（Complex Instruction Set Computing，CISC）のプロセッサアーキテクチャである。CISCプロセッサは命令の数が多量にあり、その中に非常に複雑な機能が実行できる命令もあり、その機能を実行するには普通に多量なクロック周期が必要とする。一方、RISCプロセッサは命令の数が比較的に少なく、より簡単な機能をより効率的に実行する。アプリケーションソフトを異なるアーキテクチャのプロセッサで実行するためには、その異なるアーキテクチャに基づきソフトを作り直さなければならない。しかし、通常X86で応用できるアプリケーションソフトはMIPS命令セットのRISCプロセッサのコンピュータで実行できなく、即ちコンパチビリティがない。
【０００４】
しかし、コンピュータの製造メーカは、自分で製造した一種類のアーキテクチャのプロセッサで、できるだけ多くの既存ソフトを実行することにより、ソフトの開発費用を節約するとともに、市場の占用率の最大化にすることを希望している。
【０００５】
この問題を解決するため、仮想機が誕生した。一般的には、一種類のアーキテクチャを有するプロセッサ（CPU）のコンピュータをホストコンピュータと呼び、同時にホストコンピュータでエミュレートする異なるアーキテクチャ種類を有するプロセッサ（CPU）環境をゲストコンピュータと呼ぶ。さらに、ホストコンピュータに一つまたは複数の命令を実行させるアプリケーションプログラムは必要であり、このプログラムは決められたゲストコンピュータの命令に応答し、ゲストコンピュータのために作られたソフトを実行する。このプログラムは仮想機と呼ぶ。
【０００６】
従来の仮想機にはSimOS、QEMU、Transmetaなどがある。しかし、従来の仮想機は、各種類のアーキテクチャの大きな差によって仮想機の稼動に過大なコストが発生し、実行効率が低すぎるため、実際の応用に困難である。
【０００７】
X86のプロセッサアーキテクチャは現在のパソコン（PC）で流行しているプロセッサアーキテクチャであるため、ほとんどの仮想機はX86のプロセッサアーキテクチャをゲストコンピュータとして、X86のプロセッサの互換性の問題を解決する必要があり、その中に最も難しい問題はX86プロセッサの特有の浮動小数点スタックのメカニズムをシミュレートすることである。一般的には、CISCクラスのプロセッサ、例えばX86の中にひとつの浮動小数点レジスタスタックが設置され、ほとんどの浮動小数点演算はレジスタスタックが関与した状態で行われている。X86のプロセッサ以外にその他のプロセッサ、特にMIPS命令セットのRISCプロセッサは似たようなアーキテクチャがないため、どのように仮想機で浮動小数点の翻訳をするかは、仮想機の開発部門が最も解決したい問題である。
【０００８】
X86のプロセッサの浮動小数点演算はスタックプッシュ（浮動小数点のロード命令）、スタックポップ（浮動小数点のストア命令）、浮動小数点の演算命令とそのほかの補助命令を提供する。プログラムは浮動小数点のロード命令によりメモリー中の浮動小数点データを浮動小数点レジスタスタックにプッシュし、浮動小数点の演算命令によって浮動小数点データを演算し、浮動小数点のストア命令によってスタックポップして、スタックTOPレジスタの内容をメモリーユニットに保存する。
【０００９】
このような浮動小数点の演算方式はCISCプロセッサ、例えばX86プロセッサの特有なものであり、そのほかのプロセッサ、例えばMIPS命令セットのRISCプロセッサには基本的に類似する演算方式は存在しない。
【００１０】
一般的には、CISCプロセッサではない、例えばMIPS命令セットを使用するRISCプロセッサの内部に、いくつかの汎用浮動小数点レジスタを設置し、これらの浮動小数点レジスタに一緒に番号を付け、命令はこれらの番号付けによってひとつの固定された浮動小数点レジスタを直接にアクセスする。X86のプロセッサ中に、命令が操作したレジスタはスタックTOPポインタの変化と一緒に変化する。一般的に、二進法データの翻訳問題を解決するために、CISCプロセッサではない、例えばRISCプロセッサはメモリー中にひとつのスペースを開き、X86の浮動小数点レジスタスタックのエミュレーションを維持する。
【００１１】
出願番号が200410074532.6の中国出願は、ひとつの二進法翻訳におけるX86の浮動小数点演算の処理方法を開示し、その方法は以下のステップを含む：実行するとき、環境の中にひとつの浮動小数点スタックを設置して、X86の物理浮動小数点スタックをエミュレートすることに使う；浮動小数点レジスタがマップした処理と単一方法によって順番にソース二進法プログラム中の各基本モジュールを処理する。この方法は、ゲストコンピュータのレジスタによってX86のソースレジスタをマップして、ゲストコンピュータにおいてもX86のプロセッサの浮動小数点演算がレジスタで実現されることを確保し、演算の効率を確保する；単一方法を利用して、各基本モジュールの入り口は毎回のtopの値が等しいことを満たすことを確保する。
【００１２】
しかし、これらの現在の技術は各種類のX86浮動小数点操作を確実にエミュレートできるが、その効率が非常に悪いので、性能について飛躍的な向上は期待できない。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本発明の目的はRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法を提供することにあり、この装置又は方法はRISCプロセッサで浮動小数点のスタック操作をサポートし、異なるアーキテクチャの仮想機が二進法の翻訳作業を行うことを容易にし、仮想機の効率を向上させ、プロセッサの互換性を向上させる。
【課題を解決するための手段】
【００１４】
本発明の目的を実現するため、ＲＩＳＣプロセッサ装置を提供する。ＲＩＳＣプロセッサは、複数の浮動小数点レジスタを含む浮動小数点レジスタヒープと、前記のＲＩＳＣプロセッサの操作命令をデコードすることに使われるデコーダと、前記のデコーダと接続し、前記のデコーダの出力値に基づき前記の浮動小数点レジスタヒープを読み書きして、浮動小数点演算を行う浮動小数点演算部分と、前記の浮動小数点レジスタの状態を制御する制御レジスタとを備え、この制御レジスタは、前記のデコーダと前記の浮動小数点演算部分が前記の浮動小数点レジスタヒープを利用してＸ８６のプロセッサの浮動小数点レジスタスタックの操作をシミュレートすることを制御することに使われる。
【００１５】
前記のデコーダはポインタレジスタを含み、該ポインタレジスタは、スタックの操作ポインタを維持し、スタック操作ポインタの値を保存することに使われる。前記の浮動小数点演算部分はポインタ操作モジュールを含み、該ポインタ操作モジュールは、前記のポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われ、前記デコーダは、前記複数の浮動小数点レジスタから一群の浮動小数点レジスタを選択して前記浮動小数点レジスタスタックとして用いることで、前記浮動小数点レジスタスタック操作をシミュレートする。
【００１６】
前記の制御レジスタは一つのスタックイネーブルビットを維持し、イネーブルビットが1に設定された場合には、プロセッサが浮動小数点レジスタスタック操作をシミュレートすることが表され、イネーブルビットが0に設定された場合には、プロセッサが浮動小数点レジスタスタック操作をシミュレートしないことが表され、前記スタック操作ポインタの値がｎであり、前記スタックイネーブルビットは１であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７以下である場合、浮動小数点演算部レジスタ番号ｊが該浮動小数点演算部レジスタ番号ｉを代替し、ここでｊ＝（ｉ＋ｎ）ｍｏｄ８であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７より大きい場合、該浮動小数点演算部レジスタ番号ｉが操作を実行するために直接用いられる。
【００１７】
前記の浮動小数点レジスタヒープにおいて番号が0〜31である32個の浮動小数点レジスタを含む。
前記のスタック操作ポインタは、読み出される操作、書き込まれる操作、1増加する操作、1減少する操作が行われるスタック操作ポインタである。
【００１８】
前記の制御レジスタのスタックイネーブルビットが１に設定されたとき、前記のデコーダは前記のスタック操作ポインタの値に基づき、32個の浮動小数点レジスタにおける八つのレジスタの番号を変換し、X86のプロセッサの浮動小数点レジスタスタックの、番号が0〜7であるスタックレジスタをシミュレートする。
【００１９】
本発明の目的を実現するため、さらにＲＩＳＣプロセッサで浮動小数点レジスタスタック操作をシミュレートする方法を提供する。ＲＩＳＣプロセッサは、複数の浮動小数点レジスタを含む浮動小数点レジスタヒープと、デコーダと浮動小数点演算部分が前記の浮動小数点レジスタヒープを利用してＸ８６のプロセッサの浮動小数点レジスタスタックの操作をシミュレートすることを制御する制御レジスタと、前記のＲＩＳＣプロセッサの操作命令をデコードすることに使われるデコーダと、前記のデコーダと接続し、前記のデコーダの出力値に基づき前記の浮動小数点レジスタヒープを読み書きする浮動小数点演算部分とを含み、前記の制御レジスタはひとつのスタックイネーブルビットを維持し、前記のデコーダはポインタレジスタを含み、前記の浮動小数点演算部分はポインタ操作モジュールを含む方法において、該方法は、
前記のスタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決め、ポインタレジスタを設置するステップＡと、浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視するステップＢとを含む。
【００２０】
前記のステップＡは、前記制御レジスタにおいて前記浮動小数点スタックイネーブルビットとして１ビットを選択し、当該浮動小数点スタックイネーブルビットが１に設定された場合には、前記Ｘ８６の浮動小数点レジスタスタックをシミュレートし、浮動小数点レジスタスタック操作を行うことが表され、前記浮動小数点スタックイネーブルビットが０に設定された場合には、前記Ｘ８６の浮動小数点レジスタスタックをシミュレートせず、且つ浮動小数点レジスタスタック操作を行わず、ＲＩＳＣプロセッサは通常の流れで処理を行うことが表されるステップＡ１と、一つの少なくとも３ビットの前記ポインタレジスタを設置し、前記スタック操作ポインタの値を保存するステップＡ２とを含み、前記スタック操作ポインタの値がｎであり、前記スタックイネーブルビットは１であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７以下である場合、浮動小数点演算部レジスタ番号ｊが該浮動小数点演算部レジスタ番号ｉを代替し、ここでｊ＝（ｉ＋ｎ）ｍｏｄ８であり、操作中の前記浮動小数点演算部レジスタ番号ｉが７より大きい場合、該浮動小数点演算部レジスタ番号ｉが操作を実行するために直接用いられる。
【００２１】
前記のステップBは、スタック操作モードを設置し、浮動小数点スタックイネーブルビットを1に設定し、ユーザが浮動小数点レジスタスタックをシミュレートしてスタック操作を行うことを許可すること、スタック操作モードをリセットし、浮動小数点スタックイネーブルビットを0に設定し、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタック操作を行うことを禁止すること、スタック操作ポインタの値が1増加すること、スタック操作ポインタの値が1減少すること、スタック操作ポインタの値を読み出すこと、及びスタック操作ポインタの値を書き込むことを含む。
【図面の簡単な説明】
【００２２】
【図１】本発明によるRISCプロセッサ装置の構造の略図である。
【図２】本発明によるRISCプロセッサが浮動小数点スタック操作をシミュレートするフローチャートである。
【図３】本発明の実施例においてMIPS命令セットを利用して、スタック操作モードを設置しイネーブルビットを1にする命令のコーディングの略図である。
【図４】本発明の実施例においてMIPS命令セットを利用して、スタック操作モードをリセットしイネーブルビットを0にする命令のコーディングの略図である。
【図５】本発明の実施例においてMIPS命令セットを利用して、スタックポインタの値を1増加させる命令のコーディングの略図である。
【図６】本発明の実施例においてMIPS命令セットを利用して、スタックポインタの値を1減少させる命令のコーディングの略図である。
【図７】本発明の実施例においてMIPS命令セットを利用して、スタックポインタの値を読み出す命令のコーディングの略図である。
【図８】本発明の実施例においてMIPS命令セットを利用して、スタックポインタの値を書き込む命令のコーディングの略図である。
【発明を実施するための形態】
【００２３】
本発明の目的、技術の解決策、および本発明の利点をより明確にするため、以下に添付図面及び実施例を参照して、本発明によるRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法について更に詳細に説明する。ここで説明される例は、本発明を解釈するためのものであって、本発明の範囲を限定するものではないことが理解されるべきである。
【００２４】
本発明の実施例はMIPS64命令セットのRISCプロセッサ装置を例として、本発明によるRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法について説明するが、本発明の特許請求の範囲を限定するものではない。
【００２５】
本発明の実施例はRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法を提供し、この方法は協調設計の仮想機に応用され、RISCプロセッサにおいてCISCプロセッサアーキテクチャの浮動小数点のスタック操作、例えばX86のプロセッサにおける浮動小数点のスタック操作をサポートする。
【００２６】
本発明をさらに詳しく理解するため、本発明の実施例はまずCISCプロセッサアーキテクチャ、例えばX86のプロセッサの浮動小数点のスタック操作の方法を説明する。
X86のプロセッサの浮動小数点部分は浮動小数点レジスタスタックを含み、該スタックは浮動小数点演算が直接できる８つのスタックレジスタからなり、順番で番号が付けられ、それぞれ0〜7になる。該レジスタを浮動小数点レジスタスタックと呼ぶ原因は、X86のプロセッサがそれらのレジスタをひとつのスタックとして使用するからである。浮動小数点レジスタスタックは下へ拡張するサイクルスタックであり、プロセッサはその他のひとつのレジスタの3ビットを利用してスタックTOPが所在する位置を表示する。この3ビットをTOPポインタと呼ぶ。
【００２７】
スタックレジスタへデータを保存する、即ちスタックプッシュする必要があるとき、TOPポインタの値が1減少し、それからデータをTOPポインタがポイントした浮動小数点レジスタに保存する。TOPポインタの値が0になるとき、次のスタックプッシュはデータを7番のスタックレジスタにプッシュし、TOPポインタの値を7と設定する。
【００２８】
スタックにあるデータをメモリーへ保存する必要があるとき、即ちスタックポップのとき、スタックポップの操作が行われる。スタックポップの操作はスタックプッシュの操作と似たように、TOPポインタが1増加することによって行われ、もしこの時点のTOPポインタの値が7である場合、スタックポップの後のTOPポインタの値を0と設定する。
【００２９】
X86のプロセッサにおいて、前記のスタックプッシュとスタックポップの操作はハードウェアで自動的に実現され、ユーザにとって見えない操作である。
命令によって浮動小数点のデータを処理するとき、見えた浮動小数点レジスタはST(0)、ST(1)、……ST(7)である。その中、ST(i)はスタックTOPからi番目のユニットのレジスタである。もしTOPポインタの値が2であると、ST(0)が2番目のレジスタで、ST(1)が3番目のレジスタであり、このように順次に番号を付ける。
【００３０】
以下に本発明によるRISCプロセッサ装置を詳しく説明する。
図1に示されているように、本発明によるRISCプロセッサは、既存の複数の浮動小数点レジスタを含む浮動小数点レジスタヒープ４と、前記のRISCプロセッサの操作命令をデコードすることに使われるデコーダ２と、前記のデコーダ２と繋がる浮動小数点演算部分３とを含む。前記の浮動小数点演算部分３が前記のデコーダの出力値に基づき前記の浮動小数点レジスタヒープ４を読み書きして、浮動小数点演算が行われる。
【００３１】
前記のRISCプロセッサはさらに前記の浮動小数点レジスタの状態を制御する制御レジスタ１を含み、この制御レジスタ１は、前記のデコーダ２と前記の浮動小数点演算部分３が前記の浮動小数点レジスタヒープ４を利用して浮動小数点レジスタスタックのシミュレーションをイネーブルするまたは禁止することを制御する。制御レジスタ１が前記の浮動小数点レジスタの状態を制御することに使われるのは当業者に対して周知である。ここで、本発明による前記の制御レジスタ１は、さらに前記のデコーダ２と前記の浮動小数点演算部分３が前記の浮動小数点レジスタヒープ４を利用して浮動小数点レジスタスタックのシミュレーションをイネーブルするまたは禁止することを制御する。
【００３２】
制御レジスタ１はひとつのスタックイネーブルビットを維持する。イネーブルビットが1に設定された場合には、プロセッサがX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートすることが表され、イネーブルビットが0に設定された場合には、プロセッサがX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートせず、通常の流れで処理が行われることが表される。
【００３３】
本発明の実施例では、前記の浮動小数点レジスタヒープ４は番号が0〜31である32個の既存の浮動小数点レジスタを含み、これらのレジスタは、X86のプロセッサの浮動小数点レジスタスタックをシミュレートすることに使われる。
【００３４】
前記のデコーダ２はひとつのポインタレジスタ２１を含み、このポインタレジスタ２１はひとつのTOPポインタ、即ちスタックの操作ポインタを維持して、TOPポインタの値を保存することに使われる。このTOPポインタは読み出されること、書き込まれること、１増加すること、１減少すること等ができる。
【００３５】
前記の浮動小数点演算部分３はポインタ操作モジュール３１を含み、このモジュール３１は、ポインタレジスタ２１を操作し、浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタ２１のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。
【００３６】
一つの実施可能の方式として、制御レジスタ１の中のスタックイネーブルビットが１設定された場合、前記のデコーダ２は前記のスタック操作ポインタの値に基づき、32個の浮動小数点レジスタにおける八つのレジスタの番号を変換し、X86のプロセッサの浮動小数点レジスタスタックの、番号が0〜7であるスタックレジスタをシミュレートする。
【００３７】
制御レジスタ１の中のスタックイネーブルビットが1に設定された場合、同ビットは演算の中に使用され、レジスタでシミュレートした浮動小数点レジスタスタックが存在することを表す。このようにして、浮動小数点演算命令の中に使われた、番号が8より小さいレジスタであれば、全て浮動小数点レジスタスタックのスタックレジスタとして使用され、X86のプロセッサの浮動小数点レジスタスタックをシミュレートする。
【００３８】
その後ポインタ操作モジュール３１はTOPポインタを使用してスタックレジスタ番号の変換、即ちユーザが見た浮動小数点レジスタ番号とプログラムで使用した浮動小数点レジスタ番号との変換を実行する。たとえば、レジスタ番号はスタックTOPからi番目のユニットのレジスタST(i)にTOPポインタの値を足した値を指す。TOPポインタの値が2であると、ST(0)が2番目のレジスタであり、ST(1)が3番目のレジスタである。オーバーフローと対応する処理も行われるとき、このグループのレジスタが一つのループスタックになり、本発明の実現しようとする、X86の中の浮動小数点レジスタスタックの機能をシミュレートすることを完成させることができる。そして次の作業を行い、つぎの作業はスタックイネーブルビットがセットされないときと同様である。
【００３９】
制御レジスタ１の中のスタックイネーブルビットが0に設定された場合、即ちリセットされた場合は、演算においてレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って処理を通常の通りに実行する。
【００４０】
以下に本発明によるRISCプロセッサの浮動小数点スタック操作をシミュレートする方法についてさらに詳しく説明する。図1に示されているように、該RISCプロセッサは、複数の浮動小数点レジスタを含む浮動小数点レジスタヒープ４と、浮動小数点レジスタヒープの状態を制御し、デコーダ２と浮動小数点演算部分３が前記の浮動小数点レジスタヒープ４を利用して浮動小数点レジスタスタックの操作をシミュレートすることを制御する制御レジスタ１と、前記のRISCプロセッサの操作命令をデコードすることに使われるデコーダ２と、前記のデコーダ２と接続し、前記のデコーダ２の出力値に基づき前記の浮動小数点レジスタヒープ４を読み書きして、浮動小数点の演算を行う浮動小数点演算部分３とを含む。その中、前記の制御レジスタ１はひとつのスタックイネーブルビットを維持し、前記のデコーダ２はポインタレジスタ２１を含み、前記の浮動小数点演算部分３はポインタ操作モジュール３１を含む。この方法は、RISCプロセッサの八つの浮動小数点レジスタにより浮動小数点レジスタスタックを構成し、制御レジスタ１によって、X86のTOPポインタの機能、即ちスタックポインタの操作機能をシミュレートすることにより、浮動小数点レジスタのスタック操作をシミュレートする。
【００４１】
本発明によるRISCプロセッサが浮動小数点のスタック操作をシミュレートする方法は、図2に示されているように、以下のステップを含む：
ステップS100：前記のスタックイネーブルビットに基づいて、八つの浮動小数点レジスタを選択して浮動小数点レジスタスタックの中の八つのスタックレジスタをシミュレートし、浮動小数点レジスタのスタック操作をシミュレートするかどうかをきめ、さらにポインタレジスタを設置する。
【００４２】
前記のステップS100は以下のステップを含む。
ステップS110：制御レジスタ１の中に1ビットを浮動小数点スタックイネーブルビットとする；イネーブルビットを1に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートし、浮動小数点スタック操作が行われることが表される；イネーブルビットを0に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートせず、浮動小数点スタック操作ができず、通常通りの流れで処理が行われることが表される。
【００４３】
ステップS120：一つの少なくとも3ビットのポインタレジスタ２１を設置し、TOPポインタの値を保存する。
該TOPポインタの値は、読み込まれること、書き込まれること、1増加すること、1減少すること等が可能であり、TOPポインタの範囲は0〜7である。
【００４４】
TOPポインタは、スタックプッシュのときに7番のレジスタにプッシュされ、TOPポインタの値を6と設置する；スタックポップのときに、TOPポインタの値が7であれば、スタックをポップした後にTOPポインタの値を0と設置する。
【００４５】
TOPポインタは、常にスタックTOPレジスタへポイントするため、このスタックがTOPから下に向かって成長するとき、即ちスタックプッシュのときにTOPポインタの値が1減少し、スタックポップのときにTOPポインタの値が1増加するため、7番のレジスタへデータを保存する（即ち7番のレジスタにスタックプッシュ）とき、TOPポインタの値が1減少して6となる。7番のレジスタからデータがポップされたとき、TOPポインタの値が1増加して8となる。しかし、全部で0〜7番の八つのレジスタだけがあるので、TOPポインタの最大値が7となり、1増加するときにTOPポインタは次のレジスタ、即ちループスタック中の0番レジスタにポイントするはずであり、このときのTOPポインタの値は0になるはずである。
【００４６】
たとえば、TOPポインタの値は3であり、イネーブルビットが1となるとき、演算の浮動小数点レジスタは$f(i)：i<=7であれば、浮動小数点レジスタ$f(j)が浮動小数点レジスタ$f(i)の代わりに演算を行い、ここで、j=(i+3) mod 8；
もしレジスタ$f(i)：i>7であれば、変更しなくてもよく、直接浮動小数点レジスタ$f(i)を使用する。
【００４７】
ステップS200：浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタ２１を操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視する。
【００４８】
前記のステップS200は以下のステップを含む。
ステップS210：スタック操作モードを設置し、浮動小数点スタックイネーブルビットを1に設定し、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを許容する。
【００４９】
一つの実施可能な方式では、シミュレート浮動小数点スタックモードを設置し、X86の浮動小数点スタックモードを1にするために以下の命令で実行する。
その命令フォーマット：SETTM
本発明が提供する拡張命令の命令コーディングは図3に示されている。このコーディングは、MIPS命令セットにおけるSPECIAL2の空スロットの保留値で、拡張命令を定義する。
【００５０】
命令でイネーブルビットを1にする操作が完成し、X86の浮動小数点スタックモードをセットし、ユーザがX86の浮動小数点スタック使用して浮動小数点操作することを許容する。
【００５１】
ステップS220：スタック操作モードをクリアし、浮動小数点スタックイネーブルビットを0にし、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを禁止する。
【００５２】
一つの実施可能な方式として、本発明の実施例ではシミュレート浮動小数点スタックモードをクリアし、X86の浮動小数点スタックモードを0にする命令フォーマット：CLRTM
本発明が提供する拡張命令の命令コーディングは図4に示されている。
【００５３】
これはX86の浮動小数点スタックモードをクリアすることで、ユーザがX86の浮動小数点スタックを使用することを禁止し、MIPSプロセッサの浮動小数点レジスタを使用して浮動小数点操作を行わなければならない。
【００５４】
このセット、クリアのスタックポインタ操作命令は、それぞれ浮動小数点レジスタスタックの活性化、禁止処理を実現することができる。
ステップS230：スタック操作ポインタの値が1増加し、即ちTOPポインタの値が1増加する；
一つの実施可能な方式として、本発明の実施例では、スタックポインタの値が1増加し、即ちTOPポインタの値が1増加する命令フォーマット：INCTOP
本発明が提供する拡張命令の命令コーディングは図5に示されている。
【００５５】
ステップS240：スタック操作ポインタの値が1減少し、即ちTOPポインタの値が1減少する；
一つの実施可能な方式として、本発明の実施例ではスタックポインタの値が1減少し、即ちTOPポインタの値が1減少する命令フォーマット：DECTOP
本発明が提供する拡張命令の命令コーディングは図6に示されている。
【００５６】
該TOPポインタの値が1増加する命令、1減少する命令は、それぞれX86のプロセッサの浮動小数点スタックのスタックプッシュ、スタックポップをシミュレートすることができる。
【００５７】
ステップS250：スタック操作ポインタの値を読み出し、即ちTOPポインタの値を読み出す；
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を読み出す操作命令のフォーマット：MFTOP  rd
その命令の機能はX86の浮動小数点スタックTOPポインタの値をレジスタGPR[rd]に読み込むことである。
【００５８】
本発明が提供する拡張命令の命令コーディングは図7に示されている。
ステップS260：スタック操作ポインタの値を書き込み、即ちポインタレジスタ２１の中に当時のTOPポインタの値を書き込む；
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を書き込む操作命令のフォーマット：MTTOP  imm
その命令の機能はX86の浮動小数点スタックTOPポインタに3ビットの即値immを書き込むことである。
【００５９】
本発明が提供する拡張命令の命令コーディングは図8に示されている。
そのTOPポインタを読み込む命令及び同TOPポインタを書き込む命令は浮動小数点スタックの操作制御に便利である。
【００６０】
本発明のRISCプロセッサが浮動小数点スタックの操作をシミュレートする方法をさらに理解するために、加算の中のスタックポインタ操作を例として以下に説明する。
イネーブルビットを1にし、TOPポインタの値を2にする場合、RISCプロセッサ内部において演算add.s $f(6), $f(1), $f(9)が以下の変換を行う：
X86の浮動小数点スタック操作のシミュレートが活性化され、即ちイネーブルビットを1にする；
$f(6)の代わりに$f(0)を使う；  // 6+2 mod 8 =0
$f(1)の代わりに$f(3)を使う；  // 1+2 mod 8 =3
$f(9)は変換しない；// 9>7のため、変換する必要がなく、直接レジスタ$f(9)を使用する
最終的に実際演算が行われた式：add.s $f(0), $f(3), $f(9)
このときスタックプッシュとスタックポップ操作がないため、TOP値は変化しない。
【００６１】
その詳細なプロセスはステップS100に述べられている。そのプロセスでは、X86のサイクルスタックのアーキテクチャをシミュレートし、プロセッサ間の互換性を増加させ、仮想機とコンパイラの二進法の翻訳作業を容易にし、プログラムの実行効率を向上させた。
【００６２】
本発明の効果：本発明によるRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法は、シミュレーションに対する非常に強いサポートを提供し、浮動小数点スタックに対するシミュレートの維持を省くことができ、メモリーを読み取る時間とスペースのコストを大きく低減し、作業の効率を向上させることができる。さらに異なるプロセッサアーキテクチャの間の差違を小さくすることができ、協同な仮想機の設計およびRISCとCISCプロセッサの間の互換性について開拓的な貢献をした。
【００６３】
以上に添付図面を参照して本発明の実施例について詳細に説明することにより、本発明のその他の面および特徴は当業者には自明である。
以上、本発明の実施例について説明したが、これらの実施例は単なる例であって、本発明を限定するものではない。本発明は添付特許請求の範囲に従って解釈されるべきである。
【産業上の利用可能性】
【００６４】
本発明によるRISCプロセッサ装置及び浮動小数点のスタック操作をシミュレートする方法は、RISCプロセッサで制御レジスタによって前記の浮動小数点レジスタヒープを利用して浮動小数点レジスタスタックの操作をシミュレートすることを制御する。制御レジスタのスタックイネーブルビットがイネーブルに設定されたとき、32個の浮動小数点レジスタ中の八つのレジスタを選択し、番号が0〜7であるX86のプロセッサの浮動小数点レジスタスタックのスタックレジスタをシミュレートする。これにより、浮動小数点のスタック操作をサポートすることができるため、異なるアーキテクチャの仮想機が二進法の翻訳作業を容易に実行することができ、プログラムの実行効率を向上させ、プロセッサの互換性を向上させることができる。
【図１】
0005441918.tif 000002
【図２】
0005441918.tif 000003
【図３】
0005441918.tif 000004
【図４】
0005441918.tif 000005
【図５】
0005441918.tif 000006
【図６】
0005441918.tif 000007
【図７】
0005441918.tif 000008
【図８】
0005441918.tif 000009