(57)【特許請求の範囲】
【請求項１】
命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、
前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、を備え、
前記命令テーブル分割部は、前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割すること
を特徴とする情報処理装置。
【請求項２】
前記命令テーブル分割部は、前記一又は複数の例外条件から順番に一つずつ例外条件を選択し、当該選択された一つの例外条件に前記オペコード情報が一致するエントリを集めることで、前記例外条件毎に前記第１命令テーブルを生成すること
を特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記命令テーブル分割部は、前記命令テーブルから前記第１命令テーブルを分割する際に、前記例外条件が有効か否かを判断し、有効と判断されなかった例外条件を前記第１命令テーブルから除外すること
を特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記命令テーブル分割部は、前記複数のエントリの内の少なくとも１つのエントリに前記一又は複数の例外条件が含まれており、かつ、前記マスクを算出することができた場合には、前記マスクで識別することのできる複数のビットパターンから順番に一つずつビットパターンを選択し、当該選択された一つのビットパターンに前記オペコード情報が一致し、かつ、前記マスク及び前記選択されたビットパターンが例外条件に一致しないエントリを集めることで、前記命令テーブルを前記ビットパターン毎に分割して、第３命令テーブルを生成すること
を特徴とする請求項１から３の何れか一項に記載の情報処理装置。
【請求項５】
前記命令テーブル分割部は、前記命令テーブルから前記第３命令テーブルを分割する際に、前記例外条件が有効か否かを判断し、有効と判断されなかった例外条件を前記第３命令テーブルから除外すること
を特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記ツリー作成部は、前記命令テーブル分割部で分割された命令テーブルが複数のエントリからなる場合に、対応するノードを作成し、前記命令テーブル分割部で分割された命令テーブルが一つのエントリからなる場合に、対応するリーフを作成することで、前記デコード用ツリーを作成すること
を特徴とする請求項１から５の何れか一項に記載の情報処理装置。
【請求項７】
前記ツリー作成部は、前記ノード又は前記リーフに前記例外条件を関連付けること
を特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記ツリー作成部は、前記例外条件に合致するか否かで子を選択することができる条件ノードを生成すること
を特徴とする請求項６又は７に記載の情報処理装置。
【請求項９】
前記ツリー作成部は、前記命令テーブルの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合であって、かつ、前記複数のエントリ何れにも前記例外条件が含まれていない場合には、入力エラーを報告すること
を特徴とする請求項１から８の何れか一項に記載の情報処理装置。
【請求項１０】
命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する過程と、
分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成する過程と、を有し、
前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを分割する過程では、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割すること
を特徴とする情報処理方法。
【請求項１１】
コンピュータを、
命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、
前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、して機能させるプログラムであって、
前記命令テーブル分割部は、前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割すること
を特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関し、特に、命令テーブルを分割して、デコード用ツリーを作成する情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
命令セットシミュレータ又はディスアセンブラは、構成要素の一部として命令デコーダを含む。命令デコーダは、機械語プログラムを入力とし、この機械語プログラムに含まれる命令を識別するソフトウェア部品である。
一般に、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の命令は、オペコードを含むビット列から構成される。命令のオペコードは、命令ビット列中で０又は１の固定の値を保持するビット群である。ＣＰＵの命令は一意なオペコードを持つため、命令デコーダは、命令を識別するためにオペコードを参照する。しかし、命令のオペコードは、ＩＳＡ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）によって異なる。このため、複数のＩＳＡに対応した命令セットシミュレータ又はディスアセンブラを得るためには、ＩＳＡ毎に命令デコード処理を開発する必要がある。【０００３】
ＣＰＵ毎の命令デコーダの開発を容易化する従来技術としては、特許文献１のように命令テーブルを用いる方法がある。命令テーブルは命令毎にエントリを持ち、各エントリは命令の識別子とオペコード情報とを持つ。命令デコーダは、命令テーブルから入力ビット列と一致するオペコードを持つエントリを検索することで、命令をデコードする。
しかし、命令テーブルの検索時間は、命令テーブルのエントリ数、すなわちＩＳＡの命令数に比例して大きくなる。このため、命令デコードの処理効率が悪いという問題があった。
この問題に対し、従来技術は、命令テーブルからデコード用ツリーを生成し、命令テーブルのかわりにデコード用ツリーを用いることで、処理時間の短縮を図っている。デコード用ツリーを用いたデコード処理では、デコーダは、命令テーブルの線形探索の代わりにデコード用ツリーを探索する。一般にツリーの平均探索時間は、テーブルの線形探索に要する平均時間より短い。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−２３５０１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方法では、例外条件を持つ命令セットに対応できないという問題があった。従来の方法は、１つの命令ビット列に対して２つ以上の命令のオペコードが一致するときにツリーを作成できない。１つの命令ビット列に対して２つ以上の命令のオペコードが一致するのは、一般に命令セットが例外条件付きの命令を含むためである。命令ｘが例外条件付きの場合、命令ビット列Ｉが命令ｘのオペコードと一致していても、命令ビット列Ｉが命令ｘの例外条件を満たしていれば、命令ビット列Ｉは命令ｘではない。
このように従来のツリー作成方法は、例外条件が存在する命令セットに対して適用することができないという問題があった。【０００６】
そこで、本発明は、例外条件が存在する命令セットに対してもデコード用ツリーを生成できるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様に係る情報処理装置は、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、を備え、前記命令テーブル分割部は、前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割することを特徴とする。
【０００８】
本発明の一態様に係る情報処理方法は、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する過程と、分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成する過程と、を有し、前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを分割する過程では、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割することを特徴とする。
【０００９】
本発明の一態様に係るプログラムは、コンピュータを、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、して機能させるプログラムであって、前記命令テーブル分割部は、前記複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第１命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割することを特徴とする。
【発明の効果】
【００１０】
本発明の一態様によれば、例外条件が存在する命令セットに対してもデコード用ツリーを生成することができる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態に係るデコード用ツリー作成部の構成を概略的に示すブロック図である。
【図２】従来のデコード用ツリー作成処理を示すフローチャートである。
【図３】従来のノード作成処理を示すフローチャートである。
【図４】従来のパターン一致命令テーブル作成処理を示すフローチャートである。
【図５】従来の命令テーブルを示す概略図である。
【図６】従来のパターン一致命令テーブルを示す概略図である。
【図７】従来のデコード用ツリーを示す概略図である。
【図８】本実施の形態の例外条件付き命令テーブルの第１例を示す概略図である。
【図９】本実施の形態の処理回路を示す概略図である。
【図１０】本実施の形態におけるデコード用ツリー作成処理を示すフローチャートである。
【図１１】本実施の形態におけるノード作成処理を示すフローチャートである。
【図１２】本実施の形態におけるパターン一致命令テーブル作成処理を示すフローチャートである。
【図１３】本実施の形態におけるパターン一致確認処理を示すフローチャートである。
【図１４】本実施の形態における例外条件確認処理を示すフローチャートである。
【図１５】本実施の形態におけるパターン一致時の例外条件集合作成処理のフローチャートである。
【図１６】本実施の形態における条件ノード作成処理のフローチャートである。
【図１７】本実施の形態におけるパターン不一致命令テーブル作成処理である。
【図１８】本実施の形態におけるパターン不一致時の例外条件作成処理を示すフローチャートである。
【図１９】（ａ）〜（ｃ）は、本実施の形態における例外条件付き命令テーブルを分割する第１例を示す概略図である。
【図２０】（ａ）及び（ｂ）は、本実施の形態例外条件付き命令テーブルを分割する第２例を示す概略図（その１）である。
【図２１】（ａ）〜（ｃ）は、本実施の形態例外条件付き命令テーブルを分割する第２例を示す概略図（その２）である。
【図２２】（ａ）〜（ｃ）は、例外条件を複数含む命令テーブルからデコード用ツリーを作成する場合における効果を説明するための概略図である。
【図２３】（ａ）〜（ｃ）は、１つの命令が複数の例外条件を持つ場合の効果を説明するための概略図である。
【図２４】（ａ）〜（ｃ）は、複数の例外条件が条件の一部を共有している場合の効果を説明するための概略図である。
【図２５】（ａ）〜（ｃ）は、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合の効果を説明するための概略図である。
【図２６】デコード用ツリーの比較例を示す概略図である。
【図２７】本実施の形態におけるデコード用ツリーを示す概略図である。
【図２８】本実施の形態における例外条件付き命令テーブルの第２例を示す概略図である。
【図２９】本実施の形態におけるデコード用ツリーのプログラム表現を示す概略図である。
【発明を実施するための形態】
【００１２】
図１は、本実施の形態に係る情報処理装置としてのデコード用ツリー作成部１００の構成を概略的に示すブロック図である。
デコード用ツリー作成部１００は、ツリー作成部１０１と、命令テーブル分割部１０４とを備える。デコード用ツリー作成部１００は、例外条件付き命令テーブル１１０の入力を受けて、デコード用ツリー１３０を出力する。
ツリー作成部１０１は、ノード作成部１０２と、リーフ作成部１０３とを有する。
なお、本実施の形態に係る情報処理方法は、デコード用ツリー作成部１００により実行される方法である。
【００１３】
例外条件付き命令テーブル１１０は、命令毎にエントリを持つ命令テーブル、言い換えると、命令を識別するための命令識別子及びビット列に対応する命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルである。複数のエントリの内の少なくとも１つのエントリには、一又は複数の例外条件が含まれている。例外条件付き命令テーブル１１０中のエントリの順序は任意である。例外条件付き命令テーブル１１０の各エントリは、命令識別子、オペコード情報及び例外条件集合を保持する。
本実施の形態では、オペコード情報は、オペコードマスク及びオペコードパターンの対で構成されているものとするが、これに限定されない。
例外条件集合は、エントリに対応する命令が例外条件を持たない場合は空である。また、例外条件集合は、エントリに対応する命令が例外条件を複数持つ場合、複数の要素を持つ。例えば、エントリＥの例外条件は、命令ビット列の一部が特定のパターンに合致する場合に、この命令ビット列はエントリＥに一致しないことを意味する。本実施の形態では例外条件は、例外マスク及び例外パターンの対で構成されているものとするが、これに限定されない。例外条件が例外マスクＥＭと例外パターンＥＰとの対である場合、ある命令ビット列Ｉについて、Ｉ＆ＥＭ＝ＥＰが成り立つ場合、この命令ビット列Ｉは例外条件を満足する。ここで、「＆」はビット毎の論理積を表す。
【００１４】
デコード用ツリー１３０は、決定木の一種であり、ビット列に対応する命令識別子を特定するために用いられる。命令デコーダは、デコード用ツリー１３０を用いて入力命令ビット列の命令を特定することができる。デコード用ツリー１３０は、一般的なツリーと同様にノードとリーフとを構成要素とする。
デコード用ツリー１３０のノードは、１つ以上の子を持ち、子はノード及びリーフのいずれかである。
ノードは、命令列のビット群を検査するための情報を持ち、ビット群が持つ値と子を関連付けて保持する。例えば、ノードは、後述するマスク及びビットパターンの組み合わせに子を関連付ける。なお、マスク及びビットパターンの組み合わせに関連付けられる子は、この組み合わせにより分割された命令テーブルにより作成されるノード又はリーフである。また、デコード用ツリー１３０のリーフは、子を持たない。本実施の形態での具体的なノードとリーフの保持方法については、ノード作成処理とリーフ作成処理の詳細と共に説明する。
【００１５】
まず、図１に示されているデコード用ツリー作成部１００が、例外条件を有しない命令テーブルの入力を受けて、従来の方法でデコード用ツリーを出力する例を説明する。
以下では、従来のデコード用ツリー作成方法を、図２〜図４を用いて説明し、その具体例を図５〜図８を用いて説明する。
【００１６】
図２は、従来のデコード用ツリー作成処理を示すフローチャートである。
デコード用ツリー作成処理では、命令テーブルを入力とし、命令テーブルに対応したデコード用ツリーが再帰的に作成される。また、デコード用ツリー作成処理では、入力命令テーブルが１つ以上のエントリを持つことが前提とされる。
【００１７】
まず、ノード作成部１０２は、入力された命令テーブルのエントリ数が１であるか否かを判断する（Ｓ１０）。エントリ数が１の場合（Ｓ１０でＹｅｓ）には、処理はステップＳ１１に進み、エントリ数が１ではない場合（Ｓ１０でＮｏ）、言い換えると、複数のエントリがある場合には、処理はステップＳ１２に進む。
ステップＳ１１では、リーフ作成部１０３は、リーフを作成する。リーフは属性として命令識別子を保持する。リーフ作成部１０３は、リーフ作成と同時に命令テーブルの唯一のエントリから命令識別子を取得し、取得された命令識別子をリーフの属性として設定する。
ステップＳ１２では、ノード作成部１０２は、命令テーブルを入力としてツリーのノードを作成する。ノードの作成処理については、図３を用いて詳細を説明する。
【００１８】
図３は、従来のノード作成処理を示すフローチャートである。
ノード作成処理の入力は、命令テーブルであり、その出力は、２つ以上の子を持つノードである。ノード作成処理では、入力命令テーブルが２つ以上のエントリを持つことが前提とされる。
【００１９】
まず、命令テーブル分割部１０４は、マスクを決定するために値の算出を行う（Ｓ２０）。例えば、命令テーブル分割部１０４は、命令テーブル中の全エントリのオペコードマスクに対するビット毎の総論理積を計算することで、値を算出する。例えば、３つのオペコードマスク「０１１１」、「１１１１」、「１１０１」から得られる値は、総論理積「０１０１」である。
算出された値の中でｉ番目のビットが１の場合、入力命令テーブル中の全ての命令について、命令のｉ番目のビットはオペコードの一部であることを意味する。以降の処理では、命令テーブル分割部１０４は、この値で決定されるマスクから得られる値で命令テーブルを２つ以上に分割し、ツリー作成部１０１は、分割された命令テーブルに対してツリー作成処理（図２）を再帰的に適用することで、デコード用ツリーの全体が作成される。
【００２０】
次に、命令テーブル分割部１０４は、算出された値の全てのビットが「０」であるか否かを判断する（Ｓ２１）。全てのビットが０である場合（Ｓ２１でＹｅｓ）には、処理はステップＳ２２に進み、何れかのビットが１である場合（Ｓ２１でＮｏ）には、処理はステップＳ２３に進む。
ステップＳ２２では、ノード作成部１０２は、有効に機能するマスクが算出できなかったため、処理の結果として作成に失敗したことを返し、処理を終了する。
【００２１】
ステップＳ２３では、ノード作成部１０２は、出力ノードの領域をメモリ上に割り当てる。ノードは、属性としてマスクと子ノード集合を持つ。子ノード集合の要素は、オペコード（ビットパターン）と子ノードの対である。なお、ステップＳ２３では、ノード作成部１０２は、ステップＳ２０で算出されたマスクでノードのマスク属性を初期化する。子ノード集合は、ステップＳ２３でノードを作成した時点では空である。ノード作成部１０２は、以降のステップＳ２４〜Ｓ２９の処理において子ノード集合に要素を追加していくことで、子ノード集合を完成させる。
【００２２】
次に、命令テーブル分割部１０４は、マスクからパターン集合を作る（Ｓ２４）。パターン集合は、ステップＳ２０で算出されたマスクと対応する全ての値を要素とする。言い換えると、パターン集合は、マスクで識別される全てのビットパターンの集合である。パターン集合Ｐの任意の要素（ビットパターン）をｐとし、算出されたマスクをｍとするとき、パターン集合Ｐは、下記の（１）式で表される。
【数１】
0006529588.tif 000002
ここで、ｐｉは、ビットパターンｐのｉ番目のビットを表し、ｍｉは、マスクｍのｉ番目のビットを表すものとする。
なお、マスクｍ中で値が１のビットがＮ個存在する場合、マスクｍと対応するパターン集合Ｐに含まれる要素の数は、２のＮ乗個である。例えば、マスクｍの値が「０１０１」である場合、パターン集合Ｐの要素は、「００００」、「０００１」「０１００」及び「０１０１」の４つである。
【００２３】
ステップＳ２５〜Ｓ２９は、パターン集合Ｐを巡回する処理である。言い換えると、パターン集合Ｐの要素毎に、ステップＳ２５〜Ｓ２９の処理が行われる。
ステップＳ２６は、パターン一致命令テーブル作成処理である。パターン一致命令テーブル作成処理では、命令テーブル分割部１０４は、巡回中のビットパターンと一致する命令のみからなる新たな命令テーブルを作成する。パターン一致命令テーブル作成処理の詳細については、図４を用いて後述する。
【００２４】
ステップＳ２７では、ノード作成部１０２及びリーフ作成部１０３は、ステップＳ２６で作成された命令テーブルを入力とし、図２に示されているデコード用ツリー作成処理を再帰的に行う。
ステップＳ２８では、ノード作成部１０２は、巡回中のビットパターンと、ステップＳ２７で作成されたツリーの対を、ステップＳ２３で作成されたノードの子ノード集合属性の要素として追加する。
全てのビットパターンの巡回が終了すると、ノード作成部１０２は、ステップＳ３０において作成成功であることと出力ノードとを処理の結果として返す。
【００２５】
図４は、従来のパターン一致命令テーブル作成処理を示すフローチャートである。パターン一致命令テーブル作成処理の入力はマスク及びビットパターン対と、命令テーブルとであり、出力は新しい命令テーブルである。ここで出力される命令テーブルは、入力された命令テーブルのエントリのうち、入力されたマスク及びビットパターン対と一致するもののみをエントリとする。また、新しいエントリのオペコードマスクは、元のエントリのオペコードマスクから入力されたマスクのビットをマスクオフした値を持つ。例えば、元のエントリのオペコードマスクが「００１１」で、入力されたマスクが「０００１」であれば、新しいエントリのオペコードマスクは「００１０」である。
【００２６】
まず、命令テーブル分割部１０４は、出力する命令テーブル（以下、出力命令テーブル）として空のテーブルをメモリ上に確保する（Ｓ４０）。
次に、ステップＳ４１〜Ｓ４６は、ループ処理であり、命令テーブル分割部１０４は、入力された命令テーブルを巡回し、パターンに一致するエントリを出力命令テーブルに順に登録する。
【００２７】
ステップＳ４２では、命令テーブル分割部１０４は、入力されたビットパターンｐとマスクｍの対に命令テーブルエントリのオペコードパターンＯＰとオペコードマスクＯＭとが一致するか否かを確認する。具体的には、下記の（２）式が満たされる場合に、命令テーブル分割部１０４は、一致すると判断する。
ＯＰ  ＆  ＯＭ  ＆  ｍ  ＝  ｐ  ＆  ＯＭ  ＆  ｍ            （２）
ここでは、「＆」はビット毎の論理積を意味する。
【００２８】
ステップＳ４３は、ステップＳ４２の結果がパターンに一致か否かを条件とする分岐処理である。パターンに一致の場合（Ｓ４３でＹｅｓ）、処理はステップＳ４４に進み、パターンに一致しない場合（Ｓ４３でＮｏ）、ステップＳ４４及びＳ４５がスキップされて、処理はステップＳ４６に進む。
ステップＳ４４では、命令テーブル分割部１０４は、巡回中の命令テーブルエントリのオペコードマスクＯＭから入力されたマスクｍのビットをマスクオフした新しいオペコードマスクＯＭ＃を作成する。具体的には、命令テーブル分割部１０４は、下記の（３）式により、新しいオペコードマスクＯＭ＃を作成する。
ＯＭ  ＆  〜Ｍ                                              （３）
ここで、「＆」はビット毎の論理積の二項演算、「〜」はビット毎の反転を意味する。
【００２９】
ステップＳ２８では、命令テーブル分割部１０４は、出力命令テーブルのエントリに、巡回中の命令テーブルのエントリを追加する。このとき、追加するエントリのオペコードマスクにはステップＳ４４で計算した新しいオペコードマスクＯＭ＃が使用される。
【００３０】
例として、図５に示されている命令テーブル５を入力とする従来のツリー生成の様子を以下に示す。図５に示されている命令テーブル５は、Ａ、Ｂ、Ｃ、Ｄ及びＥの５つの命令をエントリとして持つ。
【００３１】
図２のステップＳ１０では、ノード作成部１０２は、命令テーブル５のエントリ数が１ではないことを判定し、ステップＳ１２のノード作成処理（図３）を行う。
図３のステップＳ２０では、ノード作成部１０２は、命令Ａ〜Ｅのオペコードマスクの論理積を計算することでマスクの値「１１００００００」を得る。得られたマスクは、値が１のビットを含む。従って、図３のステップＳ２１の分岐処理では、処理はステップＳ２３に進む。
図３のステップＳ２４では、命令テーブル分割部１０４は、マスクの値から４つのビットパターン、「００００００００」、「０１００００００」、「１０００００００」及び「１１００００００」を生成する。図３のステップＳ２５〜Ｓ２９では、ステップＳ２４で生成された４つのビットパターンを巡回する。
【００３２】
各ビットパターン巡回時に、図３のステップＳ２６（図４）で作成されるパターン一致命令テーブルは、図６に示されている。
図６（ａ）に示されているパターン一致命令テーブル６ａは、図５の命令テーブル５で、ビットパターン「００００００００」、マスク「１１００００００」と一致する命令Ａをエントリとして持つ。命令Ａのエントリのオペコードマスクは、図３のステップＳ２０で算出されたマスク「１１００００００」が除外されて、「００００００００」となる。
図６（ｂ）に示されているパターン一致命令テーブル６ｂは、図５の命令テーブル５で、ビットパターン「０１００００００」、マスク「１１００００００」と一致する命令Ｂ及び命令Ｃをエントリとして持つ。命令Ｂ及び命令Ｃのオペコードマスクも、命令Ａと同様にマスク「１１００００００」が除外されて、「００００００１１」となる。
図６（ｃ）に示されているパターン一致命令テーブル６ｃは、図５の命令テーブル５でビットパターン「１０００００００」、マスク「１１０００００」と一致する命令Ｄ及び命令Ｅをエントリとして持つ。命令Ｄ及び命令Ｅのオペコードマスクも、マスク「１１００００００」が除外されて、「００００１１００」となる。
【００３３】
なお、図５に示されている命令テーブル５では、ビットパターン「１１００００００」、マスク「１１００００００」と一致する命令は存在しない。このため、ビットパターン「１１０００００」を巡回した際には、命令テーブルは空となる。
【００３４】
図３に示されているノード作成処理では、ステップＳ２７で図５に示されている命令テーブル６ａ〜６ｃを入力として、再帰的にデコード用ツリー作成処理が行われる。
パターン一致命令テーブル６ａを入力とし、図２に示されているツリー作成処理が行われると、エントリ数が「１」であるため、処理はステップＳ１１に進む。ステップＳ１１では、パターン一致命令テーブル６ａ唯一のエントリである命令Ａに対応するリーフが作成される。
なお、パターン一致命令テーブル６ｂ及びパターン一致命令テーブル６ｃを入力とするツリー生成も上記と同様の繰返しである。
【００３５】
図５に示されている命令テーブル５を入力とする上記の処理で出力される従来のツリーを図７に示す。
図７の符号７ａ、符号７ｂ及び符号７ｃは、ノードであり、符号８ａ、符号８ｂ、符号８ｃ、符号８ｄ及び符号８ｅは、リーフである。
リーフ８ａは、図６（ａ）に示されている命令テーブル６ａから、ツリー作成処理で作られるツリーである。
また、ノード７ｂをルートとするサブツリーは、図６（ｂ）に示されている命令テーブル６ｂから作成されるツリーであり、ノード７ｃをルートとするサブツリーは、図６（ｃ）に示されている命令テーブル６ｃから作成されるツリーである。
【００３６】
しかしながら、従来の方法では、例外条件を持つ命令テーブルに対応できないという問題がある。例として、図８に示されている命令テーブル１１１を用いて説明する。
図８に示されている命令テーブル１１１では、１つの命令ビット列に対して２つ以上の命令のオペコードが一致する場合がある。例えば、命令ビット列「１１００００００」は、命令Ａ及び命令Ｂのオペコードと一致する。しかし、命令Ｂの例外条件としてｓ＝１１が存在し、命令ビット列「１１００００００」は、例外条件ｓ＝１１を満たす。このため、この命令ビット列は、命令Ｂではない。従って、命令ビット列は命令Ａである。
【００３７】
以下では、図８に示されている命令テーブル１１１に対して、図２に示されているツリー作成処理を行う場合の問題を示す。
命令テーブル１１１を入力として、ツリー作成処理が行われると、図３のステップＳ２０で算出されるマスクは、「００００００００」である。このマスクは、図８の命令Ａ、命令Ｂ及び命令Ｃのオペコードマスク「１１００００００」、「００００００１１」、「００００００１１」の論理積の結果である。このため、図３のステップＳ２１の分岐処理で、マスクの全ビットが「０」となり、処理はステップＳ２２に進み、有効なマスクが算出されないため、ノード作成は失敗となる。また、このまま処理が図３のステップＳ２３に進んだとしても、パターン集合を作成できないため、処理を正しく継続することができない。
【００３８】
このように従来のツリー作成方法では、例外条件が存在する命令テーブルに対して適用することができないという問題があった。そこで、以下では、例外条件が存在する命令テーブルに対してもデコード用ツリーを生成することのできる本実施の形態を説明する。
【００３９】
図１の説明に戻り、ツリー作成部１０１は、命令テーブルからデコード用ツリーを作成する。
ノード作成部１０２は、命令テーブルが複数のエントリからなる場合には、対応するノードを作成する。
リーフ作成部１０３は、命令テーブルが１つのエントリからなる場合には、対応するリーフを作成する。
【００４０】
命令テーブル分割部１０４は、命令テーブルを分割する。命令テーブルの分割は、命令テーブルのエントリが１つになるまで行われ、分割された命令テーブルに基づいて、ツリー作成部１０１で対応するノード又はリーフが作成される。
例えば、命令テーブル分割部１０４は、命令テーブルに含まれている複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、これらの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、命令テーブルを、一又は複数の例外条件の何れかにオペコード情報が一致するエントリからなる第１命令テーブルと、一又は複数の例外条件の何れにも前記オペコード情報が一致しないエントリからなる第２命令テーブルと、に分割する。
また、命令テーブル分割部１０４は、命令テーブルに含まれている複数のエントリの内の少なくとも１つのエントリに一又は複数の例外条件が含まれており、かつ、これらの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができた場合には、このマスクで識別することのできる複数のビットパターンから一つずつ順番にビットパターンを選択し、この選択された一つのビットパターンにオペコード情報が一致し、かつ、前記マスク及び前記選択されたビットパターンが例外条件に一致しないエントリを集めることで、命令テーブルをビットパターン毎に分割して、第３命令テーブルを生成する。
【００４１】
デコード用ツリー作成部１００の各機能は、例えば、図９に示されているような処理回路により実現される。
処理回路は、プロセッサ１４０と、メモリ１４１とにより構成される。
プロセッサ１４０は、メモリ１４１に格納されているプログラムを実行するＣＰＵ（中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ又はＤＳＰともいう）である。
メモリ１４１は、ＲＡＭ、ＲＯＭ、フラッシュメモリ、ＥＰＲＯＭ、ＥＥＰＲＯＭ等の不揮発性又は揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク又はＤＶＤ等である。なお、メモリ１４１は、例外条件付き命令テーブル１１０及びデコード用ツリー１３０も記憶する。
【００４２】
図１０は、本実施の形態におけるデコード用ツリー作成処理を示すフローチャートである。
図１０に示されている処理の内、図２に示されている処理と同様の処理については、図２と同じ符号が付されている。
なお、図１に示されているように、図１０に示されているデコード用ツリー作成処理の入力は、例外条件付きの命令テーブル１１０であり、その出力は、デコード用ツリー１３０である。また、デコード用ツリー作成処理は、入力される命令テーブルが１つ以上のエントリを持つことを前提条件とする。
【００４３】
ステップＳ１０では、ノード作成部１０２は、入力された命令テーブルのエントリ数が１であるか否かを判断する。エントリ数が１である場合（Ｓ１０でＹｅｓ）には、処理はステップＳ１１に進み、エントリ数が２以上である場合（Ｓ１０でＮｏ）には、処理はステップＳ１３に進む。
ステップＳ１１では、リーフ作成部１０３は、リーフを作成する。リーフは属性として命令識別子を保持する。リーフ作成部１０３は、このリーフには属性として命令テーブルエントリの情報を関連付ける。
【００４４】
ステップＳ１３〜Ｓ１５は、命令テーブルが２つ以上のエントリを持つ場合に、ノードを作成する処理である。
ステップＳ１３では、ノード作成部１０２は、ノード作成処理を行う。ノード作成処理は、命令テーブルを入力とし、ノードを作成する。このノード作成処理の詳細については、後で説明する。
ステップＳ１４は、ステップＳ１３の結果としてノード作成に成功したか否かを判断する分岐処理である。ノードの作成に成功した場合（Ｓ１４でＹｅｓ）には、ステップＳ１５の処理はスキップされ、ノードの作成に失敗した場合（Ｓ１４でＮｏ）には、処理はステップＳ１５に進む。
【００４５】
ステップＳ１５では、ノード作成部１０２は、命令テーブルを入力とし、条件ノード作成処理を行う。条件ノードは、本実施の形態で新たに導入したノードである。条件ノードと条件ノード作成処理の詳細については、後で説明する。
【００４６】
図１１は、本実施の形態におけるノード作成処理を示すフローチャートである。
図１１に示されているノード作成処理は、図１０のステップＳ１３での処理の詳細である。
ここで、図１１に示されている処理の内、図３に示されている従来のノード作成処理と同様の処理については、図３と同じ符号が付されている。図１１に示されている処理は、ステップＳ３１の処理を除いて、図３の処理と同様である。以下、ステップＳ３１での処理について主に説明する。
【００４７】
ステップＳ３１は、本実施の形態におけるパターン一致命令テーブル作成処理である。ここでは、命令テーブルのエントリが入力パターンに一致するか否かの判定に、オペコードだけでなく例外条件も用いるという点で従来と異なる。ここでの処理の詳細については、後において詳述する。
なお、ステップＳ２０では、図３を用いて説明したように、オペコードマスクの総論理積を計算することで、マスクを決定している。但し、マスクの決定方法は、これに限定されない。マスクは、ステップＳ３１のパターン一致命令テーブル作成処理で作成される命令テーブルのエントリ数が、入力される命令テーブルの要素数より小さくすることができるビット列であれば、任意である。
【００４８】
図１２は、本実施の形態におけるパターン一致命令テーブル作成処理を示すフローチャートである。
図１２に示されているパターン一致命令テーブル作成処理は、図１１のステップＳ３１での処理の詳細である。
ここで、図１２に示されている処理の内、図４に示されている従来のパターン一致命令テーブル作成処理と同様の処理については、図４と同じ符号が付されている。図１２に示されている処理は、ステップＳ４７〜Ｓ４９の処理を除いて、図４の処理と同様である。以下、ステップＳ４７〜Ｓ４９での処理について主に説明する。
【００４９】
パターン一致命令テーブル作成処理の入力は、マスク及びビットパターンの対と、命令テーブルとであり、出力は、マスク及びビットパターン対と一致するエントリのみからなる新たな命令テーブルである。
本実施の形態におけるパターン一致命令テーブル作成処理の特徴は、命令テーブルがマスク及びビットパターン対と一致するか否かの判定に、ビットパターン以外に例外条件を用いる点である。
【００５０】
ステップＳ４７は、パターン一致確認処理である。パターン一致確認処理では、命令テーブル分割部１０４は、入力された命令テーブルのエントリが入力されたマスク及びビットパターン対と一致しているか否かを例外条件も加味して判定する。パターン一致確認処理の詳細については後述する。
ステップＳ４８は、パターン一致時の例外条件集合作成処理である。パターン一致時の例外条件集合作成処理では、命令テーブル分割部１０４は、出力命令テーブルのエントリ中の例外条件の集合を新たに作成する。パターン一致時の例外条件集合作成処理の入力は、パターン一致命令テーブル作成処理自体に入力されたマスク及びビットパターン対と、巡回中の命令テーブルのエントリの例外条件集合とである。また、出力は、新しい例外条件集合である。パターン一致時の例外条件集合作成処理の詳細については後で説明する。
ステップＳ４９では、命令テーブル分割部１０４は、出力命令テーブルに現在巡回中の入力命令テーブルのエントリを追加する。このとき、新たらしいエントリのオペコードマスクと例外条件集合とには、それぞれステップＳ４４で作成されたオペコードマスクとステップＳ４８で作成された例外条件集合とが設定される。
【００５１】
図１３は、本実施の形態におけるパターン一致確認処理を示すフローチャートである。
図１３に示されているパターン一致確認処理は、図１２のステップＳ４７での処理の詳細である。
パターン一致確認処理では、マスク及びビットパターン対と、命令テーブルのエントリとを入力とし、命令テーブル分割部１０４は、命令テーブルのエントリがマスク及びビットパターン対と一致するか否かを判定する。
【００５２】
まず、命令テーブル分割部１０４は、命令テーブルエントリのオペコード情報が、入力されたマスク及びビットパターン対と一致しているか否かを確認する（Ｓ５０）。具体的には、入力されたマスクをｍ、入力されたビットパターンをｐ、命令テーブルエントリのオペコードパターンをＯＰ、オペコードマスクをＯＭとするとき、下記の（４）式を満たすとき、命令テーブル分割部１０４は、これらが一致していると判断する。
ＯＰ  ＆  ＯＭ  ＆  ｍ  ＝  ｐ  ＆  ＯＭ  ＆  ｍ            （４）
ここで、「＆」は、ビット毎の論理積を意味する。
【００５３】
次に、命令テーブル分割部１０４は、ステップＳ５０の結果がパターンに一致するか否かを確認する（Ｓ５１）。その結果がパターンに不一致である場合（Ｓ５１でＮｏ）には、処理はステップＳ５２に進み、その結果がパターンに一致である場合（Ｓ５１でＹｅｓ）には、処理はステップＳ５３に進む。
ステップＳ５２では、命令テーブル分割部１０４は、結果を不一致として処理を終了する。
【００５４】
一方、ステップＳ５３では、命令テーブル分割部１０４は、例外条件確認処理を行う。例外条件確認処理では、命令テーブル分割部１０４は、巡回中の命令テーブルのエントリの例外条件を確認する。例外条件確認処理では、マスク及びビットパターン対と命令テーブルのエントリの例外条件集合とを入力とし、命令テーブル分割部１０４は、マスク及びビットパターン対が例外条件を満たすか否かを出力とする。例外条件確認処理の詳細について後で説明する。
【００５５】
次に、命令テーブル分割部１０４は、ステップＳ５３での結果が例外条件を満たしているか否かを確認する（Ｓ５４）。その結果が例外条件を満たす場合（Ｓ５４でＹｅｓ）には、処理はステップＳ５５に進み、その結果が例外条件を満たしていない場合（Ｓ５４でＮｏ）には、処理はステップＳ５６に進む。
ステップＳ５５では、例外条件が満たされているため、命令テーブル分割部１０４は、結果を不一致として処理を終了する。
一方、ステップＳ５６では、例外条件が満たされていないため、命令テーブル分割部１０４は、結果を一致として処理を終了する。
【００５６】
図１４は、本実施の形態における例外条件確認処理を示すフローチャートである。
図１４に示されている例外条件確認処理は、図１３のステップＳ５３での処理の詳細である。
例外条件確認処理の入力は、マスク及びビットパターン対と、例外条件集合とである。例外条件確認処理では、命令テーブル分割部１０４は、入力されたマスク及びビットパターン対が１つ以上の例外条件と一致するか否かを確認する。
【００５７】
まず、命令テーブル分割部１０４は、例外条件確認処理の結果を不一致として初期化する（Ｓ６０）。
次に、ステップＳ６１〜ステップＳ６５は、例外条件を巡回し、入力されたマスク及びビットパターン対と一致している例外条件があるか否かを確認するループである。途中１つでも入力されたマスク及びビットパターン対と一致する例外条件が見つかれば、例外条件確認処理の結果は一致となる。
【００５８】
ステップＳ６２では、命令テーブル分割部１０４は、入力されたマスク及びビットパターン対が例外条件と一致するか否かを確認する。入力されたマスクをｍ、入力されたビットパターンをｐ、巡回中の例外条件における例外パターンをＥＰ、巡回中の例外条件における例外マスクをＥＭとするとき、下記の（５）式を満たす場合に、命令テーブル分割部１０４は、これらが例外条件と一致すると判断する。
（ｍ  ＆  ＥＭ  ＝  ＥＭ）  ∧  （ｐ  ＆  ＥＭ  ＝  ＥＰ  ＆  ＥＭ）    （５）
ここで、「＆」は、ビット毎の論理積を意味する。
【００５９】
次に、命令テーブル分割部１０４は、ステップＳ５２での確認結果が一致であるか否かを判断する。確認結果が一致である場合（Ｓ６３でＹｅｓ）には、処理はステップＳ６４に進み、確認結果が不一致である場合（Ｓ６３でＮｏ）には、ステップＳ６４をスキップして、処理はステップＳ６５に進む。
ステップＳ６４では、命令テーブル分割部１０４は、例外条件確認処理の結果として一致したことをメモリに記憶する。ステップＳ６１〜Ｓ６５の例外条件巡回処理が完了した時点で、例外条件確認処理の結果として、一致又は不一致が得られる。
【００６０】
図１５は、本実施の形態におけるパターン一致時の例外条件集合作成処理のフローチャートである。
図１５に示されているパターン一致時の例外条件集合作成処理は、図１２におけるステップＳ４８での処理の詳細である。
パターン一致時の例外条件集合作成処理における入力は、マスク及びビットパターン対と、例外条件集合とであり、出力は、入力された例外条件集合から無効な例外条件を除いた新しい例外条件集合である。
【００６１】
まず、命令テーブル分割部１０４は、出力例外条件用の領域をメモリに割り当てる（Ｓ７０）。出力例外条件の初期値は空集合である。
ステップＳ７１〜Ｓ７６は、例外条件を巡回するループ処理である。このループ処理では、命令テーブル分割部１０４は、必要な例外条件のみを出力例外条件集合に追加する。
【００６２】
ステップＳ７２では、命令テーブル分割部１０４は、巡回中の例外条件が入力されたマスク及びビットパターン対で有効か否かをチェックする処理である。
入力されたマスクをｍ、入力されたビットパターンｐ、巡回中の例外条件における例外マスクをＥＭ、巡回中の例外条件における例外パターンをＥＰとするとき、下記の（６）式を満たす場合に、命令テーブル分割部１０４は、巡回中の例外条件が有効であると判断する。
ｐ  ＆  ＥＭ  ＆  ｍ  ＝  ＥＰ  ＆  ＥＭ  ＆  ｍ            （６）
ここで、「＆」は、ビット毎の論理積を意味する。
【００６３】
次に、命令テーブル分割部１０４は、ステップＳ７２での確認結果が有効であるか否かを確認する（Ｓ７３）。確認結果が有効である場合（Ｓ７３でＹｅｓ）には、処理はステップＳ７４に進み、確認結果が有効ではない場合（Ｓ７３でＮｏ）には、ステップＳ７４及びＳ７５をスキップして、処理はステップＳ７６に進む。
ステップＳ７４では、命令テーブル分割部１０４は、新しい例外マスクを作成して、例外マスクを更新する。具体的には、命令テーブル分割部１０４は、新しい例外マスクＥＭ＃を、例外マスクＥＭ及び入力されたマスクｍを用いて、下記の（７）式で算出する。
ＥＭ  ＆  〜Ｍ                                              （７）
ここで、「＆」は、ビット毎の論理積を意味し、「〜」は、ビット毎の反転を意味する。
ステップＳ７５では、命令テーブル分割部１０４は、新しい例外条件を出力例外条件集合に追加する。この新しい例外条件は、巡回中の例外条件における例外パターンとステップＳ７４で作成した例外マスクとの対である。
【００６４】
ここまででノード作成処理について説明した。以降ではノードの作成に失敗した場合に作成する条件ノードの作成処理について示す。
図１６は、本実施の形態における条件ノード作成処理のフローチャートである。
図１６に示されている条件ノード作成処理は、図１０におけるステップＳ１５での処理の詳細である。
条件ノード作成処理の入力は、例外条件付き命令テーブルであり、出力は条件ノードである。条件ノードは、属性として例外条件及び２つの子を持つ。例外条件の属性の実体は、マスク及びビットパターン対（例外マスク及び例外パターン対）である。条件ノードの子のうちの一方は、デコード対象のビット列が例外条件を満たす場合に対応し、他方はデコード対象のビット列が例外条件を満たさない場合に対応する。
【００６５】
まず、ノード作成部１０２は、命令テーブル中の全ての例外条件の中から、任意の例外条件を１つ選択する（Ｓ８０）。
次に、ノード作成部１０２は、ステップＳ８０において例外条件が存在するか否かを確認する（Ｓ８１）。例外条件が存在しない場合（Ｓ８１でＮｏ）には、処理はステップＳ８２に進み、例外条件が存在する場合（Ｓ８１でＹｅｓ）には、処理はステップＳ８３に進む。
ステップＳ８１で例外条件が見つからない場合の原因は、入力された命令テーブルの誤りである。このため、ステップＳ８２では、ノード作成部１０２は、入力命令テーブルに誤りがあることをユーザに知らせる。例えば、ノード作成部１０２は、図示されていないディスプレイ等の表示部にエラー画面を表示させる。または、ノード作成部１０２は、音声等によりエラーであることをユーザに知らせてもよい。
【００６６】
一方、ステップＳ８３では、命令テーブル分割部１０４は、命令テーブルと、ステップＳ８０で選択された例外条件の例外マスク及び例外パターン対とを入力とし、図１３を用いて先に説明したパターン一致命令テーブル作成処理を実行する。ここで、選択された例外条件の例外マスク及び例外パターン対は、マスク及びビットパターン対として用いられる。
【００６７】
次に、ノード作成部１０２及びリーフ作成部１０３は、ステップＳ８３で作成された命令テーブルを入力としてツリーを作成する（Ｓ８４）。ステップＳ８４におけるツリー作成処理は、図１０を用いて先に説明したとおりである。
【００６８】
次に、命令テーブル分割部１０４は、命令テーブルと、ステップＳ８０で選択された例外条件における例外マスク及び例外パターン対とを入力として、パターン不一致命令テーブル作成処理を行う。選択された例外条件における例外マスク及び例外パターン対は、マスク及びビットパターン対として用いられる。
パターン不一致命令テーブル作成処理は、入力されたマスク及びビットパターン対に一致しないエントリのみからなる命令テーブルを作成する処理である。パターン不一致命令テーブル作成処理の詳細については後で説明する。
【００６９】
次に、ノード作成部１０２及びリーフ作成部１０３は、ステップＳ８５で作成された命令テーブルを入力としてツリーを作成する（Ｓ８６）。ツリーの作成手順は、図１０を用いて先述したとおりである。
次に、ノード作成部１０２は、出力条件ノードを作成する（Ｓ８７）。条件ノードの条件属性は、ステップＳ８０で選択された例外条件である。また、条件が成立した場合に対応する子には、ステップＳ８４で作成されたツリーが設定される。同様に条件が成立しなかった場合に対応する子にはステップＳ８６で作成されたツリーが設定される。
【００７０】
図１７は、本実施の形態におけるパターン不一致命令テーブル作成処理である。
図１７に示されているパターン不一致命令テーブル作成処理は、図１６におけるステップＳ８５での処理の詳細である。
パターン不一致命令テーブル作成処理の入力は、マスク及びビットパターン対（例外マスク及び例外パターン対）と命令テーブルとであり、出力は、入力命令テーブルのうち入力されたマスク及びビットパターン対に一致しなかった命令のみからなる命令のテーブルである。
【００７１】
まず、命令テーブル分割部１０４は、出力命令テーブルを格納する領域をメモリに確保する（Ｓ９０）。出力命令テーブルは、初期状態ではエントリを持たない。
ステップＳ９１〜ステップＳ９６は、入力された命令テーブルを巡回するループ処理である。ここでは、命令テーブル分割部１０４は、入力されたマスク及びビットパターン対に一致しないエントリを選択して、出力命令テーブルに追加する。
【００７２】
ステップＳ９２では、命令テーブル分割部１０４は、巡回中のエントリが入力された入力されたマスク及びビットパターン対と一致するか否かを確認するパターン一致確認処理である。ステップＳ９２でのパターン一致確認処理の詳細は、図１３を用いて先に説明したとおりである。
ステップＳ９３では、命令テーブル分割部１０４は、ステップＳ９２の結果に基づき、巡回中の命令がマスク及びビットパターン対に一致しているか否かを確認する。そして、これらが一致していない場合（Ｓ９３でＮｏ）には、処理はステップＳ９４に進み、これらが一致している場合（Ｓ９３でＹｅｓ）には、ステップＳ９４及びＳ９５をスキップして、処理はステップＳ９６に進む。
【００７３】
ステップＳ９４では、命令テーブル分割部１０４は、パターン不一致例外条件集合を作成する。ステップＳ９４の詳細については後で示す。
ステップＳ９５では、命令テーブル分割部１０４は、巡回中の命令テーブルのエントリを出力命令テーブルエントリに加える。このとき出力命令テーブルに追加するエントリの例外条件集合には、ステップＳ９４で作成された例外条件集合が使用される。
【００７４】
図１８は、パターン不一致時の例外条件作成処理を示すフローチャートである。
図１８に示されているパターン不一致時の例外条件作成処理は、図１７のステップＳ９４での処理の詳細である。
パターン不一致時の例外条件集合作成処理の入力は、マスク及びビットパターン対（例外マスク及び例外パターン対）と、例外条件集合とであり、出力は、入力例外条件集合のうち無効な例外条件のみからなる新しい例外条件集合である。
【００７５】
まず、命令テーブル分割部１０４は、出力例外条件の集合を格納する領域をメモリ上に確保する（Ｓ１００）。出力命令条件の集合は、初期状態では空である。
ステップＳ１０１〜ステップＳ１０５は、例外条件集合を巡回するループである。命令テーブル分割部１０４は、例外条件の巡回毎に例外条件が入力されたマスク及びビットパターン対に対して無効であれば、出力例外条件集合に巡回中の例外条件を追加する。
【００７６】
ステップＳ１０２では、命令テーブル分割部１０４は、入力されたマスク及びビットパターン対に対して、巡回中の例外条件が有効か否かを確認する。入力されたマスクをｍ、入力されたビットパターンをｐ、巡回中の例外条件における例外マスクをＥＭ、巡回中の例外条件における例外パターンをＥＰとするとき、命令テーブル分割部１０４は、下記の（８）式が満たされる場合に、巡回中の例外条件が有効と判断する。
ＥＰ  ＆  ｍ  ＆  ＥＭ  ＝  ｐ  ＆  ｍ  ＆  ＥＭ            （９）
ここで、「＆」は、ビット毎の論理積を意味する。
【００７７】
ステップＳ１０３では、命令テーブル分割部１０４は、ステップＳ１０２での確認結果が有効か否かを確認する。確認結果が有効ではない場合（Ｓ１０３でＮｏ）、言い換えると、確認結果が無効である場合には、処理はステップＳ１０４に進み、確認結果が有効である場合（Ｓ１０３でＹｅｓ）には、ステップＳ１０４をスキップして、処理はステップＳ１０５に進む。
スキップＳ１０４は、命令テーブル分割部１０４は、ステップＳ１００で作成した出力例外条件集合に、巡回中の例外条件を追加する。
ステップＳ１０１〜ステップＳ１０５のループ処理が完了した時点で、パターン不一致時の例外条件集合作成処理の結果が出力例外条件集合として得られる。
【００７８】
以下では、いくつかの例を用いて本実施の形態の効果を順に説明する。
まず、図８の命令テーブル１１１を入力とする場合の効果について説明する。
図８に示されている命令テーブル１１１に対応する例外条件付き命令テーブルは、図１９（ａ）に示されている例外条件付き命令テーブル１１２ａである。
図１９（ａ）に示されている例外条件付き命令テーブル１１２ａは、例外条件「ｓ＝１１」を例外マスク「１１００００００」と例外パターン「１１００００００」との対で保持する。
図１０に示されているツリー作成処理では、図１９に示されている例外条件付き命令テーブル１２２ａが入力されると、ノード作成部１０２は、ステップＳ１３のノード作成処理に失敗する。このため、ノード作成部１０２は、ステップＳ１５の条件ノード作成処理、言い換えると、図１６に示されている条件ノード作成処理を行う。
【００７９】
図１６に示されている条件ノード作成処理では、例えば、ステップＳ８０で、ノード作成部１０２は、選択する例外条件として、図１９に示されている「ｓ＝１１」を選択する。そして、命令テーブル分割部１０４は、選択された例外条件を用いることで、図１９（ｂ）に示されているパターン一致命令テーブル１１２ｂを図１６のステップＳ８３で生成し、図１９（ｃ）に示されているパターン不一致命令テーブル１１２ｃを、図１６のステップＳ８５で作成する。
パターン一致命令テーブル１１２ｂには、命令Ｂ及び命令Ｃが含まれていない。これは、図１２に示されているパターン一致命令テーブル作成処理において、命令テーブル分割部１０４は、例外条件を用いることによって命令Ｂと命令Ｃとを取り除いているためである（図１２のステップＳ４７及び図１３のステップＳ５３）。
そして、図１６のステップＳ８４で、ノード作成部１０２及びリーフ作成部１０３は、パターン一致命令テーブル１１２ｂを入力として、再度図１０に示されているツリー作成処理を行うと、ステップ１１のリーフ作成処理に成功する。同様に、図１６のステップＳ８５で、ノード作成部１０２及びリーフ作成部１０３は、パターン不一致命令テーブル１１２ｃを入力として、再度図１０に示されているツリー作成処理を行うと、ステップＳ１３のノード作成処理に成功する。
【００８０】
このように本実施の形態では、ツリー作成処理において例外条件を用いて例外条件付き命令テーブルを分割する手段をもつことによって、例外条件を持つ命令テーブルからデコード用ツリーを作成することができる。
【００８１】
次に、条件ノード作成処理の効果を説明するため、図８に示されている命令テーブル１１１から、条件ノードを用いないでツリー生成処理を行う場合について説明する。以下では、説明のため、本実施の形態の図１１のステップＳ２０におけるマスクを算出する処理を、オペコードマスクの論理積計算とは異なる処理に置き換えた場合を仮定する。
この場合、図８に示されている命令テーブル１１１を入力とし、図１０に示されているツリー作成処理が行われると、ノード作成部１０２は、ステップＳ１３を介して、図１１に示されているノード作成処理を実行する。ここでは、ノード作成部１０２は、ステップＳ２０において、マスクとして「１１００００００」を用いるものとする。
このマスクを入力として、ステップＳ３１のパターン一致命令テーブル作成処理が行われると、命令テーブル分割部１０４は、入力された命令テーブル１１１を４つの命令テーブルに分割する。
【００８２】
図２０及び図２１は、命令テーブル分割部１０４が入力された命令テーブルを４つの命令テーブルに分割する様子を説明するための模式図である。
図２０（ａ）に示されている命令テーブル１１３ａが入力されると、命令Ｂ及び命令Ｃは、「００００００００」、「０１００００００」及び「１０００００００」の３つのビットパターンと一致するため、命令テーブル分割部１０４は、図２０（ｂ）に示されているパターン一致命令テーブル１１３ｂ、図２１（ａ）に示されているパターン一致命令テーブル１１３ｃ及び図２１（ｂ）に示されているパターン一致命令テーブル１１３ｄを作成する。また、ビットパターン「１１００００００」には命令Ａのみが一致するため、命令テーブル分割部１０４は、図２１（ｃ）に示されているパターン一致命令テーブル１１３ｅを作成する。
【００８３】
ここでは、命令の例外条件を用いて命令テーブルが分割されるため、図２１（ｃ）に示されているパターン一致命令テーブル１１３ｅには、命令Ｂ及び命令Ｃが含まれていない。このため、パターン一致命令テーブル１１３ｂ〜１１３ｅに対して再帰的に、図１０に示されているツリー作成処理が行われることで、ツリー全体が完成する。
しかし、図１９に示されている本実施の形態の例では、入力された命令テーブル１１２ａは、パターン一致命令テーブル１１２ｂ及びパターン不一致命令テーブル１１２ｃの２つに分割されるのに対し、図２０及び図２１に示された例では、パターン一致命令テーブル１１３ｂ〜１１３ｅの４つに分割される。
図１９のように分割された命令テーブルから生成されるデコード用ツリーのサイズは、図２０及び図２１のように分割された命令テーブルから生成されるデコード用ツリーのサイズよりも小さい。このように小さいサイズのツリーを生成できるのは、本実施の形態が、図１０のステップＳ１５で条件ノードを作成する処理を含むためである。このように条件ノード作成処理を含むことで、本実施の形態は、生成される命令デコードツリーのサイズを小さくすることができる。
【００８４】
次に、図２２を参照して、例外条件を複数含む命令テーブルからデコード用ツリーを作成する場合における効果を説明する。
図２２（ａ）に示されている例外条件付き命令テーブル１１４ａは、３つの命令Ａ、命令Ｂ及び命令Ｃのエントリを含む。このうち命令Ｂ及び命令Ｃは、それぞれ例外条件「ｕ＝００」及び「ｖ＝００」を含む。
【００８５】
この例外条件付き命令テーブル１１４ａを入力として、図１０に示されているツリー作成処理が行われると、ノード作成部１０２は、ステップＳ１５にて図１６に示されている条件ノード作成処理を行う。
ノード作成部１０２は、ステップＳ８０において、入力された命令テーブル中に存在する複数の例外条件「ｕ＝００」及び「ｖ＝００」の中から、例えば、「Ｕ＝００」を選択する。
そして、ノード作成部１０２は、ステップＳ８３とステップＳ８５とで、選択された例外条件「ｕ＝００」を満たすか否かにより、図２２に示されている命令テーブル１１４ａを、図２２（ｂ）に示されているパターン一致命令テーブル１１４ｂと、図２２（ｃ）に示されているパターン不一致命令テーブル１１４ｃとに分割する。ノード作成部１０２及びリーフ作成部１０３は、分割された命令テーブル１１４ｂ、１１４ｃに対して、再帰的に図１０のツリー作成処理を適用することができる。
【００８６】
以上のように、本実施の形態では、命令テーブルに含まれる複数の例外条件から一部の例外条件を抽出し、抽出された例外条件を用いて命令テーブルを分割することすることで、複数の例外条件を持った命令テーブルからデコード用ツリーを生成することができる。
【００８７】
次に、図２３を参照して、１つの命令が複数の例外条件を持つ場合の効果を示す。
図２３（ａ）に示されている条件付き命令テーブル１１５ａは、命令Ａ、命令Ｂ及び命令Ｃに対応する３つのエントリを含む。このうち命令Ｃのエントリは、「ｔ＝１１」及び「ｔ＝００」の２つの例外条件を含む。
【００８８】
この条件付き命令テーブル１１５ａを入力として、図１０に示されているツリー作成処理が行われると、ノード作成部１０２は、ステップＳ１５で、図１６に示されている条件ノード作成処理を行う。そして、命令テーブル分割部１０４は、ステップＳ８０で選択された例外条件「ｔ＝１１」を用いて、図２３（ｂ）に示されているパターン一致命令テーブル１１５ｂ及び図２３（ｃ）に示されているパターン不一致命令テーブル１１５ｃとを作成する。
パターン一致命令テーブル１１５ｂを作成するときには、命令テーブル分割部１０４は、図１２に示されているパターン一致時の例外条件作成処理におけるステップＳ４８での例外条件の有効性チェック（図１５のステップＳ７２）で、例外条件「ｔ＝１１」を有効と判断し、この例外条件を出力例外条件集合から除く。その結果として、パターン不一致命令テーブル１１５ｃの命令Ｃのエントリからは例外条件「ｔ＝１１」が取り除かれる。
【００８９】
パターン不一致命令テーブル１１５ｃに対して再帰的にツリー作成処理が行われると、２回目の条件ノード作成処理（図１０のステップＳ１５）において唯一の例外条件「ｔ＝００」が選択され、正しくツリーの作成手順が進行する。
仮に、図１５に示されているパターン一致時の例外条件作成処理において、例外条件「ｔ＝１１」を除外する手段がないと、再帰的にツリー作成処理を行った際に、再度例外条件「ｔ＝１１」を選択してしまい、正しく処理を継続することができなくなる。
【００９０】
このように、本実施の形態は、ツリー作成処理において命令テーブルを分割する際に例外条件を除外する手段を有することによって、１つの命令が複数の例外条件を持つ命令テーブルに対してデコード用ツリーを作成することができる。
【００９１】
次に、図２４を用いて、複数の例外条件が条件の一部を共有している場合の効果について説明する。
図２４（ａ）に示されている例外条件付き命令テーブル１１６ａは、命令Ａ、命令Ｂ及び命令Ｃに対応する３つのエントリを含む。命令Ｂは、例外条件「ｔ＝１１∧ｖ＝００」を含み、命令Ｃは、例外条件「ｔ＝１１」を含む。ここで「∧」は、論理積を意味する。このとき命令Ｂ及び命令Ｃは、例外条件「ｔ＝１１」を共有している。
【００９２】
この命令条件付き命令テーブル１１６ａを入力として、図１０に示されているツリー作成処理が行われると、ノード作成部１０２は、図１６に示されている条件ノード作成処理を行う。そして、命令テーブル分割部１０４は、ステップＳ８０で選択された例外条件「ｔ＝１１」を用いて、図２４（ｂ）に示されているパターン一致命令テーブル１１６ｂと、図２４（ｃ）に示されているパターン不一致命令テーブル１１６ｃとを作成する。このとき、パターン一致命令テーブル１１６ｂの命令Ｂのエントリの例外条件は、「ｔ＝１１∧ｖ＝００」から「ｖ＝００」に更新される。これは、本実施の形態では、パターン一致命令テーブルの作成時に、図１５に示されているパターン一致時の例外条件作成処理が行われるためである。
【００９３】
図１５に示されているパターン一致時の例外条件作成処理では、命令テーブル分割部１０４は、ステップＳ７２において例外条件「ｔ＝１１∧ｖ＝００」が有効であると判定し、ステップＳ７４及びステップＳ７５の処理を実行する。ここで、命令テーブル分割部１０４は、例外条件を「ｔ＝１１∧ｖ＝００」から「ｖ＝００」に更新し、出力例外条件に追加する。
【００９４】
仮に、例外条件を更新しない場合、パターン一致命令テーブルをノード作成処理で再度分割する際には、例外条件として「ｔ＝１１∧ｖ＝００」が用いられる。一方、例外条件を更新しておいた場合は「ｖ＝００」が用いられる。この相違は、例外条件の確認処理の計算コストに影響する。例外条件「ｖ＝００」を確認する計算は、例外条件「ｔ＝１１∧ｖ＝００」を確認する計算よりも効率が良い場合がある。
【００９５】
このように、本実施の形態は、命令テーブルを分割する際に例外条件を更新する手段を有することによって、複数の例外条件が条件の一部を共有している命令テーブルに対してデコード効率の良いデコード用ツリーを作成することができる。
【００９６】
次に、図２５を参照して、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合の効果について説明する。
図２５（ａ）に示されている例外条件付き命令テーブル１１７ａは、命令Ａ及び命令Ｂのエントリを含む。このうち命令Ｂは、例外条件「ｓ＝１１」を含む。
この例外条件付き命令テーブル１１７ａを入力として、図１０に示されているツリー作成処理が行われると、ノード作成部１０２は、ステップＳ１３において、図１１に示されているノード作成処理を実行する。そして、命令テーブル分割部１０４は、ステップＳ３１で、図２５（ｂ）に示されているパターン一致命令テーブル１１７ｂと、図２５（ｃ）に示されているパターン一致命令テーブル１１７ｃとを生成する。
【００９７】
これらのテーブルに対して再度ツリー作成処理が行われると、結果として命令Ａと命令Ｂにそれぞれ対応するリーフが得られる。そして、例外条件付き命令テーブル１１７ａから得られるデコード用ツリーは、図２６に示されているようなデコード用ツリー１３１となる。このデコード用ツリー１３１を用いて、不正な命令列「Ｉ＝１１０００００１」をデコードする場合を説明する。
【００９８】
命令デコード処理は、最初にノード１３１ａのマスク「００００００１１」を命令Ｉに適用し、パターン「０００００００１」を得る。この結果、命令デコード処理では、命令Ｂに対応するリーフ１３１ｂが選択される。ここで、命令デコーダが命令列Ｉを命令Ｂとして判定すると誤りである。命令Ｂには例外条件としてｓ＝１１が存在し、命令列Ｉは例外条件を満たすためである。
本実施の形態では、リーフ作成時のステップＳ１１において、リーフを命令テーブルＢのエントリと関連付けている。このため、命令デコーダは、リーフ１３１ｂに到達した後、Ｂの例外条件を用いて命令列Ｉを検査することができる。これによって、命令デコーダは、不正な命令列Ｉを命令Ｂとして誤判定することを防ぐことができる。
即ち、本実施の形態は、デコード用ツリーのリーフに対して例外条件を関連付ける手段を持つことによって、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合であっても、命令デコーダが正常に命令を判定可能なデコード用ツリーを作成することができる。
【００９９】
以下では、本実施の形態で得られるデコードツリーの例とデコードツリーを用いた命令デコードの例を示す。
図２７は、本実施の形態で生成されるデコード用ツリーの一例を示す概略図である。
図２７に示されているデコード用ツリー１３２は、図２８に示されている例外条件付き命令テーブル１１８を入力として、図１０に示されているツリー生成処理を実行した結果として得られる。
符号１３２ａ及び符号１３２ｉは、ノードである。符号１３２ｃ、符号１３２ｄ及び符号１３２ｅは、条件ノードである。符号１３２ｂ、符号１３２ｆ、符号１３２ｇ、符号１３２ｈ、符号１３２ｊ及び符号１３２ｋは、リーフである。
以下では、図２７に示されているデコード用ツリー１３２を用いた命令デコーダ（図示せず）に対して、図２８に示されている例外条件付き命令テーブル１１８の命令Ｅに対応する命令ビット列Ｉ＝１００１１１１０を入力とした場合のデコードの様子を説明する。
【０１００】
命令デコーダは、命令ビット列Ｉの値によってデコード用ツリーのルートからリーフまでをたどることで、命令ビット列Ｉの命令を識別する。
はじめに命令デコーダは、ツリーのルートであるノード１３２ａを用いて、命令ビット列Ｉを検査する。ノード１３２ａのマスクは、「１１００００００」であり、これを命令ビット列に適用すると結果としてパターン「１００００００００」が得られる。ノード１３２ａでパターン「１１００００００」に対応する子は、ノード１３２ｃであるため、命令デコーダは、次にノード１３２ｃを用いて命令ビット列Ｉを検査する。
【０１０１】
ノード１３２ｃは、条件ノードであり、命令ビット列が条件ｓ＝１１を満たすか否かを確認する。命令ビット列Ｉの命令フィールドｓは「０１」であるため、命令デコーダは、条件不一致の場合のノード１３２ｅを選択する。
同様に、ノード１２３ｅでは、命令デコーダは、子ノード１３２ｉを選択する。
最後に、命令デコーダは、ノード１３２ｉのマスク「００００００１１」を命令ビット列に適用し、パターン「００００００１０」を得る。パターン「００００００１０」に対応した子は、リーフ１３２ｋである。リーフ１３２ｋには命令Ｅのテーブルエントリが関連けられているため、命令デコーダは、命令ビット列Ｉを命令Ｅとして判定する。
このように本実施の形態で生成したツリーを用いることにより、実用的な命令デコード処理を実現することができる。
【０１０２】
なお、デコード用ツリーの具体的な表現方法については特に限定しない。
デコード用ツリーの表現方法としては一般的なデータ構造として表現する以外にプログラムとして表現することもできる。さらにプログラムとして表現する場合、デコードツリーは命令デコーダそのものとすることも可能である。
図２９は、デコード用ツリーのプログラム表現を示す概略図である。
図２９に示されているデコード用ツリー１３３は、ＧＮＵ  Ｃコンパイラでコンパイル可能なＣ言語プログラムである。図２７に示されているデコード用ツリー１３２の各ノード及びリーフとの対応については、プログラム中のコメントに示されている。
なお、パターンとマスクの可読性のため数値リテラルとして０ｂをプレフィックスとする二進数表記を用いているが、これはＧＣＣの拡張記法である。図２９に示されているプログラムは、デコード用ツリーの表現形態の１つであると同時に、命令デコーダのプログラムそのものでもある。関数Ｄｅｃｏｄｅは、命令ビット列ｉを入力とし、命令識別子を戻り値として返す。
【符号の説明】
【０１０３】
１００  デコード用ツリー作成部、  １０１  ツリー作成部、  １０２  ノード作成部、  １０３  リーフ作成部、  １０４  命令テーブル分割部。
【図１】
0006529588.tif 000003
【図２】
0006529588.tif 000004
【図３】
0006529588.tif 000005
【図４】
0006529588.tif 000006
【図５】
0006529588.tif 000007
【図６】
0006529588.tif 000008
【図７】
0006529588.tif 000009
【図８】
0006529588.tif 000010
【図９】
0006529588.tif 000011
【図１０】
0006529588.tif 000012
【図１１】
0006529588.tif 000013
【図１２】
0006529588.tif 000014
【図１３】
0006529588.tif 000015
【図１４】
0006529588.tif 000016
【図１５】
0006529588.tif 000017
【図１６】
0006529588.tif 000018
【図１７】
0006529588.tif 000019
【図１８】
0006529588.tif 000020
【図１９】
0006529588.tif 000021
【図２０】
0006529588.tif 000022
【図２１】
0006529588.tif 000023
【図２２】
0006529588.tif 000024
【図２３】
0006529588.tif 000025
【図２４】
0006529588.tif 000026
【図２５】
0006529588.tif 000027
【図２６】
0006529588.tif 000028
【図２７】
0006529588.tif 000029
【図２８】
0006529588.tif 000030
【図２９】
0006529588.tif 000031