JP6529588B2 - 情報処理装置、情報処理方法及びプログラム - Google Patents

情報処理装置、情報処理方法及びプログラム Download PDF

Info

Publication number
JP6529588B2
JP6529588B2 JP2017528252A JP2017528252A JP6529588B2 JP 6529588 B2 JP6529588 B2 JP 6529588B2 JP 2017528252 A JP2017528252 A JP 2017528252A JP 2017528252 A JP2017528252 A JP 2017528252A JP 6529588 B2 JP6529588 B2 JP 6529588B2
Authority
JP
Japan
Prior art keywords
instruction
instruction table
exception
condition
entries
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017528252A
Other languages
English (en)
Other versions
JPWO2017009996A1 (ja
Inventor
勝己 奥田
勝己 奥田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2017009996A1 publication Critical patent/JPWO2017009996A1/ja
Application granted granted Critical
Publication of JP6529588B2 publication Critical patent/JP6529588B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、情報処理装置、情報処理方法及びプログラムに関し、特に、命令テーブルを分割して、デコード用ツリーを作成する情報処理装置、情報処理方法及びプログラムに関する。
命令セットシミュレータ又はディスアセンブラは、構成要素の一部として命令デコーダを含む。命令デコーダは、機械語プログラムを入力とし、この機械語プログラムに含まれる命令を識別するソフトウェア部品である。
一般に、CPU(Central Processing Unit)の命令は、オペコードを含むビット列から構成される。命令のオペコードは、命令ビット列中で0又は1の固定の値を保持するビット群である。CPUの命令は一意なオペコードを持つため、命令デコーダは、命令を識別するためにオペコードを参照する。しかし、命令のオペコードは、ISA(Instruction Set Architecture)によって異なる。このため、複数のISAに対応した命令セットシミュレータ又はディスアセンブラを得るためには、ISA毎に命令デコード処理を開発する必要がある。
CPU毎の命令デコーダの開発を容易化する従来技術としては、特許文献1のように命令テーブルを用いる方法がある。命令テーブルは命令毎にエントリを持ち、各エントリは命令の識別子とオペコード情報とを持つ。命令デコーダは、命令テーブルから入力ビット列と一致するオペコードを持つエントリを検索することで、命令をデコードする。
しかし、命令テーブルの検索時間は、命令テーブルのエントリ数、すなわちISAの命令数に比例して大きくなる。このため、命令デコードの処理効率が悪いという問題があった。
この問題に対し、従来技術は、命令テーブルからデコード用ツリーを生成し、命令テーブルのかわりにデコード用ツリーを用いることで、処理時間の短縮を図っている。デコード用ツリーを用いたデコード処理では、デコーダは、命令テーブルの線形探索の代わりにデコード用ツリーを探索する。一般にツリーの平均探索時間は、テーブルの線形探索に要する平均時間より短い。
特開平8−235019号公報
しかしながら、従来の方法では、例外条件を持つ命令セットに対応できないという問題があった。従来の方法は、1つの命令ビット列に対して2つ以上の命令のオペコードが一致するときにツリーを作成できない。1つの命令ビット列に対して2つ以上の命令のオペコードが一致するのは、一般に命令セットが例外条件付きの命令を含むためである。命令xが例外条件付きの場合、命令ビット列Iが命令xのオペコードと一致していても、命令ビット列Iが命令xの例外条件を満たしていれば、命令ビット列Iは命令xではない。
このように従来のツリー作成方法は、例外条件が存在する命令セットに対して適用することができないという問題があった。
そこで、本発明は、例外条件が存在する命令セットに対してもデコード用ツリーを生成できるようにすることを目的とする。
本発明の一態様に係る情報処理装置は、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、を備え、前記命令テーブル分割部は、前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割することを特徴とする。
本発明の一態様に係る情報処理方法は、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する過程と、分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成する過程と、を有し、前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを分割する過程では、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割することを特徴とする。
本発明の一態様に係るプログラムは、コンピュータを、命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、して機能させるプログラムであって、前記命令テーブル分割部は、前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割することを特徴とする。
本発明の一態様によれば、例外条件が存在する命令セットに対してもデコード用ツリーを生成することができる。
本実施の形態に係るデコード用ツリー作成部の構成を概略的に示すブロック図である。 従来のデコード用ツリー作成処理を示すフローチャートである。 従来のノード作成処理を示すフローチャートである。 従来のパターン一致命令テーブル作成処理を示すフローチャートである。 従来の命令テーブルを示す概略図である。 従来のパターン一致命令テーブルを示す概略図である。 従来のデコード用ツリーを示す概略図である。 本実施の形態の例外条件付き命令テーブルの第1例を示す概略図である。 本実施の形態の処理回路を示す概略図である。 本実施の形態におけるデコード用ツリー作成処理を示すフローチャートである。 本実施の形態におけるノード作成処理を示すフローチャートである。 本実施の形態におけるパターン一致命令テーブル作成処理を示すフローチャートである。 本実施の形態におけるパターン一致確認処理を示すフローチャートである。 本実施の形態における例外条件確認処理を示すフローチャートである。 本実施の形態におけるパターン一致時の例外条件集合作成処理のフローチャートである。 本実施の形態における条件ノード作成処理のフローチャートである。 本実施の形態におけるパターン不一致命令テーブル作成処理である。 本実施の形態におけるパターン不一致時の例外条件作成処理を示すフローチャートである。 (a)〜(c)は、本実施の形態における例外条件付き命令テーブルを分割する第1例を示す概略図である。 (a)及び(b)は、本実施の形態例外条件付き命令テーブルを分割する第2例を示す概略図(その1)である。 (a)〜(c)は、本実施の形態例外条件付き命令テーブルを分割する第2例を示す概略図(その2)である。 (a)〜(c)は、例外条件を複数含む命令テーブルからデコード用ツリーを作成する場合における効果を説明するための概略図である。 (a)〜(c)は、1つの命令が複数の例外条件を持つ場合の効果を説明するための概略図である。 (a)〜(c)は、複数の例外条件が条件の一部を共有している場合の効果を説明するための概略図である。 (a)〜(c)は、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合の効果を説明するための概略図である。 デコード用ツリーの比較例を示す概略図である。 本実施の形態におけるデコード用ツリーを示す概略図である。 本実施の形態における例外条件付き命令テーブルの第2例を示す概略図である。 本実施の形態におけるデコード用ツリーのプログラム表現を示す概略図である。
図1は、本実施の形態に係る情報処理装置としてのデコード用ツリー作成部100の構成を概略的に示すブロック図である。
デコード用ツリー作成部100は、ツリー作成部101と、命令テーブル分割部104とを備える。デコード用ツリー作成部100は、例外条件付き命令テーブル110の入力を受けて、デコード用ツリー130を出力する。
ツリー作成部101は、ノード作成部102と、リーフ作成部103とを有する。
なお、本実施の形態に係る情報処理方法は、デコード用ツリー作成部100により実行される方法である。
例外条件付き命令テーブル110は、命令毎にエントリを持つ命令テーブル、言い換えると、命令を識別するための命令識別子及びビット列に対応する命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルである。複数のエントリの内の少なくとも1つのエントリには、一又は複数の例外条件が含まれている。例外条件付き命令テーブル110中のエントリの順序は任意である。例外条件付き命令テーブル110の各エントリは、命令識別子、オペコード情報及び例外条件集合を保持する。
本実施の形態では、オペコード情報は、オペコードマスク及びオペコードパターンの対で構成されているものとするが、これに限定されない。
例外条件集合は、エントリに対応する命令が例外条件を持たない場合は空である。また、例外条件集合は、エントリに対応する命令が例外条件を複数持つ場合、複数の要素を持つ。例えば、エントリEの例外条件は、命令ビット列の一部が特定のパターンに合致する場合に、この命令ビット列はエントリEに一致しないことを意味する。本実施の形態では例外条件は、例外マスク及び例外パターンの対で構成されているものとするが、これに限定されない。例外条件が例外マスクEMと例外パターンEPとの対である場合、ある命令ビット列Iについて、I&EM=EPが成り立つ場合、この命令ビット列Iは例外条件を満足する。ここで、「&」はビット毎の論理積を表す。
デコード用ツリー130は、決定木の一種であり、ビット列に対応する命令識別子を特定するために用いられる。命令デコーダは、デコード用ツリー130を用いて入力命令ビット列の命令を特定することができる。デコード用ツリー130は、一般的なツリーと同様にノードとリーフとを構成要素とする。
デコード用ツリー130のノードは、1つ以上の子を持ち、子はノード及びリーフのいずれかである。
ノードは、命令列のビット群を検査するための情報を持ち、ビット群が持つ値と子を関連付けて保持する。例えば、ノードは、後述するマスク及びビットパターンの組み合わせに子を関連付ける。なお、マスク及びビットパターンの組み合わせに関連付けられる子は、この組み合わせにより分割された命令テーブルにより作成されるノード又はリーフである。また、デコード用ツリー130のリーフは、子を持たない。本実施の形態での具体的なノードとリーフの保持方法については、ノード作成処理とリーフ作成処理の詳細と共に説明する。
まず、図1に示されているデコード用ツリー作成部100が、例外条件を有しない命令テーブルの入力を受けて、従来の方法でデコード用ツリーを出力する例を説明する。
以下では、従来のデコード用ツリー作成方法を、図2〜図4を用いて説明し、その具体例を図5〜図8を用いて説明する。
図2は、従来のデコード用ツリー作成処理を示すフローチャートである。
デコード用ツリー作成処理では、命令テーブルを入力とし、命令テーブルに対応したデコード用ツリーが再帰的に作成される。また、デコード用ツリー作成処理では、入力命令テーブルが1つ以上のエントリを持つことが前提とされる。
まず、ノード作成部102は、入力された命令テーブルのエントリ数が1であるか否かを判断する(S10)。エントリ数が1の場合(S10でYes)には、処理はステップS11に進み、エントリ数が1ではない場合(S10でNo)、言い換えると、複数のエントリがある場合には、処理はステップS12に進む。
ステップS11では、リーフ作成部103は、リーフを作成する。リーフは属性として命令識別子を保持する。リーフ作成部103は、リーフ作成と同時に命令テーブルの唯一のエントリから命令識別子を取得し、取得された命令識別子をリーフの属性として設定する。
ステップS12では、ノード作成部102は、命令テーブルを入力としてツリーのノードを作成する。ノードの作成処理については、図3を用いて詳細を説明する。
図3は、従来のノード作成処理を示すフローチャートである。
ノード作成処理の入力は、命令テーブルであり、その出力は、2つ以上の子を持つノードである。ノード作成処理では、入力命令テーブルが2つ以上のエントリを持つことが前提とされる。
まず、命令テーブル分割部104は、マスクを決定するために値の算出を行う(S20)。例えば、命令テーブル分割部104は、命令テーブル中の全エントリのオペコードマスクに対するビット毎の総論理積を計算することで、値を算出する。例えば、3つのオペコードマスク「0111」、「1111」、「1101」から得られる値は、総論理積「0101」である。
算出された値の中でi番目のビットが1の場合、入力命令テーブル中の全ての命令について、命令のi番目のビットはオペコードの一部であることを意味する。以降の処理では、命令テーブル分割部104は、この値で決定されるマスクから得られる値で命令テーブルを2つ以上に分割し、ツリー作成部101は、分割された命令テーブルに対してツリー作成処理(図2)を再帰的に適用することで、デコード用ツリーの全体が作成される。
次に、命令テーブル分割部104は、算出された値の全てのビットが「0」であるか否かを判断する(S21)。全てのビットが0である場合(S21でYes)には、処理はステップS22に進み、何れかのビットが1である場合(S21でNo)には、処理はステップS23に進む。
ステップS22では、ノード作成部102は、有効に機能するマスクが算出できなかったため、処理の結果として作成に失敗したことを返し、処理を終了する。
ステップS23では、ノード作成部102は、出力ノードの領域をメモリ上に割り当てる。ノードは、属性としてマスクと子ノード集合を持つ。子ノード集合の要素は、オペコード(ビットパターン)と子ノードの対である。なお、ステップS23では、ノード作成部102は、ステップS20で算出されたマスクでノードのマスク属性を初期化する。子ノード集合は、ステップS23でノードを作成した時点では空である。ノード作成部102は、以降のステップS24〜S29の処理において子ノード集合に要素を追加していくことで、子ノード集合を完成させる。
次に、命令テーブル分割部104は、マスクからパターン集合を作る(S24)。パターン集合は、ステップS20で算出されたマスクと対応する全ての値を要素とする。言い換えると、パターン集合は、マスクで識別される全てのビットパターンの集合である。パターン集合Pの任意の要素(ビットパターン)をpとし、算出されたマスクをmとするとき、パターン集合Pは、下記の(1)式で表される。
Figure 0006529588
ここで、pは、ビットパターンpのi番目のビットを表し、mは、マスクmのi番目のビットを表すものとする。
なお、マスクm中で値が1のビットがN個存在する場合、マスクmと対応するパターン集合Pに含まれる要素の数は、2のN乗個である。例えば、マスクmの値が「0101」である場合、パターン集合Pの要素は、「0000」、「0001」「0100」及び「0101」の4つである。
ステップS25〜S29は、パターン集合Pを巡回する処理である。言い換えると、パターン集合Pの要素毎に、ステップS25〜S29の処理が行われる。
ステップS26は、パターン一致命令テーブル作成処理である。パターン一致命令テーブル作成処理では、命令テーブル分割部104は、巡回中のビットパターンと一致する命令のみからなる新たな命令テーブルを作成する。パターン一致命令テーブル作成処理の詳細については、図4を用いて後述する。
ステップS27では、ノード作成部102及びリーフ作成部103は、ステップS26で作成された命令テーブルを入力とし、図2に示されているデコード用ツリー作成処理を再帰的に行う。
ステップS28では、ノード作成部102は、巡回中のビットパターンと、ステップS27で作成されたツリーの対を、ステップS23で作成されたノードの子ノード集合属性の要素として追加する。
全てのビットパターンの巡回が終了すると、ノード作成部102は、ステップS30において作成成功であることと出力ノードとを処理の結果として返す。
図4は、従来のパターン一致命令テーブル作成処理を示すフローチャートである。パターン一致命令テーブル作成処理の入力はマスク及びビットパターン対と、命令テーブルとであり、出力は新しい命令テーブルである。ここで出力される命令テーブルは、入力された命令テーブルのエントリのうち、入力されたマスク及びビットパターン対と一致するもののみをエントリとする。また、新しいエントリのオペコードマスクは、元のエントリのオペコードマスクから入力されたマスクのビットをマスクオフした値を持つ。例えば、元のエントリのオペコードマスクが「0011」で、入力されたマスクが「0001」であれば、新しいエントリのオペコードマスクは「0010」である。
まず、命令テーブル分割部104は、出力する命令テーブル(以下、出力命令テーブル)として空のテーブルをメモリ上に確保する(S40)。
次に、ステップS41〜S46は、ループ処理であり、命令テーブル分割部104は、入力された命令テーブルを巡回し、パターンに一致するエントリを出力命令テーブルに順に登録する。
ステップS42では、命令テーブル分割部104は、入力されたビットパターンpとマスクmの対に命令テーブルエントリのオペコードパターンOPとオペコードマスクOMとが一致するか否かを確認する。具体的には、下記の(2)式が満たされる場合に、命令テーブル分割部104は、一致すると判断する。
OP & OM & m = p & OM & m (2)
ここでは、「&」はビット毎の論理積を意味する。
ステップS43は、ステップS42の結果がパターンに一致か否かを条件とする分岐処理である。パターンに一致の場合(S43でYes)、処理はステップS44に進み、パターンに一致しない場合(S43でNo)、ステップS44及びS45がスキップされて、処理はステップS46に進む。
ステップS44では、命令テーブル分割部104は、巡回中の命令テーブルエントリのオペコードマスクOMから入力されたマスクmのビットをマスクオフした新しいオペコードマスクOM#を作成する。具体的には、命令テーブル分割部104は、下記の(3)式により、新しいオペコードマスクOM#を作成する。
OM & 〜M (3)
ここで、「&」はビット毎の論理積の二項演算、「〜」はビット毎の反転を意味する。
ステップS28では、命令テーブル分割部104は、出力命令テーブルのエントリに、巡回中の命令テーブルのエントリを追加する。このとき、追加するエントリのオペコードマスクにはステップS44で計算した新しいオペコードマスクOM#が使用される。
例として、図5に示されている命令テーブル5を入力とする従来のツリー生成の様子を以下に示す。図5に示されている命令テーブル5は、A、B、C、D及びEの5つの命令をエントリとして持つ。
図2のステップS10では、ノード作成部102は、命令テーブル5のエントリ数が1ではないことを判定し、ステップS12のノード作成処理(図3)を行う。
図3のステップS20では、ノード作成部102は、命令A〜Eのオペコードマスクの論理積を計算することでマスクの値「11000000」を得る。得られたマスクは、値が1のビットを含む。従って、図3のステップS21の分岐処理では、処理はステップS23に進む。
図3のステップS24では、命令テーブル分割部104は、マスクの値から4つのビットパターン、「00000000」、「01000000」、「10000000」及び「11000000」を生成する。図3のステップS25〜S29では、ステップS24で生成された4つのビットパターンを巡回する。
各ビットパターン巡回時に、図3のステップS26(図4)で作成されるパターン一致命令テーブルは、図6に示されている。
図6(a)に示されているパターン一致命令テーブル6aは、図5の命令テーブル5で、ビットパターン「00000000」、マスク「11000000」と一致する命令Aをエントリとして持つ。命令Aのエントリのオペコードマスクは、図3のステップS20で算出されたマスク「11000000」が除外されて、「00000000」となる。
図6(b)に示されているパターン一致命令テーブル6bは、図5の命令テーブル5で、ビットパターン「01000000」、マスク「11000000」と一致する命令B及び命令Cをエントリとして持つ。命令B及び命令Cのオペコードマスクも、命令Aと同様にマスク「11000000」が除外されて、「00000011」となる。
図6(c)に示されているパターン一致命令テーブル6cは、図5の命令テーブル5でビットパターン「10000000」、マスク「1100000」と一致する命令D及び命令Eをエントリとして持つ。命令D及び命令Eのオペコードマスクも、マスク「11000000」が除外されて、「00001100」となる。
なお、図5に示されている命令テーブル5では、ビットパターン「11000000」、マスク「11000000」と一致する命令は存在しない。このため、ビットパターン「1100000」を巡回した際には、命令テーブルは空となる。
図3に示されているノード作成処理では、ステップS27で図5に示されている命令テーブル6a〜6cを入力として、再帰的にデコード用ツリー作成処理が行われる。
パターン一致命令テーブル6aを入力とし、図2に示されているツリー作成処理が行われると、エントリ数が「1」であるため、処理はステップS11に進む。ステップS11では、パターン一致命令テーブル6a唯一のエントリである命令Aに対応するリーフが作成される。
なお、パターン一致命令テーブル6b及びパターン一致命令テーブル6cを入力とするツリー生成も上記と同様の繰返しである。
図5に示されている命令テーブル5を入力とする上記の処理で出力される従来のツリーを図7に示す。
図7の符号7a、符号7b及び符号7cは、ノードであり、符号8a、符号8b、符号8c、符号8d及び符号8eは、リーフである。
リーフ8aは、図6(a)に示されている命令テーブル6aから、ツリー作成処理で作られるツリーである。
また、ノード7bをルートとするサブツリーは、図6(b)に示されている命令テーブル6bから作成されるツリーであり、ノード7cをルートとするサブツリーは、図6(c)に示されている命令テーブル6cから作成されるツリーである。
しかしながら、従来の方法では、例外条件を持つ命令テーブルに対応できないという問題がある。例として、図8に示されている命令テーブル111を用いて説明する。
図8に示されている命令テーブル111では、1つの命令ビット列に対して2つ以上の命令のオペコードが一致する場合がある。例えば、命令ビット列「11000000」は、命令A及び命令Bのオペコードと一致する。しかし、命令Bの例外条件としてs=11が存在し、命令ビット列「11000000」は、例外条件s=11を満たす。このため、この命令ビット列は、命令Bではない。従って、命令ビット列は命令Aである。
以下では、図8に示されている命令テーブル111に対して、図2に示されているツリー作成処理を行う場合の問題を示す。
命令テーブル111を入力として、ツリー作成処理が行われると、図3のステップS20で算出されるマスクは、「00000000」である。このマスクは、図8の命令A、命令B及び命令Cのオペコードマスク「11000000」、「00000011」、「00000011」の論理積の結果である。このため、図3のステップS21の分岐処理で、マスクの全ビットが「0」となり、処理はステップS22に進み、有効なマスクが算出されないため、ノード作成は失敗となる。また、このまま処理が図3のステップS23に進んだとしても、パターン集合を作成できないため、処理を正しく継続することができない。
このように従来のツリー作成方法では、例外条件が存在する命令テーブルに対して適用することができないという問題があった。そこで、以下では、例外条件が存在する命令テーブルに対してもデコード用ツリーを生成することのできる本実施の形態を説明する。
図1の説明に戻り、ツリー作成部101は、命令テーブルからデコード用ツリーを作成する。
ノード作成部102は、命令テーブルが複数のエントリからなる場合には、対応するノードを作成する。
リーフ作成部103は、命令テーブルが1つのエントリからなる場合には、対応するリーフを作成する。
命令テーブル分割部104は、命令テーブルを分割する。命令テーブルの分割は、命令テーブルのエントリが1つになるまで行われ、分割された命令テーブルに基づいて、ツリー作成部101で対応するノード又はリーフが作成される。
例えば、命令テーブル分割部104は、命令テーブルに含まれている複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、これらの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、命令テーブルを、一又は複数の例外条件の何れかにオペコード情報が一致するエントリからなる第1命令テーブルと、一又は複数の例外条件の何れにも前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割する。
また、命令テーブル分割部104は、命令テーブルに含まれている複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、これらの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができた場合には、このマスクで識別することのできる複数のビットパターンから一つずつ順番にビットパターンを選択し、この選択された一つのビットパターンにオペコード情報が一致し、かつ、前記マスク及び前記選択されたビットパターンが例外条件に一致しないエントリを集めることで、命令テーブルをビットパターン毎に分割して、第3命令テーブルを生成する。
デコード用ツリー作成部100の各機能は、例えば、図9に示されているような処理回路により実現される。
処理回路は、プロセッサ140と、メモリ141とにより構成される。
プロセッサ140は、メモリ141に格納されているプログラムを実行するCPU(中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ又はDSPともいう)である。
メモリ141は、RAM、ROM、フラッシュメモリ、EPROM、EEPROM等の不揮発性又は揮発性の半導体メモリ、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク又はDVD等である。なお、メモリ141は、例外条件付き命令テーブル110及びデコード用ツリー130も記憶する。
図10は、本実施の形態におけるデコード用ツリー作成処理を示すフローチャートである。
図10に示されている処理の内、図2に示されている処理と同様の処理については、図2と同じ符号が付されている。
なお、図1に示されているように、図10に示されているデコード用ツリー作成処理の入力は、例外条件付きの命令テーブル110であり、その出力は、デコード用ツリー130である。また、デコード用ツリー作成処理は、入力される命令テーブルが1つ以上のエントリを持つことを前提条件とする。
ステップS10では、ノード作成部102は、入力された命令テーブルのエントリ数が1であるか否かを判断する。エントリ数が1である場合(S10でYes)には、処理はステップS11に進み、エントリ数が2以上である場合(S10でNo)には、処理はステップS13に進む。
ステップS11では、リーフ作成部103は、リーフを作成する。リーフは属性として命令識別子を保持する。リーフ作成部103は、このリーフには属性として命令テーブルエントリの情報を関連付ける。
ステップS13〜S15は、命令テーブルが2つ以上のエントリを持つ場合に、ノードを作成する処理である。
ステップS13では、ノード作成部102は、ノード作成処理を行う。ノード作成処理は、命令テーブルを入力とし、ノードを作成する。このノード作成処理の詳細については、後で説明する。
ステップS14は、ステップS13の結果としてノード作成に成功したか否かを判断する分岐処理である。ノードの作成に成功した場合(S14でYes)には、ステップS15の処理はスキップされ、ノードの作成に失敗した場合(S14でNo)には、処理はステップS15に進む。
ステップS15では、ノード作成部102は、命令テーブルを入力とし、条件ノード作成処理を行う。条件ノードは、本実施の形態で新たに導入したノードである。条件ノードと条件ノード作成処理の詳細については、後で説明する。
図11は、本実施の形態におけるノード作成処理を示すフローチャートである。
図11に示されているノード作成処理は、図10のステップS13での処理の詳細である。
ここで、図11に示されている処理の内、図3に示されている従来のノード作成処理と同様の処理については、図3と同じ符号が付されている。図11に示されている処理は、ステップS31の処理を除いて、図3の処理と同様である。以下、ステップS31での処理について主に説明する。
ステップS31は、本実施の形態におけるパターン一致命令テーブル作成処理である。ここでは、命令テーブルのエントリが入力パターンに一致するか否かの判定に、オペコードだけでなく例外条件も用いるという点で従来と異なる。ここでの処理の詳細については、後において詳述する。
なお、ステップS20では、図3を用いて説明したように、オペコードマスクの総論理積を計算することで、マスクを決定している。但し、マスクの決定方法は、これに限定されない。マスクは、ステップS31のパターン一致命令テーブル作成処理で作成される命令テーブルのエントリ数が、入力される命令テーブルの要素数より小さくすることができるビット列であれば、任意である。
図12は、本実施の形態におけるパターン一致命令テーブル作成処理を示すフローチャートである。
図12に示されているパターン一致命令テーブル作成処理は、図11のステップS31での処理の詳細である。
ここで、図12に示されている処理の内、図4に示されている従来のパターン一致命令テーブル作成処理と同様の処理については、図4と同じ符号が付されている。図12に示されている処理は、ステップS47〜S49の処理を除いて、図4の処理と同様である。以下、ステップS47〜S49での処理について主に説明する。
パターン一致命令テーブル作成処理の入力は、マスク及びビットパターンの対と、命令テーブルとであり、出力は、マスク及びビットパターン対と一致するエントリのみからなる新たな命令テーブルである。
本実施の形態におけるパターン一致命令テーブル作成処理の特徴は、命令テーブルがマスク及びビットパターン対と一致するか否かの判定に、ビットパターン以外に例外条件を用いる点である。
ステップS47は、パターン一致確認処理である。パターン一致確認処理では、命令テーブル分割部104は、入力された命令テーブルのエントリが入力されたマスク及びビットパターン対と一致しているか否かを例外条件も加味して判定する。パターン一致確認処理の詳細については後述する。
ステップS48は、パターン一致時の例外条件集合作成処理である。パターン一致時の例外条件集合作成処理では、命令テーブル分割部104は、出力命令テーブルのエントリ中の例外条件の集合を新たに作成する。パターン一致時の例外条件集合作成処理の入力は、パターン一致命令テーブル作成処理自体に入力されたマスク及びビットパターン対と、巡回中の命令テーブルのエントリの例外条件集合とである。また、出力は、新しい例外条件集合である。パターン一致時の例外条件集合作成処理の詳細については後で説明する。
ステップS49では、命令テーブル分割部104は、出力命令テーブルに現在巡回中の入力命令テーブルのエントリを追加する。このとき、新たらしいエントリのオペコードマスクと例外条件集合とには、それぞれステップS44で作成されたオペコードマスクとステップS48で作成された例外条件集合とが設定される。
図13は、本実施の形態におけるパターン一致確認処理を示すフローチャートである。
図13に示されているパターン一致確認処理は、図12のステップS47での処理の詳細である。
パターン一致確認処理では、マスク及びビットパターン対と、命令テーブルのエントリとを入力とし、命令テーブル分割部104は、命令テーブルのエントリがマスク及びビットパターン対と一致するか否かを判定する。
まず、命令テーブル分割部104は、命令テーブルエントリのオペコード情報が、入力されたマスク及びビットパターン対と一致しているか否かを確認する(S50)。具体的には、入力されたマスクをm、入力されたビットパターンをp、命令テーブルエントリのオペコードパターンをOP、オペコードマスクをOMとするとき、下記の(4)式を満たすとき、命令テーブル分割部104は、これらが一致していると判断する。
OP & OM & m = p & OM & m (4)
ここで、「&」は、ビット毎の論理積を意味する。
次に、命令テーブル分割部104は、ステップS50の結果がパターンに一致するか否かを確認する(S51)。その結果がパターンに不一致である場合(S51でNo)には、処理はステップS52に進み、その結果がパターンに一致である場合(S51でYes)には、処理はステップS53に進む。
ステップS52では、命令テーブル分割部104は、結果を不一致として処理を終了する。
一方、ステップS53では、命令テーブル分割部104は、例外条件確認処理を行う。例外条件確認処理では、命令テーブル分割部104は、巡回中の命令テーブルのエントリの例外条件を確認する。例外条件確認処理では、マスク及びビットパターン対と命令テーブルのエントリの例外条件集合とを入力とし、命令テーブル分割部104は、マスク及びビットパターン対が例外条件を満たすか否かを出力とする。例外条件確認処理の詳細について後で説明する。
次に、命令テーブル分割部104は、ステップS53での結果が例外条件を満たしているか否かを確認する(S54)。その結果が例外条件を満たす場合(S54でYes)には、処理はステップS55に進み、その結果が例外条件を満たしていない場合(S54でNo)には、処理はステップS56に進む。
ステップS55では、例外条件が満たされているため、命令テーブル分割部104は、結果を不一致として処理を終了する。
一方、ステップS56では、例外条件が満たされていないため、命令テーブル分割部104は、結果を一致として処理を終了する。
図14は、本実施の形態における例外条件確認処理を示すフローチャートである。
図14に示されている例外条件確認処理は、図13のステップS53での処理の詳細である。
例外条件確認処理の入力は、マスク及びビットパターン対と、例外条件集合とである。例外条件確認処理では、命令テーブル分割部104は、入力されたマスク及びビットパターン対が1つ以上の例外条件と一致するか否かを確認する。
まず、命令テーブル分割部104は、例外条件確認処理の結果を不一致として初期化する(S60)。
次に、ステップS61〜ステップS65は、例外条件を巡回し、入力されたマスク及びビットパターン対と一致している例外条件があるか否かを確認するループである。途中1つでも入力されたマスク及びビットパターン対と一致する例外条件が見つかれば、例外条件確認処理の結果は一致となる。
ステップS62では、命令テーブル分割部104は、入力されたマスク及びビットパターン対が例外条件と一致するか否かを確認する。入力されたマスクをm、入力されたビットパターンをp、巡回中の例外条件における例外パターンをEP、巡回中の例外条件における例外マスクをEMとするとき、下記の(5)式を満たす場合に、命令テーブル分割部104は、これらが例外条件と一致すると判断する。
(m & EM = EM) ∧ (p & EM = EP & EM) (5)
ここで、「&」は、ビット毎の論理積を意味する。
次に、命令テーブル分割部104は、ステップS52での確認結果が一致であるか否かを判断する。確認結果が一致である場合(S63でYes)には、処理はステップS64に進み、確認結果が不一致である場合(S63でNo)には、ステップS64をスキップして、処理はステップS65に進む。
ステップS64では、命令テーブル分割部104は、例外条件確認処理の結果として一致したことをメモリに記憶する。ステップS61〜S65の例外条件巡回処理が完了した時点で、例外条件確認処理の結果として、一致又は不一致が得られる。
図15は、本実施の形態におけるパターン一致時の例外条件集合作成処理のフローチャートである。
図15に示されているパターン一致時の例外条件集合作成処理は、図12におけるステップS48での処理の詳細である。
パターン一致時の例外条件集合作成処理における入力は、マスク及びビットパターン対と、例外条件集合とであり、出力は、入力された例外条件集合から無効な例外条件を除いた新しい例外条件集合である。
まず、命令テーブル分割部104は、出力例外条件用の領域をメモリに割り当てる(S70)。出力例外条件の初期値は空集合である。
ステップS71〜S76は、例外条件を巡回するループ処理である。このループ処理では、命令テーブル分割部104は、必要な例外条件のみを出力例外条件集合に追加する。
ステップS72では、命令テーブル分割部104は、巡回中の例外条件が入力されたマスク及びビットパターン対で有効か否かをチェックする処理である。
入力されたマスクをm、入力されたビットパターンp、巡回中の例外条件における例外マスクをEM、巡回中の例外条件における例外パターンをEPとするとき、下記の(6)式を満たす場合に、命令テーブル分割部104は、巡回中の例外条件が有効であると判断する。
p & EM & m = EP & EM & m (6)
ここで、「&」は、ビット毎の論理積を意味する。
次に、命令テーブル分割部104は、ステップS72での確認結果が有効であるか否かを確認する(S73)。確認結果が有効である場合(S73でYes)には、処理はステップS74に進み、確認結果が有効ではない場合(S73でNo)には、ステップS74及びS75をスキップして、処理はステップS76に進む。
ステップS74では、命令テーブル分割部104は、新しい例外マスクを作成して、例外マスクを更新する。具体的には、命令テーブル分割部104は、新しい例外マスクEM#を、例外マスクEM及び入力されたマスクmを用いて、下記の(7)式で算出する。
EM & 〜M (7)
ここで、「&」は、ビット毎の論理積を意味し、「〜」は、ビット毎の反転を意味する。
ステップS75では、命令テーブル分割部104は、新しい例外条件を出力例外条件集合に追加する。この新しい例外条件は、巡回中の例外条件における例外パターンとステップS74で作成した例外マスクとの対である。
ここまででノード作成処理について説明した。以降ではノードの作成に失敗した場合に作成する条件ノードの作成処理について示す。
図16は、本実施の形態における条件ノード作成処理のフローチャートである。
図16に示されている条件ノード作成処理は、図10におけるステップS15での処理の詳細である。
条件ノード作成処理の入力は、例外条件付き命令テーブルであり、出力は条件ノードである。条件ノードは、属性として例外条件及び2つの子を持つ。例外条件の属性の実体は、マスク及びビットパターン対(例外マスク及び例外パターン対)である。条件ノードの子のうちの一方は、デコード対象のビット列が例外条件を満たす場合に対応し、他方はデコード対象のビット列が例外条件を満たさない場合に対応する。
まず、ノード作成部102は、命令テーブル中の全ての例外条件の中から、任意の例外条件を1つ選択する(S80)。
次に、ノード作成部102は、ステップS80において例外条件が存在するか否かを確認する(S81)。例外条件が存在しない場合(S81でNo)には、処理はステップS82に進み、例外条件が存在する場合(S81でYes)には、処理はステップS83に進む。
ステップS81で例外条件が見つからない場合の原因は、入力された命令テーブルの誤りである。このため、ステップS82では、ノード作成部102は、入力命令テーブルに誤りがあることをユーザに知らせる。例えば、ノード作成部102は、図示されていないディスプレイ等の表示部にエラー画面を表示させる。または、ノード作成部102は、音声等によりエラーであることをユーザに知らせてもよい。
一方、ステップS83では、命令テーブル分割部104は、命令テーブルと、ステップS80で選択された例外条件の例外マスク及び例外パターン対とを入力とし、図13を用いて先に説明したパターン一致命令テーブル作成処理を実行する。ここで、選択された例外条件の例外マスク及び例外パターン対は、マスク及びビットパターン対として用いられる。
次に、ノード作成部102及びリーフ作成部103は、ステップS83で作成された命令テーブルを入力としてツリーを作成する(S84)。ステップS84におけるツリー作成処理は、図10を用いて先に説明したとおりである。
次に、命令テーブル分割部104は、命令テーブルと、ステップS80で選択された例外条件における例外マスク及び例外パターン対とを入力として、パターン不一致命令テーブル作成処理を行う。選択された例外条件における例外マスク及び例外パターン対は、マスク及びビットパターン対として用いられる。
パターン不一致命令テーブル作成処理は、入力されたマスク及びビットパターン対に一致しないエントリのみからなる命令テーブルを作成する処理である。パターン不一致命令テーブル作成処理の詳細については後で説明する。
次に、ノード作成部102及びリーフ作成部103は、ステップS85で作成された命令テーブルを入力としてツリーを作成する(S86)。ツリーの作成手順は、図10を用いて先述したとおりである。
次に、ノード作成部102は、出力条件ノードを作成する(S87)。条件ノードの条件属性は、ステップS80で選択された例外条件である。また、条件が成立した場合に対応する子には、ステップS84で作成されたツリーが設定される。同様に条件が成立しなかった場合に対応する子にはステップS86で作成されたツリーが設定される。
図17は、本実施の形態におけるパターン不一致命令テーブル作成処理である。
図17に示されているパターン不一致命令テーブル作成処理は、図16におけるステップS85での処理の詳細である。
パターン不一致命令テーブル作成処理の入力は、マスク及びビットパターン対(例外マスク及び例外パターン対)と命令テーブルとであり、出力は、入力命令テーブルのうち入力されたマスク及びビットパターン対に一致しなかった命令のみからなる命令のテーブルである。
まず、命令テーブル分割部104は、出力命令テーブルを格納する領域をメモリに確保する(S90)。出力命令テーブルは、初期状態ではエントリを持たない。
ステップS91〜ステップS96は、入力された命令テーブルを巡回するループ処理である。ここでは、命令テーブル分割部104は、入力されたマスク及びビットパターン対に一致しないエントリを選択して、出力命令テーブルに追加する。
ステップS92では、命令テーブル分割部104は、巡回中のエントリが入力された入力されたマスク及びビットパターン対と一致するか否かを確認するパターン一致確認処理である。ステップS92でのパターン一致確認処理の詳細は、図13を用いて先に説明したとおりである。
ステップS93では、命令テーブル分割部104は、ステップS92の結果に基づき、巡回中の命令がマスク及びビットパターン対に一致しているか否かを確認する。そして、これらが一致していない場合(S93でNo)には、処理はステップS94に進み、これらが一致している場合(S93でYes)には、ステップS94及びS95をスキップして、処理はステップS96に進む。
ステップS94では、命令テーブル分割部104は、パターン不一致例外条件集合を作成する。ステップS94の詳細については後で示す。
ステップS95では、命令テーブル分割部104は、巡回中の命令テーブルのエントリを出力命令テーブルエントリに加える。このとき出力命令テーブルに追加するエントリの例外条件集合には、ステップS94で作成された例外条件集合が使用される。
図18は、パターン不一致時の例外条件作成処理を示すフローチャートである。
図18に示されているパターン不一致時の例外条件作成処理は、図17のステップS94での処理の詳細である。
パターン不一致時の例外条件集合作成処理の入力は、マスク及びビットパターン対(例外マスク及び例外パターン対)と、例外条件集合とであり、出力は、入力例外条件集合のうち無効な例外条件のみからなる新しい例外条件集合である。
まず、命令テーブル分割部104は、出力例外条件の集合を格納する領域をメモリ上に確保する(S100)。出力命令条件の集合は、初期状態では空である。
ステップS101〜ステップS105は、例外条件集合を巡回するループである。命令テーブル分割部104は、例外条件の巡回毎に例外条件が入力されたマスク及びビットパターン対に対して無効であれば、出力例外条件集合に巡回中の例外条件を追加する。
ステップS102では、命令テーブル分割部104は、入力されたマスク及びビットパターン対に対して、巡回中の例外条件が有効か否かを確認する。入力されたマスクをm、入力されたビットパターンをp、巡回中の例外条件における例外マスクをEM、巡回中の例外条件における例外パターンをEPとするとき、命令テーブル分割部104は、下記の(8)式が満たされる場合に、巡回中の例外条件が有効と判断する。
EP & m & EM = p & m & EM (9)
ここで、「&」は、ビット毎の論理積を意味する。
ステップS103では、命令テーブル分割部104は、ステップS102での確認結果が有効か否かを確認する。確認結果が有効ではない場合(S103でNo)、言い換えると、確認結果が無効である場合には、処理はステップS104に進み、確認結果が有効である場合(S103でYes)には、ステップS104をスキップして、処理はステップS105に進む。
スキップS104は、命令テーブル分割部104は、ステップS100で作成した出力例外条件集合に、巡回中の例外条件を追加する。
ステップS101〜ステップS105のループ処理が完了した時点で、パターン不一致時の例外条件集合作成処理の結果が出力例外条件集合として得られる。
以下では、いくつかの例を用いて本実施の形態の効果を順に説明する。
まず、図8の命令テーブル111を入力とする場合の効果について説明する。
図8に示されている命令テーブル111に対応する例外条件付き命令テーブルは、図19(a)に示されている例外条件付き命令テーブル112aである。
図19(a)に示されている例外条件付き命令テーブル112aは、例外条件「s=11」を例外マスク「11000000」と例外パターン「11000000」との対で保持する。
図10に示されているツリー作成処理では、図19に示されている例外条件付き命令テーブル122aが入力されると、ノード作成部102は、ステップS13のノード作成処理に失敗する。このため、ノード作成部102は、ステップS15の条件ノード作成処理、言い換えると、図16に示されている条件ノード作成処理を行う。
図16に示されている条件ノード作成処理では、例えば、ステップS80で、ノード作成部102は、選択する例外条件として、図19に示されている「s=11」を選択する。そして、命令テーブル分割部104は、選択された例外条件を用いることで、図19(b)に示されているパターン一致命令テーブル112bを図16のステップS83で生成し、図19(c)に示されているパターン不一致命令テーブル112cを、図16のステップS85で作成する。
パターン一致命令テーブル112bには、命令B及び命令Cが含まれていない。これは、図12に示されているパターン一致命令テーブル作成処理において、命令テーブル分割部104は、例外条件を用いることによって命令Bと命令Cとを取り除いているためである(図12のステップS47及び図13のステップS53)。
そして、図16のステップS84で、ノード作成部102及びリーフ作成部103は、パターン一致命令テーブル112bを入力として、再度図10に示されているツリー作成処理を行うと、ステップ11のリーフ作成処理に成功する。同様に、図16のステップS85で、ノード作成部102及びリーフ作成部103は、パターン不一致命令テーブル112cを入力として、再度図10に示されているツリー作成処理を行うと、ステップS13のノード作成処理に成功する。
このように本実施の形態では、ツリー作成処理において例外条件を用いて例外条件付き命令テーブルを分割する手段をもつことによって、例外条件を持つ命令テーブルからデコード用ツリーを作成することができる。
次に、条件ノード作成処理の効果を説明するため、図8に示されている命令テーブル111から、条件ノードを用いないでツリー生成処理を行う場合について説明する。以下では、説明のため、本実施の形態の図11のステップS20におけるマスクを算出する処理を、オペコードマスクの論理積計算とは異なる処理に置き換えた場合を仮定する。
この場合、図8に示されている命令テーブル111を入力とし、図10に示されているツリー作成処理が行われると、ノード作成部102は、ステップS13を介して、図11に示されているノード作成処理を実行する。ここでは、ノード作成部102は、ステップS20において、マスクとして「11000000」を用いるものとする。
このマスクを入力として、ステップS31のパターン一致命令テーブル作成処理が行われると、命令テーブル分割部104は、入力された命令テーブル111を4つの命令テーブルに分割する。
図20及び図21は、命令テーブル分割部104が入力された命令テーブルを4つの命令テーブルに分割する様子を説明するための模式図である。
図20(a)に示されている命令テーブル113aが入力されると、命令B及び命令Cは、「00000000」、「01000000」及び「10000000」の3つのビットパターンと一致するため、命令テーブル分割部104は、図20(b)に示されているパターン一致命令テーブル113b、図21(a)に示されているパターン一致命令テーブル113c及び図21(b)に示されているパターン一致命令テーブル113dを作成する。また、ビットパターン「11000000」には命令Aのみが一致するため、命令テーブル分割部104は、図21(c)に示されているパターン一致命令テーブル113eを作成する。
ここでは、命令の例外条件を用いて命令テーブルが分割されるため、図21(c)に示されているパターン一致命令テーブル113eには、命令B及び命令Cが含まれていない。このため、パターン一致命令テーブル113b〜113eに対して再帰的に、図10に示されているツリー作成処理が行われることで、ツリー全体が完成する。
しかし、図19に示されている本実施の形態の例では、入力された命令テーブル112aは、パターン一致命令テーブル112b及びパターン不一致命令テーブル112cの2つに分割されるのに対し、図20及び図21に示された例では、パターン一致命令テーブル113b〜113eの4つに分割される。
図19のように分割された命令テーブルから生成されるデコード用ツリーのサイズは、図20及び図21のように分割された命令テーブルから生成されるデコード用ツリーのサイズよりも小さい。このように小さいサイズのツリーを生成できるのは、本実施の形態が、図10のステップS15で条件ノードを作成する処理を含むためである。このように条件ノード作成処理を含むことで、本実施の形態は、生成される命令デコードツリーのサイズを小さくすることができる。
次に、図22を参照して、例外条件を複数含む命令テーブルからデコード用ツリーを作成する場合における効果を説明する。
図22(a)に示されている例外条件付き命令テーブル114aは、3つの命令A、命令B及び命令Cのエントリを含む。このうち命令B及び命令Cは、それぞれ例外条件「u=00」及び「v=00」を含む。
この例外条件付き命令テーブル114aを入力として、図10に示されているツリー作成処理が行われると、ノード作成部102は、ステップS15にて図16に示されている条件ノード作成処理を行う。
ノード作成部102は、ステップS80において、入力された命令テーブル中に存在する複数の例外条件「u=00」及び「v=00」の中から、例えば、「U=00」を選択する。
そして、ノード作成部102は、ステップS83とステップS85とで、選択された例外条件「u=00」を満たすか否かにより、図22に示されている命令テーブル114aを、図22(b)に示されているパターン一致命令テーブル114bと、図22(c)に示されているパターン不一致命令テーブル114cとに分割する。ノード作成部102及びリーフ作成部103は、分割された命令テーブル114b、114cに対して、再帰的に図10のツリー作成処理を適用することができる。
以上のように、本実施の形態では、命令テーブルに含まれる複数の例外条件から一部の例外条件を抽出し、抽出された例外条件を用いて命令テーブルを分割することすることで、複数の例外条件を持った命令テーブルからデコード用ツリーを生成することができる。
次に、図23を参照して、1つの命令が複数の例外条件を持つ場合の効果を示す。
図23(a)に示されている条件付き命令テーブル115aは、命令A、命令B及び命令Cに対応する3つのエントリを含む。このうち命令Cのエントリは、「t=11」及び「t=00」の2つの例外条件を含む。
この条件付き命令テーブル115aを入力として、図10に示されているツリー作成処理が行われると、ノード作成部102は、ステップS15で、図16に示されている条件ノード作成処理を行う。そして、命令テーブル分割部104は、ステップS80で選択された例外条件「t=11」を用いて、図23(b)に示されているパターン一致命令テーブル115b及び図23(c)に示されているパターン不一致命令テーブル115cとを作成する。
パターン一致命令テーブル115bを作成するときには、命令テーブル分割部104は、図12に示されているパターン一致時の例外条件作成処理におけるステップS48での例外条件の有効性チェック(図15のステップS72)で、例外条件「t=11」を有効と判断し、この例外条件を出力例外条件集合から除く。その結果として、パターン不一致命令テーブル115cの命令Cのエントリからは例外条件「t=11」が取り除かれる。
パターン不一致命令テーブル115cに対して再帰的にツリー作成処理が行われると、2回目の条件ノード作成処理(図10のステップS15)において唯一の例外条件「t=00」が選択され、正しくツリーの作成手順が進行する。
仮に、図15に示されているパターン一致時の例外条件作成処理において、例外条件「t=11」を除外する手段がないと、再帰的にツリー作成処理を行った際に、再度例外条件「t=11」を選択してしまい、正しく処理を継続することができなくなる。
このように、本実施の形態は、ツリー作成処理において命令テーブルを分割する際に例外条件を除外する手段を有することによって、1つの命令が複数の例外条件を持つ命令テーブルに対してデコード用ツリーを作成することができる。
次に、図24を用いて、複数の例外条件が条件の一部を共有している場合の効果について説明する。
図24(a)に示されている例外条件付き命令テーブル116aは、命令A、命令B及び命令Cに対応する3つのエントリを含む。命令Bは、例外条件「t=11∧v=00」を含み、命令Cは、例外条件「t=11」を含む。ここで「∧」は、論理積を意味する。このとき命令B及び命令Cは、例外条件「t=11」を共有している。
この命令条件付き命令テーブル116aを入力として、図10に示されているツリー作成処理が行われると、ノード作成部102は、図16に示されている条件ノード作成処理を行う。そして、命令テーブル分割部104は、ステップS80で選択された例外条件「t=11」を用いて、図24(b)に示されているパターン一致命令テーブル116bと、図24(c)に示されているパターン不一致命令テーブル116cとを作成する。このとき、パターン一致命令テーブル116bの命令Bのエントリの例外条件は、「t=11∧v=00」から「v=00」に更新される。これは、本実施の形態では、パターン一致命令テーブルの作成時に、図15に示されているパターン一致時の例外条件作成処理が行われるためである。
図15に示されているパターン一致時の例外条件作成処理では、命令テーブル分割部104は、ステップS72において例外条件「t=11∧v=00」が有効であると判定し、ステップS74及びステップS75の処理を実行する。ここで、命令テーブル分割部104は、例外条件を「t=11∧v=00」から「v=00」に更新し、出力例外条件に追加する。
仮に、例外条件を更新しない場合、パターン一致命令テーブルをノード作成処理で再度分割する際には、例外条件として「t=11∧v=00」が用いられる。一方、例外条件を更新しておいた場合は「v=00」が用いられる。この相違は、例外条件の確認処理の計算コストに影響する。例外条件「v=00」を確認する計算は、例外条件「t=11∧v=00」を確認する計算よりも効率が良い場合がある。
このように、本実施の形態は、命令テーブルを分割する際に例外条件を更新する手段を有することによって、複数の例外条件が条件の一部を共有している命令テーブルに対してデコード効率の良いデコード用ツリーを作成することができる。
次に、図25を参照して、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合の効果について説明する。
図25(a)に示されている例外条件付き命令テーブル117aは、命令A及び命令Bのエントリを含む。このうち命令Bは、例外条件「s=11」を含む。
この例外条件付き命令テーブル117aを入力として、図10に示されているツリー作成処理が行われると、ノード作成部102は、ステップS13において、図11に示されているノード作成処理を実行する。そして、命令テーブル分割部104は、ステップS31で、図25(b)に示されているパターン一致命令テーブル117bと、図25(c)に示されているパターン一致命令テーブル117cとを生成する。
これらのテーブルに対して再度ツリー作成処理が行われると、結果として命令Aと命令Bにそれぞれ対応するリーフが得られる。そして、例外条件付き命令テーブル117aから得られるデコード用ツリーは、図26に示されているようなデコード用ツリー131となる。このデコード用ツリー131を用いて、不正な命令列「I=11000001」をデコードする場合を説明する。
命令デコード処理は、最初にノード131aのマスク「00000011」を命令Iに適用し、パターン「00000001」を得る。この結果、命令デコード処理では、命令Bに対応するリーフ131bが選択される。ここで、命令デコーダが命令列Iを命令Bとして判定すると誤りである。命令Bには例外条件としてs=11が存在し、命令列Iは例外条件を満たすためである。
本実施の形態では、リーフ作成時のステップS11において、リーフを命令テーブルBのエントリと関連付けている。このため、命令デコーダは、リーフ131bに到達した後、Bの例外条件を用いて命令列Iを検査することができる。これによって、命令デコーダは、不正な命令列Iを命令Bとして誤判定することを防ぐことができる。
即ち、本実施の形態は、デコード用ツリーのリーフに対して例外条件を関連付ける手段を持つことによって、命令テーブル分割には不要な例外条件を含む命令テーブルを入力とする場合であっても、命令デコーダが正常に命令を判定可能なデコード用ツリーを作成することができる。
以下では、本実施の形態で得られるデコードツリーの例とデコードツリーを用いた命令デコードの例を示す。
図27は、本実施の形態で生成されるデコード用ツリーの一例を示す概略図である。
図27に示されているデコード用ツリー132は、図28に示されている例外条件付き命令テーブル118を入力として、図10に示されているツリー生成処理を実行した結果として得られる。
符号132a及び符号132iは、ノードである。符号132c、符号132d及び符号132eは、条件ノードである。符号132b、符号132f、符号132g、符号132h、符号132j及び符号132kは、リーフである。
以下では、図27に示されているデコード用ツリー132を用いた命令デコーダ(図示せず)に対して、図28に示されている例外条件付き命令テーブル118の命令Eに対応する命令ビット列I=10011110を入力とした場合のデコードの様子を説明する。
命令デコーダは、命令ビット列Iの値によってデコード用ツリーのルートからリーフまでをたどることで、命令ビット列Iの命令を識別する。
はじめに命令デコーダは、ツリーのルートであるノード132aを用いて、命令ビット列Iを検査する。ノード132aのマスクは、「11000000」であり、これを命令ビット列に適用すると結果としてパターン「100000000」が得られる。ノード132aでパターン「11000000」に対応する子は、ノード132cであるため、命令デコーダは、次にノード132cを用いて命令ビット列Iを検査する。
ノード132cは、条件ノードであり、命令ビット列が条件s=11を満たすか否かを確認する。命令ビット列Iの命令フィールドsは「01」であるため、命令デコーダは、条件不一致の場合のノード132eを選択する。
同様に、ノード123eでは、命令デコーダは、子ノード132iを選択する。
最後に、命令デコーダは、ノード132iのマスク「00000011」を命令ビット列に適用し、パターン「00000010」を得る。パターン「00000010」に対応した子は、リーフ132kである。リーフ132kには命令Eのテーブルエントリが関連けられているため、命令デコーダは、命令ビット列Iを命令Eとして判定する。
このように本実施の形態で生成したツリーを用いることにより、実用的な命令デコード処理を実現することができる。
なお、デコード用ツリーの具体的な表現方法については特に限定しない。
デコード用ツリーの表現方法としては一般的なデータ構造として表現する以外にプログラムとして表現することもできる。さらにプログラムとして表現する場合、デコードツリーは命令デコーダそのものとすることも可能である。
図29は、デコード用ツリーのプログラム表現を示す概略図である。
図29に示されているデコード用ツリー133は、GNU Cコンパイラでコンパイル可能なC言語プログラムである。図27に示されているデコード用ツリー132の各ノード及びリーフとの対応については、プログラム中のコメントに示されている。
なお、パターンとマスクの可読性のため数値リテラルとして0bをプレフィックスとする二進数表記を用いているが、これはGCCの拡張記法である。図29に示されているプログラムは、デコード用ツリーの表現形態の1つであると同時に、命令デコーダのプログラムそのものでもある。関数Decodeは、命令ビット列iを入力とし、命令識別子を戻り値として返す。
100 デコード用ツリー作成部、 101 ツリー作成部、 102 ノード作成部、 103 リーフ作成部、 104 命令テーブル分割部。

Claims (11)

  1. 命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、
    前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、を備え、
    前記命令テーブル分割部は、前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割すること
    を特徴とする情報処理装置。
  2. 前記命令テーブル分割部は、前記一又は複数の例外条件から順番に一つずつ例外条件を選択し、当該選択された一つの例外条件に前記オペコード情報が一致するエントリを集めることで、前記例外条件毎に前記第1命令テーブルを生成すること
    を特徴とする請求項1に記載の情報処理装置。
  3. 前記命令テーブル分割部は、前記命令テーブルから前記第1命令テーブルを分割する際に、前記例外条件が有効か否かを判断し、有効と判断されなかった例外条件を前記第1命令テーブルから除外すること
    を特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記命令テーブル分割部は、前記複数のエントリの内の少なくとも1つのエントリに前記一又は複数の例外条件が含まれており、かつ、前記マスクを算出することができた場合には、前記マスクで識別することのできる複数のビットパターンから順番に一つずつビットパターンを選択し、当該選択された一つのビットパターンに前記オペコード情報が一致し、かつ、前記マスク及び前記選択されたビットパターンが例外条件に一致しないエントリを集めることで、前記命令テーブルを前記ビットパターン毎に分割して、第3命令テーブルを生成すること
    を特徴とする請求項1からの何れか一項に記載の情報処理装置。
  5. 前記命令テーブル分割部は、前記命令テーブルから前記第3命令テーブルを分割する際に、前記例外条件が有効か否かを判断し、有効と判断されなかった例外条件を前記第3命令テーブルから除外すること
    を特徴とする請求項に記載の情報処理装置。
  6. 前記ツリー作成部は、前記命令テーブル分割部で分割された命令テーブルが複数のエントリからなる場合に、対応するノードを作成し、前記命令テーブル分割部で分割された命令テーブルが一つのエントリからなる場合に、対応するリーフを作成することで、前記デコード用ツリーを作成すること
    を特徴とする請求項1からの何れか一項に記載の情報処理装置。
  7. 前記ツリー作成部は、前記ノード又は前記リーフに前記例外条件を関連付けること
    を特徴とする請求項に記載の情報処理装置。
  8. 前記ツリー作成部は、前記例外条件に合致するか否かで子を選択することができる条件ノードを生成すること
    を特徴とする請求項6又は7に記載の情報処理装置。
  9. 前記ツリー作成部は、前記命令テーブルの複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合であって、かつ、前記複数のエントリ何れにも前記例外条件が含まれていない場合には、入力エラーを報告すること
    を特徴とする請求項1からの何れか一項に記載の情報処理装置。
  10. 命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する過程と、
    分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成する過程と、を有し、
    前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを分割する過程では、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割すること
    を特徴とする情報処理方法。
  11. コンピュータを、
    命令識別子及びビット列に対応する当該命令識別子を特定するためのオペコード情報を有する複数のエントリからなる命令テーブルを分割する命令テーブル分割部と、
    前記命令テーブル分割部で分割された命令テーブルから、前記ビット列に対応する前記命令識別子を特定するためのデコード用ツリーを作成するツリー作成部と、して機能させるプログラムであって、
    前記命令テーブル分割部は、前記複数のエントリの内の少なくとも1つのエントリに一又は複数の例外条件が含まれており、かつ、前記複数のエントリに含まれている全てのオペコード情報に共通するマスクを算出することができない場合に、前記命令テーブルを、前記一又は複数の例外条件のうちから選択された一つの例外条件に前記オペコード情報が一致するエントリからなる第1命令テーブルと、前記選択された一つの例外条件に前記オペコード情報が一致しないエントリからなる第2命令テーブルと、に分割すること
    を特徴とするプログラム。
JP2017528252A 2015-07-16 2015-07-16 情報処理装置、情報処理方法及びプログラム Active JP6529588B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/070395 WO2017009996A1 (ja) 2015-07-16 2015-07-16 情報処理装置、情報処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JPWO2017009996A1 JPWO2017009996A1 (ja) 2017-10-19
JP6529588B2 true JP6529588B2 (ja) 2019-06-12

Family

ID=57757303

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017528252A Active JP6529588B2 (ja) 2015-07-16 2015-07-16 情報処理装置、情報処理方法及びプログラム

Country Status (2)

Country Link
JP (1) JP6529588B2 (ja)
WO (1) WO2017009996A1 (ja)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3167305B2 (ja) * 1989-12-28 2001-05-21 株式会社リコー 可変長符号の復号化テーブルの自動作成方法
JP3156537B2 (ja) * 1995-02-22 2001-04-16 松下電器産業株式会社 命令テーブル生成方法
WO2001090961A2 (en) * 2000-05-24 2001-11-29 Koninklijke Philips Electronics Nv Enhancements to object-oriented electronic circuit design modeling and simulation environment
KR100484137B1 (ko) * 2002-02-28 2005-04-18 삼성전자주식회사 개선된 허프만 디코딩 방법 및 장치
US7219337B2 (en) * 2003-03-06 2007-05-15 Northrop Grumman Corporation Direct instructions rendering emulation computer technique
JP2005063165A (ja) * 2003-08-13 2005-03-10 Fujitsu Ltd 仮想計算機の高速エミュレータ
KR20050112890A (ko) * 2004-05-28 2005-12-01 삼성전자주식회사 아키텍쳐 시뮬레이터에서의 명령 디코딩 방법
JP3938580B2 (ja) * 2004-12-21 2007-06-27 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法、半導体装置、コンピュータプログラム

Also Published As

Publication number Publication date
WO2017009996A1 (ja) 2017-01-19
JPWO2017009996A1 (ja) 2017-10-19

Similar Documents

Publication Publication Date Title
Korman et al. Distributed verification of minimum spanning trees
US8788990B2 (en) Reuse of circuit labels in subcircuit recognition
US10365902B2 (en) Method for compiling a source code
WO2009116646A1 (ja) マルチバイト処理向け文字列照合用有限オートマトン生成システム
JP5005510B2 (ja) ソフトウェアの設計支援方法、設計支援装置及び設計支援プログラム
CN107545071B (zh) 一种字符串匹配的方法和装置
US9229691B2 (en) Method and apparatus for programming assistance
US8539466B2 (en) Determining suitable insertion points for string sanitizers in a computer code
US7861193B2 (en) Reuse of circuit labels for verification of circuit recognition
KR20190089615A (ko) 버그 정정 시스템 및 버그 정정 방법
JP6529588B2 (ja) 情報処理装置、情報処理方法及びプログラム
Schulte Neutral networks of real-world programs and their application to automated software evolution
US7958468B2 (en) Unidirectional relabeling for subcircuit recognition
US10545741B2 (en) Information processing apparatus, method of compiling, and storage medium
US20130254201A1 (en) Data structure, data structure generation method, information processing apparatus, information processing system, and computer-readable storage medium having stored therein information processing program
US8965826B2 (en) Dynamic backjumping in constraint satisfaction problem solving
JP5275087B2 (ja) プログラム生成装置およびブロック線図生成装置
Renders et al. Automated Design of Efficient Search Schemes for Lossless Approximate Pattern Matching
US20110023008A1 (en) Method for optimizing an architectural model of a microprocessor
JP2010134598A (ja) 論理検証装置
JP6748357B2 (ja) 解析装置、解析プログラムおよび解析方法
CN110378457A (zh) 一种码标的生成方法及装置
JP6077694B1 (ja) デシジョンテーブル生成装置、デシジョンテーブル生成方法およびデシジョンテーブル生成プログラム
Halm Verification Of Practical Go Programs
US9582619B1 (en) Simulation of a circuit design block using pattern matching

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181107

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190416

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190514

R150 Certificate of patent or registration of utility model

Ref document number: 6529588

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250