次に、本発明の第1の実施例について図面を参照して詳細に説明する。図1は、本発明の第1の実施例の構成を示すブロック図である。図1を参照すると、本発明の第1の実施例のプロセッサ100は、同一サイクル(たとえば、同一パイプラインステージ)で実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する命令デコーダ103を含む。
元の第1命令ワードI1の構成は、ビットフィールドL11とビットフィールドL12とである。元の第2命令ワードI2の構成は、ビットフィールドL21とビットフィールドL22とである。元の第3命令ワードI3の構成は、ビットフィールドL31とビットフィールドL32とである。
情報ワードIWの構成は、元の第1命令ワードI1に属するビットフィールドL12と、元の第2命令ワードI2に属するビットフィールドL22と、元の第3命令ワードI3に属するビットフィールドL32とである。
命令デコーダ103は、第1命令ワードとしてビットフィールドL11、第2命令ワードとしてビットフィールドL21、第3命令ワードとしてビットフィールドL31、および、情報ワードIWを同一サイクルに入力する。命令デコーダ103に入力される第1ワードL11〜第3命令ワードL31は、それぞれの元の第1ワードI1〜第3命令ワードI3から、情報ワードIWを構成するビットフィールドL12〜L32が除かれたものであり、部分命令ワードとも呼ぶ。
次に、命令デコーダ103は、情報ワードIWを、ビットフィールドL12と、ビットフィールドL22と、ビットフィールドL32とに分解する。
次に、命令デコーダ103は、ビットフィールドL11とビットフィールドL12とを結合し、元の第1命令ワードI1の構成を復元する。さらに、命令デコーダ103は、ビットフィールドL21とビットフィールドL22とを結合し、元の第2命令ワードI2の構成を復元する。さらに、命令デコーダ103は、ビットフィールドL31とビットフィールド322とを結合し、元の第3命令ワードI3の構成を復元する。
以上において、情報ワードIWに含まれるビットフィールドL12〜ビットフィールドL32は、元の第1命令ワードI1〜元の第3命令ワードI3の最後尾に存在するとは、限らない。ビットフィールドL12〜ビットフィールドL32は、先頭でも、末尾、あるいは、それぞれの命令の種類に依存して決まる所定位置でよい。したがって、復元においては、ビットフィールドL12〜ビットフィールドL32は、先頭、末尾、あるいは、それぞれの命令の種類に依存して決まる所定位置に挿入される。
以上において、3命令ワードの場合について説明したが、本発明の第1の実施例は、n(nは、2以上の整数)命令ワードについて適用可能である。
本発明の第1の実施例は、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、命令実行性能の低下させずにメモリの消費量を削減できる。
次に、本発明の第2の実施例について図面を参照して詳細に説明する。本発明の第2の実施例のプロセッサは、最大3命令を同一サイクルに実行可能であり、かつ、3種類の命令語長を持つ命令(正確には、元の命令)を実行可能である。図2は、本発明の第2の実施例の構成を示すブロック図である。
図2を参照すると、本発明の第2の実施例のプロセッサ100は、命令パス101と、命令供給部102と、命令デコーダ103と、命令パス104と、制御情報パス105と、制御情報パス106と、制御情報パス107と、実行部108と、実行部109と、実行部110とを含む。
命令供給部102は、たとえば、命令バッファであり、命令ワード、および、情報ワードを格納し、最大、3命令ワード、および、情報ワードを同一サイクルで、命令パス104を介して命令デコーダ103に出力する。たとえば、命令供給部102は、各ワードの情報ワード識別子を調べ、同一サイクルで実行される命令ワードが1または2個であり、その次に、情報ワードがある(図示しないメモリ上に)場合、1または2個の命令ワードの最後尾に情報ワードをシフトし、命令ワードと情報ワードとの間に、必要に応じてNOP命令(No operation 命令;無操作命令)を挿入して、出力する。
同一サイクルで実行される最大命令数がn(nは、1以上の整数)であり、n[個]の命令ワードの次に情報ワードがある場合には、命令供給部102は、n[個]の命令ワードの最後尾に情報ワードを配置して出力する。また、n[個]に満たないm[個](mは、1以上の整数)の命令ワードの次に情報ワードがある場合には、n−m[個]のNOP命令をm[個]の命令ワードの次に挿入する。
命令デコーダ103は、元の命令ワードの復元を行い、復元結果に基づいて、各命令対応の制御情報を制御情報パス105〜107を介して実行部108〜110に出力する。制御情報は、たとえば、オペランド同士の演算を指定する情報である。実行部108〜110は、同一サイクルで、制御情報に基づいて各命令の実行を行う。
図3は、図2の命令デコーダ103の構成を示すブロック図である。図3を参照すると、命令デコーダ103は、命令ワード復元部200、実行部108に対応する個別命令デコード部201、実行部109に対応する個別命令デコード部202、および、実行部110に対応する個別命令デコード部203を含む。
図4は、図3の命令ワード復元部200の構成を示すブロック図である。図4を参照すると、命令ワード復元部200は、分解部210、および、結合部211を含む。分解部210は、情報ワードを複数のビットフィールドに分解する。結合部211は、複数の命令ワード(命令ワードの元の構成から情報ワードを構成する部分のビットフィールドを除いたもの)と、分解部210により分解された対応するビットフィールドとを結合することにより、各命令ワードを元の構成に復元する。
図5は、元の命令ワードのフォーマットを示す説明図である。図5を参照すると、元の命令ワード300は、Y[ビット]の基本フィールドBFと、命令の種類により長さが決まる拡張フィールドEFとを含む。基本フィールドBFは、1[ビット]の情報ワード識別子303、Q[ビット]のオペコード304(オペレーションコード;命令の種類を示す)、および、Y−Q−1[ビット]のオペランドを含む。拡張フィールドEFは、命令の種類M、N、Oにより決まるA[ビット]、B[ビット]、または、C[ビット]の超過オペランドを含む。
また、さらに、拡張フィールドEFは、命令の種類M、N、O等により決まるE0[ビット]、E1[ビット]、または、E2[ビット]の即値オペランドを含むことが可能である。したがって、即値オペランドを使用する場合には、元の命令ワードの語長は、命令の種類M、N、Oに対し、それぞれ、Y+A+E0[ビット]、Y+B+E1[ビット]、Y+C+E2[ビット]である。即値オペランドを使用しない場合には、元の命令ワードの語長は、命令の種類M、N、Oに対し、それぞれ、Y+A[ビット]、Y+B[ビット]、Y+C[ビット]である。
元の命令ワード300のY[ビット]の基本フィールドBFの部分が、命令ワード301として独立する。また、拡張フィールドEFの部分は情報ワード302に含まれる。情報ワード302は、1[ビット]の情報ワード識別子303、および、フリービットフィールド(元の命令ワード300と同一サイクルで実行される複数の命令ワードの拡張フィールドEFの結合)FFを含む。
なお、個々の命令が即値オペランドを使用するかどうかは、たとえば、オペランド指定ビットフィールド内の所定オペランドのビットパタンで指定可能である。すなわち、オペランドのビットパタンの一つが例えばオール1のような特定のビットパタンである場合に、レジスタ番号指定ではなく即値オペランドを使用する命令であるという命令体系が可能である。即値オペランドを使用する命令は、自命令ワード内に即値オペランドを使用するように実行される。
次に、情報ワード302のフォーマットについて図面を参照して説明する。図6Aは、情報ワード302が、1ワードであり、かつ、即値オペランドが含まれない超過オペランドのみの場合の、フォーマットの例を示す説明図である。図6B、図6Cは、情報ワード302、情報ワード305の2つにわたって、超過オペランド、および、即値オペランドが使用される場合の、フォーマットの例を示す説明図である。
図6Aを参照すると、情報ワード302は、右詰で、命令の種類O、N、Mに対応するC[ビット]、B[ビット]、および、A[ビット]の超過オペランドを含む。なお、超過オペランドの順番は、命令供給部102から出力される命令ワードの順番にしたがって決めることができる。図6Aの例は、命令コードが、最初(左側)に種類M、次(中央)に種類N、最後(右側)に種類Oの順番に配置される場合を示している。後述する図6Bおよび図6Cの例も同様である。
図6Bを参照すると、情報ワード302、情報ワード305は、右詰めで、命令の種類Oに対応する「C[ビット]の超過オペランド、E2[ビット]の即値オペランド」、命令の種類Nに対応する「B[ビット]の超過オペランド、E1[ビット]の即値オペランド」、および、命令の種類Mに対応する「A[ビット]の超過オペランド、E1[ビット]の即値オペランド」を含む。
ここで、ある1つ元の命令の超過オペランド、または、即値オペランドが、情報ワード302、情報ワード305に分割されて含まれることが可能である。
図6Cを参照すると、情報ワード302は、右詰で、命令の種類O、N、Mに対応するC[ビット]、B[ビット]、および、A[ビット]の超過オペランドを含む。情報ワード305は、命令の種類O、N、Mに対応するE2[ビット]、E1[ビット]、E0[ビット]の即値オペランドを含む。以上は、例であり、他のフォーマットが可能である。
次に、本発明の第2の実施例の動作について図面を参照して説明する。本発明の第2の実施例は、即値を利用しない3命令以上を同一サイクルで実行する命令体系の場合である。また、説明を簡単にするために、A、B、Cの3つの合計よりも常にYは大きい場合について説明する。情報ワードは、図6Aの場合である。
図7は、本発明の第2の実施例の動作を示す説明図である。図7を参照すると、命令供給部102から同サイクルで、固定語長Yの種類Mの命令ワード400、種類Nの命令ワード401、種類Oの命令ワード402、および、情報ワード403が、命令パス104を介して出力される。説明を簡単にするために、情報ワード403は、最後尾、すなわち、命令ワード400〜命令ワード402の右側に配置される場合について説明する。
命令デコーダ103の命令ワード復元部200は、命令ワード400〜命令ワード402、情報ワード403を入力すると、各ワードの情報ワード識別子303により各ワードが、情報ワードであるのか、命令ワードであるのかを判別する。
ワードが情報ワードであれば、命令ワード復元部200は、フリービットフィールドFFの内容を元の各命令ワードの復元に使用する。ワードが命令ワードであれば、命令ワード復元部200は、そのオペコード304から命令の種類を判別する。次に、命令ワード復元部200は、必要に応じ、同一サイクルに存在する情報ワード403のフリービットフィールドFFから命令の種類に応じたビット数の超過オペランドを取り出し、当該命令ワードの適当な箇所(図7では末尾)に付加することにより元の命令ワードを復元する。
すなわち、命令ワード復元部200は、M、N、Oの3種類の命令ワード400、401、命令ワード402を、それぞれ、語長Y+A[ビット]、Y+B[ビット]、Y+C[ビット]の元の命令ワード405、元の命令ワード406、元の命令ワード407に復元する。次に、命令ワード復元部200は、復元した元の命令ワード405、元の命令ワード406、元の命令ワード407を、それぞれ、個別命令デコード部201、個別命令デコード部202、個別命令デコード部203へ出力する。
個別命令デコード部201〜個別命令デコード部203は、それぞれ、元の命令ワード405〜元の命令ワード407をデコードし、各命令を実行するための制御情報を制御情報パス105〜制御情報パス107を介して実行部108〜実行部110に出力する。
本発明の第2の実施例は、同一サイクルで実行される複数の命令ワードに属する超過オペランドが集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、プロセッサ100に対する動作指定効率を低下させずに、メモリの利用率効率を高め、メモリの消費量を削減できる。
次に、本発明の第3の実施例について図面を参照して詳細に説明する。本発明の第3の実施例のプロセッサ100は、本発明の第2の実施例とは異なり、2つの情報ワードを使用し、即値オペランドを使用する。本発明の第3の実施例の構成は、本発明の第2の実施例の図2、図3の構成と同一である。本発明の第3の実施例は、即値を利用する3命令以上を同一サイクルで実行する。
次に、本発明の第3の実施例の動作について図面を参照して説明する。説明を簡単にするために、Yは、常に、A、B、C、E0、E1、および、E2のいずれか3つの合計よりも大きく、かつ、いずれか4つの合計よりも小さい場合について説明する。情報ワードは、図6Bの場合である。
図8は、本発明の第3の実施例の動作を示す説明図である。図8を参照すると、命令供給部102から同サイクルで、固定語長Yの種類Mの命令ワード500、種類Nの命令ワード501、種類Oの命令ワード502、情報ワード503、および、情報ワード504が、命令パス104を介して出力される。説明を簡単にするために、情報ワード503、情報ワード504は、最後尾、すなわち、命令ワード500〜命令ワード502の右側に配置される場合について説明する。
命令デコーダ103の命令ワード復元部200は、命令ワード500〜命令ワード502、情報ワード503、情報ワード504を入力すると、各ワードの情報ワード識別子303により各ワードが、情報ワードであるのか、命令ワードであるのかを判別する。
ワードが情報ワードであれば、命令ワード復元部200は、フリービットフィールドFFの内容を元の各命令ワードの復元に使用する。ワードが命令ワードであれば、命令ワード復元部200は、そのオペコード304から命令の種類を判別する。次に、命令ワード復元部200は、必要に応じ、同一サイクルに存在する情報ワード503、および、情報ワード504のフリービットフィールドFFから命令の種類に応じたビット数の超過オペランド、即値オペランドを取り出し、当該命令ワードの適当な箇所(図8では末尾)に挿入することにより元の命令ワードを復元する。
すなわち、命令ワード復元部200は、M、N、Oの3種類の命令ワード500、501、命令ワード502を、それぞれ、語長Y+A+E0[ビット]、Y+B+E1[ビット]、Y+C+E2[ビット]の元の命令ワード505、元の命令ワード506、元の命令ワード507に復元する。次に、命令ワード復元部200は、復元した元の命令ワード505、元の命令ワード506、元の命令ワード507を、それぞれ、個別命令デコード部201、個別命令デコード部202、個別命令デコード部203へ出力する。
個別命令デコード部201〜個別命令デコード部203は、それぞれ、元の命令ワード505〜元の命令ワード507をデコードし、各命令を実行するための制御情報を制御情報パス105〜制御情報パス107を介して実行部108〜実行部110に出力する。
次に、本発明の第3の実施例の動作について、さらに詳細に説明する。なお、M、N、Oの各種類の命令が常に情報ワードを必要とし、情報ワードはサイクル毎に必ず一つ以上存在する場合について説明する。
たとえば、1個以上の情報ワードをサイクル毎に実行されるワード群800の最後尾(右側)に配置すれば、同一サイクルに実行される命令かどうかを区切るためにも情報ワードを利用できる。したがって、同一サイクルで、3に満たない命令数の命令ワードを実行する場合でも、別途命令ワード内に、当該サイクルでの実行命令数を表現する専用ビットフィールドを設ける必要がない。そこで、以下では、情報ワードを常にサイクル毎に実行される命令群の最後尾に配置した場合について説明する。
図9は命令ワード復元部200の動作を示すフローチャートである。図9を参照すると、命令デコーダ103の命令ワード復元部200は、同一サイクルで、ワード群800を入力する(図9ステップS1)。ワード群800は、同一サイクルで実行される命令ワード、および、必要数だけの情報ワードからなる。ここでは、ワード群800は、Y[ビット]×5[ワード]であるとする。また、説明を簡単にするためにYは定数であるとする。
次に、命令ワード復元部200は、ワード群800の最後尾に配置されている第5ワード(すなわち、情報ワード)を現ワードとする(ステップS2)。次に、命令ワード復元部200は、現ワードに対してステップS3〜ステップS6の処理を行う。
命令ワード復元部200は、次に、ステップS7〜ステップS8の処理を行い、現ワードを更新し、次々と、前の方のワードを対象にステップS3〜ステップS6の処理を行う。
命令ワード復元部200は、情報ワード識別子303により、現ワードが情報ワードであると判別すると(ステップS3/Yes)、現ワードのフリービットフィールドFFを後続する命令ワードの処理に利用できるように準備する。すなわち、命令ワード復元部200は、現ワードが最初の情報ワードならば、そのフリービットフィールドFFの最後尾に、フリービットフィールド現在位置を設定する。また、命令ワード復元部200は、現ワードが最初でない情報ワードならば、既存のフリービットフィールドFFの前に、その情報ワードのフリービットフィールドFFを追加する(ステップS10)。
命令ワード復元部200は、現ワードが情報ワードでないと判別すると(ステップS3/No)、現ワードである命令ワードの種類を判別する(ステップS4、S5、または、S6)。命令ワード復元部200は、フリービットフィールド現在位置から、命令の種類に対応するビット長のビットフィールド(超過オペランド、即値オペランド)を取り出し、命令ワード(現ワード)の末尾に追加し、命令ワード(現ワード)をその本来の語長の元の命令ワードに復元する。また、命令ワード復元部200は、フリービットフィールド現在位置を取り出したビットフィールドのビット長だけ前にシフトするように更新する(ステップS11、S12、または、S13)。これらの動作により、元の各命令ワードの命令語長が命令ワード復元部200によって復元される。
本発明の第3の実施例は、同一サイクルで実行される複数の命令ワードに属する超過オペランド、および、即値オペランドが集まって構成される情報ワードを分解し、各命令ワードの元の構成を再現する構成により、プロセッサ100に対する動作指定効率を低下させずに、メモリの利用率効率を高め、メモリの消費量を削減できる。
次に、本発明の第1、第2、または第3の実施例の具体例について説明する。本具体例のマイクロプロセッサは、2項命令(種類M)、単項命令(種類N)、および、明示的にオペランドを取らない無項命令(種類O)を含む命令体系を実行する。本具体例のマイクロプロセッサは、常時、3命令を同一サイクルで実行する。
情報ワード識別子のビット数Sが1[ビット]、オペコードのビット数OPが7[ビット]である。また、オペランドに指定可能なレジスタ数が32個であり、各レジスタを指定するレジスタ指定のビット数REGは、5[ビット]である。以下、2項命令、単項命令、無項命令の指定レジスタ数がそれぞれ3(ソース2つとデスティネーション1つ)、2(ソース1つとデスティネーション1つ)、1(デスティネーション1つ)、即値フィールドの必要ビット数IMMを1〜16とした場合について説明する。
即値オペランドを使用しないケースでは、2項命令(種類M)、単項命令(種類N)、および、無項命令(種類O)の最適命令語長は、それぞれ、S+OP+REG×3=1+7+5×3=23[ビット]、S+OP+REG×2=1+7+5×2=18[ビット]、および、S+OP+REG×1=1+7+5×1=13[ビット]である。
また、即値オペランドを使用するケースでは、2項命令(種類M)、単項命令(種類N)、および、無項命令(種類O)の最適命令語長は、それぞれ、S+OP+REG×3+IMM=1+7+5×3+16=39[ビット]、S+OP+REG×2+IMM=1+7+5×2+16=34[ビット]、および、S+OP+REG×1+IMM=1+7+5×1+16=29[ビット]である。
この条件下で、単一命令語長を用いるという一般的な手法(関連手法1と呼ぶ)で、プロセッサ性能を重視して命令語長が決定される場合には、命令語長は、最も長い最適語長の2項命令に合わせるように39[ビット]固定語長である。また、基本語長、および、その倍の語長の2種類の語長を用いるという可変語長方式に基づく関連手法(関連手法2と呼ぶ。たとえば、[文献1])で、プロセッサ性能を重視し命令語長が決定される場合には、命令語長は、基本語長の29[ビット]およびその倍の58[ビット]の2種類の語長である。
これに対し、本発明の具体例では、たとえば、固定語長Y=18[ビット]とすると、下記のようになる。即値オペランドを使用しない場合(図7に対応)では、2項命令(種類M、上記より23[ビット])の超過オペランドのビット数A、単項命令(種類N、上記より18[ビット])の超過オペランドのビット数B、および、無項命令(種類O、上記より13[ビット])の超過オペランドのビット数Cは、それぞれ、A=23−18=5[ビット]、B=18−18=0[ビット]、C=0[ビット](18>13なので)とすればよい。即値オペランドを参照する場合(図8に対応)では、A、B、Cに加え、さらに、E0、E1、E2を最大16[ビット]とすればよい。
その際、M、N、Oの3種類の命令に関する全てのあり得る命令発行パタンにおいて、A、B、Cのうちの任意の3つの合計の最大値は、A+A+A=5+5+5=15[ビット]である。この最大値15[ビット]は、固定語長Y−1=18−1=17[ビット]よりも小さいので、即値オペランドを使用しない命令の場合は、常時、1ワード分の情報ワードのみをサイクル毎に発行すればよい。
次に、即値オペランドを使用する命令と、即値オペランドを使用しない命令とが混在する(すなわち、図7と図8との状況が混在する)場合について説明する。表1は、混在の場合の命令発行パタンと1ワード目の情報ワード内で即値オペランドとして利用可能なビット数との関係を示す表である。
混在の場合、必ずしも、2ワード目の情報ワードが必要となるわけではない。なぜならば、命令の発行パタンによっては、表1に示すように、1ワード目の情報ワード内に超過オペランドとして未使用のフリービットフィールドFFが存在し、その未使用のフリービットフィールドFFが即値オペランドに利用できるからである。
すなわち、それらの未使用のフリービットフィールドFFが、命令に必要な即値オペランドのビット数以内であれば、新たにもう1ワードの情報ワードを当該サイクル用として追加する必要がないことになる。このように、本具体例は、同一サイクルに実行される即値オペランドを使用する命令が存在する場合であっても、必ずしも情報ワードの数を増やす必要がない。
本具体例と、単一命令語長を用いる上記関連手法1、および、2種類の語長を用いる可変語長を用いる上記関連手法2とを詳細に比較すると、本具体例の効果は以下のようになる。
関連手法1の場合は、サイクル毎に、常時39×3=117[ビット]が必要である。また、関連手法2の場合は、サイクル毎に、87[ビット](短い方の語長の命令が、3ワードの場合:29×3)〜174[ビット](長い方の語長の命令が、3ワードの場合=58×3)が必要である。18[ビット]の固定語長を用いた本具体例の場合、同一サイクルにおいて3つの命令が同時に有効桁16[ビット]の即値オペランドを利用する稀なケースでは、18×(3+4)=126[ビット]を消費する。
ここで、上記の‘4’は、以下のように算出する。1命令ワードの超過オペランドは、4[ビット]であり、即値オペランドの最大値が16[ビット]なので、情報ワード全体では、(4+16)×3=63[ビット]が必要である。3<(63/17)<4なので、最大4ワードの情報ワードが1サイクルで必要である。
ほとんどのケースでは、3つの命令ワードと1〜2つの情報ワードの計4〜5ワード、すなわち、18×4=72[ビット]〜18×5=90[ビット]程度のビットが必要である。
したがって、本具体例は、関連手法1と比べると、平均的には、プログラムメモリ消費量が(117−72)/117=38[%]〜(117−90)/117=22[%]程度削減できる。また、関連手法2において、平均サイクル毎に必要なビット数が、87[ビット]と174[ビット]との平均である130[ビット]であるとすると、本具体例はそれと比べ、平均的には、プログラムメモリ消費量が、(130−72)/130=45[%]〜(130−90)/130=30[%]程度削減できる。
次に、第2の実施例の具体例の構成について図面を参照して説明する。図10は、本発明の第2の実施例の具体例の命令ワード復元部200の一部の構成を示すブロック図である。図10を参照すると、命令ワード復元部200は、デコーダ610、デコーダ611、デコーダ612、選択信号630、選択信号631、選択信号632、選択回路620、選択回路621、および、選択回路622を含む。
デコーダ612は、第3命令ワード602のオペコードをデコードし、第3命令ワード602の超過オペランドを選択するための選択信号632を出力する。デコーダ611は、第2命令ワード601、および、第3命令ワード602のオペコードをデコードし、第2命令ワード601の超過オペランドを選択するための選択信号631を出力する。デコーダ610は、第1命令ワード600、第2命令ワード601、および、第3命令ワード602のオペコードをデコードし、第1命令ワード600の超過オペランドを選択するための選択信号630を出力する。
たとえば、第3命令が種類M、種類N、種類Oであれば、デコーダ612は、それぞれ、情報ワード603の最後尾からA[ビット]、B[ビット]、C[ビット]を選択するように選択信号632を出力する。また、たとえば、第3命令が種類Oであり、第2命令が種類Nであれば、デコーダ611は、情報ワード603の最後尾からC[ビット]前にずれた位置からB[ビット]を選択するように選択信号631を出力する。また、たとえば、第3命令が種類Oであり、第2命令が種類Nであり、第1命令が種類Mであれば、デコーダ610は、情報ワード603の最後尾からB+C[ビット]前にずれた位置からA[ビット]を選択するように選択信号630を出力する。
選択回路620(18ウェイ)、選択回路621(9ウェイ)、選択回路622(3ウェイ)は、それぞれ、選択信号630、選択信号631、選択信号632にしたがって、情報ワード603から第1命令ワード600、第2命令ワード601、第3命令ワード602の超過オペランドを選択し出力する。
図示しないが、プロセッサ100は、マイクロプログラム制御方式の構成が可能である。すなわち、プロセッサ100が命令制御プログラムにしたがって動作することにより、上述した命令供給部102、命令デコーダ103、および、実行部108〜110の各機能部を実現することができる。この命令制御プログラムは、光ディスクや磁気ディスクなどの機械読み取り可能な記録媒体に記録した状態で提供することができる。
同一サイクルでn個の命令が実行される場合には、第1、…、第i、…、第nのデコーダ、第1、…、第i、…、第nの選択回路が必要になる。第iのデコーダは、第i、第i+1、…、および、第nの命令のオペコードを入力し、第iの命令ワードに対応する超過オペランド、または、即値オペランドを選択するための第iの選択信号を出力する。第iの選択回路は、第iの選択信号にしたがって情報ワードの該当する位置から第iの命令に対応する超過オペランド、または、即値オペランドを選択する。
また、18ウェイの選択回路62等の遅延時間が大であり、実行時間が、1サイクルに収まらない場合には、パイプラインステージの段数の増加により、本具体例が実現できる。
その他、他の具体例として、本発明を、関連手法2である可変語長命令方式と組み合わせて実施することが考えられる。その場合、情報ワードの語長を必要に応じて基本語長としたり、あるいは用意されている他の整数倍の語長としたりすることが可能となるため、さらにプログラムメモリ消費量が削減できる。
たとえば、最小語長がZ[ビット]で、2種類の語長を持つ可変語長方式の場合、図9において、情報ワードの語長Yのみが、サイクル毎にZ[ビット]であったり2Z[ビット]であったりする。この場合、情報ワード識別子303のビット数を増やすか、あるいは、別途語長を指定するビットフィールドを命令ワード、または、情報ワード内に追加する必要がある。
以上のように、上述した実施例のプロセッサ100は、同一サイクルで実行される複数の命令ワードに属するビットフィールドの一部が集まって構成される情報ワードを、実行時に分解し各命令ワードの元の構成を復元する命令デコーダ103を含む。具体的には、命令デコーダ103は、情報ワードからビットフィールドを取り出し、これらのビットフィールドを各命令ワードのそれぞれの所定ビット位置に挿入することにより、各命令ワードを復元する。さらに詳しく言えば、命令デコーダ103は、情報ワードからビットフィールドを取り出し、これらのビットフィールドを各命令ワードのそれぞれの先頭あるいは、末尾、あるいは、それぞれのオペコードに依存して決まる所定位置に挿入することにより、各命令ワードを復元する。
また、プロセッサ100は、複数の命令ワード、および、情報ワードを同一サイクルで出力する命令供給部102と、復元した各命令ワードをそれぞれデコードし、各命令ワードを実行するための制御情報を出力する命令デコーダ103と、制御情報に基づいて各命令を実行する1以上の実行部108〜110とを含む。
命令供給部102は、同一サイクルで実行される最大命令数がnであり、n[個]の命令ワードの次に情報ワードがあると、n[個]の命令の最後尾に情報ワードを配置して出力し、n[個]に満たないm[個]の命令ワードの次に情報ワードがあると、n−m[個]のNOP命令をn[個]の命令ワードの次に挿入するようにしてもよい。
ここで、情報ワードとして集められるビットフィールドの一部が、命令ワードの種類によって決まる長さの超過オペランド、または、即値オペランドであってもよい。この場合、命令デコーダ103は、第i、第i+1、…、および、第nの命令のオペコードを入力し、第iの命令ワードに対応する超過オペランド、または、即値オペランドを選択するための第iの選択信号を出力する第iのデコーダ610〜612と、第iの選択信号にしたがって情報ワードの該当する位置から第iの命令に対応する超過オペランド、または、即値オペランドを選択する第iの選択回路620〜622とを備えていてもよい。
以上、本発明の実施例および具体例を図面により詳述してきたが、具体的な構成は上記実施例および具体例に限られるものではなく、この発明の要旨を逸脱しない範囲の設計の変更などがあっても、この発明に含まれる。