JP3723019B2 - サブルーチンリターン相当の命令の分岐予測を行う装置および方法 - Google Patents
サブルーチンリターン相当の命令の分岐予測を行う装置および方法 Download PDFInfo
- Publication number
- JP3723019B2 JP3723019B2 JP27622199A JP27622199A JP3723019B2 JP 3723019 B2 JP3723019 B2 JP 3723019B2 JP 27622199 A JP27622199 A JP 27622199A JP 27622199 A JP27622199 A JP 27622199A JP 3723019 B2 JP3723019 B2 JP 3723019B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- return
- subroutine
- equivalent
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Description
【発明の属する技術分野】
本発明は、分岐予測機構を有する情報処理装置に係り、特に、サブルーチンリターンのための特別な命令が用意されていないアーキテクチャにおいて、サブルーチンリターン相当の命令の分岐予測を行う分岐予測装置およびその方法に関する。
【0002】
【従来の技術】
従来の命令処理装置においては、パイプライン処理やアウトオブオーダー処理のような技術を用いて、ある命令の実行の完了を待たずに後続の命令の実行を次々と開始することで、性能の向上が図られてきた。
【0003】
パイプライン処理において、先行する命令が、分岐命令のように後続の実行シーケンスを変更する命令である場合、分岐が成立するときに、分岐先の命令を実行パイプラインに投入する必要がある。そうしなければ、実行パイプラインが乱され、最悪の場合は、逆に性能が落ちてしまう。
【0004】
そこで、ブランチヒストリ(分岐予測テーブル)に代表される分岐予測機構を設けて、分岐の成立・不成立を予測することで、性能の向上が図られてきた。このような装置において、分岐の成立が予測された場合には、分岐命令の後に分岐先の命令が実行パイプラインに投入されるため、分岐が実際に成立したときに実行パイプラインが乱されることがない。
【0005】
また、サブルーチンリターン命令の分岐先(戻り先)は、その命令の性質上、実行の度に変わることが多い。これは、サブルーチンの呼び出し元であるサブルーチンコール命令の場所が実行の度に異なるためである。このような命令に対しては、リターンアドレススタックと呼ばれる専用の分岐予測機構を設けることで、性能の向上が可能となることが知られている。
【0006】
【発明が解決しようとする課題】
しかしながら、上述した従来の分岐予測機構には、以下のような問題がある。
CPU(中央処理装置)アーキテクチャの中には、サブルーチンコール・リターン命令対として、あらかじめ特別な命令を準備していないものがある。このようなアーキテクチャにおいて、リターンアドレススタックを採用して性能向上を図るためには、実行される分岐命令の中から、サブルーチンコール・リターン相当の命令対を動的に抽出する技術が必要となる。
【0007】
ところが、従来の情報処理装置では、デコード時にサブルーチンコール・リターン命令であるか否かを静的に決定していたため、ハードウェアによる解釈と異なるプログラミングは好ましいものではなかった。この場合、好ましくないプログラミングにより、コール・リターン対の対応関係が、一旦、実際とずれてしまうと、リターンアドレススタックの特性上、それ以降の分岐先を次々と誤ることになる。このため、リターンアドレススタックが多段であればあるほど、性能を落としていた。
【0008】
図18は、このようなアーキテクチャにおいて使用される、サブルーチンコール・リターン命令対を含むプログラムの例を示している。
この例では、メインルーチンの中の命令“balr 14,15”により、サブルーチンS1が呼び出され(Call 1)、さらにその中の命令“balr15,13”により別のサブルーチンS2が呼び出されている(Call 2)。そして、条件リターン命令“bcr 7,15”により制御がサブルーチンS1に戻り(Return 2)、さらに無条件リターン命令“bcr 15,14”によりメインルーチンに戻っている(Return 1)。
【0009】
ここで、命令処理装置が、特定のオペレーションコード“balr”を、サブルーチンコール相当の命令として認識し、特定のオペレーションコードとオペランドを含む無条件分岐命令“bcr 15,x”(xは任意)を、サブルーチンリターン相当の命令として認識するものとする。
【0010】
この場合、サブルーチンS2の中の命令“bcr 7,15”は、サブルーチンリターン相当の命令として認識されずに、見落とされる。このため、従来のリターンアドレススタックでは、Call 2に対応するリターンがReturn1であると認識してしまい、分岐予測に失敗する。実際には、Call 2に対応する正しいリターンは、Return 2である。
【0011】
また、命令処理装置が、オペレーションコード“bcr”を含むすべての命令を単純にサブルーチンリターン相当の命令として認識すると、サブルーチンS2の中の単なる条件分岐命令である“bcr 4,3”が、Call 2に対応するリターンであると認識されてしまう。したがって、この場合も、リターンアドレススタックがコール・リターン対を誤認識することが分かる。
【0012】
このように、リターンアドレススタックを持つ情報処理装置においては、命令の実行時に、正しいサブルーチンコール・リターン命令対を認識することが重要になる。
【0013】
本発明の課題は、サブルーチンリターンのための特別な命令が用意されていない情報処理装置において、サブルーチンリターン相当の命令を正しく認識する分岐予測装置およびその方法を提供することである。
【0014】
【課題を解決するための手段】
図1は、本発明の分岐予測装置の原理図である。本発明の第1の局面において、分岐予測装置は、格納手段1、比較手段2、および識別手段3を備える。
【0015】
格納手段1は、サブルーチンコール相当の命令が検出されたとき、サブルーチンの戻り先アドレスを指定する情報を格納する。比較手段2は、サブルーチンリターン相当の命令になり得る命令が検出されたとき、そのサブルーチンリターン相当の命令になり得る命令の分岐先アドレスを指定する情報と、格納手段1に格納された戻り先アドレスを指定する情報とを比較し、比較結果を出力する。識別手段3は、その比較結果に基づいて、上記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する。
【0016】
実行された(実行される)命令が、サブルーチンコール相当の動作をする命令であるとき、その命令により指定される戻り先アドレスや戻り先アドレスを保持するレジスタの情報等が、戻り先アドレスを指定する情報として格納手段1に格納される。
【0017】
次に、実行された(実行される)命令が、サブルーチンリターン相当の動作をする命令である可能性があるとき、その命令により指定される分岐先アドレスや分岐先アドレスを保持するレジスタの情報等が、分岐先アドレスを指定する情報として選択され、比較手段2により、その情報が戻り先アドレスを指定する情報と比較される。
【0018】
そして、識別手段3は、分岐先アドレスを指定する情報と戻り先アドレスを指定する情報が一致すれば、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令であると識別し、それらが一致しなければ、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令ではないと識別する。
【0019】
このように、サブルーチンの戻り先アドレスを指定する情報を用いることで、正しいサブルーチンコール・リターン相当の命令対を動的に抽出することができる。したがって、コール・リターン対の対応関係が正しく認識され、その対応関係のズレが防止される。
【0020】
また、本発明の第2の局面において、分岐予測装置は、スタック手段4、プッシュ手段5、比較手段2、および識別手段3を備える。
スタック手段4は、サブルーチンの戻り先アドレスを指定する情報を格納する。プッシュ手段5は、サブルーチンコール相当の命令が検出されたとき、上記戻り先アドレスを指定する情報をスタック手段4にプッシュする。
【0021】
比較手段2は、サブルーチンリターン相当の命令になり得る命令が検出されたとき、そのサブルーチンリターン相当の命令になり得る命令の分岐先アドレスを指定する情報と、スタック手段4の先頭エントリに格納された戻り先アドレスを指定する情報とを比較し、比較結果を出力する。識別手段3は、その比較結果に基づいて、上記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する。
【0022】
サブルーチンコール相当の動作をする命令が検出されると、プッシュ手段5は、戻り先アドレスを指定する情報をスタック手段4にプッシュする。次に、サブルーチンリターン相当の動作をする命令である可能性がある命令が検出されると、比較手段2は、その命令の分岐先アドレスを指定する情報を、スタック手段4にプッシュされた戻り先アドレスを指定する情報と比較する。
【0023】
そして、識別手段3は、分岐先アドレスを指定する情報と戻り先アドレスを指定する情報が一致すれば、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令であると識別し、それらが一致しなければ、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令ではないと識別する。
【0024】
このように、サブルーチンの戻り先アドレスを指定する情報をスタック手段4にプッシュすることで、第1の局面の分岐予測装置と同様に、コール・リターン対の対応関係が正しく認識され、その対応関係のズレが防止される。
【0025】
また、本発明の第3の局面において、分岐予測装置は、リターンアドレススタック手段6、比較手段2、および識別手段3を備える。
リターンアドレススタック手段6は、サブルーチンコール相当の命令が検出されたとき、サブルーチンの戻り先アドレスを格納する。比較手段2は、サブルーチンリターン相当の命令になり得る命令が検出されたとき、そのサブルーチンリターン相当の命令になり得る命令の分岐先アドレスと、リターンアドレススタック手段6に格納された戻り先アドレスとを比較し、比較結果を出力する。識別手段3は、その比較結果に基づいて、上記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する。
【0026】
サブルーチンコール相当の動作をする命令が検出されると、その命令により指定された戻り先アドレスがリターンアドレススタック手段6にプッシュされる。次に、サブルーチンリターン相当の動作をする命令である可能性がある命令が検出されると、比較手段2は、その命令の分岐先アドレスを、リターンアドレススタック手段6にプッシュされた戻り先アドレスと比較する。
【0027】
そして、識別手段3は、分岐先アドレスと戻り先アドレスが一致すれば、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令であると識別し、それらが一致しなければ、後者の命令を前者の命令に対応するサブルーチンリターン相当の命令ではないと識別する。
【0028】
このように、リターンアドレススタック手段6にプッシュされた戻り先アドレスを、直接、命令の分岐先アドレスと比較することで、第1の局面の分岐予測装置と同様に、コール・リターン対の対応関係が正しく認識され、その対応関係のズレが防止される。
【0029】
例えば、図1の格納手段1およびスタック手段4は、後述する図3のリンクスタック33、またはリターンアドレススタック35に対応する。また、例えば、図1の比較手段2と識別手段3は、後述する図11のEXNOR回路101、OR回路102、およびAND回路103、または後述する図17の比較回路151およびAND回路152に対応する。また、図1のプッシュ手段5は、後述する図12の制御回路に対応し、図1のリターンアドレススタック手段6は、図3のリターンアドレススタック35に対応する。
【0030】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態を詳細に説明する。
命令処理装置においては、サブルーチンコール相当の命令により、戻り先のアドレスを格納するリンクレジスタが指定され、指定されたリンクレジスタを用いて、サブルーチンリターン相当の命令による分岐が行われる。
【0031】
サブルーチンコールまたはリターン相当の命令は、例えば、図2に示すように、オペレーションコード(OPコード)11、第1オペランド12、および第2オペランド13を含む。サブルーチンコール相当の命令においては、第1オペランド12が、リンクレジスタのレジスタ番号を表し、サブルーチンリターン相当の命令においては、第2オペランド13が、分岐先アドレスを格納するレジスタのレジスタ番号を表す。
【0032】
そこで、本実施形態においては、サブルーチンコール時に指定されたリンクレジスタのレジスタ番号を記録するリンクスタックを設ける。そして、リンクスタックに記録された番号のレジスタ内のアドレスを分岐先アドレスとして用いる分岐命令が出現したとき、その分岐命令をサブルーチンリターン相当の命令と認識する。
【0033】
このような制御によれば、リンクレジスタのレジスタ番号をリンク情報として用いて、サブルーチンコール相当の命令とサブルーチンリターン相当の命令を対応付けることができ、サブルーチンコール・リターン相当の命令対を動的に抽出することが可能になる。したがって、コール・リターン対の対応関係を正しく認識することができ、その対応関係のズレが防止されるので、リターンアドレススタックによる分岐予測の精度が向上する。
【0034】
例えば、図18の例の場合、コール命令に含まれるリンクレジスタの番号と、リターン命令に含まれる分岐先アドレスレジスタの番号を比較すれば、正しいコール・リターン対を認識することができ、分岐予測も成功する。
【0035】
Call 1の命令“balr 14,15”の第1オペランドは、リンクレジスタの番号が“14”であることを表しており、Return 1の命令“bcr 15,14”の第2オペランドは、分岐先アドレスレジスタの番号が“14”であることを表している。したがって、後者の命令は、Call 1に対応するリターン相当の命令であると認識される。
【0036】
また、Call 2の命令“balr 15,13”の第1オペランドは、リンクレジスタの番号が“15”であることを表しており、Return 2の命令“bcr 7,15”の第2オペランドは、分岐先アドレスレジスタの番号が“15”であることを表している。したがって、後者の命令は、Call 2に対応するリターン相当の命令であると認識される。
【0037】
次に、特別なサブルーチンコール・リターン命令対を準備していないアーキテクチャの一例を用いて、本実施形態における情報処理装置の動作をより詳細に説明する。このようなアーキテクチャは、例えば、ESA(enterprise systems architecture )/390のPOO(principles of operation )により規定されている。
【0038】
サブルーチンコールとして使用可能な命令としては、サブルーチンリターン相当の命令による戻り先のアドレス(リンクアドレス)をレジスタに保存可能である命令が考えられる。このような命令には、bal、balr、bas、basr、bassm等がある。
【0039】
また、サブルーチンリターンとして使用可能な命令としては、一般の分岐命令のほとんどが挙げられる。これらの中でも、特に、分岐先アドレスを1つのレジスタで指定する分岐命令、すなわち、RR形式命令が用いられやすい。RR形式命令には、bcr、bsm等がある。もちろん、これらの命令は、通常の無条件分岐命令あるいは条件分岐命令としても用いられる。
【0040】
また、このようなアーキテクチャでは、出現頻度は低いものの、サブルーチンコール・リターン対を崩し得る命令も存在し得る。このような命令としては、例えば、lpswや、bc等のRX形式命令が挙げられる。また、一部の割り込み事象においても、サブルーチンコール・リターン対が崩されることがある。
【0041】
bcに代表されるRX形式の分岐命令は、リターン先アドレスを1つのレジスタのみで指定するとは限らず、特に、ディスプレイスメントを指定する場合がある。他にも、リンクレジスタの値を書き換える等の処理により、戻り先アドレスが変更される場合もある。
【0042】
このような命令がサブルーチンリターンとして使用された場合、コール時にリターンアドレススタックに登録された戻り先アドレスが正しくならないので、リターン時にリターンアドレススタックを参照しないことが望ましい。その代わりに、通常の分岐命令と同じように、ブランチヒストリに登録されている予測分岐先を参照すれば、正しい戻り先アドレスが得られる可能性がある。
【0043】
また、lpswは、分岐先アドレスをレジスタで直接指定せず、オペランドが指すメモリ上のデータ列を分岐先アドレスとして用いる。このような命令列が出現した場合には、コール・リターン対の対応関係が崩れてしまう可能性がある。あるいはまた、割り込みが発生した場合にも、その割り込みの種類によっては、同様にコール・リターン対が崩れてしまうことがある。
【0044】
そこで、リターンアドレススタックに何らかの機構を組み込む必要がある。その一方法として、このような命令が実行されたときやこのような割り込みが発生したときに、リターンアドレススタックとリンクスタック双方のエントリをすべて消去してしまうことが考えられる。このような制御により、リターンアドレススタックの対応のズレが防止され、発生したズレにそれ以降の予測結果が引き摺られて性能が劣化することはなくなる。
【0045】
また、基本的な分岐命令がハードワイヤードで実現されているにもかかわらず、一部の分岐命令は、他の複雑な動作を伴うために、マイクロコードにより制御されている場合がある。このような複雑な分岐命令は、回路が複雑になるわりには得るものが少ない等の理由で、ブランチヒストリに登録しているメリットがない。このため、リターンアドレススタックも動作しない。
【0046】
しかしながら、前述したように、このような複雑な命令でも、サブルーチンコールもしくはリターン相当の命令になり得る場合には、その命令に対する対策を講じなければ、リターンアドレススタックの対応がずれてしまい、性能劣化の原因となる。
【0047】
そこで、ブランチヒストリに登録されていないサブルーチンコール相当の分岐命令が実行された後に、それに対応すると考えられるサブルーチンリターン相当の命令が検出されたとき、ブランチヒストリおよびリターンアドレススタックにおいて、そのサブルーチンリターン相当の命令をリターン相当の命令とは認識しないような制御を行う。
【0048】
また、プログラム指針書等により特定のレジスタをリンクレジスタとして使用することが推奨される場合等のように、特定のレジスタがリンクレジスタとして非常に多く使われることがある。このようなシステムでは、その特定のレジスタを用いる命令を、常に、サブルーチンコールまたはリターン相当の命令と認識することにする。これにより、リンクスタックのエントリを効率的に用いることができ、規模の小さなリンクスタックでも大きな効果が得られる。
【0049】
また、分岐命令において、分岐先アドレスのレジスタ番号として“0”を指定すると、分岐は行われない。このようなアーキテクチャでは、レジスタ番号“0”をリンク情報として、対応するサブルーチンリターン相当の命令を判別することは不可能である。そこで、サブルーチンコール相当の命令において、リンクレジスタの番号として“0”が指定されたときには、この命令をサブルーチンコール相当の命令として認識しないようにする。
【0050】
図3は、本実施形態における命令処理装置の構成図である。図3の命令処理装置は、命令フェッチ回路21、分岐予測機構22、デコーダ23、分岐先アドレス生成回路24、分岐命令実行処理回路25、および命令実行完了処理回路26を備え、命令をアウトオブオーダー方式で処理する。アウトオブオーダー処理方式を採用した命令処理装置においては、性能の向上を図るため、1つの命令実行の完了を待たずに、後続の命令列が順次複数のパイプラインに投入される。
【0051】
命令フェッチ回路21と分岐予測機構22は、命令フェッチパイプラインの回路に対応する。分岐予測機構22は、予測回路31、比較回路32、およびリンクスタック33を含み、予測回路31は、ブランチヒストリ34とリターンアドレススタック35を含む。
【0052】
また、デコーダ23、分岐先アドレス生成回路24、分岐命令実行処理回路25、および命令実行完了処理回路26は、命令実行パイプラインの回路に対応する。分岐命令実行処理回路25は、複数のRSBR(Reservation Station for BRanch)36を含む。
【0053】
命令フェッチパイプラインは、命令アドレス発行サイクル(IA)、テーブルサイクル(IT)、バッファサイクル(IB)、および結果サイクル(IR)を含み、命令実行パイプラインは、デコードサイクル(D)、アドレス計算サイクル(A)、実行サイクル(X)、更新サイクル(U)、およびライトサイクル(W)を含む。
【0054】
RSBR36は、分岐命令を制御するための処理待ちのスタックである。分岐命令実行処理回路25は、アウトオブオーダー処理方式に従って、スタック内の処理可能なエントリを選択し、プログラムにより指示された順序とは異なる順序で、随時、分岐命令を実行することができる。
【0055】
RSBR36で扱われる分岐命令のうち、bal、balr(ただし、balr 1,14を除く)、bras、bas、およびbasrは、サブルーチンコール相当の命令として扱われ、bcr、bsm、balr 1,14は、サブルーチンリターン相当の命令として扱われる。また、bassmは、サブルーチンコール相当の命令ではあるが、RSBR36では扱われない複雑命令である。
【0056】
分岐命令実行処理回路25が分岐命令を実行した結果、分岐が生じることが判明した場合、分岐先の命令アドレスと分岐命令自身の命令アドレスが、対にしてブランチヒストリ34に登録される。そして、命令フェッチ回路21は、分岐命令をフェッチしたとき、次の命令のフェッチに先立ってブランチヒストリ34を検索し、分岐先を予測する。
【0057】
また、デコーダ23がサブルーチンコール相当の命令を検出したとき、その命令のオペランドが表すリンクレジスタの番号がリンクスタック33にプッシュされ、対応する戻り先の命令アドレスがリターンアドレススタック35にプッシュされる。
【0058】
また、デコーダ23がサブルーチンリターン相当の命令になり得る命令を検出すると、比較回路32は、リンクスタック33の先頭エントリに登録されているレジスタ番号と、検出された命令のオペランドが表す分岐先アドレスレジスタの番号を比較する。そして、2つのレジスタ番号が一致すれば、その命令がサブルーチンリターン相当の動作をする命令であると判断し、比較結果を予測回路31に出力する。
【0059】
このとき、リンクスタック33からレジスタ番号がポップされ、リターンアドレススタック35から対応する命令アドレスがポップされる。そして、ポップされた命令アドレスが、予測分岐先として命令フェッチ回路21に渡される。
【0060】
リンクスタック33のエントリは、図4に示すように、リターンアドレススタック35のエントリと1対1に対応しており、これらの2つのスタックは、同時にプッシュ動作およびポップ動作を行う。ここでは、リンクスタック33のエントリには、4ビットのレジスタ番号〈0:3〉が格納されており、リターンアドレススタック35のエントリには、32ビットの分岐先アドレス〈0:31〉が格納されている。これらのスタックは、一般に、n個(n≧1)のエントリからなるn段のスタックとして実装される。
【0061】
図5は、図3の命令処理装置において用いられる信号を示している。デコーダ23は、信号+D_BALR、+D_BAL、+D_BRAS、+D_BAS、+D_BASR、+D_BALR_1E、+D_BCR、+D_BSM、+D_BASSM、および+D_OPC〈8:15〉を分岐命令実行処理回路25に出力する。
【0062】
信号+D_BALR、+D_BAL、+D_BRAS、+D_BAS、+D_BASR、+D_BALR_1E、+D_BCR、+D_BSM、および+D_BASSMは、それぞれ、balr、bal、bras、bas、basr、balr 1,14、bcr、bsm、およびbassmが検出されたときに、論理“1”となる。また、信号+D_OPC〈8:15〉は、機械語命令のビット〈8:15〉のデータを表す。
【0063】
分岐命令実行処理回路25は、信号+BRHIS_UPDATE_SUBROUTINE_CALL、+BRHIS_UPDATE_SUBROUTINE_RTN、+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉、+BRHIS_UPDATE_BSM、および+D_BASSMを分岐予測機構22に出力する。
【0064】
信号+BRHIS_UPDATE_SUBROUTINE_CALLは、命令がサブルーチンコール相当の命令と判別されたときに論理“1”となり、信号+BRHIS_UPDATE_SUBROUTINE_RTNは、命令がサブルーチンリターン相当の命令になり得る命令と判別されたときに論理“1”となる。また、信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉は、命令のオペランドにより指定されたレジスタ番号を表し、信号+BRHIS_UPDATE_BSMは、bsm命令の実行が完了したときに論理“1”となる。
【0065】
次に、図6から図17までを参照しながら、図3の命令処理装置の構成と動作についてより詳細に説明する。
まず、デコーダ23による命令デコード時に、図5に示した信号がRSBR36に入力され、サブルーチンコール相当の命令とサブルーチンリターン相当の命令になり得る命令が判別される。このうち、サブルーチンリターン相当の命令になり得る命令については、後述するリンクスタック33の回路により、サブルーチンリターンとのより厳密な対応関係が識別されることになる。
【0066】
図6は、RSBR36内の判別回路を示している。図6において、入力信号−D_BALR_1Eは、図5の信号+D_BALR_1Eの否定を表し、命令“balr 1,14”がデコードされたときに論理“0”となる。AND回路41は、入力信号+D_BALRと−D_BALR_1Eの論理積を、OR回路42に出力する。したがって、“balr 1,14”以外のbalr命令がデコードされたとき、AND回路41の出力は論理“1”となる。
【0067】
OR回路42は、AND回路41からの出力信号と、入力信号+D_BAL、+D_BRAS、+D_BASR、および+D_BASの論理和を、信号+D_SUBROUTINE_CALLとして出力する。この信号+D_SUBROUTINE_CALLは、デコードされた命令がサブルーチンコール相当の命令であるときに論理“1”となるフラグとして用いられる。
【0068】
また、OR回路43は、入力信号+D_BALR_1E、+D_BCR、および+D_BSMの論理和を、信号+D_SUBROUTINE_RETURNとして出力する。この信号+D_SUBROUTINE_RETURNは、デコードされた命令がサブルーチンリターン相当の命令になり得る命令であるときに論理“1”となるフラグとして用いられる。
【0069】
デコードされた命令が分岐命令であれば、通常は、デコード結果がRSBR36に登録される。この時点で、RSBR36には、サブルーチンコール・リターン判別結果を表すフラグと、リンクレジスタや分岐先アドレスレジスタの情報等が登録される。
【0070】
ESA/390 POOのアーキテクチャでは、サブルーチンコール相当の命令になり得る命令(機械語命令)のビット〈8:11〉にリンクレジスタの番号が指定され、サブルーチンリターン相当の命令になり得る命令(機械語命令)のビット〈12:15〉に分岐アドレスレジスタの番号が指定される。そこで、ビット〈8:15〉のデータがこれらのレジスタの情報として登録される。
【0071】
図7は、RSBR36内の登録回路を示している。図7において、入力信号+RSBR_VALIDは、対応するRSBR36が有効である間、論理“1”となる。ラッチ回路51は、入力信号+D_OPC〈8:15〉の値をラッチし、信号+RSBR_OPC〈8:15〉として出力する。
【0072】
また、ラッチ回路52は、図6の判別回路が生成したフラグ+D_SUBROUTINE_CALLと+D_SUBROUTINE_RETURNの値をラッチし、それぞれ、信号+RSBR_SUBROUTINE_CALLと+RSBR_SUBROUTINE_RETURNとして出力する。
【0073】
信号+RSBR_VALIDが論理“1”となると、これらの情報の登録が終了し、対応するRSBR36が有効である間、ラッチ回路51、52に登録された情報が保持される。
【0074】
次に、分岐履歴情報の更新時において、RSBR36に登録されたサブルーチンコール・リターン判別結果とレジスタ情報が、その他の分岐履歴情報と同時に、分岐予測機構22へ送出される。サブルーチンコール相当の命令である場合は、リンクレジスタの番号がレジスタ情報として選択され、サブルーチンリターン相当の命令になり得る命令である場合は、分岐先アドレスレジスタの番号がレジスタ情報として選択される。
【0075】
図8は、RSBR36内の選択回路を示している。図8において、AND回路61は、図7の登録回路からの信号+RSBR_SUBROUTINE_CALLと+RSBR_OPC〈8:11〉の論理積を、OR回路63に出力する。したがって、フラグ+RSBR_SUBROUTINE_CALLが立っているときは、リンクレジスタの番号がAND回路61から出力される。
【0076】
また、AND回路62は、図7の登録回路からの信号+RSBR_SUBROUTINE_RETURNと+RSBR_OPC〈12:15〉の論理積を、OR回路63に出力する。したがって、フラグ+RSBR_SUBROUTINE_RETURNが立っているときは、分岐先アドレスレジスタの番号がAND回路62から出力される。
【0077】
そして、OR回路63は、AND回路61、62の出力信号の論理和を、信号+RSBR_CALL_RETURN_REG〈0:3〉として出力する。ここで、フラグ+RSBR_SUBROUTINE_CALLと+RSBR_SUBROUTINE_RETURNが同時に立つことはないので、OR回路63は、AND回路61、62の出力信号を選択的に出力することになる。
【0078】
信号+RSBR_SUBROUTINE_CALL、+RSBR_SUBROUTINE_RETURN、および+RSBR_CALL_RETURN_REG〈0:3〉は、ぞれぞれ、図5の信号BRHIS_UPDATE_SUBROUTINE_CALL、BRHIS_UPDATE_SUBROUTINE_RTN、+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉として、分岐予測機構22へ送出される。
【0079】
ところで、前述したように、分岐命令(サブルーチンリターン相当の命令を含む)において、分岐先アドレスレジスタの番号として“0”を指定すると、分岐は行われない。また、逆に、デコード時にサブルーチンコール相当の命令と判別された命令でも、リンクレジスタの番号として“0”が指定された場合には、この命令をサブルーチンコール相当の命令として識別しない方がよい。
【0080】
そこで、図9のような識別回路を分岐予測機構22に設けて、送られてきたレジスタ番号が“0”でないときにのみ有効となる制御信号を生成する。図9において、NAND回路71は、信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉の4つのビットの否定の論理積を求め、その論理積の否定を信号+SBRTN_LINK_REG_VALとして出力する。
【0081】
したがって、この出力信号は、信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉が表すレジスタ番号が“0”でないときにのみ、論理“1”となり、リンクレジスタが有効であることを表す。この信号を用いたリンクスタック33の制御については、後述することにする。
【0082】
分岐命令が分岐しないことを表す分岐先アドレスレジスタの番号として、“0”以外の特定の番号が用いられた場合も、図9と同様の回路により同様の制御信号が生成される。
【0083】
また、サブルーチンコールとして使用可能なbassm命令については、ハードワイヤードではなく、マイコロコードにより実現されるため、ブランチヒストリ34には登録されず、分岐履歴情報の更新時に情報が送られてこない。その代わりに、デコード時に生成された図5の信号+D_BASSMが分岐予測機構22に送出される。
【0084】
そこで、図10のような識別回路を分岐予測機構22に設けて、bassm命令に関する制御を行う。ここでは、bassm命令に対応するリターン命令はbsmのみであるものと仮定している。
【0085】
図10において、AND回路81は、ラッチ回路83の出力とNAND回路84の出力の論理積をOR回路82に出力し、OR回路82は、入力信号+D_BASSMとAND回路81の出力信号の論理和をラッチ回路83に出力する。ラッチ回路83は、実質的にSet−Resetフリップフロップの動作を行い、OR回路82の出力信号をラッチして、NAND回路84に出力する。
【0086】
また、NAND回路84は、図5の信号+BRHIS_UPDATE_BSMと、図9の制御信号+SBRTN_LINK_REG_VALと、ラッチ回路83の出力信号の論理積の否定を、信号−SBRTN_BASSM_BSM_RTN_VALIDとして出力する。この信号−SBRTN_BASSM_BSM_RTN_VALIDは、論理“0”のとき、実行されたbsm命令が上記bassm命令に対応するリターン命令であることを表す。
【0087】
このような識別回路によれば、分岐するbassm命令が実行された場合には、信号+D_BASSMが論理“1”となり、ラッチ回路83の出力も論理“1”となる。そして、ラッチ回路83の出力と図9の信号+SBRTN_LINK_REG_VALが論理“1”である間に、bsm命令の実行が完了して信号+BRHIS_UPDATE_BSMが論理“1”となると、実行されたbsm命令は上記bassm命令に対応するリターン命令であると識別される。
【0088】
このとき、信号−SBRTN_BASSM_BSM_RTN_VALIDが論理“0”となるため、AND回路81の出力も論理“0”となる。また、信号+D_BASSMも論理“0”であるため、ラッチ回路83の出力も論理“0”となる。
【0089】
このように、ラッチ回路83の出力信号は、bassm命令およびbsm命令が検出されたことを表す所定のフラグとして用いられ、分岐するbassm命令が検出されたときにセットされ、それに対応するbsm命令が検出されたときにリセットされる。
【0090】
また、信号−SBRTN_BASSM_BSM_RTN_VALIDと同時に、不図示の信号+SBRTN_BASSM_BSM_RTN_VALIDも生成される。この信号+SBRTN_BASSM_BSM_RTN_VALIDは、信号−SBRTN_BASSM_BSM_RTN_VALIDの否定に対応し、論理“1”のとき、実行されたbsm命令が上記bassm命令に対応するリターン命令であることを表す。
【0091】
こうして識別されたbassm命令に対応するbsm命令は、ブランチヒストリ34あるいはリターンアドレススタック35上では、リターン相当の命令とは認識されなくなる。なぜなら、bassm命令自身がコール相当の命令として登録されていないからである。
【0092】
分岐予測機構22は、分岐命令実行処理回路25から送られてきた信号と、図9および図10の識別回路により生成された特別な制御信号とを用いて、サブルーチンコール・リターン相当の命令を判別する。
【0093】
図11は、分岐予測機構22内の判別回路を示している。図11において、入力信号−BRHIS_UPDATE_SUBROUTINE_RTNは、図5の信号+BRHIS_UPDATE_SUBROUTINE_RTNの否定に対応する。
【0094】
また、入力信号+RTN_LINK_REG_STK0〈0:3〉は、リンクスタック33の先頭エントリに保持されたレジスタ番号を表す。入力信号+SBRTN_LINK_REG_EQ_Eは、図5の信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉がレジスタ番号“14”を表すとき、論理“1”となり、それ以外の番号を表すとき、論理“0”となる。
【0095】
AND回路91は、図5の信号+BRHIS_UPDATE_SUBROUTINE_CALLと図9の信号+SBRTN_LINK_REG_VALの論理積を、AND回路92に出力する。AND回路92は、AND回路91の出力信号と信号−BRHIS_UPDATE_SUBROUTINE_RTNの論理積を、信号+BR_COMP_SUBROUTINE_CALLとして出力する。
【0096】
この信号+BR_COMP_SUBROUTINE_CALLは、分岐予測機構22において、サブルーチンコール相当の命令を表すフラグ(サブルーチンコールフラグ)として用いられる。このフラグが論理“1”のとき、分岐命令実行処理回路25で実行された命令はサブルーチンコール相当の命令であると判別される。実行された命令がリンクレジスタとして番号“0”のレジスタを指定していた場合は、このフラグが論理“0”となり、サブルーチンコール相当の命令ではないと判別される。
【0097】
また、EXNOR回路101は、図5の信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉と、信号+RTN_LINK_REG_STK0〈0:3〉を比較し、2つの信号の排他的論理和の否定を出力する。OR回路102は、EXNOR回路101の出力信号と信号+SBRTN_LINK_REG_EQ_Eの論理和を出力する。
【0098】
そして、AND回路103は、図5の信号+BRHIS_UPDATE_SUBROUTINE_RTNと、図9の信号+SBRTN_LINK_REG_VALと、図10の信号−SBRTN_BASSM_BSM_RTN_VALIDと、OR回路102の出力信号の論理積を、信号+BR_COMP_SUBROUTINE_RTNとして出力する。
【0099】
この信号+BR_COMP_SUBROUTINE_RTNは、分岐予測機構22において、サブルーチンリターン相当の命令を表すフラグ(サブルーチンリターンフラグ)として用いられる。このフラグが論理“1”のとき、分岐命令実行処理回路25で実行された命令はサブルーチンリターン相当の命令であると判別される。この判別動作は、対応する分岐履歴情報がブランチヒストリ34やリターンアドレススタック35に登録される前に行われる。
【0100】
EXNOR回路101、OR回路102、およびAND回路103からなるサブルーチンリターン判別回路は、図3の比較回路32に対応する。この判別回路によれば、EXNOR回路101により、実行されたサブルーチンリターン相当の命令になり得る命令の分岐先アドレスレジスタの番号がリンクスタック33の先頭エントリと比較され、それらが一致したとき、実行された命令がサブルーチンリターン相当の命令であると判別される。
【0101】
ただし、前述したように、分岐予測機構22では、bassm命令に対応するbsm命令をリターン相当の命令として扱わないので、信号−SBRTN_BASSM_BSM_RTN_VALIDにより、AND回路103の出力が抑制されている。
【0102】
また、慣習的に、番号“14”のレジスタは、サブルーチンリターンにおける分岐先アドレスレジスタとして用いられることが多い。そこで、このレジスタが分岐先アドレスレジスタとして指定された場合は、信号+SBRTN_LINK_REQ_EQ_Eを用いて、EXNOR回路101の比較結果にかかわらず、実行された命令をサブルーチンリターン相当の命令とみなしている。
【0103】
サブルーチンリターン相当の命令であることを表す分岐先アドレスレジスタの番号として、“14”以外の特定の番号が用いられた場合も、図11と同様の回路により同様の制御が行われる。
【0104】
こうして生成されたサブルーチンコールフラグとサブルーチンリターンフラグを用いて、リンクスタック33は、図12のような制御回路によりプッシュ動作とポップ動作を行う。ここでは、リンクスタック33は2つのエントリからなるものとし、入力信号+RTN_LINK_REG_STK0〈0:3〉と+RTN_LINK_REG_STK1〈0:3〉は、それぞれ、先頭エントリ(エントリ0)と2番目のエントリ(エントリ1)に保持されたレジスタ番号を表している。
【0105】
また、入力信号−SBRTN_LINK_REQ_EQ_Eは、図11の信号+SBRTN_LINK_REQ_EQ_Eの否定に対応し、入力信号BRHIS_UPDATE_TAKENは、分岐命令による分岐が実行され、分岐履歴情報が更新されるときに、論理“1”となる。
【0106】
まず、AND回路111は、これらの2つの信号の論理積を出力する。AND回路112は、図11のフラグ+BR_COMP_SUBROUTINE_CALLとAND回路111の出力信号の論理積を、動作信号+PUSH_RTN_STACK_LINK_REGとして出力する。この信号は、リンクスタック33およびリターンアドレススタック35のプッシュ動作の指示に用いられ、サブルーチンコール相当の命令が実行されて分岐履歴情報が更新されるときに、論理“1”となる。
【0107】
また、AND回路113は、図11のフラグ+BR_COMP_SUBROUTINE_RTNとAND回路111の出力信号の論理積を、動作信号+POP_RTN_STACK_LINK_REGとして出力する。この信号は、リンクスタック33およびリターンアドレススタック35のポップ動作の指示に用いられ、サブルーチンリターン相当の命令が実行されて分岐履歴情報が更新されるときに、論理“1”となる。
【0108】
ここで、リンクレジスタの番号として“14”を指定するサブルーチンコール相当の命令と、分岐先アドレスレジスタの番号として“14”を指定するサブルーチンリターン相当の命令は、常にコール・リターン命令対を形成するものとすると、リンクスタック33を用いなくてもこれらの対応関係を抽出することができる。
【0109】
そこで、このような場合にリンクスタック33を動作させないように、信号−SBRTN_LINK_REQ_EQ_Eを用いて、プッシュ動作およびポップ動作の動作信号を抑制している。これにより、リンクスタック33のエントリの浪費が防止され、少ない段数でも効率的な動作が可能になる。
【0110】
次に、AND回路114は、図5の信号+BRHIS_UPDATE_CALL_RTN_REG〈0:3〉と動作信号+PUSH_RTN_STACK_LINK_REGの論理積を出力し、AND回路115は、信号+RTN_LINK_REG_STK1〈0:3〉と動作信号+POP_RTN_STACK_LINK_REGの論理積を出力する。
【0111】
また、OR回路116は、AND回路114、115の出力信号の論理和を、信号+SET_RTN_LINK_REG_STK0〈0:3〉として出力する。この信号は、リンクスタック33の先頭エントリにセットされるレジスタ番号を表す。
【0112】
ここで、動作信号+PUSH_RTN_STACK_LINK_REGと+POP_RTN_STACK_LINK_REGが同時に論理“1”になることはないので、OR回路116は、AND回路114、115の出力信号を選択的に出力することになる。したがって、プッシュ動作の場合は、サブルーチンコール相当の命令により指定されたリンクレジスタの番号がセットされ、ポップ動作の場合は、リンクスタック33の2番目のエントリに保持されたレジスタ番号がセットされる。
【0113】
また、AND回路117は、信号+RTN_LINK_REG_STK0〈0:3〉と動作信号+PUSH_RTN_STACK_LINK_REGの論理積を、信号+SET_RTN_LINK_REG_STK1〈0:3〉として出力する。この信号は、リンクスタック33の2番目のエントリにセットされるレジスタ番号を表し、プッシュ動作の場合は、リンクスタック33の先頭エントリに保持されたレジスタ番号に一致する。
【0114】
図13は、リンクスタック33内でレジスタ番号を保持するラッチ回路を示している。図13において、入力信号−PUSH_POP_RTN_LINK_REG_STKは、プッシュ動作またはポップ動作が終了したときに論理“1”となる。
【0115】
ラッチ回路121は、図12の信号+SET_RTN_LINK_REG_STK0〈0:3〉を先頭エントリとしてラッチし、それを図12の信号+RTN_LINK_REG_STK0〈0:3〉として出力する。また、ラッチ回路122は、図12の信号+SET_RTN_LINK_REG_STK1〈0:3〉を2番目のエントリとしてラッチし、それを図12の信号+RTN_LINK_REG_STK1〈0:3〉として出力する。
【0116】
信号−PUSH_POP_RTN_LINK_REG_STKが論理“1”となると、これらのエントリへのレジスタ番号の登録が終了し、この信号が論理“0”になるまで、登録されたレジスタ番号が保持される。
【0117】
ところで、前述したlpsw命令(複雑命令)は、サブルーチンコール・リターン命令のいずれにもなり得るため、コール・リターンの対応関係を崩すものと考えられる。あるいはまた、割り込みが発生した場合、それが割り込み処理の後に元のプログラムに戻らない種類の割り込みであれば、やはり、コール・リターンの対応関係を崩すものと考えられる。
【0118】
そこで、このような事象(命令や割り込み等)が発生した場合には、その命令や割り込みの実行時に、リンクスタック33とリターンアドレススタック35のエントリをすべてクリアして、保持された情報を無効化する。
【0119】
図14は、分岐予測機構22内の無効化回路を示している。図14において、入力信号+MICRO_PURGE_RTN_ADRS_STKは、リンクスタック33とリターンアドレススタック35のエントリをクリアする信号であり、コール・リターンの対応関係を崩すような命令や割り込みが発生したときに、論理“1”となる。
【0120】
NOR回路131は、図12の動作信号+PUSH_RTN_STACK_LINK_REGと+POP_RTN_STACK_LINK_REG、および信号+MICRO_PURGE_RTN_ADRS_STKの論理和の否定を、図13の信号−PUSH_POP_RTN_LINK_REG_STKとして出力する。
【0121】
したがって、信号+MICRO_PURGE_RTN_ADRS_STKが論理“1”となると、信号−PUSH_POP_RTN_LINK_REG_STKが論理“0”となり、図13のラッチ回路121、122に保持されたレジスタ番号がクリアされる。
【0122】
また、サブルーチンコールに対応する戻り先、すなわち、サブルーチンコール相当の命令の直後の命令アドレスに戻らないサブルーチンリターン相当の命令を認識した場合、ブランチヒストリ34に、そのサブルーチンリターン相当の命令の戻り先が異なることを示すフラグを設定することができる。
【0123】
図15は、RSBR36において、このようなフラグを生成する回路を示している。図15において、入力信号+D_BCは、デコーダ23によりオペレーションコード“bc”が検出されたときに、論理“1”となる。入力信号−D_DISP_EQ_0は、命令により指定されたディスプレイスメントが0でないときに、論理“1”となる。
【0124】
また、入力信号+D_BR_EQ_E、+D_XR_EQ_Eは、それぞれ、命令により指定されたベースレジスタ、インデックスレジスタの番号が“14”のときに、論理“1”となる。これらの信号は、デコーダ23からRSBR36に出力される。
【0125】
OR回路141は、信号+D_BR_EQ_Eと+D_XR_EQ_Eの論理和を表す信号を出力し、AND回路142は、信号+D_BCと−D_DISP_EQ_0、およびOR回路141の出力信号の論理積を、信号+D_BC_GIDDY_RTNとして出力する。
【0126】
また、ラッチ回路143は、OR回路141からの信号+D_BC_GIDDY_RTNをラッチし、信号+RSBR_BC_GIDDY_RTNとして出力する。この信号は、対応するRSBR36が有効である間、ラッチ回路143に保持され、サブルーチンリターン相当の命令の戻り先が異なることを示すフラグとして用いられる。
【0127】
このフラグ+RSBR_BC_GIDDY_RTNは、信号+BRHIS_UPDATE_BC_GIDDY_RTNとして分岐予測機構22に送出され、図16に示すように、ブランチヒストリ34のエントリのフラグGIDDY RTNに設定される。
【0128】
図16のブランチヒストリ34のエントリには、フラグGIDDY RTN以外に、分岐命令アドレスIAR、分岐先アドレスTIAR、およびフラグCALL、RTNが格納されている。フラグCALL、RTNは、それぞれ、サブルーチンコールフラグ、サブルーチンリターンフラグに対応する。
【0129】
例えば、ディスプレイスメントdが0でないような分岐命令“bc m.d(14)”がデコードされた場合、信号+D_BC_GIDDY_RTNが論理“1”となり、フラグ+RSBR_BC_GIDDY_RTNが立つ。したがって、ブランチヒストリ34にこの分岐命令が登録されたとき、対応するフラグGIDDY RTNに論理“1”が格納される。
【0130】
予測回路31による分岐予測時に、このフラグGIDDY RTNが立っていた場合、リターンアドレススタック35はリターン命令を予測したときと同様のポップ動作を行うが、予測回路31は、リターンアドレススタック35からポップされた分岐先アドレスではなく、ブランチヒストリ34に登録された分岐先アドレスを、予測分岐先アドレスとして出力する。したがって、ブランチヒストリ34により予測された分岐先の命令フェッチが行われ、リターンアドレススタック35による予測結果は廃棄される。
【0131】
上述した実施形態においては、リンクスタック33に登録されたリンクレジスタの番号と、実行された(実行される)命令の分岐先アドレスレジスタの番号を比較することで、その命令がサブルーチンリターン相当の命令であるか否かを判別している。これ以外の他の実施形態として、リンクスタック33を用いず、リターンアドレススタック35に登録されている戻り先アドレスと、実行された(実行される)命令の分岐先アドレスを比較することで、同様の判別を行うことも考えられる。
【0132】
この方法では、上述したbc命令等のように、戻り先がコール命令の直後とならないリターン相当の命令が出現すると、認識されるコール・リターン対の対応関係が崩れてしまい、リターンアドレススタック35の本来の性能が発揮できない。しかし、リンクスタック33を新たに設ける必要がないというメリットがある。
【0133】
図17は、分岐予測機構22内でこのような判別を行う回路を示している。図17において、信号+BRHIS_UPDATE_TIARは、サブルーチンリターン相当の命令になり得る命令の分岐先アドレスを表し、RSBR36から送出される。
【0134】
比較回路151は、この信号+BRHIS_UPDATE_TIARをリターンアドレススタック35の先頭エントリ(エントリ0)と比較し、それらが一致すると論理“1”の信号を出力する。ここでは、リターンアドレススタック35は、n段のスタックとして示されている。AND回路152は、図5の信号+BRHIS_UPDATE_SUBROUTINE_RTNと比較回路151の出力信号の論理積を、図12の信号+BR_COMP_SUBROUTINE_RTNとして出力する。
【0135】
図17の判別回路は、図11に示したサブルーチンリターン相当の命令の判別回路の代用となり、リンクスタック33のエントリを参照しなくても、サブルーチンリターンフラグを生成することができる。したがって、この場合、リンクスタック33は不要となる。
【0136】
以上説明した実施形態においては、主として、リンクスタック33およびリターンアドレススタック35を2段のスタックとしているが、任意の段数のスタックを用いた場合も、同様の制御を行うことができる。また、レジスタ番号や命令アドレス以外にも、サブルーチンの戻り先アドレスを指定する任意の情報を比較することで、サブルーチンコール・リターン命令対を認識することができる。
【0137】
【発明の効果】
本発明によれば、リターンアドレススタック等の分岐予測機構を有する情報処理装置において、正しいサブルーチンコール・リターン命令対を動的に抽出することができる。したがって、分岐予測機構におけるコール・リターン対の対応関係のズレが防止され、サブルーチンリターン相当の命令の分岐予測の精度が向上する。
【図面の簡単な説明】
【図1】本発明の分岐予測装置の原理図である。
【図2】命令コードを示す図である。
【図3】命令処理装置の構成図である。
【図4】リンクスタックとリターンアドレススタックの対応関係を示す図である。
【図5】命令処理装置で用いられる信号を示す図である。
【図6】第1の判別回路を示す図である。
【図7】登録回路を示す図である。
【図8】選択回路を示す図である。
【図9】第1の識別回路を示す図である。
【図10】第2の識別回路を示す図である。
【図11】第2の判別回路を示す図である。
【図12】制御回路を示す図である。
【図13】ラッチ回路を示す図である。
【図14】無効化回路を示す図である。
【図15】フラグ生成回路を示す図である。
【図16】ブランチヒストリに登録されるエントリを示す図である。
【図17】第3の判別回路を示す図である。
【図18】サブルーチンコール・リターン命令対を示す図である。
【符号の説明】
1 格納手段
2 比較手段
3 識別手段
4 スタック手段
5 プッシュ手段
6 リターンアドレススタック手段
11 オペレーションコード
12、13 オペランド
21 命令フェッチ回路
22 分岐予測機構
23 デコーダ
24 分岐先アドレス生成回路
25 分岐命令実行処理回路
26 命令実行完了処理回路
31 予測回路
32、151 比較回路
33 リンクスタック
35 リターンアドレススタック
36 RSBR
41、61、62、81、91、92、103、111、112、113、114、115、117、142、152 AND回路
42、43、63、82、102、116、141 OR回路
51、52、83、121、122、143 ラッチ回路
71、84 NAND回路
101 EXNOR回路
131 NOR回路
Claims (13)
- サブルーチンコール相当の命令が検出されたとき、該サブルーチンコール相当の命令により指定されたレジスタ手段のレジスタ番号を、サブルーチンの戻り先アドレスを指定する情報として格納する格納手段と、
サブルーチンリターン相当の命令になり得る命令が検出されたとき、該サブルーチンリターン相当の命令になり得る命令により指定されるレジスタ番号と、前記格納手段に格納された前記戻り先アドレスを指定する情報としてのレジスタ番号とを比較し、比較結果を出力する比較手段と、
前記比較結果に基づいて、前記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する識別手段とを
備えることを特徴とする分岐予測装置。 - 前記レジスタ手段は、サブルーチンコール相当命令の命令により、戻り先のアドレスを格納する特定のレジスタ手段であることを特徴とする請求項1記載の分岐予測装置。
- サブルーチンの戻り先アドレスを指定する情報を格納するスタック手段と、
サブルーチンコール相当の命令が検出されたとき、前記戻り先アドレスを指定する情報を前記スタック手段にプッシュするプッシュ手段と、
サブルーチンリターン相当の命令になり得る命令が検出されたとき、該サブルーチンリターン相当の命令になり得る命令の分岐先アドレスを指定する情報と、前記スタック手段の先頭エントリに格納された前記戻り先アドレスを指定する情報とを比較し、比較結果を出力する比較手段と、
前記比較結果に基づいて、前記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する識別手段とを備える
ことを特徴とする分岐予測装置。 - 前記プッシュ手段は、前記サブルーチンコール相当の命令により指定されたレジスタ手段のレジスタ番号を、前記戻り先アドレスを指定する情報として前記スタック手段にプッシュし、前記比較手段は、前記サブルーチンリターン相当の命令になり得る命令により指定された分岐先アドレスレジスタ手段のレジスタ番号と、前記スタック手段の先頭エントリに格納されたレジスタ番号とを比較し、前記識別手段は、比較された2つのレジスタ番号が一致したとき、該サブルーチンリターン相当の命令になり得る命令を、前記サブルーチンリターン相当の命令であると識別することを特徴とする請求項3記載の分岐予測装置。
- 前記識別手段は、前記分岐先アドレスレジスタ手段のレジスタ番号が特定のレジスタ手段に対応するとき、前記比較結果にかかわらず、前記サブルーチンリターン相当の命令になり得る命令を、前記サブルーチンリターン相当の命令であると識別することを特徴とする請求項4記載の分岐予測装置。
- 前記プッシュ手段は、前記レジスタ手段のレジスタ番号が特定のレジスタ手段に対応するとき、該レジスタ手段のレジスタ番号を前記スタック手段にプッシュしないことを特徴とする請求項4記載の分岐予測装置。
- 前記識別手段が、前記サブルーチンリターン相当の命令になり得る命令を前記サブルーチンリターン相当の命令であると識別し、該サブルーチンリターン相当の命令による分岐が実行されたとき、前記スタック手段をポップするポップ手段をさらに備えることを特徴とする請求項3記載の分岐予測装置。
- 分岐予測のための分岐履歴情報を格納する分岐予測テーブル手段をさらに備え、前記比較手段は、該分岐履歴情報が該分岐予測テーブル手段に登録されるとき、前記サブルーチンリターン相当の命令になり得る命令が指定するレジスタ番号と、前記戻り先アドレスを指定する情報としてのレジスタ番号とを比較することを特徴とする請求項1記載の分岐予測装置。
- サブルーチンコールとサブルーチンリターンの対応関係を崩す可能性がある事象が発生したとき、前記格納手段に格納された情報を無効化する手段をさらに備えることを特徴とする請求項1記載の分岐予測装置。
- 分岐予測のための分岐履歴情報を格納する分岐予測テーブル手段をさらに備え、前記サブルーチンコール相当の命令の直後に位置する命令アドレスに戻らないサブルーチンリターン相当の命令が検出されたとき、検出されたサブルーチンリターン相当の命令の戻り先が異なることを示すフラグを該分岐予測テーブル手段に設定する設定手段をさらに備えることを特徴とする請求項1記載の分岐予測装置。
- 前記分岐予測テーブル手段は、前記サブルーチンの戻り先アドレスを格納するリターンアドレススタック手段を含み、分岐予測時に前記フラグが認識された場合、該リターンアドレススタック手段をポップし、ポップされた戻り先アドレスを予測分岐先として用いないことを特徴とする請求項10記載の分岐予測装置。
- 分岐予測のための分岐履歴情報を格納する分岐予測テーブル手段と、該分岐予測テーブル手段に登録されていないサブルーチンコール相当の命令が検出された場合には、所定のフラグをセットし、該登録されていないサブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令が検出された場合には、該所定のフラグをリセットして、該分岐予測テーブル手段では該対応するサブルーチンリターン相当の命令をサブルーチンリターン相当の命令としては認識しない制御を行う手段とをさらに備えることを特徴とする請求項1記載の分岐予測装置。
- サブルーチンコール相当の命令が検出されたとき、該サブルーチンコール相当の命令により指定されたレジスタ手段のレジスタ番号を、サブルーチンの戻り先アドレスを指定する情報として格納する格納手段と、
サブルーチンリターン相当の命令になり得る命令が検出されたとき、該サブルーチンリターン相当の命令になり得る命令がレジスタ番号により指定するレジスタ手段が保持するレジスタ値と、前記格納手段に格納された前記戻り先アドレスを指定する情報としてのレジスタ番号が指定するレジスタ手段が保持するレジスタ値とを比較し、比較結果を出力する比較手段と、
前記比較結果に基づいて、前記サブルーチンコール相当の命令に対応するサブルーチンリターン相当の命令を識別する識別手段とを
備えることを特徴とする分岐予測装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP27622199A JP3723019B2 (ja) | 1999-09-29 | 1999-09-29 | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 |
| US09/533,042 US6898698B1 (en) | 1999-09-29 | 2000-03-22 | Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP27622199A JP3723019B2 (ja) | 1999-09-29 | 1999-09-29 | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001100993A JP2001100993A (ja) | 2001-04-13 |
| JP3723019B2 true JP3723019B2 (ja) | 2005-12-07 |
Family
ID=17566386
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP27622199A Expired - Fee Related JP3723019B2 (ja) | 1999-09-29 | 1999-09-29 | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US6898698B1 (ja) |
| JP (1) | JP3723019B2 (ja) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7533251B2 (en) * | 2003-12-24 | 2009-05-12 | Panasonic Corporation | Semiconductor integrated circuit, development support system and execution history tracing method |
| US7401210B2 (en) * | 2005-03-30 | 2008-07-15 | Arm Limited | Selecting subroutine return mechanisms |
| US7444501B2 (en) * | 2006-11-28 | 2008-10-28 | Qualcomm Incorporated | Methods and apparatus for recognizing a subroutine call |
| US8341383B2 (en) * | 2007-11-02 | 2012-12-25 | Qualcomm Incorporated | Method and a system for accelerating procedure return sequences |
| US20140283060A1 (en) * | 2013-03-15 | 2014-09-18 | Oracle International Corporation | Mitigating vulnerabilities associated with return-oriented programming |
| WO2015107637A1 (ja) * | 2014-01-15 | 2015-07-23 | 三菱電機株式会社 | 数値制御装置 |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS5786952A (en) | 1980-11-20 | 1982-05-31 | Nec Corp | Microprogram control information processor |
| US5276882A (en) * | 1990-07-27 | 1994-01-04 | International Business Machines Corp. | Subroutine return through branch history table |
| US5313634A (en) * | 1992-07-28 | 1994-05-17 | International Business Machines Corporation | Computer system branch prediction of subroutine returns |
| JPH08212075A (ja) | 1995-01-31 | 1996-08-20 | Nec Corp | 情報処理装置 |
| JPH08292887A (ja) | 1995-02-24 | 1996-11-05 | Hitachi Ltd | 命令の分岐方法およびプロセッサ |
| US5790845A (en) * | 1995-02-24 | 1998-08-04 | Hitachi, Ltd. | System with reservation instruction execution to store branch target address for use upon reaching the branch point |
| US6157999A (en) * | 1997-06-03 | 2000-12-05 | Motorola Inc. | Data processing system having a synchronizing link stack and method thereof |
-
1999
- 1999-09-29 JP JP27622199A patent/JP3723019B2/ja not_active Expired - Fee Related
-
2000
- 2000-03-22 US US09/533,042 patent/US6898698B1/en not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| US6898698B1 (en) | 2005-05-24 |
| JP2001100993A (ja) | 2001-04-13 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI223195B (en) | Optimized branch predictions for strongly predicted compiler branches | |
| KR100395763B1 (ko) | 멀티프로세싱 마이크로프로세서에 적합한 분기 예측기 | |
| US6898699B2 (en) | Return address stack including speculative return address buffer with back pointers | |
| JP2603626B2 (ja) | データ処理装置 | |
| JP3594506B2 (ja) | マイクロプロセッサの分岐命令予測方法 | |
| US20120204007A1 (en) | Controlling the execution of adjacent instructions that are dependent upon a same data condition | |
| CN113196244B (zh) | 宏操作融合 | |
| US10664280B2 (en) | Fetch ahead branch target buffer | |
| US6981131B2 (en) | Early condition code evaluation at pipeline stages generating pass signals for controlling coprocessor pipeline executing same conditional instruction | |
| JP3565314B2 (ja) | 分岐命令実行制御装置 | |
| US20190354372A1 (en) | Method for maintaining a branch prediction history table | |
| US12288068B2 (en) | Instruction simulation device and method thereof | |
| US20190369999A1 (en) | Storing incidental branch predictions to reduce latency of misprediction recovery | |
| CN119759423B (zh) | 指令处理方法、装置、处理器、介质、程序及计算机设备 | |
| JP3723019B2 (ja) | サブルーチンリターン相当の命令の分岐予測を行う装置および方法 | |
| JP3725547B2 (ja) | 限定ラン分岐予測 | |
| US11055101B2 (en) | Processing apparatus and controlling method for processing apparatus | |
| JP3839755B2 (ja) | 命令制御方法及びプロセッサ | |
| US7036003B1 (en) | Instruction processing device and method for controlling branch instruction accompanied by mode change | |
| JPWO2004068337A1 (ja) | 情報処理装置 | |
| JP2004038338A (ja) | 分岐予測機構を有する情報処理装置 | |
| US11663014B2 (en) | Speculatively executing instructions that follow a status updating instruction | |
| JPH0679273B2 (ja) | データ処理装置 | |
| JP4728877B2 (ja) | マイクロプロセッサおよびパイプライン制御方法 | |
| JP2901573B2 (ja) | スーパースカラー方式の情報処理装置 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050606 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050614 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050815 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050913 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050914 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080922 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090922 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090922 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100922 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100922 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110922 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120922 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120922 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130922 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |