JP3899114B2 - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP3899114B2
JP3899114B2 JP2006126330A JP2006126330A JP3899114B2 JP 3899114 B2 JP3899114 B2 JP 3899114B2 JP 2006126330 A JP2006126330 A JP 2006126330A JP 2006126330 A JP2006126330 A JP 2006126330A JP 3899114 B2 JP3899114 B2 JP 3899114B2
Authority
JP
Japan
Prior art keywords
instruction
condition
comparison
condition flag
value
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
JP2006126330A
Other languages
English (en)
Other versions
JP2006209805A (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 JP2006126330A priority Critical patent/JP3899114B2/ja
Publication of JP2006209805A publication Critical patent/JP2006209805A/ja
Application granted granted Critical
Publication of JP3899114B2 publication Critical patent/JP3899114B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Description

本発明は、実行されるプログラムの規模縮小、並びに実行並列度向上による処理時間短縮を要望されるプロセッサに関する。
従来、パイプライン方式を用いて複数命令を並列処理することにより、プログラムの実行時間を短縮するプロセッサが実用化されている。パイプライン方式を用いるプロセッサは、命令の供給、解読、実行等の複数の部分(ステージと呼ぶ)をそれぞれ処理する並列動作可能な回路を備え、複数命令を相異なるステージで同時並列に処理する。
また、VLIW(Very Long Instruction Word)方式やスーパースカラ方式を用いることにより、実行時間の短縮を図っているプロセッサもある。この種のプロセッサは、個々のステージを処理する複数の並列動作可能な回路を備え、一のステージにおいて複数命令を同時並列に処理する。
パイプライン方式を採るプロセッサにおける実行時間の短縮効果を損なう要因の一つに、分岐命令がある。分岐命令を処理した場合、所定のステージにおいてその分岐先が確定するまでは次の命令の処理に着手できないため、上流ステージを処理する回路に待ちが生じ、この待ちが実行時間の短縮を阻む要因となる。分岐予測を行って後続命令を投機実行するプロセッサにおいても、分岐予測が外れた際には正しい命令のやり直しを余儀なくされ、実行時間の短縮が阻害される。
スーパースカラ方式を採るプロセッサでは、同時並列処理可能な命令数が増大することにより分岐命令を処理する頻度が高まるので、このような分岐命令の影響はさらに大きくなる。
分岐命令によって実行時間の短縮が阻害される問題を解消するために、従来のある種のプロセッサは、条件実行命令を処理する機能を備えている。条件実行命令とは、その命令が処理される際に本来の実質的な効果を生じるための条件を示す実行条件情報を付与された命令を言う。
当該プロセッサは、条件実行命令を処理する際、当該実行条件情報に応じて、処理された演算結果を破棄し、又はデータの転送を中止する等して、当該命令が実効を生じないように無効化する。
図32は、そのようなプロセッサの代表的な構成例を示すブロック図である。プロセッサ90は、クロック信号に同期して動作し、当該クロック信号の各サイクルにおいて、命令の供給、解読、及び実行それぞれのステージを並列処理可能な命令供給部20、解読部30、及び実行部40からなる。各部は単一のクロックサイクルにおいて最大3個の命令を並列処理する。
プロセッサ90を対象とするコンパイラは、プログラムにおいてプロセッサ90が並列実行可能な命令群を予め判断し、当該命令群を示す並列実行境界情報を当該プログラムに付与する。プロセッサ90は、当該並列実行境界情報によって並列処理すべき命令群を認識して、当該命令群を各クロック各ステージにおいて並列処理する。
命令供給部20は、命令フェッチ部21、及び命令レジスタ群22からなり、命令レジスタ群は第1レジスタ221、第2レジスタ222、及び第3レジスタ223を備えている。
解読部30は、命令発行制御部31、及び命令デコーダ群32からなり、命令デコーダ群32は、第1命令デコーダ321、第2命令デコーダ322、及び第3命令デコーダ323を備えている。
実行部40は、実行制御部41、PC(Program Counter:プログラムカウンタ)部42、レジスタファイル43、第1演算部441、第2演算部442、第3演算部443、第1ゲート451、第2ゲート452、第3ゲート453、条件フラグレジスタ46、オペランドアクセス部47、データバス48、及びデータバス49を備えている。
命令供給部20において、命令フェッチ部21は、IA(Instruction Address:命令アドレス)バス、及びID(Instruction Data:命令データ)バスを介して、図示しない外部メモリから所定個数毎に命令を読み出して内部に記憶するとともに、PC部42から与えられたアドレスによって示される命令から、並列実行境界情報により並列実行可能と示された範囲にある命令を、命令レジスタ221乃至223に記憶させる。
解読部30において、命令デコーダ321乃至323は、命令発行制御部31による制御の下で、それぞれ、命令レジスタ221乃至223に記憶されている命令を実行させるための制御信号を実行制御部41へ出力するとともに、各命令に含まれている定数オペランドをデータバス48へ出力する。
実行部40において、実行制御部41は、命令デコーダ321乃至323から指示された制御信号に基づいて、実行部40の各構成要素を動作させる。PC部42は、次に処理すべき命令のアドレスを命令フェッチ部21へ出力する。
レジスタファイル43は、64個の汎用レジスタR0乃至R63から構成される。各汎用レジスタは、実行制御部41からの制御に応じて、格納されている値をデータバス48を介して演算部441乃至443へ出力し、また、データバス49を介して与えられるデータを記憶する。
演算部441乃至443は、それぞれ、図示しない算術論理演算を行うALU(Arithmetic Logical Unit:数値演算ユニット)、乗算器、及びシフト演算を行うバレルシフタ等を内部に備え、入力されたデータに対して、実行制御部41からの制御に応じた演算を行うか、又は単に通過させる。当該演算の結果、又は通過した入力データは、ゲート451乃至453へ出力されるとともに、特に、比較命令に応じて行われた比較演算の結果値は、条件フラグレジスタ46へ出力される。
条件フラグレジスタ46は、7個のレジスタC0乃至C6から構成される。各条件フラグレジスタは、実行制御部41からの制御に応じて、演算部441乃至443から与えられた値を記憶するとともに、記憶している値をそれぞれゲート451乃至453へ出力する。
ゲート451乃至453は、条件フラグレジスタ46から与えられた値が真値である場合に、それぞれ演算部441乃至443から与えられた演算の結果をデータバス49を介してレジスタファイル43へ出力し、偽値である場合に当該結果を破棄する。
オペランドアクセス部47は、実行制御部41からの制御に応じて、レジスタファイル43からデータバス49を介して与えられたデータを、OA(Operand Address:オペランドアドレス)バス、及びOD(Operand Data:オペランドデータ)バスを介して図示しない外部メモリへ転送し、当該外部メモリに記憶されているデータをレジスタファイル43へ転送する。
この構成によって、プロセッサ90は、条件フラグレジスタに記憶されている値が真値の場合にのみ実質的な効果を生じる条件実行命令を実現することができる。当該条件実行命令は、当該値が偽値の場合に無効化される条件実行命令と言い換えても同義である。
条件実行命令を用いることにより、例えば、図33のフローチャートに示した条件処理を、図34に示した分岐命令を含まない様式のプログラムに従って実行することができる。
図34のプログラムにおいて、左から第1列は命令番号、第2列は実行条件情報、第3列は命令ニーモニック、第4列はオペランド、第5列は並列実行境界情報を表す。
当該実行条件情報は、実行条件となるべき条件フラグレジスタを表し、条件フラグレジスタが示されていない場合、当該命令は無条件実行命令であることを表す。
当該並列実行境界情報は、具体的には各命令に付与される並列実行境界フラグ値であり、0が次の命令と並列実行可能であることを示し、1が次の命令と並列実行不可能であることを示す。
なお、実行条件情報、命令ニーモニック、オペランド、及び並列実行境界情報は、コンピュータ資源上において所定のフォーマットに従って表現されるが、当該フォーマットについては、本願発明の主眼ではないので説明を省略する。
命令1は汎用レジスタR0の内容とR1の内容とを比較し、R0<R1の場合に条件フラグレジスタC0及びC1にそれぞれ真値及び偽値を記憶させ、その他の場合にそれぞれ偽値及び真値を記憶させるための命令である。
命令2及び命令3の先頭に記した[C0]及び[C1]は、両命令が、それぞれ条件フラグレジスタC0及びC1に記憶されている値が真値である場合に実効を生じる条件実行命令であることを表している。この例では、r0<r1の場合に第2命令が実効を生じ第3命令は無効化され、その他の場合に第2命令が無効化され第3命令が実効を生じる。
プロセッサ90は、このように、条件実行命令を用いることにより、分岐命令を含まない様式のプログラムに従って条件処理を実行できるので、分岐命令により実行時間の短縮が阻害される問題を解消する。
分岐命令を含まない様式のプログラムは、分岐命令を用いる様式のプログラムに比べて少ない命令数で記述できるので、さらに、プログラム規模を縮小する効果をも有している。
特開2000−222209号公報
しかしながら、従来のプロセッサ90は、所定のクロックサイクルにおいて比較命令に応じて行われた比較演算の結果を条件フラグレジスタに一旦記憶し、次のクロックサイクル以降で、当該記憶された結果を読み出して条件実行命令を無効化するので、比較命令と当該比較命令に応じて算出された条件フラグを実行条件とする条件実行命令とを、同一サイクルにおいて並列実行できないという制約を有している。
このため、プロセッサ90を対象とする従来のコンパイラは、そのような命令が同一クロックサイクルで実行できないことを示す並列実行境界情報をプログラムに付与する。例えば、図34のプログラムに対し、命令1及び命令2、並びに命令1及び命令3が同一クロックサイクルで処理されないよう、命令1の並列実行境界フラグを1とする。この結果、プロセッサ90は、図34のプログラムにおける命令1を単独実行する。図35は、プロセッサ90がこのプログラムを実行した場合のタイミングチャートであり、各命令の各ステージが処理されるクロックサイクルを示している。
このように、従来のプロセッサによれば、比較命令と当該比較命令に応じて算出された条件フラグを実行条件とする条件実行命令との間で、並列度の向上による実行時間の短縮が困難であるという第1の問題がある。
また、プロセッサ90を対象とする従来のコンパイラは、複数の比較判断を複合して行う複合条件処理について、個々の比較判断に応じて制御を分岐させる様式のプログラムを生成する。具体例を挙げれば、図36のフローチャートに示した複合条件処理を実行させるために、図37に示したプログラムを生成する。
複合条件処理について、プログラムの規模及び実行時間の面で不利となる分岐命令を用いるのは、プロセッサ90が、複数の比較命令それぞれに応じて行われた比較判断結果を直接に論理演算する機能を持たないため、複合条件処理を条件分岐命令を用いずに表すとかえって命令数の増加を招き、分岐命令を排除する本来の目的であるプログラム規模の縮小及び実行時間の短縮に寄与しないからである。
このように、従来のプロセッサによれば、複合条件処理を実行するためのプログラムの規模縮小及び実行時間短縮が困難であるという第2の問題がある。
上記の問題に鑑み、本発明は、複合条件処理を従来よりも小規模なプログラムにより短時間で実行可能とするプロセッサの提供、並びに、当該プロセッサにおいて条件処理を行うための、従来よりも小規模、かつ短時間で実行可能なプログラムを生成するコンパイラの提供を目的とする。
上記問題を解決するため、本発明の第1の特徴を有するプロセッサは、並列実行が可能な複数の命令を記憶する命令記憶部と、前記命令記憶部で同時に記憶されている前記複数の命令の各々を解読する解読部と、前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、前記演算部で実行される演算の結果に応じて、各々が真または偽を示す値を保持する複数の条件フラグレジスタを備えたプロセッサであって、前記プロセッサは、実行が可能な命令セット中に、各々の命令コードにおいて、少なくとも2つのオペランドの指定、前記少なくとも2つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも1つの指定を行う複数の比較命令からなる比較命令群、および各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも1つの指定を行い、指定された前記少なくとも1つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群を含んでおり、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令群の第1の比較命令、第2の比較命令および前記条件実行命令群の第1の条件実行命令を含んでいた場合、前記解読部における前記第1の比較命令の解読の結果に応じて、前記演算部において前記第1の比較命令の命令コード中で指定される前記少なくとも2つのオペランドの値が前記第1の比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第1条件フラグ値の算出、および前記第1条件フラグ値の前記第1の比較命令の命令コード中で指定される第1の条件フラグレジスタへの格納を実行し、前記解読部における前記第2の比較命令の解読の結果に応じて、前記演算部において前記第2の比較命令の命令コード中で指定される前記少なくとも2つのオペランドの値が前記第2の比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す真偽値の算出、前記真偽値と前記第2の比較命令の命令コード中で指定される前記第1の条件フラグレジスタに保持される前の前記第1条件フラグ値を少なくとも2つの入力とする第1の論理演算による第2条件フラグ値の算出、および前記第2条件フラグ値の前記第2の比較命令の命令コード中で指定される第2の条件フラグレジスタへの格納を実行し、前記第2条件フラグ値に応じて前記第1の条件実行命令の演算の結果が有効となるか無効となるかが決定されることを特徴とする
また本発明の第1の特徴を有するプロセッサにおいて、前記解読部における前記第2の比較命令の解読の結果に応じて、前記演算部において前記第1の論理演算によって前記第2条件フラグ値を算出すると共に、前記真偽値と前記第1条件フラグ値を少なくとも2つの入力とし、前記第1の論理演算と異なる第2の論理演算によって第3条件フラグ値を算出し、前記第3条件フラグ値を前記第2の比較命令の命令コード中で指定される第3の条件フラグレジスタに格納し、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記第1の比較命令、第2の比較命令および前記第1の条件実行命令の他に、さらに前記条件実行命令群に属する第2の条件実行命令を含んでいた場合に、前記第3条件フラグ値に応じて前記第2の条件実行命令の演算の結果が有効となるか無効となるかが決定されるものであっても良い。
上記問題を解決するため、本発明の第2の特徴を有するプロセッサは、並列実行が可能な複数の命令を記憶する命令記憶部と、前記命令記憶部で同時に記憶されている前記複数の命令の各々を解読する解読部と、前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、前記演算部で実行される演算の結果に応じて、各々が真または偽を示す値を保持する複数の条件フラグレジスタを備えたプロセッサであって、前記プロセッサは、実行が可能な命令セット中に、命令コードにおいて、少なくとも2つのオペランドの指定、前記少なくとも2つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも2つの指定を行う比較命令、および当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも1つの指定を行い、指定された前記少なくとも1つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群を含んでおり、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記条件実行命令群の第1の条件実行命令を含んでいた場合、前記解読部における前記比較命令の解読の結果に応じて、前記演算部において前記比較命令の命令コード中で指定される少なくとも2つのオペランドの値が前記比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第1条件フラグ値の算出、前記第1条件フラグ値を論理否定した第2条件フラグ値の算出、前記第1条件フラグ値の前記比較命令の命令コード中で指定される第1の条件フラグレジスタへの格納、および前記第2条件フラグ値の前記比較命令の命令コード中で指定される第2の条件フラグレジスタへの格納を実行し、前記第1条件フラグ値または前記第2条件フラグ値のいずれか一方に応じて前記第1の条件実行命令の演算の結果が有効となるか無効となるかが決定されることを特徴とする。
また、本発明の第2の特徴を有するプロセッサにおいて、前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記第1の条件実行命令の他に、さらに前記条件実行命令群に属する第2の条件実行命令を含んでいた場合に、前記第1条件フラグ値に応じて前記第1の条件実行命令の演算の結果が有効となるか無効となるかが決定され、前記第2条件フラグ値に応じて前記第2の条件実行命令の演算の結果が有効となるか無効となるかが決定されるものであっても良い。
(1)本発明のプロセッサは、第1比較条件の成否を示す第1条件フラグ値を記憶している条件フラグレジスタと、第2比較条件の成否を示す真偽値を算出し、当該真偽値と前記第1条件フラグ値とを論理演算することにより第2条件フラグ値を算出する演算手段とを備える。
この構成によれば、前記第1条件フラグ値を算出し、条件フラグレジスタに記憶させるための第1の比較命令と、当該第2条件フラグ値を算出するための第2の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第2条件フラグ値を算出できる。即ち当該プロセッサは、複数の比較条件を複合して定まる複合比較条件の成否を示す条件フラグ値を、当該第1及び第2の比較命令に応じて算出することができる。
これにより、当該プロセッサは、当該条件フラグ値を実行条件とする条件実行命令を含み、かつ分岐命令を含まないプログラムによって、複合条件処理を実行できるので、当該プロセッサは、分岐命令を含まない従来よりも小規模なプログラムによって、複合条件処理を従来よりも短時間で実行する。
前記第2条件フラグ値を、前記第1条件フラグ値に代えて、又は前記1条件フラグ値と共に条件フラグレジスタに記憶し、さらに、前記第2条件フラグ値を用いて新たな条件フラグ値を算出することにより、当該プロセッサは、3以上の比較条件を複合して定まる複合比較条件に基づく複合比較条件の成否を示す条件フラグ値を算出できる。
(2)また、前記(1)のプロセッサにおいて、前記演算手段は、さらに、前記第2条件フラグ値の論理否定値である第3条件フラグ値を算出してもよい。
この構成によれば、前記第2条件フラグ値と当該第3条件フラグ値との双方を算出するための第3の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す2つの条件フラグ値を算出できる。
当該プロセッサは、当該条件フラグ値のそれぞれを実行条件とする条件実行命令を用い、かつ分岐命令を用いないプログラムによって、if-then-else型の複合条件処理を実行できる。
これにより、当該プロセッサは、分岐命令を用いない従来よりも小規模なプログラムによって、if-then-else型の複合条件処理を従来よりも短時間で実行する。
(3)また、前記(1)のプロセッサにおいて、前記演算手段は、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第1条件フラグ値とを論理演算することにより第4条件フラグ値を算出してもよい。
この構成によれば、前記第2条件フラグ値と当該第4条件フラグ値との双方を算出するための第4の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第1条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す2つの条件フラグ値を算出できる。
入れ子構造になっている条件処理において、前記第1条件フラグ値が、内側のif-then-else型の条件処理を実行すべき条件を示す場合、前記算出される2つの条件フラグ値は、それぞれ当該内側のthen部及びelse部を実行するための条件実行命令の実行条件を表す。
これにより、当該プロセッサは、当該2つの条件フラグ値のそれぞれを実行条件とする条件実行命令を用い、かつ分岐命令を用いないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
これにより、当該プロセッサは、分岐命令を用いない従来よりも小規模なプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を従来よりも短時間で実行する。
(4)本発明のプロセッサは、単一のクロックサイクルにおいて、第1比較条件の成否を示す第1条件フラグ値を算出するとともに、第2比較条件の成否を示す真偽値を算出し、当該真偽値と前記第1条件フラグ値とを論理演算することにより第2条件フラグ値を算出する演算手段を備える。
この構成によれば、当該第1条件フラグ値を算出するための第1の比較命令と、当該第2条件フラグ値を算出するための第2の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第2条件フラグ値を算出できる。当該プロセッサは、当該第1及び第2の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
これにより、当該プロセッサは、前記(1)の効果を有し、さらに、当該第1及び第2の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、複合条件処理を前記(1)のプロセッサよりも短時間で実行する。
前記第2条件フラグ値を、前記第1条件フラグ値に代えて、又は前記1条件フラグ値と共に条件フラグレジスタに記憶し、さらに、前記(1)のプロセッサと組み合わせることにより、前記第2条件フラグ値を用いて新たな条件フラグ値を算出すれば、当該プロセッサは、複数のクロックサイクルに渡って3以上の比較条件を複合して定まる複合比較条件に基づく複合比較条件の成否を示す条件フラグ値を算出できる。
(5)また、前記(4)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第2条件フラグ値の論理否定値である第3条件フラグ値を算出してもよい。
この構成によれば、前記第2条件フラグ値と当該第3条件フラグ値との双方を算出するための第3の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較判断結果の成立、不成立それぞれを示す2つの条件フラグ値を算出できる。当該プロセッサは、前記第1及び第3の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
これにより、当該プロセッサは、前記(2)の効果を有し、さらに、前記第1及び第3の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を前記(2)のプロセッサよりも短時間で実行する。
(6)また、前記(4)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記比較演算の結果値の論理否定値を算出してもよい。
この構成によれば、前記第2条件フラグ値と当該第4条件フラグ値との双方を算出するための第4の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第1条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す2つの条件フラグ値を算出できる。当該プロセッサは、前記第1及び第4の比較命令を、単一のクロックサイクルにおいて並列処理することができる。
これにより、当該プロセッサは、前記(3)の効果を有し、さらに、前記第1及び第4の比較命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を前記(3)のプロセッサよりも短時間で実行する。
(7)本発明のプロセッサは、単一のクロックサイクルにおいて、第1比較条件の成否を示す真偽値を算出し、当該真偽値に基づいて第1条件フラグ値を算出するとともに、条件実行命令に応じた演算を行う演算手段と、前記クロックサイクルにおいて、当該第1条件フラグ値に応じて当該条件実行命令に応じて行われた演算の結果を無効化する無効化手段とを備える。
この構成によれば、当該プロセッサは、当該第1条件フラグ値を算出するための比較命令と、当該条件実行命令とを、単一のクロックサイクルにおいて並列処理し、かつ当該クロックサイクルにおいて、当該第1条件フラグ値に応じて当該条件実行命令を無効化することができる。
これにより、当該プロセッサは、当該比較命令と当該条件実行命令とを含む条件処理プログラムを実行する場合、両命令を単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、従来よりも短時間で実行することができる。
(8)また、前記(7)のプロセッサは、さらに、第2比較条件の成否を示す第2条件フラグ値を記憶している条件フラグレジスタを備え、前記演算手段は、前記クロックサイクルにおいて、前記真偽値と当該第2条件フラグ値とを論理演算することにより前記第1条件フラグ値を算出してもよい。
この構成によれば、当該第2条件フラグ値を算出して条件フラグレジスタに記憶させるための第1の比較命令と、当該第1条件フラグ値を算出するための第2の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第1条件フラグ値を算出できる。
即ち当該プロセッサは、当該第1の比較命令と、当該第2の比較命令と、前記条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、複合条件処理を実行できる。
この場合、当該プロセッサは、当該プログラムを実行する場合、当該第2の比較命令と前記条件実行命令とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、従来よりも短時間で実行する。
(9)また、前記(8)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第1条件フラグ値の論理否定値である第3条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第1条件フラグ値又は当該第3条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
この構成によれば、前記第1条件フラグ値と当該第3条件フラグ値との双方を算出するための第3の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す2つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第1及び第3の比較命令と、前記第1条件フラグ値を実行条件とする第1の条件実行命令と、前記第3条件フラグ値を実行条件とする第2の条件実行命令とを用い、かつ分岐命令を用いないプログラムによって、if-then-else型の複合条件処理を実行できる。
この場合、当該プロセッサは、当該第3の比較命令と、当該第1の条件実行命令及び当該第2の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を従来よりも短時間で実行する。
(10)また、前記(8)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第2条件フラグ値とを論理演算することにより第4条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第1条件フラグ値又は当該第4条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
この構成によれば、前記第1条件フラグ値と当該第4条件フラグ値との双方を算出するための第4の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第2条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す2つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第1及び第4の比較命令と、前記第1条件フラグ値を実行条件とする第1の条件実行命令と、前記第4条件フラグ値を実行条件とする第2の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
この場合、当該プロセッサは、当該第4の比較命令と、当該第1の条件実行命令及び当該第2の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を従来よりも短時間で実行する。
(11)また、前記(7)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、第2比較条件の成否を示す第2条件フラグ値を算出するとともに、前記真偽値と当該第2条件フラグ値とを論理演算することにより前記第1条件フラグ値を算出してもよい。
この構成によれば、当該第2条件フラグ値を算出するための第1の比較命令と、当該第1条件フラグ値を算出するための第2の比較命令とを、命令セットに設け、当該プロセッサはこれらの比較命令を実行することによって、複数の比較条件各々の成否を示す真偽値を直接に演算して当該第1条件フラグ値を算出できる。
これにより、当該プロセッサは、前記(8)の効果を有し、さらに、当該第1及び第2の比較命令、並びに前記条件実行命令を、単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、複合条件処理を前記(8)のプロセッサよりも短時間で実行する。
(12)また、前記(11)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記第1条件フラグ値の論理否定値である第3条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第1条件フラグ値又は当該第3条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
この構成によれば、前記第1条件フラグ値と当該第3条件フラグ値との双方を算出するための第3の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、比較条件の成立、不成立それぞれを示す2つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第1及び第3の比較命令と、前記第1条件フラグ値を実行条件とする第1の条件実行命令と、前記第3条件フラグ値を実行条件とする第2の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、if-then-else型の複合条件処理を実行できる。
これにより、当該プロセッサは、前記(9)の効果を有し、さらに、前記第1及び第3の比較命令と、当該第1の条件実行命令及び当該第2の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、if-then-else型の複合条件処理を前記(9)のプロセッサよりも短時間で実行する。
(13)また、前記(11)のプロセッサにおいて、前記演算手段は、前記クロックサイクルにおいて、さらに、前記真偽値の論理否定値を算出し、当該論理否定値と前記第2条件フラグ値とを論理演算することにより第4条件フラグ値を算出し、前記無効化手段は、前記クロックサイクルにおいて、前記第1条件フラグ値又は当該第4条件フラグ値の何れかに応じて前記条件実行命令に応じて行われた演算の結果を無効化してもよい。
この構成によれば、前記第1条件フラグ値と当該第4条件フラグ値との双方を算出するための第4の比較命令を命令セットに設け、当該プロセッサはこの比較命令を実行することによって、前記第2条件フラグ値に応じて、比較条件の成立、不成立それぞれを示すか、若しくは、共に不成立を示す2つの条件フラグ値を算出できる。
即ち当該プロセッサは、前記第1及び第4の比較命令と、前記第1条件フラグ値を実行条件とする第1の条件実行命令と、前記第4条件フラグ値を実行条件とする第2の条件実行命令とを含み、かつ分岐命令を含まないプログラムによって、入れ子構造になっているif-then-else型の複合条件処理を実行できる。
この場合、当該プロセッサは、前記第1及び第4の比較命令と、当該第1の条件実行命令及び当該第2の条件実行命令の一方又は両方とを単一のクロックサイクルにおいて並列処理することによって実行並列度を高めるので、入れ子構造になっているif-then-else型の複合条件処理を前記(10)のプロセッサよりも短時間で実行する。
(14)本発明のプログラム変換方法は、対象プログラムコードから、第1比較条件の成否を評価する処理を記述している第1部分と、当該第1比較条件が成否何れかの場合に実行されるべき処理を記述している第2部分とを識別する識別ステップと、当該第1部分を、当該第1比較条件の成否を表す第1条件フラグ値を算出するための第1命令列に変換する第1変換ステップと、当該第2部分を、当該第1条件フラグ値に応じて無効化される条件実行命令からなる第2命令列に変換する第2変換ステップとを含み、当該第1命令列及び当該第2命令列は何れも分岐命令を含まないことを特徴とする。
この方法によれば、条件処理を行うための、分岐命令を含まず、当該対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムが生成される。
(15)また、前記(14)のプログラム変換方法において、前記識別ステップは、さらに、当該対象プログラムコードから、前記第1比較条件の成否が、前記第2部分が実行されるべき場合と逆の場合に実行されるべき処理を記述している第3部分を識別し、前記第1変換ステップは、前記第1部分を、前記第1条件フラグ値、及びその論理否定値である第2条件フラグ値を算出するための第3命令列に変換し、前記プログラム変換方法は、さらに、当該第3部分を、当該第2条件フラグ値に応じて無効化される条件実行命令からなる第4命令列に変換する第3変換ステップを含み、当該第3命令列及び当該第4命令列は何れも分岐命令を含まないとしてもよい。
この方法によれば、if-then-else型の条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
(16)また、前記(14)のプログラム変換方法において、前記第1比較条件の成否は、複数の個別比較条件の成否に応じて定まり、前記第1変換ステップは、前記第1部分を、当該個別条件の成否を表す条件フラグ値を算出し、当該条件フラグ値を論理演算することにより前記第1条件フラグ値を算出するための前記第1命令列に変換してもよい。
この方法によれば、複合条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
(17)また、前記(14)のプログラム変換方法において、前記識別ステップは、さらに、前記第2部分から、第2比較条件の成否を評価する処理を記述している第3部分と、当該第2比較条件が成否何れかの場合に実行されるべき処理を記述している第4部分とを識別し、前記第1変換ステップは、当該第3部分を、当該第2比較条件の成否を表す第2条件フラグ値を算出し、当該第2条件フラグ値と前記第1条件フラグ値とを論理演算することにより第3条件フラグ値を算出するための第3命令列に変換し、前記第2変換ステップは、当該第4部分を、当該第3条件フラグ値に応じて無効化される条件実行命令からなる第4命令列に変換し、当該第3命令列及び当該第4命令列は、何れも分岐命令を含まないとしてもよい。
この方法によれば、入れ子構造になっている条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
(18)また、前記(17)のプログラム変換方法において、前記識別ステップは、さらに、前記第2部分から、前記第2比較条件の成否が、前記第4部分が実行されるべき場合と逆の場合に実行されるべき処理を記述している第5部分を識別し、前記第1変換ステップは、前記第3部分を、前記第2条件フラグ値及びその論理否定値を算出し、その各々を前記第1条件フラグ値と論理演算することにより、それぞれ前記第3条件フラグ値及び第4条件フラグ値を算出するための第5命令列に変換し、前記第2変換ステップは、さらに、当該第5部分を、当該第4条件フラグ値に応じて無効化される条件実行命令からなる第6命令列に変換し、当該第5命令列及び当該第6命令列は、何れも分岐命令を含まないとしてもよい。
この方法によれば、入れ子構造になっているif-then-else型の条件処理を行うための、分岐命令を含まず、前記対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて、前記対象プログラムコードよりも短時間で実行されるプログラムが生成される。
(19)本発明のプログラム変換方法は、第1比較命令に応じて行われる条件フラグ値の算出処理と、第2命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換方法であって、対象プログラムにおいて、当該第1比較命令と、当該第1比較命令の実行完了後に実行されるべき第3命令と、当該第3命令よりも後に記述されている当該第2命令とを識別する識別ステップと、当該識別された第3命令と第2命令とを並べ替える再配置ステップとを含む。
この方法によれば、当該対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令が一連配置され、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もって実行時間が短縮される。
(20)また、前記(19)のプログラム変換方法は、さらに、前記並べ替え後の第1比較命令と第2命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成ステップを含んでもよい。
この方法によれば、前記(19)と同様効果を有するプログラムが生成される。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
(21)また、前記(19)のプログラム変換方法において、比較条件の成否を示す真偽値を算出し、当該真偽値と前記条件フラグ値とを論理演算することにより、新たな条件フラグ値を算出する処理であるとしてもよい。
(22)また、前記(19)のプログラム変換方法において、前記所定処理は、前記条件フラグ値に応じて前記第2命令本来の処理結果を無効化する処理であるとしてもよい。
これらの方法によれば、前記(19)と同様効果を有するプログラムが生成される。
(23)本発明のプログラム変換装置は、対象プログラムコードから、第1比較条件の成否を評価する処理を記述している第1部分と、当該第1比較条件が成否何れかの場合に実行されるべき処理を記述している第2部分とを識別する識別手段と、当該第1部分を、当該第1比較条件の成否を表す第1条件フラグ値を算出するための第1命令列に変換する第1変換手段と、当該第2部分を、当該第1条件フラグ値に応じて無効化される条件実行命令からなる第2命令列に変換する第2変換手段とを備え、当該第1命令列及び当該第2命令列は何れも分岐命令を含まないことを特徴とする。
この構成によれば、当該プログラム変換装置は、条件処理を行うための、分岐命令を含まず、当該対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムを生成する。
(24)本発明のプログラム変換装置は、第1比較命令に応じて行われる条件フラグ値の算出処理と、第2命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置であって、対象プログラムにおいて、当該第1比較命令と、当該第1比較命令の実行完了後に実行されるべき第3命令と、当該第3命令よりも後に記述されている当該第2命令とを識別する識別手段と、当該識別された第3命令と第2命令とを並べ替える再配置手段とを備える。
この構成によれば、当該プログラム変換装置は、当該対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令を一連配置し、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もってプログラムの実行時間を短縮する。
(25)また、前記(24)に記載のプログラム変換装置は、さらに、前記並べ替え後の第1比較命令と第2命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成手段を備えてもよい。
この構成によれば、当該プログラム変換装置は、前記(24)と同様効果を有するプログラムを生成する。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
(26)本発明のプログラム変換プログラムは、第1比較命令に応じて行われる条件フラグ値の算出処理と、第2命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置を、コンピュータを用いて実現するためのコンピュータ実行可能なプログラムであって、変換対象プログラムコードから、第1比較条件の成否を評価する処理を記述している第1部分と、当該第1比較条件が成否何れかの場合に実行されるべき処理を記述している第2部分とを識別する識別ステップと、当該第1部分を、当該第1比較条件の成否を表す第1条件フラグ値を算出するための第1命令列に変換する第1変換ステップと、当該第2部分を、当該第1条件フラグ値に応じて無効化される条件実行命令からなる第2命令列に変換する第2変換ステップとを前記コンピュータに実行させ、当該第1命令列及び当該第2命令列は何れも分岐命令を含まないことを特徴とする。
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、条件処理を行うための、分岐命令を含まず、当該変換対象プログラムコードよりも小規模で、かつ前記(1)乃至(13)の各プロセッサにおいて当該対象プログラムコードよりも短時間で実行されるプログラムを生成する。
(27)本発明のプログラム変換プログラムは、第1比較命令に応じて行われる条件フラグ値の算出処理と、第2命令に応じて当該条件フラグ値を参照して行われる所定処理とを並列実行可能なプロセッサを対象としたプログラム変換装置を、コンピュータを用いて実現するためのコンピュータ実行可能なプログラムであって、変換対象プログラムにおいて、当該第1比較命令と、当該第1比較命令の実行完了後に実行されるべき第3命令と、当該第3命令よりも後に記述されている当該第2命令とを識別する識別ステップと、当該識別された第3命令と第2命令とを並べ替える再配置ステップとを前記コンピュータに実行させることを特徴とする。
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、当該変換対象プログラムコードに含まれる、当該対象プロセッサにおいて並列実行可能な命令を一連配置し、当該対象プログラムコードに対して、変換後のプログラムの実行並列度が向上するので、もってプログラムの実行時間を短縮する。
(28)また、前記(27)のプログラムは、さらに、前記並べ替え後の第1比較命令と第2命令とが並列実行可能であることを示す並列実行境界情報を生成する並列実行境界情報生成ステップを前記コンピュータに実行させてもよい。
この構成によれば、当該プログラムにより実現されるプログラム変換装置は、前記(27)と同様効果を有するプログラムを生成する。当該生成されたプログラムにおいて並列実行可能な命令群は、当該並列実行境界情報により示されるので、対象プロセッサは並列実行可能な命令群を判定するための回路を備える必要がない。
(29)本発明のプログラム記録媒体は、コンピュータ読み取り可能な記録媒体であって、前記(26)乃至(28)の何れかのプログラムを記録していることを特徴とする。
この構成によれば、当該プログラム記録媒体は、前記(26)乃至(28)の何れかのプログラムを記録し、所期のコンピュータに移送して実行させることにより、前記(26)乃至(28)の何れかと同様効果を有するプログラム変換装置を実現する。
<1.プロセッサ>
本実施の形態におけるプロセッサは、第1条件フラグ値と、比較命令に応じた比較演算の結果値とを論理演算することにより第2条件フラグ値を算出する機能を有する。当該第1条件フラグ値は、当該第2条件フラグ値の算出が行われるクロックサイクルにおいて条件フラグレジスタから読み出される値であってもよく、当該クロックサイクルにおいて並列実行される他の比較命令に応じて算出される値であってもよい。
また、当該プロセッサは、単一クロックサイクルにおいて条件フラグ値の算出と、条件実行命令に応じた処理を並列実行し、当該算出される条件フラグ値に応じて条件実行命令の実行結果を無効化する第2の機能を有する。
以下、本実施の形態におけるプロセッサについて、図面を参照しながら詳細に説明する。
<1.1 全体構成>
図1は、本実施の形態におけるプロセッサの全体構成を示すブロック図である。プロセッサ10は、命令供給部20、解読部30、及び実行部50から構成される。
プロセッサ10における全体構成、並びに命令供給部20及び解読部30は、従来のプロセッサ90における全体構成、並びに命令供給部20及び解読部30と同一であるため説明を省略し、実行部50がプロセッサ90における実行部40と異なる点について主として説明する。
<1.2 実行部50の構成>
図2は、実行部50の構成を示すブロック図である。実行部50は、実行部40が備えている各構成要素に加えて、条件フラグ演算部51を備えている。実行部40の構成要素と同一の構成要素には同一の符号を付し、詳細な説明を省略する。
1つのクロックサイクルの前半期間において、実行部50における演算部441乃至443は、実行制御部52から与えられる制御信号に応じて、データバス48を介して供給されるオペランドデータに対し、所定の演算を行う。特に比較演算を行った場合、その結果である真値又は偽値を、条件フラグ演算部51へ出力する。
条件フラグ演算部51は、実行制御部52から与えられる制御信号に応じて、条件フラグレジスタ46から読み出した値又は演算部441乃至443から与えられた比較演算の結果値を単に通過させ、若しくは、条件フラグレジスタ46から読み出した値と当該比較演算の結果値とを論理演算し、又は当該比較演算の結果値どうしを論理演算することにより、条件フラグレジスタ46に記憶させるべき条件フラグ値を算出する。
条件フラグ演算部51は、当該算出した値を、条件フラグレジスタ46へ出力すると共に、ゲート451乃至453のうち条件実行命令に応じた処理を行うゲートへも出力する。
前記クロックサイクルの後半期間において、条件フラグ演算部51から条件フラグ値を与えられたゲートは、当該条件フラグ値が真値である場合に、対応する演算部から与えられた演算結果をデータバス49を介してレジスタファイル43へ出力し、偽値である場合に当該結果を破棄する。
また、条件フラグレジスタ46は、条件フラグ演算部51から与えられた値を記憶する。
<1.3 条件フラグ演算部51の構成>
図3は、条件フラグ演算部51の構成を示すブロック図である。条件フラグ演算部51は、論理演算回路501乃至503と、セレクタ510乃至553とから構成される。
SF1乃至SF3、SE1乃至SE3、SG1乃至SG3、及びS10乃至S36は、それぞれ所定の制御信号が実行制御部52から与えられる。
C0in乃至C6inには、それぞれ条件フラグレジスタC0乃至C6に記憶されている値が読み出されて入力される。E1乃至E3には、それぞれ演算部441乃至443によって行われた比較演算の結果値が入力される。
C0out乃至C6outには、それぞれ条件フラグレジスタC0乃至C6に記憶されるべき値が出力される。G1乃至G3には、それぞれゲート451乃至453を制御するための値が出力される。
以下、演算部441及びゲート451に対応するデータを処理する論理演算回路501とセレクタ510乃至516、541、及び551について、代表して説明する。
セレクタ541は、直前のクロックサイクルまでに算出され条件フラグレジスタC0乃至C6の何れかに記憶されている条件フラグ値、又は、当該クロックサイクルの前半期間の所定時期までに論理演算回路502又は503によって算出された条件フラグ値を、制御信号SF1に応じて選択し、論理演算回路501へ出力する。
論理演算回路501は、演算部441による比較演算の結果値E1とセレクタ541により選択された値C1とに対して、制御信号SE1に応じた論理演算を行うことにより1つ又は2つの値を、前記所定時期までに算出し、当該算出された値をA1にのみ、又はA1及びB1に出力する。当該論理演算回路の構成と、当該論理演算回路が行う論理演算については、後に詳述する。
セレクタ510乃至516は、それぞれ条件フラグレジスタC0乃至C6に対応して設けられており、A1、B1、又は対応する条件フラグレジスタから読み出した値の何れかを、それぞれ制御信号S10乃至S16に応じて選択して出力する。
セレクタ551は、セレクタ510乃至516を介して選択され、条件フラグレジスタC0乃至C6の何れかに記憶されることとなる値を、制御信号SG1に応じて選択して出力する。
同様構成によって、論理演算回路502とセレクタ520乃至526、542、及び552は、演算部442及びゲート452に対応するデータを処理し、論理演算回路503とセレクタ530乃至536、543、及び553は、演算部443及びゲート453に対応するデータを処理する。
この構成によって、条件フラグ演算部51における論理演算回路501乃至503は、クロックサイクルの前半期間において、第1条件フラグ値と、比較命令に応じて演算部441乃至443によって行われた比較演算の結果値とを論理演算して第2条件フラグ値を算出する。
当該第1条件フラグ値は、直前のクロックサイクルまでに算出され条件フラグレジスタC0乃至C6の何れかに記憶されていてもよく、また、当該クロックサイクルの前半期間の所定時期までに他の論理演算回路によって算出される値であってもよい。
当該第2条件フラグ値は、当該クロックサイクルの後半期間において、ゲート451乃至453を制御することによって条件実行命令に応じて行われた演算結果を無効化するとともに、条件フラグレジスタ46に記憶される。
<1.4 論理演算回路501の構成>
図4は、論理演算回路501の構成を示すブロック図である。論理演算回路501は、論理積演算器601、論理否定演算器602、論理和演算器603、論理否定演算器604及び605、論理積演算器606、並びにセレクタ607及び608から構成される。
E1には、演算部441による比較演算の結果値が与えられる。
C1には、セレクタ541の出力値が与えられる。当該出力値は、条件フラグレジスタC0乃至C6の何れかに保持されている値か、又は論理演算回路502又は503によって算出された値である。
A1及びB1には、それぞれセレクタ607及び608によって選択された値が出力される。
以下、論理積演算、論理和演算、及び論理否定演算を、それぞれ記号&、|、及び〜と表記する。
論理積演算器601は(E1&C1)を算出し、論理否定演算器602は〜(E1&C1)を算出する。
論理和演算器603は(E1|C1)を算出し、論理否定演算器604は〜(E1|C1)を算出する。
論理否定演算器605は、〜E1を算出し、論理積演算器606は、(〜E1&C1)を算出する。
セレクタ607及び608は、制御信号SE1に応じて、これらの算出値を選択し、次の(1)乃至(4)の何れかに従ってA1及びB1に出力する。
(1)A1: E1、 B1: 〜E1
(2)A1:(E1&C1)、B1:〜(E1&C1)
(3)A1:(E1|C1)、B1:〜(E1|C1)
(4)A1:(E1&C1)、B1:(〜E1&C1)
なお、論理演算回路502及び503の構成は、論理演算回路501と同一である。
<1.5 命令セットと制御信号の詳細>
図5は、プロセッサ10が実行する比較命令の一覧である。命令欄は各命令のニーモニック及びオペランドを表し、意味欄は各命令に応じてプロセッサ10が行う処理を表す。
図6は、当該ニーモニック表記のCCの部分に応じて指定される比較演算の一覧である。
以下、文脈に応じて、条件フラグレジスタCmを単にCmと表記し、汎用レジスタRaを単にRaと表記する。
<1.5.1 cmpCC命令>
cmpCC命令は、CCの部分に図6に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタCm及びCn、並びに汎用レジスタRa及びRbをオペランドとし、Cnは省略できる。ここで、m及びnは、それぞれ条件フラグレジスタを指定する0乃至7の何れかの数字であり、a及びbは、それぞれ汎用レジスタを指定する0乃至63の何れかの数字である。
cmpCC Cm:Cn,Ra,Rb命令に応じて、実行部50は、Ra及びRbに記憶されている値に対してCCにより指定される比較演算を行い、当該比較演算の結果値resultをCmに記憶し、その論理否定値〜(result)をCnに記憶する。
この命令は、実行部50において実行制御部52が具体的に次のような制御信号を発することによって処理される。
実行制御部52は、クロックサイクルが開始されると、当該比較命令を処理すべき演算部441乃至443の何れかに、データバス48を介して汎用レジスタRa及びRbに保持されている値を供給し、当該演算部は、CCにより指定される比較演算を実行する。当該演算部は、その結果値を対応する論理演算回路へ出力する。
ここで、演算部441が当該比較演算を実行し、その結果を論理演算回路501へ出力した場合について、代表して説明する。
実行制御部52は、論理演算回路501に対し、演算部441による比較演算結果E1及び論理否定演算器605の出力を、それぞれA1及びB1として選択するための制御信号SE1を与える。
また、セレクタ51m、52m、及び53mに対し、A1を選択するための制御信号S1m、S2m、及びS3mを与え、セレクタ51n、52n、及び53nに対し、B1を選択するための制御信号S1n、S2n、及びS3nを与える(ここで、m及びnは、当該比較命令により指定された具体的な数値である)。
このように与えられた制御信号に応じて、セレクタ53m及びセレクタ53nの出力値は、それぞれresult及び〜(result)に確定する。実行部50の各構成要素を所定の伝播遅延時間を満たす素子で構成することにより、当該出力値はクロックサイクルの前半期間の所定時期までに確定する。
同一クロックサイクルにおいて、演算部442又は演算部443が条件フラグ値Cm又はCnを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ552又は553は前記出力値を選択し、ゲート452又はゲート453を制御することによって、当該条件実行命令の実行結果を無効化する。
Cm及びCnは、当該クロックサイクルの終了時に前記出力値を記憶する。
cmpCC Cm,Ra,Rb命令に対する制御信号は、前述した制御信号から、論理演算回路501の出力B1及び条件フラグレジスタCnに関する制御信号を省いたものである。
cmpCC命令を演算部442又は演算部443が処理する場合について、同様制御信号にて制御できるため説明を省略する。
<1.5.2 cmpCCa命令>
cmpCCa命令は、CCの部分に図6に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタCm、Cn、及びCk、並びに汎用レジスタRa及びRbをオペランドとし、Cnは省略できる。ここで、m、n及びkは、それぞれ条件フラグレジスタを指定する0乃至7の何れかの数字であり、a及びbは、それぞれ汎用レジスタを指定する0乃至63の何れかの数字である。
cmpCCa Cm:Cn,Ra,Rb,Ck命令に応じて、実行部50は、Ra及びRbに記憶されている値に対してCCにより指定される比較演算を行い、当該比較演算の結果値resultとCkの値との論理積値(result&Ck)を算出してCmに記憶し、その論理否定値〜(result&Ck)をCnに記憶する。
ここで、Ckの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されCkに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
この命令は、実行部50において実行制御部52が具体的に次のような制御信号を発することによって処理される。
実行制御部52は、クロックサイクルが開始すると、当該比較命令を処理すべき演算部441乃至443の一つに、データバス48を介して汎用レジスタRa及びRbに保持されている値を供給し、当該演算部は、CCにより指定される比較演算を実行する。当該演算部は、その結果値を対応する論理演算回路へ出力する。
ここで、演算部441が当該比較演算を実行し、その結果を論理演算回路501へ出力した場合について、代表して説明する。
実行制御部52は、論理演算回路501に対し、論理積演算器601及び論理否定演算器602の出力を、それぞれA1及びB1として選択するための制御信号SE1を与える。
また、条件フラグCkの値が、過去のクロックサイクルにおいて算出され、既に条件フラグレジスタCkに記憶されている場合、セレクタ51k、52k及び53kに対し、Ckinへの入力を単に通過させるための制御信号S1k、S2k、及びS3kを与えると共に、セレクタ541に対し、Ckinに入力された値を選択するための制御信号SF1を与える。
一方、条件フラグCkの値が、当該クロックサイクルにおいて並列処理される他の比較命令に応じて算出され、論理演算回路502又は論理演算回路503から得られる場合、セレクタ52k及び53kに対し、当該論理演算回路からの出力を選択するための制御信号を与えると共に、セレクタ541に対し、セレクタ53kからの出力値を選択するための制御信号SF1を与える。
また、セレクタ51m、52m、及び53mに対し、A1を選択するための制御信号S1m、S2m、及びS3mを与え、セレクタ51n、52n、及び53nに対し、B1を選択するための制御信号S1n、S2n、及びS3nを与える(ここで、m、n及びkは、当該比較命令により指定された具体的な数値である)。
このように与えられた制御信号に応じて、セレクタ53m及びセレクタ53nの出力値は、それぞれ(result&Ck)及び〜(result&Ck)に確定する。実行部50の各構成要素を所定の伝播遅延時間を満たす素子で構成することにより、当該出力値はクロックサイクルの前半期間の所定時期までに確定する。
当該クロックサイクルにおいて、演算部442又は演算部443が条件フラグ値Cm又はCnを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ552又は553は前記出力値を選択し、ゲート452又はゲート453を制御することによって、当該条件実行命令の実行結果を無効化する。
Cm及びCnは、当該クロックサイクルの終了時に前記出力値を記憶する。
cmpCCa Cm,Ra,Rb,Ck命令に対する制御信号は、前述した制御信号から、論理演算回路501の出力B1及び条件フラグレジスタCnに関する制御信号を省いたものである。
cmpCCa命令を演算部442又は演算部443が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
なお、m又はnとkとが同一であっても構わない。この場合、条件フラグ演算部51はクロックサイクルの前半期間においてCkを読み出し、比較演算結果と論理演算することにより新たな条件フラグ値を算出し、Ckは当該クロックサイクルの終了時に当該新たな条件フラグ値で内容を更新する。
<1.5.3 cmpCCo命令>
cmpCCo命令は、CCの部分に図6に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタCm、Cn、及びCk、並びに汎用レジスタRa及びRbをオペランドとし、Cnは省略できる。ここで、m、n及びkは、それぞれ条件フラグレジスタを指定する0乃至7の何れかの数字であり、a及びbは、それぞれ汎用レジスタを指定する0乃至63の何れかの数字である。
cmpCCo Cm:Cn,Ra,Rb,Ck命令に応じて、実行部50は、Ra及びRbに記憶されている値に対してCCにより指定される比較演算を行い、当該比較演算の結果値resultとCkの値との論理積値(result|Ck)を算出してCmに記憶し、その論理否定値〜(result|Ck)をCnに記憶する。
ここで、Ckの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されCkに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
この命令に応じて、実行制御部52が発する制御信号は、論理演算回路に対し、論理和演算器603及び論理否定演算器604の出力を、それぞれA1及びB1として選択するための制御信号SE1を与える点を除いて、cmpCCa命令に対する制御信号と同様である。
セレクタ53m及びセレクタ53nの出力値は、クロックサイクルの前半期間の所定時期までに、それぞれ(result|Ck)及び〜(result|Ck)に確定する。
当該クロックサイクルにおいて、演算部442又は演算部443が条件フラグ値Cm又はCnを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ552又は553は前記出力値を選択し、ゲート452又はゲート453を制御することによって、当該条件実行命令の実行結果を無効化する。
Cm及びCnは、当該クロックサイクルの終了時に前記出力値を記憶する。
cmpCCo Cm,Ra,Rb,Ck命令に対する制御信号は、前述した制御信号から、論理演算回路501の出力B1及び条件フラグレジスタCnに関する制御信号を省いたものである。
cmpCCo命令を演算部442又は演算部443が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
なお、m又はnとkとが同一であっても構わない。
<1.5.4 cmpCCn命令>
cmpCCn命令は、CCの部分に図6に示した比較演算の何れかを指定する文字が表記された命令の総称である。各命令は、条件フラグレジスタCm、Cn、及びCk、並びに汎用レジスタRa及びRbをオペランドとし、Cnは省略できる。ここで、m、n及びkは、それぞれ条件フラグレジスタを指定する0乃至7の何れかの数字であり、a及びbは、それぞれ汎用レジスタを指定する0乃至63の何れかの数字である。
cmpCCn Cm:Cn,Ra,Rb,Ck命令に応じて、実行部50は、Ra及びRbに記憶されている値に対してCCにより指定される比較演算を行い、当該比較演算の結果値result及びその論理否定値〜resultのそれぞれとCkの値との論理積値(result&Ck)及び(〜result&Ck)を算出し、前者をCmに記憶し、後者をCnに記憶する。
ここで、Ckの値とは、過去のクロックサイクルにおいて比較命令に応じて算出されCkに既に記憶されている値か、又は、同一クロックサイクルにおいて並列処理される他の比較命令に応じて当該クロックサイクルの前半期間の所定時期までに算出される値である。
この命令に応じて、実行制御部52が発する制御信号は、論理演算回路に対し、論理積演算器601及び論理否定演算器602の出力を、それぞれA1及びB1として選択するための制御信号SE1を与える点を除いて、cmpCCa命令に対する制御信号と同様である。
セレクタ53m及びセレクタ53nの出力値は、クロックサイクルの前半期間の所定時期までに、それぞれ(result&Ck)及び(〜result&Ck)に確定する。
当該クロックサイクルにおいて、演算部442又は演算部443が条件フラグ値Cm又はCnを実行条件とする条件実行命令を並列処理している場合、当該クロックサイクルの後半期間において、セレクタ552又は553は前記出力値を選択し、ゲート452又はゲート453を制御することによって、当該条件実行命令の実行結果を無効化する。
Cm及びCnは、当該クロックサイクルの終了時に前記出力値を記憶する。
cmpCCn Cm,Ra,Rb,Ck命令に対する制御信号は、前述した制御信号から、論理演算回路501の出力B1及び条件フラグレジスタCnに関する制御信号を省いたものである。
cmpCCn命令を演算部442又は演算部443が処理する場合について、同様の制御信号にて制御できるため説明を省略する。
なお、m又はnとkとが同一であっても構わない。
<1.5.4 命令フォーマット>
図7は、前記の各比較命令を、コンピュータ資源上において表す場合のフォーマットの一例である。
この例では、1つの比較命令を32ビット長とし、当該32ビットを分割してできる各フィールドにおいて、命令コード、オペランド、実行条件情報、並列実行境界情報を表すものとした。OPは命令コード、Cm、Cn、Ra、Rb及びCkは、上記説明に用いた記号に対応するオペランド、Pは実行条件情報、Eは並列実行境界情報を表すフィールドである。このうち特に、実行条件情報及び並列実行境界情報を表すフィールドは、比較命令を含む全ての命令に共通に設けられる。
比較命令を表すためのフォーマットについては、当該フォーマットに限定するものではなく、また本願発明の主眼ではないので詳細な説明を省略する。
<1.6 動作タイミングの具体例>
プロセッサ10によれば、例えば図36のフローチャートに示した複合条件処理を、図8に示した条件分岐命令を用いない様式のプログラムによって実行させることができる。同図に含まれる命令うち、命令1乃至3のそれぞれの実行ステージが、単一のクロックサイクルにおいて並列処理される場合の、当該クロックサイクル内での詳細な動作タイミングを説明する。
この例は、単一のクロックサイクルにおいて、第1の比較命令、第1の比較命令が算出する条件フラグ値を演算する第2の比較命令、及び第2の比較命令が算出する条件フラグ値に応じて無効化される条件実行命令の、それぞれの実行ステージが並列処理される場合の一具体例であって、プロセッサ10によって新たに並列処理可能となる命令の組み合わせをもって例示している。
図9は、当該実行ステージ内での詳細な処理タイミングチャートである。当該実行ステージは、前半の条件フラグ演算期間と、後半のゲート制御期間とに分かれる。命令1、命令2及び命令3は、それぞれ第1演算器、第2演算器及び第3演算器によって処理されるものとした。
当該実行ステージが開始されると、実行制御部52からの制御信号に応じて、R1バスにレジスタR2の内容が出力され、L1バスに命令1に含まれる即値オペランド値0が出力され、第1演算部441は比較演算(R2≠0)を実行する。
R2バスにレジスタR0の内容、L2バスにレジスタR1の内容が出力され、第2演算部442は比較演算(R0<R1)を実行する。
R3バスにレジスタR0の内容、L3バスに命令3に含まれる即値オペランド値1が出力され、第3演算部443は加算演算(R0+1)を実行する。
これらの各演算は、それぞれの演算器において同時並行して実行され、条件フラグ演算期間における所定時期までに、比較演算(R2≠0)の結果値E1、及び比較演算(R0<R1)の結果値E2が確定する。
E1の値は、論理演算回路501を単に通過してA1に出力され、セレクタ512、522及び532により選択され、C2outへ出力されるとともに、セレクタ542によって選択され論理演算回路502へも入力される。
論理演算回路502は、(E2|C2out)及び〜(E2|C2out)をそれぞれA2及びB2に出力する。セレクタ520及び530はA2を選択し、セレクタ521及び531はB2を選択し、それぞれ条件フラグ演算期間の終了時までに、C0out及びC1outに出力する。
ゲート制御期間において、C0outの値がセレクタ553によって選択され、ゲート453へ与えられる。C0outは真値であるため、第3演算部443によって算出された値(R0+1)はD3バスへ出力される。
実行ステージの終了時に、条件フラグレジスタC0、C1及びC2は、それぞれC0out、C1out及びC2outの値を記憶し、R0レジスタはD1バスに出力された値(R0+1)を記憶する。
なお、ここでもしC0outが偽値であれば、第3演算部443の算出結果(R0+1)はD3バスへ出力されず、命令3は当該実行ステージにおいて無効化されることとなる。
<1.7 まとめ>
以上説明したように、プロセッサ10は、第1条件フラグ値と、比較命令に応じた比較演算の結果値とを論理演算することにより第2条件フラグ値を算出する。当該第1条件フラグ値は、当該第2条件フラグ値の算出が行われるクロックサイクルにおいて条件フラグレジスタから読み出される値であってもよく、当該クロックサイクルにおいて並列実行される他の比較命令に応じて算出される値であってもよい。
また、プロセッサ10は、単一クロックサイクルにおいて条件フラグ値の算出と、条件実行命令に応じた処理を並列実行し、当該算出される条件フラグ値に応じて条件実行命令の実行結果を無効化する。
<2.コンパイラ装置>
本実施の形態におけるコンパイラ装置は、上述したプロセッサ10を対象プロセッサとし、所定の条件処理を記述したプログラムを、分岐命令を含まない命令列に変換する。さらに、当該命令列おいて、実行結果の同一性が保証される限り、当該対象プロセッサによって並列実行可能な命令が一連配置されるように命令を並べ替えるとともに、当該並列実行可能な命令を示す実行境界情報を生成する。
以下、本実施の形態におけるコンパイラ装置について、図面を参照しながら詳細に説明する。
<2.1 全体構成>
図10は、本実施の形態におけるコンパイラ装置100の全体構成を示すブロック図である。
コンパイラ装置100は、ソースファイル180に格納されているソースプログラムに基づいて対象プロセッサによって実行されるべき機械語命令列を生成し、オブジェクトファイル190へ出力するプログラム変換装置である。
本実施の形態では、当該ソースプログラムは、一例としてC言語で記述されているものとし、また、当該機械語命令列は、さらに連結編集処理を受けることによって実行可能な形式に変換されるオブジェクトコードであるとして説明する。
コンパイラ装置100は、コンパイラ上流部110、アセンブラコード生成部120、命令スケジューリング部130、及びオブジェクトコード生成部140から構成される。
アセンブラコード生成部120は、条件処理変換部121を含み、命令スケジューリング部131は、依存関係解析部131及び命令再配置部136を含み、依存関係解析部131は、データ依存判定部132、逆依存判定部133、出力依存判定部134、及び条件フラグ依存判定部135を含む。
コンパイラ装置100は、具体的にはプロセッサ、プログラムを記憶しているROM(Read Only Memory)、作業用のRAM(Random Access Memory)、ディスク装置等のソフトウェア及びハードウェアにより実現される。前記各部の機能は、プロセッサがROMに記憶されているプログラムを実行することにより実現される。前記各部の間におけるデータの受け渡しは、RAM、ディスク装置等のハードウェアを介して行われる。
コンパイラ上流部110は、ソースファイル180からソースプログラムを読み出し、字句解析処理及び構文解析処理を行うことにより、中間コードを生成する。コンパイラ上流部110が行うこれらの処理は、従来のコンパイラにおいて一般的に行われている技術なので、詳細な説明を省略する。
アセンブラコード生成部120は、コンパイラ上流部110により生成された中間コードから、アセンブラコード及び当該アセンブラコードに含まれる基本ブロックを表す基本ブロック情報を生成する。
ここで、基本ブロックとは、先頭命令から末尾命令までが必ず一連実行される命令列であって、途中の命令から実行が開始されることも、途中の命令から他の基本ブロックの命令へ分岐することもない命令列を言う。
アセンブラコード生成部120は、まず、従来のコンパイラと同様の処理を行うことにより、従来様式のアセンブラコードを生成する。このアセンブラコードは、条件処理を表す中間コードに対して分岐命令を用いて生成される。次に、条件処理変換部121は、当該従来様式のアセンブラコードを、条件分岐命令を用いない等価なアセンブラコードに変換する。条件処理変換部121における処理の詳細については後述する。
命令スケジューリング部130において、依存関係解析部131は、前記変換されたアセンブラコードに含まれる各命令について、実行順序に関する依存関係を判定する。特に、条件フラグ依存判定部135は、対象プロセッサにおいて条件フラグレジスタを定義及び参照する命令に関する依存関係を判定する。依存関係解析部131は、判定された依存関係を表す依存グラフを生成する。
依存関係解析部131において、命令再配置部136は、生成された依存グラフに基づいて、実行順序を変更しても同一の実行結果が得られ、かつ、対象プロセッサにおいて並列実行可能な命令を判断し、当該命令が一連配置されるように前記変換されたアセンブラコードにおいて、命令を並べ替える。さらに、命令再配置部136は、当該並べ替え後のアセンブラコードにおいて並列実行可能な命令を示す並列実行境界情報を生成する。命令スケジューリング部130における処理の詳細については後述する。
オブジェクトコード生成部140は、前記並べ替え後のアセンブラコードと並列実行境界情報とに基づいて機械語命令列を生成し、当該機械語命令列を含むオブジェクトコードを、オブジェクトファイル190に記録する。
以下、従来の一般的な技術に属する事項については説明を省略し、本コンパイラにおける特徴的な処理について詳しく説明する。
<2.2 アセンブラコード生成部120の詳細>
アセンブラコード生成部120において、条件処理変換部121は、分岐命令を用いて条件処理を表した従来様式のアセンブラコードと、当該アセンブラコード中の基本ブロックを示す基本ブロック情報とを入力され、当該基本ブロック情報に基づいて、当該アセンブラコードにおいて条件処理を記述している部分を識別し、識別された部分を分岐命令を用いずに記述したアセンブラコードに変換するとともに、前記基本ブロック情報を変換後のアセンブラコード中の基本ブロックを示すように変更する。
当該条件処理を記述している部分とは、所定条件の成否を評価する処理を記述している部分と、当該条件の成否何れかの場合に実行されるべき処理を記述している部分とを指し、さらに、当該条件の成否が逆の場合に実行されるべき処理を記述している部分を含んでもよい。
<2.2.1 データ構造>
図11(A)は、条件処理変換部121へ入力されるアセンブラコード情報のデータ構造及び内容の一例であり、図11(B)のソースプログラムから中間コードを介して、アセンブラコード生成部120により生成される。
アセンブラコード情報において、命令番号欄は命令を識別する番号を表し、ラベル欄は当該命令が分岐先等として参照される場合に用いられるラベルを表し、実行条件欄は当該命令が実質的な効果を生じるために真値であるべき条件フラグを表し、命令欄は当該命令のニーモニック表記を表す。
図12は、条件処理変換部121へ入力される基本ブロック情報のデータ構造及び内容の一例であり、図11(A)のアセンブラコード情報に対してアセンブラコード生成部120により生成される。
基本ブロック番号欄は基本ブロックを識別する番号を表し、命令範囲欄は当該基本ブロックに対応するアセンブラコード情報における命令の範囲を表し、先行ブロック欄は当該基本ブロックの先行基本ブロックを番号で表し、後続ブロック欄は当該基本ブロックの後続基本ブロックを番号で表す。
なお、図11(A)の命令を区分する区切り線は、便宜上、図12の基本ブロック情報により示される各命令範囲を明示するために記入したものであり、アセンブラコード情報は当該区切り線を示す情報を含まない。
<2.2.2 識別対象>
条件処理変換部121は、前記基本ブロック情報において、所定の先行ブロック及び後続ブロックを有する一連の基本ブロックを検出し、当該一連の基本ブロックに対応する前記アセンブラコード情報の部分を、条件処理を記述している部分であると識別する。条件処理変換部121は、6種類のそのような一連の基本ブロックを検出する。
条件処理変換部121が検出する基本ブロックは、一例として、ソースプログラムに記述されたif文の6種類の変化形(パターン)にそれぞれ対応して、アセンブラコード生成部120が生成する基本ブロック情報によって表される。
図13(A)乃至(F)は、当該6種類のパターンを示している。同図に示したソースプログラム中、A、B及びCはそれぞれ一つの比較演算式を表し、一例としてx=y等と表記される式であり、B1、B2及びB3は文の並びを表す。
図13(A)は単一の比較演算に基づくif−thenパターン、(B)は単一の比較演算に基づくif−then−elseパターン、(C)は論理積演算で結合された2つ以上の比較演算に基づくif−thenパターン、(D)は論理積演算で結合された2つ以上の比較演算に基づくif−then−elseパターン、(E)は論理和演算で結合された2つ以上の比較演算に基づくif−thenパターン、(F)は論理和演算で結合された2つ以上の比較演算に基づくif−then−elseパターンである。
図14(A)乃至(F)は、前記各パターンのif文に対応してアセンブラコード生成部120が生成し、条件処理変換部121へ供給するアセンブラコード情報を示している。同図の命令欄に示したcmpA C6命令、cmpB C6命令及びcmpC C6命令は、それぞれif文中の比較演算式A、B及びCを評価し、評価結果を条件フラグレジスタC6に格納するための比較命令を表し、cmp!A C6命令、cmp!B C6命令及びcmp!C C6命令は、それぞれif文中の中の比較演算式A、B及びCの逆条件を評価し、評価結果を条件フラグレジスタC6に格納するための比較命令を表す。
一例として、比較演算式x=yに対応するそのような比較命令は
cmpeq C6,R0,R1
及び、
cmpne C6,R0,R1
であり、変数x及びyをそれぞれレジスタR0及びR1に移送する命令
mov R0,x
mov R1,y
に後続して配置される。
B1、B2及びB3は、ソースコード中の文の並びB1、B2及びB3をそれぞれ実行するための命令列を表す。説明の便宜上、B1、B2及びB3は、何れも分岐命令を含まないとし、各基本ブロックを仕切り線で区分して示した。
図15(A)乃至(F)は、図14(A)乃至(F)の各アセンブラコード情報に対応する基本ブロック情報であり、アセンブラコード生成部120により生成され、条件処理変換部121へ供給される。なお、同図中、先行ブロック欄及び後続ブロック欄の記号・は、図外の基本ブロック番号を表す。
これらの各基本ブロックと、条件処理変換部121により識別される、所定条件の成否を評価する処理を記述している部分、当該条件の成否何れかの場合に実行されるべき処理を記述している部分、及び当該条件の成否が逆の場合に実行されるべき処理を記述している部分とは、次のように対応する。
図14(A)及び図15(A)において、基本ブロックb0が所定条件の成否を評価する処理を記述している部分であり、基本ブロックb1が当該条件の成立時に実行されるべき処理を記述している部分である。
図14(B)及び図15(B)において、基本ブロックb0が所定条件の成否を評価する処理を記述している部分であり、基本ブロックb1が当該条件の成立時に実行されるべき処理を記述している部分であり、基本ブロックb2が当該条件の不成立時に実行されるべき処理を記述している部分である。
図14(C)及び図15(C)、並びに図14(E)及び図15(E)では、基本ブロックb0乃至bn−1が所定条件の成否を評価する処理を記述している部分であり、基本ブロックbnが当該条件の成立時に実行されるべき処理を記述している部分である。
図14(D)及び図15(D)、並びに図14(F)及び図15(F)では、基本ブロックb0乃至bn−1が所定条件の成否を評価する処理を記述している部分であり、基本ブロックbnが当該条件の成立時に実行されるべき処理を記述している部分であり、基本ブロックbn+1が当該条件の不成立時に実行されるべき処理を記述している部分である。
<2.2.3 条件処理変換部121の詳細>
条件処理変換部121は、基本ブロック情報において先行ブロック及び後続ブロックが図15(A)乃至(F)のように示されている一連の基本ブロックを検出し、アセンブラコード情報において当該検出された基本ブロックに対応する命令列を、分岐命令を用いない等価な命令列に変換する。
図16は、条件処理変換部121が当該部分を検出するために用いる照合情報を示している。照合情報において、対照相対番号欄は一連の基本ブロックにおける各基本ブロックの相対位置を表し、対照先行ブロック欄は当該基本ブロックが持つべき先行ブロックを相対位置で表し、対照後続ブロック欄は当該基本ブロックが持つべき後続ブロックを相対位置で表す。
同図中、先行ブロック欄及び後続ブロック欄の記号*は、0個以上の任意の基本ブロック番号と一致することを表す。
図17は、条件処理変換部121が行う照合変更処理の詳細を示すフローチャートである。
以下、図17のフローチャートを参照しながら、当該照合変更処理について説明する。
(ステップS100)基本ブロック情報の先頭基本ブロックから末尾の基本ブロックまでの各基本ブロックを順次照合起点基本ブロックとして、ステップS170までを繰り返す。
(ステップS110)照合情報(A)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS111)パターン全体で一致したか否か判断する。
(ステップS112)パターン全体で一致した場合、変更処理(A)を行い、再び基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS120)照合情報(A)が一致しない場合、照合情報(B)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS121)パターン全体で一致したか否か判断する。
(ステップS122)パターン全体で一致した場合、変更処理(B)を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS130)照合情報(B)が一致しない場合、照合情報(C)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS131)パターン全体で一致したか否か判断する。
(ステップS132)パターン全体で一致した場合、変更処理(C)を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS140)照合情報(C)が一致しない場合、照合情報(D)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS141)パターン全体で一致したか否か判断する。
(ステップS142)パターン全体で一致した場合、変更処理(D)を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS150)照合情報(D)が一致しない場合、照合情報(E)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS151)パターン全体で一致したか否か判断する。
(ステップS152)パターン全体で一致した場合、変更処理(E)を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS160)照合情報(E)が一致しない場合、照合情報(F)と当該照合起点基本ブロック以降の基本ブロック情報とを照合する。
(ステップS161)パターン全体で一致したか否か判断する。
(ステップS162)パターン全体で一致した場合、変更処理(F)を行い、再び、基本ブロック情報の先頭基本ブロックから照合処理を繰り返す。
(ステップS170)ステップS100から繰り返す。基本ブロック情報の全ての基本ブロックを照合起点基本ブロックとして、何れの照合情報とも合致しなかった場合に処理を終了する。
図18は、条件処理変換部121が行う照合処理の詳細を示すフローチャートである。この処理は、照合変更処理からA乃至Fの何れかの照合情報を指定して呼び出され、基本ブロック番号を保持する変数B、及び相対番号を保持する変数rを用いて実行される。
以下、図18のフローチャートを参照しながら、当該照合処理について説明する。
(ステップS200)変数Bを照合起点基本ブロック番号とする。
(ステップS201)指定された照合情報の各行を順次対象行としてステップS230までを繰り返す。
(ステップS202)変数rを当該対象行の対照相対番号欄の値とする。対照相対番号欄の値がnの式で示されている場合は、初回のループにおけるステップS213で求めたnの値を用いてrの値を具体的に算出する。
(ステップS203)r=kならステップS220以降を実行し、k以外であればステップS210以降を実行する。
(ステップS210)照合情報の当該対象行と、基本ブロック番号欄が(B+r)である基本ブロック情報とを照合する。
(ステップS211)一致しない場合、ステップS241へ進む。
(ステップS212)一致した場合、r=0であり、かつ処理中の照合情報がC乃至Fの何れかであれば、ステップS213を実行する。
(ステップS213)nを算出する。nの算出は、一致した後続ブロック番号のうち(B+1)でない番号をTとすれば、処理中の照合情報がC又はDの場合は(T−B−1)により行い、E又はFの場合は(T−B)により行う。
(ステップS220)一方r=kならば、rを順次1からn−2として、ステップS223までを繰り返す。なお、ステップS213で求めたnについて1>(n−2)である場合、この繰り返し処理の本体は実行されない。
(ステップS221)照合情報の当該対象行と、基本ブロック番号欄が(B+r)である基本ブロック情報とを照合する。
(ステップS222)一致しない場合、ステップS241へ進む。
(ステップS223)ステップS220から繰り返す。
(ステップS230)ステップS201から繰り返す。
(ステップS240)パターン全体で一致したと判定する。このステップは、指定された照合情報の全ての行について一致したと判定された場合に実行される。
(ステップS241)パターン全体で一致しないと判定する。
図19は、条件処理変換部121が行う基本ブロック照合処理の詳細を示すフローチャートである。この処理は、照合処理から、照合起点基本ブロック番号Bと照合相対番号rとを指定して呼び出され、対照先行基本ブロック番号を保持する変数i、及び対照後続基本ブロック番号を保持する変数jを用いて実行される。
以下、図19のフローチャートを参照しながら、当該基本ブロック照合処理について説明する。
(ステップS250)変数iを、順次対象行の照合先行ブロック欄の各要素としてステップS253までを繰り返す。
(ステップS251)iが*でなければ、ステップS252を実行する。
(ステップS252)基本ブロック番号欄が(B+r)である基本ブロック情報の先行ブロック欄を参照し、要素(B+i)がなければ、ステップS271へ進む。
(ステップS253)ステップS250から繰り返す。
(ステップS254)基本ブロック番号欄が(B+r)である基本ブロック情報の先行ブロック欄に未照合の要素があれば、ステップS255へ進む。
(ステップS255)対象行の照合先行ブロック欄に要素*がなければ、ステップS271へ進む。
(ステップS260)変数jを、順次対象行の照合後続ブロック欄の各要素としてステップS263までを繰り返す。
(ステップS261)jが*でなければ、ステップS262を実行する。
(ステップS262)基本ブロック番号欄が(B+r)である基本ブロック情報の後続ブロック欄を参照し、要素(B+j)がなければ、ステップS271へ進む。
(ステップS263)ステップS260から繰り返す。
(ステップS264)基本ブロック番号欄が(B+r)である基本ブロック情報の後続ブロック欄に未照合の要素があれば、ステップS265へ進む。
(ステップS265)対象行の照合後続ブロック欄に要素*がなければ、ステップS271へ進む。
(ステップS270)一致したと判定する。
(ステップS271)一致しないと判定する。
図20は、条件処理変換部121が行う変更処理の詳細を示すフローチャートである。この処理は、照合変更処理からA乃至Fの何れかの照合情報を指定して呼び出され、基本ブロック番号を保持する変数B、及び相対番号を保持する変数rを用いて実行される。
以下、図20のフローチャートを参照しながら、当該変更処理について説明する。
(ステップS300)変数Bを照合起点基本ブロック番号とする。
(ステップS301)指定された照合情報の各行を順次対象行としてステップS330までを繰り返す。
(ステップS302)変数rを当該対象行の対照相対番号欄の値とする。対照相対番号欄の値がnの式で示されている場合は、ステップS213で求めたnの値を用いてrの値を具体的に算出する。
(ステップS303)r=kならステップS320以降を実行し、k以外であればステップS310以降を実行する。
(ステップS310)基本ブロック(B+r)について基本ブロック変更処理を行う。
(ステップS320)一方r=kならば、rを順次1からn−2として、ステップS322までを繰り返す。なお、ステップS213で求めたnについて1>(n−2)である場合、この繰り返し処理は実行されない。
(ステップS321)基本ブロック(B+r)について基本ブロック変更処理を行う。
(ステップS322)ステップS320から繰り返す。
(ステップS330)ステップS301から繰り返す。
図21は、条件処理変換部121が行う基本ブロック変更処理の詳細を示すフローチャートである。この処理は、変更処理から照合起点基本ブロック番号Bと相対番号rとを指定して呼び出され、変更処理方法を示す変数iを用いて実行される。
以下、図21のフローチャートを参照しながら、当該基本ブロック変更処理について説明する。
(ステップS400)アセンブラコード情報において基本ブロック(B+r)に含まれる命令を変更対象とし、変数iを順次対象行の変更処理欄の各要素として繰り返す。
(ステップS410)i=1ならば、ステップS411を実行する。
(ステップS411)変更対象に含まれる比較命令を、逆条件を評価する比較命令に変更する。
(ステップS420)i=2ならば、ステップS421を実行する。
(ステップS421)変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおけるcmpCCa命令である。
(ステップS430)i=3ならば、ステップS431を実行する。
(ステップS431)変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理和演算した値を条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおけるcmpCCo命令である。
(ステップS440)i=4ならば、ステップS441を実行する。
(ステップS441)変更対象に含まれる比較命令を、当該比較命令に応じて算出される条件フラグ値を肯定条件フラグ値として算出すると共に、その論理否定値を否定条件フラグ値として算出するための新たな比較命令に変更する。当該新たな比較命令は、対象プロセッサにおける、条件フラグレジスタ対をオペランドとするcmpCC命令、cmpCCa命令、又はcmpCCo命令である。
(ステップS450)i=5ならば、ステップS451以降を実行する。
(ステップS451)変更対象に含まれる、比較命令を除く無条件実行命令を、直前の比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令に変更する。当該直前の比較命令に応じて2つの条件フラグ値が算出される場合、肯定条件フラグ値を実行条件とする条件実行命令に変更する。
(ステップS452)変更対象に、比較命令と、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令とが含まれていれば、当該比較命令を、本来算出される条件フラグ値と、直前の比較命令に応じて算出される条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。
当該比較命令に応じて肯定条件フラグ値と否定条件フラグ値とが算出される場合、両者それぞれを直前の比較命令に応じて算出された条件フラグ値と論理積演算した値を、肯定条件フラグ値及び否定条件フラグ値として算出するための新たな比較命令に変更する。
なお、このステップは上記で述べた処理の一実施形態であり、当該変更対象が、所定条件の成立時に実行されるべき処理を記述している部分であり、当該比較命令が、当該部分の中で別の所定条件の成否を評価する処理を記述している部分であり、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令が、当該別の条件の成立時に実行されるべき処理を記述している部分に対応する。
(ステップS453)変更対象にラベルが含まれていれば除去する。
(ステップS460)i=6ならば、ステップS461以降を実行する。
(ステップS461)変更対象に含まれる、比較命令を除く無条件実行命令を、直前の比較命令に応じて算出される否定条件フラグ値を実行条件とする条件実行命令に変更する。
(ステップS462)変更対象に比較命令と、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令とが含まれていれば、当該比較命令を、本来算出される条件フラグ値と、直前の比較命令に応じて算出される否定条件フラグ値とを論理積演算した値を条件フラグ値として算出するための新たな比較命令に変更する。
当該比較命令に応じて肯定条件フラグ値と否定条件フラグ値とが算出される場合、両者それぞれを直前の比較命令に応じて算出された否定条件フラグ値と論理積演算した値を、肯定条件フラグ値及び否定条件フラグ値として算出するための新たな比較命令に変更する。
当該新たな比較命令は、対象プロセッサにおけるcmpCCn命令である。
なお、このステップは上記で述べた処理の一実施形態であり、当該変更対象が、所定条件の不成立時に実行されるべき処理を記述している部分であり、当該比較命令が、当該部分の中で別の所定条件の成否を評価する処理を記述している部分であり、当該比較命令に応じて算出される条件フラグ値を実行条件とする条件実行命令が、当該別の条件の成立時に実行されるべき処理を記述している部分に対応する。
(ステップS463)変更対象にラベルが含まれていれば除去する。
(ステップS470)i=7ならば、ステップS471を実行する。
(ステップS471)変更対象に含まれる分岐命令を除去する。
(ステップS480)i=8ならば、ステップS481以降を実行する。
(ステップS481)基本ブロック照合処理において最後に照合された基本ブロック情報の先行ブロック欄に未照合の要素がなかった場合、変更対象に含まれるラベルを除去する。
(ステップS482)前記未照合の要素がなかった場合には、基本ブロック情報において、基本ブロック番号がBである行について命令範囲を基本ブロック番号がBから(B+r)までの全ての行の命令範囲を含むように変更すると共に、後続ブロックを基本ブロック番号が(B+r)である行の後続ブロックに変更し、(B+r)を先行ブロックに含む行について先行ブロックの(B+r)をBに変更し、基本ブロック番号が(B+1)から(B+r)までの行を削除する。
前記未照合の要素があった場合には、基本ブロック情報において、基本ブロック番号がBである行について命令範囲を元の基本ブロック番号がBから(B+r−1)までの全ての行の命令範囲を含むように変更すると共に、後続ブロックを(B+r)に変更し、基本ブロック番号が(B+r)の行について先行ブロックを前記未照合の要素及びBとし、基本ブロック番号が(B+1)から(B+r−1)までの行を削除する。
何れの場合も、前記更新を行った後、基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更する。
<2.2.4 具体例>
前記照合変更処理を、図11(A)のアセンブラコード情報及び図12の基本ブロック情報に適用した場合に、条件処理変換部121が行う具体的な処理について説明する。この具体例では、パターン全体での一致が2回検出される。
1回目の照合変更処理は次のように実行される。
ステップS100〜ステップS170の1回目のループでは、図12の基本ブロック情報における基本ブロック番号が10である行を起点行として、照合処理を行う。
ステップS110から呼び出される照合処理(A)では、図16(A)の照合情報の各行と前記起点行以降の基本ブロック情報とを照合する。ステップS200で変数Bを10とする。
ステップS201〜ステップS230の1回目のループでは、照合情報(A)の第1行を対象行とし、変数rを当該対象行の対照相対番号0とする。ステップS210から呼び出される基本ブロック照合処理で、当該対象行と基本ブロック番号が10である基本ブロック情報とを照合する。
先行ブロックを照合するステップS250〜ステップS253のループでは、当該対象行の対照先行ブロックが*のみであり、前記基本ブロック情報の先行ブロックの9は未照合となり、ステップS254で未照合要素があると判断する。ステップS255では当該対象行の対照先行ブロックが*を含んでいるのでステップS260へ進む。
後続ブロックを照合するステップS260〜ステップS263のループでは、当該対象行の対照後続ブロックの要素1及び2にそれぞれBを加えた11及び12と、前記基本ブロック情報の先行プロックの11及び12とを照合する。ステップS264では未照合要素はないのでステップS270へ進み、合致したと判定する。
ステップS201〜ステップS230の2回目のループでは、照合情報(A)の第2行を対象行とし、変数rを当該対象行の対照相対番号1とする。ステップS210から呼び出される基本ブロック照合処理で、当該対象行と基本ブロック番号が11である基本ブロック情報とを照合する。
ステップS250〜ステップS253のループでは、当該対象行の対照先行ブロックの0にBを加えた10と前記基本ブロック情報の先行ブロックの10とを照合し、ステップS254では未照合要素がないのでステップS260へ進む。
ステップS260〜ステップS263のループでは、当該対象行の対照後続ブロックの要素2にBを加えた12と前記基本ブロック情報の先行プロックの12とを照合する。前記基本ブロック情報の先行プロックの15は未照合となり、ステップS264で未照合要素があると判断する。ステップS265では当該対象行の対照後続ブロックが*を含んでいないのでステップS271へ進み、合致しないと判定する。
この結果、ステップS211からステップS241へ進み、全体合致しないと判定し、ステップS111からステップS120へ進む。
ステップS120から呼び出される照合処理(B)では、図16(B)の照合情報の各行と前記起点行以降の基本ブロック情報とを照合する。この処理は前述した照合処理(A)と同様に実行されるので、詳細な説明を省略する。
照合処理(B)は、図14(B)の照合情報の各行と、基本ブロック番号が10である行を起点行とした基本ブロック情報とは全体合致しないと判断する。以降、照合処理(C)乃至(F)は何れも全体合致しないと判断する。
ステップS100〜ステップS170の2回目のループでは、図10の基本ブロック情報における基本ブロック番号が11である行を起点として、照合処理を行い、照合処理(A)乃至(F)は何れも全体合致しないと判断する。
ステップS100〜ステップS170の3回目のループでは、図10の基本ブロック情報における基本ブロック番号が12である行を起点として、照合処理を行い、照合処理(A)が全体合致したと判定し、ステップS111からステップS112へ進み、変換処理(A)が呼び出される。
変換処理(A)では、ステップS300で変数Bを10とする。
ステップS301〜ステップS330の1回目のループでは、照合情報(A)の第1行を対象行とし、変数rを当該対象行の対照相対番号0とする。ステップS310から呼び出される基本ブロック更新処理で、当該対象行に示された変更処理1、7を、基本ブロック番号が12である基本ブロック情報の命令範囲105−107で示された範囲のアセンブラコード情報に対して適用する。
ステップS400〜ステップS490の1回目のループでは、変数iを1とし、ステップS411で比較命令106の評価条件を逆転することにより、cmpne c6,r1,0命令をcmpeq c6,r1,0命令に変更する。
ステップS400〜ステップS490の2回目のループでは、変数iを7とし、ステップS471で分岐命令107を除去する。
ステップS301〜ステップS330の2回目のループでは、照合情報(A)の第2行を対象行とし、変数rを当該対象行の対照相対番号1とする。基本ブロック更新処理で、当該対象行に示された変更処理5及び7を、基本ブロック番号が13である基本ブロック情報の命令範囲108で示されたアセンブラコード情報に対して適用する。
ステップS400〜ステップS490の1回目のループでは、変数iを5とする。ステップS451で、該当する無条件実行命令は命令108であり、当該命令を直前の比較命令106の肯定結果c6を実行条件とする条件実行命令に変更する。ステップS452の比較命令の変更処理は、該当する比較命令がないため行われない。ステップS453のラベルの除去は、該当するラベルがないため行われない。
ステップS301〜ステップS330の3回目のループでは、照合情報(A)の第3行を対象行とし、変数rを当該対象行の対照相対番号2とする。基本ブロック更新処理で、当該対象行に示された変更処理8を、基本ブロック番号が14である基本ブロック情報の命令範囲109で示されたアセンブラコード情報に対して適用する。
ステップS400〜ステップS490の1回目のループでは、変数iを8とする。ステップS481では、基本ブロック番号が14である基本ブロック情報の先行ブロックに未照合の要素がないので、命令109に付されたラベルL3を除去する。ステップS482では、基本ブロック番号が13及び14の基本ブロック情報を削除し、基本ブロック番号12の命令範囲を105−109、後続ブロックを16とするとともに、14を先行ブロックに含む基本ブロック番号が16の基本ブロック情報について、先行ブロックの14を12に変更する。
図22及び図23(A)は、ここまでの処理により、図11(A)のアセンブラコード情報及び図12の基本ブロック情報がそれぞれ変更された結果であり、太字は変更箇所、取り消し線は削除箇所を示している。
ステップS482では、図23(A)の基本ブロック情報を、さらに基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更することにより、図23(B)の基本ブロック情報に更新する。
2回目の照合変更処理は次のように実行される。
前記変換処理を実行した後、処理はステップS100へ戻り、図23(B)の基本ブロック情報における先頭行から末尾行までを順次起点行として、ステップS100〜ステップS170のループを繰り返す。
ステップS100〜ステップS170の1回目のループにおいて、図23(B)の基本ブロック情報における基本ブロック番号が10である行を起点行として、図16(F)の照合情報との全体合致が検出される。この動作について、前述した動作と異なる事項を説明する。
ステップS160から呼び出される照合処理(F)では、ステップS200で変数Bを10とする。
ステップS201〜ステップS230の1回目のループでは、照合情報(F)の第1行を対象行とし、変数rを当該対象行の対照相対番号0とする。ステップS210から呼び出される基本ブロック照合処理は、当該対象行と基本ブロック番号が10である基本ブロック情報とを照合し、合致したと判断する。
r=0であり、かつ照合情報(F)と照合しているので、ステップS212からステップS213へ進み、nを算出する。nは、後続ブロック11及び12のうち(B+1)でない番号12から、12−10=2と算出される。
ステップS201〜ステップS230の2回目のループでは、照合情報(F)の第2行を対象行とし、変数rを当該対象行の対照相対番号kとする。r=kなので、ステップS203からステップS220〜ステップS223の繰り返し処理へ進むが、1>(n−2)なので、この繰り返し処理の本体は実行されない。
ステップS201〜ステップS230の3回目のループでは、照合情報(F)の第3行を対象行とし、変数rを当該対象行の対照相対番号n−1とする。ステップS210から呼び出される基本ブロック照合処理は、当該対象行と基本ブロック番号が(B+n−1)=11である基本ブロック情報とを照合し、合致したと判定する。
ステップS201〜ステップS230の4回目及び5回目のループにおいて、ステップS210から呼び出される基本ブロック照合処理は合致と判定し、ステップS240で全体合致と判定する。
この結果、ステップS161からステップS162へ進み、変換処理(F)が呼び出される。
変換処理(F)では、ステップS300で変数Bを10とする。変換処理における繰り返し処理について前述した事項は省略して、主として、アセンブラコード情報の変更処理を説明する。
照合情報(F)の第1行は、命令範囲100−102のアセンブラコード情報に適用され、変更処理7に対応して、ステップS471で分岐命令102を除去する。
照合情報(F)の第2行に対応する繰り返し処理の本体は実行されない。
照合情報(F)の第3行は、命令範囲103−104のアセンブラコード情報に適用され、変更処理1、3、4及び7にそれぞれ対応して、ステップS411では、比較命令103の評価条件を逆転することによりcmpne c6,r0,2をcmpeq c6,r0,2に変更し、ステップS413では、さらに直前の比較命令101の算出結果c6との論理和を算出する比較命令cmpeqo
c6,r0,2,c6に変更し、ステップS441では、さらに元の算出結果とその論理否定値とを算出する比較命令cmpeqo c0:c1,r0,2,c6に変更し、ステップS471では分岐命令104を除去する。
照合情報(F)の第4行は、命令範囲105−109のアセンブラコード情報に適用される。変更処理5に対応して、ステップS451では、比較命令106を除く無条件実行命令105及び109を、直前の変更後の比較命令103の肯定結果c0を実行条件とする条件実行命令に変更する。ステップ452では、比較命令106をcmpeqn c6,r1,0,c0に変更する。ステップS453では、命令105に付されたラベルL1を削除する。
また、変更処理7に対応して、ステップS471で分岐命令109を削除する。
照合情報(F)の第5行は、命令範囲110のアセンブラコード情報に適用される。変更処理6に対応して、ステップS461では、無条件実行命令110を、直前の変更後の比較命令103の否定結果c1を実行条件とする条件実行命令に変更する。ステップS462の比較命令の変更処理は、該当する比較命令がないため行われない。ステップS463では、命令110に付されたラベルL2を削除する。
照合情報(F)の第6行は、命令範囲111のアセンブラコード情報に適用される。変更処理8に対応して、ステップS481では、基本ブロック番号が14である基本ブロック情報の先行ブロックに未照合の要素がないので、命令111に付されたラベルL4を除去する。ステップS482では、基本ブロック番号が11乃至14の基本ブロック情報を削除し、基本ブロック番号10の命令範囲を100−111、後続ブロックを17に変更するとともに、14を先行ブロックに含む基本ブロック情報について、先行ブロックの14を10に変更する。
ステップS482では、基本ブロック情報を、さらに基本ブロック番号を連続番号に変更し、当該変更に応じて先行ブロック及び後続ブロックを変更する。
図24及び図25は、ここまでの処理により、図22のアセンブラコード情報及び図23(B)の基本ブロック情報がそれぞれ変更された結果である。
<2.3 命令スケジューリング部130の詳細>
命令スケジューリング部130は、条件処理変換部121により変換されたアセンブラコード情報と基本ブロック情報とを入力され、依存関係解析部131は、入力されたアセンブラコード情報における各基本ブロックを対象とし、対象基本ブロックに含まれる命令の実行順序に関する依存関係を表す依存グラフを生成し、命令再配置部136は、生成された依存グラフに基づいて、同一の実行結果が得られる範囲で、前記アセンブラコード情報において並列実行可能な命令が一連配置されるように命令を並べ替えると共に、当該一連配置された命令を示す並列実行境界情報を生成する。
図26は、命令スケジューリング部130が行う命令スケジューリング処理を示すフローチャートである。
(ステップS500)基本ブロック情報に示された各基本ブロックを対象基本ブロックとして、ステップS503までを繰り返す。
(ステップS501)依存関係解析部131は、アセンブラコード情報における当該対象基本ブロックの命令について、依存グラフを生成する。
(ステップS502)命令再配置部136は、生成された依存グラフに基づいて命令を並べ替えると共に、並列実行境界情報を生成する。
(ステップS503)ステップS500から繰り返す。
<2.3.1 依存関係>
第1命令と、後続配置された第2命令との間に実行順序に関する依存関係があるとは、第2命令を第1命令よりも先に実行した場合に、本来の順序で実行した場合と同一の実行結果が保証されないことを言う。依存関係にある先行命令をプレデセッサと言う。
依存関係解析部131は、入力されたアセンブラコード情報における4種類の依存関係にある命令対
(1)データ依存関係にある命令対:条件フラグレジスタを除くハードウェア資源(例えば汎用レジスタ)を定義する命令と、当該ハードウェア資源を参照する命令
(2)逆依存関係にある命令対:条件フラグレジスタを含むハードウェア資源を定義する命令と、当該ハードウェア資源を定義する命令
(3)出力依存関係にある命令対:条件フラグレジスタを含むハードウェア資源を定義する命令と、当該ハードウェア資源を定義する命令
(4)条件フラグ依存関係にある命令対:条件フラグレジスタを定義する命令と、当該条件フラグレジスタを参照する命令
を判定し、当該判定結果を示す依存グラフを生成する。
ここで、条件フラグレジスタを参照する命令とは、特に、前述のプロセッサにおいては、条件フラグレジスタに既に格納されているか又は格納されるべき値と、比較演算の結果値とを論理演算する比較命令、並びに条件フラグレジスタに既に格納されているか又は格納されるべき値を実行条件とする条件実行命令を指す。
依存関係にある第1命令と、後続配置された第2命令との実行順序を逆転させない限りにおいて、両者が並列実行可能である場合には、当該第2命令の実行時期を当該第1命令と同一クロックサイクルまで繰り上げることが可能である。対象プロセッサにおいて、前記依存関係(2)(3)及び(4)にある命令対が、この関係に該当する。
一方、両者が並列実行不可能である場合には、当該第2命令の実行時期を第1命令の次のクロックサイクルまで繰り上げることが可能である。対象プロセッサにおいて、前記依存関係(1)にある命令対がこの関係に該当する。
図27は、依存グラフの一例を模式的に表している。依存グラフは有向グラフであり、ノードが命令を表し、実線エッジが並列実行不可能な依存関係を表し、点線エッジが並列実行可能な依存関係を表す。
なお、計算機資源上における有効グラフの表現方法については従来の公知技術に準じるものとし、説明を省略する。
<2.3.2 依存関係解析部131の詳細>
図28は、依存関係解析部131が行う依存関係解析処理の詳細を示すフローチャートである。
(ステップS600)対象基本ブロックに含まれる個々の命令に対応したノードを生成する。
(ステップS610)各命令対を対象として、ステップS660までを繰り返す。
(ステップS620)対象命令対がデータ依存関係にあるか否かを判断する。
(ステップS621)データ依存関係にあると判断された場合、対象命令対に対応するノード間に、データ依存関係を示す実線エッジを生成する。
(ステップS630)対象命令対が逆依存関係にあるか否かを判断する。
(ステップS631)逆依存関係にあると判断された場合、対象命令対に対応するノード間に、逆依存関係を示す点線エッジを生成する。
(ステップS640)対象命令対が出力依存関係にあるか否かを判断する。
(ステップS641)出力依存関係にあると判断された場合、対象命令対に対応するノード間に、出力依存関係を示す点線エッジを生成する。
(ステップS650)対象命令対が条件フラグ依存関係にあるか否かを判断する。
(ステップS651)条件フラグ依存関係にあると判断された場合、対象命令対に対応するノード間に、条件フラグ依存関係を示す点線エッジを生成する。
(ステップS660)ステップS610から繰り返す。
<2.3.3 命令再配置部136の詳細>
命令再配置部136は、依存関係にある命令の順序が逆転しない限りにおいて、前記アセンブラコード情報における並列実行可能な命令が一連配置されるように命令を並べ替えると共に、当該一連配置された命令を示す並列実行境界情報を生成する。
図29は、命令再配置部136が行う命令再配置処理の詳細を示すフローチャートである。この処理は、命令番号のリストを保持する変数である未配置リスト、配置候補リスト、及び仮配置リストを用いて実行される。
(ステップS700)未配置リストを、対象基本ブロックに含まれる各命令の命令番号からなるリストに初期化する。
(ステップS710)未配置リストに要素がある間、ステップS732までを繰り返す。
(ステップS711)データ依存関係にある先行命令がある場合に、何れの先行命令も未配置リストに含まれない命令を配置候補命令として判定し、配置候補リストを当該命令の命令番号からなるリストに初期化する。
(ステップS712)仮配置リストを空にする。
(ステップS720)配置候補リストに要素がある間、ステップS725までを繰り返す。
(ステップS721)配置候補リストに示された命令から、次に配置した場合に、未配置リストに示された命令の実行時間が最短になると予想される命令を、最良命令として判定する。
具体的には、依存グラフにおいて、配置候補リストに示された各命令に対応するノードをそれぞれ始点としてエッジで連結されたノードを全て辿り、辿ったパス上のノードに対応する命令の実行時間の総和を算出し、最大の総和が算出された始点ノードに対応する命令を最良命令と判定する。
当該最良命令の命令番号を配置候補リストから削除する。
(ステップS722)当該最良命令が、仮配置リストに示された各命令と同一クロックサイクルにおいて並列実行可能か否かを判定する。
このステップにおける判定は、ハードウェア資源の個数に係る制約を考慮して行われ、対象プロセッサについて、具体的には、
(1)並列実行可能な命令数は最大で3個(命令デコーダの制約)、
(2)並列実行される命令に応じて、実際に実行部で動作可能なハードウェア資源は最大で3個の演算部441乃至443、1個のオペランドアクセス部47、1個のPC部(分岐ユニット)42(実行部の制約)
である。当該最良命令と、仮配置リストに示された各命令とが、この制約を満たす場合のみ並列実行可能と判定する。
並列実行可能でないと判定された場合、ステップS725へ進む。
(ステップS723)当該最良命令の命令番号を、仮配置リストに追加する。
(ステップS724)仮配置リストに示された命令と逆依存関係、出力依存関係、又は条件フラグ依存関係にあり、かつ未配置リストに示された命令とデータ依存関係にない命令の命令番号を、配置候補リストに追加する。
(ステップS725)ステップS720から繰り返す。
(ステップS730)仮配置リストに示された各命令を順次出力する。このとき、最後に出力する命令の並列実行境界フラグを1、それ以外の命令の並列実行境界フラグを0として出力する。
(ステップS731)仮配置リストの要素を、未配置リストから削除する。
(ステップS732)ステップS710から繰り返す。
<2.3.4 具体例>
前記命令スケジューリング処理を、図24のアセンブラコード情報、及び図25の基本ブロック情報に適用した場合の具体例について説明する。
ステップS500〜ステップS503のループの一つにおいて、命令スケジューリング部130は、基本ブロック番号が10である基本ブロックを対象として、命令番号100から111までの命令について依存関係解析処理及び命令再配置処理を行う。
依存関係解析処理では、ステップS600で、命令100、101、103、105、106、108、110、及び111に対応して8つのノードを生成する。ステップS610〜ステップS660のループでは、当該8つの命令のうち2つからなる全ての命令対について、データ依存関係、逆依存関係、出力依存関係、及び条件フラグ依存関係があるか否かを判定し、依存関係があると判定された命令対に対応するノード間に判定された依存関係を示すエッジを生成する。この結果、図30に示した依存グラフが生成される。
命令再配置処理では、ステップS700で、未配置リストが{100,101,103,105,106,108,110}に初期化される。
ステップS710〜ステップS732の1回目のループでは、ステップS711で、データ依存関係にある先行命令を持たない命令100が配置候補命令と判定され、配置候補リストが{100}に初期化される。ステップS712で、仮配置リストが空{}とされる。
ステップS720〜ステップS725の1回目のループでは、ステップS721で命令100が最良命令と判定され、配置候補リストは空{}となり、ステップS723で、仮配置リストに命令100が追加されて{100}となり、ステップS724で、配置候補リストへの追加は行われず空{}に維持される。
配置候補リストが空{}となる結果、ステップS730へ進み、命令100が並列実行境界フラグを1として確定配置され、ステップS731で、未配置リストが{101,103,105,106,108,110}となる。
ステップS710〜ステップS732の2回目のループでは、既配置の命令100をプレデセッサとする命令101が配置候補命令と判定され、配置候補リストが{101}に初期化され、ステップS712で、仮配置リストが空{}とされる。
ステップS720〜ステップS725の1回目のループでは、ステップS721で命令101が最良命令と判定され、配置候補リストは空{}となり、ステップS723で、仮配置リストに命令101が追加されて{101}となり、ステップS724で、配置候補リストに命令103が追加されて{103}となる。
ステップS720〜ステップS725の2回目のループでは、ステップS721で命令103が最良命令と判定され、配置候補リストは空{}となり、ステップS723で、仮配置リストに命令103が追加されて{101,103}となり、ステップS724で、配置候補リストに命令105が追加されて{105}となる。
ステップS720〜ステップS725の3回目のループでは、ステップS721で命令103が最良命令と判定され、配置候補リストは空{}となり、ステップS723で、仮配置リストに命令103が追加されて{101,103}となり、ステップS724で、配置候補リストに命令105及び命令110が追加されて{105,110}となる。
ステップS720〜ステップS725の4回目のループでは、ステップS721で命令105が最良命令と判定され、配置候補リストは{110}となり、ステップS723で、仮配置リストに命令105が追加されて{101,103,105}となり、ステップS724で、命令の追加は行われず配置候補リストは{110}に維持される。
ステップS720〜ステップS725の5回目のループでは、ステップS721で命令110が最良命令と判定され、配置候補リストは空{}となり、ステップS722で、命令デコーダの個数の制限から命令110は仮配置リストに示された3個の命令との並列実行は不可能と判定される。
配置候補リストが空{}となる結果、ステップS730へ進み、命令101及び命令103が並列実行境界フラグを0として確定配置され、さらに命令105が並列実行境界フラグを1として確定配置され、ステップS731で、未配置リストが{106,108,110}となる。
ステップS710〜ステップS732の3回目のループでは、既配置の命令100、命令101、命令103、及び命令105をプレデセッサとする命令106及び命令110が配置候補命令と判定され、配置候補リストが{106,110}に初期化され、ステップS712で、仮配置リストが空{}とされる。
ステップS720〜ステップS725の1回目のループでは、ステップS721で命令106が最良命令と判定され、配置候補リストは{110}となり、ステップS723で、仮配置リストに命令106が追加されて{106}となり、ステップS724で、配置候補リストに命令108が追加されて{108,110}となる。
ステップS720〜ステップS725の2回目のループでは、ステップS721で命令108が最良命令と判定され、配置候補リストは{110}となり、ステップS723で、仮配置リストに命令108が追加されて{106,108}となり、ステップS724で、命令の追加は行われず配置候補リストは{110}に維持される。
ステップS720〜ステップS725の3回目のループでは、ステップS721で命令110が最良命令と判定され、配置候補リストは空{}となり、ステップS723で、仮配置リストに命令110が追加されて{106,108,110}となり、ステップS724で、命令の追加は行われず配置候補リストは空{}に維持される。
配置候補リストが空{}となる結果、ステップS730へ進み、命令106及び命令108が並列実行境界フラグを0として確定配置され、さらに命令110が並列実行境界フラグを1として確定配置され、ステップS731で、未配置リストが空{}となる。
未配置リストが空{}となる結果、命令再配置処理は終了し、図31に示した機械語命令列が生成される。
<その他の変形例>
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
(1)本発明は、実施の形態で説明したステップを含む方法であるとしてもよい。また、これらの方法を、コンピュータシステムを用いて実現するためのコンピュータプログラムであるとしてもよいし、前記プログラムを表すデジタル信号であるとしてもよい。
また、本発明は、前記プログラム又は前記デジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD−ROM、DVD−RAM、半導体メモリ等であるとしてもよい。
また、本発明は、電気通信回線、無線又は有線通信回線、若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
また、本発明は、マイクロプロセッサ及びメモリを備えたコンピュータシステムであり、前記メモリは前記プログラムを記憶しており、前記マイクロプロセッサは前記メモリに記憶されている前記プログラムに従って動作することにより、前記方法を実現するとしてもよい。
また、前記プログラム又は前記デジタル信号は、前記記録媒体に記録されて移送され、若しくは、前記ネットワーク等を経由して移送され、独立した他のコンピュータシステムにおいて実施されるとしてもよい。
(2)本実施の形態において、プロセッサ10は、任意の条件フラグレジスタ対Cm:Cnに対してそれぞれ肯定条件フラグ値及び否定条件フラグ値を格納できるとしたが、肯定条件フラグ値及び否定条件フラグ値を格納できるレジスタ対を例えば、Cm:Cm+1(m=0、2、4の何れか)と限定してもよい。
この限定をすることにより、プロセッサ10と同等効果を有し、回路規模を縮小したプロセッサを提供できる。また、当該比較命令の命令フォーマットにおいて、条件フラグレジスタを指定するフィールドを1つ省くことができる。
(3)本実施の形態において、プロセッサ10により実行される比較命令の一例として、汎用レジスタ間の比較条件を評価する比較命令を挙げたが、オペランドのアドレシング種別は本願発明の主要部ではない。例えば、汎用レジスタと即値オペランドとを比較する比較命令を実装してもよい。
(4)本実施の形態において、コンパイラ装置100における条件処理変換部121が検出対象とするアセンブラコード情報を、一例として図14(A)乃至(F)に示すと共に、アセンブラコード生成部120が、これらのアセンブラコード情報を、それぞれ図13(A)乃至(F)のif文のパターンに対応して生成すると説明したが、これは、検出対象をif文に対応して生成されたアセンブラコード情報に限定する趣旨ではない。
例えば、アセンブラコード生成部120が、3項演算子( ? : )に対応して図14(A)乃至(F)に示したアセンブラコード情報を生成し、条件処理変換部121が当該アセンブラコード情報を検出対象とする場合も本発明に含まれる。
(5)本実施の形態において、コンパイラ装置100における条件処理変換部121は、ソースプログラムにおいて条件処理を記述した部分に対応する中間コードから、アセンブラコード生成部120が一旦生成した従来様式のアセンブラコード情報を、当該アセンブラコード情報に対応する基本ブロック情報に基づいて検出し、分岐命令を含まないアセンブラコード情報に変換するものとして説明したが、アセンブラコード生成部120は、当該従来様式のアセンブラコード情報を生成せず、前記中間コードから直接、分岐命令を含まないアセンブラコード情報を生成してもよい。
このために、コンパイラ上流部110は、ソースプログラムに記述されたif文及び3項演算子に対応して生成される中間コードに対して、個別の比較条件を評価する部分、当該比較条件の成立時に実行されるべき部分、及び当該比較条件の不成立時に実行されるべき部分をそれぞれ識別するための情報を含めて出力し、アセンブラコード生成部120は、当該情報により識別される中間コードの各部分から、分岐命令を含まないアセンブラコード情報を生成すればよい。
(6)コンパイラ装置100において、命令スケジューリング部130は、アセンブラコード生成部120が一旦生成した従来様式のアセンブラコード情報における変換対象部分について、条件処理変換部121による変換前の実行所要サイクル数と、変換後の実行所要サイクル数とを比較し、前者が後者よりも小さいか等しい場合、アセンブラコード情報を変換前の状態に戻してもよい。
この構成によれば、性能向上の効果を保証することができる。
本発明のプロセッサによれば、条件フラグ値を実行条件とする条件実行命令を含み、かつ分岐命令を含まないプログラムによって、複合条件処理を一時に実行処理できるので、複合条件処理を短時間で実行することが可能となり、プログラムの規模縮小、並びに実行並列度向上による処理時間短縮が要望されるプロセッサして有用である。
プロセッサ10の全体構成を示すブロック図 実行部50の構成を示すブロック図 条件フラグ演算部51の構成を示すブロック図 論理演算回路501の構成を示すブロック図 プロセッサ10が実行する比較命令の一覧を示す図 プロセッサ10が処理する比較演算の一覧を示す図 比較命令のフォーマットの一例を示す図 プロセッサ10によって図36の複合条件処理を実行するためのプログラムの一例を示す図 プロセッサ10が図8のプログラムを実行した場合の実行ステージにおける詳細なタイミングチャート コンパイラ装置100の全体構成を示すブロック図 (A)アセンブラコード情報の一例を示す図、(B)前記アセンブラコード情報に対応するソースプログラムを示す図 基本ブロック情報の一例を示す図 (A)〜(F)ソースプログラムにおけるif文の6種類のパターンを示す図 (A)〜(F)if文の各パターンに対応するアセンブラコード情報を示す図 (A)〜(F)各アセンブラコードに対応する基本ブロック情報を示す図 条件処理部分の検出に用いられる照合情報を示す図 照合変更処理の詳細を示すフローチャート 照合処理の詳細を示すフローチャート 基本ブロック照合処理の詳細を示すフローチャート 変更処理の詳細を示すフローチャート 基本ブロック変更処理の詳細を示すフローチャート 照合変更処理が適用されたアセンブラコード情報の一例を示す図 (A)及び(B)照合変更処理が適用された基本ブロック情報の一例を示す図 照合変更処理が適用されたアセンブラコード情報の一例を示す図 照合変更処理が適用された基本ブロック情報の一例を示す図 命令スケジューリング処理を示すフローチャート 模式的に表した依存グラフの一例を示す図 依存関係解析処理の詳細を示すフローチャート 命令再配置処理の詳細を示すフローチャート 依存関係解析処理により生成される依存グラフの一例を示す図 命令再配置処理により生成される機械語命令列の一例を示す図 従来のプロセッサの一構成例を示すブロック図 条件処理の一例を示すフローチャート 従来のプロセッサによって図33の条件処理を実行するためのプログラムの一例を示す図 従来のプロセッサが図34のプログラムを実行した場合のタイミングチャート 複合条件処理の一例を示すフローチャート 従来のプロセッサによって図36の複合条件処理を実行するためのプログラムの一例を示す図
符号の説明
10 プロセッサ
20 命令供給部
21 命令フェッチ部
22 命令レジスタ群
30 解読部
31 命令発行制御部
32 命令デコーダ群
40 実行部
41 実行制御部
42 PC部
43 レジスタファイル
46 条件フラグレジスタ
47 オペランドアクセス部
48 データバス
49 データバス
50 実行部
51 条件フラグ演算部
52 実行制御部
90 プロセッサ
100 コンパイラ装置
110 コンパイラ上流部
120 アセンブラコード生成部
121 条件処理変換部
130 命令スケジューリング部
131 依存関係解析部
131 命令スケジューリング部
132 データ依存判定部
133 逆依存判定部
134 出力依存判定部
135 条件フラグ依存判定部
136 命令再配置部
140 オブジェクトコード生成部
180 ソースファイル
190 オブジェクトファイル
221〜223 命令レジスタ
321〜323 命令デコーダ
441〜443 演算部
451〜453 ゲート
501〜503 論理演算回路
510〜553 セレクタ
601 論理積演算器
602 論理否定演算器
603 論理和演算器
604 論理否定演算器
605 論理否定演算器
606 論理積演算器
607〜608 セレクタ

Claims (7)

  1. 並列実行が可能な複数の命令を記憶する命令記憶部と、
    前記命令記憶部で同時に記憶されている複数の命令の各々を解読する解読部と、
    前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、
    各々が真または偽を示す値を保持する複数の条件フラグレジスタとを備えたプロセッサであって、
    当該プロセッサが実行が可能な命令セット中には、
    各々の命令コードにおいて、少なくとも2つのオペランドの指定、前記少なくとも2つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも1つの指定を行う複数の比較命令からなる比較命令群、および、
    各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも1つの指定を行い、当該指定された少なくとも1つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に前記指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に前記指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群が含まれ、
    前記演算部は、
    前記命令記憶部で同時に記憶されている複数の命令の中に前記比較命令群に属する第1比較命令、第2比較命令、および前記条件実行命令群に属する第1条件実行命令が含まれていた場合、
    前記第1比較命令の解読の結果に応じて、前記第1比較命令の命令コード中で指定される前記少なくとも2つのオペランドの値が前記第1比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第1条件フラグ値の算出、および当該第1条件フラグ値の前記第1比較命令の命令コード中で指定される第1条件フラグレジスタへの格納を実行し、
    前記第2比較命令の解読の結果に応じて、前記第2比較命令の命令コード中で指定される前記少なくとも2つのオペランドの値が前記第2比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す真偽値の算出、当該真偽値と前記第2比較命令の命令コード中で指定される前記第1条件フラグレジスタに保持される前の前記第1条件フラグ値とを少なくとも2つの入力とする第1論理演算による第2条件フラグ値の算出、および前記第2条件フラグ値の前記第2比較命令の命令コード中で指定される第2条件フラグレジスタへの格納を実行し、
    前記第2条件フラグ値に応じて前記第1条件実行命令の演算の結果が有効となるか無効となるかが決定する
    ことを特徴とするプロセッサ。
  2. 前記演算部は、
    前記第2比較命令の解読の結果に応じて、さらに、前記真偽値と前記第1条件フラグ値とを少なくとも2つの入力とし、前記第1論理演算と異なる第2論理演算によって第3条件フラグ値を算出し、当該第3条件フラグ値を前記第2比較命令の命令コード中で指定される第3条件フラグレジスタに格納し、
    前記命令記憶部で同時に記憶されている前記複数の命令の中に前記第1比較命令、第2比較命令および前記第1条件実行命令の他に、さらに前記条件実行命令群に属する第2条件実行命令が含まれていた場合に、前記第3条件フラグ値に応じて前記第2条件実行命令の演算の結果が有効となるか無効となるかを決定する
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記第2条件フラグ値は、前記真偽値と前記第1条件フラグ値とを2つの入力とする論理積によって算出され、
    前記第3条件フラグ値は、前記論理積の論理否定によって算出される
    ことを特徴とする請求項2に記載のプロセッサ。
  4. 前記第2条件フラグ値は、前記真偽値と前記第1条件フラグ値とを2つの入力とする論理和によって算出され、
    前記第3条件フラグ値は、前記論理和の論理否定によって算出される
    ことを特徴とする請求項2に記載のプロセッサ。
  5. 前記第2条件フラグ値は、前記真偽値と前記第1条件フラグ値とを2つの入力とする論理積によって算出され、
    前記第3条件フラグ値は、前記真偽値を論理否定した値と前記第1条件フラグ値とを2つの入力とする論理積によって算出される
    ことを特徴とする請求項2に記載のプロセッサ。
  6. 並列実行が可能な複数の命令を記憶する命令記憶部と、
    前記命令記憶部で同時に記憶されている複数の命令の各々を解読する解読部と、
    前記解読部における各々の解読の結果に応じて、複数の演算を並列に実行する演算部と、
    各々が真または偽を示す値を保持する複数の条件フラグレジスタとを備えたプロセッサであって、
    当該プロセッサが実行が可能な命令セット中には、
    命令コードにおいて、少なくとも2つのオペランドの指定、前記少なくとも2つのオペランドの値に対して実行する比較の条件の指定、及び前記複数の条件フラグレジスタの少なくとも2つの指定を行う比較命令、および、
    各々の命令コードにおいて、当該命令が解読された場合に実行される演算の指定および前記複数の条件フラグレジスタの少なくとも1つの指定を行い、当該指定された少なくとも1つの条件フラグレジスタに保持された値に応じて決まるフラグ値が真を示す場合に前記指定された演算の結果が有効となり、前記フラグ値が偽を示す場合に前記指定された演算の結果が無効となる複数の条件実行命令からなる条件実行命令群が含まれ、
    前記演算部は、
    前記命令記憶部で同時に記憶されている複数の命令の中に前記比較命令および前記条件実行命令群に属する第1条件実行命令が含まれていた場合、
    前記比較命令の解読の結果に応じて、前記比較命令の命令コード中で指定される少なくとも2つのオペランドの値が前記比較命令の命令コード中で指定される比較の条件を満たすものであるか否かを示す第1条件フラグ値の算出、前記第1条件フラグ値を論理否定した第2条件フラグ値の算出、前記第1条件フラグ値の前記比較命令の命令コード中で指定される第1条件フラグレジスタへの格納、および前記第2条件フラグ値の前記比較命令の命令コード中で指定される第2条件フラグレジスタへの格納を実行し、
    前記第1条件フラグ値または前記第2条件フラグ値のいずれか一方に応じて前記第1の条件実行命令の演算の結果が有効となるか無効となるかを決定する
    ことを特徴とするプロセッサ。
  7. 前記演算部は、
    前記命令記憶部で同時に記憶されている前記複数の命令の中に前記比較命令および前記第1条件実行命令の他に、さらに前記条件実行命令群に属する第2条件実行命令が含まれていた場合に、前記第1条件フラグ値に応じて前記第1条件実行命令の演算の結果が有効となるか無効となるかを決定し、前記第2条件フラグ値に応じて前記第2条件実行命令の演算の結果が有効となるか無効となるかを決定する
    ことを特徴とする請求項6に記載のプロセッサ。
JP2006126330A 2006-04-28 2006-04-28 プロセッサ Expired - Fee Related JP3899114B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006126330A JP3899114B2 (ja) 2006-04-28 2006-04-28 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006126330A JP3899114B2 (ja) 2006-04-28 2006-04-28 プロセッサ

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2002174927A Division JP3851228B2 (ja) 2002-06-14 2002-06-14 プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2006209805A JP2006209805A (ja) 2006-08-10
JP3899114B2 true JP3899114B2 (ja) 2007-03-28

Family

ID=36966496

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006126330A Expired - Fee Related JP3899114B2 (ja) 2006-04-28 2006-04-28 プロセッサ

Country Status (1)

Country Link
JP (1) JP3899114B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4228241B2 (ja) 2006-12-13 2009-02-25 ソニー株式会社 演算処理装置
GB2480285A (en) * 2010-05-11 2011-11-16 Advanced Risc Mach Ltd Conditional compare instruction which sets a condition code when it is not executed
JP5813484B2 (ja) * 2011-11-30 2015-11-17 ルネサスエレクトロニクス株式会社 Vliwプロセッサと命令構造と命令実行方法

Also Published As

Publication number Publication date
JP2006209805A (ja) 2006-08-10

Similar Documents

Publication Publication Date Title
JP3851228B2 (ja) プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
EP2569694B1 (en) Conditional compare instruction
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
JP3599409B2 (ja) 分岐予測装置
US9329866B2 (en) Methods and apparatus for adapting pipeline stage latency based on instruction type
KR100900364B1 (ko) 인스트럭션 실행 디바이스, 인스트럭션 실행 방법 및 컴퓨터 판독가능 메모리 매체
CN108780395B (zh) 矢量预测指令
JP2019511056A (ja) 複素数乗算命令
JP4973101B2 (ja) 自動合成装置
US6035122A (en) Compiler for converting source program into object program having instruction with commit condition
KR100316078B1 (ko) 파이프라인방식프로세서
JPH1165844A (ja) パイプラインバイパス機能を有するデータ処理装置
JP5326314B2 (ja) プロセサおよび情報処理装置
JP3899114B2 (ja) プロセッサ
JPH0769795B2 (ja) コンピュータ
JPH07219769A (ja) マイクロプロセッサ
US5991874A (en) Conditional move using a compare instruction generating a condition field
JP2001243070A (ja) プロセッサ及び分岐予測方法並びにコンパイル方法
JP3915019B2 (ja) Vliwプロセッサ、プログラム生成装置、および記録媒体
JP3727324B2 (ja) プロセッサ及びコンパイル装置
JP2503223B2 (ja) 先行制御方式
JP3838360B2 (ja) マイクロプロセッサ
JP2007515718A (ja) 実行フローシノニムのための方法及び装置
JPH08292887A (ja) 命令の分岐方法およびプロセッサ

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061130

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20061222

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20110105

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120105

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130105

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees