JP2011515750A - X86の仮想機をサポートするriscプロセッサ装置及び方法 - Google Patents

X86の仮想機をサポートするriscプロセッサ装置及び方法 Download PDF

Info

Publication number
JP2011515750A
JP2011515750A JP2011500028A JP2011500028A JP2011515750A JP 2011515750 A JP2011515750 A JP 2011515750A JP 2011500028 A JP2011500028 A JP 2011500028A JP 2011500028 A JP2011500028 A JP 2011500028A JP 2011515750 A JP2011515750 A JP 2011515750A
Authority
JP
Japan
Prior art keywords
instruction
register
virtual machine
address
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011500028A
Other languages
English (en)
Other versions
JP5501338B2 (ja
Inventor
李国傑
胡偉武
李暁▲ぎょく▼
蘇孟豪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Computing Technology of CAS
Original Assignee
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Computing Technology of CAS filed Critical Institute of Computing Technology of CAS
Publication of JP2011515750A publication Critical patent/JP2011515750A/ja
Application granted granted Critical
Publication of JP5501338B2 publication Critical patent/JP5501338B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Abstract

X86の仮想機をサポートするRISCプロセッサ装置及び方法は開示される。RISCプロセッサは命令モジュール、デコーダ、固定小数点演算部分と浮動小数点演算部分を含んでいる。命令モジュールはX86の仮想機をサポートする命令セットを保存することに使われる;デコーダは仮想機の命令セットの命令をデコーディングするとき、命令の仮想機命令セットのモードを区別し、命令を区別された仮想機命令セットのモードに基づいて、デコーディングした後固定小数点演算部分または浮動小数点演算部分に出力することに使われる;固定小数点演算部分はデコーダの出力に基づき、仮想機命令セットの固定小数点命令について処理し、実行した結果を出力することに使われる;浮動小数点演算部分はデコーダの出力に基づき、仮想機命令セットの浮動小数点命令について処理し、実行した結果を出力することに使われる。

Description

本発明は、マイクロ・プロセッサのアーキテクチャのクロスプラットフォーム技術に関し、より詳細には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ジャンプアドレスへの翻訳に対する高速の検索をサポートし、仮想機の性能を向上させることに使われる。
前記の固定小数点演算部分はデコーダの出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行した結果を出力することに使われる。
前記の浮動小数点演算部分はデコーダの出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行した結果を出力することに使われる。
前記のX86の仮想機をサポートするRISCプロセッサは、さらにメモリーアクセス実行部分、メモリーおよびデータ通路を含む。
前記のメモリーアクセス実行部分はデコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行う。
前記のX86の仮想機をサポートするRISCプロセッサは、さらに汎用物理レジスタヒープを含み、前記の汎用物理レジスタヒープはオーバーフローチェックレジスタ、上界、下界アドレスレジスタ、シミュレートフラグレジスタおよび仮想機モード制御レジスタを含む。
前記のオーバーフローチェックレジスタはRISCプロセッサがシミュレートしたスタックレジスタに対して浮動小数点アクセスを行うときの、スタックオーバーフローの例外チェックの結果を保存することに使われる。
前記の上界、下界アドレスレジスタはX86のプロセッサの限界があるメモリーアクセスモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。
前記のシミュレートフラグレジスタはX86のプロセッサのフラグレジスタのフラグビットを実現させるのをシミュレートすることに使われる。
前記の仮想機モード制御レジスタは一つの制御ビットフラグを含む。該制御ビットフラグが1であるときには、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該制御ビットフラグが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。
前記のX86の仮想機をサポートするRISCプロセッサは、さらに浮動小数点レジスタヒープを含む。
前記の浮動小数点レジスタヒープは浮動小数点制御レジスタ、浮動小数点レジスタスタックおよび第一から第三までの浮動小数点レジスタを含む。
前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。
前記のデコーダは命令処理モジュールとモード識別モジュールを含む。その中:
前記の命令処理モジュールは仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分または浮動小数点演算部分に出力することに使われる。
前記のモード識別モジュールは命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュールは多数セーブデコードモジュール及び/または多数ロードデコードモジュールを含む。
前記の多数セーブデコードモジュールは入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてメモリーアクセス実行部分へ出力して実行することに使われる。
前記の多数ロードデコードモジュールは入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そして前記の複数の内部操作の中に分配し、メモリーアクセス実行部分へ出力して実行することに使われる。
前記のモード識別モジュールはさらにプレフィックス命令デコードモジュールとフラグビット命令デコードモジュールを含む。
前記のフラグビット命令デコードモジュールはEFLAGS稼動モードをシミュレートする作業モードであるEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタをその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。
前記のプレフィックス命令デコードモジュールはプレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる。
プレフィックス命令の範囲のパラメータがnであるとき、デコーダはさらにプレフィックス命令カウンターを含む。プレフィックス命令カウンターはプレフィックス命令に影響され、かつシフト命令が存在しない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲のパラメータと等しい。
前記のデコーダはさらにTOPポインタレジスタと検索テーブルモジュールを含む。その中:
前記のTOPポインタレジスタは浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。
前記の検索テーブルモジュールは検索テーブルに関連する命令に基づき、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。
前記の固定小数点演算部分はフラグ読み書きモジュール、フラグ演算モジュール、例外処理モジュールおよびプレフィックス例外制御レジスタを含む。
前記のフラグ読み書きモジュールはシミュレートフラグレジスタのフラグビットの値を読み書きすることに使われる。
前記のフラグ演算モジュールは演算するの間にRISCプロセッサがX86の仮想機の稼動モードであるときに、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットか複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。
前記の例外処理モジュールはプレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせるとともに、EPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。
前記のプレフィックス例外制御レジスタは例外が発生した命令は前記のプレフィックス命令によって影響されたかどうかを記録し、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻る場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。
前記の浮動小数点演算部分はポインタ操作モジュール、スタックオーバーフロー判断モジュール、および変換モジュールを含む。
前記のポインタ操作モジュールは前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。
前記のスタックオーバーフロー判断モジュールは指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタを操作し、浮動小数点アクセスするときのスタックオーバーフロー例外のチェックを行うことに使われる。
前記の変換モジュールは拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。以下のようなステップを含む:
ステップA:RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する;
ステップB:命令を読み込み、命令の仮想機命令セットのモードを区別し、命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、区別された仮想機命令セットのモードによって命令をデコーディングした後出力する;
ステップC:前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはEFLAG命令をサポートするとき、
前記のステップAは具体的に、
RISCプロセッサの中においてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタが使用できることと示すステップA1であり、
前記のステップBは具体的に、
デコーダは演算がEFLAGS稼動モードをシミュレートするモードであることを識別したとき、違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードするステップB1であり、
前記のステップCは具体的に、
RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードであるとき、シミュレートフラグレジスタのフラグビットの値を読み込む/書き込むことによって演算状態を獲得/保存することを実現し、演算の結果から得られたシミュレートフラグレジスタのフラグビット、またはシミュレートフラグレジスタのフラグビットの1ビットまたは複数ビットに基づき、分岐ジャンプの命令を実行するステップC1である。
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートであるとき、
前記のステップAは具体的に、
スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック操作をシミュレートするかどうかを決め、あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタックの0〜7のスタックレジスタの状態を示し、または三つの汎用レジスタを任意に選択し、第一浮動小数点レジスタ、第二浮動小数点レジスタと第三浮動小数点レジスタとして、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用するステップA2であり、
前記のステップBは具体的に、
デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存し、または新たに増えたスタックオーバーフロー判断命令をデコードし、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードするステップB2であり、
前記のステップCは具体的に、
浮動小数点レジスタスタック操作をシミュレートするとき、ポインタレジスタを操作してスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視し、または指定した浮動小数点レジスタスタックの中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタを操作し、浮動小数点スタックオーバーフローのチェックを行い、あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データとの間のデータ変換を実行するステップC2である。
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスはX86の保存構造に対するサポートであるとき、
前記のステップAは具体的に、
RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタに設置するステップA3であり、
前記のステップBは具体的に、
X86の仮想機の命令セットからMIPS命令セットへの翻訳を行うとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られるステップB3であり、
前記のステップCは具体的に、
固定小数点演算部分はデコードした後のメモリーアクセス命令の中に、上界アドレスレジスタに保存された上界アドレスと/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスと命令アドレスの有効性を判断し、命令操作数アドレスと命令アドレスの両方が有効であるときには、メモリーアクセス操作が実行され、そうでないときには、アドレスエラーの例外が発生する。
X86の仮想機をサポートするRISCプロセッサのデータ処理のプロセスは仮想のメカニズムに対するサポートであるとき、
前記のステップAは具体的に、
プレフィックス命令を読み込み、命令の仮想機命令セットのモードを区別し、またはプロセッサが複数倍のデータ幅の命令を取り出してデコーダに入力し、あるいはX86の仮想機をサポートするRISCプロセッサが起動するとき、検索テーブルを初期化し、得られたX86の仮想機の命令アドレスからMIPS命令アドレスまでの内容を検索テーブルに書き込むステップA4であり、
前記のステップBは具体的に、
命令をデコードする間に、区別した命令の仮想機命令セットのモードに基づき、区別した仮想機命令セットのモードによって命令をデコードした後に出力し、またはデコーダが命令種類を判断し、複数倍のデータ幅の命令を識別かつデコードし、あるいはデコーダが検索テーブルに関係する命令を識別しデコードするステップB4であり、
前記のステップCは具体的に、
固定小数点演算部分はプレフィックス命令による影響された命令を実行し、さらに演算の結果に基づき対応するEFLAGフラグビットを計算し、またはデコードした複数倍のデータ幅の命令をメモリーアクセス実行部分に送って操作を実行し、あるいは検索テーブルに関連する命令を実行して、目標命令アドレスの値を獲得しまたは目標アドレスへジャンプさせて実行するステップC4である。
本発明のX86の仮想機をサポートするRISCプロセッサ装置の構造の概略図である。 本発明のX86の仮想機をサポートするRISCプロセッサのデータ処理方法のフローチャートである。
本発明の目的、技術の解決策、および本発明の利点をより明確にするため、以下に付属の図面と実施形態とともに参照し、さらに本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ここで説明される例は、本発明を解釈するのに使用されるが、本発明の範囲を限定することを意図したものではないのが理解されるべきである。
本発明の好ましい実施形態では、MIPS64命令セットのRISCプロセッサを実例として、本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法について詳細に説明する。ただし、ここで説明される例は、本発明の範囲を限定することを意図したものではなく、本発明の範囲が本発明の付属の特許請求の範囲で限定するのが理解されるべきである。
本発明のX86の仮想機をサポートするRISCプロセッサ装置及び方法においては、X86とRISCプロセッサ構造のセマンティックの差を解決し、RISCプロセッサにおいてX86プロセッサに対する互換性を実現するために、RISCプロセッサにおいて以下のいくつかの問題を解決する必要がある:
1. EFLAG命令が利用できること;
2.浮動小数点のフォーマットと浮動小数点スタックが利用できること;
3.保存構造が利用できること;
4.仮想のメカニズムが利用できること。
図1に示されたように、本発明のX86の仮想機をサポートするRISCプロセッサは、命令モジュール1、デコーダ2、検索テーブル(表示されていない)、固定小数点演算部分3、汎用物理レジスタヒープ7、浮動小数点演算部分4、浮動小数点物理レジスタヒープ8、メモリーアクセス実行部分5、メモリーおよびデータ通路6を含んでいる。
前記の命令モジュール1はX86の仮想機をサポートする仮想機の命令セットを保存することに使われる。前記の仮想機の命令セットはメモリーアクセス拡張命令、プレフィックス命令、EFLAGフラグビットに関する命令、浮動小数点スタックに関する命令および検索テーブルに関する命令の中の一種類または複数種類の組み合わせを含む。
前記のデコーダ2は、前記の仮想機の命令セットの命令をデコーディングするとき、命令の仮想機命令セットのモードを区別し、区別された仮想機命令セットのモードによって、デコーディングした後固定小数点演算部分3または浮動小数点演算部分4に命令を出力することに使われる。
前記の検索テーブルは、X86のプログラムの中のジャンプアドレスとMIPSジャンプアドレスを保存し、さらに前記のデコーダの出力によってX86のプログラムの中のジャンプアドレスからMIPSジャンプアドレスへの翻訳を迅速に検索することができる。
前記の固定小数点演算部分3は、デコーダ2の出力に基づき、仮想機命令セットの固定小数点命令を処理し、実行の結果を出力することに使われる。
前記の浮動小数点演算部分4は、デコーダ2の出力に基づき、仮想機命令セットの浮動小数点命令を処理し、実行の結果を出力することに使われる。
前記のメモリーアクセス実行部分5は、デコーダの出力に基づき、データ通路によってレジスタとメモリーの間のデータ通信を行うことに使われる。
前記のデコーダは、命令処理モジュール21、モード識別モジュール24、TOPポインタレジスタ22と検索テーブルモジュール23を含むのが好ましい。
前記の命令処理モジュールは、仮想機の命令セットの命令を命令デコードし、そして固定小数点演算部分3、浮動小数点演算部分4またはメモリーアクセス実行部分5に出力することに使われる。
前記のモード識別モジュール24は、命令をデコードする間に、命令の仮想機の命令セットのモードを区別し、対応する処理を行うことに使われる。
前記のモード識別モジュール24は、多数セーブデコードモジュール244及び/または多数ロードデコードモジュール245を含む。
前記の多数セーブデコードモジュール244は、入力された命令がメモリーアクセス拡張命令のセーブ操作命令であるとき、ソースレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令をメモリーアクセス実行部分5へ出力して実行することに使われる。
前記の多数ロードデコードモジュール245は、入力された命令がメモリーアクセス拡張命令のロード操作命令であるとき、該ロード操作命令を複数の内部操作命令にデコードし、目標のレジスタを一つから複数の隣接するレジスタに拡張し、そしてその命令を前記の複数の内部操作の中に分配してメモリーアクセス実行部分5へ出力して実行することに使われる。
前記のモード識別モジュール24は、さらにプレフィックス命令デコードモジュール241とフラグビット命令デコードモジュール243を含む。
前記のフラグビット命令デコードモジュール243は、EFLAGS稼動モードをシミュレートしているEFLAGフラグビットに関連する命令を処理し、違うEFLAGフラグビットに関連する命令に基づき、シミュレートフラグレジスタ71をその命令のソースレジスタ及び/または目標レジスタにデコードすることに使われる。
前記のプレフィックス命令デコードモジュール241は、プレフィックス命令の後の複数の命令がX86の仮想機の命令セットモードであることを示すことに使われる;さらに、前記のプレフィックス命令の範囲パラメータがnとなるとき、デコーダ2はさらにプレフィックス命令カウンター242を含む。プレフィックス命令カウンターは、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数を記録することに使われ、該命令数は前記の範囲パラメータと同じである。
前記のTOPポインタレジスタ22は、浮動小数点スタックの操作ポインタをメンテナンスし、浮動小数点スタックのスタック操作ポインタの値を保存することに使われる。
前記の検索テーブルモジュール23は、検索テーブルに関連する命令に基づき、検索テーブルを利用してX86のソース命令アドレスからMIPS目標命令アドレスへの変換を実現することに使われる。
前記の固定小数点演算部分3は、フラグ読み書きモジュール31、フラグ演算モジュール32、例外処理モジュール34およびプレフィックス例外制御レジスタ33を含む。
前記のフラグ読み書きモジュール31は、シミュレートフラグレジスタ71のフラグビットの値を読み書きすることに使われる。
前記のフラグ演算モジュール32は、演算の間にRISCプロセッサがX86の仮想機の稼動モードである場合、演算の結果から得られたシミュレートフラグレジスタのフラグビットか、またはシミュレートフラグレジスタのフラグビットの1ビット又は複数ビットに基づき、分岐ジャンプの命令を実行することに使われる。
前記の例外処理モジュール34は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行例外が表示された場合に遅延スロット例外と同じ方法で、Causeレジスタのbdビットを1にさせ、同時にEPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後再びプレフィックス命令を実行することに使われる。
前記のプレフィックス例外制御レジスタ33は、例外が発生した命令が前記のプレフィックス命令に影響されたかどうかを記録する、異常でプロセスが中断された場合にその時点の命令のカウントを保存し、異常が終わって中断されたプロセスに戻った場合、前記のカウントに基づいて前記の中断されたプロセスを回復させることに使われる。
前記の汎用物理レジスタヒープ7は、オーバーフローチェックレジスタ72、上界、下界アドレスレジスタ74、シミュレートフラグレジスタ71および仮想機モード制御レジスタ73を含む。
前記のオーバーフローチェックレジスタ72は、RISCプロセッサでシミュレートしたスタックレジスタに浮動小数点アクセスをするとき、スタックオーバーフロー例外チェックの結果があるかどうかを検出することに使われる。
前記の上界、下界アドレスレジスタ74は、X86のプロセッサの限界があるメモリーアクセスのモードをシミュレートするとき、上界、下界の有効アドレスを保存することに使われる。
前記のシミュレートフラグレジスタ71は、X86のプロセッサのフラグレジスタのフラグビットを擬似的に実現することに使われる。
前記の仮想機モード制御レジスタ73は、一つの制御ビットフラグを含む。該制御ビットフラグが1になるときには当該の命令がX86の仮想機の命令セットモードで稼動していること、該制御ビットフラグが0になるときには当該の命令がX86の仮想機の命令セットモード以外で稼動していることと表す。
前記の浮動小数点演算部分4は、ポインタ操作モジュール41、スタックオーバーフロー判断モジュール43、および変換モジュール42を含む。
前記のポインタ操作モジュール41は、前記のTOPポインタレジスタを操作し、前記の浮動小数点レジスタスタック83の操作をシミュレートするとき、前記のスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更し、かつ監視することに使われる。
前記のスタックオーバーフロー判断モジュール43は、指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ72を操作し、浮動小数点アクセスを行うときのスタックオーバーフロー例外チェックを実行することに使われる。
前記の変換モジュール42は、拡張倍精度浮動小数点データと倍精度浮動小数点データとを互いに変換することに使われる。
前記の浮動小数点レジスタヒープ8は、浮動小数点制御レジスタ81、0〜7番の浮動小数点レジスタスタック83および第1〜3の浮動小数点レジスタ82を含む。
前記の第1〜3の浮動小数点レジスタ82の三つのレジスタは、前記の0〜7番の浮動小数点レジスタスタック83と交差して重なるように応用することができる。
前記のメモリーアクセス実行部分5は、合併部分と上、下界判断モジュールを含む。
前記の合併部分は、多数ロードデコードモジュール245がメモリーのロード操作を命令デコードした後、且つ実行部分が実行する前に、複数の内部操作を合併することに使われる。
前記の上、下界判断モジュールは、限界のあるメモリーアクセスが利用できるとき、上界、下界のアドレスを判断し、メモリーアクセス命令に含まれるアドレスの有効性を判断する。
図2に示されたように、本発明の目的を実現するため、さらにX86の仮想機をサポートするRISCプロセッサのデータ処理の方法を提供する。この方法は、以下のようなステップを含む:
ステップA:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定する;
ステップB:命令を読み込み、命令の仮想機命令セットのモードを区別する;命令をデコードする間に、区別した命令の仮想機の命令セットのモードに基づき、同仮想機命令セットのモードで命令をデコーディングした後に出力する;
ステップC:前記の出力に基づき、対応する演算またはアクセス処理を行い、実行した結果を出力する。
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、EFLAG命令に対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA1:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、シミュレートフラグレジスタ71が使用できることを示す;
前記のステップBは具体的に以下の通りである:
ステップB1:デコーダは演算がEFLAGS稼動モードをシミュレートしていると識別し、違う命令に基づき、シミュレートフラグレジスタ71をソースレジスタ及び/または目標レジスタにデコードする;
前記のステップCは具体的に以下の通りである:
ステップC1:RISCプロセッサが演算する間に、RISCプロセッサの稼動モードがX86の仮想機稼動モードになるとき、シミュレートフラグレジスタ71のフラグビットの値を読み込む/書き込むことによって演算状態の獲得/保存を実現し、且つ/あるいはシミュレートフラグレジスタ71のフラグビットの値に基づき、制御が行われる。
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスはX86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA2:スタックイネーブルビットに基づき、浮動小数点レジスタを選択して浮動小数点レジスタのスタック83の操作をシミュレートするかどうかを決める;あるいは一つの汎用レジスタを設置し、その低い順位の8ビットは高くなる順でそれぞれ浮動小数点レジスタスタック83の0〜7のスタックレジスタの状態を示す;または三つの汎用レジスタを任意に選択して第一から第三浮動小数点レジスタ82とし、64ビット浮動小数点数と80ビット浮動小数点数のフォーマットの変換作業に使用する;
前記のステップBは具体的に以下の通りである:
ステップB2:デコーダの中の3ビットのTOPポインタレジスタの中にスタック操作ポインタの値を保存する;または新たに増えたスタックオーバーフロー判断命令をデコードする;あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの変換命令をデコードする;
前記のステップCは具体的に以下の通りである:
ステップC2:浮動小数点レジスタスタック83操作をシミュレートするとき、ポインタレジスタを操作し、スタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更、監視する;または指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づきオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行う;あるいは拡張倍精度浮動小数点データと倍精度浮動小数点データの間のデータ変換が実行される。
RISCプロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の保存構造に対するサポートである場合、
前記のステップAは具体的に以下の通りである:
ステップA3:RISCプロセッサのX86の仮想機において、二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ74として設置する;
前記のステップ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ビットに拡張する。演算するとき演算結果のデータ部分とフラグ部分の両方を目標レジスタに書き込む。同時にデコーダ2の中に最新のフラグビットポインタReflagを設置し、このポインタは最新のフラグビットと結合する汎用レジスタの論理番号を示す。もう一つは物理レジスタヒープの中に内部論理レジスタを追加設置してX86のEFLAGフラグビットを実現し、EFLAGを修正するすべての演算命令に対して新しい相関命令を増やして、EFLAGを修正することのみに使用する。
以上の二種類の方式のうち、一つ目では、各レジスタにおいて“横に”EFLAGビットを増やす;二つ目では、すべてのレジスタにおいて“縦に”一つのレジスタを増やしてEFLAGビットの保存のみに使う。
一つの実施可能な方式では、X86_EFLAGSフラグビットをサポートするために、本発明に係るX86の仮想機をサポートするRISCプロセッサ装置において、前記のシミュレートフラグレジスタ71(M-EFLAGS)がX86の命令セットのCISCプロセッサのフラグレジスタ(EFLAGS)のフラグビットを擬似的に実現することに使われる。該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
以下に本発明のX86の仮想機をサポートするRISCプロセッサのレジスタフラグの処理手順について詳しく説明する。この処理手順は、以下のステップを含む。
ステップ110:RISCプロセッサにおいてRISCプロセッサの稼動モードをX86の仮想機稼動モードに設定し、即ちシミュレートフラグレジスタ71が使用できることをし、デコーダ2は演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードであると識別し、そして違う命令に基づき、シミュレートフラグレジスタ71をソースレジスタ及び/または目標レジスタにデコードする;
シミュレートフラグレジスタ(M-EFLAGS)がX86の命令セットのフラグレジスタ(EFLAGS)のフラグビットを擬似的に実現し、該レジスタの低い順位の6ビットは高くなる順でそれぞれCFビット、PFビット、AFビット、ZFビット、SFビットとOFビットを表す。
シミュレートフラグレジスタ71が利用できるとき、該演算がRISCプロセッサのX86の仮想機稼動モード、即ちEFLAGS稼動をシミュレートするモードにあると識別し、実行結果に基づいて当該シミュレートフラグレジスタ71の値を修正する。そして違う命令に基づき、シミュレートフラグレジスタをソースレジスタ及び/または目標レジスタにデコードし、元の目標レジスタの中に結果を保存しなくても済む。
一つの実施可能な方式では、シミュレートフラグレジスタに関連する命令がシミュレートフラグレジスタのフラグビットを修正するとき、該命令の前に同指令がRISCプロセッサのX86の仮想機稼動モードであることを示すプレフィックス命令SETFLAGがあり、この命令は、その以降の命令がX86の仮想機モードにあることを示す。
命令フォーマット:SETFLAG/ EFLAGS稼動モードのプレフィックス命令をシミュレートする
この命令は、該命令の直後の命令がEFLAGS稼動モードをシミュレートしていることを表す。
その命令を実行するとき、実行結果に基づいて当該シミュレートフラグレジスタ71のフラグビットの値を修正し、目標レジスタの中に結果を保存しない。以下に具体例をあげる。
正常のMIPS命令:
ADD $5,$1,$2
1番汎用レジスタと2番汎用レジスタの中の値を加算し、その結果を5番汎用レジスタの中に保存することを表す。
シミュレートフラグレジスタ71のフラグビットを修正する命令:
SETFLAG
ADD $5,$1,$2
この命令は、1番汎用レジスタと2番汎用レジスタの中の値を加算し、演算結果は保存しないが、結果に基づいてシミュレートフラグレジスタの中のフラグビットの当該ビットを修正することを表す。
デコーダ2の入力セットはすべての可能な32ビットコードであり、すべての合法命令と非法命令を含む。この方式では、デコーダ2が新たな一つの合法入力を増やした:SETFLAG。この命令は、該命令の直後の命令がRISCプロセッサのX86の仮想機稼動モードであり、即ちEFLAGS稼動モードをシミュレートしていることを表す。
デコーダ2がプレフィックス命令に基づき、プレフィックス命令後の一つの命令をデコードするとき、その出力はEFLAGS稼動モードをシミュレートしていることに基づき、調整内部の操作コードを固定小数点演算部分3に送り、このときこの命令の目標レジスタがデコードによりシミュレートフラグレジスタ(M-EFLAGS)になり、その中の一つのソースレジスタもシミュレートフラグレジスタ(M-EFLAGS)になる。いくつかの演算は、一部分のシミュレートフラグレジスタ(M-EFLAGS)だけを修正するから、元のシミュレートフラグレジスタ(M-EFLAGS)を固定小数点演算部分3に送り込む必要がある。
その中、前記の調整内部操作コード、名前の変更即ち論理レジスタから物理レジスタにマッピングすること、および読み書きレジスタのポートなどの操作内容を含む、これらは当業者が周知する内容であるため、本発明で詳しく説明しない。
デコーダ2がデコーディングしたあと、命令を固定小数点演算部分3に出力し、固定小数点演算部分3は内部の操作コードを確認する。正常な命令であれば正常な流れに従って演算する; 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ビット或いは複数ビットを抽出することが制御される。抽出されたシミュレートフラグレジスタ71のフラグビットの値を目標レジスタの中に保存する。
ステップ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ビット浮動小数点数に変換する命令を1つ設置し、64ビット浮動小数点数から80ビット浮動小数点数に変換する命令を2つ設置した。
一つの実施可能な方式では、MIPS命令セットを含むRISC物理レジスタヒープの32個汎用浮動小数点レジスタは、第一から第三浮動小数点レジスタ82としてダイナミックに任意の三つの汎用レジスタを選択し、変換作業に使用する。変換作業が終わったあと、これら三つの汎用レジスタは再びその他の汎用レジスタと無差別で使用される。
その中、前記の第一浮動小数点レジスタは、拡張倍精度浮動小数点データの符号ビットとランクを保存することに使われ、該レジスタの低い順位の16ビットを占める。
前記の第二浮動小数点レジスタは、拡張倍精度浮動小数点データの仮数部分を保存することに使われ、全部で64ビットである。
前記の第三浮動小数点レジスタは倍精度浮動小数点データを保存することに使われる。
プロセッサがX86の仮想機をサポートするデータ処理のプロセスは、X86の浮動小数点のフォーマットと浮動小数点スタックに対するサポートである場合、X86の仮想機をサポートするRISCプロセッサのデータ処理方法の流れは以下のステップを含む。
ステップ210:メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわけ、それぞれ違う第一浮動小数点レジスタと第二浮動小数点レジスタの中に保存し、浮動小数点演算部分4によって64ビットの倍精度浮動小数点データに変換し、第三浮動小数点レジスタの中に保存する。
ステップ210は具体的に以下のステップを含む。
ステップ211:メモリーの中の80ビットの拡張倍精度浮動小数点データを符号ビット部分とランク部分および仮数部分にわける。
一つの80ビットの浮動小数点データの第64ビットでそのデータをわけ、第80ビットから第64ビットまでは第一部分であり、全部で16ビットである。第63ビットから第0ビットまでは第二部分であり、全部で64ビットである。そのデータをわけた後、ユーザが既存の一種類の読み込む方式(MIPSが多種類の読み込む方式を提供する)を選択し、それぞれ二つの部分を二つの浮動小数点レジスタ$f(i),$f(j)に読み込む。
ステップ212:浮動小数点レジスタ$f(i)の中に80ビットの拡張倍精度浮動小数点データの符号ビットとランクを保存し、該レジスタの低い順位の16ビットを占める。
ステップ213:浮動小数点レジスタ$f(j)の中に80ビットの拡張倍精度浮動小数点データの仮数部分を保存し、全部で64ビットである。
ステップ214:浮動小数点レジスタ$f(i)と浮動小数点レジスタ$f(j)をソースレジスタとして、浮動小数点レジスタ$f(t)を目標レジスタとして、浮動小数点レジスタ$f(i)と浮動小数点レジスタ$f(j)の中に保存された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ビットの倍精度浮動小数点データから符号ビットとランク部分および仮数部分を抽出し、浮動小数点演算部分4によって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)の中に保存する。
抽出作業は浮動小数点演算部分4の中で完成し、抽出された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と加算した後にのみ、本当の浮動小数点レジスタ番号となる。この問題を解決するため、本発明はデコーダ2にTOPポインタレジスタ22を設置し、浮動小数点物理レジスタヒープの中の浮動小数点制御レジスタ81の中に一つのスタックイネーブル信号を設置して、浮動小数点スタックをシミュレートするために八つの浮動小数点レジスタを選択するかどうかを決める。スタックイネーブルビットがセットされた場合は、当該の浮動小数点命令が演算するとき、レジスタ番号が8より小さいレジスタは、デコードするときにTOPの値に基づいて自分のソースまたは目標論理レジスタ番号を修正し、さらに命令の内容に基づきTOP値を修正してプロセッサに送り込む;スタックイネーブルビットがクリアされた場合は、演算のときにレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って通常の通りに処理を正常に実行する。
前記の浮動小数点制御レジスタ81は、浮動小数点レジスタヒープ8を利用して、浮動小数点レジスタスタック83のシミュレートをイネーブルさせるか禁止させるかを制御することに使われる。
このレジスタは、一つのスタックイネーブルビットを維持し、イネーブルビットを1に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートすることが表される;イネーブルビットを0に設定する場合、プロセッサはX86のプロセッサの浮動小数点レジスタスタック操作をシミュレートせず、普通な流れで処理が行われることが表せる
本発明の実施例では、RISCプロセッサにおいて番号が0〜31である32個の既存浮動小数点レジスタを利用して、X86のプロセッサの浮動小数点レジスタスタック操作をシミュレートする。
前記のTOPポインタレジスタ22はTOPポインタ即ちスタックの操作ポインタを維持して、TOPポインタの値を保存することに使われる。このTOPポインタは、読み込まれること、書き込まれること、1増加すること、1減少するなどが可能である。
前記のポインタ操作モジュール41は、ポインタレジスタを操作し、浮動小数点レジスタスタックの操作をシミュレートするとき、ポインタレジスタのスタック操作ポインタのスタック操作をシミュレートし、スタック操作ポインタの状態を変更かつ監視することに使われる。
一つの実施可能な方式では、浮動小数点制御レジスタ81の中のスタックイネーブルビットがセットされた場合は、32個の浮動小数点レジスタの中の八つのレジスタを選択し、番号が0〜7であるX86のプロセッサの浮動小数点レジスタスタックのスタックレジスタをシミュレートすることに使用する。
浮動小数点制御レジスタ81の中のスタックイネーブルビットは1に設定された場合は、演算の中に使用され、レジスタがシミュレートした浮動小数点レジスタスタックが存在することを表す。そして浮動小数点演算命令の中に使われた番号が8より小さいレジスタの全てが、浮動小数点レジスタスタック83のスタックレジスタとして使用され、これによりX86のプロセッサの浮動小数点レジスタスタックをシミュレートする。
その後、ポインタ操作モジュールはTOPポインタを使用してスタックレジスタ番号の変換、即ちユーザで見た浮動小数点レジスタ番号とプログラムで使用した浮動小数点レジスタ番号との変換を行う。たとえば、レジスタ番号は、スタックTOPからi番目のユニットのレジスタST(i)にTOPポインタを加算した値を指す。TOPポインタの値が2であると、ST(0)が第2番のレジスタであり、ST(1)が第3番のレジスタである。オーバーフローに対しても対応の処理が行われるとき、このグループのレジスタが一つのループスタックになり、X86の中の浮動小数点レジスタスタックの機能をシミュレートする、という本発明の目的を達成できる。そして次の処理を行う。なお、つぎの作業は、スタックイネーブルビットがセットされない場合と同じである。
浮動小数点制御レジスタ81の中のスタックイネーブルビットが0に設定された場合、即ちクリアされた場合は、演算のときレジスタシミュレートスタックが存在しないとみなして、そのときの処理手順に従って処理を通常の通りに実行する。
以下に本発明に係るX86の仮想機をサポートするRISCプロセッサの浮動小数点スタック操作をシミュレートする方法の流れをさらに詳しく説明する。この方法では、RISCプロセッサの八つの浮動小数点レジスタにより浮動小数点レジスタスタック83を構成し、浮動小数点制御レジスタ81を通じてX86のTOPポインタ機能即ちスタックポインタ操作機能をシミュレートし、浮動小数点レジスタのスタック操作をシミュレートすることが完成される。
本発明のX86の仮想機が利用できるRISCプロセッサの浮動小数点レジスタのスタック操作をシミュレートする方法は以下のステップを含む。
ステップ2100:スタックイネーブルビットに基づいて、八つの浮動小数点レジスタを選択して浮動小数点レジスタスタックの中の八つのスタックレジスタをシミュレートし、浮動小数点レジスタのスタック操作をシミュレートし、さらにポインタレジスタを設置するかどうかを決める。
前記のステップ2100は以下のステップを含む。
ステップ2110:浮動小数点制御レジスタ81の中に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プロセッサにおいて、前記の浮動小数点レジスタスタック83は、浮動小数点演算が直接できる八つのスタックレジスタからなり、順番で番号が付けられ、それぞれ0〜7になる;
本発明の実施例のRISCプロセッサにおいて、前記のオーバーフローチェックレジスタ72は、X86の浮動小数点フラグレジスタ中のTAG機能を実現し、浮動小数点レジスタスタック83中のスタックレジスタに浮動小数点アクセスするときスタックオーバーフロー例外が発生するかどうかをチェックすることに使われる。オーバーフローチェックレジスタ72は、少なくとも8ビットの複数ビットレジスタであり、TAGビット即ちオーバーフローチェック機能ビットを表し、それぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表す。
本発明の実施例において、一つの汎用レジスタr(i)を選択し、その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表す。
汎用レジスタr(i) の低い順位の8ビットの中、各ビットが一つの浮動小数点レジスタスタック83中のスタックレジスタと対応し、各ビットの値は違う状態と示す。ここで、0が空を表し、スタックプッシュができるが、スタックポップができない。スタックポップが行われると、オーバーフローが発生することとなる;1が有効を表し、再度のスタックプッシュができない。再度のスタックプッシュが行われると、オーバーフローが発生することとなる。
一つの実施可能な方式では、本発明のRISCプロセッサは、0〜31、全部で32個の複数ビット浮動小数点レジスタからなる浮動小数点レジスタスタック83を含む。その中の0〜7番、全部で八つのスタックレジスタがX86の浮動小数点レジスタスタック83の八つのスタックレジスタをシミュレートする;RISCプロセッサは、さらに32ビットの汎用レジスタ(固定小数点) r(i)を含む。その低い順位の8ビットは、高くなる順でそれぞれ浮動小数点レジスタスタック83のスタックレジスタ0〜7番の状態を表し、X86の浮動小数点スタックのメカニズムのTAG機能を実現する。
前記のスタックオーバーフロー判断モジュール43は、指定した浮動小数点レジスタスタック83の中のスタックレジスタをチェックし、さらにスタックレジスタの値に基づき前記のオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行うことに使われる。
以下に本発明X86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法の流れをさらに詳しく説明する。RISCプロセッサの八つのスタックレジスタにより浮動小数点レジスタスタック83を構成し、一つの汎用レジスタによりオーバーフローチェックレジスタ72を構成し、その低い順位の8ビットでX86のTAG機能をシミュレートし、各ビットが一つのスタックレジスタの違う状態と対応する。
本発明のX86の仮想機をサポートするRISCプロセッサの浮動小数点スタックオーバーフローのチェックの方法は以下のステップを含む。
ステップ21000:指定された浮動小数点レジスタスタック中のスタックレジスタをチェックし、スタックレジスタの値に基づきオーバーフローチェックレジスタ72を操作し、浮動小数点スタックオーバーフローのチェックを行う。
前記のステップ21000は以下のステップを含む。
ステップ21100:浮動小数点レジスタスタック中の指定したスタックレジスタが空であるかどうかをチェックする。空である場合には、指定したオーバーフローチェックレジスタ72のTAGビットの対応ビットを1にし、次のステップに進む;空でない場合には、浮動小数点スタックオーバーフロー例外が発生する。
ステップ21200:浮動小数点レジスタスタック中の指定したスタックレジスタが有効であるかどうかをチェックする。有効である場合には、指定したオーバーフローチェックレジスタ72のTAGビットの対応ビットを0にし、次のステップに進む;有効でない場合には、浮動小数点スタックオーバーフロー例外が発生する。
ステップ21300:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中のデータをスタックポップする必要がない場合には、指定したオーバーフローチェックレジスタ72のTAGビットの値を維持し、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
ステップ21400:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつ一つのスタックレジスタ中のデータをスタックポップする必要がある場合には、データをスタックポップする必要があるスタックレジスタに対応するオーバーフローチェックレジスタ72のTAGビットが対応するビットを0にし、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
ステップ21500:浮動小数点レジスタスタック中の指定した二つのスタックレジスタの両方が有効であるかどうかをチェックする。それらの両方が有効であり、かつスタックレジスタ中の全てのデータをスタックポップする必要がある場合には、対応するオーバーフローチェックレジスタ72のTAGビットに対応する二つのビットを0にし、次のステップに進む;そうでない場合には、浮動小数点スタックオーバーフロー例外が発生する。
以下に浮動小数点レジスタのスタックプッシュの操作を例として、RISCプロセッサにおいて行われる浮動小数点スタックオーバーフローのチェックの方法をさらに詳しく説明する。
まず、RISCプロセッサが浮動小数点レジスタスタックのスタックTOPを確認し、該スタックTOPのスタックレジスタに対応するオーバーフローチェックレジスタ72のTAGビットを読む出す。
RISCプロセッサが本発明の浮動小数点レジスタスタックに基づき、浮動小数点レジスタスタックのスタックTOPを判断して確認し、対応した本発明のスタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72のTAGビットを確認することは、現在にある技術であり、本発明で創造したものではなく、この分野の技術者は本発明の実施例によって以上の操作を実現できるから、本発明で詳しく説明しない。
スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72の対応するTAGビットが0であるかどうかを判断する。
0である場合、スタックTOPのスタックレジスタに対応したオーバーフローチェックレジスタ72の対応する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)演算操作が行われ、かつ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である場合、スタックオーバーフロー例外が発生する。
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をクリアし、次の演算操作に進む。
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である場合、スタックオーバーフロー例外が発生する。
以下にX86の仮想機をサポートするプロセッサのデータ処理のプロセスがX86の保存構造をサポートする場合における本発明のRISCプロセッサのデータ処理の流れを詳しく説明する。
X86のプロセッサにセグメントレジスタがあるため、ユーザモードであっても、X86の保存、アクセス、アドレッシングと保護方式が比較的に特別なものである。ゆえに、本発明はメモリーアクセスアドレスが界に越えたかどうかを判断できる読み書き操作を提供し、即ちloadとstore操作のソースレジスタの中に、一つのboundレジスタがある。このboundレジスタは、アドレスの演算又はデータの保存に使われるものではなく、アクセスアドレスの比較に使われる。もしアクセスアドレスが該boundレジスタの決めた境に超えたことを発見した場合、アドレスが界を越えた例外が発生するが発生した旨を知らせる。
アドレスの界が上界と下界に分けられ、メモリーアクセスの有効アドレスを上界以下に、または下界以上に設定しなければならない。これらの命令は、メモリーアクセスアドレスの条件が満足された場合は正常にメモリーアクセスし、そうでない場合はアドレスエラーの例外が発生する。
仮想機をサポートするRISCプロセッサにおいては、X86の命令セットからRISCプロセッサのMIPS命令セットへの翻訳中にメモリーアクセス操作が行われた場合、メモリーアクセスアドレスの判断を増やして、メモリーアクセスアドレスが界に越えたかどうかを判断し、X86のメモリーアクセス操作の翻訳スピードを増加させる。
一つの実施可能な方式として、本発明の実施例に係る前記の物理レジスタヒープの上界アドレスレジスタが上界としての有効アドレスを保存することに使われる;また、下界アドレスレジスタが下界としての有効アドレスを保存することに使われる。
前記の上界、下界アドレスレジスタは物理レジスタ中の任意の汎用物理レジスタであってもよい。
前記の上界、下界判断モジュールは、メモリーアクセス命令において、上界アドレスレジスタ中に保存された上界アドレス及び/または下界アドレスレジスタ中に保存された下界アドレスに基づいて命令操作データアドレスの有効性を判断する。
MIPS命令セット中の各メモリーアクセス命令、例えばload命令またはstore命令に、界の判断を増やし、メモリーアクセスアドレスが条件に満足された場合は、これらの命令が正常にメモリーアクセスし、そうでない場合は、MIPS中のアドレスエラーの例外が発生する。
命令デコードした後、レジスタ中のアドレス限界は命令の一つのレジスタ操作データとして機能し、操作内容データがbase方式に基づいて有効なアドレスを形成した後、該有効アドレスがまずレジスタ中のアドレス限界と比較する。命令のセマンティック条件を満たした場合、即ちレジスタが上界アドレスレジスタである場合、該有効アドレスがレジスタ中のアドレス限界以下であり、また、レジスタが下界アドレスレジスタであり、該有効アドレスがレジスタ中のアドレス限界以上である場合、正常なメモリーアクセス操作が行われる;そうでない場合は、アドレスエラーの例外が発生する。
本発明の実施例の中、一つの実施可能な方式として、load命令とstore命令を含むMIPS命令セット中の合計24個のメモリーアクセス命令に界の判断を増やした。
その中、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プロセッサにおいて、物理レジスタヒープ中の二つの汎用レジスタをそれぞれ上界、下界アドレスレジスタ74と設置する
その中、上界アドレスレジスタは上界とした有効アドレスを保存する;下界アドレスレジスタは下界とした有効アドレスを保存する。
ステップ32:X86の仮想機の命令セットをMIPS命令セットへ翻訳するとき、デコーダは命令をデコードし、RISCプロセッサで処理できる二進法コードが得られる。
ステップ33:固定小数点演算部分3は、デコードした後のメモリーアクセス命令において、上界アドレスレジスタに保存された上界アドレス及び/または下界アドレスレジスタに保存された下界アドレスに基づき、命令操作数アドレスの有効性を判断する。
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プロセッサのモード識別モジュール24は、複数倍のデータ幅にメモリーアクセスする命令を含む。前記の複数倍のデータ幅のメモリーアクセス命令は、複数倍のデータ幅のメモリー読み取り、メモリー書き込み、および浮動小数点レジスタの複数倍のデータ幅のメモリー読み取り、メモリー書き込み、全部で4種類の複数倍のデータ幅のメモリーアクセス拡張命令を含む。
一つの実施可能な方式として、本発明は、2倍データ幅のメモリー読み取り命令、メモリー書き込み命令、および浮動小数点レジスタの2倍データ幅のメモリー読み取り命令、メモリー書き込み命令、全部で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ビットの論理レジスタ番号を有する。
デコーダ2は命令をデコードした後、メモリーアクセス実行部分5の送信行列(示されていない)に送り、送信行列は行列の中から操作データによって準備された操作を選び、メモリーアクセス実行部分5のメモリーアクセス部分(示されていない)に送信する。
メモリーの四つのワード、全部で128ビットをロードするデータロード命令操作に対して、前記のメモリーアクセス実行部分5の合併部分は、二つの内部操作が送信行列に入るときにこれらの内部操作を合併する。合併の方法は、送信行列に入ろうとする隣接した二つの操作が四つのワード、128ビットのデータロード命令のデコードであると、その次の一つの操作は送信行列に入らず、その目標物理レジスタ番号を1つ前の操作の高い順位の64ビットの目標物理レジスタ番号に保存する。
合併したデータロード操作は、二つの目標物理レジスタ番号を有し、アドレスが決められたときにメモリーアクセス実行部分5のメモリーアクセス部分に送信されて実行される。
メモリーアクセス実行部分5は、データの読み書きの部分であり、命令によってメモリーからデータを読み出し、またはメモリーへデータを書き込む。この流れは既存の一般的な技術であり、この分野の技術者にとって簡単に実現できるから、本発明の実施例で詳しく説明しない。
以下は倍データ幅のメモリーロード命令、メモリー保存命令、および浮動小数点レジスタの倍データ幅のメモリーロード命令、メモリー保存命令、全部で四つの命令について説明する
gsLQ rt, offset(base) /メモリーから4ワードデータを読み取る
メモリーから4ワードデータを読み取り、レジスタに保存する。まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの4ワードデータを読み取り、隣接した二つの汎用レジスタの中に保存される。
rtが偶数であれば、レジスタrtとレジスタrt+1の中に保存される;もしrtが奇数であれば、レジスタrt-1とレジスタrtの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
gsLQC1 ft, offset(base) /メモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。この整列した有効アドレスに基づいてメモリー中から128ビットの4ワードデータを読み取り、隣接した二つの浮動小数点レジスタの中に保存される。
ftが偶数であれば、レジスタftとレジスタft+1の中に保存される;ftが奇数であれば、レジスタft-1とレジスタftの中に保存される。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
gsSQ rt, offset(base) /メモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの汎用レジスタの中の4ワードデータをメモリー中の有効アドレスに保存する。
rtが偶数であれば、レジスタrtとレジスタrt+1の中の値を読み出し、メモリーに保存する;rtが奇数であれば、レジスタrt-1とレジスタrtの中の値を読み出し、メモリーに保存する。
有効アドレスが整列しており、低い4ビットアドレス中の任意の1ビットが0でないと、アドレスエラーの例外が発生する。
gsSQC1 ft, offset(base) /浮動小数点レジスタからメモリーに4ワードデータを書き込む
まず符号付の8ビットのoffsetとGPR[base]の内容を加算して有効アドレスが得られる。隣接した二つの浮動小数点レジスタの中の4ワードデータをメモリー中の有効アドレスに保存する。
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:デコードされた複数倍のデータ幅の命令はメモリーアクセス実行部分5に送られ、操作される。
デコーダは入力された命令をデコードした後、メモリーアクセス実行部分5に送る。メモリーアクセス実行部分5において、その命令は読み取り命令であれば、操作命令LQの二つの内部操作lq1、lq2を読み取って一つの操作に合併させ、メモリーアクセス実行部分5のメモリーアクセス部分に送り実行する。
入力した命令は本発明のメモリーアクセス拡張命令中の四つのワード、全部で128ビットのデータの保存命令SQであれば、デコーダ3はソースレジスタ番号を一つから二つの、対を成すレジスタ番号に拡張する。例えば4番目のレジスタを4番と5番二つのレジスタ番号に拡張し、7番目のレジスタを6番と7番二つのレジスタ番号に拡張する。内部操作として二つのソースレジスタ番号をメモリーアクセス実行部分5の送信行列に送る。
入力した命令は本発明のメモリーアクセス拡張命令中の読み取り操作であれば、デコーダは該読み取り操作を二つの内部操作にデコードし、同じく目標レジスタを自動的に一つから二つの、対を成すレジスタに拡張し、そして以上の二つの内部操作に分配し、メモリーアクセス実行部分5へ出力して実行する。そしてこれらの二つの操作を一つの操作に合併させてメモリーアクセス実行部分5のメモリーアクセス部分に送り、実行する。
即ち、入力した命令は本発明のメモリーアクセス拡張命令中の四つのワード、全部で128ビットのデータのロード命令LQであれば、デコーダは目標レジスタ番号を一つから二つの、対を成すレジスタ番号に拡張する。さらにこの命令を二つの隣接した内部操作lq1、lq2にわけ、二つの操作がそれぞれこの二つの目標レジスタ番号を付けてメモリーアクセス実行部分5の送信行列に送られる。メモリーアクセス実行部分5は、デコーダからの内部操作を受け取り、これらの内部操作の中からソース物理レジスタが準備した内部操作を選択し、メモリーアクセス実行部分5のメモリーアクセス部分に送信する。LQ命令は一つのメモリーアクセス操作としてメモリーアクセス部分に送信するため、メモリーアクセス実行部分5の合併モジュールで二つの内部操作の合併を完成する。その方法は、lq2の目標物理レジスタをlq1操作した高い順位の64ビットの目標物理レジスタ中に保存し、lq2自身は送信行列に入らない。メモリーアクセス部分はメモリーアクセス操作を実行し、lq1については、結果の中に二つの値の領域があり、それぞれ対応する物理レジスタに書き込まれる。
N2) 翻訳後のコードは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プロセッサのモード識別モジュール24は、命令の仮想機の命令セットのモードを区別することに使われる。
本発明のRISCプロセッサでは、デコーダは、デコードの入力及び出力、命令デコード機能を含み、既存技術であるデータ通路以外に、さらにモード識別モジュール24に基づき命令の仮想機の命令セットのモードを区別し、そして該デコーダは命令が区別された仮想機の命令セットのモードに基づいてデコードした後固定小数点演算部分3に出力する。これは直接デコードするため、既存のデコーダの機能を向上させ、プロセッサの演算スピードを向上させる。
固定小数点演算部分3はデコードする命令を受け取った後、これを処理して実行の結果を出力する。
固定小数点演算部分3は既存の技術である命令の入力出力、命令の実行を含むデータ通路以外に、さらにデコーダ2によって命令の命令セットモードを区別した後、固定小数点演算部分3が違う命令モードに基づいて対応する演算を実行し、その実行結果を出力する。
(一)
一つの実施可能な方式として、本発明のRISCプロセッサのモード識別モジュール24は、仮想機モード制御レジスタ73である。前記の仮想機モード制御レジスタ73は制御ビットフラグX86MODE1を含む。該ビットが1になるときに当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該フラグが0になるときに当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
RISCプロセッサのMIPS64命令セット中に、いくつかのCoprocessor0(CP0) 制御レジスタがユーザが自分で定義するために予備されたものであり、例えば22番レジスタはすべてのSelビットの状況でユーザが自分で定義するために予備されたものである。
本発明の実施例はこれらの制御レジスタ(CP0)中の1ビットを利用してX86モード制御ビットフラグX86MODE1とし、命令のモードを区別する必要があるとき、この制御レジスタに対応するビットを読み取って判断する。該フラグビットが1になるとき、当該の命令がX86の仮想機の命令セットモードで稼動していることを表し、該フラグビットが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
RISCプロセッサは命令をロードし、デコーダ2でデコードし実行するとき、デコーダ2はまず仮想機モード制御レジスタ73の制御ビットフラグX86MODE1を読み取り、フラグビットの値が0かまたは1によって仮想機の命令セットモードを区別し、仮想機モード制御レジスタ73の制御ビットフラグX86MODE1が変更されるまで、その仮想機の命令セットモードに基づきデコードする。
一つの加算命令がデコーダに入るとき、RISCプロセッサは対応する制御レジスタを判断し、X86の仮想機の命令セットモードであるか、それともX86の仮想機の命令セットモード以外のモードであるかをと区別する。
前記の固定小数点演算部分3のフラグ演算モジュール32は、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
(二)
一つの実施可能な方式として、本発明のRISCプロセッサにおいて、前記のモード識別モジュール24はデコーダ中に含まれたプレフィックス命令デコードモジュール241である。前記のプレフィックス命令デコードモジュール241は一つのプレフィックス命令SETFLAGを含み、このプレフィックス命令SETFLAGは、該プレフィックス命令後の複数の命令がX86の仮想機の命令セットモードであることを表す。
本発明の実施例のプレフィックス命令デコードモジュール241中のプレフィックス命令は、MIPS命令セットの中に保留したSPECIAL2の空スロットの値で実現される。
デコーダ2のプレフィックス命令デコードモジュール241は、該プレフィックス命令をデコードするときにフラグを設置し、この命令後の命令はX86の仮想機の命令セットモードにデコードされ、そして該プレフィックス命令は空操作NOPにデコードされる。
前記のプレフィックス命令SETFLAGはプレフィックス命令SETFLAGの影響範囲を示す範囲パラメータを含み、そのパラメータは1であるとき該プレフィックス命令がその次の一つの命令だけに影響を与える;そのパラメータはnであるとき該プレフィックス命令がその次のn個の命令に影響を与えると表すのが好ましい。
前記のデコーダ2のプレフィックス命令カウンター242は、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数nを記録することに使われるのが好ましい。
影響された現在の命令は固定小数点演算部分に入るとき、即ち次の命令がデコーダ2に入るときにnが1減少する。前記の命令シーケンス中にシフト命令が出現することは許されない。即ちシフト命令が出現すると、このシフト命令からの命令シーケンスはプレフィックス命令に影響されないこととなる。
一つの実施可能な方式として、前記の固定小数点演算部分3の例外処理モジュール34は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行の例外が表示された場合に遅延スロット例外と同じ方法を採用し、Causeレジスタのbdビットを1にさせ、同時にEPCをプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われるのが好ましい。
別の実施可能な方式として、前記の固定小数点演算部分3のプレフィックス例外制御レジスタ33は、例外が発生した命令は前記のプレフィックス命令による影響されたかどうかを記録することに使われることが望ましい。異常でプロセスが中断された場合に、プレフィックス例外制御レジスタ33中にその時点の命令のカウントを保存する;異常が終わって中断されたプロセスに戻る場合、前記のカウント、即ちその前にプレフィックス例外制御レジスタ33に保存されたカウントに基づいて前記の中断されたプロセスが回復する。
前記の固定小数点演算部分3のフラグ演算モジュール32は、仮想機の命令セットモードでの命令について、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
(三)
別の実施可能な方式として、前記のモード識別モジュール24は命令処理モジュール21であり、RISCプロセッサのMIPS命令中に該命令の仮想機の命令セットモードをマークすることに使われる。
使用頻度が非常に高いX86の仮想機の命令について、RISCプロセッサのMIPS命令セット中に、命令処理モジュール21により、該MIPS命令がX86の仮想機の命令セットモードで実行する命令であることを表す一つのマークを設置することは必要となる。こうすれば、使用頻度が高いX86の仮想機の命令について、該命令がX86の仮想機の命令セットモードであることをマークし、同命令を直接にRISCプロセッサのMIPS命令セットにより実行するため、その分のコストが減少される。
命令処理モジュール21に影響される命令は、該命令のデコードの実行だけに影響を与え、その他の命令には影響を与えない。他の命令は、元の仮想機の命令セットモードで実行される
前記のRISCプロセッサのMIPS命令は、X86命令セット中にEFLAGフラグと関係する命令に対応する仮想機の命令、およびX86命令セット中に特別な構造例えば浮動小数点スタック操作の命令に対応する仮想機の命令を含むのが好ましい。
命令処理モジュール21による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命令がデコーダ2に入るとき、仮想機モード制御レジスタ73の制御ビットフラグX86MODE1は命令の仮想機の命令セットモードを区別する。
前記のステップN210。艪ヘ以下のステップを含む。
ステップN211。艨F仮想機モード制御レジスタ73の制御ビットフラグX86MODE1を判断する;
ステップN212。艨F該フラグビットが1になるとき当該の命令がX86の仮想機の命令セットモードで稼動していることを表す。
ステップN213。艨A該フラグビットが0になるとき当該の命令がX86の仮想機の命令セットモード以外で稼動していることを表す。
さらに別の実施可能な方式として、前記のステップN210は以下のステップを含む。
ステップN211ィ普Fデコーダは命令を読み取り、該命令中のフラグの仮想機の命令セットモードに基づき、命令の仮想機の命令セットモードを区別した。
ステップN220:デコーダは命令をデコードする間に、区別された命令の仮想機の命令セットのモードに基づき、命令をデコードした後、RISCプロセッサの固定小数点演算部分3に出力する。
プレフィックス命令に基づいて命令の仮想機の命令セットのモードを区別したとき、以下のステップを含む。
ステップN221:デコーダはデコードによりプレフィックス命令を確認し、デコーダに一つのフラグビットX86mode2=1を設置する。
前記のステップN220はさらに以下のステップを含む。
ステップN222:デコーダ中のプレフィックス命令カウンター242は、プレフィックス命令に影響され、かつシフト命令が表示されない命令シーケンスの命令数nを記録する。
影響された現在の命令は固定小数点演算部分に入るとき、即ち次の命令がデコーダ2に入るときにnが1減少する。
前記の命令シーケンス中にシフト命令が出現することは許されない。即ちシフト命令が出現すると、このシフト命令からの命令シーケンスはプレフィックス命令に影響されないこととなる。
仮想機モード制御レジスタ73の制御ビットフラグX86MODE1に基づいて命令の仮想機の命令セットのモードを区別したとき、前記のステップN220のデコーダはデコードし、以下のステップを含む。
ステップN221′:RISCプロセッサは命令をロードし、デコーダ2でデコードし実行するとき、デコーダ2はまず仮想機モード制御レジスタ73の制御ビットフラグX86MODE1を読み取り、フラグビットの値が0かまたは1によって仮想機の命令セットモードを区別し、仮想機モード制御レジスタ73の制御ビットフラグX86MODE1が変更されるまで、その仮想機の命令セットモードに基づいてデコードする。
ステップN230:RISCプロセッサの固定小数点演算部分はデコーダの出力に基づき、処理を行い、実行の結果を出力する。
プレフィックス命令に基づき命令の仮想機の命令セットのモードを区別したとき、以下のステップを含む。
ステップN231:デコーダはプレフィックス命令を内部の空操作NOPにデコードしたため、固定小数点演算部分はNOP命令を実行する。
複数モードの命令セットの命令を実行する間、中断の例外が発生しないため、前記のステップN230は以下のステップを含むのが好ましい。
ステップN232:固定小数点演算部分は、プレフィックス命令がその直後の一つの命令だけに影響を与えるとき、実行の例外が表示された場合に遅延スロット例外と同じ方法を採用し、Causeレジスタのbd(Branch delay)ビットを1にさせ、同時にEPC(The Exception Program Counter)をプレフィックス命令にポイントし、例外サービスプログラムが完成した後に再びプレフィックス命令を実行することに使われる。
一般的には、EPCレジスタで保存したのは、例外サービスプログラムの実行が完成した後にプロセッサの元の操作の入り口のアドレスである。
ステップN233:固定小数点演算部分はプレフィックス命令がn個の命令に影響を与えるとき、プレフィックス例外制御レジスタ33を使用して、例外が発生した命令は前記のプレフィックス命令による影響されたかどうかを記録する。異常でプロセスが中断された場合に、プレフィックス例外制御レジスタ33中にその時点の命令のカウントを保存する。異常が終わって中断されたプロセスに戻る場合、前記のカウント、即ちその前にプレフィックス例外制御レジスタ33に保存されたカウントに基づいて前記の中断されたプロセスが回復する。
ステップN234:固定小数点演算部分は、入力された命令に基づいて演算し、そして演算結果に基づいて対応するEFLAGのフラグビットを演算する。
以下は加算命令を例として、プレフィックス命令の方式で本発明のRISCプロセッサの複数モードでのデータ処理の方法を具体的に説明する。
まず、一つのプレフィックス命令がデコーダに入る;
そして、デコーダ2はデコードによりプレフィックス命令を確認し、デコーダに一つのフラグビットX86mode2=1を設置し、プレフィックス命令を内部の空操作NOPにデコードし、次の命令を実行する;
それから、プレフィックス命令の次の命令即ち加算命令がデコーダに入るとき、プレフィックスのフラグビットが存在するかどうかを判断する。加算命令がプレフィックス命令のパラメータの範囲内でないと、デコーダは命令自身につけたソースレジスタと目標レジスタおよび内部操作の操作コード(op)をデコードする;この加算命令がプレフィックス命令のパラメータの範囲内であり、即ちX86モードでの加算命令であると、X86の仮想機の命令セットモードで、演算結果に基づきEFLAGSのフラグビットを変更するから、デコーダはEFLAGSのフラグビットをソースレジスタ中の一つにデコードするとともに、EFLAGSのフラグビットを目標レジスタにデコードし、そして同時に加算命令自身につけたソースレジスタと目標レジスタおよび内部操作の操作コード(op)をデコードする;
最後に、固定小数点演算部分はデコーダの出力を入力として、正常なMIPS命令中の命令であれば、加算の演算が行われる;プレフィックス命令に影響された加算命令であれば、固定小数点演算部分は先に加算の演算を実行し、そして加算の演算結果に基づき新たなEFLAGSフラグビットの値を演算する。
本発明のRISCプロセッサおよび複数モードでのデータ処理の方法では、RISCプロセッサ中に、違うモードの仮想機命令をRISCプロセッサで実行可能な命令に翻訳するとき、直接にデコードし実行する。これで大量の翻訳時間が節約され、プロセッサの演算スピードが飛躍的に向上し、全体的にプロセッサの性能が向上する。
N3) ソースプロセッサから目標プロセッサへのアドレス変更に対する検索テーブルサポート
仮想機の種類はさまざまであるが、そのコアは一つの翻訳または解釈のプロセス、即ち目標コードからローカルコードに翻訳か解釈して、ローカルプロセッサで実行するプロセスである。仮想機はローカルコードを実行する間に、ジャンプ命令が出てくると、X86のソースプログラムの命令アドレスを対応するMIPS目標プログラムの命令アドレスに変更する、そして目標プログラムの命令アドレスに基づきジャンプが実現される。本発明はRISCプロセッサ中に元の命令アドレス(X86命令アドレス)から目標命令アドレス(MIPS命令アドレス)までの検索テーブルのマップの構造を増やして、ソース命令アドレスから目標命令アドレスまでの変更を加速させるため、仮想機の性能が向上する。
本発明の実施例のX86の仮想機をサポートするRISCプロセッサの検索テーブルモジュール23は、検索テーブルを利用してX86の元の命令アドレスからMIPS目標命令アドレスへの変換が実現されることに使われる。
本発明はハードウェアに一つの検索テーブルを有し、X86のプログラム中のジャンプアドレスからMIPSジャンプアドレスへの翻訳に対するクイック検索をサポートし、これにより仮想機の性能を向上させる。
一つの実施可能な方式として、前記の検索テーブルは内容基づいてアドレッシングする検索テーブルであってもよく、この場合、内容アドレッシング可能なメモリー/ランダムアクセスメモリー(Content-Addressable Memory/Random Access Memory , CAM/RAM)で実現する。ここで、RAMは一つのアドレスを入力して、対応するアドレス中のデータを出力する;CAMは内容を入力して、この内容が保存されたユニットのインデックス番号またはこのインデックス番号と関連する別のユニットの内容を出力する。
該検索テーブルは内容アドレッシングの検索テーブルであってもよく、この場合、X86のジャンプアドレスからMIPSジャンプアドレスへの翻訳が実現され、即ちRISCプロセッサのX86の仮想機中に、X86の元の命令アドレスからMIPS目標命令アドレスへの変更が完成される。そのテーブルの項目は表1のように。
表1 検索テーブルの項目
Figure 2011515750

表1に示されたように、X86の元の命令(SPC)からMIPS目標命令アドレス(TPC)への変換は三つの領域を使用する:ASID領域、SPC領域とTPC領域。
その中、ASID領域はオペレーティングシステムにおいて複数のX86の仮想機プロセスを開始するID番号を保存することに使われる。これらの複数のX86の仮想機プロセスは全て検索テーブルを使用する必要があるとき、オペレーティングシステムにより、互いに干渉されないように、それぞれ分布されたID番号(ASID)を区別する。
SPC領域はX86の元の命令アドレスを保存することに使われる;
TPC領域はMIPS目標命令アドレスを保存することに使われる;
ASID領域とSPC領域は検索テーブルのアドレス部分(CAM)にあり、TPC領域は検索テーブルの保存部分(RAM)にある。
検索テーブルモジュール23が検索するとき、当時のX86の仮想機プロセスのASIDと検索テーブル命令でのSPCが一緒に検索テーブルの「アドレス」部分となり、この「アドレス」部分が全ての検索テーブルの項目に送られる。それぞれの項目は自身で保存されたASID、SPCを入力と比べ、マッチしたらその中に保存されたTPCを出力する。ゆえに、RISCプロセッサのX86の仮想機プロセスについて、検索しようとするX86のソース命令アドレスを入力すれば、検索テーブル中から対応するMIPS目標命令アドレスを見つけることができる。
ここで、検索テーブル中のSPC領域とTPC領域の値は仮想機によって初期化の際に初期化の処理が行われるが、ASID領域の値はローカルオペレーティングシステムによって与えられる。
一つの実施可能な方式として、本発明の実施例中に、該検索テーブルの構造をアクセスまたは修正する四つの命令で検索テーブルモジュール23が実現される。
一番の命令は、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は目標アドレスを保存するレジスタである。
別の実施可能な方式として、ヒットされなかったサービスプログラムの入り口アドレスは、第1の実施例のひとつの制御レジスタに保存されなく、検索テーブルの項目の第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プロセッサの性能を向上させる。

Claims (17)

  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プロセッサのデータ処理の方法。
JP2011500028A 2008-03-17 2008-12-17 X86の仮想機をサポートするriscプロセッサ装置及び方法 Active JP5501338B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN 200810102086 CN100555225C (zh) 2008-03-17 2008-03-17 一种支持x86虚拟机的risc处理器装置及方法
CN200810102086.3 2008-03-17
PCT/CN2008/002023 WO2009114961A1 (zh) 2008-03-17 2008-12-17 一种支持x86虚拟机的risc处理器装置及方法

Publications (2)

Publication Number Publication Date
JP2011515750A true JP2011515750A (ja) 2011-05-19
JP5501338B2 JP5501338B2 (ja) 2014-05-21

Family

ID=39891348

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011500028A Active JP5501338B2 (ja) 2008-03-17 2008-12-17 X86の仮想機をサポートするriscプロセッサ装置及び方法

Country Status (7)

Country Link
US (1) US8949580B2 (ja)
EP (1) EP2267598B1 (ja)
JP (1) JP5501338B2 (ja)
KR (1) KR101232343B1 (ja)
CN (1) CN100555225C (ja)
CA (1) CA2718724C (ja)
WO (1) WO2009114961A1 (ja)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5193624B2 (ja) 2008-02-19 2013-05-08 ルネサスエレクトロニクス株式会社 データプロセッサ
CN100555225C (zh) 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法
CN101819517B (zh) * 2009-05-19 2013-05-22 威盛电子股份有限公司 适用于微处理器的装置及方法
KR101247259B1 (ko) 2009-12-17 2013-04-01 한국전자통신연구원 가상화 장치 및 그 처리 방법
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US20130086359A1 (en) * 2011-09-29 2013-04-04 Qualcomm Incorporated Processor Hardware Pipeline Configured for Single-Instruction Address Extraction and Memory Access Operation
CN102508635B (zh) * 2011-10-19 2014-10-08 中国科学院声学研究所 一种处理器装置及其循环处理方法
US9329861B2 (en) 2011-12-29 2016-05-03 International Business Machines Corporation Convert to zoned format from decimal floating point format
US9335993B2 (en) 2011-12-29 2016-05-10 International Business Machines Corporation Convert from zoned format to decimal floating point format
CN103530089B (zh) * 2012-08-31 2018-06-15 威盛电子股份有限公司 微处理器及其操作方法
CN104598196A (zh) * 2014-12-30 2015-05-06 杭州中天微系统有限公司 一种浮点处理装置及方法
US9335982B1 (en) * 2015-04-28 2016-05-10 Microsoft Technology Licensing, Llc Processor emulation using multiple translations
GB2546465B (en) 2015-06-05 2018-02-28 Advanced Risc Mach Ltd Modal processing of program instructions
US9817642B2 (en) * 2015-06-25 2017-11-14 Intel Corporation Apparatus and method for efficient call/return emulation using a dual return stack buffer
CN105159651B (zh) * 2015-08-31 2017-11-07 中国航天科技集团公司第九研究院第七七一研究所 一种risc处理器的单/双/四精度浮点数据相关电路及操作数获取方法
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US9870305B2 (en) 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10169043B2 (en) * 2015-11-17 2019-01-01 Microsoft Technology Licensing, Llc Efficient emulation of guest architecture instructions
CN105677298B (zh) * 2015-12-30 2018-03-27 李朝波 一种将计算机指令中立即数扩展的方法和装置
US20170192788A1 (en) * 2016-01-05 2017-07-06 Intel Corporation Binary translation support using processor instruction prefixes
US9996329B2 (en) 2016-02-16 2018-06-12 Microsoft Technology Licensing, Llc Translating atomic read-modify-write accesses
US10514913B2 (en) 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
CN107291425B (zh) * 2017-06-23 2020-11-24 上海兆芯集成电路有限公司 合并解决重命名尺寸问题的部分写入结果的系统和方法
US10379851B2 (en) 2017-06-23 2019-08-13 International Business Machines Corporation Fine-grained management of exception enablement of floating point controls
US10310814B2 (en) 2017-06-23 2019-06-04 International Business Machines Corporation Read and set floating point control register instruction
US10684852B2 (en) * 2017-06-23 2020-06-16 International Business Machines Corporation Employing prefixes to control floating point operations
US10740067B2 (en) 2017-06-23 2020-08-11 International Business Machines Corporation Selective updating of floating point controls
US10481908B2 (en) 2017-06-23 2019-11-19 International Business Machines Corporation Predicted null updated
GB2570326B (en) * 2018-01-22 2020-06-10 Advanced Risc Mach Ltd Multiple guard tag setting instruction
US11762566B2 (en) 2018-01-22 2023-09-19 Arm Limited Programmable mapping of guard tag storage locations
CN108415728B (zh) * 2018-03-01 2020-12-29 中国科学院计算技术研究所 一种用于处理器的扩展浮点运算指令执行方法及装置
CN110874259A (zh) * 2018-08-31 2020-03-10 龙芯中科技术有限公司 程序执行方法、装置、设备和存储介质
CN111210012B (zh) * 2018-11-21 2022-12-09 上海寒武纪信息科技有限公司 数据处理方法、装置及相关产品
KR20200139829A (ko) 2018-10-18 2020-12-14 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 네트워크 온칩 데이터 처리 방법 및 장치
CN109788352A (zh) * 2018-12-25 2019-05-21 深圳市纽格力科技有限公司 一种基于mips架构的机顶盒异常确认方法和系统
CN110362501B (zh) * 2019-07-05 2021-09-24 北京大学 一种执行饱和寻址加载和存储操作的设备和方法
CN110780925B (zh) * 2019-09-02 2021-11-16 芯创智(北京)微电子有限公司 一种指令流水线的预译码系统及方法
CN111090465B (zh) * 2019-12-19 2022-08-19 四川长虹电器股份有限公司 一种rv32ic指令集的译码系统及其译码方法
JP2021166010A (ja) * 2020-04-08 2021-10-14 富士通株式会社 演算処理装置
US11119777B1 (en) 2020-04-22 2021-09-14 International Business Machines Corporation Extended prefix including routing bit for extended instruction format
CN111782269B (zh) * 2020-06-04 2023-12-12 珠海格力电器股份有限公司 一种中断处理方法及中断处理设备
TWI764311B (zh) * 2020-10-08 2022-05-11 大陸商星宸科技股份有限公司 記憶體存取方法及智慧處理裝置
CN112860320A (zh) * 2021-02-09 2021-05-28 山东英信计算机技术有限公司 基于risc-v指令集进行数据处理的方法、系统、设备及介质
US11922055B2 (en) 2021-04-28 2024-03-05 Seagate Technology Llc Stack register having different ferroelectric memory element constructions
CN113220300A (zh) * 2021-04-29 2021-08-06 麒麟软件有限公司 一种应用于Android系统x86架构上的ARM指令集转换方法
CN116501451B (zh) * 2023-06-25 2023-10-17 中国科学院计算技术研究所 二进制翻译方法、翻译控制方法、指令执行方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03150633A (ja) * 1989-11-07 1991-06-27 Matsushita Electric Ind Co Ltd 命令解読装置
JPH06202903A (ja) * 1992-12-29 1994-07-22 Nec Corp Cpuシミュレーション方法およびcpuシミュレータ
JPH06324883A (ja) * 1993-05-15 1994-11-25 Nec Corp Cpuシミュレータ
JPH08339325A (ja) * 1995-06-07 1996-12-24 Internatl Business Mach Corp <Ibm> 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
JP2000515270A (ja) * 1996-01-24 2000-11-14 サン・マイクロシステムズ・インコーポレイテッド ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ
JP2002536712A (ja) * 1999-01-28 2002-10-29 エーティーアイ インターナショナル エスアールエル 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行
JP2004038923A (ja) * 2002-02-06 2004-02-05 Transitive Technologies Ltd プログラムコード変換のための条件コードフラグのエミュレーション

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1278382C (en) 1986-12-15 1990-12-27 Brian J. Sprague Reduced instruction set computing apparatus and methods
CA2045735A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Computer performance by eliminating branches
JPH06131197A (ja) * 1992-10-21 1994-05-13 Toshiba Corp 最適化処理装置
US5450607A (en) * 1993-05-17 1995-09-12 Mips Technologies Inc. Unified floating point and integer datapath for a RISC processor
DE69427265T2 (de) * 1993-10-29 2002-05-02 Advanced Micro Devices Inc Superskalarbefehlsdekoder
US5574927A (en) * 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US5685009A (en) * 1994-07-20 1997-11-04 Exponential Technology, Inc. Shared floating-point registers and register port-pairing in a dual-architecture CPU
US6076155A (en) * 1995-10-24 2000-06-13 S3 Incorporated Shared register architecture for a dual-instruction-set CPU to facilitate data exchange between the instruction sets
US6751737B1 (en) * 1999-10-07 2004-06-15 Advanced Micro Devices Multiple protected mode execution environments using multiple register sets and meta-protected instructions
US7552426B2 (en) * 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine
US7260702B2 (en) * 2004-06-30 2007-08-21 Microsoft Corporation Systems and methods for running a legacy 32-bit x86 virtual machine on a 64-bit x86 processor
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03150633A (ja) * 1989-11-07 1991-06-27 Matsushita Electric Ind Co Ltd 命令解読装置
JPH06202903A (ja) * 1992-12-29 1994-07-22 Nec Corp Cpuシミュレーション方法およびcpuシミュレータ
JPH06324883A (ja) * 1993-05-15 1994-11-25 Nec Corp Cpuシミュレータ
JPH08339325A (ja) * 1995-06-07 1996-12-24 Internatl Business Mach Corp <Ibm> 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ
JP2000515270A (ja) * 1996-01-24 2000-11-14 サン・マイクロシステムズ・インコーポレイテッド ネットワークまたはローカルメモリから受け取った命令セットの実行のための二重命令セットプロセッサ
JP2002536712A (ja) * 1999-01-28 2002-10-29 エーティーアイ インターナショナル エスアールエル 第2のアーキテクチャのコンピュータにおける第1のコンピュータアーキテクチャ用プログラムの実行
JP2004038923A (ja) * 2002-02-06 2004-02-05 Transitive Technologies Ltd プログラムコード変換のための条件コードフラグのエミュレーション

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND200302124002; 西田 亙: 'x86エミュレータBochsの使い方' Interface 第28巻,第7号(通巻301号), 20020701, pp.114〜116, CQ出版株式会社 *
JPN6013025225; 西田 亙: 'x86エミュレータBochsの使い方' Interface 第28巻,第7号(通巻301号), 20020701, pp.114〜116, CQ出版株式会社 *

Also Published As

Publication number Publication date
CA2718724A1 (en) 2009-09-24
CN101256504A (zh) 2008-09-03
KR101232343B1 (ko) 2013-02-13
US8949580B2 (en) 2015-02-03
EP2267598B1 (en) 2018-07-18
KR20100125331A (ko) 2010-11-30
EP2267598A4 (en) 2013-03-27
WO2009114961A1 (zh) 2009-09-24
US20110035745A1 (en) 2011-02-10
CA2718724C (en) 2016-01-19
CN100555225C (zh) 2009-10-28
JP5501338B2 (ja) 2014-05-21
EP2267598A1 (en) 2010-12-29

Similar Documents

Publication Publication Date Title
JP5501338B2 (ja) X86の仮想機をサポートするriscプロセッサ装置及び方法
JP3554342B2 (ja) 拡張ワード寸法及びアドレス空間を有する逆互換性コンピュータアーキテクチュア
US5781750A (en) Dual-instruction-set architecture CPU with hidden software emulation mode
US11086624B2 (en) Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
US9250904B2 (en) Modify and execute sequential instruction facility and instructions therefor
US5367705A (en) In-register data manipulation using data shift in reduced instruction set processor
JP5357181B2 (ja) コンピュータ・システム、その動作方法、及び、コンピュータ・プログラム
KR100230643B1 (ko) 고성능 프로세서의 브랜치 예상 동작 방법 및 장치
JP5052678B2 (ja) コンピュータを動作させる方法及びシステム
JP5657074B2 (ja) 命令が利用可能な汎用レジスタの数を拡張するための上位ワード・ファシリティ
JPH06103067A (ja) 高性能プロセッサにおける分岐予想方法
JPH06131178A (ja) マルチプロセッサ又はパイプラインプロセッサシステムにおい てデータの完全性を確保する方法
JPH06131175A (ja) 高性能プロセッサのためのバイト比較操作方法
JPH0695969A (ja) 高性能プロセッサの変換バッファのためのグラニュラリティヒ ント
JPH0695877A (ja) 簡略命令セットプロセッサの性能改善方法
JPH06131179A (ja) 分岐を除去することによりコンピュータ性能を改善する方法
JP2011509474A (ja) コンピュータを動作させる方法及びシステム
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
CN112631657A (zh) 用于字符串处理的字节比较方法以及指令处理装置
JP2008146544A (ja) 演算処理装置
JP2002229778A (ja) 高速ディスプレースメント付きpc相対分岐方式
US6408380B1 (en) Execution of an instruction to load two independently selected registers in a single cycle
JPH0668724B2 (ja) シミユレーシヨン方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111212

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120120

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20120426

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120427

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130604

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130904

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131004

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140304

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140311

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250