(57)【要約】【課題】音声コーデックの開発において、コードサイズの減少およびコンパイラによる最適化を図る。【解決手段】ベーシックオペレーションを純粋なアセンブラではなく、アセンブラ記述方法で開発する。さらに、このベーシックオペレーションをインライン関数として宣言し、ヘッダファイル内で記述することで、インライン展開先でコンパイラによる最適化が適用可能となる。インライン展開することは一般にコードサイズを増加させるという欠点がある。しかし、音声のベーシックオペレーションは、アセンブラでは一命令で記述できる場合が多い。そのため関数呼び出し命令が無くなり、コードサイズは減少する。【選択図】図４
2006023795.tif 000002
【特許請求の範囲】
【請求項１】
ソースファイルを読み込む第１のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第２のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第３のステップ
とを含む音声コーデック開発方法において、
前記第２のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第１のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしている
ことを特徴とする音声コーデック開発方法。
【請求項２】
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第１のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第２のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第３のステップ
とを含む音声コーデック開発方法。
【請求項３】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第５のステップ
とを含むヘッダファイル生成方法であって、
前記第５のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述されていることを特徴とするヘッダファイル生成方法。
【請求項４】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第５のステップ
とを含むことを特徴とするヘッダファイル生成方法。
【請求項５】
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第３のステップで行数を計測した前記ベーシックオペレーションの関数名を出力する第５のステップ
とを含むことを特徴とするベーシックオペレーション選択方法。
【請求項６】
請求項１または請求項２に記載の音声コーデック開発方法により作成された、コンピュータ実行可能な音声コーデックプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＴＵ等で規格化されたベーシックオペレーションによって記述される音声コーデックの開発方法ならびにその関連技術に関するものである。
【背景技術】
【０００２】
ＩＴＵ（International Telecommunication Union：国際電気通信連合）で規格化されＣソースコードで記述された音声コーデックは公開されている。この音声コーデックの処理は、ベーシックオペレーションという音声コーデック特有の演算を含んでいる。一般に、ベーシックオペレーションにはオーバーフロー補正付き、固定小数点位置、ビット精度といった演算が処理フローとして含まれており、現状のコンパイラではそのままコンパイルしても、高い処理性能は期待できない場合が多い。
【０００３】
図９に公開されている規格の例を示す。図９（ａ）のｒｅｓｉｄｕ．ｃｐｐは音声コーデック処理の一部を抜き出したもので、フィルター演算を行う部分である。この中のＬ＿ｍｕｌｔやＬ＿ｍａｃが、ベーシックオペレーションである。図９（ｂ）のｂａｓｉｃ＿ｏｐ．ｃｐｐは規格で公開されたベーシックオペレーションの一例であり、Ｃ言語で記述されている。これらＬ＿ｍｕｌｔとＬ＿ｍａｃは、それぞれオーバーフロー補正付きの積算、積和演算を行うものであり、上記のようにこのままコンパイルしても、高い処理性能は期待できない。
【０００４】
そのため、従来の音声コーデック開発では、このようなベーシックオペレーションだけは、規格で公開されたＣソースコードを参考にアセンブラ言語で開発を行っている。逆に、単純にコンパイルして問題のない音声コーデック部は、公開されているＣソースコードを基本的に、そのまま用いている。音声コーデック部の中でベーシックオペレーションを使用したいときは、関数呼び出しという方法によりアセンブラで書かれた命令を呼び出す。
【０００５】
図１０は従来の音声コーデック開発方法のフローチャートである。図１０のフローチャートに示すように、先ずベーシックオペレーションが記述されたアセンブラファイルを読み込む（ステップＳ２１）。このアセンブラファイルには、規格のＣソースコードを参考にして、ベーシックオペレーションがアセンブラ言語で記述されている。次に、Ｃソースファイルを読み込む（ステップＳ２２）。ステップＳ２２のＣソースファイルは音声コーデック部であり、規格のＣソースコードをそのまま用いる。次に、ステップＳ２１で読み込んだアセンブラファイルをアセンブルし、コンピュータで実行可能な形式へとオブジェクト化する（ステップＳ２３）。同様にステップＳ２２で読み込んだＣソースファイルをコンパイルし、オブジェクト化する（ステップＳ２４）。そして、ステップＳ２３，Ｓ２４で作成したオブジェクトをリンカによってリンクして実行体を生成する（ステップＳ２５）。
【０００６】
この従来の音声コーデック開発方法では、単純なコンパイルでは最適なコードを出力できない部分であるベーシックオペレーションのみをアセンブラで直接記述して、処理性能の低下を防いでいる。それ以外の単純なコンパイルで問題のない部分については、規格により提供されているＣソースコードをそのまま用いる。
【０００７】
図１１は従来の音声コーデック開発方法で用いたＣソースファイルとアセンブラファイルの具体例である。図１１（ａ）のｒｅｓｉｄｕ．ｃｐｐは音声コーデック部であり、基本的に規格のＣソースコード（図９（ａ））をそのまま用いているが、アセンブラ命令＿Ｌ＿ｍｕｌｔ、＿Ｌ＿ｍａｃを関数呼び出しするように変更されている。図１１（ｂ）のｂａｓｉｃ＿ｏｐ．ａｓｍでは、関数Ｌ＿ｍｕｌｔ、Ｌ＿ｍａｃの処理内容がアセンブラで記述されている。
【０００８】
音声コーデックのプログラムが動くプロセッサの命令の一覧を図１２に示す。図１２のように、ｂａｓｉｃ＿ｏｐ．ａｓｍ内で使用されているｆｍｕｌ、ｆｍａｃはそれぞれオーバーフロー補正付きの積算、積和演算を行うアセンブラ命令であり、図９（ｂ）の規格のベーシックオペレーションのＣソースコードと同等の処理を１命令で行うことができる。このｒｅｓｉｄｕ．ｃｐｐとｂａｓｉｃ＿ｏｐ．ａｓｍそれぞれをオブジェクト化しリンクすることで、実行体が作成される。
【特許文献１】特開平３−１０５６２６号公報（第２−３頁、第１図）
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従来の開発方法は、上記のように音声コーデック部からベーシックオペレーションを関数呼び出しという形で呼び出している。一般に関数呼び出しをするためには、アセンブラ上で“ｃａｌｌ”という１命令が必要となる。しかし、音声のベーシックオペレーションは、図１２のｆｍｕｌ、ｆｍａｃのようなアセンブラ１命令で記述可能な場合が多い。元々１命令で記述可能な関数を呼び出すのに、ｃａｌｌという１命令を必要としており、コードサイズを増加させているという問題があった。
【００１０】
さらに、アセンブラで記述されたベーシックオペレーションと、Ｃ言語等高級言語で記述された音声コーデック部とを別々にオブジェクト化しているため、コンパイラによるベーシックオペレーションの呼び出し前後を考慮した最適化（例：レジスタ割付、冗長除去等）が適用されないという課題もある。
【００１１】
本発明は、上記課題を解決するためになされたものであり、コードサイズをよりコンパクトに、かつコンパイラによるベーシックオペレーション呼び出し前後を考慮した最適化を可能にする音声コーデック開発方法の提供を第一の目的とする。
【００１２】
また、従来方法ではベーシックオペレーションの全てを人手でアセンブラ化していた。しかしながら、コンパイラの性能により、ベーシックオペレーションの中には単純なコンパイルで最適なコードを出力できるものがある。そこで、全てのベーシックオペレーションについてコンパイルで問題なく最適なコードが出力されるかどうかを判定し、最適なアセンブラコードが出力されるベーシックオペレーションは、コンピュータによって最適化ＡＳＭ文で作成し、ヘッダファイルへ記述するヘッダファイル生成方法の提供を第二の目的とする。ここで、最適化ＡＳＭ文とは、Ｃ言語等高級言語の中でアセンブラ命令で記述された文であり、コンパイラによる最適化が可能な文である。
【００１３】
また、一部のベーシックオペレーションはコンピュータにより自動で規格のＣソースから、本発明の音声コーデック開発方法で用いるヘッダファイル内へ記述できるが、コンパイラによって最適なアセンブラコードが出力されないベーシックオペレーションは人手でヘッダファイル内に記述しなければならない。そのため、人手で記述すべきベーシックオペレーションを選択するベーシックオペレーション選択方法の提供を第三の目的とする。
【課題を解決するための手段】
【００１４】
上記第一の目的を達成するため、本発明の音声コーデック開発方法は、
ソースファイルを読み込む第１のステップと、
読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第２のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第３のステップ
とを含む音声コーデック開発方法において、
前記第２のステップの前記ヘッダファイルでベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれており、
前記第１のステップの前記ソースファイルでは前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルード（取り込み指示）していることを特徴とするものである。
【００１５】
別言すれば、本発明による音声コーデック開発方法は、
ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述で書かれているヘッダファイルと、前記ベーシックオペレーションを使った処理が記述され、かつ前記ヘッダファイルをインクルードしているソースファイルとを対象として、
前記ソースファイルを読み込む第１のステップと、
前記読み込んだ前記ソースファイル内でインクルードされているヘッダファイルを読み込む第２のステップと、
前記ソースファイルと前記ヘッダファイルをコンパイルする第３のステップ
とを含むものである。
【００１６】
すなわち、本発明の音声コーデック開発方法は、ベーシックオペレーションをインライン展開することを特徴としている。一般にインライン展開は、展開先で関数の中身を貼り付ける形となるため、関数の中身が長いとコードサイズは増加してしまう。しかし、音声コーデックのベーシックオペレーションに限ればアセンブラ１命令で記述できることが多いため、インライン展開すれば関数の呼び出し命令や戻り命令が必要なくなるという利点がある。これは、コードサイズの削減という効果に繋がる。また、ベーシックオペレーションのインライン展開先で、コンパイラによる関数呼び出し前後を考慮した最適化（命令並び替え、冗長除去、レジスタ割付等）を適用可能にする。
【００１７】
本発明の音声コーデックプログラムは、コードサイズの削減により使用メモリサイズの削減に有利であるとともに、最適化による実行速度の高速化に有利である。
【００１８】
また、上記第二の目的を達成するため、本発明のヘッダファイル生成方法は、コンピュータによりベーシックオペレーションを記述したヘッダファイルを生成する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいてヘッダファイルを生成する第５のステップ
とを含むヘッダファイル生成方法であって、
前記第５のステップで作成する前記ヘッダファイルでは、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述（最適化ＡＳＭ文）されていることを特徴とするものである。
【００１９】
別言すれば、本発明のヘッダファイル生成方法は、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしてアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数以下のときに、前記アセンブラファイルに基づいて、前記ベーシックオペレーションがインライン関数として宣言され、かつ処理内容がアセンブラ記述された状態のヘッダファイルを生成する第５のステップ
とを含むことを特徴とするものである。
【００２０】
ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なもの（計測行数が規定ワード数以下）については、コンピュータによってヘッダファイルを自動的に作成するので、開発の手間を省く上で有効である。
【００２１】
また、上記第三の目的を達成するため、本発明のベーシックオペレーション選択方法は、人手で開発しなければならないベーシックオペレーションを選択し、画面表示等する方法であって、
規格で公開されたベーシックオペレーションが記述されたソースファイルを読み込む第１のステップと、
前記ソースファイルをコンパイルしアセンブラファイルを生成する第２のステップと、
前記アセンブラファイルに記述された前記ベーシックオペレーションの行数を計測する第３のステップと、
前記第３のステップで計測した行数と規定のワード数とを比較する第４のステップと、
前記計測した行数が前記規定のワード数を超えるときに、前記第３のステップで行数を計測した前記ベーシックオペレーションの関数名を出力（画面表示等）する第５のステップ
とを含むことを特徴とするものである。
【００２２】
これによれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、人手のアセンブラ記述を要するベーシックオペレーションを自動的にリストアップすることができる。
【００２３】
本発明の音声コーデックプログラムは、上記の音声コーデック開発方法により作成されたものである。
【発明の効果】
【００２４】
本発明の音声コーデック開発方法によれば、ベーシックオペレーションをインライン展開して関数の呼び出し命令や戻り命令を不要化するので、コードサイズを削減できるとともに、インライン展開先でコンパイラによる関数呼び出し前後を考慮した最適化（命令並び替え、冗長除去、レジスタ割付等）を実現できる。
【００２５】
本発明の音声コーデック開発方法によって作成されたコンピュータ実行可能なプログラムは、コードサイズの減少による使用メモリサイズの減少および、コンパイラによる最適化によって実行速度の向上という効果を持つ。
【００２６】
本発明のヘッダファイル生成方法は、Ｃソース内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものはコンピュータによってヘッダファイルの作成を行い、開発の手間を省く効果を持つ。
【００２７】
本発明のベーシックオペレーション選択方法は、Ｃソース内に記述された多くのベーシックオペレーションの中から、人手で最適化ＡＳＭ文を記述しなければならないベーシックオペレーションをリストアップし、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【発明を実施するための最良の形態】
【００２８】
以下、本発明にかかわる音声コーデック開発方法の実施の形態を図面に基づいて詳細に説明する。
【００２９】
（実施の形態１）
図１は、本発明の実施の形態１の音声コーデック開発方法におけるハードウェア構成を示すブロック図である。本実施の形態の音声コーデック開発方法で使用するハードウェアシステムは、図１のように、中央処理装置（ＣＰＵ）１と、データの格納を行うデータ入出力システム２とから構成されている。
【００３０】
ここで、データ入出力システム２はディスク装置４と主記憶装置５とから構成されている。ディスク装置４には、音声コーデック処理が記述されたＣソースファイル、ベーシックオペレーションが最適化ＡＳＭ文として記述されたヘッダファイルと、コンパイラ６によって作成された実行体（実行可能プログラム）が格納される。主記憶装置５はディスク装置４の制御プログラム等が記憶される。
【００３１】
また、中央処理装置１は、コンパイラ６から構成されている。コンパイラ６は、ディスク装置４にあるソースファイル、ヘッダファイルを主記憶装置５へ読み込み、オブジェクト化する。さらに、作成したオブジェクトをリンクし実行体にして、ディスク装置４に格納する。
【００３２】
図２はディスク装置４に格納されるソースファイル、ヘッダファイルの具体例である。図２（ａ）のｒｅｓｉｄｕ．ｃｐｐは、従来方法（図１１（ａ））と同様、規格で公開されているＣソースコード（図９（ａ））をそのまま使用しているが、ベーシックオペレーションが記述されたヘッダファイル（ｂａｓｉｃ＿ｏｐ．ｈ）をインクルードする命令が付け加えられている。図２（ｂ）のｂａｓｉｃ＿ｏｐ．ｈはインクルードされるヘッダファイルである。図２（ｂ）のように、ベーシックオペレーション関数Ｌ＿ｍｕｌｔ、Ｌ＿ｍａｃがそれぞれインライン（inlineｃ）宣言され、かつ最適化ＡＳＭ文で処理内容が記述されている。
【００３３】
図３に、本発明の実施の形態で用いる最適化ＡＳＭ文の記述方法について示す。図３において、ロード式とはレジスタにＣ言語の変数や四則演算などの式の結果を格納する式であり、ストア式とはレジスタの値をＣ言語の変数等に格納する式であり、命令指定部とはアセンブラ命令を記述する場所である。
【００３４】
以下、本実施の形態の音声コーデック開発方法の動作例を図４のフローチャートを用いて説明する。
【００３５】
図２に示したソースファイルｒｅｓｉｄｕ．ｃｐｐ、ヘッダファイルｂａｓｉｃ＿ｏｐ．ｈはディスク装置４に格納されている。
【００３６】
先ず、コンパイラ６において、ディスク装置４にあるソースファイルｒｅｓｉｄｕ．ｃｐｐを主記憶装置５へ読み込む（ステップＳ１）。
【００３７】
次に、コンパイラ６において、ステップＳ１で読み込んだソースファイルｒｅｓｉｄｕ．ｃｐｐ内でインクルードされているヘッダファイルｂａｓｉｃ＿ｏｐ．ｈを、ディスク装置４から主記憶装置５へ読み込む（ステップＳ２）。
【００３８】
次に、コンパイラ６において主記憶装置５に読み込んだソースファイルｒｅｓｉｄｕ．ｃｐｐとヘッダファイルｂａｓｉｃ＿ｏｐ．ｈをコンパイルしてオブジェクト化する。そして、両オブジェクトをリンクして実行体を作成し、ディスク装置４へ格納する（ステップＳ３）。
【００３９】
ソースファイルｒｅｓｉｄｕ．ｃｐｐでは、ヘッダファイルｂａｓｉｃ＿ｏｐ．ｈがインクルードされ、且つインライン関数Ｌ＿ｍｕｌｔやＬ＿ｍａｃは関数呼び出しされる場所に埋め込まれる。そのため、実際にコンパイルするソースコードは図５のようになる。したがって、ステップＳ３では図５のＣソースファイルをコンパイルしていることと同じである。
【００４０】
本実施の形態の音声コーデック開発方法によれば、ベーシックオペレーション呼び出し前後を考慮した最適化（命令並び替え、冗長除去、レジスタ割付等）が適用され、且つ関数の呼び出し命令を削減することにより、コードサイズの削減を実現することができる。
【００４１】
（実施の形態２）
次に、本発明の実施の形態２のヘッダファイル生成方法におけるハードウェア構成のブロック図を図６に示す。この図６は、本発明の実施の形態３のベーシックオペレーション選択方法にも適用されるものである。図１と同様、中央処理装置（ＣＰＵ）１と、データの格納と入出力を行うデータ入出力システム２とから構成されている。
【００４２】
ここで、データ入出力システム２は、出力装置３とディスク装置４と主記憶装置５とから構成されている。出力装置３は、ディスプレイ等の必要なデータを表示するため装置である。ディスク装置４には、規格で公開されているベーシックオペレーションが記述されたＣソースファイルが格納されている。主記憶装置５は、これら出力装置３、ディスク装置４の制御プログラム等を記憶する。また、中央処理装置１は、コンパイラ６、行数カウント手段７、コード数判定手段８、ヘッダファイル生成手段９、表示手段１０およびベーシックオペレーション探索手段１１から構成されている。
【００４３】
コンパイラ６は、ディスク装置４に格納されているベーシックオペレーションが記述されたＣソースファイルを主記憶装置５へ読み込み、アセンブラファイル化する。その後、出力したアセンブラファイルを主記憶装置５へ格納する。
【００４４】
行数カウント手段７は、コンパイラ６によって出力された主記憶装置５上のアセンブラファイルの中で、先頭のベーシックオペレーション、またはベーシックオペレーション探索手段１１より送られた関数名のベーシックオペレーションの行数をカウントし、その関数名と行数Ｘをコード数判定手段８へ送る。
【００４５】
コード数判定手段８は、行数カウント手段７から送られてきた行数Ｘと規定のワード数Ａとの大小関係を判定する。Ｘ＞Ａならば、行数カウント手段７から送られたベーシックオペレーションの関数名を表示手段１０へ送る。Ｘ≦Ａならば、行数カウント手段７から送られたベーシックオペレーションの関数名をヘッダファイル生成手段９へ送る。
【００４６】
ヘッダファイル生成手段９は、主記憶装置５にあるアセンブラファイルから、コード数判定手段８より送られた関数名のベーシックオペレーションを探索する。次に、そのベーシックオペレーションを最適化ＡＳＭ文に変換し、インライン関数化を施し、Ｃヘッダファイル内に記述し、そのヘッダファイルをディスク装置４へ格納する。最後に、その関数名をベーシックオペレーション探索手段１１へ送る。
【００４７】
表示手段１０は、コード数判定手段８より送られた関数名を出力装置３へ渡し、表示する。その後、その関数名をベーシックオペレーション探索手段１１へ送る。
【００４８】
ベーシックオペレーション探索手段１１は、主記憶装置５にあるアセンブラファイルから、ヘッダファイル生成手段９や表示手段１０から送られた関数名のベーシックオペレーションを探索し、その次のベーシックオペレーションがあるかどうか探索する。ある場合は、その関数名を行数カウント手段７へ送る。ない場合は、処理を終了する。
【００４９】
本実施の形態によれば、Ｃソースファイルからアセンブラファイルを作成し、アセンブラファイルのベーシックオペレーションを最適化ＡＳＭ文に変換してヘッダファイルを自動的に作成することができる。
【００５０】
以下、規定のワード数Ａ＝５である場合の、本実施の形態のヘッダファイル生成方法を図７のフローチャートと図９のＣソースファイルを用いて説明する。
【００５１】
規格で公開されているベーシックオペレーションが記述されたＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ（図９）はディスク装置４に格納されている。
【００５２】
先ず、コンパイラ６においてディスク装置４から、Ｃソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ（図９（ｂ））を主記憶装置５へ読み込む（ステップＳ１１）。
【００５３】
次に、コンパイラ６において、主記憶装置５に読み込んだＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐをコンパイルし、アセンブラファイルを出力し、主記憶装置５へ格納する（ステップＳ１２）。
【００５４】
次に、行数カウント手段７において、コンパイラ６にて出力されたアセンブラファイルから、先頭のＬ＿ｍｕｌｔ関数部分の行数をカウントし、関数名Ｌ＿ｍｕｌｔとその行数Ｘを出力する（ステップＳ１３）。
【００５５】
次に、コード数判定手段８において、行数カウント手段７から送られた行数Ｘを規定のワード数「５」と比較する（ステップＳ１４）。
【００５６】
コンパイラ６にて図８（ａ）のようなアセンブラコードが出力される場合、Ｘ≦５となる。このような場合、単純なコンパイラで問題なく最適なコードが出力されたと考えられる。そこで、行数カウント手段７より送られたベーシックオペレーション名Ｌ＿ｍｕｌｔをヘッダファイル生成手段９へ送る。
【００５７】
次に、ヘッダファイル生成手段９において、主記憶装置５にあるアセンブラファイル内で、コード数判定手段８から送られたＬ＿ｍｕｌｔという関数を探索する。そして、Ｌ＿ｍｕｌｔ関数部分のアセンブラコードから、最適化ＡＳＭ文を作成し、インライン関数化を施し、ヘッダファイル内へ記述し、ヘッダファイルをディスク装置４へ格納する。その後、ベーシックオペレーション探索手段１１へ関数名Ｌ＿ｍｕｌｔを送る（ステップＳ１５）。
【００５８】
次に、ベーシックオペレーション探索手段１１において、主記憶装置５にあるアセンブラファイル内で、ヘッダファイル生成手段９より送られたＬ＿ｍｕｌｔ関数を探索し、その次のベーシックオペレーションがあるかどうか探索する（ステップＳ１７）。今回は、次にＬ＿ｍａｃがあるため、関数名Ｌ＿ｍａｃを行数カウント手段７へ送る。
【００５９】
この処理をＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ内の全てのベーシックオペレーションに対して行い、ステップＳ１７において、次の関数が見つからなくなったら終了する。
【００６０】
このように、本実施の形態のヘッダファイル生成方法によれば、ソースファイル内に記述された多くのベーシックオペレーションの中から、コンパイラが最適なアセンブラコードを出力可能なものについては、ヘッダファイルを自動的に作成し、作成したヘッダファイルを上記の音声コーデック開発方法で用いるので、開発の手間を省くことができる。
【００６１】
（実施の形態３）
最後に、本発明の実施の形態３のベーシックオペレーション選択方法について、規定のワード数Ａ＝５である際の動作を図７のフローチャートと図９のＣソースファイルを用いて説明する。
【００６２】
規格で公開されているベーシックオペレーションが記述されたＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ（図９）はディスク装置４に格納されている。
【００６３】
先ず、コンパイラ６において、ディスク装置４からＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ（図９（ｂ））を主記憶装置５へ読み込む（ステップＳ１１）。
【００６４】
次に、コンパイラ６において、主記憶装置５に読み込んだＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐをコンパイルし、アセンブラファイルを出力し、主記憶装置５へ格納する（ステップＳ１２）。
【００６５】
次に、行数カウント手段７において、コンパイラ６にて出力されたアセンブラファイルから、先頭のＬ＿ｍｕｌｔ関数部分の行数をカウントし、関数名Ｌ＿ｍｕｌｔと行数Ｘを出力する（ステップＳ１３）。
【００６６】
次に、コード数判定手段８において、行数カウント手段７から送られる行数Ｘを規定のワード数「５」と比較する（ステップＳ１４）。
【００６７】
コンパイラ６にて、図８（ｂ）に示すようなアセンブラコードが出力される場合、Ｘ＞５となる。このような場合、ベーシックオペレーションＬ＿ｍｕｌｔはコンパイラで無駄な命令が出力されたと考えられ、後に人手で最適化ＡＳＭ文で記述しなければならない。そこで表示手段１０へ関数名Ｌ＿ｍｕｌｔを送る。
【００６８】
次に、表示手段１０において、コード数判定手段８より送られたベーシックオペレーションの関数名Ｌ＿ｍｕｌｔを出力装置３へ出力し、画面に表示させる。その後、ベーシックオペレーション探索手段１１へ関数名Ｌ＿ｍｕｌｔを送る（ステップＳ１６）。
【００６９】
次に、ベーシックオペレーション探索手段１１において、主記憶装置５にあるアセンブラファイル内で、表示手段１０より送られたＬ＿ｍｕｌｔ関数を探索し、その次のベーシックオペレーションがあるかどうか探索する（ステップＳ１７）。今回は、次にＬ＿ｍａｃがあるため、関数名Ｌ＿ｍａｃを行数カウント手段７へ送る。
【００７０】
この処理をＣソースファイルｂａｓｉｃ＿ｏｐ．ｃｐｐ内の全てのベーシックオペレーションに対して行い、ステップＳ１７において、次の関数が見つからなくなったら終了する。
【００７１】
本実施の形態のベーシックオペレーション選択方法によれば、Ｃソースファイル内に記述された多くのベーシックオペレーションの中から、人手で最適化ＡＳＭ文を記述しなければならないベーシックオペレーションを出力し、開発者が全てのベーシックオペレーションをチェックする手間を軽減する効果を持つ。
【産業上の利用可能性】
【００７２】
本発明の技術は、ＩＴＵ−Ｔ，３ＧＰＰ（3rd Generation Partnership Project）等といった音声コーデックのプログラム開発において有用である。
【図面の簡単な説明】
【００７３】
【図１】本発明の実施の形態１の音声コーデック開発方法におけるハードウェア構成を示すブロック図
【図２】本発明の実施の形態１の音声コーデック開発方法で用いるＣソースファイルおよびヘッダファイルの具体例を示す図
【図３】本発明の実施の形態で用いる最適化ＡＳＭ文の記述方法を示す図
【図４】本発明の実施の形態１の音声コーデック開発方法の動作説明に用いるフローチャート
【図５】本発明の実施の形態１の音声コーデック開発方法でコンパイルされるソースコードのイメージ図
【図６】本発明の実施の形態２におけるヘッダファイル生成方法および本発明の実施の形態３のベーシックオペレーション選択方法におけるハードウェア構成を示すブロック図
【図７】本発明の実施の形態２におけるヘッダファイル生成方法および本発明の実施の形態３のベーシックオペレーション選択方法の動作説明に用いるフローチャート
【図８】本発明の実施の形態２に関連して、コンパイラより出力されるアセンブラコードの違いを示す図
【図９】規格で公開されているＣソースコードの一例を示す図
【図１０】従来の音声コーデック開発方法の動作を示すフローチャート
【図１１】従来の音声コーデック開発方法で用いるＣソースコードの具体例を示す図
【図１２】音声コーデックプログラムが動くプロセッサの命令一覧を示す図
【符号の説明】
【００７４】
１  中央処理装置（ＣＰＵ）
２  データ入出力システム
３  出力装置
４  ディスク装置
５  主記憶装置
６  コンパイラ
７  行数カウント手段
８  コード数判定手段
９  ヘッダファイル生成手段
１０  表示手段
１１  ベーシックオペレーション探索手段
【図１】
2006023795.tif 000003
【図２】
2006023795.tif 000004
【図３】
2006023795.tif 000005
【図４】
2006023795.tif 000006
【図５】
2006023795.tif 000007
【図６】
2006023795.tif 000008
【図７】
2006023795.tif 000009
【図８】
2006023795.tif 000010
【図９】
2006023795.tif 000011
【図１０】
2006023795.tif 000012
【図１１】
2006023795.tif 000013
【図１２】
2006023795.tif 000014