JP3327818B2 - プログラム変換装置及び記録媒体 - Google Patents

プログラム変換装置及び記録媒体

Info

Publication number
JP3327818B2
JP3327818B2 JP23514497A JP23514497A JP3327818B2 JP 3327818 B2 JP3327818 B2 JP 3327818B2 JP 23514497 A JP23514497 A JP 23514497A JP 23514497 A JP23514497 A JP 23514497A JP 3327818 B2 JP3327818 B2 JP 3327818B2
Authority
JP
Japan
Prior art keywords
instruction
constant
instructions
long
size
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP23514497A
Other languages
English (en)
Other versions
JPH1173325A (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 JP23514497A priority Critical patent/JP3327818B2/ja
Priority to US09/143,269 priority patent/US6367067B1/en
Priority to EP98306914A priority patent/EP0899656B1/en
Priority to DE69832932T priority patent/DE69832932T2/de
Priority to EP05077437A priority patent/EP1628213A3/en
Priority to KR10-1998-0035360A priority patent/KR100496946B1/ko
Publication of JPH1173325A publication Critical patent/JPH1173325A/ja
Application granted granted Critical
Publication of JP3327818B2 publication Critical patent/JP3327818B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Description

【発明の詳細な説明】
【0027】
【発明の属する技術分野】本発明は、高級言語で記述さ
れたソースプログラムを翻訳し連結編集することにより
VLIWプロセッサを対象とする実行可能コードを生成
するプログラム変換装置及び記録媒体に関し、特に、ソ
ースプログラム中の定数を含む命令を分割し並列化スケ
ジューリングする技術に関する。
【0028】
【関連する技術】VLIW(長語命令)プロセッサは、
内部に複数の演算ユニットを備え、1個のVLIWに置
かれた複数のオペレーションを同時並列に実行する。こ
のようなVLIWは、プログラム変換装置、即ち、コン
パイラよってソースプログラムにおけるオペレーション
レベルでの並列性が検出されスケジューリングされた後
に生成されたものである。
【0029】ところが、VLIWは固定長命令であるた
めにコード効率が悪い。つまり、VLIW中に無効命令
(nop)や無意味なコードが挿入されることが多い。
このような無駄領域の発生を回避するプロセッサとし
て、特願平9―159058や特願平9―159059
に開示されたVLIWプロセッサがある。これらVLI
Wプロセッサは、専用の定数バッファを有し、元々1個
の命令に含まれていた定数の全部又は部分桁を分離して
抜き出したもの(以下、「分割定数」という。)が異な
るVLIWに配置されたプログラムであっても、実行時
にそれら分割定数を定数バッファに蓄積することで元の
定数に復元し、復元した定数を分岐先や演算対象として
使用する機能を有する(以下、このような機能を有する
VLIWプロセッサを「定数復元型VLIWプロセッ
サ」と呼ぶ。)。これによって、これら定数復元型VL
IWプロセッサを対象とするコンパイラはプログラム中
の長い定数を分割し、分割された定数で無駄領域を埋め
ておくことができるので、プログラムのコード効率が向
上されるという効果がある。
【0030】
【発明が解決しようとする課題】しかしながら、上記定
数復元型VLIWプロセッサに対応するコンパイラは未
だ提案されていない。このようなコンパイラに要求され
る機能は、プログラム中に現れる長い定数を分割し、複
数のVLIWに分散して適切に配置することで無駄領域
の発生を抑えた実行可能コードを生成することである
が、その前提として、複数のオペレーションが並列実行
される状況の下で、分割して配置されていた定数が必ず
復元され、予定されていた命令によって使用されること
が保証されなければならない。
【0031】そこで、本発明はかかる問題点に鑑みてな
されたものであり、上記定数復元型VLIWプロセッサ
を対象とするコンパイラや、定数復元型VLIWプロセ
ッサに好適な実行可能コードを提供することを目的とす
る。
【0032】
【課題を解決するための手段】上記目的を達成するため
に、本発明に係るコンパイラは、直列に並べられた命令
からなる命令列を複数の命令を同時並列に実行するプロ
セッサを対象とする長語命令列に変換するコンパイラで
あって、入力された前記命令列中の定数を用いた命令を
複数の命令に分割する分割ステップと、分割後の命令列
に対して各命令の実行順序に基づく依存関係を解析する
解析ステップと、解析された依存関係を遵守しつつ分割
後の前記命令列に対して同時並列に実行できる複数の命
令を単位とする前記長語命令列に並べ替える並べ替えス
テップとを含むことを特徴とする。
【0033】ここで、前記分割ステップは、定数を用い
た前記命令が前記長語命令を構成する単位オペレーショ
ンに収まるサイズであるか否か判定する命令サイズ判定
サブステップと、単位オペレーションに収まるサイズで
ないと判定した場合に前記命令を前記単位オペレーショ
ンに収まるサイズの複数の命令に分割する分割サブステ
ップとを含むとすることができる。
【0034】また、前記コンパイラはさらに、前記分割
サブステップにおいて分割生成された2以上の命令が前
記並べ替えステップにおける並べ替えによって同一の長
語命令に配置された場合にそれら命令を結合する結合ス
テップを含むとすることができる。また、前記命令サイ
ズ判定サブステップにおいては、前記定数の最終的なサ
イズが決定されていない場合にはそのサイズを仮定して
前記判定を行い、前記コンパイラはさらに、定数の最終
的なサイズを決定しながら複数の前記長語命令列を連結
編集する定数サイズ決定ステップと、決定された定数の
サイズが前記命令サイズ判定サブステップにおいて仮定
されたその定数のサイズよりも大きい場合にその差分サ
イズに相当する部分定数を前記記憶バッファに補充して
格納する命令を生成し前記長語命令列に挿入する挿入ス
テップとを含むとすることができる。
【0035】また、前記コンパイラは、前記定数サイズ
決定ステップの後に再び前記分割ステップを実行させ、
前記分割ステップ中の前記命令サイズ判定サブステップ
においては、前記定数サイズ決定ステップにおいて決定
された定数の最終的なサイズを考慮して前記判定を行う
とすることができる。さらに、上記目的を達成するため
に、本発明に係る実行可能コードは、複数の命令を同時
並列に実行するプロセッサを対象とする長語命令列であ
って、前記長語命令列中の一の長語命令には、前記長語
命令列中に暗黙的に指定される前記プロセッサが備える
記憶バッファに格納される定数が置かれ、前記一の長語
命令に後続し、かつ、最初に前記記憶バッファを参照す
る他の一の長語命令には、前記記憶バッファに格納され
た定数を用いる命令が置かれていることを特徴とする。
【0036】
【発明の実施の形態】以下、本発明に係るコンパイラの
実施形態について図面を参照しながら説明する。 [動作環境]本コンパイラは、高級言語で記述されたソ
ースプログラムを翻訳し連結編集することにより後述す
るVLIWプロセッサを対象とする実行可能プログラム
を生成するクロスコンパイラであり、汎用のコンピュー
タシステム、即ち、エンジニアリングワークステーショ
ンやパソコン等で実行されるプログラムとして実現され
る。従って、本コンパイラ及び本コンパイラによって生
成されたコードは、フロッピーディスクやCD−RO
M、半導体メモリ等の記録媒体に収納されて配布され得
る。
【0037】なお、本明細書における「コンパイラ」
は、高級言語で記述されたソースコードを翻訳しアセン
ブラコードを生成する狭義のコンパイラではなく、狭義
のコンパイラに加えて、アセンブラコードを翻訳し機械
語のオブジェクトコードを生成したり、それらオブジェ
クトコードを連結編集する機能を備える広義のコンパイ
ラを意味する。 [対象プロセッサ]本コンパイラの詳細を説明する前
に、本コンパイラが対象とするプロセッサが備えるべき
機能(アーキテクチャ及び命令セット)を明らかにす
る。 (アーキテクチャ)対象プロセッサは、上述の定数復元
型VLIWプロセッサである。
【0038】図1は、対象プロセッサのアーキテクチャ
の一例を示すブロック図である。対象プロセッサ100
は、32ビット固定長のVLIWを実行するプロセッサ
であり、命令フェッチ回路101、命令レジスタ10
2、3個の命令解読器103〜105、最大32ビット
長の定数を蓄積し復元する専用のシフトレジスタである
定数バッファ107、16個の32ビット長レジスタR
0〜R15からなるレジスタ群108、並列に動作する
2個の演算器109、110等を備える。
【0039】このVLIWプロセッサ100は、分割定
数が元の命令から分離されて異なるVLIWに配置され
たプログラムであっても、実行時にそれら分割された定
数を定数バッファ107にシフトしながら蓄積すること
で元の定数に復元したり、定数バッファ107の格納値
を分岐先や演算対象として使用する機能を有する。ま
た、定数バッファ107は、その格納値が使用(参照)
されると、次の蓄積に備えるために、必ず直後にクリア
される(ゼロが格納される)。
【0040】但し、プログラムの実行時において、分割
定数全てが定数バッファ107に適切な順序で格納され
ることで必ず元の定数に復元されことや、復元された定
数が予定された命令によって必ず使用されること等は、
コンパイラの責任において保証しなければならないとす
る。つまり、このVLIWプロセッサ100を対象する
コンパイラは、命令中の定数を分割して複数のVLIW
に分散して配置した場合には、関連する他の命令との実
行順序関係等を考慮しながら、分割された定数が必ず復
元され元の命令によって使用されるようにスケジューリ
ングしVLIWを生成しなければならない。
【0041】なお、本明細書において、「VLIW」及
び「長語命令」は、この対象プロセッサ100に1サイ
クルで同時並列に実行させるオペレーションの集まりを
指定したコードを指し、単なる「命令」(「長語命令」
を除く)は、1個のオペレーションに対応するコードを
指す。また、「定数」には、命令中に数値として明示さ
れた値(即値)の他にリンク時に確定するラベルも含ま
れる。
【0042】図2(a)及び図2(b)は、本VLIW
プロセッサ100が実行するVLIWの2種類のフォー
マット(3オペレーションフォーマット及び2オペレー
ションフォーマット)を示す。1個のVLIWは3つの
フィールド(8ビットの第1フィールド51、12ビッ
トの第2フィールド52、12ビットの第3フィールド
53)に分割される。
【0043】図2(a)の3オペレーションフォーマッ
トでは、第1フィールド51にそのVLIWのフォーマ
ットを特定するフォーマット情報及び第1オペレーショ
ンが置かれ、第2フィールド52に第2オペレーション
が置かれ、第3フィールド53に第3オペレーションが
置かれる。図2(b)の2オペレーションフォーマット
では、第1フィールド51にフォーマット情報及び第1
オペレーションが置かれ、第2フィールド52と第3フ
ィールド53に跨る24ビット領域に第2オペレーショ
ンが置かれる。
【0044】フォーマット情報は、上記2種類のフォー
マットを区別する他に、上記定数バッファ107に蓄積
して格納すべき定数のみが置かれているフィールド(第
2フィールド52、第3フィールド53又は第2及び第
3フィールド52、53)を特定するものとする。第1
オペレーションは分岐命令に限られるとする。このとき
の分岐ラベル(分岐先アドレス)は、定数バッファ10
7、第2フィールド52、第3フィールド53及びそれ
らの組み合わせによって特定されるとする。
【0045】第2及び第3オペレーションは分岐を除く
一般の転送・演算命令とする。但し、ロード/ストア等
のメモリアクセスを伴う命令は第2及び第3オペレーシ
ョンのいずれかに限られるとする。これら分岐を除く一
般の転送・演算命令は、12ビット長と24ビット長の
2種類のいずれかである。転送・演算命令は、基本的に
は12ビットで表現されるが、ビット長の長いオペラン
ドが必要な場合には24ビットで表現される。
【0046】図3(a)〜(c)は、12ビットオペレ
ーションにおける3種類のフォーマットを示す。図3
(a)はレジスタ間演算のフォーマット、図3(b)は
レジスタと4ビット定数を用いた演算のフォーマット、
図3(c)は定数バッファ107に格納する12ビット
の分割定数のみを指定したフォーマットを示す。図4
(a)及び(b)は、24ビットオペレーションにおけ
る2種類のフォーマットを示す。図4(a)はレジスタ
と16ビット定数を用いた演算のフォーマット、図4
(b)は定数バッファ107に格納する24ビットの分
割定数のみを指定したフォーマットを示す。 (命令セット)本VLIWプロセッサ100の命令セッ
トのうち主な命令を説明する。 「(例1)mov 0x1234 , R0」 16ビット長の定数0x1234(0xは16進数である
ことを示す)をレジスタR0に設定する転送命令であ
り、一般的なプロセッサの命令と同じである。
【0047】この命令は、16ビット長の定数をもつた
めに24ビットオペレーションに属する。従って、この
命令を含むVLIWには、もはや他の転送・演算命令を
配置することはできない。 「(例2)sfst 0x1234:12u」 16ビット定数0x1234中の上位12ビット(0x123
4:12u)を上述の定数バッファ107に設定する転送命
令であり、分割定数設定命令の一つである。
【0048】ここで、「分割定数設定命令」とは、分割
定数を暗黙的に定められた記憶領域(定数バッファ10
7)に格納する命令をいい、本VLIWプロセッサ10
0に特有の命令の一つである。また、分割定数は、具体
的には、分岐命令に用いられる分岐ラベルの全部や部分
桁、転送・演算命令に用いられる定数の部分桁等が該当
する。
【0049】この命令の最終的な実行可能コードは、こ
の命令が置かれたフィールドには上記12ビット長の分
割定数のみ(12ビットオペレーション)を配置し、そ
の旨を指定するフォーマット情報を第1フィールド51
に配置したコードである。従って、この命令を含むVL
IWには、他の12ビットオペレーションをさらに1個
だけ含ませることができる。 「(例3)mov 0x1234:4l , R0」 既に定数バッファ107に格納されている分割定数を上
位12ビットとし、この命令で指定されている定数0x
1234の下位4ビット(0x1234:4l)を下位4ビット
として結合した16ビット長の定数をレジスタR0に設
定する転送命令であり、分割定数使用命令の一つであ
る。ここで、「分割定数使用命令」とは、暗黙的に定め
られた記憶領域(定数バッファ107)に格納された分
割定数を用いる命令をいい、本VLIWプロセッサ10
0に特有の命令の一つである。
【0050】この例3の命令は12ビットオペレーショ
ンに属する。従って、この命令を含むVLIWには、他
の12ビットオペレーションをさらに1個だけ含ませる
ことができる。なお、上述の例1の命令による実行結果
は、例2の命令が実行された後に例3の命令が実行され
た場合の実行結果と同一になる。従って、コンパイラ
は、例1の24ビット長命令に代えて、それを分割して
得られる2個の12ビット長命令、即ち、例2の分割定
数設定命令と例3の分割定数使用命令とを生成しておく
ことが可能となる。これによって、例えば、1個のフィ
ールド分の無駄領域が発生する場合に、その領域を上記
分割定数設定命令で埋めておくことでコード効率が向上
される。 [コンパイラの構成]図5は、本コンパイラの構成及び
関連する入出力データを示すブロック図である。
【0051】本コンパイラは、大きく分けて3つのグル
ープ、即ち、(i)高級言語で書かれたソースコード41
から直列型のアセンブラコード42を生成するグループ
(コンパイラ上流部10、アセンブラコード生成部1
1)と、(ii)直列型のアセンブラコード42に対して本
VLIWプロセッサ100に特有の並列化スケジューリ
ングを施すことで並列化されたアセンブラコード43や
そのオブジェクトコード44a〜44b等を生成するグ
ループ(定数分割部12、並列化スケジューリング部1
3、定数結合部14、コード出力部15及び並列化アセ
ンブラ部16)と、(iii)複数の再配置可能なオブジェ
クトコード44a〜44bを連結編集することにより最
終の実行可能コード46を生成するグループ(リンカ部
17)から構成される。
【0052】なお、再配置情報45a〜45b及び配置
情報40は、それぞれリンカ部17に入力/リンカ部1
7から出力されるラベルに関する情報であって、最終的
なラベルアドレスを解決するための情報として用いられ
る他に、再び定数分割部12に入力することにより最適
なコードを生成するために用いられたりする。また、図
示されている入出力データ40〜45、その他中間言語
データは、上記コンピュータシステムのハードディスク
にファイルとして置かれたり、メモリ上に一時データと
して置かれる。 (コンパイラ上流部10)コンパイラ上流部10は、フ
ァイル形式で保存されている高級言語ソースコード41
を読み込み、構文解析及び意味解析を行なった後に内部
形式コードを生成する。更に、必要に応じて、最終的に
生成される実行可能コードのサイズやその実行時間が短
くなるようにその内部形式コードを最適化する。ここで
の処理は、通常のコンパイラ(定数復元型VLIWプロ
セッサでない一般のプロセッサを対象とするコンパイ
ラ)が有するコンパイラ上流部による処理と同一であ
る。 (アセンブラコード生成部11)アセンブラコード生成
部11は、コンパイラ上流部10により生成され最適化
された内部形式コードから直列型アセンブラコード42
を生成する。ここで、「直列型アセンブラコード」と
は、単一オペレーションのアセンブラ命令が直列に並べ
られたコードであり、通常のプロセッサ(1個の演算ユ
ニットを備えるプロセッサ)を対象とするアセンブラコ
ードをいう。ここでの処理は、通常のコンパイラが有す
るアセンブラコード生成部による処理と同一である。 (定数分割部12)定数分割部12は、アセンブラコー
ド生成部11が生成したアセンブラコード42を読み込
み、この中に含まれる全ての長定数使用命令を分割定数
設定命令と分割定数使用命令とに分割する。つまり、各
長定数使用命令を、結果的に同一の処理を行なう2種類
の命令(分割定数設定命令と分割定数使用命令)に置き
換える。このとき、長定数使用命令中の長定数の長さに
よっては、2個以上の分割定数設定命令と分割定数使用
命令に分割される場合もある。
【0053】ここで、「長定数」とは、1個のVLIW
に含まれる単位オペレーションで記述できない長さの定
数をいい、具体的には、(i)分岐命令に使用される場合
においては、第1オペレーションに収まらない定数(1
ビット以上で表現される分岐ラベル)、及び(ii)転送・
演算命令に使用される場合においては、図3(b)に示
された12ビットオペレーションに収まらない定数(5
ビット以上で表現される定数)をいう。また、「長定数
使用命令」とは、長定数を用いる命令をいう。
【0054】一方、1個のVLIWに含まれる単位オペ
レーションで記述できる定数、具体的には、転送・演算
命令に使用される定数であって4ビット以下で表現され
る定数を「短定数」と呼び、短定数を用いる命令を「短
定数使用命令」と呼ぶ。なお、分割定数使用命令は、形
式的には短定数(4ビット以下の桁数の定数)を用いて
表現された命令であるので、短定数使用命令に属する。
【0055】定数分割部12での処理の詳細は以下の通
りである。図6は、定数分割部12での処理手順を示す
フローチャートである。定数分割部12は、アセンブラ
コード生成部11が生成したアセンブラコード42中の
全ての命令について、以下の処理(ステップS2〜S
4)を繰り返す(ステップS1〜S5)。
【0056】まず、定数分割部12は、着目する命令
(以下、単に「着目命令」と呼ぶ。)に含まれるラベル
のサイズ(ラベルが示すアドレスを表現するために必要
なビット数)を決定する(ステップS2)。具体的に
は、そのラベルが同じコンパイル単位のソースコード4
1内に存在するためにサイズの分かる局所ラベルである
場合や配置情報40等によってサイズが明示されている
場合にはそのサイズを、他のコンパイル単位のソースコ
ード41内に存在するためにサイズの分からない外部ラ
ベルである場合にはそのサイズを仮定してラベルにサイ
ズ情報を付加する。なお、本実施形態ではサイズの分か
らないラベルは使用頻度の最も高いアドレスサイズとし
て統計的に得られている16ビット長であると仮定する
ものとする。
【0057】次に、着目命令が長定数使用命令か否かを
判断する(ステップS3)。長定数使用命令である場合
には、その長定数使用命令を分割定数設定命令と分割定
数使用命令とに分割する(ステップS4)。具体的に
は、長定数使用命令が分岐命令である場合には、その長
定数(分岐ラベルが示すアドレス)を下位から順に12
ビット単位で分割し、得られた分割定数を上位から順に
定数バッファ107に設定する1個以上の分割定数設定
命令と1個の分割定数使用命令(分岐命令のオペコード
に相当する命令)を生成し、その着目命令をそれら分割
定数設定命令及び分割定数使用命令で置き換える。例え
ば、長定数が19ビットの場合には、リーディングゼロ
を付加した24ビット(12ビットの倍数)の定数とみ
なして上位12ビットと下位12ビットに分割し、上位
12ビットの分割定数についての分割定数設定命令、下
位12ビットの分割定数についての分割定数設定命令及
び分割定数使用命令の合計3個の命令をこの順で生成
し、これらで着目命令を置き換える。
【0058】一方、長定数使用命令が転送・演算命令で
ある場合には、その長定数のうち短定数(下位4ビット
分)を超える部分を下位から順に12ビット単位で分割
し、得られた分割定数を上位から順に定数バッファ10
7に設定する1個以上の分割定数設定命令と1個の分割
定数使用命令(転送・演算命令のオペコードと短定数を
示すオペランドを含む命令)を生成し、その着目命令を
それら分割定数設定命令及び分割定数使用命令で置き換
える。例えば、長定数が19ビットの場合には、リーデ
ィングゼロを付加した28ビット(12ビット×n+4
ビット)の定数とみなして上位12ビットと続く中位1
2ビットと下位4ビットに分割し、上位12ビットの分
割定数についての分割定数設定命令、中位12ビットの
分割定数についての分割定数設定命令及び下位4ビット
の短定数を含む分割定数使用命令の合計3個の命令をこ
の順で生成し、これらで着目命令を置き換える。
【0059】なお、長定数使用命令が分岐命令か転送・
演算命令かによって長定数の分割方法を変えているの
は、分岐命令が置かれる第1フィールド51には分割定
数(分岐ラベル)を含ませることができないが、転送・
演算命令が置かれる第2及び第3フィールド52及び5
3には分割定数(短定数)を含ませることができるから
である。 (並列化スケジューリング部13)並列化スケジューリ
ング部13は、定数分割部12によって長定数使用命令
が排除された後の直列型アセンブラコードを入力とし、
アセンブラ命令レベルでの並列性を検出し、図2(a)
の3オペレーションフォーマット又は図2(b)の2オ
ペレーションフォーマットのいずれかに対応するVLI
Wにパッキングされた並列化アセンブラコードを生成す
る。ここで、「並列化アセンブラコード」とは、VLI
Wプロセッサを対象とするアセンブラコードをいい、並
列実行可能な複数のオペレーションを特定するようアセ
ンブラ命令が並列かつ直列に並べられている。
【0060】この並列化スケジューリング部13はさら
に、依存グラフ生成部20と命令並べ替え部21から成
る。 (依存グラフ生成部20)依存グラフ生成部20は、定
数分割部12から出力されたアセンブラコードについて
依存グラフを生成する。ここで、「依存グラフ」とは、
アセンブラ命令をノード(節)とし、命令間の実行順序
関係をリンク(矢、エッジとも呼ばれる)として表した
有向グラフであり、アセンブラコード中の命令の実行順
序を規定する。
【0061】依存グラフ生成部20での処理の詳細は以
下の通りである。図7は、依存グラフ生成部20での処
理手順を示すフローチャートである。依存グラフ生成部
20は、定数分割部12によって長定数使用命令が排除
された後の直列型アセンブラコード中の全ての命令につ
いて、以下の処理(ステップS12〜S27)を繰り返
す(ステップS11〜S29)。
【0062】つまり、着目命令についてのノードを生成
した後に(ステップS12)、(i)レジスタ群108に
ついての排他制御に基づく依存グラフの生成(ステップ
S13〜S18)と、(ii)メモリについての排他制御に
基づく依存グラフの生成(ステップS19〜S24)
と、(iii)定数バッファ107についての排他制御に基
づく依存グラフの生成(ステップS25〜S28)を繰
り返す。その詳細は以下の通りである。
【0063】まず、依存グラフ生成部20は、着目命令
に対応するノードを生成する(ステップS12)。具体
的には、着目命令とノードを対応づける情報を生成す
る。次に、着目命令がレジスタを参照しているか否か判
定する(ステップS13)。ここで、「レジスタの参
照」とは、レジスタの値を読み出すことをいう。レジス
タを参照している場合には、直前のレジスタ定義命令
(そのレジスタを定義する命令であって、かつ、直前の
命令)を特定し、特定したその命令からこの着目命令に
入射するリンクを張る(ステップS14)。具体的に
は、特定した命令に対応するノードから着目命令に対応
するノードに入射するリンクを特定する情報を生成す
る。
【0064】ここで、「レジスタの定義」とは、レジス
タの値を破壊して新たな値を設定することをいう。ま
た、「直前の命令」とは、着目命令に先行する最も近い
命令をいう。なお、1個の命令において複数のレジスタ
を参照している場合には、依存グラフ生成部20は、そ
れぞれのレジスタに対して上記ステップS13、S14
での処理を繰り返す。このことは、以降のステップにつ
いても同様である。
【0065】次に、依存グラフ生成部20は、その着目
命令がレジスタを定義しているか否かを判定する(ステ
ップS15)。レジスタを定義している場合には、直前
のレジスタ操作命令(そのレジスタを操作する命令であ
って、かつ、直前の命令)を特定し、特定したその命令
がレジスタ定義命令であるか否かを判定する(ステップ
S16)。ここで、「レジスタの操作」とは、レジスタ
の定義と参照を含む意味である。
【0066】その結果、レジスタ定義命令である場合に
は、そのレジスタ定義命令から着目命令に入射するリン
クを張る(ステップS17)。一方、レジスタ定義命令
でない場合、即ち、レジスタ参照命令である場合には、
その直前のレジスタ定義命令を特定し、そのレジスタ定
義命令が置かれている位置から着目命令が置かれている
位置までの区間に置かれた全てのレジスタ参照命令(そ
のレジスタを参照する命令)から着目命令に入射するリ
ンクを張る(ステップS18)。
【0067】以上のレジスタの参照と定義に関する処理
(ステップS13〜S18)をメモリについても行う
(ステップS19〜24)。続いて、依存グラフ生成部
20は、着目命令が分割定数設定命令であるか否かを判
定する(ステップS25)。分割定数設定命令である場
合には、直前の定数バッファ操作命令からこの着目命令
に入射するリンクを張る(ステップS26)。ここで、
「定数バッファ操作命令」とは、定数バッファ107を
操作(定義及び参照)する命令、即ち、分割定数設定命
令と分割定数使用命令とを含む意味である。
【0068】最後に、依存グラフ生成部20は、着目命
令が分割定数使用命令であるか否かを判定する(ステッ
プS27)。分割定数使用命令である場合には、直前の
定数バッファ操作命令からこの着目命令に入射するリン
クを張る(ステップS28)。なお、レジスタに関する
依存グラフの生成処理(ステップS13〜S18)と定
数バッファ107に関する依存グラフの生成処理(ステ
ップS25〜S28)とが相違するのは、定数バッファ
107にアクセスする分割定数設定命令及び分割定数使
用命令は、いずれも定数バッファ107の参照と定義の
両方を伴う命令だからである。つまり、定数バッファ1
07はシフトレジスタから構成されるので、分割定数設
定命令はシフト&セット(参照と定義)を伴う命令であ
り、また、定数バッファ107は参照された直後に内容
がクリアされるので、分割定数使用命令は参照だけでな
く定義を伴う命令だからである。 (命令並べ替え部21)命令並べ替え部21は、依存グ
ラフ生成部20によって生成された依存グラフが示す実
行順序を遵守しつつ、定数分割部12から出力された直
列型アセンブラコード中の各命令を対象プロセッサ10
0のVLIW単位でパッキングしながら並べ替えてい
く。このとき、各命令が可能な限り並列に実行されるよ
うに、かつ、実行時間が短くなるように命令を並べ替え
る。
【0069】命令並べ替え部21での処理の詳細は以下
の通りである。図8は、命令並べ替え部21での処理手
順を示すフローチャートである。命令並べ替え部21
は、直列型アセンブラコード中の全ての命令についての
並べ替えを終える(VLIW単位でパッキングし、この
並列化スケジューリング部13から出力し終える)ま
で、以下の処理(ステップS42〜S50)を繰り返す
(ステップS41〜S51)。
【0070】まず、命令並べ替え部21は、依存グラフ
を調べることで、その現時点で出力可能な全ての命令を
出力可能命令集合に入れる(ステップS42)。ここ
で、「出力可能命令」とは、依存する先行命令が無いた
めに独立して実行可能(出力が可能)と判断される命令
をいい、具体的には、(i)依存グラフにおいて、自ノー
ドへ入射するリンクが無い場合、及び、(ii)自ノードへ
入射するリンク元のノードに対応する命令が全て出力済
み又は分割定数設定命令である場合における着目命令が
該当する。
【0071】また、「出力可能命令集合」とは、その時
点における出力可能命令の全てを集めたものをいう。な
お、リンク元が分割定数設定命令である場合が含まれる
のは、もし分割定数設定命令と分割定数使用命令とが1
個のVLIWに含まれることとなった場合であっても、
それら命令は、後述するように、定数結合部14により
1つの命令に置き換えられるので問題が生じないからで
ある。
【0072】出力可能命令集合が作成されていると(ス
テップS42)、その出力可能命令集合が空となるま
で、それら命令の一つを選択し、その集合から取り除い
ていく処理(ステップS45〜S48)を繰り返す(ス
テップS43〜S49)。但し、1個のVLIWが完成
された時点をもって、その繰り返しループ(ステップS
43〜S49)を抜け、再び出力可能命令集合を生成し
直し(ステップS42)、同じ処理(ステップS45〜
S48)を繰り返す(ステップS43〜S49)。これ
は、完成されたVLIWを構成する命令が出力可能命令
集合から取り除かれた場合には、その時点において新た
な出力可能命令が発生している可能性があるためであ
る。
【0073】そのために、まず、出力予定命令集合に入
っている命令によって1個のVLIWが完成されるか
(これ以上の命令を入れることができないか)を判定す
る(ステップS44)。ここで、「出力予定命令」と
は、最終的に1個のVLIWを構成し得る並列実行可能
な命令をいい、「出力予定命令集合」とは、最大個数の
出力予定命令(1個のVLIWに配置可能な最大個数の
出力予定命令)を集めるための命令の一時的な置き場所
である。つまり、上記の出力可能命令集合に入れられた
後に、続いてこの出力予定命令集合に移された命令だけ
が、最終的なVLIWを構成する命令としてこの並列化
スケジューリング部13から出力されることになる。
【0074】上記ステップS44において1個のVLI
Wが完成されないと判定された場合には、命令並べ替え
部21は、出力可能命令集合から実行時間及びコードサ
イズを短縮するのに適した命令を1つ選択する(ステッ
プS45)。具体的には、依存グラフを参照して、この
基本ブロックから生成される最終的なVLIWの総個数
を期待値として算出し、その期待値が最小となる命令を
1つ選択する。
【0075】続いて、選択されたその命令(着目命令)
を出力予定命令集合に入れることが可能か否か判定する
(ステップS46)。ここで、もし、その時点で出力予
定命令集合に既に入っている命令が存在する場合には、
既に入っている命令とその着目命令とを併せた命令が1
個のVLIWを構成し得るか(出力可能か)否かを判定
する(ステップS46)。
【0076】例えば、既に12ビット長の命令が出力予
定命令集合にあり、前記ステップS45で選ばれた命令
長が24ビットであった場合には1個のVLIWに収ま
らないので、出力不可と判定する。また、自ノードへ入
射するリンク元の分割定数設定命令が出力済みでなく、
かつ、出力予定命令集合にない場合も出力不可と判定す
る。後者の場合は、分割定数設定命令が出力されずに分
割定数使用命令だけが出力されるという誤ったコードの
生成を回避するためである。
【0077】上記ステップS46で肯定的に判定された
場合には、その着目命令を出力可能命令集合から出力予
定命令集合に移す(ステップS47、S48)。一方、
上記ステップS46で否定的に判定された場合には、そ
の時点において出力できる可能性が無くなったことにな
るので、その着目命令を出力可能命令集合から取り除く
(ステップS48)。
【0078】ステップS44において出力予定命令集合
に入っている命令によって1個のVLIWが完成された
と判定された場合には、それら全ての命令を出力予定命
令集合から取り除いた後に1個のVLIWとして出力す
る(ステップS50)。なお、ステップS49からステ
ップS50に処理手順が流れた場合に、出力予定命令集
合に残された命令だけでは1個のVLIWの全てのオペ
レーションが埋まらないときが生じるが、このときに
は、空いているオペレーションに無効命令(nop)を
挿入したVLIWを出力する。
【0079】このようにして、並列化スケジューリング
部13に入力された直列型アセンブラコードは、VLI
W単位にパッキングされた並列化アセンブラコードとな
って出力されていく。 (定数結合部14)定数結合部14は、(i)定数分割部
12による分割によって同一の長定数使用命令から生成
された分割定数設定命令と分割定数使用命令とが並列化
スケジューリング部13によって同一のVLIW(同一
のサイクル)にパッキングされた場合、及び、(ii)同様
に、同一の長定数使用命令から生成された複数の分割定
数設定命令が同一のVLIW(同一のサイクル)にパッ
キングされた場合に、それぞれ、それら2つの命令を結
合した1個の長定数使用命令、及び、1個の分割定数設
定命令に置き換える。これは、定数分割部12による分
割が無駄に終わった(複数のVLIWに跨って分割定数
を埋める必要が無かった)場合に相当する。 (コード出力部15)コード出力部15は、定数結合部
14による結合(置き換え)が行われた後のアセンブラ
コードを内部形式からテキスト形式に変換し、ファイル
(並列化アセンブラコード43)として出力する。 (並列化アセンブラ部16)並列化アセンブラ部16
は、コード出力部15が出力した並列化アセンブラコー
ド43をこのコンパイラが対象とするVLIWプロセッ
サ100専用の機械語に変換し、再配置可能なオブジェ
クトコード44a〜44bと再配置情報45a〜45b
とを生成する。このときに、VLIWの第1フィールド
51に置くフォーマット情報を決定する。例えば、分割
定数設定命令を含むVLIWであれば、分割定数のみが
置かれたフィールドと、その旨を示すフォーマット情報
に対応する機械語を生成する。
【0080】再配置情報45a〜45bは、各オブジェ
クトコード44aに用いられてるラベルの名前、そのラ
ベルが用いられている命令が置かれているアドレス、そ
のラベルのサイズを示す情報からなる。このラベルのサ
イズは、定数分割部12によって決定されたサイズ(図
6のステップS2において決定されたラベルのサイズ)
であり、外部ラベルである場合には暫定的な値(上述の
例では16ビット)である。 (リンカ部17)リンカ部17は、異なるコンパイル単
位で生成された複数の再配置可能なオブジェクトコード
44a〜44bを1つに連結編集し、中に含まれる不定
ラベルを解決し、対象とするVLIWプロセッサ100
用の最終的な実行可能コード46及び配置情報40を生
成する。
【0081】図9は、リンカ部17の詳細な構成を示す
ブロック図である。リンカ部17はさらに、ラベルアド
レス算出部22、命令挿入部23及び出力部24からな
る。ラベルアドレス算出部22は、リンカ部に入力され
る複数の再配置可能なオブジェクトコード44a〜44
bをリンクした後の各ラベルの最終的なアドレスを算出
するものであり、これによりラベルのサイズも確定され
る。ここでの処理は、通常のコンパイラが有するラベル
アドレス算出部による処理と同一である。
【0082】命令挿入部23は、ラベルアドレス算出部
22によって算出された最終的なラベルのサイズが再配
置情報45a〜45bに含まれるサイズ、即ち、定数分
割部12によって決定されたサイズより大きくなる場合
に、その手当をすべく、必要な分割定数設定命令を挿入
する。図10は、命令挿入部23での処理手順を示すフ
ローチャートである。
【0083】命令挿入部23は、リンカ部17に入力さ
れたオブジェクトコード44a〜44b中の全てのラベ
ルについて、順次一つずつ取り出して以下の処理(ステ
ップS62〜S64)を繰り返す(ステップS61〜S
65)。まず、取り出したラベル(着目ラベル)につい
ての再配置情報をリンカ部17に入力された再配置情報
45a〜45bの中から読み出す(ステップS62)。
【0084】そして、読み出した再配置情報に含まれる
着目ラベルのサイズよりもラベルアドレス算出部22に
より算出されたサイズが大きいか否か判断する(ステッ
プS63)。その結果、大きい場合には、不足している
サイズに相当する定数を定数バッファ107に設定して
おくための分割定数設定命令を生成し、その分割定数設
定命令と無効命令とからなる新たなVLIWを着目ラベ
ルが使用されている命令を含むVLIWの直前の位置に
挿入する(ステップS64)。
【0085】これによって、ラベルのサイズについての
定数分割部12による暫定的な決定が実際に必要なサイ
ズよりも小さく仮定された場合の手当が行われる。出力
部24は、ラベルアドレス算出部22によって解決され
た全てのラベルのサイズ及びそのラベルを参照している
命令のリストとからなる配置情報40を生成し、命令挿
入部23による処理を経た後の実行可能コード46と共
に出力する。 [コンパイラの具体的な動作]次に、本コンパイラの特
徴的な構成要素の動作について、具体的な命令を用いて
説明する。 [具体例1]まず、図11(a)に示される直列型アセ
ンブラコード42がアセンブラコード生成部11によっ
て生成され定数分割部12に入力された場合における、
定数分割部12及び並列化スケジューリング部13の具
体的な動作を説明する。
【0086】なお、図11(a)に示されたアセンブラ
命令401、402の意味は以下の通りである。 「(命令401)add R1 , R2」 レジスタR1の値とレジスタR2の値とを加算し、その
結果をレジスタR2に格納する。 「(命令402)ld (label) , R3」 ラベルlabelが示すメモリアドレスに記憶された値をレ
ジスタR3にロードする。 (定数分割部12)図11(a)に示される直列型アセ
ンブラコード42が入力された場合における定数分割部
12の動作について、図6に示されたフローチャートに
沿って説明する。
【0087】定数分割部12は、図11(a)に示され
た3つの命令全てについて長定数を分割するための処理
を繰り返すが(ステップS1〜S5)、この例では、命
令400及び401は、命令中にラベルや長定数を含ま
ないので変化を受けない。命令402に対しては、定数
分割部12は、ラベルlabelのサイズを決定することが
できないので、16ビットのサイズであると仮定する
(ステップS2)。
【0088】従って、定数分割部12は、この命令40
2が長定数使用命令であると判断し(ステップS3)、
この長定数使用命令402を分割定数設定命令と分割定
数使用命令との組に置き換える(ステップS4)。図1
1(b)は、図11(a)に示された直列型アセンブラ
コード42が入力された場合に定数分割部12が生成す
るコードを示す。
【0089】本図に示されるように、図11(a)にお
ける長定数使用命令402は分割定数設定命令405と
分割定数使用命令406との組に置き換えられる。 (依存グラフ生成部20)いま、図11(b)に示され
る直列型アセンブラコードが並列化スケジューリング部
13に入力されたとする。この場合における依存グラフ
生成部20の動作について、図7に示されたフローチャ
ートに沿って説明する。
【0090】依存グラフ生成部20は、図11(b)に
示された3つの命令全てについて順次同じ処理を繰り返
す(ステップS11〜S29)。図12は、図11
(b)に示される直列型アセンブラコードが並列化スケ
ジューリング部13に入力された場合に依存グラフ生成
部20が生成する最終的な依存グラフ600を示す。 「(命令403)mov R0 , R1」 まず、依存グラフ生成部20は、この命令403に対応
するノード601を生成する(ステップS12)。
【0091】続いて、この命令403はレジスタR0を
参照しているのでレジスタR0を定義する直前の命令か
ら入射するリンクを張ろうとするが(ステップS13、
S14)、ここでは、先行する命令が存在しないのでそ
のようなリンクは張られない。同様に、この命令403
はレジスタR1を定義しているのでレジスタR1を操作
する直前の命令を特定しようとするが(ステップS1
5、S16)、先行する命令が存在しないのでリンクは
張られない。
【0092】なお、この説明では簡単のために基本ブロ
ック(1個の入口と1個の出口を持つ処理ルーチン)が
1つと仮定しているが、複数の基本ブロックを含むプロ
グラムについて依存グラフを生成する場合であれば、先
行する基本ブロックを表す仮想ノードと後続する基本ブ
ロックを表す仮想ノードを導入し拡張することで簡単に
対応することができる。 「(命令404)add R1 , R2」 次に、命令404が処理対象となり、この命令404に
対応するノード603が生成される(ステップS1
2)。
【0093】依存グラフ生成部20は、この命令404
はレジスタR1を参照していることから、レジスタR1
を定義している直前の命令403を特定し、その命令4
03からこの命令404に入射するリンク602を張る
(ステップS13、S14)。続いて、この命令404
はレジスタR2を定義しているのでレジスタR2を操作
する直前の命令を特定しようとするが(ステップS1
5、S16)、そのような先行する命令が存在しないの
でリンクは張られない。 「(命令405)sfst label:12u」 次に、命令405が処理対象となり、この命令405に
対応するノード604が生成される(ステップS1
2)。
【0094】この命令405はレジスタもメモリも操作
していないので、ステップS13〜S24におけるリン
クの対象とはならない。この命令405は分割定数設定
命令であるので、依存グラフ生成部20は、直前の定数
バッファ操作命令を特定しようとするが(ステップS2
5、S26)、そのような先行する命令が存在しないの
でリンクは張られない。 「(命令406)ld (label:4l) , R3」 最後に、命令406が処理対象となり、この命令406
に対応するノード606が生成される(ステップS1
2)。
【0095】この命令406はレジスタR3を定義して
いるのでレジスタR3を操作する直前の命令を特定しよ
うとするが(ステップS15、S16)、そのような先
行する命令が存在しないのでリンクは張られない。次
に、この命令406は分割定数使用命令であるので、依
存グラフ生成部20は、直前の定数バッファ操作命令4
05を特定し、その命令405からこの命令406に入
射するリンク605を張る(ステップS27、S2
8)。
【0096】以上のようにして、図12に示されるよう
に、命令403から命令404に入射するリンク602
と命令405から命令406に入射するリンク605と
が張られる。 (命令並べ替え部21)命令並べ替え部21は、図12
に示された依存グラフが示す実行順序を遵守しつつ、図
11(b)に示された直列型アセンブラコードを並列化
する。この場合における命令並べ替え部21の動作につ
いて、図8に示されたフローチャートに沿って説明す
る。
【0097】命令並べ替え部21は、図11(b)に示
された4つの命令403〜406全てを出力し終えるま
で、出力可能命令集合を生成する処理(ステップS4
2)と、生成された出力可能命令集合の命令を1つずつ
消費していく処理(ステップS43〜S50)とからな
るスケジューリングサイクルを繰り返す(ステップS4
1〜S51)。 (第1回目)まず、第1回目のスケジューリングサイク
ルにおいて、命令並べ替え部21は、出力可能命令集合
として、3つの命令403、405及び406からなる
集合を生成する(ステップS42)。命令403及び4
05は、自ノードへ入射するリンクが無い命令に相当
し、命令406は、自ノードへ入射するリンク元のノー
ドに対応する命令が分割定数設定命令である命令に相当
するからである。
【0098】次に、出力予定命令集合は空であるので、
ステップS44において偽と判断し、続いて最適な命令
を1つ選択することで最初の消費サイクルに入る(ステ
ップS45)。ここでは、命令403が選択されたとす
る。そして、出力予定命令集合は空であることから、命
令並べ替え部21は、この命令403を出力予定命令集
合に入れた後に(ステップS47)、出力可能命令集合
から取り除く(ステップS48)。
【0099】この時点で、出力可能命令集合には命令4
05と命令406が残されているが、次に、2回目の消
費サイクルを繰り返す(ステップS44〜S48)。出
力予定命令集合は未だ1個のVLIWを生成するだけの
命令が埋まっていないので、再びステップS44におい
て偽と判断し、続いて、最適な命令として命令405を
選択したとする(ステップS45)。
【0100】選択した命令405と既に出力予定命令集
合に入っている命令403とはいずれも12ビット長の
命令であり、1個のVLIWを構成し得るので、命令並
べ替え部21は、この命令405を更に出力予定命令集
合に入れた後に(ステップS47)、出力可能命令集合
から取り除く(ステップS48)。この時点で、出力可
能命令集合には命令406だけが残されているが、出力
予定命令集合には命令403と命令405が入っている
ので、命令並べ替え部21は、次のステップS44にお
いては真と判断し、それら命令403及び命令405を
出力予定命令集合から取り除いた後に最終的な1個のV
LIWとして出力する(ステップS50)。
【0101】なお、2回目の消費サイクル(ステップS
45)において、最適な命令として命令405ではなく
命令406が選択されたとすると、この命令406は、
自ノードへ入射するリンク元の分割定数設定命令405
が出力済みでなく、かつ、出力予定命令集合にない場合
に相当するので、次のステップS46において偽と判定
され、出力可能命令集合から取り除かれることとなり、
結果的に、同一のVLIW(命令403と命令405と
からなるVLIW)が出力されることになる。
【0102】図11(c)は、図11(b)に示される
直列型アセンブラコードが並列化スケジューリング部1
3に入力された場合に命令並べ替え部21が生成するV
LIW(並列化アセンブラコード)を示す。但し、説明
の容易化のため、VLIWの第1フィールド51につい
てのコードを省略している。この第1回目のスケジュー
リングサイクルによって、図11(c)に示されたVL
IW407が生成される。 (第2回目)次に、出力可能命令集合に命令406が残
され状態で、第2回目のスケジューリングサイクルを開
始する。
【0103】命令並べ替え部21は、新たに命令404
を出力可能命令集合に加える(ステップS42)。命令
404は自ノードへ入射するリンク元のノードに対応す
る命令403が全て出力済みである場合における命令に
相当するからである。これによって、命令404と命令
406から構成される出力可能命令集合が生成される。
【0104】次に、出力予定命令集合は空であるので、
ステップS44において偽と判断し、続いて最適な命令
を1つ選択することで最初の消費サイクルに入る(ステ
ップS45)。ここでは、命令404が選択されたとす
る。そして、出力予定命令集合は空であることから、命
令並べ替え部21は、この命令404を出力予定命令集
合に入れた後に(ステップS47)、出力可能命令集合
から取り除く(ステップS48)。
【0105】この時点で、出力可能命令集合には命令4
06だけが残されるが、同様にして2回目の消費サイク
ルが繰り返され、その結果、この命令406も出力可能
命令集合から出力予定命令集合へ移されることになる
(ステップS44〜S48)。この時点で、出力予定命
令集合には命令404と命令406が入っているので、
命令並べ替え部21は、次のステップS44においては
真と判断し、それら命令404及び命令406を出力予
定命令集合から取り除いた後に2個目のVLIWとして
出力する(ステップS50)。つまり、この第2回目の
スケジューリングサイクルによって、図11(c)に示
されたVLIW408が生成される。
【0106】このようにして、並列化スケジューリング
部13に入力された全ての命令がVLIW単位でパッキ
ングされて出力され、命令並べ替え部21によるスケジ
ューリングが終了する(ステップS41〜S51)。 (通常のコンパイラとの比較)以上の定数分割部12と
並列化スケジューリング部13での処理によって、図1
1(a)に示された直列型アセンブラコードから図11
(c)に示される2個のVLIWが生成されたが、これ
ら処理の特徴を明確にするために、通常のコンパイラに
よる場合と比較する。
【0107】図17は、通常のコンパイラの構成を示す
ブロック図である。この通常のコンパイラは、本実施形
態と基本的な機能は同じであるが、本実施形態の定数分
割部12及び定数結合部14に相当する機能を備えてお
らず、従って、他の構成要素910〜917、920、
921も定数分割に関連する機能を備えていないものと
する。
【0108】従って、アセンブラコード生成部911が
図11(a)に示される直列型アセンブラコードを生成
したとすると、その直列型アセンブラコードはそのまま
並列化スケジューリング部913に入力されるので、依
存グラフ生成部920は図18に示される依存グラフ9
25を生成することになる。そして、その依存グラフに
基づいて命令並べ替え部921は図11(a)に示され
た命令の並べ替えを行なうが、図18に示されるよう
に、命令400と命令401とはその依存関係から共存
(1個のVLIWを構成)することができず、さらに、
命令402は24ビット長であるために他の命令400
及び命令401と共存することができないために、最終
的に、図19に示された3個のVLIW930〜932
を生成する。
【0109】この図19と図11(c)とを比較して分
かるように、通常のコンパイラが生成する並列化アセン
ブラコードは、本実施形態によるコードよりも1個のV
LIW分だけコードサイズが大きくなっており、従っ
て、実行時間も1サイクル分多くなっている。これは、
本実施形態のコンパイラによれば、図19におけるVL
IW932が2個の小さな命令(分割定数設定命令と分
割定数使用命令)に分割され、それぞれがVLIW93
0及びVLIW931に生じている各無駄領域を埋める
ように分散して配置されるからである。 [具体例2]次に、図13(a)に示される直列型アセ
ンブラコード42がアセンブラコード生成部11によっ
て生成され定数分割部12に入力された場合における、
リンカ部17の動作及びそれに続く最適化について説明
する。 (リンカ部17)図13(a)〜(g)は、リンカ部1
7の動作を説明するための一連の具体的なコードや関連
情報を示す図である。
【0110】図13(a)は、アセンブラコード生成部
11が生成した具体例2に係る直列型アセンブラコード
42を示し、図13(b)は、その直列型アセンブラコ
ード42を入力として定数分割部12が生成したコード
を示し、図13(c)は、そのコードを入力として並列
化スケジューリング部13が生成した並列化アセンブラ
コードを示し、図13(d)及び図13(e)はそれぞ
れ、その並列化アセンブラコードを入力として並列化ア
センブラ部16が生成したオブジェクトコード44a及
び再配置情報45aを示し、図13(f)及び図13
(g)は、そのオブジェクトコード44a及び再配置情
報45aを入力としてリンカ部17が生成した実行可能
コード46及び配置情報40を示す。
【0111】なお、本具体例では、アセンブラコード生
成部11、定数分割部12及び並列化スケジューリング
部13が生成したコードの詳細を説明するために、図1
3(a)〜(c)においては、各命令と共に生成される
付加情報を「@」に続くコードを用いて表現している。
この付加情報は、その命令を特定する識別子及び分割定
数に関する情報等からなる。
【0112】具体的には、図13(a)に示された付加
情報「@ID数字」は、それが書かれている行に存在す
る命令の識別子(命令識別子)である。また、図13
(b)に示された付加情報の一部「LbU12」、「L
bL4」はそれぞれ、ラベル「label」の上位12
ビット及び下位4ビットを示し、また、付加情報の一部
(サイズ情報)「S16」は、ラベル「label」の
サイズを16ビットと仮定して分割したことを示し、さ
らに付加情報の一部「M」は、ラベル「label」を
分割して定数バッファ107に格納する命令の中で最初
の命令に相当することを示す。
【0113】また、図13(a)に示された命令414
は、ラベル「label」の記憶領域(4バイト)を確
保する擬似命令である。リンカ部17に入力されるの
は、図13(d)に示されたオブジェクトコード44a
と図13(e)に示された再配置情報45aである。こ
こで、図13(d)において、オブジェクトコードの
「場所情報」は、各命令が置かれるべき相対アドレスを
示し、特定のメモリ領域(セグメントやセクション)の
先頭からのオフセット(バイト単位)で表現されてい
る。記号「0x」は、続く数値を16進数で表現してい
ることを示す。 また、「label:12u」、「la
bel:4l」はそれぞれ、ラベル「label」の上
位12ビット、下位4ビットの部分定数を意味する。
【0114】再配置情報45aは、図13(e)に示さ
れるように、「ラベル」、そのラベルを参照している命
令が置かれている「場所情報」、その命令に付随してい
た「付加情報」により構成されている。ここで、再配置
情報45aの場所情報は、VLIWが置かれるアドレス
(32ビット刻み)と、そのVLIWにおいてラベルを
参照する命令が配置されている単位オペレーションを特
定する順番との組み合わせによって表現されている。
【0115】この例では、ラベル「label」は、相
対アドレス「0x1000」に置かれたVLIWの第3
オペレーションに配置された命令に参照され、そのVL
IWには付加情報「ID102.LbU12.S16.
M」が添付され、さらに、相対アドレス「0x100
4」に置かれたVLIWの第3オペレーションに配置さ
れた命令にも参照され、その命令には付加情報「ID1
02.LbL4.S16」が添付されていることが示さ
れている。
【0116】このようなオブジェクトコード44a(図
13(d))と再配置情報45a(図13(e))が入
力された場合のリンカ部17の具体的な動作は以下の通
りである。いま、ラベルアドレス算出部22は、同時に
入力された他のオブジェクトコードを参照することで、
上記ラベル「label」の最終的なサイズが28ビッ
ト長であると算出したとする。
【0117】命令挿入部23は、まず、ラベル「lab
el」を着目ラベルとし(ステップS61)、リンカ部
17に入力された再配置情報45aから着目ラベル「l
abel」の再配置情報を取り出す(ステップS6
2)。次に、その再配置情報の付加情報に含まれたサイ
ズ情報「S16」と、その着目ラベルについてラベルア
ドレス算出部22が算出したサイズ「28ビット」とを
比較する(ステップS63)。
【0118】その結果、ラベルアドレス算出部22が算
出したサイズのほうが大きいので、図13(e)に示さ
れたラベル「label」の再配置情報429及び43
0のうち「M」の付加情報がついているもの(図13
(e)の行429)を特定し、その場所情報(0x10
00.3)に係るVLIW425の直前に、無効命令
(nop)と分割定数設定命令とからなる新たなVLI
Wを挿入する(ステップS64)。
【0119】その結果、図13(f)に示されるよう
に、VLIW432の直前に新たなVLIW431が追
加挿入される。なお、このVLIW431中のラベル
「label:12u」は、28ビット長のラベル「labe
l」のうち再配置情報中のサイズ情報が示す16ビット
を超える部分、即ち、上位12ビットである。また、V
LIW432中の分割定数「label:12m」は、28ビッ
ト長のラベル「label」の中位12ビットを示す。
【0120】このようにして、コンパイル(定数分割部
12による定数の分割)時において仮定されたラベルの
サイズが最終的なサイズと相違していた場合に、その差
分を補正する命令が追加挿入される。最後に、出力部2
4は、ラベルアドレス算出部22により決定されたラベ
ルサイズを含む配置情報40(図13(g))を生成
し、命令挿入部23による命令挿入が行われた後の実行
可能コード46(図13(f))と共に出力する。
【0121】なお、ラベル「label」の配置情報4
36には、そのサイズ「28」と、そのラベルを参照す
る命令の識別子「@ID102」とが含まれる。ここ
で、もし、この配置情報40を使用した後述する最適化
を行なわない場合は、このリンカ部の出力が最終の実行
可能コード46となる。 (配置情報40を使用した最適化)次に、上述の配置情
報40を定数分割部12にフィードバックし、その後の
処理を繰り返すことで最適化する場合におけるコンパイ
ラの具体的な動作を説明する。
【0122】図14(a)〜(e)は、一度生成された
配置情報40を再び定数分割部12に入力した場合の各
構成要素が生成するコードや関連情報を示す図である。
図14(a)は、図13(a)に示される直列型アセン
ブラコード42と図13(g)に示される配置情報40
とが入力された定数分割部12が生成したコードを示
し、図14(b)は、そのコードを入力として並列化ス
ケジューリング部13が生成した並列化アセンブラコー
ドを示し、図14(c)及び図14(d)はそれぞれ、
その並列化アセンブラコードを入力として並列化アセン
ブラ部16が生成したオブジェクトコード44a及び再
配置情報45aを示し、図14(e)は、そのオブジェ
クトコード44a及び再配置情報45aを入力としてリ
ンカ部17が生成した実行可能コード46を示す。
【0123】まず、定数分割部12は、入力された配置
情報40の内容を参照することで命令識別子ID102
をもつ命令の外部ラベル「label」のサイズは28
ビットであると決定し(図6のステップS2)、28ビ
ット長としてラベル「label」を分割する(ステッ
プS3、S4)。その結果、図13(a)の命令412
は図14(a)に示される3個の命令442〜444に
置き換えられる。なお、命令443の付加情報「LbM
12」は、この命令がラベル「label」の中位12
ビットを参照していることを示す。
【0124】並列化スケジューリング部13は、図7及
び図8に示された手順に従って依存グラフを生成し命令
の並べ替えを実行することで、無効命令(nop)が挿
入されていない並列化アセンブラコード(図14
(b))を生成する。そして、並列化アセンブラ部16
は、その並列化アセンブラコードに対応するオブジェク
トコード44a(図14(c))と再配置情報45a
(図115(a))とを生成する。なお、図14(c)
において、「label:12m」はラベル「labe
l」の中位12ビットが入ることを表す。
【0125】最後に、リンカ部17において、ラベルア
ドレス算出部22はラベル「label」のサイズを前
回と同様の28ビットと算出するので、命令挿入部23
はラベル「label」に関しての命令のさらなる挿入
を行わないので(図10のステップS63)、生成され
る実行可能コード46は図14(e)に示される通りと
なる。
【0126】この図14(e)と図13(f)を比較し
て分かるように、配置情報40を定数分割部12にフィ
ードバックすることで最適化した実行可能コード(図1
4(e))は、そうでない実行可能コード(図13
(f))よりも1個のVLIWだけコードサイズが小さ
くなっている。なお、このように生成された実行可能コ
ード(図14(e))をフロッピーディスクやCD−R
OM、半導体メモリ等の記録媒体に収納したり、伝送媒
体を介して通信することで、対象とするVLIWプロセ
ッサ100を備えるターゲット環境に移動させることは
可能である。 [具体例3]次に、図15(a)に示される分岐命令を
含む直列型アセンブラコード42がアセンブラコード生
成部11によって生成され定数分割部12に入力された
場合における、定数分割部12及び並列化スケジューリ
ング部13の動作について説明する。
【0127】図15(a)は、アセンブラコード生成部
11が生成した具体例3に係る直列型アセンブラコード
42を示す。本図に示された分岐命令473の意味は以
下の通りである。 「(命令473)call _func」 分岐ラベル_funcにVLIWプロセッサ100の実行制
御を移す。
【0128】但し、この例においては、分岐ラベル_fun
cのサイズは12ビット長とし、関数_funcへの分岐時に
引数R1が渡されるとする。図15(b)は、図15
(a)に示された直列型アセンブラコード42が入力さ
れた場合に定数分割部12が生成するコードを示す。分
岐命令473は、12ビットの分岐ラベル_funcを伴う
ので、その分岐ラベル_funcを定数バッファ107に設
定する分割定数設定命令477と、分岐命令473のオ
ペコードcallに相当する分割定数使用命令478とに分
割される。
【0129】図15(c)は、図15(b)に示される
コードが入力された場合に依存グラフ生成部20が生成
する依存グラフを示す。なお、分岐命令478が命令4
74に依存しているのは、関数_func中で引数R1が使
用されるからである。図15(d)は、図15(b)の
コード及び図15(c)の依存グラフが入力された場合
に命令並べ替え部21が中間的に生成する出力可能命令
集合と出力予定命令集合を示す。
【0130】第2回目のスケジューリングサイクルにお
いて、出力予定命令集合に分岐命令(call)478が含
まれる。図15(e)は、上記命令並べ替え部21が生
成する並列化アセンブラコードを示す。但し、本図にお
いては、VLIWの第1フィールド51のコードも示さ
れている。
【0131】このように、本コンパイラの定数分割部1
2及び並列化スケジューリング部13によれば、図15
(a)に示される直列型アセンブラコード42から、図
15(e)に示される2個のVLIWからなる並列化ア
センブラコードが生成される。ここで、同一の直列型ア
センブラコード42が通常のコンパイラに入力された場
合と比較する。
【0132】図20は、その場合に通常のコンパイラが
生成すると考えられる並列化アセンブラコードを示す。
通常のコンパイラによれば、図15(a)に示された分
岐命令473は、分割されることがないので、少なくと
も13ビット長のフィールド、即ち、連続する2個のフ
ィールドを必要とする。そのために、3個のVLIW9
40〜942からなる並列化アセンブラコードが生成さ
れ、多くの無駄領域が発生している。 [具体例4]次に、図16(a)に示される直列型アセ
ンブラコード42がアセンブラコード生成部11によっ
て生成され定数分割部12に入力された場合における、
定数結合部14の動作を中心に説明する。
【0133】図16(a)は、アセンブラコード生成部
11が生成した具体例4に係る直列型アセンブラコード
42を示す。なお、この例において、分岐命令803に
用いられている分岐ラベル_funcのサイズは、具体例3
と同様、12ビット長とするが、関数_funcへの分岐時
に渡される引数はないとする。
【0134】図16(b)は、図16(a)に示された
直列型アセンブラコード42が入力された場合に定数分
割部12が生成するコードを示す。具体例3と同様に、
分岐命令503は分割定数設定命令507と分割定数使
用命令508とに分割される。図16(c)は、図16
(b)に示されるコードが入力された場合に依存グラフ
生成部20が生成する依存グラフを示す。
【0135】図16(d)は、図16(b)のコード及
び図16(c)の依存グラフが入力された場合に命令並
べ替え部21が中間的に生成する出力可能命令集合と出
力予定命令集合を示す。具体例3と相違し、第2回目の
スケジューリングサイクルにおいて、出力予定命令集合
に分割定数設定命令507と分割定数使用命令508が
含まれる。
【0136】図16(e)は、上記命令並べ替え部21
が生成する並列化アセンブラコードを示す。この並列化
アセンブラコードは2個のVLIW509及び510か
らなるが、VLIW510の第1フィールド51及び第
2フィールド52には、元々1個の分岐命令503であ
ったものが分割されて生成された命令507及び508
が置かれている。
【0137】図16(f)は、図16(e)の並列化ア
センブラコードが入力された場合に定数結合部14が生
成するコードを示す。定数結合部14は、VLIW51
0には同一の長定数使用命令(分岐命令503)から生
成された分割定数設定命令507と分割定数使用命令5
08とが配置されていることを検出し、それら2つの命
令507及び508を、それらを結合した1個の長定数
使用命令(元の分岐命令503と同じ形式の命令)に置
き換える。これによって、定数分割部12による分割が
無駄に終わった(複数のVLIWに跨って分割定数を埋
める必要が無かった)場合の手当てが行われる。
【0138】なお、本実施形態のコンパイラが対象とす
るプロセッサは、上記特願平9―159058や特願平
9―159059に開示されたVLIWプロセッサに近
いものであったが、本発明は、これらに限定されるもの
ではない。元々1個の命令であったものが分割されて複
数のVLIWに跨って配置されたプログラムを実行する
定数復元型プロセッサであればよい。
【0139】また、本実施形態のコンパイラは、図2
(a)及び図2(b)に示される2種類のフォーマット
のVLIWを生成したが、本発明は、これら2種類に限
定されるものではない。例えば、16ビット長のオペレ
ーション3個からなるVLIWを生成することもでき
る。本発明は、目的とするVLIWのオペレーションに
収まる定数のサイズに基づいて、命令中の定数を分割し
並列化スケジューリングする技術だからである。
【0140】また、本実施形態のコンパイラが対象とす
るVLIWプロセッサ100は、32ビット長のシフト
レジスタ(定数バッファ107)を1個備え、この格納
値が参照されると直後にゼロが格納されたが、本発明
は、このような定数バッファ107を備えるプロセッサ
に限定されない。独立した2個以上の定数を格納する定
数バッファを備え、これら格納場所を明示的に指示する
命令や、内容をクリアする命令を備えるプロセッサであ
ってもよい。具体的には、分割定数設定命令を生成する
際に、その命令と共に格納場所を指示する命令を生成し
たり、また、分割定数使用命令を生成する際に、その命
令と共に内容をクリアする命令を生成すればよい。
【0141】また、本実施形態の定数分割部12は、ラ
ベルを含む1個の分岐命令に対して、そのラベルだけを
定数バッファ107に格納する1個の分割定数設定命令
とそのラベルを使用して分岐する1個の分割定数使用命
令とに分割したが、これに限られず、例えば、ラベルの
サイズが定数バッファ107よりも大きい場合には、さ
らにラベルを2個に分割し、それぞれを定数バッファ1
07に格納する2個の分割定数設定命令と1個の分割定
数使用命令とに分割してもよい。
【0142】また、定数を分割する際には、4ビットや
12ビットという数値が固定的に用いられたが、本発明
はこれら数値に限定されない。さらに、本実施形態の定
数分割部12は、サイズの分からないラベルは使用頻度
の最も高いアドレスサイズ(16ビット長)と仮定した
が、対象プロセッサで用いられる最大のアドレスサイズ
と仮定してもよい。また、サイズの不明な定数が転送・
演算命令のオペランドである場合には、対象プロセッサ
で用いられる最大の定数サイズと仮定したり、使用頻度
の最も高い定数サイズと仮定してもよい。これら仮定さ
れるサイズは、デフォルト値としてコンパイラに予め記
憶させておいたり、コンパイラの起動時にオプションと
してユーザから指定させてもよい。
【0143】また、上記具体例1の命令並べ替え部21
は、第1回目のスケジューリングサイクルにおいて出力
可能命令集合に残された命令406に新たな命令404
を加えることで第2回目のサイクルを継続したが、各サ
イクルごとに出力可能命令集合の要素をクリアし再計算
してもよい。
【0144】
【発明の効果】以上の説明から明らかなように、本発明
に係るコンパイラは、直列に並べられた命令からなる命
令列を複数の命令を同時並列に実行するプロセッサを対
象とする長語命令列に変換するコンパイラであって、入
力された前記命令列中の定数を用いた命令を複数の命令
に分割する分割ステップと、分割後の命令列に対して各
命令の実行順序に基づく依存関係を解析する解析ステッ
プと、解析された依存関係を遵守しつつ分割後の前記命
令列に対して同時並列に実行できる複数の命令を単位と
する前記長語命令列に並べ替える並べ替えステップとを
含むことを特徴とする。
【0145】これによって、ソースプログラム中の定数
を用いた命令は、よりサイズの小さい2以上の命令に分
割され、並列化スケジューリングが行われるので、定数
復元型VLIWプロセッサに好適なコンパイラが実現さ
れる。つまり、無駄領域を有するVLIWの生成が抑制
される。ここで、前記分割ステップは、定数を用いた前
記命令が前記長語命令を構成する単位オペレーションに
収まるサイズであるか否か判定する命令サイズ判定サブ
ステップと、単位オペレーションに収まるサイズでない
と判定した場合に前記命令を前記単位オペレーションに
収まるサイズの複数の命令に分割する分割サブステップ
とを含むとすることができる。
【0146】これによって、目的とするVLIWに収ま
らないサイズの命令だけが分割され並列化スケジューリ
ングされるので、目的とするVLIWと全く無関係なサ
イズの命令を含むソースプログラムであっても、分割処
理は必要最低限の命令に対してのみ行われ、コンパイル
に要する処理時間が短縮される。また、前記分割サブス
テップにおいては、定数を用いた前記命令をその定数を
前記プロセッサが備える記憶バッファに格納する命令と
格納された前記定数を用いる命令とに分割するとするこ
とができる。
【0147】これによって、命令中の定数全部が定数バ
ッファに格納されるので、その定数を使用する命令中に
は定数をオペランドとして含ませる必要がなくなり、オ
ペコードのみからなる小さなサイズのオペレーションフ
ィールドを有するVLIWに対応したコンパイラが実現
される。また、前記分割サブステップにおいては、定数
を用いた前記命令をその定数を分割して得られる部分定
数を前記プロセッサが備える記憶バッファに格納する命
令と格納された前記部分定数を用いる命令とに分割する
とすることができる。
【0148】これによって、目的とするVLIWに配置
できる定数領域のサイズを超えた部分定数だけを定数バ
ッファに格納しておき、後の命令によって使用すること
ができるので、小さなサイズのオペランド指定を含むオ
ペレーションフィールドを有するVLIWに対応したコ
ンパイラが実現される。また、前記コンパイラはさら
に、前記分割サブステップにおいて分割生成された2以
上の命令が前記並べ替えステップにおける並べ替えによ
って同一の長語命令に配置された場合にそれら命令を結
合する結合ステップを含むとすることができる。
【0149】これによって、1個の命令であるべきもの
(分割する必要のなかった命令)が2以上の命令に分割
された後に異なるVLIWのオペレーションに配置され
実行されることによる実行速度の低下という不具合の発
生が回避されたり、分割定数設定命令が誤った分割定数
使用命令と結合されてしまうことが防止される。また、
前記命令サイズ判定サブステップにおいては、前記定数
の最終的なサイズが決定されていない場合にはそのサイ
ズを仮定して前記判定を行い、前記コンパイラはさら
に、定数の最終的なサイズを決定しながら複数の前記長
語命令列を連結編集する定数サイズ決定ステップと、決
定された定数のサイズが前記命令サイズ判定サブステッ
プにおいて仮定されたその定数のサイズよりも大きい場
合にその差分サイズに相当する部分定数を前記記憶バッ
ファに補充して格納する命令を生成し前記長語命令列に
挿入する挿入ステップとを含むとすることができる。
【0150】これによって、コンパイルやアセンブル時
においてラベル等のサイズが解決できないために生じる
分割処理とリンク処理での不整合が解消されるので、複
数のコンパイル単位で生成されたオブジェクトモジュー
ルをリンクするようなプログラム開発に対応したコンパ
イラが実現される。また、前記命令サイズ判定サブステ
ップにおいては、前記定数の最終的なサイズが決定され
ていない場合にはそのサイズを前記プロセッサで用いら
れる最大のアドレスサイズや定数サイズと仮定したり、
使用頻度の最も高いアドレスサイズや定数サイズと仮定
することができる。
【0151】これによって、上記仮定に基づく不整合の
発生頻度が抑制されるので、無効命令が挿入されたVL
IWの生成頻度も抑制される。また、前記コンパイラ
は、前記定数サイズ決定ステップの後に再び前記分割ス
テップを実行させ、前記分割ステップ中の前記命令サイ
ズ判定サブステップにおいては、前記定数サイズ決定ス
テップにおいて決定された定数の最終的なサイズを考慮
して前記判定を行うとすることができる。
【0152】これによって、命令の分割時においては、
最終的なラベルのサイズが考慮されるので、もはや上記
命令の挿入は不要となり、コードサイズ及び実行時間が
短縮化された実行可能コードが生成される。また、前記
コンパイラは、前記再度の分割ステップに続いて再び前
記解析ステップと前記並べ替えステップとを実行させる
とすることができる。
【0153】これによって、適正な定数分割に加えて並
列化スケジューリングによる最適化が繰り返されること
になるので、よりコード効率の高い実行可能コードが生
成されるという効果がある。また、本発明に係る実行可
能コードは、複数の命令を同時並列に実行するプロセッ
サを対象とする長語命令列であって、前記長語命令列中
の一の長語命令には、前記長語命令列中に暗黙的に指定
される前記プロセッサが備える記憶バッファに格納され
る定数が置かれ、前記一の長語命令に後続し、かつ、最
初に前記記憶バッファを参照する他の一の長語命令に
は、前記記憶バッファに格納された定数を用いる命令が
置かれていることを特徴とする。
【0154】これによって、長語命令列は、元々1個の
定数であったものや元々1個の定数を用いた命令であっ
たものがよりサイズの小さい2以上の定数や命令に分割
されて配置され、かつ、定数復元型プロセッサによって
元の定数や命令に復元されて実行されるようスケジュー
リングされているので、定数復元型VLIWプロセッサ
に好適な実行可能コード、即ち、無駄領域を有するVL
IWの生成が抑制されたコード効率の高い実行可能コー
ドが提供される。
【図面の簡単な説明】
【図1】本発明に係るコンパイラが対象とするプロセッ
サ100のアーキテクチャの一例を示すブロック図であ
る。
【図2】図2(a)及び(b)は、同コンパイラが生成
するVLIWの2種類のフォーマットを示し、それぞ
れ、3オペレーションフォーマット(図2(a))及び
2オペレーションフォーマット(図2(b))を示す。
【図3】図3(a)〜(c)は、同VLIW中の12ビ
ットオペレーションにおける3種類のフォーマットを示
し、それぞれ、レジスタ間演算のフォーマット(図3
(a))、レジスタと4ビット定数を用いた演算のフォ
ーマット(図3(b))、定数バッファ107に格納す
る12ビットの分割定数のみを指定したフォーマット
(図3(c))を示す。
【図4】図4(a)及び(b)は、同VLIW中の24
ビットオペレーションにおける2種類のフォーマットを
示し、それぞれ、レジスタと16ビット定数を用いた演
算のフォーマット(図4(a))、定数バッファ107
に格納する24ビットの分割定数のみを指定したフォー
マット(図4(b))を示す。
【図5】同コンパイラの構成及び関連する入出力データ
を示すブロック図である。
【図6】同コンパイラの定数分割部12での処理手順を
示すフローチャートである。
【図7】同コンパイラの依存グラフ生成部20での処理
手順を示すフローチャートである。
【図8】同コンパイラの命令並べ替え部21での処理手
順を示すフローチャートである。
【図9】同コンパイラのリンカ部17の詳細な構成を示
すブロック図である。
【図10】同リンカ部17の命令挿入部23での処理手
順を示すフローチャートである。
【図11】図11(a)〜(c)は、具体例1に係る一
連の入出力コード及び関連データを示し、それぞれ、ア
センブラコード生成部11によって生成され定数分割部
12に入力される直列型アセンブラコード42(図11
(a))、その直列型アセンブラコード42が入力され
た場合に定数分割部12が生成するコード(図11
(b))、このコードが並列化スケジューリング部13
に入力された場合に命令並べ替え部21が生成するVL
IW(図11(c))を示す。
【図12】図11(b)に示される直列型アセンブラコ
ードが並列化スケジューリング部13に入力された場合
に依存グラフ生成部20が生成する最終的な依存グラフ
である。
【図13】図13(a)〜(g)は、具体例2に係る一
連の入出力コード及び関連データを示し、それぞれ、ア
センブラコード生成部11が生成した具体例2に係る直
列型アセンブラコード42(図13(a))、その直列
型アセンブラコード42を入力として定数分割部12が
生成したコード(図13(b))、そのコードを入力と
して並列化スケジューリング部13が生成した並列化ア
センブラコード(図13(c))、その並列化アセンブ
ラコードを入力として並列化アセンブラ部16が生成し
たオブジェクトコード44a(図13(d))及び再配
置情報45a(図13(e))、そのオブジェクトコー
ド44a及び再配置情報45aを入力としてリンカ部1
7が生成した実行可能コード46(図13(f))及び
配置情報40(図13(g))を示す。
【図14】図14(a)〜(e)は、一度生成された配
置情報40を再び定数分割部12に入力した場合の各構
成要素が生成する具体例2に係る一連の入出力コードや
関連データを示し、それぞれ、図13(a)に示される
直列型アセンブラコード42と図13(g)に示される
配置情報40とが入力された定数分割部12が生成した
コード(図14(a))、そのコードを入力として並列
化スケジューリング部13が生成した並列化アセンブラ
コード(図14(b))、その並列化アセンブラコード
を入力として並列化アセンブラ部16が生成したオブジ
ェクトコード44a(図14(c))及び再配置情報4
5a(図14(d))を示し、そのオブジェクトコード
44a及び再配置情報45aを入力としてリンカ部17
が生成した実行可能コード46(図14(e))を示
す。
【図15】図15(a)〜(e)は、具体例3に係る一
連の入出力コード及び関連データを示し、それぞれ、ア
センブラコード生成部11が生成した直列型アセンブラ
コード42(図15(a))、その直列型アセンブラコ
ード42が入力された場合に定数分割部12が生成する
コード(図15(b))、そのコードが入力された場合
に依存グラフ生成部20が生成する依存グラフ(図15
(c))、そのコード及び依存グラフが入力された場合
に命令並べ替え部21が中間的に生成する出力可能命令
集合と出力予定命令集合(図15(d))、その命令並
べ替え部21が生成する並列化アセンブラコード(図1
5(e))を示す。
【図16】図16(a)〜(f)は、具体例4に係る一
連の入出力コード及び関連データを示し、それぞれ、ア
センブラコード生成部11が生成した直列型アセンブラ
コード42(図16(a))、その直列型アセンブラコ
ード42が入力された場合に定数分割部12が生成する
コード(図16(b))、そのコードが入力された場合
に依存グラフ生成部20が生成する依存グラフ(図16
(c))、そのコード及び依存グラフが入力された場合
に命令並べ替え部21が中間的に生成する出力可能命令
集合と出力予定命令集合(図16(d))、その命令並
べ替え部21が生成する並列化アセンブラコード(図1
6(e))、その並列化アセンブラコードが入力された
場合に定数結合部14が生成するコード(図16
(f))を示す。
【図17】通常のコンパイラの構成を示すブロック図で
ある。
【図18】同コンパイラの依存グラフ生成部920が生
成する依存グラフを示す。
【図19】同コンパイラの命令並べ替え部921が生成
するVLIWを示す。
【図20】同コンパイラが生成する並列化アセンブラコ
ードを示す。
【符号の説明】
10 コンパイラ上流部 11 アセンブラコード生成部 12 定数分割部 13 並列化スケジューリング部 14 定数結合部 15 コード出力部 16 並列化アセンブラ部 17 リンカ部 20 依存グラフ生成部 21 命令並べ替え部 22 ラベルアドレス算出部 23 命令挿入部 24 出力部 40 配置情報 41 ソースコード 42 直列型アセンブラコード 43 並列化アセンブラコード 44a、44b オブジェクトコード 45a、45b 再配置情報 46 実行可能コード 51 第1フィールド 52 第2フィールド 53 第3フィールド 100 VLIWプロセッサ 101 命令フェッチ回路 102 命令レジスタ 103〜105 第1〜第3命令解読器 106 実行部 107 定数バッファ 108 レジスタ群 109 第1演算器 110 第2演算器
───────────────────────────────────────────────────── フロントページの続き (72)発明者 越村 竜一郎 大阪市中央区城見2丁目1番61号 株式 会社松下ソフトリサ−チ内 (56)参考文献 特開 平8−194626(JP,A) 特開 平8−6797(JP,A) 特開 平5−150979(JP,A) 特開 平4−51328(JP,A) 特開 平6−51993(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/30 - 9/45

Claims (25)

    (57)【特許請求の範囲】
  1. 【請求項1】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換する装置であって、 入力された前記命令列中の定数を用いた命令を、その定
    数を前記プロセッサが備える記憶バッファに格納する命
    令と、格納された定数を使用する命令とに分割する手段
    と、 分割後の命令列に対して各命令の実行順序に基づく依存
    関係を、記憶バッファへの定数の格納及び定数の使用の
    順序関係も含めて解析する手段と、 解析された依存関係を遵守しつつ分割後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える手段とを備えたことを特徴と
    するプログラム変換装置。
  2. 【請求項2】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換する装置であって、 入力された前記命令列中の定数を用いた命令を、その定
    数を分割して得られる部分定数を前記プロセッサが備え
    る記憶バッファに格納する命令と、格納された前記部分
    定数を使用する命令とに分割する手段と、 分割後の命令列に対して各命令の実行順序に基づく依存
    関係を、記憶バッファへの定数の格納及び定数の使用の
    順序関係も含めて解析する手段と、 解析された依存関係を遵守しつつ分割後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える手段とを備えたことを特徴と
    するプログラム変換装置。
  3. 【請求項3】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換するプログラムを記録した記録
    媒体であって、 入力された前記命令列中の定数を用いた命令を、その定
    数を前記プロセッサが備える記憶バッファに格納する命
    令と、格納された定数を使用する命令とに分割する分割
    ステップと、 分割後の命令列に対して各命令の実行順序に基づく依存
    関係を、記憶バッファへの定数の格納及び定数の使用の
    順序関係も含めて解析する解析ステップと、 解析された依存関係を遵守しつつ分割後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える並べ替えステップとをコンピ
    ュータに実行させるためのプログラムを記録したコンピ
    ュータ読み取り可能な記録媒体。
  4. 【請求項4】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換するプログラムを記録した記録
    媒体であって、 入力された前記命令列中の定数を用いた命令を、その定
    数を分割して得られる部分定数を前記プロセッサが備え
    る記憶バッファに格納する命令と、格納された前記部分
    定数を使用する命令とに分割する分割ステップと、 分割後の命令列に対して各命令の実行順序に基づく依存
    関係を、記憶バッファへの定数の格納及び定数の使用の
    順序関係も含めて解析する解析ステップと、 解析された依存関係を遵守しつつ分割後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える並べ替えステップとをコンピ
    ュータに実行させるためのプログラムを記録したコンピ
    ュータ読み取り可能な記録媒体。
  5. 【請求項5】 前記分割ステップは、 定数を用いた前記命令が前記長語命令を構成する単位オ
    ペレーションに収まるサイズであるか否か判定する命令
    サイズ判定サブステップと、 単位オペレーションに収まるサイズでないと判定した場
    合に前記命令を前記単位オペレーションに収まるサイズ
    の複数の命令に分割する分割サブステップとを含むこと
    を特徴とする請求項3又は4記載の記録媒体。
  6. 【請求項6】 前記プログラムはさらに、前記分割サブ
    ステップにおいて分割生成された2以上の命令が前記並
    べ替えステップにおける並べ替えによって同一の長語命
    令に配置された場合にそれら命令を結合する結合ステッ
    プをコンピュータに実行させることを特徴とする請求項
    記載の記録媒体。
  7. 【請求項7】 前記命令サイズ判定サブステップにおい
    ては、前記定数のサイズを仮定して前記判定を行い、 前記プログラムはさらに、 定数の最終的なサイズを決定しながら複数の前記長語命
    令列を連結編集する定数サイズ決定ステップと、 決定された定数のサイズが前記命令サイズ判定サブステ
    ップにおいて仮定されたその定数のサイズよりも大きい
    場合にその差分サイズに相当する部分定数を前記記憶バ
    ッファに補充して格納する命令を生成し前記長語命令列
    に挿入する挿入ステップとをコンピュータに実行させる
    ことを特徴とする請求項6記載の記録媒体。
  8. 【請求項8】 前記命令サイズ判定サブステップにおい
    ては、前記定数のサイズを前記プロセッサで用いられる
    最大の定数サイズと仮定して前記判定を行うことを特徴
    とする請求項7記載の記録媒体。
  9. 【請求項9】 前記命令サイズ判定サブステップにおい
    ては、前記定数のサイズを使用頻度の最も高い定数サイ
    ズと仮定して前記判定を行うことを特徴とする請求項7
    記載の記録媒体。
  10. 【請求項10】 前記プログラムは、前記定数サイズ決
    定ステップの後に再び前記分割ステップを実行させ、 前記分割ステップ中の前記命令サイズ判定サブステップ
    においては、前記定数サイズ決定ステップにおいて決定
    された定数の最終的なサイズを考慮して前記判定を行う
    ことを特徴とする請求項7〜9のいずれか1項に記載の
    記録媒体。
  11. 【請求項11】 前記プログラムは、前記再度の分割ス
    テップに続いて再び前記解析ステップと前記並べ替えス
    テップとを実行させることを特徴とする請求項10記載
    の記録媒体。
  12. 【請求項12】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換する装置であって、 入力された前記命令列中の定数を複数の部分定数に分割
    し、前記部分定数を前記プロセッサが備える記憶バッフ
    ァに格納する命令と、格納された前記部分定数を使用す
    る命令とを生成する生成手段と、 生成後の命令列に対して各命令の実行順序に基づく依存
    関係を記憶バッファへの定数の格納及び定数の使用の順
    序関係も含めて解析する手段と、 解析された依存関係を遵守しつつ生成後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える手段とを備えたことを特徴と
    するプログラム変換装置。
  13. 【請求項13】 直列に並べられた命令からなる命令列
    を、複数の命令を同時並列に実行するプロセッサを対象
    とする長語命令列に変換するプログラムを記録した記録
    媒体であって、 入力された前記命令列中の定数を複数の部分定数に分割
    し、前記部分定数を前記プロセッサが備える記憶バッフ
    ァに格納する命令と、格納された前記部分定数を使用す
    る命令とを生成する分割ステップと、 生成後の命令列に対して各命令の実行順序に基づく依存
    関係を記憶バッファへの定数の格納及び定数の使用の順
    序関係も含めて解析する解析ステップと、 解析された依存関係を遵守しつつ生成後の前記命令列に
    対して同時並列に実行できる複数の命令を単位とする前
    記長語命令列に並べ替える並べ替えステップとをコンピ
    ュータに実行させるためのプログラムを記録したコンピ
    ュータ読み取り可能な記録媒体。
  14. 【請求項14】 前記分割ステップは、 定数が前記長語命令を構成する単位オペレーションに内
    で表現できるサイズであるか否か判定する命令サイズ判
    定サブステップと、 単位オペレーション内で表現できるサイズでないと判定
    した場合に前記定数を前記単位オペレーション内で表現
    できるサイズの複数の部分定数に分割する分割サブステ
    ップと項13記載の記録媒体。
  15. 【請求項15】 前記プログラムはさらに、前記分割ス
    テップにおいて生成された2以上の命令が前記並べ替え
    ステップにおける並べ替えによって同一の長語命令に配
    置された場合にそれら命令を結合する結合ステップをコ
    ンピュータに実行させることを特徴とする請求項14
    載の記録媒体。
  16. 【請求項16】 前記命令サイズ判定サブステップにお
    いては、前記定数のサイズを仮定して前記判定を行い、 前記プログラムはさらに、 定数の最終的なサイズを決定しながら複数の前記長語命
    令列を連結編集する定数サイズ決定ステップと、 決定された定数のサイズが前記命令サイズ判定サブステ
    ップにおいて仮定されたその定数のサイズよりも大きい
    場合にその差分サイズに相当する部分定数を前記記憶バ
    ッファに補充して格納する命令を生成し前記長語命令列
    に挿入する挿入ステップとをコンピュータに実行させる
    ことを特徴とする請求項15記載の記録媒体。
  17. 【請求項17】 前記命令サイズ判定サブステップにお
    いては、前記定数の最終的なサイズが決定されていない
    場合にはそのサイズを前記プロセッサで用いられる最大
    の定数サイズと仮定して前記判定を行うことを特徴とす
    請求項16記載の記録媒体。
  18. 【請求項18】 前記命令サイズ判定サブステップにお
    いては、前記定数の最終的なサイズが決定されていない
    場合にはそのサイズを使用頻度の最も高い定数サイズと
    仮定して前記判定を行うことを特徴とする請求項16
    載の記録媒体。
  19. 【請求項19】 前記プログラムは、前記定数サイズ決
    定ステップの後に再び前記分割ステップを実行させ、 前記分割ステップ中の前記命令サイズ判定サブステップ
    においては、前記定数サイズ決定ステップにおいて決定
    された定数の最終的なサイズを考慮して前記判定を行う
    ことを特徴とする請求項16〜18のいずれか1項に記
    載の記録媒体。
  20. 【請求項20】 前記プログラムは、前記再度の分割ス
    テップに続いて再び前記解析ステップと前記並べ替えス
    テップとを実行させることを特徴とする請求項19記載
    の記録媒体。
  21. 【請求項21】 複数の命令を同時並列に実行するプロ
    セッサによって実行される長語命令列が記録された記録
    媒体であって、前記長語命令列は、以下の(a)及び(b)のオペレー
    ションを前記プロセッサに実行させることを特徴とする
    記録媒体。 (a)前記長語命令列中の一の長語命令に置かれた定数
    を、前記長語命令列中に暗黙的に指定される前記プロセ
    ッサが備える記憶バッファに格納させる。 (b)前記一の長語命令に後続し、かつ、最初に前記記
    憶バッファを参照する他の一の長語命令に置かれた命令
    を、前記記憶バッファに格納された定数を用いて実行さ
    せる。
  22. 【請求項22】 前記一の長語命令に置かれた定数は、
    分岐先アドレスであり、 前記他の一の長語命令に置かれた命令は、分岐先アドレ
    スを伴わない分岐命令であることを特徴とする請求項2
    記載のコンピュータ読み取り可能な記録媒体。
  23. 【請求項23】 複数の命令を同時並列に実行するプロ
    セッサによって実行される長語命令列が記録された記録
    媒体であって、前記長語命令列は、以下の(a)及び(b)のオペレー
    ションを前記プロセッサに実行させることを特徴とする
    記録媒体。 (a)前記長語命令列中の一の長語命令に置かれた定数
    を、前記プロセッサが備える記憶バッファに格納させ
    る。 (b)前記一の長語命令に後続し、かつ、最初に前記記
    憶バッファを参照する他の一の長語命令に置かれた、そ
    れ自体定数を含む命令を、その定数と前記記憶バッファ
    に格納された定数とが結合された定数を用いて実行させ
    る。
  24. 【請求項24】 複数の命令を同時並列に実行するプロ
    セッサによって実行される長語命令列が記録された記録
    媒体であって、前記長語命令列は、以下の(a)及び(b)のオペレー
    ションを前記プロセッサに実行させることを特徴とする
    記録媒体。 (a)前記長語命令列に置かれた2以上の長語命令に含
    まれるそれぞれの定数を、その長語命令列中に暗黙的に
    指定される前記プロセッサが備える記憶バッファに結合
    して格納させる。 (b)前記2以上の長語命令のいずれにも後続し、か
    つ、最初に前記記憶バッファを参照する長語命令を、前
    記2以上の長語命令に含まれた定数それぞれが結合され
    た定数を用いて実行させる。
  25. 【請求項25】 複数の命令を同時並列に実行するプロ
    セッサによって実行させる長語命令列が記録された記録
    媒体であって、前記長語命令列は、以下のオペレーション(a)及び
    (b)を前記プロセッサに実行させることを特徴とする
    記録媒体。 (a)前記長語命令列に置かれた2以上の長語命令に含
    まれるそれぞれの定数を、その長語命令列中に暗黙的に
    指定される前記プロセッサが備える記憶バッファに結合
    して格納させる。 (b)前記2以上の長語命令のいずれにも後続し、か
    つ、最初に前記記憶バッファを参照する長語命令に置か
    れた、それ自体定数を含む命令を、その定数と前記2以
    上の長語命令に含まれた定数それぞれとが結合された定
    数を用いて実行させる。
JP23514497A 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体 Expired - Fee Related JP3327818B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP23514497A JP3327818B2 (ja) 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体
US09/143,269 US6367067B1 (en) 1997-08-29 1998-08-28 Program conversion apparatus for constant reconstructing VLIW processor
EP98306914A EP0899656B1 (en) 1997-08-29 1998-08-28 Program conversion apparatus for constant reconstructing VLIW processor
DE69832932T DE69832932T2 (de) 1997-08-29 1998-08-28 Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor
EP05077437A EP1628213A3 (en) 1997-08-29 1998-08-28 VLIW processor
KR10-1998-0035360A KR100496946B1 (ko) 1997-08-29 1998-08-29 정수복원형장어명령프로세서용프로그램변환장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23514497A JP3327818B2 (ja) 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体

Publications (2)

Publication Number Publication Date
JPH1173325A JPH1173325A (ja) 1999-03-16
JP3327818B2 true JP3327818B2 (ja) 2002-09-24

Family

ID=16981713

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23514497A Expired - Fee Related JP3327818B2 (ja) 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体

Country Status (5)

Country Link
US (1) US6367067B1 (ja)
EP (2) EP0899656B1 (ja)
JP (1) JP3327818B2 (ja)
KR (1) KR100496946B1 (ja)
DE (1) DE69832932T2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
JP2000132404A (ja) 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd 命令列最適化装置
US6457173B1 (en) * 1999-08-20 2002-09-24 Hewlett-Packard Company Automatic design of VLIW instruction formats
GB2358491A (en) * 1999-09-03 2001-07-25 Sgs Thomson Microelectronics A relocation format for linking
US6675377B1 (en) * 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
SE521753C2 (sv) 2002-02-08 2003-12-02 Xelerated Ab Förfarande och system för att uppfylla realtidskrav för en dataprocessor
US8141068B1 (en) * 2002-06-18 2012-03-20 Hewlett-Packard Development Company, L.P. Compiler with flexible scheduling
EP1378824A1 (en) * 2002-07-02 2004-01-07 STMicroelectronics S.r.l. A method for executing programs on multiple processors and corresponding processor system
JP3847672B2 (ja) 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
EP1546869B1 (en) 2002-09-24 2013-04-03 Silicon Hive B.V. Apparatus, method, and compiler enabling processing of load immediate isntructions in a very long instruction word processor
US7444620B2 (en) * 2003-02-28 2008-10-28 Bea Systems, Inc. Systems and methods for a common runtime container framework
JP2005173645A (ja) * 2003-12-05 2005-06-30 Ibm Japan Ltd プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
US7401329B2 (en) * 2005-04-25 2008-07-15 Arm Limited Compiling computer programs to exploit parallelism without exceeding available processing resources
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
JP4879589B2 (ja) * 2006-01-20 2012-02-22 パナソニック株式会社 コンパイラ装置
US8131978B2 (en) * 2006-06-15 2012-03-06 Nec Corporation Restoring plural instructions for same cycle execution from partial instructions and combined supplementing portions generated for compact storage
JP5240200B2 (ja) * 2007-10-03 2013-07-17 日本電気株式会社 データ処理装置および方法
EP2282268B1 (en) * 2009-07-23 2012-11-21 STMicroelectronics Srl Interfacing device and method, for example for systems-on-chip
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US9477476B2 (en) * 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US9424045B2 (en) 2013-01-29 2016-08-23 Arm Limited Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9875107B2 (en) * 2015-01-19 2018-01-23 International Business Machines Corporation Accelerated execution of execute instruction target
DE102018113475A1 (de) * 2018-06-06 2019-12-12 Infineon Technologies Ag Rechenwerk zum rechnen mit maskierten daten

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
JP3004108B2 (ja) * 1991-11-27 2000-01-31 株式会社東芝 情報処理装置
JPH05197545A (ja) * 1991-12-10 1993-08-06 Mitsubishi Electric Corp マイクロコンピュータ
US5557761A (en) * 1994-01-25 1996-09-17 Silicon Graphics, Inc. System and method of generating object code using aggregate instruction movement
JP3430635B2 (ja) * 1994-06-17 2003-07-28 富士通株式会社 定数参照最適化処理装置
US5600810A (en) * 1994-12-09 1997-02-04 Mitsubishi Electric Information Technology Center America, Inc. Scaleable very long instruction word processor with parallelism matching
JPH08161169A (ja) * 1994-12-09 1996-06-21 Toshiba Corp Vliw方式の計算機システム及びvliwの解釈・実行方法
JPH08194626A (ja) * 1995-01-17 1996-07-30 Hitachi Ltd 即値生成方法
US5669001A (en) * 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5867711A (en) * 1995-11-17 1999-02-02 Sun Microsystems, Inc. Method and apparatus for time-reversed instruction scheduling with modulo constraints in an optimizing compiler
US5787302A (en) * 1996-05-15 1998-07-28 Philips Electronic North America Corporation Software for producing instructions in a compressed format for a VLIW processor
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
US5805850A (en) * 1997-01-30 1998-09-08 International Business Machines Corporation Very long instruction word (VLIW) computer having efficient instruction code format
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
US5941983A (en) * 1997-06-24 1999-08-24 Hewlett-Packard Company Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
KR19990017608A (ko) * 1997-08-25 1999-03-15 유재희 신호 처리 프로세서의 연산 유닛 및 입출력 장치
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体

Also Published As

Publication number Publication date
EP1628213A3 (en) 2009-01-07
US6367067B1 (en) 2002-04-02
EP0899656A2 (en) 1999-03-03
EP0899656B1 (en) 2005-12-28
DE69832932T2 (de) 2006-07-06
DE69832932D1 (de) 2006-02-02
JPH1173325A (ja) 1999-03-16
EP1628213A2 (en) 2006-02-22
KR100496946B1 (ko) 2005-09-09
EP0899656A3 (en) 2002-01-02
KR19990024036A (ko) 1999-03-25

Similar Documents

Publication Publication Date Title
JP3327818B2 (ja) プログラム変換装置及び記録媒体
JP3896087B2 (ja) コンパイラ装置およびコンパイル方法
US8024718B2 (en) System and method for optimizing source code
US5828886A (en) Compiling apparatus and method for promoting an optimization effect of a program
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
CN100465895C (zh) 编译器、编译方法
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JPH07234790A (ja) プログラム変換処理装置およびプログラム変換処理方法
JP2000207223A (ja) 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US20040098709A1 (en) Method, apparatus, and computer program for generating SIMD instruction sequence
JPH11232117A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JPH0926884A (ja) バイナリ操作を必要とするタスク中に必要なフロー情報を使用可能とする方法および装置
US6360355B1 (en) Hardware synthesis method, hardware synthesis device, and recording medium containing a hardware synthesis program recorded thereon
JP2000132404A (ja) 命令列最適化装置
US7979853B2 (en) Compiler device, method, program and recording medium
JP2006196002A (ja) 非同期プログラムフローのモデリングを含むソフトウェアツール
JP4045802B2 (ja) プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム
US20010039653A1 (en) Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program
US20050125783A1 (en) Program optimization with intermediate code
JP2003271394A (ja) 関数と基本ブロックの配置割付装置および割付最適化プログラム
JP4535912B2 (ja) データフローグラフ生成装置
JP3473391B2 (ja) プログラム処理方法、プログラム処理装置及び記録媒体
JP4721975B2 (ja) コンパイラ装置およびコンパイル方法
JP2002312176A (ja) 変換プログラム、コンパイラ、コンピュータ装置、プログラム変換方法及び記憶媒体

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20070712

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20080712

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20090712

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20090712

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20100712

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20110712

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20110712

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20120712

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20120712

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20130712

Year of fee payment: 11

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

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees