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

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

Info

Publication number
JP3692793B2
JP3692793B2 JP25075498A JP25075498A JP3692793B2 JP 3692793 B2 JP3692793 B2 JP 3692793B2 JP 25075498 A JP25075498 A JP 25075498A JP 25075498 A JP25075498 A JP 25075498A JP 3692793 B2 JP3692793 B2 JP 3692793B2
Authority
JP
Japan
Prior art keywords
instruction
slot
buffer
latch
nop
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
JP25075498A
Other languages
English (en)
Other versions
JP2000081982A (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 JP25075498A priority Critical patent/JP3692793B2/ja
Publication of JP2000081982A publication Critical patent/JP2000081982A/ja
Application granted granted Critical
Publication of JP3692793B2 publication Critical patent/JP3692793B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明は、コンパイラとプロセッサと記憶媒体とに関し、特に単一命令方式またはVLIW(Very Long Instruction Word)方式のプロセッサの実行コード効率を向上させる技術に関するものを含む。
【0002】
【従来の技術】
近年の電子技術の発展により、高性能なプロセッサが普及し、あらゆる分野で用いられている。そのようなプロセッサでは命令の並列処理により高い性能を達成している。VLIWと呼ばれるアーキテクチャも命令の並列処理の1つの形態であり、VLIWアーキテクチャを採るプロセッサ(以下、「VLIWプロセッサ」という。)は、内部に複数の演算器を備え、1つの命令に置かれたスロットと呼ばれる複数のフィールドに指定されたオペレーションを同時並列に実行する。このようなVLIWプロセッサの機械命令プログラムは、コンパイラによって高級言語で記述されたプログラムにおけるオペレーションレベルでの並列性が検出されスケジューリングされた後に生成されたものである。機械命令プログラムは実行コードとも呼ばれる。
【0003】
(第1の従来技術)
図21は、第1の従来技術におけるプロセッサの構成図である。
【0004】
第1の従来技術におけるプロセッサは2つのオペレーションを並列実行するもので、図5に示すような第1と第2の2つのスロットからなる命令列で構成されるプログラムがROM1に格納され、それぞれのスロットに書かれたオペレーションが第1命令解読器4と第2命令解読器5とで解読された後、第1演算器13と第2演算器14とで実行される。
【0005】
(第2の従来技術)
図22は、第2の従来技術におけるプロセッサの構成図である。
【0006】
第2の従来技術におけるプロセッサは3つのオペレーションを並列実行するものだが、基本的な考え方は第1の従来技術におけるプロセッサと同一であり、図14に示すような第1から第3の3つのスロットからなる命令列で構成されるプログラムがROM41に格納され、それぞれのスロットに書かれたオペレーションが第1命令解読器45から第3命令解読器47で解読された後、第1演算器58から第3演算器60で実行される。つまり、1つの命令を構成するスロットの数が増えたに過ぎない。
【0007】
【発明が解決しようとする課題】
しかしながら、上記の従来技術ではいずれも、命令中に置かれたノーオペレーションコード(nopコード)によってプログラムサイズが増大する問題がある。なお、プログラムサイズの増大はコード効率の低下とも表現される。VLIWプロセッサの命令の各スロットにはプロセッサが備える複数の演算器に対応したオペレーションが指定されるが、オペレーションの依存関係等により、常に並列実行可能なスロットの数だけのオペレーションがスケジューリングできるとは限らないからである。有効なオペレーションが置けない場合、コンパイラはそのスロットにnopコードを生成する。
【0008】
上記の第1の従来技術では、例えば図5に示すように、命令2ではBとCの2つの有効なオペレーションを指定することができるが、命令1では第2スロットに有効なオペレーションを指定することができずにnopとなっている。また上記の第2の従来技術では、例えば図14に示すように、命令1では第2と第3スロットに、命令2では第3スロットに有効なオペレーションを指定することができずにnopとなっている。このように一般にVLIWプロセッサは、命令の並列度が増すほど挿入されるnopコードの数が増加し、コード効率がさらに悪化するという問題がある。これは、コンパイラにおいて全スロットに有効なオペレーションがスケジューリングできる確率が並列度に逆比例することに起因する。
【0009】
そこで、本発明はかかる点に鑑みてなされたものであり、命令中の無駄領域を低減するコンパイラとプロセッサとを提供することを第1の目的とする。
【0010】
また、本発明の第2の目的は、VLIWプロセッサにおける命令の並列度の向上に伴うnopコードの増大を軽減するコンパイラとプロセッサとを提供することである。
【0011】
【課題を解決するための手段】
本願発明のコンパイラは、高級言語プログラムからプロセッサが同時に並列実行できる複数の操作を各スロットに配置した長語命令形式の命令を生成したのち、前記命令に含まれるnopを前記nopと同一のスロット中であるか否かに関係なく後に実行される有効な操作に置き換えるとともに、置き換えたことを示す情報と前記置き換えられた有効な操作のあったスロットの情報を前記置き換えられた有効な操作に対応する命令に付加することを特徴するものである。これにより、nopを有効なオペレーションに置き換えることができ、コードサイズを縮小化できる。
【0013】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
【0014】
(実施の形態1)
実施の形態1は、nopの代わりに有効なオペレーションが配置された命令を一旦蓄積しその後実行するもので、コードサイズの減少を図るものである。
【0015】
1.コンパイラ
図1は、コンパイラの構成を示すブロック図である。
【0016】
コンパイラ102は、ユーザが記述したC言語プログラム101を翻訳し、機械命令プログラム112を出力する。
【0017】
コンパイラ102は、C言語プログラム101を読込用バッファ104に読み込むファイル読込部103と、読込用バッファ104に読み込まれたC言語プログラムの構文や意味を解析して中間コードを生成し中間コード用バッファ106に書き込む構文解析部105と、中間コード用バッファ106に格納された中間コードを入力して命令の2並列実行を目的とする命令のスケジューリングを行い、未圧縮の機械命令プログラムを生成し暫定出力バッファ108に書き込む機械命令生成部107と、暫定出力バッファ108に格納された未圧縮の機械命令プログラムを圧縮して目的とする機械命令プログラムを生成し出力用バッファ110に書き込む機械命令圧縮部109と、出力用バッファ110に格納された機械命令プログラムをファイルに出力するファイル出力部111とから構成される。ここで「機械命令プログラムの圧縮」とは、機械命令プログラムの各命令に含まれるnopコードを有効なオペレーションに置き換えることを言う。この圧縮を行う機械命令圧縮部109を除く各要素は、公知の技術に基づいて構成すればよいのでここでは説明を省略する。機械命令圧縮部109は、以下に詳細に説明するが、次の原理に基づいて動作する。
【0018】
命令の順に未圧縮の機械命令プログラムを検索して、同順の第1スロットのnopコードと第2スロットのnopコードとのペアを抽出し、このnopコードペアの第1スロットおよび第2スロットを、該ペア以降に最初に現れる有効オペレーションのペアの第1スロットおよび第2スロットのオペレーションでそれぞれ置き換え、置き換えたことをマーキングするとともに、置き換えに使った有効オペレーションのペアを削除する。これにより、2つの有効なオペレーションを含む命令を、これよりも前に存在するnopの代わりに配置し、nopを削減するものである。
【0019】
図2から図4は、機械命令圧縮部109の処理フローを示したフローチャートである。
【0020】
機械命令圧縮部109の処理フローは、以下の動作例を用いて詳細に説明する。
【0021】
1.1 機械命令圧縮部109の動作例
図5は、未圧縮の機械命令プログラムの例示図であり、機械命令生成部107が上記した第1の従来技術にならって生成したものである。
【0022】
命令は第1と第2の2つのスロットで構成され、AからJの記号は有効なオペレーションが、nopはnopコードが生成されていることを示す。
【0023】
図6は、圧縮された機械命令プログラムの例示図であり、機械命令圧縮部109が図5の未圧縮の機械命令プログラムを以下の手順で圧縮したものである。
【0024】
命令は第1と第2の2つのスロットで構成され、各スロットは1ビットの蓄積ビットとオペレーション(OP)フィールドとからなる。AからJの記号は図5と同様、有効なオペレーションを示す。
【0025】
以下に、図5のプログラムを入力とした場合における機械命令圧縮部109の動作について図2から図6を用いて説明する。
【0026】
図2に示すように、先ず初期化を行う。初期化は、命令ポインタNを最初の命令、即ち図5の命令1に合わせること、命令先取カウンタmを1にすること、第1スロットnopカウンタC1および第2スロットnopカウンタC2を0にすること、第1スロットバッファカウンタB1を0にすること、第2スロットバッファカウンタB2を0にすることである(ステップS201)。ここで、N、m、C1、C2、B1、B2は機械命令圧縮部109の内部的に作られたパラメータである。
【0027】
次に、Nで示される命令、即ち図5の命令1の型を評価する。命令1は第1スロットが有効なオペレーションAで第2スロットがnopコードなので、「OP(1):nop(2)型」が該当し処理Aへ飛ぶ(ステップS202)。(1)、(2)は第1スロット、第2スロットを意味する。
【0028】
図3に示す処理Aでは、最初に第2スロットnopカウンタC2をインクリメントしC2=1と、第2スロットバッファカウンタB2をインクリメントしB2=1とする(ステップS301)。次いで機械命令圧縮部109の内部的に作られたパラメータC1Xに第1スロットnopカウンタC1の値を代入し、C1X=0となる(ステップS302)。次いで(N+m)で示される命令、即ち図5の命令2の型を評価する。命令2は第1、第2スロットがそれぞれ有効なオペレーションA、Bなので、「OP(1):OP(2)型」が該当しステップS312へ飛ぶ(ステップS303)。今、B2=1でB2≦2を満たしているが、ステップS307のC1X≧1を満たさず(C1=0)次にステップS305へ飛ぶ。ここで、C1X≧1を条件としているのは、OP(1):OP(2)をOP(1):NOP(2)に置き換えるというように、第2スロットのみを置き換えることにより新たに置き換え対象が生成されることを防止するためである。すなわち、この条件を付加することにより、OP(1):OP(2)は最終的にはNOP(1):NOP(2)に置き換えられ、削除されることになる。また、B2≦2を条件としているのは、後述する図7に示すプロセッサは第1、2スロットそれぞれについて2組のバッファを備えており、これを越える置き換えを防止するためである。ここでは(N+m)で示される命令、即ち図5の命令2は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを2にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0029】
次に(N+m)で示される命令、今度は図5の命令3の型を評価する。命令3は第1スロットが有効なオペレーションDで第2スロットがnopコードなので、「OP(1):nop(2)型」が該当しステップS305へ飛ぶ(ステップS303)。(N+m)で示される命令、即ち図5の命令3は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを3にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0030】
次に(N+m)で示される命令、今度は図5の命令4の型を評価する。命令4は第1スロットがnopコードで第2スロットが有効なオペレーションEなので、「nop(1):OP(2)型」が該当しステップS304へ飛ぶ(ステップS303)。ここでC1Xに1が足されてC1X=1になる(ステップS304)。(N+m)で示される命令、即ち図5の命令4は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを4にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0031】
次に(N+m)で示される命令、即ち図5の命令5の型を評価する。命令5は第1、第2スロットがそれぞれ有効なオペレーションF、Gなので、「OP(1):OP(2)型」が該当しステップS312へ飛ぶ(ステップS303)。今、B2=1でB2≦2を満たしており、かつステップS307のC1X≧1(C1X=1)を満たしてステップS308へ飛ぶ。ここでOP(2)は有効なままなのでステップS309へ飛び(ステップS308)、Nで示される命令、即ち図5の命令1の第1スロットの蓄積ビットを”0”にセットするとともに、第2スロットの蓄積ビットを”1”にセットしてOPフィールドをnopの代わりにオペレーションGで埋める。このように、OP(2)が有効であることを確認しているのは、OP(2)が存在していてもすでにnopの代わりに配置され、実質的には存在しない命令である場合があるからである。こうして図6の命令1が生成される。続いて(N+m)で示される命令、即ち図5の命令5のOP(2)を無効にする(ステップS309)。このときOP(1)はまだ有効なままなので処理Aを終了し、ステップS206へ飛ぶ(ステップS310)。なお、後述するが、OP(1)が無効であるとき(すでに置き換えられているとき)、ステップS311で命令を削除する。
【0032】
処理Aから戻って、Nで示される命令、即ち図5の命令1は最後の命令でないでのステップS207に移り(ステップS206)、命令ポインタNを次の命令、即ち図5の命令2に進め、命令先取カウンタmを1に戻し、ステップS202へ戻る(ステップS207)。
【0033】
引き続いてNで示される命令、即ち図5の命令2の型を評価する。命令2は上記の通り「OP(1):OP(2)型」が該当しステップS205に移る(ステップS202)。ここでNで示される命令、即ち図5の命令2の第1および第2スロットの蓄積ビットを”0”にセットする。こうして図6の命令2が生成される。続いてNで示される命令、即ち図5の命令2は最後の命令でないでのステップS207に移り(ステップS206)、命令ポインタNを次の命令、即ち図5の命令3に進め、命令先取カウンタmを1に戻し、ステップS202へ戻る(ステップS207)。
【0034】
引き続いてNで示される命令、即ち図5の命令3の型を評価する。命令3は上記の通り「OP(1):nop(2)型」が該当し処理Aへ飛ぶ(ステップS202)。
【0035】
処理Aでは、最初に第2スロットnopカウンタC2をインクリメントしC2=2と、第2スロットバッファカウンタB2をインクリメントしB2=2とする(ステップS301)。次いでパラメータC1Xに第1スロットnopカウンタC1の値を代入し、C1X=0となる(ステップS302)。次いで(N+m)で示される命令、即ち図5の命令4の型を評価する。命令4は上記の通り「nop(1):OP(2)型」が該当しステップS304へ飛ぶ(ステップS303)。ここでC1Xに1が足されてC1X=1になる(ステップS304)。(N+m)で示される命令、即ち図5の命令4は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを2にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0036】
次に(N+m)で示される命令、即ち図5の命令5の型を評価する。命令5は上記の通り「OP(1):OP(2)型」が該当しステップS307へ飛ぶ(ステップS303)。今、C1X=1なのでC1X≧1を満たしてステップS308へ飛ぶ。ここでOP(2)は以前に無効にされているのでステップS305へ飛ぶ(ステップS308)。(N+m)で示される命令、即ち図5の命令5は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを3にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0037】
次に(N+m)で示される命令、即ち図5の命令6の型を評価する。命令6は第1スロットがnopコードで第2スロットが有効なオペレーションHなので、「nop(1):OP(2)型」が該当しステップS304へ飛ぶ(ステップS303)。ここでC1Xに1が足されてC1X=2になる(ステップS304)。(N+m)で示される命令、即ち図5の命令6は最後の命令でないのでステップS306へ移り(ステップS305)、命令先取カウンタmを4にして次の命令に進め、ステップS303に戻る(ステップS306)。
【0038】
次に(N+m)で示される命令、即ち図5の命令7の型を評価する。命令7は第1、第2スロットがそれぞれ有効なオペレーションI、Jなので、「OP(1):OP(2)型」が該当しステップS312へ飛ぶ(ステップS303)。今、B2=2でB2≦2を満たしており、かつステップS307のC1X≧1(C1X=2)を満たしてステップS308へ飛ぶ。ここでOP(2)は有効なままなのでステップS309へ飛び(ステップS308)、Nで示される命令、即ち図5の命令3の第1スロットの蓄積ビットを”0”にセットするとともに、第2スロットの蓄積ビットを”1”にセットしてOPフィールドをnopの代わりにオペレーションJで埋める。こうして図6の命令3が生成される。続いて(N+m)で示される命令、即ち図5の命令7のOP(2)を無効にする(ステップS309)。このときOP(1)はまだ有効なままなので処理Aを終了し、ステップS206へ飛ぶ(ステップS310)。
【0039】
処理Aから戻って、Nで示される命令、即ち図5の命令3は最後の命令でないでのステップS207に移り(ステップS206)、命令ポインタNを次の命令、即ち図5の命令4に進め、命令先取カウンタmを1に戻し、ステップS202へ戻る(ステップS207)。
【0040】
引き続いてNで示される命令、即ち図5の命令4の型を評価する。命令4は上記の通り「nop(1):OP(2)型」が該当し処理Bへ飛ぶ(ステップS202)。
【0041】
処理Bでは、最初に第1スロットnopカウンタC1をインクリメントしC1=1と、第1スロットバッファカウンタB1をインクリメントしB1=1とする(ステップS401)。次いで機械命令圧縮部109の内部的に作られたパラメータC2Xに第2スロットnopカウンタC2の値を代入し、C2X=2となる(ステップS402)。次いで(N+m)で示される命令、即ち図5の命令5の型を評価する。命令5は上記の通り「OP(1):OP(2)型」が該当しステップS412へ飛ぶ(ステップS403)。今、B1=1でB1≦2を満たしており、かつステップS407のC2X≧1(C2X=2)を満たしてステップS408へ飛ぶ。ここでOP(1)は有効なままなのでステップS409へ飛び(ステップS408)、Nで示される命令、即ち図5の命令4の第2スロットの蓄積ビットを”0”にセットするとともに、第1スロットの蓄積ビットを”1”にセットしてOPフィールドをnopの代わりにオペレーションFで埋める。こうして図6の命令4が生成される。続いて(N+m)で示される命令、即ち図5の命令5のOP(1)を無効にする(ステップS409)。次にOP(2)は以前に無効にされているのでステップS411へ飛ぶ(ステップS410)。ここで(N+m)で示される命令、即ち図5の命令5を削除し、第1スロットnopカウンタC1および第2スロットnopカウンタC2をデクリメントしC1=0、C2=1と、第1スロットバッファカウンタB1および第2スロットバッファカウンタB2をデクリメントしB1=0、B2=1となる(ステップS411)。これで処理Bを終了し、ステップS206へ飛ぶ。
【0042】
処理Bから戻って、Nで示される命令、即ち図5の命令4は最後の命令でないでのステップS207に移り(ステップS206)、命令ポインタNを次の命令、即ち図5の命令6(命令5は削除された)に進め、命令先取カウンタmを1に戻し、ステップS202へ戻る(ステップS207)。
【0043】
引き続いてNで示される命令、即ち図5の命令6の型を評価する。命令6は上記の通り「nop(1):OP(2)型」が該当し処理Bへ飛ぶ(ステップS202)。
【0044】
処理Bでは、最初に第1スロットnopカウンタC1をインクリメントしC1=1と、第1スロットバッファカウンタB1をインクリメントしB1=1になる(ステップS401)。次いでパラメータC2Xに第2スロットnopカウンタC2の値を代入し、C2X=1となる(ステップS402)。次いで(N+m)で示される命令、即ち図5の命令7の型を評価する。命令7は上記の通り「OP(1):OP(2)型」が該当しステップS412へ飛ぶ(ステップS403)。今、B1=1でB1≦2を満たしており、かつステップS407のC2X≧1(C2X=1)を満たしてステップS408へ飛ぶ。ここでOP(1)は有効なままなのでステップS409へ飛び(ステップS408)、Nで示される命令、即ち図5の命令6の第2スロットの蓄積ビットを”0”にセットするとともに、第1スロットの蓄積ビットを”1”にセットしてOPフィールドをnopの代わりにオペレーションIで埋める。こうして図6の命令5が生成される。続いて(N+m)で示される命令、即ち図5の命令7のOP(1)を無効にする(ステップS409)。次にOP(2)は以前に無効にされているのでステップS411へ飛ぶ(ステップS410)。ここで(N+m)で示される命令、即ち図5の命令7を削除し、第1スロットnopカウンタC1および第2スロットnopカウンタC2をデクリメントしC1=0、C2=0と、第1スロットバッファカウンタB1、第2スロットバッファカウンタB2をデクリメントしB1=0、B2=0となる(ステップS411)。これで処理Bを終了し、ステップS206へ飛ぶ。
【0045】
処理Bから戻って、Nで示される命令、即ち図5の命令6は最後の命令なので(命令7は削除された)全ての処理を終了する(ステップS206)。
【0046】
以上のように、図5の未圧縮の機械命令プログラムは図6に示す圧縮された機械命令プログラムに変換される。なお、上記動作例で図3および図4における未通過のステップがあるが、図3および図4は2つのスロットについて相補的であるので説明を省略する。
【0047】
2.プロセッサ
図7は、プロセッサの概略構成図である。
【0048】
このプロセッサは、命令フェッチステージ(以下、IFステージ)、解読およびレジスタ読出しステージ(以下、DECステージ)、実行ステージ(以下、EXステージ)の3つのステージからなる3段パイプライン構造を成している。
【0049】
図7において、1は機械語プログラムを格納するROM、2と3は機械語命令(以下、命令と略す)の第1スロットと第2スロットの内容を格納するそれぞれI1ラッチとI2ラッチ、4と5はそれぞれI1ラッチ2とI2ラッチ3に保持された命令の第1スロットと第2スロットの内容を解読しプロセッサ各部を制御する第1命令解読器と第2命令解読器、6はオペランド格納するレジスタファイル、7と8はそれぞれI1ラッチ2とI2ラッチ3の内容の一部とレジスタファイル6の出力との2入力から1つを選択するD1セレクタとD2セレクタ、9と10はそれぞれD1セレクタ7とD2セレクタ8の出力を格納するD11ラッチとD12ラッチ、11と12はレジスタファイル6の出力を格納するD21ラッチとD22ラッチ、13はD11ラッチ9およびD21ラッチ11の内容を用いて算術論理演算を行う第1演算器、14はD12ラッチ10およびD22ラッチ12の内容を用いて算術論理演算を行う第2演算器で、第1演算器13と第2演算器14の出力はともにレジスタファイル6に接続される。15と16はそれぞれI1ラッチ2とI2ラッチ3に保持された命令の第1スロットと第2スロットの内容を保持するIB11バッファとIB12バッファで、両者を合わせてIB1バッファと記す。17と18はそれぞれI1ラッチ2とI2ラッチ3に保持された命令の第1スロットと第2スロットの内容を保持するIB21バッファとIB22バッファで、両者を合わせてIB2バッファと記す。IB1バッファおよびIB2バッファへは各スロットの蓄積ビットが”1”の時に内容が取込まれる。23、24はIB1バッファまたはIB2バッファをいずれかを選択して出力するセレクタ、19はROM1から読出された命令の第1スロットの内容またはセレクタ23のいずれかを選択してI1ラッチ2に出力するI1セレクタ、20はROM1から読出された命令の第2スロットの内容またはセレクタ24のいずれかを選択してI2ラッチ3に出力するI2セレクタ、21、22はI1ラッチ2、I2ラッチ3に格納されたデータの蓄積ビットが”1”のときnop(No Operation)を出力するnop生成器、25、26は蓄積ビットが”1”となったときは書き込み信号を”0”、”1”と反転して出力し、蓄積ビットが”0”のときは”0”を出力する書き込み信号生成器、27、28は命令の蓄積完了を検出するAND回路、29は蓄積した命令をデコード・実行する場合に命令フェッチを止めるための信号等を生成するOR回路、30、31はクロックドバッファである。なお、nop生成器21、22はI1ラッチ2、I2ラッチ3の出力のそれぞれのビットと、蓄積ビットを反転したものとの論理積を演算するAND回路で構成されており、蓄積ビットが”1”のときは、nopを意味する(00・・・0)2を出力する。また、書き込み信号生成器25、26はT形フリップフロップとAND回路からなり、正転出力とT型フリップフロップのトリガ入力(I1ラッチ2、I2ラッチ3の蓄積ビット)との論理積をとるAND回路の出力をIB11バッファ15、IB12バッファ16への書き込み信号とし、反転出力とT型フリップフロップのトリガ入力との論理積をとるAND回路の出力をIB21バッファ17、IB22バッファ18への書き込み信号としている。
【0050】
レジスタファイル6は、レジスタR0からR7の汎用レジスタを含み、読出し4ポート、書込み2ポートを有する。即ち、同時に4つのレジスタ(重複は可)の読出しと2つのレジスタ(重複は不可)の書込みを許す。D1セレクタ7およびD2セレクタ8はそれぞれ第1命令解読器4および第2命令解読器5の指示により、命令に即値などの定数値を伴う場合はこれを選択する。
【0051】
このプロセッサはいわゆるVLIW(Very Long Instruction Word)形式の命令に基づいており、1つの命令で2つの演算などの操作が定義される。第1スロットのオペレーションは、I1ラッチ2に格納され第1命令解読器4で解読され第1演算器13で実行される。また第2スロットのオペレーションは、I2ラッチ3に格納され第2命令解読器5で解読され第2演算器14で実行される。このようにして同時に2つの操作を実行するためVLIW形式のプロセッサは効率が高い。
【0052】
2.1 プロセッサの動作例
以下に、図6の機械命令プログラムがROM1に格納された場合における上記構成をもつプロセッサの動作について図8を用いて説明する。
【0053】
図8は、図6の機械命令プログラムがROM1に格納された場合におけるプロセッサの動作タイミング図である。同図は、プロセッサの動作をパイプラインのIFステージでROM1から読出される命令、DECステージで解読される命令、EXステージで実行される命令と、IB1バッファおよびIB2バッファが保持する命令をマシンサイクルと呼ばれるタイミング毎に示している。以下、時間が経過する順にタイミング毎にその動作を説明する。なお図中、「:」はスロットの区切りを表し、左が第1スロット、右が第2スロットを意味し、「−」は有効なオペレーションが保持されていないもしくは作用していないことを表す。
【0054】
また、初期状態として、IB11バッファ15、IB12バッファ16、IB21バッファ17、IB22バッファ18はリセットされているものとする。
【0055】
(タイミングt1)
・IFステージ:命令1
命令1がROM1から読出され、第1スロット(蓄積ビットが”0”でオペレーションA)がI1ラッチ2に、第2スロット(蓄積ビットが”1”でオペレーションG)がI2ラッチ3に格納される。すなわち、IBバッファにはまだオペレーションが蓄積されていない(蓄積ビットが”1”でない)ので、I1SEL19、I2SEL20はいずれも、ROM1からの出力を選択し出力する。
【0056】
(タイミングt2)
・DECステージ:命令1
蓄積ビットが”1”であるI2ラッチ3の内容(蓄積ビットが”1”でオペレーションG)がIB12バッファ16に取込まれる。具体的には、蓄積ビットが”1”であるため、書き込み信号生成器26によりIB12バッファ16の書き込み信号がイネーブルとなり、I2ラッチ3の内容がIB12バッファ16に蓄積されることとなる。また、I2ラッチ3に格納された命令1の第2スロットの蓄積ビットが”1”であるため、nop生成器22はnop(00・・・0)2を出力し、第2命令解読器5はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
【0057】
一方、I1ラッチ2に格納された命令1の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションAであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。
・IFステージ:命令2
命令2がROM1から読出され、第1スロット(蓄積ビットが”0”でオペレーションB)がI1ラッチ2に、第2スロット(蓄積ビットが”0”でオペレーションC)がI2ラッチ3に格納される。
【0058】
(タイミングt3)
・EXステージ:命令1
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションAの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、オペレーションGは蓄積ビットが”1”でnop生成器22によりnopに無効化されているため、第2演算器14は作用しない。
・DECステージ:命令2
I1ラッチ2に格納された命令2の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションBであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。一方、I2ラッチ3に格納された命令2の第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションCであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。このとき、オペレーションB,Cいずれの蓄積ビットも”0”であるため、いずれのIBバッファの書き込み信号もイネーブルとならず、書き込みは行われない。
・IFステージ:命令3
命令3がROM1から読出され、第1スロット(蓄積ビットが”0”でオペレーションD)がI1ラッチ2に、第2スロット(蓄積ビットが”1”でオペレーションJ)がI2ラッチ3に格納される。
【0059】
(タイミングt4)
・EXステージ:命令2
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションBの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションCの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
・DECステージ:命令3
蓄積ビットが”1”であるI2ラッチ3の内容(蓄積ビットが”1”でオペレーションJ)がIB22バッファ18に取込まれる。具体的には、蓄積ビットが”1”であるため、IB12バッファ16またはIB22バッファ18にデータの書き込みをしようとするが、すでにIB12バッファ16にはデータを書き込んだので、書き込み信号生成器26によりIB22バッファ18の書き込み信号がイネーブルになる。また、I2ラッチ3に格納された命令3の第2スロットの蓄積ビットが”1”であるため、nop生成器22はnopを出力し、第2命令解読器5はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
【0060】
一方、I1ラッチ2に格納された命令3の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションDであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。
・IFステージ:命令4
命令4がROM1から読出され、第1スロット(蓄積ビットが”1”でオペレーションF)がI1ラッチ2に、第2スロット(蓄積ビットが”0”でオペレーションE)がI2ラッチ3に格納される。
【0061】
(タイミングt5)
・EXステージ:命令3
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションDの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、オペレーションJは蓄積ビットが”1”でnop生成器22によりnopに無効化されているため第2演算器14は作用しない。
・DECステージ:命令4
蓄積ビットが”1”であるI1ラッチ2の内容(蓄積ビットが”1”でオペレーションF)がIB11バッファ15に取込まれる。具体的には、蓄積ビットが”1”であるため、書き込み信号生成器25によりIB11バッファ15の書き込み信号がイネーブルとなり、I1ラッチ2の内容がIB11バッファ15に蓄積されることとなる。また、I2ラッチ2に格納された命令4の第1スロットの蓄積ビットが”1”であるため、nop生成器21はnopを出力し、第1命令解読器4はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
【0062】
一方、I2ラッチ3に格納された命令4の第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションEであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。
・IFステージ:IB1バッファ蓄積命令
IB11バッファ15とIB12バッファ16との蓄積ビットが共に”1”であるため、AND回路27は蓄積バッファにデータが蓄積されたとして”1”を出力し、さらにOR回路29が命令フェッチを中断すべく”1”を出力する。これにより、命令フェッチは中断される。これとともに、IB11バッファ15の蓄積ビットが”1”であるので、セレクタ23、24はIB1バッファを選択・出力する。さらにOR回路29の出力により、I1セレクタ19、I2セレクタ20はそれぞれIB11バッファ15、IB21バッファ16を選択し、蓄積された命令はI1ラッチ2、I2ラッチ3に格納される。これにより、IB11バッファ15およびIB21バッファ16に格納された命令を使用したことになるので、クロックドバッファ30によりタイミングを調整して、IB11バッファ15およびIB21バッファ21の内容をリセットし、蓄積ビットを”0”とする。なお、ここではバッファそのものをリセットしているが、蓄積ビットのみを”0”としても良い。なお、図面では省略しているが、I1セレクタ19およびI2セレクタ20は蓄積された命令を選択するときは蓄積ビットを”0”にして、I1ラッチ2、I2ラッチ3に出力する。nop生成器21、22が蓄積された命令をnopに無効化する事を防止するためである。また、セレクタ23、24の切り換え信号をIB11バッファ15の蓄積ビットのみとしているのは、蓄積された命令が実行されるときは常にIB11バッファ15およびIB12バッファ16(またはIB21バッファ17およびIB22バッファ18)の蓄積ビットが”1”となっているため、IB12バッファ16の蓄積ビットまでを見る必要はなく、またIB1バッファに蓄積された命令を実行するということはIB2バッファに蓄積された命令はまだ実行しない状態を意味するからである。このため、IB11バッファ15の蓄積ビットに限らず、いずれかの蓄積ビットの値により切り換え信号とできる。
【0063】
(タイミングt6)
・EXステージ:命令4
オペレーションFは蓄積ビットが”1”でnop生成器21によりnopに無効化されているため、第1演算器13は作用しない。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションEの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
・DECステージ:IB1バッファ蓄積命令
I1ラッチ2に格納された第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションFであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。一方、I2ラッチ3に格納された第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションGであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。
・IFステージ:命令5
命令5がROM1から読出され、第1スロット(蓄積ビットが”1”でオペレーションI)がI1ラッチ2に、第2スロット(蓄積ビットが”0”でオペレーションH)がI2ラッチ3に格納される。
【0064】
(タイミングt7)
・EXステージ:IB1バッファ蓄積命令
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションFの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションGの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
・DECステージ:命令5
蓄積ビットが”1”であるI1ラッチ2の内容(蓄積ビットが”1”でオペレーションI)がIB21バッファ17に取込まれる。具体的には、蓄積ビットが”1”であるため、IB11バッファ15またはIB21バッファ17にデータの書き込みをしようとするが、すでにIB11バッファ15にはデータを書き込んだので、書き込み信号生成器25によりIB21バッファ17の書き込み信号がイネーブルとなる。また、I1ラッチ2に格納された命令5の第1スロットの蓄積ビットが”1”であるため、nop生成器21はnopを出力し、第1命令解読器4はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
【0065】
一方、I2ラッチ3に格納された命令5の第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションHであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。
・IFステージ:IB2バッファ蓄積命令
IB21バッファ17とIB22バッファ18との蓄積フラグが共に”1”であるため、AND回路27は蓄積バッファにデータが蓄積されたとして”1”を出力し、さらにOR回路29が命令フェッチを中断すべく”1”を出力する。これにより、命令フェッチは中断される。これとともに、IB11バッファ15の蓄積ビットが”0”である(IB2バッファに蓄積された命令が存在する可能性がある)ので、セレクタ23、24はIB2バッファを選択・出力する。さらに、OR回路29の出力によりI1セレクタ19、I2セレクタ20はそれぞれIB21バッファ17、IB22バッファ18を選択し、蓄積された命令はI1ラッチ2、I2ラッチ3に格納される。これにより、IB21バッファ17およびIB22バッファ18に格納された命令を使用したことになるので、クロックドバッファ31によりタイミングを調整して、IB21バッファ17およびIB22バッファ18の内容をリセットし、蓄積フラグを”0”とする。
【0066】
(タイミングt8)
・EXステージ:命令5
オペレーションIは蓄積ビットが”1”でnop生成器21によりnopに無効化されているため、第1演算器13は作用しない。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションHの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
・DECステージ:IB2バッファ蓄積命令
I1ラッチ2に格納された第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションIであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。一方、I2ラッチ3に格納された第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションJであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。
【0067】
(タイミングt9)
・EXステージ:IB2バッファ蓄積命令
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションIの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションJの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
【0068】
3.記録媒体
本発明の記録媒体の実施の形態として、図6の機械命令プログラム112を記録した磁気ディスク(フロッピーディスクやハードディスクなど)、光ディスク(CD-ROMやPDなど)、光磁気ディスク、半導体メモリ(ROMやフラッシュメモリなど)がある。
【0069】
以上のように本実施の形態によれば、コンパイラの機械命令圧縮部109が、同順の第1スロットのnopコードと第2スロットのnopコードとのペアを抽出し、このnopコードペアの第1スロットおよび第2スロットを、該ペア以降に最初に現れる有効オペレーションのペアの第1スロットおよび第2スロットのオペレーションでそれぞれ置き換え、置き換えに使った有効オペレーションのペアを削除することにより命令中の無駄領域が低減され、プログラムサイズの削減を図ることができる。
【0070】
また本実施の形態のプロセッサによれば、散在する従来のnopコードの位置に埋められた有効オペレーションを蓄積するIB1バッファおよびIB2バッファを設け、IB1バッファまたはIB2バッファのいずれかに有効オペレーションが2つ揃った時点でこれを実行することにより、従来の処理性能を保つつ圧縮された機械命令プログラムの実行が可能である。
【0071】
さらに本実施の形態によれば、従来のnopコードの位置に該nopコードと同じスロットにある有効オペレーションを埋めるという考え方に基づくため、第1スロットと第2スロットとの間でオペレーションを相互に転送する必要がなくなりプロセッサの構成が簡単になるという効果を有する。具体的には、I1ラッチ2のオペレーションはIB11バッファ15またはIB21バッファ17にのみ蓄積し、それらに蓄積したオペレーションはI1ラッチ2にのみ戻せばよく、逆にI2ラッチ3のオペレーションはIB12バッファ16またはIB22バッファ18にのみ蓄積し、それらに蓄積したオペレーションはI2ラッチ3にのみ戻せばよいため、第1スロットと第2スロットとの間の転送路および転送制御手段を必要としない。
【0072】
なお、本実施形態のプロセッサでは、I1セレクタ19およびI2セレクタ20をそれぞれI1ラッチ2およびI2ラッチ3の入力側に設けているが、それぞれI1ラッチ2およびI2ラッチ3の出力側に設け、第1命令解読器4および第命令2解読器5の入力を選択するようにしてもよい。このようにする際は、IB1バッファおよびIB2バッファへの入力をIFステージにおいてROM1から直接行うように変更しなければならないが、IB1バッファおよびIB2バッファへの取り込みやI1セレクタ19およびI2セレクタ20の選択については本実施形態と同様に蓄積ビットの値で制御すればよい。
【0073】
また、本実施形態のプロセッサでは、IB1バッファとIB2バッファとの2つの蓄積バッファを設けているが、いかなる数であってもよい。蓄積バッファの数が多くなるほどnopコードを有効オペレーションで埋める機会が増加し、プログラムサイズの一層の削減が図れる。このことは、例えば本実施形態のプロセッサにおけるIB2バッファがないものとすると、図5の命令3の第2スロットのnopコードは有効オペレーションで埋められないことから容易に伺い知れる。
【0074】
(実施の形態2)
実施の形態2は、実施の形態1から、nopコードのスロットの有効オペレーションでの埋め方の自由度を高めたものである。
【0075】
1.コンパイラ
コンパイラの構成は、機械命令圧縮部109の動作を除いて実施の形態1に記したものと同じである。機械命令圧縮部109は図10から図12に示すもので、次の原理に基づいて動作する。
【0076】
命令の順に未圧縮の機械命令プログラムを検索して、第1スロットと第2スロットのいずれかにかかわらず出現順序が連続する2つのnopコードを抽出し、これらのnopコードのスロットを、該2つのnopコードの以降に最初に現れる有効オペレーションのペアの第1スロットおよび第2スロットのオペレーションでそれぞれ置き換え、置き換えたことをマーキングするとともに、置き換えに使った有効オペレーションのペアを削除し、削除されたペアの直前の命令の第1スロットと第2スロットのいずれかに削除したことをマーキングする。すなわち、実施の形態1のコンパイラでは各スロット毎にnopを削除していたが、本実施の形態におけるコンパイラはスロットを意識せず、nopを出現順に有効なオペレーションに置き換えるものである。このため、いずれかのスロットにnopが集中していた場合でも有効なオペレーションに置き換えることができる。
【0077】
1.1 機械命令圧縮部109の動作例
図9は、圧縮された機械命令プログラムの例示図であり、機械命令圧縮部109が図5の未圧縮の機械命令プログラムを上述の手順で圧縮したものである。圧縮された命令は第1と第2の2つのスロットで構成され、各スロットは蓄積ビットと位置ビットとオペレーション(OP)フィールドとからなる。AからJの記号は有効なオペレーションを示す。蓄積ビットと位置ビットは次のようにエンコードしている。
00、01 何もしない
10 IB1バッファに蓄積すべし
11 IB2バッファに蓄積すべし
具体的に説明すると、図5の命令5のオペレーションFとオペレーションGとを命令1と命令3とのnopコードのスロットに埋め、命令7のオペレーションIとオペレーションJとを命令4と命令6とのnopコードのスロットに埋め、埋められた以上のスロットの蓄積ビットを01にセットし、命令5と命令7とを削除する。オペレーションFとオペレーションGとオペレーションIとオペレーションJとは、この順にIB1バッファの第1スロット、第2スロット、IB2バッファの第1スロット、第2スロットに蓄積されることを前提にしており、削除された命令5の直前の命令4の第2スロットの蓄積ビットには10を、削除された命令7の直前の命令6の第2スロットの蓄積ビットには11をセットする。その他のスロットの蓄積ビットは00である。このようにして生成された機械命令プログラムが図9に示すものである。なお図9の命令5は図5の命令6から生成したものである。
【0078】
図10と図2とを比べると、nopカウンタが1つである点(S501)、位置ビットをセットする点(S505)が異なる。nopカウンタを1つとしたのは、本実施の形態では、実施の形態1とは異なりスロットを意識する必要がないからである。ただし、このnopカウンタは図2のnopカウンタとは全く異なる用途に使用されるもので、位置ビットの値を決定するためにnopが出願する度に”0”、”1”を繰り返すものである。
【0079】
図11、12は図3、4と基本的に同じであるが、位置ビットの値をnopカウンタによって決定しているところが大きく異なる(S609,S709)。また、前述したnopカウントの用途のため、命令を削除したときはC=0とする点も異なる(S611,S711))。
【0080】
2.プロセッサ
図13は、プロセッサのIFステージ部分の概略構成図である。
【0081】
DECステージおよびEXステージの図示していない部分は図7と同じ構成であり、また実施の形態1と同一の構成要素には同一の符号を付している。図7と比べると、セレクタ32、33を有している点が異なる。すなわち、位置ビットの値により、I1ラッチ2に格納された命令であってもIB12バッファ16またはIB22バッファ18に、I2ラッチ3に格納された命令であってもIB11バッファ15またはIB21バッファ17に命令を蓄積することが可能となり、実施の形態1と比べてさらにnopを軽減することができる。他の動作は、実施の形態1と同じであるため説明は省略する。
【0082】
3.記録媒体
本発明の記録媒体の実施の形態として、図9の機械命令プログラムを記録した磁気ディスク(フロッピーディスクやハードディスクなど)、光ディスク(CD-ROMやPDなど)、光磁気ディスク、半導体メモリ(ROMやフラッシュメモリなど)がある。
【0083】
以上のように本実施の形態によれば、コンパイラの機械命令圧縮部109が、第1スロットと第2スロットのいずれかにかかわらず出現順序が連続する2つのnopコードを抽出し、このnopコードスロットを、該2つのnopコードの以降に最初に現れる有効オペレーションのペアの第1スロットおよび第2スロットのオペレーションでそれぞれ置き換え、置き換えに使った有効オペレーションのペアを削除することにより命令中の無駄領域が低減され、プログラムサイズの削減を図ることができる。
【0084】
また本実施の形態のプロセッサによれば、散在する従来のnopコードの位置に埋められた有効オペレーションを蓄積するIB1バッファおよびIB2バッファを設け、実行させるべき位置の直前の命令中の蓄積ビットでIB1バッファまたはIB2バッファのいずれかを指定して蓄積したオペレーションを実行することにより、従来の処理性能を保つつ圧縮された機械命令プログラムの実行が可能である。
【0085】
さらに本実施の形態によれば、スロットの位置にかかわらず出現順にnopコードを有効オペレーションで埋めるという考え方に基づくため、nopコードが第1スロットと第2スロットとのいずれにあるかを識別する必要がなくなり、コンパイラの構成が実施の形態1のものより簡単になるという効果を有する。
【0086】
なお、本実施形態のプロセッサでは、I1セレクタ19およびI2セレクタ20をそれぞれI1ラッチ2およびI2ラッチ3の入力側に設けているが、それぞれI1ラッチ2およびI2ラッチ3の出力側に設け、第1解読器4および第2解読器5の入力を選択するようにしてもよい。このようにする際は、IB1バッファおよびIB2バッファへの入力をIFステージにおいてROM1から直接行うように変更し、ROM1から読出された命令の蓄積ビットの値によってIB1セレクタ31とIB2セレクタ32とを制御するように変更しなければならないが、IB1バッファおよびIB2バッファへの取り込みやI1セレクタ19およびI2セレクタ20の選択については本実施形態と同様に蓄積ビットの値で制御すればよい。
【0087】
また、本実施形態のプロセッサでは、IB1バッファとIB2バッファとの2つの蓄積バッファを設けているが、いかなる数であってもよい。蓄積バッファの数が多くなるほどnopコードを有効オペレーションで埋める機会が増加し、プログラムサイズの一層の削減が図れる。このことは、例えば本実施形態のプロセッサにおけるIB2バッファがないものとすると、図5の命令4の第1スロットのnopコードは有効オペレーションで埋められないことから容易に伺い知れる。
【0088】
(実施の形態3)
実施の形態3は、2つのスロットしかない命令で3つのオペレーションを並列実行するVLIWアーキテクチャのコンパイラおよびプロセッサである。
【0089】
1.コンパイラ
コンパイラの構成は、機械命令生成部107と機械命令圧縮部109との動作を除いて実施の形態1に記したものと同じである。機械命令生成部107は、中間コード用バッファ106に格納された中間コードを入力して命令の3並列実行(実施の形態1は2並列実行)を目的とする命令のスケジューリングを行い、未圧縮の機械命令プログラムを生成し暫定出力バッファ108に書き込む。機械命令圧縮部109は次の原理に基づいて動作する。
【0090】
命令の順に未圧縮の機械命令プログラムを検索して、第3スロットを除く第1スロットと第2スロットのいずれかにかかわらず出現順序が連続する3つのnopコードを抽出し、これらのnopコードのスロットを、該3つのnopコードの以降に最初に現れる3つの有効オペレーションが指定される命令の第1スロットから第3スロットのオペレーションでそれぞれ置き換え、置き換えたことをマーキングするとともに、置き換えに使った3つの有効オペレーションが指定される命令を削除し、削除されたペアの直前の命令の第1スロットと第2スロットのいずれかに削除したことをマーキングする。
【0091】
1.1 機械命令圧縮部109の動作例
図15は、圧縮された機械命令プログラムの例示図であり、機械命令圧縮部109が図14の未圧縮の機械命令プログラムを上述の手順で圧縮したものである。圧縮された命令は第1と第2の2つのスロットで構成され、各スロットは2ビットの蓄積ビットとオペレーション(OP)フィールドとからなる。AからHの記号は有効なオペレーションを示す。蓄積ビット(左側)と実行ビット(右側)の2ビットは次のようにエンコードしている。
00 何もしない
10 オペレーションは置き換えられたものであり、IBバッファに第1、第2、第3スロットの順に逐次蓄積すべし
01 直後の命令が削除されたので、IBバッファの命令を実行すべし
11 (未使用)
具体的に説明すると、図14の命令5のオペレーションFとオペレーションGとオペレーションHとを命令1の第2スロットと命令3の第2スロットと命令4の第1スロットとのnopコードのスロットに埋め、埋められた以上のスロットの蓄積ビットを01にセットし、命令5を削除する。オペレーションFとオペレーションGとオペレーションHとは、この順にIBバッファの第1スロット、第2スロット、第3スロットに蓄積されることを前提にしており、削除された命令5の直前の命令4の第2スロットの蓄積ビットは”1”と実行ビットは”0”とセットする。その他のスロットの蓄積ビットは”0”と実行ビットは”0”とセットする。このようにして生成された機械命令プログラムが図15に示すものである。なお「IBバッファ」は次に説明する。
【0092】
2.プロセッサ
図16は、プロセッサの概略構成図である。
【0093】
図7と比べると、2つのスロットしかない命令で3つのオペレーションを並列実行するために、2つのスロットの命令をIB3バッファ41を含む3つのバッファに蓄積することにより内部で3つのスロットの命令に変換するものである。そして、3つ目のスロットの命令を与えるためのI3ラッチ38、nop生成器39、第3命令解読器40を有し、さらに3つ目のスロットの命令を実行するためのD3セレクタ34、D13ラッチ35、D23ラッチ36及び第3演算器37を有する点で異なる。また、リングカウンタ42により、IB1バッファ15、IB2バッファ16、IB3バッファ41の書き込み信号を順にイネーブルにする。
【0094】
2.1 プロセッサの動作例
以下に、図15の機械命令プログラムがROM1に格納された場合における上記構成をもつプロセッサの動作について図17を用いて説明する。
【0095】
図17は、図15の機械命令プログラムがROM1に格納された場合におけるプロセッサの動作タイミング図である。同図は、プロセッサの動作をパイプラインのIFステージでROM41から読出される命令、DECステージで解読される命令、EXステージで実行される命令と、IBバッファが保持する命令をマシンサイクルと呼ばれるタイミング毎に示している。以下、時間が経過する順にタイミング毎にその動作を説明する。なお図中、「:」はスロットの区切りを表し、左が第1スロット、中央が第2スロット、右が第3スロットを意味し、「−」は有効なオペレーションが保持されていないもしくは作用していないことを表す。
【0096】
(タイミングt1)
初期状態として、IB1バッファ15、IB2バッファ16、IB3バッファ41がリセットされ、それぞれに(0・・・00)2が格納されているものとする。また、リングカウンタ42も初期状態として(001)2にセットされ、I1ラッチ2またはI2ラッチ3に蓄積ビットが”1”の最初のオペレーションが格納されると(100)2となり、IB1バッファ15にオペレーションが蓄積されることとなる。
・IFステージ:命令1
命令1がROM1から読出され、第1スロット(オペレーションA)がI1ラッチ2に、第2スロット(オペレーションF)がI2ラッチ3に格納される。I3ラッチ38にはIB3バッファ41の(0・・・00)2が格納される。
【0097】
(タイミングt2)
・DECステージ:命令1
蓄積ビットが”1”であるI2ラッチ3の内容(オペレーションF)がIB1バッファ15に取込まれる。具体的には、蓄積ビットが”1”である最初のオペレーションなのでリングカウンタ42が(100)2を出力することにより、IB1バッファ15の書き込み信号がイネーブルとなり、I2ラッチ3の内容がIB1バッファ15に蓄積される。
【0098】
I1ラッチ2に格納された命令1の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションAであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。一方、I2ラッチ3に格納された命令1の第2スロットの蓄積ビットが”1”であるため、nop生成器22はnopを出力し、第2命令解読器5はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。また、3つのスロットの命令を実行する場合以外は第3演算器37を動作させる必要がないため、実行ビットが”0”のときは、nop生成器39はnopを出力する。
・IFステージ:命令2
命令2がROM1から読出され、第1スロット(オペレーションB)がI1ラッチ2に、第2スロット(オペレーションC)がI2ラッチ3に格納される。I3ラッチ31には再びIB3バッファ41の(0・・・00)2が格納される。
【0099】
(タイミングt3)
・EXステージ:命令1
D11ラッチ9とD21ラッチ11に格納されたオペランドを第1演算器13に入力してオペレーションAの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、第2演算器14と第3演算器37はnop生成器22、39により無効化されているため作用しない。
・DECステージ:命令2
I1ラッチ2に格納された命令2の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションBであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ11に格納される。一方、I2ラッチ3に格納された命令2の第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションCであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ10とD22ラッチ12に格納される。また、I3ラッチ38の実行ビットは”0”であるため、nop生成器39はnopを出力し、第3命令解読器40はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
・IFステージ:命令3
命令3がROM1から読出され、第1スロット(蓄積ビットが(00)2でオペレーションD)がI1ラッチ2に、第2スロット(蓄積ビットが(01)2でオペレーションG)がI2ラッチ3に格納される。I3ラッチ38には再びIB3バッファ41の(0・・・00)2が格納される。
【0100】
(タイミングt4)
・EXステージ:命令2
D11ラッチ9とD21ラッチ55に格納されたオペランドを第1演算器13に入力してオペレーションBの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、D12ラッチ11とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションCの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。また、第3演算器37はnop生成器39により無効化されているので作用しない。
・DECステージ:命令3
蓄積ビットが(10)2であるI2ラッチ3の内容(オペレーションG)がIB2バッファ16に取込まれる。具体的には、タイミングt1とほとんど同様の動作であるが、IB1バッファ15にはすでにオペレーションFが蓄積されているので、リングカウンタ42が(010)2を出力することにより、IB2バッファ16の書き込み信号がイネーブルとなり、IB2バッファ16にオペレーションが蓄積される。
【0101】
I1ラッチ2に格納された命令3の第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションDであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ55に格納される。一方、I2ラッチ3に格納された命令3の第2スロットの蓄積ビットが”1”であるため、nop生成器22はnopを出力し、第2命令解読器5はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。また、実行フラグは”0”であるため、nop生成器39はnopを出力し、第3命令解読器40はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
・IFステージ:命令4
命令4がROM1から読出され、第1スロット(オペレーションH)がI1ラッチ2に、第2スロット(オペレーションE)がI2ラッチ3に格納される。I3ラッチ38には再びIB3バッファ41の(0・・・00)2が格納される。
【0102】
(タイミングt5)
・EXステージ:命令3
D11ラッチ9とD21ラッチ55に格納されたオペランドを第1演算器13に入力してオペレーションDの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、第2演算器14と第3演算器37とはnop生成器22、39により無効化されているので作用しない。
・DECステージ:命令4
蓄積ビットが”1”であるI1ラッチ2の内容(オペレーションH)がIB3バッファ41に取込まれる。このとき、IB1バッファ15、IB2バッファ16には既にオペレーションが蓄積されているので、リングカウンタ42は(001)2を出力することによりIB3バッファ41の書き込み信号がイネーブルとなり、IB3バッファ41にオペレーションが蓄積される。また、I1ラッチ2に格納された命令4の第1スロットの蓄積ビットが”1”であるため、nop生成器21はnopを出力し、第1命令解読器4はEXステージで実質的に何らの動作もしないようなデコード結果を出力する。
【0103】
一方、I2ラッチ3に格納された命令4の第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションEであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ11とD22ラッチ12に格納される。また、実行フラグは”0”であるため、nop生成器39はnopを出力し、第3命令解読器40は実行ステージで実質的に何らの動作もしないようなデコード結果を出力する。
・IFステージ:IBバッファ蓄積命令
I2ラッチ3に格納された命令4の第2スロットの実行ビットが”1”であるため、命令フェッチ制御部により命令フェッチを中断する。これとともに、I1セレクタ19、I2セレクタ20がそれぞれIB1バッファ15、IB2バッファ16を選択し、I1ラッチ2、I2ラッチ3、I3ラッチ38にはIB1バッファ15、IB2バッファ16、IB3バッファ41の内容が格納される。そして、I3ラッチ38の実行ビットが”1”となると、IBバッファの内容をリセットする。
【0104】
(タイミングt6)
・EXステージ:命令4
第1演算器13、第3演算器37はnop生成器21、nop生成器39により無効化されているので作用しない。一方、D12ラッチ10とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションEの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
・DECステージ:IBバッファ蓄積命令
I1ラッチ2に格納された第1スロットが第1命令解読器4で解読される。解読された結果としてオペレーションFであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD11ラッチ9とD21ラッチ55に格納される。一方、I2ラッチ3に格納された第2スロットが第2命令解読器5で解読される。解読された結果としてオペレーションGであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD12ラッチ11とD22ラッチ12に格納される。また、I3ラッチ3に格納された第3スロットが第3命令解読器40で解読される。すなわち、実行ビットが”1”であるため、nop生成器39はI3ラッチ38の内容をそのまま出力し、解読された結果としてオペレーションHであることが判明する。この解読に基づいてレジスタファイル6から汎用レジスタが読出され、読出された値または命令中の定数値がD13ラッチ35とD23ラッチ36に格納される。
【0105】
(タイミングt7)
・EXステージ:IBバッファ蓄積命令
D11ラッチ9とD21ラッチ55に格納されたオペランドを第1演算器13に入力してオペレーションFの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。一方、D12ラッチ11とD22ラッチ12に格納されたオペランドを第2演算器14に入力してオペレーションGの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。また、D13ラッチ35とD23ラッチ36に格納されたオペランドを第3演算器37に入力してオペレーションHの演算を行う。演算結果は必要に応じてレジスタファイル6の汎用レジスタに格納する。
【0106】
3.記録媒体
本発明の記録媒体の実施の形態として、図15の機械命令プログラムを記録した磁気ディスク(フロッピーディスクやハードディスクなど)、光ディスク(CD-ROMやPDなど)、光磁気ディスク、半導体メモリ(ROMやフラッシュメモリなど)がある。
【0107】
以上のように本実施の形態によれば、コンパイラの機械命令圧縮部109が、第3スロットを除く第1スロットと第2スロットのいずれかにかかわらず出現順序が連続する3つのnopコードを抽出し、これらのnopコードのスロットを、該3つのnopコードの以降に最初に現れる3つの有効オペレーションが指定される命令の第1スロットから第3スロットのオペレーションでそれぞれ置き換え、置き換えに使った3つの有効オペレーションが指定される命令を削除することにより命令中の無駄領域が低減され、プログラムサイズの削減を図ることができる。特に本実施の形態によれば、従来3つのスロットからなる命令で3並列実行していた所を、従来nopコードとなるスロットを利用して2つスロットからなる命令で実行できるため、極めてコード効率が高い。上記に示した動作例では、図12の3スロット×5命令=15スロットが、図15の2スロット×4命令=8スロットに圧縮されていることがわかる。
【0108】
また本実施の形態のプロセッサによれば、散在する従来のnopコードの位置に埋められた有効オペレーションを蓄積するIBバッファを設け、実行させるべき位置の直前の命令中の蓄積ビットでIBバッファを指定して蓄積したオペレーションを実行することにより、従来の処理性能を保ちつつ圧縮された機械命令プログラムの実行が可能である。
【0109】
なお、本実施形態のプロセッサでは、I1セレクタ19およびI2セレクタ20をそれぞれI1ラッチ2およびI2ラッチ43の入力側に設けているが、それぞれI1ラッチ2およびI2ラッチ3の出力側に設け、第1命令解続器4および第2命令解読器4の入力を選択するようにしてもよい。このようにする際は、IBバッファへの入力をIFステージにおいてROM1から直接行うように変更し、ROM1から読出された命令の蓄積ビットの値によってIBセレクタ66を制御するように変更しなければならないが、IBバッファへの取り込みやI1セレクタ19およびI2セレクタ20の選択については本実施形態と同様に蓄積ビットの値で制御すればよい。
【0110】
また、本実施形態のプロセッサでは、IBバッファという1つの蓄積バッファを設けているが、複数設けてもよい。蓄積バッファの数が多くなるほどnopコードを有効オペレーションで埋める機会が増加し、プログラムサイズの一層の削減が図れる。
【0111】
さらにまた、本実施形態のプロセッサでは、3つの命令解読器と3つの演算器を設けて最大3並列実行を達成しているが、これらを4つずつ設けて4並列実行してもよいし、あるいはそれ以上であってもよい。4並列実行の場合は、本実施形態と同様に2つスロットからなる命令の未圧縮時にnopコードとなるスロットを4つ利用して有効オペレーションを埋めてもよいし、3つスロットからなる命令の未圧縮時にnopコードとなるスロットを4つ利用して有効オペレーションを埋めてもよい。但し前者の場合、IBバッファをもう1スロット分だけ多く備える必要がある。前者は後者に比べて未圧縮時にnopコードとなるスロットが極めて多い場合に有効で、相当のコード効率の向上が望める。このようにすることにより、VLIWプロセッサにおける命令の並列度が向上しても、nopコードの増大を大幅に軽減することができる。
【0112】
(実施の形態4)
実施の形態4は、実施の形態3から、第3スロットのオペレーションだけを第1あるいは第2スロットのnopコードのスロットに埋めるように変えたものである。
【0113】
1.コンパイラ
コンパイラの構成は、機械命令圧縮部109の動作を除いて実施の形態3に記したものと同じである。機械命令圧縮部109は次の原理に基づいて動作する。
【0114】
命令の順に未圧縮の機械命令プログラムを検索して、第3スロットを除く第1スロットと第2スロットのいずれかにかかわらず1つのnopコードを抽出し、このnopコードのスロットを、該nopコードの以降に最初に現れる第3スロットに有効オペレーションが指定される命令の該オペレーションで置き換え、置き換えたことをマーキングするとともに、置き換えに使った有効オペレーションが指定される命令の第3スロットを削除し、該命令の第1スロットと第2スロットのいずれかに削除したことをマーキングする。
【0115】
1.1 機械命令圧縮部109の動作例
図18は、圧縮された機械命令プログラムの例示図であり、機械命令圧縮部109が図12の未圧縮の機械命令プログラムを上述の手順で圧縮したものである。圧縮された命令は第1と第2の2つのスロットで構成され、各スロットは2ビットの蓄積ビットとオペレーション(OP)フィールドとからなる。AからHの記号は有効なオペレーションを、nopは有効でないnopコードを示す。蓄積ビットの2ビットは次のようにエンコードしている。
00 何もしない
01 オペレーションは置き換えられたものであり、IBバッファに蓄積すべし10 第3スロットが削除されたので、第3スロットにはIBバッファのオペレーションを実行すべし
11 (未使用)
具体的に説明すると、第3スロットに置かれたオペレーションである、図14の命令5のオペレーションHを、命令1の第2スロットのnopコードのスロットに埋め、埋められたスロットの蓄積ビットを01にセットし、命令5の第3スロットを削除する。オペレーションHは、IBバッファに蓄積されることを前提にしており、第3スロットが削除された命令5の第2スロットの蓄積ビットには10をセットする(第1スロットの蓄積ビットであってもよい)。その他のスロットの蓄積ビットは00である。このようにして生成された機械命令プログラムが図18に示すものである。ここでは、命令3の第2スロットと命令4の第1スロットのnopコードは置き換えられずに残っている。なお「IBバッファ」は次に説明する。
【0116】
2.プロセッサ
図19は、プロセッサのIFステージ部分の概略構成図である。
【0117】
DECステージおよびEXステージの図示していない部分は図16と同じ構成であり、また図16と同一の構成要素には同一の符号を付している。このプロセッサは、図14に示すものと比べると、IBバッファ50を1つだけ有するものである点で異なる。このため、図16と比べるとIBバッファが1つで足りることはもちろんの事、3つのバッファに左から蓄積するためのセレクタ41、42が不要となり回路が簡単化できる。動作は、蓄積先がIBバッファ50に固定される以外は、実施の形態3と同じであるため説明は省略する。
【0118】
3.記録媒体
本発明の記録媒体の実施の形態として、図18の機械命令プログラムを記録した磁気ディスク(フロッピーディスクやハードディスクなど)、光ディスク(CD-ROMやPDなど)、光磁気ディスク、半導体メモリ(ROMやフラッシュメモリなど)がある。
【0119】
以上のように本実施の形態によれば、コンパイラの機械命令圧縮部109が、第3スロットを除く第1スロットと第2スロットのいずれかにかかわらず1つのnopコードを抽出し、このnopコードのスロットを、該nopコードの以降に最初に現れる第3スロットに有効オペレーションが指定される命令の該オペレーションで置き換え、置き換えに使った有効オペレーションが指定される命令の第3スロットを削除することにより命令中の無駄領域が低減され、プログラムサイズの削減を図ることができる。特に本実施の形態によれば、従来3つのスロットからなる命令で3並列実行していた所を、従来nopコードとなるスロットを利用して2つスロットからなる命令で実行できるため、極めてコード効率が高い。上記に示した動作例では、図12の3スロット×5命令=15スロットが、図18の2スロット×5命令=10スロットに圧縮されていることがわかる。
【0120】
また本実施の形態のプロセッサによれば、従来のnopコードの位置に埋められた有効オペレーションを蓄積するIBバッファを設け、命令中の蓄積ビットでIBバッファを指定して該命令のオペレーションと蓄積したオペレーションとを並列に実行することにより、従来の処理性能を保つつ圧縮された機械命令プログラムの実行が可能である。
【0121】
なお、本実施形態のプロセッサでは、IBバッファという1つの蓄積バッファを設けているが、複数設けてもよい。蓄積バッファの数が多くなるほどnopコードを有効オペレーションで埋める機会が増加し、プログラムサイズの一層の削減が図れる。例えば、命令3の第2スロットと命令4の第1スロットのnopコードは置き換えられずに残っているが、未圧縮(図14)の命令5の直後に第3スロットに有効オペレーションが置かれた命令が1つ後続する場合、または2つ後続する場合、それぞれ、これらのnopコードの一方または両方をその有効オペレーションで埋めることができる。
【0122】
さらにまた、本実施形態のプロセッサでは、3つの命令解読器と3つの演算器を設けて最大3並列実行を達成しているが、これらを4つずつ設けて4並列実行してもよいし、あるいはそれ以上であってもよい。4並列実行の場合は、本実施形態と同様に2つスロットからなる命令の未圧縮時にnopコードとなるスロットを2つ利用して有効オペレーションを埋めてもよいし、3つスロットからなる命令の未圧縮時にnopコードとなるスロットを1つ利用して有効オペレーションを埋めてもよい。但し前者の場合、IBバッファをもう1スロット分だけ多く備える必要がある。前者は後者に比べて未圧縮時にnopコードとなるスロットが極めて多い場合に有効で、相当のコード効率の向上が望める。このようにすることにより、VLIWプロセッサにおける命令の並列度が向上しても、nopコードの増大を大幅に軽減することができる。
【0123】
以上、本発明に係るコンパイラ及びプロセッサについて、上記の4つの実施形態に基づいて説明したが、本発明はこれら実施形態に限られないことは勿論である。即ち、
(1)上記の4つの実施形態では、1つの命令に2つまたは3つのオペレーションを指定するVLIW形式のアーキテクチャとしているが、1つの命令で1つのオペレーションを指定するVLIW形式でないアーキテクチャでもよい。
【0124】
特に、固定長命令の場合には未使用領域を持つ命令が多く定義されることがある。例えば、MIPS RISCアーキテクチャによるプロセッサ“R3000”は32ビット固定長命令を実行するが、このプロセッサの演算命令は図23(a)に示すように、12ビットのオペレーションフィールド(「op1」と「op2」で示す)とそれぞれが5ビットの3つのレジスタフィールド(ソースオペランドの「rs」および「rt」と、デスティネーションオペランドの「rd」で示す)から構成され、さらに5ビットの「res」で示す未使用領域を有する。本発明によれば、このような単一オペレーション命令中に生じる無駄領域の発生も回避される。具体的には、図23(b)に示すようにコンパイラが6つの命令Aから命令Fのそれぞれの未使用領域a〜fを利用して、命令F以降に実行されるべき1つの命令を分割して配置するとともにこの命令を削除し、プロセッサ内に設けた命令蓄積レジスタにこれらを順に蓄積し、命令Fの実行後にこのレジスタの内容を実行する。こうすることにより、プログラム中の無駄領域が解消されコード効率が向上する。また、命令蓄積レジスタの内容の実行は、命令Fの直後でなく命令Fに続く他の命令の実行後でもよいし、また命令Fと並列に実行してもよい。特に後者の思想は、1つの命令で1つのオペレーションを指定するVLIW形式でないアーキテクチャにおいて局所的ではあるが2つのオペレーションを指定するVLIW形式のアーキテクチャを実現できるため有用である。また、このような命令蓄積レジスタを複数設けることにより、さらに3並列以上のVLIWアーキテクチャも実現可能である。なお、6つの命令Aから命令Fは必ずしもすき間なく連続している必要はない。
【0125】
(2)上記の4つの実施形態では、命令蓄積レジスタ(IB1バッファ、IB2バッファ、IBバッファが相当)を読出すと同時に内容を消去しているが、消去せずに複数回読出して再利用してもよい。例えば、実施の形態3および実施の形態4では2ビットの蓄積ビットが11である状態を使用していないのでこれを利用し、蓄積ビットが11の時はIBバッファを消去せずに実行する、とすることができる。こうすることにより、例えばプログラムがループを構成するような同じ命令を繰り返し実行する場合に、度々同じ命令を何度もIBバッファに蓄積する必要がなくなり、一層コード効率がよくなる。また、命令蓄積レジスタを、読出した直後に内容が消去されるものと消去されず再利用可能なものと2種類設けることも可能である。
【0126】
(3)上記の4つの実施形態では、コンパイラにおいて、機械命令生成部107が一旦、従来と同じ機械命令プログラムを生成した後に機械命令圧縮部109がこれを圧縮しているが、両者の機能を一体にして、従来と同じ機械命令プログラムを生成することなく目的の圧縮された機械命令プログラムを直接生成するようにしてもよい。
【0127】
(4)上記の4つの実施形態のプロセッサは、命令フェッチ、解読、実行の3段パイプラインで構成されるとしているが、パイプラインの段数は何段であってもよいし、パイプラインを採らなくともよい。
【0128】
【発明の効果】
以上の説明から明らかなように、本発明によればnopを減少させることができ、コードサイズを小さくすることができる。
【図面の簡単な説明】
【図1】実施の形態1に係るコンパイラの構成を示すブロック図
【図2】実施の形態1に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図3】実施の形態1に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図4】実施の形態1に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図5】未圧縮の機械命令プログラムの例示図
【図6】実施の形態1に係る圧縮された機械命令プログラムの例示図
【図7】実施の形態1に係るプロセッサの概略構成図
【図8】実施の形態1に係るプロセッサの図6の機械命令プログラムに対応した動作タイミング図
【図9】実施の形態2に係る圧縮された機械命令プログラムの例示図
【図10】実施の形態2に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図11】実施の形態2に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図12】実施の形態2に係るコンパイラの機械命令圧縮部109の処理フローを示したフローチャート
【図13】実施の形態2に係るプロセッサのIFステージ部分の概略構成図
【図14】未圧縮の機械命令プログラムの例示図
【図15】実施の形態3に係る圧縮された機械命令プログラムの例示図
【図16】実施の形態3に係るプロセッサの概略構成図
【図17】実施の形態3に係るプロセッサの図13の機械命令プログラムに対応した動作タイミング図
【図18】実施の形態4に係る圧縮された機械命令プログラムの例示図
【図19】実施の形態に係るプロセッサのIFステージ部分の概略構成図
【図20】実施の形態4に係るプロセッサの図16の機械命令プログラムに対応した動作タイミング図
【図21】第1の従来技術におけるプロセッサの概略構成図
【図22】第2の従来技術におけるプロセッサの概略構成図
【図23】他の従来技術および他の実施形態に係る命令のフォーマット図
【符号の説明】
1、41 ROM
2、42 I1ラッチ
3、43 I2ラッチ
4、45 第1命令解読器
5、46 第2命令解読器
6、48 レジスタファイル
7、49 D1セレクタ
8、50 D2セレクタ
9、52 D11ラッチ
10、53 D12ラッチ
11、55 D21ラッチ
12、56 D22ラッチ
13、58 第1演算器
14、59 第2演算器
15、33 IB11バッファ
16、34 IB12バッファ
17、35 IB21バッファ
18、36 IB22バッファ
19、64 I1セレクタ
20、65 I2セレクタ
21、37、67、72 制御回路
31 IB1セレクタ
32 IB2セレクタ
44 I3ラッチ
47 第3命令解読器
51 D3セレクタ
54 D13ラッチ
57 D23ラッチ
60 第3演算器
61 IB1バッファ
62 IB2バッファ
63 IB3バッファ
66 IBセレクタ
71 IBバッファ
101 C言語プログラム
102 コンパイラ
103 ファイル読込部
104 読込用バッファ
105 構文解析部
106 中間コード用バッファ
107 機械命令生成部
108 暫定出力用バッファ
109 機械命令圧縮部
110 出力用バッファ
111 ファイル出力部
112 機械命令プログラム

Claims (1)

  1. 高級言語プログラムから複数の操作記述が配置された複数のスロットを含む長語命令形式の機械命令プログラムを生成するコンパイラにおいて、
    前記高級言語プログラムから前記プロセッサが同時に並列実行できる複数の操作を各スロットに配置した長語命令形式の命令を生成したのち、
    前記命令に含まれるnopを前記nopと同一のスロット中であるか否かに関係なく後に実行される有効な操作に置き換えるとともに、置き換えたことを示す情報と前記置き換えられた有効な操作のあったスロットの情報を前記置き換えられた有効な操作に対応する命令に付加することを特徴とするコンパイラ。
JP25075498A 1998-09-04 1998-09-04 コンパイラ、プロセッサおよび記録媒体 Expired - Fee Related JP3692793B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP25075498A JP3692793B2 (ja) 1998-09-04 1998-09-04 コンパイラ、プロセッサおよび記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25075498A JP3692793B2 (ja) 1998-09-04 1998-09-04 コンパイラ、プロセッサおよび記録媒体

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2005075625A Division JP3835764B2 (ja) 2005-03-16 2005-03-16 プロセッサおよび記録媒体

Publications (2)

Publication Number Publication Date
JP2000081982A JP2000081982A (ja) 2000-03-21
JP3692793B2 true JP3692793B2 (ja) 2005-09-07

Family

ID=17212551

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25075498A Expired - Fee Related JP3692793B2 (ja) 1998-09-04 1998-09-04 コンパイラ、プロセッサおよび記録媒体

Country Status (1)

Country Link
JP (1) JP3692793B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE422258T1 (de) * 2003-12-16 2009-02-15 Nxp Bv Speichereffizientes anweisungsverarbeitungsschema
JP4646854B2 (ja) * 2006-05-25 2011-03-09 三洋電機株式会社 制御情報供給装置
JP4646853B2 (ja) * 2006-05-25 2011-03-09 三洋電機株式会社 制御情報供給装置
KR100875836B1 (ko) 2007-03-23 2008-12-24 삼성전자주식회사 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법
JP5817603B2 (ja) * 2012-03-15 2015-11-18 富士通株式会社 データ作成装置、データ作成方法、およびデータ作成プログラム

Also Published As

Publication number Publication date
JP2000081982A (ja) 2000-03-21

Similar Documents

Publication Publication Date Title
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
JP5057256B2 (ja) データ処理装置、データ処理システムおよびデータ処理方法
US7458069B2 (en) System and method for fusing instructions
KR100638703B1 (ko) 데이터 프로세싱 시스템용 셀룰러 엔진
CN105706050B (zh) 能量高效的多模式指令发布
US5710902A (en) Instruction dependency chain indentifier
US5333280A (en) Parallel pipelined instruction processing system for very long instruction word
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
US7162617B2 (en) Data processor with changeable architecture
JP2003099248A (ja) プロセッサ、コンパイル装置及びコンパイル方法
WO2001059593A2 (en) A means and method for compiling high level software languages into algorithmically equivalent hardware representations
US11366669B2 (en) Apparatus for preventing rescheduling of a paused thread based on instruction classification
US6324639B1 (en) Instruction converting apparatus using parallel execution code
US6957323B2 (en) Operand file using pointers and reference counters and a method of use
US20050257200A1 (en) Generating code for a configurable microprocessor
KR100308512B1 (ko) 편집 기능을 위한 전문 밀리코드 지시
JP3692793B2 (ja) コンパイラ、プロセッサおよび記録媒体
JP3835764B2 (ja) プロセッサおよび記録媒体
KR100317769B1 (ko) 압축 기억된 십진수 나눗셈에 대한 전문 밀리코드 명령
KR100322726B1 (ko) 번역 및 테스트를 위한 전문 밀리코드 명령
KR101545701B1 (ko) 프로세서 및 그 명령어 번들 복원 방법
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
KR100322725B1 (ko) 전문 갱신 및 분기 명령을 이용하는 밀리코드 플래그
JP4444305B2 (ja) 半導体装置
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20041222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050118

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050318

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050531

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050613

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

Free format text: PAYMENT UNTIL: 20090701

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100701

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110701

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees