JP2002024029A - コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体 - Google Patents

コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体

Info

Publication number
JP2002024029A
JP2002024029A JP2000210412A JP2000210412A JP2002024029A JP 2002024029 A JP2002024029 A JP 2002024029A JP 2000210412 A JP2000210412 A JP 2000210412A JP 2000210412 A JP2000210412 A JP 2000210412A JP 2002024029 A JP2002024029 A JP 2002024029A
Authority
JP
Japan
Prior art keywords
function
built
definition
compiler
attribute
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.)
Abandoned
Application number
JP2000210412A
Other languages
English (en)
Inventor
Seiji Hayashida
聖司 林田
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 JP2000210412A priority Critical patent/JP2002024029A/ja
Priority to US09/902,133 priority patent/US20020019973A1/en
Publication of JP2002024029A publication Critical patent/JP2002024029A/ja
Abandoned legal-status Critical Current

Links

Classifications

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

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)

Abstract

(57)【要約】 【課題】 組込関数(intrinsics関数)をコンパイラの
起動時又は動作中に定義可能として、コンパイラの拡張
を容易にする。 【解決手段】 ソースプログラム1を入力としオブジェ
クトコード3を生成するコンパイラ10であって、ソー
スプログラム1内に記述された命令をトークンに分割す
る字句解析部11と、トークンが文法に適しているかを
解析する構文解析部12と、ソースプログラム1を機械
語へ変換するコード生成部15と、組込関数定義属性を
記憶する組込関数定義属性記憶手段を有し、構文解析部
12が、組込関数の定義と属性を解析し、組込関数定義
属性記憶手段に記憶する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、C言語などの高級
言語を機械語に変換(コンパイル)するコンパイラ、コ
ンパイル方法及びコンパイルプログラムを記録したコン
ピュータ読み取り可能な記録媒体に関し、特に組込関数
(intrinsics関数)をコンパイラの起動時又は動作中に
任意に追加定義可能とする技術に関する。
【0002】
【従来の技術】従来、例えば、mov命令(mov Rn, Rm :
レジスタRmの内容をレジスタRnに代入する)に対応する
回路構成をプロセッサが有している場合でも、コンパイ
ラがmov命令に対応していない場合には、ユーザである
プログラム作成者はmov命令を使った高級言語によるプ
ログラムを作成することができない。このような場合、
プログラム作成者は使用するプロセッサの構造がmov命
令に対応しているにも関わらず、"mov Rn, Rm"と記述す
る代わりに、同機能を表すためにはlw(load word),sw(s
tore word)命令を用いてプログラムを記述しなければな
らない。すなわち、プロセッサはmov命令に対応する回
路構成を持ちながら、lw,swなどの複数の命令を実行し
なければならない。
【0003】また、単一命令で複数データを並列処理す
るマルチメディア命令のように、既存命令の組み合わせ
では実現できないような命令に対応していないコンパイ
ラを使用した場合には、プログラム作成者はプロセッサ
特有の機能を利用することができない。
【0004】従って、プロセッサ提供側は、ユーザがプ
ロセッサを効率よく動作可能とするために、プロセッサ
特有の仕様(プロセッサ・アーキテクチャおよび命令セ
ット)に対応したコンパイラを提供しなければならな
い。
【0005】プロセッサ特有の仕様(プロセッサ・アー
キテクチャおよび命令セット)にコンパイラを対応させ
る手法としては、intrinsics関数(プログラム言語の処
理系が予め用意している関数であり、対象となるプロセ
ッサ特有の高級言語による命令記述を機械語にコンパイ
ルさせるための組込関数)を用いる手法が存在する。
【0006】プロセッサ及びコンパイラの提供側は、対
象となるプロセッサに応じてintrinsics関数をコンパイ
ラ内部に予め組み込んでおくことにより、プログラム作
成者がプロセッサ特有の命令動作を高級言語にて記述す
ることを可能にし、機械語にコンパイルすることを可能
にしている。
【0007】従来、intrinsics関数はコンパイラ内部に
組み込み済みであるため、ユーザが独自にintrinsics関
数を定義することができなかった。仕様(プロセッサ・
アーキテクチャおよび命令セット)が変化しないプロセ
ッサ用のコンパイラにおいては、この方法で問題ない。
【0008】
【発明が解決しようとする課題】しかしながら、ユーザ
による仕様(プロセッサ・アーキテクチャおよび命令セ
ット)拡張可能なプロセッサ用のコンパイラでは、ユー
ザの仕様(プロセッサ・アーキテクチャおよび命令セッ
ト)拡張に応じた専用のコンパイラが必要となることか
ら、ユーザが独自にintrinsics関数をカスタマイズでき
る必要がある。
【0009】そこで、本発明は、intrinsics関数をコン
パイラの起動時および動作中に任意に追加定義すること
を可能にするコンパイラ、コンパイル方法及びコンパイ
ルプログラムを記録したコンピュータ読み取り可能な記
録媒体を提供することを目的とする。
【0010】
【課題を解決するための手段】上記課題を解決するた
め、本発明の特徴は、ソースプログラム中あるいはヘッ
ダファイル中の組込関数の定義及び属性を読み取り、前
記組込関数の定義及び属性に基づいて前記ソースプログ
ラムを機械語に変換することにある。
【0011】また、本発明の他の特徴は、ソースプログ
ラムを入力としオブジェクトコードを生成するコンパイ
ラであって、前記ソースプログラム内に記述された命令
をトークンに分割する字句解析部と、前記トークンが文
法に適しているかを解析し、これらトークンの組み合わ
せが組込関数及び属性を定義しているかを解析する構文
解析部と、前記構文解析部で解析された組込関数の定義
及び属性を記憶する組込関数定義属性記憶手段と、前記
組込関数の定義及び属性に基づいて、前記ソースプログ
ラムを機械語へ変換するコード生成部とを有することに
ある。
【0012】また、組込関数の定義には、仮引数型と識
別子名が含まれる。
【0013】本発明の特徴によれば、ソースプログラム
中の組込関数(intrinsics関数)の定義と属性を解析し
て、それを記憶手段に記憶することによって、コンパイ
ラの起動時及び動作時にintrinsics関数を任意に追加定
義可能となる。
【0014】
【発明の実施の形態】以下、図面に基づいて本発明の実
施の形態を説明する。以下の図面の記載において、同一
又は類似の部分には同一又は類似の符号が付してある。
【0015】(1)第1実施形態 本実施形態では、mov Rn,Rm(機能:レジスタRmの内容
をレジスタRnに代入する。コードサイズ:2バイト)と
いう命令に関してintrinsics関数を定義する。以下、定
義方法、使用方法及びコンパイラでの実装方法に分けて
記述する。
【0016】(1−1)intrinsics関数の定義方法 独自の予約語(_asm,_reg_dest,_reg_src)と#pragma c
ustomを使用して、intrinsics関数を定義する。mov R
n,Rmの定義は、以下のように記述される。
【0017】void_asm mov(int_reg_dest,int_reg_sr
c);この定義方法は、_asmという独自キーワードを追
加した以外には、ISO/JIS C言語規格(ISO
/IEC9899:1990)の関数宣言に従ってい
る。この_asmを付加することにより、通常の関数宣言で
はなく、intrinsics関数の定義であることを示してい
る。関数名movにより、mov命令のintrinsics関数の定義
であることを示す。_reg_dest,_reg_srcは、仮引数の識
別子名であるので、ISO/JIS C言語規格上は、
任意の識別子名が記述できる。仮引数は関数の定義で使
われ、それぞれが呼び出されるときに実引数で置き換え
られる。intrinsics関数を定義する場合は、これらの特
別な予約語を用いることにより、mov命令の動作につい
ての情報をコンパイラに伝達する。_reg_destはレジス
タのデスティネーションのオペランド、_reg_srcはレジ
スタのソースのオペランドであることを示す。本実施形
態では、_asm,_reg_dest,_reg_srcを予約語として使
用したが、ISO/JIS C言語規格の予約語以外の
語句であれば、他の語句をintrinsics関数定義用予約語
として使用することができる。
【0018】次に、#pragma customは、mov命令の場合
は、以下のようになる。
【0019】#pragma custom mov 2byte #pragmaは、ISO/JIS C言語規格に規定されて
いる前処理指令のひとつであり、処理系によって独自の
拡張が許されている。本実施形態では、#pragma custom
によって、intrinsics関数の色々な属性の定義を行う。
この記述では、mov命令の命令長が2バイトであること
を定義している。本実施形態では、customという語句を
使用したが、これは任意の語句で置き換え可能である。
【0020】(1−2)intrinsics関数の使用方法 下記のC言語プログラムのように、intrinsics関数を利
用する前に、intrinsics関数の定義を行う。そして、通
常の関数呼び出しの記述方法で、intrinsics関数を利用
する。
【0021】<C言語プログラム> /*intrinsics関数の定義*/ void_asm mov(int_reg_dest,int_reg_src); #pragma custom mov 2byte void test(){ int a,b; /*intrinsics関数の利用*/ mov(a,b); } コンパイラは、予め定義されたintrinsics関数の定義内
容に従って、コンパイルを行い、以下のようなアセンブ
ラファイルを生成する。指定されたとおり、mov命令が
生成されている。
【0022】<生成されたアセンブラファイル> _test: mov$1,$0 ret (1−3)intrinsics関数の実装方法 図1及び図2にコンパイラの処理の流れを示す。コンパ
イラは、高級言語で記述されたソースプログラムを入力
とし、オブジェクトコードを出力とするソフトウェアプ
ログラムである。
【0023】図1は中間コードを生成するコンパイラの
構成を示す図である。図1に示すように、コンパイラ1
0aは、まず字句解析部11による字句解析を行う。
「字句解析」では、ソースプログラム1に記述された命
令文を意味のある最小の単位であるトークンに分割する
処理を行う。
【0024】次に、構文解析部12による構文解析を行
う。「構文解析」では、直前の字句解析によって変数や
記号など意味のある最小単位であるトークンに分割され
た命令文が、それぞれの言語で定められた文法に適して
いるかどうかをチェックする。
【0025】そして、中間コード生成部13による中間
コードの生成、中間コード最適化部14による中間コー
ドの最適化を経て、コード生成部15aによるコード生
成を行う。「コード生成」では、それまでに行われたソ
ースプログラム1の最小単位への分割、構文エラーのチ
ェックなどの結果を受けて、コード・ジェネレータの機
能を用いてソースプログラム1を、アセンブラ形式や2
進数形式などの機械語へ変換する処理が行われる。
【0026】さらに、コード最適化部16aによるコー
ド最適化を行う。「コード最適化」では、直前のコード
生成部により変換された機械語に、実際の処理効率を向
上させるための変更が加えられる。
【0027】そして、コード出力部17aからオブジェ
クトコード3を生成する。
【0028】コンパイラ10aが中間コード生成を行っ
ているのは、構文解析の直後にコード生成をすると、生
成されるプログラム・サイズが非常に大きくなり、変換
処理が効率よく行われない場合があるため、ソースプロ
グラム1aと等価で、しかも簡潔な言語である中間コー
ドに変換してから翻訳処理を行うからである。中間コー
ド生成及び中間コード最適化を省略してもオブジェクト
コードは得られる。
【0029】図2は中間コードを生成しないコンパイラ
の構成を示す図である。図2に示すように、コンパイラ
10bは、字句解析部11、構文解析部12、コード生
成部15b、コード最適化部16b、コード出力部17
bを経て、ソースプログラム1aからオブジェクトコー
ド3を生成する。
【0030】図1又は図2に示すいずれのコンパイラで
あっても、「構文解析」において、intrinsics関数の定
義、使用を識別する必要がある。このための処理の流れ
を図3に示す。また、属性情報処理の流れを図4に示
す。
【0031】図3は、intrinsics関数の定義の構文解析
処理の流れを示す図である。図3に示すように、まず"_
asm"が付加されているかをチェックする(ステップS3
0)。"_asm"が付加されていなければ、通常の関数の宣
言であると認識する(ステップS31)。"_asm"が付加
されている場合は、intrinsics関数の定義の処理をする
(ステップS32)。まず、仮引数の型情報、識別子の
名前の解釈を行う(ステップS33)。仮引数の型の指
定方法等に間違いがある場合は、エラーメッセージを出
力する(ステップS34)。仮引数の型の指定方法等に
間違いが無い場合は、intrinsics関数の定義内容を記号
表へ登録する(ステップS35)。記号表とは、定義し
たintrinsics関数やその引数をサーチするために使用す
る表である。
【0032】図4は、属性情報処理の流れを示す図であ
る。図4に示すように、"#pragma"の次の字句が"custo
m"かチェックする(ステップS40)。"custom"でない
場合は、他の#pragma指令の処理を行う(ステップS4
1)。"custom"である場合は、"#pragma custom"の処理
を行う(ステップS42)。指定された識別子(例え
ば、mov)が、intrinsics関数として記号表に登録され
ているかチェックする(ステップS43)。記号表に登
録されていない場合は、エラーメッセージを出力する
(ステップS44)。記号表に登録されている場合は、
指定された属性情報の解釈を行う(ステップS45)。
指定された属性(字句)が解釈できない場合は、エラー
メッセージを出力する(ステップS46)。指定された
属性(字句、例えば2byte)が解釈できる場合は、intri
nsics関数の情報に属性情報を付加する(ステップS4
7)。
【0033】本第1実施形態によれば、"_asm"が付加さ
れているとintrinsics関数の定義の処理が開始され、仮
引数の型情報や識別子名に誤りがなければ、intrinsics
関数の情報として記号表に登録される。また、"#pragm
a"の次の字句が"custom"であれば、"#pragma custom"の
処理が開始され、指定された識別子が記号表に登録され
ていれば、指定された情報(例えば、2byte)が属性情報
として登録される。これにより、intrinsics関数がコン
パイラの起動時及び動作中に定義可能となる。
【0034】図5に、intrinsics関数を使用した場合の
コンパイラの処理の流れを示す。図5に示すように、関
数コールの処理が開始されると、まず使用している関数
名を記号表から探す(ステップS50)。そして、記号
表に登録されているか、intrinsics関数かをチェックす
る(ステップS51)。記号表に登録されているが、in
trinsics関数ではない場合は、通常の関数の処理を行う
(ステップS52)。記号表に登録されているintrinsi
cs関数である場合は、指定された引数(実引数)とintr
insics関数宣言時の引数(仮引数)の情報をチェックす
る(ステップS53)。さらに、実引数と仮引数で、数
及び型が一致するかをチェックする(ステップS5
4)。数又は型が一致しない場合は、エラーメッセージ
を出力する(ステップS55)。数及び型が一致する場
合は、intrinsics関数としてコード(中間コード又はア
センブラコード)を生成する(ステップS56)。
【0035】これによってユーザが定義したintrinsics
関数を用いてコンパイルすることが可能となる。
【0036】(2)第2実施形態 第1実施形態ではmov命令の実装方法を説明したが、第
2実施形態では汎用的に使用する場合について述べる。
【0037】(2−1−1)仮引数の識別子に用いる予
約語 第1実施形態で示した"_reg_src"と"_reg_dest"以外
に、"_reg_modify","_mem_read","_mem_write","_mem_m
odify","_imm","_label"を独自の予約語として追加する
ことにより、代表的な機械命令はintrinsics関数として
記述可能となる。
【0038】"_reg_modify"は、ソースであり、かつデ
スティネーションでもあるレジスタのオペランドを示
す。"_mem_read"はメモリ・リードのオペランドを示
す。"_mem_write"はメモリ・ライトのオペランドを示
す。"_mem_modify"はメモリ・リードと演算結果のメモ
リ・ライトのオペランドを示す。"_imm"は即値のオペラ
ンドを示す。"_label"は分岐先のラベル名を指定するオ
ペランドを示す。
【0039】(2−1−2)#pragma customで指定でき
る属性 第1実施形態で示した"mov"の属性(2byte)以外に、"rea
d","write","modify","interlock","freeze","uncondit
ion","call","return"の属性を定義することにより、代
表的な機械命令が記述可能となる。"read"はintrinsics
関数の定義で指定したオペランド以外に、ソースとして
使用するオペランドを指定する。"write"はintrinsics
関数の定義で指定したオペランド以外に、デスティネー
ションとして使用するオペランドを指定する。"modify"
はintrinsics関数の定義で指定したオペランド以外に、
ソースとデスティネーションとして使用するオペランド
を指定する。
【0040】たとえば、東芝マイクロプロセッサTX3
9のmul命令の仕様では、mul命令は指定したオペランド
以外にlowレジスタ($lo)をデスティネーションとする。
この場合には、"#pragma custom mul write $lo"と定義
する。
【0041】"read","write","modify"を指定すること
により、intrinsics関数が使用する資源の全ての情報を
設定することができ、コンパイラによる機械命令の生成
が可能となる。
【0042】"interlock"は、コンパイラに命令スケジ
ューリングの必要性を指示する。連続する命令(例え
ば、命令Aと命令B)が、共通のオペランドを使用する
ためにパイプラインがストールしてしまう場合に、スト
ールの原因となっているオペランドを使用しない命令
(例えば、命令C)を、共通のオペランドを使用する連
続する命令(命令Aと命令B)の間に挿入することによ
り、ストールを防止する。
【0043】"freeze"は、このintrinsics関数の前後の
命令の順番を変更しないことをコンパイラに指示する。
【0044】オペランドとして"_label"を指定した場
合、その命令が条件分岐命令か、無条件分岐命令か判別
できない。このため、条件分岐命令を既定値(default)
とし、無条件分岐命令を指定する場合には"unconditio
n"を属性として指定する。無条件分岐命令を既定値(def
ault)とし、条件分岐命令を指定する場合には"conditio
n"を属性として指定する。
【0045】"return"は、関数コールからの復帰命令を
intrinsics関数として定義した場合に使用する。
【0046】(2−2)次に、コプロセッサ命令を定義
する方法を説明する。C言語プログラムは以下のように
記述する。
【0047】 void_asm cpmov (int _cop_dest,int _cop_src); #pragma custom cpmov cop 2byte コプロセッサ命令であることを示すために、#pragma cu
stomの属性に"cop"を追加する。これは、指定した関数
(例えば、"cpmov")が、コプロセッサ命令であること
を示す。
【0048】また、仮引数の識別子に用いる予約語とし
て、"_cop_src","_cop_dest","_cop_modify"を追加す
る。"_cop_src"は、コプロセッサ・レジスタのソース・
オペランドであることを示す。"_cop_dest"はコプロセ
ッサ・レジスタのデスティネーション・オペランドであ
ることを示す。"_cop_modify"はコプロセッサ・レジス
タのソース・オペランドでありかつデスティネーション
・オペランドであることを示す。
【0049】(2−3)次に、VLIW(Very Long In
struction Word)やスーパースカラ型のプロセッサのコ
ンパイラのために、intrinsics関数に対してスケジュー
リング属性を設定する方法を説明する。VLIWやスー
パースカラでは、同時に演算できる命令に制限がある。
このため、各命令に対して、どの演算器で実行できるか
を設定する必要がある。この情報を#pragma customの属
性として設定することにより、VLIWやスーパースカ
ラ型のプロセッサに対応することができる。
【0050】(2−4)また、intrinsics関数の第1引
数が、"_reg_dest"または"_cop_dest"の場合は、関数の
返却値として、設定することができる。このとき第2引
数以降が存在する場合は、その第2引数以降は一つずつ
繰り上がる。例えば、void _asm mov(int _reg_dest,in
t _reg_src);は、 int _asm mov(int _reg_src); と同様の内容である。この場合、代入先を"="演算子で
指定することができるようになり、C言語らしくなるた
め、可読性が向上する。
【0051】第1実施形態と同様の内容のプログラム
が、以下のように記述される。
【0052】 本第2実施形態によれば、コプロセッサ、VLIW又は
スーパースカラ型プロセッサのintrinsics関数がコンパ
イラの起動時及び動作中に定義可能となる。
【0053】また、代入先を"="演算子で指定すること
ができるようになり、C言語らしくなるため、可読性が
向上する。
【0054】さらに、(1)ある命令(例えば、mov命
令)が、「通常の関数」として実装されている場合と、
機械命令として実装されているので「intrinsics関数」
として定義される場合、の両方に対応するために、「in
trinsics関数の引数と返り値の形式」を「通常の関数の
引数と返り値の形式」と同じにする、(2)コンパイラ
が持っている条件コンパイルを利用し、起動時に指定す
るコマンドライン・オプションによって、「intrinsics
関数」として定義するか、「通常の関数」として定義す
るかを選択する、ことにより、ソースプログラムを記述
する際に、ある命令(例えば、mov命令)が「通常の関
数」として実装されているか、「intrinsics関数」とし
て定義されているかを、プログラマーが意識する必要が
なくなる。このため、プログラミングが容易となり、作
成したプログラムの再利用性も向上する。
【0055】なお、条件コンパイルとは、Cコンパイラ
では、#ifdef,#else,#endif として実装されており、コ
ンパイラ起動時に指定する マクロ定義のコマンドライ
ン・オプションによって、コンパイルする内容を変更す
ることができる機能のことである。
【0056】条件コンパイルの例を以下に示す。
【0057】 #ifdef __USE_MOV__ /* マクロ __USE_MOV__ が定義された場合の処理 */ /* intrinsics関数 */ int __asm mov(int __reg_src); #pragma custom mov 2byte #else /* マクロ __USE_MOV__ が定義されない場合の処理 */ /* 通常の関数 */ int mov(int src); /* この関数は、mov命令と同様の処理を行う */ #endif /* 実際の使用 */ void test() { int i,j; /* intrinsics関数がどうかに関係なく使用できる */ i = mov(j); } (3)第3実施形態 第1、2実施形態においては#pragma customも用いて定
義したが、第3実施形態では#pragma customを用いない
で定義する方法を説明する。
【0058】#pragma customで指定した属性を関数の定
義中に含める場合は、さらに独自の予約語を追加するこ
とになる。この場合、複数の予約語を追加する方法と1
つの予約語を追加する方法とがある。
【0059】(3−1)複数の予約語を追加する場合 属性毎に、予約語(_2byte,_read,_write,_modify,_inte
rlock,_freeze,_uncondition,_call,_return等)を追加
することにより、#pragma customがなくても属性を設定
することが可能となる。例えば、第1実施形態のmov命
令は、void_asm_2byte mov(int_reg_dest,int_reg_sr
c);と定義することができる。
【0060】(3−2)1つの予約語を追加する場合 属性毎に予約語を追加するのでなく、1つの予約語を追
加することによって、定義することもできる。"_attr"
という予約語を定義した場合、第1実施形態のmov命令
は、void_asm_attr(2byte) mov(int_reg_dest,int_reg_
src);と定義することができる。この場合、"_attr"の構
文分析時に、指定された属性をチェックする。予約語が
少ない方が、プログラミング上の制約が少なくなるため
好ましい。
【0061】なお、上記第1〜3実施形態ではintrinsi
cs関数に必要な情報を、コンパイルするソースファイル
中に記述したが、別ファイルからintrinsics関数に必要
な情報を読み込むことも可能である。図6に、intrinsi
cs関数の情報を別ファイルとする場合の処理の流れの概
略を示す。図6に示すように、ソースファイル1bとin
trinsics関数情報ファイル60をコンパイラ10に入力
し、オブジェクトコード3を得る。
【0062】この場合は、第1〜3実施形態で示したよ
うな予約語などに拘束されることはないので、intrinsi
cs関数に必要な情報を任意の書式で記述することが可能
となる。
【0063】
【発明の効果】上記の如く、本発明によれば、intrinsi
cs関数の動作に必要な情報をコンパイラの外部から設定
できるようにすることにより、コンパイラを容易に拡張
することができる。このため、ユーザがコンパイラをカ
スタマイズすることもできる。
【0064】また、intrinsics関数の定義を、コンパイ
ルの対象であるソースファイル内に混在させることによ
り、以下の効果も得られる。
【0065】1)intrinsics関数の定義は、通常の関数
定義にいくつかの予約語を追加しただけなので、ユーザ
が容易に理解することができる。
【0066】2)ユーザに、C言語のヘッダファイルと
して提供できるため、リリースが容易になる。
【0067】3)intrinsics関数の第1引数が、ディス
ティネーションの場合は、関数定義を変更することによ
り、ソースファイル中のintrinsics関数名(例えば、mo
v関数)と同じ名称の命令(例えば、mov命令)を使用す
る部分を変更しなくてすむ。これにより、プログラムの
再利用性が向上する。
【図面の簡単な説明】
【図1】中間コードを生成するコンパイラの構成を示す
図である。
【図2】中間コードを生成しないコンパイラの構成を示
す図である。
【図3】intrinsics関数の定義処理の流れを示す図であ
る。
【図4】属性情報処理の流れを示す図である。
【図5】intrinsics関数を使用した場合のコンパイラの
処理の流れを示す図である。
【図6】intrinsics関数の情報を別ファイルとする場合
の処理の流れの概略を示す図である。
【符号の説明】
1 ソースプログラム 3 オブジェクトコード 10 コンパイラ 11 字句解析部 12 構文解析部

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラム中あるいはヘッダファ
    イル中の組込関数の定義及び属性を読み取り、前記組込
    関数の定義及び属性に基づいて前記ソースプログラムを
    機械語に変換することを特徴とするコンパイラ。
  2. 【請求項2】 ソースプログラムを入力としオブジェク
    トコードを生成するコンパイラであって、 前記ソースプログラム内に記述された命令をトークンに
    分割する字句解析部と、 前記トークンが文法に適しているかを解析し、これらト
    ークンの組み合わせが組込関数及び属性を定義している
    かを解析する構文解析部と、 前記構文解析部で解析された組込関数の定義及び属性を
    記憶する組込関数定義属性記憶手段と、 前記組込関数の定義及び属性に基づいて、前記ソースプ
    ログラムを機械語へ変換するコード生成部とを有するこ
    とを特徴とするコンパイラ。
  3. 【請求項3】 前記組込関数の定義に、仮引数型と識別
    指名が含まれることを特徴とする請求項1又は2記載の
    コンパイラ。
  4. 【請求項4】 コンパイラの起動時または動作中に、組
    込み関数の定義が開始する旨の宣言を検出する工程と、 前記組込み関数の定義を登録する工程と、 前記組込み関数の属性に関する記述が開始する旨の宣言
    を検出する工程と、 前記組込み関数の属性を登録する工程とを少なくとも含
    むことを特徴とするコンパイル方法。
  5. 【請求項5】 コンパイラの起動時または動作中に、組
    込み関数の定義及び組込み関数の属性に関する記述が開
    始する旨の宣言を検出する工程と、 前記組込み関数の定義を登録する工程と、 前記組込み関数の属性を登録する工程とを少なくとも含
    むことを特徴とするコンパイル方法。
  6. 【請求項6】 前記組込み関数の定義に、仮引数の型、
    識別子名が含まれることを特徴とする請求項4又は5記
    載のコンパイル方法。
  7. 【請求項7】 コンパイラの起動時または動作中に、組
    込み関数の定義が開始する旨の宣言を検出するステップ
    と、 前記組込み関数の定義を登録するステップと、 前記組込み関数の属性に関する記述が開始する旨の宣言
    を検出するステップと、 前記組込み関数の属性を登録するステップとを少なくと
    も含むことを特徴とするコンパイルプログラムを記録し
    たコンピュータ読み取り可能な記録媒体。
  8. 【請求項8】 コンパイラの起動時または動作中に、組
    込み関数の定義及び組込み関数の属性に関する記述が開
    始する旨の宣言を検出するステップと、 前記組込み関数の定義を登録するステップと、 前記組込み関数の属性を登録するステップとを少なくと
    も含むことを特徴とするコンパイルプログラムを記録し
    たコンピュータ読み取り可能な記録媒体。
  9. 【請求項9】 前記組込み関数の定義に、仮引数の型、
    識別子名が含まれることを特徴とする請求項7又は8記
    載のコンパイルプログラムを記録したコンピュータ読み
    取り可能な記録媒体。
JP2000210412A 2000-07-11 2000-07-11 コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体 Abandoned JP2002024029A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000210412A JP2002024029A (ja) 2000-07-11 2000-07-11 コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US09/902,133 US20020019973A1 (en) 2000-07-11 2001-07-11 Compiler and method for compiling easily adaptable to processor specifications

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000210412A JP2002024029A (ja) 2000-07-11 2000-07-11 コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体

Publications (1)

Publication Number Publication Date
JP2002024029A true JP2002024029A (ja) 2002-01-25

Family

ID=18706686

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000210412A Abandoned JP2002024029A (ja) 2000-07-11 2000-07-11 コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体

Country Status (2)

Country Link
US (1) US20020019973A1 (ja)
JP (1) JP2002024029A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005122506A (ja) * 2003-10-17 2005-05-12 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2006243838A (ja) * 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
WO2009084570A1 (ja) * 2007-12-28 2009-07-09 Nec Corporation コンパイラ組み込み関数追加装置
US7657878B2 (en) 2003-03-26 2010-02-02 Kabushiki Kaisha Toshiba Compiler, method of compiling and program development tool
CN106843808A (zh) * 2017-01-06 2017-06-13 福建升腾资讯有限公司 一种兼容不同格式类型的指令解析方法
CN110908668A (zh) * 2019-11-21 2020-03-24 深圳市新威尔电子有限公司 用于编译电池检测系统脚本程序的编译器
CN113625652A (zh) * 2021-07-29 2021-11-09 广东工贸职业技术学院 一种数控内嵌plc中间文件处理及译码执行方法

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7027806B2 (en) * 2001-07-26 2006-04-11 Kyocera Wireless, Corp. System and method for field downloading a wireless communications device software code section
US7197302B2 (en) 2001-07-26 2007-03-27 Kyocera Wireless Corp. System and method for interchangeable modular hardware components for wireless communication devices
US9554268B2 (en) 2001-07-26 2017-01-24 Kyocera Corporation System and method for updating persistent data in a wireless communications device
US7200389B2 (en) * 2001-07-26 2007-04-03 Kyocera Wireless Corp. Dynamic interface software for wireless communication devices
US7143407B2 (en) * 2001-07-26 2006-11-28 Kyocera Wireless Corp. System and method for executing wireless communications device dynamic instruction sets
US7159214B2 (en) 2001-07-26 2007-01-02 Kyocera Wireless Corp. System and method for compacting field upgradeable wireless communication device software code sections
US7184759B2 (en) * 2001-07-26 2007-02-27 Kyocera Wireless Corp. Modular software components for wireless communication devices
US7386846B2 (en) * 2001-07-26 2008-06-10 Kyocera Wireless Corp. System and method for the management of wireless communications device system software downloads in the field
US7184793B2 (en) * 2001-07-26 2007-02-27 Kyocera Wireless Corp. System and method for over the air area code update
US7328007B2 (en) * 2001-07-26 2008-02-05 Kyocera Wireless Corp. System and method for organizing wireless communication device system software
US6961537B2 (en) * 2001-08-10 2005-11-01 Kyocera Wireless Corp. System and method for peer-to-peer handset communication
US7254386B2 (en) 2001-08-10 2007-08-07 Kyocera Wireless Corp. System and method for improved security in handset reprovisioning and reprogramming
JP2003091432A (ja) * 2001-09-19 2003-03-28 Nec Corp ソフトウェア評価システム、ソフトウェア評価ツール
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
US8429603B2 (en) 2009-03-25 2013-04-23 International Business Machines Corporation Virtual typing executables
US8615740B2 (en) * 2009-03-25 2013-12-24 International Business Machines Corporation Self-fixing executables using virtual function types
US9619214B2 (en) * 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10922485B2 (en) * 2019-07-10 2021-02-16 FinancialForce.com, Inc. Platform interpretation of user input converted into standardized input

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61276032A (ja) * 1985-05-31 1986-12-06 Matsushita Electric Ind Co Ltd 情報処理装置
US5355492A (en) * 1991-11-05 1994-10-11 Thinking Machines Corporation System for compiling parallel communications instructions including their embedded data transfer information
US5625822A (en) * 1992-06-26 1997-04-29 Digital Equipment Corporation Using sorting to do matchup in smart recompilation
JPH0721033A (ja) * 1993-07-07 1995-01-24 Nec Corp 言語処理装置及びその方法
JP3190773B2 (ja) * 1993-09-30 2001-07-23 日本電気株式会社 言語処理プログラムのコンパイル処理方法
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US6397380B1 (en) * 1994-10-21 2002-05-28 International Business Machines Corporation Computer-program compilers comprising a program augmentation capability
US6083282A (en) * 1994-10-21 2000-07-04 Microsoft Corporation Cross-project namespace compiler and method
US5721929A (en) * 1995-10-06 1998-02-24 Electronic Data Systems Corporation Method for extending a fourth generation programming language
US6064818A (en) * 1997-04-10 2000-05-16 International Business Machines Corporation Straight path optimization for compilers
US5978587A (en) * 1997-11-13 1999-11-02 Unisys Corp. Method for propagating source code locations into objects in a compiler
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
JP3278603B2 (ja) * 1998-01-12 2002-04-30 エヌイーシーマイクロシステム株式会社 コンパイル装置、コンパイラの最適化方法及びコンパイラの最適化手順を記録した記録媒体
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JPH11232147A (ja) * 1998-02-16 1999-08-27 Toshiba Corp パワーエスティメーション装置、パワーエスティメーション方法、及びパワーエスティメーションプログラムを記録した機械読み取り可能な記録媒体
US6629313B1 (en) * 2000-06-29 2003-09-30 Microsoft Corporation In-line database access statements without a pre-compiler
US20040153995A1 (en) * 2003-02-03 2004-08-05 Jean-Pierre Polonovski Software development tool

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657878B2 (en) 2003-03-26 2010-02-02 Kabushiki Kaisha Toshiba Compiler, method of compiling and program development tool
JP2005122506A (ja) * 2003-10-17 2005-05-12 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2006243838A (ja) * 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
US7917899B2 (en) 2005-02-28 2011-03-29 Kabushiki Kaisha Toshiba Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
WO2009084570A1 (ja) * 2007-12-28 2009-07-09 Nec Corporation コンパイラ組み込み関数追加装置
CN106843808A (zh) * 2017-01-06 2017-06-13 福建升腾资讯有限公司 一种兼容不同格式类型的指令解析方法
CN110908668A (zh) * 2019-11-21 2020-03-24 深圳市新威尔电子有限公司 用于编译电池检测系统脚本程序的编译器
CN113625652A (zh) * 2021-07-29 2021-11-09 广东工贸职业技术学院 一种数控内嵌plc中间文件处理及译码执行方法
CN113625652B (zh) * 2021-07-29 2023-04-25 广东工贸职业技术学院 一种数控内嵌plc中间文件处理及译码执行方法

Also Published As

Publication number Publication date
US20020019973A1 (en) 2002-02-14

Similar Documents

Publication Publication Date Title
JP2002024029A (ja) コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
US6247174B1 (en) Optimization of source code with embedded machine instructions
US7313773B1 (en) Method and device for simulator generation based on semantic to behavioral translation
EP1280056B1 (en) Generation of debugging information
US7530061B2 (en) Programmatic access to the widest mode floating-point arithmetic supported by a processor
US20070226720A1 (en) System and Method for Efficiently Passing Information Between Compiler and Post-Compile-Time Software
US7917899B2 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US7254809B2 (en) Compilation of unified parallel C-language programs
Ebner et al. Generalized instruction selection using SSA-graphs
KR20040077410A (ko) 마크업 내부에서 명시적으로 서브클래스를 정의하고이용하는 시스템 및 방법
US20110202906A1 (en) Compiling method and compiling program
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
Leupers LANCE: AC compiler platform for embedded processors
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
JP2004038279A (ja) コンパイラ、演算処理システム及び演算処理方法
Schordan Source-to-source analysis with SATIrE-an example revisited
CN118069142B (zh) 编译优化方法、装置、电子设备及存储介质
Brandner Compiler backend generation from structural processor models
US8015555B2 (en) Automaton loop construct (ALC) and method of performing program optimization using the ALC
JP2007114934A (ja) コンパイラシステム
JPH0981411A (ja) コンパイラ
Holloway et al. A User’s Guide to the Optimization Programming Interface
Louden et al. Compilers and Interpreters.
CN118069142A (zh) 编译优化方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060522

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060530

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20060728