(57)【特許請求の範囲】
【請求項１】
命令コード中に、少なくともオペコードと、命令の演算対象を指定する複数のオペランドとを有し、前記演算対象について前記オペコードで指定される命令を行なうものについて、
前記複数のオペランドで指定されている演算対象が、前記命令を実行した結果が変化しない組み合わせとなっている場合は、前記命令とは異なる命令に相当する処理を行なうように定められている命令コードの符号化方式を採用して構成される命令デコーダと、
演算部と、
複数の汎用レジスタと、
少なくとも、演算結果にキャリー又はボローがあることを示すキャリーフラグが格納されるコンディションコードレジスタ又はステータスレジスタとを備え、
前記命令コードは、３つのオペランドを有し、
前記オペコードで指定される命令は、前記３つのオペランドのうち、１つのオペランドは前記汎用レジスタを指定し、他の２つのオペランドは、前記指定された汎用レジスタのビット位置を夫々指定することで、指定されたビットの一方を転送元，指定されたビットの他方を転送先としてデータ転送処理を行う命令であり、
前記２つのオペランドによって指定される前記汎用レジスタのビット位置が同一である場合は、前記キャリーフラグを転送元として前記転送先にビットデータの転送処理を行なうことを特徴とするＣＰＵ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のオペランドで指定されている演算対象が、命令を実行した結果が変化しない組み合わせとなっている場合に、特定の処理を行なうように定められている符号化方式を採用する命令デコーダを備えるＣＰＵに関する。
【背景技術】
【０００２】
一般に、ＣＰＵにはより多くの種類の命令を実装することが望まれており、そのためには、命令コード全体のサイズを極力圧縮する必要がある。そのような技術の１つとして、特許文献１に開示されているものがある。この技術は、図５に示すように、オペコード専用のフィールドと、アドレス計算に用いるオフセットを指定するフィールドとを含む命令コードにおいて、同一のオペコード（ｏｐｅ２）に対し、オフセットフィールド（ｏｆｆｓｅｔの下位ビット（２〜０）をオペコードフィールドとして符号拡張することで複数の命令を割り当てる、という符号化方式である。
【特許文献１】特許第２６８２４６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
即ち、特許文献１に開示されている技術は、符号拡張用のビットとするオフセットフィールドの下位ビットに、常に「０」が割り当てられることを前提として成立するものである。従って、それらの下位ビットに他のパラメータが設定される命令コードには、適用することができない。
本発明は上記事情に鑑みてなされたものであり、その目的は、オペコード以外のフィールドが全てパラメータとして設定される命令コードについても、複数の命令を割り当てることを可能とする命令コードの符号化方式を採用する命令デコーダを備えるＣＰＵを提供することにある。
【課題を解決するための手段】
【０００４】
請求項１記載のＣＰＵによれば、命令コードの符号化方式が、命令コード中の複数のオペランドで指定されている演算対象が、オペコードで指定される命令を実行した結果が変化しない組み合わせとなっている場合は、前記命令とは異なる命令に相当する処理を行なうように定められる。即ち、オペコードの命令内容とその命令を実行する対象との組み合わせによっては、命令の実行結果が変化せず、実質的にＮＯＰ（No OPeration）命令を実行した場合と同様になる場合がある。
従って、命令コードにおける複数のオペランドについての指定が上記の結果を招くような態様となっている場合は、実用的には使われない組み合わせのため、本来の命令とは実行形態が異なる命令を実行しても性能が劣らず問題がないから、オペコード以外のフィールドが全てパラメータとして設定される命令コードについても複数の命令を割り当てることができる。
【０００５】
具体的には、命令コードは３つのオペランドを有しており、オペコードで指定される命令は、３つのオペランドのうち、１つのオペランドは汎用レジスタを指定し、他の２つのオペランドは、指定された汎用レジスタのビット位置を夫々指定することで、指定されたビットの一方を転送元，指定されたビットの他方を転送先としてデータ転送処理を行う命令である場合に、前記２つのオペランドで指定される汎用レジスタのビット位置が同一であれば、キャリーフラグを転送元として転送先にビットデータの転送処理を行なう。
即ち、本来は、２つのオペランドで夫々指定された対象について演算を行なう命令には、それらが同じ対象であるとすれば実行結果は変化しないものがある。従って、そのような命令において２つのオペランドで指定される汎用レジスタのビット位置を同一とした場合は、別の命令を割り当てることが可能となる。
【０００６】
そして、予め用意される命令セット数を増加させることなく、より多様な命令を実行させることができる。
【発明を実施するための最良の形態】
【０００７】
以下、本発明の一実施例について図１乃至図４を参照して説明する。図４は、ＣＰＵの内部構成を本発明の要旨に係る部分について概略的に示す機能ブロック図である。ＣＰＵ１は、制御部２、演算部（ＡＬＵ）３、レジスタ部４などを備えている。制御部２は、図示しない外部のプログラムメモリよりフェッチした命令をデコードするデコーダ（命令デコーダ）５、前記デコードの結果に応じて演算部３における命令実行を制御するシーケンサ６で構成されている。
【０００８】
レジスタ部４は、複数のステータスレジスタや制御レジスタ，汎用レジスタ，また、これらのレジスタに対してデータの書込みや読出しを行うためのロジックなどから構成されている。そして、演算部３は、レジスタ部４のレジスタから読み出されたデータに対して演算を行なったり、演算結果をレジスタに格納するようになっている。
尚、このＣＰＵ１の構成は、外見的には一般的なＣＰＵの構成と異なるところはないが、デコーダ５がフェッチした命令をデコードする場合の処理に特徴を有している。そのデコード処理の内容を図２にフローチャートとして示すが、このフローチャートは、あくまでもデコーダ５が内部のハードウエアロジックによって実行する内容である。
【０００９】
次に、本実施例の作用ついて図１乃至図３も参照して説明する。図１は、本発明の符号化方式に基づいて符号化された命令コードをＣＰＵがデコードして実行する場合の内容を説明するものである。図１（ａ）は、コードサイズが１６ビットであるビット転送命令：ｂｍｏｖを示しており、４ビット毎の１つのオペコードと３つのオペランドとが以下のように割り当てられている。
ビット          内容
１５〜１２      オペコード              ：ｏｐｅ
１１〜  ８      オペランドソースビット  ：ｂｉｔ＿ｓ（演算対象）
７〜  ４      オペランドレジスタ      ：ｒｎ
３〜  ０      オペランドデスティネーションビット：ｂｉｔ＿ｑ（演算対象）
【００１０】
このｂｍｏｖ命令は、図１（ｂ）に示すように、通常は、オペランドレジスタで指定された汎用レジスタｒｎにおいて、オペランドソースビットで指定されたソースビット（例えば、第８ビット）の内容を、オペランドデスティネーションビットで指定されたデスティネーションビット（例えば、第３ビット）に転送するという演算処理、即ち１ビット操作を行なうものである（ｂｉｔ＿ｓ≠ｂｉｔ＿ｑである場合）。この場合、デコーダ５によるデコード動作は、図２に示すフローチャートでは、ステップＳ１→Ｓ２→Ｓ５に対応する。
従って、このｂｍｏｖ命令においてソースビットとデスティネーションビットとを同一に設定すれば（ｂｉｔ＿ｓ＝ｂｉｔ＿ｑである場合）、上記の演算処理を実行すると同じビットに同じデータを上書きすることになるので実行結果は変化しない。即ち、ＮＯＰ命令を実行した場合と同様の結果となる。
【００１１】
そこで、本実施例では、図１（ｃ）に示すように、ｂｍｏｖ命令においてソースビットとデスティネーションビットとが同一に設定されている場合、ＣＰＵ１のデコーダ５は、ｂｍｏｖ命令とは異なる命令に相当する処理を実行するように構成されている。
即ち、図１（ｃ）では、ソースビットとデスティネーションビットとを何れも第３ビットに指定している。この場合、デコーダ５は、レジスタ部４のコンディションコードレジスタ（ＣＣレジスタ，ステータスレジスタの一部として構成される場合もある）内に配置されるキャリーフラグ［Ｃ］（演算結果にキャリー又はボローがある，他の演算対象）の内容を、レジスタｒｎのデスティネーションビットに転送する、という処理を実行する。このデコード動作は、図２のフローチャートでは、ステップＳ１→Ｓ２→Ｓ３に対応する。また、デコード対象の命令がｂｍｏｖ命令以外である場合は、ステップＳ１→Ｓ６となる。
【００１２】
尚、ＣＣレジスタにおける他のフラグ［Ｎ］はネガティブ（命令の実行結果により最上位ビットが「１」），フラグ［Ｚ］はゼロ（命令の実行結果がゼロ），フラグ［Ｖ］はオーバーフロー（算術演算結果が２の補数で表現不可）を意味している。
【００１３】
ここで、図３は、ＣＰＵ１が上記のｂｍｏｖ命令（ｂｉｔ＿ｓ＝ｂｉｔ＿ｑ）を使用したプログラムを実行する場合の具体例を示すものであり、汎用レジスタｒｍの第５ビットの内容を、レジスタｒｎの第３ビットに転送させる場合を示す。ＣＰＵ１は、命令セットの１つにｂｔｂｅｑ（bit test branch equal）命令を有しており、このｂｔｂｅｑ命令は、オペランドとして指定した任意の汎用レジスタの任意のビットの内容を、ＣＣレジスタのキャリーフラグに転送させる命令であるものとする。
この場合、先ず、ｂｔｂｅｑ命令を実行することで、汎用レジスタｒｍの第５ビットの内容をＣＣレジスタのキャリーフラグに転送し、続いてｂｍｏｖ命令（ｂｉｔ＿ｓ＝ｂｉｔ＿ｑ＝３）を図１と同様の指定で実行させれば、キャリーフラグの内容をレジスタｒｎの第３ビットに転送させることができる。
【００１４】
以上のように本実施例によれば、ＣＰＵ１のデコーダ５は、命令コード中の複数のオペランドで指定されている演算対象が、オペコードで指定される命令を実行した結果が変化しない組み合わせとなっている場合は、前記命令とは異なる命令に相当する処理を行なう。具体的には、指定した汎用レジスタｒｎ内でソースビットの内容をデスティネーションビットに転送するｂｍｏｖ命令において、双方が同じビットに指定されている場合は、ＣＣレジスタ内に配置されるキャリーフラグ［Ｃ］の内容を、レジスタｒｎのデスティネーションビットに転送する処理を実行するようにした。
従って、オペコード以外のフィールドが全てパラメータとして設定される命令コードについても複数の命令を割り当てることができる。そして、ＣＰＵ１は、予め用意される命令セット数を増加させることなく、より多様な命令を実行させることができる。
【００１５】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
命令コードのサイズは、１６ビットに限ることはない。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施例であり、本発明の命令符号化方式に基づいて符号化された命令コードをＣＰＵがデコードして実行する場合の内容を説明する図
【図２】ＣＰＵの命令デコーダがフェッチした命令をデコードする場合の、ハードウエアロジックによる処理内容を示すフローチャート
【図３】ＣＰＵがｂｍｏｖ命令（ｂｉｔ＿ｓ＝ｂｉｔ＿ｑ）を使用したプログラムを実行する場合の具体例を示す図
【図４】ＣＰＵの内部構成を、本発明の要旨に係る部分について概略的に示す機能ブロック図
【図５】特許文献１に開示されている従来技術を説明するもので、命令コードの構成を示す図
【符号の説明】
【００１７】
図面中、１はＣＰＵ、５は命令デコーダを示す。
【図１】
0004645369.tif 000002
【図２】
0004645369.tif 000003
【図３】
0004645369.tif 000004
【図４】
0004645369.tif 000005
【図５】
0004645369.tif 000006