(57)【要約】  プロセッサの命令セット設計の作業効率を向上させ、命令セットの検討における設計者の負担を軽減する。命令オペコード生成システムは、オペコードビット幅決定手段、命令並び替え手段、及びオペコード値決定手段を有する。オペコードビット幅決定手段は、プロセッサの命令セットに関する仕様データにもとづいて、各命令のオペコードに割り当て可能なビット幅を決める。命令並び替え手段は、オペコードのビット幅にしたがって命令を並び替える。オペコード値決定手段は、各命令のオペコードの値を決定する。
2008062768.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの命令セットに関する仕様データにもとづいて、前記命令セットの各命令のオペコードに割り当てるビット幅を決めるオペコードビット幅決定手段と、
前記オペコードのビット幅にしたがって前記各命令を分類する命令分類手段と、
前記各命令の分類にもとづいて、その各命令のオペコードの値を決定するオペコード値決定手段と、
を備えることを特徴とする命令オペコード生成システム。
【請求項２】
請求項１に記載の命令オペコード生成システムであって、
前記仕様データを解釈するための仕様データ解析手段と、
前記仕様データ解析手段と前記オペコードビット幅決定手段と前記命令分類手段と前記オペコード値決定手段とが出力するデータを記憶するための中間データ記憶手段と、
をさらに備えることを特徴とする命令オペコード生成システム。
【請求項３】
請求項２に記載の命令オペコード生成システムにおいて、
前記オペコード値決定手段は、
前記オペコードを二つのサブフィールドで構成してそれぞれのサブフィールドの値を前記各命令の分類にもとづいて決定する手段、
を備えることを特徴とする命令オペコード生成システム。
【請求項４】
請求項２または請求項３に記載の命令オペコード生成システムであって、
前記プロセッサの命令セットに関する仕様データには、命令の語長と、命令がもつオペランドの個数と、各オペランドのビット幅と、が含まれ、
前記オペコード値決定手段は、前記命令の語長と、前記命令がもつオペランドの個数と、前記各オペランドのビット幅とを含む前記プロセッサの命令セットに関する仕様データにもとづいて、各命令のオペコードを決定することを特徴とする命令オペコード生成システム。
【請求項５】
請求項４に記載の命令オペコード生成システムにおいて、
前記命令の番号をkとし、前記命令の総数をSとし、前記命令の語長をNとし、前記命令kの全てのオペランドを表すために使用するビットパターンの幅total_operands_length[k]とし、前記命令kのオペコードフィールドの長さをopcode_length[k]ビットとし、前記命令kのオペコードフィールドの値をopcode_value[k]とし、前記オペコードフィールドの長さがxビットである命令の数をnum_of_inst_having_opcode_length(x)とし、値x以上の2のべき乗の最小値をmin_power_of_2(x)としたとき、
前記オペコードビット幅決定手段は、前記命令kのオペコードフィールドのビット幅opcode_length[k]を、
opcode_length[k]=N-total_operands_length[k]（k=0,1,...,S-1）
により求め、
前記命令分類手段は、前記命令kの全てのオペランドを表すために使用するビットパターンの幅total_operands_length[k]にもとづいて全ての前記命令を並び替え、
並び替えられた後の前記命令の番号をiとし、最も多くのビットをオペランドに使用する命令の番号iを0とし、最も少ないビットをオペランドに使用する命令の番号iをS-1としたとき、
前記オペコード値決定手段は、0番目の命令からS-1番目の命令まで順番に命令iのオペコードフィールドの値opcode_value[i]を決定する、ことを特徴とする命令オペコード生成システム。
【請求項６】
請求項５に記載の命令オペコード生成システムにおいて、
前記命令iのオペコードフィールドの値opcode_value[i]を決定する手段は、
opcode_value[0]へ0を代入後、前記命令の番号iを1からS-1まで順番に変えながら、opcode_value[i]を、
opcode_value[i]=((opcode_value[i-1]+1)<<(opcode_length[i]-opcode_length[i-1]))
により決定することを特徴とする命令オペコード生成システム。
【請求項７】
請求項５に記載の命令オペコード生成システムにおいて、
前記命令iのオペコードフィールドの値opcode_value[i]を決定する手段は、
opcode_value[0]へ0を代入後、前記命令の番号iを1からS-1まで順番に変えながら、opcode_value[i]を、
（１）opcode_length[i]がopcode_length[i-1]と同じときに、opcode_value[i]=opcode
_value[i-1]+1により決定し、
（２）opcode_length[i]がopcode_length[i-1]と異なるときに、
(1<<(opcode_length[i]-opcode_length[i-1]))と、命令iと同じオペコード長をもつ命令の数以上の最小の２のべき乗min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i]))との大きい方の値をZとして、opcode_value[i]=((opcode_value[i-1]<<(opcode_length[i]-opcode_length[i-1]))+Z)&(~(Z-1))により決定することを特徴とする命令
オペコード生成システム。
【請求項８】
請求項５に記載の命令オペコード生成システムにおいて、
前記命令iのオペコードフィールドの値opcode_value[i]を決定する手段は、
opcode_value[0]へ0を代入後、命令の番号iを1からS-1まで順番に変えながら、opcode_value[i]を、
（１）opcode_length[i]がopcode_length[i-1]と同じときに、opcode_value[i]=opcode_value[i-1]+1により決定し、
（２）opcode_length[i]がopcode_length[i-1]と異なるときに、命令iと同じオペコード長をもつ命令の数以上の最小の２のべき乗（min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i-1]))をZとして、opcode_value[i]=((opcode_value[i-1]+Z)<<(opcode_length[i]-opcode_length[i-1]))により決定することを特徴とする命令オペコード生成システム。
【請求項９】
請求項５に記載の命令オペコード生成システムにおいて、
前記オペコードフィールドはグループ・サブフィールドとインデックス・サブフィールドとに区分され、
前記命令iのオペコードフィールドの値opcode_value[i]を決定する手段は、前記インデックス・サブフィールドの値を決定する手段と、前記グループ・サブフィールドの値を決定する手段とを有し、
前記命令iのインデックス・サブフィールドの長さをopcode_sub_idx_length[i]とし、前記命令iのインデックス・サブフィールドの値をopcode_sub_idx_value[i]とし、全ての
命令についてインデックス・サブフィールドの長さをopcode_sub_idx_length[i]=min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i]))とし、前記命令iのグループ・サブフィールドの長さをopcode_sub_grp_length[i]とし、前記命令iのグループ・サブフィールドの値をopcode_sub_grp_value[i]とし、全ての命令についてグループ・サブフィールドの長さを  opcode_sub_grp_length[i]=opcode_length[i]-opcode_sub_idx_length[i]としたとき、
前記インデックス・サブフィールドの値を決定する手段は、
opcode_sub_idx_value[0]へ0を代入後、命令の番号iを1からS-1まで順番に変えながら、opcode_sub_idx_value[i]を、
（１）opcode_length[i]がopcode_length[i-1]と同じときに、opcode_sub_idx_value[i]=opcode_sub_idx_value[i-1]+1により決定し、
（２）opcode_length[i]がopcode_length[i-1]と異なるときに、opcode_sub_idx_value[i]=0により決定し、
前記命令iのグループ・サブフィールドの長さopcode_sub_grp_length[i]にもとづいて全ての前記命令を並び替え、並び替えられた後の前記命令の番号をnとし、最も多くのビットをグループ・サブフィールドに使用する命令の番号nを0とし、最も少ないビットをグループ・サブフィールドに使用する命令の番号nをS-1とし、
前記グループ・サブフィールドの値を決定する手段は、
opcode_sub_grp_value[0]へ0を代入後、命令の番号nを1からS-1まで順番に変えながら、opcode_sub_grp_value[n]を、
（１）opcode_length[n]がopcode_length[n-1]と同じときに、
opcode_sub_grp_value[n]=opcode_sub_grp_value[n-1]により決定し、
（２）opcode_length[n]がopcode_length[n-1]と異なるときに、
opcode_sub_grp_value[n]=((opcode_sub_grp_value[n-1]+1)<<(opcode_sub_grp_length[n]-opcode_sub_grp_length[n-1]))により決定することを特徴とする命令オペコード生成システム。
【請求項１０】
プロセッサの命令に関する仕様データにもとづいて、そのプロセッサのハードウェア構成定義又はソフトウェア開発ツールを生成するシステムであって、
請求項１から９のいずれかに記載の命令オペコード生成システムを用いて、前記プロセッサの命令セットに関する仕様データにもとづいて、前記命令セットを構成する各命令のオペコードの値を決定することを特徴とするシステム。
【請求項１１】
プロセッサの命令セットに関する仕様データにもとづいて、
前記仕様データを解釈するための仕様データ解析ステップと、
前記命令セットの各命令のオペコードに割り当てるビット幅を決めるステップと、
前記オペコードのビット幅にしたがって前記各命令を分類するステップと、
前記各命令の分類にもとづいて、その各命令のオペコードの値を決定するステップと、
を備えることを特徴とする命令オペコード生成方法。
【請求項１２】
請求項１１に記載の命令オペコード生成方法において、
前記オペコード値決定ステップは、
前記オペコードを二つのサブフィールドで構成してそれぞれのサブフィールドの値を前記各命令の分類にもとづいて決定するステップと、
を備えることを特徴とする命令オペコード生成方法。
【請求項１３】
請求項１１または請求項１２に記載の命令オペコード生成方法であって、
前記プロセッサの命令セットに関する仕様データには、命令の語長と、命令がもつオペランドの個数と、各オペランドのビット幅と、が含まれ、
前記オペコード値決定ステップは、前記命令の語長と、前記命令がもつオペランドの個数と、前記各オペランドのビット幅とを含む前記プロセッサの命令セットに関する仕様データにもとづいて、各命令のオペコードを決定することを特徴とする命令オペコード生成方法。
【請求項１４】
請求項１１から請求項１３のいずれかに記載の命令オペコード生成方法をコンピュータに実行させることを特徴とする命令オペコード生成プログラム。
【請求項１５】
プロセッサの命令に関する仕様データにもとづいて、そのプロセッサのハードウェア構成定義又はソフトウェア開発ツールをコンピュータに生成させるプログラムであって、
請求項１４に記載の命令オペコード生成プログラムを用いて、前記プロセッサの命令セットに関する仕様データにもとづいて、前記命令セットを構成する各命令のオペコードの値を決定することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを設計するツールで用いられる命令オペコード生成システムに関し、特にプロセッサの命令セットの設計において命令オペコードを自動的に決定する技術に関する。
【背景技術】
【０００２】
従来、プロセッサの設計を効率良く行なうためにさまざまなツールが開発されている。そのようなツールの一つにプロセッサの設計仕様からプロセッサのハードウェア構成やソフトウェア開発ツールを生成するツールがある。そうしたツールをここでは「プロセッサ設計ツール」と呼ぶことにする。従来のプロセッサ設計ツールでは、命令語長やオペコードやオペランドなどの情報を全て設計者が定義する。一つの命令を定義する際に、その命令の語長を定義したり、その命令がもつオペランドの種類や数を定義したりする。【０００３】
従来のプロセッサ設計ツールが非特許文献１、２、特許文献１〜３で紹介されている。例えば、非特許文献１のツールは、プロセッサの命令セットを定義し、そのプロセッサのシミュレータを生成することができる。非特許文献１のツールでは、以下のように命令のビットパターンを定義する。【０００４】
CODING {Dest Src1 Src2 0b010000 0b10000}
ここでは、'{'と'}'で囲まれた部分がビットパターンを表す。DestとSrc1とSrc2は、それぞれレジスタの番号を表す。その後の0b010000と0b10000は、命令のオペコードを表す２進数である。このように命令のビットパターンを構成する情報を全て設計者が定義する必要がある。他の文献で紹介されているツールでも同様である。【０００５】
命令のオペコードは、その命令を他の命令と区別するための命令フィールドである。命令セットがあらかじめ決まっている場合、命令のオペコードを初めに一度だけ定義すればよい。しかし、どんな命令を命令セットへ追加するべきかを検討する場合には、命令のオペコードを何度か修正する必要がある。【０００６】
もし命令のオペコードを定義したり修正したりする必要がなければ、設計者が定義する項目が減る。オペコードがどんな値をもつかは重要ではなく、各命令を識別可能なようにオペコードが定義されればよい。命令のオペコードを自動的に定義できるようにすれば、設計者が定義する項目が減り、設計効率の向上につながる。
【非特許文献１】S. Pees, et al., "LISA - Machine Description Language for Cycle-Accurate Models of Programmable DSP Architectures," 36th Design Automation Conference (DAC 99), June 1999, pp. 933-938.
【非特許文献２】Andreas Hoffmann, et al., "A Survey on Modeling Issues Using the Machine Description Language Lisa," Proceedings of ICASSP 2001, Vol. 2, pp. 1137-1140, May 7-11 2001.
【特許文献１】米国特許第６４７７６８３号明細書
【特許文献２】米国特許第６８６２５６３号明細書
【特許文献３】特表２００３−５１８２８０号公報
【特許文献４】特開２００３−３２３４６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の命令セット生成ツールでは、命令のオペコードを定義するという作業が必要で効率が悪いという問題があった。命令セットの内容を検討して何度も試行錯誤を繰り返す際には、設計者が入力しなければならない項目が少ない方が効率的である。【０００８】
本発明は、オペコードを自動的に生成できるような命令オペコード自動生成方式を提供することによって、プロセッサの命令セット設計の作業効率を向上させ、命令セットの検討における設計者の負担を軽減することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明に係る命令オペコード生成システムは、プロセッサの命令セットに関する仕様データにもとづいて、前記命令セットの各命令のオペコードに割り当てるビット幅を決めるオペコードビット幅決定手段と、前記オペコードのビット幅にしたがって前記各命令を分類する命令分類手段と、前記各命令の分類にもとづいて、その各命令のオペコードの値を決定するオペコード値決定手段と、を備える。【００１０】
また、本発明に係るシステムは、プロセッサの命令に関する仕様データにもとづいて、そのプロセッサのハードウェア構成定義又はソフトウェア開発ツールを生成するシステムであって、上記に記載の命令オペコード生成システムを用いて、前記命令セットを構成する各命令のオペコードの値を決定することを特徴とする。【００１１】
本発明に係る命令オペコード生成方法は、プロセッサの命令セットに関する仕様データにもとづいて、前記仕様データを解釈するための仕様データ解析ステップと、前記命令セットの各命令のオペコードに割り当てるビット幅を決めるステップと、前記オペコードのビット幅にしたがって前記各命令を分類するステップと、前記各命令の分類にもとづいて、その各命令のオペコードの値を決定するステップと、を備えることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、プロセッサの命令セットに関する仕様データにもとづいてオペコードの値が自動的に生成されるため、設計者がオペコードを定義する必要が無くなり、その分、命令セット設計の作業効率を向上させ、命令セットの検討における設計者の負担を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第一の実施の形態に係る命令オペコード生成システムを表す図である。
【図２】本発明の第二の実施の形態に係る命令オペコード生成システムを表す図である。
【図３】本発明の実施例におけるオペコード割り当て方法のフローチャートである。
【図４】（ａ）はオペコードを命令のビットパターンのMSB側に配置する方法を示す図で、（ｂ）はオペコードを命令のビットパターンのLSB側に配置する方法を示す図である。
【図５】第一のオペコード決定方法のフローチャートである。
【図６】仕様データとなる命令の例である。
【図７】第一のオペコード決定方法によるオペコード割り当ての例である。
【図８】第二のオペコード決定方法のフローチャートである。
【図９】第二のオペコード決定方法によるオペコード割り当ての例である。
【図１０】第三のオペコード決定方法のフローチャートである。
【図１１】第三のオペコード決定方法によるオペコード割り当ての例である。
【図１２】第四のオペコード決定方法のフローチャートである。
【図１３】第四のオペコード決定方法のインデックス・サブフィールド決定方法のフローチャートである。
【図１４】第四のオペコード決定方法のグループ・サブフィールド決定方法のフローチャートである。
【図１５】仕様データとなる命令の例である。
【図１６】第四のオペコード決定方法によるインデックス・サブフィールドの割り当ての例である。
【図１７】第四のオペコード決定方法におけるグループ・サブフィールドのビット幅にもとづく命令並び替え実施後の命令の例である。
【図１８】第四のオペコード決定方法によるグループ・サブフィールドの割り当ての例である。
【符号の説明】
【００１４】
１００  オペコードビット幅決定手段
２００  命令並べ替え手段
３００  オペコード値決定手段
４００  第１のオペコードサブフィールド値決定手段
５００  第２のオペコードサブフィールド値決定手段
６００  仕様データ解析手段
７００  オペコード出力手段
８００  中間データ記憶手段
【発明を実施するための最良の形態】
【００１５】
次に、本発明に係る命令オペコード生成システムを実施するための最良の形態について、図面を参照して詳細に説明する。【００１６】
（第一の実施の形態）
図１は、本発明の第一の実施の形態に係る命令オペコード生成システムの構成を示す。図１に示す命令オペコード生成システムは、プロセッサの命令セットに関する仕様データにもとづいて、仕様データを解釈する仕様データ解析手段６００と、各命令のオペコードに割り当て可能なビット幅を決めるオペコードビット幅決定手段１００と、オペコードのビット幅にしたがって命令を並び替える命令並び替え手段２００と、各命令のオペコードの値を決定するオペコード値決定手段３００と、命令オペコードを出力するオペコード出力手段７００と、仕様データ解析手段６００とオペコードビット幅決定手段１００と命令並び替え手段２００とオペコード値決定手段３００とオペコード出力手段７００が使用するデータを記憶するための中間データ記憶手段８００と、を備える。【００１７】
この構成により、プロセッサの命令セットに関する仕様データにもとづいて各命令のオペコードの値が自動的に生成されるため、設計者がオペコードを定義する必要が無くなり、その分、プロセッサの命令セット設計の作業効率を向上させ、命令セットの検討における設計者の負担を軽減することができる。【００１８】
（第二の実施の形態）
図２は、本発明の第二の実施の形態に係る命令オペコード生成システムの構成を示す。図２に示す命令オペコード生成システムは、プロセッサの命令セットに関する仕様データにもとづいて、仕様データを解釈する仕様データ解析手段６００と、各命令のオペコードに割り当て可能なビット幅を決めるオペコードビット幅決定手段１００と、オペコードのビット幅にしたがって命令を並び替える命令並び替え手段２００と、オペコードを二つのサブフィールドで構成してそれぞれのサブフィールドの値をオペコードのビット幅にもとづいて決定する二つの手段、すなわち第一のオペコードサブフィールド値決定手段４００と、第二のオペコードサブフィールド値決定手段５００と、命令オペコードを出力するオペコード出力手段７００と、仕様データ解析手段６００とオペコードビット幅決定手段１００と命令並び替え手段２００とオペコード値決定手段３００と第一のオペコードサブフィールド値決定手段４００と第二のオペコードサブフィールド値決定手段５００とオペコード出力手段７００が使用するデータを記憶するための中間データ記憶手段８００と、を備える。【００１９】
この構成により、第一の実施の形態と同様に、プロセッサの命令セットに関する仕様データにもとづいて各命令のオペコードの値が自動的に生成されるため、設計者がオペコードを定義する必要が無くなり、その分、プロセッサの命令セット設計の作業効率を向上させ、命令セットの検討における設計者の負担を軽減することができる。さらに、第一の実施の形態の命令オペコード生成システムと比較して、第二の実施の形態の命令オペコード生成システムには生成されたオペコードがデコードし易いという特徴がある。【００２０】
なお、第一および第二の実施の形態に係る命令オペコード生成システムは、いずれもコンピュータ上で動作するプログラムで実現してもよい。この場合、命令オペコード生成システムを構成するプログラムは、コンピュータを上記の各手段１００〜８００として機能させるものである。これにより、命令オペコード生成システムは、コンピュータを制御して、コンピュータの記憶装置からプロセッサの命令セットに関する仕様データを読みだし、その仕様データにもとづいて各命令のオペコードを決定する。【００２１】
以下、図３〜図１８を参照して、第一および第二の実施の形態に係る命令オペコード生成システムの実施例について、具体的に説明する。なお、以下の実施例では、前述の図１及び図２に示す各手段１００〜８００は、コンピュータ機のプロセッサ（ＣＰＵ：central processing unit）がその記録媒体に配置された命令オペコード生成システム用のプログラムコードを実行することにより実現される。
【実施例】
【００２２】
最初に、プロセッサの命令はどのように定義されるかについて説明する。【００２３】
プロセッサの命令は、0と1のビットパターンとして表される。命令のビットパターンのどのビットがどのような意味をもつかを予め定義しておいて、プロセッサが命令のビットパターンを読み込んでその命令を解釈する。【００２４】
命令のビットパターンには、オペコードとオペランドの二種類のフィールドがある。オペコードは、命令の名前や種類を表すフィールドである。命令の名前や種類を表すために、命令には、必ずオペコードが一つ必要である。オペコードは命令の名前や種類を表すので、異なる名前や種類の命令は異なるオペコードをもつ。オペランドは、命令へ与えられるパラメータを表すフィールドである。命令が複数のオペランドをもつこともあるし、一つもオペランドをもたない命令もある。【００２５】
プロセッサが命令を解釈するには、まず命令のオペコードからその命令の名前や種類を知る。次に命令の名前や種類からオペランドの数や意味を知る。命令の名前や種類とオペランドの数や意味とは一対一の関係にあるので、オペコードを解釈し易いか否かが命令の解釈し易さに直接関係する。【００２６】
例えば、命令語長が一定で、オペコードの開始ビット位置が一定で、オペコードのビット幅が一定であるなら、非常に簡単にオペコードを解釈できる。しかし、一般的にはオペコードのビット幅は一定ではないし、命令語長やオペコードの開始ビット位置が一定ではないかも知れない。オペコードの解釈を容易にするには、オペコードの開始ビット位置を一定にして、オペコードのビット幅の種類をできるだけ少なくすればよい。【００２７】
［オペコード生成方法］
次に、命令のオペコードをどのように決定するかについて説明する。なお、本明細書で用いる各種の演算子（=、+=、==、<<、&、~、+、-、等）の意味は、C言語で一般に使用されている意味と同じとする。例えば、「x=y」は、xにyを代入する代入演算を意味する。また「x+=y」は、xにx+yを代入する代入演算を意味する（x=x+yと同じ意味である）。「x==y」は、xとyとの等値性を判断する関係演算を意味し、等しければ真、等しくなければ偽を返す。「x<<y」は、xをy分だけ左にシフトさせるシフト演算を意味する。「x&y」は、xとyとの論理積を計算する論理演算を意味する。「~x」はxの全てのビットを反転する演算を意味する。【００２８】
まず、以降の説明で使用する言葉について定義しておく。以下のうち、(仕様)と書かれているものは、オペコードを生成するために設計者が定義するべき情報（仕様データ）を意味する。【００２９】
［定義１］命令の番号をkあるいはiで表す。【００３０】
［定義２］命令の総数をSとする(仕様)。【００３１】
［定義３］命令の語長をNとする(仕様)。【００３２】
［定義４］命令kの全てのオペランドを表すために使用するビットパターンの幅を、total_operands_length[k]とする(仕様)。【００３３】
［定義５］命令kのオペコードフィールドの長さを、opcode_length[k]ビットとする。【００３４】
［定義６］命令kのオペコードフィールドの値を、opcode_value[k]とする。opcode_value[k]は、符号無し整数とする。【００３５】
［定義７］オペコードフィールドの長さがxビットである命令の数を、num_of_inst_having_opcode_length(x)とする。【００３６】
［定義８］値x以上の2のべき乗の最小値を、min_power_of_2(x)とする。【００３７】
［定義９］ビット幅がlengthである値xのビットリバースした値を、bitrev(x,length)とする。【００３８】
次に、上記の定義１〜９を前提にして命令のオペコードを割り当てる方法を以下に示す。以下の方法に対応するフローチャートを図３に示す。【００３９】
（０）まず、仕様データを読込む（ステップＳｔ０）。【００４０】
ここでは、仕様データから命令kの全てのオペランドを表すために使用するビットパターンの幅total_operands_length[k]を読み取る。この処理は図１及び図２に示す仕様データ解析手段６００により実行される。【００４１】
（１）次に、命令のオペコードフィールドのビット幅を決定する（ステップＳｔ１）。【００４２】
ここでは、命令kのオペコードフィールドのビット幅opcode_length[k]を以下のように定義する。【００４３】
opcode_length[k]=N-total_operands_length[k]（k=0,1,...,S-1）
この処理は、図１及び図２に示すオペコードビット幅決定手段１００により実行される。【００４４】
（２）次に、命令をソートする（ステップＳｔ２）。【００４５】
ここでは、total_operands_length[k]にもとづいて、全ての命令をソートする。ソート後の命令の番号をiで表す。最も多くのビットをオペランドに使用する命令の番号iを0とする。最も少ないビットをオペランドに使用する命令の番号iをS-1とする。【００４６】
この処理は、図１及び図２に示す命令並び替え手段２００により実行される。【００４７】
（３）次に、命令のオペコードフィールドの値を決定する（ステップＳｔ３）。【００４８】
ここでは、0番目の命令から順番にオペコードフィールドの値opcode_value[i]を決定する。この処理は、図１に示すオペコード値決定手段３００、又は図２に示す第１のオペコードサブフィールド値決定手段４００と第２のオペコードサブフィールド値決定手段５００によりそれぞれ実行される。【００４９】
上記の手順において、オペコードフィールドを命令のビットパターンのMost Significant Bit(MSB)側に配置する場合、図４（ａ）のようにオペコードフィールドを配置する。一方、オペコードフィールドを命令のビットパターンのLeast Significant Bit(LSB)側に配置する場合、図４（ｂ）のようにオペコードフィールドの値をビットリバースした値を配置する。【００５０】
図４（ａ）及び（ｂ）において、opcode_length[i]は命令iのオペコードのビット幅を、opcode_value[i]は命令iのオペコードの値を、operand_0[i]は命令iの0番目のオペランドの内容を、operand_1[i]は命令iの1番目のオペランドの内容を、operand_q[i]は命令iのq番目のオペランドの内容を、bitrev(X,Y)はXの下位Yビットをビットリバースした値を、それぞれ表す。【００５１】
上記の手順のうち、（３）オペコードフィールドの値を決定する方法（ステップＳｔ３）はいくつかある。以降でその方法について説明する。【００５２】
［第一のオペコード決定方法］
最初に、第一のオペコード決定方法について説明する。【００５３】
このオペコード決定方法では、まず、前述の方法にしたがって、（１）オペコードフィールドのビット幅の決定、（２）命令のソート、を行なう。その後で、以下のようにして、（３）各命令のオペコードの値opcode_value[i]を決定する。【００５４】
このオペコード決定方法のフローチャートを図５に示す。図５において、iは命令の番号を、Sは命令の総数を、opcode_value[i]は命令iのオペコードの値を、opcode_length[i]は命令iのオペコードのビット幅を、それぞれ表す。【００５５】
まず、opcode_value[0]へ0を代入する（ステップＳｔ１１）。【００５６】
続いて、命令の番号iを1からS-1まで順番に変えながら、opcode_value[i]を以下のように決定する（ステップＳｔ１２〜Ｓｔ１５）。【００５７】
opcode_value[i]=((opcode_value[i-1]+1)<<(opcode_length[i]-opcode_length[i-1]))
すなわち、opcode_value[i-1]に1を加算する演算を行う一方、opcode_length[i]からopcode_length[i-1]を減算する演算を行う。そして、前者の演算値を後者の演算値分だけ左にシフトさせる演算を行い、その演算値をopcode_value[i]に代入する。このようにして、各命令のオペコードの値を決定する。【００５８】
上記の第一のオペコード決定方法によるオペコード割り当ての例を図６と図７に示す。図６は14個の命令のビットパターンを表す（S=14）。図６において、Ra、Rb、Rcはレジスタの番号を表すオペランド・フィールドである。IMM6、IMM4、IMM2は数値を表すオペランド・フィールドである。図６において、各命令の語長は16ビットである（N=16）。図６において、ビットパターンのMSB側に書かれた0や1のビットパターンがオペコードを表す。【００５９】
図６のような命令の語長とオペランド・フィールドのビット幅をもつ命令セットの仕様データが与えられたとして、第一のオペコード決定方法により命令Ｕ、Ｖ、Ｗ、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｐ、Ｑ、Ｔのオペコードの値を決定する。【００６０】
図６の命令をopcode_length[i]にもとづいて並び替え、図５のステップＳｔ１１からＳｔ１５までの処理を実行すると図７が得られる。図７に示すように、各命令のオペコードの値opcode_value[i]（i=0、…、13）は、他のどの命令のオペコードの値とも重複していない。したがって、第一のオペコード決定方法で生成されたオペコードによって、各命令を正しく識別することができる。【００６１】
図６は命令の仕様データの一つの表現形態である。必ずしも仕様データを図６のように記述する必要はない。テキストファイルとして仕様データを記述してもよい。【００６２】
上記のように第一のオペコード決定方法は、非常に単純であることが特徴である。さらに、このオペコード決定方法には、下記の他のオペコード決定方法よりも多くの種類のオペコードを表現できるという利点がある。【００６３】
なお、第一のオペコード決定方法で生成されたオペコードは、そのデコードが多少複雑になる。すなわち、上記のオペコードをデコードするには引き算と比較演算が必要になる。命令を１サイクルでデコードするには、複数の引き算と比較演算を同時に実行する必要があるので、下記の他のオペコード決定方法に比べてオペコードのデコード回路の規模が大きくなる。【００６４】
［第二のオペコード決定方法］
次に、第二のオペコード決定方法について説明する。【００６５】
このオペコード決定方法では、まず、前述の方法にしたがって、（１）オペコードフィールドのビット幅の決定（ステップＳｔ１）、（２）命令のソート（ステップＳｔ２）、を行なう。その後で、以下のようにして、（３）各命令のオペコードの値opcode_value[i]を決定する。【００６６】
このオペコード決定方法のフローチャートを図８に示す。図８において、iは命令の番号を、Sは命令の総数を、opcode_value[i]は命令iのオペコードの値を、opcode_length[i]は命令iのオペコードのビット幅を、それぞれ表す。【００６７】
まず、opcode_value[0]へ0を代入する（ステップＳｔ２１）。【００６８】
続いて、命令の番号iを1からS-1まで順番に変えながら、命令iのオペコードの値opcode_value[i]を以下のように決定する（ステップＳｔ２２〜Ｓｔ３０）。【００６９】
ステップＳｔ２３において、opcode_length[i]がopcode_length[i-1]と同じかどうかを
判断する。【００７０】
opcode_length[i]がopcode_length[i-1]と同じなら（ステップＳｔ２３：ＹＥＳ）、opcode_value[i-1]に1を加算する演算を行い、その演算値をopcode_value[i]へ代入する（ステップＳｔ２４）。すなわち、opcode_value[i-1]に1を加算した値をopcode_length[i]とする。【００７１】
一方、opcode_length[i]がopcode_length[i-1]と異なるなら（ステップＳｔ２３：ＮＯ）、opcode_value[i]=(opcode_value[i-1]<<(opcode_length[i]-opcode_length[i-1]))とする（ステップＳｔ２５）。すなわち、opcode_length[i]からopcode_length[i-1]を減算する演算を行う。そして、その演算値分だけ、opcode_value[i-1]を左にシフトさせる演算を行い、その演算値をopcode_value[i]へ代入する。つづいて、ステップＳｔ２６を実行する。【００７２】
ステップＳｔ２６において、(1<<(opcode_length[i]-opcode_length[i-1]))という値よりも、命令iと同じオペコード長をもつ命令の数以上の最小の２のべき乗の値（min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i]))）が大きいかどうか判断し、大きい方の値をZとする。【００７３】
ステップＳｔ２６の判定がＹＥＳの場合、Z=min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i]))として、opcode_value[i]=(opcode_value[i]+Z)&(~(Z-1))という計算式によってopcode_value[i]を求める。【００７４】
一方、ステップＳｔ２６の判定がＮＯの場合、Z=(1<<(opvode_length[i]-opcode_length[i-1]))として、opcode_value[i]=(opcode_value[i]+Z)&(~(Z-1))という計算式によってopcode_value[i]を求める（ステップＳｔ２８）。【００７５】
以上のようにして、各命令のオペコードの値を決定する。【００７６】
上記の第二のオペコード決定方法によるオペコード割り当ての例を図６と図９に示す。図６の命令を仕様データとして、それらの命令をopcode_length[i]にもとづいて並び替え、図８のステップＳｔ２１からＳｔ３０までの処理を実行すると図９が得られる。【００７７】
図９に示すように、各命令のオペコードの値opcode_value[i]（i=0、…、13）は、他のどの命令のオペコードの値とも重複していない。したがって、このオペコード決定方法で生成されたオペコードを使って、各命令を正しく識別することができる。【００７８】
上記のように第二のオペコード決定方法は、第一のオペコード決定方法よりも多少複雑である。しかし、第二のオペコード決定方法は第一のオペコード決定方法よりも、生成されたオペコードをデコードするのが簡単である。なぜなら、第二のオペコード決定方法によって生成されたオペコードは、同じオペコードのビット幅をもつオペコードのグループを表すビット列と、そのグループの中における命令のインデックスを表すビット列とから構成されているためである。これにより、オペコードを二つのビット列に分けて考えることができるため、オペコードを階層的にデコードできる。【００７９】
すなわち、第二のオペコード決定方法で生成されたオペコードをデコードする際には、まず同じオペコードのビット幅をもつオペコードのグループを表すビット列をデコードする。そして、最も長いビット列をもつグループを選択し、次にそのグループの中における命令のインデックスを表すビット列をデコードする。第二のオペコード決定方法で生成されたオペコードをデコードする際には、引き算が必要ない。よって、論理演算とシフト演算だけでデコード回路を作ることができるので、第一のオペコード決定方法に比べて第二のオペコード決定方法のデコード回路は簡単になる。【００８０】
［第三のオペコード決定方法］
次に、第三のオペコード決定方法について説明する。【００８１】
このオペコード決定方法では、まず、前述の方法にしたがって、（１）オペコードフィールドのビット幅の決定（ステップＳｔ１）、（２）命令のソート（ステップＳｔ２）、を行なう。その後で、以下のようにして、（３）各命令のオペコードの値opcode_value[i]を決定する。【００８２】
このオペコード決定方法のフローチャートを図１０に示す。図１０において、iは命令の番号を、Sは命令の総数を、opcode_value[i]は命令iのオペコードの値を、opcode_length[i]は命令iのオペコードのビット幅を、それぞれ表す。【００８３】
まず、opcode_value[0]へ0を代入する（ステップＳｔ３１）。【００８４】
続いて、命令の番号iを1からS-1まで順番に変えながら、opcode_value[i]を以下のようにして決定する（ステップＳｔ３２〜Ｓｔ３８）。【００８５】
ステップＳｔ２３において、opcode_length[i]がopcode_length[i-1]と同じかどうか判断する。【００８６】
opcode_length[i]がopcode_length[i-1]と同じなら（ステップＳｔ２３：ＹＥＳ）、opcode_value[i-1]に1を加算する演算を行い、その演算値をopcode_value[i]へ代入する（ステップＳｔ２４）。【００８７】
一方、opcode_length[i]がopcode_length[i-1]と異なるなら（ステップＳｔ２３：ＮＯ）、命令iと同じオペコード長をもつ命令の数以上の最小の２のべき乗の値（min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i-1]))をZとする（ステップＳｔ３５）。つづいてステップ３６を実行する。【００８８】
ステップ３６において、opcode_value[i]=((opcode_value[i-1]+Z)<<(opcode_length[i]-opcode_length[i-1]))という計算式にもとづいてopcode_value[i]を求める。【００８９】
以上のようにして、各命令のオペコードの値を決定する。【００９０】
上記の第三のオペコード決定方法によるオペコード割り当ての例を図６と図１１に示す。図６の命令を仕様データとして、それらの命令をopcode_length[i]にもとづいて並び替え、図８のステップＳｔ３１からＳｔ３８までの処理を実行すると図１１が得られる。【００９１】
図１１に示すように、各命令のオペコードの値opcode_value[i]（i=0、…、13）は、他のどの命令のオペコードの値とも重複していない。したがって、このオペコード決定方法で生成されたオペコードを使って、各命令を正しく識別することができる。【００９２】
第三のオペコード決定方法によって生成されたオペコードをデコードするには、引き算と比較演算が必要になる。この点は第一のオペコード決定方法と同様である。【００９３】
なお、第三のオペコード決定方法は、第一や第二のオペコード決定方法に比べると、第一のオペコード決定方法よりもオペコード決定方法が単純でなく、第二のオペコード決定方法よりもオペコードのデコードが簡単ではない。【００９４】
［第四のオペコード決定方法］
次に、第四のオペコード決定方法について説明する。【００９５】
このオペコード決定方法では、オペコードフィールドを二つのサブフィールドに分ける。一つはグループ・サブフィールドで、もう一つはインデックス・サブフィールドとする。グループ・サブフィールドをMSB側に配置し、インデックス・サブフィールドをLSB側に配置する。この方法では、インデックス・サブフィールドとグループ・サブフィールドを別々に決定する。【００９６】
このオペコード決定方法のフローチャートを図１２に示す。同図に示すように、この方法は、インデックス・サブフィールドのビット幅を決定する手順と（ステップＳｔ４１）、インデックス・サブフィールドの値を決定する手順と（ステップＳｔ４２）、グループ・サブフィールドのビット幅を決定する手順と（ステップＳｔ４３）、グループ・サブフィールドのビット幅にもとづいて命令を並び替える手順と（ステップＳｔ４４）、グループ・サブフィールドの値を決定する手順と（ステップＳｔ４５）、から構成される。【００９７】
ここで、二つのサブフィールドに関する記号を以下のように定義する。【００９８】
［定義１０］命令iのグループ・サブフィールドの長さを、opcode_sub_grp_length[i]とする。【００９９】
［定義１１］命令iのグループ・サブフィールドの値を、opcode_sub_grp_value[i]とする。【０１００】
［定義１２］命令iのインデックス・サブフィールドの長さを、opcode_sub_idx_length[i]とする。【０１０１】
［定義１３］命令iのインデックス・サブフィールドの値を、opcode_sub_idx_value[i]とする。【０１０２】
［定義１４］全ての命令について、インデックス・サブフィールドの長さを以下のように決める（ステップＳｔ４１）。【０１０３】
opcode_sub_idx_length[i]=min_power_of_2(num_of_inst_having_opcode_length(opcode_length[i]))
［定義１５］全ての命令について、グループ・サブフィールドの長さを以下のように決める（ステップＳｔ４３）。【０１０４】
opcode_sub_grp_length[i]=opcode_length[i]-opcode_sub_idx_length[i]
次に、インデックス・サブフィールドの値を決定する手順を以下に示す。この手順に対応するフローチャートを図１３に示す。図１３において、iは命令の番号を、Sは命令の総数を、opcode_value[i]は命令iのオペコードの値を、opcode_length[i]は命令iのオペコードのビット幅を、opcode_sub_idx_value[i]は命令iのインデックス・サブフィールドの値を、それぞれ表す。【０１０５】
まず、opcode_sub_idx_value[0]へ0を代入する（ステップＳｔ５１）。【０１０６】
続いて、命令の番号iを1からS-1まで順番に変えながら、opcode_sub_idx_value[i]を以下のようにして決定する（ステップＳｔ５２〜Ｓｔ５７）。【０１０７】
ステップＳｔ５３において、opcode_length[i]がopcode_length[i-1]と同じかどうか判断する。【０１０８】
opcode_length[i]がopcode_length[i-1]と同じなら（ステップＳｔ５３：ＹＥＳ）、opcode_sub_idx_value[i-1]に1を加算する演算を行い、その演算値をopcode_sub_idx_value[i]へ代入する（ステップＳｔ５４）。【０１０９】
一方、opcode_length[i]がopcode_length[i-1]と異なるなら（ステップＳｔ５３：ＮＯ）、opcode_sub_idx_value[i]へ0を代入する（ステップＳｔ５５）。【０１１０】
次に、グループ・サブフィールドのビット幅にもとづいて命令を並び替える手順について説明する。命令iのグループ・サブフィールドの長さopcode_sub_grp_length[i]にもとづいて全ての命令を並び替える。並び替えられた後の命令の番号をnとする。最も多くのビットをグループ・サブフィールドに使用する命令の番号nを0、最も少ないビットをグループ・サブフィールドに使用する命令の番号nをS-1とする。【０１１１】
次に、グループ・サブフィールドの値を決定する手順を以下に示す。この手順に対応するフローチャートを図１４に示す。図１４において、nは命令の番号を、Sは命令の総数を、opcode_value[n]は命令nのオペコードの値を、opcode_length[n]は命令nのオペコードのビット幅を、opcode_sub_grp_value[n]は命令nのグループ・サブフィールドの値を、opcode_sub_grp_length[n]は命令nのグループ・サブフィールドのビット幅を、それぞれ表す。【０１１２】
まず、opcode_sub_grp_value[0]へ0を代入する（ステップＳｔ６１）。【０１１３】
続いて、命令の番号nを1からS-1まで順番に変えながら、opcode_sub_grp_value[n]を以下のようにして決定する（ステップＳｔ６２〜Ｓｔ６６）。【０１１４】
ステップＳｔ６３において、opcode_length[n]がopcode_length[n-1]と同じかどうか判断する。【０１１５】
opcode_length[n]がopcode_length[n-1]と同じなら（ステップＳｔ６３：ＹＥＳ）、opcode_sub_grp_value[n-1]をopcode_sub_grp_value[n]へ代入する（ステップＳｔ６４）。【０１１６】
一方、opcode_length[n]がopcode_length[n-1]と異なるなら（ステップＳｔ６３：ＮＯ）、opcode_sub_grp_value[n]=((opcode_sub_grp_value[n-1]+1)<<(opcode_sub_grp_length[n]-opcode_sub_grp_length[n-1]))という計算式にもとづいてopcode_sub_grp_value[n]を求める（ステップＳｔ６５）。【０１１７】
以上のようにして、各命令のオペコードの値を決定する。【０１１８】
上記の第四のオペコード決定方法によるオペコード割り当ての例を図１５から図１８に示す。【０１１９】
図１５は１４個の命令のビットパターンを表す（S=14）。図１５において、Ra、Rb、Rcはレジスタの番号を表すオペランド・フィールドである。IMM6、IMM4、IMM2は数値を表すオペランド・フィールドである。各命令の語長は１６ビットである（N=16）。命令ビットパターンのLSB側にオペランドを配置し、命令ビットパターンのMSB側にオペコードフィールドを配置する。【０１２０】
図１５の命令を仕様データとして、それらの命令をopcode_length[i]にもとづいて並び替え、図１３のステップＳｔ５１からＳｔ５７までの処理を実行すると図１６が得られる。図１６は図１５の命令に対するインデックス・サブフィールドの値を表す。【０１２１】
つづいて、インデックス・サブフィールドの値が求まった図１６の命令を使って、それらの命令のグループ・サブフィールドのビット幅を求める。そして、グループ・サブフィールドのビット幅にもとづいて命令を並び替えると図１７が得られる。【０１２２】
つづいて、図１７の命令に対して図１４のステップＳｔ６１からステップＳｔ６７までの処理を実行すると図１８が得られる。図１８は図１７の命令に対するグループ・サブフィールドの値を表す。以上の処理によって、各命令のインデックス・サブフィールドとグループ・サブフィールドの値が求まる。そして、インデックス・サブフィールドとグループ・サブフィールドとを連結したビット列がオペコードの値となる。【０１２３】
図１８に示すように、グループ・サブフィールドの値opcode_sub_grp_value[i]（i=0、…、13）と、インデックス・サブフィールドの値opcode_sub_idx_value[i]（i=0、…、13）とで構成される各命令のオペコードの値は、他のどの命令のオペコードの値とも重複していない。したがって、このオペコード決定方法を使って、各命令をオペコードによって正しく識別することができる。【０１２４】
第四のオペコード決定方法は、同じオペコードのビット幅をもつオペコードのグループを表すビット列と、そのグループの中における命令のインデックスを表すビット列とから構成される。これは、第二のオペコードと同じ特徴である。したがって、第二のオペコードと同様に、オペコードをデコードするのが簡単である。オペコードのデコード処理には引き算が必要無く、論理演算とシフト演算だけでオペコードをデコードできる。【０１２５】
さらに、第四のオペコード決定方法によって生成されたオペコードには、短いオペコードのグループ・サブフィールドが別の長いオペコードのグループ・サブフィールドに部分的に一致することがない、という特徴がある。これは第二のオペコード決定方法にはない特徴である。この特徴によって、第二のオペコード決定方法よりもデコード処理が簡単になる。【０１２６】
すなわち、第二のオペコード決定方法で生成されたオペコードをデコードする際には、まず同じオペコードのビット幅をもつオペコードのグループを表すビット列をデコードし、最も長いビット列をもつグループを選択する必要がある。なぜなら、同じオペコードのビット幅をもつオペコードのグループを表すビット列が部分的に一致しているため、それらの中から最もふさわしいグループを選択しなければならないからである。第二のオペコード決定方法に比べて、第四のオペコード決定方法は、表現できるオペコードの種類が少ない。命令語長が24ビットや32ビットなどの場合には、この点はあまり問題にならないだろう。【０１２７】
次に、上記第一〜第四のオペコード決定方法のうち、何れのオペコード決定方法を選択するかについて説明する。【０１２８】
一般的には、デコード処理が簡単になるようなオペコード決定方法を選択するべきである。これまでに述べたオペコード決定方法の中では、第四のオペコード決定方法のデコード処理が最も容易である。もし、表現可能なオペコードの数を多くしたい場合には、第二のオペコード決定方法を選択してもよい。【０１２９】
以上、本発明の実施例を詳細に説明したが、本発明は、代表的に例示した上述の実施例に限定されるものではなく、当業者であれば、特許請求の範囲の記載内容に基づき、本発明の要旨を逸脱しない範囲内で種々の態様に変形、変更、応用することができ、これらの変形例、変更例、応用例も本発明の権利範囲に属するものである。【０１３０】
［変形例］
これまでに述べた実施例では、命令のビットパターンのMSB側にオペコードが配置される。しかし、オペコードの位置はMSB側である必要はない。命令のビットパターンのLSB側にオペコードを配置してもよい。あるいは、命令のビットパターンの中間的な位置にオペコードを配置してもよい。あるいは、オペコードをいくつかの断片に分けて命令のビットパターンの中に配置してもよい。【０１３１】
［応用例］
本発明の実施例を特許文献３にあるようなプロセッサのハードウェア構成生成ツールやソフトウェア開発ツール生成ツールに応用することも可能である。こうしたツールはプロセッサの仕様からハードウェア構成あるいはソフトウェア開発ツールを生成する。プロセッサの仕様には命令セットの仕様も含まれる。特許文献３では命令セットの仕様にオペコードのビット幅や値が含まれていたが、本発明の実施例を使えばオペコードのビット幅と値を自動的に決定することができる。そして決定されたオペコードを正しくデコードしたりエンコードしたりするためのハードウェア構成やソフトウェア開発ツールを生成するといった応用も可能になる。【０１３２】
本発明の実施例に係る命令オペコード生成システムを構成する各手段の少なくとも一部の機能を、コンピュータのプログラムコードを用いて実現する場合、かかるプログラムコード及びこれを記録するコンピュータ読み取り可能な記録媒体は、本発明の範疇に含まれる。この場合のプログラムコードは、上記の機能をコンピュータに実現させるものであればよい。例えば、オペレーティングシステム（ＯＳ）等の他のプログラムコードと連携して上記の機能が実現されてもよい。また、このようなプログラムコードを記録するコンピュータ読み取り可能な記録媒体としては、例えばＲＯＭ（read only memory）等の半導体メモリ、ディスク型の記録媒体（ハードディスク等の磁気ディスク、光ディスク、光磁気ディスク等）、テープ型の記録媒体等、いずれの形態の記録媒体でも適用可能である。【０１３３】
また、本発明の実施例に係る命令オペコード生成システムを構成するプログラムコードの命令を実行するコンピュータ機についても、本発明の範疇に含まれる。このコンピュータ機は、プログラム制御で動作するプロセッサ（ＣＰＵ）と、制御プログラムや制御データ等を格納する記憶領域を有するメモリと、各種入出力装置（例えば、ハードディスク等の外部記録装置、通信モデムやＬＡＮ（local area network）インタフェース等の通信装置、ＣＲＴ（cathode ray tube）や液晶ディスプレイ等の表示装置、キーボードやマウス等の入力装置等の各種周辺装置の少なくとも一部とを用いて実現することが可能である。この場合、上記各手段の機能を実現するために用いられるプロセッサ、メモリ、及び各種入出力装置は、本発明の範疇に含まれる。このコンピュータ機は、スタンドアロン型のものでも、ネットワークに通信可能に接続された複数のコンピュータ機から構成されるものでも、いずれの形態でも適用可能である。【０１３４】
この出願は、２００６年１１月２１日に出願された日本出願特願２００６−３１４２６０号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１３５】
本発明を使用すれば、命令セットの仕様記述から各命令のオペコードを自動的に生成することができる。プロセッサの仕様記述からプロセッサのハードウェア記述を生成するようなシステムにおいて本発明を使用することが可能である。あるいは、命令セットの使用記述からアセンブラやコンパイラなどのソフトウェア開発ツールを生成するようなシステムにおいても本発明を使用することが可能である。
【図１】
2008062768.tif 000003
【図２】
2008062768.tif 000004
【図３】
2008062768.tif 000005
【図４】
2008062768.tif 000006
【図５】
2008062768.tif 000007
【図６】
2008062768.tif 000008
【図７】
2008062768.tif 000009
【図８】
2008062768.tif 000010
【図９】
2008062768.tif 000011
【図１０】
2008062768.tif 000012
【図１１】
2008062768.tif 000013
【図１２】
2008062768.tif 000014
【図１３】
2008062768.tif 000015
【図１４】
2008062768.tif 000016
【図１５】
2008062768.tif 000017
【図１６】
2008062768.tif 000018
【図１７】
2008062768.tif 000019
【図１８】
2008062768.tif 000020
【国際調査報告】
2008062768.tif 000021
2008062768.tif 000022
2008062768.tif 000023
2008062768.tif 000024