(57)【要約】【課題】分岐ペナルティを削減することができる小型及び／又は小消費電力の情報処理装置を提供することを課題とする。【解決手段】命令を記憶するための命令キャッシュメモリ（１０２）と、入力された分岐命令内のプログラムカウンタ相対分岐先アドレス及びプログラムカウンタ値を加算し、絶対分岐先アドレスを出力する第１の加算器（３０１）と、前記入力された分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換してその置換した分岐命令を前記命令キャッシュメモリに書き込む書き込み回路（１２３）とを有することを特徴とする情報処理装置が提供される。【選択図】図１
2008165589.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶するための命令キャッシュメモリと、
入力された分岐命令内のプログラムカウンタ相対分岐先アドレス及びプログラムカウンタ値を加算し、絶対分岐先アドレスを出力する第１の加算器と、
前記入力された分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換してその置換した分岐命令を前記命令キャッシュメモリに書き込む書き込み回路と
を有することを特徴とする情報処理装置。
【請求項２】
前記プログラムカウンタ値は、上位ビット及び下位ビットに分割され、
前記第１の加算器は、前記プログラムカウンタ値の前記下位ビットと前記プログラムカウンタ相対分岐先アドレスを加算することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第１の加算器が出力する絶対分岐先アドレスは、前記プログラムカウンタ相対分岐先アドレスと同じビット数の絶対分岐先アドレス及びキャリ情報に分割され、
前記書き込み回路は、前記分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換し、その置換した分岐命令及び前記キャリ情報を前記命令キャッシュメモリに書き込むことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記命令キャッシュメモリは、命令及びその命令のタグアドレスを対応付けて記憶し、
さらに、前記命令キャッシュメモリに書き込まれた分岐命令が読み出されると、その分岐命令内の絶対分岐先アドレス及び前記プログラムカウンタ値を基にしたタグアドレスと前記命令キャッシュメモリ内のタグアドレスとを比較する比較器と、
前記比較の結果、一致した場合には、その一致したタグアドレスに対応する分岐先命令を前記命令キャッシュメモリから読み出す読み出し回路とを有することを特徴とする請求項１又は２記載の情報処理装置。
【請求項５】
さらに、前記命令キャッシュメモリに書き込まれた分岐命令内の絶対分岐先アドレスをプログラムカウンタ相対分岐先アドレスに置換して元の分岐命令を生成するために、前記分岐命令内の絶対分岐先アドレス及びプログラムカウンタ値を基にプログラムカウンタ相対分岐先アドレスを演算する第２の加算器を有することを特徴とする請求項１又は２記載の情報処理装置。
【請求項６】
前記第１の加算器及び前記第２の加算器は共用されることを特徴とする請求項５記載の情報処理装置。
【請求項７】
前記書き込み回路は、前記分岐命令内のオペコードを前記キャリ情報に置換し、その置換した分岐命令及び分岐命令であることを示す情報を前記命令キャッシュメモリに書き込むことを特徴とする請求項３記載の情報処理装置。
【請求項８】
命令を記憶するための命令キャッシュメモリと、
プログラムカウンタ相対分岐命令及びその他の命令を並んで入力すると、前記プログラムカウンタ相対分岐命令が特定の位置になるように前記プログラムカウンタ相対分岐命令及びその他の命令を並び替えて前記命令キャッシュメモリに書き込むと共に、前記並び替えの情報を前記命令キャッシュメモリに書き込む書き込み回路と
を有することを特徴とする情報処理装置。
【請求項９】
さらに、命令を演算実行するための演算器と、
前記命令キャッシュメモリ内の前記並び替えの情報を基に前記プログラムカウンタ相対分岐命令及びその他の命令を前記演算器に出力する順番を制御する制御回路を有することを特徴とする請求項８記載の情報処理装置。
【請求項１０】
前記演算器は、複数の命令を同時実行可能であり、
前記制御回路は、前記並び替えの情報を基に同時実行させる前記命令キャッシュメモリ内の複数の命令を選択して前記演算器に出力することを特徴とする請求項９記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特に分岐命令を処理する情報処理装置に関する。
【背景技術】
【０００２】
図１１は、分岐命令を含む命令群１１０１の例を示す図である。第１行のＡｄｄ命令（加算命令）は、ＧＲ３＝ＧＲ１＋ＧＲ２を意味する。すなわち、このＡｄｄ命令は、レジスタＧＲ１及びＧＲ２の値を加算し、レジスタＧＲ３に格納する命令である。
【０００３】
第２行のＳｕｂｃｃ命令（減算命令）は、ＧＲ４＝ＧＲ３−０ｘ８（１６進数）を意味する。すなわち、このＳｕｂｃｃ命令は、レジスタＧＲ３の値から０ｘ８（１６進数）を減算し、レジスタＧＲ４に格納する命令である。その際、ゼロフラグは、演算結果が０であれば１になり、それ以外であれば０になる。
【０００４】
第３行のＢＥＱ命令（分岐命令）は、ゼロフラグが１であればラベル名Ｔａｒｇｅｔ０のアドレスへ分岐し、０であれば分岐せずに次のアドレスに進む命令である。すなわち、ゼロフラグが１であれば第６行のＡｎｄ命令に分岐し、ゼロフラグが１であれば第４行のＡｎｄ命令に進む。
【０００５】
第４行のＡｎｄ命令（論理積命令）は、ＧＲ１０＝ＧＲ８  ＆  ＧＲ４を意味する。すなわち、このＡｎｄ命令は、レジスタＧＲ８及びＧＲ４の値の論理積を演算し、レジスタＧＲ１０に格納する命令である。
【０００６】
第５行のＳｔ命令（ストア命令）は、ｍｅｍｏｒｙ（ＧＲ６＋ＧＲ７）＝ＧＲ１０を意味する。すなわち、このＳｔ命令は、レジスタＧＲ１０の値を、レジスタＧＲ６及びＧＲ７を加算した値のアドレスのメモリにストア（格納）する命令である。
【０００７】
ラベル名Ｔａｒｇｅｔ０のアドレスには、第６行のＡｎｄ命令が記憶されている。第６行のＡｎｄ命令は、ＧＲ１１＝ＧＲ４  ＆  ＧＲ９を意味する。すなわち、このＡｎｄ命令は、レジスタＧＲ４及びＧＲ９の値の論理積を演算し、レジスタＧＲ１１に格納する命令である。
【０００８】
第７行のＬｄ命令（ロード命令）は、ＧＲ１０＝ｍｅｍｏｒｙ（ＧＲ６＋ＧＲ７）を意味する。すなわち、このＬｄ命令は、レジスタＧＲ６及びＧＲ７を加算した値のアドレスのメモリから値をロード（読み出）し、レジスタＧＲ１０に格納する命令である。
【０００９】
ここで、第３行のＢＥＱ命令（分岐命令）は、ゼロフラグの値に応じて、分岐するか否かが決まる。したがって、ＢＥＱ命令（分岐命令）の実行後に命令実行されない時間（分岐ペナルティ）が生じる。通常、分岐ペナルティは、３〜５クロックサイクルであり、１０クロックサイクル以上のものもある。分岐ペナルティは、命令群１１０１の実行速度低下の原因になる。
【００１０】
図１２は、命令のパイプライン処理を示す図である。以下、分岐ペナルティが発生する理由を説明する。ステージ１３０〜１３４は、それぞれパイプラインステージを示す。まず、第１のステージ１３０では、命令読み出しのためのアドレスを計算する。次に、第２のステージ１３１では、命令キャッシュメモリから命令を読み出す。次に、第３のステージ１３２では、レジスタから値を読み出すと共に、命令の解釈（デコード）を行う。次に、第４のステージ１３３では、演算器により命令の演算実行を行う。次に、第５のステージ１３４では、演算結果をレジスタに書き込む。
【００１１】
図１１の命令群１１０１の場合、ＢＥＱ命令（分岐命令）の演算実行ステージ１３３の結果、分岐するか否かが決定する。分岐する場合には、ステップＳ１２０１により、第１のステージ１３０に戻り、分岐先のラベル名Ｔａｒｇｅｔ０のアドレスを計算する。その後、ステージ１３１〜１３３を行う。このため、ＢＥＱ命令（分岐命令）の演算実行ステージ１３３の後、次の分岐先のＡｎｄ命令の演算実行ステージ１３３を行うまでの間に分岐ペナルティが発生する。
【００１２】
以上のように、近年のマイクロプロセッサは、パイプライン化されている。パイプライン化は各ステージ１３０〜１３４が独立していることを前提に命令を並列処理する方式である。しかし、分岐命令についてはステージ間に依存があり、演算実行ステージ１３３と命令読み出しアドレスの計算ステージ１３０が関係しているため、演算実行ステージ１３３後に命令実行されない時間が生じる。これが分岐ペナルティの発生原因である。
【００１３】
図１３は、分岐方向予測を用いた分岐ペナルティ削減方法を示す図である。分岐方向予測は、ステージ１３１において命令キャッシュメモリから分岐命令を読み出した直後に、分岐するか否かを予測する。分岐すると予測した場合には、ステップＳ１３０２により、第１のステージ１３０に戻り、分岐先のラベル名Ｔａｒｇｅｔ０のアドレスを計算する。その後、分岐命令の演算実行ステージ１３３により、分岐するか否かが確定する。予測が外れた場合には、ステップＳ１３０３により、第１のステージ１３０に戻り、正しい次の命令読み出しアドレスを計算する。予測が当たった場合には、分岐ペナルティを削減することができる。分岐方向予測には、静的予測と動的予測がある。
【００１４】
次に、静的予測について説明する。分岐命令内にヒント情報を埋め込んでおき、ステージ１３１において命令キャッシュメモリから分岐命令を読み出した直後に、そのヒント情報を基に分岐するか否かを予測する。分岐すると予測した場合には、ステップＳ１３０２により、第１のステージ１３０に戻り、分岐先のラベル名Ｔａｒｇｅｔ０のアドレスを計算する。その後のステップＳ１３０３は上記と同様である。
【００１５】
次に、動的予測について説明する。過去に分岐したか否かの結果を履歴テーブルに記録し、その履歴テーブルを基に分岐するか否かを予測する。分岐すると予測した場合には、ステップＳ１３０２により、第１のステージ１３０に戻り、分岐先のラベル名Ｔａｒｇｅｔ０のアドレスを計算する。その後のステップＳ１３０３は上記と同様である。
【００１６】
図１４は、ＢＴＢ（Branch Target Buffer)を用いた分岐ペナルティ削減方法を示す図である。ＢＴＢは、分岐命令自身のアドレスと分岐先アドレスを記憶するバッファである。ステージ１３１において、ステップＳ１４０１により、読み出した分岐命令が分岐するか否かを予測する。分岐すると予測した場合には、ステップＳ１４０２において、ＢＴＢは、ステージ１３０で計算した「命令読み出しアドレス」を入力し、「分岐先アドレス」を出力する。次に、ステップＳ１４０３により、ステージ１３１において出力された分岐先アドレスの命令を命令キャッシュメモリから読み出す。これにより、アドレス計算ステージ１３０をバイパスし、分岐先アドレス計算時間を短縮することができる。
【００１７】
また、下記の特許文献１には、命令フェッチ器が分岐予測情報に基づいてキャッシュメモリから命令を先取りする情報処理装置が記載されている。
【００１８】
また、下記の特許文献２には、分岐方向を指定する分岐予測情報を含む複数の分岐命令を格納する記憶手段と、前記分岐予測情報に応じて前記記憶手段から次に実行すべき命令を先取りする先取り手段と、前記分岐命令の実行結果に応じて該分岐命令の分岐予測情報を更新する更新手段とを含むことを特徴とする情報処理装置が記載されている。
【００１９】
【特許文献１】特開平１０−２２８３７７号公報
【特許文献２】特開昭６３−０７５９３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
上記の動的分岐方向予測及びＢＴＢは効果が高いが、履歴テーブル及びバッファを使用するため、半導体チップ面積及び消費電力が増大する欠点がある。
【００２１】
本発明の目的は、分岐ペナルティを削減することができる小型及び／又は小消費電力の情報処理装置を提供することである。
【課題を解決するための手段】
【００２２】
本発明の情報処理装置は、命令を記憶するための命令キャッシュメモリと、入力された分岐命令内のプログラムカウンタ相対分岐先アドレス及びプログラムカウンタ値を加算し、絶対分岐先アドレスを出力する第１の加算器と、前記入力された分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換してその置換した分岐命令を前記命令キャッシュメモリに書き込む書き込み回路とを有することを特徴とする。
【００２３】
また、本発明の情報処理装置は、命令を記憶するための命令キャッシュメモリと、プログラムカウンタ相対分岐命令及びその他の命令を並んで入力すると、前記プログラムカウンタ相対分岐命令が特定の位置になるように前記プログラムカウンタ相対分岐命令及びその他の命令を並び替えて前記命令キャッシュメモリに書き込むと共に、前記並び替えの情報を前記命令キャッシュメモリに書き込む書き込み回路とを有することを特徴とする。
【発明の効果】
【００２４】
履歴テーブル又はバッファを使用せずに、分岐ペナルティを削減することができるので、半導体チップ面積及び／又は消費電力を小さくすることができる。
【発明を実施するための最良の形態】
【００２５】
図１は、本発明の実施形態による情報処理装置の構成例を示す図である。この情報処理装置は、第１のステージ１３０、第２のステージ１３１、第３のステージ１３２、第４のステージ１３３、第５のステージ１３４の５ステージのパイプライン処理を行う。
【００２６】
図２は、本実施形態によるパイプライン処理を示す図である。ステージ１３０〜１３４は、それぞれパイプラインステージを示す。まず、第１のステージ１３０では、命令フェッチ制御部１０４が命令読み出しのためのアドレスを計算する。次に、第２のステージ１３１では、命令フェッチ制御部１０４が命令キャッシュメモリ１０２から命令キュー１０３に命令を読み出す。次に、第３のステージ１３２では、命令デコーダ１０５が、レジスタ１０９から値を読み出して演算器１０７に出力すると共に、命令の解釈（デコード）を行う。次に、第４のステージ１３３では、演算器１０７は、命令の演算実行を行う。次に、第５のステージ１３４では、演算器１０７の演算結果をレジスタ１０９に書き込む。
【００２７】
以下、詳細に説明する。ＣＰＵ（中央演算処理装置）１０１は、マイクロプロセッサであり、バス１２０を介してメインメモリ１２１に接続される。メインメモリ１２１は、例えばＳＤＲＡＭであり、バス１２２を介して外部バス１２０に接続される。ＣＰＵ１０１は、命令キャッシュメモリ１０２、命令キュー（プリフェッチバッファ）１０３、命令フェッチ制御部１０４、命令デコーダ１０５、分岐ユニット１０６、演算器１０７、ロード及びストア部１０８、レジスタ１０９、変換回路１２３並びに選択回路１２４を有する。
【００２８】
変換回路１２３は、バス１１７ａを介して外部バス１２０に接続され、バス１１７ｂを介して命令キャッシュメモリ１０２に接続される。命令キュー１０３は、命令用バス１１２を介して命令キャッシュメモリ１０２に接続される。命令キャッシュメモリ１０２は、頻繁に使用する命令（プログラム）の一部を予めメインメモリ１２１から読み込み記憶し、逆に使用されないものから追い出していく。ＣＰＵ１０１が要求する命令が命令キャッシュメモリ１０２上にある場合をキャッシュヒットという。キャッシュヒットした場合には、ＣＰＵ１０１は命令キャッシュメモリ１０２から命令を受け取ることができる。それに対し、ＣＰＵ１０１が要求する命令が命令キャッシュメモリ１０２上にない場合をキャッシュミスという。キャッシュミスの場合は、命令キャッシュメモリ１０２がバスアクセス信号１１６によりメインメモリ１２１に命令の読み出し要求を行う。ＣＰＵ１０１は、命令キャッシュメモリ１０２を介してメインメモリ１２１から命令を読み出すことができる。バス１１２の転送速度は、外部バス１２０の転送速度に比べて極めて速い。したがって、キャッシュヒットした場合には、キャッシュミスした場合に比べ、命令読み出し速度が極めて速い。また、命令（プログラム）がシーケンシャルに読み出される可能性が高いことからキャッシュヒット率が高くなるので、命令キャッシュメモリ１０２を設けることにより、ＣＰＵ１０１の命令読み出し速度が全体的に速くなる。
【００２９】
変換回路１２３は、メインメモリ１２１及び命令キャッシュメモリ１０２間に接続され、メインメモリ１２１から読み出した命令が分岐命令である場合には、分岐命令内のプログラムカウンタ相対分岐先アドレスを絶対分岐先アドレスに置換してその置換した分岐命令を命令キャッシュメモリ１０２に書き込む書き込み回路を有する。その詳細は、後に図３を参照しながら説明する。
【００３０】
命令キュー１０３は、複数の命令を記憶可能であり、バス１１２を介して命令キャッシュメモリ１０２に接続され、バス１１５を介して命令デコーダ１０５に接続される。すなわち、命令キュー１０３は、命令キャッシュメモリ１０２からの命令を書き込み、その命令を読み出して命令デコーダ１０５に出力する。命令フェッチ制御部１０４は、命令キャッシュメモリ１０２に対してキャッシュアクセス制御信号１１０を入出力し、命令キュー１０３の入出力を制御する。命令デコーダ１０５は、命令キュー１０３に蓄えられた命令をデコードする。
【００３１】
演算器１０７は、複数の命令を同時実行可能である。選択回路１２４は、命令デコーダ１０５がデコードした命令のうち同時実行可能な命令があれば、同時実行させる複数の命令を選択して演算器１０７に出力する。演算器１０７は、レジスタ１０９から値を入力し、命令デコーダ１０５がデコードした命令を１命令単位で又は複数命令同時に演算実行する。レジスタ１０９には、演算器１０７の実行結果が書き込まれる。ロード及びストア部１０８は、命令デコーダ１０５がデコーダした命令がロード又はストア命令であるときに、レジスタ１０９及びメインメモリ１２１間でロード又はストアを行う。
【００３２】
命令フェッチ制御部１０４は、命令キャッシュメモリ１０２から読み出した命令が分岐命令であるとき、その分岐先命令をプリフェッチ要求し、それ以外の時はシーケンシャルに命令のプリフェッチ要求を行う。具体的には、命令フェッチ制御部１０４は、キャッシュアクセス制御信号１１０を命令キャッシュメモリ１０２に出力することによりプリフェッチ要求する。プリフェッチ要求により、命令キャッシュメモリ１０２から命令キュー１０３に命令がプリフェッチされる。
【００３３】
このように分岐命令を実行する前の命令キャッシュメモリ１０２からの読み出しの段階で分岐先命令のプリフェッチ要求を行う。この後、分岐命令を実行した段階で、分岐の有無が決定する。すなわち、演算器１０７の演算により分岐命令の直前の命令が実行され、実行結果がレジスタ１０９に書き込まれる。このレジスタ１０９内の実行結果１１９は、分岐ユニット１０６に入力される。演算器１０７の演算により分岐命令が実行され、分岐条件が成立したかを示す情報が例えばレジスタ１０９内に設けられたフラグを介して分岐ユニット１０６に入力される。命令デコーダ１０５は、命令デコーダ１０５がデコードした命令が分岐命令であるとき、分岐命令デコード通知信号１１３を分岐ユニット１０６に出力する。分岐ユニット１０６は、分岐命令デコード通知信号１１３及び分岐命令実行結果１１９に応じて、分岐命令実行通知信号１１４を命令フェッチ制御部１０４に出力する。すなわち、分岐命令の実行結果に応じて、分岐命令実行通知信号１１４を用いて分岐するか否かを通知する。命令フェッチ制御部１０４は、分岐する場合には上記でプリフェッチ要求した分岐先命令を命令キュー１０２にプリフェッチし、分岐しない場合には上記でプリフェッチ要求した分岐先命令のプリフェッチを行わずに無視し、シーケンシャルの命令のプリフェッチ、デコード及び実行を行うと共に、アクセスキャンセル信号１１１を命令キャッシュメモリ１０２に出力する。命令キャッシュメモリ１０２は、既に上記の分岐先のプリフェッチ要求を受けており、キャッシュミスした場合にはメインメモリ１２１にアクセスしようとしている。命令キャッシュメモリ１０２は、アクセスキャンセル信号１１１を入力すると、メインメモリ１２１へのアクセスをキャンセルする。これにより、不要なメインメモリ１２１へのアクセスをなくし、性能低下を防止できる。
【００３４】
なお、実行結果１１９は、説明の簡単のために、レジスタ１０９から分岐ユニット１０６に入力されるように示したが、実際にはバイパス回路を用いることにより実行ステージ１３３の実行完了を待たずに、実行結果１１９を分岐ユニット１０６に入力することができる。
【００３５】
変換回路１２３は、メインメモリ１２１から命令キャッシュメモリ１０２に命令を読み出す際に、読み出した命令が分岐命令であれば、その絶対分岐先アドレスを計算して、命令キャッシュメモリ１０２に書き込んでおく。これにより、ステージ１３１において、ステップＳ２０１により命令キャッシュメモリ１０２から命令を読み出し、その命令が分岐命令でありかつ分岐すると予測した場合には、ステップＳ２０２によりステージ１３０をバイパスして、ステージ１３１により分岐先アドレスの命令を命令キャッシュメモリ１０２から読み出すことができる。この際、履歴テーブル又はバッファを使用せずに、ステージ１３０をバイパスし、分岐ペナルティを削減することができる。その後、分岐命令の演算実行ステージ１３３により、分岐するか否かが確定する。予測が外れた場合には、その予測した命令をキャンセルし、ステップＳ２０３により、第２のステージ１３１に戻り、命令キャッシュメモリ１０２から次の命令を読み出す。予測が当たった場合には、分岐ペナルティを削減することができる。
【００３６】
図３は、図１の変換回路１２３の構成例を示す図である。変換回路１２３は、メインメモリ１２１から入力した命令３１２が分岐命令である場合には、その分岐命令３１２内の相対分岐先アドレス３２４を絶対分岐先アドレス３２５に変換して、その変換した命令３１３を命令キャッシュメモリ１０２に出力する。変換回路１２３は、加算器３０１を有する。
【００３７】
プログラムカウンタ相対分岐命令３１２がメインメモリ１２１から入力された場合を説明する。プログラムカウンタ値３１１は、図１のレジスタ１０９内のプログラムカウンタから読み出した値であり、現在読み出して実行処理しているメインメモリ１２１内の３２ビットのアドレスを示す。プログラムカウンタ相対分岐命令３１２が入力されると、プログラムカウンタ値３１１はプログラムカウンタ相対分岐命令３１２のアドレスと同じ値になる。
【００３８】
１命令は３２ビット（４バイト）長である。分岐命令３１２は、条件３２１、オペコード３２２、ヒント情報３２３及びオフセット（プログラムカウンタ相対分岐先アドレス）３２４を含む。条件３２１、オペコード３２２及びヒント情報３２３は、分岐命令３１２の１６ビット目から３１ビット目までの１６ビットである。オフセット３２４は、分岐命令３１２の０ビット目から１５ビット目までの１６ビットである。条件３２１は、分岐するか否かの判定条件であり、例えばゼロフラグ又はキャリフラグ等である。ＢＥＱ命令の条件３２１は、ゼロフラグである。オペコード３２２は、命令の種類を示す。変換回路１２３は、命令内のオペコード３２２を調べることにより、その命令が分岐命令であるか否かを判断することができる。ヒント情報３２３は、分岐命令３１２が分岐するか否かを予測するためのヒント情報である。オフセット３２４は、プログラムカウンタ相対分岐先アドレスであり、プログラムカウンタ値３１１を基準にした相対アドレスである。分岐命令３１２が分岐する場合には、プログラムカウンタ相対分岐先アドレス３２４が示すアドレスに分岐する。
【００３９】
変換回路１２３が入力命令が分岐命令であると判断したときには、加算器３０１は分岐命令３１２内の１６ビットのオフセット３２４とプログラムカウンタ値３１１内の２ビット目から１７ビット目までの１６ビットとを加算し、絶対分岐先アドレスを出力する。なお、命令長は３２ビット長であるので、プログラムカウンタ値３１１の０ビット目及び１ビット目は必ず「００（２進数）」になる。したがって、加算器３０１は、プログラムカウンタ値３１１の下位２ビットを加算する必要がない。また、加算器３０１はプログラムカウンタ値３１１の１８ビット目から３１ビット目までの１４ビットを加算していないが、この１４ビットは後に図６の処理において加算される。その詳細は、後に説明する。
【００４０】
加算器３０１の出力は、下位１６ビットの絶対分岐先アドレス３２５及び２ビットのキャリ情報ＣＢを含む。キャリ情報ＣＢは、桁上がり及び桁下がりの情報を含む。変換回路１２３は、入力された分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３２４を絶対分岐先アドレス３２５に置換してその置換した分岐命令３１３及びキャリ情報ＣＢを命令キャッシュメモリ１０２に書き込む。すなわち、分岐命令３１３は、分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３２４を絶対分岐先アドレス３２５に置換した分岐命令である。
【００４１】
以上のように、プログラムカウンタ値３１１は、上位１４ビット及び下位１８ビットに分割される。加算器３０１は、プログラムカウンタ値３１１の下位１８ビットの全部又は一部のビットとプログラムカウンタ相対分岐先アドレス３２４を加算する。
【００４２】
加算器３０１が出力する絶対分岐先アドレスは、プログラムカウンタ相対分岐先アドレス３２４と同じビット数の絶対分岐先アドレス３２５及びキャリ情報ＣＢに分割される。変換回路１２３は、分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３２４を絶対分岐先アドレス３２５に置換し、その置換した分岐命令３１３及びキャリ情報ＣＢを命令キャッシュメモリ１０２に書き込む書き込み回路を有する。
【００４３】
図４は、セットアソシアティブ方式の命令キャッシュメモリ１０２を説明するための図である。例として、２ウェイのセットアソシアティブ方式を説明する。命令キャッシュメモリ１０２は、第１のウェイのキャッシュデータＲＡＭ４０１及びそれに対応するキャッシュタグアドレスＲＡＭ４１１と、第２のウェイのキャッシュデータＲＡＭ４０２及びそれに対応するキャッシュタグアドレスＲＡＭ４１２とを有する。
【００４４】
キャッシュデータＲＡＭ４０１及び４０２には、メインメモリ１２１のデータがブロック単位で記憶される。キャッシュタグアドレスＲＡＭ４１１及び４１２には、それぞれキャッシュデータＲＡＭ４０１及び４０２に記憶されたデータブロックのアドレスが記憶される。メインメモリ１２１内の命令のアドレスは、例えば３２ビット長であり、上記のプログラムカウンタ値３１１と同様に０ビット目及び１ビット目が必ず「００（２進数）」になる。そのアドレスの１２ビット目から３１ビット目までの２０ビットがキャッシュタグアドレスＲＡＭ４１１及び４１２に記憶される。また、そのアドレスの５ビット目から１１ビット目までの７ビットは、各キャッシュタグアドレスＲＡＭ４１１，４１２内の位置を表す。また、そのアドレスの２ビット目から４ビット目までの３ビットは、そのタグアドレスで示されるキャッシュデータＲＡＭ４０１及び４０２のブロック内の位置を表す。以上のように、命令キャッシュメモリ１０２は、キャッシュデータＲＡＭ４０１，４０２内の命令及びその命令のタグアドレス（キャッシュタグアドレスＲＡＭ４１１，４１２内）を対応付けて記憶する。
【００４５】
メインメモリ１２１内の同じ領域内のブロックデータは、第１のウェイのキャッシュデータＲＡＭ４０１及び第２のウェイのキャッシュデータＲＡＭ４０２の２箇所に記憶可能である。
【００４６】
キャッシュメモリには、フルアソシアティブ方式及びセットアソシアティブ方式がある。フルアソシアティブ方式は、ウェイに分かれておらず、メインメモリ１２１内の同じ領域内のブロックデータをキャッシュメモリ１０２に記憶可能な数の制限がない。セットアソシアティブ方式は、フルアソシアティブ方式に比べ、要求アドレスとキャッシュタグアドレスＲＡＭ４１１，４１２との比較数が少なくてすむ。
【００４７】
図５は、図１の命令キャッシュメモリ１０２及び命令フェッチ制御部１０４の構成例を示す図である。キャッシュデータＲＡＭ４０１，４０２及びキャッシュタグアドレスＲＡＭ４１１，４１２は、キャッシュメモリ１０２内に設けられる。フリップフロップ５０１及び比較器５０２は、命令フェッチ制御部１０４内に設けられる。
【００４８】
以下、命令フェッチ制御部１０４が、読み出しアドレスＲＡの命令が命令キャッシュメモリ１０２内に記憶されているか否かを検索し、記憶されていればその命令を命令キャッシュメモリ１０２から読み出して出力する手順を説明する。
【００４９】
命令フェッチ制御部１０４は、図２のステージ１３０で読み出しアドレスＲＡを計算する。読み出しアドレスＲＡは、メインメモリ１２１内の３２ビットのアドレスである。タグアドレスＲＡ１は、読み出しアドレスＲＡの１２ビット目から３１ビット目までの２０ビットのアドレスである。インデックスアドレスＲＡ２は、読み出しアドレスＲＡの５ビット目から１１ビット目までの７ビットのアドレスである。ブロックアドレスＲＡ３は、読み出しアドレスＲＡの２ビット目から１１ビット目までの１０ビットのアドレスである。
【００５０】
フリップフロップ５０１は、タグアドレスＲＡ１を記憶し、比較器５０２に出力する。キャッシュタグアドレスＲＡＭ４１１は、インデックスアドレスＲＡ２に対応する位置に格納されているタグアドレスを比較器５０２に出力する。キャッシュタグアドレスＲＡＭ４１２は、インデックスアドレスＲＡ２に対応する位置に格納されているタグアドレスを比較器５０２に出力する。キャッシュデータＲＡＭ４０１は、ブロックアドレスＲＡ３に対応する位置に格納されているデータをセレクタ５０３に出力する。キャッシュデータＲＡＭ４０２は、ブロックアドレスＲＡ３に対応する位置に格納されているデータをセレクタ５０３に出力する。
【００５１】
比較器５０２は、フリップフロップ５０１が出力するタグアドレスＲＡ１が、キャッシュタグアドレスＲＡＭ４１１又は４１２が出力するタグアドレスと同じであるか否かを比較し、その比較結果をセレクタ５０３に出力する。
【００５２】
セレクタ５０３は、キャッシュタグアドレスＲＡＭ４１１が出力するタグアドレスと同じであるときにはキャッシュデータＲＡＭ４０１が出力するデータを選択し、キャッシュタグアドレスＲＡＭ４１２が出力するタグアドレスと同じであるときにはキャッシュデータＲＡＭ４０２が出力するデータを選択し、命令キュー１０３に出力する。なお、タグアドレスＲＡ１が、キャッシュタグアドレスＲＡＭ４１１及び４１２が出力するタグアドレスのいずれとも異なる場合には、キャッシュミスであり、命令キャッシュメモリ１０２がバスアクセス信号１１６によりメインメモリ１２１に命令の読み出し要求を行う。
【００５３】
図５の横軸は時間をも表す。期間Ｔ１は、読み出しアドレスＲＡのデータを命令キャッシュメモリ１０２から読み出すサイクル期間を示す。期間Ｔ１１は、読み出しアドレスＲＡを入力してから比較器５０２での比較前までの期間を示す。タグアドレスＲＡ１は、期間Ｔ１１では使用せず、その後の比較器５０２の比較において使用する。そこで、この期間Ｔ１１を用いて、図６の加算器６０３の加算を行う。以下、その詳細を説明する。
【００５４】
図６は、分岐命令読み出し期間Ｔ１及び分岐先命令読み出し期間Ｔ２の命令キャッシュメモリ１０２及び命令フェッチ制御部１０４の処理を示す図である。期間Ｔ１は、命令フェッチ制御部１０４が命令キャッシュメモリ１０２から分岐命令を読み出す期間である。期間Ｔ２は、期間Ｔ１で読み出した分岐命令が分岐すると予測した場合に、命令フェッチ制御部１０４が命令キャッシュメモリ１０２からその分岐先命令を読み出す期間である。
【００５５】
期間Ｔ１では、図５の説明と同様にして、命令フェッチ制御部１０４は、読み出しアドレスＲＡの分岐命令を命令キャッシュメモリ１０２から読み出し、セレクタ５０３から出力する。セレクタ５０３は、命令キャッシュメモリ１０２内の図３に示す分岐命令３１３及びキャリ情報ＣＢを出力する。分岐命令３１３は、絶対分岐先アドレス３２５を含む。絶対分岐先アドレス３２５は、３２ビットの絶対分岐先アドレスのうちの２ビット目から１７ビット目までの１６ビットのアドレスである。
【００５６】
タグアドレスＡＡ１は、タグアドレスＲＡ１（図５）に対応し、３２ビットの絶対分岐先アドレスの１２ビット目から１７ビット目までの６ビットのアドレスである。インデックスアドレスＡＡ２は、インデックスアドレスＲＡ２（図５）に対応し、３２ビットの絶対分岐先アドレスの５ビット目から１１ビット目までの７ビットのアドレスである。ブロックアドレスＡＡ３は、タグアドレスＲＡ３（図５）に対応し、３２ビットの絶対分岐先アドレスの２ビット目から１１ビット目までの１０ビットのアドレスである。
【００５７】
フリップフロップ６０１は、キャリ情報ＣＢを記憶し、加算器６０３に出力する。プログラムカウンタ値３１１は、プログラムカウンタの値であり、現在、期間Ｔ１で読み出した分岐命令のアドレスになっている。加算器６０３は、プログラムカウンタ値３１１のうちの１８ビット目から３１ビット目までの１４ビットのアドレスと、フリップフロップ６０１が出力するキャリ情報ＣＢとを加算し、１４ビットのタグアドレスを比較器６０４に出力する。フリップフロップ６０２は、タグアドレスＡＡ１を記憶し、比較器６０４に出力する。比較器６０４は、加算器６０３及びフリップフロップ６０２から１２ビット目から３１ビット目までの２０ビットのタグアドレスを入力する。
【００５８】
キャッシュタグアドレスＲＡＭ４１１は、インデックスアドレスＡＡ２に対応する位置に格納されているタグアドレスを比較器６０４に出力する。キャッシュタグアドレスＲＡＭ４１２は、インデックスアドレスＡＡ２に対応する位置に格納されているタグアドレスを比較器６０４に出力する。キャッシュデータＲＡＭ４０１は、ブロックアドレスＡＡ３に対応する位置に格納されているデータをセレクタ６０５に出力する。キャッシュデータＲＡＭ４０２は、ブロックアドレスＡＡ３に対応する位置に格納されているデータをセレクタ６０５に出力する。
【００５９】
比較器６０４は、加算器６０３及びフリップフロップ６０２が出力するタグアドレスが、キャッシュタグアドレスＲＡＭ４１１又は４１２が出力するタグアドレスと同じであるか否かを比較し、その比較結果をセレクタ６０５に出力する。
【００６０】
セレクタ６０５は、キャッシュタグアドレスＲＡＭ４１１が出力するタグアドレスと同じであるときにはキャッシュデータＲＡＭ４０１が出力するデータを選択し、キャッシュタグアドレスＲＡＭ４１２が出力するタグアドレスと同じであるときにはキャッシュデータＲＡＭ４０２が出力するデータを選択し、命令キュー１０３に出力する。これにより、セレクタ６０５は、分岐先命令を命令キュー１０３に出力することができる。
【００６１】
なお、加算器６０３及びフリップフロップ６０２が出力するタグアドレスが、キャッシュタグアドレスＲＡＭ４１１及び４１２が出力するタグアドレスのいずれとも異なる場合には、キャッシュミスであり、命令キャッシュメモリ１０２がバスアクセス信号１１６によりメインメモリ１２１に命令の読み出し要求を行う。
【００６２】
以上のように、比較器６０４は、命令キャッシュメモリ１０２に書き込まれた分岐命令が読み出されると、その分岐命令内の絶対分岐先アドレス３２５、キャリ情報ＣＢ及びプログラムカウンタ値３１１の上位ビットを基にしたタグアドレスと命令キャッシュメモリ１０２内のタグアドレスとを比較する。また、比較器６０４は、前記分岐命令が分岐するとの予測が行われた場合に前記比較を行う。命令フェッチ制御部１０４は、前記比較の結果、一致した場合には、その一致したタグアドレスに対応する分岐先命令を命令キャッシュメモリ１０２から読み出す読み出し回路を有する。
【００６３】
以上のように、図３の変換回路１２３ではプログラムカウンタ値３１１内の１８ビット目から３１ビット目までのタグアドレスの加算を行っていなかった。本実施形態では、加算器６０３が、その１８ビット目から３１ビット目までのタグアドレスの加算を分岐先命令の読み出し処理と並行して行う。
【００６４】
図７は、図１の変換回路１２３の構成例を示す図である。命令キャッシュメモリ１０２はメインメモリ１２１から複数の命令（例えば２個の命令）を並んで入力し、演算器１０７は命令キャッシュメモリ１０２内の複数の命令を同時実行可能である。その場合、変換回路１２３は、複数の命令のうちから分岐命令を選択し、分岐命令内の分岐先アドレスを決定する必要がある。
【００６５】
変換回路１２３は、プログラムカウンタ相対分岐命令及びその他の命令（例えばＡｄｄ命令）を並んで入力すると、セレクタ７１１及び７１２により、前記プログラムカウンタ相対分岐命令が特定の位置になるように前記プログラムカウンタ相対分岐命令及びその他の命令を並び替えて命令キャッシュメモリ１０２に書き込むと共に、その並び替えの情報７０３を命令キャッシュメモリ１０２に書き込む書き込み回路を有する。
【００６６】
命令群７０１は、メインメモリ１２１から変換回路１２３に並んで入力された２個の命令であり、分岐命令及びＡｄｄ命令を含む。分岐命令は３２ビット目から６３ビット目に位置し、Ａｄｄ命令は０ビット目から３１ビット目に位置する。
【００６７】
セレクタ７１１及び７１２は、命令群７０１内の命令を並び替えて命令群７０２を出力する。変換回路１２３は、命令群７０２及び並び替え情報７０３を命令キャッシュメモリ１０２に書き込む。命令群７０２は、変換回路１２３が命令キャッシュメモリ１０２に書き込んだ２個の命令であり、Ａｄｄ命令及び分岐命令を含む。Ａｄｄ命令は３２ビット目から６３ビット目に位置し、分岐命令は０ビット目から３１ビット目に位置する。
【００６８】
並び替え情報７０３は、分岐命令をどの命令と入れ替えたかを示す情報を含む。セレクタ７１１及び７１２は、命令キャッシュメモリ１０２に書き込む命令群７０１において分岐命令が必ず０ビット目から３１ビット目に位置するように並び替えを行う。これにより、分岐命令は、必ず０ビット目から３１ビット目までの位置から読み出されるので、分岐命令内の分岐先アドレスを決定する速度を速くすることができる。
【００６９】
図１の選択回路１２４は、命令キャッシュメモリ１０２内の並び替えの情報７０３を基にプログラムカウンタ相対分岐命令及びその他の命令を演算器１０７に出力する順番を制御する制御回路を有する。
【００７０】
演算器１０７は、複数の命令を同時実行可能である。選択回路１２４内の制御回路は、並び替えの情報７０３を基に同時実行させる命令キャッシュメモリ１０２内の複数の命令を選択して演算器１０７に出力する。
【００７１】
図８は、１個のメインメモリ１２１及び２個のＣＰＵ１０１ａ，１０１ｂがバス１２０に接続されている図である。ＣＰＵ１０１ａは命令キャッシュメモリ１０２ａを有し、ＣＰＵ１０１ｂは命令キャッシュメモリ１０２ｂを有する。ＣＰＵ１０１ａ及び１０１ｂは図１のＣＰＵ１０１に対応し、命令キャッシュメモリ１０２ａ及び１０２ｂは図１の命令キャッシュメモリ１０２に対応する。
【００７２】
２個のＣＰＵ１０１ａ及び１０２ｂは、それぞれメインメモリ１２１から命令を読み出し、命令キャッシュメモリ１０２ａ及び１０２ｂに書き込むことができる。ＣＰＵ１０１ａは、上記の方法により、メインメモリ１２１内の分岐命令をプログラムカウンタ相対分岐先アドレスから絶対分岐先アドレスに置換して命令キャッシュメモリ１０２ａに書き込む。ＣＰＵ１０１ｂが一般的なＣＰＵである場合、ＣＰＵ１０１ｂは、メインメモリ１２１内の分岐命令をそのまま命令キャッシュメモリ１０２ｂに書き込む。
【００７３】
ここで、ＣＰＵ１０１ｂは、直接、ＣＰＵ１０１ａ内の命令キャッシュメモリ１０２ａから命令を読み出し、命令キャッシュメモリ１０２ｂに書き込むことができる。その場合、ＣＰＵ１０１ａは、命令キャッシュメモリ１０２ａ内の分岐命令を絶対分岐先アドレスからプログラムカウンタ相対分岐先アドレスに戻し、ＣＰＵ１０１ｂに出力する必要がある。また、ＣＰＵ１０１ａ内の１次命令キャッシュメモリから２次命令キャッシュメモリに命令を戻す場合も同様である。以下、その処理回路を説明する。
【００７４】
図９は、ＣＰＵ１０１ａ内の変換回路１２３の構成例を示す図であり、図３の変換の逆変換を行う回路を示す。変換回路１２３は、命令キャッシュメモリ１０２内の分岐命令３１３及びキャリ情報ＣＢを元の分岐命令３１２に逆変換し、ＣＰＵ１０１ｂに出力する。否定（ＮＯＴ）回路９０１は、プログラムカウンタ値（分岐命令のアドレス）３１１の２ビット目から１７ビット目までの１６ビットのアドレスを論理反転し、加算器９０２に出力する。分岐先アドレス３２５は、分岐命令３１３内の１６ビットの絶対分岐先アドレスである。加算器９０２は、ＮＯＴ回路９０１が出力するアドレスと、絶対分岐先アドレス３２５と、１とを加算し、加算器９０３に出力する。その結果、加算器９０２の出力値は、絶対分岐先アドレス３２５から、プログラムカウンタ値３１１の２ビット目から１７ビット目までの１６ビットのアドレスを減算したアドレス値を出力する。次に、加算器９０３は、加算器９０２が出力するアドレス値とキャリ情報ＣＢとを加算し、プログラムカウンタ相対分岐先アドレス３２４を出力する。
【００７５】
分岐命令３１２は、分岐命令３１３内の絶対分岐先アドレス３２５をプログラムカウンタ相対分岐先アドレス３２４に変換した命令である。変換回路１２３は、分岐命令３１２を他のＣＰＵ１０２ｂに出力する。
【００７６】
以上のように、変換回路１２３は、命令キャッシュメモリ１０２ａに書き込まれた分岐命令３１３内の絶対分岐先アドレス３２５及びキャリ情報ＣＢをプログラムカウンタ相対分岐先アドレス３２４に置換して元の分岐命令３１２を生成するために、分岐命令３１３内の絶対分岐先アドレス３２５、キャリ情報ＣＢ及びプログラムカウンタ値３１１を基にプログラムカウンタ相対分岐先アドレス３２４を演算する加算器９０２及び９０３を有する。図３の加算器３０１及び図９の加算器９０２，９０３は共用することができる。
【００７７】
図１０は、図１の変換回路１２３の他の構成例を示す図である。以下、図１０が図３と異なる点を説明する。変換回路１２３は、メインメモリ１２１から入力した命令３１２が分岐命令である場合には、その分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３１２を絶対分岐先アドレス３２５に変換して、その変換した命令１００１を命令キャッシュメモリ１０２に出力する。変換回路１２３は、加算器３０１及びプリデコーダ１０１１を有する。
【００７８】
加算器３０１は、図３と同様に、プログラムカウンタ値３１１の２ビット目から１７ビット目までの１６ビットのアドレスと、分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３２４とを加算し、絶対分岐先アドレス３２５及びキャリ情報ＣＢを出力する。
【００７９】
プリデコーダ１０１１は、分岐命令３１２内のオペコード３２２をプリデコードし、分岐命令であるか否かを示す１ビットの分岐命令情報１００２及び分岐命令の種類を示すオペコード１００３を出力する。
【００８０】
変換回路１２３は、変換後の分岐命令１００１及び分岐命令情報１００２を命令キャッシュメモリ１０２に書き込む。分岐命令３１２内のプログラムカウンタ相対分岐先アドレス３２４は、分岐命令１００１内の絶対分岐先アドレス３２５に置換される。また、分岐命令３１２内のオペコード３２２は、分岐命令１００１内のキャリ情報ＣＢ、オペコード１００３及び未使用領域１００４に置換される。その他については、分岐命令３１２及び１００１は同じである。
【００８１】
以上のように、変換回路１２３は、分岐命令３１２内のオペコード３２２をキャリ情報ＣＢに置換し、その置換した分岐命令１００１及び分岐命令であることを示す情報１００２を命令キャッシュメモリ１０２に書き込む書き込み回路を有する。
【００８２】
命令キャッシュメモリ１０２には、分岐命令１００１とは別に分岐命令であることを示す情報１００２が格納される。命令デコーダ１０５は、１ビットの分岐命令情報１００２だけで分岐命令であることを判断することができるので、オペコード１００３はオペコード３２２に比べて情報量（ビット数）を少なくすることができる。そこで、分岐命令３１２内のオペコード３２２を、分岐命令１００１内のオペコード１００３及びキャリ情報ＣＢに置換する。これにより、キャリ情報ＣＢを分岐命令１００１内に配置することができる。
【００８３】
以上のように、本実施形態によれば、命令キャッシュメモリへプログラムカウンタ相対分岐命令を格納する際に、分岐命令内のプログラムカウンタ相対分岐先アドレスとプログラムカウンタ値（分岐命令のアドレス）とを加算し、プログラムカウンタ相対分岐先アドレスを絶対分岐先アドレスに置換することで、プログラムカウンタ相対分岐命令を読み出してから分岐先アドレスの命令へアクセスするまでの時間を短縮することができる。これにより、ＢＴＢを搭載することなく相対分岐命令が分岐すると予測した時の分岐ペナルティを短縮することができる。すなわち、履歴テーブル又はバッファを使用せずに、分岐ペナルティを削減することができるので、半導体チップ面積及び／又は消費電力を小さくすることができる。
【００８４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００８５】
本発明の実施形態は、例えば以下のように種々の適用が可能である。
【００８６】
（付記１）
命令を記憶するための命令キャッシュメモリと、
入力された分岐命令内のプログラムカウンタ相対分岐先アドレス及びプログラムカウンタ値を加算し、絶対分岐先アドレスを出力する第１の加算器と、
前記入力された分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換してその置換した分岐命令を前記命令キャッシュメモリに書き込む書き込み回路と
を有することを特徴とする情報処理装置。
（付記２）
前記プログラムカウンタ値は、上位ビット及び下位ビットに分割され、
前記第１の加算器は、前記プログラムカウンタ値の前記下位ビットと前記プログラムカウンタ相対分岐先アドレスを加算することを特徴とする付記１記載の情報処理装置。
（付記３）
前記第１の加算器が出力する絶対分岐先アドレスは、前記プログラムカウンタ相対分岐先アドレスと同じビット数の絶対分岐先アドレス及びキャリ情報に分割され、
前記書き込み回路は、前記分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換し、その置換した分岐命令及び前記キャリ情報を前記命令キャッシュメモリに書き込むことを特徴とする付記２記載の情報処理装置。
（付記４）
前記命令キャッシュメモリは、命令及びその命令のタグアドレスを対応付けて記憶し、
さらに、前記命令キャッシュメモリに書き込まれた分岐命令が読み出されると、その分岐命令内の絶対分岐先アドレス、前記キャリ情報及び前記プログラムカウンタ値の上位ビットを基にしたタグアドレスと前記命令キャッシュメモリ内のタグアドレスとを比較する比較器と、
前記比較の結果、一致した場合には、その一致したタグアドレスに対応する分岐先命令を前記命令キャッシュメモリから読み出す読み出し回路とを有することを特徴とする付記３記載の情報処理装置。
（付記５）
前記比較器は、前記分岐命令が分岐するとの予測が行われた場合に前記比較を行うことを特徴とする付記４記載の情報処理装置。
（付記６）
前記書き込み回路は、プログラムカウンタ相対分岐命令及びその他の命令を並んで入力すると、前記プログラムカウンタ相対分岐命令が特定の位置になるように前記プログラムカウンタ相対分岐命令及びその他の命令を並び替えて前記命令キャッシュメモリに書き込むと共に、前記並び替えの情報を前記命令キャッシュメモリに書き込むことを特徴とする付記４記載の情報処理装置。
（付記７）
さらに、命令を演算実行するための演算器と、
前記命令キャッシュメモリ内の前記並び替えの情報を基に前記プログラムカウンタ相対分岐命令及びその他の命令を前記演算器に出力する順番を制御する制御回路を有することを特徴とする付記６記載の情報処理装置。
（付記８）
前記演算器は、複数の命令を同時実行可能であり、
前記制御回路は、前記並び替えの情報を基に同時実行させる前記命令キャッシュメモリ内の複数の命令を選択して前記演算器に出力することを特徴とする付記７記載の情報処理装置。
（付記９）
さらに、前記命令キャッシュメモリに書き込まれた分岐命令内の絶対分岐先アドレスをプログラムカウンタ相対分岐先アドレスに置換して元の分岐命令を生成するために、前記分岐命令内の絶対分岐先アドレス、前記キャリ情報及びプログラムカウンタ値を基にプログラムカウンタ相対分岐先アドレスを演算する第２の加算器を有することを特徴とする付記４記載の情報処理装置。
（付記１０）
前記第１の加算器及び前記第２の加算器は共用されることを特徴とする付記９記載の情報処理装置。
（付記１１）
前記書き込み回路は、前記分岐命令内のオペコードを前記キャリ情報に置換し、その置換した分岐命令及び分岐命令であることを示す情報を前記命令キャッシュメモリに書き込むことを特徴とする付記４記載の情報処理装置。
（付記１２）
前記第１の加算器が出力する絶対分岐先アドレスは、前記プログラムカウンタ相対分岐先アドレスと同じビット数の絶対分岐先アドレス及びキャリ情報に分割され、
前記書き込み回路は、前記分岐命令内のプログラムカウンタ相対分岐先アドレスを前記絶対分岐先アドレスに置換し、その置換した分岐命令及び前記キャリ情報を前記命令キャッシュメモリに書き込むことを特徴とする付記１記載の情報処理装置。
（付記１３）
前記命令キャッシュメモリは、命令及びその命令のタグアドレスを対応付けて記憶し、
さらに、前記命令キャッシュメモリに書き込まれた分岐命令が読み出されると、その分岐命令内の絶対分岐先アドレス及び前記プログラムカウンタ値を基にしたタグアドレスと前記命令キャッシュメモリ内のタグアドレスとを比較する比較器と、
前記比較の結果、一致した場合には、その一致したタグアドレスに対応する分岐先命令を前記命令キャッシュメモリから読み出す読み出し回路とを有することを特徴とする付記１記載の情報処理装置。
（付記１４）
前記比較器は、前記分岐命令が分岐するとの予測が行われた場合に前記比較を行うことを特徴とする付記１３記載の情報処理装置。
（付記１５）
さらに、前記命令キャッシュメモリに書き込まれた分岐命令内の絶対分岐先アドレスをプログラムカウンタ相対分岐先アドレスに置換して元の分岐命令を生成するために、前記分岐命令内の絶対分岐先アドレス及びプログラムカウンタ値を基にプログラムカウンタ相対分岐先アドレスを演算する第２の加算器を有することを特徴とする付記１記載の情報処理装置。
（付記１６）
前記第１の加算器及び前記第２の加算器は共用されることを特徴とする付記１５記載の情報処理装置。
（付記１７）
前記書き込み回路は、前記分岐命令内のオペコードを前記キャリ情報に置換し、その置換した分岐命令及び分岐命令であることを示す情報を前記命令キャッシュメモリに書き込むことを特徴とする付記３記載の情報処理装置。
（付記１８）
命令を記憶するための命令キャッシュメモリと、
プログラムカウンタ相対分岐命令及びその他の命令を並んで入力すると、前記プログラムカウンタ相対分岐命令が特定の位置になるように前記プログラムカウンタ相対分岐命令及びその他の命令を並び替えて前記命令キャッシュメモリに書き込むと共に、前記並び替えの情報を前記命令キャッシュメモリに書き込む書き込み回路と
を有することを特徴とする情報処理装置。
（付記１９）
さらに、命令を演算実行するための演算器と、
前記命令キャッシュメモリ内の前記並び替えの情報を基に前記プログラムカウンタ相対分岐命令及びその他の命令を前記演算器に出力する順番を制御する制御回路を有することを特徴とする付記１８記載の情報処理装置。
（付記２０）
前記演算器は、複数の命令を同時実行可能であり、
前記制御回路は、前記並び替えの情報を基に同時実行させる前記命令キャッシュメモリ内の複数の命令を選択して前記演算器に出力することを特徴とする付記１９記載の情報処理装置。
【図面の簡単な説明】
【００８７】
【図１】本発明の実施形態による情報処理装置の構成例を示す図である。
【図２】本実施形態によるパイプライン処理を示す図である。
【図３】図１の変換回路の構成例を示す図である。
【図４】セットアソシアティブ方式の命令キャッシュメモリを説明するための図である。
【図５】図１の命令キャッシュメモリ及び命令フェッチ制御部の構成例を示す図である。
【図６】分岐命令読み出し期間及び分岐先命令読み出し期間の命令キャッシュメモリ及び命令フェッチ制御部の処理を示す図である。
【図７】図１の変換回路の構成例を示す図である。
【図８】１個のメインメモリ及び２個のＣＰＵがバスに接続されている図である。
【図９】ＣＰＵ内の変換回路の構成例を示す図である。
【図１０】図１の変換回路の他の構成例を示す図である。
【図１１】分岐命令を含む命令群の例を示す図である。
【図１２】命令のパイプライン処理を示す図である。
【図１３】分岐方向予測を用いた分岐ペナルティ削減方法を示す図である。
【図１４】ＢＴＢ（Branch Target Buffer)を用いた分岐ペナルティ削減方法を示す図である。
【符号の説明】
【００８８】
１０１  ＣＰＵ
１０２  命令キャッシュメモリ
１０３  命令キュー
１０４  命令フェッチ制御部
１０５  命令デコーダ
１０６  分岐ユニット
１０７  演算器
１０８  ロード及びストア部
１０９  レジスタ
１２１  メインメモリ
１２３  変換回路
１２４  選択回路
３０１  加算器
３１１  プログラムカウンタ値
３１２，３１３  分岐命令
ＣＢ  キャリ情報
【図１】
2008165589.tif 000003
【図２】
2008165589.tif 000004
【図３】
2008165589.tif 000005
【図４】
2008165589.tif 000006
【図５】
2008165589.tif 000007
【図６】
2008165589.tif 000008
【図７】
2008165589.tif 000009
【図８】
2008165589.tif 000010
【図９】
2008165589.tif 000011
【図１０】
2008165589.tif 000012
【図１１】
2008165589.tif 000013
【図１２】
2008165589.tif 000014
【図１３】
2008165589.tif 000015
【図１４】
2008165589.tif 000016