(57)【要約】【課題】  命令コードを削減可能な演算処理装置を提供する。【解決手段】  命令メモリ１２は、実行する複数の共通な演算パターンを、複数の論理レジスタを用いて表される１つの共通コードとした命令コードを格納する。レジスタマップテーブル管理部１４は、論理レジスタへ割り当てる物理レジスタを管理する複数のレジスタマップテーブル１４ａ、１４ｂ、１４ｃを記憶し、共通コードの呼び出しの際に指定されるレジスタマップテーブル１４ａ、１４ｂ、１４ｃを用いて論理レジスタへ割り当てる物理レジスタを決定する。【選択図】  図１
2007018220.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリに書き込まれた命令コードをもとに所定の演算処理を行う演算処理装置において、
実行する複数の共通な演算パターンを、複数の論理レジスタを用いて表される１つの共通コードとした命令コードを格納する命令メモリと、
前記論理レジスタへ割り当てる物理レジスタを管理する複数のレジスタ割り当てテーブルを記憶し、前記共通コードの呼び出しの際に指定される前記レジスタ割り当てテーブルを用いて前記論理レジスタへ割り当てる前記物理レジスタを決定するレジスタ割り当て管理部と、
を有することを特徴とする演算処理装置。
【請求項２】
前記レジスタ割り当てテーブルには、前記論理レジスタに割り当てる前記物理レジスタで演算が行えない場合、前記物理レジスタに記憶する値を一時的に退避させるメモリのアドレスが、前記論理レジスタに割り当てられて管理されていることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記命令コードは、高級言語で記述されたプログラムのコンパイル時に、前記プログラムから前記共通な演算パターンを抽出し、前記物理レジスタの代わりに前記論理レジスタを用いた１つの前記共通コードとなるように生成されることを特徴とする請求項１記載の演算処理装置。
【請求項４】
命令メモリに書き込まれた命令コードをもとに所定の演算処理を行う演算処理方法において、
実行する複数の共通な演算パターンを、複数の論理レジスタを用いて表される１つの共通コードとした命令コードを命令メモリに記憶し、
前記論理レジスタへ割り当てる物理レジスタを管理する複数のレジスタ割り当てテーブルを記憶し、
前記共通コードの呼び出しの際に指定される前記レジスタ割り当てテーブルを用いて前記論理レジスタへ割り当てる前記物理レジスタを決定することを特徴とする演算処理方法。
【請求項５】
前記レジスタ割り当てテーブルには、前記論理レジスタに割り当てる前記物理レジスタで演算が行えない場合、前記物理レジスタに記憶する値を一時的に退避させるメモリのアドレスが、前記論理レジスタに割り当てられて管理されていることを特徴とする請求項４記載の演算処理方法。
【請求項６】
前記命令コードは、高級言語で記述されたプログラムのコンパイル時に、前記プログラムから前記共通な演算パターンを抽出し、前記物理レジスタの代わりに前記論理レジスタを用いた１つの前記共通コードとなるように生成されることを特徴とする請求項４記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算処理装置及び演算処理方法に関し、特にモバイル機器など、省電力が課題となっている分野における組み込み用の演算処理装置及びそのような演算処理装置で実行される演算処理方法に関する。
【背景技術】
【０００２】
近年、低消費電力化が要求されるモバイル機器などに搭載される組み込み型の演算処理装置では、命令コードを格納する命令メモリのサイズが限定されており、複雑なプログラムをいかにして格納するかが重要となっている。そのため、効率のよい命令コードを生成したり、命令メモリに搭載できなかった命令コードを、２次メモリ、ハードディスク、ネットワークなどから効率よく命令メモリにロードしながら実行したりすることが求められている。
【０００３】
ところで、従来の演算処理装置で用いられる命令コードは以下のようなものであった。
図６は、従来の命令コードの例を示す図である。
ここでは、（ａ＋ｂ）×（ａ−ｂ）を演算する命令コード５０を示している。
【０００４】
従来の演算処理装置の命令メモリに格納される命令コード５０は、図のように、演算処理の際にデータを一時的に記憶する物理レジスタｒ１、ｒ２、ｒ３、ｒ４を直接指定したコードとなっている。例えば、コード５０ａは、物理レジスタｒ２に物理レジスタｒ０の値と物理レジスタｒ１の値を加算して書き込み（１行目）、物理レジスタｒ０に物理レジスタｒ０の値から物理レジスタｒ１の値を減算した結果を書き込み（２行目）、最後に物理レジスタｒ２の値と物理レジスタｒ０の値の乗算を行い、物理レジスタｒ１に書き込む（３行目）処理を実行するためのコードである。
【０００５】
従来の演算処理装置は、実行するプログラムに応じて物理レジスタを割り当て、上記のような命令コード５０を生成して、演算処理を行っていた。なお、効率のよいレジスタ割り当てについては、例えば、特許文献１、２などに開示されている。
【特許文献１】特開２００２−１７５１８１号公報
【特許文献２】特開平１０−１１３５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、従来の演算処理装置において命令メモリに格納される命令コードは、同じ演算パターンを処理する場合でも、コンパイラでのレジスタ割り当ての結果、使用する物理レジスタが異なるため、図６のように違ったコード５０ａ、５０ｂ、５０ｃが生成される。その結果、命令コードが多くなってしまうという問題がある。このことは、命令コードを格納する命令メモリの小型化の障害となっていた。
【０００７】
本発明はこのような点に鑑みてなされたものであり、命令コードを削減可能な演算処理装置を提供することを目的とする。
また、本発明の他の目的は、命令コードを削減可能な演算処理方法を提供することである。
【課題を解決するための手段】
【０００８】
本発明では上記問題を解決するために、命令メモリに書き込まれた命令コードをもとに所定の演算処理を行う演算処理装置において、図１に示すように、実行する複数の共通な演算パターンを、複数の論理レジスタを用いて表される１つの共通コードとした命令コードを格納する命令メモリ１２と、論理レジスタへ割り当てる物理レジスタを管理する複数のレジスタ割り当てテーブル（以下レジスタマップテーブルと呼ぶ。）１４ａ、１４ｂ、１４ｃを記憶し、共通コードの呼び出しの際に指定されるレジスタマップテーブル１４ａ、１４ｂ、１４ｃを用いて論理レジスタへ割り当てる物理レジスタを決定するレジスタマップテーブル管理部１４と、を有することを特徴とする演算処理装置１０ａが提供される。
【０００９】
上記の構成によれば、命令メモリ１２は、実行する複数の共通な演算パターンを、複数の論理レジスタを用いて表される１つの共通コードとした命令コードを格納する。レジスタマップテーブル管理部１４は、論理レジスタへ割り当てる物理レジスタを管理する複数のレジスタマップテーブル１４ａ、１４ｂ、１４ｃを記憶し、共通コードの呼び出しの際に指定されるレジスタマップテーブル１４ａ、１４ｂ、１４ｃを用いて論理レジスタへ割り当てる物理レジスタを決定する。
【発明の効果】
【００１０】
本発明によれば、実行する複数の共通な演算パターンを、論理レジスタを用いて表される１つの共通コードにした命令コードを用い、共通コードの呼び出し時に指定されるレジスタマップテーブルによって共通コード中の論理レジスタに割り当てる物理レジスタを決定するので、命令コードを削減できる。これによって、命令メモリの小型化も期待できる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を図面を参照して詳細に説明する。
図１は、第１の実施の形態の演算処理装置の構成を示す図である。
第１の実施の形態の演算処理装置１０ａは、ＰＣ（プログラムカウンタ）１１、命令メモリ１２、命令デコーダ１３、レジスタマップテーブル管理部１４、レジスタファイル１５、ＡＬＵ（Arithmetic and Logical Unit）１６、レジスタ制御部１７、演算制御部１８、を有する。
【００１２】
ＰＣ１１は、次に実行する命令の命令メモリ１２上でのアドレスを格納し、命令が実行されるたびに次の命令のアドレスに更新していく。
命令メモリ１２は、演算処理装置１０ａで実行される命令コードを格納する。命令コードは、アセンブリで直接記述したものを用いてもよいが、例えば、Ｃ言語などの高級言語を使用して記述されたプログラムから、コンパイラによってコンパイルして生成されたものを命令コードとして用いてもよい。また、命令コードは、２次メモリ、ハードディスクまたはネットワークなどから命令メモリ１２にロードするようにしてもよい。
【００１３】
図２は、本実施の形態の演算処理装置で用いられる命令コードの例である。
ここではアセンブリで記述された命令コードを示している。
演算処理装置１０ａで用いられる命令コード２０は、実行するプログラム中に同一のアルゴリズムで表現できるような共通な演算パターン、例えば、（ａ＋ｂ）×（ａ−ｂ）を計算するコード２１ａ、２１ｂ、２１ｃがある場合に、従来のように直接物理レジスタを指定するのではなく（図６参照）、論理レジスタａ、ｂ、ｃ、ｄ、ｅを用いて上記の演算処理を記述した共通コード２２を呼び出すようにしている。なお、共通コード２２を呼び出しの際、各コード２１ａ、２１ｂ、２１ｃでは、論理レジスタａ、ｂ、ｃ、ｄ、ｅに割り当てる物理レジスタを決定するため、後述するレジスタマップテーブル１４ａ、１４ｂ、１４ｃを指定する。なお、共通コード２２の呼び出し命令“ｊｍｐｍ”、加算命令“ａｄｄｍ”、減算命令“ｓｕｂｍ”、乗算命令“ｍｕｌｔｍ”、リターン命令“ｒｅｔｍ”の末尾の“ｍ”は、レジスタマップテーブル１４ａ、１４ｂ、１４ｃを用いた命令であることを示している。
【００１４】
図１に戻り、命令デコーダ１３は、実行される命令コードをデコードし、論理レジスタ及び指定されたレジスタマップテーブル１４ａ、１４ｂ、１４ｃをレジスタマップテーブル管理部１４に通知する。また、共通コード２２を呼び出さない通常の命令で指定されている物理レジスタのアドレスを、レジスタファイル１５に通知する。さらに、ライト命令やリード命令などをレジスタ制御部１７に、加算命令や減算命令などの演算命令を演算制御部１８に通知する。
【００１５】
レジスタマップテーブル管理部１４は、レジスタマップテーブル１４ａ、１４ｂ、１４ｃを複数記憶している。
図３は、レジスタマップテーブルの例を示す図である。
【００１６】
図のように、各レジスタマップテーブル１４ａ、１４ｂ、１４ｃは、図２で示したような共通コード２２で用いられている論理レジスタａ、ｂ、ｃ、ｄ、ｅに割り当てる物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４を管理している。レジスタマップテーブル管理部１４では、論理レジスタａ、ｂ、ｃ、ｄ、ｅと物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４の割り当てがそれぞれ異なるように、複数のレジスタマップテーブル１４ａ、１４ｂ、１４ｃを記憶している。レジスタマップテーブル１４ａ、１４ｂ、１４ｃで管理されるデータは、プログラム実行前にレジスタマップテーブル１４ａ、１４ｂ、１４ｃに書き込まれる。
【００１７】
さらにレジスタマップテーブル管理部１４は、プログラム実行時に図２で示したような共通コード２２が呼び出される際、コード２１ａ、２１ｂ、２１ｃで指定されたレジスタマップテーブル１４ａ、１４ｂ、１４ｃに切り替える。これによって、論理レジスタａ、ｂ、ｃ、ｄ、ｅに割り当てる物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４の割り当てを変更できる。そして、レジスタマップテーブル管理部１４は、論理レジスタａ、ｂ、ｃ、ｄ、ｅに対して割り当てられた物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４のアドレスをレジスタファイル１５に出力して使用する物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４を決定する。
【００１８】
レジスタファイル１５は、演算処理の際にデータを一時的に記憶する複数の物理レジスタから構成されている。前述したように、命令デコーダ１３またはレジスタマップテーブル管理部１４から出力されたアドレスの指定によって、演算処理に使用する物理レジスタが選択される。
【００１９】
ＡＬＵ１６は、物理レジスタに格納された値をもとに各種算術演算、論理演算などの演算処理を行う。
レジスタ制御部１７は、命令デコーダ１３によるデコード結果に応じて、選択された物理レジスタへのデータのリードやライトなどを制御する。
【００２０】
演算制御部１８は、命令デコーダ１３によるデコード結果に応じて、レジスタファイル１５から選択された物理レジスタのデータをリードして、ＡＬＵ１６による加算や減算などの演算処理を制御する。
【００２１】
なお、図１では、説明を簡略化するため、選択された物理レジスタに書き込むデータや、演算結果を記憶するデータメモリについては図示を省略している。
次に、本実施の形態の演算処理装置１０ａの動作を、図２の命令コード２０及び図３のレジスタマップテーブル１４ａ、１４ｂ、１４ｃを用いた場合を例にして説明する。
【００２２】
ＰＣ１１によって、命令メモリ１２の命令コード２０のうちコード２１ａが選択された際、呼び出し命令“ｊｍｐｍ  ｃｏｍ１”によって“ｃｏｍ１”という共通コード２２が呼び出される。このときレジスタマップテーブル管理部１４は、コード２１ａで指定された“ｍａｐ１”のレジスタマップテーブル１４ａを使用して、論理レジスタａ、ｂ、ｃ、ｄ、ｅに物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４を割り当てる。
【００２３】
共通コード２２の１行目では、“ａｄｄｍ  ｃ  ａ  ｂ”を実行する。これは論理レジスタａと論理レジスタｂの値を加算して、論理レジスタｃに結果を格納する演算である。ここでは、共通コード２２の呼び出し時に“ｍａｐ１”のレジスタマップテーブル１４ａが選択されているので、レジスタマップテーブル管理部１４は、図３で示したように、入力された論理レジスタａに対し物理レジスタｒ０のアドレスを出力し、入力された論理レジスタｂに対して物理レジスタｒ１のアドレスを出力し、入力された論理レジスタｃに対して物理レジスタｒ２のアドレスを出力する。
【００２４】
これにより、レジスタファイル１５から物理レジスタｒ０、ｒ１、ｒ２が選択され、レジスタ制御部１７及び演算制御部１８の制御のもと、ＡＬＵ１６により、“ａｄｄ  ｒ２  ｒ０  ｒ１”の演算が行われる。
【００２５】
次に共通コード２２の２行目では、“ｓｕｂｍ  ｄ  ａ  ｂ”を実行する。これは論理レジスタａの値から論理レジスタｂの値を減算して、論理レジスタｄに結果を格納する演算である。上記のように“ｍａｐ１”のレジスタマップテーブル１４ａが選択されているので、レジスタマップテーブル管理部１４は、入力された論理レジスタａに対し物理レジスタｒ０のアドレスを出力し、入力された論理レジスタｂに対し物理レジスタｒ１のアドレスを出力し、入力された論理レジスタｄに対して物理レジスタｒ０のアドレスを出力する。
【００２６】
これにより、レジスタファイル１５から物理レジスタｒ０、ｒ１が選択され、レジスタ制御部１７及び演算制御部１８の制御のもと、ＡＬＵ１６により、“ｓｕｂ  ｒ０  ｒ０  ｒ１”の演算が行われる。
【００２７】
共通コード２２の３行目では、“ｍｕｌｔｍ  ｅ  ｃ  ｄ”を実行する。これは論理レジスタｃの値と論理レジスタｄの値を乗算して、論理レジスタｅに結果を格納する演算である。“ｍａｐ１”のレジスタマップテーブル１４ａが選択されているので、レジスタマップテーブル管理部１４は、入力された論理レジスタｃに対して物理レジスタｒ２のアドレスを出力し、入力された論理レジスタｄに対して物理レジスタｒ０のアドレスを出力し、入力された論理レジスタｅに対して物理レジスタｒ１のアドレスを出力する。
【００２８】
これにより、レジスタファイル１５から物理レジスタｒ０、ｒ１、ｒ２が選択され、レジスタ制御部１７及び演算制御部１８の制御のもと、ＡＬＵ１６により、“ｍｕｌｔ  ｒ１  ｒ２  ｒ０”の演算が行われる。
【００２９】
共通コード２２の最後では、リターン命令“ｒｅｔｍ”を実行する。これは呼出し命令“ｊｍｐｍ”が実行されたコードの次の行に戻る命令である。コード２１ａで共通コード２２が呼び出されているので、リターン命令“ｒｅｔｍ”により、コード２１ａの次の行に戻る。
【００３０】
コード２１ｂ、２１ｃの実行時の動作もほぼ同様であるが、コード２１ｂによる共通コード２２の呼び出し時には、“ｍａｐ２”のレジスタマップテーブル１４ｂが指定され、コード２１ｃによる共通コード２２の呼び出し時には、“ｍａｐ３”のレジスタマップテーブル１４ｃが指定される。これによって、レジスタマップテーブル管理部１４は、コード２１ｂの実行時には、コード２１ａで使用されたレジスタマップテーブル１４ａから、コード２１ｂで使用するレジスタマップテーブル１４ｂに切り替える。また、コード２１ｃの実行時には、コード２１ｂで使用されたレジスタマップテーブル１４ｂから、コード２１ｃで使用するレジスタマップテーブル１４ｃに切り替える。
【００３１】
このようにすることで、論理レジスタａ、ｂ、ｃ、ｄ、ｅに割り当てる物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４を変更して、同様の演算を行うことができる。
以上のように、本実施の形態の演算処理装置１０ａでは、実行する複数の共通な演算パターンを、論理レジスタａ、ｂ、ｃ、ｄ、ｅを用いて表される１つの共通コード２２にした命令コード２０を用い、共通コード２２の呼び出し時に指定されるレジスタマップテーブル１４ａ、１４ｂ、１４ｃによって共通コード２２中の論理レジスタａ、ｂ、ｃ、ｄ、ｅに割り当てる物理レジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４を決定するので、命令コード２０を削減できる。これによって、命令メモリ１２の小型化も期待できる。
【００３２】
次に、第２の実施の形態の演算処理装置を説明する。
図４は、第２の実施の形態の演算処理装置の構成を示す図である。
第１の実施の形態の演算処理装置１０ａと同じ構成要素については同一符号とし、説明を省略する。
【００３３】
通常、演算処理装置では、限られた物理レジスタで演算が行えない場合（これを溢れレジスタという。）、物理レジスタの値を一時的にデータメモリ１９に退避させる。なお、データメモリ１９は、図１では図示を省略したが、ＡＬＵ１６の演算結果を記憶したり（演算結果は、レジスタファイル１５に記憶する場合もあり、例えば図示しないセレクタで選択される。）、レジスタファイル１５の物理レジスタにライトするデータを記憶している。
【００３４】
第２の実施の形態の演算処理装置１０ｂにおいて、レジスタマップテーブル管理部１４の、レジスタマップテーブル１４ｄ、１４ｅ、１４ｆは、前述したような論理レジスタに割り当てる物理レジスタで演算が行えない場合、物理レジスタに記憶する値を一時的に退避させるデータメモリ１９のアドレスを管理する。例えば、図２で示したような論理レジスタａに対し、物理レジスタｒ０を割り当てるのと同様に、“ａ−＞ｒ０−＞ａｄｄ１”などと割り当てればよい。
【００３５】
これにより、溢れレジスタが発生しても、物理レジスタを割り当てるのと同様に、論理レジスタに退避先のデータメモリ１９のメモリアドレスを割り当てることができ、溢れレジスタ対策のために命令コードが大きくなることを防止できる。
【００３６】
ところで、本実施の形態の演算処理装置１０ａで用いる命令コード２０は、図２のような命令セットレベルでの記述（アセンブリ記述）のプログラムで直接記述してもよいが、開発の利便性からコンパイラを用いたＣ言語などの高級言語からの利用が求められる。
【００３７】
以下にＣ言語からコンパイルして図２で示したような命令コード２０を生成する処理を説明する。
図５は、命令コードの生成処理の概略を示すフローチャートである。
【００３８】
コンパイルを開始すると、Ｃ言語のｆｏｒ文やｉｆ文などの構文を解析し、中間表現コードとする（ステップＳ１）。
次に、中間表現とされたコードに対して、アーキテクチャに依存しての最適化やアルゴリズム的な最適化を行う。ここで、同一のアルゴリズムで表現できるような共通な演算パターンを抽出する（ステップＳ２）。
【００３９】
最適化後、抽出した共通な演算パターンを、図２で示したような、論理レジスタを用いて表される１つの共通コードとした命令コードを生成する。なお、ここでは図３や、溢れレジスタ処理を行ったレジスタマップテーブル１４ａ、１４ｂ、１４ｃ、１４ｄ、１４ｅ、１４ｆのデータも生成される（ステップＳ３）。
【００４０】
第１または第２の実施の形態の演算処理装置１０ａ、１０ｂにおいて、共通コードは論理レジスタを用いた演算命令で記述するため、コンパイルの際に物理レジスタの割り当てを考慮する必要がない。従って、共通な演算パターンは、演算手順だけを考慮してプログラム中から括りだすことができる。
【００４１】
このように、プログラム中の共通な演算パターンを抽出して、論理レジスタを用いた１つの共通コードとすることで、複雑なプログラムでも命令コードの量を減らすことができ、命令メモリ１２の小型化が可能になる。
【図面の簡単な説明】
【００４２】
【図１】第１の実施の形態の演算処理装置の構成を示す図である。
【図２】本実施の形態の演算処理装置で用いられる命令コードの例である。
【図３】レジスタマップテーブルの例を示す図である。
【図４】第２の実施の形態の演算処理装置の構成を示す図である。
【図５】命令コードの生成処理の概略を示すフローチャートである。
【図６】従来の命令コードの例を示す図である。
【符号の説明】
【００４３】
１０ａ  演算処理装置
１１  ＰＣ
１２  命令メモリ
１３  命令デコーダ
１４  レジスタマップテーブル管理部
１４ａ、１４ｂ、１４ｃ  レジスタマップテーブル
１５  レジスタファイル
１６  ＡＬＵ
１７  レジスタ制御部
１８  演算制御部
【図１】
2007018220.tif 000003
【図２】
2007018220.tif 000004
【図３】
2007018220.tif 000005
【図４】
2007018220.tif 000006
【図５】
2007018220.tif 000007
【図６】
2007018220.tif 000008