(57)【要約】【課題】ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことのできるデータプロセッサを提供する【解決手段】データプロセッサ（１）の命令バッファ（２６）はフェッチされた命令を蓄積するメモリ部(４０)を制御するバッファ制御部(４４)を有し、バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分が命令バッファの記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列を命令バッファに保持する。保持した命令列の命令実行が繰り返される間は当該命令列の命令を命令バッファから命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。【選択図】図１
2010066892.tif 000002
【特許請求の範囲】
【請求項１】
命令をフェッチする命令フェッチ部と、命令フェッチ部によりフェッチされた命令をデコードする命令デコーダと、命令デコーダによるデコード結果に基づいて命令を実行する実行部とを有するデータプロセッサであって、
前記命令フェッチ部は、命令バッファと分岐予測部を有し、
前記命令バッファ部は外部からフェッチされた命令を蓄積するメモリ部と前記メモリ部を制御するバッファ制御部とを有し、
前記バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持し、保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する、データプロセッサ。
【請求項２】
前記バッファ制御部は、前記メモリ部に対するＦＩＦＯ形態のリードポインタ及びライトポインタの制御を行うとともに、メモリ部に保持する前記命令列をロックスタートポインタ及びロックエンドポインタで特定し、保持した命令列の命令実行が繰り返される間はロックスタートポインタ及びロックエンドポインタが指定される範囲でリードポインタを変化させる、請求項１記載のデータプロセッサ。
【請求項３】
前記バッファ制御部は、前記条件分岐命令の命令アドレスと、当該条件分岐命令及びそれによる分岐先命令を夫々保有するメモリ部のバッファ内アドレスとを登録する分岐管理テーブルを用いてポインタ制御を行う、請求項２記載のデータプロセッサ。
【請求項４】
前記バッファ制御部は、メモリ部にフェッチした命令に条件分岐命令が含まれるとき、当該条件分岐命令の命令列に関する情報を前記分岐管理テーブルに登録する、請求項３記載のデータプロセッサ。
【請求項５】
前記条件分岐命令はＰＣ相対条件分岐命令である、請求項１乃至４の何れか１項記載のデータプロセッサ。
【請求項６】
前記命令フェッチ部は条件分岐命令の実行履歴に基づいて分岐予測を行う分岐予測部を有し、
前記分岐予測部は前記条件分岐命令の命令アドレスに基づいて分岐予測を行なってその予測結果を出力し、
前記バッファ制御部は、前記予測結果に基づいて条件分岐命令の条件成立が示唆されているか否かを判別する、請求項１乃至５の何れか１項記載のデータプロセッサ。
【請求項７】
前記バッファ制御部は、分岐方向が命令アドレス配置に対して逆方向で前記条件分岐命令による分岐元から分岐先までの命令列の繰り返し実行回数を計数する分岐履歴カウンタを有し、前記分岐履歴カウンタの計数値が所定値を超えることによってショートループの形成が示唆されていると判別する、請求項１乃至５の何れか１項記載のデータプロセッサ。
【請求項８】
前記バッファ制御部は、前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタを有し、単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定し、多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定する、請求項２記載のデータプロセッサ。
【請求項９】
前記バッファ制御部は、メモリ部上における分岐元に対するリードポインタのアドレス差である第１データ、メモリ部上におけるリードポインタに対する分岐先のアドレス差である第２データ、前記第１データと第２データとの和である第３データをループ毎に取得し、第１データ及び第２データが夫々正の整数値であることによってリードポインタが自ループ内であるかを判別し、前記ループ毎における第１データの大小に基づいて多重ループの分岐元の包含関係を判別し、前記ループ毎における第２データの大小に基づいて多重ループの分岐先の包含関係を判別し、ループ毎の第３データの大小に基づいて多重ループにおけるループの大小関係を判別する、請求項８記載のデータプロセッサ。
【請求項１０】
命令キャッシュメモリを更に有し、
前記命令フェッチ部は前記命令キャッシュメモリから必要な命令をフェッチする、請求項１記載のデータプロセッサ。
【請求項１１】
請求項１０記載のデータプロセッサと、前記データプロセッサに接続された外部メモリとを有し、
前記命令キャッシュメモリは前記外部メモリが保有する命令の一部を保有して連想メモリ動作を行なう、データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令を実行するデータプロセッサ及びデータ処理システムに関し、例えば条件分岐命令によるショート・ループが形成される半導体集積回路化されたマイクロコンピュータの低消費電力に適用して有効な技術に関する。
【背景技術】
【０００２】
ＣＰＵや複数の周辺モジュールが一つのＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）上に搭載される場合、ＣＰＵは周辺モジュールの処理待ちなどで用いられるスピンループと呼ばれる小さいループプログラムを用いた待ち合わせ処理や、繰り返し処理を行うｆｏｒループを用いることがある。複数のＣＰＵが搭載されるマルチコアでも同期制御の際、自分の処理が終了したタスクは、他のタスクが全て終了するまで、スピンループを用いたソフトウェアのインプリが行われることがある。このようなスピンループやループ内の命令数が少ないｆｏｒループ（これらのループを単にショート・ループとも記す）は、ループ処理中にループ内の命令に対し繰り返し命令キャッシュアクセスを行うこととループの分岐処理を行うため、一般に電力消費が大きい。
【０００３】
ＣＰＵはキャッシュメモリあるいはＲＯＭに保持される命令を、命令フェッチ部に蓄え、デコード部に供給する。命令フェッチ部は、命令キューとそれを制御する命令フェッチ制御部とから構成される。命令フェッチ部の低電力化として命令キューに命令を保持し、キャッシュメモリへの命令アクセスを抑止する命令キューのロックが知られている。
【０００４】
ループプログラムにおける命令キューをロックする場所を定めるために、特許文献１の実施例１に示すように命令キューを制御する命令をプログラムに埋め込む方法がある。命令キュー制御用のレジスタを用意し、制御命令にてレジスタに値を設定することで、命令キューの制御をソフトウェアで指定できる。命令キュー制御を行わないソフトウェアに対し、命令キュー制御命令を追加する必要がある。特許文献１の実施例３には、ＤＳＰで用いられるリピート命令とリピート用のレジスタ（スタート、エンド、カウンタ）の例が示されるが、実施例１と同様にプログラム中に命令キュー制御用のリピート命令のコードが埋め込まれる。
【０００５】
命令キュー制御用のコードの追加を加えずに、ハードウェアでループプログラムの箇所を自動判別し、命令キューをロックする手段として、特許文献２に示すように分岐予測の一つであるブランチターゲットキャッシュを使用する方法がある。ブランチターゲットキャッシュとは、分岐命令のアドレスや分岐先のアドレス、過去の分岐の履歴情報を保持し、分岐を予測するための手段である。分岐予測を用いる理由について説明する。命令キューをロックすると、命令キューの使用が制限されるため、命令キューの本来の先読みの効果に影響があるので、ループが行われる可能性を上げたい。ブランチターゲットキャッシュを用いると分岐先のアドレスと、分岐予測によって分岐を行うかどうかがわかるため、ループ箇所並びにループを行うかどうかを判別することができる。そこで、分岐予測と組み合わせて命令キューのロックを行っている。特許文献２では、複数の命令を含む一つ、あるいは二つの一定の命令ラインに、ブランチターゲットキャッシュの情報を用いて分岐命令と分岐先命令が含まれるときに、命令キューをロックする方法が提供される。
【０００６】
【特許文献１】日本国再公表ＷＯ９８−３６３５１号公報
【特許文献２】日本国公開特許平８−７７０００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ループプログラムにおけるＣＰＵの低電力化を行うにあたり、プログラムの改変を伴うかどうかで２つの公知例を挙げた。特許文献１はプログラムの改変を伴うが、特許文献２はプログラムの改変を伴わない。ユーザの利便を考えると、プログラムの改変を行なわない方が既存のソフトウェアが使用できる点で望ましい。本発明者は、プログラムの改変を伴わず、小規模のハードウェア追加でループプログラムを自動判別し、低電力化を行う機構について検討した。特許文献２では、ブランチターゲットキャッシュを用いて、ループプログラムの自動判別を行う。ブランチターゲットキャッシュは、ハイエンドＣＰＵで用いられる分岐予測手段であり、分岐先のアドレスを保持するため、メモリ容量が大きい。
【０００８】
組み込み機器向けマイクロプロセッサでは、面積を削減するために分岐予測手段として分岐の履歴情報のみを保持する分岐履歴テーブルを利用する。一般的に、分岐履歴テーブルは分岐先のアドレスを保持しない点と分岐の種類が限定される点でブランチターゲットキャッシュと異なる。分岐の種類として、分岐命令からの相対アドレスで分岐先アドレスを定めるＰＣ相対アドレスの分岐命令と、レジスタを分岐先アドレスとするレジスタ間接分岐命令がある。ブランチターゲットキャッシュはＰＣ相対アドレス分岐命令とレジスタ間接分岐命令のいずれも対象とする。分岐履歴テーブルは一般にＰＣ相対アドレス分岐命令のみが対象にされ、小面積の分岐予測機構に採用される。
【０００９】
特許文献２では、命令キューロック対象の命令列として、複数の命令を含む一つ、あるいは二つの所定数の命令ラインでの順方向（アドレス増加）と逆方向（アドレス減少）の単一分岐が示される。命令キューロック対象は、命令キューに入る範囲でできるだけ多くの命令が望ましく、ループの中にループがあるなどの多重分岐が存在する場合もあり、それについては特許文献２では考慮されていない。
【００１０】
本発明の目的は、ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことのできるデータプロセッサを提供することにある。
【００１１】
本発明の別の目的は、多重分岐に対応して命令バッファのロック制御による低電力化を行うことのできるデータプロセッサを提供することにある。
【００１２】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１４】
すなわち、データプロセッサの命令バッファは、フェッチされた命令を蓄積するメモリ部の制御を行うバッファ制御部を有し、バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持する。保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。上記によれば、バッファ制御部は、条件分岐命令によるループプログラムを自動判別でき、メモリ部の記憶容量に納まる範囲で条件分岐命令による分岐元から分岐先までのループの命令を保持して当該ループの処理に利用するから、命令バッファに対するサイズ可変のロック制御を行うことができ、低電力化の実現に資することができる。
【００１５】
前記バッファ制御部に、例えば前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタを採用する。単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応してメモリ部上の当該ループの命令を保持する。多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して命令バッファ上の当該ループの命令を保持し、分岐カウンタを用いて多重ループを管理する。これにより、多重分岐に対応して命令バッファのロック制御が可能になる。
【発明の効果】
【００１６】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１７】
すなわち、本発明によれば、ループプログラムを自動判別し、命令バッファに対するサイズ可変のロック制御による低電力化を行うことができる。
【００１８】
また、本発明によれば、多重分岐に対応して命令バッファのロック制御による低電力化を行うことができる。
【発明を実施するための最良の形態】
【００１９】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２０】
〔１〕本発明に係るデータプロセッサ（１）は命令をフェッチする命令フェッチ部(２０)と、命令フェッチ部によりフェッチされた命令をデコードする命令デコーダ(２１)と、命令デコーダによるデコード結果に基づいて命令を実行する実行部(２２)とを有する。前記命令フェッチ部は、命令バッファ（２６）及び分岐予測部（２５）を有する。前記命令バッファは、外部からフェッチされた命令を蓄積するメモリ部 (４０)と前記メモリ部を制御するバッファ制御部（４４）とを有する。前記バッファ制御部は、フェッチした条件分岐命令の実行履歴が条件成立を示唆するとき、フェッチした条件分岐命令の分岐方向が命令実行順とは逆方向であって、前記条件分岐命令による分岐元から分岐先までの命令アドレスの差分がメモリ部の記憶容量に納まる範囲であるとき、前記条件分岐命令による分岐元から分岐先までの命令列をメモリ部に保持し、保持した命令列の命令実行が繰り返される間は当該命令列の命令をメモリ部から命令デコーダに供給し、当該命令列の命令実行から抜けるとき当該命令列の保持を解除する。
【００２１】
〔２〕項１のデータプロセッサにおいて、前記バッファ制御部は、前記メモリ部に対するＦＩＦＯ形態のリードポインタ（ｒｅａｄ＿ｐｔｒ）及びライトポインタ（ｗｒｉｅ＿ｐｔｒ）の制御を行うとともに、メモリ部に保持する前記命令列をロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）で特定し、保持した命令列の命令実行が繰り返される間はロックスタートポインタ及びロックエンドポインタが指定される範囲でリードポインタを変化させる。
【００２２】
〔３〕項２のデータプロセッサにおいて、前記バッファ制御部は、前記条件分岐命令の命令アドレス（ＢＡＤＲ）と、当該条件分岐命令及びそれによる分岐先命令を夫々保有するメモリ部のバッファ内アドレス（ＱＢＡＤＲ，ＱＴＡＤＲ）とを登録する分岐管理テーブルを用いてポインタ制御を行う。
【００２３】
〔４〕項３のデータプロセッサにおいて、前記バッファ制御部は、メモリ部にフェッチした命令に条件分岐命令が含まれるとき、当該条件分岐命令の命令列に関する情報を前記分岐管理テーブルに登録する。
【００２４】
〔５〕項１のデータプロセッサにおいて、前記条件分岐命令はＰＣ相対条件分岐命令である。
【００２５】
〔６〕項１のデータプロセッサにおいて、前記命令フェッチ部は条件分岐命令の実行履歴に基づいて分岐予測を行う分岐予測部(２５)を有する。前記分岐予測部は前記条件分岐命令の命令アドレスに基づいて分岐予測を行なってその予測結果を出力する。前記バッファ制御部は、前記予測結果に基づいて条件分岐命令の条件成立が示唆されているか否かを判別する。
【００２６】
〔７〕項１のデータプロセッサにおいて、前記バッファ制御部は、分岐方向が逆方向で前記条件分岐命令による分岐元から分岐先までの命令列の繰り返し実行回数を計数する分岐履歴カウンタ(８５)を有する。前記分岐履歴カウンタの計数値が所定値を超えることによってショートループの形成が示唆されていると判別する。
【００２７】
〔８〕項２のデータプロセッサにおいて、前記バッファ制御部は、前記条件分岐命令による分岐元から分岐先までの命令列によって形成されるループの多重数を示す分岐カウンタ(８６)を有する。バッファ制御部は、単一ループのときは当該単一ループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定し、多重ループのときは最も大きなループの分岐先と分岐元アドレスに対応して前記ロックスタートポインタとロックエンドポインタの値を決定する。
【００２８】
〔９〕項８のデータプロセッサにおいて、前記バッファ制御部は、メモリ部上における分岐元に対するリードポインタのアドレス差である第１データ（ｘ）、メモリ部上におけるリードポインタに対する分岐先のアドレス差である第２データ（ｙ）、前記第１データと第２データとの和である第３データ（ｘ＋ｙ）をループ毎に取得する。バッファ制御部は、第１データ及び第２データが夫々正の整数値であることによってリードポインタが自ループ内であるかを判別し、前記ループ毎における第１データの大小に基づいて多重ループの分岐元の包含関係を判別し、前記ループ毎における第２データの大小に基づいて多重ループの分岐先の包含関係を判別し、ループ毎の第３データの大小に基づいて多重ループにおけるループの大小関係を判別する。
【００２９】
〔１０〕項１のデータプロセッサ（１）は更に命令キャッシュメモリ(１１)を更に有し、前記命令フェッチ部は前記命令キャッシュメモリから必要な命令をフェッチする。
【００３０】
〔１１〕データ処理システムは項１０のデータプロセッサと、前記データプロセッサに接続された外部メモリ（２）とを有する。前記命令キャッシュメモリは前記外部メモリが保有する命令の一部を保有して連想メモリ動作を行なう。
【００３１】
２．実施の形態の詳細
実施の形態について更に詳述する。以下、本発明を実施するための形態を図面に基づいて詳細に説明する。なお、発明を実施するための形態を説明するための全図において、同一の機能を有する要素には同一の符号を付して、その繰り返しの説明を省略する。
【００３２】
図２には本発明に係るデータプロセッサの一例が示される。同図に示されるデータプロセッサ（ＬＳＩ）１は、特に制限されないが、ＣＭＯＳ集積回路製造技術によって単結晶シリコンのような１個の半導体基板に形成され、例えばシステムオンチップ（ＳｏＣ）の半導体デバイスとして構成される。データプロセッサ１には外部記憶装置としてシンクロナスＤＲＡＭ(ＳＤＲＡＭ)２が接続される。データプロセッサ１は例えばシステムバス（Ｂ−ＢＵＳ）３を共有するＣＰＵコア（ＣＰＵＣＲ）４及びメモリコントローラとしてのＳＤＲＡＭコントローラ５等を備える。ＳＤＲＡＭコントローラ４はＣＰＵコア４の制御に基づいてＳＤＲＡＭ２をアクセスするためのインタフェース制御を行う。
【００３３】
ＣＰＵコア４は、システムバス３に対し、バスインタフェースユニット（ＢＩＦＵ）１０を介して命令キャッシュ（ＩＣＡＣＨ）１１とデータキャッシュ（ＤＣＡＣＨ）１２が接続される。命令キャッシュ１１は命令フェッチバス（Ｆ−ＢＵＳ）１３を介して、データキャッシュ１２はデータバス（Ｄ−ＢＵＳ）１４を介して中央処理装置（ＣＰＵ）１５に接続される。ＣＰＵ１５は、命令フェッチ部（ＩＦＴＣＨ）２０、命令デコーダ（ＩＤＥＣ）２１、実行部（ＥＸＥＣ）２２から構成される。命令フェッチ部２０は、分岐予測を行う分岐予測部（ＢＥ）２５、命令キャッシュ１１からの命令を保持して命令デコーダ２１に与える命令バッファ（ＩＱ）２６（以下においては便宜的に命令バッファを命令キューとも称する）、及び命令フェッチを制御する命令フェッチ制御部（ＦＴＣＨＣＴＬ）２７から構成される。命令デコーダ２１は命令キュー２６から出力される命令を解読し、実行部２２はその解読結果等に従ってオペランドのアドレス演算、データキャッシュ１２に対するオペランドアクセス、オペランドを用いたデータ演算等を行って算命令を実行する。実行部２２は特に図示はしないが演算器、汎用レジスタ、及びプログラムカウンタ等を有する。
【００３４】
ＣＰＵ１５は次のように命令を処理する。まず、実行部２２のプログラムカウンタの値に従った命令アドレス命令アドレスＩＡＤＲが命令キュー２６に供給される。命令アドレスＩＡＤＲに対応する命令が命令キュー２６内に存在しない場合、命令キュー２６から命令キャッシュ１１に対し、フェッチリクエストＦＲＥＱとフェッチアドレスＦＡＤＲが出力される。命令キャッシュ１１上に必要な命令が存在しない場合、命令キャッシュ１１はＳＤＲＡＭコントローラ５を介して必要な命令をＳＤＲＡＭ２からリードする制御を行う。これによってシステムバス３を介してＣＰＵコア１５内のバスインタフェースユニット１０を経由して、命令キャッシュ１１に必要な命令がリードされ、命令キャッシュ１１は命令フェッチバス１３を介して複数ワードの命令列であるフェッチ命令ＦＩＮＳＴを命令キュー２６に供給する。命令キュー２６は供給された命令列を保持すると共に、命令デコーダ２１に命令アドレスＩＡＤＲに対応する命令（ＯＰＣ：オペレーションコード）を供給する。命令デコーダ２１は供給された命令を解読し、その解読結果に基づいて実行部２２は命令で指定された処理、例えば演算やデータのロード・ストアなどの処理を制御する。尚、命令アドレスＩＡＤＲに対応する命令が命令キュー２６内に存在する場合は命令キュー２６内の命令が直接命令デコーダ２１に供給される。命令アドレスＩＡＤＲに対応する命令が命令キュー２６内に存在しなくても命令キャッシュ１１に存在すればＳＤＲＡＭ2のアクセスを行わずに命令キャッシュが保有する命令が命令キュー２６から命令デコーダ２１に供給される。
【００３５】
次に分岐命令の処理について説明する。分岐命令にはプログラムカウンタ（ＰＣ）の値を分岐先アドレスの決定に用いるＰＣ相対分岐命令、汎用レジスタの値を分岐先アドレスの決定に用いるレジスタ相対分岐命令等がある。ＰＣ相対分岐の場合には値が一意に決まるＰＣを用いればよく、レジスタ相対の場合にはその値は一意に決まらず前の命令実行結果等に依存することが多く、分岐先の確定に時間を要しないためにはＰＣ相対分岐を用いることが得策になる。ＰＣ相対分岐命令として、例えば、前の命令実行の結果が真値を返すことを分岐条件とする“ＢＴ（ＰＣ＋即値）”、前の命令実行の結果が偽値を返すことを分岐条件とする“ＢＦ（ＰＣ＋即値）”のような条件分岐命令がある。“ＢＲＡ（ＰＣ＋即値）”のような無条件分岐命令もある。前記ＰＣ相対分岐命令における分岐先アドレスは、当該分岐命令のプログラム位置である命令アドレス（プログラムカウンタＰＣの値）に命令コードの中に含まれる即値を加算した値によって決定される。
【００３６】
ここで、分岐予測部２５による分岐予測の対象は、特に制限されないが、ＰＣ相対分岐命令とする。命令キュー２６は自らが保持する命令にＰＣ相対分岐命令を含むことをオペコードのプリデコードによって検出すると、当該ＰＣ相対分岐命令の命令アドレスである分岐元アドレスＢＡＤＲを分岐予測部２５に出力する。分岐予測部２５は分岐予測を行ってその予測結果ＢＥＸＰを命令キュー２６に出力する。命令キュー２６は当該ＰＣ相対分岐命令、分岐元アドレスＢＡＤＲ、及び分岐予測結果ＢＥＸＰに基づいてＰＣ相対分岐による分岐先アドレスの計算を行い、その分岐先アドレスを命令キャッシュ１１にフェッチアドレスＦＡＤＲとして出力する。分岐命令として、ＰＣ相対分岐命令以外にはレジスタ間接の分岐命令があるが、レジスタ間接分岐命令に関しては、実行部でアドレス計算を行い、命令アドレスＩＡＤＲとして命令フェッチ部に入力された後、フェッチアドレスＦＡＤＲを分岐先アドレスとして命令キャッシュに出力する。分岐先アドレスを受取った命令キャッシュ１１はフェッチ対象の命令（フェッチ命令）ＦＩＮＳＴを分岐先の命令として命令キュー２６に供給する。
【００３７】
分岐予測ミスした場合は、命令デコーダ２１に正しい命令列を供給する必要がある。その仕組みを説明する。分岐予測ミスの場合、実行部２２での命令列の実行が抑止されると同時に、分岐予測ミス信号ＢＭＩＳが実行部２２から命令フェッチ部２０のフェッチ制御部２７に伝えられ、分岐予測部２５の履歴情報が更新されると共に、命令キュー２６は実行部２２から供給される正しい命令アドレスＩＡＤＲを用いて必要な命令フェッチ処理を実行する。
【００３８】
図３にはショート・ループの例が示される。本明細書において、ショート・ループ（ＳＨＲＴＬＰ）とは、スピンループやｆｏｒループなどの命令数の少ない繰り返し命令列としてのループを総称する。少ない命令数とは、端的には命令キュー２６に格納可能な命令数の範囲を意味する。図３にはプログラムカウンタ（ＰＣ）とアセンブラ表現を記載する。命令１（ｉｎｓｔ１）から命令８（ｉｎｓｔ８）は任意の命令でよい。ＢＦ命令がＰＣ相対分岐命令である。ここでは、ＢＦ命令の分岐先は、
ＰＣ（Ｈ’００４００００８）＋Ｈ’Ｆ８（最上位符号）
＝Ｈ’００４００００８−H’８＝Ｈ’００４０００００（ラベルLOOP）となる。すなわち、ＢＦ命令はラベルＬＯＯＰに分岐し、実行命令アドレスアドレスが減少する逆方向の分岐とされる。このとき、命令１（ｉｎｓｔ１）からＢＦ命令までがループを形成する。ループを構成する命令が５命令と少ない。ＢＦ命令の非分岐の命令列がｉｎｓｔ５からｉｎｓｔ８の命令列となる。
【００３９】
図４には分岐予測のための状態遷移が例示される。これは１ビット飽和型カウンタの状態遷移を示す。分岐予測において広く使用される、１ビット飽和型カウンタは、１ビットで表現できる１、０の２つの状態としてｔａｋｅｎ、ｕｎｔａｋｅｎと呼ばれる状態を持つ。分岐結果が成立のときインクリメントし、不成立のときデクリメントする飽和カウンタである。カウンタが１、すなわちｔａｋｅｎ状態のとき分岐成立と予測し、カウンタが０、すなわちｕｎｔａｋｅｎ状態のとき分岐非成立と予測する。１ビット方式より予測精度が高い方式として２ビット方式がある。これら予測技術には公知の技術を適用することが可能である。
【００４０】
図５には分岐予測部（ＢＥ）２５の構成が概念的に示される。分岐予測部２５は、分岐元アドレスＢＡＤＲの一部のｍビットをインデックスアドレスとして用いて、分岐予測内容が保持される分岐履歴テーブル（ＢＨＴ）３０を参照し、該当する分岐命令の分岐予測結果ＢＥＸＰを出力する。分岐予測内容は、１：分岐する（ｔａｋｅｎ）、０：分岐しない（ｕｎｔａｋｅｎ）である。分岐元アドレスＢＡＤＲの一部のｍビットで参照される分岐履歴テーブル（ＢＨＴ）３０は、分岐予測ミス信号（ＢＭＩＳ）により、分岐履歴テーブルの内容が反転されて更新される。尚、分岐予測方式には様々な方式があるが、本発明では分岐履歴テーブルを用いる方式であれば他の方式、例えば、分岐命令とグローバルな分岐履歴を参照する２レベル予測方式やＧｓｈａｒｅ予測方式も対応可能である。
【００４１】
図１には命令キュー２６の構成が例示される。命令キュー２６は命令列を保持する４エントリ×８ラインのメモリ部としての命令キューアレイ４０を有し、その８ラインから１ラインの読み出しはライン選択回路４１で選択される。命令キューのキューライン選択回路(ＬＳＬＣＴ)４１から出力される１ライン分の命令又は命令キャッシュ１１から供給される１ライン分のフェッチ命令ＦＩＮＳＴは命令ライン選択回路（ＩＮＳＴＳＬＣＴ）４２で選択され、それによって選択された命令ラインの中からエントリ選択回路（ＥＳＬＣＴ）４３が1エントリの命令（ＯＰＣ）を選択して命令デコーダ２１に出力する。
【００４２】
命令キュー２６はバッファ制御部としての命令キュー制御部（ＩＱＣＴＬ）４４を備える。命令キュー制御部４４は命令ポインタ制御部（ＩＮＳＴＣＴＬ）４５と命令キューロック制御部（ＬＫＣＴＬ）４６を備える。命令ポインタ制御部４５は、命令デコーダ２１に供給する命令の命令キューアレイ４０内からリードする命令位置を示すリードポインタ（ｒｅａｄ＿ｐｔｒ）、命令キャッシュ１１からのフェッチ命令ＦＩＮＳＴを命令キューアレイ４０内のどのラインにライトするかを示すライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）を制御する。命令キューロック制御部４６は命令キューのロック開始位置ポインタとしてのロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロック終了位置ポインタとしてのロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）を制御すると共に、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）を命令ポインタ制御部４５に与えて命令キューのロック制御を行う。リードポインタ（ｒｅａｄ＿ｐｔｒ）とライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）による制御はＦＩＦＯ（First-In First-Out）を基本とするが、命令キューのロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）とロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の間のエントリは、予測ミスを生ずるまで順次繰り返しリードポインタ（ｒｅａｄ＿ｐｔｒ）によりリードポイントされることになる。更に具体的なポインタ制御内容については以下で説明する。
【００４３】
図６には命令キューロック制御部（ＬＫＣＴＬ）４６の構成が例示される。命令キューロック制御部（ＬＫＣＴＬ）４６はＰＣ相対分岐管理部（ＰＣＲＢＣＴＬ）５０及びロックポインタ制御部（ＬＰＣＴＬ）５１を有する。ＰＣ相対分岐管理部５０はＰＣ相対分岐サーチ部（ＰＣＲＢＳＲＣＨ）５３、分岐情報生成部（ＢＩＧＥＮ）５２及び分岐管理テーブル（ＢＣＴＢＬ）５４を備える。ＰＣ相対分岐サーチ部５３は命令キュー２６の命令ライン選択回路４２から出力される選択命令ラインＩＳＴＬを入力し、入力したラインの命令列にＰＣ相対分岐命令が含まれるか否かを探索する。分岐情報生成部（ＢＩＧＥＮ）５２はそれによって探索されたＰＣ相対分岐命令から分岐情報を生成し、生成した分岐情報を分岐管理テーブル５４に登録して管理する。分岐管理テーブル５４には、分岐毎の情報として、ロック対象であるか否かを示すロック対象フラグ（ＬＦＬＧ）、分岐元アドレス（ＢＡＤＲ）、キュー内分岐元アドレス（ＱＢＡＤＲ）、キュー内分岐先アドレス（ＱＴＡＤＲ）、分岐方向(ＢＤＲ、０：順方向、１：逆方向)、分岐予測値（ＰＲＤ，０：非分岐の予測であるｕｎｔａｋｅｎ、１：分岐の予測であるｔａｋｅｎ）の情報が必要に応じて登録される。分岐管理テーブルの情報を元にロックポインタ制御部５１は、命令キュー２６のロックすべき位置としてロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）、ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）を管理する。分岐管理テーブル５４は、各分岐において命令キューのロック対象になるかをロック対象フラグ（ＬＦＬＧ）が示している。図３の単一分岐の例において、分岐元アドレス（ＢＡＤＲ）がＨ’００４００００８で、命令キューの上から２本のラインを使用するとき、命令キュー内分岐元アドレスがＨ‘００１００、分岐先アドレスがＨ’０００００とされ、分岐方向がアドレスの逆方向１、分岐予測として１（ｔａｋｅｎ）とすると、当該単一分岐によるループは命令キュー２６内に命令が収まるショート・ループであるから、ロック対象フラグ（ＬＦＬＧ）が１となる。図６に示された命令キューアレイ４０においてＬ１はロック対象ショート・ループの先頭命令（図3のｉｎｓｔ１）、Ｂ１はショート・ループの基点となるＰＣ相対分岐命令（図３のＢＦ）を意味する。図６においてＢ２からＬ２への分岐は順方向の分岐でショート・ループではなく、ロック対象でもない。ロックポインタ制御部５１は、分岐管理テーブル５４からロック対象の分岐情報を得てロック箇所とロックタイミングを定める。
【００４４】
図７には命令キューの制御フローが例示される。命令キュー２６に命令アドレスが供給されたとき（７１）、命令キュー２６に命令がなければ（７２）、入力された命令アドレス（ＩＡＤＲ）に基づいてフェッチアドレス（ＦＡＤＲ）を生成して、命令キャッシュ１１をアクセスして１ライン分の命令（ＦＩＮＳＴ）が命令キュー２６に供給される(７３)。
【００４５】
命令アドレス（ＩＡＤＲ）に該当する命令キャッシュ１１からの命令ライン（ＩＳＴＬ）内にＰＣ相対分岐命令を含むか否かの判別として分岐サーチが行われる（７４）。分岐サーチの結果、分岐命令がなく、また、命令キュー２６にループ用命令が保持されていない場合は（７７）、命令キュー２６の命令ライン選択回路４２の後、エントリ選択回路（ＥＳＬＣＴ）４３で命令ＯＰＣが選択され、命令デコーダ２１に当該命令ＯＰＣが出力される（７８）。上記は通常モードの動作となる。
【００４６】
前記分岐サーチ（７４）においてＰＣ相対分岐命令がある場合、分岐元アドレス（ＢＡＤＲ）を用いて分岐予測部２５で分岐予測が行われ（７５Ａ）、分岐予測方向（ＢＥＸＰ）を入力すると共に、分岐命令の分岐元アドレス（ＢＡＤＲ）、キュー内分岐元アドレス(ＱＢＡＤＲ)、キュー内分岐先アドレス(ＱＴＡＤＲ)、分岐方向(ＢＤＲ)、分岐予測(ＰＲＤ)を分岐管理テーブル５４に保持する。そして分岐予測がｔａｋｅｎで且つ分岐方向が減少アドレス方向（分岐方向逆）であるか否かが判別され（７５Ｂ）、そうである場合には更に、分岐元アドレスと分岐先アドレスの差分が命令キューアレイ４０のサイズより小さいか否かが判別される（７６）。小さい場合には、ショート・ループモードに入る。大きければ通常モードの処理７７に移行する。
【００４７】
ショート・ループモードでは、信号ＢＭＩＳにより分岐予測ミスが通知されたか（７９）、ＩＱロックの設定が行われているか（８２）、が夫々判別される。ＩＱロックの設定とは、命令キュー２６に対するロックの設定、即ち、前記命令キューのロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の設定が行われているかどうかどうかということである。分岐予測ミスでなく、ＩＱロックの設定が行われていなければ、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の設定が行われ、且つ、分岐によるループで必要な命令を命令キャッシュ１１から命令キュー２６に保持する（８３）。そして、必要な命令ＯＰＣが命令キュー２６で選択されて命令デコーダ２１に出力される（７８）。ステップ７９において分岐予測ミスが通知されたときは、命令キュー１６に対するロック解除、即ち、前記命令キューのロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）による指定を無効にしてから（８４）、そのときの命令アドレスに応ずる命令を命令デコーダ２１に出力する（７８）。
【００４８】
命令キュー２６内での命令フェッチにおいて、リードポインタ（ｒｅａｄ＿ｐｔｒ）が命令アドレス（ＩＡＤＲ）の命令キュー２６上の位置を指しており、ショート・ループを繰り返している間は、リードポインタ（ｒｅａｄ＿ｐｔｒ）が命令キュー２６の適切な場所を示し、命令ライン（ＩＳＴＬ）の選択、並びに命令デコーダ２１への命令供給が行われる。
【００４９】
ショート・ループモードにおけるステップ８３の命令保持動作では命令キュー２６に命令を保持する。ステップ８３のＩＱロック設定動作では、分岐管理テーブル５４を参照し、キュー内分岐元アドレスＱＢＡＤＲにロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）、キュー内分岐先アドレスＱＴＡＤＲにロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）をセットする。ショート・ループが単一分岐のとき、すなわちロック対象分岐命令が一つしかないときは、ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）及びロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）は一意に決定する。ライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）を用いて、ロックスタートポインタ（ｌｃｋs＿ｐｔｒ）の指すアドレスからロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の指すアドレスまで順に命令キュー２６に命令を保持していく。ライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）がロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の値と同じになると、ループ用の命令保持は完了する。ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）及びロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）によってアドレス範囲が実質的に指定されているとき、命令キャッシュ１１に対するアクセスは抑止される。このようにしてＩＱロックの設定が行われた状態ではループ用命令保持中となる（７７）。一旦ＩＱロックが設定された後は、ループ用命令が保持中となり（ステップ７７のｙｅｓ）、分岐予測ミスを生じない（ステップ７９のｎｏ）範囲で、既に設定されたＩＱロックの設定内容にしたがって命令キュー２６から命令が命令デコーダ２１に供給される動作が繰り返され、命令キュー２６内のロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）及びロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）で指定された命令列が繰り返し利用され、その間は、当該命令列の命令は命令キャッシュ１１からの命令によってリプレースされない。
【００５０】
ショート・ループモードが終了するタイミングは、ＣＰＵ２２の実行部から分岐予測ミス（ＢＭＩＳ）として伝えられる。すなわち、分岐予測がミスのとき（７９）はＩＱロックが解除され、必要な命令が命令キュー２６から命令デコーダ２１に供給される。
【００５１】
図８には命令キューロック制御部（ＬＫＣＴＬ）の別の例が示される。図２の分岐予測部２５がない場合の例である。命令キューロック制御部４６ＡのＰＣ相対分岐管理部５０Ａにてループ分岐のみの履歴をとることで分岐予測の代替を行うようになっている点が上記の例とは相違される。相違点について説明する。ＰＣ相対分岐管理部５０Ａは、例えばＰＣ相対分岐サーチ部５３、探索したＰＣ相対分岐命令を管理し分岐情報を生成する分岐情報生成部５２、ループ分岐の分岐履歴カウンタ８５、及び分岐管理テーブル５４から構成される。この命令キューロック制御部４６Ａは、ショート・ループを見つけた後、分岐履歴カウンタ８５で該ショート・ループの分岐の回数が一定数を超えたとき（図８の例ではＢ’１１回のとき）、ロック対象のビットが１にセットされる。分岐履歴カウンタ８５の計数動作は、分岐情報生成部にて、ある分岐元アドレスに関して、リードポインタがその分岐元アドレスを指すときに分岐方向が逆方向（１）のとき、回数を計数し、リードポインタが該当する分岐元アドレスを指すときに分岐方向が順方向（０）のとき、計数値が初期化される。
ロック対象のビットが１にセットされたショートループに対して、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）とロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）が設定され、命令保持後に命令キューがロックされる（ＩＱロック）。ループから抜けるときは、ロック対象のビットが０となり、分岐方向が順方向であるか、または、命令アドレス（ＩＡＤＲ）に対応されるリードポインタ（ｒｅａｄ＿ｐｔｒ）がロックスタートポインタとロックエンドポインタ間のアドレス範囲外になることによって、命令キューロック（ＩＱロック）が解除される。図６の例では、分岐予測ミス（ＢＭＩＳ）により命令キューロックが解除されるのに対し、図８の例では、分岐方向が順方向であるか、または、リードポインタ（ｒｅａｄ＿ｐｔｒ）がロックアドレス範囲（ｌｃｋｓ＿ｐｔｒ〜ｌｃｋｅ＿ｐｔｒ）と異なることによってＩＱロックが解除される。
【００５２】
図９には二重分岐を含むショート・ループの例を示す。多重分岐はこれらの二重分岐の延長として実現できる。二重分岐を３つのケースに分類する。ケース１は二重ループでループ中に別ループの分岐元と分岐先がある場合を示す。ループＬＰ１の中でループＬＰ２が繰り返される。ケース２はループ中に別ループの分岐先がある場合を示す。ループＬＰ４の中でループＬＰ３を繰り返すことになる。ケース３はループ中に別ループの分岐元がある場合を示す。ループＬＰ５の途中でループLＰ６に抜ける。以下では図９の３つのケースに対応できるショート・ループロック機構について説明する。
【００５３】
図１０には命令キューロック制御部の更に別の例が示される。命令キューロック制御部４６Ｂはロック内分岐カウンタ(ＢＣＵＮＴ)８６を有する点が図６とは相違される。ＰＣ相対分岐管理部は５０Ｂ、ロックポインタ制御部は５１Ｂとして図示してある。ＰＣ相対分岐管理部５０Ｂは、ＰＣ相対分岐サーチ部５３、探索したＰＣ相対分岐命令を管理し分岐情報を生成する分岐情報生成部５２、及び分岐管理テーブル５４から構成される。分岐管理テーブル５４は、前述と同様に、分岐ごとの情報として分岐元アドレス（ＢＡＤＲ）、キュー内分岐元アドレス（ＱＢＡＤＲ）、キュー内分岐先アドレス（ＱＴＡＤＲ）、分岐方向（ＢＤＲ）、分岐予測値（ＰＤＲ）が記載される。分岐管理テーブル５４は、各分岐において命令キューのロック可能かどうかの情報であるロック対象フラグ（ＬＦＬＧ）を有する。ロック内分岐カウンタ８６は、リードポインタ（ｒｅａｄ＿ｐｔｒ）、分岐ミス（ＢＭＩＳ）、ＰＣ相対分岐管理部５０Ｂの分岐管理テーブル５４の情報を入力し、ロック範囲内の分岐数をカウントする。分岐管理テーブル５４の情報と、リードポインタ（ｒｅａｄ＿ｐｔｒ）、ライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）、ロック内分岐カウンタ８６のカウント情報を元にロックポインタ制御部５１Ｂが、命令キュー２６のロックすべき位置としてロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）を管理する。
【００５４】
図１２、図１３、図１４には図１０の命令キューロック制御部４６Ｂによる多重分岐対応の命令キューロック制御の動作が例示される。各図では図９のケース１、すなわち、ループＬＰ１中に別ループＬＰ２がある場合を一例とする。
【００５５】
図１２は命令１〜命令３を実行後に、命令４〜命令７を命令キューに保持してショート・ループモードとなり、命令８〜命令１０を一度も実行していない単一分岐ケースである。ＱＬＡＤＲは命令キュー２６内のローカルアドレス（キュー内アドレス）である。命令７まで命令キュー上にあるため、ライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）は命令７を指し、図１２ではリードポインタ（ｒｅａｄ＿ｐｔｒ）の指す命令５をオペコードとして命令デコーダ２１に供給する。ロック内分岐カウンタ８６のカウント値は１である。分岐管理テーブル５４には、ループＬＰ２がロック対象として登録されている。ロックポインタ制御部５１Ｂでは、まず、リードポインタ（ｒｅａｄ＿ｐｔｒ）がループ内であるかどうかの判定を行う。すなわち、ｘ（キュー内分岐元アドレス−ｒｅａｄ＿ｐｔｒ）＝２、ｙ（ｒｅａｄ＿ｐｔｒ−キュー内分岐先アドレス）＝１、ｘ＞０かつｙ＞０のため、リードポインタ（ｒｅａｄ＿ｐｔｒ）がループＬＰ２内であることがわかる。このとき、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）は命令４、ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）は命令７となる。すなわち、ロックポインタ制御部５１Ｂは、ロック内分岐カウンタ８６の値が１のとき、ｘ＞０、且つｙ＞０の条件を満足するように、リードポインタ（ｒｅａｄ＿ｐｔｒ）を制御することによって、リードポインタ（ｒｅａｄ＿ｐｔｒ）を当該ループ内で変化させる事ができる。
【００５６】
図１３は命令１〜命令１０を命令キュー２６に保持した後、命令４〜命令７でショート・ループモードとなる多重分岐ケースである。命令１０まで命令キュー２６上にあるため、ライトポインタ（ｗｒｉｅ＿ｐｔｒ）は命令１０を指し、図１３ではリードポインタ（ｒｅａｄ＿ｐｔｒ）の指す命令５がオペコードとして命令デコーダ２１に供給されている。ロック内分岐カウンタ８６によるカウント値はロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）とロックエンドポインタ（ｌｋｅ＿ｐｔｒ）との間のロック範囲の分岐数である２にされる。分岐管理テーブル５４には、二つのループＬＰ１とループＬＰ２がロック対象として登録される。ロックポインタ制御部５１Ｂでは、まず、リードポインタ（ｒｅａｄ＿ｐｔｒ）がループ内であるかどうかの判定を行う。ループＬＰ２は、ｘ＝２＞０、ｙ＝１＞０よりリードポインタ（ｒｅａｄ＿ｐｔｒ）がループ内、ループＬＰ１は、ｘ＝６＞０、ｙ＝４＞０よりリードポインタ（ｒｅａｄ＿ｐｔｒ）がループ内であることがわかる。どちらのループが大きいかはｘとｙの合計ｚ（＝ｘ＋ｙ）の大きさによりわかる。すなわち、ループＬＰ２はｚ＝３、ループＬＰ１はｚ＝１０より、どちらのループが大きいかがわかる。ループ間における分岐元と分岐先の夫々の包含関係についてもｘ、ｙをループ毎に比較することによってわかる。ここでは、ｚによりループＬＰ１が大ループであることがわかるので、ループＬＰ１側に合わせてロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）を命令１に、ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）を命令１０に対応させて設定される。
【００５７】
図１４は命令１〜命令１０を命令キューに保持した後、ループＬＰ２を抜けてショート・ループモードとなる単一分岐ケースである。命令１０まで命令キュー２６上にあるため、ライトポインタ（ｗｒｉｔｅ＿ｐｔｒ）は命令１０を指し、リードポインタ（ｒｅａｄ＿ｐｔｒ）の指す命令８がオペコードとして命令デコーダ２１に供給されている。分岐管理テーブル５４においてループＬＰ２は削除されるため、ループＬＰ１のみがロック対象として登録されている。ロック範囲のループはループＬＰ１のみのため、分岐数は１であり、ロック内分岐カウンタ８６の値は１となる。ロックポインタ制御部５１Ｂでは、リードポインタ（ｒｅａｄ＿ｐｔｒ）がループ内であるかどうかの判定を行う。ｘ＝６、ｙ＝４、ｘ＞０かつｙ＞０のため、リードポインタ（ｒｅａｄ＿ｐｔｒ）がループＬＰ１内であることがわかる。図１４の例では、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）は命令１、ロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）は命令１０を指す。
【００５８】
図１２乃至図１４の例から明らかなように、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）とロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の値はロック内分岐カウンタ８６の値とリードポインタ（ｒｅａｄ＿ｐｔｒ）の値に合わせて動的に動く。リードポインタ（ｒｅａｄ＿ｐｔｒ）が現在どこのループ内にいるかは値ｘ，ｙから判別され、ループ間における分岐元と分岐先の夫々の包含関係についてもｘ，ｙの大小をループ毎に比較することによってわかり、更に多重ループにおけるループの大小は夫々のループの値ｘ＋ｙの大小から判別される。
【００５９】
図１１には多重分岐対応の命令キューロック制御動作のフローチャートが示される。図７に対してロック範囲対象アドレスチェック(１１４，１１５)、分岐管理テーブル５４及びロック内分岐カウンタ８６の処理（１２１〜１２５）が追加されている点が相違する。図９のケース１〜ケース３のそれぞれに対して図１１のフローを説明する。
【００６０】
《ケース１；ループＬＰ１中に別ループＬＰ２がある》
まず、ループＬＰ２が分岐管理テーブルに登録され、ロック後にループから脱する際に分岐ミスが発生するので、分岐管理テーブル５４から削除され、ループＬＰ２に関するＩＱロックが解除（８５）されたところ（命令８）から説明する。命令８、命令９、命令１０は初めて実行され、通常モードで命令キャッシュ１１から命令キュー２６に命令がフェッチされ、命令が選択されて命令デコーダ２１に供給される。
【００６１】
命令１０で分岐予測ｔａｋｅｎ、分岐方向が逆方向と判別され（７５Ｂ）、かつ分岐元アドレスと分岐先アドレスの差分が命令キューより小さいと判別される（７６）ので、多重分岐対応ショート・ループモードに入る。分岐管理テーブル５４に登録されていないため（１２１）、当該命令ループＬＰ１が分岐管理テーブル５４に登録され、分岐カウンタが１となる（１２２）。これによってＩＱロックの設定処理として、ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の設定が行われる（８２，８３）。分岐によるループで必要な命令はすでに命令キュー２６に保持されている。命令７で再び分岐予測ｔａｋｅｎ、分岐方向が逆方向（７５B）、アドレス差分が命令キューより小さく（７６）、多重分岐ショート・ループモードに入る。そしてＬＰ２が分岐管理テーブル５４に登録され、分岐カウンタは２となる（１２２）。ここではＩＱロックの設定は変更されない（ステップ８２のｙｅｓ）。ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の設定変更を要しないからである。ループＬＰ２の命令実行に必要な命令は命令キュー２６から命令デコーダ２１に供給される。ここまでの処理は図１３の場合に該当し、ループＬＰ１がロック範囲となる。正確には図１３は命令８、命令９、命令１０が命令キュー２６に保持された後の状態である点が異なるが、分岐管理テーブル５４とロックポインタ制御部５１Ｂは同一である。
【００６２】
ループＬＰ２で複数回ループを実行後に命令７の分岐ミスが通知されると（１２３）、ループＬＰ２は分岐管理テーブル５４から削除され、分岐カウンタの値が減じて（１２４）、値１となる。ここではＩＱロックの設定は変更されない（ステップ８２のｙｅｓ）。ロックスタートポインタ（ｌｃｋｓ＿ｐｔｒ）及びロックエンドポインタ（ｌｃｋｅ＿ｐｔｒ）の設定変更を要しないからである。そして、ループの先頭の命令１に分岐すると、ループ１（ＬＰ１）用の命令は、ＩＱロックの設定に従って命令キュー２６から命令デコーダ２１に供給される。ループＬＰ１で複数回ループを実行後に命令１０の分岐ミスが通知されると(１２３)、ループＬＰ１は分岐管理テーブル５４から削除され、分岐カウンタ８６が減じて値０となり（１２５）、命令キューロックが解除される（８５）。ループＬＰ２を脱する際、分岐管理テーブル５４は変更され、分岐カウンタ８６の値は減じるが、図１４の場合のようにループＬＰ１の部分で命令キュー２６がロックされたままであり、この状態でロックが解除されることはない。すなわち、分岐管理テーブル５４に登録されている命令ループがあり、分岐カウンタ８６の値が０でないときは命令キュー２６はロックされ続ける（１２５）。
【００６３】
《ケース２；ループＬＰ３中に別ループＬＰ４の分岐先がある》
ループＬＰ３のみ実行しているときは単一分岐である。ループＬＰ４中の分岐命令８がループＬＰ３の先頭に分岐しないときは単一分岐として扱ってよく、ループＬＰ３の先頭に分岐するときは二重分岐となる。ループＬＰ３の先頭に分岐する場合は、ループＬＰ４の分岐先がケース１と異なるが、ケース１と同じフローとすればよい。
【００６４】
《ケース３；ループＬＰ５中に別ループＬＰ６の分岐元がある》
ループＬＰ５の実行中、ループＬＰ６の分岐がないときは単一分岐である。ループＬＰ５でショート・ループモードに入って、命令キュー２６をロックしているときに、ループＬＰ６の分岐がある場合について説明する。ループＬＰ６の分岐がｕｎｔａｋｅｎのときは、ループＬＰ５は単一分岐のショート・ループとして継続する。ループＬＰ６の分岐がｔａｋｅｎのときは、ロック範囲対象アドレスチェックでアドレス範囲外（１１４）になるため、分岐管理テーブルをクリアし（１１５）、命令キューロックが解除され(８５)、ループＬＰ６の分岐先に分岐する。ロック範囲アドレスチェックは、ロックポインタ制御でｘ＝分岐元アドレス−ｒｅａｄ＿ｐｔｒ＜０になることで判別できる。
【００６５】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００６６】
例えば、３重ループ以上の多重ループにおけるＩＱロックの制御についても分岐カウンタ８６の値などに従って図１１乃至図１４で説明した内容に準拠して同様に制御を行えばよい。また、命令キューに対して命令フェッチの他に命令プリフェッチ機構を用いて命令プリフェッチを行なってもよい。本発明はＳｏＣ形態に限定されず汎用向けなどの各種データプロセッサに広く適用することができる。
【図面の簡単な説明】
【００６７】
【図１】図１は命令キューの構成を例示するブロック図である。
【図２】図２は本発明に係るデータプロセッサの一例を全体的に示すブロック図である。
【図３】図３はショート・ループの例を示す説明図である。
【図４】図４は分岐予測の一例を示す状態遷移図である。
【図５】図５は分岐予測部の構成を概念的に例示するブロック図である。
【図６】図６は命令キューロック制御部（ＬＫＣＴＬ）の構成を例示するブロック図である。
【図７】図７は命令キューの制御動作を例示するフローチャートである。
【図８】図８は命令キューロック制御部（ＬＫＣＴＬ）の別の例を示すブロック図である。
【図９】図９は二重分岐を含むショート・ループの例を示す説明図である。
【図１０】図１０は命令キューロック制御部の更に別の例を示すブロック図である。
【図１１】図１１は多重分岐対応の命令キューロック制御動作のフローチャートである。
【図１２】図１２は図１０の命令キューロック制御部による多重分岐対応の命令キューロック制御の第１の動作を例示する説明図である。
【図１３】図１３は図１０の命令キューロック制御部による多重分岐対応の命令キューロック制御の第２の動作を例示する説明図である。
【図１４】図１４は図１０の命令キューロック制御部による多重分岐対応の命令キューロック制御の第３の動作を例示する説明図である。
【符号の説明】
【００６８】
ｌｃｋｓ＿ｐｔｒ…ロックスタートポインタ
ｌｃｋｅ＿ｐｔｒ…ロックエンドポインタ
ｉｎｓｔ＿ｐｔｒ…命令位置ポインタ
ｒｅａｄ＿ｐｔｒ…リードポインタ
ｗｒｉｔｅ＿ｐｔｒ…ライトポインタ
１…データプロセッサ
２…ＳＤＲＡＭ
４…ＣＰＵコア
１５…ＣＰＵ
１１…命令キャッシュ
２０…命令フェッチ部
２１…命令デコーダ
２２…実行部
２５…分岐予測部
２６…命令キュー（命令バッファ）
４０…命令キューアレイ
４４…命令キュー制御部
４５…命令ポインタ制御部
４６，４６Ａ，４６Ｂ…命令キューロック制御
５０，５０Ａ，５０Ｂ…ＰＣ相対分岐管理部
５１，５１Ｂ…ロックポインタ制御部
８５…分岐履歴カウンタ
８６…ロック内分岐カウンタ
【図１】
2010066892.tif 000003
【図２】
2010066892.tif 000004
【図３】
2010066892.tif 000005
【図４】
2010066892.tif 000006
【図５】
2010066892.tif 000007
【図６】
2010066892.tif 000008
【図７】
2010066892.tif 000009
【図８】
2010066892.tif 000010
【図９】
2010066892.tif 000011
【図１０】
2010066892.tif 000012
【図１１】
2010066892.tif 000013
【図１２】
2010066892.tif 000014
【図１３】
2010066892.tif 000015
【図１４】
2010066892.tif 000016