以下、実施形態を図面を用いて説明する。
図1は、一実施形態におけるプロセッサ10の例を示している。プロセッサ10は、条件付き命令に対応したプロセッサである。条件付き命令では、例えば、命令に付加された実行条件が成立したとき、命令に基づく演算の実行結果が有効になる。例えば、条件付き命令の所定のフィールドに、実行条件を示す条件コードCCODのビット数より少ないビット数の条件インデックスCIDXが指定される。
プロセッサ10は、例えば、プログラムカウンタ20、命令メモリ30、デコード部40、条件指定部50、ステータスレジスタ60、実行部70、レジスタファイル80および制御回路90を有している。なお、図1では、図を見やすくするために、制御回路90から各ブロックに供給される制御信号の記載を省略している。例えば、制御回路90は、プロセッサ10の全体の動作を制御する。
プログラムカウンタ20は、例えば、プロセッサ10が実行する命令のアドレスを示す値(以下、PC値とも称する)を、命令メモリ30に出力する。例えば、プログラムカウンタ20の値(PC値)は、プロセッサ10が命令を実行する度に、増加する。
命令メモリ30は、例えば、SRAMである。なお、命令メモリ30は、SRAM以外のメモリでもよい。命令メモリ30には、例えば、条件付き命令を含む複数の命令COMが格納される。すなわち、命令メモリ30には、実行条件を示す条件コードCCODのビット数より少ないビット数の条件インデックスCIDXが所定のフィールドに指定される条件付き命令を含む複数の命令COMが格納される。
そして、命令メモリ30は、PC値が示すアドレスの命令COMを、デコード部40に出力する。これにより、命令メモリ30から命令COMがフェッチ(取得)される。そして、デコード部40は、命令メモリ30から読み出した命令COMを解読する。
例えば、命令COMが条件付き命令のとき、デコード部40は、命令COMの解読結果のうち、条件インデックスCIDXを条件指定部50に出力し、条件インデックスCIDX以外の解読結果DCOMを実行部70に出力する。すなわち、デコード部40は、命令COMが条件付き命令のとき、命令COMから条件インデックスCIDXを取り出し、取り出した条件インデックスCIDXを条件指定部50に出力する。
このように、デコード部40は、命令メモリ30から読み出した命令COMを解読し、命令COMが条件付きで実行される条件付き命令のとき、条件付き命令の所定のフィールドに指定された条件インデックスCIDXを取得する。
実行条件(条件コードCCOD)は、例えば、プログラムの性質上、命令メモリ30の領域に対して局所性が存在する。例えば、符号なし変数の比較を行う部分と、符号あり変数の比較を行う部分とは、異なるサブルーチンや、プログラム内の別々の特定箇所に固まる傾向にある。このため、条件コードCCODの局所性が認められる領域では、命令で使用される条件コードCCODの種類が、条件コードCCODの全パターン数より少なくなる傾向にある。したがって、条件コードCCODの局所性が認められる領域では、命令で使用される条件コードCCODに対応させる条件インデックスCIDXのビット数を、条件コードCCODのビット数より少なくできる。
なお、この実施形態では、例えば、条件指定テーブルTBLの内容を専用命令で変更することにより、条件コードCCODの全パターンを指定できる。例えば、デコード部40は、命令COMが条件指定テーブルTBLの内容を書き換えるための書き換え命令のとき、命令COMを解読して得られるテーブル書き換え情報TINFを条件指定部50に出力する。テーブル書き換え情報TINFは、例えば、条件指定テーブルTBLの書き換えを指示する信号と、条件指定テーブルTBLの内容(書き換え後の内容)を示すデータとを有している。
条件指定部50は、デコード部40で取得された条件インデックスCIDXに基づいて、条件コードCCODを選択する。例えば、条件指定部50は、条件インデックスCIDXに対応する条件コードCCODを保持する条件指定テーブルTBLを有している。すなわち、条件指定部50は、条件インデックスCIDXを条件コードCCODに変換するための条件指定テーブルTBLを有している。
そして、条件指定部50は、デコード部40で取得された条件インデックスCIDXに対応する条件コードCCODを条件指定テーブルTBLに基づいて選択する。条件指定部50で選択された条件コードCCODは、実行部70に転送される。すなわち、条件指定部50は、条件インデックスCIDXに対応する条件コードCCODを実行部70に出力する。
このように、条件指定部50は、条件インデックスCIDXを条件コードCCODに変換する。また、条件指定部50は、条件指定テーブルTBLの内容を書き換えることを示すテーブル書き換え情報TINFを受けたとき、条件指定テーブルTBLの内容をテーブル書き換え情報TINFに基づいて書き換える。例えば、条件指定部50は、図2に示すように、命令メモリ30から読み出される書き換え命令COMに基づいて条件指定テーブルTBLの内容を書き換えるテーブル書き換え部WCTLを有している。
ステータスレジスタ60は、ステータスフラグSZVCの値を保持する。ステータスフラグSZVCは、例えば、実行部70で実行された演算や比較の結果を示す数ビットのフラグである。すなわち、実行部70で実行された演算や比較の結果は、数ビットのステータスフラグSZVCとして保持される。例えば、プロセッサ10では、4ビットのステータスフラグSZVCが用意されている。以下、ステータスフラグSZVCの各ビットを、符号フラグS、ゼロフラグZ、オーバーフローフラグV、キャリーフラグCとも称する。
符号フラグSは、例えば、演算結果が負のとき“1”にセットされ、演算結果が正のとき“0”にクリアされる。ゼロフラグZは、例えば、演算結果がゼロのとき“1”にセットされ、演算結果がゼロでないとき“0”にクリアされる。オーバーフローフラグVは、例えば、演算結果にオーバーフローが発生したとき“1”にセットされ、演算結果にオーバーフローが発生していないとき“0”にクリアされる。キャリーフラグCは、例えば、演算結果にキャリーが発生したとき“1”にセットされ、演算結果にキャリーが発生していないとき“0”にクリアされる。あるいは、キャリーフラグCは、例えば、演算結果にボローが発生したとき“1”にセットされ、演算結果にボローが発生していないとき“0”にクリアされる。
なお、ステータスフラグSZVCのビット数は、4ビットに限定されない。すなわち、ステータスフラグSZVCの種類は、4つに限定されない。
実行部70は、例えば、演算部72および判定部74を有している。演算部72は、例えば、四則演算や論理演算等を実行する算術論理演算ユニット(ALU:Arithmetic Logic Unit)である。演算部72は、解読結果DCOMをデコード部40から受け、解読結果DCOMに基づく演算の実行結果RSLTを判定部74に出力する。
例えば、演算部72は、デコード部40の解読結果DCOMに基づいて、命令COMのオペランド等をレジスタファイル80から読み出し、四則演算や論理演算等を実行する。このように、演算部72は、命令COMに基づく演算を実行する。そして、演算部72は、実行結果RSLTを判定部74に出力する。例えば、命令COMが演算命令のとき、実行結果RSLTには、ステータスレジスタ60の更新情報や演算結果が含まれる。
判定部74は、例えば、条件インデックスCIDXに対応する条件コードCCODを条件指定部50から受ける。また、判定部74は、ステータスレジスタ60からステータスフラグSZVCの値を読み出す。そして、判定部74は、条件コードCCODとステータスフラグSZVCの値とに基づいて、演算部72で実行された命令COMが有効か否かを判定する。
演算部72で実行された命令COMが有効の場合、判定部74は、例えば、演算部72から受けた実行結果RSLTに基づいて、命令COMの演算結果をレジスタファイル80に必要に応じて書き込む。また、演算部72で実行された命令COMが有効の場合、判定部74は、実行結果RSLTに基づいて、ステータスレジスタ60に保持されているステータスフラグSZVCの値を必要に応じて更新する。ステータスフラグSZVC等を更新する必要のない条件付き命令COMは、例えば、レジスタファイル80のデータをプロセッサ10の外部のメモリ等に書き込むための条件付きストア命令である。なお、演算部72で実行された命令COMが有効でない場合、命令COMの実行結果RSLTは、レジスタファイル80等に反映されない。
このように、実行部70は、デコード部40で解読された条件付き命令COMが有効か否かを条件指定部50で選択された条件コードCCODとステータスフラグSZVCの値とに基づいて判定する。そして、実行部70は、有効な条件付き命令COMに基づく演算を実行し、演算の実行結果に基づいてステータスフラグSZVCの値を更新する。
レジスタファイル80は、オペランド等のデータが格納されるレジスタである。なお、プロセッサ10の構成は、この例に限定されない。例えば、演算部72は、判定部74で有効でないと判定された命令COMを実行しないように設計されてもよい。このときには、演算部72は、例えば、命令COMが有効か否かの情報(条件付き命令COMの実行条件が成立したか否かの情報)を判定部74から受ける。そして、演算部72は、実行条件が成立した命令COMに基づく演算を実行し、実行結果をレジスタファイル80およびステータスフラグSZVCに必要に応じて反映する。
図2は、図1に示した条件指定部50の一例を示している。条件指定部50は、例えば、条件指定テーブルTBL、セレクタSELおよびテーブル書き換え部WCTLを有している。条件指定テーブルTBLは、条件インデックスCIDXに対応する条件コードCCODを保持する複数のレジスタFF(FF0−FF3)を有している。例えば、条件インデックスCIDXが2ビットのとき、条件指定テーブルTBL内には、条件コードCCODが4通り存在する。4通りの条件コードCCODは、条件指定テーブルTBL内のレジスタFF(FF0−FF3)にそれぞれ保持される。なお、レジスタFFの数は、4つに限定されない。すなわち、条件インデックスCIDXのビット数は、2ビットに限定されない。
セレクタSELは、条件指定テーブルTBLの各レジスタFFの値を受ける。また、セレクタSELは、デコード部40で解読された命令COMが条件付き命令のとき、条件インデックスCIDXをデコード部40から受ける。そして、セレクタSELは、出力するレジスタFFの値(条件コードCCOD)を条件インデックスCIDXに基づいてレジスタFF0−FF3の値から選択する。すなわち、セレクタSELは、条件インデックスCIDXに対応する条件コードCCODを選択して出力する。
テーブル書き換え部WCTLは、例えば、テーブル書き換え情報TINFを受け、条件指定テーブルTBLのレジスタFFの値を設定する。例えば、テーブル書き換え部WCTLは、条件指定テーブルTBLの内容を書き換えることを示すテーブル書き換え情報TINFを受けたとき、条件指定テーブルTBLのレジスタFFの値(条件コードCCOD)をテーブル書き換え情報TINFに基づいて書き換える。
なお、テーブル書き換え部WCTLは、一部のレジスタFF(更新する条件コードCCODが保持されているレジスタFF)の値を書き換えてもよいし、全てのレジスタFFの値を書き換えてもよい。このように、テーブル書き換え部WCTLは、命令メモリ30から読み出される書き換え命令COMに基づいて、条件指定テーブルTBLの内容を書き換える。
図3は、条件コードCCODとステータスフラグSZVCの対応の一例を示している。図3では、括弧内に2進数で表した条件コードCCODを示している。図中のステータスフラグSZVCの“x”は、“0”および“1”のどちらでもよいこと(ドントケア:don’t care)を示している。以下、ステータスフラグSZVCの値を、符号フラグS、ゼロフラグZ、オーバーフローフラグV、キャリーフラグCの順にまとめて示すときもある。例えば、ステータスフラグSZVCが“x1xx”であると示したときは、ゼロフラグZが“1”で、その他のフラグが“x”であることを示している。条件コードCCODは、例えば、“0”から“14”までの15通り用意されている。
条件コードCCODの“0”(ニーモニックの“AL”)は、例えば、無条件で命令COMを有効にするときに使用される。例えば、条件コードCCODの“0”では、ステータスフラグSZVCの値に拘わらず、命令COMが有効になる。
条件コードCCODの“1”(ニーモニックの“EQ”)は、例えば、比較結果が等しいことを実行条件にする場合に使用される。例えば、条件コードCCODの“1”では、ステータスフラグSZVCが“x1xx”のときに命令COMが有効になる。条件コードCCODの“2”(ニーモニックの“NE”)は、例えば、比較結果が等しくないことを実行条件にする場合に使用される。例えば、条件コードCCODの“2”では、ステータスフラグSZVCが“x0xx”のときに命令COMが有効になる。
条件コードCCODの“3”(ニーモニックの“UGT”)は、例えば、符号なし変数の比較結果が“大”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“3”では、ステータスフラグSZVCが“x0x0”のときに命令COMが有効になる。
条件コードCCODの“4”(ニーモニックの“ULT”)は、例えば、符号なし変数の比較結果が“小”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“4”では、ステータスフラグSZVCが“xxx1”のときに命令COMが有効になる。
条件コードCCODの“5”(ニーモニックの“UGE”)は、例えば、符号なし変数の比較結果が“以上”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“5”では、ステータスフラグSZVCが“xxx0”のときに命令COMが有効になる。
条件コードCCODの“6”(ニーモニックの“ULE”)は、例えば、符号なし変数の比較結果が“以下”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“6”では、ステータスフラグSZVCが“x1xx”または“x0x1”のときに命令COMが有効になる。
条件コードCCODの“7”(ニーモニックの“SGT”)は、例えば、符号あり変数の比較結果が“大”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“7”では、ステータスフラグSZVCが“000x”または“101x”のときに命令COMが有効になる。
条件コードCCODの“8”(ニーモニックの“SLT”)は、例えば、符号あり変数の比較結果が“小”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“8”では、ステータスフラグSZVCが“001x”または“100x”のときに命令COMが有効になる。
条件コードCCODの“9”(ニーモニックの“SGE”)は、例えば、符号あり変数の比較結果が“以上”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“9”では、ステータスフラグSZVCが“x1xx”、“000x”および“101x”のいずれかのときに命令COMが有効になる。
条件コードCCODの“10”(ニーモニックの“SLE”)は、例えば、符号あり変数の比較結果が“以下”であることを実行条件にする場合に使用される。例えば、条件コードCCODの“10”では、ステータスフラグSZVCが“x1xx”、“001x”および“100x”のいずれかのときに命令COMが有効になる。
条件コードCCODの“11”(ニーモニックの“PL”)は、例えば、判定対象の命令COMより前の演算結果が正であることを実行条件にする場合に使用される。例えば、条件コードCCODの“11”では、ステータスフラグSZVCが“0xxx”のときに命令COMが有効になる。
条件コードCCODの“12”(ニーモニックの“MI”)は、例えば、判定対象の命令COMより前の演算結果が負であることを実行条件にする場合に使用される。例えば、条件コードCCODの“12”では、ステータスフラグSZVCが“1xxx”のときに命令COMが有効になる。
条件コードCCODの“13”(ニーモニックの“VS”)は、例えば、判定対象の命令COMより前の演算結果にオーバーフローが発生していることを実行条件にする場合に使用される。例えば、条件コードCCODの“13”では、ステータスフラグSZVCが“xx1x”のときに命令COMが有効になる。
条件コードCCODの“14”(ニーモニックの“VC”)は、例えば、判定対象の命令COMより前の演算結果にオーバーフローが発生していないことを実行条件にする場合に使用される。例えば、条件コードCCODの“14”では、ステータスフラグSZVCが“xx0x”のときに命令COMが有効になる。
このように、プロセッサ10では、判定対象の命令COMの条件コードCCODと、判定対象の命令COMより前の演算で設定されたステータスフラグSZVCとに基づいて、条件付き命令COMを実行するか否かを制御する。
図4は、図1に示したプロセッサ10における条件インデックスCIDXから条件コードCCODへの変換の一例を示している。なお、図4では、条件インデックスCIDXおよび条件コードCCOD等の値を2進数で示している。また、図4の“x”の意味は、図3の“x”と同じである。プロセッサ10が読み込む条件付き命令COMのフォーマットでは、条件コードCCODの代わりに、条件コードCCODより短いビット長の条件インデックスCIDXのフィールドが存在する。このように、条件付き命令COMの所定のフィールドに、実行条件を示す条件コードCCODのビット数より少ないビット数の条件インデックスCIDXが指定される。
条件インデックスCIDXの“00”、“01”、“10”、“11”に対応する条件コードCCODのそれぞれの値は、例えば、図2に示したレジスタFF0、FF1、FF2、FF3にそれぞれ保持される。
条件指定テーブルTBL(A)は、命令COM1の条件インデックスCIDXに対応する条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。例えば、条件指定テーブルTBL(A)では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0000”、“0001”、“0011”、“0110”にそれぞれ対応している。
命令COM1は、例えば、符号なし変数の比較を行う部分を含むプログラム領域の条件付き命令COMである。デコード部40は、命令COM1から条件インデックスCIDXを取得する。命令COM1の条件インデックスCIDXは、“11”である。条件指定部50は、条件指定テーブルTBL(A)に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“0110”を選択する。これにより、命令COM1の条件コードCCOD(実行条件)として“0110”が選択される。したがって、判定部74は、ステータスフラグSZVCが“x1xx”または“x0x1”のときに命令COM1を有効と判定する。
命令COM2は、例えば、条件指定テーブルTBLの内容を条件指定テーブルTBL(A)から条件指定テーブルTBL(B)に変更する書き換え命令COMである。条件指定テーブルTBL’は、条件指定テーブルTBLの更新過程のイメージを示している。例えば、条件指定部50は、条件インデックスCIDXの“10”に対応する条件コードCCODの値(レジスタFF2の値)を、“0011”から“0111”に書き換える。また、条件指定部50は、条件インデックスCIDXの“11”に対応する条件コードCCODの値(レジスタFF3の値)を、“0110”から“1010”に書き換える。これにより、条件指定テーブルTBLは、条件指定テーブルTBL(B)の内容に更新される。
条件指定テーブルTBL(B)は、命令COM3の条件インデックスCIDXに対応する条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。例えば、条件指定テーブルTBL(B)では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0000”、“0001”、“0111”、“1010”にそれぞれ対応している。
命令COM3は、例えば、符号あり変数の比較を行う部分を含むプログラム領域の条件付き命令COMである。デコード部40は、命令COM3から条件インデックスCIDXを取得する。命令COM3の条件インデックスCIDXは、“11”である。条件指定部50は、条件指定テーブルTBL(B)に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“1010”を選択する。これにより、命令COM3の条件コードCCOD(実行条件)として“1010”が選択される。したがって、判定部74は、ステータスフラグSZVCが“x1xx”、“001x”および“100x”のいずれかのときに命令COM3を有効と判定する。
図5は、図1に示したプロセッサ10のコードの一例を示している。なお、図5では、条件インデックスCIDXおよび条件コードCCOD等の値を2進数で示している。図5の例では、プログラムはそれぞれの領域ごとに条件コードCCODに局所性が存在する。例えば、プログラムの領域Aでは、ニーモニック“AL”、“EQ”、“UGT”、“ULE”の4種類の条件コードCCODのいずれかが使用される。プログラムの領域Bでは、例えば、ニーモニック“AL”、“EQ”、“SGT”、“SLE”の4種類の条件コードCCODのいずれかが使用される。
プログラムの領域Cでは、例えば、ニーモニック“AL”、“EQ”、“NE”、“SLT”の4種類の条件コードCCODのいずれかが使用される。プログラムの領域Dでは、例えば、ニーモニック“UGT”、“ULT”、“UGE”、“ULE”の4種類の条件コードCCODのいずれかが使用される。アセンブラコードでは、それぞれの領域A、B、C、Dの最初に書き換え命令(テーブル書き換え(A)、(B)、(C)、(D))が記述され、条件指定テーブルTBLはそれぞれの領域A、B、C、Dに応じた内容に設定される。
例えば、条件指定テーブルTBL(A)は、領域A内の命令COMの条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。条件指定テーブルTBL(A)では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0011”、“0110”にそれぞれ対応している。
条件指定テーブルTBL(B)は、領域B内の命令COMの条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。例えば、条件指定テーブルTBL(B)では、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0111”、“1010”にそれぞれ対応している。
条件指定テーブルTBL(C)は、領域C内の命令COMの条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。例えば、条件指定テーブルTBL(C)では、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0010”、“1000”にそれぞれ対応している。
条件指定テーブルTBL(D)は、領域D内の命令COMの条件コードCCODを選択する際に使用される条件指定テーブルTBLを示している。例えば、条件指定テーブルTBL(D)では、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0011”、“0100”、“0101”、“0110”にそれぞれ対応している。
このように、この実施形態では、条件インデックスCIDXのビット数が条件コードCCODのビット数より少ないために、プログラム全体で使用する条件コードCCODの全パターンを指定できないとき、条件指定テーブルTBLの内容を書き換え命令COMで書き換える。これにより、この実施形態では、プログラム全体で使用する条件コードCCODの全パターンを指定できる。
以上、この実施形態では、プロセッサ10は、条件付き命令COMに含まれる条件インデックスCIDXを取得するデコード部40、デコード部40で取得された条件インデックスCIDXに対応する条件コードCCODを選択する条件指定部50等を有している。なお、条件インデックスCIDXのビット数は、条件コードCCODのビット数より少ない。すなわち、この実施形態では、条件コードCCODのビット数より少ないビット数の条件インデックスCIDXが命令COMに含まれる。
これにより、この実施形態では、条件コードCCODを命令COMに含めるプロセッサに比べて、命令COMを格納する命令メモリ30のサイズを低減できる。例えば、4ビットの条件コードCCODを有する命令COMのビット数が28ビットの場合、条件コードCCODの代わりに2ビットの条件インデックスCIDXを命令COMに含めることにより、命令COMのビット数は26ビットに削減される。このときには、命令メモリ30のサイズを約7%削減できる。なお、この実施形態では、条件指定テーブルTBLの内容を書き換え命令COMで変更することにより、条件コードCCODの全パターンを指定できる。
図6は、別の実施形態におけるプロセッサ12の一例を示している。図1−図5で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサ12が読み込む条件付き命令COMのフォーマットでは、条件コードCCODの代わりに、条件コードCCODより短いビット長の条件インデックスCIDXのフィールドが存在する。プロセッサ12は、図1に示した条件指定部50の代わりに、条件指定部52を有している。
例えば、プロセッサ12は、プログラムカウンタ20、命令メモリ30、デコード部40、条件指定部52、ステータスレジスタ60、実行部70、レジスタファイル80および制御回路90を有している。プログラムカウンタ20、命令メモリ30、デコード部40、ステータスレジスタ60、実行部70、レジスタファイル80および制御回路90は、図1−図5で説明した実施形態と同様である。例えば、条件指定部52以外のプロセッサ12の構成は、図1−図5で説明した実施形態と同一である。
条件指定部52は、条件インデックスCIDXを条件コードCCODに変換するための複数の条件指定テーブルTBL(TBL0−TBL3)を有している。条件指定部52は、例えば、プログラムカウンタ20からPC値を受ける。また、条件指定部52は、例えば、デコード部40で解読された命令COMが条件付き命令のとき、条件インデックスCIDXをデコード部40から受ける。例えば、条件指定部52は、条件コードCCODの選択に使用する条件指定テーブルTBLをプログラムカウンタ20のPC値に基づいて選択する。そして、条件指定部52は、選択した条件指定テーブルTBLに基づいて、デコード部40で取得された条件インデックスCIDXに対応する条件コードCCODを選択する。
すなわち、条件指定部52は、デコード部40から受けた条件インデックスCIDXに対応する条件コードCCODを、PC値に基づいて選択した条件指定テーブルTBLを参照して選択する。条件指定部52で選択された条件コードCCODは、実行部70に転送される。このように、条件指定部52は、条件インデックスCIDXに対応する条件コードCCODを実行部70に出力する。
また、条件指定部52は、条件指定テーブルTBLの内容を書き換えることを示すテーブル書き換え情報TINFを受けたとき、条件指定テーブルTBLの内容をテーブル書き換え情報TINFに基づいて書き換える。
なお、プロセッサ12の構成は、この例に限定されない。例えば、条件指定部52は、書き換え命令COMを使用せずに条件指定テーブルTBLの内容を書き換え可能に設計されもよい。すなわち、条件指定テーブルTBLは、プロセッサ12の外部から値を直接更新されてもよい。
図7は、図6に示した条件指定部52の一例を示している。条件指定部52は、例えば、4つの条件指定テーブルTBL(TBL0−TBL3)と、4つのセレクタSEL(SEL0−SEL3)と、コード選択部SELUと、テーブル書き換え部WCTL2とを有している。なお、条件指定テーブルTBLおよびセレクタSELの数は、4つに限定されない。
また、条件指定部52は、例えば、条件指定テーブルTBL1−TBL3が有効となるPC値の範囲を保持するレジスタを有している。条件指定テーブルTBL1−TBL3が有効となるPC値の範囲を保持するレジスタは、コード選択部SELU内に設けられてもよいし、コード選択部SELUの外部に設けられてもよい。あるいは、条件指定テーブルTBL1−TBL3が有効となるPC値の範囲を保持するレジスタは、条件指定部52の外部に設けられてもよい。条件指定テーブルTBL1−TBL3が有効となるPC値の範囲は、例えば、図8に示すように、値“SPC1”、“EPC1”の組と、値“SPC2”、“EPC2”の組と、値“SPC3”、“EPC3”の組とによりそれぞれ設定される。
ここで、例えば、終端PC値“EPC1”は、開始PC値“SPC1”より大きく、開始PC値“SPC2”より小さい値である。また、終端PC値“EPC2”は、例えば、開始PC値“SPC2”より大きく、開始PC値“SPC3”より小さい値である。そして、終端PC値“EPC3”は、例えば、開始PC値“SPC3”より大きい値である。
条件指定テーブルTBL0−TBL3およびセレクタSEL0−SEL3は、例えば、図2に示した条件指定テーブルTBLおよびセレクタSELと同様である。例えば、各条件指定テーブルTBLは、条件インデックスCIDXに対応する条件コードCCODを保持する4つのレジスタFF(FF0−FF3)を有している。セレクタSELは、例えば、条件指定テーブルTBLに対応して設けられている。
各セレクタSELは、各条件指定テーブルTBLの各レジスタFFの値(条件コードCCOD)を受ける。例えば、セレクタSEL0は、条件指定テーブルTBL0の各レジスタFFの値を受ける。そして、各セレクタSELは、条件インデックスCIDXに対応するレジスタFFの値を選択し、選択したレジスタFFの値をコード選択部SELUに出力する。
コード選択部SELUは、プログラムカウンタ20のPC値“PC”と各セレクタSELで選択されたレジスタFFの値とを受ける。また、コード選択部SELUは、例えば、条件指定テーブルTBL1−TBL3の開始PC値“SPC1−SPC3”と、条件指定テーブルTBL1−TBL3の終端PC値“EPC1−EPC3”とを受ける。そして、コード選択部SELUは、開始PC値“SPC1−SPC3”と終端PC値“EPC1−EPC3”とプログラムカウンタ20のPC値“PC”とに基づいて、出力するレジスタFFの値(条件コードCCOD)を選択する。
例えば、プログラムカウンタ20のPC値“PC”が開始PC値“SPC1”と終端PC値“EPC1”との間(以下、範囲SPC1−EPC1とも称する)にあるとき、コード選択部SELUは、セレクタSEL1から受けたレジスタFFの値を選択する。また、例えば、プログラムカウンタ20のPC値“PC”が開始PC値“SPC2”と終端PC値“EPC2”との間(以下、範囲SPC2−EPC2とも称する)にあるとき、コード選択部SELUは、セレクタSEL2から受けたレジスタFFの値を選択する。
そして、例えば、プログラムカウンタ20のPC値“PC”が開始PC値“SPC3”と終端PC値“EPC3”との間(以下、範囲SPC3−EPC3とも称する)にあるとき、コード選択部SELUは、セレクタSEL3から受けたレジスタFFの値を選択する。なお、プログラムカウンタ20のPC値“PC”が範囲SPC1−EPC1、範囲SPC2−EPC2および範囲SPC3−EPC3のいずれでもないとき、コード選択部SELUは、例えば、セレクタSEL0から受けたレジスタFFの値を選択する。
テーブル書き換え部WCTL2は、例えば、テーブル書き換え情報TINFを受け、条件指定テーブルTBLのレジスタFFの値を設定する。例えば、テーブル書き換え部WCTL2は、条件指定テーブルTBLの内容を書き換えることを示すテーブル書き換え情報TINFを受けたとき、条件指定テーブルTBLのレジスタFFの値(条件コードCCOD)をテーブル書き換え情報TINFに基づいて書き換える。
このように、テーブル書き換え部WCTL2は、命令メモリ30から読み出される書き換え命令COMに基づいて、複数の条件指定テーブルTBLの少なくとも1つの条件指定テーブルTBLの内容を書き換える。なお、テーブル書き換え部WCTL2は、一部のレジスタFF(更新する条件コードCCODが保持されているレジスタFF)の値を書き換えてもよいし、全てのレジスタFFの値を書き換えてもよい。
また、条件指定部52の構成は、この例に限定されない。例えば、条件指定部52は、書き換え命令COMを使用せずに条件指定テーブルTBLの内容を書き換え可能に設計されもよい。このときには、条件指定部52は、テーブル書き換え部WCTL2が省かれて設計されてもよい。
図8は、図7に示した条件指定テーブル部TBL1−TBL3が有効となるPC値の範囲の一例を示している。例えば、条件指定テーブル部TBL1が有効となるPC値の範囲は、開始PC値“SPC1”から終端PC値“EPC1”の間である。また、例えば、条件指定テーブル部TBL2が有効となるPC値の範囲は、開始PC値“SPC2”から終端PC値“EPC2”の間である。そして、例えば、条件指定テーブル部TBL3が有効となるPC値の範囲は、開始PC値“SPC3”から終端PC値“EPC3”の間である。なお、条件指定テーブル部TBL0は、例えば、条件指定テーブル部TBL1−TBL3のいずれも有効でないとき、有効になる。
条件指定テーブル部TBL1−TBL3の開始PC値“SPC1−SPC3”と、条件指定テーブルTBL1−TBL3の終端PC値“EPC1−EPC3と、各条件指定テーブル部TBLの各レジスタFFの値は、例えば、プログラムの実行開始前に設定される。この動作は、プロセッサ12の命令COMで実行されもよいし、プロセッサ12の外部からの直接更新により実行されてもよい。
図9は、図6に示したプロセッサ12における条件インデックスCIDXから条件コードCCODへの変換の一例を示している。なお、図9では、条件インデックスCIDXおよび条件コードCCOD等の値を2進数で示している。また、図9の“x”の意味は、図3の“x”と同じである。
命令COM(PCa)は、例えば、範囲SPC1−EPC1、範囲SPC2−EPC2および範囲SPC3−EPC3のいずれにも当てはまらないPC値“PCa”に対応するアドレスの条件付き命令COMである。したがって、命令COM(PCa)の条件インデックスCIDXに対応する条件コードCCODを選択する際には、条件指定テーブルTBL0が使用される。例えば、条件指定テーブルTBL0では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0000”、“0001”、“0011”、“0110”にそれぞれ対応している。
デコード部40は、命令COM(PCa)から条件インデックスCIDXを取得する。命令COM(PCa)の条件インデックスCIDXは、“11”である。条件指定部52は、PC値“PCa”に基づいて選択される条件指定テーブルTBL0に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“0110”を選択する。これにより、命令COM(PCa)の条件コードCCOD(実行条件)として“0110”が選択される。したがって、判定部74は、ステータスフラグSZVCが“x1xx”または“x0x1”のときに命令COM(PCa)を有効と判定する。
命令COM(PCb)は、例えば、範囲SPC1−EPC1のPC値“PCb”に対応するアドレスの条件付き命令COMである。したがって、命令COM(PCb)の条件インデックスCIDXに対応する条件コードCCODを選択する際には、条件指定テーブルTBL1が使用される。例えば、条件指定テーブルTBL1では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0000”、“0001”、“0111”、“1010”にそれぞれ対応している。
デコード部40は、命令COM(PCb)から条件インデックスCIDXを取得する。命令COM(PCb)の条件インデックスCIDXは、“11”である。条件指定部52は、PC値“PCb”に基づいて選択される条件指定テーブルTBL1に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“1010”を選択する。これにより、命令COM(PCb)の条件コードCCOD(実行条件)として“1010”が選択される。したがって、判定部74は、ステータスフラグSZVCが“x1xx”、“001x”および“100x”のいずれかのときに命令COM(PCb)を有効と判定する。
命令COM(PCc)は、例えば、範囲SPC2−EPC2のPC値“PCc”に対応するアドレスの条件付き命令COMである。したがって、命令COM(PCc)の条件インデックスCIDXに対応する条件コードCCODを選択する際には、条件指定テーブルTBL2が使用される。例えば、条件指定テーブルTBL2では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0000”、“0001”、“0010”、“1000”にそれぞれ対応している。
デコード部40は、命令COM(PCc)から条件インデックスCIDXを取得する。命令COM(PCc)の条件インデックスCIDXは、“11”である。条件指定部52は、PC値“PCc”に基づいて選択される条件指定テーブルTBL2に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“1000”を選択する。これにより、命令COM(PCc)の条件コードCCOD(実行条件)として“1000”が選択される。したがって、判定部74は、ステータスフラグSZVCが“001x”または“100x”のときに命令COM(PCc)を有効と判定する。
命令COM(PCd)は、例えば、範囲SPC3−EPC3のPC値“PCd”に対応するアドレスの条件付き命令COMである。したがって、命令COM(PCd)の条件インデックスCIDXに対応する条件コードCCODを選択する際には、条件指定テーブルTBL3が使用される。例えば、条件指定テーブルTBL3では、条件インデックスCIDXの“00”、“01”、“10”、“11”は、条件コードCCODの“0011”、“0100”、“0101”、“0110”にそれぞれ対応している。
デコード部40は、命令COM(PCd)から条件インデックスCIDXを取得する。命令COM(PCd)の条件インデックスCIDXは、“11”である。条件指定部52は、PC値“PCd”に基づいて選択される条件指定テーブルTBL3に基づいて、条件インデックスCIDXの値“11”に対応する条件コードCCODの値“0110”を選択する。これにより、命令COM(PCd)の条件コードCCOD(実行条件)として“0110”が選択される。したがって、判定部74は、ステータスフラグSZVCが“x1xx”または“x0x1”のときに命令COM(PCd)を有効と判定する。
図10は、図6に示したプロセッサ12のコードの一例を示している。なお、図10では、条件インデックスCIDXおよび条件コードCCOD等の値を2進数で示している。図10の例では、プログラムはそれぞれの領域ごとに条件コードCCODに局所性が存在する。例えば、プログラムの領域Aでは、ニーモニック“AL”、“EQ”、“UGT”、“ULE”の4種類の条件コードCCODのいずれかが使用される。したがって、条件指定テーブルTBL0では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0011”、“0110”にそれぞれ対応している。なお、プログラムの領域Aは、例えば、PC値が範囲SPC1−EPC1、範囲SPC2−EPC2および範囲SPC3−EPC3のいずれでもないプログラム領域である。
プログラムの領域Bは、例えば、PC値が範囲SPC1−EPC1のプログラム領域である。例えば、プログラムの領域Bでは、ニーモニック“AL”、“EQ”、“SGT”、“SLE”の4種類の条件コードCCODのいずれかが使用される。したがって、条件指定テーブルTBL1では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0111”、“1010”にそれぞれ対応している。
プログラムの領域Cは、例えば、PC値が範囲SPC2−EPC2のプログラム領域である。例えば、プログラムの領域Cでは、ニーモニック“AL”、“EQ”、“NE”、“SLT”の4種類の条件コードCCODのいずれかが使用される。したがって、条件指定テーブルTBL2では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“0010”、“1000”にそれぞれ対応している。
プログラムの領域Dは、例えば、PC値が範囲SPC3−EPC3のプログラム領域である。例えば、プログラムの領域Dでは、ニーモニック“UGT”、“ULT”、“UGE”、“ULE”の4種類の条件コードCCODのいずれかが使用される。したがって、条件指定テーブルTBL3では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0011”、“0100”、“0101”、“0110”にそれぞれ対応している。
プログラムカウンタ20のPC値は、命令メモリ30のアドレス(命令メモリ番地)に対応している。例えば、PC値“SPC1”、“EPC1”、“SPC2”、“EPC2”、“SPC3”、“EPC3”は、命令メモリ番地“D10”、“D20”、“D30”、“D40”、“D50”、“D60”にそれぞれ対応している。したがって、アセンブラコードの領域A、B、C、Dでは、プログラムの領域A、B、C、Dに対応した条件指定テーブルTBL0、TBL1、TBL2、TBL3がそれぞれ使用される。
このように、この実施形態では、条件指定部52は、複数の条件指定テーブルTBLを有し、参照する条件指定テーブルTBLをPC値に応じて切り替える。これにより、この実施形態では、プログラム全体で使用する条件コードCCODの全パターンを指定できる。また、この実施形態では、条件指定テーブルTBLの内容を書き換えるための書き換え命令をアセンブラコードに記述する必要がないため、アセンブラコードのコード量を図1−図5で説明した実施形態より低減できる。
図11は、図6に示したプロセッサ12のコードの別の例を示している。なお、図11では、条件インデックスCIDXおよび条件コードCCOD等の値を2進数で示している。図11の例では、プログラムはそれぞれの領域ごとに条件コードCCODに局所性が存在する。図11のプログラムでは、図10に示したプログラムの最後に領域E、Aが追加されている。プログラムおよびアセンブラコードの領域A、B、C、Dは、図10で説明したプログラムおよびアセンブラコードの領域A、B、C、Dと同様である。このため、プログラムおよびアセンブラコードの領域A、B、C、Dについては、詳細な説明を省略する。
プログラムの領域Eは、例えば、PC値が範囲SPC1−EPC1、範囲SPC2−EPC2および範囲SPC3−EPC3のいずれでもないプログラム領域である。例えば、プログラムの領域Eでは、ニーモニック“AL”、“EQ”、“VS”、“VC”の4種類の条件コードCCODのいずれかが使用される。したがって、プログラム全体で使用する条件コードCCODの全パターンを指定するためには、5通りの条件指定テーブルTBLが必要である。
このため、この実施形態では、領域A、B、C、D、Eの5つのうちの4つの領域に対応する条件指定テーブルTBLの内容を条件指定テーブルTBL0−TBL3に保持する。そして、この実施形態では、条件指定テーブルTBL0−TBL3のいずれかの内容を書き換え命令COMで書き換えることにより、残りの1つの領域に対応する。
例えば、条件指定テーブルTBL0−TBL3は、領域A、B、C、Dに対応する条件指定テーブルTBLの内容を保持する。そして、アセンブラコードの領域Eの最初に書き換え命令(テーブル書き換え(E))が記述され、条件指定テーブルTBL0は領域Eに応じた条件指定テーブルTBL0(E)に書き換えられる。したがって、条件指定テーブルTBL0(E)では、例えば、条件インデックスCIDXの“00”、“01”、“10”、“11”が条件コードCCODの“0000”、“0001”、“1101”、“1110”にそれぞれ対応している。
また、アセンブラコードの領域Eの後の領域Aでは、最初に書き換え命令(テーブル書き換え(A))が記述され、条件指定テーブルTBL0は領域Aに応じた内容(元の条件指定テーブルTBL0の内容)に書き換えられる。すなわち、条件指定テーブルTBL0は、領域A、Eに対応する条件指定テーブルTBLとして使用される。
このように、この実施形態では、複数の条件指定テーブルTBLの少なくとも1つの条件指定テーブルTBLの内容を書き換え命令COMで変更することにより、条件コードCCODの全パターンを指定できる。すなわち、複数の条件指定テーブルTBLの少なくとも1つは、書き換え命令COMで書き換え可能である。なお、条件指定部52は、条件指定テーブルTBL0以外の条件指定テーブルTBLを書き換えてもよい。例えば、条件指定部52は、条件指定テーブルTBL0以外の条件指定テーブルTBLを書き換えるとき、対応する領域に合わせて開始PC値SPCおよび終端PC値EPCを書き換える。
以上、この実施形態では、条件指定部52は、条件インデックスCIDXを条件コードCCODに変換するための複数の条件指定テーブルTBLを有している。例えば、条件指定部52は、参照する条件指定テーブルTBLをPC値に応じて切り替える。これにより、この実施形態では、プログラム全体で使用する条件コードCCODの全パターンを指定できる。
なお、条件インデックスCIDXのビット数は、条件コードCCODのビット数より少ない。すなわち、この実施形態では、条件コードCCODのビット数より少ないビット数の条件インデックスCIDXが命令COMに含まれる。これにより、この実施形態では、条件コードCCODを命令COMに含めるプロセッサに比べて、命令COMを格納する命令メモリ30のサイズを低減できる。
例えば、4ビットの条件コードCCODを有する命令COMのビット数が28ビットの場合、条件コードCCODの代わりに2ビットの条件インデックスCIDXを命令COMに含めることにより、命令COMのビット数は26ビットに削減される。このときには、命令メモリ30のサイズを約7%削減できる。なお、この実施形態では、条件指定テーブルTBLの内容を書き換え命令COMで変更することにより、条件コードCCODの全パターンを指定できる。
さらに、この実施形態では、条件指定部52は、複数の条件指定テーブルTBLを有し、参照する条件指定テーブルTBLをPC値に応じて切り替える。このため、この実施形態では、条件指定テーブルTBLの内容を書き換えるための書き換え命令COMをアセンブラコードに記述する回数を低減できる。したがって、この実施形態では、アセンブラコードのコード量を図1−図5で説明した実施形態より低減できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。