专利摘要:
X86の仮想機をサポートするRISCプロセッサ装置及び方法は開示される。RISCプロセッサは命令モジュール、デコーダ、固定小数点演算部分と浮動小数点演算部分を含んでいる。命令モジュールはX86の仮想機をサポートする命令セットを保存することに使われる;デコーダは仮想機の命令セットの命令をデコーディングするとき、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいて、デコーディングした後固定小数点演算部分または浮動小数点演算部分に出力することに使われる;固定小数点演算部分はデコーダの出力に基づき、仮想機命令セットの固定小数点命令について処理し、実行した結果を出力することに使われる;浮動小数点演算部分はデコーダの出力に基づき、仮想機命令セットの浮動小数点命令について処理し、実行した結果を出力することに使われる。
公开号:JP2011515750A
申请号:JP2011500028
申请日:2008-12-17
公开日:2011-05-19
发明作者:李国傑;李暁▲ぎょく▼;胡偉武;蘇孟豪
申请人:中国科学院▲計▼算技▲術▼研究所;
IPC主号:G06F9-455
专利说明:

[0001] 本発明は、マイクロ・プロセッサのアーキテクチャのクロスプラットフォーム技術に関し、より詳細にはX86の仮想機をサポートする縮小命令セット・コンピューター(RISC)のプロセッサ装置及び方法に関する。]
背景技術

[0002] 中央処理装置(CPU)は、略称がマイクロ・プロセッサであり、コンピュータの中最も重要な部分である。マイクロ・プロセッサに使用された命令セット、設計標準(アーキテクチャアーキテクチャ)は、コンピュータにおいて最も重要な特徴であり、コンピュータに利用できる周辺装置及びアプリケーションソフトを決めている。]
[0003] 現在に流行している二つのプロセッサアーキテクチャはMIPS社のMIPS32/64命令セットを代表とした縮小命令セットコンピュータ(Reduced Instruction Set Computing,RISC)のプロセッサアーキテクチャとIntel会社のX86を代表とした複合命令セットコンピュータ(Complex Instruction Set Computing,CISC)のプロセッサアーキテクチャである。CISCプロセッサは命令の数が多量にあり、その中に非常に複雑な機能が実行できる命令もあり、その機能を実行するには普通に多量なクロック周期が必要とする。一方、RISCプロセッサは命令の数が比較的に少なく、より簡単な機能をより効率的に実行する。アプリケーションソフトを違うアーキテクチャのプロセッサで実行するためには、その違うアーキテクチャに基づきソフトを作り直さなければならない。しかし、通常X86で応用できるアプリケーションソフトはMIPS命令セットのRISCプロセッサのコンピュータで実行できなく、即ちコンパチビリティがない。]
[0004] しかし、コンピュータの製造メーカは、自分で製造した一種類のアーキテクチャのプロセッサで、できるだけ多くの既存ソフトを実行することにより、ソフトの開発費用を節約するとともに、市場の占用率の最大化にすることを希望している。]
[0005] この問題を解決するため、仮想機が誕生した。一般的には、一種類のアーキテクチャを有するプロセッサ(CPU)のコンピュータをホストコンピュータと呼び、同時にホストコンピュータでエミュレートする違うアーキテクチャ種類を有するプロセッサ(CPU)環境をゲストコンピュータと呼ぶ。さらに、ホストコンピュータに一つまたは複数の命令を実行させるアプリケーションプログラムは必要であり、このプログラムは決められたゲストコンピュータの命令に応答し、ゲストコンピュータのために作られたソフトを実行する。このプログラムは仮想機と呼ぶ。]
[0006] 従来の仮想機にはSimOS、QEMU、Transmetaなどがある。しかし、従来の仮想機は、各種類のアーキテクチャの大きな差によって仮想機の稼動に過大なコストが発生し、実行効率が低すぎるため、実際の応用に困難である。]
[0007] X86の仮想機からRISCへの二進法命令の翻訳効率はRISCとX86アーキテクチャの類似性に非常に頼っている。しかし、X86アーキテクチャの中の固定小数点演算命令にフラグビット演算が利用できること、X86アーキテクチャにおける80ビットの浮動小数点操作と浮動小数点スタック演算、セグメント基準アドレスレジスタがあることなどの特性を含む多数のX86アーキテクチャの特性がRISCアーキテクチャには存在しない。そのため、RISCのプロセッサでのX86の仮想機が演算するとき、相違するアーキテクチャの命令の翻訳問題によって、二進法の命令の翻訳効率が低下し、演算速度が高められない。]
発明が解決しようとする課題

[0008] 本発明の目的はX86の仮想機をサポートするRISCプロセッサ装置及び方法を提供するにある。これらの装置及び方法は、RISCプロセッサの性能を向上させる。]
課題を解決するための手段

[0009] 本発明の目的を実現するため、X86の仮想機をサポートするRISCプロセッサを提供し、このRISCプロセッサは、命令モジュール、デコーダ、検索テーブル、固定小数点演算部分と浮動小数点演算部分を含んでいる。その中:
前記の命令モジュールはX86の仮想機をサポートする仮想機の命令セットを保存することに使われる。]
[0010] 前記のデコーダは前記の仮想機の命令セットの命令をデコーディングする間に、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいて、デコーディングした後に、固定小数点演算部分または浮動小数点演算部分に出力することに使われる。]
[0011] 前記の検索テーブルは、X86のプログラムにおけるジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力に基づいてX86のプログラムにおけるジャンプアドレスからMIPSジャンプアドレスへの翻訳に対する高速の検索をサポートし、仮想機の性能を向上させることに使われる。]
[0012] 前記の固定小数点演算部分はデコーダの出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行した結果を出力することに使われる。
前記の浮動小数点演算部分はデコーダの出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行した結果を出力することに使われる。]
[0013] 前記のX86の仮想機をサポートするRISCプロセッサは、さらにメモリーアクセス実行部分、メモリーおよびデータ通路を含む。
前記のメモリーアクセス実行部分はデコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行う。]
[0014] 前記のX86の仮想機をサポートするRISCプロセッサは、さらに汎用物理レジスタヒープを含み、前記の汎用物理レジスタヒープはオーバーフローチェックレジスタ、上界、下界アドレスレジスタ、シミュレートフラグレジスタおよび仮想機モード制御レジスタを含む。]
[0015] 前記のオーバーフローチェックレジスタはRISCプロセッサがシミュレートしたスタックレジスタに対して浮動小数点アクセスを行うときの、スタックオーバーフローの例外チェックの結果を保存することに使われる。]
[0016] 前記の上界、下界アドレスレジスタはX86のプロセッサの限界があるメモリーアクセスモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。
前記のシミュレートフラグレジスタはX86のプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われる。]
[0017] 前記の仮想機モード制御レジスタは一つの制御ビットフラグを含む。該制御ビットフラグが1であるときには、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該制御ビットフラグが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。]
[0018] 前記のX86の仮想機をサポートするRISCプロセッサは、さらに浮動小数点レジスタヒープを含む。
前記の浮動小数点レジスタヒープは浮動小数点制御レジスタ、浮動小数点レジスタスタックおよび第一から第三までの浮動小数点レジスタを含む。]
[0019] 前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。]
[0020] 前記のデコーダは命令処理モジュールとモード識別モジュールを含む。その中:
前記の命令処理モジュールは仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分または浮動小数点演算部分に出力することに使われる。]
[0021] 前記のモード識別モジュールは命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュールは多数セーブデコードモジュール及び/または多数ロードデコードモジュールを含む。]
[0022] 前記の多数セーブデコードモジュールは入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてメモリーアクセス実行部分へ出力して実行することに使われる。]
[0023] 前記の多数ロードデコードモジュールは入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そして前記の複数の内部操作の中に分配し、メモリーアクセス実行部分へ出力して実行することに使われる。]
[0024] 前記のモード識別モジュールはさらにプレフィックス命令デコードモジュールとフラグビット命令デコードモジュールを含む。
前記のフラグビット命令デコードモジュールはEFLAGS稼動モードをシミュレートする作業モードであるEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタをその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。]
[0025] 前記のプレフィックス命令デコードモジュールはプレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる。
プレフィックス命令の範囲のパラメータがnであるとき、デコーダはさらにプレフィックス命令カウンターを含む。プレフィックス命令カウンターはプレフィックス命令に影響され、かつシフト命令が存在しない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲のパラメータと等しい。]
[0026] 前記のデコーダはさらにTOPポインタレジスタと検索テーブルモジュールを含む。その中:
前記のTOPポインタレジスタは浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。]
[0027] 前記の検索テーブルモジュールは検索テーブルに関連する命令に基づき、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。]
[0028] 前記の固定小数点演算部分はフラグ読み書きモジュール、フラグ演算モジュール、例外処理モジュールおよびプレフィックス例外制御レジスタを含む。
前記のフラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる。]
[0029] 前記のフラグ演算モジュールは演算するの間にRISCプロセッサがX86の仮想機の稼動モードであるときに、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットか複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。]
[0030] 前記の例外処理モジュールはプレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせるとともに、EPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。]
[0031] 前記のプレフィックス例外制御レジスタは例外が発生した命令は前記のプレフィックス命令によって影響されたかどうかを記録し、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻る場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。]
[0032] 前記の浮動小数点演算部分はポインタ操作モジュール、スタックオーバーフロー判断モジュール、および変換モジュールを含む。
前記のポインタ操作モジュールは前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。]
[0033] 前記のスタックオーバーフロー判断モジュールは指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタを操作し、浮動小数点アクセスするときのスタックオーバーフロー例外のチェックを行うことに使われる。]
[0034] 前記の変換モジュールは拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。以下のようなステップを含む:
ステップA:RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する;
ステップB:命令を読み込み、命令の仮想機命令セットのモードを区別し、命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、区別された仮想機命令セットのモードによって命令をデコーディングした後出力する;
ステップC:前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。]
[0035] X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはEFLAG命令をサポートするとき、
前記のステップAは具体的に、
RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタが使用できることと示すステップA1であり、
前記のステップBは具体的に、
デコーダは演算がEFLAGS稼動モードをシミュレートするモードであることを識別したとき、違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップB1であり、
前記のステップCは具体的に、
RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み込む/書き込むことによって演算状態を獲得/保存することを実現し、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行するステップC1である。]
[0036] X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートであるとき、
前記のステップAは具体的に、
スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決め、あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタックの0〜7のスタックレジスタの状態を示し、または三つの汎用レジスタを任意に選択し、第一浮動小数点レジスタ、第二浮動小数点レジスタと第三浮動小数点レジスタとして、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用するステップA2であり、
前記のステップBは具体的に、
デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存し、または新たに増えたスタックオーバーフロー判断命令をデコードし、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードするステップB2であり、
前記のステップCは具体的に、
浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視し、または指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタを操作し、浮動小数点スタックオーバーフローのチェックを行い、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データとの間のデータ変換を実行するステップC2である。]
[0037] X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の保存構造に対するサポートであるとき、
前記のステップAは具体的に、
RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタに設置するステップA3であり、
前記のステップBは具体的に、
X86の仮想機の命令セットからMIPS命令セットへの翻訳を行うとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られるステップB3であり、
前記のステップCは具体的に、
固定小数点演算部分はデコードした後のメモリーアクセス命令の中に、上界アドレスレジスタに保存された上界アドレスと/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスの有効性を判断し、命令操作数アドレスと命令アドレスの両方が有効であるときには、メモリーアクセス操作が実行され、そうでないときには、アドレスエラーの例外が発生する。]
[0038] X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは仮想のメカニズムに対するサポートであるとき、
前記のステップAは具体的に、
プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別し、またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力し、あるいはX86の仮想機をサポートするRISCプロセッサが起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込むステップA4であり、
前記のステップBは具体的に、
命令をデコードする間に、区別した命令の仮想機命令セットのモードに基づき、区別した仮想機命令セットのモードによって命令をデコードした後に出力し、またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を識別かつデコードし、あるいはデコーダが検索テーブルに関係する命令を識別しデコードするステップB4であり、
前記のステップCは具体的に、
固定小数点演算部分はプレフィックス命令による影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算し、またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送って操作を実行し、あるいは検索テーブルに関連する命令を実行して、目標命令アドレスの値を獲得しまたは目標アドレスへジャンプさせて実行するステップC4である。]
図面の簡単な説明

[0039] 本発明のX86の仮想機をサポートするRISCプロセッサ装置の構造の概略図である。
本発明のX86の仮想機をサポートするRISCプロセッサのデータ処理方法のフローチャートである。]
実施例

[0040] 本発明の目的、技術の解決策、および本発明の利点をより明確にするため、以下に付属の図面と実施形態とともに参照し、さらに本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ここで説明される例は、本発明を解釈するのに使用されるが、本発明の範囲を限定することを意図したものではないのが理解されるべきである。]
[0041] 本発明の好ましい実施形態では、MIPS64命令セットのRISCプロセッサを実例として、本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ただし、ここで説明される例は、本発明の範囲を限定することを意図したものではなく、本発明の範囲が本発明の付属の特許請求の範囲で限定するのが理解されるべきである。]
[0042] 本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法においては、X86とRISCプロセッサ構造のセマンティックの差を解決し、RISCプロセッサにおいてX86プロセッサに対する互換性を実現するために、RISCプロセッサにおいて以下のいくつかの問題を解決する必要がある:
1. EFLAG命令が利用できること;
2.浮動小数点のフォーマットと浮動小数点スタックが利用できること;
3.保存構造が利用できること;
4.仮想のメカニズムが利用できること。]
[0043] 図1に示されたように、本発明のX86の仮想機をサポートするRISCプロセッサは、命令モジュール1、デコーダ2、検索テーブル(表示されていない)、固定小数点演算部分3、汎用物理レジスタヒープ7、浮動小数点演算部分4、浮動小数点物理レジスタヒープ8、メモリーアクセス実行部分5、メモリーおよびデータ通路6を含んでいる。] 図1
[0044] 前記の命令モジュール1はX86の仮想機をサポートする仮想機の命令セットを保存することに使われる。前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。]
[0045] 前記のデコーダ2は、前記の仮想機の命令セットの命令をデコーディングするとき、命令の仮想機命令セットのモードを区別し、区別された仮想機命令セットのモードによって、デコーディングした後固定小数点演算部分3または浮動小数点演算部分4に命令を出力することに使われる。]
[0046] 前記の検索テーブルは、X86のプログラムの中のジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力によってX86のプログラムの中のジャンプアドレスからMIPSジャンプアドレスへの翻訳を迅速に検索することができる。]
[0047] 前記の固定小数点演算部分3は、デコーダ2の出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行の結果を出力することに使われる。
前記の浮動小数点演算部分4は、デコーダ2の出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行の結果を出力することに使われる。]
[0048] 前記のメモリーアクセス実行部分5は、デコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行うことに使われる。
前記のデコーダは、命令処理モジュール21、モード識別モジュール24、TOPポインタレジスタ22と検索テーブルモジュール23を含むのが好ましい。]
[0049] 前記の命令処理モジュールは、仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分3、浮動小数点演算部分4またはメモリーアクセス実行部分5に出力することに使われる。]
[0050] 前記のモード識別モジュール24は、命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュール24は、多数セーブデコードモジュール244及び/または多数ロードデコードモジュール245を含む。]
[0051] 前記の多数セーブデコードモジュール244は、入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令をメモリーアクセス実行部分5へ出力して実行することに使われる。]
[0052] 前記の多数ロードデコードモジュール245は、入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令を前記の複数の内部操作の中に分配してメモリーアクセス実行部分5へ出力して実行することに使われる。]
[0053] 前記のモード識別モジュール24は、さらにプレフィックス命令デコードモジュール241とフラグビット命令デコードモジュール243を含む。
前記のフラグビット命令デコードモジュール243は、EFLAGS稼動モードをシミュレートしているEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタ71をその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。]
[0054] 前記のプレフィックス命令デコードモジュール241は、プレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる;さらに、前記のプレフィックス命令の範囲パラメータがnとなるとき、デコーダ2はさらにプレフィックス命令カウンター242を含む。プレフィックス命令カウンターは、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲パラメータと同じである。]
[0055] 前記のTOPポインタレジスタ22は、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。
前記の検索テーブルモジュール23は、検索テーブルに関連する命令に基づき、検索テーブルを利用してX86のソース命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。]
[0056] 前記の固定小数点演算部分3は、フラグ読み書きモジュール31、フラグ演算モジュール32、例外処理モジュール34およびプレフィックス例外制御レジスタ33を含む。
前記のフラグ読み書きモジュール31は、シミュレートフラグレジスタ71のフラグビットの値を読み書きすることに使われる。]
[0057] 前記のフラグ演算モジュール32は、演算の間にRISCプロセッサがX86の仮想機の稼動モードである場合、演算の結果から得られたシミュレートフラグレジスタのフラグビットか、またはシミュレートフラグレジスタのフラグビットの1ビット又は複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。]
[0058] 前記の例外処理モジュール34は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせ、同時にEPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。]
[0059] 前記のプレフィックス例外制御レジスタ33は、例外が発生した命令が前記のプレフィックス命令に影響されたかどうかを記録する、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻った場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。]
[0060] 前記の汎用物理レジスタヒープ7は、オーバーフローチェックレジスタ72、上界、下界アドレスレジスタ74、シミュレートフラグレジスタ71および仮想機モード制御レジスタ73を含む。]
[0061] 前記のオーバーフローチェックレジスタ72は、RISCプロセッサでシミュレートしたスタックレジスタに浮動小数点アクセスをするとき、スタックオーバーフロー例外チェックの結果があるかどうかを検出することに使われる。]
[0062] 前記の上界、下界アドレスレジスタ74は、X86のプロセッサの限界があるメモリーアクセスのモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。]
[0063] 前記のシミュレートフラグレジスタ71は、X86のプロセッサのフラグレジスタのフラグビットを擬似的に実現することに使われる。
前記の仮想機モード制御レジスタ73は、一つの制御ビットフラグを含む。該制御ビットフラグが1になるときには当該の命令がX86の仮想機の命令セットモードで稼動していること、該制御ビットフラグが0になるときには当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。]
[0064] 前記の浮動小数点演算部分4は、ポインタ操作モジュール41、スタックオーバーフロー判断モジュール43、および変換モジュール42を含む。
前記のポインタ操作モジュール41は、前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック83の操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更し、かつ監視することに使われる。]
[0065] 前記のスタックオーバーフロー判断モジュール43は、指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ72を操作し、浮動小数点アクセスを行うときのスタックオーバーフロー例外チェックを実行することに使われる。]
[0066] 前記の変換モジュール42は、拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
前記の浮動小数点レジスタヒープ8は、浮動小数点制御レジスタ81、0〜7番の浮動小数点レジスタスタック83および第1〜3の浮動小数点レジスタ82を含む。]
[0067] 前記の第1〜3の浮動小数点レジスタ82の三つのレジスタは、前記の0〜7番の浮動小数点レジスタスタック83と交差して重なるように応用することができる。
前記のメモリーアクセス実行部分5は、合併部分と上、下界判断モジュールを含む。]
[0068] 前記の合併部分は、多数ロードデコードモジュール245がメモリーのロード操作を命令デコードした後、且つ実行部分が実行する前に、複数の内部操作を合併することに使われる。]
[0069] 前記の上、下界判断モジュールは、限界のあるメモリーアクセスが利用できるとき、上界、下界のアドレスを判断し、メモリーアクセス命令に含まれるアドレスの有効性を判断する。]
[0070] 図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。この方法は、以下のようなステップを含む:
ステップA:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する;
ステップB:命令を読み込み、命令の仮想機命令セットのモードを区別する;命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、同仮想機命令セットのモードで命令をデコーディングした後に出力する;
ステップC:前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。]
[0071] RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、EFLAG命令に対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA1:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタ71が使用できることを示す;
前記のステップBは具体的に以下の通りである:
ステップB1:デコーダは演算がEFLAGS稼動モードをシミュレートしていると識別し、違う命令に基づき、シミュレートフラグレジスタ71をソースレジスタ及び/または目標レジスタにデコードする;
前記のステップCは具体的に以下の通りである:
ステップC1:RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタ71のフラグビットの値を読み込む/書き込むことによって演算状態の獲得/保存を実現し、且つ/あるいはシミュレートフラグレジスタ71のフラグビットの値に基づき、制御が行われる。]
[0072] RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA2:スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック83の操作をシミュレートするかどうかを決める;あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタック83の0〜7のスタックレジスタの状態を示す;または三つの汎用レジスタを任意に選択して第一から第三浮動小数点レジスタ82とし、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用する;
前記のステップBは具体的に以下の通りである:
ステップB2:デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存する;または新たに増えたスタックオーバーフロー判断命令をデコードする;あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードする;
前記のステップCは具体的に以下の通りである:
ステップC2:浮動小数点レジスタスタック83操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更、監視する;または指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行う;あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの間のデータ変換が実行される。]
[0073] RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の保存構造に対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA3:RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ74として設置する;
前記のステップBは具体的に以下の通りである:
ステップB3:X86の仮想機の命令セットからMIPS命令セットへの翻訳の際に、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られる;
前記のステップCは具体的に以下の通りである:
ステップC3:固定小数点演算部分は、デコードされた後のメモリーアクセス命令において、上界アドレスレジスタに保存された上界アドレス及び/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスの有効性を判断する;命令操作数アドレスと命令アドレスの両方が有効となるとき、メモリーアクセス操作が実行される;そうしないと、アドレスエラー例外が発生する。]
[0074] RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、仮想のメカニズムに対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA4:プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別する;またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力する; RISCプロセッサのX86の仮想機が起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込む;
前記のステップBは具体的に以下の通りである:
ステップB4:命令をデコードする間に、区別された命令の仮想機命令セットのモードに基づき、同仮想機命令セットのモードで命令をデコードした後に出力する;またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を識別してデコードする;あるいはデコーダが検索テーブルの相関命令を識別する;
前記のステップCは具体的に以下の通りである:
ステップC4:固定小数点演算部分は、プレフィックス命令によって影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算する;またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送ってその操作を実行する;あるいは検索テーブルの相関命令を実行して、目標命令アドレスの値を獲得し、または目標アドレスへジャンプさせて実行する。]
[0075] 以下に、プロセッサがX86の仮想機をサポートするデータ処理のプロセスは、EFLAG命令に対するサポートである場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法について詳しく説明する。]
[0076] EFLAG命令をサポートするために、二つの方式を提供する:一つは物理レジスタヒープの中の各物理レジスタを64ビットのデータビットと8ビットのフラグビットを含む72ビットに拡張する。演算するとき演算結果のデータ部分とフラグ部分の両方を目標レジスタに書き込む。同時にデコーダ2の中に最新のフラグビットポインタReflagを設置し、このポインタは最新のフラグビットと結合する汎用レジスタの論理番号を示す。もう一つは物理レジスタヒープの中に内部論理レジスタを追加設置してX86のEFLAGフラグビットを実現し、EFLAGを修正するすべての演算命令に対して新しい相関命令を増やして、EFLAGを修正することのみに使用する。]
[0077] 以上の二種類の方式のうち、一つ目では、各レジスタにおいて“横に”EFLAGビットを増やす;二つ目では、すべてのレジスタにおいて“縦に”一つのレジスタを増やしてEFLAGビットの保存のみに使う。]
[0078] 一つの実施可能な方式では、X86_EFLAGSフラグビットをサポートするために、本発明に係るX86の仮想機をサポートするRISCプロセッサ装置において、前記のシミュレートフラグレジスタ71(M-EFLAGS)がX86の命令セットのCISCプロセッサのフラグレジスタ(EFLAGS)のフラグビットを擬似的に実現することに使われる。該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。]
[0079] 以下に本発明のX86の仮想機をサポートするRISCプロセッサのレジスタフラグの処理手順について詳しく説明する。この処理手順は、以下のステップを含む。
ステップ110:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、即ちシミュレートフラグレジスタ71が使用できることをし、デコーダ2は演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードであると識別し、そして違う命令に基づき、シミュレートフラグレジスタ71をソースレジスタ及び/または目標レジスタにデコードする;
シミュレートフラグレジスタ(M-EFLAGS)がX86の命令セットのフラグレジスタ(EFLAGS)のフラグビットを擬似的に実現し、該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。]
[0080] シミュレートフラグレジスタ71が利用できるとき、該演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードにあると識別し、実行結果に基づいて当該シミュレートフラグレジスタ71の値を修正する。そして違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードし、元の目標レジスタの中に結果を保存しなくても済む。]
[0081] 一つの実施可能な方式では、シミュレートフラグレジスタに関連する命令がシミュレートフラグレジスタのフラグビットを修正するとき、該命令の前に同指令がRISCプロセッサのX86の仮想機稼動モードであることを示すプレフィックス命令SETFLAGがあり、この命令は、その以降の命令がX86の仮想機モードにあることを示す。]
[0082] 命令フォーマット:SETFLAG/ EFLAGS稼動モードのプレフィックス命令をシミュレートする
この命令は、該命令の直後の命令がEFLAGS稼動モードをシミュレートしていることを表す。]
[0083] その命令を実行するとき、実行結果に基づいて当該シミュレートフラグレジスタ71のフラグビットの値を修正し、目標レジスタの中に結果を保存しない。以下に具体例をあげる。
正常のMIPS命令:
ADD$5,$1,$2
1番汎用レジスタと2番汎用レジスタの中の値を加算し、その結果を5番汎用レジスタの中に保存することを表す。]
[0084] シミュレートフラグレジスタ71のフラグビットを修正する命令:
SETFLAG
ADD$5,$1,$2
この命令は、1番汎用レジスタと2番汎用レジスタの中の値を加算し、演算結果は保存しないが、結果に基づいてシミュレートフラグレジスタの中のフラグビットの当該ビットを修正することを表す。
デコーダ2の入力セットはすべての可能な32ビットコードであり、すべての合法命令と非法命令を含む。この方式では、デコーダ2が新たな一つの合法入力を増やした:SETFLAG。この命令は、該命令の直後の命令がRISCプロセッサのX86の仮想機稼動モードであり、即ちEFLAGS稼動モードをシミュレートしていることを表す。]
[0085] デコーダ2がプレフィックス命令に基づき、プレフィックス命令後の一つの命令をデコードするとき、その出力はEFLAGS稼動モードをシミュレートしていることに基づき、調整内部の操作コードを固定小数点演算部分3に送り、このときこの命令の目標レジスタがデコードによりシミュレートフラグレジスタ(M-EFLAGS)になり、その中の一つのソースレジスタもシミュレートフラグレジスタ(M-EFLAGS)になる。いくつかの演算は、一部分のシミュレートフラグレジスタ(M-EFLAGS)だけを修正するから、元のシミュレートフラグレジスタ(M-EFLAGS)を固定小数点演算部分3に送り込む必要がある。]
[0086] その中、前記の調整内部操作コード、名前の変更即ち論理レジスタから物理レジスタにマッピングすること、および読み書きレジスタのポートなどの操作内容を含む、これらは当業者が周知する内容であるため、本発明で詳しく説明しない。]
[0087] デコーダ2がデコーディングしたあと、命令を固定小数点演算部分3に出力し、固定小数点演算部分3は内部の操作コードを確認する。正常な命令であれば正常な流れに従って演算する; EFLAGS稼動モードをシミュレートするモードであれば、まず結果を演算し、演算の結果と中間結果に基づいてシミュレートフラグレジスタ(M-EFLAGS)のフラグビットを設置し、目標レジスタの中に演算の結果を保存しなくてもよい。]
[0088] もう一つの発明を実施するための形態では、本発明の中に頻繁に使用されるシミュレートフラグレジスタのフラグビットを修正する命令が、X86の命令に対して一対一で対応し、そうすれば、一つの命令は元の二つの命令(一つのSETFLAGと一つの正常なMIPS命令)に相当する。以下に実例を挙げる。]
[0089] 頻繁に使用されるシミュレートフラグレジスタのフラグビットを修正する加算命令(ADD)について、命令をX86ADDと定義する、そして
X86ADD $5,$1,$2 は
SETFLAG
ADD $5,$1,$2 に
相当する。]
[0090] これらの頻繁に使用される命令について、コーディングの間に独立な命令スロットを分配し、性能部分がこれらの命令を識別したあと、得られた結果を目標レジスタの中に送らずに、結果に基づき当該のシミュレートフラグレジスタ(M-EFLAGS)のフラグビットを得て、フラグビットをシミュレートフラグレジスタ(M-EFLAGS)に送り込む。]
[0091] ステップ120:RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタのフラグビットの値を読み書きし、あるいは/及びシミュレートフラグレジスタのフラグビットの値に基づき制御が行われる。]
[0092] 前記のステップ120において、シミュレートフラグレジスタのフラグビットの値の読み書きは以下のステップを含む。
ステップ121:RISCプロセッサがX86の仮想機の稼動モードである場合、1ビット又は複数ビットのシミュレートフラグレジスタのフラグビットの値を抽出し、その中の8ビットのマスク(mask)の値に基づいて、シミュレートフラグレジスタのフラグビットの値の1ビット或いは複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ71のフラグビットの値を目標レジスタの中に保存する。]
[0093] ステップ122:RISCプロセッサがX86の仮想機の稼動モードである場合、1ビット或いは複数ビットのシミュレートフラグレジスタのフラグビットの値を修正し、その中の8ビットのマスク(mask)の値にも基づいて、シミュレートフラグレジスタのフラグビットの値の1ビット或いは複数ビットを修正することが制御される。ソースレジスタの中の値を使用してシミュレートフラグレジスタを修正する。]
[0094] 一つの実施可能な方式として、本発明の実施例は二つの命令MTFLAGとMFFLAGを通じてシミュレートフラグレジスタのフラグビットの値を修正または読み書きする。これらの命令は、8ビットのマスク(mask)を使用しシミュレートフラグレジスタの当該フラグビットを修正または読み書きし、一つの指定した汎用レジスタの中に、それぞれにシミュレートフラグレジスタのフラグビットの値を書き込み、またはシミュレートフラグレジスタのフラグビットの値を読み込むことはできる。]
[0095] MTFLAG命令は1ビットか複数ビットのシミュレートフラグレジスタ(M-EFLAGS)のフラグビットの値を抽出することを実現する。命令の中の8ビットのマスク(mask)の値(即値で表す)に基づいて、シミュレートフラグレジスタの中の1ビット又は複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ(M-EFLAGS)のフラグビットの値を目標レジスタGPR[rt]の中に保存する。]
[0096] マスク(mask)でシミュレートフラグレジスタのフラグビットを抽出することの実現は、以下の式で表される。
GPR[rt]←M-EFLAGS & mask
たとえば、マスク(mask)の値は0x00000100として、シミュレートフラグレジスタ(M-EFLAGS)の第2ビット、即ちAFビットの内容を抽出し、目標レジスタGPR[rt]の中に入れる。]
[0097] MTFLAG命令は1ビットか複数ビットのシミュレートフラグレジスタ(M-EFLAGS)のフラグビットの値を直接に修正する。命令の中の8ビットのマスク(mask)の値(即値で表す)に基づいてシミュレートフラグレジスタ(M-EFLAGS)の中の1ビット又は複数ビットを修正することが制御される。GPR[rt]ソースレジスタの中の値を使用してシミュレートフラグレジスタ(M-EFLAGS)を修正する。]
[0098] マスク(mask)でシミュレートフラグレジスタのフラグビットを修正することの制御は、以下の式で表される。
M-EFLAGS & mask←GPR[rs]
たとえば、GPR[rs]の低い順番の8ビットの内容は0x00010010として、マスク(mask)の値は0x00110011として、この命令は該シミュレートフラグレジスタ(M-EFLAGS)の中のCF、PF、SFとOFビットを修正し、この4ビットをそれぞれ0、1、1と0に設定させる。]
[0099] 前記のステップ120において、前記の制御の流れは以下のステップを含む。
ステップ121。艨F演算の結果に基づいてシミュレートフラグレジスタ(M-EFLAG)のフラグビットが得られる。]
[0100] たとえば、シミュレートフラグレジスタ(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の中の何ビットを比較し、対応の条件に基づいてプロセッサと関連するジャンプを行う。]
[0101] ここで、違う命令サフィックス(fmt)は違う条件を表し、たとえば「X86J.a fmt=0」は、「CF=0」かつ「ZF=0」のときにジャンプが行われることを表す。
MIPS64命令セットの32ビット命令コードの高い順位の6ビット(31ビット:26ビット)はopcode領域となる。その中のSPECIAL2(opcodeは011100となる)の命令スロットは、MIPSのルールによってユーザが自分で定義してもよいものである。本発明の実施例の新たに増えた命令はすべて既存したMIPS64命令セットの中に保留したSPECIAL2の空スロットの値で実現された。]
[0102] 以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスがX86の浮動小数点のフォーマットと浮動小数点スタックをサポートする場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法の流れを詳しく説明する。]
[0103] X86は一つ特別の演算部分を提供し、この部分は80ビットの浮動小数点の精度をサポートし、しかもスタック操作方式である、以上特徴はRISCプロセッサと大いに違う。本発明は、浮動小数点のフォーマットと浮動小数点スタックに対するサポートを実現するために、三つの64ビット浮動小数点数と80ビット浮動小数点数の間の変換命令を増やし、80ビット浮動小数点数から64ビット浮動小数点数に変換する命令を1つ設置し、64ビット浮動小数点数から80ビット浮動小数点数に変換する命令を2つ設置した。]
[0104] 一つの実施可能な方式では、MIPS命令セットを含むRISC物理レジスタヒープの32個汎用浮動小数点レジスタは、第一から第三浮動小数点レジスタ82としてダイナミックに任意の三つの汎用レジスタを選択し、変換作業に使用する。変換作業が終わったあと、これら三つの汎用レジスタは再びその他の汎用レジスタと無差別で使用される。]
[0105] その中、前記の第一浮動小数点レジスタは、拡張倍精度浮動小数点データの符号ビットとランクを保存することに使われ、該レジスタの低い順位の16ビットを占める。
前記の第二浮動小数点レジスタは、拡張倍精度浮動小数点データの仮数部分を保存することに使われ、全部で64ビットである。]
[0106] 前記の第三浮動小数点レジスタは倍精度浮動小数点データを保存することに使われる。
プロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、X86の仮想機をサポートするRISCプロセッサのデータ処理方法の流れは以下のステップを含む。]
[0107] ステップ210:メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわけ、それぞれ違う第一浮動小数点レジスタと第二浮動小数点レジスタの中に保存し、浮動小数点演算部分4によって64ビットの倍精度浮動小数点データに変換し、第三浮動小数点レジスタの中に保存する。]
[0108] ステップ210は具体的に以下のステップを含む。
ステップ211:メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわける。]
[0109] 一つの80ビットの浮動小数点データの第64ビットでそのデータをわけ、第80ビットから第64ビットまでは第一部分であり、全部で16ビットである。第63ビットから第0ビットまでは第二部分であり、全部で64ビットである。そのデータをわけた後、ユーザが既存の一種類の読み込む方式(MIPSが多種類の読み込む方式を提供する)を選択し、それぞれ二つの部分を二つの浮動小数点レジスタ$f(i),$f(j)に読み込む。]
[0110] ステップ212:浮動小数点レジスタ$f(i)の中に80ビットの拡張倍精度浮動小数点データの符号ビットとランクを保存し、該レジスタの低い順位の16ビットを占める。
ステップ213:浮動小数点レジスタ$f(j)の中に80ビットの拡張倍精度浮動小数点データの仮数部分を保存し、全部で64ビットである。]
[0111] ステップ214:浮動小数点レジスタ$f(i)と浮動小数点レジスタ$f(j)をソースレジスタとして、浮動小数点レジスタ$f(t)を目標レジスタとして、浮動小数点レジスタ$f(i)と浮動小数点レジスタ$f(j)の中に保存された80ビットの拡張倍精度浮動小数点データを64ビットの倍精度浮動小数点データに変換する。]
[0112] 一つの実施可能な方式として、前記の変換は命令(1)によって実行されてもよい。
CVT.D.LD $f(t), $f(i), $f(j)//*拡張倍精度を倍精度に変換する (1)
MIPS64の命令セットの32ビット命令コードの高い順位の6ビット(31ビット:26ビット)はopcode領域となる。その中のSPECIAL2(opcodeは011100となる)の命令スロットはMIPSのルールによってユーザが自分で定義してもよいものである。本発明の実施例では、既存するMIPS64命令セットの中に保留したSPECIAL2の空スロットの値を利用し、それを定義する。]
[0113] 式(1)は二つのスタックレジスタ$f(i), $f(j) の拡張倍精度データを倍精度データに変換し、スタックレジスタ$f(t)の中に保存することを表す。
出力された64ビットのデータを浮動小数点レジスタ$f(t)の中に保存し、64ビットの倍精度浮動小数点データが得られる。]
[0114] ステップ220:第三浮動小数点レジスタの中の64ビットの倍精度浮動小数点データから符号ビットとランク部分および仮数部分を抽出し、浮動小数点演算部分4によって80ビットの浮動小数点データの符号ビットとランク部分および80ビットの浮動小数点データの仮数部分に変換する。更にこれらをそれぞれ第一浮動小数点レジスタと第二浮動小数点レジスタの中に保存し、二つのレジスタで80ビットの拡張倍精度浮動小数点データを表し、80ビットの浮動小数点データが得られる。]
[0115] ステップ220は具体的に以下のステップを含む。
ステップ221:一つの64ビットの倍精度浮動小数点データを浮動小数点レジスタ$f(t)の中に保存する。]
[0116] ステップ222:全部で11ビットである浮動小数点レジスタ$f(t)の中の倍精度浮動小数点データの符号ビットとランク部分を抽出し、全部で16ビットである80ビットの拡張倍精度浮動小数点データの符号ビットとランク部分に変換し、浮動小数点レジスタ$f(i)の中に保存する。]
[0117] 一つの実施可能な方式として、前記の変換は命令(2)によって実行されてもよい。
CVT.UD.D $f(i), $f(t) //*倍精度を拡張倍精度の高位に変換する (2)
浮動小数点レジスタ$f(t)で示した倍精度データを拡張倍精度データの高い順位の16ビットに変換し、浮動小数点レジスタ$f(i)の中に保存する。]
[0118] 変換後のランクを0拡張したあとに、64ビットの浮動小数点データが得られる。目標レジスタが64ビットであるため、実は、ここでは16ビットのデータで十分である。しかし、64ビットの目標レジスタ$f(i)の中に保存するために、16ビット以上の48ビットを0拡張し、浮動小数点レジスタ$f(i)の中に保存しなければならない。]
[0119] ステップ223:全部で53ビットである浮動小数点レジスタ$f(t)の中の仮数部分を抽出し、全部で64ビットである80ビットの浮動小数点データの仮数部分に変換し、浮動小数点レジスタ$f(j)の中に保存する。]
[0120] 抽出作業は浮動小数点演算部分4の中で完成し、抽出された53ビットのデータを80ビットの浮動小数点データの仮数部分の64ビットに変換する。
一つの実施可能な方式として、前記の変換は命令(3)によって実行されてもよい。
CVT.LD.D $f(j), $f(t) //*倍精度を拡張倍精度の低位に変換する (3)
浮動小数点レジスタ$f(t)で示した倍精度データを拡張倍精度データの低い順位の64ビットに変換し、浮動小数点レジスタ$f(j)の中に保存する。]
[0121] 前記の抽出、変換はIEEE754の基準の関連する規定に従って行われても良い。この分野の技術者が命令(2)に基づいて本発明の変換を実現することはできるため、本発明で詳しく説明しない。]
[0122] 変換後の仮数を浮動小数点レジスタ$f(j)の中に保存する。
ステップ224:浮動小数点レジスタ$f(i)の値を符号ビットとランクとして、浮動小数点レジスタ$f(j)の値を仮数として、80ビットの拡張倍精度浮動小数点データが得られる。]
[0123] 本発明の浮動小数点データの変換により、X86ではないアーキテクチャのプロセッサでもX86の中の特別な80ビットの浮動小数点データ型をサポートすることができ、仮想機の二進法の命令の翻訳作業が便利になり、仮想機の効率を向上させるとともに、プロセッサのコンパチビリティを向上させることができる。]
[0124] また、X86のアーキテクチャの中に、いくつかの浮動小数点命令に係る浮動小数点レジスタ番号は相対的な値であり、浮動小数点状態文字の中の浮動小数点ループスタックのスタックTOPポインタのTOPと加算した後にのみ、本当の浮動小数点レジスタ番号となる。この問題を解決するため、本発明はデコーダ2にTOPポインタレジスタ22を設置し、浮動小数点物理レジスタヒープの中の浮動小数点制御レジスタ81の中に一つのスタックイネーブル信号を設置して、浮動小数点スタックをシミュレートするために八つの浮動小数点レジスタを選択するかどうかを決める。スタックイネーブルビットがセットされた場合は、当該の浮動小数点命令が演算するとき、レジスタ番号が8より小さいレジスタは、デコードするときにTOPの値に基づいて自分のソースまたは目標論理レジスタ番号を修正し、さらに命令の内容に基づきTOP値を修正してプロセッサに送り込む;スタックイネーブルビットがクリアされた場合は、演算のときにレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って通常の通りに処理を正常に実行する。]
[0125] 前記の浮動小数点制御レジスタ81は、浮動小数点レジスタヒープ8を利用して、浮動小数点レジスタスタック83のシミュレートをイネーブルさせるか禁止させるかを制御することに使われる。]
[0126] このレジスタは、一つのスタックイネーブルビットを維持し、イネーブルビットを1に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートすることが表される;イネーブルビットを0に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートせず、普通な流れで処理が行われることが表せる。]
[0127] 本発明の実施例では、RISCプロセッサにおいて番号が0〜31である32個の既存浮動小数点レジスタを利用して、X86のプロセッサの浮動小数点レジスタスタック操作をシミュレートする。]
[0128] 前記のTOPポインタレジスタ22はTOPポインタ即ちスタックの操作ポインタを維持して、TOPポインタの値を保存することに使われる。このTOPポインタは、読み込まれること、書き込まれること、1増加すること、1減少するなどが可能である。]
[0129] 前記のポインタ操作モジュール41は、ポインタレジスタを操作し、浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタのスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。]
[0130] 一つの実施可能な方式では、浮動小数点制御レジスタ81の中のスタックイネーブルビットがセットされた場合は、32個の浮動小数点レジスタの中の八つのレジスタを選択し、番号が0〜7であるX86のプロセッサの浮動小数点レジスタスタックのスタックレジスタをシミュレートすることに使用する。]
[0131] 浮動小数点制御レジスタ81の中のスタックイネーブルビットは1に設定された場合は、演算の中に使用され、レジスタがシミュレートした浮動小数点レジスタスタックが存在することを表す。そして浮動小数点演算命令の中に使われた番号が8より小さいレジスタの全てが、浮動小数点レジスタスタック83のスタックレジスタとして使用され、これによりX86のプロセッサの浮動小数点レジスタスタックをシミュレートする。]
[0132] その後、ポインタ操作モジュールはTOPポインタを使用してスタックレジスタ番号の変換、即ちユーザで見た浮動小数点レジスタ番号とプログラムで使用した浮動小数点レジスタ番号との変換を行う。たとえば、レジスタ番号は、スタックTOPからi番目のユニットのレジスタST(i)にTOPポインタを加算した値を指す。TOPポインタの値が2であると、ST(0)が第2番のレジスタであり、ST(1)が第3番のレジスタである。オーバーフローに対しても対応の処理が行われるとき、このグループのレジスタが一つのループスタックになり、X86の中の浮動小数点レジスタスタックの機能をシミュレートする、という本発明の目的を達成できる。そして次の処理を行う。なお、つぎの作業は、スタックイネーブルビットがセットされない場合と同じである。]
[0133] 浮動小数点制御レジスタ81の中のスタックイネーブルビットが0に設定された場合、即ちクリアされた場合は、演算のときレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って処理を通常の通りに実行する。]
[0134] 以下に本発明に係るX86の仮想機をサポートするRISCプロセッサの浮動小数点スタック操作をシミュレートする方法の流れをさらに詳しく説明する。この方法では、RISCプロセッサの八つの浮動小数点レジスタにより浮動小数点レジスタスタック83を構成し、浮動小数点制御レジスタ81を通じてX86のTOPポインタ機能即ちスタックポインタ操作機能をシミュレートし、浮動小数点レジスタのスタック操作をシミュレートすることが完成される。]
[0135] 本発明のX86の仮想機が利用できるRISCプロセッサの浮動小数点レジスタのスタック操作をシミュレートする方法は以下のステップを含む。
ステップ2100:スタックイネーブルビットに基づいて、八つの浮動小数点レジスタを選択して浮動小数点レジスタスタックの中の八つのスタックレジスタをシミュレートし、浮動小数点レジスタのスタック操作をシミュレートし、さらにポインタレジスタを設置するかどうかを決める。]
[0136] 前記のステップ2100は以下のステップを含む。
ステップ2110:浮動小数点制御レジスタ81の中に1ビットを浮動小数点スタックイネーブルビットとする;イネーブルビットを1に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートし、浮動小数点スタック操作が行われることが表される;イネーブルビットを0に設定する場合、X86のプロセッサの浮動小数点スタックをシミュレートせず、浮動小数点スタック操作ができず、通常通りの流れで処理が行われることが表される。]
[0137] ステップ2120:一つの少なくとも3ビットのポインタレジスタを設置し、TOPポインタの値を保存する。
該TOPポインタの値は、読み込まれること、書き込まれること、1増加すること、1減少すること等が可能であり、TOPポインタの範囲は0〜7である。]
[0138] TOPポインタは、スタックプッシュのときに7番のレジスタにプッシュされ、TOPポインタの値を6と設置する;スタックポップのときに、TOPポインタの値が7であれば、スタックをポップした後にTOPポインタの値を0と設置する。]
[0139] 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になるはずである。]
[0140] たとえば、TOPポインタの値は3であり、イネーブルビットが1となるとき、演算の浮動小数点レジスタは$f(i):i<=7であれば、浮動小数点レジスタ$f(j)が浮動小数点レジスタ$f(i)の代わりに演算を行い、ここで、j=(i+3) mod 8;
もしレジスタ$f(i):i>7であれば、変更しなくてもよく、直接浮動小数点レジスタ$f(i)を使用する。]
[0141] ステップ2200:浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視する。]
[0142] 前記のステップ2200は以下のステップを含む。
ステップ2210:スタック操作モードを設置し、浮動小数点スタックイネーブルビットを1に設定し、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを許容する。]
[0143] 一つの実施可能な方式では、シミュレート浮動小数点スタックモードを設置し、X86の浮動小数点スタックモードを1にするために以下の命令で実行する。
その命令フォーマット:SETTM
本発明のメモリーアクセス拡張命令は、MIPS命令セットにおけるSPECIAL2の空スロットの保留した値で、拡張命令を定義する。]
[0144] 命令でイネーブルビットを1にする操作が完成し、X86の浮動小数点スタックモードをセットし、ユーザがX86の浮動小数点スタック使用して浮動小数点操作することを許容する。]
[0145] ステップ2220:スタック操作モードをクリアし、浮動小数点スタックイネーブルビットを0にし、ユーザが浮動小数点レジスタスタックをシミュレートして浮動小数点スタックを操作することを禁止する。]
[0146] 一つの実施可能な方式として、本発明の実施例ではシミュレート浮動小数点スタックモードをクリアし、X86の浮動小数点スタックモードを0にする命令フォーマット:CLRTM
これはX86の浮動小数点スタックモードをクリアすることで、ユーザがX86の浮動小数点スタックを使用することを禁止し、MIPSプロセッサの浮動小数点レジスタを使用して浮動小数点操作を行わなければならない。]
[0147] このセット、クリアのスタックポインタ操作命令は、それぞれ浮動小数点レジスタスタックの活性化、禁止処理を実現することができる。
ステップ2230:スタック操作ポインタの値が1増加し、即ちTOPポインタの値が1増加する;
一つの実施可能な方式として、本発明の実施例では、スタックポインタの値が1増加し、即ちTOPポインタの値が1増加する命令フォーマット:INCTOP
ステップ2240:スタック操作ポインタの値が1減少し、即ちTOPポインタの値が1減少する;
一つの実施可能な方式として、本発明の実施例ではスタックポインタの値が1減少し、即ちTOPポインタの値が1減少する命令フォーマット:DECTOP
該TOPポインタの値が1増加する命令、1減少する命令は、それぞれX86のプロセッサの浮動小数点スタックのスタックプッシュ、スタックポップをシミュレートすることができる。]
[0148] ステップ2250:スタック操作ポインタの値を読み出し、即ちTOPポインタの値を読み出す;
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を読み出す操作命令のフォーマット:MFTOP rd
その命令の機能はX86の浮動小数点スタックTOPポインタの値をレジスタGPR[rd]に読み込むことである。]
[0149] ステップ2260:スタック操作ポインタの値を書き込み、即ちポインタレジスタの中に当時のTOPポインタの値を書き込む;
一つの実施可能な方式として、本発明の実施例ではTOPポインタの値を書き込む操作命令のフォーマット:MTTOP imm
その命令の機能はX86の浮動小数点スタックTOPポインタに3ビットの即値immを書き込むことである。]
[0150] そのTOPポインタを読み込む命令及び同TOPポインタを書き込む命令は浮動小数点スタックの操作制御に便利である。
本発明のX86の仮想機をサポートするRISCプロセッサが浮動小数点スタックの操作をシミュレートする流れをさらに理解するために、加法演算におけるスタックポインタ操作を例として以下に説明する。]
[0151] イネーブルビットを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値は変化しない。]
[0152] また、浮動小数点スタックの存在によって、一つの浮動小数点スタックオーバーフローのチェックメカニズムが必要となり、このチェックメカニズムはリアルタイムで浮動小数点スタックの状態を監視し、浮動小数点スタックのオーバーフローの例外の広げることを防ぐ。]
[0153] 本発明の実施例では、本発明のRISCプロセッサにおいて、前記の浮動小数点レジスタスタック83は、浮動小数点演算が直接できる八つのスタックレジスタからなり、順番で番号が付けられ、それぞれ0〜7になる;
本発明の実施例のRISCプロセッサにおいて、前記のオーバーフローチェックレジスタ72は、X86の浮動小数点フラグレジスタ中のTAG機能を実現し、浮動小数点レジスタスタック83中のスタックレジスタに浮動小数点アクセスするときスタックオーバーフロー例外が発生するかどうかをチェックすることに使われる。オーバーフローチェックレジスタ72は、少なくとも8ビットの複数ビットレジスタであり、TAGビット即ちオーバーフローチェック機能ビットを表し、それぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表す。]
[0154] 本発明の実施例において、一つの汎用レジスタr(i)を選択し、その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表す。]
[0155] 汎用レジスタr(i) の低い順位の8ビットの中、各ビットが一つの浮動小数点レジスタスタック83中のスタックレジスタと対応し、各ビットの値は違う状態と示す。ここで、0が空を表し、スタックプッシュができるが、スタックポップができない。スタックポップが行われると、オーバーフローが発生することとなる;1が有効を表し、再度のスタックプッシュができない。再度のスタックプッシュが行われると、オーバーフローが発生することとなる。]
[0156] 一つの実施可能な方式では、本発明のRISCプロセッサは、0〜31、全部で32個の複数ビット浮動小数点レジスタからなる浮動小数点レジスタスタック83を含む。その中の0〜7番、全部で八つのスタックレジスタがX86の浮動小数点レジスタスタック83の八つのスタックレジスタをシミュレートする;RISCプロセッサは、さらに32ビットの汎用レジスタ(固定小数点) r(i)を含む。その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表し、X86の浮動小数点スタックのメカニズムのTAG機能を実現する。]
[0157] 前記のスタックオーバーフロー判断モジュール43は、指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行うことに使われる。]
[0158] 以下に本発明X86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法の流れをさらに詳しく説明する。RISCプロセッサの八つのスタックレジスタにより浮動小数点レジスタスタック83を構成し、一つの汎用レジスタによりオーバーフローチェックレジスタ72を構成し、その低い順位の8ビットでX86のTAG機能をシミュレートし、各ビットが一つのスタックレジスタの違う状態と対応する。]
[0159] 本発明のX86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法は以下のステップを含む。
ステップ21000:指定された浮動小数点レジスタスタック中のスタックレジスタをチェックし、スタックレジスタの値に基づきオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行う。]
[0160] 前記のステップ21000は以下のステップを含む。
ステップ21100:浮動小数点レジスタスタック中の指定したスタックレジスタが空であるかどうかをチェックする。空である場合には、指定したオーバーフローチェックレジスタ72のTAGビットの対応ビットを1にし、次のステップに進む;空でない場合には、浮動小数点スタックオーバーフロー例外が発生する。]
[0161] ステップ21200:浮動小数点レジスタスタック中の指定したスタックレジスタが有効であるかどうかをチェックする。有効である場合には、指定したオーバーフローチェックレジスタ72のTAGビットの対応ビットを0にし、次のステップに進む;有効でない場合には、浮動小数点スタックオーバーフロー例外が発生する。]
[0162] ステップ21300:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中のデータをスタックポップする必要がない場合には、指定したオーバーフローチェックレジスタ72のTAGビットの値を維持し、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。]
[0163] ステップ21400:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつ一つのスタックレジスタ中のデータをスタックポップする必要がある場合には、データをスタックポップする必要があるスタックレジスタに対応するオーバーフローチェックレジスタ72のTAGビットが対応するビットを0にし、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。]
[0164] ステップ21500:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中の全てのデータをスタックポップする必要がある場合には、対応するオーバーフローチェックレジスタ72のTAGビットに対応する二つのビットを0にし、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。]
[0165] 以下に浮動小数点レジスタのスタックプッシュの操作を例として、RISCプロセッサにおいて行われる浮動小数点スタックオーバーフローのチェックの方法をさらに詳しく説明する。]
[0166] まず、RISCプロセッサが浮動小数点レジスタスタックのスタックTOPを確認し、該スタックTOPのスタックレジスタに対応するオーバーフローチェックレジスタ72のTAGビットを読む出す。]
[0167] RISCプロセッサが本発明の浮動小数点レジスタスタックに基づき、浮動小数点レジスタスタックのスタックTOPを判断して確認し、対応した本発明のスタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72のTAGビットを確認することは、現在にある技術であり、本発明で創造したものではなく、この分野の技術者は本発明の実施例によって以上の操作を実現できるから、本発明で詳しく説明しない。]
[0168] スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72の対応するTAGビットが0であるかどうかを判断する。
0である場合、スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72の対応するTAGビットを1にし、データを該スタックレジスタに書き込み、そして終わって戻る;
0でない場合、スタックオーバーフロー例外が発生する。]
[0169] 一つの実施可能な方式として、本発明の実施例において、オーバーフローチェックレジスタr(3)の低い順位の8ビットとして汎用レジスタr(3)を選択し、即ちbit r(3)_0〜bit r(3)_7がそれぞれ浮動小数点レジスタスタック中のスタックレジスタf(0)〜f(7)の状態と対応する。]
[0170] 1)スタックプッシュ操作が行われ、かつスタックTOPがスタックレジスタf(5)にある場合には、
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が0であるかどうかを判断する;
0である場合、オーバーフローチェックレジスタのbit r(3)_4を1にし、データをスタックプッシュし、スタックレジスタf(5)に保存する;
1である場合、スタックオーバーフロー例外が発生する。]
[0171] 2)スタックポップ操作が行われ、かつスタックTOPはスタックレジスタf(5)にある場合には、
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する;
1である場合、オーバーフローチェックレジスタのbit r(3)_4をクリアし、データをスタックポップし、指定した浮動小数点レジスタに保存する;
0である場合、スタックオーバーフロー例外が発生する。]
[0172] 3)演算操作が行われ、かつ2つのソース操作データはそれぞれスタックレジスタf(4)とf(5)の中にある場合には、
オーバーフローチェックレジスタr(3)の第4ビット、即ちbit r(3)_3が1であるかどうかを判断する;
0である場合、スタックオーバーフロー例外が発生する;
1である場合、次のステップに進む;
オーバーフローチェックレジスタr(3)の第5ビット、即ちbit r(3)_4が1であるかどうかを判断する;
1である場合、次のステップに進む;
0である場合、スタックオーバーフロー例外が発生する。]
[0173] 4)演算とスタックポップ操作が行われ、かつ2つのソース操作データはそれぞれスタックレジスタ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をクリアし、次の演算操作に進む。]
[0174] 5)演算と連続のスタックポップ操作が行われ、かつ2つのソース操作データはそれぞれスタックレジスタ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である場合、スタックオーバーフロー例外が発生する。]
[0175] 以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスがX86の保存構造をサポートする場合における本発明のRISCプロセッサのデータ処理の流れを詳しく説明する。]
[0176] X86のプロセッサにセグメントレジスタがあるため、ユーザモードであっても、X86の保存、アクセス、アドレッシングと保護方式が比較的に特別なものである。ゆえに、本発明はメモリーアクセスアドレスが界に越えたかどうかを判断できる読み書き操作を提供し、即ちloadとstore操作のソースレジスタの中に、一つのboundレジスタがある。このboundレジスタは、アドレスの演算又はデータの保存に使われるものではなく、アクセスアドレスの比較に使われる。もしアクセスアドレスが該boundレジスタの決めた境に超えたことを発見した場合、アドレスが界を越えた例外が発生するが発生した旨を知らせる。]
[0177] アドレスの界が上界と下界に分けられ、メモリーアクセスの有効アドレスを上界以下に、または下界以上に設定しなければならない。これらの命令は、メモリーアクセスアドレスの条件が満足された場合は正常にメモリーアクセスし、そうでない場合はアドレスエラーの例外が発生する。]
[0178] 仮想機をサポートするRISCプロセッサにおいては、X86の命令セットからRISCプロセッサのMIPS命令セットへの翻訳中にメモリーアクセス操作が行われた場合、メモリーアクセスアドレスの判断を増やして、メモリーアクセスアドレスが界に越えたかどうかを判断し、X86のメモリーアクセス操作の翻訳スピードを増加させる。]
[0179] 一つの実施可能な方式として、本発明の実施例に係る前記の物理レジスタヒープの上界アドレスレジスタが上界としての有効アドレスを保存することに使われる;また、下界アドレスレジスタが下界としての有効アドレスを保存することに使われる。]
[0180] 前記の上界、下界アドレスレジスタは物理レジスタ中の任意の汎用物理レジスタであってもよい。
前記の上界、下界判断モジュールは、メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて命令操作データアドレスの有効性を判断する。]
[0181] MIPS命令セット中の各メモリーアクセス命令、例えばload命令またはstore命令に、界の判断を増やし、メモリーアクセスアドレスが条件に満足された場合は、これらの命令が正常にメモリーアクセスし、そうでない場合は、MIPS中のアドレスエラーの例外が発生する。]
[0182] 命令デコードした後、レジスタ中のアドレス限界は命令の一つのレジスタ操作データとして機能し、操作内容データがbase方式に基づいて有効なアドレスを形成した後、該有効アドレスがまずレジスタ中のアドレス限界と比較する。命令のセマンティック条件を満たした場合、即ちレジスタが上界アドレスレジスタである場合、該有効アドレスがレジスタ中のアドレス限界以下であり、また、レジスタが下界アドレスレジスタであり、該有効アドレスがレジスタ中のアドレス限界以上である場合、正常なメモリーアクセス操作が行われる;そうでない場合は、アドレスエラーの例外が発生する。]
[0183] 本発明の実施例の中、一つの実施可能な方式として、load命令とstore命令を含むMIPS命令セット中の合計24個のメモリーアクセス命令に界の判断を増やした。
その中、8個の固定小数点命令と4個の浮動小数点命令を含む12個のload命令は、アドレッシング方式がすべてbase方式である。]
[0184] これらの命令は、それぞれに上界条件つきのバイトロード、下界条件つきのバイトロード、上界条件つきのハーフワードロード、下界条件つきのハーフワードロード、上界条件つきのワードロード、下界条件つきのワードロード、上界条件つきのダブルワードロード、下界条件つきのダブルワードロード、上界条件つきの単精度浮動小数点数ロード、下界条件つきの単精度浮動小数点数ロード、上界条件つきの倍精度浮動小数点数ロード、下界条件つきの倍精度浮動小数点数ロード命令中の一種類または一種類以上の組み合わせである。]
[0185] 以下に命令を詳しく説明する。
gsLBLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。]
[0186] gsLBGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。]
[0187] gsLHLErt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0188] gsLHGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0189] gsLWLErt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0190] gsLWGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0191] gsLDLErt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存する。]
[0192] 前記の有効アドレスが整列し3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLDGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存する。]
[0193] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLWLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存する。]
[0194] 前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLWGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存する。]
[0195] 前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsLDLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0196] gsLDGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0197] 本発明の実施例は既存のMIPS64命令セットの中に保留されたLWC2とSWC2の空スロットの値を利用し定義する。MIPS64の命令セットの32ビット命令コードの高い順位の6ビット(31ビット:26ビット)はopcode領域となるため、LWC2と(opcodeは110010となる)SWC2(opcodeは111010となる)の命令スロットはMIPSのルールによってユーザが自分で定義してもよいものである。]
[0198] 8個の固定小数点命令と4個の浮動小数点命令を含む12個のstore命令はアドレッシング方式がすべてbase方式である。
これらの命令は、それぞれに上界条件つきのバイト保存、下界条件つきのバイト保存、上界条件つきのハーフワード保存、下界条件つきのハーフワード保存、上界条件つきのワード保存、下界条件つきのワード保存、上界条件つきのダブルワード保存、下界条件つきのダブルワード保存、上界条件つきの単精度浮動小数点数保存、下界条件つきの単精度浮動小数点数保存、上界条件つきの倍精度浮動小数点数保存、下界条件つきの倍精度浮動小数点数保存命令中の一種類または一種類以上の組み合わせである。]
[0199] 以下に命令を詳しく説明する。
gsSBLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容より大きい場合アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存する。]
[0200] gsSBGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存する。]
[0201] gsSHLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーが発生する例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存する。]
[0202] 前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
gsSHGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存する。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0203] gsSWLErt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0204] gsSWGT rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0205] gsSDLE rt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0206] gsSDGTrt, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0207] gsSWLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0208] gsSWGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存する。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0209] gsSDLEC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0210] gsSDGTC1 ft, base, bound
まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存する。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0211] 同時に上界、下界を判断する命令において、アドレスが同時に上界条件と下界条件を満足しなければならない。一つの限界の条件が満たされないと、限界を越える例外が発生する。]
[0212] 前記の上界、下界判断モジュールは、メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて、命令アドレスの有効性を判断する。]
[0213] 一つの実施可能な方式では、RISCプロセッサのMIPS命令セットの中に二つの命令を増やし、レジスタの値の比較に使われる。この二つの命令は、アドレスが界を越えたかどうかを判断することに使われる。アドレスが条件に満足された場合は空操作となり、アドレスが条件に満足されなかった場合はRISCプロセッサにおけるアドレスエラーの例外が発生する。]
[0214] そして、二つの命令、即ちgsLErs,rtとgsGTrs,rtが実現される。以下に命令を詳しく説明する。
gsLE rs,rt
レジスタ中の値を比較し、アドレスエラーの例外が発生する条件を設置する。]
[0215] 汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較し、GPR[rs]中の値がGPR[rt]中の値以下である場合、次の命令が実行される;GPR[rs]中の値がGPR[rt]中の値よりも大きい場合は、adelの例外が発生する。]
[0216] gsGTrs,rt
レジスタ中の値を比較し、アドレスエラーの例外が発生する条件を設置する。
汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較し、GPR[rs]中の値がGPR[rt]中の値より大きい場合、次の命令が実行される; GPR[rs]中の値がGPR[rt]中の値以下である場合は、adelの例外が発生する。]
[0217] この二つの命令はアドレスの比較に使われる。rsレジスタ中にアドレスの限界値を保存し、rtレジスタ中に比較しようとする有効アドレスを保存する。もし条件が満たされない場合は、次の命令が実行され、条件が満たされた場合は、アドレスエラーの例外が発生する。]
[0218] この二つの命令はそれぞれ汎用レジスタGPR[rs]と汎用レジスタGPR[rt]中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値以下であり、或いはGPR[rt]中の値よりも大きい場合は、次の命令が実行される;そうではない場合は、アドレスエラーの例外が発生する。ここで、「以下」はgsLErs,rtに対応する表現であり、「よりも大きい」はgsGTrs,rtに対応する表現である。]
[0219] 本発明のX86の仮想機をサポートするRISCプロセッサの、限界があるメモリーアクセスの流れは以下のステップを含む。
ステップ31:X86の仮想機をサポートするRISCプロセッサにおいて、物理レジスタヒープ中の二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ74と設置する
その中、上界アドレスレジスタは上界とした有効アドレスを保存する;下界アドレスレジスタは下界とした有効アドレスを保存する。]
[0220] ステップ32:X86の仮想機の命令セットをMIPS命令セットへ翻訳するとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られる。
ステップ33:固定小数点演算部分3は、デコードした後のメモリーアクセス命令において、上界アドレスレジスタに保存された上界アドレス及び/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスの有効性を判断する。]
[0221] MIPS命令セット中の各メモリーアクセス命令、例えばload命令またはstore命令において、界の判断を増やし、これらの命令はメモリーアクセスアドレスが条件を満たす場合は正常にメモリーアクセスし、条件を満たさない場合はMIPS中のアドレスエラーの例外が発生する。]
[0222] 前記のステップ33は以下のステップを含む。
ステップ331:命令デコードした後、レジスタ中のアドレス限界は命令の一つのレジスタ操作データとして機能し、操作内容データがbase方式に基づいて有効なアドレスを形成する;
ステップ332:該有効アドレスがまずレジスタ中のアドレス限界と比較する;
ステップ333:命令のセマンティック条件を満たした場合、即ちレジスタが上界アドレスレジスタである場合、該有効アドレスがレジスタ中のアドレス限界以下であり、また、レジスタが下界アドレスレジスタであり、該有効アドレスがレジスタ中のアドレス限界以上である場合、正常なメモリーアクセス操作が行われる;そうでない場合は、アドレスエラーの例外が発生するとなる。]
[0223] 具体的に、前記のステップ333において、ロード操作データ(load)命令操作は、
上界条件つきのバイトロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLBLE rt, base, boundである。]
[0224] 下界条件つきのバイトロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この有効アドレスに基づいてメモリーの中から8ビットのバイトデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存し、即ちgsLBGTrt, base, boundである。]
[0225] 上界条件つきのハーフワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に、同データをGPR[rt]に保存し、即ちgsLHLErt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0226] 下界条件つきのハーフワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から16ビットのハーフワードデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLHGTrt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0227] 上界条件つきのワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合はアドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスによってメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後に同データをGPR[rt]に保存し、即ちgsLWLErt, base, boundである。
前記の有効アドレスが整列しており、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0228] 下界条件つきのワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのワードデータを取り出し、このデータについて符号ビットの拡張を行った後にGPR[rt]に同データを保存し、即ちgsLWGTrt, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0229] 上界条件つきのダブルワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存し、即ちgsLDLErt, base, boundである。]
[0230] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきのダブルワードロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのダブルワードデータを取り出し、GPR[rt]に保存し、即ちgsLDGTrt, base, boundである。]
[0231] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
上界条件つきの単精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存し、即ちgsLWLEC1 ft, base, boundである。]
[0232] 前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの単精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下であれば、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から32ビットのデータを取り出し、FPR[ft]の低い32ビットに保存し、即ちgsLWGTC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0233] 上界条件つきの倍精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存し、即ちgsLDLEC1 ft, base, boundである。]
[0234] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの倍精度浮動小数点数ロード命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、この整列した有効アドレスに基づいてメモリーの中から64ビットのデータを取り出し、FPR[ft]に保存し、即ちgsLDGTC1 ft, base, boundである。]
[0235] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
前記のステップ333において、保存操作データ(store)命令操作は、
上界条件つきのバイト保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存し、即ちgsSBLE rt, base, boundである。]
[0236] 下界条件つきのバイト保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの有効アドレスにGPR[rt]中の8ビットのバイトデータ内容を保存し、即ちgsSBGTrt, base, boundである。]
[0237] 上界条件つきのハーフワード保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存し、即ちgsSHLE rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0238] 下界条件つきのハーフワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の16ビットのハーフワードデータ内容を保存し、即ちgsSHGT rt, base, boundである。
前記の有効アドレスが整列し、1ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0239] 上界条件つきのワード保存命令である場合、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存し、即ちgsSWLErt, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0240] 下界条件つきのワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の32ビットのワードデータ内容を保存し、即ちgsSWGT rt, base, boundである。
前記の有効アドレスが整列し、もし低い2ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0241] 上界条件つきのダブルワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDLE rt, base, boundである。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0242] 下界条件つきのダブルワード保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、もし有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにGPR[rt]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDGTrt, base, boundである。
前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0243] 上界条件つきの単精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存し、即ちgsSWLEC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0244] 下界条件つきの単精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の低い32ビットのワードデータ内容を保存し、即ちgsSWGTC1 ft, base, boundである。
前記の有効アドレスが整列し、2ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0245] 上界条件つきの倍精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容よりも大きい場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDLEC1 ft, base, boundである。]
[0246] 前記の有効アドレスが整列し、3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。
下界条件つきの倍精度浮動小数点数保存命令である場合は、まずはGPR[base]の内容の中から有効なアドレスを得て、有効なアドレスがGPR[bound]中の内容以下である場合は、アドレスエラーの例外が発生する;そうでない場合は、メモリー中のこの整列した有効アドレスにFPR[ft]中の64ビットのダブルワードデータ内容を保存し、即ちgsSDGTC1 ft, base, boundである。
前記の有効アドレスが整列し3ビット低いアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生するのが好ましい。]
[0247] 前記のステップ33はさらに以下のステップを含む。
ステップ334:同時に上界、下界を判断する命令において、アドレスが同時に上界条件と下界条件を満足しなければならない。一つの限界の条件が満たされないと、限界を越える例外が発生する。]
[0248] 前記のステップS300の後にさらに以下のステップを含むことがより好ましい。
ステップ34:メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて、命令アドレスの有効性を判断する。]
[0249] 前記のステップ34は以下のステップを含む。
ステップ341:ロード操作データ(load)命令において、汎用レジスタGPR[rs]即ち上界アドレスレジスタと汎用レジスタGPR[rt] 即ち下界アドレスレジスタ中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値以下であると、次の命令が実行される; そうでない場合は、adelの例外が発生し、即ちgsLErs,rtである。]
[0250] ステップ342:、保存操作データ(store)命令において、汎用レジスタGPR[rs]即ち上界アドレスレジスタと汎用レジスタGPR[rt] 即ち下界アドレスレジスタ中の値を比較する。もしGPR[rs]中の値がGPR[rt]中の値より大きいと、次の命令が実行される; そうでない場合は、adelの例外が発生し、即ちgsGTrs,rtである。]
[0251] 本発明のRISCプロセッサの、限界があるメモリーアクセスの方法は、RISCプロセッサがサポートする仮想機において、X86の仮想機命令からMIPS命令セットへの翻訳を行う二進法コードがRISCプロセッサで稼動するとき、稼動速度を向上させ、仮想機の稼動速度への影響を低減し、仮想機の稼動効率を向上させる。]
[0252] 以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスが仮想のメカニズムに対するサポートである場合、RISCプロセッサがX86の仮想機をサポートするデータ処理方法を詳しく説明する。]
[0253] X86の命令とRISCプロセッサ命令の機能の差以外にも、仮想機システム自身の消耗も仮想機の性能低下と繋がるから、仮想機のメカニズム自身に対して必要なサポートを提供することが要求される。このサポートは、主に以下の三つの事項を含む。]
[0254] N1)仮想機のコードと翻訳されたMIPSコードとの切り替えのサポート
仮想機の設計において、X86の汎用レジスタが固定のMIPSレジスタにマップされているが、仮想機のコードと翻訳されたMIPSコードの二種類のコンテキストを切り替えるとき、これらのレジスタが二種類のコンテキスト中でお互いに干渉されずに自由に使われるために、これらの固定されたMIPSレジスタの値を保存するまたは復旧することは必要とされる。]
[0255] 本発明は、データ幅が元のデータ幅の2倍であるメモリーアクセス拡張命令を提供し、仮想機のコンテキストの切り替えの速度を向上させるとともに、性能を向上させることができる。]
[0256] 本発明のX86の仮想機をサポートするRISCプロセッサのモード識別モジュール24は、複数倍のデータ幅にメモリーアクセスする命令を含む。前記の複数倍のデータ幅のメモリーアクセス命令は、複数倍のデータ幅のメモリー読み取り、メモリー書き込み、および浮動小数点レジスタの複数倍のデータ幅のメモリー読み取り、メモリー書き込み、全部で4種類の複数倍のデータ幅のメモリーアクセス拡張命令を含む。]
[0257] 一つの実施可能な方式として、本発明は、2倍データ幅のメモリー読み取り命令、メモリー書き込み命令、および浮動小数点レジスタの2倍データ幅のメモリー読み取り命令、メモリー書き込み命令、全部で4種類の複数倍のデータ幅のメモリーアクセス拡張命令を提供した。]
[0258] 一つの実施可能な方式として、本発明が提供した複数倍のデータ幅の拡張命令は、既存のMIPS64命令セットの中に保留したLWC2とSWC2の空スロットの値を利用する。その中の32ビット命令の高い順位の6ビット(31ビット:26ビット)はopcode領域となる。その中のLWC2(opcodeは110010となる)とSWC2(opcodeは111010となる)の命令スロットは、MIPSのルールによって決められた、ユーザで自分で定義してもよいものである。そのメモリーアクセスのアドレッシング方式はbase+8bit offsetアドレッシング方式である。]
[0259] その中、5ビットのbase領域はベースアドレスを示し、5ビットのrt(Register Target(Source/Destination))領域は元/目標レジスタを示し、offset はオフセットアドレスを示し、最後の6ビットのfunc領域は各拡張命令を区別することに使われる。]
[0260] 本発明の4種類の拡張命令は、MIPS64命令セットにおいてユーザにより拡張されるカスタマイズ命令である。
データ保存命令SQに対して、デコーダは一つの内部のsq操作を出力する。]
[0261] データロード命令LQに対して、デコーダは二つの隣接した内部操作lq1とlq2を出力し、その中のlq1はLQ命令の低い順位64ビットの論理レジスタ番号を有し、lq2はLQ命令の高い順位64ビットの論理レジスタ番号を有する。]
[0262] デコーダ2は命令をデコードした後、メモリーアクセス実行部分5の送信行列(示されていない)に送り、送信行列は行列の中から操作データによって準備された操作を選び、メモリーアクセス実行部分5のメモリーアクセス部分(示されていない)に送信する。]
[0263] メモリーの四つのワード、全部で128ビットをロードするデータロード命令操作に対して、前記のメモリーアクセス実行部分5の合併部分は、二つの内部操作が送信行列に入るときにこれらの内部操作を合併する。合併の方法は、送信行列に入ろうとする隣接した二つの操作が四つのワード、128ビットのデータロード命令のデコードであると、その次の一つの操作は送信行列に入らず、その目標物理レジスタ番号を1つ前の操作の高い順位の64ビットの目標物理レジスタ番号に保存する。]
[0264] 合併したデータロード操作は、二つの目標物理レジスタ番号を有し、アドレスが決められたときにメモリーアクセス実行部分5のメモリーアクセス部分に送信されて実行される。]
[0265] メモリーアクセス実行部分5は、データの読み書きの部分であり、命令によってメモリーからデータを読み出し、またはメモリーへデータを書き込む。この流れは既存の一般的な技術であり、この分野の技術者にとって簡単に実現できるから、本発明の実施例で詳しく説明しない。]
[0266] 以下は倍データ幅のメモリーロード命令、メモリー保存命令、および浮動小数点レジスタの倍データ幅のメモリーロード命令、メモリー保存命令、全部で四つの命令について説明する
gsLQrt, offset(base) /メモリーから4ワードデータを読み取る
メモリーから4ワードデータを読み取り、レジスタに保存する。まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの4ワードデータを読み取り、隣接した二つの汎用レジスタの中に保存される。]
[0267] rtが偶数であれば、レジスタrtとレジスタrt+1の中に保存される;もしrtが奇数であれば、レジスタrt-1とレジスタrtの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。]
[0268] gsLQC1 ft, offset(base) /メモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの4ワードデータを読み取り、隣接した二つの浮動小数点レジスタの中に保存される。]
[0269] ftが偶数であれば、レジスタftとレジスタft+1の中に保存される;ftが奇数であれば、レジスタft-1とレジスタftの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。]
[0270] gsSQ rt, offset(base) /メモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの汎用レジスタの中の4ワードデータをメモリー中の有効アドレスに保存する。]
[0271] rtが偶数であれば、レジスタrtとレジスタrt+1の中の値を読み出し、メモリーに保存する;rtが奇数であれば、レジスタrt-1とレジスタrtの中の値を読み出し、メモリーに保存する。]
[0272] 有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
gsSQC1 ft, offset(base) /浮動小数点レジスタからメモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの浮動小数点レジスタの中の4ワードデータをメモリー中の有効アドレスに保存する。
ftが偶数であれば、レジスタftとレジスタft+1の中の値を読み出し、メモリーに保存する; ftが奇数であればレジスタft-1とレジスタftの中の値を読み出し、メモリーに保存する。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。]
[0273] X86の仮想機をサポートするRISCプロセッサのデータのメモリーアクセスの方法は、以下のステップを含む。
ステップN110:プロセッサはまず一つの命令を取り出してデコーダに入力する;
ステップN120:デコーダは命令のタイプを判断し、複数倍のデータ幅の命令を識別しデコードする;
既存のMIPS命令セット中の命令であれば、デコーダはその命令を内部操作とデコードする。例えば対応したOP、ソースレジスタと目標レジスタ等が与えられる;
入力した命令は本発明の複数倍のメモリーアクセス拡張命令操作であれば、デコーダはソースレジスタまたは目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張する;
rtが偶数であれば、レジスタrtとレジスタrt+1の中に保存される;rtが奇数であればレジスタrt-1とレジスタrtの中に保存される。]
[0274] 入力した命令は複数倍のデータ幅の読み取り命令であれば、デコーダは目標レジスタを自動的に一つから複数の隣接したレジスタに拡張し、読み取り操作を複数の内部操作に分配する。複数対のレジスタはそれぞれこの複数の内部操作の目標レジスタである。]
[0275] 入力した命令は複数倍のデータ幅の保存命令であれば、デコーダはソースレジスタを一つから複数の隣接したレジスタに拡張する。
プロセッサはまず一つの命令を取り出してデコーダに入力し、デコーダは命令のタイプを判断する。既存のMIPS命令セット中の命令であれば、デコーダはその命令を内部操作とデコードし、例えば対応した操作(OP)、ソースレジスタと目標レジスタ等が与えられ、保存演算部分に出力し実行される;入力した命令は本発明のメモリーアクセス拡張命令中の保存操作であれば、デコーダは元レジスタまたは目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張し、そして保存演算部分に出力されて実行される。]
[0276] プロセッサはまず一つの命令を取り出してデコーダに入力し、デコーダは命令のタイプを判断し、内部操作に転換する。内部操作のコードは、プロセッサの機能部分について命令よりも構造化されているため、内部論理の簡潔化に有利である。RISCプロセッサにおいて、一般に外部の命令と内部の操作とは一対一のマップ関係を有する。デコーダから出力した内部操作は、例えば操作コード(OP)、拡張操作コード(fmt)、ソースレジスタ、目標レジスタ、即値等、いくつかの領域からなる。]
[0277] ステップN130:デコードされた複数倍のデータ幅の命令はメモリーアクセス実行部分5に送られ、操作される。
デコーダは入力された命令をデコードした後、メモリーアクセス実行部分5に送る。メモリーアクセス実行部分5において、その命令は読み取り命令であれば、操作命令LQの二つの内部操作lq1、lq2を読み取って一つの操作に合併させ、メモリーアクセス実行部分5のメモリーアクセス部分に送り実行する。]
[0278] 入力した命令は本発明のメモリーアクセス拡張命令中の四つのワード、全部で128ビットのデータの保存命令SQであれば、デコーダ3はソースレジスタ番号を一つから二つの、対を成すレジスタ番号に拡張する。例えば4番目のレジスタを4番と5番二つのレジスタ番号に拡張し、7番目のレジスタを6番と7番二つのレジスタ番号に拡張する。内部操作として二つのソースレジスタ番号をメモリーアクセス実行部分5の送信行列に送る。]
[0279] 入力した命令は本発明のメモリーアクセス拡張命令中の読み取り操作であれば、デコーダは該読み取り操作を二つの内部操作にデコードし、同じく目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張し、そして以上の二つの内部操作に分配し、メモリーアクセス実行部分5へ出力して実行する。そしてこれらの二つの操作を一つの操作に合併させてメモリーアクセス実行部分5のメモリーアクセス部分に送り、実行する。]
权利要求:

請求項1
X86の仮想機をサポートするRISCプロセッサにおいて、前記RISCプロセッサは、命令モジュールと、デコーダと、検索テーブルと、固定小数点演算部分と、浮動小数点演算部分とを含み、前記の命令モジュールは、X86の仮想機をサポートする仮想機の命令セットを保存することに使われ、前記のデコーダは、前記の仮想機の命令セットの命令をデコーディングする間に、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいてデコーディングした後に、固定小数点演算部分または浮動小数点演算部分に出力することに使われ、前記の検索テーブルは、X86のプログラムにおけるジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力に基づいてX86のプログラムにおけるジャンプアドレスからMIPSジャンプアドレスへの翻訳に対する高速の検索をサポートすることに使われ、前記の固定小数点演算部分は、デコーダの出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行した結果を出力することに使われ、前記の浮動小数点演算部分は、デコーダの出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行の結果を出力することに使われることを特徴とするX86の仮想機をサポートするRISCプロセッサ。
請求項2
前記のRISCプロセッサはさらにメモリーアクセス実行部分、メモリーおよびデータ通路を含み、前記のメモリーアクセス実行部分は、デコーダの出力に基づき、データ通路によってレジスタとメモリーとの間のデータ通信を行うことを特徴とする請求項1に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項3
前記のRISCプロセッサはさらに汎用物理レジスタヒープを含み、前記の汎用物理レジスタヒープは、オーバーフローチェックレジスタ、上界、下界アドレスレジスタ、シミュレートフラグレジスタおよび仮想機モード制御レジスタを含み、前記のオーバーフローチェックレジスタは、RISCプロセッサがシミュレートしたスタックレジスタに対して浮動小数点アクセスを行うときの、スタックオーバーフローの例外チェックの結果を保存することに使われ、前記の上界、下界アドレスレジスタは、X86のプロセッサの、限界があるメモリーアクセスモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われ、前記のシミュレートフラグレジスタは、X86のプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われ、前記の仮想機モード制御レジスタは、一つの制御ビットフラグを含み、該制御ビットフラグが1であるときには、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該制御ビットフラグが0であるときには、当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表すことを特徴とする請求項2に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項4
前記のRISCプロセッサは、さらに浮動小数点レジスタヒープを含み、前記の浮動小数点レジスタヒープは、浮動小数点制御レジスタ、浮動小数点レジスタスタック、および第一から第三までの浮動小数点レジスタを含むことを特徴とする請求項3に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項5
前記の仮想機の命令セットは、メモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令、および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含むことを特徴とする請求項4に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項6
前記のデコーダは、命令処理モジュールとモード識別モジュールを含み、前記の命令処理モジュールは、仮想機の命令セットの命令を命令デコードして固定小数点演算部分または浮動小数点演算部分に出力することに使われ、前記のモード識別モジュールは、命令をデコードする間に、命令の仮想機命令セットのモードを区別し、対応する処理を行うことに使われることを特徴とする請求項5に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項7
前記のモード識別モジュールは、多数セーブデコードモジュール及び/または多数ロードデコードモジュールを含み、前記の多数セーブデコードモジュールは、入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてメモリーアクセス実行部分へ出力して実行することに使われ、前記の多数ロードデコードモジュールは、入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そして前記の複数の内部操作の中に分配し、メモリーアクセス実行部分へ出力して実行することに使われることを特徴とする請求項6に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項8
前記のモード識別モジュールは、さらにプレフィックス命令デコードモジュールとフラグビット命令デコードモジュールを含み、前記のフラグビット命令デコードモジュールは、EFLAGS稼動モードをシミュレートする作業モードであるEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタをその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われ、前記のプレフィックス命令デコードモジュールは、プレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われることを特徴とする請求項7に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項9
プレフィックス命令の範囲のパラメータがnであるとき、デコーダはさらにプレフィックス命令カウンターを含み、該プレフィックス命令カウンターは、プレフィックス命令に影響され、かつシフト命令が存在しない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲のパラメータと等しいことを特徴とする請求項8に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項10
前記のデコーダはさらにTOPポインタレジスタと検索テーブルモジュールを含み、前記のTOPポインタレジスタは、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われ、前記の検索テーブルモジュールは、検索テーブルに関連する命令に基づき、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われることを特徴とする請求項6に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項11
前記の固定小数点演算部分は、フラグ読み書きモジュール、フラグ演算モジュール、例外処理モジュールおよびプレフィックス例外制御レジスタを含み、前記のフラグ読み書きモジュールは、シミュレートフラグレジスタのフラグビットの値を読み書きすることに使われ、前記のフラグ演算モジュールは、演算する間にRISCプロセッサがX86の仮想機の稼動モードであるときに、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行することに使われ、前記の例外処理モジュールは、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせるとともに、EPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われ、前記のプレフィックス例外制御レジスタは、例外が発生した命令は前記のプレフィックス命令によって影響されたかどうかを記録し、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻る場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われることを特徴とする請求項5に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項12
前記の浮動小数点演算部分は、ポインタ操作モジュール、スタックオーバーフロー判断モジュール、および変換モジュールを含み前記のポインタ操作モジュールは、前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われ、前記のスタックオーバーフロー判断モジュールは、指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタを操作し、浮動小数点アクセスするときのスタックオーバーフロー例外のチェックを行うことに使われる;前記の変換モジュールは、拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われることを特徴とする請求項10に記載のX86の仮想機をサポートするRISCプロセッサ。
請求項13
X86の仮想機をサポートするRISCプロセッサのデータ処理の方法において、RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定するステップAと、命令を読み込み、命令の仮想機命令セットのモードを区別し、命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、区別された仮想機命令セットのモードによって命令をデコーディングした後に出力するステップBと、前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力するステップCとを含むことを特徴とするX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
請求項14
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは、EFLAG命令に対するサポートであるとき、前記のステップAは具体的に、RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタが使用できることを示すステップA1であり、前記のステップBは具体的に、デコーダは演算がEFLAGS稼動モードをシミュレートするモードであることを識別したとき、違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップB1であり、前記のステップCは具体的に、RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み込む/書き込むことによって演算状態を獲得/保存することを実現し、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行するステップC1であることを特徴とする請求項13に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
請求項15
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートであるとき、前記のステップAは具体的に、スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決め、あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタックの0〜7のスタックレジスタの状態をし、または三つの汎用レジスタを任意に選択し、第一浮動小数点レジスタ、第二浮動小数点レジスタと第三浮動小数点レジスタとして、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用するステップA2であり、前記のステップBは具体的に、デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存し、または新たに増えたスタックオーバーフロー判断命令をデコードし、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードするステップB2であり、前記のステップCは具体的に、浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視し、または指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタを操作し、浮動小数点スタックオーバーフローのチェックを行い、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データとの間のデータ変換を実行するステップC2であることを特徴とする請求項13に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
請求項16
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の保存構造に対するサポートであるとき、前記のステップAは具体的に、RISCプロセッサのX86の仮想機において、物理レジスタヒープの二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタに設置するステップA3であり、前記のステップBは具体的に、X86の仮想機の命令セットからMIPS命令セットへの翻訳を行うとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られるステップB3であり、前記のステップCは具体的に、固定小数点演算部分は、デコードした後のメモリーアクセス命令の中に、上界アドレスレジスタに保存された上界アドレスと/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスとの有効性を判断し、命令操作数アドレスと命令アドレスの両方が有効であるときには、メモリーアクセス操作が実行され、そうでないときには、アドレスエラーの例外が発生するステップC3であることを特徴とする請求項13に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
請求項17
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは仮想のメカニズムに対するサポートであるとき、前記のステップAは具体的に、プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別し、またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力し、あるいはX86の仮想機をサポートするRISCプロセッサが起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込むステップA4であり、前記のステップBは具体的に、命令をデコードする間に、区別した命令の仮想機命令セットのモードに基づき、区別した仮想機命令セットのモードによって命令をデコードした後に出力し、またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を認識かつデコードし、あるいはデコーダが検索テーブルに関係する命令を識別しデコードするステップB4であり、前記のステップCは具体的に、固定小数点演算部分はプレフィックス命令による影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算し、またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送って操作を実行し、あるいは検索テーブルに関連する命令を実行して、目標命令アドレスの値を獲得しまたは目標アドレスへジャンプさせて実行するステップC4であることを特徴とする請求項13に記載のX86の仮想機をサポートするRISCプロセッサのデータ処理の方法。
类似技术:
公开号 | 公开日 | 专利标题
US9946542B2|2018-04-17|Instruction to load data up to a specified memory boundary indicated by the instruction
US9804970B2|2017-10-31|Invalidating a range of two or more translation table entries and instruction therefor
US9952862B2|2018-04-24|Instruction to load data up to a dynamically determined memory boundary
US20180107480A1|2018-04-19|Function virtualization facility for function query of a processor
US20180341504A1|2018-11-29|Virtual machine coprocessor for accelerating software execution
Sites et al.2014|Alpha AXP architecture reference manual
US9135004B2|2015-09-15|Rotate then operate on selected bits facility and instructions therefor
JP6238241B2|2017-11-29|Vectorstringrangecompare
US9772843B2|2017-09-26|Vector find element equal instruction
JP6238242B2|2017-11-29|Vectorfindelementnotequal命令
US8893079B2|2014-11-18|Methods for generating code for an architecture encoding an extended register specification
TWI474191B|2015-02-21|控制暫存器對應於異質指令集架構處理器
CA2867116C|2020-02-18|Instruction to compute the distance to a specified memory boundary
KR101595637B1|2016-02-18|벡터 친숙형 명령어 형식 및 그의 실행
GB2514062B|2019-08-28|Comparing sets of character data having termination characters
JP5837126B2|2015-12-24|現在実行している命令セット以外の命令セットから命令をプリロードするシステム、方法およびソフトウェア
TWI279715B|2007-04-21|Method, system and machine-readable medium of translating and executing binary of program code, and apparatus to process binaries
US5790825A|1998-08-04|Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US6965984B2|2005-11-15|Data processing using multiple instruction sets
US6157996A|2000-12-05|Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space
Sweetman2010|See MIPS run
JP3451595B2|2003-09-29|二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
US7243213B2|2007-07-10|Process for translating instructions for an arm-type processor into instructions for a LX-type processor; relative translator device and computer program product
JP5039905B2|2012-10-03|2つのオペランドに対して演算を行い、その後オペランドの元の値を格納するための命令
US7203932B1|2007-04-10|Method and system for using idiom recognition during a software translation process
同族专利:
公开号 | 公开日
CA2718724C|2016-01-19|
EP2267598B1|2018-07-18|
US20110035745A1|2011-02-10|
JP5501338B2|2014-05-21|
WO2009114961A1|2009-09-24|
CN100555225C|2009-10-28|
KR20100125331A|2010-11-30|
CN101256504A|2008-09-03|
KR101232343B1|2013-02-13|
EP2267598A1|2010-12-29|
CA2718724A1|2009-09-24|
EP2267598A4|2013-03-27|
US8949580B2|2015-02-03|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2011-12-13| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111212 |
2012-01-21| RD04| Notification of resignation of power of attorney|Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20120120 |
2012-04-27| A711| Notification of change in applicant|Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20120426 |
2012-05-18| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20120427 |
2013-04-26| A977| Report on retrieval|Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130426 |
2013-06-05| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130604 |
2013-09-05| A601| Written request for extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20130904 |
2013-09-12| A602| Written permission of extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20130911 |
2013-10-05| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131004 |
2014-02-28| TRDD| Decision of grant or rejection written|
2014-03-05| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20140304 |
2014-03-20| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140311 |
2014-03-20| R150| Certificate of patent or registration of utility model|Ref document number: 5501338 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
2017-02-21| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2018-01-16| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2019-01-29| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2020-01-07| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2021-01-08| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2021-12-13| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]