(57)【特許請求の範囲】
【請求項１】
実行条件を示す条件コードのビット数より少ないビット数の条件インデックスが所定のフィールドに指定される条件付き命令を含む複数の命令が格納される命令メモリと、
前記命令メモリから読み出した前記命令を解読し、前記命令が前記条件付き命令のとき、前記条件付き命令の前記所定のフィールドに指定された前記条件インデックスを取得するデコード部と、
前記デコード部で取得された前記条件インデックスに基づいて、前記条件コードを選択する条件指定部と、
ステータスフラグの値を保持するステータスレジスタと、
前記デコード部で解読された前記条件付き命令が有効か否かを前記条件指定部で選択された前記条件コードと前記ステータスフラグの値とに基づいて判定し、有効な前記条件付き命令に基づく演算を実行し、前記演算の実行結果に基づいて前記ステータスフラグの値を必要に応じて更新する実行部とを備え、
前記条件指定部は、
前記条件インデックスに対応する前記条件コードを保持する複数の条件指定テーブルを有し、
前記条件コードの選択に使用する条件指定テーブルをプログラムカウンタの値に基づいて選択し、選択した前記条件指定テーブルに基づいて、前記デコード部で取得された前記条件インデックスに対応する前記条件コードを選択すること
を特徴とするプロセッサ。
【請求項２】
前記条件指定部は、前記命令メモリから読み出される書き換え命令に基づいて、前記複数の条件指定テーブルの少なくとも１つの条件指定テーブルの内容を書き換えるテーブル書き換え部を有していること
を特徴とする請求項１記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関する。
【背景技術】
【０００２】
プロセッサの命令の一種である条件付き命令では、例えば、命令に付加された実行条件が成立したとき、命令に基づく演算の実行結果が有効になる。例えば、プロセッサは、条件付き命令の実行条件に対応するフラグを参照し、実行条件が成立しなかったとき、その命令の実行結果を無効にする（例えば、特許文献１参照。）。符号フラグ、ゼロフラグ、オーバーフローフラグ、キャリーフラグ等の複数のフラグが用意されているプロセッサでは、例えば、符号ありの大小比較、符号なしの大小比較、正負、オーバーフローの発生有無等の複数の実行条件に対応できる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１２１８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
条件付き命令は、例えば、実行条件を示す条件コードを有している。条件コードのビット長（ビット数）は、実行条件の数の増加に伴い増加する。このため、複数の実行条件に対応したプロセッサの命令のビット長は、条件コードのビット長の増加に伴い、増加する。この結果、命令が記憶されている命令メモリのサイズ（容量）が大きくなる。
【０００５】
１つの側面では、本発明の目的は、命令メモリのサイズを低減することである。
【課題を解決するための手段】
【０００６】
本発明の一形態では、プロセッサは、実行条件を示す条件コードのビット数より少ないビット数の条件インデックスが所定のフィールドに指定される条件付き命令を含む複数の命令が格納される命令メモリと、命令メモリから読み出した命令を解読し、命令が条件付き命令のとき、条件付き命令の所定のフィールドに指定された条件インデックスを取得するデコード部と、デコード部で取得された条件インデックスに基づいて、条件コードを選択する条件指定部と、ステータスフラグの値を保持するステータスレジスタと、デコード部で解読された条件付き命令が有効か否かを条件指定部で選択された条件コードとステータスフラグの値とに基づいて判定し、有効な条件付き命令に基づく演算を実行し、演算の実行結果に基づいてステータスフラグの値を必要に応じて更新する実行部とを有している。条件指定部は、条件インデックスに対応する条件コードを保持する複数の条件指定テーブルを有し、条件コードの選択に使用する条件指定テーブルをプログラムカウンタの値に基づいて選択し、選択した条件指定テーブルに基づいて、デコード部で取得された条件インデックスに対応する条件コードを選択する。
【発明の効果】
【０００７】
命令メモリのサイズを低減できる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態におけるプロセッサの例を示している。
【図２】図１に示した条件指定部の一例を示している。
【図３】条件コードとステータスフラグの対応の一例を示している。
【図４】図１に示したプロセッサにおける条件インデックスから条件コードへの変換の一例を示している。
【図５】図１に示したプロセッサのコードの一例を示している。
【図６】別の実施形態におけるプロセッサの一例を示している。
【図７】図６に示した条件指定部の一例を示している。
【図８】図７に示した条件指定テーブル部が有効となるＰＣ値の範囲の一例を示している。
【図９】図６に示したプロセッサにおける条件インデックスから条件コードへの変換の一例を示している。
【図１０】図６に示したプロセッサのコードの一例を示している。
【図１１】図６に示したプロセッサのコードの別の例を示している。
【発明を実施するための形態】
【０００９】
以下、実施形態を図面を用いて説明する。
【００１０】
図１は、一実施形態におけるプロセッサ１０の例を示している。プロセッサ１０は、条件付き命令に対応したプロセッサである。条件付き命令では、例えば、命令に付加された実行条件が成立したとき、命令に基づく演算の実行結果が有効になる。例えば、条件付き命令の所定のフィールドに、実行条件を示す条件コードＣＣＯＤのビット数より少ないビット数の条件インデックスＣＩＤＸが指定される。
【００１１】
プロセッサ１０は、例えば、プログラムカウンタ２０、命令メモリ３０、デコード部４０、条件指定部５０、ステータスレジスタ６０、実行部７０、レジスタファイル８０および制御回路９０を有している。なお、図１では、図を見やすくするために、制御回路９０から各ブロックに供給される制御信号の記載を省略している。例えば、制御回路９０は、プロセッサ１０の全体の動作を制御する。
【００１２】
プログラムカウンタ２０は、例えば、プロセッサ１０が実行する命令のアドレスを示す値（以下、ＰＣ値とも称する）を、命令メモリ３０に出力する。例えば、プログラムカウンタ２０の値（ＰＣ値）は、プロセッサ１０が命令を実行する度に、増加する。
【００１３】
命令メモリ３０は、例えば、ＳＲＡＭである。なお、命令メモリ３０は、ＳＲＡＭ以外のメモリでもよい。命令メモリ３０には、例えば、条件付き命令を含む複数の命令ＣＯＭが格納される。すなわち、命令メモリ３０には、実行条件を示す条件コードＣＣＯＤのビット数より少ないビット数の条件インデックスＣＩＤＸが所定のフィールドに指定される条件付き命令を含む複数の命令ＣＯＭが格納される。
【００１４】
そして、命令メモリ３０は、ＰＣ値が示すアドレスの命令ＣＯＭを、デコード部４０に出力する。これにより、命令メモリ３０から命令ＣＯＭがフェッチ（取得）される。そして、デコード部４０は、命令メモリ３０から読み出した命令ＣＯＭを解読する。
【００１５】
例えば、命令ＣＯＭが条件付き命令のとき、デコード部４０は、命令ＣＯＭの解読結果のうち、条件インデックスＣＩＤＸを条件指定部５０に出力し、条件インデックスＣＩＤＸ以外の解読結果ＤＣＯＭを実行部７０に出力する。すなわち、デコード部４０は、命令ＣＯＭが条件付き命令のとき、命令ＣＯＭから条件インデックスＣＩＤＸを取り出し、取り出した条件インデックスＣＩＤＸを条件指定部５０に出力する。
【００１６】
このように、デコード部４０は、命令メモリ３０から読み出した命令ＣＯＭを解読し、命令ＣＯＭが条件付きで実行される条件付き命令のとき、条件付き命令の所定のフィールドに指定された条件インデックスＣＩＤＸを取得する。
【００１７】
実行条件（条件コードＣＣＯＤ）は、例えば、プログラムの性質上、命令メモリ３０の領域に対して局所性が存在する。例えば、符号なし変数の比較を行う部分と、符号あり変数の比較を行う部分とは、異なるサブルーチンや、プログラム内の別々の特定箇所に固まる傾向にある。このため、条件コードＣＣＯＤの局所性が認められる領域では、命令で使用される条件コードＣＣＯＤの種類が、条件コードＣＣＯＤの全パターン数より少なくなる傾向にある。したがって、条件コードＣＣＯＤの局所性が認められる領域では、命令で使用される条件コードＣＣＯＤに対応させる条件インデックスＣＩＤＸのビット数を、条件コードＣＣＯＤのビット数より少なくできる。
【００１８】
なお、この実施形態では、例えば、条件指定テーブルＴＢＬの内容を専用命令で変更することにより、条件コードＣＣＯＤの全パターンを指定できる。例えば、デコード部４０は、命令ＣＯＭが条件指定テーブルＴＢＬの内容を書き換えるための書き換え命令のとき、命令ＣＯＭを解読して得られるテーブル書き換え情報ＴＩＮＦを条件指定部５０に出力する。テーブル書き換え情報ＴＩＮＦは、例えば、条件指定テーブルＴＢＬの書き換えを指示する信号と、条件指定テーブルＴＢＬの内容（書き換え後の内容）を示すデータとを有している。
【００１９】
条件指定部５０は、デコード部４０で取得された条件インデックスＣＩＤＸに基づいて、条件コードＣＣＯＤを選択する。例えば、条件指定部５０は、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを保持する条件指定テーブルＴＢＬを有している。すなわち、条件指定部５０は、条件インデックスＣＩＤＸを条件コードＣＣＯＤに変換するための条件指定テーブルＴＢＬを有している。
【００２０】
そして、条件指定部５０は、デコード部４０で取得された条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを条件指定テーブルＴＢＬに基づいて選択する。条件指定部５０で選択された条件コードＣＣＯＤは、実行部７０に転送される。すなわち、条件指定部５０は、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを実行部７０に出力する。
【００２１】
このように、条件指定部５０は、条件インデックスＣＩＤＸを条件コードＣＣＯＤに変換する。また、条件指定部５０は、条件指定テーブルＴＢＬの内容を書き換えることを示すテーブル書き換え情報ＴＩＮＦを受けたとき、条件指定テーブルＴＢＬの内容をテーブル書き換え情報ＴＩＮＦに基づいて書き換える。例えば、条件指定部５０は、図２に示すように、命令メモリ３０から読み出される書き換え命令ＣＯＭに基づいて条件指定テーブルＴＢＬの内容を書き換えるテーブル書き換え部ＷＣＴＬを有している。
【００２２】
ステータスレジスタ６０は、ステータスフラグＳＺＶＣの値を保持する。ステータスフラグＳＺＶＣは、例えば、実行部７０で実行された演算や比較の結果を示す数ビットのフラグである。すなわち、実行部７０で実行された演算や比較の結果は、数ビットのステータスフラグＳＺＶＣとして保持される。例えば、プロセッサ１０では、４ビットのステータスフラグＳＺＶＣが用意されている。以下、ステータスフラグＳＺＶＣの各ビットを、符号フラグＳ、ゼロフラグＺ、オーバーフローフラグＶ、キャリーフラグＣとも称する。
【００２３】
符号フラグＳは、例えば、演算結果が負のとき“１”にセットされ、演算結果が正のとき“０”にクリアされる。ゼロフラグＺは、例えば、演算結果がゼロのとき“１”にセットされ、演算結果がゼロでないとき“０”にクリアされる。オーバーフローフラグＶは、例えば、演算結果にオーバーフローが発生したとき“１”にセットされ、演算結果にオーバーフローが発生していないとき“０”にクリアされる。キャリーフラグＣは、例えば、演算結果にキャリーが発生したとき“１”にセットされ、演算結果にキャリーが発生していないとき“０”にクリアされる。あるいは、キャリーフラグＣは、例えば、演算結果にボローが発生したとき“１”にセットされ、演算結果にボローが発生していないとき“０”にクリアされる。
【００２４】
なお、ステータスフラグＳＺＶＣのビット数は、４ビットに限定されない。すなわち、ステータスフラグＳＺＶＣの種類は、４つに限定されない。
【００２５】
実行部７０は、例えば、演算部７２および判定部７４を有している。演算部７２は、例えば、四則演算や論理演算等を実行する算術論理演算ユニット（ＡＬＵ：Arithmetic Logic Unit）である。演算部７２は、解読結果ＤＣＯＭをデコード部４０から受け、解読結果ＤＣＯＭに基づく演算の実行結果ＲＳＬＴを判定部７４に出力する。
【００２６】
例えば、演算部７２は、デコード部４０の解読結果ＤＣＯＭに基づいて、命令ＣＯＭのオペランド等をレジスタファイル８０から読み出し、四則演算や論理演算等を実行する。このように、演算部７２は、命令ＣＯＭに基づく演算を実行する。そして、演算部７２は、実行結果ＲＳＬＴを判定部７４に出力する。例えば、命令ＣＯＭが演算命令のとき、実行結果ＲＳＬＴには、ステータスレジスタ６０の更新情報や演算結果が含まれる。
【００２７】
判定部７４は、例えば、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを条件指定部５０から受ける。また、判定部７４は、ステータスレジスタ６０からステータスフラグＳＺＶＣの値を読み出す。そして、判定部７４は、条件コードＣＣＯＤとステータスフラグＳＺＶＣの値とに基づいて、演算部７２で実行された命令ＣＯＭが有効か否かを判定する。
【００２８】
演算部７２で実行された命令ＣＯＭが有効の場合、判定部７４は、例えば、演算部７２から受けた実行結果ＲＳＬＴに基づいて、命令ＣＯＭの演算結果をレジスタファイル８０に必要に応じて書き込む。また、演算部７２で実行された命令ＣＯＭが有効の場合、判定部７４は、実行結果ＲＳＬＴに基づいて、ステータスレジスタ６０に保持されているステータスフラグＳＺＶＣの値を必要に応じて更新する。ステータスフラグＳＺＶＣ等を更新する必要のない条件付き命令ＣＯＭは、例えば、レジスタファイル８０のデータをプロセッサ１０の外部のメモリ等に書き込むための条件付きストア命令である。なお、演算部７２で実行された命令ＣＯＭが有効でない場合、命令ＣＯＭの実行結果ＲＳＬＴは、レジスタファイル８０等に反映されない。
【００２９】
このように、実行部７０は、デコード部４０で解読された条件付き命令ＣＯＭが有効か否かを条件指定部５０で選択された条件コードＣＣＯＤとステータスフラグＳＺＶＣの値とに基づいて判定する。そして、実行部７０は、有効な条件付き命令ＣＯＭに基づく演算を実行し、演算の実行結果に基づいてステータスフラグＳＺＶＣの値を更新する。
【００３０】
レジスタファイル８０は、オペランド等のデータが格納されるレジスタである。なお、プロセッサ１０の構成は、この例に限定されない。例えば、演算部７２は、判定部７４で有効でないと判定された命令ＣＯＭを実行しないように設計されてもよい。このときには、演算部７２は、例えば、命令ＣＯＭが有効か否かの情報（条件付き命令ＣＯＭの実行条件が成立したか否かの情報）を判定部７４から受ける。そして、演算部７２は、実行条件が成立した命令ＣＯＭに基づく演算を実行し、実行結果をレジスタファイル８０およびステータスフラグＳＺＶＣに必要に応じて反映する。
【００３１】
図２は、図１に示した条件指定部５０の一例を示している。条件指定部５０は、例えば、条件指定テーブルＴＢＬ、セレクタＳＥＬおよびテーブル書き換え部ＷＣＴＬを有している。条件指定テーブルＴＢＬは、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを保持する複数のレジスタＦＦ（ＦＦ０−ＦＦ３）を有している。例えば、条件インデックスＣＩＤＸが２ビットのとき、条件指定テーブルＴＢＬ内には、条件コードＣＣＯＤが４通り存在する。４通りの条件コードＣＣＯＤは、条件指定テーブルＴＢＬ内のレジスタＦＦ（ＦＦ０−ＦＦ３）にそれぞれ保持される。なお、レジスタＦＦの数は、４つに限定されない。すなわち、条件インデックスＣＩＤＸのビット数は、２ビットに限定されない。
【００３２】
セレクタＳＥＬは、条件指定テーブルＴＢＬの各レジスタＦＦの値を受ける。また、セレクタＳＥＬは、デコード部４０で解読された命令ＣＯＭが条件付き命令のとき、条件インデックスＣＩＤＸをデコード部４０から受ける。そして、セレクタＳＥＬは、出力するレジスタＦＦの値（条件コードＣＣＯＤ）を条件インデックスＣＩＤＸに基づいてレジスタＦＦ０−ＦＦ３の値から選択する。すなわち、セレクタＳＥＬは、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択して出力する。
【００３３】
テーブル書き換え部ＷＣＴＬは、例えば、テーブル書き換え情報ＴＩＮＦを受け、条件指定テーブルＴＢＬのレジスタＦＦの値を設定する。例えば、テーブル書き換え部ＷＣＴＬは、条件指定テーブルＴＢＬの内容を書き換えることを示すテーブル書き換え情報ＴＩＮＦを受けたとき、条件指定テーブルＴＢＬのレジスタＦＦの値（条件コードＣＣＯＤ）をテーブル書き換え情報ＴＩＮＦに基づいて書き換える。
【００３４】
なお、テーブル書き換え部ＷＣＴＬは、一部のレジスタＦＦ（更新する条件コードＣＣＯＤが保持されているレジスタＦＦ）の値を書き換えてもよいし、全てのレジスタＦＦの値を書き換えてもよい。このように、テーブル書き換え部ＷＣＴＬは、命令メモリ３０から読み出される書き換え命令ＣＯＭに基づいて、条件指定テーブルＴＢＬの内容を書き換える。
【００３５】
図３は、条件コードＣＣＯＤとステータスフラグＳＺＶＣの対応の一例を示している。図３では、括弧内に２進数で表した条件コードＣＣＯＤを示している。図中のステータスフラグＳＺＶＣの“ｘ”は、“０”および“１”のどちらでもよいこと（ドントケア：don’t care）を示している。以下、ステータスフラグＳＺＶＣの値を、符号フラグＳ、ゼロフラグＺ、オーバーフローフラグＶ、キャリーフラグＣの順にまとめて示すときもある。例えば、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”であると示したときは、ゼロフラグＺが“１”で、その他のフラグが“ｘ”であることを示している。条件コードＣＣＯＤは、例えば、“０”から“１４”までの１５通り用意されている。
【００３６】
条件コードＣＣＯＤの“０”（ニーモニックの“ＡＬ”）は、例えば、無条件で命令ＣＯＭを有効にするときに使用される。例えば、条件コードＣＣＯＤの“０”では、ステータスフラグＳＺＶＣの値に拘わらず、命令ＣＯＭが有効になる。
【００３７】
条件コードＣＣＯＤの“１”（ニーモニックの“ＥＱ”）は、例えば、比較結果が等しいことを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１”では、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”のときに命令ＣＯＭが有効になる。条件コードＣＣＯＤの“２”（ニーモニックの“ＮＥ”）は、例えば、比較結果が等しくないことを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“２”では、ステータスフラグＳＺＶＣが“ｘ０ｘｘ”のときに命令ＣＯＭが有効になる。
【００３８】
条件コードＣＣＯＤの“３”（ニーモニックの“ＵＧＴ”）は、例えば、符号なし変数の比較結果が“大”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“３”では、ステータスフラグＳＺＶＣが“ｘ０ｘ０”のときに命令ＣＯＭが有効になる。
【００３９】
条件コードＣＣＯＤの“４”（ニーモニックの“ＵＬＴ”）は、例えば、符号なし変数の比較結果が“小”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“４”では、ステータスフラグＳＺＶＣが“ｘｘｘ１”のときに命令ＣＯＭが有効になる。
【００４０】
条件コードＣＣＯＤの“５”（ニーモニックの“ＵＧＥ”）は、例えば、符号なし変数の比較結果が“以上”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“５”では、ステータスフラグＳＺＶＣが“ｘｘｘ０”のときに命令ＣＯＭが有効になる。
【００４１】
条件コードＣＣＯＤの“６”（ニーモニックの“ＵＬＥ”）は、例えば、符号なし変数の比較結果が“以下”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“６”では、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”または“ｘ０ｘ１”のときに命令ＣＯＭが有効になる。
【００４２】
条件コードＣＣＯＤの“７”（ニーモニックの“ＳＧＴ”）は、例えば、符号あり変数の比較結果が“大”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“７”では、ステータスフラグＳＺＶＣが“０００ｘ”または“１０１ｘ”のときに命令ＣＯＭが有効になる。
【００４３】
条件コードＣＣＯＤの“８”（ニーモニックの“ＳＬＴ”）は、例えば、符号あり変数の比較結果が“小”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“８”では、ステータスフラグＳＺＶＣが“００１ｘ”または“１００ｘ”のときに命令ＣＯＭが有効になる。
【００４４】
条件コードＣＣＯＤの“９”（ニーモニックの“ＳＧＥ”）は、例えば、符号あり変数の比較結果が“以上”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“９”では、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”、“０００ｘ”および“１０１ｘ”のいずれかのときに命令ＣＯＭが有効になる。
【００４５】
条件コードＣＣＯＤの“１０”（ニーモニックの“ＳＬＥ”）は、例えば、符号あり変数の比較結果が“以下”であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１０”では、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”、“００１ｘ”および“１００ｘ”のいずれかのときに命令ＣＯＭが有効になる。
【００４６】
条件コードＣＣＯＤの“１１”（ニーモニックの“ＰＬ”）は、例えば、判定対象の命令ＣＯＭより前の演算結果が正であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１１”では、ステータスフラグＳＺＶＣが“０ｘｘｘ”のときに命令ＣＯＭが有効になる。
【００４７】
条件コードＣＣＯＤの“１２”（ニーモニックの“ＭＩ”）は、例えば、判定対象の命令ＣＯＭより前の演算結果が負であることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１２”では、ステータスフラグＳＺＶＣが“１ｘｘｘ”のときに命令ＣＯＭが有効になる。
【００４８】
条件コードＣＣＯＤの“１３”（ニーモニックの“ＶＳ”）は、例えば、判定対象の命令ＣＯＭより前の演算結果にオーバーフローが発生していることを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１３”では、ステータスフラグＳＺＶＣが“ｘｘ１ｘ”のときに命令ＣＯＭが有効になる。
【００４９】
条件コードＣＣＯＤの“１４”（ニーモニックの“ＶＣ”）は、例えば、判定対象の命令ＣＯＭより前の演算結果にオーバーフローが発生していないことを実行条件にする場合に使用される。例えば、条件コードＣＣＯＤの“１４”では、ステータスフラグＳＺＶＣが“ｘｘ０ｘ”のときに命令ＣＯＭが有効になる。
【００５０】
このように、プロセッサ１０では、判定対象の命令ＣＯＭの条件コードＣＣＯＤと、判定対象の命令ＣＯＭより前の演算で設定されたステータスフラグＳＺＶＣとに基づいて、条件付き命令ＣＯＭを実行するか否かを制御する。
【００５１】
図４は、図１に示したプロセッサ１０における条件インデックスＣＩＤＸから条件コードＣＣＯＤへの変換の一例を示している。なお、図４では、条件インデックスＣＩＤＸおよび条件コードＣＣＯＤ等の値を２進数で示している。また、図４の“ｘ”の意味は、図３の“ｘ”と同じである。プロセッサ１０が読み込む条件付き命令ＣＯＭのフォーマットでは、条件コードＣＣＯＤの代わりに、条件コードＣＣＯＤより短いビット長の条件インデックスＣＩＤＸのフィールドが存在する。このように、条件付き命令ＣＯＭの所定のフィールドに、実行条件を示す条件コードＣＣＯＤのビット数より少ないビット数の条件インデックスＣＩＤＸが指定される。
【００５２】
条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”に対応する条件コードＣＣＯＤのそれぞれの値は、例えば、図２に示したレジスタＦＦ０、ＦＦ１、ＦＦ２、ＦＦ３にそれぞれ保持される。
【００５３】
条件指定テーブルＴＢＬ（Ａ）は、命令ＣＯＭ１の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。例えば、条件指定テーブルＴＢＬ（Ａ）では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００００”、“０００１”、“００１１”、“０１１０”にそれぞれ対応している。
【００５４】
命令ＣＯＭ１は、例えば、符号なし変数の比較を行う部分を含むプログラム領域の条件付き命令ＣＯＭである。デコード部４０は、命令ＣＯＭ１から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ１の条件インデックスＣＩＤＸは、“１１”である。条件指定部５０は、条件指定テーブルＴＢＬ（Ａ）に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“０１１０”を選択する。これにより、命令ＣＯＭ１の条件コードＣＣＯＤ（実行条件）として“０１１０”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”または“ｘ０ｘ１”のときに命令ＣＯＭ１を有効と判定する。
【００５５】
命令ＣＯＭ２は、例えば、条件指定テーブルＴＢＬの内容を条件指定テーブルＴＢＬ（Ａ）から条件指定テーブルＴＢＬ（Ｂ）に変更する書き換え命令ＣＯＭである。条件指定テーブルＴＢＬ’は、条件指定テーブルＴＢＬの更新過程のイメージを示している。例えば、条件指定部５０は、条件インデックスＣＩＤＸの“１０”に対応する条件コードＣＣＯＤの値（レジスタＦＦ２の値）を、“００１１”から“０１１１”に書き換える。また、条件指定部５０は、条件インデックスＣＩＤＸの“１１”に対応する条件コードＣＣＯＤの値（レジスタＦＦ３の値）を、“０１１０”から“１０１０”に書き換える。これにより、条件指定テーブルＴＢＬは、条件指定テーブルＴＢＬ（Ｂ）の内容に更新される。
【００５６】
条件指定テーブルＴＢＬ（Ｂ）は、命令ＣＯＭ３の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。例えば、条件指定テーブルＴＢＬ（Ｂ）では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００００”、“０００１”、“０１１１”、“１０１０”にそれぞれ対応している。
【００５７】
命令ＣＯＭ３は、例えば、符号あり変数の比較を行う部分を含むプログラム領域の条件付き命令ＣＯＭである。デコード部４０は、命令ＣＯＭ３から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ３の条件インデックスＣＩＤＸは、“１１”である。条件指定部５０は、条件指定テーブルＴＢＬ（Ｂ）に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“１０１０”を選択する。これにより、命令ＣＯＭ３の条件コードＣＣＯＤ（実行条件）として“１０１０”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”、“００１ｘ”および“１００ｘ”のいずれかのときに命令ＣＯＭ３を有効と判定する。
【００５８】
図５は、図１に示したプロセッサ１０のコードの一例を示している。なお、図５では、条件インデックスＣＩＤＸおよび条件コードＣＣＯＤ等の値を２進数で示している。図５の例では、プログラムはそれぞれの領域ごとに条件コードＣＣＯＤに局所性が存在する。例えば、プログラムの領域Ａでは、ニーモニック“ＡＬ”、“ＥＱ”、“ＵＧＴ”、“ＵＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。プログラムの領域Ｂでは、例えば、ニーモニック“ＡＬ”、“ＥＱ”、“ＳＧＴ”、“ＳＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。
【００５９】
プログラムの領域Ｃでは、例えば、ニーモニック“ＡＬ”、“ＥＱ”、“ＮＥ”、“ＳＬＴ”の４種類の条件コードＣＣＯＤのいずれかが使用される。プログラムの領域Ｄでは、例えば、ニーモニック“ＵＧＴ”、“ＵＬＴ”、“ＵＧＥ”、“ＵＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。アセンブラコードでは、それぞれの領域Ａ、Ｂ、Ｃ、Ｄの最初に書き換え命令（テーブル書き換え（Ａ）、（Ｂ）、（Ｃ）、（Ｄ））が記述され、条件指定テーブルＴＢＬはそれぞれの領域Ａ、Ｂ、Ｃ、Ｄに応じた内容に設定される。
【００６０】
例えば、条件指定テーブルＴＢＬ（Ａ）は、領域Ａ内の命令ＣＯＭの条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。条件指定テーブルＴＢＬ（Ａ）では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“００１１”、“０１１０”にそれぞれ対応している。
【００６１】
条件指定テーブルＴＢＬ（Ｂ）は、領域Ｂ内の命令ＣＯＭの条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。例えば、条件指定テーブルＴＢＬ（Ｂ）では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“０１１１”、“１０１０”にそれぞれ対応している。
【００６２】
条件指定テーブルＴＢＬ（Ｃ）は、領域Ｃ内の命令ＣＯＭの条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。例えば、条件指定テーブルＴＢＬ（Ｃ）では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“００１０”、“１０００”にそれぞれ対応している。
【００６３】
条件指定テーブルＴＢＬ（Ｄ）は、領域Ｄ内の命令ＣＯＭの条件コードＣＣＯＤを選択する際に使用される条件指定テーブルＴＢＬを示している。例えば、条件指定テーブルＴＢＬ（Ｄ）では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００１１”、“０１００”、“０１０１”、“０１１０”にそれぞれ対応している。
【００６４】
このように、この実施形態では、条件インデックスＣＩＤＸのビット数が条件コードＣＣＯＤのビット数より少ないために、プログラム全体で使用する条件コードＣＣＯＤの全パターンを指定できないとき、条件指定テーブルＴＢＬの内容を書き換え命令ＣＯＭで書き換える。これにより、この実施形態では、プログラム全体で使用する条件コードＣＣＯＤの全パターンを指定できる。
【００６５】
以上、この実施形態では、プロセッサ１０は、条件付き命令ＣＯＭに含まれる条件インデックスＣＩＤＸを取得するデコード部４０、デコード部４０で取得された条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する条件指定部５０等を有している。なお、条件インデックスＣＩＤＸのビット数は、条件コードＣＣＯＤのビット数より少ない。すなわち、この実施形態では、条件コードＣＣＯＤのビット数より少ないビット数の条件インデックスＣＩＤＸが命令ＣＯＭに含まれる。
【００６６】
これにより、この実施形態では、条件コードＣＣＯＤを命令ＣＯＭに含めるプロセッサに比べて、命令ＣＯＭを格納する命令メモリ３０のサイズを低減できる。例えば、４ビットの条件コードＣＣＯＤを有する命令ＣＯＭのビット数が２８ビットの場合、条件コードＣＣＯＤの代わりに２ビットの条件インデックスＣＩＤＸを命令ＣＯＭに含めることにより、命令ＣＯＭのビット数は２６ビットに削減される。このときには、命令メモリ３０のサイズを約７％削減できる。なお、この実施形態では、条件指定テーブルＴＢＬの内容を書き換え命令ＣＯＭで変更することにより、条件コードＣＣＯＤの全パターンを指定できる。
【００６７】
図６は、別の実施形態におけるプロセッサ１２の一例を示している。図１−図５で説明した要素と同様の要素については、同様の符号を付し、これ等については、詳細な説明を省略する。例えば、プロセッサ１２が読み込む条件付き命令ＣＯＭのフォーマットでは、条件コードＣＣＯＤの代わりに、条件コードＣＣＯＤより短いビット長の条件インデックスＣＩＤＸのフィールドが存在する。プロセッサ１２は、図１に示した条件指定部５０の代わりに、条件指定部５２を有している。
【００６８】
例えば、プロセッサ１２は、プログラムカウンタ２０、命令メモリ３０、デコード部４０、条件指定部５２、ステータスレジスタ６０、実行部７０、レジスタファイル８０および制御回路９０を有している。プログラムカウンタ２０、命令メモリ３０、デコード部４０、ステータスレジスタ６０、実行部７０、レジスタファイル８０および制御回路９０は、図１−図５で説明した実施形態と同様である。例えば、条件指定部５２以外のプロセッサ１２の構成は、図１−図５で説明した実施形態と同一である。
【００６９】
条件指定部５２は、条件インデックスＣＩＤＸを条件コードＣＣＯＤに変換するための複数の条件指定テーブルＴＢＬ（ＴＢＬ０−ＴＢＬ３）を有している。条件指定部５２は、例えば、プログラムカウンタ２０からＰＣ値を受ける。また、条件指定部５２は、例えば、デコード部４０で解読された命令ＣＯＭが条件付き命令のとき、条件インデックスＣＩＤＸをデコード部４０から受ける。例えば、条件指定部５２は、条件コードＣＣＯＤの選択に使用する条件指定テーブルＴＢＬをプログラムカウンタ２０のＰＣ値に基づいて選択する。そして、条件指定部５２は、選択した条件指定テーブルＴＢＬに基づいて、デコード部４０で取得された条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する。
【００７０】
すなわち、条件指定部５２は、デコード部４０から受けた条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを、ＰＣ値に基づいて選択した条件指定テーブルＴＢＬを参照して選択する。条件指定部５２で選択された条件コードＣＣＯＤは、実行部７０に転送される。このように、条件指定部５２は、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを実行部７０に出力する。
【００７１】
また、条件指定部５２は、条件指定テーブルＴＢＬの内容を書き換えることを示すテーブル書き換え情報ＴＩＮＦを受けたとき、条件指定テーブルＴＢＬの内容をテーブル書き換え情報ＴＩＮＦに基づいて書き換える。
【００７２】
なお、プロセッサ１２の構成は、この例に限定されない。例えば、条件指定部５２は、書き換え命令ＣＯＭを使用せずに条件指定テーブルＴＢＬの内容を書き換え可能に設計されもよい。すなわち、条件指定テーブルＴＢＬは、プロセッサ１２の外部から値を直接更新されてもよい。
【００７３】
図７は、図６に示した条件指定部５２の一例を示している。条件指定部５２は、例えば、４つの条件指定テーブルＴＢＬ（ＴＢＬ０−ＴＢＬ３）と、４つのセレクタＳＥＬ（ＳＥＬ０−ＳＥＬ３）と、コード選択部ＳＥＬＵと、テーブル書き換え部ＷＣＴＬ２とを有している。なお、条件指定テーブルＴＢＬおよびセレクタＳＥＬの数は、４つに限定されない。
【００７４】
また、条件指定部５２は、例えば、条件指定テーブルＴＢＬ１−ＴＢＬ３が有効となるＰＣ値の範囲を保持するレジスタを有している。条件指定テーブルＴＢＬ１−ＴＢＬ３が有効となるＰＣ値の範囲を保持するレジスタは、コード選択部ＳＥＬＵ内に設けられてもよいし、コード選択部ＳＥＬＵの外部に設けられてもよい。あるいは、条件指定テーブルＴＢＬ１−ＴＢＬ３が有効となるＰＣ値の範囲を保持するレジスタは、条件指定部５２の外部に設けられてもよい。条件指定テーブルＴＢＬ１−ＴＢＬ３が有効となるＰＣ値の範囲は、例えば、図８に示すように、値“ＳＰＣ１”、“ＥＰＣ１”の組と、値“ＳＰＣ２”、“ＥＰＣ２”の組と、値“ＳＰＣ３”、“ＥＰＣ３”の組とによりそれぞれ設定される。
【００７５】
ここで、例えば、終端ＰＣ値“ＥＰＣ１”は、開始ＰＣ値“ＳＰＣ１”より大きく、開始ＰＣ値“ＳＰＣ２”より小さい値である。また、終端ＰＣ値“ＥＰＣ２”は、例えば、開始ＰＣ値“ＳＰＣ２”より大きく、開始ＰＣ値“ＳＰＣ３”より小さい値である。そして、終端ＰＣ値“ＥＰＣ３”は、例えば、開始ＰＣ値“ＳＰＣ３”より大きい値である。
【００７６】
条件指定テーブルＴＢＬ０−ＴＢＬ３およびセレクタＳＥＬ０−ＳＥＬ３は、例えば、図２に示した条件指定テーブルＴＢＬおよびセレクタＳＥＬと同様である。例えば、各条件指定テーブルＴＢＬは、条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを保持する４つのレジスタＦＦ（ＦＦ０−ＦＦ３）を有している。セレクタＳＥＬは、例えば、条件指定テーブルＴＢＬに対応して設けられている。
【００７７】
各セレクタＳＥＬは、各条件指定テーブルＴＢＬの各レジスタＦＦの値（条件コードＣＣＯＤ）を受ける。例えば、セレクタＳＥＬ０は、条件指定テーブルＴＢＬ０の各レジスタＦＦの値を受ける。そして、各セレクタＳＥＬは、条件インデックスＣＩＤＸに対応するレジスタＦＦの値を選択し、選択したレジスタＦＦの値をコード選択部ＳＥＬＵに出力する。
【００７８】
コード選択部ＳＥＬＵは、プログラムカウンタ２０のＰＣ値“ＰＣ”と各セレクタＳＥＬで選択されたレジスタＦＦの値とを受ける。また、コード選択部ＳＥＬＵは、例えば、条件指定テーブルＴＢＬ１−ＴＢＬ３の開始ＰＣ値“ＳＰＣ１−ＳＰＣ３”と、条件指定テーブルＴＢＬ１−ＴＢＬ３の終端ＰＣ値“ＥＰＣ１−ＥＰＣ３”とを受ける。そして、コード選択部ＳＥＬＵは、開始ＰＣ値“ＳＰＣ１−ＳＰＣ３”と終端ＰＣ値“ＥＰＣ１−ＥＰＣ３”とプログラムカウンタ２０のＰＣ値“ＰＣ”とに基づいて、出力するレジスタＦＦの値（条件コードＣＣＯＤ）を選択する。
【００７９】
例えば、プログラムカウンタ２０のＰＣ値“ＰＣ”が開始ＰＣ値“ＳＰＣ１”と終端ＰＣ値“ＥＰＣ１”との間（以下、範囲ＳＰＣ１−ＥＰＣ１とも称する）にあるとき、コード選択部ＳＥＬＵは、セレクタＳＥＬ１から受けたレジスタＦＦの値を選択する。また、例えば、プログラムカウンタ２０のＰＣ値“ＰＣ”が開始ＰＣ値“ＳＰＣ２”と終端ＰＣ値“ＥＰＣ２”との間（以下、範囲ＳＰＣ２−ＥＰＣ２とも称する）にあるとき、コード選択部ＳＥＬＵは、セレクタＳＥＬ２から受けたレジスタＦＦの値を選択する。
【００８０】
そして、例えば、プログラムカウンタ２０のＰＣ値“ＰＣ”が開始ＰＣ値“ＳＰＣ３”と終端ＰＣ値“ＥＰＣ３”との間（以下、範囲ＳＰＣ３−ＥＰＣ３とも称する）にあるとき、コード選択部ＳＥＬＵは、セレクタＳＥＬ３から受けたレジスタＦＦの値を選択する。なお、プログラムカウンタ２０のＰＣ値“ＰＣ”が範囲ＳＰＣ１−ＥＰＣ１、範囲ＳＰＣ２−ＥＰＣ２および範囲ＳＰＣ３−ＥＰＣ３のいずれでもないとき、コード選択部ＳＥＬＵは、例えば、セレクタＳＥＬ０から受けたレジスタＦＦの値を選択する。
【００８１】
テーブル書き換え部ＷＣＴＬ２は、例えば、テーブル書き換え情報ＴＩＮＦを受け、条件指定テーブルＴＢＬのレジスタＦＦの値を設定する。例えば、テーブル書き換え部ＷＣＴＬ２は、条件指定テーブルＴＢＬの内容を書き換えることを示すテーブル書き換え情報ＴＩＮＦを受けたとき、条件指定テーブルＴＢＬのレジスタＦＦの値（条件コードＣＣＯＤ）をテーブル書き換え情報ＴＩＮＦに基づいて書き換える。
【００８２】
このように、テーブル書き換え部ＷＣＴＬ２は、命令メモリ３０から読み出される書き換え命令ＣＯＭに基づいて、複数の条件指定テーブルＴＢＬの少なくとも１つの条件指定テーブルＴＢＬの内容を書き換える。なお、テーブル書き換え部ＷＣＴＬ２は、一部のレジスタＦＦ（更新する条件コードＣＣＯＤが保持されているレジスタＦＦ）の値を書き換えてもよいし、全てのレジスタＦＦの値を書き換えてもよい。
【００８３】
また、条件指定部５２の構成は、この例に限定されない。例えば、条件指定部５２は、書き換え命令ＣＯＭを使用せずに条件指定テーブルＴＢＬの内容を書き換え可能に設計されもよい。このときには、条件指定部５２は、テーブル書き換え部ＷＣＴＬ２が省かれて設計されてもよい。
【００８４】
図８は、図７に示した条件指定テーブル部ＴＢＬ１−ＴＢＬ３が有効となるＰＣ値の範囲の一例を示している。例えば、条件指定テーブル部ＴＢＬ１が有効となるＰＣ値の範囲は、開始ＰＣ値“ＳＰＣ１”から終端ＰＣ値“ＥＰＣ１”の間である。また、例えば、条件指定テーブル部ＴＢＬ２が有効となるＰＣ値の範囲は、開始ＰＣ値“ＳＰＣ２”から終端ＰＣ値“ＥＰＣ２”の間である。そして、例えば、条件指定テーブル部ＴＢＬ３が有効となるＰＣ値の範囲は、開始ＰＣ値“ＳＰＣ３”から終端ＰＣ値“ＥＰＣ３”の間である。なお、条件指定テーブル部ＴＢＬ０は、例えば、条件指定テーブル部ＴＢＬ１−ＴＢＬ３のいずれも有効でないとき、有効になる。
【００８５】
条件指定テーブル部ＴＢＬ１−ＴＢＬ３の開始ＰＣ値“ＳＰＣ１−ＳＰＣ３”と、条件指定テーブルＴＢＬ１−ＴＢＬ３の終端ＰＣ値“ＥＰＣ１−ＥＰＣ３と、各条件指定テーブル部ＴＢＬの各レジスタＦＦの値は、例えば、プログラムの実行開始前に設定される。この動作は、プロセッサ１２の命令ＣＯＭで実行されもよいし、プロセッサ１２の外部からの直接更新により実行されてもよい。
【００８６】
図９は、図６に示したプロセッサ１２における条件インデックスＣＩＤＸから条件コードＣＣＯＤへの変換の一例を示している。なお、図９では、条件インデックスＣＩＤＸおよび条件コードＣＣＯＤ等の値を２進数で示している。また、図９の“ｘ”の意味は、図３の“ｘ”と同じである。
【００８７】
命令ＣＯＭ（ＰＣａ）は、例えば、範囲ＳＰＣ１−ＥＰＣ１、範囲ＳＰＣ２−ＥＰＣ２および範囲ＳＰＣ３−ＥＰＣ３のいずれにも当てはまらないＰＣ値“ＰＣａ”に対応するアドレスの条件付き命令ＣＯＭである。したがって、命令ＣＯＭ（ＰＣａ）の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際には、条件指定テーブルＴＢＬ０が使用される。例えば、条件指定テーブルＴＢＬ０では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００００”、“０００１”、“００１１”、“０１１０”にそれぞれ対応している。
【００８８】
デコード部４０は、命令ＣＯＭ（ＰＣａ）から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ（ＰＣａ）の条件インデックスＣＩＤＸは、“１１”である。条件指定部５２は、ＰＣ値“ＰＣａ”に基づいて選択される条件指定テーブルＴＢＬ０に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“０１１０”を選択する。これにより、命令ＣＯＭ（ＰＣａ）の条件コードＣＣＯＤ（実行条件）として“０１１０”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”または“ｘ０ｘ１”のときに命令ＣＯＭ（ＰＣａ）を有効と判定する。
【００８９】
命令ＣＯＭ（ＰＣｂ）は、例えば、範囲ＳＰＣ１−ＥＰＣ１のＰＣ値“ＰＣｂ”に対応するアドレスの条件付き命令ＣＯＭである。したがって、命令ＣＯＭ（ＰＣｂ）の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際には、条件指定テーブルＴＢＬ１が使用される。例えば、条件指定テーブルＴＢＬ１では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００００”、“０００１”、“０１１１”、“１０１０”にそれぞれ対応している。
【００９０】
デコード部４０は、命令ＣＯＭ（ＰＣｂ）から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ（ＰＣｂ）の条件インデックスＣＩＤＸは、“１１”である。条件指定部５２は、ＰＣ値“ＰＣｂ”に基づいて選択される条件指定テーブルＴＢＬ１に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“１０１０”を選択する。これにより、命令ＣＯＭ（ＰＣｂ）の条件コードＣＣＯＤ（実行条件）として“１０１０”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”、“００１ｘ”および“１００ｘ”のいずれかのときに命令ＣＯＭ（ＰＣｂ）を有効と判定する。
【００９１】
命令ＣＯＭ（ＰＣｃ）は、例えば、範囲ＳＰＣ２−ＥＰＣ２のＰＣ値“ＰＣｃ”に対応するアドレスの条件付き命令ＣＯＭである。したがって、命令ＣＯＭ（ＰＣｃ）の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際には、条件指定テーブルＴＢＬ２が使用される。例えば、条件指定テーブルＴＢＬ２では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００００”、“０００１”、“００１０”、“１０００”にそれぞれ対応している。
【００９２】
デコード部４０は、命令ＣＯＭ（ＰＣｃ）から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ（ＰＣｃ）の条件インデックスＣＩＤＸは、“１１”である。条件指定部５２は、ＰＣ値“ＰＣｃ”に基づいて選択される条件指定テーブルＴＢＬ２に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“１０００”を選択する。これにより、命令ＣＯＭ（ＰＣｃ）の条件コードＣＣＯＤ（実行条件）として“１０００”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“００１ｘ”または“１００ｘ”のときに命令ＣＯＭ（ＰＣｃ）を有効と判定する。
【００９３】
命令ＣＯＭ（ＰＣｄ）は、例えば、範囲ＳＰＣ３−ＥＰＣ３のＰＣ値“ＰＣｄ”に対応するアドレスの条件付き命令ＣＯＭである。したがって、命令ＣＯＭ（ＰＣｄ）の条件インデックスＣＩＤＸに対応する条件コードＣＣＯＤを選択する際には、条件指定テーブルＴＢＬ３が使用される。例えば、条件指定テーブルＴＢＬ３では、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”は、条件コードＣＣＯＤの“００１１”、“０１００”、“０１０１”、“０１１０”にそれぞれ対応している。
【００９４】
デコード部４０は、命令ＣＯＭ（ＰＣｄ）から条件インデックスＣＩＤＸを取得する。命令ＣＯＭ（ＰＣｄ）の条件インデックスＣＩＤＸは、“１１”である。条件指定部５２は、ＰＣ値“ＰＣｄ”に基づいて選択される条件指定テーブルＴＢＬ３に基づいて、条件インデックスＣＩＤＸの値“１１”に対応する条件コードＣＣＯＤの値“０１１０”を選択する。これにより、命令ＣＯＭ（ＰＣｄ）の条件コードＣＣＯＤ（実行条件）として“０１１０”が選択される。したがって、判定部７４は、ステータスフラグＳＺＶＣが“ｘ１ｘｘ”または“ｘ０ｘ１”のときに命令ＣＯＭ（ＰＣｄ）を有効と判定する。
【００９５】
図１０は、図６に示したプロセッサ１２のコードの一例を示している。なお、図１０では、条件インデックスＣＩＤＸおよび条件コードＣＣＯＤ等の値を２進数で示している。図１０の例では、プログラムはそれぞれの領域ごとに条件コードＣＣＯＤに局所性が存在する。例えば、プログラムの領域Ａでは、ニーモニック“ＡＬ”、“ＥＱ”、“ＵＧＴ”、“ＵＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。したがって、条件指定テーブルＴＢＬ０では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“００１１”、“０１１０”にそれぞれ対応している。なお、プログラムの領域Ａは、例えば、ＰＣ値が範囲ＳＰＣ１−ＥＰＣ１、範囲ＳＰＣ２−ＥＰＣ２および範囲ＳＰＣ３−ＥＰＣ３のいずれでもないプログラム領域である。
【００９６】
プログラムの領域Ｂは、例えば、ＰＣ値が範囲ＳＰＣ１−ＥＰＣ１のプログラム領域である。例えば、プログラムの領域Ｂでは、ニーモニック“ＡＬ”、“ＥＱ”、“ＳＧＴ”、“ＳＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。したがって、条件指定テーブルＴＢＬ１では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“０１１１”、“１０１０”にそれぞれ対応している。
【００９７】
プログラムの領域Ｃは、例えば、ＰＣ値が範囲ＳＰＣ２−ＥＰＣ２のプログラム領域である。例えば、プログラムの領域Ｃでは、ニーモニック“ＡＬ”、“ＥＱ”、“ＮＥ”、“ＳＬＴ”の４種類の条件コードＣＣＯＤのいずれかが使用される。したがって、条件指定テーブルＴＢＬ２では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“００１０”、“１０００”にそれぞれ対応している。
【００９８】
プログラムの領域Ｄは、例えば、ＰＣ値が範囲ＳＰＣ３−ＥＰＣ３のプログラム領域である。例えば、プログラムの領域Ｄでは、ニーモニック“ＵＧＴ”、“ＵＬＴ”、“ＵＧＥ”、“ＵＬＥ”の４種類の条件コードＣＣＯＤのいずれかが使用される。したがって、条件指定テーブルＴＢＬ３では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００１１”、“０１００”、“０１０１”、“０１１０”にそれぞれ対応している。
【００９９】
プログラムカウンタ２０のＰＣ値は、命令メモリ３０のアドレス（命令メモリ番地）に対応している。例えば、ＰＣ値“ＳＰＣ１”、“ＥＰＣ１”、“ＳＰＣ２”、“ＥＰＣ２”、“ＳＰＣ３”、“ＥＰＣ３”は、命令メモリ番地“Ｄ１０”、“Ｄ２０”、“Ｄ３０”、“Ｄ４０”、“Ｄ５０”、“Ｄ６０”にそれぞれ対応している。したがって、アセンブラコードの領域Ａ、Ｂ、Ｃ、Ｄでは、プログラムの領域Ａ、Ｂ、Ｃ、Ｄに対応した条件指定テーブルＴＢＬ０、ＴＢＬ１、ＴＢＬ２、ＴＢＬ３がそれぞれ使用される。
【０１００】
このように、この実施形態では、条件指定部５２は、複数の条件指定テーブルＴＢＬを有し、参照する条件指定テーブルＴＢＬをＰＣ値に応じて切り替える。これにより、この実施形態では、プログラム全体で使用する条件コードＣＣＯＤの全パターンを指定できる。また、この実施形態では、条件指定テーブルＴＢＬの内容を書き換えるための書き換え命令をアセンブラコードに記述する必要がないため、アセンブラコードのコード量を図１−図５で説明した実施形態より低減できる。
【０１０１】
図１１は、図６に示したプロセッサ１２のコードの別の例を示している。なお、図１１では、条件インデックスＣＩＤＸおよび条件コードＣＣＯＤ等の値を２進数で示している。図１１の例では、プログラムはそれぞれの領域ごとに条件コードＣＣＯＤに局所性が存在する。図１１のプログラムでは、図１０に示したプログラムの最後に領域Ｅ、Ａが追加されている。プログラムおよびアセンブラコードの領域Ａ、Ｂ、Ｃ、Ｄは、図１０で説明したプログラムおよびアセンブラコードの領域Ａ、Ｂ、Ｃ、Ｄと同様である。このため、プログラムおよびアセンブラコードの領域Ａ、Ｂ、Ｃ、Ｄについては、詳細な説明を省略する。
【０１０２】
プログラムの領域Ｅは、例えば、ＰＣ値が範囲ＳＰＣ１−ＥＰＣ１、範囲ＳＰＣ２−ＥＰＣ２および範囲ＳＰＣ３−ＥＰＣ３のいずれでもないプログラム領域である。例えば、プログラムの領域Ｅでは、ニーモニック“ＡＬ”、“ＥＱ”、“ＶＳ”、“ＶＣ”の４種類の条件コードＣＣＯＤのいずれかが使用される。したがって、プログラム全体で使用する条件コードＣＣＯＤの全パターンを指定するためには、５通りの条件指定テーブルＴＢＬが必要である。
【０１０３】
このため、この実施形態では、領域Ａ、Ｂ、Ｃ、Ｄ、Ｅの５つのうちの４つの領域に対応する条件指定テーブルＴＢＬの内容を条件指定テーブルＴＢＬ０−ＴＢＬ３に保持する。そして、この実施形態では、条件指定テーブルＴＢＬ０−ＴＢＬ３のいずれかの内容を書き換え命令ＣＯＭで書き換えることにより、残りの１つの領域に対応する。
【０１０４】
例えば、条件指定テーブルＴＢＬ０−ＴＢＬ３は、領域Ａ、Ｂ、Ｃ、Ｄに対応する条件指定テーブルＴＢＬの内容を保持する。そして、アセンブラコードの領域Ｅの最初に書き換え命令（テーブル書き換え（Ｅ））が記述され、条件指定テーブルＴＢＬ０は領域Ｅに応じた条件指定テーブルＴＢＬ０（Ｅ）に書き換えられる。したがって、条件指定テーブルＴＢＬ０（Ｅ）では、例えば、条件インデックスＣＩＤＸの“００”、“０１”、“１０”、“１１”が条件コードＣＣＯＤの“００００”、“０００１”、“１１０１”、“１１１０”にそれぞれ対応している。
【０１０５】
また、アセンブラコードの領域Ｅの後の領域Ａでは、最初に書き換え命令（テーブル書き換え（Ａ））が記述され、条件指定テーブルＴＢＬ０は領域Ａに応じた内容（元の条件指定テーブルＴＢＬ０の内容）に書き換えられる。すなわち、条件指定テーブルＴＢＬ０は、領域Ａ、Ｅに対応する条件指定テーブルＴＢＬとして使用される。
【０１０６】
このように、この実施形態では、複数の条件指定テーブルＴＢＬの少なくとも１つの条件指定テーブルＴＢＬの内容を書き換え命令ＣＯＭで変更することにより、条件コードＣＣＯＤの全パターンを指定できる。すなわち、複数の条件指定テーブルＴＢＬの少なくとも１つは、書き換え命令ＣＯＭで書き換え可能である。なお、条件指定部５２は、条件指定テーブルＴＢＬ０以外の条件指定テーブルＴＢＬを書き換えてもよい。例えば、条件指定部５２は、条件指定テーブルＴＢＬ０以外の条件指定テーブルＴＢＬを書き換えるとき、対応する領域に合わせて開始ＰＣ値ＳＰＣおよび終端ＰＣ値ＥＰＣを書き換える。
【０１０７】
以上、この実施形態では、条件指定部５２は、条件インデックスＣＩＤＸを条件コードＣＣＯＤに変換するための複数の条件指定テーブルＴＢＬを有している。例えば、条件指定部５２は、参照する条件指定テーブルＴＢＬをＰＣ値に応じて切り替える。これにより、この実施形態では、プログラム全体で使用する条件コードＣＣＯＤの全パターンを指定できる。
【０１０８】
なお、条件インデックスＣＩＤＸのビット数は、条件コードＣＣＯＤのビット数より少ない。すなわち、この実施形態では、条件コードＣＣＯＤのビット数より少ないビット数の条件インデックスＣＩＤＸが命令ＣＯＭに含まれる。これにより、この実施形態では、条件コードＣＣＯＤを命令ＣＯＭに含めるプロセッサに比べて、命令ＣＯＭを格納する命令メモリ３０のサイズを低減できる。
【０１０９】
例えば、４ビットの条件コードＣＣＯＤを有する命令ＣＯＭのビット数が２８ビットの場合、条件コードＣＣＯＤの代わりに２ビットの条件インデックスＣＩＤＸを命令ＣＯＭに含めることにより、命令ＣＯＭのビット数は２６ビットに削減される。このときには、命令メモリ３０のサイズを約７％削減できる。なお、この実施形態では、条件指定テーブルＴＢＬの内容を書き換え命令ＣＯＭで変更することにより、条件コードＣＣＯＤの全パターンを指定できる。
【０１１０】
さらに、この実施形態では、条件指定部５２は、複数の条件指定テーブルＴＢＬを有し、参照する条件指定テーブルＴＢＬをＰＣ値に応じて切り替える。このため、この実施形態では、条件指定テーブルＴＢＬの内容を書き換えるための書き換え命令ＣＯＭをアセンブラコードに記述する回数を低減できる。したがって、この実施形態では、アセンブラコードのコード量を図１−図５で説明した実施形態より低減できる。
【０１１１】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１２】
１０、１２‥プロセッサ；２０‥プログラムカウンタ；３０‥命令メモリ；４０‥デコード部；５０‥条件指定部；６０‥ステータスレジスタ；７０‥実行部；７２‥演算部；７４‥判定部；８０‥レジスタファイル；９０‥制御回路；ＳＥＬ、ＳＥＬ０−ＳＥＬ３‥セレクタ；ＳＥＬＵ‥コード選択部；ＴＢＬ、ＴＢＬ０−ＴＢＬ３‥条件指定テーブル；ＷＣＴＬ、ＷＣＴＬ２‥テーブル書き換え部
【図１】
0005888128.tif 000002
【図２】
0005888128.tif 000003
【図３】
0005888128.tif 000004
【図４】
0005888128.tif 000005
【図５】
0005888128.tif 000006
【図６】
0005888128.tif 000007
【図７】
0005888128.tif 000008
【図８】
0005888128.tif 000009
【図９】
0005888128.tif 000010
【図１０】
0005888128.tif 000011
【図１１】
0005888128.tif 000012