(57)【特許請求の範囲】
【請求項１】
X86の仮想機をサポートするRISCプロセッサにおいて、
前記RISCプロセッサは、命令モジュールと、デコーダと、検索テーブルと、固定小数点演算部分と、浮動小数点演算部分と、浮動小数点レジスタヒープとを含み、
前記の命令モジュールは、X86の仮想機をサポートする仮想機の命令セットを保存することに使われ、
前記のデコーダは、前記の仮想機の命令セットの命令をデコーディングする間に、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいてデコーディングした後に、固定小数点演算部分または浮動小数点演算部分に出力することに使われ、
前記の検索テーブルは、X86のプログラムにおけるジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力に基づいてX86のプログラムにおけるジャンプアドレスからMIPSジャンプアドレスへの翻訳に対する高速の検索をサポートすることに使われ、
前記の固定小数点演算部分は、デコーダの出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行した結果を出力することに使われ、
前記の浮動小数点演算部分は、デコーダの出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行の結果を出力することに使われ、
前記の浮動小数点レジスタヒープは、浮動小数点制御レジスタ、浮動小数点レジスタスタック、および第一から第三までの浮動小数点レジスタを含み、
前記のデコーダは、さらに、TOPポインタレジスタを含み、
前記のTOPポインタレジスタは、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われ、
前記のデコーダは、さらに、浮動小数点レジスタスタックを使用する浮動小数点演算命令をデコードするときに、前記のTOPポインタレジスタの値に基づいて当該浮動小数点演算命令のソース論理レジスタ番号または目標論理レジスタ番号を修正し、さらに当該浮動小数点演算命令の内容に基づいて当該TOPポインタレジスタの値を修正することに使われることを特徴とするX86の仮想機をサポートするRISCプロセッサ。
【請求項２】
前記のRISCプロセッサはさらにメモリーアクセス実行部分、メモリーおよびデータ通路を含み、
前記のメモリーアクセス実行部分は、デコーダの出力に基づき、データ通路によってレジスタとメモリーとの間のデータ通信を行うことを特徴とする請求項１に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項３】
前記のRISCプロセッサはさらに汎用物理レジスタヒープを含み、前記の汎用物理レジスタヒープは、オーバーフローチェックレジスタ、上界、下界アドレスレジスタ、シミュレートフラグレジスタおよび仮想機モード制御レジスタを含み、
前記のオーバーフローチェックレジスタは、RISCプロセッサがシミュレートしたスタックレジスタに対して浮動小数点アクセスを行うときの、スタックオーバーフローの例外チェックの結果を保存することに使われ、
前記の上界、下界アドレスレジスタは、X86のプロセッサの、限界があるメモリーアクセスモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われ、
前記のシミュレートフラグレジスタは、X86のプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、
前記の仮想機モード制御レジスタは、一つの制御ビットフラグを含み、該制御ビットフラグが1であるときには、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該制御ビットフラグが0であるときには、当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表すことを特徴とする請求項２に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項４】
前記の仮想機の命令セットは、メモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令、および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含むことを特徴とする請求項３に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項５】
前記のデコーダは、命令処理モジュールとモード識別モジュールを含み、
前記の命令処理モジュールは、仮想機の命令セットの命令を命令デコードして固定小数点演算部分または浮動小数点演算部分に出力することに使われ、
前記のモード識別モジュールは、命令をデコードする間に、命令の仮想機命令セットのモードを区別し、対応する処理を行うことに使われることを特徴とする請求項４に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項６】
前記のモード識別モジュールは、多数セーブデコードモジュール及び/または多数ロードデコードモジュールを含み、
前記の多数セーブデコードモジュールは、入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてメモリーアクセス実行部分へ出力して実行することに使われ、
前記の多数ロードデコードモジュールは、入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そして前記の複数の内部操作の中に分配し、メモリーアクセス実行部分へ出力して実行することに使われることを特徴とする請求項５に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項７】
前記のモード識別モジュールは、さらにプレフィックス命令デコードモジュールとフラグビット命令デコードモジュールを含み、
前記のフラグビット命令デコードモジュールは、EFLAGS稼動モードをシミュレートする作業モードであるEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタをその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われ、
前記のプレフィックス命令デコードモジュールは、プレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われることを特徴とする請求項６に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項８】
プレフィックス命令の範囲のパラメータがｎであるとき、デコーダはさらにプレフィックス命令カウンターを含み、該プレフィックス命令カウンターは、プレフィックス命令に影響され、かつシフト命令が存在しない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲のパラメータと等しいことを特徴とする請求項７に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項９】
前記のデコーダはさらに検索テーブルモジュールを含み、
前記の検索テーブルモジュールは、検索テーブルに関連する命令に基づき、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われることを特徴とする請求項５に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項１０】
前記の固定小数点演算部分は、フラグ読み書きモジュール、フラグ演算モジュール、例外処理モジュールおよびプレフィックス例外制御レジスタを含み、
前記のフラグ読み書きモジュールは、シミュレートフラグレジスタのフラグビットの値を読み書きすることに使われ、
前記のフラグ演算モジュールは、演算する間にRISCプロセッサがX86の仮想機の稼動モードであるときに、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行することに使われ、
前記の例外処理モジュールは、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせるとともに、EPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われ、
前記のプレフィックス例外制御レジスタは、例外が発生した命令は前記のプレフィックス命令によって影響されたかどうかを記録し、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻る場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われることを特徴とする請求項４に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項１１】
前記の浮動小数点演算部分は、ポインタ操作モジュール、スタックオーバーフロー判断モジュール、および変換モジュールを含み
前記のポインタ操作モジュールは、前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われ、
前記のスタックオーバーフロー判断モジュールは、指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタを操作し、浮動小数点アクセスするときのスタックオーバーフロー例外のチェックを行うことに使われる；
前記の変換モジュールは、拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われることを特徴とする請求項９に記載のX86の仮想機をサポートするRISCプロセッサ。
【請求項１２】
X86の仮想機をサポートするRISCプロセッサのデータ処理の方法において、
RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定するステップAと、
命令を読み込み、命令の仮想機命令セットのモードを区別し、命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、区別された仮想機命令セットのモードによって命令をデコーディングした後に出力するステップBと、
前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力するステップCと
を含むX86の仮想機をサポートするRISCプロセッサのデータ処理の方法であって、
前記のステップAは、
スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決めるステップと、
三つの汎用レジスタを任意に選択し、第一浮動小数点レジスタ、第二浮動小数点レジスタと第三浮動小数点レジスタとして、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用するステップとを含み、
前記のステップBは、
デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存し、浮動小数点レジスタスタックを使用する浮動小数点命令をデコードするときに、前記のTOPポインタレジスタの値に基づいて当該浮動小数点命令のソース論理レジスタ番号または目標論理レジスタ番号を修正し、さらに当該浮動小数点命令の内容に基づいて当該TOPポインタレジスタの値を修正するステップを含み、
前記のステップCは、
浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視するステップと、
高速の検索をサポートする検索テーブルに関連する命令を実行して、目標命令アドレスの値を獲得しまたは目標アドレスへジャンプさせて実行するステップとを含む
ことを特徴とするX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
【請求項１３】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは、EFLAG命令に対するサポートであるとき、
前記のステップAは、さらに、
RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタが使用できることを示すステップＡ１を含み、
前記のステップBは、さらに、
デコーダは演算がEFLAGS稼動モードをシミュレートするモードであることを識別したとき、違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップＢ１を含み、
前記のステップCは、さらに、
RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み込む/書き込むことによって演算状態を獲得/保存することを実現し、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行するステップＣ１を含む
ことを特徴とする請求項１２に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
【請求項１４】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートであるとき、
前記のステップAは、さらに、
一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタックの0〜7のスタックレジスタの状態を示すステップＡ２を含み、
前記のステップBは、さらに、
新たに増えたスタックオーバーフロー判断命令をデコードし、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードするステップＢ２を含み、
前記のステップCは、さらに、
指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタを操作し、浮動小数点スタックオーバーフローのチェックを行い、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データとの間のデータ変換を実行するステップC2を含む
ことを特徴とする請求項１２に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
【請求項１５】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の保存構造に対するサポートであるとき、
前記のステップAは、さらに、
RISCプロセッサのX86の仮想機において、物理レジスタヒープの二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタに設置するステップA3を含み、
前記のステップBは、さらに、
X86の仮想機の命令セットからMIPS命令セットへの翻訳を行うとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られるステップB3を含み、
前記のステップCは、さらに、
固定小数点演算部分は、デコードした後のメモリーアクセス命令の中に、上界アドレスレジスタに保存された上界アドレスと/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスとの有効性を判断し、命令操作数アドレスと命令アドレスの両方が有効であるときには、メモリーアクセス操作が実行され、そうでないときには、アドレスエラーの例外が発生するステップC3を含む
ことを特徴とする請求項１２に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
【請求項１６】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは仮想のメカニズムに対するサポートであるとき、
前記のステップAは、さらに、
プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別し、またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力し、あるいはX86の仮想機をサポートするRISCプロセッサが起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込むステップＡ４を含み、
前記のステップBは、さらに、
命令をデコードする間に、区別した命令の仮想機命令セットのモードに基づき、区別した仮想機命令セットのモードによって命令をデコードした後に出力し、またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を認識かつデコードし、あるいはデコーダが検索テーブルに関係する命令を識別しデコードするステップＢ４を含み、
前記のステップCは、さらに、
固定小数点演算部分はプレフィックス命令による影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算し、またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送って操作を実行するステップＣ４を含むことを特徴とする請求項１２に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロ・プロセッサのアーキテクチャのクロスプラットフォーム技術に関し、より詳細にはX86の仮想機をサポートする縮小命令セット・コンピューター（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の仮想機からRISCへの二進法命令の翻訳効率はRISCとX86アーキテクチャの類似性に非常に頼っている。しかし、X86アーキテクチャの中の固定小数点演算命令にフラグビット演算が利用できること、X86アーキテクチャにおける80ビットの浮動小数点操作と浮動小数点スタック演算、セグメント基準アドレスレジスタがあることなどの特性を含む多数のX86アーキテクチャの特性がRISCアーキテクチャには存在しない。そのため、RISCのプロセッサでのX86の仮想機が演算するとき、相違するアーキテクチャの命令の翻訳問題によって、二進法の命令の翻訳効率が低下し、演算速度が高められない。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の目的はX86の仮想機をサポートするRISCプロセッサ装置及び方法を提供するにある。これらの装置及び方法は、RISCプロセッサの性能を向上させる。
【課題を解決するための手段】
【０００９】
本発明の目的を実現するため、X86の仮想機をサポートするRISCプロセッサを提供し、このRISCプロセッサは、命令モジュール、デコーダ、検索テーブル、固定小数点演算部分と浮動小数点演算部分、浮動小数点レジスタヒープを含んでいる。その中：
前記の命令モジュールはX86の仮想機をサポートする仮想機の命令セットを保存することに使われる。
【００１０】
前記のデコーダは前記の仮想機の命令セットの命令をデコーディングする間に、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいて、デコーディングした後に、固定小数点演算部分または浮動小数点演算部分に出力することに使われる。
【００１１】
前記の検索テーブルは、X86のプログラムにおけるジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力に基づいてX86のプログラムにおけるジャンプアドレスからMIPSジャンプアドレスへの翻訳に対する高速の検索をサポートし、仮想機の性能を向上させることに使われる。
【００１２】
前記の固定小数点演算部分はデコーダの出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行した結果を出力することに使われる。
前記の浮動小数点演算部分はデコーダの出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行した結果を出力することに使われる。
前記の浮動小数点レジスタヒープは、浮動小数点制御レジスタ、浮動小数点レジスタスタック、および第一から第三までの浮動小数点レジスタを含む。
前記のデコーダは、さらに、TOPポインタレジスタを含む。
前記のTOPポインタレジスタは、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。
前記のデコーダは、さらに、浮動小数点レジスタスタックを使用する浮動小数点演算命令をデコードするときに、前記のTOPポインタレジスタの値に基づいて当該浮動小数点演算命令のソース論理レジスタ番号または目標論理レジスタ番号を修正し、さらに当該浮動小数点演算命令の内容に基づいて当該TOPポインタレジスタの値を修正することに使われる。
【００１３】
前記のX86の仮想機をサポートするRISCプロセッサは、さらにメモリーアクセス実行部分、メモリーおよびデータ通路を含む。
前記のメモリーアクセス実行部分はデコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行う。
【００１４】
前記のX86の仮想機をサポートするRISCプロセッサは、さらに汎用物理レジスタヒープを含み、前記の汎用物理レジスタヒープはオーバーフローチェックレジスタ、上界、下界アドレスレジスタ、シミュレートフラグレジスタおよび仮想機モード制御レジスタを含む。
【００１５】
前記のオーバーフローチェックレジスタはRISCプロセッサがシミュレートしたスタックレジスタに対して浮動小数点アクセスを行うときの、スタックオーバーフローの例外チェックの結果を保存することに使われる。
【００１６】
前記の上界、下界アドレスレジスタはX86のプロセッサの限界があるメモリーアクセスモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。
前記のシミュレートフラグレジスタはX86のプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われる。
【００１７】
前記の仮想機モード制御レジスタは一つの制御ビットフラグを含む。該制御ビットフラグが1であるときには、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該制御ビットフラグが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。
【００１９】
前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。
【００２０】
前記のデコーダは命令処理モジュールとモード識別モジュールを含む。その中：
前記の命令処理モジュールは仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分または浮動小数点演算部分に出力することに使われる。
【００２１】
前記のモード識別モジュールは命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュールは多数セーブデコードモジュール及び/または多数ロードデコードモジュールを含む。
【００２２】
前記の多数セーブデコードモジュールは入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてメモリーアクセス実行部分へ出力して実行することに使われる。
【００２３】
前記の多数ロードデコードモジュールは入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そして前記の複数の内部操作の中に分配し、メモリーアクセス実行部分へ出力して実行することに使われる。
【００２４】
前記のモード識別モジュールはさらにプレフィックス命令デコードモジュールとフラグビット命令デコードモジュールを含む。
前記のフラグビット命令デコードモジュールはEFLAGS稼動モードをシミュレートする作業モードであるEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタをその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。
【００２５】
前記のプレフィックス命令デコードモジュールはプレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる。
プレフィックス命令の範囲のパラメータがｎであるとき、デコーダはさらにプレフィックス命令カウンターを含む。プレフィックス命令カウンターはプレフィックス命令に影響され、かつシフト命令が存在しない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲のパラメータと等しい。
【００２６】
前記のデコーダはさらに検索テーブルモジュールを含む。その中：
前記の検索テーブルモジュールは検索テーブルに関連する命令に基づき、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。
【００２８】
前記の固定小数点演算部分はフラグ読み書きモジュール、フラグ演算モジュール、例外処理モジュールおよびプレフィックス例外制御レジスタを含む。
前記のフラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる。
【００２９】
前記のフラグ演算モジュールは演算するの間にRISCプロセッサがX86の仮想機の稼動モードであるときに、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットか複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。
【００３０】
前記の例外処理モジュールはプレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせるとともに、EPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。
【００３１】
前記のプレフィックス例外制御レジスタは例外が発生した命令は前記のプレフィックス命令によって影響されたかどうかを記録し、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻る場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。
【００３２】
前記の浮動小数点演算部分はポインタ操作モジュール、スタックオーバーフロー判断モジュール、および変換モジュールを含む。
前記のポインタ操作モジュールは前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。
【００３３】
前記のスタックオーバーフロー判断モジュールは指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタを操作し、浮動小数点アクセスするときのスタックオーバーフロー例外のチェックを行うことに使われる。
【００３４】
前記の変換モジュールは拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。以下のようなステップを含む：
ステップA：RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する；
ステップB：命令を読み込み、命令の仮想機命令セットのモードを区別し、命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、区別された仮想機命令セットのモードによって命令をデコーディングした後出力する；
ステップC：前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。
前記のステップAは、スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決めるステップと、三つの汎用レジスタを任意に選択し、第一浮動小数点レジスタ、第二浮動小数点レジスタと第三浮動小数点レジスタとして、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用するステップとを含む。
前記のステップBは、デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存し、浮動小数点レジスタスタックを使用する浮動小数点命令をデコードするときに、前記のTOPポインタレジスタの値に基づいて当該浮動小数点命令のソース論理レジスタ番号または目標論理レジスタ番号を修正し、さらに当該浮動小数点命令の内容に基づいて当該TOPポインタレジスタの値を修正するステップを含む。
前記のステップCは、浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視するステップと、高速の検索をサポートする検索テーブルに関連する命令を実行して、目標命令アドレスの値を獲得しまたは目標アドレスへジャンプさせて実行するステップとを含む。
【００３５】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはEFLAG命令をサポートするとき、
前記のステップAは、さらに、
RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタが使用できることと示すステップＡ１を含み、
前記のステップBは、さらに、
デコーダは演算がEFLAGS稼動モードをシミュレートするモードであることを識別したとき、違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップＢ１を含み、
前記のステップCは、さらに、
RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み込む/書き込むことによって演算状態を獲得/保存することを実現し、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行するステップＣ１を含む。
【００３６】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートであるとき、
前記のステップAは、さらに、
一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタックの0〜7のスタックレジスタの状態を示すステップＡ２を含み、
前記のステップBは、さらに、
新たに増えたスタックオーバーフロー判断命令をデコードし、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードするステップＢ２を含み、
前記のステップCは、さらに、
指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタを操作し、浮動小数点スタックオーバーフローのチェックを行い、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データとの間のデータ変換を実行するステップＣ２を含む。
【００３７】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の保存構造に対するサポートであるとき、
前記のステップAは、さらに、
RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタに設置するステップＡ３を含み、
前記のステップBは、さらに、
X86の仮想機の命令セットからMIPS命令セットへの翻訳を行うとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られるステップＢ３を含み、
前記のステップCは、さらに、
固定小数点演算部分はデコードした後のメモリーアクセス命令の中に、上界アドレスレジスタに保存された上界アドレスと/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスの有効性を判断し、命令操作数アドレスと命令アドレスの両方が有効であるときには、メモリーアクセス操作が実行され、そうでないときには、アドレスエラーの例外が発生するステップＣ３を含む。
【００３８】
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは仮想のメカニズムに対するサポートであるとき、
前記のステップAは、さらに、
プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別し、またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力し、あるいはX86の仮想機をサポートするRISCプロセッサが起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込むステップＡ４を含み、
前記のステップBは、さらに、
命令をデコードする間に、区別した命令の仮想機命令セットのモードに基づき、区別した仮想機命令セットのモードによって命令をデコードした後に出力し、またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を識別かつデコードし、あるいはデコーダが検索テーブルに関係する命令を識別しデコードするステップＢ４を含み、
前記のステップCは、さらに、
固定小数点演算部分はプレフィックス命令による影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算し、またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送って操作を実行するステップＣ４を含む。
【図面の簡単な説明】
【００３９】
【図１】本発明のX86の仮想機をサポートするRISCプロセッサ装置の構造の概略図である。
【図２】本発明のX86の仮想機をサポートするRISCプロセッサのデータ処理方法のフローチャートである。
【発明を実施するための形態】
【００４０】
本発明の目的、技術の解決策、および本発明の利点をより明確にするため、以下に付属の図面と実施形態とともに参照し、さらに本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ここで説明される例は、本発明を解釈するのに使用されるが、本発明の範囲を限定することを意図したものではないのが理解されるべきである。
【００４１】
本発明の好ましい実施形態では、MIPS64命令セットのRISCプロセッサを実例として、本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ただし、ここで説明される例は、本発明の範囲を限定することを意図したものではなく、本発明の範囲が本発明の付属の特許請求の範囲で限定するのが理解されるべきである。
【００４２】
本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法においては、X86とRISCプロセッサ構造のセマンティックの差を解決し、RISCプロセッサにおいてX86プロセッサに対する互換性を実現するために、RISCプロセッサにおいて以下のいくつかの問題を解決する必要がある：
１．  EFLAG命令が利用できること；
２．浮動小数点のフォーマットと浮動小数点スタックが利用できること；
３．保存構造が利用できること；
４．仮想のメカニズムが利用できること。
【００４３】
図１に示されたように、本発明のX86の仮想機をサポートするRISCプロセッサは、命令モジュール１、デコーダ２、検索テーブル（表示されていない）、固定小数点演算部分３、汎用物理レジスタヒープ７、浮動小数点演算部分４、浮動小数点物理レジスタヒープ８、メモリーアクセス実行部分５、メモリーおよびデータ通路６を含んでいる。
【００４４】
前記の命令モジュール１はX86の仮想機をサポートする仮想機の命令セットを保存することに使われる。前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。
【００４５】
前記のデコーダ２は、前記の仮想機の命令セットの命令をデコーディングするとき、命令の仮想機命令セットのモードを区別し、区別された仮想機命令セットのモードによって、デコーディングした後固定小数点演算部分３または浮動小数点演算部分４に命令を出力することに使われる。
【００４６】
前記の検索テーブルは、X86のプログラムの中のジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力によってX86のプログラムの中のジャンプアドレスからMIPSジャンプアドレスへの翻訳を迅速に検索することができる。
【００４７】
前記の固定小数点演算部分３は、デコーダ２の出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行の結果を出力することに使われる。
前記の浮動小数点演算部分４は、デコーダ２の出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行の結果を出力することに使われる。
【００４８】
前記のメモリーアクセス実行部分５は、デコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行うことに使われる。
前記のデコーダは、命令処理モジュール２１、モード識別モジュール２４、TOPポインタレジスタ２２と検索テーブルモジュール２３を含むのが好ましい。
【００４９】
前記の命令処理モジュールは、仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分３、浮動小数点演算部分４またはメモリーアクセス実行部分５に出力することに使われる。
【００５０】
前記のモード識別モジュール２４は、命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュール２４は、多数セーブデコードモジュール２４４及び/または多数ロードデコードモジュール２４５を含む。
【００５１】
前記の多数セーブデコードモジュール２４４は、入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令をメモリーアクセス実行部分５へ出力して実行することに使われる。
【００５２】
前記の多数ロードデコードモジュール２４５は、入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令を前記の複数の内部操作の中に分配してメモリーアクセス実行部分５へ出力して実行することに使われる。
【００５３】
前記のモード識別モジュール２４は、さらにプレフィックス命令デコードモジュール２４１とフラグビット命令デコードモジュール２４３を含む。
前記のフラグビット命令デコードモジュール２４３は、EFLAGS稼動モードをシミュレートしているEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタ７１をその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。
【００５４】
前記のプレフィックス命令デコードモジュール２４１は、プレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる；さらに、前記のプレフィックス命令の範囲パラメータがｎとなるとき、デコーダ２はさらにプレフィックス命令カウンター２４２を含む。プレフィックス命令カウンターは、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲パラメータと同じである。
【００５５】
前記のTOPポインタレジスタ２２は、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。
前記の検索テーブルモジュール２３は、検索テーブルに関連する命令に基づき、検索テーブルを利用してX86のソース命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。
【００５６】
前記の固定小数点演算部分３は、フラグ読み書きモジュール３１、フラグ演算モジュール３２、例外処理モジュール３４およびプレフィックス例外制御レジスタ３３を含む。
前記のフラグ読み書きモジュール３１は、シミュレートフラグレジスタ７１のフラグビットの値を読み書きすることに使われる。
【００５７】
前記のフラグ演算モジュール３２は、演算の間にRISCプロセッサがX86の仮想機の稼動モードである場合、演算の結果から得られたシミュレートフラグレジスタのフラグビットか、またはシミュレートフラグレジスタのフラグビットの1ビット又は複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。
【００５８】
前記の例外処理モジュール３４は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせ、同時にEPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。
【００５９】
前記のプレフィックス例外制御レジスタ３３は、例外が発生した命令が前記のプレフィックス命令に影響されたかどうかを記録する、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻った場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。
【００６０】
前記の汎用物理レジスタヒープ７は、オーバーフローチェックレジスタ７２、上界、下界アドレスレジスタ７４、シミュレートフラグレジスタ７１および仮想機モード制御レジスタ７３を含む。
【００６１】
前記のオーバーフローチェックレジスタ７２は、RISCプロセッサでシミュレートしたスタックレジスタに浮動小数点アクセスをするとき、スタックオーバーフロー例外チェックの結果があるかどうかを検出することに使われる。
【００６２】
前記の上界、下界アドレスレジスタ７４は、X86のプロセッサの限界があるメモリーアクセスのモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。
【００６３】
前記のシミュレートフラグレジスタ７１は、X86のプロセッサのフラグレジスタのフラグビットを擬似的に実現することに使われる。
前記の仮想機モード制御レジスタ７３は、一つの制御ビットフラグを含む。該制御ビットフラグが1になるときには当該の命令がX86の仮想機の命令セットモードで稼動していること、該制御ビットフラグが0になるときには当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。
【００６４】
前記の浮動小数点演算部分４は、ポインタ操作モジュール４１、スタックオーバーフロー判断モジュール４３、および変換モジュール４２を含む。
前記のポインタ操作モジュール４１は、前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック８３の操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更し、かつ監視することに使われる。
【００６５】
前記のスタックオーバーフロー判断モジュール４３は、指定した浮動小数点レジスタスタック８３の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ７２を操作し、浮動小数点アクセスを行うときのスタックオーバーフロー例外チェックを実行することに使われる。
【００６６】
前記の変換モジュール４２は、拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
前記の浮動小数点レジスタヒープ８は、浮動小数点制御レジスタ８１、0〜7番の浮動小数点レジスタスタック８３および第１〜３の浮動小数点レジスタ８２を含む。
【００６７】
前記の第１〜３の浮動小数点レジスタ８２の三つのレジスタは、前記の0〜7番の浮動小数点レジスタスタック８３と交差して重なるように応用することができる。
前記のメモリーアクセス実行部分５は、合併部分と上、下界判断モジュールを含む。
【００６８】
前記の合併部分は、多数ロードデコードモジュール２４５がメモリーのロード操作を命令デコードした後、且つ実行部分が実行する前に、複数の内部操作を合併することに使われる。
【００６９】
前記の上、下界判断モジュールは、限界のあるメモリーアクセスが利用できるとき、上界、下界のアドレスを判断し、メモリーアクセス命令に含まれるアドレスの有効性を判断する。
【００７０】
図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。この方法は、以下のようなステップを含む：
ステップA：RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する；
ステップB：命令を読み込み、命令の仮想機命令セットのモードを区別する；命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、同仮想機命令セットのモードで命令をデコーディングした後に出力する；
ステップC：前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。
【００７１】
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、EFLAG命令に対するサポートである場合、
前記のステップAは具体的に以下の通りである：
ステップA1：RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタ７１が使用できることを示す；
前記のステップBは具体的に以下の通りである：
ステップB1：デコーダは演算がEFLAGS稼動モードをシミュレートしていると識別し、違う命令に基づき、シミュレートフラグレジスタ７１をソースレジスタ及び/または目標レジスタにデコードする；
前記のステップCは具体的に以下の通りである：
ステップC1：RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタ７１のフラグビットの値を読み込む/書き込むことによって演算状態の獲得/保存を実現し、且つ／あるいはシミュレートフラグレジスタ７１のフラグビットの値に基づき、制御が行われる。
【００７２】
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、
前記のステップAは具体的に以下の通りである：
ステップA2：スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック８３の操作をシミュレートするかどうかを決める；あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタック８３の0〜7のスタックレジスタの状態を示す；または三つの汎用レジスタを任意に選択して第一から第三浮動小数点レジスタ８２とし、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用する；
前記のステップBは具体的に以下の通りである：
ステップB2：デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存する；または新たに増えたスタックオーバーフロー判断命令をデコードする；あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードする；
前記のステップCは具体的に以下の通りである：
ステップC2：浮動小数点レジスタスタック８３操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更、監視する；または指定した浮動小数点レジスタスタック８３の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタ７２を操作し、浮動小数点スタックオーバーフローのチェックを行う；あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの間のデータ変換が実行される。
【００７３】
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の保存構造に対するサポートである場合、
前記のステップAは具体的に以下の通りである：
ステップA3：RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ７４として設置する；
前記のステップBは具体的に以下の通りである：
ステップB3：X86の仮想機の命令セットからMIPS命令セットへの翻訳の際に、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られる；
前記のステップCは具体的に以下の通りである：
ステップC3：固定小数点演算部分は、デコードされた後のメモリーアクセス命令において、上界アドレスレジスタに保存された上界アドレス及び/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスの有効性を判断する；命令操作数アドレスと命令アドレスの両方が有効となるとき、メモリーアクセス操作が実行される；そうしないと、アドレスエラー例外が発生する。
【００７４】
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、仮想のメカニズムに対するサポートである場合、
前記のステップAは具体的に以下の通りである：
ステップA4：プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別する；またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力する； RISCプロセッサのX86の仮想機が起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込む；
前記のステップBは具体的に以下の通りである：
ステップB4：命令をデコードする間に、区別された命令の仮想機命令セットのモードに基づき、同仮想機命令セットのモードで命令をデコードした後に出力する；またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を識別してデコードする；あるいはデコーダが検索テーブルの相関命令を識別する；
前記のステップCは具体的に以下の通りである：
ステップC4：固定小数点演算部分は、プレフィックス命令によって影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算する；またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送ってその操作を実行する；あるいは検索テーブルの相関命令を実行して、目標命令アドレスの値を獲得し、または目標アドレスへジャンプさせて実行する。
【００７５】
以下に、プロセッサがX86の仮想機をサポートするデータ処理のプロセスは、EFLAG命令に対するサポートである場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法について詳しく説明する。
【００７６】
EFLAG命令をサポートするために、二つの方式を提供する：一つは物理レジスタヒープの中の各物理レジスタを64ビットのデータビットと8ビットのフラグビットを含む72ビットに拡張する。演算するとき演算結果のデータ部分とフラグ部分の両方を目標レジスタに書き込む。同時にデコーダ２の中に最新のフラグビットポインタReflagを設置し、このポインタは最新のフラグビットと結合する汎用レジスタの論理番号を示す。もう一つは物理レジスタヒープの中に内部論理レジスタを追加設置してX86のEFLAGフラグビットを実現し、EFLAGを修正するすべての演算命令に対して新しい相関命令を増やして、EFLAGを修正することのみに使用する。
【００７７】
以上の二種類の方式のうち、一つ目では、各レジスタにおいて“横に”EFLAGビットを増やす；二つ目では、すべてのレジスタにおいて“縦に”一つのレジスタを増やしてEFLAGビットの保存のみに使う。
【００７８】
一つの実施可能な方式では、X86_EFLAGSフラグビットをサポートするために、本発明に係るX86の仮想機をサポートするRISCプロセッサ装置において、前記のシミュレートフラグレジスタ７１（M-EFLAGS）がX86の命令セットのCISCプロセッサのフラグレジスタ（EFLAGS）のフラグビットを擬似的に実現することに使われる。該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
【００７９】
以下に本発明のX86の仮想機をサポートするRISCプロセッサのレジスタフラグの処理手順について詳しく説明する。この処理手順は、以下のステップを含む。
ステップ110：RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、即ちシミュレートフラグレジスタ７１が使用できることをし、デコーダ２は演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードであると識別し、そして違う命令に基づき、シミュレートフラグレジスタ７１をソースレジスタ及び/または目標レジスタにデコードする；
シミュレートフラグレジスタ（M-EFLAGS）がX86の命令セットのフラグレジスタ（EFLAGS）のフラグビットを擬似的に実現し、該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
【００８０】
シミュレートフラグレジスタ７１が利用できるとき、該演算が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）に送り込む。
【００９１】
ステップ120：RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタのフラグビットの値を読み書きし、あるいは/及びシミュレートフラグレジスタのフラグビットの値に基づき制御が行われる。
【００９２】
前記のステップ120において、シミュレートフラグレジスタのフラグビットの値の読み書きは以下のステップを含む。
ステップ121：RISCプロセッサがX86の仮想機の稼動モードである場合、1ビット又は複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスク（mask）の値に基づいて、シミュレートフラグレジスタのフラグビットの値の1ビット或いは複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ７１のフラグビットの値を目標レジスタの中に保存する。
【００９３】
ステップ122：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に設定させる。
【００９９】
前記のステップ120において、前記の制御の流れは以下のステップを含む。
ステップ121。艨F演算の結果に基づいてシミュレートフラグレジスタ（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ビットを修正するだけである。
ステップ122。シミュレートフラグレジスタ（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の空スロットの値で実現された。
【０１０２】
以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスがX86の浮動小数点のフォーマットと浮動小数点スタックをサポートする場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法の流れを詳しく説明する。
【０１０３】
X86は一つ特別の演算部分を提供し、この部分は80ビットの浮動小数点の精度をサポートし、しかもスタック操作方式である、以上特徴はRISCプロセッサと大いに違う。本発明は、浮動小数点のフォーマットと浮動小数点スタックに対するサポートを実現するために、三つの64ビット浮動小数点数と80ビット浮動小数点数の間の変換命令を増やし、80ビット浮動小数点数から64ビット浮動小数点数に変換する命令を１つ設置し、64ビット浮動小数点数から80ビット浮動小数点数に変換する命令を２つ設置した。
【０１０４】
一つの実施可能な方式では、MIPS命令セットを含むRISC物理レジスタヒープの32個汎用浮動小数点レジスタは、第一から第三浮動小数点レジスタ８２としてダイナミックに任意の三つの汎用レジスタを選択し、変換作業に使用する。変換作業が終わったあと、これら三つの汎用レジスタは再びその他の汎用レジスタと無差別で使用される。
【０１０５】
その中、前記の第一浮動小数点レジスタは、拡張倍精度浮動小数点データの符号ビットとランクを保存することに使われ、該レジスタの低い順位の16ビットを占める。
前記の第二浮動小数点レジスタは、拡張倍精度浮動小数点データの仮数部分を保存することに使われ、全部で64ビットである。
【０１０６】
前記の第三浮動小数点レジスタは倍精度浮動小数点データを保存することに使われる。
プロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、X86の仮想機をサポートするRISCプロセッサのデータ処理方法の流れは以下のステップを含む。
【０１０７】
ステップ210：メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわけ、それぞれ違う第一浮動小数点レジスタと第二浮動小数点レジスタの中に保存し、浮動小数点演算部分４によって64ビットの倍精度浮動小数点データに変換し、第三浮動小数点レジスタの中に保存する。
【０１０８】
ステップ210は具体的に以下のステップを含む。
ステップ211：メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわける。
【０１０９】
一つの80ビットの浮動小数点データの第64ビットでそのデータをわけ、第80ビットから第64ビットまでは第一部分であり、全部で16ビットである。第63ビットから第0ビットまでは第二部分であり、全部で64ビットである。そのデータをわけた後、ユーザが既存の一種類の読み込む方式（MIPSが多種類の読み込む方式を提供する）を選択し、それぞれ二つの部分を二つの浮動小数点レジスタ$f（i），$f（j）に読み込む。
【０１１０】
ステップ212：浮動小数点レジスタ$f（i）の中に80ビットの拡張倍精度浮動小数点データの符号ビットとランクを保存し、該レジスタの低い順位の16ビットを占める。
ステップ213：浮動小数点レジスタ$f（ｊ）の中に80ビットの拡張倍精度浮動小数点データの仮数部分を保存し、全部で64ビットである。
【０１１１】
ステップ214：浮動小数点レジスタ$f（i）と浮動小数点レジスタ$f（ｊ）をソースレジスタとして、浮動小数点レジスタ$f（t）を目標レジスタとして、浮動小数点レジスタ$f（i）と浮動小数点レジスタ$f（ｊ）の中に保存された80ビットの拡張倍精度浮動小数点データを64ビットの倍精度浮動小数点データに変換する。
【０１１２】
一つの実施可能な方式として、前記の変換は命令(1)によって実行されてもよい。
CVT.D.LD $f(t), $f(i), $f(j)//*拡張倍精度を倍精度に変換する    (1)
MIPS64の命令セットの32ビット命令コードの高い順位の6ビット（31ビット:26ビット）はopcode領域となる。その中のSPECIAL2（opcodeは011100となる）の命令スロットはMIPSのルールによってユーザが自分で定義してもよいものである。本発明の実施例では、既存するMIPS64命令セットの中に保留したSPECIAL2の空スロットの値を利用し、それを定義する。
【０１１３】
式(1)は二つのスタックレジスタ$f(i), $f(j) の拡張倍精度データを倍精度データに変換し、スタックレジスタ$f(t)の中に保存することを表す。
出力された64ビットのデータを浮動小数点レジスタ$f（t）の中に保存し、64ビットの倍精度浮動小数点データが得られる。
【０１１４】
ステップ220：第三浮動小数点レジスタの中の64ビットの倍精度浮動小数点データから符号ビットとランク部分および仮数部分を抽出し、浮動小数点演算部分４によって80ビットの浮動小数点データの符号ビットとランク部分および80ビットの浮動小数点データの仮数部分に変換する。更にこれらをそれぞれ第一浮動小数点レジスタと第二浮動小数点レジスタの中に保存し、二つのレジスタで80ビットの拡張倍精度浮動小数点データを表し、80ビットの浮動小数点データが得られる。
【０１１５】
ステップ220は具体的に以下のステップを含む。
ステップ221：一つの64ビットの倍精度浮動小数点データを浮動小数点レジスタ$f（t）の中に保存する。
【０１１６】
ステップ222：全部で11ビットである浮動小数点レジスタ$f（t）の中の倍精度浮動小数点データの符号ビットとランク部分を抽出し、全部で16ビットである80ビットの拡張倍精度浮動小数点データの符号ビットとランク部分に変換し、浮動小数点レジスタ$f（i）の中に保存する。
【０１１７】
一つの実施可能な方式として、前記の変換は命令(2)によって実行されてもよい。
CVT.UD.D $f(i), $f(t) //*倍精度を拡張倍精度の高位に変換する    (2)
浮動小数点レジスタ$f（t）で示した倍精度データを拡張倍精度データの高い順位の16ビットに変換し、浮動小数点レジスタ$f（i）の中に保存する。
【０１１８】
変換後のランクを0拡張したあとに、64ビットの浮動小数点データが得られる。目標レジスタが64ビットであるため、実は、ここでは16ビットのデータで十分である。しかし、64ビットの目標レジスタ$f（i）の中に保存するために、16ビット以上の48ビットを0拡張し、浮動小数点レジスタ$f（i）の中に保存しなければならない。
【０１１９】
ステップ223：全部で53ビットである浮動小数点レジスタ$f（t）の中の仮数部分を抽出し、全部で64ビットである80ビットの浮動小数点データの仮数部分に変換し、浮動小数点レジスタ$f（j）の中に保存する。
【０１２０】
抽出作業は浮動小数点演算部分４の中で完成し、抽出された53ビットのデータを80ビットの浮動小数点データの仮数部分の64ビットに変換する。
一つの実施可能な方式として、前記の変換は命令(3)によって実行されてもよい。
CVT.LD.D $f(j), $f(t) //*倍精度を拡張倍精度の低位に変換する    (3)
浮動小数点レジスタ$f（t）で示した倍精度データを拡張倍精度データの低い順位の64ビットに変換し、浮動小数点レジスタ$f（j）の中に保存する。
【０１２１】
前記の抽出、変換はIEEE754の基準の関連する規定に従って行われても良い。この分野の技術者が命令(2)に基づいて本発明の変換を実現することはできるため、本発明で詳しく説明しない。
【０１２２】
変換後の仮数を浮動小数点レジスタ$f（j）の中に保存する。
ステップ224：浮動小数点レジスタ$f（i）の値を符号ビットとランクとして、浮動小数点レジスタ$f（j）の値を仮数として、80ビットの拡張倍精度浮動小数点データが得られる。
【０１２３】
本発明の浮動小数点データの変換により、X86ではないアーキテクチャのプロセッサでもX86の中の特別な80ビットの浮動小数点データ型をサポートすることができ、仮想機の二進法の命令の翻訳作業が便利になり、仮想機の効率を向上させるとともに、プロセッサのコンパチビリティを向上させることができる。
【０１２４】
また、X86のアーキテクチャの中に、いくつかの浮動小数点命令に係る浮動小数点レジスタ番号は相対的な値であり、浮動小数点状態文字の中の浮動小数点ループスタックのスタックTOPポインタのTOPと加算した後にのみ、本当の浮動小数点レジスタ番号となる。この問題を解決するため、本発明はデコーダ２にTOPポインタレジスタ２２を設置し、浮動小数点物理レジスタヒープの中の浮動小数点制御レジスタ８１の中に一つのスタックイネーブル信号を設置して、浮動小数点スタックをシミュレートするために八つの浮動小数点レジスタを選択するかどうかを決める。スタックイネーブルビットがセットされた場合は、当該の浮動小数点命令が演算するとき、レジスタ番号が8より小さいレジスタは、デコードするときにTOPの値に基づいて自分のソースまたは目標論理レジスタ番号を修正し、さらに命令の内容に基づきTOP値を修正してプロセッサに送り込む；スタックイネーブルビットがクリアされた場合は、演算のときにレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って通常の通りに処理を正常に実行する。
【０１２５】
前記の浮動小数点制御レジスタ８１は、浮動小数点レジスタヒープ８を利用して、浮動小数点レジスタスタック８３のシミュレートをイネーブルさせるか禁止させるかを制御することに使われる。
【０１２６】
このレジスタは、一つのスタックイネーブルビットを維持し、イネーブルビットを1に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートすることが表される；イネーブルビットを0に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートせず、普通な流れで処理が行われることが表せる。
【０１２７】
本発明の実施例では、RISCプロセッサにおいて番号が0〜31である32個の既存浮動小数点レジスタを利用して、X86のプロセッサの浮動小数点レジスタスタック操作をシミュレートする。
【０１２８】
前記のTOPポインタレジスタ２２はTOPポインタ即ちスタックの操作ポインタを維持して、TOPポインタの値を保存することに使われる。このTOPポインタは、読み込まれること、書き込まれること、1増加すること、1減少するなどが可能である。
【０１２９】
前記のポインタ操作モジュール４１は、ポインタレジスタを操作し、浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタのスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。
【０１３０】
一つの実施可能な方式では、浮動小数点制御レジスタ８１の中のスタックイネーブルビットがセットされた場合は、32個の浮動小数点レジスタの中の八つのレジスタを選択し、番号が0〜7であるX86のプロセッサの浮動小数点レジスタスタックのスタックレジスタをシミュレートすることに使用する。
【０１３１】
浮動小数点制御レジスタ８１の中のスタックイネーブルビットは1に設定された場合は、演算の中に使用され、レジスタがシミュレートした浮動小数点レジスタスタックが存在することを表す。そして浮動小数点演算命令の中に使われた番号が8より小さいレジスタの全てが、浮動小数点レジスタスタック８３のスタックレジスタとして使用され、これによりX86のプロセッサの浮動小数点レジスタスタックをシミュレートする。
【０１３２】
その後、ポインタ操作モジュールはTOPポインタを使用してスタックレジスタ番号の変換、即ちユーザで見た浮動小数点レジスタ番号とプログラムで使用した浮動小数点レジスタ番号との変換を行う。たとえば、レジスタ番号は、スタックTOPからi番目のユニットのレジスタST(i)にTOPポインタを加算した値を指す。TOPポインタの値が2であると、ST(0)が第2番のレジスタであり、ST(1)が第3番のレジスタである。オーバーフローに対しても対応の処理が行われるとき、このグループのレジスタが一つのループスタックになり、X86の中の浮動小数点レジスタスタックの機能をシミュレートする、という本発明の目的を達成できる。そして次の処理を行う。なお、つぎの作業は、スタックイネーブルビットがセットされない場合と同じである。
【０１３３】
浮動小数点制御レジスタ８１の中のスタックイネーブルビットが0に設定された場合、即ちクリアされた場合は、演算のときレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って処理を通常の通りに実行する。
【０１３４】
以下に本発明に係るX86の仮想機をサポートするRISCプロセッサの浮動小数点スタック操作をシミュレートする方法の流れをさらに詳しく説明する。この方法では、RISCプロセッサの八つの浮動小数点レジスタにより浮動小数点レジスタスタック８３を構成し、浮動小数点制御レジスタ８１を通じてX86のTOPポインタ機能即ちスタックポインタ操作機能をシミュレートし、浮動小数点レジスタのスタック操作をシミュレートすることが完成される。
【０１３５】
本発明のX86の仮想機が利用できるRISCプロセッサの浮動小数点レジスタのスタック操作をシミュレートする方法は以下のステップを含む。
ステップ2100：スタックイネーブルビットに基づいて、八つの浮動小数点レジスタを選択して浮動小数点レジスタスタックの中の八つのスタックレジスタをシミュレートし、浮動小数点レジスタのスタック操作をシミュレートし、さらにポインタレジスタを設置するかどうかを決める。
【０１３６】
前記のステップ2100は以下のステップを含む。
ステップ2110：浮動小数点制御レジスタ８１の中に1ビットを浮動小数点スタックイネーブルビットとする；イネーブルビットを1に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートし、浮動小数点スタック操作が行われることが表される；イネーブルビットを0に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートせず、浮動小数点スタック操作ができず、通常通りの流れで処理が行われることが表される。
【０１３７】
ステップ2120：一つの少なくとも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)を使用する。
【０１４１】
ステップ2200：浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視する。
【０１４２】
前記のステップ2200は以下のステップを含む。
ステップ2210：スタック操作モードを設置し、浮動小数点スタックイネーブルビットを1に設定し、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを許容する。
【０１４３】
一つの実施可能な方式では、シミュレート浮動小数点スタックモードを設置し、X86の浮動小数点スタックモードを1にするために以下の命令で実行する。
その命令フォーマット：SETTM
本発明のメモリーアクセス拡張命令は、MIPS命令セットにおけるSPECIAL2の空スロットの保留した値で、拡張命令を定義する。
【０１４４】
命令でイネーブルビットを1にする操作が完成し、X86の浮動小数点スタックモードをセットし、ユーザがX86の浮動小数点スタック使用して浮動小数点操作することを許容する。
【０１４５】
ステップ2220：スタック操作モードをクリアし、浮動小数点スタックイネーブルビットを0にし、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを禁止する。
【０１４６】
一つの実施可能な方式として、本発明の実施例ではシミュレート浮動小数点スタックモードをクリアし、X86の浮動小数点スタックモードを0にする命令フォーマット：CLRTM
これはX86の浮動小数点スタックモードをクリアすることで、ユーザがX86の浮動小数点スタックを使用することを禁止し、MIPSプロセッサの浮動小数点レジスタを使用して浮動小数点操作を行わなければならない。
【０１４７】
このセット、クリアのスタックポインタ操作命令は、それぞれ浮動小数点レジスタスタックの活性化、禁止処理を実現することができる。
ステップ2230：スタック操作ポインタの値が1増加し、即ちTOPポインタの値が1増加する；
一つの実施可能な方式として、本発明の実施例では、スタックポインタの値が1増加し、即ちTOPポインタの値が1増加する命令フォーマット：INCTOP
ステップ2240：スタック操作ポインタの値が1減少し、即ちTOPポインタの値が1減少する；
一つの実施可能な方式として、本発明の実施例ではスタックポインタの値が1減少し、即ちTOPポインタの値が1減少する命令フォーマット：DECTOP
該TOPポインタの値が1増加する命令、1減少する命令は、それぞれX86のプロセッサの浮動小数点スタックのスタックプッシュ、スタックポップをシミュレートすることができる。
【０１４８】
ステップ2250：スタック操作ポインタの値を読み出し、即ちTOPポインタの値を読み出す；
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を読み出す操作命令のフォーマット：MFTOP  rd
その命令の機能はX86の浮動小数点スタックTOPポインタの値をレジスタGPR[rd]に読み込むことである。
【０１４９】
ステップ2260：スタック操作ポインタの値を書き込み、即ちポインタレジスタの中に当時のTOPポインタの値を書き込む；
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を書き込む操作命令のフォーマット：MTTOP  imm
その命令の機能はX86の浮動小数点スタックTOPポインタに3ビットの即値immを書き込むことである。
【０１５０】
そのTOPポインタを読み込む命令及び同TOPポインタを書き込む命令は浮動小数点スタックの操作制御に便利である。
本発明のX86の仮想機をサポートする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値は変化しない。
【０１５２】
また、浮動小数点スタックの存在によって、一つの浮動小数点スタックオーバーフローのチェックメカニズムが必要となり、このチェックメカニズムはリアルタイムで浮動小数点スタックの状態を監視し、浮動小数点スタックのオーバーフローの例外の広げることを防ぐ。
【０１５３】
本発明の実施例では、本発明のRISCプロセッサにおいて、前記の浮動小数点レジスタスタック８３は、浮動小数点演算が直接できる八つのスタックレジスタからなり、順番で番号が付けられ、それぞれ0〜7になる；
本発明の実施例のRISCプロセッサにおいて、前記のオーバーフローチェックレジスタ７２は、X86の浮動小数点フラグレジスタ中のTAG機能を実現し、浮動小数点レジスタスタック８３中のスタックレジスタに浮動小数点アクセスするときスタックオーバーフロー例外が発生するかどうかをチェックすることに使われる。オーバーフローチェックレジスタ７２は、少なくとも8ビットの複数ビットレジスタであり、TAGビット即ちオーバーフローチェック機能ビットを表し、それぞれ浮動小数点レジスタスタック８３のスタックレジスタ0〜7番の状態を表す。
【０１５４】
本発明の実施例において、一つの汎用レジスタr(i)を選択し、その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック８３のスタックレジスタ0〜7番の状態を表す。
【０１５５】
汎用レジスタr(i) の低い順位の8ビットの中、各ビットが一つの浮動小数点レジスタスタック８３中のスタックレジスタと対応し、各ビットの値は違う状態と示す。ここで、0が空を表し、スタックプッシュができるが、スタックポップができない。スタックポップが行われると、オーバーフローが発生することとなる；1が有効を表し、再度のスタックプッシュができない。再度のスタックプッシュが行われると、オーバーフローが発生することとなる。
【０１５６】
一つの実施可能な方式では、本発明のRISCプロセッサは、0〜31、全部で32個の複数ビット浮動小数点レジスタからなる浮動小数点レジスタスタック８３を含む。その中の0〜7番、全部で八つのスタックレジスタがX86の浮動小数点レジスタスタック８３の八つのスタックレジスタをシミュレートする；RISCプロセッサは、さらに32ビットの汎用レジスタ(固定小数点) r(i)を含む。その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック８３のスタックレジスタ0〜7番の状態を表し、X86の浮動小数点スタックのメカニズムのTAG機能を実現する。
【０１５７】
前記のスタックオーバーフロー判断モジュール４３は、指定した浮動小数点レジスタスタック８３の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ７２を操作し、浮動小数点スタックオーバーフローのチェックを行うことに使われる。
【０１５８】
以下に本発明X86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法の流れをさらに詳しく説明する。RISCプロセッサの八つのスタックレジスタにより浮動小数点レジスタスタック８３を構成し、一つの汎用レジスタによりオーバーフローチェックレジスタ７２を構成し、その低い順位の8ビットでX86のTAG機能をシミュレートし、各ビットが一つのスタックレジスタの違う状態と対応する。
【０１５９】
本発明のX86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法は以下のステップを含む。
ステップ21000：指定された浮動小数点レジスタスタック中のスタックレジスタをチェックし、スタックレジスタの値に基づきオーバーフローチェックレジスタ７２を操作し、浮動小数点スタックオーバーフローのチェックを行う。
【０１６０】
前記のステップ21000は以下のステップを含む。
ステップ21100：浮動小数点レジスタスタック中の指定したスタックレジスタが空であるかどうかをチェックする。空である場合には、指定したオーバーフローチェックレジスタ７２のTAGビットの対応ビットを1にし、次のステップに進む；空でない場合には、浮動小数点スタックオーバーフロー例外が発生する。
【０１６１】
ステップ21200：浮動小数点レジスタスタック中の指定したスタックレジスタが有効であるかどうかをチェックする。有効である場合には、指定したオーバーフローチェックレジスタ７２のTAGビットの対応ビットを0にし、次のステップに進む；有効でない場合には、浮動小数点スタックオーバーフロー例外が発生する。
【０１６２】
ステップ21300：浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中のデータをスタックポップする必要がない場合には、指定したオーバーフローチェックレジスタ７２のTAGビットの値を維持し、次のステップに進む；そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
【０１６３】
ステップ21400：浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつ一つのスタックレジスタ中のデータをスタックポップする必要がある場合には、データをスタックポップする必要があるスタックレジスタに対応するオーバーフローチェックレジスタ７２のTAGビットが対応するビットを0にし、次のステップに進む；そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
【０１６４】
ステップ21500：浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中の全てのデータをスタックポップする必要がある場合には、対応するオーバーフローチェックレジスタ７２のTAGビットに対応する二つのビットを0にし、次のステップに進む；そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
【０１６５】
以下に浮動小数点レジスタのスタックプッシュの操作を例として、RISCプロセッサにおいて行われる浮動小数点スタックオーバーフローのチェックの方法をさらに詳しく説明する。
【０１６６】
まず、RISCプロセッサが浮動小数点レジスタスタックのスタックTOPを確認し、該スタックTOPのスタックレジスタに対応するオーバーフローチェックレジスタ７２のTAGビットを読む出す。
【０１６７】
RISCプロセッサが本発明の浮動小数点レジスタスタックに基づき、浮動小数点レジスタスタックのスタックTOPを判断して確認し、対応した本発明のスタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ７２のTAGビットを確認することは、現在にある技術であり、本発明で創造したものではなく、この分野の技術者は本発明の実施例によって以上の操作を実現できるから、本発明で詳しく説明しない。
【０１６８】
スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ７２の対応するTAGビットが0であるかどうかを判断する。
0である場合、スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ７２の対応するTAGビットを1にし、データを該スタックレジスタに書き込み、そして終わって戻る；
0でない場合、スタックオーバーフロー例外が発生する。
【０１６９】
一つの実施可能な方式として、本発明の実施例において、オーバーフローチェックレジスタr(3)の低い順位の8ビットとして汎用レジスタr(3)を選択し、即ちbit r(3)_0〜bit r(3)_7がそれぞれ浮動小数点レジスタスタック中のスタックレジスタf(0)〜f(7)の状態と対応する。
【０１７０】
1)スタックプッシュ操作が行われ、かつスタックTOPがスタックレジスタf(5)にある場合には、
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が0であるかどうかを判断する；
0である場合、オーバーフローチェックレジスタのbit r(3)_4を1にし、データをスタックプッシュし、スタックレジスタf(5)に保存する；
1である場合、スタックオーバーフロー例外が発生する。
【０１７１】
2)スタックポップ操作が行われ、かつスタックTOPはスタックレジスタf(5)にある場合には、
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する；
1である場合、オーバーフローチェックレジスタのbit r(3)_4をクリアし、データをスタックポップし、指定した浮動小数点レジスタに保存する；
0である場合、スタックオーバーフロー例外が発生する。
【０１７２】
3)演算操作が行われ、かつ２つのソース操作データはそれぞれスタックレジスタf(4)とf(5)の中にある場合には、
オーバーフローチェックレジスタr(3)の第4ビット、即ちbit r(3)_3が1であるかどうかを判断する；
0である場合、スタックオーバーフロー例外が発生する；
1である場合、次のステップに進む；
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する；
1である場合、次のステップに進む；
0である場合、スタックオーバーフロー例外が発生する。
【０１７３】
4)演算とスタックポップ操作が行われ、かつ２つのソース操作データはそれぞれスタックレジスタf(4)とf(5)の中にある場合には、
スタックTOPがスタックレジスタf(5)にあれば、オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する；
0である場合、スタックオーバーフロー例外が発生する；
1である場合、次のステップに進む；
オーバーフローチェックレジスタr(3)の第4ビット、即ちbit r(3)_3が1であるかどうかを判断する；
0である場合、スタックオーバーフロー例外が発生する；
1である場合、次のステップに進む；
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4をクリアし、次の演算操作に進む。
【０１７４】
5)演算と連続のスタックポップ操作が行われ、かつ２つのソース操作データはそれぞれスタックレジスタf(4)とf(5)の中にある場合には、
オーバーフローチェックレジスタr(3)の第4ビット、即ちbit r(3)_3が1であるかどうかを判断する；
0である場合、スタックオーバーフロー例外が発生する；
1である場合、オーバーフローチェックレジスタr(3)の第4ビット、即ちbit r(3)_3をクリアし、次のステップに進む；
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する；
1である場合、オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4をクリアし、次の演算操作に進む；
0である場合、スタックオーバーフロー例外が発生する。
【０１７５】
以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスがX86の保存構造をサポートする場合における本発明のRISCプロセッサのデータ処理の流れを詳しく説明する。
【０１７６】
X86のプロセッサにセグメントレジスタがあるため、ユーザモードであっても、X86の保存、アクセス、アドレッシングと保護方式が比較的に特別なものである。ゆえに、本発明はメモリーアクセスアドレスが界に越えたかどうかを判断できる読み書き操作を提供し、即ちloadとstore操作のソースレジスタの中に、一つのboundレジスタがある。このboundレジスタは、アドレスの演算又はデータの保存に使われるものではなく、アクセスアドレスの比較に使われる。もしアクセスアドレスが該boundレジスタの決めた境に超えたことを発見した場合、アドレスが界を越えた例外が発生するが発生した旨を知らせる。
【０１７７】
アドレスの界が上界と下界に分けられ、メモリーアクセスの有効アドレスを上界以下に、または下界以上に設定しなければならない。これらの命令は、メモリーアクセスアドレスの条件が満足された場合は正常にメモリーアクセスし、そうでない場合はアドレスエラーの例外が発生する。
【０１７８】
仮想機をサポートするRISCプロセッサにおいては、X86の命令セットからRISCプロセッサのMIPS命令セットへの翻訳中にメモリーアクセス操作が行われた場合、メモリーアクセスアドレスの判断を増やして、メモリーアクセスアドレスが界に越えたかどうかを判断し、X86のメモリーアクセス操作の翻訳スピードを増加させる。
【０１７９】
一つの実施可能な方式として、本発明の実施例に係る前記の物理レジスタヒープの上界アドレスレジスタが上界としての有効アドレスを保存することに使われる；また、下界アドレスレジスタが下界としての有効アドレスを保存することに使われる。
【０１８０】
前記の上界、下界アドレスレジスタは物理レジスタ中の任意の汎用物理レジスタであってもよい。
前記の上界、下界判断モジュールは、メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて命令操作データアドレスの有効性を判断する。
【０１８１】
MIPS命令セット中の各メモリーアクセス命令、例えばload命令またはstore命令に、界の判断を増やし、メモリーアクセスアドレスが条件に満足された場合は、これらの命令が正常にメモリーアクセスし、そうでない場合は、MIPS中のアドレスエラーの例外が発生する。
【０１８２】
命令デコードした後、レジスタ中のアドレス限界は命令の一つのレジスタ操作データとして機能し、操作内容データがbase方式に基づいて有効なアドレスを形成した後、該有効アドレスがまずレジスタ中のアドレス限界と比較する。命令のセマンティック条件を満たした場合、即ちレジスタが上界アドレスレジスタである場合、該有効アドレスがレジスタ中のアドレス限界以下であり、また、レジスタが下界アドレスレジスタであり、該有効アドレスがレジスタ中のアドレス限界以上である場合、正常なメモリーアクセス操作が行われる；そうでない場合は、アドレスエラーの例外が発生する。
【０１８３】
本発明の実施例の中、一つの実施可能な方式として、load命令とstore命令を含むMIPS命令セット中の合計２４個のメモリーアクセス命令に界の判断を増やした。
その中、8個の固定小数点命令と4個の浮動小数点命令を含む12個のload命令は、アドレッシング方式がすべてbase方式である。
【０１８４】
これらの命令は、それぞれに上界条件つきのバイトロード、下界条件つきのバイトロード、上界条件つきのハーフワードロード、下界条件つきのハーフワードロード、上界条件つきのワードロード、下界条件つきのワードロード、上界条件つきのダブルワードロード、下界条件つきのダブルワードロード、上界条件つきの単精度浮動小数点数ロード、下界条件つきの単精度浮動小数点数ロード、上界条件つきの倍精度浮動小数点数ロード、下界条件つきの倍精度浮動小数点数ロード命令中の一種類または一種類以上の組み合わせである。
【０１８５】
以下に命令を詳しく説明する。
gsLBLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
【０１８６】
gsLBGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
【０１８７】
gsLHLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１８８】
gsLHGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１８９】
gsLWLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１９０】
gsLWGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１９１】
gsLDLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存する。
【０１９２】
前記の有効アドレスが整列し3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLDGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存する。
【０１９３】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLWLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存する。
【０１９４】
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLWGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存する。
【０１９５】
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLDLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１９６】
gsLDGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０１９７】
本発明の実施例は既存のMIPS64命令セットの中に保留されたLWC2とSWC2の空スロットの値を利用し定義する。MIPS64の命令セットの32ビット命令コードの高い順位の6ビット（31ビット:26ビット）はopcode領域となるため、LWC2と（opcodeは110010となる）SWC2（opcodeは111010となる）の命令スロットはMIPSのルールによってユーザが自分で定義してもよいものである。
【０１９８】
8個の固定小数点命令と4個の浮動小数点命令を含む12個のstore命令はアドレッシング方式がすべてbase方式である。
これらの命令は、それぞれに上界条件つきのバイト保存、下界条件つきのバイト保存、上界条件つきのハーフワード保存、下界条件つきのハーフワード保存、上界条件つきのワード保存、下界条件つきのワード保存、上界条件つきのダブルワード保存、下界条件つきのダブルワード保存、上界条件つきの単精度浮動小数点数保存、下界条件つきの単精度浮動小数点数保存、上界条件つきの倍精度浮動小数点数保存、下界条件つきの倍精度浮動小数点数保存命令中の一種類または一種類以上の組み合わせである。
【０１９９】
以下に命令を詳しく説明する。
gsSBLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容より大きい場合アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存する。
【０２００】
gsSBGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存する。
【０２０１】
gsSHLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーが発生する例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存する。
【０２０２】
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsSHGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０３】
gsSWLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０４】
gsSWGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０５】
gsSDLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０６】
gsSDGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０７】
gsSWLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０８】
gsSWGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２０９】
gsSDLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２１０】
gsSDGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２１１】
同時に上界、下界を判断する命令において、アドレスが同時に上界条件と下界条件を満足しなければならない。一つの限界の条件が満たされないと、限界を越える例外が発生する。
【０２１２】
前記の上界、下界判断モジュールは、メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて、命令アドレスの有効性を判断する。
【０２１３】
一つの実施可能な方式では、RISCプロセッサのMIPS命令セットの中に二つの命令を増やし、レジスタの値の比較に使われる。この二つの命令は、アドレスが界を越えたかどうかを判断することに使われる。アドレスが条件に満足された場合は空操作となり、アドレスが条件に満足されなかった場合はRISCプロセッサにおけるアドレスエラーの例外が発生する。
【０２１４】
そして、二つの命令、即ちgsLE rs，rtとgsGT rs，rtが実現される。以下に命令を詳しく説明する。
gsLE rs，rt
レジスタ中の値を比較し、アドレスエラーの例外が発生する条件を設置する。
【０２１５】
汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較し、GPR[rs]中の値がGPR[rt]中の値以下である場合、次の命令が実行される；GPR[rs]中の値がGPR[rt]中の値よりも大きい場合は、adelの例外が発生する。
【０２１６】
gsGT rs，rt
レジスタ中の値を比較し、アドレスエラーの例外が発生する条件を設置する。
汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較し、GPR[rs]中の値がGPR[rt]中の値より大きい場合、次の命令が実行される； GPR[rs]中の値がGPR[rt]中の値以下である場合は、adelの例外が発生する。
【０２１７】
この二つの命令はアドレスの比較に使われる。rsレジスタ中にアドレスの限界値を保存し、rtレジスタ中に比較しようとする有効アドレスを保存する。もし条件が満たされない場合は、次の命令が実行され、条件が満たされた場合は、アドレスエラーの例外が発生する。
【０２１８】
この二つの命令はそれぞれ汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値以下であり、或いはGPR[rt]中の値よりも大きい場合は、次の命令が実行される；そうではない場合は、アドレスエラーの例外が発生する。ここで、「以下」はgsLE rs，rtに対応する表現であり、「よりも大きい」はgsGT rs，rtに対応する表現である。
【０２１９】
本発明のX86の仮想機をサポートするRISCプロセッサの、限界があるメモリーアクセスの流れは以下のステップを含む。
ステップ31：X86の仮想機をサポートするRISCプロセッサにおいて、物理レジスタヒープ中の二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ７４と設置する
その中、上界アドレスレジスタは上界とした有効アドレスを保存する；下界アドレスレジスタは下界とした有効アドレスを保存する。
【０２２０】
ステップ32：X86の仮想機の命令セットをMIPS命令セットへ翻訳するとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られる。
ステップ33：固定小数点演算部分３は、デコードした後のメモリーアクセス命令において、上界アドレスレジスタに保存された上界アドレス及び/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスの有効性を判断する。
【０２２１】
MIPS命令セット中の各メモリーアクセス命令、例えばload命令またはstore命令において、界の判断を増やし、これらの命令はメモリーアクセスアドレスが条件を満たす場合は正常にメモリーアクセスし、条件を満たさない場合はMIPS中のアドレスエラーの例外が発生する。
【０２２２】
前記のステップ33は以下のステップを含む。
ステップ331：命令デコードした後、レジスタ中のアドレス限界は命令の一つのレジスタ操作データとして機能し、操作内容データがbase方式に基づいて有効なアドレスを形成する；
ステップ332：該有効アドレスがまずレジスタ中のアドレス限界と比較する；
ステップ333：命令のセマンティック条件を満たした場合、即ちレジスタが上界アドレスレジスタである場合、該有効アドレスがレジスタ中のアドレス限界以下であり、また、レジスタが下界アドレスレジスタであり、該有効アドレスがレジスタ中のアドレス限界以上である場合、正常なメモリーアクセス操作が行われる；そうでない場合は、アドレスエラーの例外が発生するとなる。
【０２２３】
具体的に、前記のステップ333において、ロード操作データ(load)命令操作は、
上界条件つきのバイトロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLBLE rt, base, boundである。
【０２２４】
下界条件つきのバイトロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存し、即ちgsLBGT rt, base, boundである。
【０２２５】
上界条件つきのハーフワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存し、即ちgsLHLE rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２２６】
下界条件つきのハーフワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLHGT rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２２７】
上界条件つきのワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合はアドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスによってメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLWLE rt, base, boundである。
前記の有効アドレスが整列しており、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２２８】
下界条件つきのワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後にGPR[rt]に同データを保存し、即ちgsLWGT rt, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２２９】
上界条件つきのダブルワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存し、即ちgsLDLE rt, base, boundである。
【０２３０】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきのダブルワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存し、即ちgsLDGT rt, base, boundである。
【０２３１】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
上界条件つきの単精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存し、即ちgsLWLEC1 ft, base, boundである。
【０２３２】
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの単精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下であれば、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存し、即ちgsLWGTC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２３３】
上界条件つきの倍精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存し、即ちgsLDLEC1 ft, base, boundである。
【０２３４】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの倍精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存し、即ちgsLDGTC1 ft, base, boundである。
【０２３５】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
前記のステップ333において、保存操作データ(store)命令操作は、
上界条件つきのバイト保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存し、即ちgsSBLE rt, base, boundである。
【０２３６】
下界条件つきのバイト保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存し、即ちgsSBGT rt, base, boundである。
【０２３７】
上界条件つきのハーフワード保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存し、即ちgsSHLE rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２３８】
下界条件つきのハーフワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存し、即ちgsSHGT rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２３９】
上界条件つきのワード保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存し、即ちgsSWLE rt, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４０】
下界条件つきのワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存し、即ちgsSWGT rt, base, boundである。
前記の有効アドレスが整列し、もし低い2ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４１】
上界条件つきのダブルワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDLE rt, base, boundである。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４２】
下界条件つきのダブルワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、もし有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDGT rt, base, boundである。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４３】
上界条件つきの単精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存し、即ちgsSWLEC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４４】
下界条件つきの単精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存し、即ちgsSWGTC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４５】
上界条件つきの倍精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDLEC1 ft, base, boundである。
【０２４６】
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの倍精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する；そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDGTC1 ft, base, boundである。
前記の有効アドレスが整列し3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
【０２４７】
前記のステップ33はさらに以下のステップを含む。
ステップ334：同時に上界、下界を判断する命令において、アドレスが同時に上界条件と下界条件を満足しなければならない。一つの限界の条件が満たされないと、限界を越える例外が発生する。
【０２４８】
前記のステップS300の後にさらに以下のステップを含むことがより好ましい。
ステップ34：メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて、命令アドレスの有効性を判断する。
【０２４９】
前記のステップ34は以下のステップを含む。
ステップ341：ロード操作データ(load)命令において、汎用レジスタGPR[rs]即ち上界アドレスレジスタと汎用レジスタGPR[rt] 即ち下界アドレスレジスタ中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値以下であると、次の命令が実行される； そうでない場合は、adelの例外が発生し、即ちgsLE rs，rtである。
【０２５０】
ステップ342：、保存操作データ(store)命令において、汎用レジスタGPR[rs]即ち上界アドレスレジスタと汎用レジスタGPR[rt] 即ち下界アドレスレジスタ中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値より大きいと、次の命令が実行される； そうでない場合は、adelの例外が発生し、即ちgsGT rs，rtである。
【０２５１】
本発明のRISCプロセッサの、限界があるメモリーアクセスの方法は、RISCプロセッサがサポートする仮想機において、X86の仮想機命令からMIPS命令セットへの翻訳を行う二進法コードがRISCプロセッサで稼動するとき、稼動速度を向上させ、仮想機の稼動速度への影響を低減し、仮想機の稼動効率を向上させる。
【０２５２】
以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスが仮想のメカニズムに対するサポートである場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法を詳しく説明する。
【０２５３】
X86の命令とRISCプロセッサ命令の機能の差以外にも、仮想機システム自身の消耗も仮想機の性能低下と繋がるから、仮想機のメカニズム自身に対して必要なサポートを提供することが要求される。このサポートは、主に以下の三つの事項を含む。
【０２５４】
N1) 仮想機のコードと翻訳されたMIPSコードとの切り替えのサポート
仮想機の設計において、X86の汎用レジスタが固定のMIPSレジスタにマップされているが、仮想機のコードと翻訳されたMIPSコードの二種類のコンテキストを切り替えるとき、これらのレジスタが二種類のコンテキスト中でお互いに干渉されずに自由に使われるために、これらの固定されたMIPSレジスタの値を保存するまたは復旧することは必要とされる。
【０２５５】
本発明は、データ幅が元のデータ幅の2倍であるメモリーアクセス拡張命令を提供し、仮想機のコンテキストの切り替えの速度を向上させるとともに、性能を向上させることができる。
【０２５６】
本発明のX86の仮想機をサポートするRISCプロセッサのモード識別モジュール２４は、複数倍のデータ幅にメモリーアクセスする命令を含む。前記の複数倍のデータ幅のメモリーアクセス命令は、複数倍のデータ幅のメモリー読み取り、メモリー書き込み、および浮動小数点レジスタの複数倍のデータ幅のメモリー読み取り、メモリー書き込み、全部で4種類の複数倍のデータ幅のメモリーアクセス拡張命令を含む。
【０２５７】
一つの実施可能な方式として、本発明は、２倍データ幅のメモリー読み取り命令、メモリー書き込み命令、および浮動小数点レジスタの２倍データ幅のメモリー読み取り命令、メモリー書き込み命令、全部で4種類の複数倍のデータ幅のメモリーアクセス拡張命令を提供した。
【０２５８】
一つの実施可能な方式として、本発明が提供した複数倍のデータ幅の拡張命令は、既存のMIPS64命令セットの中に保留したLWC2とSWC2の空スロットの値を利用する。その中の32ビット命令の高い順位の6ビット（31ビット:26ビット）はopcode領域となる。その中のLWC2（opcodeは110010となる）とSWC2（opcodeは111010となる）の命令スロットは、MIPSのルールによって決められた、ユーザで自分で定義してもよいものである。そのメモリーアクセスのアドレッシング方式はbase+8bit offsetアドレッシング方式である。
【０２５９】
その中、5ビットのbase領域はベースアドレスを示し、5ビットのrt(Register  Target(Source/Destination))領域は元/目標レジスタを示し、offset はオフセットアドレスを示し、最後の6ビットのfunc領域は各拡張命令を区別することに使われる。
【０２６０】
本発明の4種類の拡張命令は、MIPS64命令セットにおいてユーザにより拡張されるカスタマイズ命令である。
データ保存命令SQに対して、デコーダは一つの内部のsq操作を出力する。
【０２６１】
データロード命令LQに対して、デコーダは二つの隣接した内部操作lq1とlq2を出力し、その中のlq1はLQ命令の低い順位64ビットの論理レジスタ番号を有し、lq2はLQ命令の高い順位64ビットの論理レジスタ番号を有する。
【０２６２】
デコーダ２は命令をデコードした後、メモリーアクセス実行部分５の送信行列（示されていない）に送り、送信行列は行列の中から操作データによって準備された操作を選び、メモリーアクセス実行部分５のメモリーアクセス部分（示されていない）に送信する。
【０２６３】
メモリーの四つのワード、全部で128ビットをロードするデータロード命令操作に対して、前記のメモリーアクセス実行部分５の合併部分は、二つの内部操作が送信行列に入るときにこれらの内部操作を合併する。合併の方法は、送信行列に入ろうとする隣接した二つの操作が四つのワード、128ビットのデータロード命令のデコードであると、その次の一つの操作は送信行列に入らず、その目標物理レジスタ番号を１つ前の操作の高い順位の64ビットの目標物理レジスタ番号に保存する。
【０２６４】
合併したデータロード操作は、二つの目標物理レジスタ番号を有し、アドレスが決められたときにメモリーアクセス実行部分５のメモリーアクセス部分に送信されて実行される。
【０２６５】
メモリーアクセス実行部分５は、データの読み書きの部分であり、命令によってメモリーからデータを読み出し、またはメモリーへデータを書き込む。この流れは既存の一般的な技術であり、この分野の技術者にとって簡単に実現できるから、本発明の実施例で詳しく説明しない。
【０２６６】
以下は倍データ幅のメモリーロード命令、メモリー保存命令、および浮動小数点レジスタの倍データ幅のメモリーロード命令、メモリー保存命令、全部で四つの命令について説明する
gsLQ rt, offset(base)  /メモリーから４ワードデータを読み取る
メモリーから４ワードデータを読み取り、レジスタに保存する。まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの４ワードデータを読み取り、隣接した二つの汎用レジスタの中に保存される。
【０２６７】
rtが偶数であれば、レジスタrtとレジスタrt+1の中に保存される；もしrtが奇数であれば、レジスタrt-1とレジスタrtの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
【０２６８】
gsLQC1 ft, offset(base)  /メモリーに４ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの４ワードデータを読み取り、隣接した二つの浮動小数点レジスタの中に保存される。
【０２６９】
ftが偶数であれば、レジスタftとレジスタft+1の中に保存される；ftが奇数であれば、レジスタft-1とレジスタftの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
【０２７０】
gsSQ rt, offset(base)  /メモリーに４ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの汎用レジスタの中の４ワードデータをメモリー中の有効アドレスに保存する。
【０２７１】
rtが偶数であれば、レジスタrtとレジスタrt+1の中の値を読み出し、メモリーに保存する；rtが奇数であれば、レジスタrt-1とレジスタrtの中の値を読み出し、メモリーに保存する。
【０２７２】
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
gsSQC1 ft, offset(base)  /浮動小数点レジスタからメモリーに４ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの浮動小数点レジスタの中の４ワードデータをメモリー中の有効アドレスに保存する。
ftが偶数であれば、レジスタftとレジスタft+1の中の値を読み出し、メモリーに保存する； ftが奇数であればレジスタft-1とレジスタftの中の値を読み出し、メモリーに保存する。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
【０２７３】
X86の仮想機をサポートするRISCプロセッサのデータのメモリーアクセスの方法は、以下のステップを含む。
ステップN110：プロセッサはまず一つの命令を取り出してデコーダに入力する；
ステップN120：デコーダは命令のタイプを判断し、複数倍のデータ幅の命令を識別しデコードする；
既存のMIPS命令セット中の命令であれば、デコーダはその命令を内部操作とデコードする。例えば対応したOP、ソースレジスタと目標レジスタ等が与えられる；
入力した命令は本発明の複数倍のメモリーアクセス拡張命令操作であれば、デコーダはソースレジスタまたは目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張する；
rtが偶数であれば、レジスタrtとレジスタrt+1の中に保存される；rtが奇数であればレジスタrt-1とレジスタrtの中に保存される。
【０２７４】
入力した命令は複数倍のデータ幅の読み取り命令であれば、デコーダは目標レジスタを自動的に一つから複数の隣接したレジスタに拡張し、読み取り操作を複数の内部操作に分配する。複数対のレジスタはそれぞれこの複数の内部操作の目標レジスタである。
【０２７５】
入力した命令は複数倍のデータ幅の保存命令であれば、デコーダはソースレジスタを一つから複数の隣接したレジスタに拡張する。
プロセッサはまず一つの命令を取り出してデコーダに入力し、デコーダは命令のタイプを判断する。既存のMIPS命令セット中の命令であれば、デコーダはその命令を内部操作とデコードし、例えば対応した操作（OP）、ソースレジスタと目標レジスタ等が与えられ、保存演算部分に出力し実行される；入力した命令は本発明のメモリーアクセス拡張命令中の保存操作であれば、デコーダは元レジスタまたは目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張し、そして保存演算部分に出力されて実行される。
【０２７６】
プロセッサはまず一つの命令を取り出してデコーダに入力し、デコーダは命令のタイプを判断し、内部操作に転換する。内部操作のコードは、プロセッサの機能部分について命令よりも構造化されているため、内部論理の簡潔化に有利である。RISCプロセッサにおいて、一般に外部の命令と内部の操作とは一対一のマップ関係を有する。デコーダから出力した内部操作は、例えば操作コード（OP）、拡張操作コード（fmt）、ソースレジスタ、目標レジスタ、即値等、いくつかの領域からなる。
【０２７７】
ステップN130：デコードされた複数倍のデータ幅の命令はメモリーアクセス実行部分５に送られ、操作される。
デコーダは入力された命令をデコードした後、メモリーアクセス実行部分５に送る。メモリーアクセス実行部分５において、その命令は読み取り命令であれば、操作命令LQの二つの内部操作lq1、lq2を読み取って一つの操作に合併させ、メモリーアクセス実行部分５のメモリーアクセス部分に送り実行する。
【０２７８】
入力した命令は本発明のメモリーアクセス拡張命令中の四つのワード、全部で128ビットのデータの保存命令SQであれば、デコーダ３はソースレジスタ番号を一つから二つの、対を成すレジスタ番号に拡張する。例えば4番目のレジスタを4番と5番二つのレジスタ番号に拡張し、7番目のレジスタを6番と7番二つのレジスタ番号に拡張する。内部操作として二つのソースレジスタ番号をメモリーアクセス実行部分５の送信行列に送る。
【０２７９】
入力した命令は本発明のメモリーアクセス拡張命令中の読み取り操作であれば、デコーダは該読み取り操作を二つの内部操作にデコードし、同じく目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張し、そして以上の二つの内部操作に分配し、メモリーアクセス実行部分５へ出力して実行する。そしてこれらの二つの操作を一つの操作に合併させてメモリーアクセス実行部分５のメモリーアクセス部分に送り、実行する。
【０２８０】
即ち、入力した命令は本発明のメモリーアクセス拡張命令中の四つのワード、全部で128ビットのデータのロード命令LQであれば、デコーダは目標レジスタ番号を一つから二つの、対を成すレジスタ番号に拡張する。さらにこの命令を二つの隣接した内部操作lq1、lq2にわけ、二つの操作がそれぞれこの二つの目標レジスタ番号を付けてメモリーアクセス実行部分５の送信行列に送られる。メモリーアクセス実行部分５は、デコーダからの内部操作を受け取り、これらの内部操作の中からソース物理レジスタが準備した内部操作を選択し、メモリーアクセス実行部分５のメモリーアクセス部分に送信する。LQ命令は一つのメモリーアクセス操作としてメモリーアクセス部分に送信するため、メモリーアクセス実行部分５の合併モジュールで二つの内部操作の合併を完成する。その方法は、lq2の目標物理レジスタをlq1操作した高い順位の64ビットの目標物理レジスタ中に保存し、lq2自身は送信行列に入らない。メモリーアクセス部分はメモリーアクセス操作を実行し、lq1については、結果の中に二つの値の領域があり、それぞれ対応する物理レジスタに書き込まれる。
【０２８１】
N２)  翻訳後のコードはX86モードであるかどうかを区別する
X86の仮想機をサポートするRISCプロセッサは、一つの命令についてその命令が元の命令セットモードであるか、それともX86モードであるかを区別する必要はある。例えば、MIPS命令セットを例として、加算の命令について、MIPS命令セット中に加算の処理は二つの数字の加算操作である。しかし、X86命令セットなら、加算の命令は二つの数字の加算操作だけでなく、更に加算の結果に基づいて対応するEFLAG中のフラグビットを変更しなければならない。
【０２８２】
本発明は、以上の問題に対して、一つのRISC命令がX86の仮想機モードで稼動しているかどうかを区別する方法を提供する。
違う命令の使用頻度によって、本発明は三つの区別方法を提供する。
【０２８３】
（1）制御ビットフラグの実行方法：本発明はRISCプロセッサにおいて専用の制御ビットx86modeフラグを設置し、該ビットが1になるときに当該の命令がX86モードで稼動していると表す；該フラグが0になるときに当該の命令がX86モード以外で稼動していると表す。
【０２８４】
（2）プレフィックス命令の実行方法：本発明は一つのプレフィックス命令SETFLAGを設置し、このプレフィックス命令はその後の命令がX86モードであると表す。また、この命令は、プレフィックス命令が影響される範囲の違いによって、二つの方式に分けられる。一つは、プレフィックス命令がその次の一つの命令だけに影響を与え、もう一つはプレフィックス命令がその次のいくつかの命令に影響を与える。
【０２８５】
（3）専用命令方法：本発明は命令頻度が非常に高いX86命令について、命令セット中に専用の命令を設置して一対一の対応を実現することにより、効率を上げる。前記の設置した命令は二つの種類と分けられる。一つはX86命令セット中EFLAGフラグと関係する命令が一対一で対応する命令である。もう一つはX86命令セット中の特別な構造に操作が行われる命令で、例えば浮動小数点スタック操作の命令と対応する命令、相応のコストを減らせるために新たに増えた命令は専用の命令を提供し、X86命令に部分的に支持する。
【０２８６】
本発明X86の仮想機をサポートするRISCプロセッサのモード識別モジュール２４は、命令の仮想機の命令セットのモードを区別することに使われる。
本発明のRISCプロセッサでは、デコーダは、デコードの入力及び出力、命令デコード機能を含み、既存技術であるデータ通路以外に、さらにモード識別モジュール２４に基づき命令の仮想機の命令セットのモードを区別し、そして該デコーダは命令が区別された仮想機の命令セットのモードに基づいてデコードした後固定小数点演算部分３に出力する。これは直接デコードするため、既存のデコーダの機能を向上させ、プロセッサの演算スピードを向上させる。
【０２８７】
固定小数点演算部分３はデコードする命令を受け取った後、これを処理して実行の結果を出力する。
固定小数点演算部分３は既存の技術である命令の入力出力、命令の実行を含むデータ通路以外に、さらにデコーダ２によって命令の命令セットモードを区別した後、固定小数点演算部分３が違う命令モードに基づいて対応する演算を実行し、その実行結果を出力する。
（一）
一つの実施可能な方式として、本発明のRISCプロセッサのモード識別モジュール２４は、仮想機モード制御レジスタ７３である。前記の仮想機モード制御レジスタ７３は制御ビットフラグX86MODE1を含む。該ビットが1になるときに当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該フラグが0になるときに当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
【０２８８】
RISCプロセッサのMIPS64命令セット中に、いくつかのCoprocessor0(CP0) 制御レジスタがユーザが自分で定義するために予備されたものであり、例えば22番レジスタはすべてのSelビットの状況でユーザが自分で定義するために予備されたものである。
【０２８９】
本発明の実施例はこれらの制御レジスタ(CP0)中の1ビットを利用してX86モード制御ビットフラグX86MODE1とし、命令のモードを区別する必要があるとき、この制御レジスタに対応するビットを読み取って判断する。該フラグビットが1になるとき、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該フラグビットが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
【０２９０】
RISCプロセッサは命令をロードし、デコーダ２でデコードし実行するとき、デコーダ２はまず仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1を読み取り、フラグビットの値が0かまたは1によって仮想機の命令セットモードを区別し、仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1が変更されるまで、その仮想機の命令セットモードに基づきデコードする。
【０２９１】
一つの加算命令がデコーダに入るとき、RISCプロセッサは対応する制御レジスタを判断し、X86の仮想機の命令セットモードであるか、それともX86の仮想機の命令セットモード以外のモードであるかをと区別する。
【０２９２】
前記の固定小数点演算部分３のフラグ演算モジュール３２は、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
（二）
一つの実施可能な方式として、本発明のRISCプロセッサにおいて、前記のモード識別モジュール２４はデコーダ中に含まれたプレフィックス命令デコードモジュール２４１である。前記のプレフィックス命令デコードモジュール２４１は一つのプレフィックス命令SETFLAGを含み、このプレフィックス命令SETFLAGは、該プレフィックス命令後の複数の命令がX86の仮想機の命令セットモードであることを表す。
【０２９３】
本発明の実施例のプレフィックス命令デコードモジュール２４１中のプレフィックス命令は、MIPS命令セットの中に保留したSPECIAL2の空スロットの値で実現される。
デコーダ２のプレフィックス命令デコードモジュール２４１は、該プレフィックス命令をデコードするときにフラグを設置し、この命令後の命令はX86の仮想機の命令セットモードにデコードされ、そして該プレフィックス命令は空操作NOPにデコードされる。
【０２９４】
前記のプレフィックス命令SETFLAGはプレフィックス命令SETFLAGの影響範囲を示す範囲パラメータを含み、そのパラメータは1であるとき該プレフィックス命令がその次の一つの命令だけに影響を与える；そのパラメータはnであるとき該プレフィックス命令がその次のn個の命令に影響を与えると表すのが好ましい。
【０２９５】
前記のデコーダ２のプレフィックス命令カウンター２４２は、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数nを記録することに使われるのが好ましい。
【０２９６】
影響された現在の命令は固定小数点演算部分に入るとき、即ち次の命令がデコーダ２に入るときにnが１減少する。前記の命令シーケンス中にシフト命令が出現することは許されない。即ちシフト命令が出現すると、このシフト命令からの命令シーケンスはプレフィックス命令に影響されないこととなる。
【０２９７】
一つの実施可能な方式として、前記の固定小数点演算部分３の例外処理モジュール３４は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行の例外が表示された場合に遅延スロット例外と同じ方法を採用し、Causeレジスタのbdビットを1にさせ、同時にEPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われるのが好ましい。
【０２９８】
別の実施可能な方式として、前記の固定小数点演算部分３のプレフィックス例外制御レジスタ３３は、例外が発生した命令は前記のプレフィックス命令による影響されたかどうかを記録することに使われることが望ましい。異常でプロセスが中断された場合に、プレフィックス例外制御レジスタ３３中にその時点の命令のカウントを保存する；異常が終わって中断されたプロセスに戻る場合、前記のカウント、即ちその前にプレフィックス例外制御レジスタ３３に保存されたカウントに基づいて前記の中断されたプロセスが回復する。
【０２９９】
前記の固定小数点演算部分３のフラグ演算モジュール３２は、仮想機の命令セットモードでの命令について、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
（三）
別の実施可能な方式として、前記のモード識別モジュール２４は命令処理モジュール２１であり、RISCプロセッサのMIPS命令中に該命令の仮想機の命令セットモードをマークすることに使われる。
【０３００】
使用頻度が非常に高いX86の仮想機の命令について、RISCプロセッサのMIPS命令セット中に、命令処理モジュール２１により、該MIPS命令がX86の仮想機の命令セットモードで実行する命令であることを表す一つのマークを設置することは必要となる。こうすれば、使用頻度が高いX86の仮想機の命令について、該命令がX86の仮想機の命令セットモードであることをマークし、同命令を直接にRISCプロセッサのMIPS命令セットにより実行するため、その分のコストが減少される。
【０３０１】
命令処理モジュール２１に影響される命令は、該命令のデコードの実行だけに影響を与え、その他の命令には影響を与えない。他の命令は、元の仮想機の命令セットモードで実行される
前記のRISCプロセッサのMIPS命令は、X86命令セット中にEFLAGフラグと関係する命令に対応する仮想機の命令、およびX86命令セット中に特別な構造例えば浮動小数点スタック操作の命令に対応する仮想機の命令を含むのが好ましい。
【０３０２】
命令処理モジュール２１によるRISCプロセッサでの加算命令(Add)では、該命令の仮想機の命令セットモードがX86の仮想機の命令セットモードX86Addとマークされ、これはRISCプロセッサのMIPS命令セットの中に保留したSPECIAL2の空スロットの値で実現される。この命令は元の加算命令(Add)と異なり、元の命令に部分的にサポートし、レジスタ中の値に対して加算操作を行い、結果に基づき対応するEFLAGSのフラグビットを変更するが、演算の結果はレジスタの中に保存しない即ちレジスタの値は変更されない。
【０３０３】
本発明のX86をサポートするRISCプロセッサの複数モードでのデータ処理の方法は、以下のステップを含む。
ステップN210：データを読み取るとき、命令の仮想機の命令セットモードを区別する。
【０３０４】
一つの実施可能な方式として、前記のステップN210は以下のステップを含む。
ステップN211：デコーダは一つのプレフィックス命令SETFLAGを読み取り、該命令後の複数の命令がX86の仮想機の命令セットモードであることを表し、命令の仮想機の命令セットモードを区別した。
【０３０５】
プレフィックス命令SETFLAGがさらに一つのプレフィックス命令SETFLAGの影響範囲を示す範囲パラメータを含み、そのパラメータは1であるとき該プレフィックス命令がその次の一つの命令だけに影響を与える；そのパラメータはn(n≠1)であるとき該プレフィックス命令がその次のn個の命令に影響を与えることを表す。
【０３０６】
該プレフィックス命令をデコードするときフラグを設置し、この命令後の命令はX86の仮想機の命令セットモードにデコードされ、そして該プレフィックス命令は空操作NOPにデコードされる。
【０３０７】
別の実施可能な方式として、前記のステップN210は以下のステップを含む。
ステップN210。艨F命令がデコーダ２に入るとき、仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1は命令の仮想機の命令セットモードを区別する。
【０３０８】
前記のステップN210。艪ヘ以下のステップを含む。
ステップN211。艨F仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1を判断する；
ステップN212。艨F該フラグビットが1になるとき当該の命令がX86の仮想機の命令セットモードで稼動していることを表す。
【０３０９】
ステップN213。艨A該フラグビットが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
さらに別の実施可能な方式として、前記のステップN210は以下のステップを含む。
【０３１０】
ステップN211ィ普Fデコーダは命令を読み取り、該命令中のフラグの仮想機の命令セットモードに基づき、命令の仮想機の命令セットモードを区別した。
ステップN220：デコーダは命令をデコードする間に、区別された命令の仮想機の命令セットのモードに基づき、命令をデコードした後、RISCプロセッサの固定小数点演算部分３に出力する。
【０３１１】
プレフィックス命令に基づいて命令の仮想機の命令セットのモードを区別したとき、以下のステップを含む。
ステップN221：デコーダはデコードによりプレフィックス命令を確認し、デコーダに一つのフラグビットX86mode2=1を設置する。
【０３１２】
前記のステップN220はさらに以下のステップを含む。
ステップN222：デコーダ中のプレフィックス命令カウンター２４２は、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数nを記録する。
【０３１３】
影響された現在の命令は固定小数点演算部分に入るとき、即ち次の命令がデコーダ２に入るときにnが１減少する。
前記の命令シーケンス中にシフト命令が出現することは許されない。即ちシフト命令が出現すると、このシフト命令からの命令シーケンスはプレフィックス命令に影響されないこととなる。
【０３１４】
仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1に基づいて命令の仮想機の命令セットのモードを区別したとき、前記のステップN220のデコーダはデコードし、以下のステップを含む。
【０３１５】
ステップN221′：RISCプロセッサは命令をロードし、デコーダ２でデコードし実行するとき、デコーダ２はまず仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1を読み取り、フラグビットの値が0かまたは1によって仮想機の命令セットモードを区別し、仮想機モード制御レジスタ７３の制御ビットフラグX86MODE1が変更されるまで、その仮想機の命令セットモードに基づいてデコードする。
【０３１６】
ステップN230：RISCプロセッサの固定小数点演算部分はデコーダの出力に基づき、処理を行い、実行の結果を出力する。
プレフィックス命令に基づき命令の仮想機の命令セットのモードを区別したとき、以下のステップを含む。
【０３１７】
ステップN231：デコーダはプレフィックス命令を内部の空操作NOPにデコードしたため、固定小数点演算部分はNOP命令を実行する。
複数モードの命令セットの命令を実行する間、中断の例外が発生しないため、前記のステップN230は以下のステップを含むのが好ましい。
【０３１８】
ステップN232：固定小数点演算部分は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行の例外が表示された場合に遅延スロット例外と同じ方法を採用し、Causeレジスタのbd(Branch delay)ビットを1にさせ、同時にEPC(The Exception Program Counter)をプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われる。
【０３１９】
一般的には、EPCレジスタで保存したのは、例外サービスプログラムの実行が完成した後にプロセッサの元の操作の入り口のアドレスである。
ステップN233：固定小数点演算部分はプレフィックス命令がn個の命令に影響を与えるとき、プレフィックス例外制御レジスタ３３を使用して、例外が発生した命令は前記のプレフィックス命令による影響されたかどうかを記録する。異常でプロセスが中断された場合に、プレフィックス例外制御レジスタ３３中にその時点の命令のカウントを保存する。異常が終わって中断されたプロセスに戻る場合、前記のカウント、即ちその前にプレフィックス例外制御レジスタ３３に保存されたカウントに基づいて前記の中断されたプロセスが回復する。
【０３２０】
ステップN234：固定小数点演算部分は、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
以下は加算命令を例として、プレフィックス命令の方式で本発明のRISCプロセッサの複数モードでのデータ処理の方法を具体的に説明する。
【０３２１】
まず、一つのプレフィックス命令がデコーダに入る；
そして、デコーダ２はデコードによりプレフィックス命令を確認し、デコーダに一つのフラグビットX86mode2=1を設置し、プレフィックス命令を内部の空操作NOPにデコードし、次の命令を実行する；
それから、プレフィックス命令の次の命令即ち加算命令がデコーダに入るとき、プレフィックスのフラグビットが存在するかどうかを判断する。加算命令がプレフィックス命令のパラメータの範囲内でないと、デコーダは命令自身につけたソースレジスタと目標レジスタおよび内部操作の操作コード(op)をデコードする；この加算命令がプレフィックス命令のパラメータの範囲内であり、即ちX86モードでの加算命令であると、X86の仮想機の命令セットモードで、演算結果に基づきEFLAGSのフラグビットを変更するから、デコーダはEFLAGSのフラグビットをソースレジスタ中の一つにデコードするとともに、EFLAGSのフラグビットを目標レジスタにデコードし、そして同時に加算命令自身につけたソースレジスタと目標レジスタおよび内部操作の操作コード(op)をデコードする；
最後に、固定小数点演算部分はデコーダの出力を入力として、正常なMIPS命令中の命令であれば、加算の演算が行われる；プレフィックス命令に影響された加算命令であれば、固定小数点演算部分は先に加算の演算を実行し、そして加算の演算結果に基づき新たなEFLAGSフラグビットの値を演算する。
【０３２２】
本発明のRISCプロセッサおよび複数モードでのデータ処理の方法では、RISCプロセッサ中に、違うモードの仮想機命令をRISCプロセッサで実行可能な命令に翻訳するとき、直接にデコードし実行する。これで大量の翻訳時間が節約され、プロセッサの演算スピードが飛躍的に向上し、全体的にプロセッサの性能が向上する。
【０３２３】
N3)  ソースプロセッサから目標プロセッサへのアドレス変更に対する検索テーブルサポート
仮想機の種類はさまざまであるが、そのコアは一つの翻訳または解釈のプロセス、即ち目標コードからローカルコードに翻訳か解釈して、ローカルプロセッサで実行するプロセスである。仮想機はローカルコードを実行する間に、ジャンプ命令が出てくると、X86のソースプログラムの命令アドレスを対応するMIPS目標プログラムの命令アドレスに変更する、そして目標プログラムの命令アドレスに基づきジャンプが実現される。本発明はRISCプロセッサ中に元の命令アドレス（X86命令アドレス）から目標命令アドレス（MIPS命令アドレス）までの検索テーブルのマップの構造を増やして、ソース命令アドレスから目標命令アドレスまでの変更を加速させるため、仮想機の性能が向上する。
【０３２４】
本発明の実施例のX86の仮想機をサポートするRISCプロセッサの検索テーブルモジュール２３は、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換が実現されることに使われる。
【０３２５】
本発明はハードウェアに一つの検索テーブルを有し、X86のプログラム中のジャンプアドレスからMIPSジャンプアドレスへの翻訳に対するクイック検索をサポートし、これにより仮想機の性能を向上させる。
【０３２６】
一つの実施可能な方式として、前記の検索テーブルは内容基づいてアドレッシングする検索テーブルであってもよく、この場合、内容アドレッシング可能なメモリー/ランダムアクセスメモリー(Content-Addressable Memory/Random Access  Memory ,   CAM/RAM)で実現する。ここで、RAMは一つのアドレスを入力して、対応するアドレス中のデータを出力する；CAMは内容を入力して、この内容が保存されたユニットのインデックス番号またはこのインデックス番号と関連する別のユニットの内容を出力する。
【０３２７】
該検索テーブルは内容アドレッシングの検索テーブルであってもよく、この場合、X86のジャンプアドレスからMIPSジャンプアドレスへの翻訳が実現され、即ちRISCプロセッサのX86の仮想機中に、X86の元の命令アドレスからMIPS目標命令アドレスへの変更が完成される。そのテーブルの項目は表1のように。
【０３２８】
表1  検索テーブルの項目
【０３２９】
【表１】
0005501338.tif 000002
表1に示されたように、X86の元の命令(SPC)からMIPS目標命令アドレス(TPC)への変換は三つの領域を使用する：ASID領域、SPC領域とTPC領域。
【０３３０】
その中、ASID領域はオペレーティングシステムにおいて複数のX86の仮想機プロセスを開始するID番号を保存することに使われる。これらの複数のX86の仮想機プロセスは全て検索テーブルを使用する必要があるとき、オペレーティングシステムにより、互いに干渉されないように、それぞれ分布されたID番号(ASID)を区別する。
【０３３１】
SPC領域はX86の元の命令アドレスを保存することに使われる；
TPC領域はMIPS目標命令アドレスを保存することに使われる；
ASID領域とSPC領域は検索テーブルのアドレス部分(CAM)にあり、TPC領域は検索テーブルの保存部分(RAM)にある。
【０３３２】
検索テーブルモジュール２３が検索するとき、当時のX86の仮想機プロセスのASIDと検索テーブル命令でのSPCが一緒に検索テーブルの「アドレス」部分となり、この「アドレス」部分が全ての検索テーブルの項目に送られる。それぞれの項目は自身で保存されたASID、SPCを入力と比べ、マッチしたらその中に保存されたTPCを出力する。ゆえに、RISCプロセッサのX86の仮想機プロセスについて、検索しようとするX86のソース命令アドレスを入力すれば、検索テーブル中から対応するMIPS目標命令アドレスを見つけることができる。
【０３３３】
ここで、検索テーブル中のSPC領域とTPC領域の値は仮想機によって初期化の際に初期化の処理が行われるが、ASID領域の値はローカルオペレーティングシステムによって与えられる。
【０３３４】
一つの実施可能な方式として、本発明の実施例中に、該検索テーブルの構造をアクセスまたは修正する四つの命令で検索テーブルモジュール２３が実現される。
一番の命令は、CAMPV命令である。該命令は検索テーブルRAMの項目の値を検索する。
【０３３５】
該命令のフォーマットは以下の通りである：
CAMPV  rd,  rs
GPR[rs]中の内容インデックスの検索テーブルに基づき、RAM中の内容が得られる。汎用レジスタGPR[rs] 中の内容インデックスの検索テーブルに基づき、ヒットされたら、対応するRAM中の内容を目標レジスタGPR[rd] 中に保存する；項目がヒットされなかったら、ヒットされなかったサービスプログラムの入り口アドレスを目標レジスタGPR[rd] 中に保存する。
【０３３６】
命令の実行プロセスは、命令のロードのデコードの実行などを含む全体的にプロセッサの命令の実行プロセスであり、アクセスする部分は前記の検索テーブルである。
二番の命令は、CAMPI命令である。該命令は検索テーブルRAMの項目のインデックス(index)を検索する。
【０３３７】
該命令のフォーマットは以下の通りである：
CAMPI  rd,  rs
GPR[rs]中の内容インデックスの検索テーブルに基づき、該内容がある項目のインデックス(index)は得られる。汎用レジスタGPR[rs] 中の内容インデックスの検索テーブルに基づき、ヒットされたら、対応する項目のインデックス(index)を目標レジスタGPR[rd] 中に保存する；項目がヒットされなかったら、ヒットされなかった目標レジスタrdの最高ビットを1にする。
【０３３８】
命令の実行プロセスは、命令のロードのデコードの実行などを含む全体的にプロセッサの命令の実行プロセスであり、アクセスする部分は前記の検索テーブルである。
三番の命令は、CAMWI命令である。該命令は検索テーブルRAMの項目のインデックス(index)に基づき、検索テーブルを書き込む。該命令のフォーマットは以下の通りである：
CAMWI  rd,  rs,  rt
GPR[rd]の値に基づいて検索テーブルを書き込む。汎用レジスタGPR[rd] 中のインデックスの値に基づき、GPR[rs]レジスタとGPR[rt]レジスタ中の値をそれぞれ検索テーブルのCAMの項目とRAMの項目中に書き込む。
【０３３９】
インデックス(index)の値が検索テーブルの項目の範囲を超えたとき、アドレスエラーの例外が発生する。
命令の実行プロセスは、命令のロードのデコードの実行などを含む全体的にプロセッサの命令の実行プロセスであり、アクセスする部分は前記の検索テーブルである。
【０３４０】
四番の命令は、RAMRI命令である。該命令は検索テーブルRAMの項目のインデックス(index)に基づき、検索テーブルRAMの項目の内容を読み取る。該命令のフォーマットは以下の通りである：
RAMRI  rd,  rs
GPR[rs]の値に基づいて検索テーブルRAMの内容を読み取る。汎用レジスタGPR[rs] 中のindexの値に基づき検索テーブルRAMの内容を読み取り、目標レジスタGPR[rd] 中に保存する。
【０３４１】
indexの値が検索テーブルの項目の範囲を超えたとき、アドレスエラーの例外が発生する。
以下に、検索がヒットされなかった場合、即ち検索テーブルが検索できなかった、即ち検索テーブルに相応するプロセスが期待したペアのSPC-TPCがない場合、対応する処理を詳しく説明する。
【０３４２】
検索できなかった場合、即ちヒットされなかったら、ヒットされなかったサービスプログラムの入り口アドレスへジャンプし、ヒットされなかったサービスプログラムで処理する。
【０３４３】
ヒットされなかったサービスプログラムは現存のルーチンであり、MIPS命令セットのRISCプロセッサのひとつの現在の標準技術であるため、本発明の実施例で詳しく説明しない。
【０３４４】
一つの実施可能な方式として、前記のヒットされなかったサービスプログラムの入り口アドレスは、ひとつのCP0レジスタCAM.defaultの保存で実現され、仮想機によりひとつのデフォルトを提供し、ヒットされなかったサービスプログラムの入り口アドレスとして、CP0レジスタCAM.defaultに保存する。
【０３４５】
これはプロセッサのひとつの制御レジスタであり、他の制御レジスタと同じの読み書き方式を使用し（アドレスだけ違う）、仮想機により、ヒットされなかったサービスプログラムの入り口アドレスとして、ひとつのデフォルトを提供する。検索テーブルの検索がヒットされなかった場合、前記のCAM.defaultに保存したデフォルトを目標レジスタに送り込む。こうすれば検索プログラムがヒットされた場合、MIPS命令アドレスにジャンプして実行する；ヒットされなかった場合、ヒットされなかったサービスプログラムの入り口アドレスにジャンプして、ヒットされなかったサービスプログラムを利用して検索された対応のアドレスを検索テーブルに書き込む。このようにすれば、検索後にシフト命令を追加して命令がヒットされたかどうかを判断することを回避することができる。
【０３４６】
この時点に目標アドレスがすでに目標レジスタに保存されたため、現在のMIPS64の直接ジャンプ命令JRrsを利用してジャンプが実現される。
ここで、rsは目標アドレスを保存するレジスタである。
【０３４７】
別の実施可能な方式として、ヒットされなかったサービスプログラムの入り口アドレスは、第１の実施例のひとつの制御レジスタに保存されなく、検索テーブルの項目の第0項目に保存されても良い。
【０３４８】
この方法においてはひとつの新たな命令VJRが設置され、デフォルトは第31号汎用レジスタの内容をSPCとして検索し、VJRの命令機能は第一種類の方法のCAMPV+JRの二つの命令の機能と類似する。
【０３４９】
該命令のフォーマットは以下の通りである：
VJR  rt
31号汎用レジスタの値によって検索テーブルのRAMの内容を読み取る。汎用レジスタGPR[31]の値によって検索テーブルのRAMの内容（即ち変換後の目標アドレス）を読み取る。検索が成功した場合、目標レジスタGPR[rt]に保存する。そして命令がrtレジスタの値により目標アドレスにジャンプする；検索が成功しなかった場合、検索テーブルの第0項目のRAM内容を目標レジスタGPR[rt]に保存する。命令はrtレジスタの値によりヒットされなかったサービスプログラムにジャンプし処理される。
【０３５０】
命令の実行プロセスは、命令ロードのデコードの実行などを含む全体的にプロセッサの命令を実行するプロセスであり、そのデコードの実行時にアクセスする部分は前記の検索テーブルである。
【０３５１】
ソース命令アドレスのジャンプ命令を使用するとき、該命令の前にひとつの命令、例えばX86のJMPrax命令によりソース命令アドレスの値をひとつ固定されたレジスタ（例えば31号レジスタ）に入れる；
二つのMIPS命令で実現する：
Addiu   $31,r2,0x0
VJR     r4
ジャンプ命令がデコードされた後、VJR命令がこの固定されたレジスタの値に基づいて検索した後、ヒットされた場合、直接に目標命令アドレスがポイントしているコードセグメントにおいて実行する；ヒットされなかった場合、直接に検索テーブルの第0項目にジャンプして、その後にヒットされなかったサービスプログラムにジャンプする。
【０３５２】
本発明のX86の仮想機をサポートするRISCプロセッサの命令アドレスの変換検索のプロセスを詳しく説明する。このプロセスは、以下のステップを含む。
ステップN310：RISCプロセッサのX86の仮想機が起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスの内容を検索テーブルに書き込む」サ
RISCプロセッサのX86の仮想機が初期化するとき、ヒットされなかったサービスプログラムを利用して、ヒットされなかったサービスプログラムが維持するハッシュ表に基づき、CAMPI命令とCAMWI命令の初期化によって対応するX86命令アドレスからMIPS命令アドレスへの検索テーブルを得る。
【０３５３】
ステップN320：RISCプロセッサのX86の仮想機のジャンプ命令は、X86の元の命令アドレスから目標命令アドレスへの変換を完成させる必要があるため、検索テーブルをアクセスする；
前記のステップN320は以下のステップを含む：
ステップN321：検索テーブルの項目の値を検索するCAMPV命令を使用して、レジスタのソース命令アドレスにより検索テーブルを検索して目標命令アドレスを得る；
ステップN322：検索がヒットされた場合、直接に得られた目標命令アドレスの値を目標レジスタに保存し、プログラムはジャンプ命令によって該目標アドレスがポイントしているコードセグメントにジャンプし実行する；
ステップN323：検索がヒットされなかった場合、仮想機から得られてヒットされなかったサービスプログラムのアドレスを目標レジスタに保存し、プログラムは、ヒットされなかったサービスプログラムにジャンプして実行される。
【０３５４】
ステップN330：ヒットされなかったサービスプログラムは仮想機が維持するハッシュ表の内容に基づき、再び検索テーブルを書き直す；
前記のステップN330は以下のステップを含む：
ステップN331：検索テーブルの項目のインデックスを検索するCAMPI命令を使用して、ソース命令アドレスの値に基づいて該値が所在する項目のインデックス（index）を得て、さらに該当インデックスを目標レジスタに保存する。
【０３５５】
ステップN332：検索テーブルの項目のインデックス（index）により検索テーブルに書き込むCAMWI命令を使用して、目標レジスタのインデックスの値に基づき、プロセスのASID、ソース命令アドレスおよび対応する目標命令アドレスを検索テーブルに書き込む。
【０３５６】
前記の命令アドレスの変換検索方法のプロセスはさらに以下のステップを含むのが好ましい：
ステップN340：検索テーブルのひとつの内容を無効にする；あるいは検索テーブルのRAMの内容を読み取る。
【０３５７】
検索テーブルのRAM項目のインデックス（index）により検索テーブルに書き込むCAMWI命令を使用して、指定されたインデックス（index）の該項目に固定された値を書き込み、前記の固定された値がプログラムのソース命令アドレスとマッチせず、即ち該項目が無効にさせた。
【０３５８】
デバッグを容易にするために、検索テーブルのRAM項目のインデックス（index）により検索テーブルRAMの項目の内容を読み取るRAMRI命令を使用して、指定されたインデックス（index）の項目の検索テーブルRAMの値を読み取り、目標レジスタに保存する。
【０３５９】
本発明のRISCプロセッサおよび命令アドレスの変換検査の方法は、RISCプロセッサ中にX86のソース命令アドレスからMIPS目標命令アドレスのマップへの検索テーブルの構造を増加させ、RISCプロセッサのX86の仮想機において、X86の元の命令アドレスからMIPS目標命令アドレスへの変換を加速させて、仮想機の性能を向上させる。
【０３６０】
添付図面を参照して本発明の具体的な実施例について説明することにより、本発明のその他の態様および特徴は当業者には自明である。
以上、本発明の具体的な実施例について説明したが、これらの実施例は単なる例であって、本発明を限定するため使用するべきものではない。本発明は添付特許請求の範囲に従って解釈すべきものである。
【産業上の利用可能性】
【０３６１】
本発明のRISCプロセッサおよびデータ処理方法は、EFLAG命令の利用に対するサポート、X86の浮動小数点のフォーマットと浮動小数点スタックに対するサポート、X86の保存構造に対するサポート、仮想のメカニズムに対するサポートを提供することにより、X86とRISC構造のセマンティックの差を縮小し、RISCプロセッサでのX86の仮想機に対するサポートを実現し、RISCプロセッサのX86の仮想機の処理速度を向上させ、RISCプロセッサの性能を向上させる。
【図１】
0005501338.tif 000003
【図２】
0005501338.tif 000004