JP3801545B2 - コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 - Google Patents

コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 Download PDF

Info

Publication number
JP3801545B2
JP3801545B2 JP2002226682A JP2002226682A JP3801545B2 JP 3801545 B2 JP3801545 B2 JP 3801545B2 JP 2002226682 A JP2002226682 A JP 2002226682A JP 2002226682 A JP2002226682 A JP 2002226682A JP 3801545 B2 JP3801545 B2 JP 3801545B2
Authority
JP
Japan
Prior art keywords
machine language
language instruction
function
instruction
register
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 - Lifetime
Application number
JP2002226682A
Other languages
English (en)
Other versions
JP2004070531A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2002226682A priority Critical patent/JP3801545B2/ja
Priority to US10/630,705 priority patent/US7284241B2/en
Priority to EP07013451A priority patent/EP1837758A3/en
Priority to EP03016683A priority patent/EP1398695A3/en
Priority to EP07013450A priority patent/EP1837757A3/en
Priority to CNB031522564A priority patent/CN1312582C/zh
Priority to CNA2007100885255A priority patent/CN101196825A/zh
Publication of JP2004070531A publication Critical patent/JP2004070531A/ja
Application granted granted Critical
Publication of JP3801545B2 publication Critical patent/JP3801545B2/ja
Priority to US11/790,215 priority patent/US8151254B2/en
Anticipated expiration legal-status Critical
Expired - Lifetime 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
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Description

【0001】
【発明の属する技術分野】
本発明は、C++言語等の高級言語で記述されたソースプログラムを機械語プログラムに変換するコンパイラに関し、特に、コンパイラによる最適化に関する。
【0002】
【従来の技術】
近年のプロセッサの高機能化に伴い、プロセッサが備える高い機能を有効に引き出すことが可能な性能の高いコンパイラが求められている。つまり、ターゲットプロセッサが備える高機能な専用命令を効率的に生成するコンパイラが求められている。
【0003】
例えば、デジタル信号処理等のメディア処理に必要とされる各種固定小数点フォーマットでの演算命令を実行するプロセッサや、SIMD(Single Instruction Multiple Data)型の命令を実行する高機能なプロセッサが開発されているが、そのようなプロセッサをターゲットとするコンパイラは、各種固定小数点フォーマットでの演算命令やSIMD型命令を効率的に生成することによってコードサイズ及び実行速度の点で最適化を図ることが求められる。
【0004】
【発明が解決しようとする課題】
しかしながら、従来のコンパイラは、C++言語等の高級言語で記述されたソースプログラムに対しては、必ずしも、プロセッサが備える高機能な専用命令を効率的に生成しているとは言えない。そのために、コードサイズと実行速度の点で厳しい条件が求められるメディア処理等のアプリケーション開発においては、ユーザは、クリティカルな箇所については、アセンブラ命令で記述せざるを得ないのが現状である。ところが、アセンブラ命令でのプログラミングは、C++言語等の高級言語を用いた開発に比べ、開発工数が大きくなるだけでなく、保守性や移植性についても著しく劣るという問題がある。
【0005】
また、従来のコンパイラでは、プロセッサが備える高機能な専用命令を生成する等の最適化処理は、コンパイラ自身に組み込まれている。つまり、ターゲットプロセッサの特徴を有効に活用して最適化を図る処理モジュールは、コンパイラ自身に組み込まれ、一体化されている。そのために、コンパイラの機能拡張を図る場合や、ターゲットプロセッサの仕様が変更された場合等においては、コンパイラ全体の再構築が必要とされ、その度に、コンパイラのバージョンアップ等を繰り返さなければならないという問題がある。
【0006】
そこで、本発明は、このような状況に鑑みてなされたものであり、プロセッサが備える高機能な専用命令を効率的に生成することができるコンパイラを提供することを目的とする。
また、コンパイラ自身のバージョンアップを頻繁に繰り返すことなく、機能拡張等の改良を行っていくことが可能なコンパイラ等を提供することをも目的とする。
【0007】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るコンパイラ用プログラムは、ソースプログラムを機械語プログラムに翻訳するコンパイラ用のプログラムであって、対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を含み、前記プログラムはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものであることを特徴とする。
【0008】
例えば、本発明は、ソースプログラムにインクルードされるヘッダファイルと、そのソースプログラムを機械語プログラムに翻訳するコンパイラとから構成されるプログラムであって、前記ヘッダファイルには、データとメソッドとからなるクラスが定義され、前記コンパイラはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるプログラムである。
【0009】
ここで、前記クラスは、固定小数点型を定義するクラスであり、前記検出サブステップでは、前記固定小数点型のデータを使用している中間コードを検出してもよい。そして、前記クラスのメソッドは、前記固定小数点型のデータを対象とする演算子を定義するメソッドであり、前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換えてもよい。
【0010】
また、本発明に係るコンパイラ用プログラムは、ソースプログラムにインクルードされるヘッダファイルと、そのソースプログラムを機械語プログラムに翻訳するコンパイラとから構成されるプログラムであって、前記ヘッダファイルには、関数が定義され、前記コンパイラはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものであることを特徴とする。
【0011】
なお、本発明は、このようなコンパイラ用プログラムとして実現することができるだけでなく、このようなプログラムに含まれるステップを手段とするコンパイラ装置として実現したり、このような特徴的なコンパイラあるいはヘッダファイルが記録されたコンピュータ読み取り可能な記録媒体として実現することもできる。そして、そのようなプログラムやデータファイルは、CD−ROM等の記録媒体やインターネット等の伝送媒体を介して広く流通させることができるのは言うまでもない。
【0012】
【発明の実施の形態】
以下、本発明に係るコンパイラの実施の形態について図面を用いて詳細に説明する。
本実施の形態におけるコンパイラは、C/C++言語等の高級言語で記述されたソースプログラムを特定のプロセッサ(ターゲット)が実行できる機械語プログラムに翻訳するクロスコンパイラであり、生成する機械語プログラムのコードサイズや実行時間に関する最適化の指示をきめ細かく指定することができるという特徴を有する。
【0013】
[プロセッサ]
まず、本実施の形態におけるコンパイラの対象となるプロセッサの一例について、図1〜図36を用いて説明する。
本実施の形態におけるコンパイラの対象となるプロセッサは、例えば、通常のマイコンに比べて実行可能な命令の並列性が高く、AVメディア系信号処理技術分野をターゲットとして開発された汎用プロセッサである。
【0014】
図1は、そのようなプロセッサの概略ブロック図の一例である。このプロセッサ1は、32ビットを基本語長(ワード)とする演算装置であり、命令制御部10、デコード部20、レジスタファイル30、演算部40、I/F部50、命令メモリ部60、データメモリ部70、拡張レジスタ部80及びI/Oインターフェース部90から構成される。演算部40は、SIMD型命令の演算を実行する算術論理・比較演算器41〜43、乗算・積和演算器44、バレルシフタ45、除算器46及び変換器47からなる。乗算・積和演算器44は、ビット精度を落とさないように、最長で65ビットで累算する。また、乗算・積和演算器44は、算術論理・比較演算器41〜43と同様、SIMD型命令の実行が可能である。更に、このプロセッサ1は、算術論理・比較演算命令が最大3並列実行可能である。
【0015】
図2は、算術論理・比較演算器41〜43の概略図を示す。算術論理・比較演算器41〜43それぞれは、ALU部41a、飽和処理部41b及びフラグ部41cから構成される。ALU部41aは、算術演算器、論理演算器、比較器、TST器からなる。対応する演算データのビット幅は、8ビット(バイト。このときは、演算器を4並列で使用)、16ビット(ハーフワード。このときは、演算器を2並列で使用)、32ビットである(ワード。このときは、全演算器で32ビットデータ処理)。更に算術演算結果に対しては、フラグ部41c等により、オーバーフローの検出とコンディションフラグの生成が行われる。各演算器、比較器、TST器の結果は、算術右シフト、飽和処理部41bによる飽和、最大・最小値検出、絶対値生成処理が行われる。
【0016】
図3は、バレルシフタ45の構成を示すブロック図である。バレルシフタ45は、セレクタ45a、45b、上位バレルシフタ45c、下位バレルシフタ45d及び飽和処理部45eから構成され、データの算術シフト(2の補数体系のシフト)または、論理シフト(符号なしシフト)を実行する。通常は、32ビットもしくは、64ビットのデータを入出力としている。レジスタ30a、30bに格納された被シフトデータに対して、別のレジスタまたは即値でシフト量が指定される。データは、左63ビット〜右63ビットの算術または論理シフトが行われ、入力ビット長で出力される。
【0017】
また、バレルシフタ45は、SIMD型命令に対して、8、16、32、64ビットのデータをシフトすることができる。例えば、8ビットデータのシフトを4並列で処理することができる。
【0018】
算術シフトは、2の補数体系のシフトであり、加算や減算時の小数点の位置合わせや、2のべき乗の乗算(2、2の2乗、2の(−1)乗、2の(−2)乗倍など)等のために行われる。
【0019】
図4は、変換器47の構成を示すブロック図である。変換器47は、飽和ブロック(SAT)47a、BSEQブロック47b、MSKGENブロック47c、VSUMBブロック47、BCNTブロック47e及びILブロック47fから構成される。
【0020】
飽和ブロック(SAT)47aは、入力データに対する飽和処理を行う。32ビットデータを飽和処理するブロックを2つ持つことにより、2並列のSIMD型命令をサポートする。
【0021】
BSEQブロック47bは、MSBから連続する0か1をカウントする。
MSKGENブロック47cは、指定されたビット区間を1、それ以外を0として出力する。
VSUMBブロック47dは、入力データを指定されたビット幅に区切り、その総和を出力する。
BCNTブロック47eは、入力データで1となっているビットの数をカウントする。
ILブロック47fは、入力データを指定されたビット幅に区切り、各データブロックを入れ換えた値を出力する。
【0022】
図5は、除算器46の構成を示すブロック図である。除算器46は、被除数を64ビット、除数を32ビットとし、商と剰余を32ビットずつ出力する。商と剰余を求めるまでに34サイクルを必要とする。符号付き、符号なし、両方のデータを扱うことが可能である。ただし、被除数と除数において符号の有無の設定は共通とする。その他、オーバーフローフラグ、0除算フラグを出力する機能を有する。
【0023】
図6は、乗算・積和演算器44の構成を示すブロック図である。乗算・積和演算器44は、2つの32ビット乗算器(MUL)44a、44b、3つの64ビット加算器(Adder)44c〜44e、セレクタ44f及び飽和処理部(Saturation)44gから構成され、以下の乗算、積和演算を行う。
・32×32ビットのsignedの乗算、積和、積差演算
・32×32ビットのunsignedの乗算
・16×16ビットの2並列のsignedの乗算、積和、積差演算
・32×16ビットの2並列のsignedの乗算、積和、積差演算
これらの演算を整数、固定小数点フォーマット(h1、h2、w1、w2)のデータに対して行う。また、これらの演算に対し、丸め、飽和を行う。
【0024】
図7は、命令制御部10の構成を示すブロック図である。命令制御部10は、命令キャッシュ10a、アドレス管理部10b、命令バッファ10c〜10e、ジャンプバッファ10f及びローテーション部(rotation)10gから構成され、通常時及び分岐時の命令供給を行う。128ビットの命令バッファを3つ(命令バッファ10c〜10e)持つことにより、最大並列実行数に対応している。分岐処理に関しては、分岐実行前に、ジャンプバッファ10f等を介して、後述するTARレジスタに予め分岐先アドレスを格納する(settar命令)。TARレジスタに格納された分岐先アドレスを使用して、分岐を行う。
【0025】
なお、本実施の形態におけるコンパイラの対象となるプロセッサ1は、例えば、VLIWアーキテクチャを持つプロセッサである。ここで、VLIWアーキテクチャとは、1つの命令語中に複数の命令(ロード、ストア、演算、分岐など)を格納し、それらを全て同時に実行するアーキテクチャである。プログラマは、並列実行可能な命令を1つの発行グループとして記述することによって、その発行グループを並列処理させることができる。本明細書では、発行グループの区切りを";;"で示す。以下に表記例を示す。
(例1)
mov r1, 0x23;;
この命令記述は、命令movのみを実行することを意味する。
(例2)
mov r1, 0x38
add r0, r1, r2
sub r3, r1, r2;;
これらの命令記述は、命令mov、add、subを3並列で実行することを意味する。
命令制御部10は、発行グループを識別し、デコード部20に送る。デコード部20では、発行グループの命令を解析し、必要な資源を制御する。
【0026】
次に、このようなプロセッサ1が備えるレジスタについて説明する。
プロセッサ1のレジスタセットは、以下の表1に示される通りである。
【表1】
Figure 0003801545
【0027】
また、このようなプロセッサ1のフラグセット(後述する条件フラグレジスタ等で管理されるフラグ)は、以下の表2に示される通りである。
【表2】
Figure 0003801545
【0028】
図8は、汎用レジスタ(R0〜R31)30aの構造を示す図である。汎用レジスタ(R0〜R31)30aは、実行対象となっているタスクのコンテキストの一部を構成し、データまたはアドレスを格納する32ビットのレジスタ群である。なお、汎用レジスタR30およびR31は、それぞれグローバルポインタ、スタックポインタとして、ハードウェアが使用する。
【0029】
図9は、リンクレジスタ(LR)30cの構造を示す図である。なお、このリンクレジスタ(LR)30cと関連して、このプロセッサ1は、図示されていない退避レジスタ(SVR)も備える。リンクレジスタ(LR)30cは、関数コール時のリターンアドレスを格納する32ビットのレジスタである。なお、退避レジスタ(SVR)は、関数コール時の条件フラグレジスタのコンディションフラグ(CFR.CF)を退避する16ビットのレジスタである。リンクレジスタ(LR)30cは、後述する分岐レジスタ(TAR)と同様に、ループ高速化にも使用される。下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0030】
例えば、call(brl,jmpl)命令を実行した場合には、このプロセッサ1は、リンクレジスタ(LR)30cに戻りアドレスを退避し、退避レジスタ(SVR)にコンディションフラグ(CFR.CF)を退避する。また、jmp命令を実行した場合には、リンクレジスタ(LR)30cから戻りアドレス(分岐先アドレス)を取り出し、プログラムカウンタ(PC)を復帰させる。さらに、ret(jmpr)命令を実行した場合には、リンクレジスタ(LR)30cから分岐先アドレス(戻りアドレス)を取り出し、プログラムカウンタ(PC)に格納(復帰)する。さらに、退避レジスタ(SVR)からコンディションフラグを取り出し、条件フラグレジスタ(CFR)32のコンディションンフラグ領域CFR.CFに格納(復帰)する。
【0031】
図10は、分岐レジスタ(TAR)30dの構造を示す図である。分岐レジスタ(TAR)30dは、分岐ターゲットアドレスを格納する32ビットのレジスタである。主に、ループの高速化に用いられる。下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0032】
例えば、jmp,jloop命令を実行した場合には、プロセッサ1は、分岐レジスタ(TAR)30dから分岐先アドレスを取り出し、プログラムカウンタ(PC)に格納する。分岐レジスタ(TAR)30dに格納されたアドレスの命令が分岐用命令バッファに格納されている場合は、分岐ペナルティが0になる。分岐レジスタ(TAR)30dにループの先頭アドレスを格納しておくことでループを高速化することができる。
【0033】
図11は、プログラム状態レジスタ(PSR)31の構造を示す図である。プログラム状態レジスタ(PSR)31は、実行対象となっているタスクのコンテキストの一部を構成し、以下に示されるプロセッサ状態情報を格納する32ビットのレジスタである。
【0034】
ビットSWE:VMP(Virtual Multi-Processor)のLP(Logical Processor)切替えイネーブルを示す。「0」はLP切替え不許可を示し、「1」はLP切替え許可を示す。
【0035】
ビットFXP:固定小数点モードを示す。「0」はモード0(MSBとMSBから1ビット目との間に小数点があるものとして演算をするモード。以下、「_1系」ともいう。)を示し、「1」はモード1(MSBから1ビット目ととMSBから2ビット目との間に小数点があるものとして演算をするモード。_2系」ともいう。)を示す。
【0036】
ビットIH:割込み処理フラグであり、マスカブル割込み処理中であることを示す。「1」は割込み処理中であることを示し、「0」は割込み処理中でないことを示す。割込みが発生すると自動的にセットされる。rti命令で割込みから復帰したところが、他の割込み処理中かプログラム処理中であるのかを見分けるために使用される。
【0037】
ビットEH:エラーまたはNMIを処理中であることを示すフラグである。「0」はエラー/NMI割込み処理中でないことを示し、「1」はエラー/NMI割込み処理中であることを示す。EH=1のとき、非同期エラーまたはNMIが発生した場合は、マスクされる。また、VMPイネーブル時はVMPのプレート切り替えがマスクされる。
【0038】
ビットPL[1:0]:特権レベルを示す。「00」は特権レベル0、つまり、プロセッサアブストラクションレベルを示し、「01」は特権レベル1(設定できない)を示し、「10」は特権レベル2、つまり、システムプログラムレベルを示し、「11」は特権レベル3、つまり、ユーザプログラムレベルを示す。
【0039】
ビットLPIE3:LP固有割込み3イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットLPIE2:LP固有割込み2イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットLPIE1:LP固有割込み1イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットLPIE0:LP固有割込み0イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットAEE:ミスアライメント例外イネーブルを示す。「1」はミスアライメント例外許可を示し、「0」はミスアライメント例外不許可を示す。
ビットIE:レベル割込みイネーブルを示す。「1」はレベル割込み許可を示し、「0」はレベル割込み不許可を示す。
ビットIM[7:0]:割込みマスクを示す。レベル0〜7まで定義され、個々のレベルでマスクすることができる。レベル0が最も高いレベルとなる。IMによりマスクされていない割込み要求のうち最も高いレベルを持った割込み要求のみがプロセッサ1に受理される。割込み要求を受理すると受理したレベル以下のレベルはハードウェアで自動的にマスクされる。IM[0]はレベル0のマスクであり、IM[1]はレベル1のマスクであり、IM[2]はレベル2のマスクであり、IM[3]はレベル3のマスクであり、IM[4]はレベル4のマスクであり、IM[5]はレベル5のマスクであり、IM[6]はレベル6のマスクであり、IM[7]はレベル7のマスクである。reserved:予約ビットを示す。常に0が読み出される。書き込む時は0を書き込む必要がある。
【0040】
図12は、条件フラグレジスタ(CFR)32の構造を示す図である。条件フラグレジスタ(CFR)32は、実行対象となっているタスクのコンテキストの一部を構成する32ビットのレジスタであり、コンディションフラグ(条件フラグ)、オペレーションフラグ(演算フラグ)、ベクタコンディションフラグ(ベクタ条件フラグ)、演算命令用ビット位置指定フィールド、SIMDデータアライン情報フィールドから構成される。
【0041】
ビットALN[1:0]:アラインモードを示す。valnvc命令のアラインモードを設定する。
ビットBPO[4:0]:ビットポジションを示す。ビット位置指定の必要な命令で使用する。
ビットVC0〜VC3:ベクタ条件フラグである。LSB側のバイトあるいはハーフワードから順にVC0に対応し、MSB側がVC3に対応する。
ビットOVS:オーバーフローフラグ(サマリー)である。飽和発生やオーバーフロー検出でセットされる。検出されなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
ビットCAS:キャリーフラグ(サマリー)である。addc命令でキャリーまたはsubc命令でボローが発生した場合セットされる。addc命令でキャリーもしくはsubc命令でボローが発生しなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
ビットC0〜C7:コンディションフラグである。条件付き実行命令における条件(TRUE/FALSE)を示す。条件付き命令の条件とビットC0〜C7との対応は、命令に含まれるプレディケート・ビットによって決定される。なお、フラグC7は常に値が1である。フラグC7へのFALSE条件の反映(0書き込み)は無視される。
reserved:予約ビットを示す。常に0が読み出される。書き込む時は0を書き込む必要がある。
【0042】
図13は、アキュムレータ(M0,M1)30bの構造を示す図である。このアキュムレータ(M0,M1)30bは、実行対象となっているタスクのコンテキストの一部を構成し、図13(a)に示される32ビットレジスタMH0-MH1(乗除算・積和用レジスタ(上位32ビット))と、図13(b)に示される32ビットレジスタML0-ML1乗除算・積和用レジスタ(下位32ビット)とからなる。
【0043】
レジスタMH0-MHは、乗算命令では結果の上位32ビットを格納するのに使用される。積和命令ではアキュムレータの上位32ビットとして使用される。また、ビットストリームを取り扱う場合に汎用レジスタと組み合わせて使用することができる。レジスタML0-ML1は、乗算命令では結果の下位32ビットを格納するのに使用される。積和命令ではアキュムレータの下位32ビットとして使用される。
【0044】
図14は、プログラムカウンタ(PC)33の構造を示す図である。このプログラムカウンタ(PC)33は、実行対象となっているタスクのコンテキストの一部を構成し、実行中の命令のアドレスを保持する32ビットのカウンタである。下位1ビットは常に0が格納される。
【0045】
図15は、PC退避用レジスタ(IPC)34の構造を示す図である。このPC退避用レジスタ(IPC)34は、実行対象となっているタスクのコンテキストの一部を構成する32ビットのレジスタであり、下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0046】
図16は、PSR退避用レジスタ(IPSR)35の構造を示す図である。このPSR退避用レジスタ(IPSR)35は、実行対象となっているタスクのコンテキストの一部を構成し、プログラム状態レジスタ(PSR)31を退避するための32ビットのレジスタであり、プログラム状態レジスタ(PSR)31の予約ビットに対応する部分は常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0047】
次に、本実施の形態におけるコンパイラの対象となるプロセッサ1のメモリ空間について説明する。例えば、プロセッサ1では、4GBのリニアなメモリ空間を32分割し、128MB単位の空間に命令SRAM(Static RAM)とデータSRAMが割り当てられる。この128MBの空間を1ブロックとして、SAR(SRAM Area Register)にアクセスしたいブロックを設定する。アクセスされたアドレスがSARで設定された空間である場合は、直接命令SRAM/データSRAMに対してアクセスを行うが、SARで設定された空間でない場合は、バスコントローラ(BCU)に対してアクセス要求を出する。BCUにはオン・チップ・メモリ(OCM)、外部メモリ、外部デバイス、I/Oポート等が接続されており、それらのデバイスに対して読み書きを行うことができる。
【0048】
図17は、本実施の形態におけるコンパイラの対象となるプロセッサ1のパイプライン動作を示すタイミング図である。このプロセッサ1は、本図に示されるように、例えば、基本的に命令フェッチ、命令割り当て(ディスパッチ)、デコード、実行、書き込みの5段パイプラインで構成されている。
【0049】
図18は、このようなプロセッサ1による命令実行時の各パイプライン動作を示すタイミング図である。命令フェッチステージでは、プログラムカウンタ(PC)33で指定されるアドレスの命令メモリをアクセスし、命令を命令バッファ10c〜10e等に転送する。命令割り当てステージでは、分岐系命令に対する分岐先アドレス情報の出力、入力レジスタ制御信号の出力、可変長命令の割り当てを行い、命令をインストラクションレジスタ(IR)に転送する。デコードステージでは、IRをデコード部20に入力し、演算器制御信号、メモリアクセス信号を出力する。実行ステージでは、演算を実行、演算結果をデータメモリか汎用レジスタ(R0〜R31)30aに出力する。書き込みステージでは、データ転送、演算結果を汎用レジスタに格納する。
【0050】
本実施の形態におけるコンパイラの対象となるプロセッサ1は、例えば、VLIWアーキテクチャにより上記の処理を最高3並列で行うことができる。したがって、図18に示された動作については、本プロセッサ1は、図19に示されるタイミングで並列に実行する。
【0051】
次に、以上のように構成されたプロセッサ1の命令セットの例について説明する。
以下の表3〜表5は、本実施の形態におけるコンパイラの対象となるプロセッサ1が実行する命令をカテゴリー別に分類した表である。
【表3】
Figure 0003801545
【表4】
Figure 0003801545
【表5】
Figure 0003801545
【0052】
なお、表中の「演算器」は、その命令が使用する演算器を示す。演算器の略号の意味は次の通りである。つまり、「A」はALU命令、「B」は分岐命令、「C」は変換命令、「DIV」は除算命令、「DBGM」はデバッグ命令、「M」はメモリアクセス命令、「S1」、「S2」はシフト命令、「X1」、「X2」は乗算命令を意味する。
【0053】
図20は、このようなプロセッサ1が実行する命令のフォーマットの例を示す図である。そのフォーマットには、図20(a)に示される16ビット命令フォーマットと、図20(b)に示される32ビット命令フォーマットとがある。
【0054】
なお、図中における略号の意味は次の通りである。つまり、「E」はエンドビット(並列実行の境界)、「F」はフォーマットビット(00、01、10:16ビット命令フォーマット、11:32ビット命令フォーマット)、「P」はプレディケート(実行条件:8個の条件フラグC0〜C7のいずれかを指定)、「OP」はオペコードフィールド、「R」はレジスタフィールド、「I」は即値フィールド、「D」ディスプースメントフィールドを意味する。なお、「E」フィールドはVLIWに特有のもので、E=0の命令は次の命令と並列に実行される。つまり、「E」フィールドによって並列度が可変のVLIWを実現している。
【0055】
図21〜図36は、プロセッサ1が実行する命令の概略的な機能を説明する図である。つまり、図21は、カテゴリー「ALUadd(加算)系」に属する命令を説明する図であり、図22は、カテゴリー「ALUsub(減算)系」に属する命令を説明する図であり、図23は、カテゴリー「ALUlogic(論理演算)系ほか」に属する命令を説明する図であり、図24は、カテゴリー「CMP(比較演算)系」に属する命令を説明する図であり、図25は、カテゴリー「mul(乗算)系」に属する命令を説明する図であり、図26は、カテゴリー「mac(積和演算)系」に属する命令を説明する図であり、図27は、カテゴリー「msu(積差演算)系」に属する命令を説明する図であり、図28は、カテゴリー「MEMld(メモリ読み出し)系」に属する命令を説明する図であり、図29は、カテゴリー「MEMstore(メモリ書き出し)系」に属する命令を説明する図であり、図30は、カテゴリー「BRA(分岐)系」に属する命令を説明する図であり、図31は、カテゴリー「BSasl(算術バレルシフト)系ほか」に属する命令を説明する図であり、図32は、カテゴリー「BSlsr(論理バレルシフト)系ほか」に属する命令を説明する図であり、図33は、カテゴリー「CNVvaln(算術変換)系」に属する命令を説明する図であり、図34は、カテゴリー「CNV(一般変換)系」に属する命令を説明する図であり、図35は、カテゴリー「SATvlpk(飽和処理)系」に属する命令を説明する図であり、図36は、カテゴリー「ETC(その他)系」に属する命令を説明する図である。
【0056】
これらの図において、項目「SIMD」は、その命令の型(SISD(SINGLE)かSIMDかの区別)を示し、項目「サイズ」は、演算の対象となる個々のオペランドのサイズを示し、項目「命令」は、その命令のオペコードを示し、項目「オペランド」は、その命令のオペランドを示し、項目「CFR」は、条件フラグレジスタの変化を示し、項目「PSR」は、プロセッサ状態レジスタの変化を示し、項目「代表的な動作」は、動作の概要を示し、項目「演算器」は、使用される演算器を示し、項目「3116」は、命令のサイズを示す。
【0057】
以下に、後述する具体例で使用される主な命令に対するプロセッサ1の動作を説明する。
andn Rc,Ra,Rb
RaとRbの反転の論理積をとり、Rcに格納する。
asl Rb,Ra,I5
Raを即値(I5)ビット数だけ算術左シフトする。
and Rb,Ra,I8
Raと値(I8)の論理積をとり、Rbに格納する。
bseq0 Rb,Ra
RaのMSBから連続する 0 の数を数えて、Rbに格納する。
【0058】
bseq1 Rb,Ra
RaのMSBから連続する 1 の数を数えて、Rbに格納する。
bseq Rb,Ra
RaのMSBの 1 bit下から連続する符号ビットの数を数えて、Rbに格納する。Raが 0 の場合は、0を出力する。
bcnt1 Rb,Ra
Raの 1 の数を数えて、Rbに格納する。
extr Rc,Ra,Rb
Rbでbit位置を指定し、Raの内容の一部を取り出し、符号拡張してRcに格納する。
【0059】
extru Rc,Ra,Rb
Rbでbit位置を指定し、Raの内容の一部を取り出し、符号拡張せずにRcに格納する。
fmulhh Mm,Rc,Ra,Rb
Ra,Rb,Rcを 16bit 値として扱い、Mm(乗算用アキュムレータ)を32bit値として扱う。RaとRbを固定小数点乗算する。結果をMmとRcに格納する。結果が符号付き 32 bitで表せない場合飽和する。
fmulhw Mm,Rc,Ra,Rb
RaとRbを 16bit 値として扱い、Mm,Rcを32bit値として扱う。RaとRbを固定小数点乗算する。結果をMmとRcに格納する。結果が符号付き 32 bitで表せない場合飽和する。
mul Mm,Rc,Ra,Rb
RaとRbを整数乗算する。結果をMmとRcに格納する。
【0060】
mac Mm,Rc,Ra,Rb,Mn
RaとRbを整数乗算し、Mnと加算する。結果をMmとRcに格納する。
mov Rb,Ra
RaをRbに転送する。
or Rc,Ra,Rb
RaとRbの論理和をとり、Rcに格納する。
rde C0:C1,Rb,(Ra)
Raを外部レジスタ番号として、その外部レジスタの値をRbに読み込む。読み込みの成功・失敗をC0とC1(それぞれ、条件フラグ)に出力し、失敗時は拡張レジスタエラー例外が発生する。
wte C0:C1,(Ra),Rb
Raを外部レジスタ番号として、Rbの値をその外部レジスタに書き出する。書き出しの成功・失敗をC0とC1に出力し、失敗時は拡張レジスタエラー例外が発生する。
vaddh Rc,Ra,Rb
各レジスタをハーフワードベクタ形式で扱う。RaとRbを加算(SIMD straight)する。
【0061】
[コンパイラ]
次に、以上のプロセッサ1をターゲットとする本実施の形態におけるコンパイラについて説明する。
図37は、本実施の形態におけるコンパイラ100の構成を示す機能ブロック図である。このコンパイラ100は、C/C++言語等の高級言語で記述されたソースプログラム101を、上述のプロセッサ1をターゲットプロセッサとする機械語プログラム105に変換するクロスコンパイラであり、パーソナルコンピュータ等のコンピュータ上で実行されるプログラムによって実現され、大きく分けて、パーサー部110と、中間コード変換部120と、最適化部130と、コード生成部140とから構成される。
【0062】
なお、本コンパイラ100には、上記プロセッサ1に特有の専用命令を効率的に生成するためのヘッダファイル(演算子定義ファイル102及び組み込み関数定義ファイル103)が準備されている。ユーザは、ソースプログラム101において、これらのヘッダファイルをインクルードすることで、プロセッサ1に特化した(最適化された)機械語プログラム105を得ることができる。
【0063】
演算子定義ファイル102は、図38〜図68のリスト例に示されるように、固定小数点及びSIMD型のデータを対象とする演算子を定義したクラスを定義しているヘッダファイルである。図38〜図40は、ヘッダファイルのうち、主に、モード0(_1系)の16ビット固定小数点のデータを対象とする演算子(オペレータ)を定義している箇所のリストであり、図41〜図42は、ヘッダファイルのうち、主に、モード0(_1系)の32ビット固定小数点のデータを対象とする演算子(オペレータ)を定義している箇所のリストであり、図43〜図45は、ヘッダファイルのうち、主に、モード1(_2系)の16ビット固定小数点のデータを対象とする演算子(オペレータ)を定義している箇所のリストであり、図45〜図47は、ヘッダファイルのうち、主に、モード1(_2系)の32ビット固定小数点のデータを対象とする演算子(オペレータ)を定義している箇所のリストであり、図48〜図68は、その他の関数を定義している箇所のリストである。
【0064】
組み込み関数定義ファイル103は、図69〜図72のリスト例に示されるように、プロセッサ1に特有の機械語命令に置き換えるための各種演算を行う関数を定義しているヘッダファイルである。図69〜図71は、ヘッダファイルのうち、1つの機械語命令に置き換える関数を定義している箇所のリストであり、図72は、ヘッダファイルのうち、2以上の機械語命令(機械語命令列)に置き換える関数を定義している箇所のリストである。
【0065】
なお、これらの定義ファイル102及び103において、asm(…){…}(…)は、最適化asmと呼ばれる組み込みアセンブラ命令であり、以下の通り、処理される。つまり、最適化asm文の記述形式は、
【0066】
asm(<<ロード式並び>>){
<<最適化制御情報>>
<<命令指定部>>
}(<<ストア式並び>>);
【0067】
である。ここで、「ロード式並び」は、ロード式を記述する箇所であり、「ロード式」は、レジスタに C言語での変数や四則演算などの式の結果を格納するための式であり、「レジスタ指定識別子 = 代入式」のように記述され、右辺に示される値を左辺に示される識別子に転送することを意味し、「ストア式並び」は、ストア式を記述する箇所であり、「ストア式」は、「単項式 = レジスタ指定識別子」のように記述され、単項式で表される左辺値にレジスタ指定識別子で表されるレジスタの値を代入することを意味する。
【0068】
パーサー部110は、コンパイルの対象となるソースプログラム101(インクルードされるヘッダファイルを含む)に対して、予約語(キーワード)等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、固定小数点についてのモードの切り替えをサポートする固定小数点モード切替部111を有する。固定小数点モード切替部111は、ソースプログラム101中に、固定小数点モードを退避・復帰させるプラグマ指令(例えば、#pragma _save_fxpmode func等)を検出すると、プロセッサ1のPSR31のビットFXPの退避・復帰を行う機械語命令を生成する。これによって、ユーザは、固定小数点のモード0及びモード1での演算が混在したプログラミングが可能となる。
【0069】
なお、「プラグマ(又は、プラグマ指令)」とは、ソースプログラム101中にユーザが任意に指定(配置)することができるコンパイラ100への指示であり、「#pragma」で始まる文字列である。
【0070】
中間コード変換部120は、パーサー部110から渡されたソースプログラム101の各ステートメントを中間コードに変換する処理部であり、中間コード生成部121と機械語命令置換部122とから構成される。中間コード生成部121は、ソースプログラム101の各ステートメントを一定規則に基づいて中間コードに変換する。ここで、中間コードは、典型的には、関数呼び出しの形式で表現されるコード(例えば、「+(int a, int b)」を示すコード;「整数aに整数bを加算する」ことを示す。)である。ただし、中間コードには、このような関数呼び出し形式のコードだけでなく、プロセッサ1の機械語命令も含まれる。
【0071】
機械語命令置換部122は、中間コード生成部121で生成された中間コードのうち、関数呼び出し形式の中間コードに対して、演算子定義ファイル102及び組み込み関数定義ファイル103を参照することで、それらの定義ファイルで定義された演算子(演算対象のデータの型も含む)又は組み込み関数に一致した中間コードについては、内部に保持する置換テーブル122a又はこれらの定義ファイルで定義されたアセンブラ命令に従って、対応する機械語命令(又は機械語命令列)に置き換え、最適化部130に出力する。これによって、これらの中間コードについては、関数呼び出しの形式ではなく、機械語命令の形式で最適化部130に渡されるので、最適化部130での各種最適化が可能となる。
【0072】
なお、置換テーブル122aは、予め予約された演算子による演算及び関数に対応する機械語命令(又は機械語命令列)を格納したテーブルである。また、機械語命令置換部122は、中間コード生成部121から渡された中間コードのうち、機械語命令については、そのまま最適化部130に出力する。
【0073】
最適化部130は、中間コード変換部120から出力された中間コードのうち、機械語命令について、命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の処理を行うことで、(1)実行速度の向上を優先した最適化、(2)コードサイズの削減を優先した最適化、(3)実行速度とコードサイズの両方の最適化、の中からユーザによって選択された種類の最適化を実行する処理部であり、一般的な最適化(「ループアンローリング」、「if変換」、「ペアメモリアクセス命令の生成」など)に加えて、本コンパイラ100に特有の最適化を行う処理部(引数最適化部131、型変換最適化部132及びレイテンシ最適化部133)を有する。
【0074】
引数最適化部131は、組み込み関数(extr、extruなど)の引数に応じて、適切な命令又はシーケンス(アルゴリズム)を生成する処理部である。例えば、引数がすべて定数の場合には、それら定数を畳み込んで得られる定数値をオペランドとする機械語命令を生成し、引数の一部が定数の場合には、即値オペランドの機械語命令を生成し、引数のすべてが変数の場合には、レジスタオペランドの命令列を生成する。
【0075】
型変換最適化部132は、ソースプログラム101中での一定表記に基づいて、異なる型間の演算を効率化する処理部である。例えば、16ビットのデータと16ビットのデータとの乗算結果を32ビットのデータとして保持しておきたい場合に、ソースプログラム101において一定表記がなされているときには、そのような型変換を伴った乗算を行う1つの機械語命令(「fmulhw」など)を生成する。
【0076】
レイテンシ最適化部133は、ソースプログラム101に組み込まれたアセンブラ命令中でのレイテンシに関する指示(サイクル数の指定)に基づいて、特定の区間あるいは特定の動作が指定されたサイクル数だけ実行時間がかかるように、機械語命令を並べる。これによって、従来であればプログラマが必要個数のnop命令を挿入していた作業が不要になるとともに、nop命令以外の他の機械語命令を挿入することによる最適化が可能となる。
【0077】
なお、「ループアンローリング」とは、ループのイタレーション(繰り返し)を展開し、複数のイタレーションを同時に実行させるために、ペアメモリアクセス命令(ldp/stp/ldhp/sthp等)を生成し、これによって、ループの並列実行可能性を向上させる最適化である。また、「if変換」とは、条件付き実行機構の命令(命令に含まれる条件(プレディケート)がプロセッサ1の状態(コンディションフラグ)と一致している場合にだけ実行される命令)を生成することにより分岐構造を除去する最適化である。また、「ペアメモリアクセス命令の生成」とは、ペアレジスタ(2本の連続するレジスタ)を対象にメモリアクセスする命令(ldp/stp/ldhp/sthp等)を生成する最適化である。
【0078】
また、最適化部130は、関数呼び出し形式の中間コードのうち、機械語命令に展開されないものについては、上述のような機械語命令レベルでの最適化処理を施すことができないので、そのままコード生成部140に出力する。
【0079】
コード生成部140は、最適化部130から出力された中間コード(関数呼び出し形式のコード及び最適化された機械語命令を含む)に対して、内部に保持する変換テーブル等を参照することで、全てのコードを機械語命令に置き換えることで、機械語プログラム105を生成する。
【0080】
次に、以上のように構成されたコンパイラ100の特徴的な動作について、具体的な例を示しながら説明する。
図73は、機械語命令置換部122の動作を示すフローチャートである。機械語命令置換部122は、中間コード生成部121で生成された中間コードのうち、関数呼び出し形式のコードについて、演算子定義ファイル102で定義された演算子(演算対象のデータ型を含む)及び組み込み関数定義ファイル103で定義された関数と一致するか否かを判断し(ステップS101)、一致する場合には(ステップS101でYes)、内部に保持する置換テーブル122a又はこれらの定義ファイル102及び103で定義されたアセンブラ命令にしたがって、機械語命令に置き換える(ステップS102)という処理を繰り返す(ステップS100〜S103)。
【0081】
具体的には、演算子定義ファイル102での定義により、異なる型間の暗黙の型変換のルール等が規定され(コンストラクタの定義による)、4種類の固定小数点の型、つまり、
・「FIX16_1」;第14ビットと第15ビット(MSB)との間に小数点を持つ符号付き16ビットと、
・「FIX16_2」;第13ビットと第14ビットとの間に小数点を持つ符号付き16ビットと、
・「FIX32_1」;第30ビットと第31ビット(MSB)との間に小数点を持つ符号付き32ビットと、
・「FIX32_2」;第29ビットと第30ビットとの間に小数点を持つ符号付き32ビットと
が定義されているので、機械語命令置換部122は、例えば、
【0082】
FIX16_1 a, b, c;
c = a * b;
というソースプログラムを、
fmulhh m0,Rc,Ra,Rb (固定小数点乗算命令)
という機械語命令に置き換える。
【0083】
これによって、ユーザは、FIX16_1、FIX16_2、FIX32_1、FIX32_2という型について、通常のコンパイラにおける基本型と同様に宣言し、使用することができる。そして、生成された機械語命令は、周辺のコードと含めて、最適化部130における命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の最適化の対象となり、最適化が施され得る。
【0084】
同様に、演算子定義ファイル102での定義により、異なる型間の暗黙の型変換のルール等が規定され(コンストラクタの定義による)、4種類のSIMD型、つまり、
・「VINT8x4」;8ビット整数データの4並列と、
・「VINT16x2」;16ビット整数データの2並列と、
・「VFIX161x2」;モード0(_1系)の16ビット固定小数点データの2並列と、
・「VFIX162x2」;モード1(_2系)の16ビット固定小数点データの2並列と
が定義されているので、機械語命令置換部122は、例えば、
【0085】
VINT16x2 a, b, c;
c = a + b;
というソースプログラムを、
vaddh Rc,Ra,Rb (SIMD型加算命令)
という機械語命令に置き換える。
【0086】
これによって、ユーザは、VINT8x2、VINT16x2、VFIX161x2、VFIX162x2という型について、通常のコンパイラにおける基本型と同様に宣言し、使用することができる。そして、生成された機械語命令は、周辺のコードと含めて、最適化部130における命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の最適化の対象となり、最適化が施され得る。
【0087】
また、組み込み関数定義ファイル103においては、プロセッサ1が備える高機能命令を使用することが可能な関数(例えば、「_abs(a)」等)とそれに対応する高機能命令(例えば、1つの機械語命令「abs Rb, Ra」等)が定義されているので、機械語命令置換部122は、例えば、
【0088】
b = _abs(a);
というソースプログラムを、
abs Rb,Ra
という機械語命令に置き換える。
【0089】
これによって、ユーザは、複雑な処理を、C++言語やアセンブラ命令で作成することなく、予め用意された組み込み関数を呼び出すだけで、実現することができる。そして、生成された機械語命令は、周辺のコードと含めて、最適化部130における命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の最適化の対象となり、最適化が施され得る。
【0090】
同様に、また、組み込み関数定義ファイル103において、プロセッサ1が備える高機能命令を使用することが可能な関数(例えば、「_div(a, b)」等)とそれに対応する高機能命令(例えば、機械語命令列「extw, aslp, div」等)が定義されているので、機械語命令置換部122は、例えば、
【0091】
c = _div(a, b);
というソースプログラムを、
extw Mn,Rc,Ra
aslp Mn,Rc,Mn,Rc,15
div MHm,Rc,MHn,Rc,Rb
という機械語命令列に置き換える。
【0092】
これによって、ユーザは、複雑な処理を、C++言語やアセンブラ命令で作成することなく、予め用意された組み込み関数を呼び出すだけで、実現することができる。そして、生成された機械語命令列は、周辺のコードと含めて、最適化部130における命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の最適化の対象となり、最適化が施され得る。
【0093】
なお、組み込み関数定義ファイル103に列挙されている組み込み関数のうち、(1)1つの機械語命令に変換される関数、(2)2以上の機械語命令(機械語命令列)に変換される関数、及び、(3)レジスタ割り付けの対象とならない資源(アキュムレータなど)を指定することが可能な関数の代表的なもの(特に、メディア処理に有効なもの)は、以下の通りである。
【0094】
(1)1つの機械語命令に変換される組み込み関数
・「_bseq0(x)」:
入力の最上位ビットから何ビット0が連続するかを検出する関数である。書式は、以下の通りである。
int _bseq0(FIX16_1 val) // 0をカウント
int _bseq0(FIX16_2 val) // 0をカウント
int _bseq0(FIX32_1 val) // 0をカウント
int _bseq0(FIX32_2 val) // 0をカウント
これらの関数は、「val」中の連続する0の個数(ビット数)をカウントした値を返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0095】
・「_bseq1(x)」:
入力の最上位ビットから何ビット1が連続するかを検出する関数である。書式は、以下の通りである。
int _bseq1(FIX16_1 val) // 1をカウント
int _bseq1(FIX16_2 val) // 1をカウント
int _bseq1(FIX32_1 val) // 1をカウント
int _bseq1(FIX32_2 val) // 1をカウント
これらの関数は、「val」中の連続する1の個数(ビット数)をカウントした値が返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0096】
・「_bseq(x)」:
入力の最上位ビットと同じ値が最上位ビットの次から何ビット連続するかを検出する関数である。書式は、以下の通りである。
int _bseq(FIX16_1 val)
int _bseq(FIX16_2 val)
int _bseq(FIX32_1 val)
int _bseq(FIX32_2 val)
これらの関数は、「val」の正規化ビット数を返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0097】
・「_bcnt1(x)」:
入力の全ビット中に何ビット1が含まれているかを検出する関数である。書式は、以下の通りである。
int _bcnt1(FIX16_1 val)
int _bcnt1(FIX16_2 val)
int _bcnt1(FIX32_1 val)
int _bcnt1(FIX32_2 val)
これらの関数は、「val」中の1の個数をカウントした値を返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0098】
・「_extr(a,i1,i2)」:
入力の所定のビット位置を抽出して符号拡張する関数である。
関数である。書式は、以下の通りである。
int _extr (FIX16_1 val1, int val2, int val3)
int _extr (FIX16_2 val1, int val2, int val3)
int _extr (FIX32_1 val1, int val2, int val3)
int _extr (FIX32_2 val1, int val2, int val3)
これらの関数は、ビット位置val2からビット位置val3で示されたval1のビットフィールドを抽出し、符号拡張を行った結果を返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0099】
・「_extru(a,i1,i2)」:
入力の所定のビット位置を抽出してゼロ拡張する関数である。書式は、以下の通りである。
unsigned int _extru (FIX16_1 val, int val2, int val3)
unsigned int _extru (FIX16_2 val, int val2, int val3)
unsigned int _extru (FIX32_1 val, int val2, int val3)
unsigned int _extru (FIX32_2 val, int val2, int val3)
これらの関数は、ビット位置val2からビット位置val3で示されたval1のビットフィールドを抽出し、ゼロ拡張を行った結果を返す。これらの関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。
【0100】
(2)2以上の機械語命令(機械語命令列)に変換される組み込み関数
・「_modulo_add()」:
モジュロアドレッシングのアドレス更新を行う関数である。書式は、以下の通りである。
_modulo_add(void *addr, int imm, int mask, size_t size, void *base)
ここで、各引数の意味は以下の通りである。
addr: 更新前のアドレス又はアドレス下位(モジュロ部分)
imm: 加算値 (データ数)
mask: マスク幅 (モジュロ幅)
size: データのサイズ(2のべき乗)
base: ベースアドレス (配列の先頭アドレス)
この関数は、モジュロアドレッシングにより、アドレスaddrから加算値immだけ加算した結果を返す。
【0101】
この関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。つまり、モジュロアドレッシング計算のため、第一の入力の所定のビットフィールドを第二の入力の所定のビットフィールドで置き換える命令(addmsk)を活用している関数である。使用例は、以下の通りである。
int array[MODULO];
p = array;
for (i = 0; i < 100; i++) {
*q++ = *p;
p = (int *)_modulo_add(p, 1, N, sizeof(int), array);
}
ここで、変数MODULOは2のべき乗(2^N)である。この使用例では、配列arrayの100個の要素を MODULO*SIZEバイトアライメントして配置している。
【0102】
・「_brev_add()」:
ビットリバースアドレッシングのアドレス更新を行う関数である。書式は、以下の通りである。
_brev_add(void *addr, int cnt, int imm, int mask, size_t size, void *base)
ここで、各引数の意味は以下の通りである。
addr: 更新前のアドレス
cnt: ビットリバースカウンタ
mm: 加算値 (データ数)
mask: マスク幅 (リバース幅)
size: データのサイズ ※ 2のべき乗
base: ベースアドレス (配列の先頭アドレス)
この関数は、ビットリバースアドレッシングにより、ビットリバースカウンタcntに対応するアドレスaddrから加算値immだけ加算した結果を返す。
【0103】
この関数に対応する機械語命令は、組み込み関数定義ファイル103に定義されている通りである。つまり、ビットリバースアドレッシング計算のため、第一の入力の所定のビットフィールドに対してビット単位の位置反転を行なう命令(mskbrvh)を活用している関数である。使用例は、以下の通りである。
int array[BREV];
p = array;
for (i = 0; i < 100; i++) {
*q++ = *p;
p = (int *)_brev_add(p, i, 1, N, sizeof(int), array);
}
ここで、変数BREVは2のべき乗(2^N)である。この使用例では、配列arrayの100個の要素を BREV*SIZEバイトアライメントして配置する。
【0104】
(3)レジスタ割り付けの対象とならない資源(アキュムレータなど)を指定することが可能な関数
組み込み関数定義ファイル103には、最適化のおけるレジスタ割り付けの対象となる資源である汎用レジスタに加えて、レジスタ割り付けの対象とならない資源である(暗黙の資源である)アキュムレータも更新する演算(乗算、積和)であって、アキュムレータを参照型として一時変数を指定することが可能な組み込み関数(乗算「_mul」、積和「_mac」)が用意されている。具体的な書式は、それぞれ、以下の通りである。
【0105】
_mul(long &mh, long &ml, FIX16_1 &c, FIX16_1 a, FIX16_1 b);
この関数は、変数a変数bとを乗算し、結果の64bitデータの上位32ビットを乗算用上位アキュムレータMHに、下位32ビットを乗算用下位アキュムレータMLに設定し、さらに、アキュムレータMHの下位16ビットとアキュムレータMLの上位16ビットとを連結した32ビットデータを変数cにも設定する。
_mac(long &mh, long &ml, FIX16_1 &c, FIX16_1 a, FIX16_1 b);
この関数は、変数aと変数bとを乗算した結果に、乗算用上位アキュムレータMHと乗算用下位アキュムレータMLとを連結した64ビットデータを加算し、結果の64bitデータの上位32ビットを乗算用上位アキュムレータMHに、下位32ビットを乗算用下位アキュムレータMLに設定し、さらに、乗算用上位アキュムレータの下位16ビットと乗算用下位アキュムレータMLの上位16ビットとを連結した32ビットデータを変数cにも設定する。
【0106】
使用例は、以下の通りである。
long mh,ml;
_mul(mh,ml,dummy,a,b);
_mac(mh,ml,e,c,d);
というソースプログラムに対して、機械語命令置換部122は、組み込み関数定義ファイル103での定義に従って、
mul m0,Rx,Ra,Rb
mov r0,mh0
mov r1,mh1
mov mh0,r0
mov mh1,r1
mac m0,Re,Rc,Rd,m0
という機械語命令列に置き換える。なお、上記機械語命令列のうち、第1〜第3行が関数_mulに対応するものであり、第4〜第6行が関数_macに対応するものである。このような機械語命令列は、最適化部130において、冗長除去により、第2〜第5行が削除され、
mul m0,Rx,Ra,Rb
mac m0,Re,Rc,Rd,m0
という機械語命令列に最適化される。このように、レジスタ割り付けの対象とならない資源(アキュムレータなど)を指定することが可能な組み込み関数が使用された場合には、その資源に対する定義(値の格納)と使用(値の参照)との組がコンパイラ内部の最適化(最適化部130)にて削除される可能性が高いので、このような組み込み関数は、最適化の点においても有効である。
【0107】
次に、本コンパイラ100の特徴的な動作のうち、最適化部130による動作を説明する。
図74は、最適化部130の引数最適化部131の動作を示すフローチャートである。引数最適化部131は、組み込み関数(extr、extruなど)の引数に応じて、適切な命令又はシーケンス(アルゴリズム)を生成するために、その関数の引数がすべて定数の場合には(ステップS110で左)、それら定数を畳み込んで得られる定数値をオペランドとする機械語命令を生成し(ステップS111)、引数の一部が定数の場合には(ステップS110で中央)、即値オペランドの機械語命令を生成し(ステップS112)、引数のすべてが変数の場合には(ステップS110で右)、レジスタオペランドの命令列を生成する(ステップS113)。
【0108】
例えば、
d = _extru(0xfff, 7, 4);
のように、引数のすべて定数の場合には、
movRd,0xf
のように、畳み込んで定数値を設定した機械語命令を生成する。
一方、
d = _extru(a, 7, 4);
のように、一部の引数が定数の場合には、
extruRd,Ra,7,4
のように、即値オペランドの命令を生成する。
さらに一方、
d = _extru(a, b, c);
のように、すべての引数が変数の場合には、
aslRe,Rb,8
andRf,Rc,0x1f
orRg,Re,Rf
extruRd,Ra,Rg
のように、レジスタオペランドの命令列を生成する。
【0109】
このように、引数最適化部131により、1つの組み込み関数は、常に同じ機械語命令が固定的に生成されるのではなく、その引数の性質に応じて最適化された機械語命令(又は機械語命令列)が生成されることになる。
【0110】
図75は、最適化部130の型変換最適化部132の動作を説明するための演算木を示す図である。型変換最適化部132は、異なる型間の演算を効率化するために、ソースプログラム中の一定表記の演算に対して、型変換を伴う機械語命令(fmulhwなど)を生成する。
【0111】
通常のC言語では、16bit x 16bitの結果の型は16bitである。16bit x 16bit --> 32bit の命令は存在するが、次にように、2つの機械語命令が生成されてしまう。例えば、
f32 = f16 * f16;
の記述に対して、
fmulhh // 16bit x 16bit -> 16bit
asl // 16bit -> 32bitの型変換
の2命令が生成されてしまう。
【0112】
そこで、型変換最適化部132は、ソースプログラムにおいて、 (FIX32)16bit * (FIX32)16bit と記述されている場合には、通常であれば、図75(a)に示される演算木が生成されてしまう(型変換のコードが生成されてしまう)ところ、この演算木を図75(b)に示される演算木に変換することにより、16bit x 16bit --> 32bitの1命令(fmulhw)を生成する。
【0113】
図76は、レイテンシ最適化部133の動作を説明するためのサンプルプログラムの例を示す図である。レイテンシ最適化部133は、ソースプログラム101に組み込まれたアセンブラ命令(最適化asm文)でのレイテンシに関する指示(サイクル数の指定)に基づいて、特定の区間あるいは特定の動作において、指定されたサイクル数だけ実行時間がかかるように、機械語命令をスケジューリングする。
【0114】
ユーザは、2種類の指定方法によって、レイテンシを設定することができる。その1つの方法は、図76(a)に示されるプログラムにおける指定(LATENCY L1, L2, 2;)のように、特定の命令に付けられたラベル間のレイテンシを指定する方法である。図76(a)の例では、レイテンシ最適化部133は、プロセッサ1によって命令wteが実行されてから命令rdeが実行されるまでに2サイクルだけ経過するように、機械語命令列の配置をスケジューリングする。
【0115】
他の1つの方法は、図76(b)に示されるプログラムにおける指定(命令wte内におけるLATENCY(2))のように、拡張レジスタ部80にアクセスする命令(rd, wt, rde, wte)について、次に拡張レジスタ部80にアクセスするまでのレイテンシを指定する方法である。図76(b)の例では、レイテンシ最適化部133は、プロセッサ1によって命令wteが実行され、拡張レジスタ部80にアクセスされてから再び拡張レジスタ部80にアクセスされるまでに2サイクルだけ経過するように、機械語命令列の配置をスケジューリングする。
【0116】
このようなレイテンシの設定よって、inline展開先のコードとの間で最適化(命令結合、冗長除去、命令並べ替え、レジスタ割り付け)が可能になるとともに、指定した命令間又はアクセス間でのレイテンシが確保される。つまり、従来であれば、ユーザは、明示的にnop命令を挿入しなければならないところ、このコンパイラ100によれば、必要な命令又はアクセスについて必要なレイテンシを指定するだけで済む。
【0117】
図77は、パーサー部110の固定小数点モード切替部111の動作を説明するための図である。
固定小数点モード切替部111は、ソースプログラム101中に、固定小数点モードを退避・復帰させるプラグマ指令(例えば、#pragma _save_fxpmode func等)を検出すると、プロセッサ1のPSR31のビットFXPの退避・復帰を行う機械語命令を生成する。
【0118】
なお、前提となる固定小数点に関する仕様として、_1系(FIX16_1,FIX32_1)と_2系(FIX16_2,FIX32_2)の型が存在し、ハードウェア(プロセッサ1)では、PSR31の1ビット(FXP)でモード切り替えをしており、さらに、関数内には単一の系統しか使用できないという条件が存在する。
【0119】
そこで、これら2つの体系をプログラム上で切り替えて使用する方法として、他の体系からcallされる可能性のある関数にプラグマ(#pragma _save_fxpmode
関数名)を指定することとしている。これによって、固定小数点モード切替部111は、当該関数の先頭と末尾にFIX型モードの退避・復帰に相当するコードを挿入する。また、各関数のFIX型宣言をサーチし、その関数をいずれのFIX型モードでコンパイルするかを決定し、モード設定のコードを挿入する。
【0120】
図77(a)は、そのプラグマ指令を伴う関数の例を示している。図77(a)の右側に記されたコメントが固定小数点モード切替部111による挿入処理であり、その具体的な処理は、図77(b)に示される通りである。
【0121】
このようなプラグラマ指令の適用例は、図77(c)に示される通りである。例えば、4つの関数、f11, f21, f22, f23について、関数f11: _1系 は 関数f21: _2系をcallし、関数f21: _2系 は 関数f22: _2系をcallし、関数f22: _2系 は関数f23: _2系をcallする場合、他のモードからcallされる可能性がある関数はf21のみなので、この関数についてのみプラグマ指定するだけで、正常なモード切り替えが可能となる。
【0122】
以上のように、本実施の形態におけるコンパイラ100によれば、演算子定義ファイル102及び組み込み関数定義ファイル103と機械語命令置換部122との連携処理により、ユーザは、モード0及び1の固定小数点型を通常の型として宣言し、使用することができるとともに、高級言語のレベルで組み込み関数を呼び出すことで、プロセッサ1が備える高機能な機械語命令を効率的に生成させることができる。
【0123】
また、引数最適化部131による組み込み関数の引数についての最適化により、効率的なオペランドを持つ機械語命令が生成される。また、型変換最適化部132による型変換についての最適化により、型変換を伴う演算は、プロセッサ1が備える高機能な1つの機械語命令に変換される。さらに、レイテンシ最適化部133による機械語命令のスケジューリングにより、ユーザは、nop命令を挿入することなく、特定の命令間あるいは拡張レジスタへのアクセスにおけるレイテンシを確保することができる。
【0124】
以上、本発明に係るコンパイラについて、実施の形態に基づいて説明したが、本発明は、この実施の形態に限定されるものではない。
例えば、本実施の形態では、固定小数点の型は、16ビット又は32ビットで、かつ、小数点がMSB又はその下位桁に位置したが、このようなフォーマットだけに限られず、8ビットや64ビットの固定小数点や、他の桁に小数点が位置する型を対象としてもよい。
【0125】
また、ユーザに対する開発支援ツールとして、クラスライブラリを活用した動作検証手法を提供してもよい。つまり、通常であれば、図78(a)に示されるように、本実施の形態におけるターゲットマシン(プロセッサ1)用のクロスコンパイラ(コンパイラ100)を用いてテストソースと定義ファイル102及び103等をコンパイルし、得られたプロセッサ1用の機械語プログラムを専用のシミュレータで実行させることによって動作検証を行うが、これに代えて、図78(b)に示されるように、開発用ホストマシン(例えば、米国インテル社製のプロセッサ)を対象としたクラスライブラリ(演算子定義ファイル102及び組み込み関数定義ファイル103それぞれをプロセッサ1ではなく、ホストマシンの機械語命令に対応させる定義ファイル)を用意し、テストソース、定義ファイル102及び103と共に、ネイティブコンパイラ(Visual C++(R)等)でコンパイルし、得られた機械語プログラムをそのままホストマシンで実行させてもよい。これによって、慣れた環境で高速にシミュレーションし、動作検証を行うことが可能となる。
【0126】
さらに、本実施の形態では、ターゲットプロセッサに特有の機械語命令に対応する演算子や組み込み関数は、ヘッダファイル(定義ファイル102及び103)として供給されたが、本発明に係るコンパイラは、このような定義ファイルでの情報をコンパイラ自身の中に組み込んだ構成としてもよい。つまり、本発明に係るコンパイラは、上記定義ファイル102及び103が組み込まれた一体形式のプログラムであって、対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を含み、ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを含み、中間コード変換ステップは、前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、対応する機械語命令に置き換える置換サブステップとを含み、前記最適化ステップでは、前記置換サブステップで置き換えられた機械語命令を含む前記中間コードを対象として最適化を行う構成としてもよい。これによって、ユーザは、ソースプログラムにおいて定義ファイルをインクルードする必要がなくなる。
【0127】
【発明の効果】
以上の説明から明らかように、本発明に係るコンパイラ用プログラムは、ソースプログラムを機械語プログラムに翻訳するコンパイラ用のプログラムであって、対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を含み、前記プログラムはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものであることを特徴とする。
【0128】
例えば、本発明に係るプログラムは、ソースプログラムにインクルードされるヘッダファイルと、そのソースプログラムを機械語プログラムに翻訳するコンパイラとから構成されるプログラムであって、前記ヘッダファイルには、データとメソッドとからなるクラスが定義され、前記コンパイラはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるプログラムである。
【0129】
これによって、ソースプログラムにおいて、ヘッダファイルで定義されているクラスを参照しているステートメントがある場合には、そのステートメントに対応する中間コードは、機械語命令に変換された後に最適化処理の対象となるので、周辺の機械語命令と含めて最適化が施され得る。また、コンパイラは、コンパイラ自身の機能(最適化処理)だけでなく、ヘッダファイルでの定義との連携によって最適化を図っているので、ヘッダファイルの内容を更新するだけで、最適化の対象となるステートメントを増加させたり、最適化のレベルを向上させたりすることができる。
【0130】
ここで、前記クラスは、固定小数点型を定義するクラスであり、前記検出サブステップでは、前記固定小数点型のデータを使用している中間コードを検出してもよい。そして、前記クラスのメソッドは、前記固定小数点型のデータを対象とする演算子を定義するメソッドであり、前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換えてもよい。
【0131】
これによって、ヘッダファイルで定義されている固定小数点型及び演算子についても、通常の型と同様に、コンパイラによって対応する中間コードや機械語命令に変換されるので、ユーザは、ソースプログラムにおいてそのヘッダファイルをインクルードしておくだけで、通用の型と同様に、ターゲットプロセッサ特有の固定小数点モードに対応した型の宣言や使用をすることが可能となる。
【0132】
また、本発明に係るコンパイラ用プログラムは、ソースプログラムにインクルードされるヘッダファイルと、そのソースプログラムを機械語プログラムに翻訳するコンパイラとから構成されるプログラムであって、前記ヘッダファイルには、関数が定義され、前記コンパイラはコンピュータに、前記ソースプログラムを解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、変換された中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、前記中間コード変換ステップの実行においては、前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものであることを特徴とする。
【0133】
これによって、ソースプログラムにおいて、ヘッダファイルで定義されている関数(組み込み関数)を参照しているステートメントがある場合には、そのステートメントに対応する中間コードは、そのヘッダファイルで定義されている機械語命令に変換された後に最適化処理の対象となるので、周辺の機械語命令と含めて最適化が施され得る。また、ユーザは、プロセッサ専用の高機能命令を使用したい場合には、ソースプログラムにおいてそのヘッダファイルをインクルードしておくとともに、必要な組み込み関数を呼び出す旨の記述をしておくだけで済む。つまり、アセンブラ命令でコーディングすることから解放される。
【0134】
以上のように、本発明に係るコンパイラにより、ターゲットプロセッサが備える高機能な専用命令が効率的に生成され、高いレベルで最適化が施されるとともに、ヘッダファイルによる機能拡張等の柔軟な対応が可能となり、特に、コードサイズと実行速度の両面で厳しい仕様が求められるメディア処理アプリケーションの開発ツールとして、その実用的価値は極めて高い。
【図面の簡単な説明】
【図1】 本発明に係るコンパイラの対象となるプロセッサの概略ブロック図である。
【図2】 同プロセッサの算術論理・比較演算器の概略図を示す。
【図3】 同プロセッサのバレルシタの構成を示すブロック図である。
【図4】 同プロセッサの変換器の構成を示すブロック図である。
【図5】 同プロセッサの除算器の構成を示すブロック図である。
【図6】 同プロセッサの乗算・積和演算器の構成を示すブロック図である。
【図7】 同プロセッサの命令制御部の構成を示すブロック図である。
【図8】 同プロセッサの汎用レジスタ(R0〜R31)の構造を示す図である。
【図9】 同プロセッサのリンクレジスタ(LR)の構造を示す図である。
【図10】 同プロセッサの分岐レジスタ(TAR)の構造を示す図である。
【図11】 同プロセッサのプログラム状態レジスタ(PSR)の構造を示す図である。
【図12】 同プロセッサの条件フラグレジスタ(CFR)の構造を示す図である。
【図13】 同プロセッサのアキュムレータ(M0,M1)の構造を示す図である。
【図14】 同プロセッサのプログラムカウンタ(PC)の構造を示す図である。
【図15】 同プロセッサのPC退避用レジスタ(IPC)の構造を示す図である。
【図16】 同プロセッサのPSR退避用レジスタ(IPSR)の構造を示す図である。
【図17】 同プロセッサのパイプライン動作を示すタイミング図である。
【図18】 同プロセッサによる命令実行時の各パイプライン動作を示すタイミング図である。
【図19】 同プロセッサの並列動作を示す図である。
【図20】 同プロセッサが実行する命令のフォーマットを示す図である。
【図21】 カテゴリー「ALUadd(加算)系」に属する命令を説明する図である。
【図22】 カテゴリー「ALUsub(減算)系」に属する命令を説明する図である。
【図23】 カテゴリー「ALUlogic(論理演算)系ほか」に属する命令を説明する図である。
【図24】 カテゴリー「CMP(比較演算)系」に属する命令を説明する図である。
【図25】 カテゴリー「mul(乗算)系」に属する命令を説明する図である。
【図26】 カテゴリー「mac(積和演算)系」に属する命令を説明する図である。
【図27】 カテゴリー「msu(積差演算)系」に属する命令を説明する図である。
【図28】 カテゴリー「MEMld(メモリ読み出し)系」に属する命令を説明する図である。
【図29】 カテゴリー「MEMstore(メモリ書き出し)系」に属する命令を説明する図である。
【図30】 カテゴリー「BRA(分岐)系」に属する命令を説明する図である。
【図31】 カテゴリー「BSasl(算術バレルシフト)系ほか」に属する命令を説明する図である。
【図32】 カテゴリー「BSlsr(論理バレルシフト)系ほか」に属する命令を説明する図である。
【図33】 カテゴリー「CNVvaln(算術変換)系」に属する命令を説明する図である。
【図34】 カテゴリー「CNV(一般変換)系」に属する命令を説明する図である。
【図35】 カテゴリー「SATvlpk(飽和処理)系」に属する命令を説明する図である。
【図36】 カテゴリー「ETC(その他)系」に属する命令を説明する図である。
【図37】 本発明に係るコンパイラの構成を示す機能ブロック図である。
【図38】 演算子定義ファイルのリストの一部を示す図である。
【図39】 演算子定義ファイルのリストの一部を示す図である。
【図40】 演算子定義ファイルのリストの一部を示す図である。
【図41】 演算子定義ファイルのリストの一部を示す図である。
【図42】 演算子定義ファイルのリストの一部を示す図である。
【図43】 演算子定義ファイルのリストの一部を示す図である。
【図44】 演算子定義ファイルのリストの一部を示す図である。
【図45】 演算子定義ファイルのリストの一部を示す図である。
【図46】 演算子定義ファイルのリストの一部を示す図である。
【図47】 演算子定義ファイルのリストの一部を示す図である。
【図48】 演算子定義ファイルのリストの一部を示す図である。
【図49】 演算子定義ファイルのリストの一部を示す図である。
【図50】 演算子定義ファイルのリストの一部を示す図である。
【図51】 演算子定義ファイルのリストの一部を示す図である。
【図52】 演算子定義ファイルのリストの一部を示す図である。
【図53】 演算子定義ファイルのリストの一部を示す図である。
【図54】 演算子定義ファイルのリストの一部を示す図である。
【図55】 演算子定義ファイルのリストの一部を示す図である。
【図56】 演算子定義ファイルのリストの一部を示す図である。
【図57】 演算子定義ファイルのリストの一部を示す図である。
【図58】 演算子定義ファイルのリストの一部を示す図である。
【図59】 演算子定義ファイルのリストの一部を示す図である。
【図60】 演算子定義ファイルのリストの一部を示す図である。
【図61】 演算子定義ファイルのリストの一部を示す図である。
【図62】 演算子定義ファイルのリストの一部を示す図である。
【図63】 演算子定義ファイルのリストの一部を示す図である。
【図64】 演算子定義ファイルのリストの一部を示す図である。
【図65】 演算子定義ファイルのリストの一部を示す図である。
【図66】 演算子定義ファイルのリストの一部を示す図である。
【図67】 演算子定義ファイルのリストの一部を示す図である。
【図68】 演算子定義ファイルのリストの一部を示す図である。
【図69】 組み込み関数定義ファイルのリストの一部を示す図である。
【図70】 組み込み関数定義ファイルのリストの一部を示す図である。
【図71】 組み込み関数定義ファイルのリストの一部を示す図である。
【図72】 組み込み関数定義ファイルのリストの一部を示す図である。
【図73】 機械語命令置換部の動作を示すフローチャートである。
【図74】 最適化部の引数最適化部の動作を示すフローチャートである。
【図75】 最適化部の型変換最適化部の動作を説明するための演算木を示す図である。
【図76】 レイテンシ最適化部の動作を説明するためのサンプルプログラムの例を示す図である。
【図77】 パーサー部の固定小数点モード切替部の動作を説明するための図である。
【図78】 クラスライブラリを活用した動作検証手法を説明するための図である。
【符号の説明】
1 プロセッサ
10 命令制御部
20 デコード部
30 レジスタファイル
31 プログラム状態レジスタ(PSR)
32 条件フラグレジスタ(CFR)
33 プログラムカウンタ(PC)
34 PC退避用レジスタ(IPC)
35 PSR退避用レジスタ(IPSR)
40 演算部
41〜43 算術論理・比較演算器
44 積和演算器
45 バレルシフタ
46 除算器
47 変換器
50 I/F部
60 命令メモリ部
70 データメモリ部
80 拡張レジスタ部
90 I/Oインターフェース部
100 コンパイラ
101 ソースプログラム
102 演算子定義ファイル
103 組み込み関数定義ファイル
105 機械語プログラム
110 パーサー部
111 固定小数点モード切替部
120 中間コード変換部
121 中間コード生成部
122 機械語命令置換部
122a 置換テーブル
130 最適化部
131 引数最適化部
132 型変換最適化部
133 レイテンシ最適化部
140 コード生成部

Claims (37)

  1. ソースプログラムを機械語プログラムに翻訳するコンパイラ用のプログラムであって、
    対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を含み、
    前記プログラムはコンピュータに
    前記ソースプログラムを解析するパーサーステップと、
    解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、
    変換された中間コードを最適化する最適化ステップと、
    最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって
    前記中間コード変換ステップの実行においては、
    前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、
    前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、
    あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって
    前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものである
    ことを特徴とするプログラム。
  2. 前記演算処理定義情報は、前記ソースプログラムにインクルードされるヘッダファイルであり、
    前記ヘッダファイルには、データとメソッドとからなるクラスによって前記演算処理が定義され、
    前記中間コード変換ステップは、前記中間コードのうち、前記ヘッダファイルで定義されたクラスを参照しているものがあるか否かを検出することによって、前記演算処理を参照ているものがあるか否かを検出する
    ことを特徴とする請求項1記載のプログラム。
  3. 前記クラスは、固定小数点型を定義するクラスであり、
    前記検出サブステップでは、前記固定小数点型のデータを使用している中間コードを検出する
    ことを特徴とする請求項2記載のプログラム。
  4. 前記クラスのメソッドは、前記固定小数点型のデータを対象とする演算子を定義するメソッドであり、
    前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、
    前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換える
    ことを特徴とする請求項3記載のプログラム。
  5. 前記クラスは、SIMD型を定義するクラスであり、
    前記検出サブステップでは、前記SIMD型のデータを使用している中間コードを検出する
    ことを特徴とする請求項2記載のプログラム。
  6. 前記クラスのメソッドは、前記SIMD型のデータを対象とする演算子を定義するメソッドであり、
    前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、
    前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換える
    ことを特徴とする請求項5記載のプログラム。
  7. 前記クラスには、対応する処理を実現する1つの機械語命令が対応づけられ、
    前記置換サブステップでは、前記中間コードを、前記クラスに対応づけられた1つの機械語命令に置き換える
    ことを特徴とする請求項2〜6のいずれか1項に記載のプログラム。
  8. 前記クラスには、対応する処理を実現する2以上の機械語命令が対応づけられ、
    前記置換サブステップでは、前記中間コードを、前記クラスに対応づけられた2以上の機械語命令に置き換える
    ことを特徴とする請求項2〜6のいずれか1項に記載のプログラム。
  9. 前記演算処理定義情報は、前記ソースプログラムにインクルードされるヘッダファイルであり、
    前記ヘッダファイルには、関数によって前記演算処理が定義され、
    前記中間コード変換ステップは、前記中間コードのうち、前記ヘッダファイルで定義された関数を参照しているものがあるか否かを検出することによって、前記演算処理を参照ているものがあるか否かを検出する
    ことを特徴とする請求項1記載のプログラム。
  10. 前記関数は、対応する処理を実現する1つの機械語命令が記述された関数であり、
    前記置換サブステップでは、前記中間コードを前記関数に記述された1つの機械語命令に置き換える
    ことを特徴とする請求項9記載のプログラム。
  11. 前記関数には、入力データの最上位ビットから0が連続するビット数を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットから0が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  12. 前記関数には、入力データの最上位ビットから1が連続するビット数を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットから1が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  13. 前記関数には、入力データの最上位ビットと同じ値が連続するビット数を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットと同じ値が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  14. 前記関数は、入力データの最上位ビットと同じ値が最上位ビットの次から何ビット連続するかを返す関数であり、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットと同じ値が最上位ビットの次から何ビット連続するかを数え、その結果を第2レジスタに格納する機械語命令である
    ことを特徴とする請求項13記載のプログラム。
  15. 前記関数には、入力データ中に含まれる1のビット数を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値について、1のビット数を数え、その結果を第2レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  16. 前記関数には、入力データから、指定されたビット位置のビットを抽出し、符号拡張した値を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値から、第2レジスタで指定されたビット位置のビットを取り出し、符号拡張して第3レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  17. 前記関数には、入力データから、指定されたビット位置のビットを抽出し、ゼロ拡張した値を返す関数が含まれ、
    前記関数に記述されている機械語命令は、第1レジスタに格納された値から、第2レジスタで指定されたビット位置のビットを取り出し、ゼロ拡張して第3レジスタに格納する機械語命令である
    ことを特徴とする請求項10記載のプログラム。
  18. 前記関数は、対応する処理を実現する2以上の機械語命令からなる機械語命令列が記述された関数であり、
    前記置換サブステップでは、前記中間コードを前記関数に記述された機械語命令列に置き換える
    ことを特徴とする請求項9記載のプログラム。
  19. 前記関数には、モジュロアドレッシングのアドレス更新をする関数が含まれる
    ことを特徴とする請求項18記載のプログラム。
  20. 前記関数に記述されている機械語命令列には、第1レジスタに格納された値の所定のビットフィールドを第2レジスタに格納された値で置き換えることによって得られる値を第3レジスタに格納する機械語命令が含まれる
    ことを特徴とする請求項19記載のプログラム。
  21. 前記関数には、ビットリバースアドレッシングのアドレス更新をする関数が含まれる
    ことを特徴とする請求項18記載のプログラム。
  22. 前記関数に記述されている機械語命令列には、第1レジスタに格納された値の所定のビットフィールドをビット単位で位置反転することによって得られる値を第3レジスタに格納する機械語命令が含まれる
    ことを特徴とする請求項21記載のプログラム。
  23. 前記関数には、最適化におけるレジスタ割り付けの対象となる汎用レジスタに加えて、レジスタ割り付けの対象とならないアキュムレータも更新する演算であって、アキュムレータを参照型として一時変数を指定することが可能な関数が含まれる
    ことを特徴とする請求項9記載のプログラム。
  24. 前記関数は、乗算を行う関数であって、乗算結果を格納するアキュムレータを参照型として一時変数を指定することが可能な関数である
    ことを特徴とする請求項23記載のプログラム。
  25. 前記置換サブステップでは、前記関数を参照している中間コードを、当該関数の引数の種類に対応した種類のオペランドを持つ機械語命令に置き換える
    ことを特徴とする請求項9記載のプログラム。
  26. 前記置換サブステップでは、
    前記数の引数がすべて定数である場合には、それらの定数を畳み込んで得られる定数値をオペランドとして持つ機械語命令に置き換え、
    前記数の引数の一部が定数である場合には、即値オペランドを持つ機械語命令に置き換え、
    前記数の引数がすべて変数である場合には、レジスタオペランドを持つ機械語命令に置き換える
    ことを特徴とする請求項25記載のプログラム。
  27. 前記最適化ステップは、異なる型間の演算を行う複数の中間コード又は複数の機械語命令を、当該演算を行う1つの機械語命令に置き換える型変換最適化サブステップを含む
    ことを特徴とする請求項1記載のプログラム。
  28. 前記型変換サブステップでは、nビットの2つの変数を乗算し、結果を2nビットの変数に格納する演算を行う複数の中間コード又は複数の機械語命令を、当該演算を行う1つの機械語命令に置き換える
    ことを特徴とする請求項27記載のプログラム。
  29. 前記型変換サブステップでは、前記2つの変数に対して、nビットから2nビットに型変換する明示的な宣言がなされている場合に、前記演算を前記機械語命令に置き換える
    ことを特徴とする請求項28記載のプログラム。
  30. 前記コンパイラは、2以上の固定小数点型を対象として演算する2以上の固定小数点モードを備えるプロセッサを対象し、
    前記パーサーステップでは、前記固定小数点モードを切り替える旨の記述を前記ソースプログラムにおいて検出し、
    前記コンパイラは、さらに、
    前記パーサーステップにおいて前記固定小数点モードを切り替える旨の記述が検出された場合に、その記述に従って、固定小数点モードを切り替えるための機械語命令を挿入する固定小数点モード切替ステップを含む
    ことを特徴とする請求項1記載のプログラム。
  31. 前記固定小数点モードを切り替える旨の記述は、対象となる関数に対応づけられ、
    前記固定小数点モード切替ステップでは、対応する関数の先頭及び末尾に、それぞれ、固定小数点モードの退避及び復帰に相当する機械語命令を挿入する
    ことを特徴とする請求項30記載のプログラム。
  32. 前記最適化ステップは、前記ソースプログラムにおいて、特定箇所での実行時間が所定サイクル数だけ確保されるようなレイテンシを指定する旨の記述を検出し、検出した指定に従って、前記レイテンシが確保されるように機械語命令のスケジューリングを行うレイテンシ最適化サブステップを含む
    ことを特徴とする請求項1記載のプログラム。
  33. 前記レイテンシ最適化サブステップでは、第1ラベルが付された第1機械語命令と第2レベルが付された第2機械語命令間を対象とした一定サイクル数のレイテンシを指定する旨の記述を検出すると、前記第1機械語命令が実行されてから前記第2機械語命令が実行されるまでに前記サイクル数だけ実行時間がかかるように、前記スケジューリングを行う
    ことを特徴とする請求項32記載のプログラム。
  34. 前記レイテンシ最適化サブステップでは、所定のレジスタへのアクセスを対象とした一定サイクル数のレイテンシを指定する旨の記述を検出すると、前記レジスタにアクセスする機械語命令が実行されてから次に当該レジスタにアクセスする機械語命令が実行されるまでに前記サイクル数だけ実行時間がかかるように、前記スケジューリングを行う
    ことを特徴とする請求項32記載のプログラム。
  35. 前記コンパイラは、さらに、前記演算処理定義情報で使用されている機械語命令を当該コンパイラが対象としている第1プロセッサとは異なる第2プロセッサの機械語命令に置き換えるためのクラスライブラリを備える
    ことを特徴とする請求項1記載のプログラム。
  36. ソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を保持する手段と、
    前記ソースプログラムを解析するパーサー手段と、
    解析されたソースプログラムを中間コードに変換する中間コード変換手段と、
    変換された中間コードを最適化する最適化手段と、
    最適化された中間コードを機械語命令に変換するコード生成手段とを備え、
    前記中間コード変換手段は、
    前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換部と、
    前記ステートメント変換部において変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出部と、
    あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換部とを含み、
    前記最適化手段は、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行することに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行するものである
    ことを特徴とするコンパイラ装置。
  37. プログラムをコンピュータ上で実行させることによって、ソースプログラムから機械語プログラムを生成するコンパイル方法であって、
    前記プログラムは前記コンピュータに
    前記ソースプログラムを解析するパーサーステップと、
    解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、
    変換された中間コードを最適化する最適化ステップと、
    最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって
    前記中間コード変換ステップの実行においては、
    前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、
    前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、
    あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであり
    前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものである
    ことを特徴とするコンパイル方法。
JP2002226682A 2002-08-02 2002-08-02 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 Expired - Lifetime JP3801545B2 (ja)

Priority Applications (8)

Application Number Priority Date Filing Date Title
JP2002226682A JP3801545B2 (ja) 2002-08-02 2002-08-02 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US10/630,705 US7284241B2 (en) 2002-08-02 2003-07-31 Compiler, compiler apparatus and compilation method
EP03016683A EP1398695A3 (en) 2002-08-02 2003-08-01 Compiler
EP07013450A EP1837757A3 (en) 2002-08-02 2003-08-01 Compiler with particular instruction scheduling
EP07013451A EP1837758A3 (en) 2002-08-02 2003-08-01 Optimising compiler generating assembly code that uses special instructions of the processor which are defined in separate files
CNB031522564A CN1312582C (zh) 2002-08-02 2003-08-01 编译装置和编译方法
CNA2007100885255A CN101196825A (zh) 2002-08-02 2003-08-01 编译程序、编译程序装置和编译方法
US11/790,215 US8151254B2 (en) 2002-08-02 2007-04-24 Compiler, compiler apparatus and compilation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002226682A JP3801545B2 (ja) 2002-08-02 2002-08-02 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2004070531A JP2004070531A (ja) 2004-03-04
JP3801545B2 true JP3801545B2 (ja) 2006-07-26

Family

ID=31185082

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002226682A Expired - Lifetime JP3801545B2 (ja) 2002-08-02 2002-08-02 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法

Country Status (4)

Country Link
US (2) US7284241B2 (ja)
EP (3) EP1837758A3 (ja)
JP (1) JP3801545B2 (ja)
CN (2) CN101196825A (ja)

Families Citing this family (143)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7024666B1 (en) * 2002-01-28 2006-04-04 Roy-G-Biv Corporation Motion control systems and methods
US20010032278A1 (en) 1997-10-07 2001-10-18 Brown Stephen J. Remote generation and distribution of command programs for programmable devices
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US6830812B2 (en) * 2003-01-21 2004-12-14 Equity Enterprises Carbon material and process of manufacturing
US7210116B2 (en) * 2003-06-27 2007-04-24 Robert Zeidman Method and apparatus for synthesizing a hardware system from a software description
US20060064503A1 (en) * 2003-09-25 2006-03-23 Brown David W Data routing systems and methods
US8027349B2 (en) 2003-09-25 2011-09-27 Roy-G-Biv Corporation Database event driven motion systems
JP4157016B2 (ja) * 2003-11-05 2008-09-24 株式会社東芝 コンパイラ装置及びコンパイル方法
ATE466334T1 (de) * 2004-02-27 2010-05-15 Ericsson Telefon Ab L M Programmieren eines flash-speichers
JP2005284577A (ja) * 2004-03-29 2005-10-13 Matsushita Electric Ind Co Ltd コンパイラ
US7475392B2 (en) * 2004-06-07 2009-01-06 International Business Machines Corporation SIMD code generation for loops with mixed data lengths
US7478377B2 (en) 2004-06-07 2009-01-13 International Business Machines Corporation SIMD code generation in the presence of optimized misaligned data reorganization
US7395531B2 (en) * 2004-06-07 2008-07-01 International Business Machines Corporation Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements
US8549501B2 (en) 2004-06-07 2013-10-01 International Business Machines Corporation Framework for generating mixed-mode operations in loop-level simdization
US7386842B2 (en) * 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US7367026B2 (en) * 2004-06-07 2008-04-29 International Business Machines Corporation Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization
DE112005001790B4 (de) * 2004-07-28 2016-01-28 Mitsubishi Electric Corp. Programmerstellungseinrichtung für eine programmierbare Steuervorrichtung, Programmerstellungsverfahren für eine programmierbare Steuervorrichtung und Aufzeichnungsmedium mit darauf aufgezeichnetem Programm
US20060048118A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Method and apparatus for optimizing code with artificial statements
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
US7529888B2 (en) * 2004-11-19 2009-05-05 Intel Corporation Software caching with bounded-error delayed update
JP2006243838A (ja) * 2005-02-28 2006-09-14 Toshiba Corp プログラム開発装置
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
US7669191B1 (en) * 2005-06-14 2010-02-23 Xilinx, Inc. Compile-time dispatch of operations on type-safe heterogeneous containers
WO2007016808A1 (en) * 2005-08-05 2007-02-15 Intel Corporation A compiling and translating method and apparatus
US7779396B2 (en) * 2005-08-10 2010-08-17 Microsoft Corporation Syntactic program language translation
US9075630B1 (en) * 2005-11-14 2015-07-07 The Mathworks, Inc. Code evaluation of fixed-point math in the presence of customizable fixed-point typing rules
US8266609B2 (en) * 2005-12-07 2012-09-11 Microsoft Corporation Efficient placement of software transactional memory operations around procedure calls
US7926046B2 (en) * 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
US8352925B2 (en) * 2007-01-16 2013-01-08 Oracle America, Inc. Mechanism for enabling a set of code intended for a first platform to be executed on a second platform
WO2008110411A1 (en) * 2007-03-14 2008-09-18 International Business Machines Corporation Automatic formatting of computer program source code
JP5226328B2 (ja) * 2007-03-27 2013-07-03 パナソニック株式会社 コード変換装置
US20080247532A1 (en) * 2007-04-06 2008-10-09 Waldean Allen Schulz Method and System for Representing Quantitative Properties in a Computer Program and for Validating Dimensional Integrity of Mathematical Expressions
US8225295B2 (en) * 2007-09-21 2012-07-17 Jens Palsberg Register allocation by puzzle solving
WO2009037731A1 (ja) * 2007-09-21 2009-03-26 Fujitsu Limited 翻訳装置と翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサ
US8326814B2 (en) 2007-12-05 2012-12-04 Box, Inc. Web-based file management system and service
JP2009187285A (ja) * 2008-02-06 2009-08-20 Panasonic Corp プログラム変換方法、プログラム変換装置およびプログラム
US8255886B2 (en) * 2008-06-30 2012-08-28 Intel Corporation Methods and apparatus for analyzing SIMD code
KR101645001B1 (ko) * 2009-02-18 2016-08-02 삼성전자주식회사 Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법
US8732680B2 (en) * 2009-02-19 2014-05-20 International Business Machines Corporation Intermediate form for bitwidth sensitive applications and uses thereof
GB0907559D0 (en) * 2009-05-01 2009-06-10 Optos Plc Improvements relating to processing unit instruction sets
US8904366B2 (en) * 2009-05-15 2014-12-02 International Business Machines Corporation Use of vectorization instruction sets
US8448153B1 (en) 2009-10-29 2013-05-21 Ning Wang Encoding data and metadata for run-time checking of computer code and data serialization
US8856759B2 (en) * 2010-02-01 2014-10-07 Bull Hn Information Systems Inc. Method and apparatus providing COBOL decimal type arithmetic functions with improved performance
JP5496792B2 (ja) * 2010-06-29 2014-05-21 インターナショナル・ビジネス・マシーンズ・コーポレーション コード変換プログラム、方法及びシステム
WO2012099617A1 (en) 2011-01-20 2012-07-26 Box.Net, Inc. Real time notification of activities that occur in a web-based collaboration environment
US9015601B2 (en) 2011-06-21 2015-04-21 Box, Inc. Batch uploading of content to a web-based collaboration environment
US9063912B2 (en) 2011-06-22 2015-06-23 Box, Inc. Multimedia content preview rendering in a cloud content management system
WO2013009328A2 (en) 2011-07-08 2013-01-17 Box.Net, Inc. Collaboration sessions in a workspace on cloud-based content management system
EP2729877A4 (en) 2011-07-08 2015-06-17 Box Inc DESKTOP APPLICATION FOR ACCESS AND INTERACTION WITH JOBS IN A CLOUD-BASED CONTENT MANAGEMENT SYSTEM AND SYNCHRONIZATION MECHANISMS THEREFOR
US8656376B2 (en) * 2011-09-01 2014-02-18 National Tsing Hua University Compiler for providing intrinsic supports for VLIW PAC processors with distributed register files and method thereof
US9197718B2 (en) 2011-09-23 2015-11-24 Box, Inc. Central management and control of user-contributed content in a web-based collaboration environment and management console thereof
US8515902B2 (en) 2011-10-14 2013-08-20 Box, Inc. Automatic and semi-automatic tagging features of work items in a shared workspace for metadata tracking in a cloud-based content management system with selective or optional user contribution
US9098474B2 (en) * 2011-10-26 2015-08-04 Box, Inc. Preview pre-generation based on heuristics and algorithmic prediction/assessment of predicted user behavior for enhancement of user experience
US11210610B2 (en) 2011-10-26 2021-12-28 Box, Inc. Enhanced multimedia content preview rendering in a cloud content management system
US8990307B2 (en) 2011-11-16 2015-03-24 Box, Inc. Resource effective incremental updating of a remote client with events which occurred via a cloud-enabled platform
US9773051B2 (en) 2011-11-29 2017-09-26 Box, Inc. Mobile platform file and folder selection functionalities for offline access and synchronization
US9019123B2 (en) 2011-12-22 2015-04-28 Box, Inc. Health check services for web-based collaboration environments
US11232481B2 (en) 2012-01-30 2022-01-25 Box, Inc. Extended applications of multimedia content previews in the cloud-based content management system
US9965745B2 (en) 2012-02-24 2018-05-08 Box, Inc. System and method for promoting enterprise adoption of a web-based collaboration environment
US9195636B2 (en) 2012-03-07 2015-11-24 Box, Inc. Universal file type preview for mobile devices
US9054919B2 (en) 2012-04-05 2015-06-09 Box, Inc. Device pinning capability for enterprise cloud service and storage accounts
US9575981B2 (en) 2012-04-11 2017-02-21 Box, Inc. Cloud service enabled to handle a set of files depicted to a user as a single file in a native operating system
US9413587B2 (en) 2012-05-02 2016-08-09 Box, Inc. System and method for a third-party application to access content within a cloud-based platform
US9396216B2 (en) 2012-05-04 2016-07-19 Box, Inc. Repository redundancy implementation of a system which incrementally updates clients with events that occurred via a cloud-enabled platform
US9691051B2 (en) 2012-05-21 2017-06-27 Box, Inc. Security enhancement through application access control
US8914900B2 (en) 2012-05-23 2014-12-16 Box, Inc. Methods, architectures and security mechanisms for a third-party application to access content in a cloud-based platform
US9027108B2 (en) 2012-05-23 2015-05-05 Box, Inc. Systems and methods for secure file portability between mobile applications on a mobile device
US9021099B2 (en) 2012-07-03 2015-04-28 Box, Inc. Load balancing secure FTP connections among multiple FTP servers
GB2505072A (en) 2012-07-06 2014-02-19 Box Inc Identifying users and collaborators as search results in a cloud-based system
US9712510B2 (en) 2012-07-06 2017-07-18 Box, Inc. Systems and methods for securely submitting comments among users via external messaging applications in a cloud-based platform
US9792320B2 (en) 2012-07-06 2017-10-17 Box, Inc. System and method for performing shard migration to support functions of a cloud-based service
US9473532B2 (en) 2012-07-19 2016-10-18 Box, Inc. Data loss prevention (DLP) methods by a cloud service including third party integration architectures
US8868574B2 (en) 2012-07-30 2014-10-21 Box, Inc. System and method for advanced search and filtering mechanisms for enterprise administrators in a cloud-based environment
US9794256B2 (en) 2012-07-30 2017-10-17 Box, Inc. System and method for advanced control tools for administrators in a cloud-based service
US9369520B2 (en) 2012-08-19 2016-06-14 Box, Inc. Enhancement of upload and/or download performance based on client and/or server feedback information
US8745267B2 (en) 2012-08-19 2014-06-03 Box, Inc. Enhancement of upload and/or download performance based on client and/or server feedback information
US9558202B2 (en) 2012-08-27 2017-01-31 Box, Inc. Server side techniques for reducing database workload in implementing selective subfolder synchronization in a cloud-based environment
US9135462B2 (en) 2012-08-29 2015-09-15 Box, Inc. Upload and download streaming encryption to/from a cloud-based platform
US9195519B2 (en) 2012-09-06 2015-11-24 Box, Inc. Disabling the self-referential appearance of a mobile application in an intent via a background registration
US9311071B2 (en) 2012-09-06 2016-04-12 Box, Inc. Force upgrade of a mobile application via a server side configuration file
US9117087B2 (en) 2012-09-06 2015-08-25 Box, Inc. System and method for creating a secure channel for inter-application communication based on intents
US9292833B2 (en) 2012-09-14 2016-03-22 Box, Inc. Batching notifications of activities that occur in a web-based collaboration environment
US10200256B2 (en) 2012-09-17 2019-02-05 Box, Inc. System and method of a manipulative handle in an interactive mobile user interface
US9553758B2 (en) 2012-09-18 2017-01-24 Box, Inc. Sandboxing individual applications to specific user folders in a cloud-based service
US10915492B2 (en) 2012-09-19 2021-02-09 Box, Inc. Cloud-based platform enabled with media content indexed for text-based searches and/or metadata extraction
US9740493B2 (en) 2012-09-28 2017-08-22 Intel Corporation System and method of loop vectorization by compressing indexes and data elements from iterations based on a control mask
US9959420B2 (en) 2012-10-02 2018-05-01 Box, Inc. System and method for enhanced security and management mechanisms for enterprise administrators in a cloud-based environment
US9495364B2 (en) 2012-10-04 2016-11-15 Box, Inc. Enhanced quick search features, low-barrier commenting/interactive features in a collaboration platform
US9705967B2 (en) 2012-10-04 2017-07-11 Box, Inc. Corporate user discovery and identification of recommended collaborators in a cloud platform
US9665349B2 (en) 2012-10-05 2017-05-30 Box, Inc. System and method for generating embeddable widgets which enable access to a cloud-based collaboration platform
US9756022B2 (en) 2014-08-29 2017-09-05 Box, Inc. Enhanced remote key management for an enterprise in a cloud-based environment
JP5982343B2 (ja) 2012-10-17 2016-08-31 ボックス インコーポレイテッドBox, Inc. クラウドベース環境におけるリモートキー管理
US10235383B2 (en) 2012-12-19 2019-03-19 Box, Inc. Method and apparatus for synchronization of items with read-only permissions in a cloud-based environment
US9396245B2 (en) 2013-01-02 2016-07-19 Box, Inc. Race condition handling in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform
US9953036B2 (en) 2013-01-09 2018-04-24 Box, Inc. File system monitoring in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform
US9507795B2 (en) 2013-01-11 2016-11-29 Box, Inc. Functionalities, features, and user interface of a synchronization client to a cloud-based environment
US10599671B2 (en) 2013-01-17 2020-03-24 Box, Inc. Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform
US8935781B1 (en) * 2013-02-01 2015-01-13 Google Inc. Native code module security for arm 64-bit instruction set architectures
CN104063258B (zh) * 2013-03-21 2017-05-03 国际商业机器公司 用于调试过程中的代码动态切换的方法和系统
CN103268223B (zh) * 2013-04-26 2016-06-29 深圳中微电科技有限公司 在编译过程中改善乘加类指令执行性能的方法
US9274931B2 (en) 2013-05-06 2016-03-01 International Business Machines Corporation Inserting implicit sequence points into computer program code to support debug operations
US10846074B2 (en) 2013-05-10 2020-11-24 Box, Inc. Identification and handling of items to be ignored for synchronization with a cloud-based platform by a synchronization client
US10725968B2 (en) 2013-05-10 2020-07-28 Box, Inc. Top down delete or unsynchronization on delete of and depiction of item synchronization with a synchronization client to a cloud-based platform
AU2014278843A1 (en) * 2013-06-11 2016-01-07 Smart Research Limited Method and computer program for generating or manipulating source code
US9633037B2 (en) 2013-06-13 2017-04-25 Box, Inc Systems and methods for synchronization event building and/or collapsing by a synchronization component of a cloud-based platform
US9805050B2 (en) 2013-06-21 2017-10-31 Box, Inc. Maintaining and updating file system shadows on a local device by a synchronization client of a cloud-based platform
US10110656B2 (en) 2013-06-25 2018-10-23 Box, Inc. Systems and methods for providing shell communication in a cloud-based platform
US10229134B2 (en) 2013-06-25 2019-03-12 Box, Inc. Systems and methods for managing upgrades, migration of user data and improving performance of a cloud-based platform
US9535924B2 (en) 2013-07-30 2017-01-03 Box, Inc. Scalability improvement in a system which incrementally updates clients with events that occurred in a cloud-based collaboration platform
US10509527B2 (en) 2013-09-13 2019-12-17 Box, Inc. Systems and methods for configuring event-based automation in cloud-based collaboration platforms
US9704137B2 (en) 2013-09-13 2017-07-11 Box, Inc. Simultaneous editing/accessing of content by collaborator invitation through a web-based or mobile application to a cloud-based collaboration platform
GB2518298A (en) 2013-09-13 2015-03-18 Box Inc High-availability architecture for a cloud-based concurrent-access collaboration platform
US9535909B2 (en) 2013-09-13 2017-01-03 Box, Inc. Configurable event-based automation architecture for cloud-based collaboration platforms
US8892679B1 (en) 2013-09-13 2014-11-18 Box, Inc. Mobile device, methods and user interfaces thereof in a mobile device platform featuring multifunctional access and engagement in a collaborative environment provided by a cloud-based platform
US9213684B2 (en) 2013-09-13 2015-12-15 Box, Inc. System and method for rendering document in web browser or mobile device regardless of third-party plug-in software
US10866931B2 (en) 2013-10-22 2020-12-15 Box, Inc. Desktop application for accessing a cloud collaboration platform
US9501268B2 (en) 2013-12-23 2016-11-22 International Business Machines Corporation Generating SIMD code from code statements that include non-isomorphic code statements
JP6245031B2 (ja) * 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US10530854B2 (en) 2014-05-30 2020-01-07 Box, Inc. Synchronization of permissioned content in cloud-based environments
US9602514B2 (en) 2014-06-16 2017-03-21 Box, Inc. Enterprise mobility management and verification of a managed application by a content provider
US9894119B2 (en) 2014-08-29 2018-02-13 Box, Inc. Configurable metadata-based automation and content classification architecture for cloud-based collaboration platforms
US10574442B2 (en) 2014-08-29 2020-02-25 Box, Inc. Enhanced remote key management for an enterprise in a cloud-based environment
US10038731B2 (en) 2014-08-29 2018-07-31 Box, Inc. Managing flow-based interactions with cloud-based shared content
US10210591B2 (en) * 2015-02-02 2019-02-19 Microsoft Technology Licensing, Llc Optimizing compilation of shaders
GB201505743D0 (en) * 2015-04-02 2015-05-20 Technion Res & Dev Foundation Field effect transistor device
KR102063966B1 (ko) * 2015-10-21 2020-01-09 엘에스산전 주식회사 Plc 명령어 컴파일 최적화 방법
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
CN107340995B (zh) * 2016-04-29 2020-11-20 中国铁道科学研究院 一种牵引控制应用软件开发系统及对平台无关代码的优化编译方法
US10908886B2 (en) 2016-07-12 2021-02-02 Oracle International Corporation Accessing a migrated member in an updated type
US10558460B2 (en) * 2016-12-14 2020-02-11 Qualcomm Incorporated General purpose register allocation in streaming processor
US10726196B2 (en) * 2017-03-03 2020-07-28 Evolv Technology Solutions, Inc. Autonomous configuration of conversion code to control display and functionality of webpage portions
JP6950385B2 (ja) * 2017-09-12 2021-10-13 オムロン株式会社 制御装置および制御方法
CN108304218A (zh) * 2018-03-14 2018-07-20 郑州云海信息技术有限公司 一种汇编代码的编写方法、装置、系统和可读存储介质
CN109352645A (zh) * 2018-09-28 2019-02-19 库壳教育科技有限公司 一种应用于机器人教育的简易编程方法及装置
CN111142848B (zh) * 2018-11-05 2023-09-19 深圳Tcl新技术有限公司 一种软件程序编译方法、执行方法及装置
CN109976793B (zh) * 2019-03-15 2022-05-10 北京字节跳动网络技术有限公司 一种应用程序的运行方法、装置、设备和介质
CN110321130B (zh) * 2019-06-24 2021-04-16 大连理工大学 基于系统调用日志的不可重复编译定位方法
KR102319403B1 (ko) * 2019-11-21 2021-10-29 국방과학연구소 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법
CN111078290B (zh) * 2019-12-17 2023-03-14 西安电子科技大学 一种用于可扩展指令集的编译器及编译方法
US11347488B2 (en) * 2020-05-18 2022-05-31 Fortinet, Inc. Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device
CN113127004B (zh) * 2021-05-06 2022-08-16 福建省天奕网络科技有限公司 一种安卓端vmp保护的实现方法及系统
CN114428630B (zh) * 2022-03-31 2022-07-01 浙江地芯引力科技有限公司 芯片算法升级方法、装置和芯片
CN116737175B (zh) * 2023-08-16 2023-12-08 通用技术集团机床工程研究院有限公司 译码方法、文件解析方法、解析器、系统及存储介质

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02236732A (ja) 1989-03-10 1990-09-19 Fujitsu Ltd ソースプログラム作成方式
JPH0594310A (ja) 1991-10-03 1993-04-16 Kobe Nippon Denki Software Kk 機械語コード生成方法
JPH0721033A (ja) * 1993-07-07 1995-01-24 Nec Corp 言語処理装置及びその方法
GB2279781A (en) 1993-07-10 1995-01-11 Ibm Defining topology of a data processing system
JPH0756745A (ja) * 1993-08-13 1995-03-03 Nec Corp 言語処理プログラムのコンパイラ処理方式
US5822588A (en) * 1995-06-09 1998-10-13 Sun Microsystem, Inc. System and method for checking the use of synchronization locks in a multi-threaded target program
US5815719A (en) 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
JPH10228382A (ja) * 1997-02-14 1998-08-25 Nec Corp コンパイル方式
US6247174B1 (en) * 1998-01-02 2001-06-12 Hewlett-Packard Company Optimization of source code with embedded machine instructions
CN1223402A (zh) * 1998-01-12 1999-07-21 日本电气株式会社 在优化中能减少中断处理的编译器及其优化方法
JP3246438B2 (ja) 1998-04-01 2002-01-15 日本電気株式会社 可変ターゲットコンパイル処理方法、その処理装置、そのプログラムの記憶媒体および変換テーブルの記憶媒体
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
JP2000056981A (ja) 1998-08-06 2000-02-25 Matsushita Electric Ind Co Ltd プログラム変換装置
US6370685B1 (en) * 1999-01-06 2002-04-09 Intel Corporation Data-flow method of analyzing definitions and uses of L values in programs
US6330714B1 (en) * 1999-02-08 2001-12-11 International Business Machines Corporation Method and computer program product for implementing redundant lock avoidance
US6460177B1 (en) * 1999-09-22 2002-10-01 Lucent Technologies Inc. Method for target-specific development of fixed-point algorithms employing C++ class definitions
EP1113356B1 (en) * 1999-12-30 2009-02-04 Texas Instruments Incorporated Method and apparatus for reducing the size of code in a processor with an exposed pipeline
JP2001273150A (ja) 2000-03-27 2001-10-05 Matsushita Electric Ind Co Ltd プログラム変換装置
US20030023960A1 (en) * 2001-07-25 2003-01-30 Shoab Khan Microprocessor instruction format using combination opcodes and destination prefixes
JP3707727B2 (ja) * 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
GB0028079D0 (en) * 2000-11-17 2001-01-03 Imperial College System and method
US20020188830A1 (en) * 2001-06-01 2002-12-12 Brian Boles Bit replacement and extraction instructions
US6851040B2 (en) * 2001-08-15 2005-02-01 Transmeta Corporation Method and apparatus for improving segmented memory addressing
JP2004013190A (ja) 2002-06-03 2004-01-15 Matsushita Electric Ind Co Ltd ソフトウエア開発環境、シミュレータ及び記録媒体
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
JP3801545B2 (ja) * 2002-08-02 2006-07-26 松下電器産業株式会社 コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
US7530062B2 (en) * 2003-05-23 2009-05-05 Microsoft Corporation Optimizing compiler transforms for a high level shader language

Also Published As

Publication number Publication date
US20070256065A1 (en) 2007-11-01
US20040025150A1 (en) 2004-02-05
US7284241B2 (en) 2007-10-16
EP1398695A2 (en) 2004-03-17
CN1312582C (zh) 2007-04-25
EP1837757A3 (en) 2009-05-06
CN1482540A (zh) 2004-03-17
CN101196825A (zh) 2008-06-11
EP1398695A3 (en) 2005-06-22
EP1837757A2 (en) 2007-09-26
EP1837758A2 (en) 2007-09-26
US8151254B2 (en) 2012-04-03
EP1837758A3 (en) 2009-08-05
JP2004070531A (ja) 2004-03-04

Similar Documents

Publication Publication Date Title
JP3801545B2 (ja) コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP3847672B2 (ja) コンパイラ装置及びコンパイル方法
JP3974063B2 (ja) プロセッサおよびコンパイラ
JP3958662B2 (ja) プロセッサ
Sreraman et al. A vectorizing compiler for multimedia extensions
US7386844B2 (en) Compiler apparatus and method of optimizing a source program by reducing a hamming distance between two instructions
US5696956A (en) Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
US5819064A (en) Hardware extraction technique for programmable reduced instruction set computers
Leupers et al. Retargetable compiler technology for embedded systems: tools and applications
JP4879589B2 (ja) コンパイラ装置
JP4721975B2 (ja) コンパイラ装置およびコンパイル方法
JP2010186487A (ja) コンパイラ装置及びそのシステム
Nelson Computer Architecture
Jeroen van Straten ρ-VEX user manual
JP2007102821A (ja) プロセッサおよびコンパイラ
Gupta et al. LLVM backend development for ReISC architecture
JP2004348759A (ja) 多機種対応型情報処理システム、および、方法
JP2018067167A (ja) コード生成装置、コード生成方法及びコード生成プログラム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051216

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060208

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060425

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 3801545

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20100512

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130512

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130512

Year of fee payment: 7

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term