JP2004288016A - プロセッサおよびコンパイラ - Google Patents

プロセッサおよびコンパイラ Download PDF

Info

Publication number
JP2004288016A
JP2004288016A JP2003081132A JP2003081132A JP2004288016A JP 2004288016 A JP2004288016 A JP 2004288016A JP 2003081132 A JP2003081132 A JP 2003081132A JP 2003081132 A JP2003081132 A JP 2003081132A JP 2004288016 A JP2004288016 A JP 2004288016A
Authority
JP
Japan
Prior art keywords
instruction
intermediate code
loop
condition
flag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2003081132A
Other languages
English (en)
Other versions
JP3974063B2 (ja
Inventor
Hazuki Okabayashi
はづき 岡林
Tetsuya Tanaka
哲也 田中
Takehito Heiji
岳人 瓶子
Hajime Ogawa
一 小川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003081132A priority Critical patent/JP3974063B2/ja
Priority to EP04006078A priority patent/EP1462933A3/en
Priority to US10/805,381 priority patent/US7380112B2/en
Priority to CNB2004100322020A priority patent/CN1302380C/zh
Publication of JP2004288016A publication Critical patent/JP2004288016A/ja
Application granted granted Critical
Publication of JP3974063B2 publication Critical patent/JP3974063B2/ja
Priority to US12/109,707 priority patent/US20080209407A1/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

【課題】回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供する。
【解決手段】デコード部20と演算部40等を備え、デコード部が命令「jloop C6,C1:C4,TAR,Ra」を解読すると、(1)レジスタRaが0より小さい場合にコンディションフラグC4に0をセットし、(2)コンディションフラグC2の値をコンディションフラグC1に転送し、コンディションフラグC3の値をコンディションフラグC2に転送し、コンディションフラグC4の値をコンディションフラグC3とC6に転送し、(3)レジスタRaに−1を加算し、レジスタRaに格納し、(4)分岐レジスタ(TAR)示すアドレスに分岐する。ジャンプバッファに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。
【選択図】 図1

Description

【0001】
【発明の属する技術分野】
本発明は、DSP(Digital Signal Processor)やCPU(Central Processing Unit)等のプロセッサおよびそのプロセッサで実行される命令を生成するコンパイラに関し、特に、音声や画像等の信号処理に好適なプロセッサおよびコンパイラに関する。
【0002】
【従来の技術】
マルチメディア技術の発展に伴い、音声や画像の信号処理等に代表されるメディア処理を高速に実行するプロセッサが求められている。その要求に応える従来のプロセッサとして、SIMD(Single Instruction Multiple Data)型の命令をサポートしているプロセッサがある。例えば、米国インテル社のPentium(R)/同III/同4のMMX/SSE/SSE2等である。インテル社のMMXであれば、64ビット長のMMXレジスタに格納された最大8個の整数を対象として、1つの命令で同一のオペレーションを実行することができる。
【0003】
このような従来のプロセッサでは、ソフトウェアパイプライニングにより処理の高速化を行なっている(非特許文献1参照。)。
図56は、従来の4段のソフトウェアパイプライニングによる動作を示す図である。ソフトウェアパイプライニングを実現するため、命令を実行するか否かを示すプレディケートに用いられるフラグはプレディケートレジスタに記憶されている。また、それとは別にソフトウェアパイプライニングのプロログ部が終了するまでの回数がループカウンタに記憶され、エピログ部が終了するまでの回数がエピログカウンタに記憶されている。
【0004】
【非特許文献1】
オーム社開発局著「IA−64プロセッサ基本講座」オーム社、1999年8月25日、p.129の図4.32
【0005】
【発明が解決しようとする課題】
しかしながら、上述の従来のプロセッサでは、ループカウンタ、エピログカウンタおよびプレディケートカウンタを別ハードウェア資源として管理している。このため、プロセッサ内に資源を多く持つ必要があり、回路規模が大きくなるという問題がある。
【0006】
また、回路規模が大きくなるに伴い消費電力が大きくなるという問題もある。そこで、本発明は、このような状況に鑑みてなされたものであり、回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供することを目的とする。
【0007】
【課題を解決するための手段】
上記目的を達成するために、本発明に係るプロセッサは、命令を解読し実行するプロセッサであって、条件実行命令のプレディケートに用いられる複数の条件実行用フラグが記憶されたフラグレジスタと、命令を解読する解読手段と、ループ命令が前記解読手段によって解読された場合に、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開した場合のエピログ部に対応する前記複数の条件実行用フラグのうちのいずれかの値に基づいて、前記ループの繰り返し処理を終了する実行手段とを備えることを特徴とする。
【0008】
このように、ループの繰り返し処理の終了の判断が、ループをソフトウェアパイプライニングによって条件実行命令に展開した場合のエピログ部の条件実行用フラグに基づいて行われる。このため、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることはない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【0009】
また、前記フラグレジスタには、前記終了の判断に用いられるループ用フラグがさらに記憶され、前記実行手段は、前記エピログ部における前記複数の条件実行用フラグのうちのいずれかの値を前記ループ用フラグに書き込むようにしてもよい。たとえば、前記実行手段は、前記ソフトウェアパイプライニングの段数をN段(Nは3以上の整数)とし、パイプラインの段数は、前記エピログ部において処理が終了する順に昇順に数えるものとした場合に、(N−2)段目のパイプラインで実行される条件実行命令に対応する条件実行用フラグの値を、前記エピログ部において1サイクル後における前記ループ用フラグに書き込むようにする。
【0010】
このように、ソフトウェアパイプライニングの段数により特定される条件実行用フラグの値を用いて、ループの終了の判断を行っている。このため、ソフトウェアパイプライニングの段数に関わらず、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることはない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【0011】
また、上述のプロセッサは、前記解読手段で解読される前記命令を一時的に記憶する命令バッファをさらに含み、前記解読手段は、前記エピログ部における前記条件実行用フラグの値に基づいて前記条件実行命令を実行しないと判断した場合には、前記ループが終了するまでの間前記命令バッファから前記条件実行命令を読み出さないようにしてもよい。
【0012】
このように、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【0013】
本発明の他の局面に係るコンパイラは、ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、前記ソースプログラムを構文解析するパーサーステップと、解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記中間コードを最適化する最適化ステップと、最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置することを特徴とする。
【0014】
このように、ループをソフトウェアパイプライニングにより展開した場合のプロログ部にループの直前に実行される命令を配置する。このため、ソフトウェアパイプライニングの空きステージを減らすことができ、高速にプログラムを実行することができる。それに伴い、このコンパイラでコンパイルされたプログラムを実行するプロセッサの消費電力を小さくすることができる。
【0015】
本発明のさらに他の局面に係るコンパイラは、ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、前記ソースプログラムを構文解析するパーサーステップと、解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記中間コードを最適化する最適化ステップと、最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、前記最適化ステップでは、前記中間コードに条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられるフラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられるフラグとを異ならせて割付けることを特徴とする。
【0016】
このように、例えばC言語におけるIF−ELSE文のように所定条件の成立時に実行される命令と不成立時に実行される命令とが異なっていても、プレディケートに用いられるフラグを異ならせてそれぞれの命令に対応付ける。このことにより、フラグの値を変えるだけで条件分岐命令と等価な処理を実現することができる。このように簡易な処理で条件分岐命令を実現できるため、このコンパイラでコンパイルされたプログラムを実行するプロセッサの消費電力を小さくすることができる。
【0017】
なお、本発明は、このような特徴的な命令を実行するプロセッサや特徴的な命令を生成するコンパイラとして実現することができるだけでなく、複数のデータ等に対する演算処理方法として実現したり、特徴的な命令を含むプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【0018】
【発明の実施の形態】
本発明に係るプロセッサのアーキテクチャについて説明する。本プロセッサの命令は通常のマイコンに比べて並列性が高く、AVメディア系信号処理技術分野をターゲットとして開発された汎用プロセッサである。携帯電話、モバイルAV機器、デジタルTV、DVD等に共通コアを使用することにより、ソフト再利用性を向上させることができる。また、本プロセッサは、高性能・高コストパフォーマンスで多くのメディア処理を実現することができ、さらに、開発効率向上を目的とした高級言語開発環境を提供する。
【0019】
図1は、本プロセッサの概略ブロック図である。本プロセッサ1は、命令制御部10、デコード部20、レジスタファイル30、演算部40、I/F部50、命令メモリ部60、データメモリ部70、拡張レジスタ部80及びI/Oインターフェース部90から構成される。演算部40は、SIMD型命令の演算を実行する算術論理・比較演算器41〜43,48、乗算・積和演算器44、バレルシフタ45、除算器46及び変換器47からなる。乗算・積和演算器44は、ビット精度を落とさないように、最長で65ビットで累算する。また、乗算・積和演算器44は、算術論理・比較演算器41〜43,48と同様、SIMD型命令の実行が可能である。更に、このプロセッサ1は、算術論理・比較演算命令が最大4並列実行可能である。
【0020】
図2は、算術論理・比較演算器41〜43,48の概略図を示す。算術論理・比較演算器41〜43,48それぞれは、ALU部41a、飽和処理部41b及びフラグ部41cから構成される。ALU部41aは、算術演算器、論理演算器、比較器、TST器からなる。対応する演算データのビット幅は、8ビット(演算器を4並列で使用)、16ビット(演算器を2並列で使用)、32ビットである(全演算器で32ビットデータ処理)。更に算術演算結果に対しては、フラグ部41c等により、オーバーフローの検出とコンディションフラグの生成が行われる。各演算器、比較器、TST器の結果は、算術右シフト、飽和処理部41bによる飽和、最大・最小値検出、絶対値生成処理が行われる。
【0021】
図3は、バレルシフタ45の構成を示すブロック図である。バレルシフタ45は、セレクタ45a、45b、上位バレルシフタ45c、下位バレルシフタ45d及び飽和処理部45eから構成され、データの算術シフト(2の補数体系のシフト)または、論理シフト(符号なしシフト)を実行する。通常は、32ビットもしくは、64ビットのデータを入出力としている。レジスタ30a、30bに格納された被シフトデータに対して、別のレジスタまたは即値でシフト量が指定される。データは、左63ビット〜右63ビットの算術または論理シフトが行われ、入力ビット長で出力される。
【0022】
また、バレルシフタ45は、SIMD型命令に対して、8、16、32、64ビットのデータをシフトすることができる。例えば、8ビットデータのシフトを4並列で処理することができる。
【0023】
算術シフトは、2の補数体系のシフトであり、加算や減算時の小数点の位置合わせや、2のべき乗の乗算(2、2の2乗、2の(−1)乗、2の(−2)乗倍など)等のために行われる。
【0024】
図4は、変換器47の構成を示すブロック図である。変換器47は、飽和ブロック(SAT)47a、BSEQブロック47b、MSKGENブロック47c、VSUMBブロック47、BCNTブロック47e及びILブロック47fから構成される。
【0025】
飽和ブロック(SAT)47aは、入力データに対する飽和処理を行う。32ビットデータを飽和処理するブロックを2つ持つことにより、2並列のSIMD型命令をサポートする。
【0026】
BSEQブロック47bは、MSBから連続する0か1をカウントする。
MSKGENブロック47cは、指定されたビット区間を1、それ以外を0として出力する。
【0027】
VSUMBブロック47dは、入力データを指定されたビット幅に区切り、その総和を出力する。
BCNTブロック47eは、入力データで1となっているビットの数をカウントする。
【0028】
ILブロック47fは、入力データを指定されたビット幅に区切り、各データブロックを入れ換えた値を出力する。
図5は、除算器46の構成を示すブロック図である。除算器46は、被除数を64ビット、除数を32ビットとし、商と剰余を32ビットずつ出力する。商と剰余を求めるまでに34サイクルを必要とする。符号付き、符号なし、両方のデータを扱うことが可能である。ただし、被除数と除数において符号の有無の設定は共通とする。その他、オーバーフローフラグ、0除算フラグを出力する機能を有する。
【0029】
図6は、乗算・積和演算器44の構成を示すブロック図である。乗算・積和演算器44は、2つの32ビット乗算器(MUL)44a、44b、3つの64ビット加算器(Adder)44c〜44e、セレクタ44f及び飽和処理部(Saturation)44gから構成され、以下の乗算、積和演算を行う。
・32×32ビットのsignedの乗算、積和、積差演算
・32×32ビットのunsignedの乗算
・16×16ビットの2並列のsignedの乗算、積和、積差演算
・32×16ビットの2並列のsignedの乗算、積和、積差演算
これらの演算を整数、固定小数点フォーマット(h1、h2、w1、w2)のデータに対して行う。また、これらの演算に対し、丸め、飽和を行う。
【0030】
図7は、命令制御部10の構成を示すブロック図である。命令制御部10は、命令キャッシュ10a、アドレス管理部10b、命令バッファ10c〜10e,10h、ジャンプバッファ10f及びローテーション部(rotation)10gから構成され、通常時及び分岐時の命令供給を行う。128ビットの命令バッファを4つ(命令バッファ10c〜10e,10h)持つことにより、最大並列実行数に対応している。命令制御部10は、分岐処理に関しては、分岐実行前に、分岐先の命令をジャンプバッファ10fに格納しておくとともに、後述するTARレジスタに予め分岐先アドレスを格納しておく(settar命令)。したがって、分岐時においては、命令制御部10は、TARレジスタに格納された分岐先アドレス、及び、ジャンプバッファ10fに格納された分岐先命令を使用して、分岐を行う。
【0031】
なお、本プロセッサ1はVLIWアーキテクチャを持つプロセッサである。ここで、VLIWアーキテクチャとは、1つの命令語中に複数の命令(ロード、ストア、演算、分岐など)を格納し、それらを全て同時に実行するアーキテクチャである。プログラマは、並列実行可能な命令を1つの発行グループとして記述することによって、その発行グループを並列処理させることができる。本明細書では、発行グループの区切りを”;;”で示す。以下に表記例を示す。
(例1)
mov r1, 0x23;;
この命令記述は、命令movのみを実行することを意味する。
(例2)
mov r1, 0x38
add r0, r1, r2
sub r3, r1, r2;;
これらの命令記述は、命令mov、add、subを3並列で実行することを意味する。
【0032】
命令制御部10は、発行グループを識別し、デコード部20に送る。デコード部20では、発行グループの命令を解析し、必要な資源を制御する。
次に、本プロセッサ1が備えるレジスタについて説明する。
【0033】
本プロセッサ1のレジスタセットは、以下の表1に示される通りである。
【0034】
【表1】
Figure 2004288016
【0035】
また、本プロセッサ1のフラグセット(後述する条件フラグレジスタ等で管理されるフラグ)は、以下の表2に示される通りである。
【0036】
【表2】
Figure 2004288016
【0037】
図8は、汎用レジスタ(R0〜R31)30aの構造を示す図である。汎用レジスタ(R0〜R31)30aは、実行対象となっているタスクのコンテキストの一部を構成し、データまたはアドレスを格納する32ビットのレジスタ群である。なお、汎用レジスタR30およびR31は、それぞれグローバルポインタ、スタックポインタとして、ハードウェアが使用する。
【0038】
図9は、リンクレジスタ(LR)30cの構造を示す図である。なお、このリンクレジスタ(LR)30cと関連して、本プロセッサ1は、図示されていない退避レジスタ(SVR)も備える。リンクレジスタ(LR)30cは、関数コール時のリターンアドレスを格納する32ビットのレジスタである。なお、退避レジスタ(SVR)は、関数コール時の条件フラグレジスタのコンディションフラグ(CFR.CF)を退避する16ビットのレジスタである。リンクレジスタ(LR)30cは、後述する分岐レジスタ(TAR)と同様に、ループ高速化にも使用される。下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0039】
例えば、call(brl,jmpl)命令を実行した場合には、本プロセッサ1は、リンクレジスタ(LR)30cに戻りアドレスを退避し、退避レジスタ(SVR)にコンディションフラグ(CFR.CF)を退避する。また、jmp命令を実行した場合には、リンクレジスタ(LR)30cから戻りアドレス(分岐先アドレス)を取り出し、プログラムカウンタ(PC)を復帰させる。さらに、ret(jmpr)命令を実行した場合には、リンクレジスタ(LR)30cから分岐先アドレス(戻りアドレス)を取り出し、プログラムカウンタ(PC)に格納(復帰)する。さらに、退避レジスタ(SVR)からコンディションフラグを取り出し、条件フラグレジスタ(CFR)32のコンディションンフラグ領域CFR.CFに格納(復帰)する。
【0040】
図10は、分岐レジスタ(TAR)30dの構造を示す図である。分岐レジスタ(TAR)30dは、分岐ターゲットアドレスを格納する32ビットのレジスタである。主に、ループの高速化に用いられる。下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0041】
例えば、jmp,jloop命令を実行した場合には、本プロセッサ1は、分岐レジスタ(TAR)30dから分岐先アドレスを取り出し、プログラムカウンタ(PC)に格納する。分岐レジスタ(TAR)30dに格納されたアドレスの命令が分岐用命令バッファに格納されている場合は、分岐ペナルティが0になる。分岐レジスタ(TAR)30dにループの先頭アドレスを格納しておくことでループを高速化することができる。
【0042】
図11は、プログラム状態レジスタ(PSR)31の構造を示す図である。プログラム状態レジスタ(PSR)31は、実行対象となっているタスクのコンテキストの一部を構成し、以下に示されるプロセッサ状態情報を格納する32ビットのレジスタである。
【0043】
ビットSWE:VMP(Virtual Multi−Processor)のLP(Logical Processor)切替えイネーブルを示す。「0」はLP切替え不許可を示し、「1」はLP切替え許可を示す。
【0044】
ビットFXP:固定小数点モードを示す。「0」はモード0を示し、「1」はモード1を示す。
ビットIH:割込み処理フラグであり、マスカブル割込み処理中であることを示す。「1」は割込み処理中であることを示し、「0」は割込み処理中でないことを示す。割込みが発生すると自動的にセットされる。rti命令で割込みから復帰したところが、他の割込み処理中かプログラム処理中であるのかを見分けるために使用される。
【0045】
ビットEH:エラーまたはNMIを処理中であることを示すフラグである。「0」はエラー/NMI割込み処理中でないことを示し、「1」はエラー/NMI割込み処理中であることを示す。EH=1のとき、非同期エラーまたはNMIが発生した場合は、マスクされる。また、VMPイネーブル時はVMPのプレート切り替えがマスクされる。
【0046】
ビットPL[1:0]:特権レベルを示す。「00」は特権レベル0、つまり、プロセッサアブストラクションレベルを示し、「01」は特権レベル1(設定できない)を示し、「10」は特権レベル2、つまり、システムプログラムレベルを示し、「11」は特権レベル3、つまり、ユーザプログラムレベルを示す。
【0047】
ビットLPIE3:LP固有割込み3イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットLPIE2:LP固有割込み2イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
【0048】
ビットLPIE1:LP固有割込み1イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
ビットLPIE0:LP固有割込み0イネーブルを示す。「1」は割込み許可を示し、「0」は割込み不許可を示す。
【0049】
ビットAEE:ミスアライメント例外イネーブルを示す。「1」はミスアライメント例外許可を示し、「0」はミスアライメント例外不許可を示す。
ビットIE:レベル割込みイネーブルを示す。「1」はレベル割込み許可を示し、「0」はレベル割込み不許可を示す。
【0050】
ビットIM[7:0]:割込みマスクを示す。レベル0〜7まで定義され、個々のレベルでマスクすることができる。レベル0が最も高いレベルとなる。IMによりマスクされていない割込み要求のうち最も高いレベルを持った割込み要求のみがプロセッサ1に受理される。割込み要求を受理すると受理したレベル以下のレベルはハードウェアで自動的にマスクされる。IM[0]はレベル0のマスクであり、IM[1]はレベル1のマスクであり、IM[2]はレベル2のマスクであり、IM[3]はレベル3のマスクであり、IM[4]はレベル4のマスクであり、IM[5]はレベル5のマスクであり、IM[6]はレベル6のマスクであり、IM[7]はレベル7のマスクである。
【0051】
reserved:予約ビットを示す。常に0が読み出される。書き込む時は0を書き込む必要がある。
図12は、条件フラグレジスタ(CFR)32の構造を示す図である。条件フラグレジスタ(CFR)32は、実行対象となっているタスクのコンテキストの一部を構成する32ビットのレジスタであり、コンディションフラグ(条件フラグ)、オペレーションフラグ(演算フラグ)、ベクタコンディションフラグ(ベクタ条件フラグ)、演算命令用ビット位置指定フィールド、SIMDデータアライン情報フィールドから構成される。
【0052】
ビットALN[1:0]:アラインモードを示す。valnvc命令のアラインモードを設定する。
ビットBPO[4:0]:ビットポジションを示す。ビット位置指定の必要な命令で使用する。
【0053】
ビットVC0〜VC3:ベクタ条件フラグである。LSB側のバイトあるいはハーフワードから順にVC0に対応し、MSB側がVC3に対応する。
ビットOVS:オーバーフローフラグ(サマリー)である。飽和発生やオーバーフロー検出でセットされる。検出されなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【0054】
ビットCAS:キャリーフラグ(サマリー)である。addc命令でキャリーまたはsubc命令でボローが発生した場合セットされる。addc命令でキャリーもしくはsubc命令でボローが発生しなかった場合は、命令実行前の値を保持する。クリアはソフトで行う必要がある。
【0055】
ビットC0〜C7:コンディションフラグである。フラグC7は常に値が1である。フラグC7へのFALSE条件の反映(0書き込み)は無視される。
reserved:予約ビットを示す。常に0が読み出される。書き込む時は0を書き込む必要がある。
【0056】
図13は、アキュムレータ(M0,M1)30bの構造を示す図である。このアキュムレータ(M0,M1)30bは、実行対象となっているタスクのコンテキストの一部を構成し、図13(a)に示される32ビットレジスタMH0−MH1(乗除算・積和用レジスタ(上位32ビット))と、図13(b)に示される32ビットレジスタML0−ML1乗除算・積和用レジスタ(下位32ビット)とからなる。
【0057】
レジスタMH0−MHは、乗算命令では結果の上位32ビットを格納するのに使用される。積和命令ではアキュムレータの上位32ビットとして使用される。また、ビットストリームを取り扱う場合に汎用レジスタと組み合わせて使用することができる。レジスタML0−ML1は、乗算命令では結果の下位32ビットを格納するのに使用される。積和命令ではアキュムレータの下位32ビットとして使用される。
【0058】
図14は、プログラムカウンタ(PC)33の構造を示す図である。このプログラムカウンタ(PC)33は、実行対象となっているタスクのコンテキストの一部を構成し、実行中の命令のアドレスを保持する32ビットのカウンタである。下位1ビットは常に0が格納される。
【0059】
図15は、PC退避用レジスタ(IPC)34の構造を示す図である。このPC退避用レジスタ(IPC)34は、実行対象となっているタスクのコンテキストの一部を構成する32ビットのレジスタであり、下位1ビットは常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0060】
図16は、PSR退避用レジスタ(IPSR)35の構造を示す図である。このPSR退避用レジスタ(IPSR)35は、実行対象となっているタスクのコンテキストの一部を構成し、プログラム状態レジスタ(PSR)31を退避するための32ビットのレジスタであり、プログラム状態レジスタ(PSR)31の予約ビットに対応する部分は常に0が読み出されるが、書き込み時には0を書き込む必要がある。
【0061】
次に、本プロセッサ1のメモリ空間について説明する。本プロセッサ1では、4GBのリニアなメモリ空間を32分割し、128MB単位の空間に命令SRAM(Static RAM)とデータSRAMが割り当てられる。この128MBの空間を1ブロックとして、SAR(SRAM Area Register)にアクセスしたいブロックを設定する。アクセスされたアドレスがSARで設定された空間である場合は、直接命令SRAM/データSRAMに対してアクセスを行うが、SARで設定された空間でない場合は、バスコントローラ(BCU)に対してアクセス要求を出する。BCUにはオン・チップ・メモリ(OCM)、外部メモリ、外部デバイス、I/Oポート等が接続されており、それらのデバイスに対して読み書きを行うことができる。
【0062】
図17は、本プロセッサ1のパイプライン動作を示すタイミング図である。本プロセッサ1は、本図に示されるように、基本的に命令フェッチ、命令割り当て(ディスパッチ)、デコード、実行、書き込みの5段パイプラインで構成されている。
【0063】
図18は、本プロセッサ1による命令実行時の各パイプライン動作を示すタイミング図である。命令フェッチステージでは、プログラムカウンタ(PC)33で指定されるアドレスの命令メモリをアクセスし、命令を命令バッファ10c〜10e,10h等に転送する。命令割り当てステージでは、分岐系命令に対する分岐先アドレス情報の出力、入力レジスタ制御信号の出力、可変長命令の割り当てを行い、命令をインストラクションレジスタ(IR)に転送する。デコードステージでは、IRをデコード部20に入力し、演算器制御信号、メモリアクセス信号を出力する。実行ステージでは、演算を実行、演算結果をデータメモリか汎用レジスタ(R0〜R31)30aに出力する。書き込みステージでは、データ転送、演算結果を汎用レジスタに格納する。
【0064】
本プロセッサ1は、VLIWアーキテクチャにより上記の処理を最高4並列で行うことができる。したがって、図18に示された動作については、本プロセッサ1は、図19に示されるタイミングで並列に実行する。
【0065】
次に、以上のように構成された本プロセッサ1の命令セットについて説明する。
以下の表3〜表5は、本プロセッサ1が実行する命令をカテゴリー別に分類した表である。
【0066】
【表3】
Figure 2004288016
【0067】
【表4】
Figure 2004288016
【0068】
【表5】
Figure 2004288016
【0069】
なお、表中の「演算器」は、その命令が使用する演算器を示す。演算器の略号の意味は次の通りである。つまり、「A」はALU命令、「B」は分岐命令、「C」は変換命令、「DIV」は除算命令、「DBGM」はデバッグ命令、「M」はメモリアクセス命令、「S1」、「S2」はシフト命令、「X1」、「X2」は乗算命令を意味する。
【0070】
図20は、本プロセッサ1が実行する命令のフォーマットを示す図である。そのフォーマットには、図20(a)に示される16ビット命令フォーマットと、図20(b)に示される32ビット命令フォーマットとがある。
【0071】
なお、図中における略号の意味は次の通りである。つまり、「E」はエンドビット(並列実行の境界)、「F」はフォーマットビット(00、01、10:16ビット命令フォーマット、11:32ビット命令フォーマット)、「P」はプレディケート(実行条件:8個の条件フラグC0〜C7のいずれかを指定)、「OP」はオペコードフィールド、「R」はレジスタフィールド、「I」は即値フィールド、「D」ディスプースメントフィールドを意味する。なお、「E」フィールドはVLIWに特有のもので、E=0の命令は次の命令と並列に実行される。つまり、「E」フィールドによって並列度が可変のVLIWを実現している。また、プレディケートは、コンディションフラグC0〜C7の値に基づいて命令を実行させるか実行させないかを制御するフラグであり、分岐命令を用いることなく選択的な実行を可能にする高速化技術の一つである。
【0072】
例えば、命令中のプレディケートを示すコンディションフラグC0が1の場合には、コンディションフラグC0が割り当てられた命令は実行されるが、0の場合には、当該命令は実行されない。
【0073】
図21〜図36は、本プロセッサ1が実行する命令の概略的な機能を説明する図である。つまり、図21は、カテゴリー「ALUadd(加算)系」に属する命令を説明する図であり、図22は、カテゴリー「ALUsub(減算)系」に属する命令を説明する図であり、図23は、カテゴリー「ALUlogic(論理演算)系ほか」に属する命令を説明する図であり、図24は、カテゴリー「CMP(比較演算)系」に属する命令を説明する図であり、図25は、カテゴリー「mul(乗算)系」に属する命令を説明する図であり、図26は、カテゴリー「mac(積和演算)系」に属する命令を説明する図であり、図27は、カテゴリー「msu(積差演算)系」に属する命令を説明する図であり、図28は、カテゴリー「MEMld(メモリ読み出し)系」に属する命令を説明する図であり、図29は、カテゴリー「MEMstore(メモリ書き出し)系」に属する命令を説明する図であり、図30は、カテゴリー「BRA(分岐)系」に属する命令を説明する図であり、図31は、カテゴリー「BSasl(算術バレルシフト)系ほか」に属する命令を説明する図であり、図32は、カテゴリー「BSlsr(論理バレルシフト)系ほか」に属する命令を説明する図であり、図33は、カテゴリー「CNVvaln(算術変換)系」に属する命令を説明する図であり、図34は、カテゴリー「CNV(一般変換)系」に属する命令を説明する図であり、図35は、カテゴリー「SATvlpk(飽和処理)系」に属する命令を説明する図であり、図36は、カテゴリー「ETC(その他)系」に属する命令を説明する図である。
【0074】
これらの図において、項目「SIMD」は、その命令の型(SISD(SINGLE)かSIMDかの区別)を示し、項目「サイズ」は、演算の対象となる個々のオペランドのサイズを示し、項目「命令」は、その命令のオペコードを示し、項目「オペランド」は、その命令のオペランドを示し、項目「CFR」は、条件フラグレジスタの変化を示し、項目「PSR」は、プロセッサ状態レジスタの変化を示し、項目「代表的な動作」は、動作の概要を示し、項目「演算器」は、使用される演算器を示し、項目「3116」は、命令のサイズを示す。
【0075】
次に、いくつかの特徴的な命令について、本プロセッサ1の動作を説明する。なお、各命令の動作の説明に用いられている各種記号の意味は、以下の表6〜表10の通りである。
【0076】
【表6】
Figure 2004288016
【0077】
【表7】
Figure 2004288016
【0078】
【表8】
Figure 2004288016
【0079】
【表9】
Figure 2004288016
【0080】
【表10】
Figure 2004288016
【0081】
[命令jloop、settar]
命令jloopは、ループにおける分岐とコンディションフラグ(ここでは、プレディケート)の設定とを行う命令である。例えば、
jloop C6,Cm,TAR,Ra
であれば、プロセッサ1は、アドレス管理部10b等により、(1)コンディションフラグCmに1をセットし、(2)レジスタRaの値が0より小さい場合にコンディションフラグC6に0をセットし、(3)レジスタRaの値に−1を加算し、レジスタRaに格納し、(4)分岐レジスタ(TAR)30dが示すアドレスに分岐する。ジャンプバッファ10f(分岐用命令バッファ)に分岐用命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図37に示される通りである。
【0082】
一方、命令settarは、分岐先アドレスを分岐レジスタ(TAR)30dに格納するとともにコンディションフラグ(ここでは、プレディケート)の設定を行う命令である。例えば、
settar C6,Cm,D9
であれば、プロセッサ1は、アドレス管理部10b等により、(1)プログラムカウンタ(PC)33とディスプレースメント値(D9)を加算したアドレスを分岐レジスタ(TAR)30dに格納し、(2)そのアドレスの命令をフェッチしてジャンプバッファ10f(分岐用命令バッファ)に格納し、(3)コンディションフラグC6を1に、コンディションフラグCmを0にセットする。詳細な動作は図38に示される通りである。
【0083】
これらの命令jloop及び命令settarは、プロログエピログ除去型(以下、プロエピ除去型)のソフトウェアパイプライニングによるループの高速化に有効な命令であり、通常、対で用いられる。なお、ソフトウェアパイプライニングは、コンパイラによるループ高速化手法の1つであり、ループ構造をプロログ部、カーネル部、 エピログ部に変換し、カーネル部については、各イタレーション(繰り返し)をその前後のイタレーションとオーバーラップさせることで、複数の命令が効率的に並列実行されることを可能にする。
【0084】
また、プロエピ除去型とは、図39に示されるように、プロログ部及びエピログ部をプレディケートによる条件実行命令とすることで、プロログ部とエピログ部とを見かけ上、除去することである。図39では、プロエピ除去型2ステージソフトウェアパイプライニングにおいて、コンディションフラグC6とC4は、それぞれ、エピログ命令(ステージ2)用、プロログ命令(ステージ1)用のプレディケートとなっている。
【0085】
例えば、いま、図40に示されるC言語のソースプログラムに対して、上述の命令jloop及び命令settarを用いた場合には、コンパイラは、プロエピ除去型のソフトウェアパイプライニングによって、図41に示される機械語プログラムを生成する。
【0086】
この機械語プログラムのループ部分(ラベルL00023〜命令jloopまで)から分かるように、コンディションフラグC4のセット及びリセットがそれぞれ命令jloop及びsettarで行われ、そのための特別な命令が不要となり、ループ実行が2サイクルで済んでいる。
【0087】
なお、本プロセッサ1は、2ステージのソフトウェアパイプライニングだけでなく、3ステージのソフトウェアパイプライニングにも適用できる命令「jloop C6,C2:C4,TAR,Ra」及び命令「settar C6,C2:C4,D9」を備える。これらの命令「jloop C6,C2:C4,TAR,Ra」及び命令「settar C6,C2:C4,D9」は、上記2ステージ用の命令「jloop C6,Cm,TAR,Ra」及び命令「settar C6,Cm,D9」におけるレジスタCmがレジスタC2、C3及びC4に拡張されたものに相当する。
【0088】
つまり、
jloop C6,C2:C4,TAR,Ra
であれば、プロセッサ1は、アドレス管理部10b等により、(1)レジスタRaが0より小さい場合にコンディションフラグC4に0をセットし、(2)コンディションフラグC3の値をコンディションフラグC2に転送し、コンディションフラグC4の値をコンディションフラグC3とC6に転送し、(3)レジスタRaに−1を加算し、レジスタRaに格納し、(4)分岐レジスタ(TAR)30dが示すアドレスに分岐する。ジャンプバッファ10fに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は図42に示される通りである。
【0089】
また、
settar C6,C2:C4,D9
であれば、プロセッサ1は、アドレス管理部10b等により、(1)プログラムカウンタ(PC)33とディスプレースメント値(D9)を加算したアドレスを分岐レジスタ(TAR)30dに格納し、(2)そのアドレスの命令をフェッチしてジャンプバッファ10f(分岐用命令バッファ)に格納し、(3)コンディションフラグC4とC6を1に、コンディションフラグC2とC3を0にセットする。詳細な動作は図43に示される通りである。
【0090】
これらの3ステージ用の命令「jloop C6,C2:C4,TAR,Ra」及び命令「settar C6,C2:C4,D9」におけるコンディションフラグの役割は、図44に示される通りである。図44(a)に示されるように、プロエピ除去型3ステージソフトウェアパイプライニングにおいて、コンディションフラグC2、C3、C4はそれぞれステージ3用、ステージ2用、ステージ1用のプレディケートとなっている。図44(b)は、そのときのフラグ転送による実効の推移を示す図である。
【0091】
例えば、いま、図45に示されるC言語のソースプログラムに対して、図42および図43にそれぞれ示される命令jloop及び命令settarを用いた場合には、コンパイラは、エピログ除去型のソフトウェアパイプライニングによって、図46に示される機械語プログラムを生成する。
【0092】
本プロセッサ1は、さらに、4ステージのソフトウェアパイプライニングに適用可能な命令「jloop C6,C1:C4,TAR,Ra」および命令「settar C6,C1:C4,D9」を備える。
【0093】
つまり、
jloop C6,C1:C4,TAR,Ra
であれば、プロセッサ1は、アドレス管理部10b等により、(1)レジスタRaが0より小さい場合にコンディションフラグC4に0をセットし、(2)コンディションフラグC2の値をコンディションフラグC1に転送し、コンディションフラグC3の値をコンディションフラグC2に転送し、コンディションフラグC4の値をコンディションフラグC3とC6に転送し、(3)レジスタRaに−1を加算し、レジスタRaに格納し、(4)分岐レジスタ(TAR)30d示すアドレスに分岐する。ジャンプバッファ10fに分岐先の命令が充填されていない場合は、分岐先の命令を充填する。詳細な動作は、図47に示されるとおりである。
【0094】
一方、命令settarは、分岐先アドレスを分岐レジスタ(TAR)30dに格納するとともにコンディションフラグ(ここでは、プレディケート)の設定を行う命令である。例えば、
settar C6,C1:C4,D9
であれば、プロセッサ1は、アドレス管理部10b等により、(1)プログラムカウンタ(PC)33とディスプレースメント値(D9)を加算したアドレスを分岐レジスタ(TAR)30dに格納し、(2)そのアドレスの命令をフェッチしてジャンプバッファ10f(分岐用命令バッファ)に格納し、(3)コンディションフラグC4とC6を1に、コンディションフラグC1とC2とC3を0にセットする。詳細な動作は図48に示される通りである。
【0095】
例えば、いま、図49に示されるC言語のソースプログラムに対して、図47および図48にそれぞれ示される命令jloop及び命令settarを用いた場合には、コンパイラは、エピログ除去型のソフトウェアパイプライニングによって、図50に示される機械語プログラムを生成する。
【0096】
図51は、図47および図48にそれぞれ示される命令jloop及び命令settarを用いた4段のソフトウェアパイプライニングによる動作を示す図である。
【0097】
4段のソフトウェアパイプライニングを実現するために、命令を実行するか否かを示すプレディケートに用いられるコンディションフラグC1〜C4が用いられる。命令A、B、CおよびDがそれぞれソフトウェアパイプライニングの1段、2段、3段および4段で実行される命令である。また、命令A、B、CおよびDには、コンディションフラグC4、C3、C2およびC1がそれぞれ対応付けられているものとする。さらに、命令jloopには、コンディションフラグC6が対応付けられているものとする。
【0098】
図52は、図47に示される命令jloop用のコンディションフラグC6の設定方法の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をN段(Nは3以上の整数)とする。すると、エピログ部において(N−2)段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが0になった次のサイクルでループが終了するというものである。
【0099】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグC6の値は常に1に設定し、エピログ部に入った段階からコンディションフラグC3(ソフトウェアパイプラインの(N−2)段目に実行される条件実行命令に対応するコンディションフラグ)の値を監視し、コンディションフラグC3の値を1サイクル後のコンディションフラグC6に書き込む。このようにすることにより、命令jloopに割り当てられたコンディションフラグC6がループ処理の終了時には0に設定され、ループ処理から抜けることができる。例えば、図50に示される機械語プログラムの例ではコンディションフラグC6が0になると、命令「jloop C6,C1:C4,tar,r4」は実行されずに、その次に配置された命令「ret」が実行され、ループ処理から抜け出すことになる。
【0100】
なお、図51に示されるようにエピログ部において、あるコンディションフラグの値が0になると、そのコンディションフラグの値は、ループ処理が終了するまでの間0である。すなわち、着目しているコンディションフラグに対応する条件実行命令がループ処理が終了するまでの間実行されないことを示す。例えば、5サイクル目でコンディションフラグC4の値が0になった場合には、ループが終了する7サイクル目まではコンディションフラグC4の値は0である。このため、5サイクル目から7サイクル目まではコンディションフラグC4に対応する命令Aは実行されない。
【0101】
よって、エピログ部においてコンディションフラグが0になった場合には、ループ処理が終了するまでの間、そのコンディションフラグに対応する命令が格納された命令バッファ10c(10d,10e,10h)より命令を読み出さないように制御を行なってもよい。
【0102】
また、各命令の一部分はコンディションフラグの番号を示している。このため、デコード部20は、コンディションフラグの番号のみを命令バッファ10c(10d,10e,10h)より読出し、その番号に基づいて、コンディションフラグの値を調べ、コンディションフラグの値が0であれば、命令バッファ10c(10d,10e,10h)から命令を読み出さないようにしてもよい。
【0103】
また、図53に示されるようにループの前後に実行される命令をプロログ部およびエピログ部にそれぞれ配置し、実行するようにしてもよい。例えば、ループの直前に実行される命令Xおよび直後に実行される命令YにコンディションフラグC5を割り当て、エピログ部およびプロログ部における空きステージにおいて命令を実行させる。これにより、エピログ部およびプロログ部における空きステージを減らすことができる。
【0104】
また、C言語におけるIF−ELSE文のように所定条件の成立時に実行される命令と不成立時に実行される命令とが異なっている場合には、条件成立時に実行される条件実行命令のコンディションフラグと条件不成立時に実行される条件実行命令のコンディションフラグとを異ならせ、条件に応じてコンディションフラグの値を変える。このように簡易な処理で条件分岐命令を実現することができる。
【0105】
また、図52に示される命令jloop用のコンディションフラグC6の設定方法の代わりに以下に述べるようなコンディションフラグC6の設定方法を用いてもよい。図54は、図47に示される命令jloop用のコンディションフラグC6の設定方法の他の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をN段(Nは2以上の整数)とする。すると、エピログ部において(N−1)段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが0になったサイクルと同一のサイクルでループが終了するというものである。
【0106】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグC6の値は常に1に設定し、エピログ部に入った段階からコンディションフラグC2(ソフトウェアパイプラインの(N−1)段目に実行される条件実行命令に対応するコンディションフラグ)の値を監視し、コンディションフラグC2の値を同一サイクル内でコンディションフラグC6に書き込む。このようにすることにより、命令jloopに割り当てられたコンディションフラグC6がループ処理の終了時には0に設定され、ループ処理から抜けることができる。
【0107】
さらに、以下に述べるようなコンディションフラグC6の設定方法を用いてもよい。図55は、図47に示される命令jloop用のコンディションフラグC6の設定方法のさらに他の一例を説明するための図である。この方法は、以下の性質を利用している。すなわち、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開したときのソフトウェアパイプラインの段数をN段(Nは4以上の整数)とする。すると、エピログ部において(N−3)段目のパイプラインで実行される条件実行命令に対応するコンディションフラグが0になった2サイクル後でループが終了するというものである。
【0108】
従って、ループ処理のプロログ部およびカーネル部においては、コンディションフラグC6の値は常に1に設定し、エピログ部に入った段階からコンディションフラグC4(ソフトウェアパイプラインの(N−3)段目に実行される条件実行命令に対応するコンディションフラグ)の値を監視し、コンディションフラグC4の値を2サイクル後のコンディションフラグC6に書き込む。このようにすることにより、命令jloopに割り当てられたコンディションフラグC6がループの終了時には0に設定され、ループから抜けることができる。
【0109】
なお、本実施の形態では4ステージまでのソフトウェアパイプライニングについて説明したが、5ステージ以上のソフトウェアパイプライニングについても同様であり、プレディケート用のコンディションフラグを増やせばよい。
【0110】
以上説明した特徴を有する機械語命令は、コンパイラにより生成される。コンパイラは、ソースプログラムを構文解析するパーサーステップと、解析されたソースプログラムを中間コードに変換する中間コード変換ステップと、中間コードを最適化する最適化ステップと、最適化された中間コードを機械語命令に変換するコード生成ステップとを含む。
【0111】
以上説明したように、本実施の形態によると、ソフトウェアパイプライニングのエピログ部のコンディションフラグを用いてループ用のコンディションフラグの設定を行っている。このため、ループ処理終了の判断のためにカウンタ等の特別なハードウェア資源を用いる必要がなく、回路規模が大きくなることがない。また、それに伴いプロセッサの消費電力を小さくすることができる。
【0112】
また、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【0113】
さらに、ループの前後に実行される命令をソフトウェアパイプライニングのプロログ部およびエピログ部にそれぞれ配置することにより、ソフトウェアパイプライニングの空きステージを減らすことができ、高速にプログラムを実行することができる。それに伴い、プロセッサの消費電力を小さくすることができる。
【0114】
さらにまた、エピログ部において条件実行命令が実行されなくなると、着目しているループ処理が終了するまでの間、そのソフトウェアパイプライニングでは、条件実行命令は実行されない。このため、その間、命令バッファから条件実行命令を読み出す必要がなく、それに伴いプロセッサの消費電力を小さくすることができる。
【0115】
【発明の効果】
以上の説明から明らかなように、本発明に係るプロセッサによると、回路規模が小さく、かつ低消費電力でループ処理を高速に実行することができるプロセッサを提供することができる。
【0116】
また、プロセッサの消費電力を小さくすることができる機械語命令を生成可能なコンパイラを提供することができる。
以上のように、本発明に係るプロセッサは、低消費電力で命令を実行することができる。このため、携帯電話、モバイルAV機器、デジタルTV、DVD等に共通のコアプロセッサとして使用可能であり、高性能・高コストパフォーマンスなマルチメディア機器の出現が望まれる今日における実用的価値は極めて高い。
【図面の簡単な説明】
【図1】本発明に係るプロセッサの概略ブロック図である。
【図2】同プロセッサの算術論理・比較演算器の概略図を示す。
【図3】同プロセッサのバレルシタの構成を示すブロック図である。
【図4】同プロセッサの変換器の構成を示すブロック図である。
【図5】同プロセッサの除算器の構成を示すブロック図である。
【図6】同プロセッサの乗算・積和演算器の構成を示すブロック図である。
【図7】同プロセッサの命令制御部の構成を示すブロック図である。
【図8】同プロセッサの汎用レジスタ(R0〜R31)の構造を示す図である。
【図9】同プロセッサのリンクレジスタ(LR)の構造を示す図である。
【図10】同プロセッサの分岐レジスタ(TAR)の構造を示す図である。
【図11】同プロセッサのプログラム状態レジスタ(PSR)の構造を示す図である。
【図12】同プロセッサの条件フラグレジスタ(CFR)の構造を示す図である。
【図13】同プロセッサのアキュムレータ(M0,M1)の構造を示す図である。
【図14】同プロセッサのプログラムカウンタ(PC)の構造を示す図である。
【図15】同プロセッサのPC退避用レジスタ(IPC)の構造を示す図である。
【図16】同プロセッサのPSR退避用レジスタ(IPSR)の構造を示す図である。
【図17】同プロセッサのパイプライン動作を示すタイミング図である。
【図18】同プロセッサによる命令実行時の各パイプライン動作を示すタイミング図である。
【図19】同プロセッサの並列動作を示す図である。
【図20】同プロセッサが実行する命令のフォーマットを示す図である。
【図21】カテゴリー「ALUadd(加算)系」に属する命令を説明する図である。
【図22】カテゴリー「ALUsub(減算)系」に属する命令を説明する図である。
【図23】カテゴリー「ALUlogic(論理演算)系ほか」に属する命令を説明する図である。
【図24】カテゴリー「CMP(比較演算)系」に属する命令を説明する図である。
【図25】カテゴリー「mul(乗算)系」に属する命令を説明する図である。
【図26】カテゴリー「mac(積和演算)系」に属する命令を説明する図である。
【図27】カテゴリー「msu(積差演算)系」に属する命令を説明する図である。
【図28】カテゴリー「MEMld(メモリ読み出し)系」に属する命令を説明する図である。
【図29】カテゴリー「MEMstore(メモリ書き出し)系」に属する命令を説明する図である。
【図30】カテゴリー「BRA(分岐)系」に属する命令を説明する図である。
【図31】カテゴリー「BSasl(算術バレルシフト)系ほか」に属する命令を説明する図である。
【図32】カテゴリー「BSlsr(論理バレルシフト)系ほか」に属する命令を説明する図である。
【図33】カテゴリー「CNVvaln(算術変換)系」に属する命令を説明する図である。
【図34】カテゴリー「CNV(一般変換)系」に属する命令を説明する図である。
【図35】カテゴリー「SATvlpk(飽和処理)系」に属する命令を説明する図である。
【図36】カテゴリー「ETC(その他)系」に属する命令を説明する図である。
【図37】命令「jloop C6,Cm,TAR,Ra」の詳細な動作を説明する図である。
【図38】命令「settar C6,Cm,D9」の詳細な動作を説明する図である。
【図39】プロエピ除去型2ステージソフトウェアパイプライニングを示す図である。
【図40】C言語のソースプログラムのリストを示す図である。
【図41】本実施の形態の命令jloop及び命令settarを用いて生成される機械語プログラムの例を示す図である。
【図42】命令「jloop C6,C2:C4,TAR,Ra」の詳細な動作を説明する図である。
【図43】命令「settar C6,C2:C4,D9」の詳細な動作を説明する図である。
【図44】プロエピ除去型3ステージソフトウェアパイプライニングを示す図である。
【図45】C言語のソースプログラムのリストを示す図である。
【図46】本実施の形態の命令jloop及び命令settarを用いて生成される機械語プログラムの例を示す図である。
【図47】命令「jloop C6,C1:C4,TAR,Ra」の詳細な動作を説明する図である。
【図48】命令「settar C6,C1:C4,D9」の詳細な動作を説明する図である。
【図49】C言語のソースプログラムのリストを示す図である。
【図50】本実施の形態の命令jloop及び命令settarを用いて生成される機械語プログラムの例を示す図である。
【図51】図47および図48にそれぞれ示される命令jloop及び命令settarを用いた4段のソフトウェアパイプライニングによる動作を示す図である。
【図52】図47に示される命令jloop用のコンディションフラグC6の設定方法の一例を説明するための図である。
【図53】ループの前後に実行される命令をプロログ部およびエピログ部にそれぞれ取り込んだ4段のソフトウェアパイプライニングによる動作を示す図である。
【図54】図47に示される命令jloop用のコンディションフラグC6の設定方法の他の一例を説明するための図である。
【図55】図47に示される命令jloop用のコンディションフラグC6の設定方法のさらに他の一例を説明するための図である。
【図56】従来の4段のソフトウェアパイプライニングによる動作を示す図である。
【符号の説明】
1 プロセッサ
10 命令制御部
10a 命令キャッシュ
10b アドレス管理部
10c〜10e,10h 命令バッファ
10f ジャンプバッファ
10g ローテーション部
20 デコード部
30 レジスタファイル
30a 汎用レジスタ(R0〜R31)
30b アキュムレータ(MH,ML)
30c リンクレジスタ(LR)
30d 分岐レジスタ(TAR)
31 プログラム状態レジスタ(PSR)
32 条件フラグレジスタ(CFR)
33 プログラムカウンタ(PC)
34 PC退避用レジスタ(IPC)
35 PSR退避用レジスタ(IPSR)
40 演算部
41〜43,48 算術論理・比較演算器
41a ALU部
41b 飽和処理部
41c フラグ部
44 積和演算器
44a、44b 乗算器
44c〜44e 加算器
44f セレクタ
44g 飽和処理部
45 バレルシフタ
45a、45b セレクタ
45c 上位バレルシフタ
45d 下位バレルシフタ
45e 飽和処理部
46 除算器
47 変換器
47a SATブロック
47b BSEQブロック
47c MSKGENブロック
47d VSUMBブロック
47e BCNTブロック
47f ILブロック
50 I/F部
60 命令メモリ部
70 データメモリ部
80 拡張レジスタ部
90 I/Oインターフェース部

Claims (17)

  1. 命令を解読し実行するプロセッサであって、
    条件実行命令のプレディケートに用いられる複数の条件実行用フラグが記憶されたフラグレジスタと、
    命令を解読する解読手段と、
    ループ命令が前記解読手段によって解読された場合に、対象となるループをソフトウェアパイプライニングによって条件実行命令に展開した場合のエピログ部に対応する前記複数の条件実行用フラグのうちのいずれかの値に基づいて、前記ループの繰り返し処理を終了する実行手段とを備える
    ことを特徴とするプロセッサ。
  2. 前記フラグレジスタには、前記終了の判断に用いられるループ用フラグがさらに記憶され、
    前記実行手段は、前記エピログ部における前記複数の条件実行用フラグのうちのいずれかの値を前記ループ用フラグに書き込む
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記実行手段は、
    前記ソフトウェアパイプライニングの段数をN段(Nは3以上の整数)とし、パイプラインの段数は、前記エピログ部において処理が終了する順に昇順に数えるものとした場合に、(N−2)段目のパイプラインで実行される条件実行命令に対応する条件実行用フラグの値を、前記エピログ部において1サイクル後における前記ループ用フラグに書き込む
    ことを特徴とする請求項2に記載のプロセッサ。
  4. 前記実行手段は、
    前記ソフトウェアパイプライニングの段数をN段(Nは2以上の整数)とし、パイプラインの段数は、前記エピログ部において処理が終了する順に昇順に数えるものとした場合に、(N−1)段目のパイプラインで実行される条件実行命令に対応する条件実行用フラグの値を、前記エピログ部において同一サイクルにおける前記ループ用フラグに書き込む
    ことを特徴とする請求項2に記載のプロセッサ。
  5. 前記実行手段は、
    前記ソフトウェアパイプライニングの段数をN段(Nは4以上の整数)とし、パイプラインの段数は、前記エピログ部において処理が終了する順に昇順に数えるものとした場合に、(N−3)段目のパイプラインで実行される条件実行命令に対応する条件実行用フラグの値を、前記エピログ部において2サイクル後における前記ループ用フラグに書き込む
    ことを特徴とする請求項2に記載のプロセッサ。
  6. 前記解読手段で解読される前記命令を一時的に記憶する命令バッファをさらに含み、
    前記解読手段は、前記エピログ部における前記条件実行用フラグの値に基づいて前記条件実行命令を実行しないと判断した場合には、前記ループが終了するまでの間前記命令バッファから前記条件実行命令を読み出さない
    ことを特徴とする請求項1〜5のいずれかに記載のプロセッサ。
  7. 前記解読手段で解読される前記命令を一時的に記憶する命令バッファをさらに含み、
    前記命令バッファに記憶されている命令の一部分は、前記条件実行用フラグの記憶位置を示しており、
    前記解読手段は、前記命令バッファに記憶されている前記命令の前記一部分に基づいて、前記フラグレジスタに記憶された前記条件実行用フラグを読出し、当該条件実行用フラグから前記条件実行命令を実行しないと判断した場合には、前記命令バッファから前記条件実行命令を読み出さない
    ことを特徴とする請求項1〜5のいずれかに記載のプロセッサ。
  8. 前記複数の条件実行用フラグの割付を行なうフラグ割付手段をさらに含み、
    前記フラグ割付手段は、ソースプログラムのループ内に条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられる条件実行用フラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられる条件実行用フラグとを異ならせて割付ける
    ことを特徴とする請求項1〜7のいずれかに記載のプロセッサ。
  9. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラ装置であって、
    前記ソースプログラムを構文解析するパーサー手段と、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記中間コードを最適化する最適化手段と、
    最適化された前記中間コードを機械語命令に変換するコード生成手段とを備え、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化手段は、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
    ことを特徴とするコンパイラ装置。
  10. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラ装置であって、
    前記ソースプログラムを構文解析するパーサー手段と、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記中間コードを最適化する最適化手段と、
    最適化された前記中間コードを機械語命令に変換するコード生成手段とを備え、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化手段は、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
    ことを特徴とするコンパイラ装置。
  11. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラ装置であって、
    前記ソースプログラムを構文解析するパーサー手段と、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記中間コードを最適化する最適化手段と、
    最適化された前記中間コードを機械語命令に変換するコード生成手段とを備え、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化手段は、前記中間コードに条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられるフラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられるフラグとを異ならせて割付ける
    ことを特徴とするコンパイラ装置。
  12. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイル方法であって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
    ことを特徴とするコンパイル方法。
  13. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイル方法であって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
    ことを特徴とするコンパイル方法。
  14. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイル方法であって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化ステップでは、前記中間コードに条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられるフラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられるフラグとを異ならせて割付ける
    ことを特徴とするコンパイル方法。
  15. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のプロログ部に前記ループの直前に実行される命令を配置する
    ことを特徴とするコンパイラ。
  16. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、
    前記最適化ステップでは、前記中間コードにループが含まれている場合には、前記ループをソフトウェアパイプライニングによって展開した場合のエピログ部に前記ループの直後に実行される命令を配置する
    ことを特徴とするコンパイラ。
  17. ソースプログラムを、並列処理可能なプロセッサ用の機械語プログラムに翻訳するコンパイラであって、
    前記ソースプログラムを構文解析するパーサーステップと、
    解析された前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
    前記中間コードを最適化する最適化ステップと、
    最適化された前記中間コードを機械語命令に変換するコード生成ステップとを含み、
    前記プロセッサには、条件実行命令のプレディケートに用いられる複数のフラグが記憶されており、前記最適化ステップでは、前記中間コードに条件分岐命令が含まれている場合には、当該条件を満たす場合の条件実行命令のプレディケートに用いられるフラグと、当該条件を満たさない場合の条件実行命令のプレディケートに用いられるフラグとを異ならせて割付ける
    ことを特徴とするコンパイラ。
JP2003081132A 2003-03-24 2003-03-24 プロセッサおよびコンパイラ Expired - Fee Related JP3974063B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2003081132A JP3974063B2 (ja) 2003-03-24 2003-03-24 プロセッサおよびコンパイラ
EP04006078A EP1462933A3 (en) 2003-03-24 2004-03-15 Processor with loop instruction, and compiler for the same
US10/805,381 US7380112B2 (en) 2003-03-24 2004-03-22 Processor and compiler for decoding an instruction and executing the decoded instruction with conditional execution flags
CNB2004100322020A CN1302380C (zh) 2003-03-24 2004-03-24 处理器和编译器
US12/109,707 US20080209407A1 (en) 2003-03-24 2008-04-25 Processor and compiler for decoding an instruction and executing the instruction with conditional execution flags

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003081132A JP3974063B2 (ja) 2003-03-24 2003-03-24 プロセッサおよびコンパイラ

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007011310A Division JP2007102821A (ja) 2007-01-22 2007-01-22 プロセッサおよびコンパイラ

Publications (2)

Publication Number Publication Date
JP2004288016A true JP2004288016A (ja) 2004-10-14
JP3974063B2 JP3974063B2 (ja) 2007-09-12

Family

ID=32821431

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003081132A Expired - Fee Related JP3974063B2 (ja) 2003-03-24 2003-03-24 プロセッサおよびコンパイラ

Country Status (4)

Country Link
US (2) US7380112B2 (ja)
EP (1) EP1462933A3 (ja)
JP (1) JP3974063B2 (ja)
CN (1) CN1302380C (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005149297A (ja) * 2003-11-18 2005-06-09 Renesas Technology Corp プロセッサおよびそのアセンブラ
US20060101256A1 (en) * 2004-10-20 2006-05-11 Dwyer Michael K Looping instructions for a single instruction, multiple data execution engine
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
US7669042B2 (en) * 2005-02-17 2010-02-23 Samsung Electronics Co., Ltd. Pipeline controller for context-based operation reconfigurable instruction set processor
US7991984B2 (en) * 2005-02-17 2011-08-02 Samsung Electronics Co., Ltd. System and method for executing loops in a processor
US20060190700A1 (en) * 2005-02-22 2006-08-24 International Business Machines Corporation Handling permanent and transient errors using a SIMD unit
US20080229074A1 (en) * 2006-06-19 2008-09-18 International Business Machines Corporation Design Structure for Localized Control Caching Resulting in Power Efficient Control Logic
US20070294519A1 (en) * 2006-06-19 2007-12-20 Miller Laura F Localized Control Caching Resulting In Power Efficient Control Logic
CN102944803B (zh) * 2006-06-30 2015-06-24 英特尔公司 泄漏功率估计
JP4159586B2 (ja) * 2006-08-03 2008-10-01 エヌイーシーコンピュータテクノ株式会社 情報処理装置および情報処理の高速化方法
US8380966B2 (en) * 2006-11-15 2013-02-19 Qualcomm Incorporated Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8533530B2 (en) * 2006-11-15 2013-09-10 Qualcomm Incorporated Method and system for trusted/untrusted digital signal processor debugging operations
US8484516B2 (en) * 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
JP5193624B2 (ja) 2008-02-19 2013-05-08 ルネサスエレクトロニクス株式会社 データプロセッサ
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8635437B2 (en) * 2009-02-12 2014-01-21 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static exception state
US20110055445A1 (en) * 2009-09-03 2011-03-03 Azuray Technologies, Inc. Digital Signal Processing Systems
US8903736B2 (en) * 2010-04-05 2014-12-02 Yahoo! Inc. Fast networked based advertisement selection
KR101962248B1 (ko) * 2012-03-16 2019-03-27 삼성전자주식회사 재구성 가능 프로세서의 검증 지원 장치 및 방법
US9038042B2 (en) 2012-06-29 2015-05-19 Analog Devices, Inc. Staged loop instructions
WO2014008939A1 (en) * 2012-07-12 2014-01-16 Dual Aperture, Inc. Gesture-based user interface
US11048513B2 (en) * 2013-07-15 2021-06-29 Texas Instruments Incorporated Entering protected pipeline mode with clearing
CN103942035B (zh) * 2014-04-11 2017-08-29 华为技术有限公司 处理指令的方法、编译器及指令处理器
GB2551548B (en) * 2016-06-22 2019-05-08 Advanced Risc Mach Ltd Register restoring branch instruction
CN107229446A (zh) * 2017-04-26 2017-10-03 深圳市创成微电子有限公司 一种音频数据处理器
CN111045729A (zh) * 2018-10-12 2020-04-21 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
US20220100514A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Loop support extensions
CN113946539B (zh) * 2021-10-09 2024-02-13 深圳市创成微电子有限公司 一种dsp处理器及其循环跳转指令的处理方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5920724A (en) * 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US6044222A (en) * 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
US6289443B1 (en) * 1998-01-28 2001-09-11 Texas Instruments Incorporated Self-priming loop execution for loop prolog instruction
US6192515B1 (en) * 1998-07-17 2001-02-20 Intel Corporation Method for software pipelining nested loops
US6449713B1 (en) * 1998-11-18 2002-09-10 Compaq Information Technologies Group, L.P. Implementation of a conditional move instruction in an out-of-order processor
US6408433B1 (en) * 1999-04-23 2002-06-18 Sun Microsystems, Inc. Method and apparatus for building calling convention prolog and epilog code using a register allocator
US6629238B1 (en) * 1999-12-29 2003-09-30 Intel Corporation Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration
US6567895B2 (en) * 2000-05-31 2003-05-20 Texas Instruments Incorporated Loop cache memory and cache controller for pipelined microprocessors
GB2363480B (en) * 2000-06-13 2002-05-08 Siroyan Ltd Predicated execution of instructions in processors
US20030120905A1 (en) * 2001-12-20 2003-06-26 Stotzer Eric J. Apparatus and method for executing a nested loop program with a software pipeline loop procedure in a digital signal processor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置

Also Published As

Publication number Publication date
CN1532693A (zh) 2004-09-29
JP3974063B2 (ja) 2007-09-12
US7380112B2 (en) 2008-05-27
US20080209407A1 (en) 2008-08-28
EP1462933A3 (en) 2008-01-23
EP1462933A2 (en) 2004-09-29
US20040193859A1 (en) 2004-09-30
CN1302380C (zh) 2007-02-28

Similar Documents

Publication Publication Date Title
JP3974063B2 (ja) プロセッサおよびコンパイラ
JP3958662B2 (ja) プロセッサ
JP3801545B2 (ja) コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP3847672B2 (ja) コンパイラ装置及びコンパイル方法
JP3857614B2 (ja) プロセッサ
US7937559B1 (en) System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
US20040154006A1 (en) Compiler apparatus and compilation method
KR20050010800A (ko) 확장가능한 프로세서 아키텍처에 진보된 명령어들을부가하는 방법 및 장치
JP2007102821A (ja) プロセッサおよびコンパイラ
JP2006338684A (ja) プロセッサ
JP4879589B2 (ja) コンパイラ装置
Gnatyuk et al. A Multimedia DSP processor design
JP2010186487A (ja) コンパイラ装置及びそのシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060315

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070122

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070613

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20100622

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110622

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120622

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120622

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130622

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees