(57)【特許請求の範囲】
【請求項１】
命令語を一時的に格納し、命令実行時に前記格納された命令語が読み出される記憶回路と、
前記命令語を入力とし、前記命令語の実効アドレスがＰＣ相対ディスプレースメントとして指定されているかどうかを判定するデコーダと、
前記命令語がＰＣ相対ディスプレースメントを有する場合には、ＰＣ相対ディスプレースメントと予め判定されたＰＣアドレスの下位ビット部分とを加算し、その計算結果を実効アドレス部分として出力する加算回路と、
前記命令語がＰＣ相対ディスプレースメントを有する場合には、命令語のディスプレースメントを、前記加算回路から出力された計算結果に置き換えて、前記置き換え結果を、命令語のｓｅｍｉＡＢＳディスプレースメントとして前記記憶回路に出力するセレクタと、
命令実行時にｓｅｍｉＡＢＳディスプレースメント付き実効アドレスを計算する実効アドレス計算回路と、
前記加算回路の無効キャリービットを復帰させるキャリービット復帰手段と、を備え、
前記キャリービット復帰手段は、
ｓｅｍｉＡＢＳディスプレースメントとＰＣアドレスの下位ビット部分とを比較する比較回路と、
前記比較結果と、ｓｅｍｉＡＢＳディスプレースメントの符号ビットと、ＰＣアドレスにおいてＰＣアドレスの下位ビット部分の最上位ビットよりも上位であるビットと、を入力とすることにより、予め判定された変換テーブルに基づいて、＋１、０、−１のいずれかを選択する選択信号を出力するデコーダと、
前記選択信号に基づいて、ＰＣアドレスの残りのビットに、＋１、０又は−１を加算し、それをＰＣアドレスの残りのビットと等しいビット数を有する実効アドレスの上位部分とすることにより、復帰させるキャリービットを決定する手段と、を有し、
前記実効アドレス計算回路は、前記加算回路で発生するキャリービットを利用せずに、前記実効アドレスを計算するプロセッサ。
【請求項２】
請求項１に記載のプロセッサであって、
前記加算回路によりＰＣ相対ディスプレースメントが加算される前記ＰＣアドレスの下位ビット部分は、当該ＰＣ相対ディスプレースメントの符号ビットを含むビット数に等しい部分であるプロセッサ。
【請求項３】
命令語を一時的に格納し、命令実行時に前記格納された命令語が読み出される記憶回路と、
前記記憶回路に格納する命令語がＰＣ相対ディスプレースメントを有するとき当該命令語のＰＣ相対ディスプレースメント部分を操作する演算部と、
命令実行時に前記記憶回路から読み出される命令語を入力して実効アドレスを計算する実効アドレス計算回路と、を有し、
前記演算部は、
命令語を入力とし、前記命令語の実効アドレスがＰＣ相対ディスプレースメントとして指定されているかどうかを判定するデコーダと、
前記命令語がＰＣ相対ディスプレースメントを有する場合には、符号を除くＰＣ相対ディスプレースメント部分とそれに対応するビット数のＰＣアドレス下位ビット部分とを加算し、その計算結果を実効アドレス部分として出力する加算回路と、
前記命令語がＰＣ相対ディスプレースメントを有する場合には、命令語の前記符号を除くＰＣ相対ディスプレースメント部分を、前記加算回路から出力された計算結果に置き換えて、前記置き換え結果を、命令語のｓｅｍｉＡＢＳディスプレースメントとして前記記憶回路に出力するセレクタとを有し、
前記記憶回路は、前記命令語がＰＣ相対ディスプレースメントを有する場合に前記加算回路からのキャリービットを格納する領域を有し、
前記実効アドレス計算回路は、命令実行時に、前記記憶回路に格納された対応する命令語の符号ビット、ｓｅｍｉＡＢＳディスプレースメント、及びキャリービットを利用してＰＣアドレスから実効アドレスを計算する、プロセッサ。
【請求項４】
請求項３に記載のプロセッサであって、
前記実効アドレス計算回路は、命令実行時に、前記記憶回路に格納された対応する命令語の符号ビット、ｓｅｍｉＡＢＳディスプレースメント、及びキャリービットを入力し、前記入力したｓｅｍｉＡＢＳディスプレースメントを下位側とし、ＰＣアドレス上位ビットと符号ビット拡張結果とを前記キャリービットを利用して加算した結果を上位側とする、実効アドレスを計算する、プロセッサ。
【請求項５】
請求項１に記載のプロセッサであって、
前記記憶回路は、命令キャッシュであるプロセッサ。
【請求項６】
ＰＣ相対ディスプレースメントを含む第１の命令語を、ｓｅｍｉＡＢＳディスプレースメントを含む第２の命令語に変換する間に発生する無効キャリービットを復帰する方法であって、
予め判定されたＰＣアドレスの下位ビット部分とＰＣ相対ディスプレースメントを加算することにより、ｓｅｍｉＡＢＳディスプレースメントを計算すること、
第１の命令語のＰＣ相対ディスプレースメントを、その計算結果に置き換えること、
ｓｅｍｉＡＢＳディスプレースメントを含む第２の命令語を、記憶回路に格納すること、
前記記憶回路に格納された命令語の一部を入力とすること、
加算結果から伝播されたキャリービットを利用せずに、符号ビット拡張を実行すること、
命令実行時にｓｅｍｉＡＢＳディスプレースメント付き実効アドレスを計算すること、
ｓｅｍｉＡＢＳディスプレースメントとＰＣアドレスの下位ビット部分を比較すること、
比較結果と、ｓｅｍｉＡＢＳディスプレースメントの符号ビットと、ＰＣアドレスにおいてＰＣアドレスの下位ビット部分の最上位ビットよりも上位であるビットと、を入力することにより、予め判定された変換テーブルに基づいて、＋１、０、−１のいずれかを選択する選択信号を出力すること、
前記選択信号に基づいて、ＰＣアドレスの残りのビットに、＋１、０又は−１を加算し、それをＰＣアドレスの残りのビットと等しいビット数を有する実効アドレスの上位部分とすることにより、加算ステップの最上位ビットから伝播されたキャリービットを復帰すること、を含み、
前記記憶回路に格納されたｓｅｍｉＡＢＳディスプレースメントは、命令実行時に実効アドレス部分として直ちに利用される方法。
【請求項７】
ＰＣ相対ディスプレースメントを含む第１の命令語を、ｓｅｍｉＡＢＳディスプレースメントを含む第２の命令語に変換する間に発生する無効キャリービットを復帰する方法であって、
予め判定されたＰＣアドレスの下位ビット部分とＰＣ相対ディスプレースメントを加算することにより、ｓｅｍｉＡＢＳディスプレースメントを計算すること、
第１の命令語のＰＣ相対ディスプレースメントを、その計算結果に置き換えること、
ｓｅｍｉＡＢＳディスプレースメントを含む第２の命令語を、記憶回路に格納すること、
前記記憶回路に格納された命令語の一部を入力とすること、
加算結果から伝播されたキャリービットを利用せずに、符号ビット拡張を実行すること、
命令実行時にｓｅｍｉＡＢＳディスプレースメント付き実効アドレスを計算すること、
加算ステップから伝播されたキャリービットを取得するために、ｓｅｍｉＡＢＳディスプレースメントとＰＣアドレスの下位ビット部分を比較すること、
キャリービットと、ｓｅｍｉＡＢＳディスプレースメントの符号ビットと、ＰＣアドレスにおいてＰＣアドレスの下位ビット部分の最上位ビットよりも上位であるビットと、の排他的論理和を取ることにより、第１の命令語のＰＣ相対ディスプレースメントの符号ビットを出力すること、
加算ステップから伝播されたキャリービットを復帰するために、キャリービットと、符号ビットと、ＰＣアドレスにおいてＰＣアドレスの下位ビット部分の最上位ビットよりも上位であるビットと、を加算すること、を含み、
前記記憶回路に格納されたｓｅｍｉＡＢＳディスプレースメントは、命令実行時に実効アドレス部分として直ちに利用される方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，計算機における中央処理装置に用いられるプロセッサに属する。特にプロセッサに用いられているディスプレースメント付きＰＣ相対分岐命令に関する。
【０００２】
【従来の技術】
従来から，プロセッサ内のレジスタの値と命令語に埋め込まれた定数（即値と呼ぶ）を実行時に加算し，その値を分岐先のアドレスとする分岐命令を備えたプロセッサが存在する。特にレジスタとして現在実行中の命令アドレスを示すプログラムカウンタ（ＰＣ）を用いた場合，分岐命令の位置からの相対位置を指定することができる。プログラムの配置アドレスに関わらず常に同じ位置へ分岐を行うことができるため，様々なプロセッサにおいて採用されている。ここで，分岐命令の命令語中の即値をディスプレースメント（以下ｄｉｓｐと略す）と呼び，前述の命令をディスプレースメント付きＰＣ相対分岐命令（以下ＰＣ＋ｄｉｓｐ分岐命令と略す）と呼ぶ。例えばこれは「ＳＨ７７５０プログラミングマニュアル」，日立製作所，１９９８のｐｐ．１０−２２に記載されているＢＲＡ命令などが該当する。
ＰＣ＋ｄｉｓｐ分岐命令の実行には，（１）ｄｉｓｐを多くの場合符号拡張しＰＣとビット幅をそろえＰＣの値と符号拡張したｄｉｓｐを加算して分岐先アドレスを計算，（２）求まった値をアドレスとして命令をフェッチするという２段階の動作がある。符号拡張とはある幅ｍビットを持った符号付き２進整数を幅ｎ（＞ｍ）ビットの符号付き２進整数に変換することを指し，変換元の整数を変換先の下位ｍビットにコピーし，さらに変換元の最上位ビット，すなわち符号ビットを変換先の上位ｎ−ｍビットそれぞれにコピーすることにより実現できる。ここで（１）のアドレス計算の一例を図１に示す。
１１１は実行する命令のアドレス，すなわちＰＣの値であり３２ビットである。１１２はＰＣ＋ｄｉｓｐ分岐命令の命令語であり，下位１２ビットがｄｉｓｐである。命令語１１２のフォーマットを図２に示す。２０１は命令オペコードであり，ＰＣ＋ｄｉｓｐ分岐命令の場合命令オペコード２０１は４ビットである。２０２および２０３はｄｉｓｐの一部であり，上位１ビットを２０２，下位１１ビットを２０３とした２０４は１２ビット符号付きのｄｉｓｐの値となる。すなわち２０２はｄｉｓｐの符号ビットである。
分岐先アドレス１１４は，命令語１１２中の２０４を３２ビット符号拡張した１１３と１１１を３２ビット加算器１２１で加算することにより得られる。
ＰＣ＋ｄｉｓｐ分岐命令では分岐先アドレスを計算するために，本質的にｎビットの加算処理が必要である。ｎビットの加算処理にはオーダｌｏｇｎの時間が必要となり，従来プロセッサでは本加算処理時間は不可避なものと考えられていた。
“Micro Processor Report,” September 13, 1999, pp.12-15, 22によると，上記加算処理時間を削減するためサンマイクロシステムズのＭＡＪＣアーキテクチャではＰＣ＋ｄｉｓｐ分岐命令の代わりにセミアブソリュート分岐（以下ＳｅｍｉＡＢＳ分岐と略す）命令を採用している。セミアブソリュート分岐命令ではアドレスのビットの一部分を絶対アドレスで指定する。図３にＳｅｍｉＡＢＳ分岐命令でのアドレス計算方法を示す。
３１１はＰＣ＋ｄｉｓｐ分岐命令と同様にＰＣの値である。３１２はＳｅｍｉＡＢＳ分岐命令の命令語であり，図４にＳｅｍｉＡＢＳ分岐命令の命令フォーマットを示す。４０１は命令オペコード及び分岐先アドレス計算に用いるオペランド以外のオペランド部分である。４０２及び４０３が分岐先アドレス計算に用いるオペランド部分であり，命令語３１１の下位１２ビット部分が４０３，その上位２ビットが４０２となっている。
分岐先アドレス３１４の計算については，下位２ビットは”００”（定数）とし，その上位の１２ビット部分は命令語３１２中の４０３がそのまま入る。上位１８ビット部分については，命令語３１２中の４０２を１８ビット符号拡張した３１３と３１１を１８ビット加算器３２１で加算し，出力とする。
ＳｅｍｉＡＢＳ分岐ではＰＣ＋ｄｉｓｐ分岐と比較して分岐先アドレス計算に必要となる加算器の桁数が少なくて済むため，遅延時間を短く押さえることができ，動作周波数の向上が期待できる。
特に命令キャッシュを具備するプロセッサの場合，ＳｅｍｉＡＢＳ分岐では高速化が可能となる。分岐命令の実行においては分岐先アドレス計算の次に命令キャッシュへのアクセスが必要となるが，通常キャッシュの動作は（１）アドレスのうちインデックス部となる部分をキャッシュアレイに入力し対応するタグ部とデータを読み出し，（２）アドレスのタグ部と対応する部分と（１）で出力されたタグ部を比較し，一致する場合キャッシュヒットとしてデータを出力するという２段階に分かれている。すなわちキャッシュへのインデックス部入力は，タグ部の入力よりもタイミング上先に行う必要がある。また，アドレスのうちインデックス部となる部分は，通常はアドレスの下位部分に配置されている。
ＳｅｍｉＡＢＳ分岐では分岐先アドレスの下位部分は加算を行うことなくそのまま出力されるため，インデックス部のビット範囲が加算されないビット範囲に含まれる時，分岐先アドレスの上位部分の計算の完了を待たずに並列にキャッシュアレイのアクセスを開始することができ，分岐命令の実行が全体として高速化される。
【０００３】
【発明が解決しようとする課題】
上記の従来技術では高速な分岐を実現するために，ＰＣ＋ｄｉｓｐ分岐の代わりに新しいＳｅｍｉＡＢＳ分岐を導入している。しかし，ＳｅｍｉＡＢＳ分岐論理方式を採用する新たなプロセッサではＳｅｍｉＡＢＳ分岐を採用していない命令によって書かれたプログラムを実行できない，すなわち，既存のＰＣ＋ｄｉｓｐ分岐命令を有するプロセッサ上で動作するオブジェクトコードにはＳｅｍｉＡＢＳ分岐命令が含まれていないため，高速化の恩恵を受けることができない。
また，ＳｅｍｉＡＢＳ分岐では分岐先アドレスの一部分を絶対アドレスで指定する必要があるため，コンパイル時に分岐先アドレスの範囲に収まっているかどうかが判定できない，コンパイル後のオブジェクトコードがリロケータブルにならない，という弊害がある。リロケータブルとは，オブジェクトコードの配置アドレスに関わらず，そのオブジェクトコードが実行可能であることを指す。
本発明が解決しようとする課題の１つは，以上の問題に鑑みプロセッサの命令セットを新規に用意，または既存の命令セットに命令を追加することなく，ＰＣ＋ｄｉｓｐ分岐命令の動作を高速化することである。また，ＰＣ＋ｄｉｓｐ分岐命令を削除する必要がないため，上記に示した弊害についても発生しない。
【０００４】
【課題を解決するための手段】
本発明は命令語をキャッシュもしくはバッファに一時的に格納し，命令の実行時はキャッシュもしくはバッファに一時的に格納されている命令語を読み出して実行するプロセッサに適用するものである。
【０００５】
本発明では，命令語をキャッシュもしくはバッファに格納する時にＰＣ＋ｄｉｓｐアドレッシング命令であるかどうかを判定し，ＰＣ＋ｄｉｓｐアドレッシング命令である場合にはキャッシュもしくはバッファへの格納前にあらかじめＰＣ＋ｄｉｓｐの計算の下位部分を行い，命令語のｄｉｓｐ部分とキャッシュもしくはバッファに追加されたビットに計算結果を書き込む。該ＰＣ＋ｄｉｓｐアドレッシング命令をキャッシュもしくはバッファから読み出して実行する時にはＰＣ＋ｄｉｓｐ計算の下位部分はあらかじめ計算された結果をそのまま出力し，下位アドレス部分の計算を省略することにより，ＰＣ＋ｄｉｓｐ分岐命令のアドレス計算に要する時間を削減する。以上が本発明の手段である。
【０００６】
【発明の実施の形態】
以下に，本発明の実施例を２例示す。
（実施例１）
図５及び図６は本発明を最も単純な形で実現した例である。図５は命令フェッチ部，すなわち主記憶から読み出した命令語を命令キャッシュに格納する部分である。５１１は主記憶から読み出した命令語であり，命令フォーマットは図２の１１２と同等である。本実施例のプロセッサではアドレスは３２ビットである。５１２は命令が格納されている主記憶上のアドレスであり，幅は３２ビットである。また，アドレス５１２は命令語５１１の実行時のＰＣの値に等しい。
【０００７】
５０１は命令キャッシュである。５１４は命令語５１１と同じ幅をもっており，命令キャッシュ５０１内に複数のエントリが存在する。５１５は５１４と１対１で対応しており，幅は１ビットである。回路ブロック５０２は命令語５１１とアドレス５１２を入力とし，出力が命令キャッシュ５０１内の５１４及び５１５に格納される。
【０００８】
回路ブロック５０２の動作について説明する。命令語５１１内の２０１および２０２は命令キャッシュ５０１内の５１４の対応する部分にそのまま格納される。５２２はデコーダであり，命令語５１１内の２０１がＰＣ＋ｄｉｓｐ分岐命令かどうかを判定し，セレクタ５２３の出力を切り替える。命令語５１１内の２０１がＰＣ＋ｄｉｓｐ分岐命令以外の場合，セレクタ５２３は命令語５１１内の２０３をそのまま出力し，命令キャッシュ５０１内の５１４の２０３に対応する部分にそのまま格納される。
命令語５１１内の２０１がＰＣ＋ｄｉｓｐ分岐命令を示している場合，命令語５１１内の２０３とアドレス５１２の下位１１ビット部分を加算器５１２で加算し，得られた１１ビットの結果をセレクタ５２３が出力する。命令キャッシュ５０１内の５１４の２０３に対応する部分にはこの結果が格納される。また，加算器５２１の上位へのキャリービット出力は５１５に格納される。
図６はＰＣ＋ｄｉｓｐ分岐命令実行時の分岐先アドレス計算部である。６１１はＰＣの値であり，命令キャッシュ５０１内に格納された５１４と５１５及び６１１の値を用いて，分岐先アドレス６１３を求める。５１４内の２０３に対応する部分はそのまま分岐先アドレス６１３の下位１１ビット部分に出力される。６１２は５１４内の２０２に対応する部分を２１ビットに符号拡張したものである。加算器６２１は６１２と６１１の上位２１ビット部分とを加算し，結果を分岐先アドレス６１３の上位２１ビット部分に出力する。
【０００９】
図５に示した回路ブロック５０２では，ｄｉｓｐの下位１１ビット部分とＰＣの下位１１ビット部分の加算を行い，５１５に下位からのキャリービット出力を保存している。また，図６に示したＰＣ＋ｄｉｓｐ分岐命令の実行時にはｄｉｓｐの上位１ビットを２１ビット符号拡張したものとＰＣの上位２１ビット部分を，５１５に保存された下位からのキャリービットを考慮して加算している。すなわち結果として算出される分岐先アドレス６１３は，１２ビットのｄｉｓｐを３２ビットに符号拡張してＰＣと加算した値と等しい。
（実施例２）
図７，図８は本発明の別の実施例である。図７は実施例１の図５と同じく命令フェッチ部である。７０１，７１１，７１２および７１４は実施例１での５０１，５１１，５１２および５１４に相当し，回路ブロック７０２は実施例１での回路ブロック５０２に対応する。実施例１での５１５に相当する部分はこの実施例には存在しない。
デコーダ７２２とセレクタ７２３の動作も実施例１でのデコーダ５２２とセレクタ５２３の動作とほぼ同一であり，命令語７１１内のオペコード５０１がＰＣ＋ｄｉｓｐ分岐命令である場合に加算器７２１の出力である７１３を命令キャッシュ７０１内の７１４の２０４に対応する部分に出力し，それ以外の場合は命令語７１１内の２０４をそのまま７１４内の２０４に対応する部分に出力する。加算器７２１は命令語７１１内の２０４とアドレス７１２の下位１２ビットを加算し，１２ビットの加算結果を７１３に出力する。
【００１０】
図８は実施例１の図６と同じくＰＣ＋ｄｉｓｐ分岐命令実行時の分岐先アドレス計算部である。８１１はＰＣであり，命令キャッシュ７０１内に格納された７１４及び８１１の値を用いて，分岐先アドレス８１２を求める。７１４内の２０４に対応する部分は，そのまま分岐先アドレス８１２の下位１２ビット部分に出力される。
８２４及び８２５は加算器であり，それぞれ８１１の上位２０ビットの値に＋１，−１を加算した値を出力する。すなわちセレクタ８２３は，８１１の上位２０ビットの値について，＋１，±０，−１した値のどれかを，デコーダ８２２の出力に従って分岐先アドレス８１２の上位２０ビット部分に出力する。
【００１１】
デコーダ８２２には，（ａ）７１４内の２０３に対応する部分と８１１の下位１１ビットを比較器８２１で比較した結果（２０３に対応する部分の方が大きい，もしくは等しい場合を０，逆の場合を１とする），（ｂ）７１４内の５０２に対応する部分，（ｃ）８１１の下位から１２ビット目が入力される。デコーダ８２２の入力に対するセレクタ８２３の出力の対応を図１０に示す。
比較器８２１の出力は，命令フェッチ部で行った１１ビット加算の，下位１０ビット目から１１ビット目へのキャリービットである。このキャリービットと７１４内の２０２に対応する部分と８１１の下位から１２ビット目の排他的論理和を取ると，命令語７１１内の２０２，すなわち２０４の符号ビットを算出することができる。
【００１２】
また，前述のキャリービットと２０２，８１１の下位から１２ビット目の値について，１ビット値３個の加算を行いキャリービットを求めると，命令フェッチ部で行った加算の，最上位ビットからのキャリービットが求められる。
２０２を２０ビット符号拡張し，８１１の上位２０ビット部分と，命令フェッチ部で行った加算の最上位ビットからのキャリービットを加算すれば，分岐先アドレス８１２は１２ビットのｄｉｓｐを３２ビットに符号拡張してＰＣと加算した値と等しくなる。しかし，（１）２０２が１の場合に８１１の上位２０ビットに−１を加算し，加えて（２）命令フェッチ部で行った加算の最上位ビットからのキャリービットが１の場合に＋１を加算すれば，先ほど述べた加算と同じ動作ができる。したがって，８１１の上位２０ビットに対して，２０２の値と命令フェッチ部で行った加算の最上位ビットからのキャリービットが，００もしくは１１の場合はそのまま，０１の場合は＋１を加算，１０の場合は−１を加算すれば，先ほど述べた加算と同じ結果が得られる。
【００１３】
以上実施例を説明したが，本発明はその技術的思想のもとに種々の変形が可能である。例を示すと，（１）分岐命令のみでなく，ＰＣ＋ｄｉｓｐアドレッシングによるロードストア命令に実施可能である，（２）ｄｉｓｐの幅が一種類のみでなく８，１２のように複数種類あっても実施例１，２とも実施できる，といった変形が可能である。
【００１４】
【発明の効果】
本発明の実施例１に示したプロセッサの第一の利点は，ＳｅｍｉＡＢＳ分岐命令と同様，ＰＣ＋ｄｉｓｐ分岐命令の実行時の分岐先アドレス計算を高速に処理，すなわち分岐先アドレス計算にかかる遅延時間を短縮できることである。これにより特にパイプラインによって命令を実行するプロセッサにおいては，分岐先アドレスの計算を行うステージに必要となる時間を減少させることができ，プロセッサの動作周波数向上，あるいは処理サイクル数の削減，あるいはその両方が可能となる。
例えば，実施例１では全アドレスが３２ビット，ｄｉｓｐが１２ビットであり従来のＰＣ＋ｄｉｓｐ分岐論理方式の場合，ＰＣ＋ｄｉｓｐ分岐命令の実行時には３２ビット加算が必要となるが，実施例１でのＰＣ＋ｄｉｓｐ分岐論理方式の場合では２１ビット加算で済む。全アドレスが６４ビット，ｄｉｓｐが２０ビットであるとした場合では，従来のＰＣ＋ｄｉｓｐ論理方式では６４ビット加算，実施例１では４５ビット加算で済む。
また，実施例１に示したプロセッサにおいては，ＳｅｍｉＡＢＳ分岐命令と同様に命令キャッシュへのアクセスを早い時刻に開始することによってＰＣ＋ｄｉｓｐ分岐命令の動作を全体的に高速化できるという第二の利点がある。
実施例１に示したプロセッサでの第三の利点は，あるＰＣ＋ｄｉｓｐ分岐命令が命令キャッシュにヒットして繰り返し実行される場合には，分岐先アドレスの下位部分の計算は初回実行時，すなわち命令キャッシュに格納される時にのみ行われ，以降の実行時に重複して計算されることを回避できる点である。図９に従来のＰＣ＋ｄｉｓｐ分岐論理方式の場合と実施例１でのＰＣ＋ｄｉｓｐ分岐論理方式の場合での，タイミングチャートでの比較を示す。
９０１は従来のＰＣ＋ｄｉｓｐ分岐論理方式の場合であり，９１１は命令キャッシュ読み出し，および命令キャッシュミスヒットによる主記憶からの命令語読み出し動作，９１３は９１１で読み出した命令語をキャッシュに格納する動作，９１４は分岐先アドレスの下位部分の加算動作，９１５は分岐先アドレスの上位部分の加算と分岐先アドレス命令の命令キャッシュからの読み出し動作である。また，９１２は命令キャッシュヒットの場合の読み出し動作である。９０２は実施例１でのＰＣ＋ｄｉｓｐ分岐論理方式の場合であり，あるＰＣ＋ｄｉｓｐ分岐命令が命令キャッシュにヒットする状態で繰り返し実行される場合，繰り返し回数が多いほど実施例１でのＰＣ＋ｄｉｓｐ分岐論理方式の方が，実行に要する時間が短縮される。
【００１５】
実施例１に示したプロセッサの第四の利点は，第一，第二及び第三の利点として挙げた効果を，既存のＰＣ＋ｄｉｓｐ型アドレッシングを備えるプロセッサの命令セットに変更を加えることなく，享受できる点である。
本発明の実施例２に示したプロセッサでは，実行時にｄｉｓｐの符号ビットおよび命令フェッチ時の加算の最上位ビットからのキャリービットの再計算を行うため実施例１に示したプロセッサの第一の利点に相当する効果は実質的にはほとんど得られないが，第二，第三および第四の利点に関しては同等に効果が得られる。
また，実施例２に示したプロセッサでは，主記憶から読み出した命令語を格納するキャッシュもしくはバッファに追加の記憶領域が不要であるという利点がある。
【図面の簡単な説明】
【図１】従来のＰＣ＋ｄｉｓｐ分岐での分岐先アドレス計算法。
【図２】命令語１１２のフォーマット。
【図３】従来のＳｅｍｉＡＢＳ分岐での分岐先アドレス計算法。
【図４】命令語３１２のフォーマット。
【図５】本発明の第一の実施例における命令語の命令キャッシュ格納時の処理回路。
【図６】本発明の第一の実施例におけるＰＣ＋ｄｉｓｐ分岐命令実行時のアドレス計算回路。
【図７】本発明の第二の実施例における命令語の命令キャッシュ格納時の処理回路。
【図８】本発明の第二の実施例におけるＰＣ＋ｄｉｓｐ分岐命令実行時のアドレス計算回路。
【図９】従来のＰＣ＋ｄｉｓｐ分岐論理方式の場合と実施例１でのＰＣ＋ｄｉｓｐ分岐論理方式の場合のタイミングチャートでの比較。
【図１０】デコーダ８２２への入力に対するセレクタ８２３の出力対応図。
【符号の説明】
１１１−ＰＣの値，１１２−ＰＣ＋ｄｉｓｐ分岐命令の命令語，１１４−ＰＣ＋ｄｉｓｐ命令での分岐先アドレス，１２１−３２ビット加算器。
３１１−ＰＣの値，３１２−ＳｅｍｉＡＢＳ分岐命令の命令語，３１４−ＳｅｍｉＡＢＳ分岐命令での分岐先アドレス，３２１−１８ビット加算器。
５０１−命令キャッシュ，５１１−ＰＣ＋ｄｉｓｐ分岐命令の命令語，５１２−読み出した命令の主記憶上のアドレス値，５１４−命令キャッシュ内のエントリ，５１５−５１４に一対一に対応する記憶領域，５２１−１１ビット加算器，５２２−デコーダ，５２３−セレクタ。
６１１−ＰＣの値，６１３−分岐先アドレス，６２１−２１ビット加算器。
７０１−命令キャッシュ，７１１−ＰＣ＋ｄｉｓｐ分岐命令の命令語，７１２−読み出した命令の主記憶上のアドレス値，７１４−命令キャッシュ内のエントリ，７２１−１２ビット加算器，７２２−デコーダ，７２３−セレクタ。
８１１−ＰＣの値，８１２−分岐先アドレス，８２１−１１ビット比較器，８２２−デコーダ，８２３−セレクタ，８２４，８２５−２０ビット加算器。
９０１−従来のＰＣ＋ｄｉｓｐ分岐論理方式の場合のＰＣ＋ｄｉｓｐ分岐命令動作，９０２−本発明の第一の実施例でのＰＣ＋ｄｉｓｐ分岐論理方式の場合のＰＣ＋ｄｉｓｐ分岐命令動作，９１１−命令キャッシュ読み出し及び命令キャッシュミスヒットによる主記憶からの命令語読み出し動作，９１２−命令キャッシュヒット時の命令語読み出し動作，９１３−９１１で読み出した命令語をキャッシュに格納する動作，９１４−分岐先アドレスの下位部分の加算動作，９１５−分岐先アドレスの上位部分の加算と分岐先アドレス命令の命令キャッシュからの読み出し動作。
【図１】
0003983482.tif 000002
【図２】
0003983482.tif 000003
【図３】
0003983482.tif 000004
【図４】
0003983482.tif 000005
【図５】
0003983482.tif 000006
【図６】
0003983482.tif 000007
【図７】
0003983482.tif 000008
【図８】
0003983482.tif 000009
【図９】
0003983482.tif 000010
【図１０】
0003983482.tif 000011