JP4157016B2 - コンパイラ装置及びコンパイル方法 - Google Patents

コンパイラ装置及びコンパイル方法 Download PDF

Info

Publication number
JP4157016B2
JP4157016B2 JP2003376093A JP2003376093A JP4157016B2 JP 4157016 B2 JP4157016 B2 JP 4157016B2 JP 2003376093 A JP2003376093 A JP 2003376093A JP 2003376093 A JP2003376093 A JP 2003376093A JP 4157016 B2 JP4157016 B2 JP 4157016B2
Authority
JP
Japan
Prior art keywords
fixed
variable
point
data
data type
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.)
Expired - Fee Related
Application number
JP2003376093A
Other languages
English (en)
Other versions
JP2005141410A (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.)
Toshiba Corp
Original Assignee
Toshiba 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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2003376093A priority Critical patent/JP4157016B2/ja
Priority to US10/747,210 priority patent/US7325230B2/en
Publication of JP2005141410A publication Critical patent/JP2005141410A/ja
Application granted granted Critical
Publication of JP4157016B2 publication Critical patent/JP4157016B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、C言語などの高級言語を機械語に変換するコンパイル技術に係り、特に、固定小数点のデータ型をコンパイラ装置の起動時または動作中に任意に定義可能とするコンパイラ装置及びコンパイル方法に関する。
音声や映像を含むマルチメディアのデータを処理する場合、浮動小数点のデータ型ではなく固定小数点のデータ型で処理すれば、高速で十分な精度の結果データが得られることは知られている。
従来のコンパイラ装置の多くは、固定小数点のデータ型を直接扱うことができない。このため、固定小数点データ型のデータを扱う場合には、ソースプログラムの入出力部において固定小数点データ型のデータと整数データ型のデータとを変換し、内部のプログラムでは整数データ型のデータとして処理する手法や、ユーザが固定小数点のデータを、例えば整数データ型のデータを用いて処理する関数を用意して処理する手法をとる。
コンパイラ装置としては、固定小数点データの演算回路や演算を支援する回路を有するプロセッサ用の固定小数点データ型が扱えるものも知られている(例えば、非特許文献1参照。)。
また、C++言語のクラスを用いてハードウェアも記述できるシステム設計言語のSystemC用のコンパイラ装置を用いると、C++のクラスとして固定小数点データ型のデータを処理でき、更にデータ型を変更することもできる。
ユーザーズ・マニュアル「CC77016 μPD77016 ファミリ用Cコンパイラ装置」、NEC Electric Corp、2003年1月発行、第48頁−51頁
しかしながら、固定小数点を扱えるコンパイラが存在しても、それはプロセッサの扱う固定小数点の仕様に沿ったものであった。又、固定小数点をデフォルトで扱わないプロセッサ、つまり専用命令を使わずに固定小数点演算を行うプロセッサや、固定小数点演算の専用命令を保持するユーザ定義モジュールを追加可能なプロセッサ用のコンパイラにとっては、ユーザの要求に従って、固定小数点のデータ型を変えることには支障があった。
具体的には、内部のプログラムでは整数のデータ型のデータとして処理する手法や、ユーザが固定小数点のデータを関数を用意して処理する手法をとる場合、プログラム開発時間が増加する問題や、ソースプログラムの演算記述が固定小数点のデータを扱う部分だけが異なることにより保守性が悪くなる問題、又、再利用が困難となる問題等があった(第1の問題点)。
固定小数点のデータの演算回路や演算を支援する回路を有するプロセッサ用の固定小数点のデータ型が扱えるコンパイラ装置においては、固定小数点のデータ型が固定であるため、データ処理において必要以上の精度の演算となり、実行性能が低下したりする問題、コンパイラ装置の生成するオブジェクトのコードサイズが増大する問題等があった(第2の問題点)。
C++コンパイラ装置は、クラスのオブジェクトの演算に対して関数呼び出しの形のオブジェクトコードを生成するため、SystemCのプログラム内の固定小数点演算も同様に関数呼び出しのオブジェクトコードとなる。このため、プロセッサが固定小数点演算を行う命令を有していても、その命令を用いて最適化することができない問題等があった(第3の問題点)。
本発明は、上記問題点を解決する為になされたものであり、固定小数点のデータ型の変数を含む演算操作を、他の標準データ型の変数と同様に演算表記でき、ユーザによって固定小数点のデータ型を定義ができ、コンパイラがソースプログラムの高級言語記述を機械語に変換する時に、高級言語の固定小数点変数を含む演算記述を再定義された固定小数点のデータ型に基づいて機械語に変換することができるコンパイラ装置及びコンパイル方法を提供することを目的とする。
上記問題点を解決する為、本発明の第1の特徴は、(イ)ユーザにより定義された固定小数点のデータ型の定義文を解析して、解析の結果ユーザにより定義された固定小数点のデータ型の型番号、データ種類、符号、データサイズ、整数部のビット数、小数部のビット数を含むデータ型情報を取得するデータ型情報処理手段と、(ロ)データ型情報を格納する型情報記憶部と、(ハ)固定小数点のデータ型の変数宣言文を解析して、解析の結果得られた変数名と型番号を含む変数情報を得る変数情報処理手段と、(ニ)変数情報を格納する変数記憶部と、(ホ)ソースプログラム中に記載された変数を含む演算式データを読み込むと、変数記憶部から変数に対応する型番号を取得し、型番号に対応するデータ型情報を型情報記憶部から取得し、取得したデータ型情報を伴う演算式データを予めプロセッサに組み込まれた関数呼び出し命令若しくは固定小数点演算命令の機械語へ変換するコード生成手段とを備え、(ヘ)前記固定小数点のデータ型の定義文は、コンパイルオプションの指定によって定義されるコンパイラ装置であることを要旨とする。
本発明の第2の特徴は、(イ)コンパイルオプションの指定によってユーザにより定義された固定小数点のデータ型の定義文を解析して、解析の結果ユーザにより定義された固定小数点のデータ型の型番号、データ種類、符号、データサイズ、整数部のビット数、小数部のビット数を含むデータ型情報を取得してデータ型情報を型情報記憶部に格納し、(ロ)固定小数点のデータ型の変数宣言文を解析して、解析の結果得られた変数名と型番号を含む変数情報を取得して変数情報を変数記憶部に格納し、(ハ)ソースプログラム中に記載された変数を含む演算式データを読み込むと、変数記憶部から変数に対応する型番号を取得し、型番号に対応するデータ型情報を型情報記憶部から取得し、取得したデータ型情報を伴う演算式データを予めプロセッサに組み込まれた関数呼び出し命令若しくは固定小数点演算命令の機械語へ変換するコンパイル方法であることを要旨とする。
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであることに留意すべきである。
(コンパイラ装置)
本発明の実施の形態に係るコンパイラ装置100は、図2に示すように、記憶装置2及びCPU(セントラルプロセッシングユニット)3と、両者を接続するシステムバス4等から構成される。
記憶装置2は、作業領域21、ソースプログラム格納部22、コンパイラ部23及びオブジェクトコード格納部25等を備え、コンパイラ部23は、コンパイルプログラム部24、型情報記憶部26及び変数記憶部27等より構成される。
作業領域21は、演算処理実行中に使用する作業用の領域である。ソースプログラム格納部22は、C言語等の高水準言語プログラムで記述されたソースプログラムを格納する。コンパイルプログラム部24は、コンパイラ処理に使用するコンパイルプログラムを格納する。オブジェクトコード格納部25は、コンパイルされたオブジェクトコードを格納する。型情報記憶部26は、図7に示すような、型番号、データ種類、符号、サイズ、整数部、小数部等のデータ型に関する情報を格納する。変数記憶部27は、図8に示すような、変数名、型番号等の情報を格納する。各変数には型番号のインデックスを付し、図7の型情報記憶部26と情報をリンクさせてある。
CPU3は、演算実行部31、レジスタ32、命令デコーダ部33、制御部34及び条件コードレジスタ部35等より構成される。条件コードレジスタ部35とは、算術演算、論理演算、比較演算等を行う際に、その演算結果によって設定する条件コードを保持するレジスタであり、フラグレジスタ等を指す。条件コードとは、演算や比較等の命令を実行したとき、その結果(2数の大小関係等)を表すコードである。演算命令では演算結果により正、ゼロ、負を示すコードをセットし、比較命令ではオペランドの大小を示すコードをセットする。
CPU3は、コンパイルプログラム部24内のコンパイラ処理に使用するコンパイルプログラム、具体的には、図1の字句解析手段11、構文解析手段12、コード生成手段15、コード最適化手段16及びコード出力手段17等を適宜ロードし、演算実行することにより、コンパイル処理を実行する。
字句解析手段11は、ソースプログラムの字句解析を行うモジュールである。構文解析手段12は、字句解析結果が文法的に正しいかどうかを解析するモジュールであり、又、コンパイラ指示子等を構文解析して、データサイズ、整数部のビット数、小数部のビット数などのデータを得る。構文解析手段12は、データ型情報処理手段12a及び変数情報処理手段12bを備える。データ型情報処理手段12aは、ソースプログラム中に記載された固定小数点のデータ型の宣言文を解析して、定義された固定小数点のデータ型の型番号、変数のサイズ、整数部のビット数、小数部のビット数等の情報を型情報記憶部26に格納するモジュールである。変数情報処理手段12bは、例えば、図6のソースプログラム3行目に記載された固定小数点のデータ型の変数宣言文を解析して、変数名と型番号などの情報を図8の変数記憶部27に格納するモジュールである。
コード生成手段15は、変数記憶部27から得られる変数の型番号から、変数のサイズ、整数部のビット数、小数部のビット数などのデータ型情報を型情報記憶部26から得て、演算データを、コンパイラに組み込まれたライブラリ関数呼び出し命令またはプロセッサが有する固定小数点演算命令の機械語へ変換するモジュールである。
コード最適化手段16は、高速実行可能なように、生成するコードを変更するモジュールである。コード出力手段17は、最適化されたコードをオブジェクトコードとして出力するモジュールである。
(コンパイル方法)
本発明の実施の形態に係るコンパイラ装置は、図1の処理の矢印に沿った手順でソースプログラムを機械語のオブジェクトコード(オブジェクトプログラム)に変換する。
図1の手順においては、仮想的に設計された単純なCPUの機械語(中間コード)に変換することなく最適化を行い、機械語のオブジェクトコードに変換しているが、図10に示すように、最適化効率向上のために、一度中間コードに変換してからオブジェクトコードを作成しても良い。
以下に図6のソースプログラムを図1の手順に従ってコンパイルする際の具体的動作例を示す。
(a)字句解析手段11は、固定小数点のデータ型を宣言された図6のソースプログラムをコンパイラする時、図6の1行目に示されるコンパイラ指示子
#pragma fx_format short:1,10 long:2,20
を読み込み、宣言された固定小数点のデータ型を取得する。
(b)構文解析手段12のデータ型情報処理手段12aは、字句解析手段11より字句解析結果を得ると、図3に示すように、ステップS101として、#pragma指令であるか否かを判断する。#pragma指令で有る場合、ステップS102へ進む。#pragma指令ではない場合、ステップS109へ進み通常の構文解析を行う。
ステップS102においては、最初のトークンがfx_format、つまりフォーマットが固定であるか否かの判断をする。トークンがfx_formatで有る場合、ステップS103へ進み、トークンがfx_formatでない場合、他の#pragma指令としての処理を行う。
ステップS103においては、コンパイラ指示子よりデータサイズ、整数部のビット数、小数部のビット数を得る。ステップS104においては、データサイズがlongサイズか否かを判断する。longサイズであった場合ステップS105へ進み、shortサイズであった場合ステップS107へ進む。
ステップS105においては、longサイズのビット数と既登録のshortサイズのビット数を比較してlongサイズで定義されたビット数がshortサイズで定義されたビット数より大きいかの検査を行う。検査エラーが無ければ、ステップS106へ進む。
ステップS107においては、既登録のlongサイズのビット数とshortサイズのビット数を比較してshortサイズで定義されたビット数がlongサイズで定義されたビット数より小さいかの検査を行う。検査エラーが無ければ、ステップS106へ進む。検査エラーが出た場合ステップS108へ進み、エラーメッセージを出力する。
ステップS106において、図7の型情報記憶部26に読み込まれたコンパイル指示子のデータサイズ、整数部のビット数、小数部のビット数を登録する。変数の符号の有無は、符号の有無に対応して2通りの型番号が異なるデータ型情報を登録する。
(c)次に、構文解析手段12の変数情報処理手段12bの動作について図4を用いて説明する。ステップS201において、図6に示すソースプログラムの2行目の関数定義の開始を読み込むと、3行目に示す固定小数点のデータ型の変数宣言、
short _Accum x,y,z;
を読み込む。
ステップS202において、変数情報処理手段12bは、読み込んだ変数が固定小数点であるか否かを判断する。固定小数点で有る場合、ステップS203へ進む。固定小数点でない場合、ステップS206へ進み、他の構文解析であるとして処理を転送する。
ステップS203では、データサイズが既に図3のステップS101〜S110の手順で図7の型情報記憶部26に登録されたものであるかを調べる。データサイズが型情報記憶部26に登録されていれば、ステップS204へ進む。データサイズが型情報記憶部26に登録されていなければ、ステップS207へ進み、エラーメッセージを出力する。
ステップS204においては、型情報記憶部26より型番号を得る。更に、ステップS205において、変数名と型番号を、図8の変数記憶部27に登録する。
(d)コード生成手段15は、中間コード最適化結果または構文解析結果の「文」を受け取り、固定小数点のデータ型の変数を含む演算であるか否かを判断する。固定小数点のデータ型の変数を含む演算の場合は、演算式に用いる変数の型番号から、演算が固定小数点の変数を用いる演算であること、論理演算のような固定小数点の変数が適用できない演算でないこと等を確認し、変数記憶部27から得られる変数の型番号をインデックスとして、変数のサイズ、整数部のビット数、小数部のビット数等のデータ型情報を型情報記憶部26から得る。以下、図5を参照して詳細に説明する。
ステップS301にて、コード生成手段15は、中間コード最適化結果または構文解析結果の文が、固定小数点のデータ型の変数を含む演算であるか否かを判断する。これは例えば、図6のn行目に示すように、
x=y+z
という演算式記述がある場合、x,y,zのいずれかが固定小数点のデータ型であるか否かについて判断する。固定小数点のデータ型の変数を含む演算の場合は、ステップS302へ進み、コード生成手段15は、ステップS302にて、変数記憶部27から変数の型番号を得る。固定小数点のデータ型の変数を含む演算でない場合は、ステップS310へ進み、他のコード生成処理に転送する。
ステップS303においては、全ての変数の型番号が得られたかの判断を行う。全ての変数の型番号が得られた場合、ステップS304へ進む。全ての変数の型番号が得られていない場合、ステップS311へ進みエラーメッセージを出力する。
ステップS304においては、固定小数点の型番号の変数が有るか判断する。固定小数点の型番号の変数が有る場合、ステップS304へ進み、固定小数点の型番号の変数がない場合ステップS312へ進み、他の演算コードとして生成処理を行う。
ステップS305においては、この演算が固定小数点変数を処理可能か否かを判断する。固定小数点変数を処理可能である場合、ステップS306へ進み、
固定小数点変数の処理不可能である場合、ステップS313へ進みエラーメッセージを出力する。
ステップS306においては、ステップS302において得た変数の型番号を基に、型情報記憶部26よりデータの整数部と小数部のビット数を含む型情報を得る。
ステップS307においては、コンパイラに組み込まれたライブラリ関数呼び出し命令またはプロセッサが有する固定小数点演算命令の機械語へ変換する際に、固定小数点変数の演算を行う機械命令が有るかを判断する。固定小数点変数の演算を行う機械命令がない場合、ステップS308へ進み、引数渡しの機械命令、関数呼出の機械命令、関数戻り値を受け取る機械命令から成るコードを生成する。例えば図9に示すようなコンパイラに予め組み込まれている固定小数点演算ライブラリ(関数)を呼び出す手順のオブジェクトコードを生成する。
オブジェクトコードについて説明すると、最初の4つのmov命令が引数渡しの為の機械命令であり、R10とR11に固定小数点演算を構成するオペランドの値を格納する。また“1”は整数部、“10”は小数部のビット数である。次のjal命令によってライブラリ関数を呼び出し、最後のmov命令によって関数の戻り値を受ける。この手順によりオブジェクトコードが生成される。
固定小数点変数の演算を行う機械命令が有る場合、ステップS309へ進み、データのビット数をオペランドとして設定し、固定小数点演算命令のコードを生成する。コンパイル対象となるプロセッサが固定小数点のデータ型のデータの演算を行う機械命令を持っている場合は、その機械命令のフォーマットに従ってコードを生成する。例えば、
fadd R0,R1,N1,N2
(N1は、整数部のビット数、N2は、小数部のビット数)のように固定小数点のデータを構成するビット数を命令のオペランドに記述する機械命令の場合は、整数部が1ビットで小数部が10ビットであれば、
fadd R0,R1,1,10
と表記する機械命令のオブジェクトコードを生成する。
(e)この後、コード最適化手段16は、生成されたコードを受け取り、最適な配列に並び替える。コード出力手段17は、最適化されたコードをオブジェクトコードとして出力する。オブジェクトコードはオブジェクトコード格納部25に格納される。
尚、生成されたオブジェクトコードのファイルには、ユーザが定義した固定小数点のデータ型情報を次のようにオブジェクトコードの擬似命令として付加する。
.debug fx,s,1,10
.debug fx,l,2,20
(sは“short”を指し、lは“long”を指す)
一例として、デバッグ中に固定小数点型の変数xの値を参照する場合を考えてみる。参照するときの変数xのビットパターンが“0x20000000”のとき、その変数xの固定小数点型のビット数がデフォルトの場合は変数xは16384.0になり、ユーザに整数部1ビット、小数部10ビットと定義されていた場合は0.5になる。このように同じビットパターンであっても整数部と小数部のビット数により小数の値は変わるが、オブジェクトコードのファイルには、ユーザが定義した固定小数点のデータ型情報を参照することにより、デバッガは固定小数点のビット数を正確に知ることができる。

上述したように本発明の実施の形態によると、固定小数点データにデータ型情報及び変数情報を付することにより、ユーザが定義する固定小数点のデータ型の変数をプログラム中で他のデータ型の変数と同様に扱って記述できる。これにより、プログラムの読み取りが容易となり、プログラムの開発効率や保守性を向上させ、再利用を容易とさせる。更に、アプリケーションに適した固定小数点のデータ型のデータで処理するため、実行性能が良く、オブジェクトサイズが小さなプログラムを生成することが可能となる。
疑似命令を有するオブジェクトコード介してデバッガに固定小数点のビット数の情報を渡すことにより、より正確な固定小数点を得ることが出来る。オブジェクトコードにもデータ型情報を付加することで、デバッガは、その固定小数点データ型のデバック情報を基にして、ユーザに定義された固定小数点データ型の変数を正しく10進法捧持することが出来、デバッガでの解析作業の効率が向上する。
更に、各固定小数点データのオペラント型の、整数部及び小数部よりなる組み合わせパターンに制約を持たせずに演算処理を行うことが可能で、使用するメモリや命令を少なくし、結果使用メモリ量の削減や、演算の高速化を図ることが出来る。
例えば、shortサイズのデフォルトの固定小数点型の場合、整数部は16ビット、小数部は15ビットとなり、shortサイズのデフォルトの固定小数点型の変数一つに対して使用されるメモリは4バイトとなる。使用されるメモリは1バイト、2バイト、4バイト、8バイト単位で区切る必要があるため、整数部と小数部の合計サイズが15ビット以内に変更されれば2バイトのコードサイズ低下、7ビット以内に変更されれば3バイトのコードサイズ低下となる。longサイズのデフォルトの固定小数点型の場合、整数部は32ビット、小数部は31ビットとなり、longサイズのデフォルトの固定小数点型の変数一つに対して使用されるメモリは8バイトとなる。使用されるメモリは1バイト、2バイト、4バイト、8バイト単位で区切る必要があるため、整数部と小数部の合計サイズが31ビット以内に変更されれば4バイトのコードサイズ低下、15ビット以内に変更されれば6バイトのコードサイズ低下、7ビット以内に変更されれば7バイトのコードサイズ低下となる。
また、例えばlongサイズの固定小数点の加算をライブラリ関数で行う場合、64ビットの加算命令があれば固定小数点の加算を1命令で行うことができるが、64ビットの加算命令がない場合は64ビットの加算を行うライブラリ関数をさらに呼び出すことになる。言い換えると、longサイズの固定小数点の整数部と小数部のビット数を31ビット以下に変更すると、固定小数点の加算の中で64ビットの加算用のライブラリ関数を呼び出す必要がなくなるため、固定小数点の加算に対する速度があがる。現段階にて、実装しているコンパイラが対象としているプロセッサは64ビットの加算命令を持っていないため、longサイズのデフォルトの固定小数点の加算の時に64ビットの加算用ライブラリ関数を呼び出す。その際、固定小数点の加算にかかる命令数はデフォルトと、変更時とでは「デフォルト:49命令」、「整数部と小数部の合計が31ビット以内になるように変更した時:9命令」のように異なる。

(変更例1)
字句解析手段11は、固定小数点のデータ型を宣言された図6のソースプログラムをコンパイラする時、図6の1行目に示される、コンパイラ指示子によって宣言された固定小数点のデータ型を取得するとされているが、これはコンパイラ識別子によって宣言されるものに限られない。例えば、ユーザに、固定小数点のデータ型の変数を用いてソースプログラムを記述させる際、コンパイラ起動コマンドを、
cc −Xfx short:1,10 −Xfx long:2,20
のように入力させることによっても、コンパイルオプションで固定小数点のデータ型を定義することが可能である。
このようにコンパイルオプションで固定小数点のデータ型を定義した場合、定義される固定小数点のデータ型の変数をプログラム中で他のデータ型の変数と同様に扱って記述可能であるため、コンパイラ指示子によって宣言する場合と同様の効果を得ることが出来る。
更に、データ型の定義をコンパイルオプションで指定する場合は、ソースプログラムの書き換えを行うことなく定義が変更できるので、アプリケーションプログラムの実行結果の誤差でエラーとならない範囲でビット数が最小のデータ型の定義を求める作業を効率よく行うことが可能となる。
固定小数点のデータ型のビット数を少なくすると、実行速度があがり、オブジェクトコードが小さくなる反面、アプリケーションプログラムの実行結果に誤差が生じて精度が悪化することがある。しかしコンパイルオプションでデータ型の定義をすると、ビット数の最小値を求める場合に、データ型の定義を変更してコンパイル、リンク、シミュレーション、評価の作業を繰返し行い、定義を変更する都度ソースプログラムを書き換える作業などが不要となり、作業効率が向上する。
(変更例2)
変更例1のコンパイルオプションで定義する代わりに、固定小数点のデータ型を定義してユーザにソースプログラムを記述させる際、変数宣言時の固定小数点のデータ型を、
short _Accum(1,10)x;
long _Accum(2,20)y;
のよう入力させることによっても固定小数点のデータ型を定義することが可能である。
本発明の実施の形態と同様に、ユーザが定義する固定小数点のデータ型の変数をプログラム中で他のデータ型の変数と同様に扱って記述できるため、プログラムの読み取りが容易になり、プログラムの開発効率や保守性が向上し、再利用も容易となるとともに、アプリケーションに適した固定小数点のデータ型のデータで処理するため、実行性能が良く、オブジェクトサイズが小さなプログラムとすることが可能となる。
更に、固定小数点のデータ型の定義を変数の宣言と同時に行うことができるため、プログラムの必要な処理で必要とされる演算精度に応じて変数のデータ型を定義できるため、実行性能が良く、オブジェクトコードが小さなプログラムの開発効率が向上する。
(第2の実施の形態)
一般的にコンパイラは、演算を構成するオペランドの精度が違う場合は、より大きい精度に合わせる仕様となっている。例えば、浮動小数点演算の場合、一方のオペランドが単精度(float)、他方が倍精度(double)の場合は、演算前に単精度のオペランドを倍精度に変換する機械命令を生成するよう言語仕様で定められている。
上記を考慮し、本発明の第2の実施の形態では、コード生成手段15aが、固定小数点演算のオペランドのビット数を比較して結果が異なる場合には、より精度の大きいオペランドの固定小数点型に精度の小さい方のオペランドを変換する。尚、使用する装置及び処理手順等は図2及び図1と同様であるため説明を省略する。
コード生成手段15aの動作について、図11のフロー図を参照して説明する。尚、ステップS401〜ステップS407はステップS301〜S307の動作と、ステップS415〜S418はステップS310〜313の動作と同様であるため説明を省略する。
(a)ステップS407において、固定小数点変数の演算を行う機械命令が有ると判断された場合、ステップS408へ進み、ステップS408にて固定小数点演算のオペランドのビット数を比較して、オペランドの型の変換が必要であるか否かの判断を行う。例えば、固定小数点演算“a+b”において、オペランドaは整数部1ビット、小数部10ビット、オペランドbは整数部2ビット、小数部20ビットの場合、加算“+”前にオペランドaをオペランドbと同じ型に変換するほうが好ましいと判断できる。これはオペランドbの固定小数点型の方がオペランドaの固定小数点型よりも精度が高いためである。オペランドの型の変換が必要な場合はステップS410へ進み、オペランドの型の変換が不要な場合はステップS411へ進む。
(b)ステップS410においては、オペランド型変換のため、引数渡しの機械命令、関数呼び出しの機械命令、関数戻り値を受け取る機械命令から成るコードを生成する。更に、ステップS411において、演算を実行するため、引数渡しの機械命令、関数呼び出しの機械命令、関数戻り値を受け取る機械命令から成るコードを生成する。生成されたコードはコード最適化手段16へ渡される。
(c)ステップS407において、固定小数点変数の演算を行う機械命令が無いと判断された場合、ステップS412へ進み、ステップS412にて固定小数点演算のオペランドのビット数を比較して、オペランドの型の変換が必要であるか否かの判断を行う。変換が必要な場合はステップS413へ進み、変換が不要な場合はステップS414へ進む。
(d)ステップS413では、オペランドの型を変換するための機械命令から成るコードを生成する。ステップS414においては、データのビット数をオペランドとして設定し、固定小数点演算命令のコードを生成する。
尚、固定小数点演算のオペランドのビット数が異なるが、一方のオペランドが他方のオペランドよりも精度が高いとは言えない場合、例えば整数部は一方のオペランドが多いが、小数部は他方のオペランドが多い場合には、コンパイラ装置100が新しいビット数を持つ固定小数点型を生成し、演算前のその型へ変換する機械命令を生成する。例えば固定小数点演算“c+d”において、オペランドcは整数部1ビット、小数部20ビット、オペランドdは整数部2ビット、小数部10ビットの場合、コンパイラ装置100は整数部2ビット、小数部20ビットの固定小数点型を新たに用意し、加算“+”前にオペランドcとdを両方ともその型に変換する。
本発明の第2の実施の形態によると、ユーザによりビット数が変更されてもコンパイラ装置100は整数部と小数部のビット数から精度の高い方を選択し、必要に応じて演算前にデータ型変換を行う機械命令を生成することが出来る。更に、変換後のデータ型がユーザにより未定義の場合は、コンパイラ装置100自身がそのデータ型を生成することも可能である。
本発明の実施の形態に係るコンパイラ装置の構造図である。 本発明の実施の形態に係るコンパイラ装置の機能ブロック図である。 データ型情報処理手段が#pragma指令文を処理する動作を示すフローチャートである。 変数情報処理手段が固定小数点の変数定義の文を処理する動作を示すフローチャートである。 コード生成手段が固定小数点の演算を処理する動作を示すフローチャートである。 本発明の実施の形態において使用されるプログラムの一例である。 型情報記憶部内のデータ構成を示す図である。 変数記憶部内のデータ構成を示す図である。 本発明の実施の形態において使用される演算ライブラリプログラムの一例である。 本発明の実施の形態に係るコンパイラ装置の機能ブロック図である。 コード生成手段が固定小数点の演算を処理する動作を示すフローチャートである。
符号の説明
2…記憶装置
3…CPU
4…システムバス
11…字句解析手段
12…構文解析手段
12a…データ型情報処理手段
12b…変数情報処理手段
15,15a…コード生成手段
16…コード最適化手段
17…コード出力手段
20…小数部
21…作業領域
22…機械語プログラム格納部
23…ソースプログラム格納部
24…コンパイラ格納部
25…オブジェクトコード格納部
26…型情報記憶部
27…変数記憶部
31…演算実行部
32…レジスタ
33…命令デコーダ部
34…制御部
35…条件コードレジスタ部
100…コンパイラ装置

Claims (4)

  1. ーザにより定義された固定小数点のデータ型の定義文を解析して、解析の結果ユーザにより定義された前記固定小数点のデータ型の型番号、データ種類、符号、データサイズ、整数部のビット数、小数部のビット数を含むデータ型情報を取得するデータ型情報処理手段と、
    前記データ型情報を格納する型情報記憶部と、
    前記固定小数点のデータ型の変数宣言文を解析して、解析の結果得られた変数名と前記型番号を含む変数情報を得る変数情報処理手段と、
    前記変数情報を格納する変数記憶部と、
    前記ソースプログラム中に記載された前記変数を含む演算式データを読み込むと、前記変数記憶部から前記変数に対応する前記型番号を取得し、前記型番号に対応する前記データ型情報を前記型情報記憶部から取得し、取得した前記データ型情報を伴う前記演算式データを予めプロセッサに組み込まれた関数呼び出し命令若しくは固定小数点演算命令の機械語へ変換するコード生成手段とを備え、
    前記固定小数点のデータ型の定義文は、コンパイルオプションの指定によって定義されることを特徴とするコンパイラ装置。
  2. 前記コード生成手段は、前記固定小数点データ型の演算式を機械語に変換する前に、前記演算式に含まれる第1の固定小数点データと第2の固定小数点データの両者のオペランドの型を比較し、整数部は前記第1の固定小数点データのビット数が多く小数部は前記第2の固定小数点データのビット数が多い場合若しくは整数部は前記第2の固定小数点データのビット数が多く小数部は前記第1の固定小数点データのビット数が多い場合に、いずれかビット数が多い方の前記整数部及び前記小数部の精度に合わせた新たな固定小数点データのオペランド型を生成し、前記両者のオペランド型を前記新たな固定小数点データのオペランド型に変換することを特徴とする請求項1に記載のコンパイラ装置。
  3. 前記固定小数点のデータ型の定義文の情報は、コンパイルされたオブジェクトコードにデバッグの際に使用可能な情報として付加されることを特徴とする請求項1又は請求項2に記載のコンパイラ装置。
  4. コンパイルオプションの指定によってユーザにより定義された固定小数点のデータ型の定義文を解析して、解析の結果ユーザにより定義された前記固定小数点のデータ型の型番号、データ種類、符号、データサイズ、整数部のビット数、小数部のビット数を含むデータ型情報を取得して前記データ型情報を型情報記憶部に格納し、
    前記固定小数点のデータ型の変数宣言文を解析して、解析の結果得られた変数名と前記
    型番号を含む変数情報を取得して前記変数情報を変数記憶部に格納し、
    前記ソースプログラム中に記載された前記変数を含む演算式データを読み込むと、前記変数記憶部から前記変数に対応する前記型番号を取得し、前記型番号に対応する前記データ型情報を前記型情報記憶部から取得し、取得した前記データ型情報を伴う前記演算式データを予めプロセッサに組み込まれた関数呼び出し命令若しくは固定小数点演算命令の機械語へ変換する
    ことを特徴とするコンパイル方法。
JP2003376093A 2003-11-05 2003-11-05 コンパイラ装置及びコンパイル方法 Expired - Fee Related JP4157016B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003376093A JP4157016B2 (ja) 2003-11-05 2003-11-05 コンパイラ装置及びコンパイル方法
US10/747,210 US7325230B2 (en) 2003-11-05 2003-12-30 System for compiling source programs into machine language programs, a computer implemented method for the compiling and a computer program product for the compiling within the computer system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003376093A JP4157016B2 (ja) 2003-11-05 2003-11-05 コンパイラ装置及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2005141410A JP2005141410A (ja) 2005-06-02
JP4157016B2 true JP4157016B2 (ja) 2008-09-24

Family

ID=34544311

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003376093A Expired - Fee Related JP4157016B2 (ja) 2003-11-05 2003-11-05 コンパイラ装置及びコンパイル方法

Country Status (2)

Country Link
US (1) US7325230B2 (ja)
JP (1) JP4157016B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3847672B2 (ja) * 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
US7299225B2 (en) * 2002-11-26 2007-11-20 International Business Machines Corporation High performance predicate push-down for non-matching predicate operands
JP4157016B2 (ja) 2003-11-05 2008-09-24 株式会社東芝 コンパイラ装置及びコンパイル方法
US8559605B2 (en) * 2005-02-07 2013-10-15 Avaya Inc. Extensible diagnostic tool
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
JP4413804B2 (ja) 2005-03-24 2010-02-10 株式会社東芝 磁気冷凍材料及びその製造方法
JP4786268B2 (ja) * 2005-09-13 2011-10-05 株式会社東芝 コンパイル装置
WO2008061557A1 (en) * 2006-11-20 2008-05-29 Freescale Semiconductor, Inc. System, apparatus and method for translating data
US8601452B2 (en) * 2007-03-02 2013-12-03 Oracle International Corporation Compiler for JAVA and .NET
WO2008116106A2 (en) * 2007-03-20 2008-09-25 Viasat, Inc. Circuit card assembly including individually testable layers
KR101418969B1 (ko) * 2008-02-27 2014-08-13 삼성전자주식회사 프로세서 및 컴파일 방법
JP2009237762A (ja) * 2008-03-26 2009-10-15 Toshiba Corp プログラム解析装置、プログラム解析方法および解析プログラム
US8407681B2 (en) * 2008-05-23 2013-03-26 International Business Machines Corporation System and method for changing variables at runtime
CN101650648A (zh) * 2008-08-14 2010-02-17 鸿富锦精密工业(深圳)有限公司 动态调用功能模块的系统及方法
US8392895B2 (en) * 2009-01-13 2013-03-05 Mediatek Inc. Firmware extension method and firmware builder
JP2011028648A (ja) * 2009-07-28 2011-02-10 Renesas Electronics Corp オブジェクトコード生成システム、及びオブジェクトコード生成方法
CN103164220B (zh) * 2013-02-21 2016-03-02 北京控制工程研究所 一种星载计算机在轨维护所用浮点立即数的自主处理方法
US10055207B2 (en) * 2013-03-13 2018-08-21 Vmware, Inc. Persistent variables in programming languages
JP6137962B2 (ja) * 2013-06-24 2017-05-31 キヤノン株式会社 情報処理装置、情報処理方法及びプログラム
US9223921B1 (en) * 2014-11-13 2015-12-29 Xilinx, Inc. Compilation of HLL code with hardware accelerated functions
JP2017016503A (ja) * 2015-07-03 2017-01-19 富士通株式会社 コンパイラ、コンパイル装置及びコンパイル方法
US10592213B2 (en) * 2016-10-19 2020-03-17 Intel Corporation Preprocessing tensor operations for optimal compilation
CN110333870B (zh) * 2019-06-28 2023-04-18 潍柴动力股份有限公司 Simulink模型变量分配的处理方法、装置及设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07134645A (ja) 1993-11-10 1995-05-23 Kofu Nippon Denki Kk 情報処理用条件コード生成装置
JPH103390A (ja) 1996-06-17 1998-01-06 Hitachi Ltd テーブル管理システムとその作成方法
JP4319706B2 (ja) 1998-04-10 2009-08-26 株式会社日立製作所 プログラム開発支援ツール
US7039906B1 (en) * 2000-09-29 2006-05-02 International Business Machines Corporation Compiler for enabling multiple signed independent data elements per register
WO2003032157A1 (en) 2001-09-18 2003-04-17 Asahi Kasei Kabushiki Kaisha Compiler
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP4157016B2 (ja) 2003-11-05 2008-09-24 株式会社東芝 コンパイラ装置及びコンパイル方法

Also Published As

Publication number Publication date
US7325230B2 (en) 2008-01-29
US20050097523A1 (en) 2005-05-05
JP2005141410A (ja) 2005-06-02

Similar Documents

Publication Publication Date Title
JP4157016B2 (ja) コンパイラ装置及びコンパイル方法
US6247174B1 (en) Optimization of source code with embedded machine instructions
US7657878B2 (en) Compiler, method of compiling and program development tool
KR101150003B1 (ko) 소프트웨어 개발 툴 생성 방법
US7530061B2 (en) Programmatic access to the widest mode floating-point arithmetic supported by a processor
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US9081586B2 (en) Systems and methods for customizing optimization/transformation/ processing strategies
US20030140338A1 (en) Method, apparatus and article for generation of debugging information
JP2007079844A (ja) コンパイル装置
CN107003885B (zh) 用于低级别可组合高性能计算库的技术
JPH0769832B2 (ja) プログラミング演算の効果と従属性とを表現する方法及び装置
Larsen et al. Tensorflow graph optimizations
Husár et al. Automatic C compiler generation from architecture description language ISAC
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
CN112416313B (zh) 支持大整数数据类型和运算符的编译方法
JP2011129102A (ja) エンディアン変換のための方法および装置
Leupers LANCE: AC compiler platform for embedded processors
JP7295469B2 (ja) 関数生成プログラム、関数生成方法、及び情報処理装置
Cardoso et al. Enriching MATLAB with aspect-oriented features for developing embedded systems
Dillig et al. SAIL: Static analysis intermediate language with a two-level representation
Jinturkar et al. Programming the Sandbridge Multithreaded Processor
JP2004013190A (ja) ソフトウエア開発環境、シミュレータ及び記録媒体
Nobre et al. Hardware/Software Compilation
Helm Annotating Deeply Embedded Languages

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070301

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070918

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071024

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20071211

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080206

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20080215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080311

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080507

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: 20080701

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080710

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110718

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110718

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120718

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130718

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees