(57)【特許請求の範囲】
【請求項１】
コンピュータ命令のソースからのコンピュータ命令を処理するシステムであって、
入力部と出力部とを有する複合命令検出部を有し、前記入力部は、前記ソースからのコンピュータ命令を受信し、前記出力部の出力は、前記命令が命令セットの一部であるか否かを表すものであり、
入力部と出力部とを有するアドレス生成部を有し、前記入力部は、前記ソースからのコンピュータ命令を受信し、前記出力部の出力には、前記命令に基づくアドレスが含まれ、
入力部と出力部とを有するジャンプ命令生成部を有し、前記入力部は、前記アドレス生成部の出力と通信可能で、前記出力部の出力は、前記アドレス生成部からの前記アドレスへのジャンプ命令を含み、
入力部と出力部とを行う命令セレクタを有し、前記入力部は、前記ジャンプ命令生成部と、前記ソース、及び前記複合命令検出部と通信可能で、前記出力部の出力には、前記複合命令検出部の出力次第で前記ソースプログラムの命令もしくは前記ジャンプ命令の命令のいずれかを包含する、システム。
【請求項２】
更に前記命令セレクタの出力と通信可能なプロセッサを有する、請求項１記載のシステム。
【請求項３】
更に前記命令セレクタ及び前記プロセッサと通信可能な命令キャッシュを有する、請求項２記載のシステム。
【請求項４】
前記ソースはメモリを有する、請求項１記載のシステム。
【請求項５】
前記メモリは機械語命令を有する、請求項４記載のシステム。
【請求項６】
前記複合命令検出部と前記アドレス生成部と前記ジャンプ命令生成部と前記命令セレクタは、単一のコンピュータチップに記録される、請求項１記載のシステム。
【請求項７】
前記アドレスは、チップ上に配置されたメモリのアドレスである、請求項６記載のシステム。
【請求項８】
前記アドレスは、チップ外部に配置されたメモリのアドレスである、請求項６記載のシステム。
【請求項９】
前記命令セットは、１サイクルのスループットでプロセッサによって実行可能である命令を有する、請求項１記載のシステム。
【請求項１０】
前記複合命令検出部は、予約命令例外ハンドラーを有する、請求項１記載のシステム。
【請求項１１】
前記システムは、ＲＩＳＣコンピュータチップを有する、
請求項１記載のシステム。
【請求項１２】
前記アドレス生成部は、プログラマブルロジックアレイを有する、請求項１記載のシステム。
【請求項１３】
前記プログラム可能なロジックアレイの出力は、前記入力された命令の演算コードに応じて出力されるものである、請求項１２記載のシステム。
【請求項１４】
前記プログラム可能なロジックアレイの出力は、前記入力された命令のオペランドに応じて出力されるものである請求項１３記載のシステム。
【請求項１５】
コンピュータ命令の処理方法であって、
コンピュータ命令と関連するアドレスを生成するステップと、
前記アドレスに基いてジャンプ命令を生成するステップと、
前記コンピュータ命令が複合命令であるか否かを判定するステップと、
前記ステップの判定結果に基づき、前記ジャンプ命令もしくは前記コンピュータ命令のいずれかを選択するステップと、を有する方法。
【請求項１６】
前記コンピュータ命令は、
演算コードと、オペランドと、を有する請求項１５記載の方法。
【請求項１７】
前記アドレスを生成するステップは、前記命令の演算コードに基づいて行われる、請求項１６記載の方法。
【請求項１８】
前記コンピュータ命令が複合命令であるか否かを判定する前記ステップは、前記コンピュータ命令が、予約命令例外を生成したか否かを判定するステップを有する、請求項１５記載の方法。
【請求項１９】
前記アドレスは、前記複合命令をエミュレートするためにコンピュータ命令を識別する、請求項１５記載の方法。
【請求項２０】
ジャンプ命令を生成する前記ステップは、前記アドレスにジャンプ及びリンク命令を付加するステップを有する、請求項１５記載の方法。
【請求項２１】
ジャンプ命令を生成する前記ステップ及び前記コンピュータ命令が複合命令であるか否かを判定する前記ステップは、前記選択するステップの前に実行される、請求項１５記載の方法。
【請求項２２】
前記アドレスは、すべての複合命令に関して同じアドレスである、請求項１５記載の方法。
【請求項２３】
プロセッサでプログラムを実行する方法であって、前記プロセッサは命令セットを実行可能であり、
メモリに記録されたプログラムを有する一連の命令から、本来の命令を実行するステップを有し、
前記本来の命令でアドレスを生成するステップを有し、
前記アドレスへのジャンプ及びリンク命令を生成するステップを有し、このステップには、前記プロセッサに前記アドレスで命令を実行させてから前記プログラムにおける前記本来の命令の次の命令に戻る命令を有し、
前記本来の命令が前記命令セットの一部であるか否かを判定するステップを有し、
前記判定するステップの結果に基づいて、前記ジャンプ及びリンク命令もしくは前記本来の命令のいずれかを選択するステップを有し、及び
前記選択された命令を、前記プロセッサに提供するステップを有する、
方法。
【請求項２４】
前記選択された命令を、前記プロセッサの命令キャッシュに供給するステップを更に有する、請求項２３記載の方法。
【請求項２５】
前記本来の命令を実行するステップは、メモリから前記命令を読み出すステップを有する、請求項２４記載の方法。
【請求項２６】
メモリとプロセッサとの間でコンピュータ命令を処理するシステムであって、
前記メモリからコンピュータ命令を受信して前記命令が命令セットの一部であるか否かを示す値を出力するように前記メモリに結合された複合命令検出部を有し、
前記メモリからコンピュータ命令を受信するように前記メモリに結合されたアドレス生成部を有し、
前記アドレス生成部に結合されたジャンプ命令生成部を有し、
前記ジャンプ命令生成部からジャンプ命令を受信し、前記メモリからコンピュータ命令を受信し、前記複合命令セレクタからその値を受信するように、前記ジャンプ命令生成部、前記メモリ、前記複合命令検出部、及び前記プロセッサに結合された命令セレクタを有し、
これにより、前記複合命令検出部から得た前記値に基づいて、前記ジャンプ命令もしくは前記コンピュータ命令のいずれかが、前記命令セレクタによって前記プロセッサに供給される、システム。
【請求項２７】
前記命令セットは、デコードを追加することなく前記プロセッサによって実行可能である命令を有する、請求項２６記載のシステム。
【請求項２８】
前記命令セットは、１スループットサイクルで、前記プロセッサによって実行可能である命令を有する、請求項２６記載のシステム。
【請求項２９】
前記アドレスは、前記プロセッサにより実行可能であるとともに前記コンピュータ命令をエミュレートする他の命令のアドレスを示す、請求項２６記載のシステム。
【請求項３０】
前記ジャンプ命令生成部は、前記アドレスにジャンプ及びリンク命令を付加する、請求項２６記載のシステム。
【請求項３１】
コンピュータ命令実行システムであって、
複合命令と単純な命令のソースを有し、前記単純な命令は前記プロセッサによって実行可能であり、前記複雑な命令は前記プロセッサによって実行不可能であり、
前記ソースと命令セレクタとに結合された複合命令検出部を有し、前記複合命令検出部は、前記ソースからコンピュータ命令を受信し、受信した命令が複合命令である単純命令であるを示す値を供給し、
前記ソースとジャンプ命令生成部とに結合されたアドレス生成部を有し、前記アドレス生成部は、前記ソースからコンピュータ命令を受信し、受信した命令が複合命令である場合、エミュレーション命令を有するメモリのアドレスを供給し、これにより、前記エミュレーション命令が単純命令であって、前記複合命令の機能をエミュレートするものであり、
前記アドレス生成部と前記命令セレクタに結合された前記ジャンプ命令生成部を有し、前記ジャンプ命令生成部は、前記アドレス生成部からアドレスを受信して前記アドレスへのジャンプ及びリンク命令を供給し、
前記ジャンプ命令生成部及び前記アドレス生成部に結合されて、前記ソースから受信した前記命令が複合命令である場合は前記ジャンプ命令生成部からジャンプ及びリンク命令を供給し、前記ソースプログラムから受信した前記命令が単純命令である場合は当該命令を供給する命令セレクタを有し、
前記命令セレクタから前記命令を受信するためのプロセッサを有する、
システム。
【請求項３２】
更に、前記命令セレクタと前記プロセッサとの間に配置された命令キャッシュを有する、請求項３１記載のシステム。
【請求項３３】
前記アドレス生成部は、第一の複合命令に応じて第一アドレスを送信し、第二命令に応じて第二アドレスを送信し、第一アドレスと第二アドレスは異なるものである、請求項３１記載のシステム。
【請求項３４】
前記複合命令検出部は、予約命令例外に関連付けられたルーチンを実行する、請求項３１記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピュータは、通常、単一の複雑なタスクを、コンピュータが理解可能でより単純な一連の命令に分解することによって実行する。これらの命令は一般的にコンピュータプロセッサチップが理解可能であるという意味で「機械語命令（machine instructions）」と称される。事実、人間にとって最も単純なタスクでさえも種々の機械語命令の複雑なセットを包含している。例えば、典型的なコンピュータプロセッサチップは、２から１０まで数えるだけでも種々のステップの実行が必要である。プロセッサは、２という数を二進法に基づいて１と０とを用いた値に変換し、レジスタとして知られるメモリ領域に結果を記録し、インクリメントにより増加する分の数、つまり１、を二進数に変換して得た結果を他のレジスタに記録する。また、１０という値を二進数に変換して得た結果をさらにもう一つのレジスタに記録する。最初の２つのレジスタに記録された二進数の値を、これらの値を加算する回路に流し、その和を最初のレジスタに戻して記録し、最初のレジスタの新しい値を上述の更にもう一つのレジスタの値と照合する。照合結果に応じて、上述の加算及び記録のプロセスを繰り返す。
【０００２】
実際、機械語命令はさらに細かい機械語命令に分解される。例えば、多くのチップは、ＣＩＳＣ（complex instruction set computer：複合命令セットコンピュータ）アーキテクチャに基づき構成されている。ＣＩＳＣにおいて、機械語命令は、比較的単純なものから、より複雑なものまで範囲が及ぶことが可能である。演算している期間、個々の機械語命令は、まず１又は複数の「マイクロ命令」に変換されてから、コンピュータチップが、個々のマイクロ命令を実行する。機械語命令からマイクロ命令に変換することは、処理時間を消費する。
【０００３】
従って、多くのコンピュータチップは現在、処理時間速度を上げるために変換ステップをなくすようにしている。例えば、ＲＩＳＣ（Reduced Instruction Set Computer：命令セットが簡略化されたコンピュータ ）に基づくコンピュータシステムは、その名称が意味するように１サイクルスループット（ＲＩＳＣプロセッサはパイプライン中に命令を実行するために多サイクルを必要とするが、該実行のスループットは１クロックサイクルである。）で、プロセッサによって、瞬時に実行可能である命令セットに機械語命令を限定する傾向がある。従って、機械語命令を変換する遅れは回避される。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、命令が限定され、簡略化されているにもかかわらず、多くのプロセッサチップでは、さらに複雑な命令をエミュレート（emulate）する必要がでてくる。システムの一例において、チップは、単一ステップで実行不可能な複雑な命令である複合命令を個々の機械語命令に分解するチップ領域にジャンプさせる。例えば、プログラムは一般的に機械語命令リストとして記録され、個々の機械語命令はそれぞれ固有のアドレスに記録される。このプロセッサは、別のアドレスにジャンプするように命令がなされない限り、通常は命令を順に実行する。プロセッサが複合命令に出会うと、複合命令をエミュレートする機械語命令を包含するチップ領域にジャンプ及びリンクする命令を実行する。具体的には、このジャンプ及びリンク命令は、プロセッサに当該命令のアドレスを記録させて、新しいアドレスにジャンプする。それからプロセッサは、前述の新しいアドレスで機械語命令を実行する。このプロセッサは、ジャンプした場所に戻れという命令に出会うまで、命令を順に実行していく。ジャンプした場所に戻るに際し、プロセッサは、処理を中断した場所、即ち、元のジャンプ及びリンク命令を行った箇所の次のアドレスにおける命令をピックアップする。
【０００５】
複合命令は、ソフトウェアもしくはハードウェアを用いてエミュレートされる。例えば、例えば、複合命令を実行するために特別なハードウェアを用いず、そのオプコードとも呼ばれる演算コード（opcode）を、例外割り込みを発生させる予約命令演算コードとして処理するシステムもある。この割り込み処理では、該複合命令演算コードが不正な命令演算コードであるか又は複合命令としてエミュレートされるべきかの照合がなされる。他のシステムでは、ＣＰＵは複合命令を、マイクロコードのような、多数の実装された単純な命令に変換するハードウェアを有する。このシステムにおけるハードウェアの変換は極めて複雑となりうる。
【０００６】
そこで複合命令を、迅速にエミュレート可能にするシステム及び方法が要求されている。
【０００７】
本発明は、このような要求を満たすことを目的としている。
【課題を解決するための手段】
【０００８】
本発明の一形態によれば、コンピュータ命令に実装されているアドレスからのジャンプ及びリンク命令を生成するステップと、本来の命令が複雑であればジャンプ命令を、そうでなければ本来の命令を、選択するステップと、を有する複合命令を実行するシステム及び方法が提供される。
【０００９】
本発明の他の形態によれば、コンピュータ命令を、この命令のソース（source）から処理するシステムが提供される。このシステムは、コンピュータ命令のソースからのコンピュータ命令を処理するシステムであって、入力部と出力部とを有する複合命令検出部を有し、前記入力部は、前記ソースからのコンピュータ命令を受信し、前記出力部の出力は、前記命令が命令セットの一部であるか否かを表すものであり、入力部と出力部とを有するアドレス生成部を有し、前記入力部は、前記ソースからのコンピュータ命令を受信し、前記出力部の出力には、前記命令に基づくアドレスが含まれ、入力部と出力部とを有するジャンプ命令生成部を有し、前記入力部は、前記アドレス生成部の出力と通信可能で、前記出力部の出力は、前記アドレス生成部からの前記アドレスへのジャンプ命令を含み、入力部と出力部とを行う命令セレクタを有し、前記入力部は、前記ジャンプ命令生成部と、前記ソース、及び前記複合命令検出部と通信可能で、前記出力部の出力には、前記複合命令検出部の出力次第で前記ソースプログラムの命令もしくは前記ジャンプ命令の命令のいずれかを包含するものである。
【００１０】
さらに他の実施形態によれば、コンピュータ命令実行方法が提供される。この方法は、コンピュータ命令の処理方法であって、コンピュータ命令と関連するアドレスを生成するステップと、前記アドレスに基いてジャンプ命令を生成するステップと、前記コンピュータ命令が複合命令であるか否かを判定するステップと、前記ステップの判定結果に基づき、前記ジャンプ命令もしくは前記コンピュータ命令のいずれかを選択するステップと、を有する。
【発明を実施するための最良の形態】
【００１１】
図１に従来の処理システムを示す。本発明は、このようなシステムを使用することに限定されるものではなく、このシステムは、例示のためのみに使用されるものである。メモリ５１は、プロセッサによって実行される機械語命令の供給元、あるいはソース（source）である。メモリ５１は、異なる位置にいくつ物理的に配置しても良く、一例として、プロセッサの回路を包含するチップ内に実装されたＬ１キャッシュ、チップ外部に配置されたＬ２キャッシュ、又は他の記録デバイスもしくは記録媒体に配置することができる。前述の機械語命令（「命令コード」とも称される）はメモリ５１から受信され、命令コードキャッシュ５２に配置される。メモリ５１から命令を入手するのは時間がかかるので、命令コードキャッシュは、瞬時にプロセッサによってアクセスされ、実行されるように、所定の命令数を保持するために実行される。
【００１２】
本発明に従ったシステム１００が、図２に示される。命令コードは、メモリ５１から直接、命令キャッシュメモリ５２に伝送されるのではなく、システム１００に伝送される。システム１００は、アドレス生成器１０２、ジャンプ命令生成器１０４、複合命令検出器１０６、及び命令セレクタ１０８を有し、それぞれ相互に直接的もしくは間接的に通信している。
【００１３】
複合命令検出器１０６が実行する機能の一つは、命令が複合命令であるか否かの判定である。複合命令検出器１０６は、メモリ５１から入力として命令コードを受信し、該命令が複合命令であるか否か、すなわちプロセッサが実行可能な命令セットの一部である否かを判定する。言い換えれば、前述の命令が、多数の命令を実行することによって実行する必要はなく、ＣＰＵハードウェアによって直接実行可能か否かを判定する。複合命令検出器の出力は、好適には該命令が複合命令であるか否かを示す１ビットであるが、必ずしも１ビットとする必要はない。
【００１４】
機械語命令は、概して、オペレーションコード（operation code, opcode：操作符号とも称する）とオペランドの２つの構成要素を有する。これら２つの構成要素は、単一デジタル値を形成するために結合される。演算コードは、基本的には、実行すべき演算、例えばアドレスへジャンプ、２つの数を加算、又は値の記録といった演算を、コンピュータに伝達するものである。個々の演算コードは、それぞれ異なるバイナリ値と関連する。例えば、ジャンプ及びリンクする演算コードは、「００００  １１」値により表記され、その記録関数は「１０１０  ００」値により表記される。オペランドには、演算に実行されるデータが含まれる。例えば、オペランドは、「１０  １１１１  ００００  １０１０  １１１１  ００００  ０００１」という値を有する目標アドレスを表す。従って、前述のアドレスに対するジャンプ及びリンク命令は、演算コードとオペランド値の結合である「００００  １１１０  １１１１  ００００  １０１０  １１１１  ００００  ０００１」によって表記される。
【００１５】
本発明の他の実施形態によれば、複合命令検出器１０６は、演算コードが複合命令を表すか否かを判定するために予約命令例外（reserved instruction exception）を用いる。一般的なＣＰＵにおいて、予約命令例外は、ＣＰＵハードウェアに実装されていない命令もしくは不正命令の実行を阻止するために用いられる。この予約命令例外は、通常、プロセッサが誤ってデータを命令として実行してしまったときに発生する。従って、複合命令検出器１０６は、複合命令を表す信号を発生させるために、予約命令例外の生成に関するロジックを用いてもよいが、このロジックを用いることが必須であるというわけではない。
【００１６】
本発明では、命令が複合命令である場合は、複合命令を個々の機械語命令によってエミュレートするチップ領域（メモリがチップに設けられていない場合にはメモリ５１）にジャンプ及びリンクさせる命令によって、この複合命令を置き換える。
【００１７】
アドレス生成器１０２の目的の一つは、特定の複合命令に関するエミュレーションコードのアドレスがどこにあるかを判定することである。アドレス生成器１０２は、メモリ５１から入力として命令コードを受信する。その後、アドレス生成器１０２は、この命令が複合命令である場合は、エミュレーションコードのアドレスを決定する。この出力は、ジャンプ命令生成器１０４に供給される。
【００１８】
前述のアドレス生成器は、演算コードをメモリアドレスに翻訳する方法のいずれにも限定されるものではない。例えば、プログラマブルロジックアレイ（ＰＬＡ：Programmable Logic Array）を用いることで、入力が演算コードを含み、かつ、出力がアドレスに等しくなるようにしてもよい。例えば、このＰＬＡは、複合命令の演算コード１０１０１０が常にアドレスＯｘ１２３４５６７等のエミュレーションコードにジャンプすることを指定するようにしてもよい。それぞれ異なる複合命令に対しては、それぞれ異なるアドレスのコードにジャンプするようにできる。これらのアドレスは、メモリ空間、チップ上、又はチップ外のいずれにあってもよい。このエミュレーションコードがチップ上において記録された場合、迅速にアクセス可能となり得るが、その規模はより限定されたものとなり、必ずしも再プログラム可能である必要はない。該エミュレーションコードがメインメモリに記録された場合、比較的速度は遅くなるが、よりフレキシブルとなる。
【００１９】
ジャンプ命令生成器１０４は、アドレス生成器１０２によって生成されたアドレスを用いてジャンプ命令を生成する。例えば、元の命令が複合命令であったか否かに係わらず、アドレス生成器１０２からの前述のアドレスにジャンプ及びリンクする演算コードを付加する。
【００２０】
命令セレクタ１０８は、該命令がメモリ５１から変換されていない命令、又はジャンプ命令生成器１０４によって生成されたジャンプ及びリンク命令、のいずれであるかを選択する。前述の命令セレクタは複合命令検出器１０６の出力値に基づき、前述の選択を実行する。例えば、複合命令検出器１０６の出力値が１である場合、命令セレクタ１０８は、ジャンプ命令生成器１０４から受信した命令を命令キャッシュメモリ５２に出力する。一方、複合命令検出器の出力値が０の場合、命令セレクタ１０８は、メモリ５１から受信した命令を命令キャッシュメモリ５２に出力する。言い換えれば、命令は変換されずに命令キャッシュメモリ５２に伝送される。好適には、命令が複合命令ではないが不正なものである場合、セレクタ１０８の出力は、該命令が複合命令ではないことを示す。従って、不正な命令は、エミュレートされるのではなく、実行パイプラインに伝送されて例外を発生させる。
【００２１】
説明の都合上、以下に例示する演算は以下のステップを有してもよい。メモリ５１は下記の３つの機械語命令を包含するとみなされる。
Inst#0
DMULTU rs,rt
Inst#2
【００２２】
「Ｉｎｓｔ＃０」と「Ｉｎｓｔ＃２」はいずれの命令を表すものでもよく、「ＤＭＵＬＴＵ  ｒｓ，ｒｔ」は、レジスタｒｓとｒｔに記録された６４ビットサイズのオペランド値を乗算して１２８ビットサイズの結果を得るための命令を表す（このＤＭＵＬＴＵ関数は、２００１年版ＭＩＰＳ６４  ５ＫＴＭプロセッサコアファミリソフトウェアユーザマニュアル記載のＭＩＰＳ６４  ５ＫＴＭプロセッサによりサポートされる）。本発明に従ったプロセッサは、プロセッサを具備する大規模な乗算ハードウェア（large-value multiplier hardware）へのコストを発生させるより、元の命令を変更することなく費用が安価でスタンダードな３２ビット乗算機を使用することによって、ＤＭＵＬＴＵ命令をエミュレートすることが可能である。
【００２３】
ＤＭＵＬＴＵ命令は、メモリ５１から命令キャッシュメモリ５２に伝送されると、まずシステム１００（図２、ステップ２０１参照）に伝送される。説明のために、システムすべての演算コードは６ビット長を有し、ＤＭＵＬＴＵは二進数「０１１１０１」によって表記されるものとする。
【００２４】
この命令は、アドレス生成器１０２と、命令セレクタ１０８の入力の一つと、複合命令検出器１０６とに同時に伝送される。
【００２５】
それからアドレス生成器１０２は、命令語「ＤＭＵＬＴＵ」（ステップ２０２）の演算コード（オペランドのいくつか又はすべてからの場合もある）に基づき、命令アドレスを決定する。
【００２６】
従って、以下ｅｍｕ＿ＤＭＵＬＴＵとして指定された値を有するアドレスが決定されて、ジャンプ命令生成器１０４（ステップ２０３）に伝送される。それからジャンプ命令生成器１０４は、ジャンプ及びリンク演算コード値をアドレス生成器１０２から生成されたアドレスに加えて、「ＪＡＬ  ｅｍｕ＿ＤＭＵＬＴＵ」命令（ステップ２０４）を生成する。
【００２７】
元の命令「ＤＭＵＬＴＵ  ｒｓ，ｒｔ」は、複合命令検出器１０６にも伝送される。検出器１０６は、この命令が複合命令であるか否か（ステップ２０５）をテストする。「ＤＭＵＬＴＵ」は複合命令であるとみなされて、１ビット値が検出器１０６によって命令セレクタ１０８に供給される。
【００２８】
命令セレクタ１０８は、様々な入力を受信すると、検出器の１０６のビット値が０であれば（ステップ２０８）、メモリから直接前述の命令を選択し、検出器１０６のビット値が１であれば（ステップ２０６）、ジャンプ命令生成器１０４からの命令を選択する。前述の例を用いると、ビット値が１であるので、「ＤＭＵＬＴＵ  ｒｓ，ｒｔ」ではなくて命令「ＪＡＬ  ｅｍｕ＿ＤＭＵＬＴＵ」が命令キャッシュメモリへ送信される（ステップ２０７，２０９）。これにより、プロセッサは、アドレスｅｍｕ＿ＤＭＵＬＴＵのコードにジャンプ及びリンクを行い、このコードでは、１２８ビット乗算器用のコードをエミュレートするための６４ビット乗算器のための下記のコードが用いられる。このコードは６４ビットの部分積（partial products）を生成し、それを加算して１２８ビットの積(product)を得る。演算は、HI(63:0)|LO(63:0)<_rs(63:0)*rt(63:0)である。
Emu_DMULTU:
MULTU rs,rt      ;HI|LO<-rs(31:0)* rt(31:0)
MOV   tls,rs     ;tls<-rs 
MOV   tls,rt     ;tls<-rt
DSRL32     ths,rs,0 ;ths(31:0)<-rs(63:32)
DSRL32     tht,rt,0 ;tht(31:0)<-rt(63:32)
MFLO xl    ;x1<-LO
MFHI xh    ;x2<-HI
DSLL32     xh,xh,0  ;xh(63:32)<-xh(31:0)
OR   xl,xh,xl       ;xl<-result of rs(31:0) * rt(31:0)
MULTU ths,rt        ;HI|LO<-rs(63:32)<*rt(31:0)
MFLO xl    ;x1<-LO
MFHI xh    ;x2<-HI
DSLL32     xh,xh,0  ;xh(63:32)<-xh(31:0)
OR   x2,xh,xl       ;x2<-result of rs(63:32) * rt(31:0)
MULTU rs,tht      ;HI|LO<-rs(31:0) *rt(63:32)
MFLO x1    ;x1<-LO
MFHI xh    ;x2<-HI
DSLL32     xh,xh,0  ;xh(63:32)<-xh(31:0)
OR   x3,xh,xl       ;x3<-result of rs(31:0) *rt(63:32)
MULTU ths,tht       ;HI|LO<-rs(63:32) *rt(63:32)
MFLO x1    ;x1<-LO
MFHI xh    ;x2<-HI
DSLL32     xh,xh,0  ;xh(63:32)<-xh(31:0)
OR   x4,xh,x1       ;x4<-result of rs(31:0) *rt(63:32)
ADD  xm,x2,x3       ;xm<-x2+x3
DSLL32     xmx,xm,0  ; xmx(63:32)<-xm(31:0)
ADD  x1,xmx,x1       ;x1<-xmx+x1
MTLO xl    ;LO<-x1
ADD  x4,xmx,x4       ;x4<-xmx=x4
MTHI x4    ;JO<-x4
JR   r31   ;Link Return
【００２９】
従って、前述の例は、複合命令「ＤＭＵＬＴＵ」が、どのように他の命令によって迅速にエミュレートされ得るのかを示したものである。
【００３０】
本発明は、多くの利点を提供する。複合命令は、複雑にデコードされることなく素早い方法で、より単純な命令セットにジャンプすることによってエミュレートされる。命令が複雑であるか否かの判定を待たずに、アドレスが抽出されてジャンプ命令が生成される。この命令は、複合命令であるか否かも同時にテストされる。命令が複合命令である場合には、エミュレーションコードへのジャンプ命令が上述のように既に生成されている。複合命令ではない場合、命令はいずれにしても複雑性がテスト済みであるので時間を消費することはない。
【００３１】
本発明は、様々な応用の需要に応じた構築が可能であるという利点も有する。例えば、アドレス生成器１０２は、エミュレートされたコードのアドレスを判定するために演算コードのみを用いるわけではない。演算コードのいくつか又はすべてに関して、オペランドも用いられ、命令によって実行される引数に応じて、同じ複合命令コードであっても、別のアドレスと別のエミュレーションコードにジャンプする場合もある。他の形態においては、アドレス生成器１０２は、同じアドレスにすべての複合命令をジャンプさせ、これにより、複合命令のデコード及びオプコードやオペランド（存在する場合は）の詳細の決定を、エミュレーションコードに任せるようにする。従って、これら両手法のそれぞれにより、あるいはこれらの手法を組み合わせることで、チップからの要求及びチップのアプリケーションによる要求に応えることができる。複合命令数が限定されている場合、個々の命令を、それぞれ固有のアドレスに向かうようにしてもよい。複合命令数が多い場合、殆どすべての複合命令を同じアドレスへジャンプするようにしてもよい。
【００３２】
例えば、上記の命令ＤＭＵＬＴＵに関連して、アドレス生成器１０２は、好適には、幾つかの又はすべてのオペランドをデコードし、前述のオペランドに従ってアドレスを好適に生成する。これにより、命令ＪＡＬが、ソース及び宛先のレジスタの判定が可能なエミュレーションコードへ確実にジャンプするようになる。より具体的には、出力アドレスの上位ビットの幾つかを演算コードによって生成し、最下位ビットをオペランドに基づき生成するようにしても良い。他の形態においては、該命令は、アドレス生成器１０２がアドレスを生成した後にソフトウェアにより完全にデコードされるようにしてもよい（例えば、リンクレジスタから４を減算する）。
【００３３】
本発明のもう一つの利点は、予約命令例外を複合命令検出器１０６に関連して実行することにより得られる。これにより、複合命令検出器１０６が、２つの機能を実行可能となる。つまり、命令が実際に不正コードであるか、又は復号コードであるかを判定する。もし復号コードであれば、エミュレートがなされる。そうでなければ、実際にエラーであるとして処理される。予約命令例外は、演算コードのが復号コードであるかだけでなく、有効なコードであるかをもチェックすることによって、アドレス生成器１０２に実装することが可能である。
【００３４】
更に、前述の複合命令のすべて又は一部のデコードは、複合命令がメモリシステムと実行パイプライン外部のキャッシュメモリ間にジャンプ及びリンク命令でデコードされ、置き換えられることができるので、命令実行パイプラインの実行効率を低下させることなく、ハードウェアによって命令を実行する。予約命令例外を実行する場合、命令はソフトウェアのみでデコードされる。この場合であっても、本発明は、複合命令を、ジャンプ及びリンク命令に置き換えるのでハードウェアの実装は比較的簡単であり、実行パイプラインに変更を要することはない。
【００３５】
特に記載がない限り、「含む（including）」「備える（containing）」「有する(comprising)」のような用語は、「含み、かつ、それらのみに限るものではない」ことを意味し、次に続く特定もしくは同様の要素や要件を限定するものではない。また、「複数（plurality）」とは、少なくとも２つであることを意味し、特に記載がない限り、「一つ（a）」もしくは「一つ（one）」のものとは、そのようなものを複数用いるという可能性を除外することを意図する。
【００３６】
上述の他の形態の殆どは、相互に排他的なものではなく、種々の組み合わせによって特有の利点が得られるよう実装することが可能である。これらの形態及びその他の変形例及びその組み合わせは、本発明の請求項で規定された範囲から逸脱することなしに実行可能である。従って、上述の実施形態、請求項に係る発明を限定するものではなく、例示的なものとして扱われるべきである。
【産業上の利用可能性】
【００３７】
本発明は、複雑なコンピュータ命令を、単純な命令によってエミュレートするために用いられる。
【図面の簡単な説明】
【００３８】
【図１】従来技術の一部の概略図である。
【図２】本発明の一実施形態の概略図である。
【図３】本発明の一実施形態のフロー図である。
【図１】
0003681740.tif 000002
【図２】
0003681740.tif 000003
【図３】
0003681740.tif 000004