JP3801545B2 - コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 - Google Patents
コンパイラ用プログラム、コンパイラ装置及びコンパイル方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
Description
【発明の属する技術分野】
本発明は、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】
【0027】
また、このようなプロセッサ1のフラグセット(後述する条件フラグレジスタ等で管理されるフラグ)は、以下の表2に示される通りである。
【表2】
【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】
【表4】
【表5】
【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の機械語命令列に変換するステートメント変換サブステップと、
前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、
あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであって、
前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものである
ことを特徴とするプログラム。 - 前記演算処理定義情報は、前記ソースプログラムにインクルードされるヘッダファイルであり、
前記ヘッダファイルには、データとメソッドとからなるクラスによって前記演算処理が定義され、
前記中間コード変換ステップは、前記中間コードのうち、前記ヘッダファイルで定義されたクラスを参照しているものがあるか否かを検出することによって、前記演算処理を参照しているものがあるか否かを検出する
ことを特徴とする請求項1記載のプログラム。 - 前記クラスは、固定小数点型を定義するクラスであり、
前記検出サブステップでは、前記固定小数点型のデータを使用している中間コードを検出する
ことを特徴とする請求項2記載のプログラム。 - 前記クラスのメソッドは、前記固定小数点型のデータを対象とする演算子を定義するメソッドであり、
前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、
前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換える
ことを特徴とする請求項3記載のプログラム。 - 前記クラスは、SIMD型を定義するクラスであり、
前記検出サブステップでは、前記SIMD型のデータを使用している中間コードを検出する
ことを特徴とする請求項2記載のプログラム。 - 前記クラスのメソッドは、前記SIMD型のデータを対象とする演算子を定義するメソッドであり、
前記検出サブステップでは、演算子と演算の対象となるデータの型との組が前記メソッドでの定義と一致するか否かによって前記検出をし、
前記置換サブステップでは、前記演算子と前記データの型との組が一致する中間コードを、対応する機械語命令に置き換える
ことを特徴とする請求項5記載のプログラム。 - 前記クラスには、対応する処理を実現する1つの機械語命令が対応づけられ、
前記置換サブステップでは、前記中間コードを、前記クラスに対応づけられた1つの機械語命令に置き換える
ことを特徴とする請求項2〜6のいずれか1項に記載のプログラム。 - 前記クラスには、対応する処理を実現する2以上の機械語命令が対応づけられ、
前記置換サブステップでは、前記中間コードを、前記クラスに対応づけられた2以上の機械語命令に置き換える
ことを特徴とする請求項2〜6のいずれか1項に記載のプログラム。 - 前記演算処理定義情報は、前記ソースプログラムにインクルードされるヘッダファイルであり、
前記ヘッダファイルには、関数によって前記演算処理が定義され、
前記中間コード変換ステップは、前記中間コードのうち、前記ヘッダファイルで定義された関数を参照しているものがあるか否かを検出することによって、前記演算処理を参照しているものがあるか否かを検出する
ことを特徴とする請求項1記載のプログラム。 - 前記関数は、対応する処理を実現する1つの機械語命令が記述された関数であり、
前記置換サブステップでは、前記中間コードを前記関数に記述された1つの機械語命令に置き換える
ことを特徴とする請求項9記載のプログラム。 - 前記関数には、入力データの最上位ビットから0が連続するビット数を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットから0が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数には、入力データの最上位ビットから1が連続するビット数を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットから1が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数には、入力データの最上位ビットと同じ値が連続するビット数を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットと同じ値が連続するビット数を数え、その結果を第2レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数は、入力データの最上位ビットと同じ値が最上位ビットの次から何ビット連続するかを返す関数であり、
前記関数に記述されている機械語命令は、第1レジスタに格納された値について、最上位ビットと同じ値が最上位ビットの次から何ビット連続するかを数え、その結果を第2レジスタに格納する機械語命令である
ことを特徴とする請求項13記載のプログラム。 - 前記関数には、入力データ中に含まれる1のビット数を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値について、1のビット数を数え、その結果を第2レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数には、入力データから、指定されたビット位置のビットを抽出し、符号拡張した値を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値から、第2レジスタで指定されたビット位置のビットを取り出し、符号拡張して第3レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数には、入力データから、指定されたビット位置のビットを抽出し、ゼロ拡張した値を返す関数が含まれ、
前記関数に記述されている機械語命令は、第1レジスタに格納された値から、第2レジスタで指定されたビット位置のビットを取り出し、ゼロ拡張して第3レジスタに格納する機械語命令である
ことを特徴とする請求項10記載のプログラム。 - 前記関数は、対応する処理を実現する2以上の機械語命令からなる機械語命令列が記述された関数であり、
前記置換サブステップでは、前記中間コードを前記関数に記述された機械語命令列に置き換える
ことを特徴とする請求項9記載のプログラム。 - 前記関数には、モジュロアドレッシングのアドレス更新をする関数が含まれる
ことを特徴とする請求項18記載のプログラム。 - 前記関数に記述されている機械語命令列には、第1レジスタに格納された値の所定のビットフィールドを第2レジスタに格納された値で置き換えることによって得られる値を第3レジスタに格納する機械語命令が含まれる
ことを特徴とする請求項19記載のプログラム。 - 前記関数には、ビットリバースアドレッシングのアドレス更新をする関数が含まれる
ことを特徴とする請求項18記載のプログラム。 - 前記関数に記述されている機械語命令列には、第1レジスタに格納された値の所定のビットフィールドをビット単位で位置反転することによって得られる値を第3レジスタに格納する機械語命令が含まれる
ことを特徴とする請求項21記載のプログラム。 - 前記関数には、最適化におけるレジスタ割り付けの対象となる汎用レジスタに加えて、レジスタ割り付けの対象とならないアキュムレータも更新する演算であって、アキュムレータを参照型として一時変数を指定することが可能な関数が含まれる
ことを特徴とする請求項9記載のプログラム。 - 前記関数は、乗算を行う関数であって、乗算結果を格納するアキュムレータを参照型として一時変数を指定することが可能な関数である
ことを特徴とする請求項23記載のプログラム。 - 前記置換サブステップでは、前記関数を参照している中間コードを、当該関数の引数の種類に対応した種類のオペランドを持つ機械語命令に置き換える
ことを特徴とする請求項9記載のプログラム。 - 前記置換サブステップでは、
前記関数の引数がすべて定数である場合には、それらの定数を畳み込んで得られる定数値をオペランドとして持つ機械語命令に置き換え、
前記関数の引数の一部が定数である場合には、即値オペランドを持つ機械語命令に置き換え、
前記関数の引数がすべて変数である場合には、レジスタオペランドを持つ機械語命令に置き換える
ことを特徴とする請求項25記載のプログラム。 - 前記最適化ステップは、異なる型間の演算を行う複数の中間コード又は複数の機械語命令を、当該演算を行う1つの機械語命令に置き換える型変換最適化サブステップを含む
ことを特徴とする請求項1記載のプログラム。 - 前記型変換サブステップでは、nビットの2つの変数を乗算し、結果を2nビットの変数に格納する演算を行う複数の中間コード又は複数の機械語命令を、当該演算を行う1つの機械語命令に置き換える
ことを特徴とする請求項27記載のプログラム。 - 前記型変換サブステップでは、前記2つの変数に対して、nビットから2nビットに型変換する明示的な宣言がなされている場合に、前記演算を前記機械語命令に置き換える
ことを特徴とする請求項28記載のプログラム。 - 前記コンパイラは、2以上の固定小数点型を対象として演算する2以上の固定小数点モードを備えるプロセッサを対象し、
前記パーサーステップでは、前記固定小数点モードを切り替える旨の記述を前記ソースプログラムにおいて検出し、
前記コンパイラは、さらに、
前記パーサーステップにおいて前記固定小数点モードを切り替える旨の記述が検出された場合に、その記述に従って、固定小数点モードを切り替えるための機械語命令を挿入する固定小数点モード切替ステップを含む
ことを特徴とする請求項1記載のプログラム。 - 前記固定小数点モードを切り替える旨の記述は、対象となる関数に対応づけられ、
前記固定小数点モード切替ステップでは、対応する関数の先頭及び末尾に、それぞれ、固定小数点モードの退避及び復帰に相当する機械語命令を挿入する
ことを特徴とする請求項30記載のプログラム。 - 前記最適化ステップは、前記ソースプログラムにおいて、特定箇所での実行時間が所定サイクル数だけ確保されるようなレイテンシを指定する旨の記述を検出し、検出した指定に従って、前記レイテンシが確保されるように機械語命令のスケジューリングを行うレイテンシ最適化サブステップを含む
ことを特徴とする請求項1記載のプログラム。 - 前記レイテンシ最適化サブステップでは、第1ラベルが付された第1機械語命令と第2レベルが付された第2機械語命令間を対象とした一定サイクル数のレイテンシを指定する旨の記述を検出すると、前記第1機械語命令が実行されてから前記第2機械語命令が実行されるまでに前記サイクル数だけ実行時間がかかるように、前記スケジューリングを行う
ことを特徴とする請求項32記載のプログラム。 - 前記レイテンシ最適化サブステップでは、所定のレジスタへのアクセスを対象とした一定サイクル数のレイテンシを指定する旨の記述を検出すると、前記レジスタにアクセスする機械語命令が実行されてから次に当該レジスタにアクセスする機械語命令が実行されるまでに前記サイクル数だけ実行時間がかかるように、前記スケジューリングを行う
ことを特徴とする請求項32記載のプログラム。 - 前記コンパイラは、さらに、前記演算処理定義情報で使用されている機械語命令を当該コンパイラが対象としている第1プロセッサとは異なる第2プロセッサの機械語命令に置き換えるためのクラスライブラリを備える
ことを特徴とする請求項1記載のプログラム。 - ソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
対象とするプロセッサに特有の機械語命令に対応する演算処理が予め定義された演算処理定義情報を保持する手段と、
前記ソースプログラムを解析するパーサー手段と、
解析されたソースプログラムを中間コードに変換する中間コード変換手段と、
変換された中間コードを最適化する最適化手段と、
最適化された中間コードを機械語命令に変換するコード生成手段とを備え、
前記中間コード変換手段は、
前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換部と、
前記ステートメント変換部において変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出部と、
あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換部とを含み、
前記最適化手段は、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行することに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行するものである
ことを特徴とするコンパイラ装置。 - プログラムをコンピュータ上で実行させることによって、ソースプログラムから機械語プログラムを生成するコンパイル方法であって、
前記プログラムは前記コンピュータに、
前記ソースプログラムを解析するパーサーステップと、
解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、
変換された中間コードを最適化する最適化ステップと、
最適化された中間コードを機械語命令に変換するコード生成ステップとを実行させるものであって、
前記中間コード変換ステップの実行においては、
前記ソースプログラムの各ステートメントを、対応する中間コード及び第1の機械語命令または第1の機械語命令列に変換するステートメント変換サブステップと、
前記ステートメント変換サブステップにおいて変換された前記中間コードのうち、前記演算処理定義情報で定義された演算処理を参照しているものがあるか否かを検出する検出サブステップと、
あると検出された場合に、その中間コードを、前記演算処理定義情報で定義された第2の機械語命令または第2の機械語命令列に置き換える置換サブステップとを実行させるものであり、
前記最適化ステップの実行においては、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の各機械語命令を対象としてレジスタ割り付けの最適化を実行させることに加えて、前記第1の機械語命令または前記第1の機械語命令列及び前記第2の機械語命令または前記第2の機械語命令列の機械語命令列全体を対象として命令結合、冗長除去、及び命令並び替えのいずれか1つまたはそれらの組合せとなる最適化を実行させるものである
ことを特徴とするコンパイル方法。
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)
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)
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 |
-
2002
- 2002-08-02 JP JP2002226682A patent/JP3801545B2/ja not_active Expired - Lifetime
-
2003
- 2003-07-31 US US10/630,705 patent/US7284241B2/en active Active
- 2003-08-01 CN CNA2007100885255A patent/CN101196825A/zh active Pending
- 2003-08-01 EP EP07013451A patent/EP1837758A3/en not_active Withdrawn
- 2003-08-01 EP EP07013450A patent/EP1837757A3/en not_active Withdrawn
- 2003-08-01 EP EP03016683A patent/EP1398695A3/en not_active Ceased
- 2003-08-01 CN CNB031522564A patent/CN1312582C/zh not_active Expired - Lifetime
-
2007
- 2007-04-24 US US11/790,215 patent/US8151254B2/en active Active
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 |