説明

コンバータ及びプログラム変換方法

【課題】拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用できるようにするためのコンバータを提供する。
【解決手段】コンバータ21は、拡張仕様のプログラムを含むアプリケーションプログラムAPを標準仕様のアプリケーションプログラムAPCに変換する。コンバータ21は、アプリケーションAPを入力し、拡張仕様の予約語の情報が登録された予約語テーブルRWTと、変数名と関数名のデータの型の情報を含む変数名・関数名テーブルPFTとを参照して、アプリケーションAPに含まれる文字列を解析して文字列が拡張仕様の文字列か否かを判定し、拡張仕様の文字列についてのデータの型の情報に基づいて、アプリケーションAPに含まれる文字列を、標準仕様の型名に変換し、かつ拡張仕様により定義された関数又は変数を含む式を標準仕様により記述された式に変換する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンバータ及びプログラム変換方法に関し、特に、所定の仕様に従わない仕様のプログラムを所定の仕様のプログラムに変換するコンバータ及びプログラム変換方法に関する。
【背景技術】
【0002】
従来より、ターゲットプロセッサ上で実行されるアプリケーションプログラムの開発において、ターゲットプロセッサ用に生成された実行ファイルを、ホストプロセッサの実行環境上のシミュレータによって、命令レベルあるいはサイクルレベルでシミュレーションする技術があり、広く利用されている。このようなターゲットプロセッサとは異なるプロセッサを使用したホスト環境でのアプリケーションプログラムの開発環境は、クロス開発環境と言われている。
【0003】
その技術では、そのシミュレータの各種ソフトウェアルーチンによって、ターゲットプロセッサの命令のデコードが行われながら、実行ファイルが実行されるため、その動作速度が遅く、シミュレーションに時間が掛かるという問題がある。そこで、そのシミュレーションの時間の問題を解決するために、高級言語で記述されたプログラムをアセンブラコードに変換してから、ターゲットプロセッサ用のアセンブラコードをその機能を実現するホスト用のプログラムに変換する技術が提案されている(例えば、特許文献1参照)。
【0004】
ところで、ターゲットプロセッサに含まれる機能の一部を、特定のコアブロックに実行させることにより、そのターゲットプロセッサの性能の向上を図るようにする構成がとられる場合がしばしばある。例えば、ターゲットプロセッサ内にその一部の機能のための特別なコプロセッサを設け、そのコプロセッサにその機能の処理を実行させる場合がある。その場合、ターゲットプロセッサ用の専用コンパイラがその機能の処理に対応して適切にコンパイルをできるようにするために、アプリケーションプログラムもコンパイラも、JIS規格あるいはISO規格等の標準の言語仕様に従わない拡張した拡張仕様を有する場合がある。
【0005】
そのような拡張仕様が必要になるのは、例えば、上記の特別な処理に対応しかつターゲットプロセッサが実行可能な命令の機能が、高級言語の標準の演算子では記述できない、あるいは一つの式としては記述できないことがあるからである。よって、そのような高級言語では記述できない機能を持った命令を表現するために拡張仕様によって高級言語のソースプログラム中において記述されるので、ターゲットプロセッサ用の専用コンパイラは、拡張された独自の演算子、式の記述方法等に対応できるようにする必要がある。
【0006】
また、ターゲットプロセッサが対象とする高級言語では表現できないデータの型、例えば、SIMD型等、を扱うことができる場合、あるいは、対応するデータの型は標準仕様で記述できるがターゲットプロセッサの有するSIMDの演算が標準の式の記述では記述できない場合もある。そのような場合、ターゲットプロセッサ用の専用コンパイラは、同様に、拡張された独自のデータ構造、演算子等にも対応する必要がある。
【0007】
しかし、いくらこのような対応を施しても、ターゲットプロセッサ独自の拡張仕様を用いてターゲットプロセッサ用のアプリケーションプログラムが記述された場合は、ホストプロセッサ環境用の種々の開発ツールが使用できないという問題があった。開発ツールとしては、標準の仕様で記述されたプログラム用の開発ツールとして市販されているもので、例えば、変数の未初期化や配列の範囲外アクセスなどを検出する動的エラー検出ツール、コード品質を評価するツール、ソースプログラムから設計ドキュメントを自動生成するツールなどがある。
【0008】
すなわち、ホストプロセッサ環境用の開発ツールは、上述したターゲットプロセッサ独自の拡張仕様を含むアプリケーションプログラムには対応していなため、利用することができない。
【0009】
上述したシミュレーションの時間の問題を解決する提案に掛かる技術を用いた場合であっても、ホストプロセッサ環境用の種々の開発ツールが利用できないという問題は依然として残る。
【特許文献1】特開2004-13190号公報
【発明の開示】
【発明が解決しようとする課題】
【0010】
そこで、本発明は、拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用できるようにするためのコンバータ及びプログラム変換方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明の一態様によれば、所定の仕様に従わない拡張された仕様の第1のプログラムを含む第2のプログラムを前記所定の仕様の第3のプログラムに変換するコンバータであって、前記第2のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第2のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定する拡張仕様判定部と、前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第2のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第1の式を前記所定の仕様により記述された第2の式に変換する拡張仕様変換部と、を有するコンバータを提供することができる。
【0012】
本発明の一態様によれば、所定の仕様に従わない拡張された仕様の第1のプログラムを含む第2のプログラムを前記所定の仕様の第3のプログラムに変換するプログラム変換方法であって、前記第2のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第2のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定し、前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第2のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第1の式を前記所定の仕様により記述された第2の式に変換することを特徴とするプログラム変換方法を提供することができる。
【発明の効果】
【0013】
本発明のコンバータ及びプログラム変換方法によれば、拡張仕様を含むアプリケーションプログラムにおいてホストプロセッサ環境用の開発ツールを利用することができる。
【発明を実施するための最良の形態】
【0014】
以下、図面を参照して本発明の実施の形態に係わるコンバータを説明する。
(構成)
図1は、本実施の形態に係わるコンバータを有するプログラム開発装置の構成を示す構成図である。
【0015】
図1に示すように、プログラム開発装置1は、パーソナルコンピュータ(以下、PCという)等のコンピュータ本体11と、記憶装置12と、表示装置13とを有して構成されている。記憶装置12と表示装置13は、コンピュータ本体11に接続されている。記憶装置12には、後述するコンバータ21を含む各種プログラムと、各種データとが記憶されている。ここでは、コンバータ21と、ホストプロセッサ環境で実行可能なコンパイラ22と、変換前のアプリケーションプログラムAP、変換後のアプリケーションプログラムAPC、予約語テーブルRWT、変数名・関数名テーブルPFT、シンボルテーブルST、演算子対応テーブルOCT、ライブラリプログラム(以下、単にライブラリともいう)LPが、記憶装置12に、予めあるいは処理実行時に、記憶される。ライブラリLPは、ターゲットプロセッサ用の各命令をホストプロセッサ環境上で擬似的に実現するためのプログラム群を含む。
【0016】
本体11、記憶装置12及び表示装置13を含むプログラム開発装置1は、アプリケーションプログラム(以下、単にアプリケーションともいう)APを開発する開発環境を提供するホストプロセッサ(以下、単にホストともいう)環境としてのコンピュータシステムである。このホスト環境において、ターゲットプロセッサ用のアプリケーションAPの開発が行われる。
【0017】
コンピュータ本体11は、中央処理装置(CPU)を含み、Linux、Windows(登録商標)等のオペレーティングシステム(OS)上で、各種プログラムを実行可能である。ユーザすなわちアプリケーションAPの開発者は、そのOS上で、例えば、JIS規格等の標準仕様であるC言語で、アプリケーションAPを記述する。
【0018】
通常、C言語は、標準仕様のC言語でプログラムを記述すれば、そのプログラムは、標準仕様の命令として、すなわちいわゆるネイティブな命令として、ホスト環境上の標準仕様のC言語用のコンパイラによりコンパイルでき、コンピュータ本体11の上述したOS上で実行可能である。
【0019】
なお、標準仕様とは、JIS規格、あるいはISO/IEC規格等の国内あるいは外国でいわゆる標準として規定された仕様を意味する。プログラム言語であるC言語については、JIS規格ではJIS X3010:2003の項に、ISO/IEC規格であれば、ISO/IEC 9899:1999の項に規定されている。
【0020】
本実施の形態では、アプリケーションAPは、SoC(System On Chip)のターゲットプロセッサ上で動作するソフトウェアプログラムであり、所定の仕様としての標準仕様のC言語で記述される。しかし、本実施の形態のアプリケーションAPは、標準仕様の記述のプログラムだけでなく、標準仕様に則らないすなわち標準仕様に従わない、記述のプログラム、すなわち拡張された仕様(以下、拡張仕様ともいう)を有するプログラム、も含む。
【0021】
ここでは、ターゲットプロセッサは、SoCチップで構成され、一つの回路ブロックとしてのコプロセッサを含み、そのコプロセッサが特定の処理を実行するように構成されている。そして、アプリケーションAPは、そのコプロセッサに対してその特定の処理を実行させるための命令として、標準仕様に従わない記述方法の命令等を含むプログラムを含んで記述される。すなわち、そのターゲットプロセッサ向けのアプリケーションAPは、標準仕様のプログラム記述だけでなく、標準仕様に従わない拡張された仕様のプログラム記述を含む。
【0022】
図2は、コンバータ21の利用形態の例を説明するための図である。
図2に示すように、標準仕様のC言語のみで記述されたC言語プログラム31は、標準仕様のコンパイラ22によりコンパイル可能であり、ホスト環境上で実行可能な実行ファイル32にコンパイルされる。
【0023】
しかし、拡張仕様を含むアプリケーションAPは、図2において点線で示すように、標準仕様のコンパイラ22によりコンパイルしてもエラーが発生してしまう。そのため、拡張仕様を含むアプリケーションAPは、通常は、専用コンパイラ33によりコンパイルされる。専用コンパイラ33は、ターゲットプロセッサ用の実行ファイル34を生成する。その実行ファイルは、ホスト環境上のシミュレータにより、あるいは評価ボード等の実機により動作可能である。しかし、上述したように、特に、シミュレータによる場合、シミュレーションの時間が多く掛かってしまうという問題がある。
【0024】
そこで、本実施の形態では、拡張仕様のアプリケーションAPは、高級言語プログラム変換ツールとしてのコンバータ21により所定のプログラム変換処理されて、アプリケーションAPCに変換される。アプリケーションAPCは、コンパイラ22により、ホスト環境上で高速に実行可能な実行ファイル32にコンパイル可能である。さらに、アプリケーションAPCに対して、市販の開発ツールが利用可能となるため、アプリケーションAPを開発する時間を短縮することができる。
【0025】
すなわち、コンバータ21は、拡張された仕様を含むアプリケーションAPを、標準仕様に対応したコンパイラ22でコンパイルできるアプリケーションAPCに変換する高級言語プログラム変換ツールである。コンバータ21の構成については、後述する。
【0026】
よって、図1に示すように、記憶装置12には、ユーザの作成したアプリケーションAPと、後述するコンバータ21と、標準仕様の言語に対応したコンパイラ22とが記憶されている。そして、コンバータ21は、アプリケーションAPを入力して所定の変換処理を行ってアプリケーションAPCを生成する。その生成されたアプリケーションAPCは、記憶装置12に記憶される。その変換されて生成されたアプリケーションAPCは、コンパイラ22によってエラーが発生することなくコンパイルすることができる。
【0027】
次に、コンバータ21の処理について、アプリケーションAPの具体例を挙げて説明する。図3は、拡張仕様のプログラムの例を説明するための図である。図3は、アプリケーションAPの一部AP1を示し、SIMD演算が可能なターゲットプロセッサについての拡張仕様のC言語のプログラムの例を示す。図3に示す高級言語のプログラムを含むアプリケーションAPのプログラムファイルがコンバータ21に入力される。
【0028】
図3のプログラムファイルの内容を説明する。
図3の「#pragma」 は、標準仕様で規定されている拡張のための指令であるが、標準仕様ではコンパイラの実装依存の部分なので、ターゲットプロセッサ用コンパイラでしか意味がない記述である。
1行目の「#pragma custom cop_type」は、一つのブロックであるコプロセッサの設定を行う指令であり、「vliw64」が 64bit命令長のVLIWモードが存在することを示す。「reg64 32」は、コプロセッサレジスタのデータ幅が64bit長で、レジスタが32本あることを示している。
【0029】
2行目の「#pragma custom cop_simd bhw」は、SIMDがコプロセッサの命令により実装され、かつ、その演算で使用できるSIMD型を示している。「b」 は byteの意味で、8bit長のSIMD(レジスタ長が64bitなので、演算は、8bit8並列である)、「h」は halfwordの意味で 16bit長のSIMD(レジスタ長が64bitなので、演算は、16bit4並列である)、「w」はwordの意味で32bit長のSIMD(レジスタ長が64bitなので 演算は、32bit2並列である)を示す。
【0030】
3行目の「_ _cop_ _pack char cpadd3_b 」の行の記述は、コプロセッサ用の組込み関数(intrinsics関数)の定義である。拡張された予約語_ _cop 修飾子を使用することにより、通常の関数でなく、コプロセッサ命令についての組込み関数の定義であることが示されている。
【0031】
また、仮引数名としての「_ _cop_src」と 返却値の型として「_ _pack char」を記述することにより、コプロセッサ命令のオペランドの種類がコンパイラ22に設定されるようにしている。「_ _pack char」は、拡張された予約語 _ _pack 修飾子により標準仕様のcharを修飾することで、SIMD型を意味する。「_ _pack char」は、8bit8並列のSIMD型を意味している。なお、ここでは、「#pragma」を使用したターゲットプロセッサの設定および組込み関数の記述方法は、特開2002-24029号(特願2000-210412号)公報に記載の例の方法に従っている。
【0032】
「#pragma custom cadd3」の行の記述は、ターゲットプロセッサのコプロセッサ命令の 加算命令cadd3に関する設定の命令であり、「simd_b」により 8bit SIMDが使用可能で、「core」により コアモードで使用可能であることを示している。
【0033】
「#pragma custom cmov」の行の記述は、ターゲットプロセッサのコプロセッサ命令の代入命令cmovに関する設定の命令であり、「crcr」がコプロセッサ同士の代入が可能であり、「core」がコアモードで使用可能であることを示す。
【0034】
「void test()」の行の記述は、C言語の標準仕様の記述である。
「_ _pack char a,b,c;」は、拡張仕様の記述である。これは、拡張仕様の _ _pack char の型を使って変数 a,b,cの定義を意味している。
【0035】
「c = a + b;」も、式の記述表現は標準仕様であるが、式に使用されている変数が 拡張仕様のSIMD型である。よって、この式は、その意味が SIMD型の加算演算となるため、拡張仕様による記述である。後述するように、コンバータ21は、cpadd3_bが組込み関数として定義されていることから、_ _pack charの型での + 演算が使用可能であると判断することができる。
【0036】
上述した拡張仕様のアプリケーションAPがコンバータ21に入力されると、コンバータ21は、変換されたアプリケーションAPCを出力する。図4は、その出力されたアプリケーションAPCの例を説明するための図である。図4は、アプリケーションAPCの一部APC1を示す。
【0037】
図4において、SIMD型「_ _pack char」は、標準仕様の構造体と配列を使用して定義された「_ _pack_char」に変換される。
「_ _pack char」と「_ _pack_char」は、見かけ上では、「_ _pack」と「char」の間が、空白か、アンダースコア(_)の違いしかないが、意味的には、「_ _pack char」は、拡張仕様の _ _pack修飾子で char を修飾した型であるのに対して、「_ _pack_char」は 標準仕様の配列と構造体を使用して定義した型名である。
【0038】
図4の4行目に示すように、「cpadd3_b」の拡張仕様を使用した関数宣言は、「_ _pack_char」を使用した関数 「_ _cpadd3_b」の関数宣言に変換される。
【0039】
6行目に示すように、SIMD型を使用した変数の定義は、「_ _pack_char」を使用した定義に変換される。
【0040】
SIMD型を使用した式「c = a + b;」は、「_ _pack_char」を引数および返却値の型とする関数「_ _padd_b」を使用した式に変換される。
【0041】
すなわち、図3の式「c=a+b;」の内容は、図4の式「c=cpadd3_b(a,b)」により、図5のライブラリプログラムLP1を呼び出すように変換される。図5は、ライブラリプログラムの例を示す図である。図5のライブラリプログラムLP1は、図3の式「c=a+b;」の内容を、8ビットデータを8並列で実行するために呼び出されるプログラムである。ライブラリプログラムLP1は、ターゲットプロセッサの命令をホスト環境上で擬似的に実現するためのプログラムである。
【0042】
(動作)
次に、コンバータ21の処理内容について説明する。
図6から図8は、コンバータ21の処理の内容の例を示すフローチャートである。図9は、コンバータ21の処理の内容を説明するための図である。図10は、予約語テーブルの例を示す図である。図11は、シンボルテーブルSTの例を示す図である。図12は、演算子対応テーブルOCTの例を示す図である。図6から図8の処理は、コンピュータ本体11のCPUによって実行される。
【0043】
まず、図6を用いて、コンバータの全体的な処理の内容を説明する。コンバータ21は、プログラムであり、記憶装置13から読み出され、コンピュータ本体11のCPUによって実行される。
【0044】
図6の処理は、図示しない入力部を介して入力されたアプリケーションAPを読み込み、プログラムテキストを一文字ずつあるいは所定の単位で読み込みながら、実行される。
まず、読み込んだテキストについて、拡張仕様判定処理が実行される(ステップS1)。拡張仕様判定処理の内容は、図7に示される。拡張仕様判定処理は、読み込まれた文字列、すなわち字句が拡張された仕様に関するものであるか否かを判定する処理である。
【0045】
拡張仕様判定処理の結果、読み込んだ文字列が拡張仕様であるときは、ステップS2でYESとなり、拡張仕様変換処理が実行される(ステップS2)。拡張仕様変換処理の内容は、図8に示される。
【0046】
拡張仕様判定処理の結果、読み込んだ文字列が拡張仕様でないとき、及び拡張仕様変換処理の後は、ファイル出力処理が実行される(ステップS3)。ファイル出力処理では、読み込んだ文字列が拡張仕様でないときは、読み込んだ文字列がそのまま、所定のファイルに出力される。ファイル出力処理では、読み込んだ文字列が拡張仕様であるときは、読み込んだ文字列に対して拡張仕様変換処理の施された文字列が、所定のファイルに出力される。
【0047】
以上のように、コンバータ21は、図9に示すように、拡張された仕様を含む高級言語のアプリケーションAPを入力し、入力された文字列が標準仕様の文字列か、拡張仕様の文字列かを、上述した拡張仕様判定処理を行う拡張仕様判定部SS1において判定する。そして、コンバータ21は、入力された文字列が拡張仕様の文字列の場合には、上述した拡張仕様変換処理を行う拡張仕様変換部SS3において、その文字列を標準仕様の文字列になるように変換する。コンバータ21は、変換なしの標準仕様の文字列と拡張仕様の変換結果の文字列とを、上述したファイル出力処理を行うファイル出力部SS4において合成して、標準仕様の高級言語のアプリケーションAPCの文字列として出力する。
【0048】
以下、より具体的に、図6の処理の内容を説明する。まず、拡張仕様判定部SS1における拡張仕様判定処理について説明する。
図7は、拡張仕様判定処理の流れの例を示すフローチャートである。まず、CPUは、読み込まれた文字列すなわち字句が、予約語であるか否かを、図10に示す予約語テーブルRWTを参照して判定する(ステップS11)。
【0049】
予約語は、図10の予約語テーブルRWTに予め登録されている。図10の予約語テーブルRWTには、標準仕様の予約語情報と、拡張仕様の予約語情報とが登録されている。
【0050】
図10に示すように、予約語テーブルRWTは、標準仕様の予約語が登録されている標準仕様予約語情報部41と、拡張仕様の予約語が登録されている拡張仕様予約語情報部42とを有する。標準仕様予約語情報部41には、void、char、struct、typedef、#pragma、等の予約語の情報が登録されている。これらの情報は、標準仕様のC言語の予約語である。拡張仕様予約語情報部42には、_ _pack、_ _vliw、_ _cop、等の予約語の情報が登録されている。これらの情報は、拡張仕様のC言語の予約語である。
【0051】
よって、CPUは、ステップS11では、読み込んだ文字列と、標準仕様予約語情報部41及び拡張仕様予約語情報部42に登録された予約語との比較を行うことによって、読み込まれた文字列が予約語であるか否かを判定することができる。読み込んだ文字列が、標準仕様予約語情報部41又は拡張仕様予約語情報部42に登録された予約語であるときは、読み込まれた文字列が予約語であると判定される。
【0052】
読み込まれた文字列が予約語である場合、ステップS12でYESとなり、その文字列が拡張仕様の予約語(以下、拡張予約語という)であるか否かが判断される(ステップS13)。すなわち、読み出された文字列が、拡張仕様予約語情報部42に登録された予約語であれば、拡張予約語と判定される。
【0053】
CPUは、読み出された文字列が拡張予約語であるときは、ステップS13でYESとなり、読み出された文字列を、拡張された仕様の文字列(以下、拡張仕様文字列という)として出力する(ステップS14)。
また、ステップS14では、変数名等の文字列と、その文字列の拡張仕様に関する情報、例えばデータの型の情報、とが、図11に示すようなシンボルテーブルSTに登録される。文字列の拡張仕様に関する情報は、後述する拡張仕様変換処理において利用される。図11のシンボルテーブルSTは、変数情報部51と、型情報部52とを含む。変数情報部51には、変数名等の文字列が登録され、型情報部52には、変数名等に対応してデータの型の情報が登録される。
【0054】
なお、後述する拡張仕様変換処理において利用されるデータの型の情報は、図11のようなシンボルテーブルSTに文字列と対応させて登録せずに、その拡張仕様変換処理において、シンボルテーブルSTを参照することにより、得るようにしてもよい。
【0055】
そして、CPUは、文字列に関する構文木の情報を生成する構文木生成処理を実行する(ステップS15)。この構文木の情報は、後述する拡張仕様変換処理における式の変換において、文字列の構造情報が命令を組み合わせるときに利用される。
【0056】
読み出された文字列が拡張予約語でないときは、ステップS13でNOとなり、読み出された文字列をそのまま、標準仕様の文字列(以下、標準仕様文字列という)として出力する(ステップS16)。
また、ステップS12でNOの場合、すなわち読み込まれた文字列が予約語でない場合、CPUは、変数名と関数名の情報が登録された変数名・関数名テーブルPFT(図9参照)を参照して、読み込まれた文字列と変数名・関数名テーブルの情報とを比較することによって、読み込まれた文字列が変数名か関数名かを判定する(ステップS17)。
【0057】
読み込まれた文字列が関数名又は変数名でないときは、CPUは、ステップS18でNOとなり、読み出された文字列をそのまま、標準仕様文字列として出力する(ステップS16)。
【0058】
読み込まれた文字列が関数名又は変数名であるときは、その関数名又は変数名のデータの型を判定、ここではその関数名又は変数名がSIMD型で定義あるいは宣言されているか否かが判定される(ステップS19)。
【0059】
ステップS20でYES、すなわち関数名又は変数名がSIMD型で定義されたあるいは宣言されたものであるときは、処理は、ステップS14に移行する。
【0060】
ステップS20でNO、すなわち関数名又は変数名がSIMD型で定義されたあるいは宣言されたものでないときは、処理は、ステップS16に移行する。
【0061】
ステップS14とS16の出力は、図9に示すように、それぞれ、拡張仕様文字列情報ECと標準仕様文字列情報NCとして、記憶装置12に一次的に保持される。
【0062】
すなわち、図9に示すように、拡張仕様判定部SS1は、アプリケーションAPが入力されると、予約語テーブルRWTと変数名・関数名テーブルPFTを参照して、読み込んだ文字列が拡張された仕様の文字列であるか、標準仕様の文字列であるかを判定し、拡張された仕様の文字列であれば、拡張仕様文字列情報ECとして所定のファイルに出力し、標準仕様の文字列であれば、標準仕様文字列情報NCとして所定のファイルに出力する。
【0063】
拡張仕様文字列情報ECには、図8の拡張仕様変換処理が施される。
図8は、拡張仕様変換処理の流れの例を示すフローチャートである。図8の処理は、拡張仕様の種類に応じて、3つの場合に分けることができる。
【0064】
1つは、A)拡張仕様の文字列が、ターゲットプロセッサにとっては、意味があるが、ホスト環境では意味の無い機能に関する記述を行うための拡張された仕様の文字列である場合で、2つ目は、B)拡張仕様の文字列が、拡張仕様の変数及び関数のデータの型を記述する文字列である場合で、3つ目は、C)拡張仕様の文字列が、拡張仕様で定義された変数あるいは関数を使用する式を記述する文字列の場合である。
まず、上記Aの場合は、上述したように、ターゲットプロセッサにとっては、意味がある機能ではあるが、ホスト環境では意味がない機能に関する記述を行うための拡張仕様の場合である。これらの拡張仕様の記述は、削除され、出力されない。
【0065】
これに該当する拡張仕様としては、ターゲットプロセッサが VLIWモードで動作する関数であることを示す _ _vliw修飾子、関数や変数を配置するセクションを指定する _ _section 修飾子、ターゲットプロセッサの設定情報をコンパイラに設定する #pragma指令、組込み関数の定義を示す_ _cop修飾子、組込み関数の定義の仮引数名に使用する_ _cop_src、等がある。これらの修飾子等の情報が、記憶装置12に予め記憶されており、入力された文字列が、記憶された情報に合致するか否かにより、拡張仕様の文字列が、ターゲットプロセッサにとっては意味があるが、ホスト環境では意味の無い機能に関する記述を行うための拡張された仕様の文字列であるか否かが判定される。
【0066】
但し、#pragma 指令のターゲットプロセッサの設定情報は、その後の拡張仕様の変換処理のときに、SIMD型の型名などの置換内容を決めるために使用されるため、内部データとして保持される。
【0067】
また、組込み関数の定義を示す_ _cop修飾子は、ターゲットプロセッサ用コンパイラに対して、使用できるSIMD演算の組込み関数を指定しているので、_ _cop修飾子に関わる設定情報も、内部データとして保持される。
【0068】
よって、図8において、まず、拡張仕様文字列が、#pragma指令又は_ _cop修飾子であるか否かが判定される(ステップS21)。拡張仕様文字列が#pragma指令等であるときは、ターゲットプロセッサの設定情報を取得し、保持する(ステップS22)。
【0069】
拡張仕様文字列が、#pragma指令等でないときは、ステップS21でNOとなり、ホスト環境では意味のない修飾子か否かが判定される(ステップS23)。すなわち、拡張仕様文字列が_ _vliw, _ _section等の修飾子であるかが判定され、_ _vliw, _ _section等の修飾子であるときは、ステップS23でYESとなり、処理は終了し、変換結果として出力されない。
【0070】
次に、Bの場合か否かが判定される。Bの場合は、拡張された仕様の変数及び関数のデータの型を記述する文字列であるので、変数及び関数のデータの型は、標準仕様を使用した型名に、変換して出力される。例えば、拡張仕様のSIMD型のデータは、標準仕様を使用した型に変換される。通常、ターゲットプロセッサ用CコンパイラでSIMD型を示すのに、標準仕様の記述は用いられていない。これは、SIMD型のデータをレジスタに配置するためである。よって、拡張仕様のSIMD型のデータは、標準仕様の配列と構造体を使用した型名に変換される。
【0071】
例えば、拡張予約語 _ _pack を使用して定義される_ _pack char (レジスタ長が64bitの場合は8bit8並列)、_ _pack short(レジスタが64bitの場合は16bit4並列)、_ _pack long(レジスタが64bitの場合は32bit2並列)は、それぞれ _ _pack_char、_ _pack_short、_ _pack_longの型名に変換される。
【0072】
よって、変数及び関数のデータの型が、SIMD型であるか否かが判定され(ステップS24)、変数及び関数のデータの型がSIMD型であるときは、ステップS24でYESとなり、CPUは、拡張仕様のデータの型を、標準仕様の配列と構造体を使用した型名に変換する(ステップS25)。
【0073】
そして、CPUは、拡張仕様の変数及び関数のデータの型を記述する文字列を、標準仕様を使用した型名に変換した文字列を出力する(ステップS26)。
【0074】
データの型を記述する文字列でないとき、ここでは変数及び関数のデータの型がSIMD型でないとき、ステップS24でNOとなり、拡張仕様文字列が、拡張仕様で定義された変数あるいは関数を使用した式であるか否かが判定される(ステップS27)。ここでは、拡張仕様文字列が、SIMD型として記述された変数あるいは関数を用いた式であるか否かが判定される。
【0075】
拡張仕様の文字列が、SIMD型として定義された変数あるいは関数を用いた式でなければ、ステップS27でNOとなり、処理は何もせず終了する。
【0076】
その文字列が拡張仕様で定義された変数あるいは関数を用いた式である場合、ステップS27でYESとなり、変数あるいは関数の式に用いられた演算子に対応する命令を、図12に示す演算子対応テーブルOCTから検索する検索処理が実行される(ステップS28)。その命令は、SIMD演算を行うターゲットプロセッサの命令に対応する。
【0077】
検索の結果、演算子対応テーブルOCT中に、式に用いられた演算子に対応する命令があるか否かが判定され(ステップS29)、対応する命令があれば、ステップS29でYESとなり、文字列に関する構文木の情報を用いて、式に用いられた演算子に対応する命令を、対応するSIMD演算のターゲットプロセッサの命令をシミュレートする関数を呼び出す式に変換する(ステップS30)。呼び出される関数は、ライブラリLP中にプログラムとして予め登録されている。例えば、図4における式は、図5に示すライブラリLP1を呼び出すように変換されている。
【0078】
そして、もしも、対応する命令が演算子対応テーブルOCTに無ければ、エラー処理が行われる(ステップS32)。
【0079】
以上のように、拡張仕様文字列が拡張仕様で定義された変数あるいは関数を記述する式の文字列の場合、CPUは、その式の演算子に対応する命令をシミュレートする関数を呼び出す式に変換する。ここでは、SIMD型で定義された変数あるいは関数を用いた式が記述されている場合、その式は、記述された演算子は、対応するSIMD型の関数を呼び出す式に変換される。どの関数を呼び出すかを決定するために、CPUは、式に用いられた演算子とSIMDの型とに対応するSIMD演算のターゲットプロセッサの命令を、図12に示す演算子対応テーブルから検索する。
【0080】
図12に示すように、ここでは、Cの演算子とSIMD型との組み合わせが規定されているので、CPUは、指定されたSIMD演算がどの定義された組込み関数かを検索することになる。
【0081】
図12は、Cの各演算子に対応する、8bit8並列、16bit4並列及び32bit2並列の各場合の命令の情報が登録されている。例えば、「+」の演算子については、8bit8並列の場合は命令「cpadd3_b」が対応し、16bit4並列の場合は命令「cpadd3_h」が対応し、そして、32bit2並列の場合は命令「cpadd3_w」が対応することが、演算子対応テーブルに登録されている。
【0082】
そして、変換された式の文字列は、ファイル出力部SS4に出力され、他の文字列と合成されて、ファイル出力部SS4から出力される。
【0083】
よって、命令が組込み関数として定義されている場合、例えば、_ _cop修飾子を使って関数が宣言されている、または #pragam指令で設定されているような場合、SIMD演算が可能と判断され、その演算子は、演算子対応テーブルOCTが参照されて、その関数を呼び出す式に変換される。その命令が組込み関数として定義されていない場合、演算子は変換せずに、変換できなかったことをエラーとして出力する。
【0084】
なお、ホスト環境の開発ツールは、変換後のプログラムファイルを用いるが、開発ツールでのソースファイルの表示には、変換後のプログラムファイルでなく、変換前のソースファイルが使用される。そのため、コンバータ21は、デバッグ情報を付加して、アプリケーションAPCのプログラムファイルを出力する。例えば、高級言語としてC言語を使用する場合は、#line <行番号> <ファイル名>の記述が、出力するプログラムファイルに付加される。
【0085】
コンバータ21により変換処理されたアプリケーションAPCは、種々の開発ツールを利用可能であり、かつホスト環境のコンパイラ22において、ライブラリLPと結合されることによって、実行ファイルが生成される。
【0086】
以上のように、本実施の形態では、コンバータ21は、拡張された仕様が含まれたターゲットプロセッサ用のアプリケーションAPのプログラムファイルを、標準仕様のアプリケーションAPCのプログラムファイルに変換する。その変換されて得られたプログラムファイルは、ホスト環境の開発環境でコンパイルでき、ターゲットプロセッサの命令仕様をホスト環境上で擬似的に実現するライブラリLPと結合される。その結果、ホスト環境の実行ファイル32が作成される。
【0087】
この実行ファイル32は、ホスト環境でネイティブに実行できるファイルなので、従来のホスト上のシミュレータを用いて実行されるシミュレーションよりも、実行時のオーバーヘッドが少ないため、実行速度が向上する。
【0088】
さらに、標準仕様のアプリケーションAPCなので、ホスト環境用として市販されている、変数の未初期化や配列の範囲外アクセスなどを検出する動的エラー検出ツール、コード品質を評価するツール、ソースプログラムから設計ドキュメントを自動生成するツールなどの開発ツールが使用可能となる。
【0089】
従って、上述したコンバータ21により生成されたアプリケーションAPCは、ホスト環境でコンパイルして高速に実行可能であり、かつ、種々の開発ツールを利用可能であるので、アプリケーションプログラムの開発効率が向上する。
【0090】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フレキシブルディスク、CD−ROM等の可搬媒体や、ハードディスク等の記憶媒体に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のコンバータを使用することができる。
【0091】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【0092】
【図1】本発明の実施の形態に係わるコンバータを有するプログラム開発装置の構成を示す構成図である。
【図2】本発明の実施の形態に係わるコンバータの利用形態の例を説明するための図である。
【図3】本発明の実施の形態に係わる拡張仕様のプログラムの例を説明するための図である。
【図4】本発明の実施の形態に係わるアプリケーションAPCの例を説明するための図である。
【図5】本発明の実施の形態に係わるライブラリプログラムの例を示す図である。
【図6】本発明の実施の形態に係わるコンバータの処理の内容の例を示すフローチャートである。
【図7】本発明の実施の形態に係わる拡張仕様判定処理の流れの例を示すフローチャートである。
【図8】本発明の実施の形態に係わる拡張仕様変換処理の流れの例を示すフローチャートである。
【図9】本発明の実施の形態に係わるコンバータの処理の内容を説明するための図である。
【図10】本発明の実施の形態に係わる予約語テーブルの例を示す図である。
【図11】本発明の実施の形態に係わるシンボルテーブルの例を示す図である。
【図12】本発明の実施の形態に係わる演算子対応テーブルの例を示す図である。
【符号の説明】
【0093】
1 プログラム開発装置、11 コンピュータ本体、12 記憶装置、13 表示装置、21 コンバータ、22 コンパイラ

【特許請求の範囲】
【請求項1】
所定の仕様に従わない拡張された仕様の第1のプログラムを含む第2のプログラムを前記所定の仕様の第3のプログラムに変換するコンバータであって、
前記第2のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第2のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定する拡張仕様判定部と、
前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第2のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第1の式を前記所定の仕様により記述された第2の式に変換する拡張仕様変換部と、
を有することを特徴とするコンバータ。
【請求項2】
前記拡張仕様変換部は、前記第2の式を、前記第1の式に対応するライブラリプログラムを呼び出す形式により記述することを特徴とする請求項1に記載のコンバータ。
【請求項3】
前記データの型は、SIMD型であることを特徴とする請求項1又は2に記載のコンバータ。
【請求項4】
前記拡張仕様変換部は、前記第2のプログラムに含まれる前記文字列が前記所定の仕様の文字列の場合は、前記第2のプログラムに含まれる前記文字列を変換しないで出力することを特徴とする請求項1から3のいずれか1項に記載のコンバータ。
【請求項5】
所定の仕様に従わない拡張された仕様の第1のプログラムを含む第2のプログラムを前記所定の仕様の第3のプログラムに変換するプログラム変換方法であって、
前記第2のプログラムを入力し、前記拡張された仕様の予約語の情報が登録された予約語テーブルと、関数名と変数名のデータの型の情報を含むシンボルテーブルとを参照して、前記第2のプログラムに含まれる文字列を解析して前記文字列が前記拡張された仕様の文字列か否かを判定し、
前記拡張された仕様の文字列についての前記データの型の情報に基づいて、前記第2のプログラムに含まれる文字列を、前記所定の仕様の型名に変換し、かつ前記拡張された仕様により定義された関数又は変数を含む第1の式を前記所定の仕様により記述された第2の式に変換することを特徴とするプログラム変換方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2009−252170(P2009−252170A)
【公開日】平成21年10月29日(2009.10.29)
【国際特許分類】
【出願番号】特願2008−102741(P2008−102741)
【出願日】平成20年4月10日(2008.4.10)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】