(57)【要約】  RISCプロセッサ及びレジスタのフラグビットの処理方法が開示される。該RISCプロセッサは物理レジスタヒープ、前記の物理レジスタヒープに接続する演算部分、前記の演算部分に接続するデコーダを含む。前記の物理レジスタヒープはCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われるシミュレートフラグレジスタを含む。前記の演算部分は前記のシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われるフラグ読み書きモジュールを含む。前記の演算部分はさらに演算制御機を含み、該演算制御機は、演算の間にRISCプロセッサがX86の仮想機稼動モードであるとき、前記のシミュレートフラグレジスタのフラグビットの値に基づいて演算制御を行う。
2011508921.tif 000002
【特許請求の範囲】
【請求項１】
物理レジスタヒープと、前記の物理レジスタヒープに接続する演算部分と、前記の演算部分に接続するデコーダとを含むRISCプロセッサにおいて、
前記の物理レジスタヒープはシミュレートフラグレジスタを含み、該シミュレートフラグレジスタはCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、
前記の演算部分はフラグ読み書きモジュールを含み、該フラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われることを特徴とするRISCプロセッサ装置。
【請求項２】
前記のデコーダはモード識別モジュールを含み、該モード識別モジュールは、演算がEFLAGS稼動をシミュレートするモードであることを識別し、異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードすることに使われることを特徴とする請求項１に記載のRISCプロセッサ装置。
【請求項３】
前記の演算部分はさらに演算制御機を含み、該演算制御機は、演算の間にRISCプロセッサがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値に基づいて演算制御を行うことを特徴とする請求項１に記載のRISCプロセッサ装置。
【請求項４】
前記のフラグ読み書きモジュールは、フラグ抽出モジュールとフラグ修正モジュールを含み、
前記のフラグ抽出モジュールは、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを抽出することを制御し、抽出されたシミュレートフラグレジスタのフラグビットの値を目標レジスタの中に保存することに使われ、
前記のフラグ修正モジュールは、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を修正し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを修正することを制御し、ソースレジスタの中の値を使用してシミュレートフラグレジスタを修正することに使われることを特徴とする請求項１に記載のRISCプロセッサ装置。
【請求項５】
前記演算制御は、演算の結果に基づいて新たなシミュレートフラグレジスタのフラグビットを得ることと、およびシミュレートフラグレジスタのフラグビットの1ビット或いは複数ビットに基づき、分岐ジャンプの命令を実行することとを含むことを特徴とする請求項３に記載のRISCプロセッサ装置。
【請求項６】
前記のシミュレートフラグレジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビット、及びOFビットを表すことを特徴とする請求項１から５のいずれかに記載のRISCプロセッサ装置。
【請求項７】
RISCプロセッサのレジスタのフラグビットの処理方法であって、前記RISCプロセッサは、物理レジスタヒープと、前記の物理レジスタヒープに接続する演算部分と、前記の演算部分に接続するデコーダとを含み、前記の物理レジスタヒープはシミュレートフラグレジスタを含み、該シミュレートフラグレジスタはCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、前記の演算部分はフラグ読み書きモジュールを含み、該フラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる処理方法において、
RISCプロセッサにおいてシミュレートフラグレジスタを使用可能に設置するステップAと、
RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み書きし、及び/又はシミュレートフラグレジスタのフラグビットの値に基づき演算制御を行うステップBとを含むことを特徴とするRISCプロセッサのレジスタのフラグビットの処理方法。
【請求項８】
前記のステップAは、デコーダは演算がEFLAGS稼動をシミュレートするモードであると識別したとき、異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップを更に含むことを特徴とする請求項７に記載のRISCプロセッサのレジスタのフラグビットの処理方法。
【請求項９】
前記のステップBは、
RISCプロセッサの稼動モードがX86の仮想機稼動モードであるときに、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを抽出することを制御し、抽出されたシミュレートフラグレジスタのフラグビットの値を目標レジスタの中に保存するステップB1と、
RISCプロセッサの稼動モードがX86の仮想機稼動モードであるときに、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を修正し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを修正することを制御し、ソースレジスタの中の値を使用してシミュレートフラグレジスタを修正するステップB2とを含むことを特徴とする請求項７または請求項８に記載のRISCプロセッサのレジスタのフラグビットの処理方法。
【請求項１０】
前記のステップBにおける前記の演算制御のプロセスは、
演算の結果に基づいてシミュレートフラグレジスタのフラグビットを得るステップB1′と、
シミュレートフラグレジスタのフラグビットの1ビット或いは複数ビットに基づき、分岐ジャンプの命令を実行するステップB2′とを含むことを特徴とする請求項７または請求項８に記載のRISCプロセッサのレジスタのフラグビットの処理方法。
【請求項１１】
前記のシミュレートフラグレジスタの低い順位の6ビットは、高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビット、及びOFビットを表すことを特徴とする請求項７または請求項８に記載のRISCプロセッサのレジスタのフラグビットの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・プロセッサの技術に関し、より詳細にはRISCプロセッサ及びレジスタのフラグビットの処理方法に関する。
【背景技術】
【０００２】
仮想機は、二十世紀六十年代にIBM社により提出された概念であり、現実化されている。当時に主流のコンピュータはメインフレームコンピュータであり、メインフレームコンピュータをいくつかの仮想機に分割し、仮想機のモニタ（Virtual Machine Monitor，VMM）のセグメンテーションを利用することにより、いくつかの異なる応用または複数のユーザがこの貴重な装置を共有することができる。
【０００３】
しかし、ハードウェアのコストの減少と演算能力の増加、およびマルチタスクのオペレーティングシステム（OS）の登場によって、徐々に仮想機のモニタが歴史の舞台からさり、マイクロコンピュータとパーソナルコンピュータ（PC）が大活躍してきた。
【０００４】
しかし、仮想機の強力と成功の理由は、ユーザが命令セットの組合だけにより形成されることのできる機能及び設備に対するアクセスと利用を実行できることにあるため、最近に、仮想機のモニタは学術界と産業界において再び注目が集められてきた。仮想機のモニタは現代のコンピュータシステムアーキテクチャの制限に対して一つのバーチャルな解決計画を提供し、強大な道具になり、この道具は現代のコンピュータシステムの能力をさらに拡張する。
【０００５】
現在のCISCプロセッサ(Complex Instruction Set Computing,CISC)のアーキテクチャ、例えばX86命令セットのCISCプロセッサのアーキテクチャは数多くの応用に使用されており、たくさんの大型サーバーの応用はX86命令セットのCISCプロセッサのアーキテクチャである。RISCプロセッサ(Reduced Instruction Set Computing,RISC)のアーキテクチャのマイクロプロセッサがサービスと関係する応用を広く実行するためには、CISCプロセッサとの交換性が必要となってきた。また、現在のCISCプロセッサのコンピュータは、アプリケーションがさらに多様化され、数多くのビジネスソフトウェアがCISCプロセッサのベースで開発されているから、RISCマイクロプロセッサがさらに幅広く応用されるために、CISCプロセッサとの交換性の実現は非常に必要となってきた。
【０００６】
MIPS命令セットのRISCプロセッサはRISCプロセッサの大きなブランチとして、現在にたくさんのオープンソースの仮想機プラットフォームが存在し、MIPS命令セットのRISCプロセッサからX86命令セットのCISCプロセッサへの、異なるアーキテクチャに対するサポートが実現できる。
【０００７】
MIPS命令セットのRISCプロセッサにおいて仮想器によりX86命令セットのCISCプロセッサに対するサポートを提供する際に、様々なことを考慮しなければならない。その中の一つはX86命令セットのCISCプロセッサにおけるフラグレジスタ（EFLAGS）のフラグビットの使用である。
【０００８】
X86の命令セットのフラグレジスタ（EFLAGS）は主に以下の三つの部分を含む：
一、CF（キャリーフラグ）、PF（奇偶ビット）、AF（補佐キャリー）、ZF（ゼロフラグ）、SF（マイナスでないフラグ）とOF（オーバーフロー）の6ビットを含む状態フラグ（Status Flags）；
二、文字列操作命令の方向を制御することに使われるDF（方向フラグ）フラグ；
三、ステップモードフラグ、中断イネーブル、I/O優先順位等を含み、ユーザプログラムにより変更できないその他のシステムフラグとI/O特権領域（IOPL領域）。
【０００９】
X86の命令セットの固定小数点演算命令は、6ビット（bit）をサポートし、CF、PF、AF、ZF、SF、OF全部で6ビットのフラグレジスタ（EFLAGS）のフラグビット演算を含み、即ち数多くの演算命令はデータの値を発生する以外に、フラグレジスタのフラグビットも発生し、これにより、あるシフト命令はフラグビットをシフトの条件として、命令のジャンプを実行することができる。
【００１０】
しかし、現在のRISCプロセッサのX86の仮想機において、フラグレジスタの6ビットのフラグビット演算が実現されるとき、シミュレートによって実現されるため、膨大なコストが発生し、性能に大きな悪影響を与える。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、RISCプロセッサ及びそのレジスタのフラグビットの処理方法を提供することにある。本発明では、RISCプロセッサでフラグレジスタの６ビットのフラグビット演算を実現し、X86命令セットとの交換性を実現し、仮想機の性能を向上させる。
【課題を解決するための手段】
【００１２】
本発明の目的を実現するために提供したRISCプロセッサは、物理レジスタヒープと、前記の物理レジスタヒープに接続する演算部分と、前記の演算部分に接続するデコーダとを含み、前記の物理レジスタヒープはシミュレートフラグレジスタを含み、該シミュレートフラグレジスタはCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、前記の演算部分はフラグ読み書きモジュールを含み、該フラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる。
【００１３】
前記のデコーダはモード識別モジュールを含み、該モード識別モジュールは、演算がEFLAGS稼動をシミュレートするモードであることを識別し、異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードすることに使われる。
【００１４】
前記の演算部分はさらに演算制御機を含み、該演算制御機は、演算の間にRISCプロセッサがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値に基づいて、演算制御を行う。
【００１５】
前記のフラグ読み書きモジュールは、フラグ抽出モジュールとフラグ修正モジュールを含み、前記のフラグ抽出モジュールは、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを抽出することを制御し、抽出されたシミュレートフラグレジスタのフラグビットの値を目標レジスタの中に保存することに使われ、前記のフラグ修正モジュールは、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を修正し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを修正することを制御し、ソースレジスタの中の値を使用してシミュレートフラグレジスタを修正することに使われる。
【００１６】
前記演算制御は、演算の結果に基づいて新たなシミュレートフラグレジスタのフラグビットを得ることと、およびシミュレートフラグレジスタのフラグビットの1ビット或いは複数ビットに基づき、分岐ジャンプの命令を実行することと含む。
【００１７】
前記のシミュレートフラグレジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビット、及びOFビットを表す。
本発明の目的を実現するため、さらにRISCプロセッサのレジスタのフラグビットの処理方法を提供する。該RISCプロセッサは、物理レジスタヒープと、前記の物理レジスタヒープに接続する演算部分と、前記の演算部分に接続するデコーダとを含み、前記の物理レジスタヒープはシミュレートフラグレジスタを含み、該シミュレートフラグレジスタはCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、前記の演算部分はフラグ読み書きモジュールを含み、該フラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる。
【００１８】
該方法は、RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、即ちシミュレートフラグレジスタを使用可能に設置するステップA、RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み書きし、及び/又はシミュレートフラグレジスタのフラグビットの値に基づき、演算制御を行うステップBを含む。
【００１９】
前記のステップAとステップBの間にはさらに以下のステップが含まれる。
デコーダは、演算がEFLAGS稼動をシミュレートするモードであると識別したとき、異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードする。
【００２０】
前記のステップBは、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるときに、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを抽出することを制御し、抽出されたシミュレートフラグレジスタのフラグビットの値を目標レジスタの中に保存するステップB1と、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるときに、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を修正し、その中の8ビットのマスクの値に基づいて、シミュレートフラグレジスタの1ビット或いは複数ビットを修正することを制御し、ソースレジスタの中の値を使用してシミュレートフラグレジスタを修正するステップB2とを含む。
【００２１】
前記のステップBにおける前記の演算制御のプロセスは、演算の結果に基づいてシミュレートフラグレジスタのフラグビットを得るステップB1′と、シミュレートフラグレジスタのフラグビットの1ビット或いは複数ビットに基づき、分岐ジャンプの命令を実行するステップB2′とを含む。
【００２２】
前記のシミュレートフラグレジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビット、及びOFビットを表す。
【図面の簡単な説明】
【００２３】
【図１】本発明によるRISCプロセッサ装置のアーキテクチャの略図である。
【図２】本発明によるシミュレートフラグレジスタの略図である。
【図３】本発明によるRISCプロセッサのレジスタのフラグビットの処理方法のフローチャートである。
【図４】本発明の実施例によるシミュレートフラグレジスタのSETFLAG命令コーディングの略図である。
【図５】本発明の実施例によるシミュレートフラグレジスタのフラグビットを修正する命令MTFLAGの命令コーディングの略図である。
【図６】本発明の実施例によるシミュレートフラグレジスタのフラグビットを読み取る命令MFFLAGの命令コーディングの略図である。
【図７】本発明の実施例によるシミュレートフラグレジスタのフラグビットを修正するブラス命令X86ADDの命令コーディングの略図である。
【図８】シミュレートフラグレジスタのフラグビットに基づき分岐ジャンプを行うX86JM-EFLAGS命令のコーディングの略図である。
【発明を実施するための形態】
【００２４】
本発明の目的、技術の解決策、および本発明の利点をより明確にするため、以下に添付図面及び実施例により、本発明によるRISCプロセッサ装置及びレジスタのフラグビットの処理方法について更に詳細に説明する。ここで説明される例は、本発明を解釈するためのものであって、本発明の範囲を限定するためのものではないと理解されるべきである。
【００２５】
本発明の実施例は、MIPS64命令セットのRISCプロセッサ装置を例として、本発明について説明するが、本発明の特許請求の範囲を限定するためのものではなく、本発明はその他の命令セットのRISCプロセッサにおいても適用できる。
【００２６】
図1に示されているように、本発明の目的を実現するため、RISCプロセッサを提供し、該RISCプロセッサは物理レジスタヒープ１、前記の物理レジスタヒープ１に接続する演算部分３、及び前記の演算部分３に接続するデコーダ２を含む。
【００２７】
前記の物理レジスタヒープはシミュレートフラグレジスタ４（M-EFLAGS）を含み、X86命令セットのCISCプロセッサのフラグレジスタ（EFLAGS）のフラグビットを実現させるのをシミュレートすることに使われる。図2に示されているように、該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
【００２８】
その中：
OFは、結果がオーバーフローになる場合には、OFを1と設置し、そうでない場合には、OFをリセットすると表す；
SFは、結果の最高ビットを保存すると表す；
ZFは、結果が0になる場合には、ZFを1と設置し、そうでない場合には、ZFをリセットすると表す；
AFは、演算中に3番目のビットから4番目のビットへの桁上げまたは借りがある場合には、AFを1と設置し、そうでない場合には、AFをリセットすると表す；
PFは、結果の最低バイトに偶数個の1がある場合には、PFを1と設置し、そうでない場合には、PFをリセットすると表す；
CFは、演算中最高ビットからさらに高いビットへの桁上げまたは借りがある場合には、CFを1と設置し、そうでない場合には、CFをリセットすると表す。
【００２９】
前記のデコーダ２はモード識別モジュール２１を含み、この識別モジュール２は、演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードであると識別し、そして異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードする。
【００３０】
前記の演算部分３はフラグ読み書きモジュール３１を含み、このモジュール３１はシミュレートフラグレジスタ４のフラグビットの値を読み書きすることに使われる。
前記のフラグ読み書きモジュール３１はフラグ抽出モジュール３１１とフラグ修正モジュール３１２を含み、その中：
前記のフラグ抽出モジュール３１１は、1ビット或いは複数ビットのシミュレートフラグレジスタ４のフラグビットの値を抽出し、その中の8ビットのマスク（mask）の値に基づいて、シミュレートフラグレジスタ４の1ビット或いは複数ビットを抽出することを制御し、抽出されたシミュレートフラグレジスタ４のフラグビットの値を目標レジスタの中に保存することに使われる。
【００３１】
前記のフラグ修正モジュール３１２は、1ビット或いは複数ビットのシミュレートフラグレジスタ４のフラグビットの値を修正し、その中の8ビットのマスク（mask）の値に基づいて、シミュレートフラグレジスタ４の1ビット或いは複数ビットを修正することを制御し、ソースレジスタの中の値を使用してシミュレートフラグレジスタ４を修正することに使われる。
【００３２】
前記の演算部分３はさらに演算制御機３２を含み、この演算制御機３２は、RISCプロセッサが演算している間に、RISCプロセッサのX86の仮想機稼動モードである場合、シミュレートフラグレジスタ４のフラグビットの値に基づき、演算制御を行う。
【００３３】
前記演算制御は、演算の結果に基づいて新たなシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットを得ることと、およびシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットの1ビット或いは複数ビットに基づき、分岐ジャンプの命令を実行することとを含む。
【００３４】
以下に、本発明によるRISCプロセッサのレジスタのフラグビットの処理方法を詳しく説明する。該RISCプロセッサは物理レジスタヒープ１、前記の物理レジスタヒープ１に接続する演算部分３、および前記の演算部分３に接続するデコーダ２を含む。前記の物理レジスタヒープ１はシミュレートフラグレジスタ４を含み、CISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われる。前記の演算部分３はフラグ読み書きモジュール３１を含み、シミュレートフラグレジスタ４のフラグビットの値を読み書きすることに使われる。図３に示されているように、該方法は以下のステップを含む：
ステップS100：RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、即ちシミュレートフラグレジスタ４が使用できることをし、デコーダは演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードであると識別し、そして異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードする；
シミュレートフラグレジスタ４（M-EFLAGS）がX86の命令セットのフラグレジスタ（EFLAGS）のフラグビットを擬似的に実現し、該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
【００３５】
その中：
OFは、結果がオーバーフローになる場合には、OFを1と設置し、そうでない場合には、OFをリセットすると表す；
SFは、結果の最高ビットを保存すると表す；
ZFは、結果が0になる場合には、ZFを1と設置し、そうでない場合には、ZFをリセットすると表す；
AFは、演算中に3番目のビットから4番目のビットへの桁上げまたは借りがある場合には、AFを1と設置し、そうでない場合には、AFをリセットすると表す；
PFは、結果の最低バイトに偶数個の1がある場合には、PFを1と設置し、そうでない場合には、PFをリセットすると表す；
CFは、演算中最高ビットからさらに高いビットへの桁上げまたは借りがある場合には、CFを1と設置し、そうでない場合には、CFをリセットすると表す。
【００３６】
シミュレートフラグレジスタ４が利用できるとき、該演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードにあると識別し、実行結果に基づいて当該シミュレートフラグレジスタ４の値を修正する。そして異なる命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードし、元の目標レジスタの中に結果を保存しなくても済む。
【００３７】
一つの実施可能な方式では、シミュレートフラグレジスタ４に関連する命令がシミュレートフラグレジスタ４のフラグビットを修正するとき、該命令の前に同指令がRISCプロセッサのX86の仮想機稼動モードであることを示すプレフィックス命令SETFLAGがあり、この命令は、その以降の命令がX86の仮想機モードにあることを示す。
【００３８】
命令フォーマット：SETFLAG/ EFLAGS稼動モードのプレフィックス命令をシミュレートする。
この命令は、該命令の直後の命令がEFLAGS稼動モードをシミュレートしていることを表す。
【００３９】
そのコーディングは図４に示されているように。
その命令を実行するとき、実行結果に基づいて当該シミュレートフラグレジスタ４のフラグビットの値を修正し、目標レジスタの中に結果を保存しない。以下に具体例をあげる。
【００４０】
正常のMIPS命令：
ADD $5,$1,$2
1番汎用レジスタと2番汎用レジスタの中の値を加算し、その結果を5番汎用レジスタの中に保存することを表す。
【００４１】
シミュレートフラグレジスタ４のフラグビットを修正する命令：
SETFLAG
ADD $5,$1,$2
この命令は、1番汎用レジスタと2番汎用レジスタの中の値を加算し、演算結果は保存しないが、結果に基づいてシミュレートフラグレジスタ４の中のフラグビットの当該ビットを修正することを表す。
【００４２】
デコーダ２の入力セットはすべての可能な32ビットコードであり、すべての合法命令と非法命令を含む。この方式では、デコーダ２が新たな一つの合法入力を増やした：SETFLAG。この命令は、該命令の直後の命令がRISCプロセッサのX86の仮想機稼動モードであり、即ちEFLAGS稼動モードをシミュレートしていることを表す。
【００４３】
デコーダ２がプレフィックス命令に基づき、プレフィックス命令後の一つの命令をデコードするとき、その出力はEFLAGS稼動モードをシミュレートしていることに基づき、調整内部の操作コードを演算部分に送り、このときこの命令の目標レジスタがデコードによりシミュレートフラグレジスタ４（M-EFLAGS）になり、その中の一つのソースレジスタもシミュレートフラグレジスタ４（M-EFLAGS）になる。いくつかの演算は、一部分のシミュレートフラグレジスタ４（M-EFLAGS）だけを修正するから、元のシミュレートフラグレジスタ４（M-EFLAGS）を演算部分３に送り込む必要がある。
【００４４】
その中、前記の調整内部操作コード、名前の変更即ち論理レジスタから物理レジスタにマッピングすること、および読み書きレジスタのポートなどの操作内容を含む、これらは当業者が周知する内容であるため、本発明で詳しく説明しない。
【００４５】
デコーダ２がデコーディングしたあと、命令を演算部分３に出力し、演算部分３は内部の操作コードを確認する。正常な命令であれば正常な流れに従って演算する； EFLAGS稼動モードをシミュレートするモードであれば、まず結果を演算し、演算の結果と中間結果に基づいてシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットを設置し、目標レジスタの中に演算の結果を保存しなくてもよい。
【００４６】
もう一つの発明を実施するための形態では、本発明の中に頻繁に使用されるシミュレートフラグレジスタ４のフラグビットを修正する命令が、X86の命令に対して一対一で対応し、そうすれば、一つの命令は元の二つの命令（一つのSETFLAGと一つの正常なMIPS命令）に相当する。以下に実例を挙げる。
【００４７】
頻繁に使用されるシミュレートフラグレジスタ４のフラグビットを修正する加算命令（ADD）について、命令をX86ADDと定義する、そして
X86ADD $5,$1,$2    は
SETFLAG 
ADD  $5,$1,$2      に
相当する。
【００４８】
これらの頻繁に使用される命令について、コーディングの間に独立な命令スロットを分配し、性能部分がこれらの命令を識別したあと、得られた結果を目標レジスタの中に送らずに、結果に基づき当該のシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットを得て、フラグビットをシミュレートフラグレジスタ４（M-EFLAGS）に送り込む。
【００４９】
ステップS200：RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタ４のフラグビットの値を読み書きし、あるいは/及びシミュレートフラグレジスタ４のフラグビットの値に基づき演算制御が行われる。
【００５０】
前記のステップS200において、シミュレートフラグレジスタ４のフラグビットの値の読み書きは以下のステップを含む。
ステップS210：RISCプロセッサがX86の仮想機の稼動モードである場合、1ビット又は複数ビットのシミュレートフラグレジスタ４のフラグビットの値を抽出し、その中の8ビットのマスク（mask）の値に基づいて、シミュレートフラグレジスタ４のフラグビットの値の1ビット或いは複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ４のフラグビットの値を目標レジスタの中に保存する。
【００５１】
ステップS220：RISCプロセッサがX86の仮想機の稼動モードである場合、1ビット或いは複数ビットのシミュレートフラグレジスタ４のフラグビットの値を修正し、その中の8ビットのマスク（mask）の値に基づいて、シミュレートフラグレジスタ４のフラグビットの値の1ビット或いは複数ビットを修正することが制御される。ソースレジスタの中の値を使用してシミュレートフラグレジスタ４を修正する。
【００５２】
一つの実施可能な方式として、本発明の実施例は二つの命令MTFLAGとMFFLAGを通じてシミュレートフラグレジスタ４のフラグビットの値を修正または読み書きする、この二つの命令の命令コーディングは図５と図６に示されているように。これらの命令は、8ビットのマスク（mask）を使用しシミュレートフラグレジスタ４の当該フラグビットを修正または読み書きし、一つの指定した汎用レジスタの中に、それぞれにシミュレートフラグレジスタ４のフラグビットの値を書き込み、またはシミュレートフラグレジスタ４のフラグビットの値を読み込むことはできる。
【００５３】
MTFLAG命令は1ビットか複数ビットのシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットの値を抽出することを実現する。命令の中の8ビットのマスク（mask）の値（即値で表す）に基づいて、シミュレートフラグレジスタ４の中の1ビット又は複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットの値を目標レジスタGPR[rt]の中に保存する。
【００５４】
マスク（mask）でシミュレートフラグレジスタ４のフラグビットを抽出することの実現は、以下の式で表される。
GPR[rt]←M-EFLAGS & mask
たとえば、マスク（mask）の値は0x00000100として、シミュレートフラグレジスタ４（M-EFLAGS）の第2ビット、即ちAFビットの内容を抽出し、目標レジスタGPR[rt]の中に入れる。
【００５５】
MTFLAG命令は1ビットか複数ビットのシミュレートフラグレジスタ４（M-EFLAGS）のフラグビットの値を直接に修正する。命令の中の8ビットのマスク（mask）の値（即値で表す）に基づいてシミュレートフラグレジスタ４（M-EFLAGS）の中の1ビット又は複数ビットを修正することが制御される。GPR[rt]ソースレジスタの中の値を使用してシミュレートフラグレジスタ４（M-EFLAGS）を修正する。
【００５６】
マスク（mask）でシミュレートフラグレジスタ４のフラグビットを修正することの制御は、以下の式で表される。
M-EFLAGS & mask←GPR[rs]
たとえば、GPR[rs]の低い順番の8ビットの内容は0x00010010として、マスク（mask）の値は0x00110011として、この命令は該シミュレートフラグレジスタ４（M-EFLAGS）の中のCF、PF、SFとOFビットを修正し、この4ビットをそれぞれ0、1、1と0に設定させる。
【００５７】
前記のステップS200において、前記の演算制御の流れは以下のステップを含む。
ステップ210′：演算の結果に基づいてシミュレートフラグレジスタ４（M-EFLAG）のフラグビットが得られる。
【００５８】
たとえば、シミュレートフラグレジスタ４（M-EFLAG）のフラグビットに基づいて直接演算する命令は例えばX86ADDである。
X86ADD  / EFLAGSビットの32ビットの加算だけに影響する。
命令のフォーマットは：X86ADD  rs, rt
命令はGPR[rs]レジスタの中の32ビットの整数とGPR[rt]レジスタの中の32ビットの整数を加算して、32ビットの結果が得られる。この結果を保存せず、結果に基づきシミュレートフラグレジスタ４（M-EFLAGS）のOF/SF/ZF/AF/PFビットを修正するだけである。
【００５９】
そのコーディングは図７に示されているように。
ステップ220′：シミュレートフラグレジスタ４（M-EFLAG）のフラグビット中の1ビット又は複数ビットに基づいて分岐ジャンプの命令を実行する。
【００６０】
たとえば、X86J M-EFLAGSの条件遷移
命令のフォーマットは：X86J.fmt offset
X86J命令は、EFLAGSの中の何ビットを比較し、対応の条件に基づいてプロセッサと関連するジャンプを行う。
【００６１】
そのコーディングは図８に示されているように。
ここで、異なる命令サフィックス（fmt）は異なる条件を表し、たとえば「X86J.a fmt=0」は、「CF=0」かつ「ZF=0」のときにジャンプが行われることを表す。
【００６２】
MIPS64命令セットの32ビット命令コードの高い順位の6ビット（31ビット:26ビット）はopcode領域となる。その中のSPECIAL2（opcodeは011100となる）の命令スロットは、MIPSのルールによってユーザが自分で定義してもよいものである。本発明の実施例の新たに増えた命令はすべて既存したMIPS64命令セットの中に保留したSPECIAL2の空スロットの値で実現された。
【００６３】
本発明の効果：本発明によるRISCプロセッサ装置及びレジスタのフラグビットの処理方法は、MIPS命令セットのRISCプロセッサにおいて、X86命令セットのCISCプロセッサのフラグレジスタ（EFLAGS）の6ビット（bit）のフラグビットに必要なハードウェアのサポートを提供し、仮想機の最適化の自由度を増大させ、仮想機の性能を向上させることができる。
【００６４】
本発明によるRISCプロセッサ装置及びデータ処理方法は、MIPSアーキテクチャにおいて、X86のEFLAGSのフラグビットに必要なハードのウェアサポートを提供し、仮想機の最適化の自由度を増大させ、仮想機の性能を向上させることができる。
【００６５】
添付図面に基づく本発明の実施例の上記詳細な説明により、本発明のその他の態様および特徴は同業者には自明である。
以上、本発明の実施例について説明したが、これらの実施例は単なる例であって、本発明を限定するためのものではない。本発明は、添付した特許請求の範囲に従って解釈されるべきである。
【産業上の利用可能性】
【００６６】
本発明によるRISCプロセッサ装置及びレジスタのフラグビットの処理方法は、MIPS命令セットのRISCプロセッサにおいて、X86命令セットのCISCプロセッサのフラグレジスタ（EFLAGS）の6ビット（bit）のフラグビットに必要なハードウェアのサポートを提供し、即ちシミュレートフラグレジスタを利用してX86の命令セットのCISCプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートする。本発明は、仮想機の最適化の自由度を増大させることができ、仮想機の性能を向上させることができる。
【図１】
2011508921.tif 000003
【図２】
2011508921.tif 000004
【図３】
2011508921.tif 000005
【図４】
2011508921.tif 000006
【図５】
2011508921.tif 000007
【図６】
2011508921.tif 000008
【図７】
2011508921.tif 000009
【図８】
2011508921.tif 000010
【国際調査報告】
2011508921.tif 000011
2011508921.tif 000012
2011508921.tif 000013
2011508921.tif 000014
2011508921.tif 000015
2011508921.tif 000016