(57)【特許請求の範囲】
【請求項１】
複数の命令ストリームに対応してメモリより先読みした命令を格納する複数の命令バッファと、分岐命令の処理に関する予測を行う分岐予測ユニットと、前記分岐予測ユニットにより分岐命令が予測される毎にその分岐命令の分岐先命令の命令読み出しのためにストリームを確保し、ストリームに対応した命令バッファを割り当てて分岐命令の分岐先命令の命令読み出しを制御するストリーム制御回路と、前記分岐予測ユニットの予測結果と分岐命令の処理結果とにより前記分岐命令の分岐成立、分岐不成立及び分岐予測成功、分岐予測失敗を判定する分岐判定回路とを備えて構成されるパイプライン方式のデータ処理装置において、前記分岐予測ユニットによる予測結果に従って非予測側ストリームの命令アドレスを格納する前記複数の分岐命令に対応するデータ格納手段を備え、前記ストリーム制御回路は、分岐命令のデコード時、分岐予測がはずれた場合の命令の再読み出しのために当該分岐命令の非予測ストリームの命令アドレスを前記データ格納手段に退避し、当該分岐命令の非予測側ストリームを含むストリームが全て使用中ならば、当該分岐命令の非予測側ストリームを開放することにより、分岐予測ユニットが予測している更に後続の分岐命令の分岐先命令読み出しのためのストリームを確保することを特徴とするデータ処理装置。
【請求項２】
前記ストリーム制御回路は、分岐命令のデコード時に未使用のストリームがある場合、前記分岐予測ユニットにより分岐命令の次に実行されると予測される命令の存在する予測側ストリームと実行されないと予測される非予測側ストリームとのいづれのストリームも開放せずに次の命令の処理を開始させることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記複数の分岐命令に対応するデータ格納手段に格納される非予測側ストリームの命令アドレスは、前記分岐予測ユニットによる予測結果が分岐成立の場合、該分岐命令の後続命令の命令アドレスであり、予測結果が分岐不成立の場合、該分岐命令の分岐先命令の命令アドレスであり、前記ストリーム制御回路は、分岐判定回路により分岐予測失敗が通知されたとき、次に処理するべき正しいストリームの命令が前記命令バッファに存在しない場合、前記複数の分岐命令に対応したデータ格納手段に格納されている命令アドレスにより次に処理すべき正しいストリームの命令を前記メモリから読み出して正しいストリームの命令の処理を続行させることを特徴とする請求項１または２記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン方式のデータ処理装置に係り、特に、分岐命令（以下の説明では、「条件分岐命令」ということもあるが同義である）を効率的に実行することを可能にしたデータ処理装置に関する。
【０００２】
【従来の技術】
図５は従来技術によるパイプライン方式のデータ処理装置の構成例を示すブロック図、図６は条件分岐命令を含む命令群の流れの一例を示す図、図７は図６に示す命令列において分岐命令の予測に成功した場合の動作を説明するタイミングチャート、図８は図６に示す命令列において分岐命令の予測に失敗した場合の動作を説明するタイミングチャートである。以下、図５〜図８を参照して従来技術によるデータ処理装置について説明する。
【０００３】
図６に示す命令列において、分岐命令０３は条件分岐命令を表わし、命令０１、命令０２、命令０４、命令０５、命令０６、命令１１、命令１２、命令１３は分岐命令以外の命令を表わす。図６に示す命令列は、命令０１、命令０２、分岐命令０３の順で順次処理され、命令０２により設定されるコンディションコード（以下、ＣＣという）と分岐命令０３の分岐条件との比較を行うことにより分岐命令０３の分岐が成立するか否かの分岐判定を行い、分岐成立（以下、ｔａｋｅｎという）の判定が行われた場合、分岐命令０３の分岐先命令列である命令１１、命令１２、命令１３が順次処理され、分岐不成立（以下、ｎｏｔ−ｔａｋｅｎという）の判定が行われた場合、分岐命令０３の後続命令列である命令０４、命令０５、命令０６が順次処理される。
【０００４】
このとき、命令０１〜命令０６の一連の流れをストリームと呼ぶ。また、分岐命令０３から派生した新たな命令列、命令１１〜命令１３は、命令０１〜命令０６とは別のストリームである。このように、命令列の処理は、分岐命令が発生する毎に新たなストリームを確保し、分岐命令の分岐判定が決定する毎に実行されない側の命令列を含むストリームを開放することにより行われる。
【０００５】
また、パイプライン方式のデータ処理装置は、条件分岐命令の処理方法として、前述の分岐判定が決定されるまでに何らかの予測手法により分岐方向、すなわち、分岐成立（ｔａｋｅｎ）か、分岐不成立（ｎｏｔ−ｔａｋｅｎ）かを予測し、その予測に従って条件分岐命令の分岐先命令列あるいは後続命令列の処理を開始するのが一般的である。
【０００６】
まず、条件分岐命令に対する分岐予測がｔａｋｅｎで、分岐結果がｔａｋｅｎである場合、すなわち、分岐予測が成功（ｔｒｕｅ）した場合の基本的な動作を図５〜図７を参照して説明する。図５に示す従来技術によるデータ処理装置は、図示するような多数の機能回路により構成されているが、それらの機能等については、命令列の処理動作の説明と共に説明する。
【０００７】
図５において、１００は命令バッファ（ＩＢＲ）、１１０は前記ＩＢＲ１００に格納されている命令で次に処理される命令の格納場所を示すポインタ（ＩＢＲＯＰ）、１２０はＩＢＲＯＰ１１０により指定される命令をＩＢＲ１００から選択するアライナである。前記ＩＢＲ１００、前記ＩＢＲＯＰ１１０、前記アライナ１２０はストリーム０番に対応している。同様にストリーム１番に対応し、ＩＢＲ２００、ＩＢＲＯＰ２１０、アライナ２２０が設けられている。さらに、同様にストリーム２番に対応し、ＩＢＲ３００、ＩＢＲＯＰ３１０、アライナ３２０が設けられている。
【０００８】
３３０はストリーム選択回路、３４０はストリーム選択回路３３０から出力される命令と命令用キャッシュ９２０からの出力とを選択するバイパス選択回路、３５０はストリーム制御回路、３６０は命令レジスタ（ＩＲ）、３７０は命令デコーダ、３７１は条件分岐命令の分岐条件信号、３８０は例えば１６本のレジスタ群で構成される汎用レジスタ（ＩＧＲ）であり、後述するＧＧＲ４８０のコピーでもよいし、あるいは、ＧＧＲ４８０そのものでも論理動作上問題はない。４００は命令の実行に必要なメモリオペランドを求めるための指標アドレスレジスタ、４１０は命令の実行に必要なメモリオペランドを求めるための基底アドレスレジスタ、４２０は命令の実行に必要なメモリオペランドを求めるための変位アドレスレジスタ、４３０はオペランド用アドレス加算器、４４０は分岐先命令を求めるための変位アドレスレジスタ、４５０は分岐先命令を求めるための指標アドレスレジスタ、４６０は分岐先命令を求めるための基底アドレスレジスタ、４７０は命令用アドレス加算器、４８０は例えば１６本のレジスタ群で構成される汎用レジスタ（ＧＧＲ）、４９０はオペランド用キャッシュ、５００は演算器、５０１はＣＣ、６００は分岐命令の分岐成立（ｔａｋｅｎ）判定と分岐不成立（ｎｏｔ−ｔａｋｅｎ）判定と分岐予測成功（ｔｒｕｅ）判定と分岐予測失敗（ｆａｉｌ）判定との判定を行う分岐判定回路、７００は現在デコード中の命令の命令アドレスを保持するプログラムカウンタ、８００はＩＢＲ１００に格納する命令の命令アドレスを保持する命令フェッチアドレスレジスタ（ＩＦ）、８１０はＩＦ８００に格納されている命令アドレスに命令フェッチ長を加算するインクリメンタ、８２０は前記インクリメンタ８１０の出力と前記命令用アドレス加算器４７０の出力と分岐予測ユニット９００とにより求めた命令アドレスを選択する選択回路である。
【０００９】
前記ＩＦ８００、前記インクリメンタ８１０、前記選択回路８２０はストリーム０番に対応している。同様に、ストリーム１番に対応するＩＦ８３０、インクリメンタ８４０、選択回路８５０が設けられている。さらに、同様に、ストリーム２番に対応するＩＦ８６０、インクリメンタ８７０、選択回路８８０が設けられている。８９０はストリーム選択回路、９００は分岐予測ユニット、９０１は条件分岐命令のｔａｋｅｎ予測信号、９０２は条件分岐命令のｎｏｔ−ｔａｋｅｎ予測信号、９１０は命令用キャッシュ９２０を検索するアドレスを選択する選択回路、９２０は命令用キャッシュである。
【００１０】
図７に示すタイミングチャートは、図６の命令列において、分岐命令０３の分岐予測成功（以下、ｔｒｕｅ）の場合、すなわち、分岐予測がｔａｋｅｎの予測でありかつ分岐命令がｔａｋｅｎした場合のデータ処理装置の動作を説明するパイプライン制御フローのタイミングチャートである。図７において、上部の横軸はパイプラインの実行サイクルを示しており、その番号１〜１４は、順次のサイクルを参照可能にするため便宜上番号付けしたサイクル番号である。
【００１１】
各命令は、図７のタイミングチャートに示すようにＤ、Ａ、Ｔ、Ｂ、Ｌ、Ｅ、Ｐの７つのステージに分けて処理される。Ｄステージは命令のデコードを行い、Ａステージはメモリオペランドを求めるためのアドレス計算を行い、Ｔステージ及びＢステージはメモリオペランドを検索し、Ｌステージはメモリオペランド及びレジスタオペランドの演算器へのロードを行い、Ｅステージは命令の実行を行い、Ｐステージは演算結果の格納を行う。
【００１２】
分岐命令の読み出しは、Ｄｉ、Ａｉ、Ｔｉ、Ｂｉ、Ｌｉの５つのステージに分けて処理される。Ｄｉステージは分岐先命令列のストリーム確保を行い、Ａｉステージは分岐先命令のアドレス計算を行い、Ｔｉステージ及びＢｉステージは命令用キャッシュの検索を行い、Ｌｉステージは命令用キャッシュから命令バッファ及びＩＲ３６０へ命令をロードする。
【００１３】
いま、図６に示す命令列の命令０１〜命令０６はストリーム０番に割り当てられているものとする。従って、命令０１は、ＩＦ８００の命令アドレスにより予め命令用キャッシュ９２０から読み出されてＩＢＲ１００に格納されている。命令０１は、サイクル２でＩＢＲ１００からＩＢＲＯＰ１１０に従いアライナ１２０により選択され、ストリーム選択回路３３０により選択され、さらに、バイパス選択回路３４０により選択されてＩＲ３６０にセットされる。
【００１４】
命令０１は、サイクル３で命令デコーダ３７０によりデコードされ、デコード結果である指標レジスタ番号及び基底レジスタ番号によりＩＧＲ３８０が検索されて、当該レジスタ番号に対応するＩＧＲ３８０の内容がそれぞれ指標アドレスレジスタ４００、基底アドレスレジスタ４１０にセットされる。また、他のデコード結果である変位アドレスが変位アドレスレジスタ４２０にセットされる。
【００１５】
また、命令０１は、サイクル４で前記指標アドレスレジスタ４００、基底アドレスレジスタ４１０、変位アドレスレジスタ４２０の加算をアドレス加算器４３０で行い、サイクル５及びサイクル６でオペランド用キャッシュ４９０を検索し、サイクル７で前記オペランド用キャッシュ４９０の検索結果、すなわち、命令０１のメモリオペランドを演算器５００に転送し、また、サイクル７では同時にＧＧＲ４８０からレジスタオペランドを読み出し演算器５００に転送する。
【００１６】
そして、命令０１は、サイクル８で演算を実行し、その演算結果がサイクル９でオペランド用キャッシュ４９０またはＧＧＲ４８０に格納される。また、命令０１の演算結果によりサイクル９でＣＣが決定される。
【００１７】
前述の命令０１と同様に、命令０２は、サイクル４でデコードされ、サイクル９で演算を実行し、サイクル１０でＣＣ５０１が決定される。
【００１８】
次の分岐命令０３は、サイクル５でデコードされる。このとき、命令デコーダ３７０は、条件分岐命令が解読されるとそのデコード結果をストリーム制御回路３５０に伝達する。ストリーム制御回路３５０は、分岐予測ユニット９００からのｔａｋｅｎ予測信号９０１、ｎｏｔ−ｔａｋｅｎ予測信号９０２と命令デコーダ３７０からの条件分岐命令デコード信号とにより、次にＩＲ３６０にセットする命令をどのストリームの命令バッファから持ってくるかを決定する。すなわち、条件分岐命令がデコードされ、かつ、ｔａｋｅｎ  と予測されていた場合、分岐命令０３の分岐先命令が格納されているストリームの命令バッファから命令が取り出され、条件分岐命令がデコードされ、かつ、ｎｏｔ−ｔａｋｅｎ  と予測されていた場合、分岐命令０３の後続命令が格納されているストリームの命令バッファから命令が取り出される。また、命令デコーダ３７０は、条件分岐命令の分岐条件を解読し分岐条件信号３７１を分岐判定回路６００に伝達する。分岐命令０３は、サイクル１０で決定されたＣＣ５０１と前記分岐条件信号３７１との比較を分岐判定回路６００で行い、サイクル１１に分岐命令０３のｔａｋｅｎ判定、ｎｏｔ−ｔａｋｅｎ判定及びｔｒｕｅ判定、ｆａｉｌ判定が決定される。
【００１９】
一方、分岐命令０３を含むストリームの後続命令列の逐次命令の読み出しが行われるとき、その命令の読み出しアドレスは、ＩＦ８００からストリーム選択回路８９０、選択回路９１０を経由し、命令キャッシュ９２０に伝達されると共に分岐予測ユニット９００にも伝達される。分岐予測ユニット９００は、前記命令読み出しアドレスをキーとして分岐履歴を参照し、当該命令により読み出される命令列の中にｔａｋｅｎ  する分岐命令が存在するか否かを予測する。なお、分岐予測は、公知の方法で行われればよく、また、本発明の範囲外であるため、ここではその説明を省略する。
【００２０】
分岐予測ユニット９００が分岐命令０３のｔａｋｅｎを予測した場合、ｔａｋｅｎ予測信号９０１がストリーム制御回路３５０に伝達され、サイクル１で未使用のストリームがあることを検出し、サイクル２で新たにストリーム１番が確保される。分岐予測ユニット９００は、分岐履歴情報から予測分岐先アドレスを求め、サイクル２で当該予測分岐先アドレスを選択回路９１０を経由して命令用キャッシュ９２０に伝達し、サイクル３及びサイクル４で命令１１を含む命令列の読み出しを行う。また、前記予測分岐先アドレスは、選択回路８５０を経由してＩＦ８３０にもセットされ、命令１１以降のストリーム１番の逐次命令の読み出しに利用される。前述のように、分岐予測ユニット９００における分岐予測により命令１１はサイクル５で命令用キャッシュ９２０からロードされ、ＩＢＲ２００に格納される。ストリーム制御回路３５０は、前記条件分岐命令のデコード信号と前記ｔａｋｅｎ  予測信号９０１とから分岐命令０３の次には分岐先命令列であるストリーム１番の命令を選択するようにストリーム選択回路３３０に指示を行う。
【００２１】
しかし、命令１１が命令用キャッシュ９２０からロードされるのはサイクル５であるため、サイクル５の時点ではまだ命令１１はＩＢＲ２００にセットされていない。そこで、ストリーム制御回路３５０は、サイクル５でストリーム選択回路３３０により選択されている命令バッファ、すなわち、ＩＢＲ２００が空である場合、バイパス選択回路３４０がバイパス側を選択するように指示する。これにより、命令１１は、サイクル５でロードされ、ＩＢＲ２００をバイパスしＩＲ３６０にセットされる。以降、命令１１〜命令１３は順次処理される。
【００２２】
サイクル１１において、命令０２のＣＣ５０１と分岐命令０３の分岐条件信号３７１とにより分岐判定回路６００が分岐判定を行い、ｔａｋｅｎ  の判定信号６０１を発生する。また、サイクル１１において、分岐判定回路６００は、分岐命令０３がｔａｋｅｎ  の予測であったため分岐予測成功を意味するｔｒｕｅの判定信号６０３を発生する。前記ｔａｋｅｎ  の判定信号６０１により、ストリーム０番はサイクル１２で開放される。また、前記ｔｒｕｅの判定信号６０３が決定されると、予測により投機的に実行していた命令１１の演算結果の書き込みを許可し、サイクル１２において命令１１の演算結果が格納される。
【００２３】
次に、条件分岐命令の分岐予測失敗の場合の基本動作を図５、図６、図８により説明する。
【００２４】
図８に示すタイミングチャートは、図６の命令列において、分岐命令０３の分岐予測失敗（以下、ｆａｉｌ）の場合、すなわち、分岐予測がｎｏｔ−ｔａｋｅｎ  の予測であるが実際にはｔａｋｅｎした場合のデータ処理装置の動作を説明するパイプライン制御フローのタイミングチャートである。図８において、上部の横軸はパイプラインの実行サイクルを示しており、その番号１〜２０は、順次のサイクルを参照可能にするため便宜上番号付けしたサイクル番号である。
【００２５】
前述した場合と同様に、命令０１はサイクル３でデコードされ、サイクル８で演算を実行し、サイクル９でＣＣ５０１が決定される。同様に、命令０２はサイクル４でデコードされ、サイクル９で演算を実行し、サイクル１０でＣＣ５０１が決定される。また、分岐命令０３はサイクル５でデコードされる。このとき、命令デコーダ３７０は、条件分岐命令が解読されるとそのデコード結果をストリーム制御回路３５０に伝達する。ストリーム制御回路３５０は、前記デコード結果によりサイクル５で未使用のストリームがあることを検出し、サイクル６で新たにストリーム１番を確保する。
【００２６】
ストリーム制御回路３５０は、分岐予測ユニット９００からのｔａｋｅｎ  の予測信号９０１、ｎｏｔ−ｔａｋｅｎ  の予測信号９０２と命令デコーダ３７０からの条件分岐命令デコード信号とにより、次にＩＲ３６０にセットする命令をどのストリームの命令バッファから持ってくるかを決定する。すなわち、条件分岐命令がデコードされ、かつ、ｔａｋｅｎ  と予測されていた場合、分岐命令０３の分岐先命令が格納されているストリームの命令バッファから命令が取り出され、条件分岐命令がデコードされ、かつ、ｎｏｔ−ｔａｋｅｎ  と予測されていた場合、分岐命令０３の後続命令が格納されているストリームの命令バッファから命令が取り出される。また、命令デコーダ３７０は、条件分岐命令の分岐条件を解読し分岐条件信号３７１を分岐判定回路６００に伝達する。分岐命令０３は、サイクル１０で決定されたＣＣ５０１と前記分岐条件信号３７１との比較を分岐判定回路６００で行い、サイクル１１で分岐命令０３のｔａｋｅｎ  判定、ｎｏｔ−ｔａｋｅｎ  判定及びｔｒｕｅ判定、ｆａｉｌ判定が決定される。
【００２７】
一方、分岐命令０３を含むストリームの後続命令列の逐次命令の読み出しが行われるとき、その命令の読み出しアドレスは、ＩＦ８００からストリーム選択回路８９０、選択回路９１０を経由し、命令キャッシュ９２０に伝達されると共に分岐予測ユニット９００にも伝達される。図８に示すタイミングチャートでは、分岐予測ユニット９００が、分岐命令０３のｎｏｔ−ｔａｋｅｎ  を予測したため、サイクル２での分岐予測によるストリーム１番の確保は行われない。
【００２８】
分岐命令０３は、サイクル５で命令デコーダ３７０でデコードされ、デコード結果である指標レジスタ番号及び基底レジスタ番号によりＩＧＲ３８０を検索し、当該レジスタ番号に対応するＩＧＲ３８０の内容をそれぞれ指標アドレスレジスタ４５０、基底アドレスレジスタ４６０にセットし、また、他のデコード結果である変位アドレスを変位アドレスレジスタ４４０にセットする。分岐命令０３は、サイクル６で、前記指標アドレスレジスタ４５０、基底アドレスレジスタ４６０、変位アドレスレジスタ４４０の加算をアドレス加算器４７０で行い分岐命令０３の分岐先命令の命令アドレスを求める。前記分岐先命令の命令アドレスは、選択回路９１０を経由し命令用キャッシュ９２０に送られる。
【００２９】
分岐命令０３は、サイクル７及びサイクル８で命令用キャッシュ９２０を検索し、サイクル９で前記命令用キャッシュ９２０の検索結果、すなわち、命令１１を含むストリーム１番の命令列をロードしてＩＢＲ２００にセットする。ストリーム制御回路３５０は、前記条件分岐命令のデコード信号と分岐予測ユニット９００からの  ｎｏｔ−ｔａｋｅｎ予測信号９０１とから分岐命令０３の次に、後続の命令列であるストリーム０番の命令を選択するようにストリーム選択回路３３０に指示する。以後、命令０４、命令０５、命令０６が順次デコードされる。
【００３０】
サイクル１１では、命令０２のＣＣ５０１と分岐命令０３の分岐条件信号３７１から分岐判定回路６００で分岐判定が行われ、ｔａｋｅｎ  の判定信号６０１が発生する。また、サイクル１１で、分岐判定回路６００は、分岐命令０３がｎｏｔ−ｔａｋｅｎ  と予測されていたため分岐予測失敗を意味するｆａｉｌ判定信号６０４を発生する。このｆａｉｌ判定信号６０４の発生により、それ以降の命令０４、命令０５、命令０６の処理は抑止される。ストリーム制御回路３５０は、分岐判定回路６００からｆａｉｌ判定信号６０４を受け取るとストリーム１番の命令を選択するようストリーム選択回路３３０に指示する。これにより命令１１がサイクル１２でデコードされ、以降、命令１２、命令１３が順次処理される。
【００３１】
前述したように、従来技術によるデータ処理装置は、条件分岐命令の分岐判定が決定されるまで非予測側のストリームの開放を行わずに、非予測側のストリームの命令列を分岐判定決定まで命令バッファに残しておくため、ｆａｉｌ判定の次のサイクルには正しいストリームの命令の処理を開始することができる。
【００３２】
図９は複数の条件分岐命令を含む命令列群の流れの一例を示す図、図１０は従来技術によるデータ処理装置において、図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合、すなわち、予測成功ｔｒｕｅであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、条件分岐命令が連続する場合の動作を図５、図９、図１０を参照して説明する。
【００３３】
図１０に示すタイミングチャートは、図９に示す命令列において、分岐命令０２、分岐命令１２、分岐命令２２、分岐命令３２、分岐命令４２の全てがｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合、すなわち、予測成功ｔｒｕｅであった場合の動作を示している。
【００３４】
命令０１はサイクル４でデコードされ、分岐命令０２はサイクル５でデコードされる。分岐予測ユニット９００は、分岐命令０２を含む命令列の読み出しをキーとして分岐命令０２の分岐予測を行う。ストリーム制御回路３５０は、分岐予測ユニット９００からのｔａｋｅｎ  の予測信号９０１を受け、サイクル１から命令１１を含む命令列の読み出しを開始し、サイクル１で未使用ストリームがあることを検出し、サイクル２で命令１１を含む命令列のためにストリーム１番を確保する。分岐命令ユニット９００は、サイクル２で命令１１の命令アドレスを予測し、そのアドレスを選択回路９１０を経由して命令用キャッシュ９２０に伝達する。サイクル３及びサイクル４で命令用キャッシュ９２０が検索され、命令１１はサイクル５で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。この結果、命令１１はサイクル６でデコードされ、分岐命令１２はサイクル７でデコードされる。
【００３５】
分岐命令１２を含む命令列の読み出し、すなわち、サイクル１からの命令読み出しをキーとして分岐命令１２の分岐予測が行われ、サイクル３から命令２１を含む命令列の読み出しが開始される。また、サイクル３で未使用のストリームがあることを検出し、サイクル４で命令２１を含む命令列のためにストリーム２番が確保される。分岐命令ユニット９００は、サイクル４で命令２１の命令アドレスを予測し、選択回路９１０を経由して命令アドレスを命令用キャッシュ９２０に伝達する。サイクル５及びサイクル６で命令用キャッシュ９２０が検索され、命令２１はサイクル７で命令用キャッシュ９２０からロードされ、ＩＲ３６０にセットされる。これにより、命令２１はサイクル８でデコードされる。
【００３６】
その後、分岐命令２２を含む命令列の読み出しをキーとして分岐予測が行われ、命令３１を含む命令列の読み出しのためにストリームを確保しようとするが、サイクル５の時点ではストリーム０番、１番、２番とも使用中であるため、命令３１を含む命令列の読み出しのためにストリームを確保することができない。すなわち、ＩＢＲ１００には命令０３を含む命令列が格納されており、ＩＢＲ２００には命令１３を含む命令列が格納されており、ＩＢＲ３００には命令２３を含む命令列が格納されているため、新たに命令３１を含む命令列を格納するべき命令バッファが空いていないので、命令３１を含む命令列の命令読み出しを抑止する必要がある。
【００３７】
もし、サイクル６で分岐命令０２の分岐判定が決定する前にストリーム０番を上書き確保し、命令３１を含む命令列の命令読み出しを開始すると、命令３１は、サイクル９に命令用キャッシュ９２０からロードされ、ＩＲ３６０及びＩＢＲ１００にセットできることになる。このとき、サイクル１１で決定される分岐命令０２の分岐判定がｆａｉｌ判定の場合、ｆａｉｌ判定の次のサイクルに正しいストリームの命令である命令０３の処理を開始しなければならないが、前記命令３１を含む命令列がすでにＩＢＲ１００にセットされており、命令０３はＩＢＲ１００には残っていない。従って、この方法では命令０３以降の処理が実行できないことになる。
【００３８】
同様に、ストリーム１番を上書き確保し、命令３１を含む命令列の読み出しを開始すると、分岐命令１２の分岐判定がｆａｉｌ判定の場合、命令１３以降の処理が実行できないことになる。また、同様にストリーム２番を上書き確保し、命令３１を含む命令列の読み出しを開始すると、分岐命令２２の分岐判定がｆａｉｌ判定の場合、命令２３以降の処理が実行できないことになる。このようにストリームが全て使用済状態で、さらに分岐命令が発生すると、いづれかのストリームが開放されるまで当該分岐命令の分岐先命令列の命令読み出しを抑止しなければならない。
【００３９】
分岐命令３１の分岐先命令列の命令読み出しを抑止ししている間のサイクル１０で命令０１のＣＣ５０１が確定し、サイクル１１で分岐命令０２のｔａｋｅｎ  判定信号６０１が決定する。この分岐命令０２のｔａｋｅｎ  の判定信号６０１により命令０３以降の命令列が不要となり、サイクル１２でストリーム０番が開放される。ストリーム制御回路３５０は、これにより、サイクル１２で未使用のストリームがあることを検出し、サイクル１３で命令３１を含む命令列の読み出しのためにストリーム０番を確保して命令読み出しを開始する。サイクル１４及びサイクル１５で命令用キャッシュ９２０が検索され、命令３１は、サイクル１６で命令用キャッシュ９２０からロードされＩＲ３６０にセットされ、サイクル１７でデコードされる。以降、命令３２、命令４１、命令４２が順次処理される。
【００４０】
【発明が解決しようとする課題】
前述した従来技術によるデータ処理装置は、条件分岐命令の分岐判定が決定されるまで非予測側のストリーム、すなわち、分岐命令の分岐予測がｔａｋｅｎ  の場合、その分岐命令の次の命令を含む命令列を保持しているストリーム、分岐命令の分岐予測がｎｏｔ−ｔａｋｅｎ  の場合、その分岐命令の分岐先命令からの命令を含む命令列を保持しているストリームの開放を行わずに、非予測側のストリームの命令列を当該条件分岐命令の分岐判定決定まで命令バッファ内に残しておくため、分岐判定でｆａｉｌの判定があっても、次のサイクルには正しいストリームの命令の処理を開始することができる。
【００４１】
しかし、従来技術によるデータ処理装置は、ストリームが全て使用済状態で、さらに条件分岐命令が発生すると、いづれかのストリームが開放されるまで当該条件分岐命令の分岐先命令列の命令読み出しを抑止しなければならないという問題点を有している。
【００４２】
すなわち、一般に、分岐予測を行う機能を有するデータ処理装置は、ほとんどの場合に分岐予測が成功する。分岐予測が成功する場合においては、非予測側の命令列の保存は必要ないが、前述の従来技術は、分岐予測失敗時の処理のために、非予測側の命令列の保存しており、このため、本来必要な後続の分岐命令の分岐先命令列の命令読み出しを遅らせ、命令のデコード及び演算の実行が遅れることになるという問題点を生じさせている。
【００４３】
本発明の目的は、前述した従来技術の問題点を解決し、条件分岐命令が連続する場合にも、後続の条件分岐命令の分岐先命令の読み出し処理を進めることを可能にし、命令のデコード及び演算の実行が遅れることを防止することのできるデータ処理装置を提供することにある。
【００４４】
【課題を解決するための手段】
本発明によれば前記目的は、条件分岐命令のデコード時に非予測側の命令の命令アドレスを退避し、ストリームが全て使用状態で条件分岐命令をデコードした場合、当該条件分岐命令がｔａｋｅｎ  の予測であればｎｏｔ−ｔａｋｅｎ  側のストリームを開放し、当該条件分岐命令がｎｏｔ−ｔａｋｅｎ  の予測であればｔａｋｅｎ  側のストリームを開放し、開放したストリームを後続の条件分岐命令の分岐先命令読み出しのためのストリームとして確保し、前記後続の条件分岐命令の分岐先命令の読み出し処理を進め、命令のデコード及び演算の実行を進めるようにすることにより達成される。
【００４５】
また、前記目的は、前記ストリームの開放を行った後に当該条件分岐命令のｆａｉｌ判定が決定された場合、すなわち、ｆａｉｌ判定後に処理するべき正しいストリームの命令が命令バッファに存在しない場合、前記ｆａｉｌの判定により開放されたストリームを前記ｆａｉｌ判定となった条件分岐命令の次に処理するべき命令の命令読み出しのためのストリームとして確保し、前記退避済の当該条件分岐命令の非予測側の命令の命令アドレスを使用して命令の読み出しを行うことにより正しいストリームの命令の処理を続行するようにすることにより達成される。
【００４６】
具体的には、前記目的は、複数の命令ストリームに対応してメモリより先読みした命令を格納する複数の命令バッファと、分岐命令の処理に関する予測を行う分岐予測ユニットと、前記分岐予測ユニットにより分岐命令が予測される毎にその分岐命令の分岐先命令の命令読み出しのためにストリームを確保し、ストリームに対応した命令バッファを割り当てて分岐命令の分岐先命令の命令読み出しを制御するストリーム制御回路と、前記分岐予測ユニットの予測結果と分岐命令の処理結果とにより前記分岐命令の分岐成立、分岐不成立及び分岐予測成功、分岐予測失敗を判定する分岐判定回路とを備えて構成されるパイプライン方式のデータ処理装置において、前記分岐予測ユニットによる予測結果に従って非予測側ストリームの命令アドレスを格納する前記複数の分岐命令に対応するデータ格納手段を備え、前記ストリーム制御回路は、分岐命令のデコード時、分岐予測がはずれた場合の命令の再読み出しのために当該分岐命令の非予測ストリームの命令アドレスを前記データ格納手段に退避し、当該分岐命令の非予測側ストリームを含むストリームが全て使用中ならば、当該分岐命令の非予測側ストリームを開放することにより、分岐予測ユニットが予測している更に後続の分岐命令の分岐先命令読み出しのためのストリームを確保することにより達成される。
【００４７】
また、前記目的は、前記ストリーム制御回路が、分岐命令のデコード時に未使用のストリームがある場合、前記分岐予測ユニットにより分岐命令の次に実行されると予測される命令の存在する予測側ストリームと実行されないと予測される非予測側ストリームとのいづれのストリームも開放せずに次の命令の処理を開始させることにより達成される。
【００４８】
さらに、前記目的は、前記複数の分岐命令に対応するデータ格納手段に格納される非予測側ストリームの命令アドレスが、前記分岐予測ユニットによる予測結果が分岐成立の場合、該分岐命令の後続命令の命令アドレスであり、予測結果が分岐不成立の場合、該分岐命令の分岐先命令の命令アドレスであり、前記ストリーム制御回路が、分岐判定回路により分岐予測失敗が通知されたとき、次に処理するべき正しいストリームの命令が前記命令バッファに存在しない場合、前記複数の分岐命令に対応したデータ格納手段に格納されている命令アドレスにより次に処理すべき正しいストリームの命令を前記メモリから読み出して正しいストリームの命令の処理を続行させることにより達成される。
【００４９】
すなわち、本発明によるデータ処理装置は、現在デコード中の命令の命令アドレスを保持するプログラムカウンタと、前記プログラムカウンタの内容に現在デコード中の命令の命令長（ＩＬＣ）を加算し後続命令の命令アドレスを求めるインクリメンタと、前記インクリメンタで求めた後続命令の命令アドレスと分岐命令の分岐先命令の命令アドレスのいづれかを選択する選択手段と、前記選択手段で選択された命令アドレスを退避する複数の命令アドレス退避手段とを備え、条件分岐命令のデコード時に当該条件分岐命令自身の命令アドレスをプログラムカウンタから読み出し、前記条件分岐命令自身の命令アドレスに前記条件分岐命令自身の命令長を加算し前記条件分岐命令の後続命令の命令アドレスを求め、前記条件分岐命令がｔａｋｅｎ  予測の場合、前記条件分岐命令の後続命令の命令アドレスを選択し、前記条件分岐命令がｎｏｔ−ｔａｋｅｎ  予測の場合、前記条件分岐命令の分岐先命令の命令アドレスを選択し、前記選択された命令アドレスを前記命令アドレス退避手段に退避し、前記条件分岐命令のデコード時にストリームが全て使用状態であるとき、前記条件分岐命令がｔａｋｅｎ  予測ならばｎｏｔ−ｔａｋｅｎ  側のストリームを開放し、前記条件分岐命令がｎｏｔ−ｔａｋｅｎ  予測ならばｔａｋｅｎ  側のストリームを開放し、前記開放したストリームを後続の条件分岐命令の分岐先命令読み出しのためのストリームとして確保し、前記後続の条件分岐命令の分岐先命令の読み出し処理を進めることを特徴とする。
【００５０】
また、本発明によるデータ処理装置は、前記複数の命令アドレス退避手段の内のいづれかを選択する第１の選択手段と、前記第１選択手段で選択された命令アドレスを含むいくつかの命令アドレスの中から命令用キャッシュを検索するための命令アドレスを選択する第２選択手段とを備え、前記ストリームの開放を行った後にｆａｉｌ判定が決定しされ、ｆａｉｌ判定後に処理するべき正しいストリームの命令が命令バッファに存在しないとき、前記ｆａｉｌ判定により開放されたストリームを前記ｆａｉｌ判定となった条件分岐命令の次に処理するべき命令の命令読み出しのためのストリームとして確保し、前記複数の命令アドレス退避手段の中から次に処理するべき命令の命令アドレス、すなわち、前記ｆａｉｌ判定となった条件分岐命令の非予測側の命令の命令アドレスを前記第１の選択手段で選択し、前記第２の選択手段で第１の選択手段からの出力を選択し、前記第２の選択手段からの出力、すなわち、次に処理するべき命令の命令アドレスにより命令用キャッシュを検索し、前記命令用キャッシュから読み出した次に処理するべき命令の処理を続行することを特徴とする。
【００５１】
【発明の実施の形態】
以下、本発明によるデータ処理装置の一実施形態を図面により詳細に説明する。  図１は本発明の一実施形態によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【００５２】
図１において、７１０はプログラムカウンタ７００に保持されている現在デコード中の命令の命令アドレスと現在デコード中の命令の命令長（ＩＬＣ）とを加算して後続命令の命令アドレスを求めるインクリメンタ、９３０は前記インクリメンタ７１０の出力とアドレス加算器４７０の出力とのいづれかを選択する選択回路、９４０は前記選択回路９３０で選択された条件分岐命令の非予測側の命令の命令アドレスを退避する第１の非予測側命令アドレス退避レジスタ、同様に９５０は第２の非予測側命令アドレス退避レジスタ、９６０は第３の非予測側命令アドレス退避レジスタ、９７０は第４の非予測側命令アドレス退避レジスタ、９８０は前記非予測側命令アドレス退避レジスタ９４０〜９７０の内のいづれかを選択する選択回路、９９０は前記非予測側命令アドレス退避レジスタ９４０〜９７０及び前記選択回路９８０を制御する非予測側命令アドレス退避レジスタ制御回路である。そして、図１におけるその他の構成は図５の場合と同様である。
【００５３】
次に、前述のように構成される本発明の一実施形態によるデータ処理装置の条件分岐命令の処理動作を説明する。処理する複数の命令列群の例は、図９によりすでに従来技術で説明したものと同一のものとする。
【００５４】
図２は本発明の一実施形態によるデータ処理装置において、図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合、すなわち、予測成功ｔｒｕｅであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、条件分岐命令が連続する場合の動作を図１、図９、図２を参照して説明する。
【００５５】
図２に示すタイミングチャートは、図９に示す命令列において、分岐命令０２、分岐命令１２、分岐命令２２、分岐命令３２、分岐命令４２の全てがｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合、すなわち、予測成功ｔｒｕｅであった場合の動作を示している。
【００５６】
命令０１は、サイクル４でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル１０でＣＣ５０１を確定させる。分岐命令０２は、サイクル５でデコードされる。このサイクル５では、全てのストリームが使用中、すなわち、図２におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ、ｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。
【００５７】
分岐命令０２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるので、この場合ストリーム制御回路３５０は、分岐命令０２の非予測側ストリームを開放するように制御する。分岐命令０２は、ｔａｋｅｎ  と予測されているため、この場合、分岐命令０２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム０番がサイクル６で開放される。また、サイクル５では、分岐命令０２の命令アドレスがプログラムカウンタ７００から読み出され、分岐命令０２自身の命令長との加算がインクリメンタ７１０により行われ、分岐命令０２の次の命令である命令０３の命令アドレスが求められる。
【００５８】
サイクル６では、前記命令０３の命令アドレス、アドレス加算器４７０で求めた分岐命令０２の分岐先命令である命令１１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令０２はｔａｋｅｎ  と予測されているため、選択回路９３０はインクリメンタ７１０からの出力である命令０３の命令アドレスを選択する。この命令０３の命令アドレスは、サイクル７で第１の非予測側命令アドレス退避レジスタ９４０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令０３の命令アドレスを第１の非予測側命令アドレス退避レジスタ９４０にセットすると、次の条件分岐命令に備えて入力ポインタを第２の非予測命令アドレス退避レジスタ９５０に向ける。
【００５９】
また、分岐命令０２の分岐予測の結果がｔａｋｅｎ  であるため、命令１１を含む命令列の読み出しはサイクル１から開始される。ストリーム制御回路３５０は、サイクル１で未使用のストリームがあることを検出し、サイクル２で命令１１を含む命令列のためにストリーム１番を確保する。分岐予測ユニット９００は、サイクル２で命令１１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令１１は、サイクル３及びサイクル４で命令用キャッシュ９２０から検索され、サイクル５で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。そして、命令１１は、サイクル６でデコードされ、サイクル１２でＣＣ５０１を確定させる。
【００６０】
分岐命令１２はサイクル７でデコードされる。このサイクル７では、全てのストリームが使用中、すなわち、図２におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令１２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令１２の非予測側ストリームを開放するように制御を行う。分岐命令１２はｔａｋｅｎ  と予測されているため、この場合、分岐命令１２のｎｏｔ−ｔａｋｅｎ  側のストリームであるストリーム１番がサイクル８で開放される。
【００６１】
また、サイクル７で分岐命令１２の命令アドレスがプログラムカウンタ７００から読み出され分岐命令１２自身の命令長との加算がインクリメンタ７１０で行われ、分岐命令１２の次の命令である命令１３の命令アドレスが求められる。サイクル８で、前記命令１３の命令アドレス、アドレス加算器４７０で求めた分岐命令１２の分岐先命令である命令２１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は非予測側の命令の命令アドレスを選択する。この場合、分岐命令１２は、ｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令１３の命令アドレスを選択する。
【００６２】
前記命令１３の命令アドレスは、サイクル９に第２の非予測側命令アドレス退避レジスタ９５０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令１３の命令アドレスを第２の非予測側命令アドレス退避レジスタ９５０にセットすると、次の条件分岐命令に備えて入力ポインタを第３の非予測命令アドレス退避レジスタ９６０に向ける。
【００６３】
また、分岐命令１２の分岐予測の結果がｔａｋｅｎ  であるため、命令２１を含む命令列の読み出しはサイクル３から開始される。ストリーム制御回路３５０は、サイクル３で未使用のストリームがあることを検出し、サイクル４で命令２１を含む命令列のためにストリーム２番を確保する。分岐予測ユニット９００は、サイクル４で命令２１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令２１は、サイクル５及びサイクル６で命令用キャッシュ９２０から検索され、サイクル７で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令２１は、サイクル８でデコードされ、サイクル１４でＣＣ５０１を確定させる。
【００６４】
分岐命令２２は、サイクル９でデコードされる。このときサイクル９では全てのストリームが使用中、すなわち、図２におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令２２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令２２の非予測側ストリームを開放するように制御を行う。分岐命令２２は、ｔａｋｅｎ  と予測されているため、この場合、分岐命令２２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム２番がサイクル１０で開放される。
【００６５】
また、サイクル９で分岐命令２２の命令アドレスがプログラムカウンタ７００から読み出され分岐命令２２自身の命令長との加算がインクリメンタ７１０により行われ、分岐命令２２の次の命令である命令２３の命令アドレスが求められる。サイクル１０で、前記命令２３の命令アドレス、アドレス加算器４７０で求めた分岐命令２２の分岐先命令である命令３１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令２２がｔａｋｅｎ  の予測であるため、選択回路９３０は、インクリメンタ７１０からの出力である命令２３の命令アドレスを選択する。前記命令２３の命令アドレスは、サイクル１１で第３の非予測側命令アドレス退避レジスタ９６０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令２３の命令アドレスを第３の非予測側命令アドレス退避レジスタ９６０にセットすると次の条件分岐命令に備えて入力ポインタを第４の非予測命令アドレス退避レジスタ９７０に向ける。
【００６６】
また、分岐命令２２の分岐予測の結果はｔａｋｅｎ  の予測であるため、命令３１を含む命令列の読み出しはサイクル５から開始される。ストリーム制御回路３５０は、サイクル５で未使用のストリームがあるか否かを検出する。サイクル５ではｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態であるため、命令３１を含む命令列のためにストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路３５０は、サイクル６で再び未使用のストリームがあるか否かを検出する。サイクル６では、ストリーム０番が未使用状態となるため、ストリーム制御回路３５０は、サイクル７で命令３１を含む命令列のためにストリーム０番を確保する。分岐予測ユニット９００は、サイクル７で命令３１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令３１は、サイクル８及びサイクル９で命令用キャッシュ９２０から検索され、サイクル１０で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令３１はサイクル１１でデコードされ、サイクル１７でＣＣ５０１を確定させる。分岐命令３２はサイクル１２でデコードされる。以下、同様の処理を繰り返すことにより、命令３２、命令４１、命令４２が順次処理される。
【００６７】
図３は本発明の一実施形態によるデータ処理装置において、図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、２番目の分岐命令がｎｏｔ−ｔａｋｅｎ、すなわち、予測失敗ｆａｉｌであり、他の分岐命令がｔａｋｅｎ  、すなわち、予測成功ｔｒｕｅであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、この場合の動作を図１、図９、図３を参照して説明する。
【００６８】
図３に示すフローは、図９の命令列における分岐命令０２、分岐命令１２、分岐命令２２、分岐命令３２、分岐命令４２の全てがｔａｋｅｎ  と予測され、かつ、分岐命令０２がｔａｋｅｎ  、すなわち、予測成功ｔｒｕｅ、分岐命令１２がｎｏｔ−ｔａｋｅｎ、すなわち、予測失敗ｆａｉｌした場合の情報処理装置の動作を説明するパイプライン制御フローである。
【００６９】
命令０１はサイクル４でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル１０でＣＣ５０１を確定させる。分岐命令０２はサイクル５でデコードされる。このとき、サイクル５では、全てのストリームが使用中、すなわち、図３におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令０２のデコード時、ストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令０２の非予測側ストリームを開放するように制御を行う。
【００７０】
分岐命令０２はｔａｋｅｎ  と予測されているため、この場合、分岐命令０２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム０番がサイクル６で開放される。また、サイクル５で分岐命令０２の命令アドレスがプログラムカウンタ７００から読み出され、分岐命令０２自身の命令長との加算がインクリメンタ７１０により行われ、分岐命令０２の次の命令である命令０３の命令アドレスが求められる。
【００７１】
サイクル６では、前記命令０３の命令アドレス、アドレス加算器４７０で求めた分岐命令０２の分岐先命令である命令１１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令０２はｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令０３の命令アドレスを選択する。前記命令０３の命令アドレスは、サイクル７で第１の非予測側命令アドレス退避レジスタ９４０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令０３の命令アドレスを第１の非予測側命令アドレス退避レジスタ９４０にセットすると、次の条件分岐命令に備えて入力ポインタを第２の非予測命令アドレス退避レジスタ９５０に向ける。
【００７２】
また、分岐命令０２の分岐予測の結果はｔａｋｅｎ  であるため、命令１１を含む命令列の読み出しはサイクル１から開始される。ストリーム制御回路３５０は、サイクル１で未使用のストリームがあることを検出し、サイクル２で命令１１を含む命令列のためにストリーム１番を確保する。分岐予測ユニット９００は、サイクル２で命令１１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令１１は、サイクル３及びサイクル４で命令用キャッシュ９２０から検索され、サイクル５で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令１１はサイクル６でデコードされ、サイクル１２でＣＣ５０１を確定させる。
【００７３】
分岐命令１２はサイクル７でデコードされる。このとき、サイクル７では、全てのストリームが使用中、すなわち、図３におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令１２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令１２の非予測側ストリームを開放するように制御を行う。分岐命令１２はｔａｋｅｎ  と予測されているため、この場合、分岐命令１２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム１番がサイクル８で開放される。
【００７４】
また、サイクル７で分岐命令１２の命令アドレスがプログラムカウンタ７００から読み出され分岐命令１２自身の命令長との加算がインクリメンタ７１０で行われ、分岐命令１２の次の命令である命令１３の命令アドレスが求められる。サイクル８で、前記命令１３の命令アドレス、アドレス加算器４７０で求めた分岐命令１２の分岐先命令である命令２１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は非予測側の命令の命令アドレスを選択する。この場合、分岐命令１２はｔａｋｅｎ  と予測されているため、選択回路９３０はインクリメンタ７１０からの出力である命令１３の命令アドレスを選択する。
【００７５】
前記命令１３の命令アドレスは、サイクル９で第２の非予測側命令アドレス退避レジスタ９５０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令１３の命令アドレスを第２の非予測側命令アドレス退避レジスタ９５０にセットすると、次の条件分岐命令に備えて入力ポインタを第３の非予測命令アドレス退避レジスタ９６０に向ける。
【００７６】
また、分岐命令１２の分岐予測の結果はｔａｋｅｎ  の予測であるため、命令２１を含む命令列の読み出しはサイクル３から開始される。ストリーム制御回路３５０は、サイクル３で未使用のストリームがあることを検出し、サイクル４で命令２１を含む命令列のためにストリーム２番を確保する。分岐予測ユニット９００は、サイクル４で命令２１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令２１は、サイクル５及びサイクル６で命令用キャッシュ９２０から検索され、サイクル７で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令２１はサイクル８でデコードされる。
【００７７】
分岐命令２２はサイクル９でデコードされる。このサイクル９では、全てのストリームが使用中、すなわち、図３におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令２２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令２２の非予測側ストリームを開放するように制御を行う。分岐命令２２はｔａｋｅｎ  と予測されているため、この場合、分岐命令２２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム２番がサイクル１０で開放される。
【００７８】
また、サイクル９で分岐命令２２の命令アドレスがプログラムカウンタ７００から読み出され、分岐命令２２自身の命令長との加算がインクリメンタ７１０により行われ、分岐命令２２の次の命令である命令２３の命令アドレスが求められる。サイクル１０で、前記命令２３の命令アドレス、アドレス加算器４７０で求めた分岐命令２２の分岐先命令である命令３１の命令アドレスの一方が選択回路９３０により選択される。選択回路９３０は非予測側の命令の命令アドレスを選択する。この場合、分岐命令２２はｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令２３の命令アドレスを選択する。前記命令２３の命令アドレスはサイクル１１で第３の非予測側命令アドレス退避レジスタ９６０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令２３の命令アドレスを第３の非予測側命令アドレス退避レジスタ９６０にセットすると、次の条件分岐命令に備えて入力ポインタを第４の非予測命令アドレス退避レジスタ９７０に向ける。
【００７９】
また、分岐命令２２の分岐予測の結果はｔａｋｅｎ  であるため、命令３１を含む命令列の読み出しはサイクル５から開始される。ストリーム制御回路３５０は、サイクル５で未使用のストリームがあるか否かを検出する。サイクル５ではｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態であるため、命令３１を含む命令列のためのストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路３５０は、サイクル６で再び未使用のストリームがあるか否かを検出する。サイクル６では、ストリーム０番が未使用状態となるため、ストリーム制御回路３５０は、サイクル７で命令３１を含む命令列のためにストリーム０番を確保する。分岐予測ユニット９００は、サイクル７で命令３１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令３１は、サイクル８及びサイクル９で命令用キャッシュ９２０から検索され、サイクル１０で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令３１はサイクル１１でデコードされる。分岐命令３２はサイクル１２でデコードされる。以下、同様に、命令３２、命令４１、命令４２が順次処理される。
【００８０】
ところが、図３に示す例では、サイクル１２で確定した命令１１のＣＣ５０１と分岐命令１２の分岐条件信号３７１とを分岐判定回路６００が条件比較した結果、サイクル１３で分岐命令１２のｎｏｔ−ｔａｋｅｎ  判定信号６０２及びｆａｉｌ判定信号６０４が決定される。この命令１２のｆａｉｌ判定信号６０４により、現在処理中の命令の実行を中止し正しいストリームの命令の処理を始めなければならない。
【００８１】
分岐命令１２がｎｏｔ−ｔａｋｅｎ  であるため、次に処理しなければならない命令は命令１３である。命令１３を含む命令列はサイクル２でストリーム１番が割り当てられたが、このストリーム１番はサイクル８で開放され、サイクル９で命令４１を含む命令列に割り当てられている。従って、ＩＢＲ２００に命令１３は残っていない。一方、分岐命令１２の非予測側命令、すなわち、命令１３の命令アドレスはサイクル９で第２の非予測側命令アドレス退避レジスタ９５０に保持されている。
【００８２】
ストリーム制御回路３５０は、条件分岐命令の非予測側命令列が命令バッファに存在するか否かを表わすレジスタを条件分岐命令毎に持っており、条件分岐命令の分岐判定が決定するまで保持している。条件分岐命令のｆａｉｌ判定が決定すると、ストリーム制御回路３５０は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照する。ストリーム制御回路３５０は、非予測側命令列が命令バッファに存在する場合、当該命令バッファから次に処理すべき命令を即座に読み出し、ＩＲ３６０にセットしてその後の処理を続行させる。また、ストリーム制御回路３５０は、非予測側命令列が命令バッファに存在しない場合、新たにストリームを確保し、非予測側命令アドレス退避レジスタに保持されている次に処理すべき命令の命令アドレスにより命令の再読み出しを行わせ、命令用キャッシュ９２０を検索してＩＲ３６０にセットし、その後の処理を続行させる。
【００８３】
この場合、命令１３は、ＩＢＲ２００に残っていないため、第２の非予測側命令アドレス退避レジスタ９５０に保持されている命令１３の命令アドレスを使用して再読み出しが行われる。すなわち、サイクル１３のｆａｉｌ判定信号６０４により、ストリーム制御回路３５０は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照し、非予測側命令列が命令バッファに存在しないためサイクル１４から命令１３の再読み出しを開始し、サイクル１５でストリーム１番を確保し、さらに、サイクル１５で第２の非予測側命令アドレス退避レジスタ９５０に保持されている命令１３の命令アドレスを選択回路９８０により選択させる。この命令１３の命令アドレスは、選択回路９１０を経由して命令用キャッシュ９２０に伝達され、サイクル１６及びサイクル１７で命令用キャッシュ９２０を参照し、サイクル１８で命令用キャッシュ９２０から命令１３をロードしてＩＲ３６０にセットする。命令１３はサイクル１９でデコードされ、サイクル２５でＣＣ５０１を確定させる。以下、命令１４、命令１５が順次処理される。
【００８４】
図４は本発明の一実施形態によるデータ処理装置において、図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、５番目の分岐命令がｎｏｔ−ｔａｋｅｎ、すなわち、予測失敗ｆａｉｌであり、他の分岐命令がｔａｋｅｎ  、すなわち、予測成功ｔｒｕｅであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、この場合の動作を図１、図９、図４を参照して説明する。
【００８５】
図４に示すタイミングチャートは、図９の命令列における分岐命令０２、分岐命令１２、分岐命令２２、分岐命令３２、分岐命令４２の全てがｔａｋｅｎ  と予測され、かつ、分岐命令０２、分岐命令１２、分岐命令２２、分岐命令３２がｔａｋｅｎ  、すなわち、予測成功ｔｒｕｅ、分岐命令４２がｎｏｔ−ｔａｋｅｎ  の場合、すなわち、予測失敗ｆａｉｌの場合の動作を示しいる。
【００８６】
命令０１はサイクル４でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル１０でＣＣ５０１を確定させる。分岐命令０２は、サイクル５でデコードされる。このサイクル５では全てのストリームが使用中、すなわち、図４におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令０２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令０２の非予測側ストリームを開放するように制御を行う。
【００８７】
分岐命令０２はｔａｋｅｎ  と予測されているため、この場合、分岐命令０２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム０番がサイクル６で開放される。また、サイクル５では、分岐命令０２の命令アドレスがプログラムカウンタ７００から読み出され、分岐命令０２自身の命令長との加算がインクリメンタ７１０により行われ、分岐命令０２の次の命令である命令０３の命令アドレスが求められる。
【００８８】
サイクル６では、前記命令０３の命令アドレス、アドレス加算器４７０で求めた分岐命令０２の分岐先命令である命令１１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令０２はｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令０３の命令アドレスを選択する。前記命令０３の命令アドレスは、サイクル７で第１の非予測側命令アドレス退避レジスタ９４０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令０３の命令アドレスを第１の非予測側命令アドレス退避レジスタ９４０にセットすると、次の条件分岐命令に備えて入力ポインタを第２の非予測命令アドレス退避レジスタ９５０に向ける。
【００８９】
また、分岐命令０２の分岐予測の結果がｔａｋｅｎ  であるため、命令１１を含む命令列の読み出しはサイクル１から開始される。ストリーム制御回路３５０は、サイクル１で未使用のストリームがあることを検出し、サイクル２で命令１１を含む命令列のためにストリーム１番を確保する。分岐予測ユニット９００は、サイクル２で命令１１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令１１は、サイクル３及びサイクル４で命令用キャッシュ９２０から検索され、サイクル５で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。そして、命令１１はサイクル６でデコードされ、サイクル１２でＣＣ５０１を確定させる。
【００９０】
分岐命令１２はサイクル７でデコードされる。このサイクル７では、全てのストリームが使用中、すなわち、図４におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ、ｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令１２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令１２の非予測側ストリームを開放するように制御を行う。分岐命令１２はｔａｋｅｎ  と予測されているため、この場合、分岐命令１２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム１番がサイクル８で開放される。
【００９１】
また、サイクル７で分岐命令１２の命令アドレスがプログラムカウンタ７００から読み出され分岐命令１２自身の命令長との加算がインクリメンタ７１０で行われ、分岐命令１２の次の命令である命令１３の命令アドレスが求められる。サイクル８で、前記命令１３の命令アドレス、アドレス加算器４７０で求めた分岐命令１２の分岐先命令である命令２１の命令アドレスの一方が選択回路９３０で選択される。選択回路９３０は非予測側の命令の命令アドレスを選択する。この場合、分岐命令１２はｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令１３の命令アドレスを選択する。
【００９２】
前記命令１３の命令アドレスは、サイクル９で第２の非予測側命令アドレス退避レジスタ９５０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令１３の命令アドレスを第２の非予測側命令アドレス退避レジスタ９５０にセットすると、次の条件分岐命令に備えて入力ポインタを第３の非予測命令アドレス退避レジスタ９６０に向ける。
【００９３】
また、分岐命令１２の分岐予測の結果はｔａｋｅｎ  の予測であるため、命令２１を含む命令列の読み出しはサイクル３から開始される。ストリーム制御回路３５０は、サイクル３で未使用のストリームがあることを検出し、サイクル４で命令２１を含む命令列のためにストリーム２番を確保する。分岐予測ユニット９００は、サイクル４で命令２１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令２１は、サイクル５及びサイクル６で命令用キャッシュ９２０から検索され、サイクル７で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令２１はサイクル８でデコードされ、サイクル１４でＣＣ５０１を確定させる。
【００９４】
分岐命令２２はサイクル９でデコードされる。このサイクル９では、全てのストリームが使用中、すなわち、図４におけるｓｔｒｅａｍ＃０  ｖａｌｉｄ及びｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態である。分岐命令２２のデコード時にストリームが全て使用中（ｓｔｒｅａｍ  ｂｕｓｙ）であるため、ストリーム制御回路３５０は、分岐命令２２の非予測側ストリームを開放するように制御を行う。分岐命令２２はｔａｋｅｎ  と予測されているため、この場合、分岐命令２２のｎｏｔ−ｔａｋｅｎ  側ストリームであるストリーム２番がサイクル１０で開放される。
【００９５】
また、サイクル９で分岐命令２２の命令アドレスがプログラムカウンタ７００から読み出され、分岐命令２２自身の命令長との加算をインクリメンタ７１０により行われ、分岐命令２２の次の命令である命令２３の命令アドレスが求められる。サイクル１０で、前記命令２３の命令アドレス、アドレス加算器４７０で求めた分岐命令２２の分岐先命令である命令３１の命令アドレスの一方が選択回路９３０により選択される。選択回路９３０は非予測側の命令の命令アドレスを選択する。この場合、分岐命令２２はｔａｋｅｎ  と予測されているため、選択回路９３０は、インクリメンタ７１０からの出力である命令２３の命令アドレスを選択する。前記命令２３の命令アドレスはサイクル１１で第３の非予測側命令アドレス退避レジスタ９６０にセットされる。非予測側命令アドレス退避レジスタ制御回路９９０は、前記命令２３の命令アドレスを第３の非予測側命令アドレス退避レジスタ９６０にセットすると、次の条件分岐命令に備えて入力ポインタを第４の非予測命令アドレス退避レジスタ９７０に向ける。
【００９６】
また、分岐命令２２の分岐予測の結果はｔａｋｅｎ  であるため、命令３１を含む命令列の読み出しはサイクル５から開始される。ストリーム制御回路３５０は、サイクル５で未使用のストリームがあるか否かを検出する。サイクル５ではｓｔｒｅａｍ＃０  ｖａｌｉｄ及びｓｔｒｅａｍ＃１  ｖａｌｉｄ及びｓｔｒｅａｍ＃２  ｖａｌｉｄの全てがＯＮ状態であるため、命令３１を含む命令列のためにストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路３５０は、サイクル６で再び未使用のストリームがあるか否かを検出する。サイクル６では、ストリーム０番が未使用状態となるため、ストリーム制御回路３５０は、サイクル７で命令３１を含む命令列のためにストリーム０番を確保する。分岐予測ユニット９００は、サイクル７で命令３１の命令アドレスを予測し選択回路９１０を経由し命令用キャッシュ９２０に伝達する。命令３１は、サイクル８及びサイクル９で命令用キャッシュ９２０から検索され、サイクル１０で命令用キャッシュ９２０からロードされてＩＲ３６０にセットされる。命令３１はサイクル１１でデコードされ、サイクル１７でＣＣ５０１を確定させる。分岐命令３２はサイクル１２でデコードされる。以下、同様に、命令３２、命令４１、命令４２と順次処理される。
【００９７】
ところが、図４に示す例では、サイクル１９で確定した命令４１のＣＣ５０１と分岐命令４２の分岐条件信号３７１とを分岐判定回路６００が条件比較した結果、サイクル２０で分岐命令４２のｎｏｔ−ｔａｋｅｎ  判定信号６０２及びｆａｉｌ判定信号６０４が決定される。この命令４２のｆａｉｌ判定信号６０４により、現在処理中の命令の実行を中止し正しいストリームの命令の処理を始めなければならない。
【００９８】
分岐命令４２がｎｏｔ−ｔａｋｅｎ  であるため、次に処理しなければならない命令は命令４３である。命令４３を含む命令列はサイクル９でストリーム１番が割り当てられたが、このストリーム１番はサイクル９以降も開放されていないため、ＩＢＲ２００には命令４３が残っている。
【００９９】
ストリーム制御回路３５０は、条件分岐命令の非予測側命令列が命令バッファに存在するか否かを表わすレジスタを条件分岐命令毎に持っており、条件分岐命令の分岐判定が決定するまで保持している。条件分岐命令のｆａｉｌ判定が決定すると、ストリーム制御回路３５０は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照する。ストリーム制御回路３５０は、非予測側命令列が命令バッファに存在する場合、当該命令バッファから次に処理すべき命令を即座に読み出し、ＩＲ３６０にセットしてその後の処理を続行させる。また、ストリーム制御回路３５０は、非予測側命令列が命令バッファに存在しない場合、新たにストリームを確保し、非予測側命令アドレス退避レジスタに保持されている次に処理すべき命令の命令アドレスにより命令の再読み出しを行わせ、命令用キャッシュ９２０を検索してＩＲ３６０にセットし、その後の処理を続行させる。
【０１００】
この場合、命令４３は、ＩＢＲ２００に残っているため、ＩＢＲ２００から次に処理すべき命令をＩＲ３６０にセットしてその後の処理を続行する。すなわち、サイクル２０のｆａｉｌ判定信号６０４により、ストリーム制御回路３５０は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照し、非予測側命令列が命令バッファに存在することを知る。これにより、命令４３は、サイクル２１でデコードされ、サイクル２７でＣＣ５０１を確定させる。以下、命令４４、命令４５と順次処理される。
【０１０１】
前述したように、本発明の一実施形態によれば、ストリームが全て使用済状態である場合に、さらに条件分岐命令が発生したときでも、分岐予測に従ってストリームの確保、開放を繰り返しながら条件分岐命令の投機実行を行って命令の処理を進めることができるため、命令のデコード及び演算の実行が遅れることを防止することができる。また、分岐予測がはずれた場合にも、非予測側命令が命令バッファに存在すれば、即座に正しいストリームの命令の処理を開始することができ、非予測側命令が命令バッファに存在しない場合、予め退避しておいた非予測側命令の命令アドレスにより命令の再読み出しを実行した後、正しいストリームの命令の処理を開始することができる。
【０１０２】
以上、本発明を実施形態に基づいて説明したが、本発明は、前述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１０３】
【発明の効果】
以上説明したように本発明によれば、複数の条件分岐命令がパイプラインに投入された場合にも、分岐予測に従ってストリームの確保、開放を繰り返しながら条件分岐命令の投機実行を行って命令の処理を進めることができるため、命令のデコード及び演算の実行が遅れることを防止して、命令列の効率的な処理を行うことができる。
【０１０４】
また、本発明によれば、分岐予測がはずれた場合も、非予測側命令が命令バッファに存在すれば即座に正しいストリームの命令の処理を開始することができ、非予測側命令が命令バッファに存在しない場合にも、予め退避しておいた非予測側命令の命令アドレスにより命令の再読み出しを実行した後、正しいストリームの命令の処理を開始することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【図２】図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図３】図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、２番目の分岐命令がｎｏｔ−ｔａｋｅｎ、他の分岐命令がｔａｋｅｎ  であった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図４】図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、５番目の分岐命令がｎｏｔ−ｔａｋｅｎ、他の分岐命令がｔａｋｅｎｅであった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図５】従来技術によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【図６】条件分岐命令を含む命令群の流れの一例を示す図である。
【図７】図６に示す命令列において分岐命令の予測に成功した場合の従来技術の動作を説明するタイミングチャートである。
【図８】図６に示す命令列において分岐命令の予測に失敗した場合の従来技術の動作を説明するタイミングチャートである。
【図９】複数の条件分岐命令を含む命令列群の流れの一例を示す図である。
【図１０】図９に示す命令列に含まれる全ての分岐命令がｔａｋｅｎと予測され、かつ、その命令がｔａｋｅｎであった場合の従来技術の動作を説明するパイプライン制御フローのタイミングチャートである。
【符号の説明】
１００、２００、３００  命令バッファ（ＩＢＲ）
１１０、２１０、３１０  ＩＢＲポインタ（ＩＢＲＯＰ）
１２０、２２０、３２０  アライナ
３３０、８９０  ストリーム選択回路
３４０  バイパス選択回路
３５０  ストリーム制御回路
３６０  命令レジスタ（ＩＲ）
３７０  命令デコーダ
３８０  汎用レジスタ（ＩＧＲ）
４００、４５０  指標アドレスレジスタ
４１０、４６０  基底アドレスレジスタ
４２０、４４０  変位アドレスレジスタ
４３０、４７０  アドレス加算器
４８０  汎用レジスタ（ＧＧＲ）
４９０  オペランド用キャッシュ
５００  演算器
６００  分岐判定回路
７００  プログラムカウンタ
７１０、８１０、８４０、８７０  インクリメンタ
８００、８３０、８６０  命令アドレスフェッチレジスタ（ＩＦ）
８１０  インクリメンタ
８２０、８５０、８８０、９１０、９３０、９８０  選択回路
９００  分岐予測ユニット
９２０  命令用キャッシュ
９４０  第１の非予測側命令アドレス退避レジスタ
９５０  第２の非予測側命令アドレス退避レジスタ
９６０  第３の非予測側命令アドレス退避レジスタ
９７０  第４の非予測側命令アドレス退避レジスタ
９９０  非予測側命令アドレス退避レジスタ制御回路
【図１】
0003558481.tif 000002
【図２】
0003558481.tif 000003
【図３】
0003558481.tif 000004
【図４】
0003558481.tif 000005
【図５】
0003558481.tif 000006
【図６】
0003558481.tif 000007
【図７】
0003558481.tif 000008
【図８】
0003558481.tif 000009
【図９】
0003558481.tif 000010
【図１０】
0003558481.tif 000011