JPH1173327A - コンパイラ、プロセッサおよび記録媒体 - Google Patents

コンパイラ、プロセッサおよび記録媒体

Info

Publication number
JPH1173327A
JPH1173327A JP9234358A JP23435897A JPH1173327A JP H1173327 A JPH1173327 A JP H1173327A JP 9234358 A JP9234358 A JP 9234358A JP 23435897 A JP23435897 A JP 23435897A JP H1173327 A JPH1173327 A JP H1173327A
Authority
JP
Japan
Prior art keywords
machine instruction
instruction
machine
execution
processor
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.)
Granted
Application number
JP9234358A
Other languages
English (en)
Other versions
JP3419268B2 (ja
Inventor
Masato Suzuki
正人 鈴木
Shuichi Takayama
秀一 高山
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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP23435897A priority Critical patent/JP3419268B2/ja
Publication of JPH1173327A publication Critical patent/JPH1173327A/ja
Application granted granted Critical
Publication of JP3419268B2 publication Critical patent/JP3419268B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】 コンパイラの命令スケジューリングでは、依
存関係のない命令を並び替えることができない場合は、
パイプライン伸長を引き起こす可能性のある命令の後に
は無動作(NOP)命令をインタロックのサイクルに応じ
た数だけ挿入しなければならない。そのためコードサイ
ズが増加しコストが上昇する。突放しを行うプロセッサ
では命令間の依存関係を調べるためのハードウェアが必
要となってハードウェアのコストが増大する。 【解決手段】 コンパイラは依存関係のない命令を並び
替えることができない場合には予め突放し処理を禁止す
る命令を生成し、並び替えることができる場合には予め
突放し処理を許可する命令を生成する。プロセッサに
は、上記の各命令に従って突放し処理を行うか否かだけ
を判断する機構を備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンパイラとプロ
セッサと記憶媒体とに関し、特にパイプライン処理を行
うプロセッサを効率よく動作させる実行コードを生成す
るコンパイラと、パイプライン処理のインタロックを制
御するプロセッサと、該実行コードを記録した記録媒体
に関する。
【0002】
【従来の技術】近年の電子技術の発展により、高性能な
プロセッサが普及し、あらゆる分野で用いられている。
そのようなプロセッサではパイプライン処理により高い
性能を達成している。パイプライン処理とは命令の処理
を複数に分割し、それらを時間的にずらして並列に処理
するもので極めて効率が高い。しかし、そのパイプライ
ンにおける処理の流れを阻害する要因が少なからず存在
する。流れが阻害された状態をパイプラインのインタロ
ックという。パイプラインの性能は分割された処理の内
の処理時間が最長なもので決定される。命令によっては
実行に長い時間を要するものがあるが、通常はこういっ
た命令は低頻度なため、長い処理時間を要する場合だけ
関係するパイプラインのステージを伸長させる方法をと
る。このパイプライン伸長がパイプラインインタロック
の要因となる。近年の特にマルチメディアといった応用
分野においては、画像処理や音声処理を実現するために
上記のような実行に長い時間を要する命令が多く使われ
るようになって来ている。そこで、インタロックを効率
よく制御するプロセッサ及びコンパイラに関する技術が
必要とされる。ここで、コンパイラとは、高級言語で記
述されたプログラムを、プロセッサで実行可能な機械命
令プログラムに翻訳するものである。 (第1の従来技術)図13は、第1の従来技術における
プロセッサの動作タイミング図である。
【0003】第1の従来技術におけるプロセッサは、命
令フェッチ(IF)ステージと解読(DEC)ステージと実
行(EX)ステージとの3段パイプラインで構成されてい
る。図13は命令1から3が処理される過程を示してい
るが、命令1だけが実行に2サイクルを要する。乗除算
は加減算に比べて長い演算時間を必要とするので乗算命
令や除算命令が命令1にあたる。タイミングt3までは命
令1〜3が順調に処理され、3段のパイプラインは淀み
なく流れる。しかし命令1の実行にはもう1サイクルか
かるため、次のタイミングt4において他のステージの処
理を全て止めて命令1の実行のみを引き続いて行わなけ
ればならない。ここで上記のパイプラインインタロック
が生じ、性能を劣化させることになる。
【0004】この第1の従来技術におけるプロセッサに
対応するコンパイラは、特別な処理を行わず命令1〜3
を連続してコード生成するに過ぎない。 (第2の従来技術)図14は、第2の従来技術における
プロセッサの動作タイミング図である。第2の従来技術
におけるプロセッサも3段パイプラインで構成されてい
るが、いわゆる突放し処理を行う点で第1の従来技術に
おけるプロセッサと異なる。突放し処理とは、ある処理
が継続して行われていてもその処理の終了を待たずに次
の処理を開始することである。図14は上と同様に命令
1だけが実行に2サイクルを要する例を示しているが、
タイミングt4において命令2が命令1の終了を待たずに
実行され、命令3が解読される。インタロックは発生し
ない。
【0005】この第2の従来技術におけるプロセッサに
対応するコンパイラは、後に述べる特別な処理を必要と
する場合がある。
【0006】
【発明が解決しようとする課題】しかしながら、上記の
第1の従来技術では、上記の通りパイプラインのインタ
ロックが生じて性能が劣化する。また、第2の従来技術
では、図14に例示した命令2は命令1の実行結果を用
いる命令であってはいけない。命令1の実行が終了する
前に命令2をの実行を開始しているからである。従って
次の2つのいずれかの対応が必要となる。
【0007】1つはコンパイラによる対応で、コンパイ
ラが命令間の依存関係を調べ、パイプライン伸長を引き
起こす可能性のある命令の後にはその命令の結果を使用
しない命令を並べるといった命令スケジューリングの方
法である。この方法では、依存関係のない命令を並び替
えることができない場合は、パイプライン伸長を引き起
こす可能性のある命令の後には無動作(NOP)命令をイ
ンタロックのサイクルに応じた数だけ挿入しなければな
らない。そのためコードサイズが増加しコストが上昇す
るという問題点がある。
【0008】もう1つはプロセッサによる対応で、プロ
セッサが突放し処理を行う際にその命令と後続の命令と
の依存関係を調べ、依存関係がない場合に限って突放し
処理を行う方法である。この方法では上記のような無動
作(NOP)命令の挿入によるコードサイズの増加はない
が、プロセッサが命令間の依存関係を調べるためのハー
ドウェアが必要となってハードウェアのコストが増大す
るという問題点を有している。
【0009】そこで、本発明はかかる点に鑑み、コード
サイズの増加とハードウェアのコストの増大とを低く抑
え、効率よくインタロックを制御するコンパイラとプロ
セッサとを提供することを目的とする。
【0010】
【課題を解決するための手段】上記課題を解決するため
に本発明に係るコンパイラは、高級言語プログラムか
ら、パイプライン処理を行うプロセッサを対象とする機
械命令プログラムを生成するコンパイラであって、前記
高級言語プログラム中に前記パイプラインをインタロッ
クさせ得るコードを検出するインタロックコード検出手
段と、前記コードが検出された場合に、該コードに対応
する第1の機械命令と依存関係のない他の機械命令を前
記第1の機械命令に後続して配置することができるか否
かを判定する依存回避検出手段と、前記第1の機械命令
を生成するとともに、前記依存回避検出手段が依存関係
のない機械命令を配置することができないと判定した場
合には、前記第1の機械命令の実行の終了を待って該機
械命令に後続する機械命令が実行されるよう指示する第
2の機械命令を生成し、前記依存回避検出手段が依存関
係のない機械命令を配置することができると判定した場
合には、前記第1の機械命令の実行の終了を待たずに該
機械命令に後続する機械命令が実行されるよう指示する
第3の機械命令を生成する機械命令生成手段とを備える
ことを特徴とする。
【0011】これによって、コンパイラが依存関係のな
い命令を並び替えることができない場合だけパイプライ
ンをインタロックさせる。ここで、前記機械命令生成手
段は、前記依存回避検出手段が依存関係のない機械命令
を配置することができないと判定した場合には、前記第
1の機械命令の実行の終了を待たずに該機械命令に後続
する機械命令が実行されるとした場合に必要とする、前
記第1の機械命令の実行の終了を待たせるための1つ以
上の機械命令の大きさと、前記第2の機械命令の大きさ
とを比較し、前記第2の機械命令の大きさの方が小さい
かまたは等しい場合に限って、前記第2の機械命令を生
成するようにしてもよい。
【0012】または、前記機械命令生成手段は、前記依
存回避検出手段が依存関係のない機械命令を配置するこ
とができないと判定した場合でも、前記第1の機械命令
の実行の終了を待たずに該機械命令に後続する機械命令
が実行されるとした場合に必要とする、前記第1の機械
命令の実行の終了を待たせるための1つ以上の機械命令
の大きさと、前記第2の機械命令の大きさとを比較し、
前記第2の機械命令の大きさの方が大きいかまたは等し
い場合は、前記第3の機械命令と、前記第1の機械命令
の実行の終了を待たせるための1つ以上の機械命令とを
生成するとしてもよい。
【0013】上記の各コンパイラは、前記機械命令生成
手段は、前記第2の機械命令および前記第3の機械命令
を、前記第1の機械命令に先行して配置するようにして
もよい。ここで、前記第3の機械命令を前記第1の機械
命令に後続して配置するとしてもよい。
【0014】さらに、前記機械命令生成手段は、前記第
2の機械命令を前記第1の機械命令に先行して配置する
場合に、配置しようとする前記第2の機械命令よりさら
に先行する位置にある前記第3の機械命令を遡って検索
し、検索された前記第3の機械命令の位置に前記第3の
機械命令に代えて前記第2の機械命令を配置するとして
もよい。
【0015】また初め3通りの各コンパイラは、前記機
械命令生成手段は、前記第2の機械命令および前記第3
の機械命令を、前記第1の機械命令に含ませて生成する
としてもよい。次に本発明に係るプロセッサは、複数の
ステージからなるパイプライン処理を行うプロセッサで
あって、複数の命令を格納する記憶装置から命令を読出
す命令読出し手段と、前記命令読出し手段により読出さ
れた命令を解読する解読手段と、前記命令解読手段にお
ける解読結果に従って命令を実行する実行手段と、前記
プロセッサが第1の状態にあるか第2の状態にあるかを
判定する判定手段と、前記解読手段が、命令の解読によ
って前記パイプラインのいずれかのステージが伸長する
ことを検出すると、前記判定手段により前記第1の状態
にあることが判定される場合は、前記パイプラインの伸
長するステージ以外のステージをインタロックさせ、前
記判定手段により前記第2の状態にあることが判定され
る場合は、インタロックさせないように前記パイプライ
ンを制御するパイプライン制御手段とを備えることを特
徴とする。
【0016】これによって、パイプラインがインタロッ
クする場合としない場合とが切り換えられる。ここで、
前記判定手段は、前記解読手段または前記実行手段によ
って書き換えられる制御レジスタを備え、該制御レジス
タの値によって前記第1の状態と前記第2の状態とを判
定するとしてもよい。
【0017】または、前記判定手段は、前記解読手段に
より前記パイプラインのいずれかのステージを伸長させ
る命令が解読されたときに、前記解読手段における該命
令の解読結果に基づいて前記第1の状態と前記第2の状
態とを判定するとしてもよい。上記の各プロセッサは、
前記命令は、並列実行させるオペレーションを指定する
複数のオペレーションフィールドを含むVLIW方式の
命令であるとしてもよい。
【0018】ここで、前記実行手段は、いずれも前記パ
イプラインにおける実行ステージで作用し、前記複数の
オペレーションフィールドに対応する複数の部分実行手
段からなり、前記パイプライン制御手段は、前記解読手
段により前記実行ステージが伸長することが検出されか
つ前記判定手段により前記第2の状態にあることが判定
される場合は、伸長している前記部分実行手段と少なく
とも1つの伸長していない前記部分実行手段とを並列に
動作させることによって前記パイプラインのインタロッ
クを回避するように制御するとしてもよい。
【0019】さらに、前記パイプライン制御手段は、前
記した少なくとも1つの伸長していない前記部分実行手
段に対応するオペレーションフィールドと異なるオペレ
ーションフィールドを含む複数のオペレーションフィー
ルドを検索して、該部分実行手段を動作させるオペレー
ションを決定するとしてもよい。また本発明に係るコン
パイラは、並列実行させるオペレーションを指定する複
数のオペレーションフィールドを含むVLIW方式の機
械命令を実行するプロセッサを対象とするコンパイラで
あって、並列実行させる有益なオペレーションが指定で
きない第1のオペレーションフィールドがある場合に、
無動作のオペレーションを指定する代わりに前記プロセ
ッサを制御するオペレーションを前記第1のオペレーシ
ョンフィールドに指定する機械命令を生成する機械命令
生成手段を備えることを特徴とする。
【0020】これによって、無動作のオペレーションを
指定するオペレーションフィールドが削減される。ここ
で、前記プロセッサは、パイプライン処理を行うプロセ
ッサであり、前記コンパイラはさらに、入力された高級
言語プログラム中に前記パイプラインをインタロックさ
せ得るコードを検出するインタロックコード検出手段
と、前記コードが検出された場合に、該コードに対応す
る第1のオペレーションと依存関係のない他のオペレー
ションを前記第1のオペレーションを含む第1の機械命
令に後続して配置することができるか否かを判定する依
存回避検出手段とを備え、前記機械命令生成手段は前記
第1の機械命令を生成するとともに、前記依存回避検出
手段が依存関係のないオペレーションを配置することが
できないと判定した場合には、前記第1の機械命令の実
行の終了を待って該機械命令に後続する機械命令が実行
されるよう指示する第2のオペレーションを生成し、前
記依存回避検出手段が依存関係のないオペレーションを
配置することができると判定した場合には、前記第1の
オペレーションの実行の終了を待たずに前記第1の機械
命令に後続する機械命令が実行されるよう指示する第3
のオペレーションを生成し、前記第2および第3のオペ
レーションを前記第1のオペレーションフィールドにす
る指定するとしてもよい。
【0021】さらに、前記機械命令生成手段は、前記第
2のオペレーションを含む第2の機械命令および第3の
オペレーションを含む第3の機械命令を、前記第1の機
械命令に先行して配置するとしてもよい。またさらに、
前記機械命令生成手段は、前記第2の機械命令を前記第
1の機械命令に先行して配置した場合、前記第3の機械
命令を前記第1の機械命令に後続して配置するとしても
よい。
【0022】そしてさらに、前記機械命令生成手段は、
前記第2の機械命令を前記第1の機械命令に先行して配
置する場合に、配置しようとする前記第2の機械命令よ
りさらに先行する位置にある前記第3の機械命令を遡っ
て検索し、検索された前記第3の機械命令の前記第3の
オペレーションに代えて前記第2のオペレーションを指
定するとしてもよい。
【0023】上の2つ目のコンパイラは、前記機械命令
生成手段は、前記第2のオペレーションおよび前記第3
のオペレーションを、前記第1の機械命令に含ませて生
成するとしてもよい。または、前記機械命令生成手段は
前記依存回避検出手段が依存関係のないオペレーション
を配置することができると判定した場合には、前記第1
の機械命令に後続する機械命令の、前記第1のオペレー
ションを指定するオペレーションフィールドと異なるオ
ペレーションフィールドに、前記第1のオペレーション
の実行の終了を待たずに実行されるオペレーションを指
定するとしてもよい。
【0024】最後に本発明に係る記録媒体は、パイプラ
イン処理を行うプロセッサによって実行される機械命令
プログラムを記録した記録媒体であって、前記機械命令
プログラムは、前記パイプラインをインタロックさせ得
る第1の機械命令と、前記第1の機械命令の実行の終了
を待って該機械命令に後続する機械命令が実行されるよ
う指示する第2の機械命令と、前記第1の機械命令の実
行の終了を待たずに該機械命令に後続する機械命令が実
行されるよう指示する第3の機械命令とをを含むことを
特徴とする。
【0025】これによって、パイプラインがインタロッ
クする場合としない場合とが切り換わる機械命令プログ
ラムが記録される。
【0026】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて詳細に説明する。 1.コンパイラ 図1は、コンパイラの構成を示すブロック図である。コ
ンパイラ102は、ユーザが記述したC言語プログラム
101を翻訳し、機械命令プログラム110を出力す
る。
【0027】コンパイラ102は、C言語プログラム1
01を読込用バッファ104に読み込むファイル読込部
103と、読込用バッファ104に読み込まれたC言語
プログラムの構文や意味を解析して中間コードを生成し
中間コード用バッファ106に書き込む構文解析部10
5と、中間コード用バッファ106に格納された中間コ
ードを入力して機械命令プログラムを生成し出力用バッ
ファ108に書き込む機械命令生成部107と、出力用
バッファ108に格納された機械命令プログラムをファ
イルに出力するファイル出力部109とから構成され
る。
【0028】図2は、構文解析部105の処理フローを
示したフローチャートである。図3は、機械命令生成部
107の処理フローを示したフローチャートである。図
4と図7とは、C言語プログラムの例を示すプログラム
リストである。図5と図8とは、それぞれ図4と図7と
に示すC言語プログラムを入力として与えた場合に、コ
ンパイラ102の中間コード用バッファ106に格納さ
れた中間コードプログラムを示したリストである。
【0029】図6と図9とは、それぞれ図4と図7とに
示すC言語プログラムを入力として与えた場合に、コン
パイラにより生成された機械命令プログラムを示したリ
ストである。なお、機械命令プログラムは本来0と1の
ビット列であるが、意味を表すために図6と図9とでは
ニモニック表記してある。 1.1 コンパイラの動作例1 以下に、図4のプログラムリストを入力とした場合にお
ける上記構成をもつコンパイラの動作について図1、図
2、図3、図4、図5および図6を用いて説明する。
【0030】ファイル読込部103は、ユーザが記述し
たC言語プログラム101を読み込み、読込用バッファ
104に格納する。構文解析部105は、読込用バッフ
ァ104に格納されたC言語プログラムを取り出す(ス
テップ202)。図4に示すプログラムの「a=10;」に
ついては、次行の「a=a*20;」とは並列に実行できない
ので(ステップ203)、op:nop型の中間コードでopを
「a←10」にした中間コード1を中間コード用バッファ
106に出力する(ステップ205)。
【0031】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード1を取り出し(ス
テップ302)、op:nop型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
するとともに、これが最初のnopなのでnop部分には突放
しスイッチをオンする命令を装入し出力用バッファ10
8に出力する(ステップ305)。
【0032】次に、構文解析部105は、読込用バッフ
ァ104に格納されたC言語プログラムを取り出す(ス
テップ202)。図4に示すプログラムの「a=a*20;」
については、次行の「b=30;」とは並列に実行できるの
で(ステップ203)、op:op型の中間コードでopを「a
←a*20」と「b←30」にした中間コード2を中間コード
用バッファ106に出力する(ステップ206)。
【0033】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード2を取り出し(ス
テップ302)、op:op型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
し出力用バッファ108に出力する(ステップ30
5)。次に、構文解析部105は、読込用バッファ10
4に格納されたC言語プログラムを取り出そうとする
(ステップ202)。しかし先に取り出された図4に示
すプログラムの「a=a*20;」が乗算の実行に2サイクル
要し、さらに後続行の「a=a-40;」と「a=a*2;」はいず
れも先の乗算結果を使用するためここでは何も実行でき
ないので(ステップ203)、nop:nop型の中間コード
3を中間コード用バッファ106に出力する(ステップ
204)。
【0034】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード3を取り出し(ス
テップ302)、nop:nop型の中間コードであると判断
し(ステップ303)、出力用バッファ108を遡って
検索して先に挿入された突放しスイッチをオンする命令
を突放しスイッチをオフする命令に置き換える(ステッ
プ304)。
【0035】次に、構文解析部105は、読込用バッフ
ァ104に格納されたC言語プログラムを取り出す(ス
テップ202)。図4に示すプログラムの「a=a-40;」
については、次行の「a=a*2;」とは並列に実行できない
ので(ステップ203)、op:nop型の中間コードでopを
「a←a-40」にした中間コード4を中間コード用バッフ
ァ106に出力する(ステップ205)。
【0036】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード4を取り出し(ス
テップ302)、op:nop型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
するとともに、以前に突放しスイッチをオフする命令を
挿入しているのでnop部分には突放しスイッチをオンす
る命令を装入し出力用バッファ108に出力する(ステ
ップ305)。
【0037】最後に、構文解析部105は、読込用バッ
ファ104に格納されたC言語プログラムを取り出す
(ステップ202)。図4に示すプログラムの「a=a*
2;」については最終行なので(ステップ203)、op:n
op型の中間コードでopを「a←a*2」にした中間コード5
を中間コード用バッファ106に出力する(ステップ2
05)。
【0038】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード5を取り出し(ス
テップ302)、op:nop型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
するとともに、以前に突放しスイッチをオフする命令を
挿入しているのでnop部分にはNOP命令を装入し出力用バ
ッファ108に出力する(ステップ305)。このと
き、中間コードのop部は乗算を意味するが、「a←a*2」
なので乗算命令を生成せずに代わりに加算命令を生成し
て実行に2サイクル以上必要な命令の生成を極力、阻止
する。
【0039】ファイル出力部109は、出力用バッファ
108に格納された機械命令を、ファイルに出力する。
このファイルに出力された機械命令プログラムは、図6
のリストに示すようになる。以下、図6に示す命令1か
ら4の意味を説明する。 命令1 MOV #10, R0 : MOV #0, CR レジスタR0に10を格納することと、レジスタCRに0を格
納すること。レジスタCRは突放しスイッチとして作用
し、0はオフ、1はオンを意味する。
【0040】命令2 MUL #20, R0 : MOV #30, R1 レジスタR0の内容に20をかけて積をR0に格納すること
と、レジスタR1に30を格納すること。 命令3 SUB #40, R0 : MOV #1, CR レジスタR0の内容から40を引いて結果をR0に格納するこ
とと、レジスタCRに1を格納すること。
【0041】命令4 ADD R0, R0 : NOP レジスタR0の内容を2倍して結果をR0に格納すること。 1.2 コンパイラの動作例2 以下に、図7のプログラムリストを入力とした場合にお
ける上記構成をもつコンパイラの動作について図1、図
2、図3、図7、図8および図9を用いて説明する。
【0042】ファイル読込部103は、ユーザが記述し
たC言語プログラム101を読み込み、読込用バッファ
104に格納する。構文解析部105は、読込用バッフ
ァ104に格納されたC言語プログラムを取り出す(ス
テップ202)。図4に示すプログラムの「a=10;」に
ついては、次行の「a=a*20;」とは並列に実行できない
ので(ステップ203)、op:nop型の中間コードでopを
「a←10」にした中間コード1を中間コード用バッファ
106に出力する(ステップ205)。
【0043】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード1を取り出し(ス
テップ302)、op:nop型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
するとともに、これが最初のnopなのでnop部分には突放
しスイッチをオンする命令を装入し出力用バッファ10
8に出力する(ステップ305)。
【0044】次に、構文解析部105は、読込用バッフ
ァ104に格納されたC言語プログラムを取り出す(ス
テップ202)。図4に示すプログラムの「a=a*20;」
については、次行の「b=30;」とは並列に実行できるの
で(ステップ203)、op:op型の中間コードでopを「a
←a*20」と「b←30」にした中間コード2を中間コード
用バッファ106に出力する(ステップ206)。
【0045】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード2を取り出し(ス
テップ302)、op:op型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
し出力用バッファ108に出力する(ステップ30
5)。次に、構文解析部105は、読込用バッファ10
4に格納されたC言語プログラムを取り出す(ステップ
202)。先に取り出された図7に示すプログラムの
「a=a*20;」が乗算の実行に2サイクル要するが、後続
行の「b=b-40;」は先の乗算結果を使用しないためこれ
は実行でき(ステップ203)、op:nop型の中間コード
3を中間コード用バッファ106に出力する(ステップ
205)。
【0046】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード3を取り出し(ス
テップ302)、op:nop型の中間コードであると判断す
る(ステップ303)。このとき、1つ前のop部分が伸
長することを判断し、op部分とnop部分とを入れ換え
る。そしてop部分に対応する機械命令を生成するととも
に、これが最初のnopではなく以前に突放しスイッチを
オフする命令を挿入していないのでnop部分にはNOP命令
を装入し出力用バッファ108に出力する(ステップ3
05)。
【0047】最後に、構文解析部105は、読込用バッ
ファ104に格納されたC言語プログラムを取り出す
(ステップ202)。図4に示すプログラムの「a=a*
2;」については、次行の「c=50;」とは並列に実行でき
るので(ステップ203)、op:op型の中間コードでop
を「a←a*2」と「c←50」にした中間コード4を中間コ
ード用バッファ106に出力する(ステップ206)。
【0048】機械命令生成部107は、中間コード用バ
ッファ106に格納された中間コード4を取り出し(ス
テップ302)、op:op型の中間コードであると判断し
(ステップ303)、op部分に対応する機械命令を生成
し出力用バッファ108に出力する(ステップ30
6)。このとき、中間コードのop部は乗算を意味する
が、「a←a*2」なので乗算命令を生成せずに代わりに加
算命令を生成して実行に2サイクル以上必要な命令の生
成を極力、阻止する。
【0049】ファイル出力部109は、出力用バッファ
108に格納された機械命令を、ファイルに出力する。
このファイルに出力された機械命令プログラムは、図9
のリストに示すようになる。以下、図9に示す命令1か
ら4の意味を説明する。 命令1 MOV #10, R0 : MOV #1, CR レジスタR0に10を格納することと、レジスタCRに1を格
納すること。レジスタCRは突放しスイッチとして作用
し、0はオフ、1はオンを意味する。
【0050】命令2 MUL #20, R0 : MOV #30, R1 レジスタR0の内容に20をかけて積をR0に格納すること
と、レジスタR1に30を格納すること。 命令3 NOP : SUB #40, R1 レジスタR1の内容から40を引いて結果をR1に格納するこ
と。
【0051】命令4 ADD R0, R0 : MOV #50, R2 レジスタR0の内容を2倍して結果をR0に格納すること
と、レジスタR2に50を格納すること。 2.プロセッサ 図10は、プロセッサの概略構成図である。
【0052】このプロセッサは、命令フェッチステージ
(以下、IFステージ)、解読およびレジスタ読出しステ
ージ(以下、DECステージ)、実行ステージ(以下、EX
ステージ)の3つのステージからなる3段パイプライン
構造を成している。図10において、401は機械語プ
ログラムを格納するROM、402と403はROM5から取
り出した機械語命令(以下、命令と略す)を格納するそ
れぞれI1ラッチとI2ラッチ、404と405はそれ
ぞれI1ラッチ402とI2ラッチ403に保持された
命令の前半部分と後半部分を解読しプロセッサ各部を制
御する第1命令解読器と第2命令解読器、406はオペ
ランド格納するレジスタファイル、407と408はそ
れぞれI1ラッチ402とI2ラッチ403の内容の一
部とレジスタファイル406の出力との2入力から1つ
を選択するD1セレクタとD2セレクタ、409と41
0はそれぞれD1セレクタ407とD2セレクタ408
の出力を格納するD11ラッチとD12ラッチ、411
と412はレジスタファイル406の出力を格納するD
21ラッチとD22ラッチ、413はD11ラッチ40
9およびD21ラッチ411の内容を用いて算術論理演
算を行う第1演算器、414はD12ラッチ410およ
びD22ラッチ412の内容を用いて算術論理演算を行
う第2演算器で、第1演算器413と第2演算器414
の出力はともにレジスタファイル406に接続される。
【0053】レジスタファイル406は、レジスタR0か
らR7の汎用レジスタ4061と突放しスイッチレジスタ
CR4062とを含み、読出し4ポート、書込み2ポート
を有する。即ち、同時に4つのレジスタ(重複は可)の
読出しと2つのレジスタ(重複は不可)の書込みを許
す。突放しスイッチレジスタCR4062の内容はともに
第1命令解読器404と第2命令解読器405とにフィ
ードバックされ、それぞれ第1演算器413と第2演算
器414との突放し処理を行うか否かを制御している。
【0054】このプロセッサはいわゆるVLIW(Very Lon
g Instruction Word)形式の命令に基づいており、1つ
の命令で2つの演算などの操作が定義される。ニモニッ
ク表記された命令の左半分は、I1ラッチ402に格納
され第1命令解読器404で解読され第1演算器413
で実行される。また右半分は、I2ラッチ403に格納
され第2命令解読器405で解読され第2演算器414
で実行される。このようにして同時に2つの操作を実行
するためVLIW形式のプロセッサは効率が高い。 2.1 プロセッサの動作例1 以下に、図6の機械命令プログラムがROM401に格納
された場合における上記構成をもつプロセッサの動作に
ついて図10および図11を用いて説明する。
【0055】図11は、図6の機械命令プログラムがRO
M401に格納された場合におけるプロセッサの動作タ
イミング図である。同図は、プロセッサの動作をパイプ
ラインのIFステージ、DECステージ、EXステージで処理
される命令をマシンサイクルと呼ばれるタイミング毎に
示している。以下、時間が経過する順にタイミング毎に
その動作を説明する。 (タイミングt1) ・IFステージ:命令1(MOV #10, R0 : MOV #0, CR) 命令1がROM401から読出され、左半分(MOV #10, R
0)がI1ラッチ402に、右半分(MOV #0, CR)がI
2ラッチ403に格納される。 (タイミングt2) ・DECステージ:命令1 I1ラッチ402とI2ラッチ403に格納された命令
1がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I1ラッチ402およびD1セレク
タ407を経由して値10がD11ラッチ409に、I2
ラッチ403およびD2セレクタ408を経由して値0
がD12ラッチ410に格納される。 ・IFステージ:命令2(MUL #20, R0 : MOV #30, R
1) 命令1がROM401から読出され、左半分(MUL #20, R
0)がI1ラッチ402に、右半分(MOV #30, R1)が
I2ラッチ403に格納される。 (タイミングt3) ・EXステージ:命令1 D11ラッチ409に格納された値10が第1演算器41
3をそのまま通過し、汎用レジスタ4061のR0に格納
されて命令1の左半分は終了する。一方、D12ラッチ
410に格納された値0が第2演算器414をそのまま
通過し、突放しスイッチレジスタCR4062に格納され
て命令1の右半分も終了する。 ・DECステージ:命令2 I1ラッチ402とI2ラッチ403に格納された命令
2がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I1ラッチ402およびD1セレク
タ407を経由して値20がD11ラッチ409に、I2
ラッチ403およびD2セレクタ408を経由して値30
がD12ラッチ410に格納される。汎用レジスタ40
61のR0が読出されて、値10がD21ラッチ411に格
納される。
【0056】このとき、第1命令解読器404は、EXス
テージにおける命令2の処理が1サイクルのパイプライ
ン伸長を伴うことを検出し、かつ突放しスイッチレジス
タCR4062の値が0、即ち突放し処理を行わないこと
を示しているため、命令2のEXステージの2サイクル目
であるタイミングt5ではパイプラインをインタロックさ
せる。 ・IFステージ:命令3(SUB #40, R0 : MOV #1, CR) 命令1がROM401から読出され、左半分(SUB #40, R
0)がI1ラッチ402に、右半分(MOV #1, CR)がI
2ラッチ403に格納される。 (タイミングt4) ・EXステージ:命令2 D11ラッチ409に格納された値20とD21ラッチ4
11に格納された値10が第1演算器413において乗算
されるが、乗算の実行には2サイクルを要するのでこの
タイミングでは命令2の左半分は終了しない。一方、D
12ラッチ410に格納された値30が第2演算器414
をそのまま通過し、汎用レジスタ4061のR1に格納さ
れて命令2の右半分は終了する。 ・DECステージ:命令3 I1ラッチ402とI2ラッチ403に格納された命令
3がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I1ラッチ402およびD1セレク
タ407を経由して値40がD11ラッチ409に、I2
ラッチ403およびD2セレクタ408を経由して値1
がD12ラッチ410に格納される。汎用レジスタ40
61のR0が読出されて、値10がD21ラッチ411に格
納される。 ・IFステージ:命令4(ADD R0, R0 : NOP) 命令1がROM401から読出され、左半分(ADD R0, R
0)がI1ラッチ402に、右半分(NOP)がI2ラッチ
403に格納される。 (タイミングt5) ・EXステージ:命令2 第1演算器413において乗算の2サイクル目が実行さ
れ、積の値200が汎用レジスタ4061のR0に格納され
て命令2の右半分は終了する。 ・DECステージ:インタロック パイプラインがインタロックされているので新たな命令
の解読は行わない。但し、汎用レジスタ4061のR0が
再び読出されて、値200がD21ラッチ411に上書き
される。 ・IFステージ:インタロック パイプラインがインタロックされているので新たな命令
の読出しは行わない。 (タイミングt6) ・EXステージ:命令3 D11ラッチ409に格納された値40とD21ラッチ4
11に格納された値200が第1演算器413において減
算(200-40)され、結果の値160が汎用レジスタ406
1のR0に格納されて命令3の右半分は終了する。一方、
D12ラッチ410に格納された値1が第2演算器41
4をそのまま通過し、突放しスイッチレジスタCR406
2に格納されて命令3の右半分も終了する。 ・DECステージ:命令4 I1ラッチ402とI2ラッチ403に格納された命令
4がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。汎用レジスタ4061のR0が読出さ
れて、D1セレクタ407を経由して値160がD11ラ
ッチ409とD21ラッチ411に格納される。 (タイミングt7) ・EXステージ:命令4 D11ラッチ409に格納された値160とD21ラッチ
411に格納された値160が第1演算器413において
加算され、結果の値320が汎用レジスタ4061のR0に
格納されて命令4の右半分は終了する。一方、第2演算
器414は動作しないまま命令4の右半分も終了する。
【0057】2.2 プロセッサの動作例2 以下に、図9の機械命令プログラムがROM401に格納
された場合における上記構成をもつプロセッサの動作に
ついて図10および図12を用いて説明する。図12
は、図9の機械命令プログラムがROM401に格納され
た場合におけるプロセッサの動作タイミング図である。
同図は、プロセッサの動作をパイプラインのIFステー
ジ、DECステージ、EXステージで処理される命令をマシ
ンサイクルと呼ばれるタイミング毎に示している。以
下、時間が経過する順にタイミング毎にその動作を説明
する。 (タイミングt1) ・IFステージ:命令1(MOV #10, R0 : MOV #1, CR) 命令1がROM401から読出され、左半分(MOV #10, R
0)がI1ラッチ402に、右半分(MOV #1, CR)がI
2ラッチ403に格納される。 (タイミングt2) ・DECステージ:命令1 I1ラッチ402とI2ラッチ403に格納された命令
1がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I1ラッチ402およびD1セレク
タ407を経由して値10がD11ラッチ409に、I2
ラッチ403およびD2セレクタ408を経由して値1
がD12ラッチ410に格納される。 ・IFステージ:命令2(MUL #20, R0 : MOV #30, R
1) 命令1がROM401から読出され、左半分(MUL #20, R
0)がI1ラッチ402に、右半分(MOV #30, R1)が
I2ラッチ403に格納される。 (タイミングt3) ・EXステージ:命令1 D11ラッチ409に格納された値10が第1演算器41
3をそのまま通過し、汎用レジスタ4061のR0に格納
されて命令1の左半分は終了する。一方、D12ラッチ
410に格納された値1が第2演算器414をそのまま
通過し、突放しスイッチレジスタCR4062に格納され
て命令1の右半分も終了する。 ・DECステージ:命令2 I1ラッチ402とI2ラッチ403に格納された命令
2がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I1ラッチ402およびD1セレク
タ407を経由して値20がD11ラッチ409に、I2
ラッチ403およびD2セレクタ408を経由して値30
がD12ラッチ410に格納される。汎用レジスタ40
61のR0が読出されて、値10がD21ラッチ411に格
納される。
【0058】このとき、第1命令解読器404は、EXス
テージにおける命令2の処理が1サイクルのパイプライ
ン伸長を伴うことを検出するが、突放しスイッチレジス
タCR4062の値が1、即ち突放し処理を行うことを示
しているため、命令2のEXステージの2サイクル目であ
るタイミングt5ではパイプラインをインタロックさせな
い。 ・IFステージ:命令3(NOP : SUB #40, R1) 命令1がROM401から読出され、左半分(NOP)がI1
ラッチ402に、右半分(SUB #40, R0)がI2ラッチ
403に格納される。 (タイミングt4) ・EXステージ:命令2 D11ラッチ409に格納された値20とD21ラッチ4
11に格納された値10が第1演算器413において乗算
されるが、乗算の実行には2サイクルを要するのでこの
タイミングでは命令2の左半分は終了しない。一方、D
12ラッチ410に格納された値30が第2演算器414
をそのまま通過し、汎用レジスタ4061のR1に格納さ
れて命令2の右半分は終了する。 ・DECステージ:命令3 I1ラッチ402とI2ラッチ403に格納された命令
3がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。I2ラッチ403およびD2セレク
タ408を経由して値40がD12ラッチ410に格納さ
れる。汎用レジスタ4061のR1が読出されて、値30が
D22ラッチ412に格納される。 ・IFステージ:命令4(ADD R0, R0 : MOV #50, R2) 命令1がROM401から読出され、左半分(ADD R0, R
0)がI1ラッチ402に、右半分(MOV #50, R2)が
I2ラッチ403に格納される。 (タイミングt5) ・EXステージ:命令2と命令3 第1演算器413において乗算の2サイクル目が実行さ
れ、積の値200が汎用レジスタ4061のR0に格納され
て命令2の右半分は終了する。
【0059】D12ラッチ410に格納された値40とD
22ラッチ412に格納された値30が第1演算器413
において減算(30-40)され、結果の値-10が汎用レジス
タ4061のR1に格納されて命令3の右半分は終了す
る。命令3の右半分は無動作なので何もせず終了する。 ・DECステージ:命令4 I1ラッチ402とI2ラッチ403に格納された命令
4がそれぞれ第1命令解読器404と第2命令解読器4
05で解読される。汎用レジスタ4061のR0が読出さ
れて、D1セレクタ407を経由して値200がD11ラ
ッチ409とD21ラッチ411に格納される。I2ラ
ッチ403およびD2セレクタ408を経由して値50が
D12ラッチ410に格納される。 (タイミングt6) ・EXステージ:命令4 D11ラッチ409に格納された値160とD21ラッチ
411に格納された値200が第1演算器413において
加算され、結果の値400が汎用レジスタ4061のR0に
格納されて命令4の右半分は終了する。一方、D12ラ
ッチ410に格納された値50が第2演算器414をその
まま通過し、汎用レジスタ4061のR2に格納されて命
令4の右半分も終了する。 3.記録媒体 本発明の記録媒体の実施の形態として、図1の機械命令
プログラム110を記録した磁気ディスク(フロッピー
ディスクやハードディスクなど)、光ディスク(CD-ROM
やPDなど)、光磁気ディスク、半導体メモリ(ROMやフ
ラッシュメモリなど)がある。
【0060】以上のように本実施の形態によれば、コン
パイラが、パイプライン伸長を引き起こす可能性のある
命令の後に依存関係のない命令を並び替えることができ
ない場合には予め突放し処理を禁止する命令を生成する
ことで、無動作(NOP)命令をインタロックのサイクル
に応じた数だけ挿入することによるコードサイズの増加
が軽減される。また、パイプライン伸長を引き起こす可
能性のある命令の後に依存関係のない命令を並び替える
ことができる場合には予め突放し処理を許可する命令を
生成することで、プロセッサは突放し処理を行い性能が
向上する。プロセッサには、上記の命令に従って突放し
処理を行うか否かだけを判断する機構だけを備えればよ
く、命令間の依存関係を調べるためのハードウェアは必
要ない。従ってハードウェアのコストの増大が極小に抑
えられる。
【0061】また本実施の形態によれば、突放し処理を
禁止する命令あるいは許可する命令をVLIW形式のプロセ
ッサの本質的課題である無動作スロット(並列に実行で
きる命令を定義できない無効なNOP命令の領域)を利用
して挿入しているため、これらの命令をコンパイラが生
成することによるコードサイズの増加や、これらの命令
をプロセッサが実行することによる実行時間の伸長は全
くない。
【0062】以上、本発明に係るコンパイラ及びプロセ
ッサについて、実施形態に基づいて説明したが、本発明
はこれら実施形態に限られないことは勿論である。即
ち、 (1)実施形態では、VLIW形式のプロセッサとしている
が、1つの命令で1つの操作を定義するVLIW形式でない
プロセッサでもよい。その場合コンパイラは、突放し処
理を禁止する命令あるいは許可する命令を挿入すること
で増加するコードと、インタロックのために必要とされ
る無動作(NOP)命令の挿入のコード増加とを比べ、増
加が小さくなるようにすればより効率が高くなる。 (2)実施形態では、突放しスイッチレジスタCR406
2を設け、この内容を第1命令解読器404と第2命令
解読器405とにフィードバックして突放し処理を行う
か否かを制御しているが、パイプライン伸長を引き起こ
す命令の全てあるいは一部の各々について、突放し処理
を行うタイプと行わないタイプとを定義してもよい。例
えば乗算について、突放し処理を行うMULA命令と突放し
処理を行わないMULB命令を定義し、コンパイラは図6の
ような場合にはMULB命令を生成し、図9のような場合に
はMULA命令を生成するようにする。プロセッサはこれら
を解読して識別する。
【0063】こうすれば、利用できる無動作スロットが
ほとんどないといった極めて並列性の高いプログラム
や、上記(1)に記載した元来、無動作スロットがない
プロセッサにおいては、突放し処理を禁止する命令ある
いは許可する命令を挿入する必要がないのでコードサイ
ズの増加が抑止され有用である。 (3)実施形態では、突放しスイッチレジスタCR406
2に0または1を書き込む命令をインタロックを引き起こ
す命令の直前、直後に配置しているが、それぞれインタ
ロックを引き起こす命令から離れた位置に配置してもよ
い。こうすることにより無動作スロットはより一層効果
的に利用できる。 (4)実施形態および上記(2)では、乗算におけるパ
イプライン伸長を対象としているが、その他の演算によ
る伸長、ロードやストアによる伸長など何でもよい。 (5)実施形態では、コンパイラが、中間コードの1つ
前のop部分が伸長することを判断し、機械命令生成部が
op部分とnop部分とを入れ換えているが、構文解析部がo
p部分とnop部分とを入れ換えた中間コードを生成するよ
うにしてもよいし、コンパイラにおいては全く入れ換え
ず、プロセッサにおいて伸長しているスロットと空きス
ロットとを識別して命令のNOPでない部分を空きスロッ
トの方に入れ換えるようにしてもよい。 (6)実施形態では、突放しスイッチレジスタCR406
2への書き込みをEXステージ、即ち、第1演算器413
または第2演算器414を経由して行っているが、DEC
ステージで書き込むようにしてもよい。つまり、第1命
令解読器404または第2命令解読器405が突放しス
イッチレジスタCR4062への書き込み命令を検出する
と直接、突放しスイッチレジスタCR4062に値を書き
込む。 (7)実施形態では、コンパイラはC言語プログラムの
連続する2つの行を見て並列実行できるか否かを判断し
ているが、さらに広域的に行を見渡して並列実行できる
行を抽出し並び替えるようにしてもよい。 (8)実施形態では、無動作スロットに突放し処理を禁
止する命令あるいは許可する命令を挿入しているが、無
動作スロットにプロセッサを制御する他の命令、例えば
プロセッサの状態を変える命令やメモリアクセスの仕方
を定義する命令などを挿入することも本発明の思想に含
む。
【0064】
【発明の効果】以上の説明から明らかなように、本発明
に係るコンパイラは、高級言語プログラムから、パイプ
ライン処理を行うプロセッサを対象とする機械命令プロ
グラムを生成するコンパイラであって、前記高級言語プ
ログラム中に前記パイプラインをインタロックさせ得る
コードを検出するインタロックコード検出手段と、前記
コードが検出された場合に、該コードに対応する第1の
機械命令と依存関係のない他の機械命令を前記第1の機
械命令に後続して配置することができるか否かを判定す
る依存回避検出手段と、前記第1の機械命令を生成する
とともに、前記依存回避検出手段が依存関係のない機械
命令を配置することができないと判定した場合には、前
記第1の機械命令の実行の終了を待って該機械命令に後
続する機械命令が実行されるよう指示する第2の機械命
令を生成し、前記依存回避検出手段が依存関係のない機
械命令を配置することができると判定した場合には、前
記第1の機械命令の実行の終了を待たずに該機械命令に
後続する機械命令が実行されるよう指示する第3の機械
命令を生成する機械命令生成手段とを備えることを特徴
とする。
【0065】これによって、コンパイラが依存関係のな
い命令を並び替えることができない場合だけパイプライ
ンをインタロックさせることで、第1の機械命令の実行
の終了を待たせるための機械命令を挿入する必要がなく
なる。ことによるコードサイズの増加が軽減される。こ
こで、前記機械命令生成手段は、前記依存回避検出手段
が依存関係のない機械命令を配置することができないと
判定した場合には、前記第1の機械命令の実行の終了を
待たずに該機械命令に後続する機械命令が実行されると
した場合に必要とする、前記第1の機械命令の実行の終
了を待たせるための1つ以上の機械命令の大きさと、前
記第2の機械命令の大きさとを比較し、前記第2の機械
命令の大きさの方が小さいかまたは等しい場合に限っ
て、前記第2の機械命令を生成するようにしてもよい。
【0066】または、前記機械命令生成手段は、前記依
存回避検出手段が依存関係のない機械命令を配置するこ
とができないと判定した場合でも、前記第1の機械命令
の実行の終了を待たずに該機械命令に後続する機械命令
が実行されるとした場合に必要とする、前記第1の機械
命令の実行の終了を待たせるための1つ以上の機械命令
の大きさと、前記第2の機械命令の大きさとを比較し、
前記第2の機械命令の大きさの方が大きいかまたは等し
い場合は、前記第3の機械命令と、前記第1の機械命令
の実行の終了を待たせるための1つ以上の機械命令とを
生成するとしてもよい。
【0067】これらによって、挿入される第1の機械命
令の実行の終了を待たせるための機械命令の大きさと第
2の機械命令の大きさとが精密に比較され、コードサイ
ズの増加が抑止される。上記の各コンパイラは、前記機
械命令生成手段は、前記第2の機械命令および前記第3
の機械命令を、前記第1の機械命令に先行して配置する
ようにしてもよい。
【0068】ここで、前記第3の機械命令を前記第1の
機械命令に後続して配置するとしてもよい。さらに、前
記機械命令生成手段は、前記第2の機械命令を前記第1
の機械命令に先行して配置する場合に、配置しようとす
る前記第2の機械命令よりさらに先行する位置にある前
記第3の機械命令を遡って検索し、検索された前記第3
の機械命令の位置に前記第3の機械命令に代えて前記第
2の機械命令を配置するとしてもよい。
【0069】これによって、一層、コードサイズの増加
が抑止される。また初め3通りの各コンパイラは、前記
機械命令生成手段は、前記第2の機械命令および前記第
3の機械命令を、前記第1の機械命令に含ませて生成す
るとしてもよい。次に本発明に係るプロセッサは、複数
のステージからなるパイプライン処理を行うプロセッサ
であって、複数の命令を格納する記憶装置から命令を読
出す命令読出し手段と、前記命令読出し手段により読出
された命令を解読する解読手段と、前記命令解読手段に
おける解読結果に従って命令を実行する実行手段と、前
記プロセッサが第1の状態にあるか第2の状態にあるか
を判定する判定手段と、前記解読手段が、命令の解読に
よって前記パイプラインのいずれかのステージが伸長す
ることを検出すると、前記判定手段により前記第1の状
態にあることが判定される場合は、前記パイプラインの
伸長するステージ以外のステージをインタロックさせ、
前記判定手段により前記第2の状態にあることが判定さ
れる場合は、インタロックさせないように前記パイプラ
インを制御するパイプライン制御手段とを備えることを
特徴とする。
【0070】これによって、パイプラインがインタロッ
クする場合としない場合とが切り換えられる。従って命
令間の依存関係を調べるためのハードウェアは必要な
く、ハードウェアのコストの増大が抑制される。ここ
で、前記判定手段は、前記解読手段または前記実行手段
によって書き換えられる制御レジスタを備え、該制御レ
ジスタの値によって前記第1の状態と前記第2の状態と
を判定するとしてもよい。
【0071】または、前記判定手段は、前記解読手段に
より前記パイプラインのいずれかのステージを伸長させ
る命令が解読されたときに、前記解読手段における該命
令の解読結果に基づいて前記第1の状態と前記第2の状
態とを判定するとしてもよい。上記の各プロセッサは、
前記命令は、並列実行させるオペレーションを指定する
複数のオペレーションフィールドを含むVLIW方式の
命令であるとしてもよい。
【0072】ここで、前記実行手段は、いずれも前記パ
イプラインにおける実行ステージで作用し、前記複数の
オペレーションフィールドに対応する複数の部分実行手
段からなり、前記パイプライン制御手段は、前記解読手
段により前記実行ステージが伸長することが検出されか
つ前記判定手段により前記第2の状態にあることが判定
される場合は、伸長している前記部分実行手段と少なく
とも1つの伸長していない前記部分実行手段とを並列に
動作させることによって前記パイプラインのインタロッ
クを回避するように制御するとしてもよい。
【0073】さらに、前記パイプライン制御手段は、前
記した少なくとも1つの伸長していない前記部分実行手
段に対応するオペレーションフィールドと異なるオペレ
ーションフィールドを含む複数のオペレーションフィー
ルドを検索して、該部分実行手段を動作させるオペレー
ションを決定するとしてもよい。これによって、伸長し
ている部分実行手段に対応するオペレーションフィール
ドとは無関係にオペレーションを選ぶことができ、実行
性能が向上する。また対応するコンパイラは、オペレー
ションの並び替えを行う必要がなくなって効率がよい。
【0074】また本発明に係るコンパイラは、並列実行
させるオペレーションを指定する複数のオペレーション
フィールドを含むVLIW方式の機械命令を実行するプ
ロセッサを対象とするコンパイラであって、並列実行さ
せる有益なオペレーションが指定できない第1のオペレ
ーションフィールドがある場合に、無動作のオペレーシ
ョンを指定する代わりに前記プロセッサを制御するオペ
レーションを前記第1のオペレーションフィールドに指
定する機械命令を生成する機械命令生成手段を備えるこ
とを特徴とする。
【0075】これによって、無動作のオペレーションを
指定するオペレーションフィールドが削減され、結果と
してコードサイズが削減できる。ここで、前記プロセッ
サは、パイプライン処理を行うプロセッサであり、前記
コンパイラはさらに、入力された高級言語プログラム中
に前記パイプラインをインタロックさせ得るコードを検
出するインタロックコード検出手段と、前記コードが検
出された場合に、該コードに対応する第1のオペレーシ
ョンと依存関係のない他のオペレーションを前記第1の
オペレーションを含む第1の機械命令に後続して配置す
ることができるか否かを判定する依存回避検出手段とを
備え、前記機械命令生成手段は前記第1の機械命令を生
成するとともに、前記依存回避検出手段が依存関係のな
いオペレーションを配置することができないと判定した
場合には、前記第1の機械命令の実行の終了を待って該
機械命令に後続する機械命令が実行されるよう指示する
第2のオペレーションを生成し、前記依存回避検出手段
が依存関係のないオペレーションを配置することができ
ると判定した場合には、前記第1のオペレーションの実
行の終了を待たずに前記第1の機械命令に後続する機械
命令が実行されるよう指示する第3のオペレーションを
生成し、前記第2および第3のオペレーションを前記第
1のオペレーションフィールドにする指定するとしても
よい。
【0076】これによって、元来、無動作のオペレーシ
ョンを指定せざるを得なかったオペレーションフィール
ドが有効に活用できるばかりでなく、第1の機械命令の
実行の終了を待たせるための機械命令との大きさの比較
を本質的には行うことなく、コードサイズの増加の抑止
が達成される。さらに、前記機械命令生成手段は、前記
第2のオペレーションを含む第2の機械命令および第3
のオペレーションを含む第3の機械命令を、前記第1の
機械命令に先行して配置するとしてもよい。
【0077】またさらに、前記機械命令生成手段は、前
記第2の機械命令を前記第1の機械命令に先行して配置
した場合、前記第3の機械命令を前記第1の機械命令に
後続して配置するとしてもよい。そしてさらに、前記機
械命令生成手段は、前記第2の機械命令を前記第1の機
械命令に先行して配置する場合に、配置しようとする前
記第2の機械命令よりさらに先行する位置にある前記第
3の機械命令を遡って検索し、検索された前記第3の機
械命令の前記第3のオペレーションに代えて前記第2の
オペレーションを指定するとしてもよい。
【0078】上の2つ目のコンパイラは、前記機械命令
生成手段は、前記第2のオペレーションおよび前記第3
のオペレーションを、前記第1の機械命令に含ませて生
成するとしてもよい。または、前記機械命令生成手段は
前記依存回避検出手段が依存関係のないオペレーション
を配置することができると判定した場合には、前記第1
の機械命令に後続する機械命令の、前記第1のオペレー
ションを指定するオペレーションフィールドと異なるオ
ペレーションフィールドに、前記第1のオペレーション
の実行の終了を待たずに実行されるオペレーションを指
定するとしてもよい。
【0079】これによって、指定されたオペレーション
と第1のオペレーションとが並列に実行され、性能が向
上する。最後に本発明に係る記録媒体は、パイプライン
処理を行うプロセッサによって実行される機械命令プロ
グラムを記録した記録媒体であって、前記機械命令プロ
グラムは、前記パイプラインをインタロックさせ得る第
1の機械命令と、前記第1の機械命令の実行の終了を待
って該機械命令に後続する機械命令が実行されるよう指
示する第2の機械命令と、前記第1の機械命令の実行の
終了を待たずに該機械命令に後続する機械命令が実行さ
れるよう指示する第3の機械命令とをを含むことを特徴
とする。
【0080】これによって、パイプラインがインタロッ
クする場合としない場合とが切り換わる機械命令プログ
ラムが記録される。上述したように、本発明に係るコン
パイラ、プロセッサ、およびび記録媒体は、コードサイ
ズの増加とハードウェアコストの増大とを低く抑え、か
つ、効率よくインタロックを制御する技術であるので、
特にマルチメディア関連の製品開発において非常に有用
であり、マルチメディア関連産業の進歩発展に多大な貢
献をするものである。
【図面の簡単な説明】
【図1】実施形態に係るコンパイラの構成を示すブロッ
ク図
【図2】同実施形態に係るコンパイラの構文解析部の処
理フローを示したフローチャート
【図3】同実施形態に係るコンパイラの機械命令生成部
の処理フローを示したフローチャート
【図4】1つ目のC言語のプログラムを示した図
【図5】図4に示すC言語プログラムを入力として与え
た場合に、同実施形態に係るコンパイラの中間コード用
バッファに格納された中間コードプログラムを示したリ
ストを示す図
【図6】図4に示すC言語プログラムを入力として与え
た場合に、同実施形態に係るコンパイラにより生成され
た機械命令プログラムを示したリストを示す図
【図7】2つ目のC言語のプログラムを示した図
【図8】図7に示すC言語プログラムを入力として与え
た場合に、同実施形態に係るコンパイラの中間コード用
バッファに格納された中間コードプログラムを示したリ
ストを示す図
【図9】図7に示すC言語プログラムを入力として与え
た場合に、同実施形態に係るコンパイラにより生成され
た機械命令プログラムを示したリストを示す図
【図10】同実施形態に係るプロセッサの概略構成図
【図11】図6の機械命令プログラムに対応したプロセ
ッサの動作タイミング図
【図12】図9の機械命令プログラムに対応したプロセ
ッサの動作タイミング図
【図13】第1の従来技術におけるプロセッサの動作タ
イミング図
【図14】第2の従来技術におけるプロセッサの動作タ
イミング図
【符号の説明】
101 C言語プログラム 102 コンパイラ 103 ファイル読込部 104 読込用バッファ 105 構文解析部 106 中間コード用バッファ 107 機械命令生成部 108 出力用バッファ 109 ファイル出力部 110 機械命令プログラム 401 ROM 402 I1ラッチ 403 I2ラッチ 404 第1命令解読器 405 第2命令解読器 406 レジスタファイル 407 D1セレクタ 408 D2セレクタ 409 D11ラッチ 410 D12ラッチ 411 D21ラッチ 412 D22ラッチ 413 第1演算器 414 第2演算器 4061 汎用レジスタ(R0〜R7) 4062 突放しスイッチレジスタ(CR)

Claims (21)

    【特許請求の範囲】
  1. 【請求項1】 高級言語プログラムから、パイプライン
    処理を行うプロセッサを対象とする機械命令プログラム
    を生成するコンパイラであって、 前記高級言語プログラム中に前記パイプラインをインタ
    ロックさせ得るコードを検出するインタロックコード検
    出手段と、 前記コードが検出された場合に、該コードに対応する第
    1の機械命令と依存関係のない他の機械命令を前記第1
    の機械命令に後続して配置することができるか否かを判
    定する依存回避検出手段と、 前記第1の機械命令を生成するとともに、 前記依存回避検出手段が依存関係のない機械命令を配置
    することができないと判定した場合には、 前記第1の機械命令の実行の終了を待って該機械命令に
    後続する機械命令が実行されるよう指示する第2の機械
    命令を生成し、 前記依存回避検出手段が依存関係のない機械命令を配置
    することができると判定した場合には、 前記第1の機械命令の実行の終了を待たずに該機械命令
    に後続する機械命令が実行されるよう指示する第3の機
    械命令を生成する機械命令生成手段とを備えることを特
    徴とするコンパイラ。
  2. 【請求項2】 前記機械命令生成手段は、 前記依存回避検出手段が依存関係のない機械命令を配置
    することができないと判定した場合には、 前記第1の機械命令の実行の終了を待たずに該機械命令
    に後続する機械命令が実行されるとした場合に必要とす
    る、前記第1の機械命令の実行の終了を待たせるための
    1つ以上の機械命令の大きさと、前記第2の機械命令の
    大きさとを比較し、前記第2の機械命令の大きさの方が
    小さいかまたは等しい場合に限って、前記第2の機械命
    令を生成することを特徴とする請求項1記載のコンパイ
    ラ。
  3. 【請求項3】 前記機械命令生成手段は、 前記依存回避検出手段が依存関係のない機械命令を配置
    することができないと判定した場合でも、 前記第1の機械命令の実行の終了を待たずに該機械命令
    に後続する機械命令が実行されるとした場合に必要とす
    る、前記第1の機械命令の実行の終了を待たせるための
    1つ以上の機械命令の大きさと、前記第2の機械命令の
    大きさとを比較し、前記第2の機械命令の大きさの方が
    大きいかまたは等しい場合は、 前記第3の機械命令と、 前記第1の機械命令の実行の終了を待たせるための1つ
    以上の機械命令とを生成することを特徴とする請求項1
    記載のコンパイラ。
  4. 【請求項4】 前記機械命令生成手段は、前記第2の機
    械命令および前記第3の機械命令を、前記第1の機械命
    令に先行して配置することを特徴とする請求項1から3
    のいずれか記載のコンパイラ。
  5. 【請求項5】 前記機械命令生成手段は、前記第2の機
    械命令を前記第1の機械命令に先行して配置した場合、
    前記第3の機械命令を前記第1の機械命令に後続して配
    置することを特徴とする請求項4記載のコンパイラ。
  6. 【請求項6】 前記機械命令生成手段は、前記第2の機
    械命令を前記第1の機械命令に先行して配置する場合
    に、配置しようとする前記第2の機械命令よりさらに先
    行する位置にある前記第3の機械命令を遡って検索し、
    検索された前記第3の機械命令の位置に前記第3の機械
    命令に代えて前記第2の機械命令を配置することを特徴
    とする請求項5記載のコンパイラ。
  7. 【請求項7】 前記機械命令生成手段は、前記第2の機
    械命令および前記第3の機械命令を、前記第1の機械命
    令に含ませて生成することを特徴とする請求項1から3
    のいずれか記載のコンパイラ。
  8. 【請求項8】 複数のステージからなるパイプライン処
    理を行うプロセッサであって、 複数の命令を格納する記憶装置から命令を読出す命令読
    出し手段と、 前記命令読出し手段により読出された命令を解読する解
    読手段と、 前記命令解読手段における解読結果に従って命令を実行
    する実行手段と、 前記プロセッサが第1の状態にあるか第2の状態にある
    かを判定する判定手段と、 前記解読手段が、命令の解読によって前記パイプライン
    のいずれかのステージが伸長することを検出すると、 前記判定手段により前記第1の状態にあることが判定さ
    れる場合は、前記パイプラインの伸長するステージ以外
    のステージをインタロックさせ、 前記判定手段により前記第2の状態にあることが判定さ
    れる場合は、インタロックさせないように前記パイプラ
    インを制御するパイプライン制御手段とを備えることを
    特徴とするプロセッサ。
  9. 【請求項9】 前記判定手段は、前記解読手段または前
    記実行手段によって書き換えられる制御レジスタを備
    え、該制御レジスタの値によって前記第1の状態と前記
    第2の状態とを判定することを特徴とする請求項8記載
    のプロセッサ。
  10. 【請求項10】 前記判定手段は、前記解読手段により
    前記パイプラインのいずれかのステージを伸長させる命
    令が解読されたときに、前記解読手段における該命令の
    解読結果に基づいて前記第1の状態と前記第2の状態と
    を判定することを特徴とする請求項8記載のプロセッ
    サ。
  11. 【請求項11】 前記命令は、並列実行させるオペレー
    ションを指定する複数のオペレーションフィールドを含
    むVLIW方式の命令であることを特徴とする請求項8
    から10のいずれか記載のプロセッサ。
  12. 【請求項12】 前記実行手段は、いずれも前記パイプ
    ラインにおける実行ステージで作用し、前記複数のオペ
    レーションフィールドに対応する複数の部分実行手段か
    らなり、 前記パイプライン制御手段は、 前記解読手段により前記実行ステージが伸長することが
    検出されかつ前記判定手段により前記第2の状態にある
    ことが判定される場合は、伸長している前記部分実行手
    段と少なくとも1つの伸長していない前記部分実行手段
    とを並列に動作させることによって前記パイプラインの
    インタロックを回避するように制御することを特徴とす
    る請求項11記載のプロセッサ。
  13. 【請求項13】 前記パイプライン制御手段は、前記し
    た少なくとも1つの伸長していない前記部分実行手段に
    対応するオペレーションフィールドと異なるオペレーシ
    ョンフィールドを含む複数のオペレーションフィールド
    を検索して、該部分実行手段を動作させるオペレーショ
    ンを決定することを特徴とする請求項12記載のプロセ
    ッサ。
  14. 【請求項14】 並列実行させるオペレーションを指定
    する複数のオペレーションフィールドを含むVLIW方
    式の機械命令を実行するプロセッサを対象とするコンパ
    イラであって、 並列実行させる有益なオペレーションが指定できない第
    1のオペレーションフィールドがある場合に、無動作の
    オペレーションを指定する代わりに前記プロセッサを制
    御するオペレーションを前記第1のオペレーションフィ
    ールドに指定する機械命令を生成する機械命令生成手段
    を備えることを特徴とするコンパイラ。
  15. 【請求項15】 前記プロセッサは、パイプライン処理
    を行うプロセッサであり、前記コンパイラはさらに、 入力された高級言語プログラム中に前記パイプラインを
    インタロックさせ得るコードを検出するインタロックコ
    ード検出手段と、 前記コードが検出された場合に、該コードに対応する第
    1のオペレーションと依存関係のない他のオペレーショ
    ンを前記第1のオペレーションを含む第1の機械命令に
    後続して配置することができるか否かを判定する依存回
    避検出手段とを備え、前記機械命令生成手段は前記第1
    の機械命令を生成するとともに、 前記依存回避検出手段が依存関係のないオペレーション
    を配置することができないと判定した場合には、 前記第1の機械命令の実行の終了を待って該機械命令に
    後続する機械命令が実行されるよう指示する第2のオペ
    レーションを生成し、 前記依存回避検出手段が依存関係のないオペレーション
    を配置することができると判定した場合には、 前記第1のオペレーションの実行の終了を待たずに前記
    第1の機械命令に後続する機械命令が実行されるよう指
    示する第3のオペレーションを生成し、 前記第2および第3のオペレーションを前記第1のオペ
    レーションフィールドにする指定することを特徴とする
    請求項14記載のコンパイラ。
  16. 【請求項16】 前記機械命令生成手段は、前記第2の
    オペレーションを含む第2の機械命令および第3のオペ
    レーションを含む第3の機械命令を、前記第1の機械命
    令に先行して配置することを特徴とする請求項15記載
    のコンパイラ。
  17. 【請求項17】 前記機械命令生成手段は、前記第2の
    機械命令を前記第1の機械命令に先行して配置した場
    合、前記第3の機械命令を前記第1の機械命令に後続し
    て配置することを特徴とする請求項16記載のコンパイ
    ラ。
  18. 【請求項18】 前記機械命令生成手段は、前記第2の
    機械命令を前記第1の機械命令に先行して配置する場合
    に、配置しようとする前記第2の機械命令よりさらに先
    行する位置にある前記第3の機械命令を遡って検索し、
    検索された前記第3の機械命令の前記第3のオペレーシ
    ョンに代えて前記第2のオペレーションを指定すること
    を特徴とする請求項17記載のコンパイラ。
  19. 【請求項19】 前記機械命令生成手段は、前記第2の
    オペレーションおよび前記第3のオペレーションを、前
    記第1の機械命令に含ませて生成することを特徴とする
    請求項15記載のコンパイラ。
  20. 【請求項20】 前記機械命令生成手段は前記依存回避
    検出手段が依存関係のないオペレーションを配置するこ
    とができると判定した場合には、 前記第1の機械命令に後続する機械命令の、前記第1の
    オペレーションを指定するオペレーションフィールドと
    異なるオペレーションフィールドに、前記第1のオペレ
    ーションの実行の終了を待たずに実行されるオペレーシ
    ョンを指定することを特徴とする請求項15記載のコン
    パイラ。
  21. 【請求項21】 パイプライン処理を行うプロセッサに
    よって実行される機械命令プログラムを記録した記録媒
    体であって、 前記機械命令プログラムは、 前記パイプラインをインタロックさせ得る第1の機械命
    令と、 前記第1の機械命令の実行の終了を待って該機械命令に
    後続する機械命令が実行されるよう指示する第2の機械
    命令と、 前記第1の機械命令の実行の終了を待たずに該機械命令
    に後続する機械命令が実行されるよう指示する第3の機
    械命令とをを含むことを特徴とする記録媒体。
JP23435897A 1997-08-29 1997-08-29 プロセッサ Expired - Fee Related JP3419268B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23435897A JP3419268B2 (ja) 1997-08-29 1997-08-29 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23435897A JP3419268B2 (ja) 1997-08-29 1997-08-29 プロセッサ

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2003045641A Division JP2003263327A (ja) 2003-02-24 2003-02-24 コンパイラ、プロセッサおよび記録媒体
JP2003045643A Division JP3603895B2 (ja) 2003-02-24 2003-02-24 コンパイラ、および命令生成方法

Publications (2)

Publication Number Publication Date
JPH1173327A true JPH1173327A (ja) 1999-03-16
JP3419268B2 JP3419268B2 (ja) 2003-06-23

Family

ID=16969761

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23435897A Expired - Fee Related JP3419268B2 (ja) 1997-08-29 1997-08-29 プロセッサ

Country Status (1)

Country Link
JP (1) JP3419268B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3690639A1 (en) 2019-02-01 2020-08-05 Fujitsu Limited Information processing apparatus, program, and information processing method

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3690639A1 (en) 2019-02-01 2020-08-05 Fujitsu Limited Information processing apparatus, program, and information processing method
JP2020126303A (ja) * 2019-02-01 2020-08-20 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
US11163570B2 (en) 2019-02-01 2021-11-02 Fujitsu Limited Information processing apparatus, non-transitory computer-readable medium, and information processing method

Also Published As

Publication number Publication date
JP3419268B2 (ja) 2003-06-23

Similar Documents

Publication Publication Date Title
US7761692B2 (en) Processor, compiler and compilation method
JP3442225B2 (ja) 演算処理装置
US5333280A (en) Parallel pipelined instruction processing system for very long instruction word
US5710902A (en) Instruction dependency chain indentifier
JP2002333978A (ja) Vliw型プロセッサ
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
JP3449186B2 (ja) パイプラインバイパス機能を有するデータ処理装置
JPH087681B2 (ja) スカラ命令並列実行可能性を判定し指示する方法及び並列実行可能な隣接するスカラ命令を識別する方法
JP4412905B2 (ja) 低電力動作制御装置、およびプログラム最適化装置
US20060015855A1 (en) Systems and methods for replacing NOP instructions in a first program with instructions of a second program
RU2450329C2 (ru) Эффективный механизм сохранения адреса возврата из прерывания
JPH1097423A (ja) ループ処理の並列実行制御に適したレジスタ構成を有するプロセッサ
JPH1185513A (ja) プロセッサ
JP2874351B2 (ja) 並列パイプライン命令処理装置
JP3603895B2 (ja) コンパイラ、および命令生成方法
JPH1173327A (ja) コンパイラ、プロセッサおよび記録媒体
JP2002251282A (ja) プロセッサにおけるループの処理
JP3670646B2 (ja) レジスタ転送オペレーション
JP3553845B2 (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
JPH11242599A (ja) コンピュータプログラム製品
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
JP2003263327A (ja) コンパイラ、プロセッサおよび記録媒体
JP2553728B2 (ja) 演算装置
JP3014682B2 (ja) プログラム制御方法及び装置
JP4006887B2 (ja) コンパイラ、プロセッサおよび記録媒体

Legal Events

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

Free format text: PAYMENT UNTIL: 20080418

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090418

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20100418

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20110418

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20120418

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees