(57)【要約】【課題】命令テーブルを記述性および可読性に優れた命令定義体から自動的に生成することができる生成装置を提供する。【解決手段】命令定義体は、命令フォーマットを表現する記述列を含む。記述列は命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、命令フィールドの各々において指定される内容を表す内容文字列との対を命令フィールドの並び順で記述している。構文解析部１１１は記述列に基づいて、命令フィールドの各々についての１つの項目に関する値を取得する。計算部１１２は、構文解析部１１１が取得する１つの項目に関する値を用いて命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち１つの項目と異なる他の項目に関する値を計算する。【選択図】図１
2015203895.tif 000002
【特許請求の範囲】
【請求項１】
命令セットを定義する命令定義体に対して構文解析を行なう構文解析部を備え、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析部は前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得し、
前記構文解析部が取得する前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算する計算部をさらに備える、
命令テーブル生成装置。
【請求項２】
前記命令定義体の前記命令フィールドの前記内容文字列は定数文字列を含み、
前記構文解析部は、前記定数文字列を数値へ、基数を考慮して変換する、請求項１に記載の命令テーブル生成装置。
【請求項３】
前記構文解析部は、前記命令定義体の命令フィールドの定数文字列を解析することによって前記基数を判定する、請求項２に記載の命令テーブル生成装置。
【請求項４】
前記構文解析部は、前記基数を指定する入力を前記命令定義体とは別に受け付ける、請求項２に記載の命令テーブル生成装置。
【請求項５】
前記命令フィールドは、互いに隣接する第１および第２の命令フィールドを含み、
前記計算部は、前記第１の命令フィールドについてのＬＳＢ位置およびＭＳＢ位置の一方の項目に関する値と前記第１の命令フィールドのサイズとから、前記第２の命令フィールドについての前記一方の項目の値を計算する、請求項１に記載の命令テーブル生成装置。
【請求項６】
前記命令フィールドは、ｋを自然数としてｋ番目および（ｋ＋１）番目の命令フィールドを含み、
前記計算部は、ｋ番目および（ｋ＋１）番目の命令フィールドのＭＳＢ位置の差分からｋ番目の命令フィールドのサイズを計算する、請求項１に記載の命令テーブル生成装置。
【請求項７】
前記命令フィールドは、ｋを自然数として、ｋ番目、（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドを含み、
前記計算部は、（ｋ＋１）番目の命令フィールドのＬＳＢ位置と（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドの各々のＭＳＢ位置とを用いて、ｋ番目の命令フィールドのＬＳＢ位置を計算する、請求項１に記載の命令テーブル生成装置。
【請求項８】
前記命令定義体の前記命令フィールドの前記内容文字列は定数文字列を含み、
前記構文解析部は、前記定数文字列を数値に変換し、
前記命令フィールドのうち前記定数文字列と対をなすものが、前記数値を表現することができるサイズを有するか否かを検出する検出部をさらに備える、請求項１に記載の命令テーブル生成装置。
【請求項９】
命令セットを定義する命令定義体に対して構文解析を行なう構文解析部を備え、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析部は前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得し、
前記構文解析部が取得する前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算する計算部をさらに備える、
命令デコードプログラム生成装置。
【請求項１０】
前記命令定義体の前記命令フィールドの前記内容文字列は定数文字列を含み、
前記構文解析部は、前記定数文字列を数値へ、基数を考慮して変換する、請求項９に記載の命令デコードプログラム生成装置。
【請求項１１】
前記構文解析部は、前記命令定義体の命令フィールドの定数文字列を解析することによって前記基数を判定する、請求項１０に記載の命令デコードプログラム生成装置。
【請求項１２】
前記構文解析部は、前記基数を指定する入力を前記命令定義体とは別に受け付ける、請求項１０に記載の命令デコードプログラム生成装置。
【請求項１３】
前記命令フィールドは、互いに隣接する第１および第２の命令フィールドを含み、
前記計算部は、前記第１の命令フィールドについてのＬＳＢ位置およびＭＳＢ位置の一方の項目に関する値と前記第１の命令フィールドのサイズとから、前記第２の命令フィールドについての前記一方の項目の値を計算する、請求項９に記載の命令デコードプログラム生成装置。
【請求項１４】
前記命令フィールドは、ｋを自然数としてｋ番目および（ｋ＋１）番目の命令フィールドを含み、
前記計算部は、ｋ番目および（ｋ＋１）番目の命令フィールドのＭＳＢ位置の差分からｋ番目の命令フィールドのサイズを計算する、請求項９に記載の命令デコードプログラム生成装置。
【請求項１５】
前記命令フィールドは、ｋを自然数として、ｋ番目、（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドを含み、
前記計算部は、（ｋ＋１）番目の命令フィールドのＬＳＢ位置と（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドの各々のＭＳＢ位置とを用いて、ｋ番目の命令フィールドのＬＳＢ位置を計算する、請求項９に記載の命令デコードプログラム生成装置。
【請求項１６】
前記命令定義体の前記命令フィールドの前記内容文字列は定数文字列を含み、
前記構文解析部は、前記定数文字列を数値に変換し、
前記命令フィールドのうち前記定数文字列と対をなすものが、前記数値を表現することができるサイズを有するか否かを検出する検出部をさらに備える、請求項９に記載の命令デコードプログラム生成装置。
【請求項１７】
命令セットを定義する命令定義体に対して構文解析部が構文解析を行なうステップを備え、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析を行なうステップは、前記構文解析部が前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得するステップを含み、
前記構文解析部が取得した前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算部が計算するステップをさらに備える、
命令テーブル生成方法。
【請求項１８】
命令セットを定義する命令定義体に対して構文解析部が構文解析を行なうステップを備え、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析を行なうステップは、前記構文解析部が前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得するステップを含み、
前記構文解析部が取得した前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算部が計算するステップをさらに備える、
命令デコードプログラム生成方法。
【請求項１９】
命令テーブルの生成をコンピュータに実行させるためのプログラムであって、前記プログラムは前記コンピュータに、
命令セットを定義する命令定義体に対して構文解析部が構文解析を行なうステップを実行させ、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析を行なうステップは、前記構文解析部が前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得するステップを含み、
前記構文解析部が取得した前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算部が計算するステップをさら実行させる、
プログラム。
【請求項２０】
命令デコードプログラムの生成をコンピュータに実行させるためのプログラムであって、前記プログラムは前記コンピュータに、
命令セットを定義する命令定義体に対して構文解析部が構文解析を行なうステップを実行させ、前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含み、前記命令定義体は、前記命令フォーマットを表現する記述列を含み、前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述しており、前記構文解析を行なうステップは、前記構文解析部が前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得するステップを含み、
前記構文解析部が取得した前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算部が計算するステップをさら実行させる、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令テーブル生成装置、命令デコードプログラム生成装置、命令テーブル生成方法、命令デコードプログラム生成方法、およびプログラムに関するものである。
【背景技術】
【０００２】
命令セットシミュレータおよびディスアセンブラなどのソフトウェアは、バイナリ形式で与えられた命令語の命令を識別するための命令デコード処理を含む。命令デコード処理はターゲットＣＰＵ(Central Processing Unit)の命令セットに依存している。このため複数のＣＰＵに対応した命令セットシミュレータまたはディスアセンブラを得るためにはＣＰＵごとの命令デコード処理を開発する必要がある。
【０００３】
ＣＰＵごとの命令デコード処理の開発を容易化する方法には、命令セットアーキテクチャ依存の情報を保持した命令テーブルを入力としてデコード処理を行なう方法がある。命令テーブルは、命令の識別に必要な命令ごとのフォーマット情報を保持するデータである。命令の識別に必要なフォーマット情報には、命令語中のどのビットが定数を持つかの情報と、定数を持つビットごとの値に関する情報とが含まれる。フォーマット情報を表現するデータ構造としては、命令語と同じ長さのビット列を命令語のビット列と同じ並び順で一対一に対応させた、マスクパターンとオペコードパターンとの対が用いられる。
【０００４】
マスクパターンは、定数を持つビットに対応するビットには"1"を、それ以外のビットには"0"を保持するビットパターンである。またオペコードパターンは、命令語中の定数を持つビットに対応するビットには当該定数の値を、それ以外のビットには"0"を保持するビットパターンである。
【０００５】
上記の命令テーブルと命令語とを入力とする命令デコード処理は、命令テーブルを巡回し、命令語と一致する命令テーブルエントリを見つけることで、命令の識別を行なう。命令語が命令テーブルエントリと一致するか否かの判定は、命令語とマスクパターンとのビットごとの論理積がオペコードパターンと一致するか否かで行なわれる。
【０００６】
マスクパターンとオペコードパターンとの対を用いた命令テーブルは、命令エンコーディング図に基づいて作成し得る。命令エンコーディング図は、命令フォーマットを視覚的に表現した図でありＣＰＵのマニュアル記載などにも一般に用いられている。命令エンコーディング図において命令フォーマットは命令フィールドごとに区切られている。各命令フィールドには、命令フィールドが定数、すなわちオペコードフィールドの場合、オペコードの値が記載される。また、命令フィールドが任意値、すなわちオペランドフィールドまたは未使用フィールドの場合には、オペランド名の記号または未使用であることを表す記号が記載される。さらに命令フィールドごとに、命令フィールドの位置およびサイズが、対応する命令フィールド付近に、必要に応じて記載されている。
【０００７】
命令エンコーディング図から命令テーブルを人手で直接に作成することも可能であるが、作業をより容易とするために、命令セットの定義を表現する命令定義体を作成し、この命令定義体から命令テーブルを生成することが提案されている。
【０００８】
特開平８−２３５０１９号公報（特許文献１）によれば、命令定義体が有する複数のエントリの各々は、１つの命令を表す文字列を有する。マスクデータテーブル生成処理においては、命令セットの定義を表現する命令定義体中の各エントリの文字パターンから１または０を表現する文字が現れる文字位置に対応するマスクデータテーブルの対応するエントリのビット位置に０が置かれ、その他の場合は０が置かれる。オペコードテーブル生成処理においては、命令定義体中の各エントリの文字パターンから１を表現する文字が現れる文字位置に対応するビット位置に１が置かれ、その他の場合は０が置かれる。またオペランドデータ生成処理においては、命令定義体中の各項目の文字パターンから連続する一文字以上の文字で構成されるオペランド定義フィールドが抽出され、オペランドデータの生成が行なわれる。
【０００９】
上記公報において文字列の例として"1101ssdd"が挙げられている。文字のそれぞれは右から左へ順に０ビット目から７ビット目に対応している。"1101"がMOV命令のオペコードを表しており、"ss"がソースレジスタ番号を表しており、"dd"がディスティネーションレジスタ番号を表している。この場合、マスクデータテーブルには"11110000"が、オペコードテーブルには"11010000"が生成される。またフィールド名ｓｓおよびｄｄが定義される。フィールドｄｄは０ビット目および１ビット目で示され、フィールドｓｓは２ビット目および３ビット目で示される。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平８−２３５０１９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記公報の方法によると、命令定義体中に含めるオペコードは必ず２進数で表現されなければならない。しかしながら命令エンコーディング図は２進数を用いているとは限らず、たとえば１６進数が用いられることも多い。この場合、１６進数を２進数へ変換しなければならず、さらにその結果を"0"または"1"の文字として入力する際にビット位置を誤らないよう留意が必要である。また入力されたデータの正しさを確認する場合は、ビット数を数えながら２進数のデータを把握することや、２以外の基数での表現への変換が必要となり得る。また各オペランドに対応するビット位置に"s"または"d"などの特定の文字を入力する際にも、ビット位置を誤らないよう留意が必要である。さらに、命令エンコーディング図においてオペランドフィールドの名称が複数の文字からなる場合は、"s"または"d"など何らか１種類の文字を割り当てる作業を要する。
【００１２】
以上のように、従来の方法では、命令定義体を作成する作業の労力が大きく、また作業に誤りが生じやすかった。これは、命令テーブルまたは命令デコードプログラムを複数のＣＰＵの各々について開発する場合に特に深刻となる。
【００１３】
本発明は以上のような課題を解決するためになされたものであり、その目的は、命令テーブルまたは命令デコードプログラムを記述性および可読性に優れた命令定義体から自動的に生成することができる生成装置および生成方法、ならびにプログラムを提供することである。
【課題を解決するための手段】
【００１４】
本発明の命令テーブル生成装置または命令デコードプログラム生成装置は構文解析部および計算部を含む。構文解析部は、命令セットを定義する命令定義体に対して構文解析を行なう。前記命令セットは、複数の命令フィールドを有する命令フォーマットで定義される命令を含む。前記命令定義体は、前記命令フォーマットを表現する記述列を含む。前記記述列は前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列と、前記命令フィールドの各々において指定される内容を表す内容文字列との対を前記命令フィールドの並び順で記述している。前記構文解析部は前記記述列に基づいて、前記命令フィールドの各々についての前記１つの項目に関する値を取得する。計算部は、前記構文解析部が取得する前記１つの項目に関する値を用いて前記命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち前記１つの項目と異なる他の項目に関する値を計算する。
【発明の効果】
【００１５】
本発明によれば、命令定義体の記述列が各命令フィールドについて記述する位置・サイズ関連文字列が、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表し、これに基づいて他の項目の情報が計算される。これにより、記述性および可読性を優先した命令定義体からであっても、命令テーブルまたは命令デコードプログラムの生成に必要な、命令フィールドの位置・サイズ関連の十分な情報が得られる。よって、命令テーブルまたは命令デコードプログラムを、記述性および可読性に優れた命令定義体から自動的に生成することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態１における命令テーブル生成装置を含む命令セットシミュレーションシステムの構成を概略的に示すブロック図である。
【図２】命令フォーマットの情報としてマスクパターンおよびオペコードパターンを用いた命令テーブルの例を示す。
【図３】図１の命令セットシミュレータによる命令デコード処理を概略的に示すフロー図である。
【図４】図２の命令テーブルに対応する命令エンコーディング図である。
【図５】本発明の実施の形態１における命令定義体の文法を表した拡張バッカス・ナウア記法（ＥＢＮＦ）を示す図である。
【図６】本発明の実施の形態１における、ADD命令の命令フォーマットと、対応する命令定義体エントリの記述とを例示する図である。
【図７】本発明の実施の形態１における命令テーブルの生成方法を概略的に示すフロー図である。
【図８】図７の命令フィールド位置・サイズ解決処理のより詳細を示すフロー図である。
【図９】図８の構文解析処理のより詳細を示すフロー図である。
【図１０】図９の"CONTENT"部読出処理のより詳細を示すフロー図である。
【図１１】図１０の"CONSTANT"部読出処理のより詳細を示すフロー図である。
【図１２】図６のADD命令の命令定義体エントリに対して図８の構文解析処理を適用した結果得られる情報を示す図である。
【図１３】図８の位置・サイズ計算処理のより詳細を示すフロー図である。
【図１４】図１２の構文解析結果に対して図１３のフィールド位置・サイズ計算処理を適用した結果得られる情報を示す図である。
【図１５】図７の命令テーブル生成処理のより詳細を示すフロー図である。
【図１６】図１５のオペコードパターン生成処理のより詳細を示すフロー図である。
【図１７】図１５のマスクパターン生成処理のより詳細を示すフロー図である。
【図１８】本発明の実施の形態２における命令デコードプログラム生成装置を含む命令セットシミュレーションシステムの構成を概略的に示すブロック図である。
【図１９】図２の命令テーブルを入力とする命令デコード処理と等価な図１８の命令デコードプログラムのＣ言語コードを示す図である。
【図２０】本発明の実施の形態２における命令デコードプログラムの生成方法を概略的に示すフロー図である。
【図２１】図２０の命令デコードプログラム生成処理のより詳細を示すフロー図である。
【図２２】本発明の実施の形態３における命令定義体の文法を表したＥＢＮＦを示す図である。
【図２３】本発明の実施の形態３における"CONSTANT"部読出処理の構成を概略的にを示すフロー図である。
【図２４】本発明の実施の形態４における構文解析部およびそれへの入力を概略的に示すブロック図である。
【図２５】本発明の実施の形態５における、ADD命令の命令フォーマットと、対応する命令定義体エントリの記述とを例示する図である。
【図２６】図２５のADD命令の命令定義体エントリに対して図８の構文解析処理を適用した結果得られる情報を示す図である。
【図２７】本発明の実施の形態５における位置・サイズ計算処理の構成を概略的に示すフロー図である。
【図２８】図２６の構文解析結果に対して図２７のフィールド位置・サイズ計算処理を適用した結果得られる情報を示す図である。
【図２９】本発明の実施の形態６の命令テーブル生成部の構成を概略的に示すブロック図である。
【図３０】本発明の実施の形態６におけるオペコードパターン生成処理の構成を概略的に示すフロー図である。
【図３１】本発明の実施の形態７において命令テーブルまたは命令デコードプログラムの生成を実行するコンピュータを含むシステムを概略的に示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、図面に基づいて本発明の実施の形態について説明する。なお、以下の図面において同一または相当する部分には同一の参照番号を付しその説明は繰返さない。
【００１８】
（実施の形態１）
図１は、本実施の形態における命令テーブル生成装置１０１を含む命令セットシミュレーションシステム９０１の構成を概略的に示すブロック図である。命令セットシミュレーションシステム９０１は、命令定義体記憶部５０と、命令テーブル記憶部５１と、実行対象プログラム記憶部６０と、命令セットシミュレータ９１と、命令テーブル生成装置１０１とを有する。命令定義体は、命令セットを定義するデータであり、詳しくは後述する。命令テーブル生成装置１０１は命令フィールド位置・サイズ解決部１１０および命令テーブル生成部１２１を有する。命令フィールド位置・サイズ解決部１１０は構文解析部１１１および計算部１１２を有する。
【００１９】
図２は、命令フォーマットの情報としてマスクパターンおよびオペコードパターンを用いた命令テーブルの例を示す。この命令テーブルは、インフィニオンテクノロジーズ社のTriCore（登録商標）アーキテクチャの命令セットに含まれるADD命令、EQ命令、SUB命令およびABS命令の４命令に対応した命令テーブルである。なお、図中のビットパターンには可読性向上のため４ビットごとにハイフンが入れられている。
【００２０】
ADD命令のマスクパターン
0000-1111-1110-0000-0000-0000-1111-1111
は、ADD命令の命令語が、ＬＳＢ（最下位ビット：Least Significant Bit）を０ビット目としてＬＳＢからＭＳＢ（最上位ビット：Most Significant Bit）に向かって数えたとき、２７〜２１ビット目のビットと７〜０ビット目のビットとが定数を持ち、それ以外のビットが任意の値を持つことを表す。
【００２１】
またADD命令のオペコードパターン
0000-0000-0000-0000-0000-0000-1000-1011
は、定数を持つ２７〜２１ビット目のビット列が"0000000"であり、定数を持つ７〜０ビット目のビット列が"10001011"であることを表す。すなわち、２７〜２１ビット目はすべて定数"0"であり、７ビット目と３ビット目と１ビット目と０ビット目とが定数"1"であり、６ビット目と５ビット目と４ビット目と２ビット目とが定数"0"である。
【００２２】
上記の命令テーブルおよび命令語を入力とする命令デコード処理は、命令テーブルを巡回し、命令語に一致する命令テーブルエントリを見つけることで、命令の識別を行なう。
【００２３】
図３は、命令セットシミュレータ９１（図１）が命令のデコードを行なう命令デコード処理のフロー図である。ステップＳ９１〜Ｓ９４は、命令テーブルエントリを巡回するループ処理である。ループの繰返しごとに変数ｉは、１から、命令テーブルのエントリ数（図２の場合は４）まで、１ずつ増加する。ステップＳ９２は、命令語がｉ番目の命令テーブルエントリのパターンと一致するか否かを判定し、一致していればステップＳ９３に分岐し、それ以外の場合はステップＳ９４に分岐する条件分岐処理である。命令語が命令テーブルエントリと一致するか否かの判定は、命令語とマスクパターンのビットごとの論理積がオペコードパターンと一致するか否かで行なわれる。ステップＳ９３では、命令識別子としてｉ番目の命令テーブルエントリの命令識別子が記憶される。ステップＳ９０が終了した時点で、命令語に対応した命令識別子が得られる。
【００２４】
図４は命令テーブル（図２）に対応する、TriCoreの命令エンコーディング図である。ADD命令、EQ命令、SUB命令およびABS命令の各々は、複数の命令フィールドを有する命令フォーマットで定義されている。
【００２５】
たとえばADD命令の命令エンコーディング図は、縦棒で区切られた５つの四角形の領域で表現されており、それぞれが５つの命令フィールドに対応している。命令フィールドは、たとえば、互いに隣接する"0x00"の命令フィールドと"c"の命令フィールドとを含んでいる。命令フィールドには、"0x"で始まる１６進数文字列、英数字の文字列、または"-"が記述されている。命令フィールド中の１６進数文字列は、命令語の定数であるオペコードの値である。また命令フィールド中の英数字文字列は、オペランドフィールドの名前である。たとえば、"a"および"b"はデータレジスタを表しており、"const9"は９ビットの任意値を表している。上記ADD命令においては、データレジスタ"ａ"の内容が"const9"の内容に加えられ、その結果がデータレジスタ"c"に格納される。また命令フィールド中の"-"は未使用（空）であることを表している。
【００２６】
図５は、本実施の形態における命令定義体の文法を表したＥＢＮＦを示す。命令定義体は、テキスト文字列であり、非終端記号"DEFINITION"から導出される。命令定義体は、デコード対象となる命令ごとにエントリ"ENTRY"を持つ。各エントリは、命令識別子"ID"および命令フォーマット"FORMAT"の対である。命令識別子"ID"は英数字文字列であり、命令フォーマット"FORMAT"は、命令フィールドごとの情報を表す文字列が、命令語に現れる命令フィールドと同じ順で並べられた文字列である。
【００２７】
命令フィールドごとの情報は、命令フィールドの数字"DICIMAL_NUMER"および内容"CONTENT"の対である。"DECIMAL_NUMBER"は１０進数の文字列であり、本実施の形態においては命令フィールドのサイズを意味する。フィールドの内容"CONTENT"は、命令定義体の命令フィールドの内容文字列であり、定数文字列"CONSTANT"、オペランド文字列"OPERAND"、または空である。定数文字列"CONSTANT"は１６進数の文字列表現であり接頭語として"0x"を持つ。オペランド文字列"OPERAND"は、英字で始まる英数字文字列である。
【００２８】
内容"CONTENT"が定数"CONSTANT"の場合は、対応する命令フィールドが定数であること、すなわち命令識別用のオペコードフィールドであることを意味する。また、内容"CONTENT"がオペランド文字列"OPERAND"である場合、対応する命令フィールドがオペランドフィールドであることを意味する。また、"CONTENT"が空の場合、命令フィールドは任意の値を持つことを意味する。
【００２９】
たとえば、命令定義体におけるADD命令の表現は、
4[c]7[0x00]9[const9]4[a]8[0x8B]
である。
【００３０】
図６は、本実施の形態における、ADD命令の命令フォーマット（図中、上段）と、対応する命令定義体エントリの記述（図中、下段）との例を示す。"4[c]"の部分は、命令の３１〜２８ビット目が"c"で識別される４ビットのオペランドフィールドであり任意の値を持つことを意味する。"7[0x00]"の部分は、命令の２７〜２１ビット目が７ビットのオペコードフィールドであり定数０であることを意味する。"9[const9]"の部分は、命令の２０〜１２ビット目の部分が"const9"で識別される9ビットのオペランドフィールドであり任意の値を持つことを意味する。"4[a]"の部分は、命令の１１〜８ビット目がオペランドフィールドであり任意の値を持つことを意味する。"8[0x8B]"の部分は、命令の７〜０ビット目が8ビットのオペコードフィールドであり１６進数で"8B"すなわち２進数で"10001101"を定数として持つことを意味する。このように、命令定義体は、命令フォーマットを表現する記述列を含む。
【００３１】
この記述列は本実施の形態においては、命令フィールドの各々についてサイズを表す位置・サイズ関連文字列（たとえば図中"8"）と、命令フィールドの各々において指定される内容を表す内容文字列（たとえば図中"0x8B"）との対（たとえば図中"8[0x8B]"）を、命令フィールドの並び順で記述している。なお位置・サイズ関連文字列は、本実施の形態においては上述したようにサイズを表すものであるが、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表すものであり得る。
【００３２】
図７は、本発明の実施の形態１における命令セットシミュレーションの方法を概略的に示すフロー図である。命令フィールド位置・サイズ解決処理（ステップＳ３０）は、命令定義体記憶部５０（図１）に記憶された命令定義体を入力として、命令定義体中で記述されたすべての命令フィールドについて位置とサイズとを計算によって解決する処理である。ステップＳ６０Ｔは、命令テーブルを生成する処理であり、入力された命令定義体の情報と、ステップＳ３０で計算された命令フィールドのサイズの情報とに基づいて、命令テーブルを生成する。命令テーブルは、命令識別子、オペコードパターンおよびマスクパターンの組をエントリとするテーブルである。生成された命令テーブルは、命令テーブル記憶部５１（図１）に格納される。命令セットシミュレータ９１（図１）は、命令テーブル記憶部５１および実行対象プログラム記憶部６０（図１）の各々の内容を入力として実行対象プログラムを模擬実行する。
【００３３】
図８は、命令フィールド位置・サイズ解決処理（図７：ステップＳ３０）のより詳細を示すフロー図である。この処理の全体は、ステップＳ３１およびＳ３２の間のループ処理である。このループ処理は、命令定義体のエントリを巡回する処理であり、繰返しごとに命令定義体の１つのエントリを処理する。
【００３４】
構文解析処理（ステップＳ３０００）では、命令定義体中において図５の非終端記号"FORMAT"に相当する部分が構文解析部１１１（図１）によって構文解析される。これにより命令定義体に記載された命令フォーマットの情報が読み出される。本実施の形態においては、この処理において構文解析部１１１は命令定義体の記述列に基づいて、命令フィールドの各々についてのサイズに関する値を取得する。より一般的に言えば、記述列は命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目を表す位置・サイズ関連文字列を記述しており、構文解析部１１１は記述列に基づいて、命令フィールドの各々についての上記１つの項目に関する値を取得する。
【００３５】
フィールド位置・サイズ計算処理（ステップＳ５０００）では、ステップＳ３０００で読み出された命令フィールドごとの情報を入力として、計算部１１２（図１）が命令フィールドごとの位置を計算する。本実施の形態の場合、命令フィールドのサイズはステップＳ３０００で構文解析部１１１が取得済であるため、ステップＳ５０００では、サイズに関する値を用いて命令フィールドの各々について、サイズとは異なる項目、すなわち、ＬＳＢ位置またはＭＳＢ位置が計算される。より一般的に言えば、計算部１１２は、構文解析部１１１が取得する、ＬＳＢ位置、ＭＳＢ位置およびサイズのいずれか１つの項目に関する値を用いて命令フィールドの各々について、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち上記１つの項目と異なる他の項目に関する値を計算する。計算の方法の詳細は後述する。
【００３６】
図９は、構文解析処理（図８：ステップＳ３０００）のより詳細を示すフロー図である。このフローは、命令定義体中の１つのエントリに含まれる"DECIMAL_NUMBER"および"CONTENT"の対をすべて読み出すループになっている。
【００３７】
ステップＳ３１００は、変数ｉに数値"1"を代入する処理である。ここで変数ｉは、命令フィールドに付けられた識別番号であり、ビットの上位側（図６における左側）から順に付されている。
【００３８】
ステップＳ３２００では、命令フィールドの"DECIMAL_NUMBER"部が読み出される。"DECIMAL_NUMBER"部は、１０進数の文字列表現であり、本実施の形態では命令フィールドのサイズを表す。
【００３９】
ステップＳ３３００は、ステップＳ３２００で読み出された１０進数文字列表現のデータを数値に変換し、ｉ番目の命令フィールドのサイズとして記憶する。
【００４０】
ステップＳ３４００は、命令フィールドの内容情報を読み出す処理である。内容情報は、フィールド値およびフィールド種別の対である。ステップＳ３４００の詳細は後述のとおりである。
【００４１】
ステップＳ３５００では、ステップＳ３４００で読み出された命令フィールドの内容情報がｉ番目の命令フィールドの内容情報として記憶される。
【００４２】
ステップＳ３６００では、命令フィールドの番号である変数ｉが、１つ増加した値に更新される。
【００４３】
ステップＳ３７００は、エントリの終端に達したか否かを判定する。終端でなければ次の"NUMBER"と"CONTENT"との対を読み出すために、ステップＳ３２００に分岐され、エントリの終端であれば処理が終了される。
【００４４】
図１０は、"CONTENT"部読出処理（図９：ステップＳ３４００）のより詳細を示すフロー図である。
【００４５】
ステップＳ３４０１では、命令定義体エントリ中の文字"["が読み飛ばされる。
【００４６】
ステップＳ３４０２では、読出位置の先頭文字が１文字先読みされ、先頭文字の値によって分岐処理が行なわれる。分岐先は、位置先頭の文字が数字の場合はステップＳ３４１０、英字の場合はステップＳ３４４０、"]"の場合はステップＳ３４７０である。これら３つの場合のそれぞれは、"CONTENT"の内容が定数"CONSTANT"の場合、オペランド"OPERAND"の場合、および空の場合に対応する。
【００４７】
ステップＳ３４１０〜Ｓ３４３０は、"CONTENT"の内容が定数"CONSTANT"の場合の処理フローである。ステップＳ３４１０では、"CONSTANT"部を読み出すことで数値が取得される。ステップＳ３４２０では、ステップＳ３４１０で読み出された値がフィールドの値として記憶される。次にステップＳ３４３０では、フィールドの種別として文言「定数」が記憶される。文言「定数」は、フィールドが定数を持つことを表す識別情報である。
【００４８】
ステップＳ３４４０〜Ｓ３４６０は、"CONTENT"の内容がオペランド"OPERAND"の場合の処理である。ステップＳ３４４０では、命令定義体の読出位置から英字で始まる英数字文字列が読み出される。ステップＳ３４５０では、フィールドの値として読み出された文字列が記憶される。ステップＳ３４６０では、フィールド種別として「任意値」が記憶される。「任意値」はフィールドが任意値を持つことを表す識別情報である。
【００４９】
ステップＳ３４７０は、"CONTENT"の内容が空の場合の処理であり、フィールド種別として「任意値」を記憶する。
【００５０】
最後にステップＳ３４８０では、文字"]"がスキップされ、読出位置が進められる。
【００５１】
図１１は、"CONSTANT"部読出処理（図１０：ステップＳ３４１０）のより詳細を示すフロー図である。
【００５２】
ステップＳ３４１１では、図５の非終端記号"HEX_NUMBER"、すなわち"0x"で始まる１６進数文字列が読み出される。
【００５３】
ステップＳ３４１４では、ステップＳ３４１１で読み出された文字列が数値に変換される。つまり構文解析部１１１（図１）によって定数文字列が数値に変換される。
【００５４】
図１２は、ADD命令の命令定義体エントリ（図６の下段）に対して構文解析処理（図８：ステップＳ３０００）を適用した結果得られる情報を示す図である。ADD命令には5つのフィールドがあり、各々のサイズ、種別および値が取得済みである。
【００５５】
図１３は、位置・サイズ計算処理（図８：ステップＳ５０００）のより詳細を示すフロー図である。この処理では、構文解析処理（図８：ステップＳ３０００）の結果を用いて、１つの命令を構成するすべての命令フィールドのＬＳＢ位置が計算によって求められる。ＬＳＢ位置の値は、命令語のＬＳＢを０ビット目として上位ビットに向かって数え上げた値とされる。ＬＳＢ位置の計算では、命令中で最も下位に位置する命令フィールドのＬＳＢ位置が０であることと、すべての命令フィールドのサイズが既知であることとが利用される。フィールド位置・サイズ計算処理では、命令のＬＳＢ側から順に命令フィールドの位置が計算される。
【００５６】
ステップＳ５１００では、変数ｉが命令フィールドの個数で初期化される。変数ｉは、構文解析処理と同じ規則で命令フィールドに与えられた識別番号である。
【００５７】
ステップＳ５３００では、ｉ番目の命令フィールドのＬＳＢ位置として０が記憶される。ここで０が用いられる理由は、ステップＳ５３００の時点でｉは命令中の最下位命令フィールドと対応しているためである。
【００５８】
ステップＳ５４００〜Ｓ５８００は、最下位命令フィールドより上位側の命令フィールドのＬＳＢ位置を順に求めるループである。本ループでは、サイズおよびＬＳＢ位置が既知となった命令フィールドと隣接する命令フィールドのＬＳＢ位置を順に求めることで、すべての命令フィールドのＬＳＢ位置が取得される。
【００５９】
ステップＳ５４００は、変数ｉの値が１より大きい場合Ｓ５７００を行ない、それ以外の場合に処理を終了する条件分岐処理である。
【００６０】
ステップＳ５７００では、ｉ−１番目フィールドのＬＳＢ位置が、以下の演算
ｉ番目フィールドのＬＳＢ位置＋ｉ番目フィールドのサイズ
によって計算される。つまり、計算部１１２（図１）が、ｉ番目（第１）の命令フィールドについてのＬＳＢ位置に関する値と、ｉ番目の命令フィールドのサイズとから、ｉ−１番目（第２）の命令フィールドについてのＬＳＢ位置の値を計算する。
【００６１】
ステップＳ５８００では、１つ減らされた値で変数ｉが更新され、そしてステップＳ５４００に処理が戻される。
【００６２】
図１４は、構文解析結果（図１２）に対してフィールド位置・サイズ計算処理（図１３：ステップＳ５０００）を適用した結果得られる情報を示す。フィールド位置・サイズ計算処理は、ＬＳＢ位置の列を図中矢印の向きの順番で取得する。
【００６３】
上記のステップＳ５７００で示したように、ｉ番目の命令フィールドのＬＳＢ位置と、ｉ番目の命令フィールドのサイズとから、隣接するｉ−１番目の命令フィールドの値が計算される。これにより、命令定義体にフィールドの位置が含まれていなくても、命令フィールドのサイズから命令フィールドの位置を取得することができる。
【００６４】
なおステップＳ５７００（図１３）ではＬＳＢ位置に関する計算が行なわれるが、これと類似して、ＭＳＢ位置に関する計算も行なわれ得る。具体的には、計算部１１２（図１）は、ｉ番目（第１）の命令フィールドについてのＭＳＢ位置に関する値と、ｉ番目の命令フィールドのサイズとから、ｉ＋１番目（第２）の命令フィールドについてのＭＳＢ位置の値を計算し得る。この場合、全命令フィールドのサイズの総和から１を減じた値を１番目の命令フィールドのＭＳＢ位置とし、この位置を基点にしてＭＳＢ位置が順次（図１４の矢印とは逆方向に）求められてもよい。このように定数命令フィールドのＬＳＢ（ＭＳＢ）位置およびサイズの対を巡回し、命令フィールドのＬＳＢ位置のビットからＭＳＢ側（ＭＳＢ位置のビットからＬＳＢ側）にサイズ分だけを定数ビットとして記憶する処理を繰り返すステップを設けることによって、命令中で定数となるビットの位置を取得することができる。
【００６５】
より一般的に言えば、計算部１１２は、第１の命令フィールドについてのＬＳＢ位置およびＭＳＢ位置の一方の項目に関する値と、第１の命令フィールドのサイズとから、第２の命令フィールドについての一方の項目の値を計算することができる。
【００６６】
図１５は、命令テーブル生成処理（図７：ステップＳ６０Ｔ）のより詳細を示すフロー図である。命令テーブル生成処理への入力は、命令定義体の情報、および、命令フィールドのＬＳＢ位置の情報である。また、命令テーブル生成処理の出力は、命令テーブルである。
【００６７】
ステップＳ６０Ｔは、命令定義体に含まれるすべての命令についてオペコードパターンとマスクパターンとを生成するループ処理であり、変数ｉはループの繰返しごとに、１から命令定義体のエントリ数分まで増加する。ループ処理では、１回の繰返しにつきｉ番目の命令についてオペコードパターンおよびマスクパターンが計算される。
【００６８】
ステップＳ６０００では、ｉ番目の命令のオペコードパターンが生成される。この処理の詳細は後述する。
【００６９】
ステップＳ６３Ｔでは、ステップＳ６０００で取得されたオペコードパターンが、命令テーブルのｉ番目エントリのオペコードパターンに設定される。
【００７０】
ステップＳ８０００では、ｉ番目の命令のマスクパターンが生成される。この処理の詳細は後述する。
【００７１】
ステップＳＳ６４Ｔでは、ステップＳ８０００で取得されたマスクパターンが命令テーブルのｉ番目エントリのマスクパターンに設定される。
【００７２】
ステップＳＳ６５Ｔでは、ｉ番目の命令テーブルエントリの命令識別子にｉ番目命令定義体の命令識別子が設定される。
【００７３】
図１６は、オペコードパターン生成処理（図１５：ステップＳ６０００）のより詳細を示すフロー図である。本処理は命令フィールドの情報を入力とし、命令のオペコードパターンを出力する。
【００７４】
ステップＳ６１００では、オペコードパターンが０で初期化される。初期化されたオペコードパターンは、ステップＳ６２００〜Ｓ６８００で最終的なオペコードパターンに更新される。
【００７５】
ステップＳ６２００〜Ｓ６８００は、１つの命令に含まれる命令フィールドの回数分の処理を繰り返すループである。ループの繰返しごとに変数ｉは、１から１つずつ大きくなる。
【００７６】
ステップＳ６３００は、ｉ番目の命令フィールドが定数の場合ステップＳ６６００に分岐し、それ以外の場合ステップＳ６８００に分岐する条件分岐処理である。ｉ番目の命令フィールドが定数か否かは、"CONTENT"部読出処理Ｓ３４００（図９）の処理で取得された命令フィールドの種別が「定数」か否かを確認することで判定され得る。
【００７７】
ステップＳ６６００では、オペコードパターン中のｉ番目の命令フィールドのＬＳＢ位置にｉ番目の命令フィールドの定数が格納される。
【００７８】
このように命令フィールドのＬＳＢ（またはＭＳＢ）位置およびサイズを用いて命令フィールドのＬＳＢ位置のビットからＭＳＢ側に（または、ＭＳＢ位置のビットからＬＳＢ側に）サイズ分だけ順に各ビットの値を記憶する処理を繰り返すステップを設けることによって、命令語中で固定の値を持つ、ビットごとの定数を、すべて得ることができる。
【００７９】
図１７は、マスクパターン生成処理（図１５：ステップＳ８０００）のより詳細を示すフロー図である。本処理は命令フィールドの情報を入力とし、命令のマスクパターンを出力する。
【００８０】
ステップＳ８１００では、マスクパターンが０で初期化される。初期化されたオペコードパターンは、ステップＳ８２００〜Ｓ８５００で最終的なマスクパターンに更新される。
【００８１】
ステップＳ８２００〜Ｓ８５００は、１つの命令に含まれる命令フォールドの回数分の処理を繰り返すループである。ループの繰返しごとに変数ｉは、１から１つずつ大きくなる。
【００８２】
ステップＳ８３００は、ｉ番目の命令フィールドが定数の場合ステップＳ８４００に分岐し、それ以外の場合ステップＳ８５００に分岐する条件分岐処理である。ｉ番目の命令フィールドが定数か否かは、構文解析処理で取得された命令フィールドの種別が「定数」か否かを確認することで判定され得る。
【００８３】
ステップＳ８４００では、マスクパターン中のｉ番目フィールドのＬＳＢ位置から上位ビットに向かってｉ番目フィールドのサイズ数分のビットに１が格納される。
【００８４】
次に比較例の命令テーブル生成について説明する。本比較例においては、TriCoreのADD命令の命令テーブルエントリを作成するために、命令定義体のADD命令のエントリに
cccc0000000nnnnnnnnnaaaa10001011
と記述される。この記述のためには、図４のような命令エンコーディング図を参照しながら、"1"、"0"またはその他を表現する文字（"c"、"n"または"a"）が入力される。この際、１６進数で記述されたオペコードを２進数に変換することや、ビット数を数えながら文字を入力することなど、誤りがちな作業を人手で行なう必要がある。また、命令定義体が正しく記述されているか否かを目視で確認するためにも、ビット数を数えることや、２進数から別の基数に変換することなどの誤りがちな作業を行なう必要がある。さらには、オペコードの名前が命令エンコーディング図では２文字以上で書かれた場合には、１文字に省略する必要がある。たとえば、図４のADD命令の場合、命令定義体作成者は、即値オペランドを表すオペランドフィールドの名前"const9"を１文字（上記命令定義体においては"n"）に短縮しなければならない。
【００８５】
これに対して本実施の形態によれば、命令定義体の記述列が各命令フィールドについて、サイズを表す位置・サイズ関連文字列を記述している。よって、命令定義体中に命令フィールドのビット位置を含ませる必要なく、人手による命令定義体の記述を容易に行なうことができる。そしてこのサイズ情報に基づいてＬＳＢ位置（またはＭＳＢ位置）が計算される。これにより、記述性および可読性を優先した命令定義体から、命令テーブルまたは命令デコードプログラムの生成に必要な、命令フィールドの位置・サイズ関連の十分な情報が得られる。よって、命令テーブルまたは命令デコードプログラムを、記述性および可読性に優れた命令定義体から自動的に生成することができる。よってＣＰＵごとの命令セットシミュレータの開発を効率化することができる。
【００８６】
なお、１つの命令フィールドに関して、ＬＳＢ位置、ＭＳＢ位置およびサイズの間には、
ＬＳＢ位置＋サイズ−１  ＝  ＭＳＢ位置
の関係がある。このため、ＬＳＢ位置、ＭＳＢ位置およびサイズのうち２つの項目についての値が得られれば、上式により残り１項目の値は容易に得られる。よってＬＳＢ位置またはサイズの一方が計算済みであれば他方は容易に得られる。本実施の形態においては、サイズからＬＳＢ位置が計算されているので、ＭＳＢ位置は必要に応じて上式により直ちに求め得る。
【００８７】
また本実施の形態においては命令テーブル生成装置１０１によって出力される命令テーブルが命令セットシミュレータ９１（図１）に入力される場合について説明したが、命令テーブルが入力されるものはそのようなものに限定されるわけではなく、たとえば、ディスアセンブラ装置に入力されてもよい。
【００８８】
上記の説明では、命令フィールド位置・サイズ解決処理（図７：ステップＳ３０）の後に命令テーブル生成処理（ステップＳ６０Ｔ）が行なわれるが、両処理は命令定義体の１つのエントリごとに行なわれてもよい。つまり命令フィールド位置・サイズ解決処理の後に命令テーブル生成処理が行なわれる処理が繰り返されてもよい。これは、命令定義体の１つのエントリごとに命令フィールド位置・サイズの解決と命令テーブルエントリの作成とを行なうことができるためである。
【００８９】
（実施の形態２）
命令定義体を入力として命令テーブル生成装置１０１（図１：実施の形態１）は、命令セットシミュレータ９１に入力するための命令テーブルを出力する。これに対して本実施の形態においては、命令定義体を入力として命令デコードプログラム生成装置が、命令セットシミュレータ９２の一部を構成する命令デコードプログラムを出力する。
【００９０】
図１８は、本実施の形態における命令デコードプログラム生成装置１０２を含む命令セットシミュレーションシステム９０２の構成を概略的に示すブロック図である。命令セットシミュレーションシステム９０２は、命令定義体記憶部５０と、実行対象プログラム記憶部６０と、命令セットシミュレータ９２と、命令デコードプログラム生成装置１０２とを有する。命令デコードプログラム生成装置１０２は命令デコードプログラム生成部１２２を有する。命令デコードプログラム生成部１２２は命令デコードプログラム５２を生成するものである。命令セットシミュレータ９２は、命令デコードプログラム５２を含むプログラムによって実行させられるものである。
【００９１】
図１９は、命令テーブル（図２）を入力とする命令デコード処理と等価な命令デコードプログラム５２（図１８）のＣ言語コードを示す。命令デコードプログラム５２は関数"Decode"である。関数"Decode"は命令語を引数"word"として入力し、命令種類ごとに対応するサブ関数を呼び出す。各サブ関数は、命令の動作を模擬するコードである。
【００９２】
図２０は、本実施の形態における命令デコードプログラムの生成方法を概略的に示すフロー図である。図２１は、命令デコードプログラム生成処理（図２０：ステップＳ６０Ｐ）のより詳細を示すフロー図である。ステップＳ６１Ｐでは、プログラム開始部が生成される。プログラムの開始部は関数の前半部分である。たとえば、３２ビットの命令語を引数とし、命令識別子を返す関数の場合のコード断片は、
void Decode(uint32_t word) {
である。
【００９３】
ステップＳ６２ＰおよびＳ６８Ｐ間の処理は、構文解析済みの命令定義体を巡回するループであり、変数ｉはループの繰返しごとに、1から命令テーブルエントリ数まで1ずつ増加する。ステップＳ６０００は、ｉ番目の命令定義体エントリの解析済みフィールド情報を入力とし、オペコードパターンを生成する処理である。ステップＳ６０００の詳細は実施の形態１と同様である。ステップＳ８０００は、ｉ番目の命令定義端エントリの解析済み命令フィールド情報を入力とし、マスクパターンを生成する処理である。ステップＳ６６Ｐは、命令語が命令定義体エントリのパターンと一致するか否かの判定文を出力する処理である。これは、以下のようなテンプレート
if ((instruction & MASK_PATTERN) == OPCODE_PATTERN) {
ID(word);
}
を用いて生成することができる。
【００９４】
ここで"MASK_PATTERN"と"OPCODE_PATTERN"と"ID"とはテンプレートのパラメータである。ステップＳ６６Ｐは、ステップＳ８０００で取得されたマスクパターンを"MASK_PATTERN"に代入し、ステップＳ６０００で取得されたオペコードパターンを"OPCODE_PATTERN"に代入し、ｉ番目命令定義体エントリの命令識別子を"ID"に代入する。最後にステップＳ６９Ｐでは、関数末尾を表す"}"を生成する。
【００９５】
なお、上記以外の構成については、上述した実施の形態１の構成とほぼ同じであるため、同一または対応する要素について同一の符号を付し、その説明を繰り返さない。
【００９６】
本実施の形態によれば、命令テーブルの生成に代わり命令デコードプログラムの生成において、実施の形態１と同様の効果が得られる。
【００９７】
なお本実施の形態においては命令デコードプログラム生成装置１０２が、命令セットシミュレータ９２の一部を構成する命令デコードプログラム５２を出力する場合について説明したが、命令デコードプログラム生成装置が出力するプログラムはそのようなものに限定されるわけではなく、たとえば、ディスアセンブラの一部を構成する命令デコードプログラムを出力してもよい。この場合においては、C言語の命令デコードプログラム５２（図１９）は、命令のディスアセンブル結果を出力するコードである。
【００９８】
また本実施の形態においては命令デコードプログラム５２としてＣ言語のデコード処理関数が生成されるが（図１９）、プログラミング言語およびデコード処理アルゴリズムがそのようなものに限定されるわけではない。
【００９９】
（実施の形態３）
実施の形態１によれば、命令エンコーディング図に記載されている１６進数のオペコードを１６進数として用いることができる。しかしながら、命令エンコーディング図では、１６進数以外に１０進数または２進数が用いられていることもある。このため、命令定義体の文法が１６進数以外に対応していない場合、仮に単一の命令セットアーキテクチャを記述するのには十分であっても、複数のＣＰＵに対応させるためには人手で基数を変換する必要が生じる。これに対して本実施の形態における構文解析処理は、以下に詳述するように、命令フィールドの定数の記述の基数ごとに処理を切り替えるよう拡張されている。
【０１００】
図２２は、本実施の形態における命令定義体の文法を表したＥＢＮＦを示す。実施の形態１のＥＢＮＦ（図５）との相違は、命令フィールドの定数を表す定数文字列の非終端記号"CONSTANT"の内容として２進数文字列"BIN_NUMBER"と１０進数文字列"DECIMAL_NUMBER"とが追加されている点である。図中で示されている例においては、２進数文字列"BIN_NUMBER"は先頭部分に基数識別用に"0b"が付された数字文字列であり、"DECIMAL_NUMBER"は先頭部分から数字で始まる数字文字列である。
【０１０１】
図２３は、本実施の形態における"CONSTANT"部読出処理（ステップＳ３４１０Ｃ）の構成を概略的に示すフロー図である。このステップＳ３４１０Ｃによって実施の形態１のステップＳ３４１０（図１０）が置き換えられることで、基数の切替えが実現されている。言い換えれば、構文解析部１１１（図１）は本実施の形態においては、定数文字列を数値へ基数を考慮して変換する。
【０１０２】
具体的には、まずステップＳ３４１１ｃで、定数文字列が読出位置から読み出され、読出位置が進められる。ここでは、数字のみの文字列は１０進数"DECIMAL_NUMBER"、"0x"で始まる数字文字列は１６進数"HEX_NUMBER"、"0b"で始まる数字文字列は２進数"BIN_NUMBER"として扱われ、ステップＳ３４１１ｃでは、これらの文字列の読出が行なわれる。
【０１０３】
ステップＳ３４１３では、ステップＳ３４１１ｃで読み出された数値文字列の先頭部分に応じた分岐処理が行なわれる。具体的には、数値文字列の先頭が"0b"の場合に基数が２、"0x"の場合に基数が１６、それ以外の場合に基数が１０、と判定される。そして、基数が２の場合ステップＳ３４１４ｂに分岐され、基数が１０の場合ステップＳ３４１４ｄに分岐され、基数が１６の場合ステップＳ３４１４ｈに分岐される。このように、構文解析部１１１（図１）が、命令定義体の命令フィールドの定数文字列を解析することによって基数が判定される。
【０１０４】
ステップＳ３４１４ｂでは、数値文字列が２進数として数値に変換される。また、ステップＳ３４１４ｄでは数値文字列が１０進数として数値に変換される。また、Ｓ３４１４ｈでは、数値文字列が１６進数として数値に変換される。"CONSTANT"部読出処理の出力は、ステップＳ３４１４ｂ、Ｓ３４１４ｄおよびＳ３４１４ｈのいずれかで変換した結果の数値である。
【０１０５】
なお、上記以外の構成については、上述した実施の形態１または２の構成とほぼ同じであるため、同一または対応する要素について同一の符号を付し、その説明を繰り返さない。
【０１０６】
本実施の形態によれば、命令定義体の命令フィールドの定数文字列を解析することで、定数文字列を数値に変換するときに用いる基数が切り替えられる。これにより命令定義体中で命令フィールドの定数を記述するときに複数の基数を用いることができる。よって命令定義体の記述性が向上する。よって複数のＣＰＵ向けの命令定義体を人手でより容易に記述することができる。
【０１０７】
（実施の形態４）
実施の形態３では基数の判定が数値文字列の解析に基づいて行なわれるが、本実施の形態においては基数の判定が、処理実行時に外部から与えたコンフィギュレーションオプションによって行なわれる。
【０１０８】
図２４は、本実施の形態における構文解析部１１１Ｃおよびそれへの入力を概略的に示すブロック図である。構文解析部１１１Ｃは、命令定義体とは別に、コンフィギュレーションオプション５９の入力を受け付けるように構成されている。コンフィギュレーションオプション５９は、基数を指定する設定を含む。本実施の形態では、ステップＳ３４１３（図２３）においてコンフィギュレーションオプション５９を参照することで基数の判定が行なわれる。
【０１０９】
本実施の形態によれば、命令定義体中の"CONSTANT"部の数値文字列において、実施の形態３で用いていたような基数識別用の先頭部分を省略することができながらも、命令定義体ごとに異なる基数で数値文字列を記述することができる。たとえば、ある命令定義体には"0xBEEF"と書く代わりに"BEEF"と記述することができ、別の命令定義体には"0b0101"と書く代わりに"0101"と書くことができる。つまり、用いられている基数が異なる複数の命令定義体からの命令テーブル（または命令デコードプログラム）の生成を、単一の生成装置で行なうことができる。
【０１１０】
言い換えれば、実行時に外部からのコンフィギュレーションオプションで定数文字列を数値に変換するので、命令定義体ごとに命令フィールドの定数文字列を異なる基数で記述することができる。その上、定数文字列のフォーマット自体で基数を表す必要がないため、簡潔に命令定義体を作成することができる。
【０１１１】
（実施の形態５）
実施の形態１においては、命令定義体と命令エンコーディング図とが共通して、"4"、"7"、"9"、"4"および"8"（図６）のように、命令フィールドのサイズ情報を保持している。これに対して本実施の形態では、命令定義体中にサイズの代わりに命令フィールドの位置が保持されている場合を扱う。
【０１１２】
図２５は、本実施の形態における、ADD命令の命令フォーマット（図中、下段）と、対応する命令定義体エントリの記述（図中上段）との例を示す。命令定義体と命令エンコーディング図とが共通して、"31"、"27"、"20"、"11"および"7"という、命令フィールドのＭＳＢのビット位置情報、すなわちＭＳＢ位置、を保持している。実施の形態１と比較すると、命令定義体中の命令フォーマットは、"DECIMAL_NUMBER[CONTENT]"の並びである点でＥＢＮＦ（図５）としては同様であるが、構文解析において"DECIMAL_NUMBER"はサイズではなく位置を表すものとして扱われる。たとえば、ADD命令の命令定義体における命令フォーマット"FORMAT"の表現は、図２５に示すように
31[c]27[0x00]20[const9]11[a]7[0x8B]
である。
【０１１３】
図２６は、上記の命令定義体の表現を実施の形態１で説明した構文解析処理にかけた結果を示す。この結果には、フィールドごとのＭＳＢ位置が含まれているが、サイズに関する情報が含まれていない。
【０１１４】
図２７は、本実施の形態における位置・サイズ計算処理（ステップＳ５０００Ｄ）の構成を概略的に示すフロー図である。本実施の形態においては、このステップＳ５０００ＤがステップＳ５０００（図１３）に代わり命令フィールド位置・サイズ解決処理（ステップＳ３０）において行なわれる。この場合、計算部１１２（図１）に入力される、構文解析部１１１（図１）の構文解析結果は、各命令フィールドのＭＳＢ位置（図２６）である。ステップＳ５０００Ｄにおいては、この入力に基づきＬＳＢ位置が計算される。
【０１１５】
ステップＳ５１００は、変数ｉを命令フィールドの個数で初期化する処理である。ステップＳ５２００は、ｉ番目の命令フィールドのＭＳＢ位置に１を加算した結果によってｉ番目の命令フィールドのサイズを取得し記憶する処理である。ステップＳ５３００は、ｉ番目フィールドのＬＳＢ位置として０ビット目を記憶する処理である。
【０１１６】
ステップＳ５４００〜Ｓ５８００は、ｉ−１番目から１番目までの命令フィールドのサイズおよびＬＳＢ位置を計算する処理ループである。ステップＳ５４００は、ｉが１より大きい場合ステップＳ５５００に分岐し、それ以外の場合処理を終了する条件分岐処理である。ステップＳ５５００では、ｉ−１番目フィールドのＭＳＢ位置からｉ番目フィールドのＭＳＢ位置を減じることで、（ｉ−１）番目フィールドのサイズが求められ、値が記憶される。次のステップＳ５７００では、ｉ番目フィールドのＬＳＢ位置とｉ番目フィールドのサイズとを加算することで、（ｉ−１）番目フィールドのＬＳＢ位置が求められ、値が記憶される。
【０１１７】
図２８は、構文解析結果（図２６）に対してフィールド位置・サイズ計算処理（図２７：ステップＳ５０００Ｄ）を適用した結果得られる情報を示す。フィールド位置・サイズ計算処理は、ＬＳＢ位置およびサイズの各々の列を図中矢印の向きの順番で取得する。
【０１１８】
この構文解析において行なわれる、上述した処理ループ（ステップＳ５４００〜Ｓ５８００）の詳細について、ADD命令のように命令フィールドの個数が３つ以上の場合を例に、以下に詳述する。
【０１１９】
ステップＳ５０００Ｄ（図２７）を含むループにおいて、ｉ＝ｋ＋２（ｋは自然数）のときには、ステップＳ５５００では、
（ｋ＋１）番目フィールドのサイズ
←  （ｋ＋１）番目フィールドのＭＳＢ位置−（ｋ＋２）番目フィールドのＭＳＢ位置
が計算される。
【０１２０】
そして次のループ、すなわちｉ＝ｋ＋１のときには、ステップＳ５７００では、
ｋ番目フィールドＬＳＢ位置
←  （ｋ＋１）番目フィールドのＬＳＢ位置＋（ｋ＋１）番目フィールドのサイズ
が計算される。
【０１２１】
上記２つの計算をまとめると、連続して配置された命令フィールドである、ｋ番目、（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドの間で、以下の計算
ｋ番目フィールドＬＳＢ位置
←  （ｋ＋１）番目フィールドのＬＳＢ位置
＋｛（ｋ＋１）番目フィールドのＭＳＢ位置
−（ｋ＋２）番目フィールドのＭＳＢ位置｝
が行なわれることになる。すなわち、（ｋ＋１）番目の命令フィールドのＬＳＢ位置と、（ｋ＋１）番目および（ｋ＋２）番目の命令フィールドの各々のＭＳＢ位置とを用いて、ｋ番目の命令フィールドのＬＳＢ位置が、計算部１１２（図１）によって計算される。
【０１２２】
たとえば、ｋ＝１の場合、
１番目フィールドＬＳＢ位置
←  ２番目フィールドのＬＳＢ位置
＋｛２番目フィールドのＭＳＢ位置−３番目フィールドのＭＳＢ位置｝
である。この計算は、図２８を参照して具体的な数値を代入することにより、
１番目フィールドＬＳＢ位置
←  ２１＋｛２７−２０｝  ＝  ２８
の結果となる。
【０１２３】
またｉ＝ｋ＋１のときに、ステップＳ５５００では、
ｋ番目フィールドのサイズ  
←  ｋ番目フィールドのＭＳＢ位置  −  （ｋ＋１）番目フィールドのＭＳＢ位置
が計算される。すなわち互いに隣り合うｋ番目および（ｋ＋１）番目の命令フィールドのＭＳＢ位置の差分からｋ番目の命令フィールドのサイズが、計算部１１２（図１）によって計算される。
【０１２４】
なお、上記以外の構成については、上述した実施の形態１〜４のいずれかの構成とほぼ同じであるため、同一または対応する要素について同一の符号を付し、その説明を繰り返さない。
【０１２５】
実施の形態１で参照された命令エンコーディング図（図４）には各命令フィールドのサイズが記載されている。しかしながら、サイズの記載がない命令エンコーディング図を参照して命令定義体が作成される場合もある。この場合、命令定義体の作成者は命令フィールドのサイズを計算する必要があり、このときに誤りが混入する可能性がある。
【０１２６】
これに対して本実施の形態によれば、命令定義体中に記述された各命令フィールドのＭＳＢ位置からＬＳＢ位置およびサイズが取得される。これにより命令定義体を、命令フィールドのサイズを含めずに記述することができる。よって上記のような誤りが混入することが防止される。
【０１２７】
（実施の形態６）
図２９は、本実施の形態の命令テーブル生成部１２１の構成を概略的に示すブロック図である。本実施の形態においては命令テーブル生成部１２１は検出部１２１Ｄを有する。検出部１２１Ｄは、命令フィールドのうち定数文字列と対をなすものが、数値を表現することができるサイズを有するか否かを検出する。
【０１２８】
図３０は、本実施の形態におけるオペコードパターン生成処理Ｓ６０００Ｄの構成を概略的に示すフロー図である。実施の形態１のステップＳ６０００（図１６）との相違は、命令定義体の誤り検出（ステップＳ６４００）が追加されていることである。ステップＳ６４００は、ｉ番目の命令フィールドの値がｉ番目の命令フィールドのサイズのビット数で表現できる場合には、ステップＳ６６００を行なうが、そうでない場合はエラーを報告して終了する。
【０１２９】
なお、上記以外の構成については、上述した実施の形態１〜５のいずれかの構成とほぼ同じであるため、同一または対応する要素について同一の符号を付し、その説明を繰り返さない。
【０１３０】
本実施の形態によれば、たとえば、命令定義体中の命令フォーマットとして
4[c]7[0x00]9[const9]4[a]8[0x8B]
と記載されるべきところ、
4[c]7[0x00]9[const9]4[a]8[0x18B]
と記載されているような誤りを発見することができる。この例では、５番目の命令フィールドに対応する"8[0x18B]"で８ビットの命令フィールドが定数"0x18B"を持つことが指定されている。しかし"0x18B"は２進数表記で９ビットの"110001011"であり、８ビット命令フィールドでは表現することができないため、記述に誤りがあると判定される。
【０１３１】
上記のように、命令フィールドの定数が命令フィールドのサイズ、すなわちビット幅、で表現できないことを検出するステップを用いることで、命令定義体に誤りが含まれていることをユーザが知ることができる。また、誤った命令テーブルの生成を防止することもできる。
【０１３２】
なお命令テーブルでなく命令デコードプログラムが生成される場合は、検出部１２１Ｄが、命令デコードプログラム生成部１２２（図１８）に設けられればよい。
【０１３３】
（実施の形態７）
図３１は、本実施の形態において命令テーブルまたは命令デコードプログラムの生成を実行するコンピュータを含むシステムを概略的に示すブロック図である。上記各実施の形態で説明した、命令テーブルまたは命令デコードプログラムの生成は、専用の生成装置、または汎用のコンピュータ６０００によって実行され得る。コンピュータ６０００はＣＰＵ６１００（プロセッサ）とＲＡＭ(Random Access Memory)６２００とＲＯＭ(Read Only Memory)６３００とディスプレイ６４００と記憶部６５００と入力部６６００とネットワークＩ／Ｆ(Interface)６７００と記録媒体読取部６８００とを有する。
【０１３４】
記憶部６５００は、内部記録媒体６５１０を有する補助記憶装置である。たとえば、記憶部６５００は、内部記録媒体６５１０として記録ディスクを有するディスクドライブ、または内部記録媒体６５１０として固体メモリを有するソリッドステートドライブ（ＳＳＤ）である。上記ディスドライブは典型的には、磁気ディスクを有するハードディスクドライブである。ＳＳＤは典型的には、ＲＡＭまたはＥＥＰＲＯＭ(Electrically Erasable Programmable Read-Only Memory)などの半導体素子メモリを有する。
【０１３５】
ネットワークＩ／Ｆ６７００はネットワーク７７００を介してサーバ８０００に接続され得る。これによりコンピュータ６０００はサーバ８０００から情報を取得し得る。サーバ８０００は、上述した内部記憶媒体６５１０と同様の記録媒体８０１０を有する。
【０１３６】
記録媒体読取部６８００は外部記録媒体９０１０を読み取るものである。外部記録媒体９０１０は、持ち運び可能な記録媒体であり、たとえば、記録ディスク、固体メモリまたは記録テープである。外部記録媒体９０１０としての記録ディスクは、具体的には、光ディスク、光磁気ディスクまたは磁気ディスクなどであり、たとえば、ＣＤ−ＲＯＭ(Compact Disk-Read Only Memory)、ＤＶＤ−ＲＯＭ(Digital Versatile Disc-Read Only Memory)またはブルーレイディスクなどである。外部記録媒体９０１０としての固体メモリは、たとえば、ＳＳＤが有する固体メモリと同様のもの、またはＲＯＭである。
【０１３７】
前述した各実施の形態は、命令テーブルまたは命令デコードプログラムの生成のための処理をプログラムがコンピュータ６０００のＣＰＵ６１００に実行させることによって行なわれ得る。コンピュータ６０００およびサーバ８０００がシステムを構成する場合、プログラムは上記処理を、システムに含まれるプロセッサに実行させてもよい。
【０１３８】
プログラムは典型的には、上述した記録媒体の少なくともいずれかに記録される。記録されるプログラムは、記録媒体により、またはネットワーク７７００を介したダウンロードにより、プログラム製品として提供され得る。すなわちプログラム製品は、プログラムが記録された記録媒体と、プログラム自体とを含む。
【０１３９】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【０１４０】
５０  命令定義体記憶部、５１  命令テーブル記憶部、５２  命令デコードプログラム、５９  コンフィギュレーションオプション、６０  実行対象プログラム記憶部、９１，９２  命令セットシミュレータ、１０１  命令テーブル生成装置（生成装置）、１０２  命令デコードプログラム生成装置（生成装置）、１１０  命令フィールド位置・サイズ解決部、１１１，１１１Ｃ  構文解析部、１１２  計算部、１２１  命令テーブル生成部、１２１Ｄ  検出部、１２２  命令デコードプログラム生成部、９０１，９０２  命令セットシミュレーションシステム、６０００  コンピュータ、６１００  ＣＰＵ、６５００  記憶部、６５１０  内部記録媒体、６８００  記録媒体読取部、７７００  ネットワーク、８０００  サーバ、８０１０  記録媒体、９０１０  外部記録媒体。
【図１】
2015203895.tif 000003
【図２】
2015203895.tif 000004
【図３】
2015203895.tif 000005
【図４】
2015203895.tif 000006
【図５】
2015203895.tif 000007
【図６】
2015203895.tif 000008
【図７】
2015203895.tif 000009
【図８】
2015203895.tif 000010
【図９】
2015203895.tif 000011
【図１０】
2015203895.tif 000012
【図１１】
2015203895.tif 000013
【図１２】
2015203895.tif 000014
【図１３】
2015203895.tif 000015
【図１４】
2015203895.tif 000016
【図１５】
2015203895.tif 000017
【図１６】
2015203895.tif 000018
【図１７】
2015203895.tif 000019
【図１８】
2015203895.tif 000020
【図１９】
2015203895.tif 000021
【図２０】
2015203895.tif 000022
【図２１】
2015203895.tif 000023
【図２２】
2015203895.tif 000024
【図２３】
2015203895.tif 000025
【図２４】
2015203895.tif 000026
【図２５】
2015203895.tif 000027
【図２６】
2015203895.tif 000028
【図２７】
2015203895.tif 000029
【図２８】
2015203895.tif 000030
【図２９】
2015203895.tif 000031
【図３０】
2015203895.tif 000032
【図３１】
2015203895.tif 000033