(57)【要約】【課題】分岐高速化とループバッファの利用率の向上を行う。【解決手段】メモリシステム１０にフェッチアドレスを供給する命令フェッチユニット１２と、フェッチ命令をそれぞれ受信する分岐バッファ１８,ノーマルバッファ１６及び分岐先／ループ兼用バッファ１４と、命令バッファ制御ユニット２２の指示に従って,ノーマルバッファ,分岐バッファ及び兼用バッファから発行命令を選択し, 発行する発行命令選択ユニット２０と、発行命令選択ユニット２０から発行命令ＳＩを受信し, デコードし,デコード結果ＤＲを命令バッファ制御ユニットに送信する命令デコードユニット２８と、命令デコードユニットからデコード結果を受信し,ループ先頭アドレスＬＳＡを命令フェッチユニットに送信するループ処理ユニット３０と、分岐成立時／分岐不成立時のフェッチアドレスＦＡ（ＣＢ／ＵＣＢ）を命令フェッチユニットに送信する分岐判定ユニットとを備えるプロセッサ。【選択図】図１
2006309337.tif 000002
【特許請求の範囲】
【請求項１】
メモリシステムと、
前記メモリシステムにフェッチアドレスを供給する命令フェッチユニットと、
前記メモリシステムからフェッチ命令をそれぞれ受信する分岐バッファ,ノーマルバッファ及び兼用バッファと、
前記命令フェッチユニット, 前記分岐バッファ,前記ノーマルバッファ及び前記兼用バッファを制御する命令バッファ制御ユニットと、
前記命令バッファ制御ユニットの指示に従って、前記ノーマルバッファ,前記分岐バッファ及び前記兼用バッファから発行命令を選択し、前記発行命令を発行する発行命令選択ユニットと、
前記発行命令選択ユニットから前記発行命令を受信し,かつ前記発行命令をデコードし、該デコード結果を前記命令バッファ制御ユニットに送信する命令デコードユニットと、
前記命令デコードユニットから前記デコード結果を受信し,ループ先頭アドレスを前記命令フェッチユニットに送信するループ処理ユニットと、
前記命令デコードユニットからデコード結果を受信し,分岐成立時／分岐不成立時のフェッチアドレスを前記命令フェッチユニットに送信する分岐判定ユニット
とを備えることを特徴とするプロセッサ。
【請求項２】
前記ノーマルバッファ内の命令をプリデコードし、判明した分岐先の命令をプリフェッチし、前記分岐バッファに格納すると共に、対象となる分岐が成立したら、前記分岐バッファから分岐先の命令を発行すると共に前記分岐バッファから前記ノーマルバッファに内容をコピーし、対象となる分岐が成立しなかったら、前記分岐バッファの内容を破棄することを特徴とする請求項１記載のプロセッサ。
【請求項３】
ループの実行を行う際にループの先頭の命令および後続の命令を前記兼用バッファに保持し、ループ処理が発生したら前記兼用バッファからループの先頭の命令及び後続の命令を発行し、ループ処理を行っていない際に前記兼用バッファを２レベル目の分岐先プリフェッチに用いることを特徴とする請求項１記載のプロセッサ。
【請求項４】
命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及び分岐バッファから命令を選択し、発行するステップと、
分岐判定ユニットにおいて発行された命令によって指示される分岐が成立したか否かを判断するステップと、
ＮＯであるならば、前記命令バッファ制御ユニットが前記分岐バッファをクリアするステップと、
ＹＥＳであるならば、前記命令バッファ制御ユニットで次に発行するアドレスを分岐先アドレスにするステップと、
命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、
次に、前記命令バッファ制御ユニットが次に発行する命令が前記ノーマルバッファに在るか否かを判断するステップと、
ＮＯであるならば、前記命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、前記ノーマルバッファに格納するステップと、
ＹＥＳであるならば、前記命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが前記ノーマルバッファから発行命令を選択して、発行するステップと、
次に、前記命令バッファ制御ユニットが前記分岐バッファに命令があるか否かを判断するステップと、
ＮＯであるならば、前記命令バッファ制御ユニットからの指示に従い、前記命令バッファ制御ユニットが分岐先の命令を前記メモリシステムからフェッチし、前記ノーマルバッファに格納するステップと、
ＹＥＳであるならば、前記命令バッファ制御ユニットからの指示に従い、前記分岐バッファの内容を前記ノーマルバッファに移動コピーすると同時に、前記命令バッファ制御ユニットからの指示に従い、前記発行命令選択ユニットが前記分岐バッファから発行命令を選択して、発行するステップ
とを有することを特徴とするプロセッサの命令バッファ動作方法。
【請求項５】
命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及びループバッファから命令を選択し、発行するステップと、
ループ処理ユニットにおいて発行された命令がループ開始命令であるか否かを判断するステップと、
ＹＥＳであるならば、命令バッファ制御ユニットからの指示に従って、ノーマルバッファの命令をループバッファにコピーするテップと、
ＮＯであるならば、次に、ループ処理ユニットにおいてループの最後尾から先頭へジャンプが発生し、ループが成立するか否かを判断するステップと、
ＹＥＳであるならば、ループの先頭アドレスにジャンプし、命令バッファ制御ユニットで次に発行するアドレスをループの先頭アドレスに設定するステップと、
ＮＯであるならば、命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、
次に、命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、
ＮＯであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、
ＹＥＳであるならば、前記命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが前記ノーマルバッファから発行命令を選択して、発行するステップと、
前記命令バッファ制御ユニットからの指示に従い、前記ループバッファの内容を前記ノーマルバッファにコピーすると同時に、前記命令バッファ制御ユニットからの指示に従い、前記発行命令選択ユニットが前記ループバッファから発行命令を選択して、発行するステップ
とを有することを特徴とするプロセッサの命令バッファ動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに係り、特に、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサ及びプロセッサの命令バッファ動作方法に関する。
【背景技術】
【０００２】
近年のプロセッサにおいては、バスアクセスを伴わない場合であっても命令フェッチに複数サイクルのオーバーヘッドがかかることが多い。このようなプロセッサでは、１サイクルに発行する命令数よりも多くの命令を一度にフェッチし、その差分となる命令を命令バッファに保持してそのバッファから順次命令発行することによって命令フェッチのオーバーヘッドを隠蔽するという処理が行われている。
【０００３】
また、フェッチのスループットが発行のスループットを上回っているのでフェッチ能力が余ることを利用し、条件／無条件分岐（Conditional/Unconditional Branch）命令の分岐先の命令を使われるか否か、即ち分岐が成立するか否かが判明する前にフェッチしてバッファに貯めておくという形の分岐高速化が前述のようなプロセッサと相性がよい（例えば、特許文献１参照。）。
【０００４】
一方、プログラム中のループ部分を、イタ―レーション（反復処理：iteration）の最後尾に分岐命令を配置してイタ―レーションの先頭に戻るという形で実行するのではなく、イタ―レーションの最後尾がどこであるかをハードウェアで記憶して,分岐命令を用いずに,自動的に先頭に戻るという機構で実行することのできるプロセッサが存在する（例えば、特許文献２参照。）。このようなプロセッサでは分岐命令の実行と分岐処理のオーバーヘッドを削減することができるので、プログラム中のループ部分を高速に実行することができる。
【０００５】
ハードウェアでループ処理を行う際においては、繰り返し実行されるイタ―レーションの一部または全部を専用のバッファに保持して、その専用のバッファから命令を発行することで、命令メモリへのフェッチによるオーバーヘッドを削減するということも行われている（例えば、特許文献３参照。）。
【０００６】
上記の専用バッファを用いる２つのプロセッサ高速化技術は組み合わせて用いることで両方の利点を取り入れることができるが、ループ処理用のバッファは分岐先プリフェッチ用のバッファに比べて利用頻度が低く、利用されていない時間が多くなるという問題点がある。
【特許文献１】米国特許第５,５７９,４９３号明細書
【特許文献２】米国特許第６,１８９,０９２号明細書
【特許文献３】特開２０００−２７６３５１号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、ループバッファの利用率の向上と,更なる分岐高速化を行うプロセッサ及びプロセッサの命令バッファ動作方法を提供する。
【課題を解決するための手段】
【０００８】
本発明の実施の形態の第１の特徴は、（イ）メモリシステムと、（ロ）メモリシステムにフェッチアドレスを供給する命令フェッチユニットと、（ハ）メモリシステムからフェッチ命令をそれぞれ受信する分岐バッファ,ノーマルバッファ及び兼用バッファと、（ニ）命令フェッチユニット, 分岐バッファ,ノーマルバッファ及び兼用バッファを制御する命令バッファ制御ユニットと、（ホ）命令バッファ制御ユニットの指示に従って、ノーマルバッファ,分岐バッファ及び兼用バッファから発行命令を選択し、発行命令を発行する発行命令選択ユニットと、（へ）発行命令選択ユニットから発行命令を受信し,発行命令をデコードし、デコード結果を命令バッファ制御ユニットに送信する命令デコードユニットと、（ト）命令デコードユニットからデコード結果を受信し,ループ先頭アドレスを命令フェッチユニットに送信するループ処理ユニットと、（チ）命令デコードユニットからデコード結果を受信し,分岐成立時／分岐不成立時のフェッチアドレスを命令フェッチユニットに送信する分岐判定ユニットとを備えるプロセッサであることを要旨とする。
【０００９】
本発明の実施の形態の第２の特徴は、（イ）命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及び分岐バッファから命令を選択し、発行するステップと、（ロ）分岐判定ユニットにおいて発行された命令によって指示される分岐が成立したか否かを判断するステップと、（ハ）ＮＯであるならば、命令バッファ制御ユニットが分岐バッファをクリアするステップと、（ニ）ＹＥＳであるならば、命令バッファ制御ユニットで次に発行するアドレスを分岐先アドレスにするステップと、（ホ）命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、（へ）命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、（ト）ＮＯであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、（チ）ＹＥＳであるならば、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがノーマルバッファから発行命令を選択して、発行するステップと、（リ）次に、前記命令バッファ制御ユニットが分岐バッファに命令があるか否かを判断するステップと、（ヌ）ＮＯであるならば、命令バッファ制御ユニットからの指示に従い、命令バッファ制御ユニットが分岐先の命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、（ル）ＹＥＳであるならば、命令バッファ制御ユニットからの指示に従い、分岐バッファの内容をノーマルバッファに移動コピーすると同時に、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが分岐バッファから発行命令を選択して、発行するステップとを有するプロセッサの命令バッファ動作方法であることを要旨とする。
【００１０】
本発明の実施の形態の第３の特徴は、（イ）命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及びループバッファから命令を選択し、発行するステップと、（ロ）ループ処理ユニットにおいて発行された命令がループ開始命令であるか否かを判断するステップと、（ハ）ＹＥＳであるならば、命令バッファ制御ユニットからの指示に従って、ノーマルバッファの命令をループバッファにコピーするテップと、（ニ）ＮＯであるならば、次に、ループ処理ユニットにおいてループの最後尾から先頭へジャンプが発生し、ループが成立するか否かを判断するステップと、（ホ）ＹＥＳであるならば、ループの先頭アドレスにジャンプし、命令バッファ制御ユニットで次に発行するアドレスをループの先頭アドレスに設定するステップと、（へ）ＮＯであるならば、命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、（ト）次に、命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、（チ）ＮＯであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、（リ）ＹＥＳであるならば、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがノーマルバッファから発行命令を選択して、発行するステップと、（ヌ）命令バッファ制御ユニットからの指示に従い、ループバッファの内容をノーマルバッファにコピーすると同時に、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがループバッファから発行命令を選択して、発行するステップとを有するプロセッサの命令バッファ動作方法であることを要旨とする。
【発明の効果】
【００１１】
本発明のプロセッサ及びプロセッサの命令バッファ動作方法によれば、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、ループバッファの利用率の向上と分岐高速化を行うことが可能となる。
【発明を実施するための最良の形態】
【００１２】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであり、各ブロックの平面寸法等は現実のものとは異なることに留意すべきである。又、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることはもちろんである。
【００１３】
また、以下に示す実施の形態は、この発明の技術的思想を具体化するための装置や方法を例示するものであって、この発明の技術的思想は、各ブロックの構成部品の配置等を下記のものに特定するものでない。この発明の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
【００１４】
本発明の実施の形態に係るプロセッサにおいては、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行い、分岐バッファとループバッファの構造を揃えるかループバッファが分岐バッファと同じ構造を内包することによって、ループ処理を行っていない際にループバッファを２レベル目の分岐先プリフェッチに用いることができる。
【００１５】
[第１の実施の形態]
（全体ブロック構成図）
本発明の第１の実施の形態に係るプロセッサは、図１に示すように、メモリシステム１０と、メモリシステム１０にフェッチアドレスＦＡを供給する命令フェッチユニット１２と、メモリシステム１０からフェッチ命令ＦＩをそれぞれ受信する分岐バッファ１８,ノーマルバッファ１６及び兼用バッファ１４と、命令フェッチユニット１２, 分岐バッファ１８,ノーマルバッファ１６及び兼用バッファ１４を制御する命令バッファ制御ユニット２２と、命令バッファ制御ユニット２２に接続され,かつ分岐バッファ１８,ノーマルバッファ１６及び兼用バッファ１４に接続される発行命令選択ユニット２０と、命令バッファ制御ユニット２２に接続され,かつノーマルバッファ１６及び分岐バッファ１８に接続されるプリデコード制御ユニット２４と、発行命令選択ユニット２０から発行命令ＳＩを受信し,デコード結果ＤＲを命令バッファ制御ユニット２２に送信する命令デコードユニット２８と、命令デコードユニット２８に接続され, ループ命令実行時にループの回数などを読み出す汎用レジスタファイル２６と、プリデコード制御ユニット２４に接続され,分岐先アドレスＢＴＡを命令フェッチユニット１２に送信するプリデコードユニット３２と、命令デコードユニット２８からデコード結果ＤＲを受信し,ループ先頭アドレスＬＳＡを命令フェッチユニット１２に送信するループ処理ユニット３０と、同じく命令デコードユニット２８からデコード結果ＤＲを受信し,分岐成立時／分岐不成立時（ＣＢ／ＵＣＢ）のフェッチアドレスＦＡを命令フェッチユニット１２に送信する分岐判定ユニット３６と、命令デコードユニット２８からデコード結果ＤＲを受信する命令実行ユニット３４とを備える。
【００１６】
―命令バッファ動作方法―
本発明の第１の実施の形態に係るプロセッサの命令バッファ動作方法は、以下に説明する通りである。
【００１７】
（ａ）命令フェッチは、分岐バッファ１８,ノーマルバッファ１６及び兼用バッファ１４に空きがあったら行う。
【００１８】
（ｂ）命令発行は、発行すべき命令が、分岐バッファ１８,ノーマルバッファ１６及び兼用バッファ１４のいずれかにあったら行う。
【００１９】
（ｃ）ノーマルバッファ１６に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ１８に分岐先の命令をプリフェッチする。
【００２０】
（ｄ）分岐が成立し、分岐バッファ１８に命令がある場合は、その命令がノーマルバッファ１６に移動される。
【００２１】
（ｅ）分岐が成立し、兼用バッファ１４にネストした分岐先の命令がある場合は、その命令が分岐バッファ１８に移動される。
【００２２】
（ｆ）分岐が成立し、兼用バッファ１４に成立した分岐命令の先にある分岐命令に対応した分岐先の命令がある場合は、その命令はクリアされる。
【００２３】
（ｇ）分岐が成立しない場合には、分岐バッファ１８がクリアされ、ノーマルバッファ１６内のプリデコードが再開される。
【００２４】
（ｈ）分岐が成立しない場合には、兼用バッファ１４に成立した分岐命令の先にある分岐命令に対応した分岐先の命令がある場合は、その命令はクリアされる。
【００２５】
（ｉ）分岐が成立しない場合には、兼用バッファ１４にネストした分岐先の命令がある場合は、その命令が分岐バッファ１８に移動される。
【００２６】
（ｊ）ループ命令実行後、兼用バッファ１４に空きがある状態の時は、フェッチした命令をノーマルバッファ１６と兼用バッファ１４の両方に格納する。
【００２７】
（ｋ）ループ命令を実行する際に、ノーマルバッファ１６にある命令を兼用バッファ１４にコピーする。
【００２８】
（ｌ）ループ処理が発生したら、分岐バッファ１８はクリアされる。
【００２９】
（ｍ）Ａ．ループ中でなく、分岐バッファ１８に命令があり、兼用バッファ１４に命令がないか又はループの先頭の命令がある場合、分岐バッファ１８内の命令をプリデコードし、分岐を探す。分岐を検出したら、兼用バッファ１４に対してプリフェッチする。
【００３０】
（ｎ）Ｂ．ループ中でなく、分岐バッファ１８に命令があり、兼用バッファ１４に命令がないか又はループの先頭の命令がある場合、ノーマルバッファ１６内の“分岐バッファ１８に分岐先をプリフェッチしている分岐命令”の先の命令をプリデコードし、分岐を探す。分岐を検出したら、兼用バッファ１４に対してプリフェッチする。
【００３１】
（基本構成）
本発明の第１の実施の形態のプロセッサの基本構成は、図２に示すように、メモリシステム１０と、メモリシステム１０にフェッチアドレスＦＡを供給する命令フェッチユニット１２と、メモリシステム１０からフェッチ命令ＦＩをそれぞれ受信するループバッファ１５,ノーマルバッファ１６及び分岐バッファ１８と、命令フェッチユニット１２, ループバッファ１５,ノーマルバッファ１６及び分岐バッファ１８を制御する命令バッファ制御ユニット２２と、命令バッファ制御ユニット２２に接続され,かつループバッファ１５,ノーマルバッファ１６及び分岐バッファ１８に接続される発行命令選択ユニット２０と、命令バッファ制御ユニット２２に接続され,かつノーマルバッファ１６及び分岐バッファ１８に接続されるプリデコード制御ユニット２４と、発行命令選択ユニット２０から発行命令ＳＩを受信し,デコード結果ＤＲを命令バッファ制御ユニット２２に送信する命令デコードユニット２８と、命令デコードユニット２８に接続され, ループ命令実行時にループの回数などを読み出す汎用レジスタファイル２６と、プリデコード制御ユニット２４に接続され,分岐先アドレスＢＴＡを命令フェッチユニット１２に送信するプリデコードユニット３２と、命令デコードユニット２８からデコード結果ＤＲを受信し,ループ先頭アドレスＬＳＡを命令フェッチユニット１２に送信するループ処理ユニット３０と、同じく命令デコードユニット２８からデコード結果ＤＲを受信し,分岐成立時／分岐不成立時（ＣＢ／ＵＣＢ）のフェッチアドレスＦＡを命令フェッチユニット１２に送信する分岐判定ユニット３６と、命令デコードユニット２８からデコード結果ＤＲを受信する命令実行ユニット３４とを備える。
【００３２】
―基本構成の命令バッファ動作方法―
本発明の第１の実施の形態のプロセッサの基本構成の命令バッファ動作方法は、以下に説明する通りである。
【００３３】
（ａ）命令フェッチは、分岐バッファ１８,ノーマルバッファ１６に空きがあったら行う。
【００３４】
（ｂ）命令発行は、発行すべき命令が分岐バッファ１８,ノーマルバッファ１６及びループバッファ１５のいずれかにあったら行う。
【００３５】
（ｃ）ノーマルバッファ１６に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ１８に分岐先の命令をプリフェッチする。
【００３６】
（ｄ）分岐が成立したら、分岐バッファ１８に命令がある場合は、その命令がノーマルバッファ１６に移動される。
【００３７】
（ｅ）分岐が成立しない場合には、分岐バッファ１８がクリアされ、ノーマルバッファ１６内のプリデコードが再開される。
【００３８】
（ｆ）ループ命令実行後、ループバッファ１５に空きがある状態の時は、フェッチした命令をノーマルバッファ１６とループバッファ１５の両方に格納する。
【００３９】
（ｇ）ループ命令を実行する際に、ノーマルバッファ１６にある命令をループバッファ１５にコピーする。
【００４０】
（ｈ）ループ処理が発生したら、分岐バッファ１８はクリアされる。
【００４１】
―ステートマシン状態遷移による基本構成の動作解析―
基本構成の命令フェッチの動作は、図３に示すように、ステートマシン状態図を用いて表される。
【００４２】
（ａ）分岐を検出（ＤＢ：Detect Branch）し,プリフェッチを開始(ＳＰＦ：Start Prefetch)すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ７０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ７４へ遷移する。
【００４３】
（ｂ）分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ:Taken/NotTaken）を判断し、分岐命令を実行するか(ＥＢＩ:Execute Branch Instruction)或いはループ処理ユニット３０でループの最後尾から先頭へジャンプが発生する(ＬＴ：Loop Taken)と、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ７４から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ７０へ遷移する。
【００４４】
（ｃ）ループ命令を実行（ＥＬＩ：Execute Loop Instruction）すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ７０からノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ７２へ遷移する。
【００４５】
（ｄ）ループバッファフル（ＬＢＦ:Loop Buffer Full）の場合には、ノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ７２から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ７０に遷移する。
【００４６】
（ｅ）同じく、ループ命令を実行（ＥＬＩ）すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ７４から、ノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ７２に遷移する。
【００４７】
（ｆ）ループバッファフル（ＬＢＦ）及び分岐を検出（ＤＢ）し,プリフェッチを開始(ＳＰＦ)すると、ノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ７２から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ７４へ遷移する。
【００４８】
（分岐系の構成）
本発明の第１の実施の形態に係るプロセッサの分岐系の構成は、図４に示すように、メモリシステム１０と、メモリシステム１０にフェッチアドレスＦＡを供給する命令フェッチユニット１２と、メモリシステム１０からフェッチ命令ＦＩをそれぞれ受信するノーマルバッファ１６及び分岐バッファ１８と、命令フェッチユニット１２, ノーマルバッファ１６及び分岐バッファ１８を制御する命令バッファ制御ユニット２２と、命令バッファ制御ユニット２２に接続され,かつノーマルバッファ１６及び分岐バッファ１８に接続される発行命令選択ユニット２０と、命令バッファ制御ユニット２２に接続され,かつノーマルバッファ１６及び分岐バッファ１８に接続されるプリデコード制御ユニット２４と、発行命令選択ユニット２０から発行命令ＳＩを受信し,デコード結果ＤＲを命令バッファ制御ユニット２２に送信する命令デコードユニット２８と、命令デコードユニット２８に接続され,ループ命令実行時にループの回数などを読み出す汎用レジスタファイル２６と、プリデコード制御ユニット２４に接続され,分岐先アドレスＢＴＡを命令フェッチユニット１２に送信するプリデコードユニット３２と、命令デコードユニット２８からデコード結果ＤＲを受信し,ループ先頭アドレスＬＳＡを命令フェッチユニット１２に送信するループ処理ユニット３０と、同じく命令デコードユニット２８からデコード結果ＤＲを受信し,分岐成立時／分岐不成立時（ＣＢ／ＵＣＢ）のフェッチアドレスＦＡを命令フェッチユニット１２に送信する分岐判定ユニット３６と、命令デコードユニット２８からデコード結果ＤＲを受信する命令実行ユニット３４とを備える。
【００４９】
―分岐系の命令バッファ動作方法―
本発明の第１の実施の形態に係るプロセッサの分岐系の命令バッファ動作方法は、以下に示す通りである。
【００５０】
（ａ）命令フェッチは、ノーマルバッファ１６及び分岐バッファ１８に空きがあったら行う。
【００５１】
（ｂ）命令発行は、発行すべき命令がノーマルバッファ１６及び分岐バッファ１８のいずれかにあったら行う。
【００５２】
（ｃ）ノーマルバッファ１６に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ１８に分岐先の命令をプリフェッチする。
【００５３】
（ｄ）分岐が成立したら、分岐バッファ１８に命令がある場合は、その命令がノーマルバッファ１６に移動される。
【００５４】
（ｅ）分岐が成立しない場合には、分岐バッファ１８がクリアされ、ノーマルバッファ１６内のプリデコードが再開される。
【００５５】
（ｆ）ループの先頭に戻る処理が発生したら、分岐バッファ１８はクリアされ、ループの先頭からフェッチをやり直す。
【００５６】
（分岐高速化の動作例）
本発明の第１の実施の形態に係るプロセッサの分岐高速化の動作例を説明する。
【００５７】
（ａ）ノーマルバッファ１６に貯まっている命令を走査してプリデコードし、分岐先がプリデコードの時点で判明する分岐命令を見つける。
【００５８】
（ｂ）プリデコードで判明した分岐先の命令をフェッチし、分岐先保持用の分岐バッファ１８に格納する。
【００５９】
（ｃ）対象となる分岐が成立したら、分岐バッファ１８からノーマルバッファ１６に内容をコピーし、分岐先の命令フェッチのオーバーヘッドなしで分岐先の命令を発行し始める。
【００６０】
対象となる分岐が成立しなかったら、分岐バッファ１８の内容を破棄する。
【００６１】
―ステートマシン状態遷移によるフェッチ系の動作解析―
本発明の第１の実施の形態に係るプロセッサの分岐高速化の動作において、フェッチ系の動作は、図５に示すように、ステートマシン状態図を用いて表される。
【００６２】
（ａ）分岐を検出（ＤＢ）し,プリフェッチを開始(ＳＰＦ)すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ８０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ８２へ遷移する。
【００６３】
（ｂ）分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ）を判断し、分岐命令を実行(ＥＢＩ)するか或いはループ処理ユニット３０でループの最後尾から先頭へジャンプが発生する(ＬＴ)と、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ８２から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ８０へ遷移する。
【００６４】
―発行系の動作フローチャート―
本発明の第１の実施の形態に係るプロセッサの分岐高速化の動作において、発行系の動作は、図６に示すように、フローチャートを用いて表される。
【００６５】
（ａ）まず、前段階として、ステップＳ１１において、命令バッファ制御ユニット２２の指示に従って、発行命令選択ユニット２０がノーマルバッファ１６及び分岐バッファ１８から１つの命令を選択し、発行する。
【００６６】
（ｂ）次に、ステップＳ１２において、分岐判定ユニット３６において発行された命令によって指示される分岐が成立したか否かを判断する。
【００６７】
（ｃ）ステップＳ１２において、ＮＯであるならば、ステップＳ１３に移行し、命令バッファ制御ユニット２２が分岐バッファ１８をクリアする。
【００６８】
（ｄ）次に、ステップＳ１４において、命令バッファ制御ユニット２２で次に発行するアドレス（プログラムカウンタ：ＰＣ）をインクリメントし、ステップＳ１５に移行する。
【００６９】
（ｅ）次に、ステップＳ１５において、命令バッファ制御ユニット２２が次に発行する命令がノーマルバッファ１６に在るか否かを判断する。
【００７０】
（ｆ）ステップＳ１５において、ＮＯであるならば、ステップＳ１６に移行し、命令バッファ制御ユニット２２からの指示に従い、命令フェッチユニット１２が次に発行する命令をメモリシステム１０からフェッチし、ノーマルバッファ１６に格納し、その後ステップＳ２０に移行する。
【００７１】
（ｇ）ステップＳ１５において、ＹＥＳであるならば、ステップＳ２０に移行し、命令バッファ制御ユニット２２からの指示に従い、発行命令選択ユニット２０がノーマルバッファ１６から発行命令を選択して、発行する。
【００７２】
（ｈ）ステップＳ１２において、ＹＥＳであるならば、ステップＳ１７に移行し、命令バッファ制御ユニット２２で次に発行するアドレス（プログラムカウンタ：ＰＣ）を分岐先アドレスにする。分岐先アドレスは命令デコードユニット２８から送られてくる。
【００７３】
（ｉ）次に、ステップＳ１８において、命令バッファ制御ユニット２２が分岐バッファ１８に命令があるか否かを判断する。
【００７４】
（ｊ）ステップＳ１８において、ＮＯであるならば、ステップＳ１９に移行し、命令バッファ制御ユニット２２からの指示に従い、命令バッファ制御ユニット２２が分岐先の命令をメモリシステム１０からフェッチし、ノーマルバッファ１６に格納すると共に、ステップＳ２０に移行する。分岐先アドレスは、分岐判定ユニット３６から命令フェッチユニット１２に送られてくる。
【００７５】
（ｋ）ステップＳ１８において、ＹＥＳであるならば、ステップＳ２１移行し、命令バッファ制御ユニット２２からの指示に従い、分岐バッファ１８の内容をノーマルバッファ１６に移動コピーする。
【００７６】
（ｌ）同時に、ステップＳ２２において、命令バッファ制御ユニット２２からの指示に従い、発行命令選択ユニット２０が分岐バッファ１８から発行命令を選択して、発行する。
【００７７】
図６において、Ｃで囲まれて表示されるステップＳ１４〜１６及びステップＳ２０は、分岐以外の命令の場合と同様であり、例えば、後述するループ処理のフローチャートを表す図９におけるステップＳ５４,ステップＳ５６〜５８と同様である。
【００７８】
（ループ系の構成）
本発明の第１の実施の形態に係るプロセッサのループ系の構成は、図７に示すように、メモリシステム１０と、メモリシステム１０にフェッチアドレスＦＡを供給する命令フェッチユニット１２と、メモリシステム１０からフェッチ命令ＦＩをそれぞれ受信するループバッファ１５及びノーマルバッファ１６と、命令フェッチユニット１２, ループバッファ１５及びノーマルバッファ１６を制御する命令バッファ制御ユニット２２と、命令バッファ制御ユニット２２に接続され,かつループバッファ１５及びノーマルバッファ１６に接続される発行命令選択ユニット２０と、発行命令選択ユニット２０から発行命令ＳＩを受信し,デコード結果ＤＲを命令バッファ制御ユニット２２に送信する命令デコードユニット２８と、命令デコードユニット２８に接続され,ループ命令実行時にループの回数などを読み出す汎用レジスタファイル２６と、命令デコードユニット２８からデコード結果ＤＲを受信し,ループ先頭アドレスＬＳＡを命令フェッチユニット１２に送信するループ処理ユニット３０と、同じく命令デコードユニット２８からデコード結果ＤＲを受信し,分岐成立時／分岐不成立時（ＣＢ／ＵＣＢ）のフェッチアドレスＦＡを命令フェッチユニット１２に送信する分岐判定ユニット３６と、命令デコードユニット２８からデコード結果ＤＲを受信する命令実行ユニット３４とを備える。
【００７９】
―ループ系の命令バッファ動作方法―
本発明の第１の実施の形態に係るプロセッサのループ系の命令バッファ動作方法は、以下に示す通りである。
【００８０】
（ａ）命令フェッチは、ノーマルバッファ１６に空きがあったら行う。
【００８１】
（ｂ）ループ命令実行後、ループバッファ１５に空きがある状態の時は、フェッチした命令をノーマルバッファ１６とループバッファ１５の両方に格納する。
【００８２】
（ｃ）命令発行は、発行すべき命令がノーマルバッファ１６とループバッファ１５のいずれかにあったら行う。ループの先頭に戻る処理が発生する時は、ループバッファ１５に命令がある。
【００８３】
（ｄ）ループ命令を実行する際に、ノーマルバッファ１６にある命令をループバッファ１５にコピーする。
【００８４】
（ｅ）分岐が成立したら、ノーマルバッファ１６はクリアされ、分岐先からフェッチをやり直す。
【００８５】
（ループ処理の動作例）
本発明の第１の実施の形態に係るプロセッサのループ処理の動作例を説明する。
【００８６】
（ａ）ループを設定する命令を実行する際に、ノーマルバッファ１６に保存されているはずのループの先頭の命令をループブロック保持用のループバッファ１５にコピーする。
【００８７】
（ｂ）ループ終端の命令まで発行したら、ループバッファ１５からノーマルバッファ１６に内容をコピーし、命令フェッチのオーバーヘッドなしでループの先頭の命令を発行し始める。
【００８８】
―ステートマシン状態遷移によるループ系の動作解析―
本発明の第１の実施の形態に係るプロセッサのループ処理の動作において、フェッチ系の動作は、図８に示すように、ステートマシン状態図を用いて表される。
【００８９】
（ａ）ループ命令を実行(ＥＬＩ)すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１００から、ノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ１０２へ遷移する。
【００９０】
（ｂ）ループバッファ１５がフル（ＬＢＦ）の場合には、ノーマルバッファ１６及びループバッファ１５へフェッチを行うステートマシン状態ＳＴ１０２から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１００へ遷移する。
【００９１】
―発行系の動作フローチャート―
本発明の第１の実施の形態に係るプロセッサのループ処理の動作において、発行系の動作は、図９に示すように、フローチャートを用いて表される。
【００９２】
（ａ）まず、前段階として、ステップＳ５０において、命令バッファ制御ユニット２２の指示に従って、発行命令選択ユニット２０がノーマルバッファ１６及びループバッファ１５から１つの命令を選択し、発行する。
【００９３】
（ｂ）次に、ステップＳ５１において、ループ処理ユニット３０において発行された命令がループ開始命令であるか否かを判断する。
【００９４】
（ｃ）次に、ステップＳ５１において、ＹＥＳであるならば、ステップＳ５２に移行し、命令バッファ制御ユニット２２からの指示に従って、ノーマルバッファ１６の命令をループバッファ１５にコピーすると共に、ステップＳ５４に移行する。
【００９５】
（ｄ）ステップＳ５１において、ＮＯであるならば、ステップＳ５３に移行する。
【００９６】
（ｅ）次に、ステップＳ５３において、ループ処理ユニット３０においてループの最後尾から先頭へジャンプが発生するか否か、即ち、ループが成立するか否かを判断する。
【００９７】
（ｆ）ステップＳ５３において、ＹＥＳであるならば、ステップＳ５５に移行し、ループの先頭アドレスにジャンプする。即ち、命令バッファ制御ユニット２２で次に発行するアドレス（プログラムカウンタ：ＰＣ）をループの先頭アドレスに設定する。ここで、ループの先頭アドレスは、ループ処理ユニット３０から送られてくる。
【００９８】
（ｇ）ステップＳ５３において、ＮＯであるならば、ステップＳ５４に移行し、命令バッファ制御ユニット２２で次に発行するアドレス（プログラムカウンタ：ＰＣ）をインクリメントする。
【００９９】
（ｈ）次に、ステップＳ５６において、命令バッファ制御ユニット２２が次に発行する命令がノーマルバッファ１６に在るか否かを判断する。
【０１００】
（ｉ）ステップＳ５６において、ＮＯであるならば、ステップＳ５７に移行し、命令バッファ制御ユニット２２からの指示に従い、命令フェッチユニット１２が次に発行する命令をメモリシステム１０からフェッチし、ノーマルバッファ１６に格納し、その後ステップＳ５８に移行する。
【０１０１】
（ｊ）ステップＳ５６において、ＹＥＳであるならば、ステップＳ５８に移行し、命令バッファ制御ユニット２２からの指示に従い、発行命令選択ユニット２０がノーマルバッファ１６から発行命令を選択して、発行する。
【０１０２】
（ｋ）ステップＳ５５に引続いて、ステップＳ５９において、命令バッファ制御ユニット２２からの指示に従い、ループバッファ１５の内容をノーマルバッファ１６にコピーする。
【０１０３】
（ｌ）同時に、ステップＳ６０において、命令バッファ制御ユニット２２からの指示に従い、発行命令選択ユニット２０がループバッファ１５から発行命令を選択して、発行する。
【０１０４】
（ループ処理ユニット）  
本発明の第１の実施の形態に係るプロセッサの構成に適用するループ処理ユニット３０は、図１０に示すように、命令デコードユニット２８から送られるループ回数ＬＰＣと減算器５４の出力を選択するセレクタ５０と、セレクタ５０に接続され、残りループ回数を保持するレジスタ５１と、命令デコードユニット２８からループ先頭アドレスＬＳＡを受信するレジスタ５２と、同じく命令デコードユニット２８からループ終端アドレスＬＥＡを受信するレジスタ５３と、レジスタ５１の出力と比較器５８の出力とを減算する減算器５４と、レジスタ５１に接続された比較器５５と、レジスタ５２の出力と命令バッファ制御ユニット２２からの発行命令ＳＩのプログラムカウントＰＣ（ＳＩ）とを比較する比較器５６と、レジスタ５３の出力と命令バッファ制御ユニット２２からの発行命令ＳＩのプログラムカウントＰＣ（ＳＩ）とを比較する比較器５７及び５８と、比較器５５,５６及び５７に接続されるＡＮＤゲート５９とを備える。
【０１０５】
減算器５４においては、ループ終端でループ回数ＬＰＣをデクリメントする。
【０１０６】
レジスタ５２の出力信号であるループ先頭アドレスＬＳＡは、命令バッファ制御ユニット２２のみならず、命令フェッチユニット１２にも送られる。ＡＮＤゲート５９においては、次の３つの条件を満足すると、ループ中であると判断される。即ち、（ｉ）残りのループ回数ＬＰＣが１以上、（ｉｉ）プログラムカウントＰＣがループ先頭アドレスＬＳＡ以上、（ｉｉｉ）プログラムカウントＰＣがループ終端アドレスＬＥＡ以下の３条件である。
【０１０７】
ＡＮＤゲート５９の出力は、ループ中フラグＦＬを介して命令バッファ制御ユニット２２へ送られる。
【０１０８】
（ループプログラム例 ）
０ｘ１０００ 番地から０ｘ２０００ 番地に、３２バイトのデータをコピーするプログラムを以下に示す。３２バイトは、ｌｗ／ｓｗなどの４バイトのワードアクセスで、８回分に相当する。ここで、０ｘは、１６進数であることを示す。
【０１０９】
Ｃ言語で表示すると、例えば、次のようなプログラム形式となる。
【０１１０】
for(i=0;i<8;i++) {
b[i] = a[i];
}
本発明の第１の実施の形態に係るプロセッサにおいて適用可能な終端のみを指定できる場合のプログラム形式を図１１に示す。なお、＄１は汎用レジスタファイル２６の１番を表している。
【０１１１】
本発明の第１の実施の形態に係るプロセッサにおいて適用可能な先頭と終端を両方指定できる場合のプログラム形式を図１２に示す。
【０１１２】
本発明の第１の実施の形態に係るプロセッサにおいて適用可能な更に別のプロセッサの場合のプログラム形式を図１３に示す。
【０１１３】
（ループバッファを分岐先プリフェッチに用いる方法）
本発明の第１の実施の形態に係るプロセッサにおいて、ループバッファ１５をループ処理を行っていない際に、兼用バッファ１４として、分岐先プリフェッチに用いる方法としては、次の（Ａ）分岐のネストを形成する方法、及び（Ｂ）分岐不成立時の予防を実行する方法の２通りが考えられる。以下それぞれ、詳細に説明する。
【０１１４】
（Ａ）分岐のネストを形成する方法
分岐先の命令列をプリデコードし、分岐命令を発見したらその分岐先をさらにプリフェッチする。最初のプリフェッチの分岐直後に分岐命令があった場合に、分岐先にある分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
【０１１５】
―分岐のネストを形成する方法のプログラムリスト例―
分岐のネストを形成する方法のプログラムのリスト例は以下の通りである。
【０１１６】
nop
(a)  bnez $1, A:    <-分岐バッファ１８にプリフェッチ
nop
(b)  beqz $2, B:    <- プリフェッチしない
nop
A: nop
(c)  bra  $3, C:    <- 兼用バッファ１４にプリフェッチ
nop
プリフェッチされて分岐バッファ１８に格納された(ａ)の分岐先をプリデコードし、そこで(ｃ)の分岐を発見した場合、(ｃ)の分岐先を兼用バッファ１４にプリフェッチする。(ａ)の分岐が成立した後、分岐先にすぐまた分岐命令があった場合の分岐遅延を削減することができる。
【０１１７】
―ステートマシン状態遷移によるフェッチ系の動作解析―
分岐のネストを形成する方法において、フェッチ系の動作は、図１４に示すように、ステートマシン状態図を用いて表される。
【０１１８】
（ａ）分岐を検出（ＤＢ）し,プリフェッチを開始(ＳＰＦ)すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６へ遷移する。
【０１１９】
（ｂ）分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ）を判断し、分岐命令を実行(ＥＢＩ)するか或いはループ処理ユニット３０でループの最後尾から先頭へジャンプが発生する(ＬＴ)と、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０へ遷移する。
【０１２０】
（ｃ）ループ命令を実行（ＥＬＩ）すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０からノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１２へ遷移する。
【０１２１】
（ｄ）ループバッファフル（ＬＢＦ）或いはループイクジット（ＥＸＬ：Exit Loop）の場合には、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１２から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０に遷移する。
【０１２２】
（ｅ）ループ命令を実行（ＥＬＩ）すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６から、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１２に遷移する。
【０１２３】
（ｆ）分岐バッファ（ＢＢＵＦ）１８において分岐を検出（ＤＢ）し,ループを脱出（ＯＵＴＬ：Out of Loop）し,プリフェッチを開始(ＳＰＦ)すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６から、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４へ遷移する。
【０１２４】
（ｇ）兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４において、ループ命令を実行（ＥＬＩ）すると、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４から、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１２に遷移する。
【０１２５】
（ｈ）兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４において、分岐判定ユニット３６で分岐が成立（ＢＴ：Branch Taken）すると、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６に遷移する。
【０１２６】
（ｉ）兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４において、分岐判定ユニット３６で分岐が不成立の場合（ＢＮＴ：Branch Not Taken）、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０に遷移する。
【０１２７】
どのような状態であっても、ループ命令を実行（ＥＬＩ）した時点で、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１２に示すように、ノーマルバッファ１６と兼用バッファ１４の両方にフェッチするステートマシン状態ＳＴ１１２に移行する。
【０１２８】
ループ中であっても、プリデコードによって分岐命令を発見した場合、分岐バッファ１８に対してプリフェッチを開始できる。即ち、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ１１０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ１１６へ遷移する。
【０１２９】
兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ１１４において、兼用バッファ１４を２段目の分岐先プリフェッチに用いる時には、ループ処理ユニット３０のループ中フラグ（図１０のＦＬ参照）をチェックする。
【０１３０】
―発行系の動作フローチャート―
分岐のネストを形成する方法において、発行系の動作は、図１５に示すように、フローチャートを用いて表される。
【０１３１】
（ａ）ステップＳ３０において、スタートする。
【０１３２】
（ｂ）ステップＳ３１において、ノーマルバッファ１６に命令があるか否かを判断する。
【０１３３】
（ｃ）ステップＳ３１において、ＮＯであるならば、ステップＳ３２に移行し、ノーマルフェッチをウェイトし、ステップＳ３１に戻る。
【０１３４】
（ｄ）ステップＳ３１において、ＹＥＳであるならば、ステップＳ３３に移行し、ノーマルバッファ１６をプリデコードする。
【０１３５】
（ｅ）次に、ステップＳ３４に進み、分岐があるか否かを判断する。
【０１３６】
（ｆ）ステップＳ３４において、ＮＯであるならば、ステップＳ３５において次の命令に進み、ステップＳ３１に戻る。
【０１３７】
（ｇ）ステップＳ３４において、ＹＥＳであるならば、ステップＳ３６において分岐バッファ１８に対して、プリフェッチを開始する。
【０１３８】
（ｈ）次に、ステップＳ３７０において、プリフェッチをウェイトする。
【０１３９】
（ｉ）次に、ステップＳ３８において、分岐を実行するか否かを判断する。
【０１４０】
（ｊ）ステップＳ３８において、ＹＥＳであるならば、ステップＳ３１に戻る。
【０１４１】
（ｋ）ステップＳ３８において、ＮＯであるならば、ステップ３９０に進む。
【０１４２】
（ｌ）次に、ステップＳ３９０において、分岐バッファ１８に命令があるか否かを判断する。
【０１４３】
（ｍ）ステップＳ３９０において、ＮＯであるならば、ステップ４１においてノーマルフェッチをウェイトし、ステップＳ３８に戻る。
【０１４４】
（ｎ）ステップＳ３９０において、ＹＥＳであるならば、ステップ４００において分岐バッファ１８をプリデコードする。
【０１４５】
（ｏ）次に、ステップＳ４２において、分岐があるか否かを判断する。
【０１４６】
（ｐ）ステップＳ４２において、ＮＯであるならば、ステップ４３に進み、次の命令に進み、ステップＳ３８に戻る。
【０１４７】
（ｑ）ステップＳ４２において、ＹＥＳであるならば、ステップ４４に進み、兼用バッファ１４に対してプリフェッチを開始する。
【０１４８】
（ｒ）次に、ステップＳ４５に進み、分岐実行をウェイトする。
【０１４９】
（ｓ）次に、ステップＳ４６０において、分岐が成立するか否かを判断する。
【０１５０】
（ｔ）ステップＳ４６０において、ＮＯであるならば、ステップＳ３１に戻る。即ち、兼用バッファ１４において、分岐判定ユニット３６で分岐が不成立（ＢＮＴ）の場合、兼用バッファ１４から、ノーマルバッファ１６に移行する。
【０１５１】
（ｕ）ステップＳ４６０において、ＹＥＳであるならば、兼用バッファ１４から分岐バッファ１８に移行し、ステップＳ４００に戻る。即ち、兼用バッファ１４において、分岐判定ユニット３６で分岐が成立（ＢＴ）すると、兼用バッファ１４から、分岐バッファ１８に移行する。兼用バッファ１４を２段目の分岐先プリフェッチに用いる時には、ループ処理ユニット３０のループ中フラグＦＬ（図１０参照）をチェックする。
【０１５２】
図１５において、ステップＳ３０〜ステップＳ３８までは、分岐バッファ１８を使用するプリフェッチ動作に対応している。一方、ステップＳ３９０〜ステップＳ４６０までは、兼用バッファ１４を使用するプリフェッチ動作に対応している。
【０１５３】
本発明の第１の実施の形態に係るプロセッサにおいて、ループバッファ１５をループ処理を行っていない際に、兼用バッファ１４として、分岐先プリフェッチに用いる方法として、分岐のネストを形成する方法によれば、ループ中以外の時間にループバッファを２段目の分岐用バッファとして用いることができる。即ち、ループ処理を行っていない際にループバッファを２レベル目の分岐先プリフェッチに用いることができる。
【０１５４】
（Ｂ）分岐不成立時の予防を実行する方法
本発明の第１の実施の形態に係るプロセッサにおいて、ループバッファ１５をループ処理を行っていない際に、兼用バッファ１４として、分岐先プリフェッチに用いる方法としては、分岐不成立時の予防を実行する方法がある。即ち、プリフェッチを行っている分岐命令の分岐が不成立だった場合に実行されるであろう命令列(連続した先にある命令列)をプリデコードし、分岐命令を発見したらその分岐先をプリフェッチする。分岐命令が連続していて、1つ目の分岐命令の分岐先をプリフェッチしたが分岐が不成立であった場合に２つ目の分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
【０１５５】
―分岐不成立時の予防を実行する方法のプログラムのリスト例―
分岐不成立時の予防を実行する方法のプログラムのリスト例は以下の通りである。
【０１５６】
nop
(a)  bnez $1, A:    <-分岐バッファ１８にプリフェッチ
nop
(b)  beqz $2, B:    <-兼用バッファ１４にプリフェッチ
nop
A: nop
(c)  bra  $3, C:    <- プリフェッチしない
nop
ノーマルバッファ１６内のプリデコードによって(ａ)の分岐命令を検出してプリフェッチを開始しても、さらにノーマルバッファ１６内で(ａ)の先の命令をプリデコードする。その結果(ｂ)が検出されたら、(ａ)の分岐が不成立だった場合の補償として、(ｂ)の分岐命令の分岐先を兼用バッファ１４にプリフェッチする。
【０１５７】
―ステートマシン状態遷移によるフェッチ系の動作解析―
分岐不成立時の予防を実行する方法において、フェッチ系の動作は、図１６に示すように、ステートマシン状態図を用いて表される。
【０１５８】
（ａ）ノーマルバッファ（ＮＢ）１６において分岐を検出（ＤＢ）し,プリフェッチを開始(ＳＰＦ)すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ９６へ遷移する。
【０１５９】
（ｂ）分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ）を判断し、分岐命令を実行(ＥＢＩ)するか或いはループ処理ユニット３０でループの最後尾から先頭へジャンプが発生(ＬＴ)すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ９６から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０へ遷移する。
【０１６０】
（ｃ）ループ命令を実行（ＥＬＩ）すると、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０からノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９２へ遷移する。
【０１６１】
（ｄ）ループバッファフル（ＬＢＦ）或いはループイクジット（ＥＸＬ）の場合には、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９２から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０に遷移する。
【０１６２】
（ｅ）ループ命令を実行（ＥＬＩ）すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ９６から、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９２に遷移する。
【０１６３】
（ｆ）ノーマルバッファ（ＮＢ）１６において分岐を検出（ＤＢ）し,ループを脱出（ＯＵＴＬ）し,プリフェッチを開始(ＳＰＦ)すると、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ９６から、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４へ遷移する。
【０１６４】
（ｇ）兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４において、ループ命令を実行（ＥＬＩ）すると、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４から、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９２に遷移する。
【０１６５】
（ｈ）兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４において、分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ）に係わらず、分岐命令を実行(ＥＢＩ)すると、兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４から、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０に遷移する。
【０１６６】
どのような状態であっても、ループ命令を実行（ＥＬＩ）した時点で、ノーマルバッファ１６及び兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９２に示すように、ノーマルバッファ１６と兼用バッファ１４の両方にフェッチするステートマシン状態ＳＴ９２に移行する。
【０１６７】
ループ中であっても、プリデコードによって分岐命令を発見した場合、分岐バッファ１８に対してプリフェッチを開始できる。即ち、ノーマルバッファ１６へフェッチを行うステートマシン状態ＳＴ９０から、分岐バッファ１８へフェッチを行うステートマシン状態ＳＴ９６へ遷移する。
【０１６８】
兼用バッファ１４へフェッチを行うステートマシン状態ＳＴ９４において、兼用バッファ１４を分岐不成立時に次に実行することになる分岐命令の分岐先プリフェッチに用いる時には、ループ処理ユニット３０のループ中フラグＦＬ（図１０参照）をチェックする。
【０１６９】
―発行系の動作フローチャート―
分岐不成立時の予防を実行する方法において、発行系の動作は、図１７に示すように、フローチャートを用いて表される。
【０１７０】
（ａ）ステップ３０において、スタートする。
【０１７１】
（ｂ）ステップＳ３１において、ノーマルバッファ１６に命令があるか否かを判断する。
【０１７２】
（ｃ）ステップＳ３１において、ＮＯであるならば、ステップＳ３２に移行し、ノーマルフェッチをウェイトし、ステップＳ３１に戻る。
【０１７３】
（ｄ）ステップＳ３１において、ＹＥＳであるならば、ステップＳ３３に移行し、ノーマルバッファ１６をプリデコードする。
【０１７４】
（ｅ）次に、ステップＳ３４に進み、分岐があるか否かを判断する。
【０１７５】
（ｆ）ステップＳ３４において、ＮＯであるならば、ステップＳ３５において次の命令に進み、ステップＳ３１に戻る。
【０１７６】
（ｇ）ステップＳ３４において、ＹＥＳであるならば、ステップＳ３６において分岐バッファ１８に対して、プリフェッチを開始する。
【０１７７】
（ｈ）次に、ステップＳ３７において、次の命令に進む。
【０１７８】
（ｉ）次に、ステップＳ３８において、分岐を実行するか否かを判断する。
【０１７９】
（ｊ）ステップＳ３８において、ＹＥＳであるならば、ステップＳ３１に戻る。
【０１８０】
（ｋ）ステップＳ３８において、ＮＯであるならば、ステップ３９に進む。
【０１８１】
（ｌ）次に、ステップＳ３９において、ノーマルバッファ１６に命令があるか否かを判断する。
【０１８２】
（ｍ）ステップＳ３９において、ＮＯであるならば、ステップ４１においてノーマルフェッチをウェイトし、ステップＳ３８に戻る。
【０１８３】
（ｎ）ステップＳ３９において、ＹＥＳであるならば、ステップ４０においてノーマルバッファ１６をプリデコードする。
【０１８４】
（ｏ）次に、ステップＳ４２において、分岐があるか否かを判断する。
【０１８５】
（ｐ）ステップＳ４２において、ＮＯであるならば、ステップ４３に進み、次の命令に進み、ステップＳ３８に戻る。
【０１８６】
（ｑ）ステップＳ４２において、ＹＥＳであるならば、ステップ４４に進み、兼用バッファ１４に対してプリフェッチを開始する。
【０１８７】
（ｒ）次に、ステップＳ４５に進み、分岐実行をウェイトし、ステップＳ３１に戻る。即ち、兼用バッファ１４において、分岐判定ユニット３６で分岐が成立したか否か（Ｔ／ＮＴ）に係わらず、分岐命令を実行(ＥＢＩ)すると、兼用バッファ１４から、ノーマルバッファ１６に移行する。
【０１８８】
図１７において、ステップＳ３０〜ステップＳ３８までは、分岐バッファ１８を使用するプリフェッチ動作に対応している。一方、ステップＳ３９〜ステップＳ４５までは、兼用バッファ１４を使用するプリフェッチ動作に対応している。
【０１８９】
本発明の第１の実施の形態に係るプロセッサにおいて、ループバッファ１５を分岐先プリフェッチに用いる方法として、分岐不成立時の予防を実行する方法によれば、プリフェッチを行っている分岐命令の分岐が不成立だった場合に実行されるであろう命令列(連続した先にある命令列)をプリデコードし、分岐命令を発見したらその分岐先をプリフェッチする。分岐命令が連続していて、1つ目の分岐命令の分岐先をプリフェッチしたが分岐が不成立であった場合に２つ目の分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
【０１９０】
本発明の第１の実施の形態に係るプロセッサ及びプロセッサの命令バッファ動作方法によれば、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、分岐用の分岐バッファ１８とループ用の兼用バッファ１４の構造を揃えるか兼用バッファ１４が分岐バッファ１８と同じ構造を内包することによって、ループ処理を行っていない際に兼用バッファ１４を２レベル目の分岐先プリフェッチに用いることができるため、兼用バッファ１４の利用率の向上と,更なる分岐高速化を行うことが可能となる。
【０１９１】
[その他の実施の形態]
上記のように、本発明は第１の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
【０１９２】
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。したがって、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【図面の簡単な説明】
【０１９３】
【図１】本発明の第１の実施の形態に係るプロセッサの模式的ブロック構成図。
【図２】本発明の第１の実施の形態に係るプロセッサの基本構成の模式的ブロック構成図。
【図３】本発明の第１の実施の形態のプロセッサの基本構成の動作を表すステートマシン状態図。
【図４】本発明の第１の実施の形態に係るプロセッサの分岐系の模式的ブロック構成図。
【図５】本発明の第１の実施の形態に係るプロセッサの分岐高速化の動作において、フェッチ系の動作を表すステートマシン状態図。
【図６】本発明の第１の実施の形態に係るプロセッサの分岐高速化の動作において、発行系の動作を表すフローチャート図。
【図７】本発明の第１の実施の形態に係るプロセッサのループ系の模式的ブロック構成図。
【図８】本発明の第１の実施の形態に係るプロセッサのループ処理の動作において、フェッチ系の動作を表すステートマシン状態図。
【図９】本発明の第１の実施の形態に係るプロセッサのループ処理の動作において、発行系の動作を表すフローチャート図。
【図１０】本発明の第１の実施の形態に係るプロセッサに適用するループ処理ユニットの模式的ブロック構成図。
【図１１】本発明の第１の実施の形態に係るプロセッサにおいて適用可能な終端のみを指定できる場合のプログラム形式。
【図１２】本発明の第１の実施の形態に係るプロセッサにおいて適用可能な先頭と終端を両方指定できる場合のプログラム形式。
【図１３】本発明の第１の実施の形態に係るプロセッサにおいて適用可能な更に別のプロセッサの場合のプログラム形式。
【図１４】本発明の第１の実施の形態に係るプロセッサにおいて、分岐のネストを形成する方法におけるフェッチ系の動作を表すステートマシン状態図。
【図１５】本発明の第１の実施の形態に係るプロセッサにおいて、分岐のネストを形成する方法における発行系の動作を表すフローチャート図。
【図１６】本発明の第１の実施の形態に係るプロセッサにおいて、分岐不成立時の予防を実行する方法におけるフェッチ系の動作を表すステートマシン状態図。
【図１７】本発明の第１の実施の形態に係るプロセッサにおいて、分岐不成立時の予防を実行する方法における発行系の動作を表すフローチャート図。
【符号の説明】
【０１９４】
１０…メモリシステム
１２…命令フェッチユニット
１４…兼用バッファ
１５…ループバッファ
１６…ノーマルバッファ
１８…分岐バッファ
２０…発行命令選択ユニット
２２…命令バッファ選択ユニット
２４…プリデコード制御ユニット
２６…汎用レジスタファイル
２８…命令デコードユニット
３０…ループ処理ユニット
３２…プリデコードユニット
３４…命令実行ユニット
３６…分岐判定ユニット
５０…セレクタ
５２,５３…レジスタ
５４…減算器
５５,５６,５７,５８…比較器
５９…ＡＮＤゲート
Ｓ１１〜Ｓ２２,Ｓ３０〜Ｓ４５,Ｓ５０〜Ｓ６０,Ｓ３９０,Ｓ４００,Ｓ４６０…ステップ
ＳＴ７０〜ＳＴ７４,ＳＴ８０〜ＳＴ８２,ＳＴ９０〜ＳＴ９４,ＳＴ１００〜ＳＴ１０２,ＳＴ１１０〜ＳＴ１１６…ステートマシン状態
【図１】
2006309337.tif 000003
【図２】
2006309337.tif 000004
【図３】
2006309337.tif 000005
【図４】
2006309337.tif 000006
【図５】
2006309337.tif 000007
【図６】
2006309337.tif 000008
【図７】
2006309337.tif 000009
【図８】
2006309337.tif 000010
【図９】
2006309337.tif 000011
【図１０】
2006309337.tif 000012
【図１１】
2006309337.tif 000013
【図１２】
2006309337.tif 000014
【図１３】
2006309337.tif 000015
【図１４】
2006309337.tif 000016
【図１５】
2006309337.tif 000017
【図１６】
2006309337.tif 000018
【図１７】
2006309337.tif 000019