JP3565314B2 - 分岐命令実行制御装置 - Google Patents

分岐命令実行制御装置 Download PDF

Info

Publication number
JP3565314B2
JP3565314B2 JP35877198A JP35877198A JP3565314B2 JP 3565314 B2 JP3565314 B2 JP 3565314B2 JP 35877198 A JP35877198 A JP 35877198A JP 35877198 A JP35877198 A JP 35877198A JP 3565314 B2 JP3565314 B2 JP 3565314B2
Authority
JP
Japan
Prior art keywords
instruction
branch
taken
entry
execution
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
Application number
JP35877198A
Other languages
English (en)
Other versions
JP2000181710A (ja
Inventor
愛一郎 井上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP35877198A priority Critical patent/JP3565314B2/ja
Priority to US09/461,297 priority patent/US6851043B1/en
Publication of JP2000181710A publication Critical patent/JP2000181710A/ja
Application granted granted Critical
Publication of JP3565314B2 publication Critical patent/JP3565314B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、順次与えられる命令を実行する情報処理装置内の分岐命令実行制御装置に係り、更に詳しくはプログラムからアクセス可能な資源、すなわちメモリの記憶領域、レジスタの内容などを、プログラムの命令実行順序に従って逐次参照、および更新する動作が実行される情報処理装置内で、分岐命令の実行を制御する分岐命令実行制御装置に関する。
【0002】
【従来の技術】
情報処理装置において、命令に対する処理を高速に実行するための様々な技術が用いられている。その1つはパイプライン処理である。パイプライン処理における処理のステージをより細かく刻むことにより、より高速のマシンサイクルを実現し、その結果として高性能を狙うスーパーパイプラインと呼ばれる方式や、パイプラインを複数設けたスーパースカラ方式などが実用化されている。
【0003】
第2の技術として、命令処理の実行をパイプラインによって制御する代わりに、リザベーションステーションと呼ばれる処理待ちのスタックを設けて、命令の実行制御を行う方式が実現されている。このリザベーションステーションを用いた方式では、パイプライン方式と違って、マシンサイクルを単位とする処理過程の数とは独立にスタックのエントリ数を選ぶことが可能であり、エントリ数を大きくすることによって高い並列度を狙うことができる。
【0004】
第3の更に高性能を狙う技術としてアウトオブオーダ方式がある。アウトオブオーダ方式とは、プログラムによって指示された命令順序とは異なった順序で、例えば入力データが揃った命令から随時実行する処理方式である。すなわちアウトオブオーダ方式においては、スタック内で処理可能なエントリが選択され、プログラムにより指示された命令順序とは異なった順序でそのエントリに対応する処理を随時実行することによって、高い並列度を実現することができる。
【0005】
アウトオブオーダ方式では命令の実行は任意の順序であるが、プログラムからアクセス可能な資源、すなわちメモリの記憶領域やレジスタの内容などは、プログラムの実行順序に従って参照、および更新されるように命令実行がなされる必要がある。
【0006】
このように命令処理を高速に実行する情報処理装置においては、例えば1つの命令の実行の終了を待たずに次々と後続の命令列の実行を開始し、これらを並列に実行することによって性能向上が図られる。
【0007】
しかしがら、先行する命令の実行結果が後続の命令の実行に影響を与える場合には逐次的に処理を行う必要があり、情報処理装置の性能低下を引き起こす原因となる。その代表的な例として分岐命令がある。分岐命令は、その実行が完了するまで分岐が成立するか否かと、分岐が成立する場合の分岐先ターゲットの命令アドレスが明らかとならない。
【0008】
分岐命令を含む命令列を高速に処理するためには、まず分岐命令自体を分岐以外の命令と並列に実行する機構が必要となる。そのような機構が存在しない場合には、分岐命令が実行されるたびに命令処理が逐次処理となり、せっかく用意されている並列実行のためのハードウェア資源を有効に使うことができず、性能が低下することになる。
【0009】
また高速処理のためには、分岐命令の後の命令を投機的に実行する必要がある。このような投機的な命令実行が行われない場合には、分岐命令の実行が開始されるとその実行が完了するまで分岐命令の後の実行順序の命令の実行が開始できず、並列実行のためのハードウェア資源を有効に使うことができない。
【0010】
このように分岐命令の後に投機的に実行される対象の命令としては、分岐不成立の場合の分岐命令の後続命令列を対象とすることができるが、更に分岐予測機構を備えることによって分岐成立の場合の分岐先ターゲットの命令列を対象とすることも可能である。
【0011】
【発明が解決しようとする課題】
しかしながら、このように分岐命令を含む命令列を高速に処理するために分岐命令の後の命令実行を投機的に行う場合には、先行する分岐命令の実行結果に応じてその投機的実行の妥当性を検査する機構が必要となり、命令の投機的実行が妥当でなかった場合にはその命令の実行を取り消し、正しい命令列の実行をやり直す機構が必要となる。更に分岐予測機構の情報も分岐命令の実行結果に応じて適切に更新しなければ効果を上げることが難しい。
【0012】
投機的実行が行われる命令列の中に更に分岐命令がある場合に、その後の分岐列の実行をその分岐命令の実行完了まで遅らせるとすれば、分岐命令が多く含まれる命令列の実行性能が低下してしまう。また投機的実行が行われる命令列の中の分岐命令に続く命令列を投機的に実行しようとすると、命令の投機的実行結果を取り消す機構や、正しい命令列の実行をやり直す機構は更に複雑なものとなるという問題点があった。
【0013】
本発明は、例えば1つの分岐命令に対応して1つのエントリが作成されるリザベーションステーション、すなわち処理待ちのスタックを設け、スタック内で処理可能なエントリを選択して、プログラムにより指示された命令順序とは異なった順序で随時命令実行を行うことにより、分岐命令を含む命令列の処理を高速化することができる分岐命令実行制御装置を提供することを目的とする。
【0014】
【課題を解決するための手段】
図1は本発明の原理構成ブロック図である。同図は順次与えられる命令を実行する情報処理装置1の原理構成を示し、その内部に本発明の分岐命令実行制御装置2が備えられている。
【0015】
分岐命令実行制御装置2に備えられる分岐リザベーションステーション手段3は、命令デコードの結果、その命令が分岐命令であるか、または分岐に関する処理が必要であると判断された時、その分岐命令または分岐に関する処理の実行に必要なデータを格納すべきエントリが作成されるものである。
【0016】
本発明の実施形態においては、分岐リザベーションステーション手段3の内部、すなわちそのエントリに分岐の確定/未確定を表示するフラグと、分岐の成立/不成立を表示するフラグとの格納領域が備えられ、命令デコードの時点でその分岐の成立/不成立が確定する時には、作成されるエントリに分岐の確定を示すフラグと成立/不成立を示すフラグとの値が格納され、命令デコードの時点で分岐の成立/不成立が確定しない時には、その分岐が未確定であることを示すフラグの値が格納される。
【0017】
そして命令デコードの時点で分岐の成立/不成立が確定しない時には、その成立/不成立の判断が可能になった時点で、命令の実行順序に無関係に、その判断結果に対応して分岐の成立/不成立を示すフラグの値が格納される。
【0018】
本発明の実施形態においては、命令デコードの時点で、そのデコードされる命令に先行する命令であって、デコードされる命令についての分岐の成立/不成立に影響を与える先行命令の実行が未完了である時には、作成されるエントリにその先行命令の実行が未完了であることを示すデータと共にその先行命令を識別するためのデータを格納することもできる。
【0019】
本発明の実施形態においては、分岐成否予測手段、命令投機実行手段、および命令再実行手段を更に分岐命令実行制御装置2の内部に備えることもできる。分岐成否予測手段は、分岐命令に対応してその分岐命令のデコードの時点で分岐の成立/不成立を予測し、その予測結果を、分岐リザベーションステーション手段3に作成されるエントリに格納されるべき分岐の成立/不成立を示すフラグの値として、分岐リザベーションステーション手段3に与えるものである。
【0020】
命令投機実行手段は、分岐成否予測手段の予測結果に従ってその分岐命令以後の命令を投機的に実行するものであり、命令再実行手段は分岐リザベーションステーション手段3に格納された分岐の成立/不成立を表示するフラグの値と分岐の成立/不成立の実際の判断結果とに矛盾を生じた時に、命令投機実行手段による命令実行結果を無効とし、実際の判断結果に対応する命令を実行するものである。
【0021】
本発明の実施形態においては、分岐成否予測手段は分岐の成立/不成立を予測する以外に、分岐成立が予測される時更に分岐先アドレスの予測値を分岐リザベーションステーション手段3に作成されるエントリに格納させる作用を実行し、更に命令再実行手段はこの分岐先アドレスの予測値と実際に求められた分岐先アドレスとが一致しなかった時、命令投機実行手段による命令実行結果を無効とし、実際に求められた分岐先アドレスの命令以後の命令を実行することもできる。
【0022】
本発明の実施形態においては、図1に示すように情報処理装置1の内部に命令リザベーションステーション手段4を備えることもできる。この命令リザベーションステーション手段4は情報処理装置1に対して順次与えられる命令をアウトオブオーダで処理するために命令実行を統合的に制御するものである。
【0023】
そして例えば分岐リザベーションステーション手段3が、分岐命令、または分岐に関する処理の実行に必要なデータを格納すべきエントリを複数備え、命令デコードの時点で命令実行順序に従ってエントリが作成されると共に、そのエントリに命令リザベーションステーション手段4によって指定され、デコードされた命令を識別する命令識別子が格納される。
【0024】
その後作成されたエントリに対応する分岐処理の完了時には、命令実行順序に従って、例えば分岐リザベーションステーション手段3から分岐成立/不成立の確定結果および命令識別子を伴って、分岐処理の完了が命令リザベーションステーション手段4に報告された後に、その分岐処理の完了した命令に対応するエントリが消去される。
【0025】
本発明の実施形態においては、命令デコードの時点で分岐の成立/不成立が確定しない時、デコードされた命令以後の命令を投機的に実行する命令投機実行手段を更に備えると共に、分岐リザベーションステーション手段3が、分岐命令、または分岐に関する処理の実行に必要なデータを格納すべきエントリを複数備えることもでき、命令デコードの時点で命令実行順序に従ってエントリが作成される。そして命令投機実行手段による命令の実行結果の無効化が必要な時には、命令投機実行手段による命令実行の結果として作成されたエントリは直ちに消去される。
【0026】
本発明の実施形態においては、分岐命令に対応して分岐命令のデコードの時点で分岐の成立/不成立を予測する分岐成否予測手段を備えることもできる。そして分岐リザベーションステーション手段3上に作成されたエントリに対応する分岐処理の完了時に、分岐リザベーションステーション手段3から分岐成立/不成立の確定結果、分岐成立時の分岐先アドレス、および予測と実際の分岐確定結果との一致/不一致が分岐成否予測手段に報告され、分岐成否予測手段はその報告結果に従って自手段内に格納されている予測のためのデータを更新する。
【0027】
以上のように、本発明においては分岐リザベーションステーション手段3上にそれぞれの分岐命令に対応するエントリが作成され、実際に処理可能になったエントリから順次選択されて命令処理がアウトオブオーダで行われ、分岐命令の処理が完了した場合には、命令実行順序に従ってその処理完了が命令リザベーションステーション手段4に報告される。
【0028】
【発明の実施の形態】
図2は本発明の分岐リザベーションステーションが備えられる情報処理装置の全体構成ブロック図である。
【0029】
図2において、インストラクションアドレスレジスタ(IAR)10、インストラクションフェッチエフェクティブアドレスジェネレータ(IFEAG)11、インストラクションエフェクティブアドレスレジスタ(IEAR)12、インストラクションフェッチトランスレーションルックアサイドバッファ(IFTLB)13、インストラクションフェッチタグ(IFTAG)14、およびインストラクションフェッチローカルバッファストレージ(IFLBS)15は、本発明の情報処理装置における部分的なパイプラインとしての命令のフェッチのパイプライン動作を行うものである。
【0030】
この命令フェッチパイプラインは命令フェッチのリクエスト発行サイクルI、タグとTLBへのアクセスサイクルIT、バッファアクセスサイクルIB、およびフェッチ完了サイクルIRから成り、主記憶からフェッチされた命令は命令バッファ16に与えられる。
【0031】
命令バッファ16に与えられた命令は、命令デコードのパイプラインにおいてインストラクションワードレジスタ17、デコーダ18によってデコードされる。このパイプラインは、命令のプレゼンテーションサイクルE、およびデコードサイクルDから成る。
【0032】
このデコードサイクルの終了(Dリリース)時に命令リザベーションステーションに相当するコミットスタックエントリ(CSE)20にエントリが作成されると共に、命令のデコード結果に対応して主記憶オペランドアドレス生成用のリザベーションステーションであるリザベーションステーションフォーアドレスジェネレーション(RSA)21、演算処理用のリザベーションステーションであるリザベーションステーションフォーエクセキューション(RSE)22、および分岐リザベーションステーションに相当するリザベーションステーションフォーブランチ(RSBR)23に必要なエントリが作成される。
【0033】
一般的にRSA21、RSE22、およびRSBR23のそれぞれのエントリ数はCSE20のエントリ数より少なく、例えばエントリ数はCSE20に対して16、RSA21に対して6、RSE22に対して8、RSBR23に対して8となる。
【0034】
デコードサイクルの完了時(Dリリース)に命令デコードの結果としてエントリが作成されるべき各リザベーションステーションにエントリの空きがない場合には、その命令はインストラクションワードレジスタ17に止まり、必要なエントリに空きが生じた時点でCSE20、および必要なリザベーションステーション上にエントリが作成される。このために各リザベーションステーションに対応してリソースカウンタが用意されており、エントリが作成される時にその値はインクリメントされ、そのエントリに対応する処理が完了するときにポインタの値がデクリメントされる。
【0035】
CSE20に対してはインポインタが備えられ、デコードサイクルの終了時にCSE20に作成されるエントリの番号がそのインポインタの値によって指示され、この番号は命令識別子(IID)として、各リザベーションステーション上の対応するエントリにも登録され、処理中の命令を命令実行順序と共にユニークに識別するために使用される。
【0036】
リザベーションステーションフォーブランチRSBR23に対しても、CSE20に対するインポインタとは異なるインポインタが備えられ、そのインポインタによって指示される位置にエントリが作成される。これに対してRSA21、およびRSE22に対しては基本的にアウトオブオーダ処理が行われるために、リザベーションステーションの中で空いているエントリが探され、エントリの作成が行われる。
【0037】
CSE20に対しては、そのエントリが解放される時点でインクリメントされるアウトポインタが備えられ、アウトポインタの指す先頭のエントリが、実行中で未完了の命令のうちで、実行順序が最も古いものとして識別される。エントリの解放に先立って実行されるプログラマブルな資源の更新は、アウトポインタの指す命令から順に行われ、命令の実行順序に従った資源の更新順序が保証される。
【0038】
RSBR23も同様にアウトポインタを備えるが、分岐の確定はアウトオブオーダ処理である。これに対してCSE20に対する分岐の完了報告はアウトポインタの指すエントリから順次実行される。
【0039】
RSA21とRSE22内のエントリに対する処理順序としては実行可能なエントリから任意の順序で行われるが、複数の実行可能なエントリに対しては命令実行順序の古いものから処理が行われる。
【0040】
図2には、さらに分岐命令に対応する分岐予測機構、すなわち分岐の成立/不成立を予測し、分岐の成立が予測されるときはさらに分岐先の命令アドレス(ターゲットアドレス)の予測値を与えるブランチヒストリ(BRHIS)39を備えるとともに、BRHIS39の出力する予測結果を受け取り、それをIWR17を介してデコーダ18に与える命令バッファタグ部(IBUFTAG)40を備えている。
【0041】
BRHIS39は、IFEAG11の出力する命令のアドレスに対応して、その命令が分岐命令である場合に、過去のその命令の実行結果に応じて分岐の成立/不成立、分岐成立時のターゲットアドレス、後述するギディービットや、ディジービットなどの制御データを格納しており、同一アドレスの命令が与えられたとき、分岐に関するデータをIBUFTAG40に与えるとともに、例えば分岐成立が予測されるとき、ターゲットアドレスをIAR10に与えることにより、分岐先の命令以降の命令の投機的実行を可能にさせる。
【0042】
図2において、命令デコードのパイプライン動作(E−D)の後にアドレス計算のパイプライン、記憶制御(S)ユニットの(キャッシュアクセスの)パイプライン、演算実行のパイプライン、および資源更新のパイプラインの動作が必要に応じて実行される。
【0043】
アドレス計算のパイプラインはアドレス生成プライオリティサイクルP、アドレス生成サイクルAから成る。SユニットのパイプラインはプライオリティサイクルP、タグとTLBへのアクセスサイクルT、バッファアクセスサイクルB、および完了サイクルRから成る。演算実行パイプラインは、プライオリティサイクルP、バッファアクセスサイクルB、および実行サイクルXから成る。資源更新パイプラインは更新サイクルU、書込みサイクルWから成る。
【0044】
これらのパイプラインを用いて実行される処理については、本発明に直接関連する部分は少ないので、続いて本発明の最も重要な構成要素としてのRSBRについての説明に移る。図3はRSBRの各エントリの格納内容を示す。本実施形態においては、RSBR23にはそのエントリとして0〜7の8つのエントリが設けられるものとする。各エントリには31のフィールドが設けられる。
【0045】
第1フィールドはそのエントリが有効であることを示すバリッド(1ビット)である。ファントムブランチの時はこのビットはセットされない。ファントムブランチとは、実際には分岐命令ではないにもかかわらず、ブランチヒストリ39に誤った情報が入っていたためにヒットと判定され、分岐命令と判断されてしまった命令のことである。このようなヒットは、ブランチヒストリ39が命令アドレスの一部によって検索されることや、プロセススイッチによってメモリに入っている命令が変わってしまうことなどによって発生する。ハードウェアの簡単化のために、EX(エクセキュート)命令もファントムブランチとして扱われる。
【0046】
第2フィールドは、そのエントリに入っている命令がファントムブランチであることを示すファントムバリッド(1ビット)である。
【0047】
第3フィールドは、分岐の成立/不成立が確定したことを示すリゾルブド(1ビット)である。
【0048】
第4フィールドは、そのエントリに対応する分岐が成立したことを示すテークン(1ビット)である。
【0049】
第5フィールドは、最後の31番目のTIARフィールド、すなわち分岐先のアドレスを示すフィールドに有効な値が入っていることを示すターゲットアドレスバリッド(TAV,1ビット)である。
【0050】
第6フィールドは、ブランチヒストリ39から得られたターゲットアドレスと、分岐命令のオペランドを用いてエフェクティブアドレスジェネレータ(EAG)26によって計算されたターゲットアドレスとが一致したことを示すターゲットインストラクションアドレスマッチ(TIAR MATCH,1ビット)である。
【0051】
第7フィールドは、RSBRのエントリが割り当てられた時点、すなわち命令デコードの時点では分岐の成立/不成立を決定する条件コード(CC)の内容が確定しないことを示すペンディング(PNDG,1ビット)である。
【0052】
第8フィールドは、リインストラクションフェッチダン(REIFCH−DONE,1ビット)である。このビットは、例えばブランチヒストリ39にヒットして分岐先、すなわちターゲットアドレス以降の命令列が投機的に実行されたものの、そのターゲットアドレスとオペランドを用いてEAG26によって計算されたアドレスとが一致せず、その分岐命令の分岐先でなく、非分岐の後続命令を再実行する必要がある場合に、その非分岐後続命令列の再命令フェッチが行われ、分岐処理の完了時点で命令実行部に入っている本来実行されるべきでない命令をクリアする必要があることを示すものである。この命令再フェッチについては更に後述する。
【0053】
第9フィールドは、ブランチヒストリのターゲットアドレスが指す命令列が命令バッファにフェッチされたことを示すブランチヒストリターゲットアクティブ(1ビット)である。
【0054】
第10フィールドは、ブランチヒストリのターゲットアドレスが指す命令列が格納されているインストラクションフェッチポートのIDを示すブランチヒストリターゲットID(2ビット)である。ここではインストラクションフェッチポートが3つあるものとし、そのIDとして2ビットが必要となる。
【0055】
第11フィールドは、ヘッジフェッチによって分岐先のターゲットアドレスが指す命令列がインストラクションバッファにフェッチされたことを示すヘッジターゲットアクティブ(1ビット)である。ここでヘッジフェッチとは、ブランチヒストリにヒットせず、デコードの時点では成立/不成立が確定しない分岐命令に対して、分岐先の命令列をあらかじめインストラクションバッファにフェッチすることである。但しブランチヒストリにヒットしていないため、デコーダには分岐命令の後続命令、すなわち非分岐後続命令が与えられる。分岐先の命令列はフェッチされるだけであり、デコーダには与えられない。分岐が成立することが確定すると、命令実行部の内容がクリアされ、分岐先の命令列がデコーダに与えられる。不成立であることが確定すると、分岐先の命令列が入っているインストラクションフェッチポートの内容は無効となる。
【0056】
第12フィールドは、ヘッジフェッチされた命令列が格納されているインストラクションフェッチポートのIDを示すヘッジターゲットID(2ビット)である。
【0057】
第13フィールドは、エントリに入っている命令がブランチオンコンディション(BC,BCR,BRC)であることを示すBC(1ビット)である。これらの命令の内容については後述する。
【0058】
第14フィールドは、エントリに入っている命令がブランチオンカウント(BCT,BCTR,BRCT)であることを示すBCT(1ビット)である。
【0059】
第15フィールドは、エントリに入っている命令列がブランチオンインデックスハイ(BXH,BRXH)であることを示すBXH(1ビット)である。
【0060】
第16フィールドは、エントリに入っている命令がブランチオンインデックスローオアイコール(BXLE,BRXLE)であることを示すBXLE(1ビット)である。
【0061】
第17フィールドは、エントリに入っている命令がEX(エクセキュート)命令であることを示すEX(1ビット)である。
【0062】
第18フィールドは、そのエントリに対応する分岐命令がサブルーチンを呼び出すためのものであることを示すサブルーチンコール(1ビット)である。
【0063】
第19フィールドは、そのエントリに対応する分岐命令がサブルーチンから戻るためのものであることを示すサブルーチンリターン(1ビット)である。
【0064】
第20フィールドは、エントリに入っている命令のマスクフィールドを示すOPコード(OPC,4ビット)である。このマスクフィールドについては後述する。
【0065】
第21フィールドは、エントリに入っている命令のIID(命令識別子)を示すインストラクションID(4ビット)である。この識別子は前述のようにCSE20のエントリに対応して付けられる識別子である。
【0066】
第22フィールドは、ブランチヒストリ39にヒットした、例えば成立と予測された命令であることを示すブランチヒストリヒット(1ビット)である。
【0067】
第23フィールドは、ブランチヒストリのどのウェイにヒットしたかを示すブランチヒストリヒットウェイ(1ビット)である。
【0068】
第24フィールドは、ブランチヒストリのリプレイスフラグを示すリプレイスフラグ(2ビット)である。このリプレイスフラグは、例えばブランチヒストリがツーウェイ構成である場合に、RSBR23からの完了報告を受けてブランチヒストリの内容を更新する場合に所定のリプレイスアルゴリズムに従って更新するための情報である。
【0069】
第25フィールドは、ブランチヒストリのディジーヒット(1ビット)である。このディジーヒットはある時はブランチヒストリにヒットするが次にはヒットせず、またその次にはヒットするというように、ヒットするかしないかが交代的に変化することを示すものである。
【0070】
第26フィールドは、ブランチヒストリのギディービット(1ビット)を示す。このギディービットは分岐先のアドレス、すなわちターゲットアドレスが頻繁に変化することを示す。
【0071】
第27フィールドは、エントリに対応する命令の前にあって、エントリに対応する命令における条件コードを更新する命令の命令識別子を示すコンディションコードIID(4ビット)である。すなわちこの識別子CCIIDは、分岐命令の先行命令であって、その分岐命令に対する条件コードを変更することになる命令の識別子である。
【0072】
第28フィールドは、エントリに対応する命令の命令語の長さを示すインストラクションレングスコード(2ビット)である。
【0073】
第29フィールドは、エントリに対応する命令がどのインストラクションフェッチポートからフェッチされたかを示すストリームID(2ビット)である。
【0074】
第30フィールドは、エントリに入っている命令のインストラクションアドレスを示すインストラクションアドレスレジスタの内容である。そのビット数は30ビット+パリティビットとしての4Pビットである。本実施形態では、偶数アドレスしか許されていないものとし、31ビットでなく、30ビットによってそのアドレスが表される。
【0075】
第31フィールドは、分岐先のアドレスを示すターゲットインストラクションアドレスレジスタ(31+4Pビット)の内容である。
【0076】
図4は本発明の実施形態において用いられるブランチオンコンディション命令の命令形式の説明図である。同図(a) はBC命令であり、47は命令コード、Mはマスク、X,BおよびDは第2オペランドアドレスである。マスクMの内容と条件コード(CC)が一致した時に分岐が成立し、第2オペランドが分岐先アドレスとして使用される。
【0077】
条件分岐命令では、マスクフィールドの4ビットがそれぞれ条件コードの値0,1,2,3に対応し、条件コードの値がマスクフィールドの“1”のビットに対応すると分岐が成立する。例えばマスクフィールド4ビットが“1000”であり、条件コードが“0”であると分岐が成立する。
【0078】
図4(b) のBCR命令はBC命令と同様の命令であるが、分岐が成立する時は、第2オペランドとしてのRによって指定される汎用レジスタの内容が分岐先アドレスの生成に使用される。但しこのフィールドの内容が“0”の時は、無条件に分岐は不成立となる。
【0079】
図4(c) はブランチリラティブオンコンディション(BRC)命令の命令形式を示す。この形式においても、マスクMの内容と条件コードが一致した時に分岐が成立する。分岐先アドレスの生成においては、Iフィールドの内容によって現在の命令アドレスに加算すべき値が特定され、分岐先アドレスの生成が行われる。
【0080】
図5はブランチオンカウント命令の命令形式を示す。同図(a) のBCT命令では、第1オペランドRの内容から“1”が引かれ、その結果が再びRとして格納される。結果が“0”でない時には分岐が成立し、分岐先のアドレスは第2オペランドとしてのX,B、およびDによって与えられる。
【0081】
図5(b) のBCTR命令では、同様に第1オペランドRから“1”が引かれ、その結果が“0”でない時には分岐が成立する。分岐先アドレスは第2オペランドのRによって指定される汎用レジスタの内容として与えられる。Rフィールドが“0”である時には、無条件に分岐は不成立となる。
【0082】
図5(c) のBRCT命令でも同様にRの内容から“1”が引かれ、その結果が“0”でない時に分岐が成立する。分岐先のターゲットアドレスは、BRC命令におけると同様にIフィールドの内容に基づいて求められる。
【0083】
図6はブランチオンインデックスハイ命令の命令形式を示す。同図(a) はBXH命令を示す。第1オペランドRの内容に増分値が加算され、その結果が比較値と比較される。そして和が比較値より大きい時分岐が成立する。Rフィールドは増分値と比較値が入っているレジスタを指定するものであり、分岐先アドレスは第2オペランドアドレス、すなわちB,Dによって指定される。
【0084】
図6(b) はBRXH命令の命令形式である。BXH命令と比較すると、分岐先アドレスがBRCおよびBRCT命令と同様に、Iフィールドの内容に基づいて求められる点のみが異なっている。
【0085】
ブランチオンインデックスローオアイコール命令としてのBXLE,BRXLE命令の命令形式はBXH,BRXH命令の命令形式と同じである。BXLE,BRXLE命令においては、第1オペランドと増分値との和が比較値より小さいか、等しい時に分岐が成立する。分岐先アドレスはBXH,BRXH命令におけると同様に生成される。
【0086】
ブランチアンドセーブ命令などのBAS,BASR、およびBRAS命令では、更新された命令アドレスを含む現在のプログラムステータスワード(PSW)からの情報、例えばPSWのビット32〜63が第1オペランドの位置に連係情報としてロードされた後に、分岐が実行される。その意味ではこれらの命令は基本的には無条件分岐命令である。BAS命令では、第2オペランドのアドレスが分岐先アドレスとして使用される。BASR命令では、第2オペランドのRによって指定される汎用レジスタの内容が分岐先アドレスの生成に使用される。この時Rフィールドの内容が“0”であると、分岐は不成立となる。またBRAS命令では、例えばBRC命令などと同様にIフィールドの内容に基づいて分岐先アドレスが求められる。
【0087】
ブランチアンドリンク命令としてのBAL、およびBALR命令は、プログラムのアドレス指定モードに対応してBAS、およびBASR命令の代わりに用いられるものであり、その命令形式はBAS、およびBASR命令と同様であるので、その説明を省略する。
【0088】
ここで図3の第27エントリに格納される条件コード更新命令の命令識別子CCIIDの格納が必要な理由と、アウトオブオーダ方式による命令の並列実行による処理速度の向上について、図7を用いて説明する。同図において、情報処理装置に順次与えられる命令に対して、各命令を識別するための識別子IIDが、コミットスタックエントリCSE20によって与えられる。その値は最初の比較命令Cに対して“0”、ロード命令Lに対して“1”、ブランチオンコンディション命令BCに対して“2”、ストア命令Sに対して“3”,・・・となっている。
【0089】
本実施形態においては、3つの命令が1サイクルで一度にデコードされるものとすると、最初の3つの命令のうち3番目の命令BCは分岐命令であるため、この命令のデコードの時点でRSBR23に対してこの命令に対応するエントリが作成される。この命令BCに対する条件コードCCの内容は、最初の比較命令Cの結果によって与えられるものとする。
【0090】
次の3つの命令のうち2番目のブランチオンコンディション命令BCに対して、同様にRSBR23にエントリが作成される。この命令に対する条件コードの内容は、直前の減算命令Sの実行結果に対応して与えられるものとする。このサイクルでは第3の加算命令Aまでの3つの命令が一度にデコードされる。以下同様に3つの命令が一度にデコードされる動作が繰り返される。
【0091】
命令の並列実行の結果として、これらの命令のうちIIDが“1”のロード命令Lが最初に、次にIIDが“3”の減算命令Sが実行されるものとする。
【0092】
この減算命令Sは、次のブランチオンコンディション命令BCに対する条件コードの内容を決定するものであり、BC命令に対応するエントリにはCCIIDとして減算命令Sに対する“3”が格納されており、演算ユニットからこの命令実行が終了したことがIID=3を伴って報告されることにより、RSBR23はBC命令に対する条件コードの内容が確定されたことを知り、その命令を実行することができる。
【0093】
次にIIDが“5”の加算命令A、“0”の比較命令Cがこの順序で実行されるものとすると、比較命令CはIIDが“2”のブランチオンコンディション(BC)命令の条件コードの内容を確定する命令であり、この命令の実行によってIIDが“2”のBC命令は実行可能となる。IIDが“4”のBC命令はこの命令より先にその実行が終了しているが、CSE20への完了報告は命令実行順序に従って行われるために、先にIIDが“2”のBC命令に関する終了報告が行われ、その後にIIDが“4”のBC命令の完了報告が行われる。
【0094】
このように、例えばBC命令に対する条件コードの内容を確定する先行命令に対する命令識別子をCCIIDとしてエントリに格納しておくことにより、その先行命令の終了を直ちに知ることができ、実行可能な分岐命令を命令の実行順序に無関係に実行することが可能となり、全体として情報処理装置の命令処理速度が向上することになる。
【0095】
続いてRSBR23の動作について、情報処理装置に与えられる命令や、処理装置内のデータに関連して説明する。RSBR23は図3で説明したように分岐に関する情報を保持するものであり、その情報を基にして分岐の判断、再命令フェッチの指示、ブランチヒストリの更新、CSE20への分岐結果の報告などを行う。
【0096】
まず、RSBR3のエントリが割り当てられる命令について説明する。前述のBC,BCR,BCT,BCTR,BXH,BXLE,BRAS,BRC,BRCT,BRXH,BRXLE,BAL,BALR,BAS,BASRの各命令であって、命令デコードのサイクルで分岐が成立すると判断できるか、あるいはデコードサイクルでは分岐成立/不成立の判断を行うことができない命令に対してRSBRのエントリが割り当てれらる。その他にも、ブランチヒストリにヒットした命令(ファントムブランチを含む)、およびEX命令に対応してエントリが割り当てられる。ここでEX命令にエントリが割り当てられる理由について説明すると、EX命令は分岐命令と似たフォーマットを持っており、オペランドでターゲット命令が指定される形式になっている。すなわち分岐命令で分岐が成立する場合と似ており、その意味でEX命令にもエントリが割り当てられる。
【0097】
デコードサイクルで分岐が不成立であることがか確定する命令として、BC,BCR,BRCの各命令でマスクが“0”である場合、またBCR,BCTR,BASR,BALR、の各命令で第2オペランドが“0”である場合があり、このような場合にこれらの命令に対してはエントリの割当ては行われない。これらの命令に対して誤って分岐が成立すると予測された場合には、その命令はファントムブランチとして処理される。
【0098】
分岐の成立/不成立の判断について、図8を用いて更に説明する。図8は、RSBR23の内部の分岐確定処理部41による各種のデータを用いた分岐判断の説明図である。分岐確定処理部41の具体的構成については後述する。
【0099】
分岐確定処理部41に対しては、RSBR23の各エントリの中で図に示す必要なデータが与えられる他に、プログラムステータスワード(PSW)処理部42から条件コードIU CCが与えられる。この条件コードは命令制御ユニットで持っている条件コードであり、後述するようにアドレス計算のAサイクルで分岐の成立/不成立を判断するために用いられる。
【0100】
Eユニット43とEユニットインタフェース44は演算器を構成するものであり、EUCC,EUMSG,EUCC−IID EUMSG−IIDを分岐確定処理部41に与える。すなわち演算器は、演算が終了するとその終了した命令の識別子EUCC−IIDと、その条件コードEUCCを分岐確定処理部41に与える。また必要に応じ、メッセージEUMSGとその識別子EUMSG−IIDとを分岐確定処理部41に与える。
【0101】
RSBR23にエントリが割り当てられる分岐命令は次の3つに分類される。第1のものは無条件分岐命令である。これは命令のデコードサイクルで分岐が成立することが判断できる命令である。エントリの割当てと同時にそのエントリのテークンビットが“1”にセットされる。BAS,BRAS,BAL命令は無条件分岐命令であり、更に第1オペランドが“F”であるBC,BRC命令、第1オペランドが“F”で、かつ第2オペランドが“0”以外となっているBCR命令、および第2オペランドが“0”以外であるBASR,BALR命令がこの第1の分類に属する。
【0102】
第2の分類は条件コードに基づいて分岐判断が行われる命令である。この種の命令は、更にデコード時に条件コードが確定している場合と、確定していない場合との2つに分類される。
【0103】
この種の命令では第1オペランド、すなわちマスクフィールドと条件コードCCとの比較によって分岐の判断が行われる。第1オペランドが“0”,“F”以外であるBC,BRC命令、第1オペランドが“0”,“F”以外で、かつ第2オペランドが“0”以外であるBCR命令が、条件コードで分岐判断が行われる命令である。
【0104】
デコードサイクルで条件コードが確定している(PNDG=0)場合には、アドレス計算のAサイクルで分岐の判断が行われ、その結果に応じてテークンビットのセットが行われる。原理的にはデコードのDサイクルで分岐の判断を行うことは可能であるが、処理が重くなるため、本実施形態ではAサイクルで分岐の判断が行われる。
【0105】
DサイクルでCCの値が確定していない(PNDG=1)場合には、CCの内容が確定するまで分岐の判断を行うことはできない。条件コードの確定後すぐに分岐の判断が行えるように、前述のCCIIDフィールドがエントリに用意されている。これは分岐命令の条件コードを更新する先行命令のIIDを示し、PNDGビットが“1”である間、このCCIIDの値と演算器から送られる演算の終了した命令の識別子を示すEUCC IIDとの比較が行われ、条件コードの更新が終了したかどうかの監視が行われる。CCが確定すると直ちに分岐判断が行われ、その結果に応じてテークンビットがセットされる。
【0106】
第3の分類として、オペランドの計算結果によって分岐判断が行われる命令がある。これは分岐命令自身のオペランドに対する加算、あるいは減算結果によって分岐判断が行われるものであり、BCT,BXH,BXLE,BRCT,BRXH,BRXLEの各命令、および第2オペランドが“0”以外であるBCTR命令がこの分類に属する。演算器での演算が終了した後に分岐判断が行われ、その結果に応じてテークンビットがセットされる。演算器での処理が必要なため、分岐判断は必ずDサイクルより後になる。
【0107】
次に命令デコード時にブランチヒストリ39にヒットした場合に、エントリに格納される分岐先のターゲットアドレスが有効か否かを判定する処理について説明する。分岐先のアドレスが変更されている場合などのために、ブランチヒストリ39から得られたターゲットアドレスが正しい飛び先を指しているかどうかの判定が必要となる。図2のエフェクティブアドレスジェネレータ(EAG)26によって命令のオペランドから正しいターゲットアドレスが計算されると、その値とブランチヒストリ39から得られ、エントリに格納されているターゲットアドレスとが比較される。一致する場合にはTIAR−MATCHビットが“1”にセットされ、一致しない場合には“0”にセットされ、EAG26による計算結果がTIARに格納される。
【0108】
次にRSBRの処理のうち、再命令フェッチの指示を行う再命令フェッチ処理部の処理について図9を用いて説明する。同図において再命令フェッチ処理部46は、RSBR23のエントリの各種のデータを用いて再命令フェッチが必要な場合に再命令フェッチのアドレスを図2の命令フェッチエフェクティブアドレスジェネレータ(IFEAG)11に与えると共に、命令フェッチのコントローラ(IFCTL)47に再命令フェッチリクエストを、また記憶制御(S)ユニット48に命令フェッチポートをクリアさせる信号を与える。
【0109】
再命令フェッチは、命令バッファ16の内容を一度全てクリアして、その後指定された命令アドレスから指定される命令列を命令バッファに取り込む作業のことである。RSBR23は、以下のような場合に再命令フェッチを行うように指示を出す。
【0110】
▲1▼ ブランチヒストリにヒットしたが、その命令に対する分岐が不成立である場合。
【0111】
▲2▼ ブランチヒストリにヒットし、分岐が成立したが、ブランチヒストリに格納されたターゲットアドレスがEAG26によって計算された正しい値と一致しない場合。
【0112】
▲3▼ ブランチヒストリにヒットし、その分岐は成立したが、ターゲット命令を命令バッファ16にフェッチする動作を開始していない場合。
【0113】
▲4▼ ブランチヒストリにヒットしなかった分岐が成立し、かつその分岐に対応するヘッジフェッチが行われていない場合。
【0114】
▲5▼ EX命令のターゲット命令のフェッチの場合。前述のようにEX命令ではそのオペランドによってターゲット命令が指定され、そのターゲット命令へのジャンプが必要となる。
【0115】
▲6▼ EX命令の次の命令のフェッチの場合。EX命令に対するターゲット命令の実行後には、一般に元の位置の命令に戻るための命令フェッチが必要となる。
【0116】
▲1▼,▲2▼は分岐成立の予測がはずれて再命令フェッチが必要になる場合であり、▲3▼は分岐成立の予測どおりに分岐成立したものの、何らかの不都合で、そのターゲット命令のフェッチ動作が開始されていないため、再命令フェッチを起動した方が良いと判断される場合である。▲4▼は分岐不成立の予測がはずれて再命令フェッチが必要になる場合である。▲5▼,▲6▼はEX命令に対する場合であり、▲5▼は分岐不成立の予測がはずれた場合と同様に扱われ、▲6▼は分岐成立の予測がはずれた場合と同様に扱われる。
【0117】
分岐不成立の予測がはずれて再命令フェッチが行われる場合には、当然分岐成立後の分岐先アドレスとしてのTIARの値(TIAR−MATCH=0の場合はEAG26によって計算された正しい値)が再命令フェッチアドレスとなる。分岐成立の予測がはずれて再命令フェッチが行われる場合には、インストラクションアドレスレジスタ(IAR)10の値と命令語の長さILCとの和、すなわち分岐命令の次の命令のアドレスが再命令フェッチアドレスとなる。
【0118】
図10はRSBRにおけるエントリの割当てと解放の説明図である。正しい順序でプログラムを実行するためには、例えば再命令フェッチ要求はインオーダで行われる必要がある。そのためRSBRは図10に示すようにリングバッファとなっている。RSBRにはインポインタとアウトポインタが備えられ、そのエントリはプログラム本来の実行順序に従ってRSBRインポインタ、RSBRインポインタ+1、RSBRインポインタ+2,・・・の順番に割り当てられる。RSBRアウトポインタによって指されるエントリから再命令フェッチが行われないことが確定しない限り、RSBRアウトポインタ+1によって指されるエントリから再命令フェッチ要求が出されることはなく、RSBRアウトポインタとRSBRアウトポインタ+1によって指されるエントリとの両方から再命令フェッチが行われないことが確定しない限り、RSBRアウトポインタ+2によって指されるエントリから再命令フェッチ要求が出されることはない。
【0119】
再命令フェッチが必要な場合、RSBRエントリには本来実行されてはならない命令に対応するデータが格納されている可能性があり、このようなエントリは再命令フェッチ後直ちに解放されなければならない。これは命令実行部と命令フェッチ部とが別々に動作しているためである。このエントリ解放を直ちに実行しないと、再命令フェッチが行われてからその命令に対する完了報告がCSE20に行われるまでの間に、RSBRエントリ内の誤った情報に基づく命令フェッチが行われる可能性がある。そのため再命令フェッチが必要であると判断されると、そのエントリより後にある全てのエントリは直ちに解放される。
【0120】
また命令実行部にも本来実行されてはならない命令が入っている可能性があり、これもクリアされなければならない。再命令フェッチの処理により、正しい命令列の命令バッファ16のフェッチが開始されると、再命令フェッチを指示したエントリのREIFCH DONEビットが“1”にセットされる。このビットの値は、CSE20への完了報告にあたって、フラッシュRS信号生成のためにCSE20に送られ、この信号の値が“1”である場合には命令実行部のクリアが行われる。
【0121】
次に、RSBR23のエントリに対応する分岐命令の処理が終了した時点で、CSE20に対して完了報告を行う完了報告処理部の動作について図11を用いて説明する。同図において、CSE20に対して完了報告として完了報告処理部51からコンプリート信号が出力されるのに加えて、再命令フェッチフラッシュ信号、テークン信号、およびIIDがCSE20に与えられるコンプリート信号は分岐処理の完了を示し、再命令フェッチフラッシュ信号はCSE20への完了報告に際して命令実行部のクリアの処理が必要となっていることを示す。テークン信号はRSBRのエントリのテークンビットそのものであり、分岐の成立/不成立の確定結果を示す。IIDはどの命令に対する完了報告であるかを示し、CSE20とRSBR23のエントリに1対1に対応するIIDがつけられている。
【0122】
以下の▲1▼〜▲6▼の場合に分岐処理が完了したと判定され、コンプリート信号がHとなる。
【0123】
▲1▼ 分岐成立の予測が当たり、正しいターゲット命令が命令バッファ16にフェッチされている場合。
【0124】
▲2▼ 分岐不成立の予測が当たった場合。
【0125】
▲3▼ 再命令フェッチの処理が完了した場合。
【0126】
▲4▼ ファントムブランチであることが判明した場合。
【0127】
▲5▼ EX命令の処理が完了した場合。
【0128】
▲6▼ ヘッジフェッチが行われ、分岐の成立が確定した場合。
【0129】
再命令フェッチフラッシュ信号は、分岐処理完了時のRSBRエントリのREIFCH DONEビットの値そのものである。再命令フェッチが行われるか、ヘッジフェッチが行われた命令に対して分岐が成立した場合のいずれかの場合には命令実行部のクリアが必要となり、このビットの値が“1”にセットされる。
【0130】
すなわち、ヘッジフェッチが行われた命令に対する分岐が成立した場合には、命令バッファ16には必要な命令列がすでに格納されており、再命令フェッチは不必要である。しかしながら命令実行部には実行されてはならない命令が入っている可能性があり、命令実行部のクリアが必要となる。
【0131】
プログラム本来の実行順序を守るために、完了報告はインオーダで行われる。RSBRアウトポインタによって指される命令が、例えば不成立であることが確定しない限り、RSBRアウトポインタ+1が指すエントリに対応する完了報告は行われず、RSBRアウトポインタとRSBRアウトポインタ+1が指す分岐命令が、例えば共に不成立であることが確定しない限り、RSBRアウトポインタ+2によって指されるエントリに対する完了報告は行われない。
【0132】
次にブランチヒストリの格納内容更新について図12を用いて説明する。同図において、図11で説明した完了報告指示部51からのコンプリート信号を受けて、ブランチヒストリ39に更新を指示するブランチヒストリ更新指示部52がRSBR23の内部に備えられている。ブランチヒストリ更新指示部52からブランチヒストリ39に対して、BRHISテークン、BRHISノットテークン、およびBRHISファントムの3つの信号がブランチヒストリに送られる。この3つのビットが全て“0”となっている場合には、後述するようにブランチヒストリの更新は行われない。この3ビットの他に、各種の信号がRSBR23のエントリからブランチヒストリ39に送られ、これらの信号に基づいてブランチヒストリ39の格納内容の更新が行われる。
【0133】
以上において、データの流れを中心としてRSBRの動作について説明したが、以後RSBRの具体的な構成例について更に説明する。
【0134】
図13はRSBRの具体的な構成例を示すブロック図である。同図において、RSBRのデータが格納されるエントリ60としてエントリ1〜エントリ8がある。またデコーダインタフェース61の内部に、エントリに分岐命令、または分岐に関する処理についてのデータをロードするためのデータロード制御部62、次にどのエントリにデータをロードすべきかを指定するインポインタ63、分岐命令の条件コードを変更する先行命令の実行が終了していない場合、すなわちペンディングとなっている条件コードに関する処理を実行するペンディング条件コード処理部64を備えている。
【0135】
更にRSBRの構成要素としては、エフェクティブアドレスジェネレータEAG26からの信号を受け取るEAGインタフェース65、演算部から演算実行が終了した命令の識別子、すなわち条件コードを変更する先行命令のIIDを受け取るためのEUCCインタフェース66、および次にどのエントリの完了報告を行って、そのエントリを解放すべきかを指定するアウトポインタ67を備えている。
【0136】
更にRSBRは、図8で説明した分岐確定処理部41、図9で説明した再命令フェッチ処理部46、図11で説明した完了報告処理部51、および図12で説明したブランチヒストリ更新指示部52を備えている。
【0137】
図14は、図2のコミットスタックエントリ(CSE)20の内部で、本発明に直接関連する部分を示したCSEの構成ブロック図である。同図において、再命令フェッチフラッシュ処理部69は、例えばブランチヒストリ39にヒットしたにもかかわらず、分岐が不成立であり、再命令フェッチが行われた場合に命令実行部などのクリアを行うためのものである。その動作については更に後述する。
【0138】
図15はデータロード制御部62の一部としてのロードデータ決定部の構成例を、図16は図15と関連して図2のインストラクションワードレジスタ(IWR)17,デコーダ18の構成例を示す。本実施形態においては命令バッファ16に与えられた命令は1サイクルで3つずづ取り出されてIWR17を構成する3つのレジスタIWR0,IWR1,IWR2にロードされ、この3つの命令はそれぞれデコーダ18を構成する3つのデコーダ71a,71b,71cでデコードされる。
【0139】
最初の命令のオペレーションコード(オペコード)をD0、次の命令のオペコードをD1、最後の命令のオペコードをD2とする。それぞれの命令のオペレーションコードがデコードされ、分岐命令と判別された時に例えばデコーダ71aの出力はHとなり、D0に対応する命令のデコード終了時のリリース信号と共にアンドゲート72aに与えられることによって、D0から分岐に関係するデータをRSBRエントリにロードすべきことを示すD0−LOAD−RSBR信号が出力される。
【0140】
図17は、データロード制御部62の一部としてのエントリ毎のロードデータ指定部の構成例を示す。同図の回路は、RSBRのn番目のエントリに、D0,D1、およびD2のいずれの命令から、分岐に関するデータがロードされるべきかを指定するものである。
【0141】
図17において、例えば図15のロードデータ決定部から、D0に対応してエントリを作成すべきことを示すD0−LOAD−RSBR信号がアンドゲート74に入力されると、その時点でRSBRのインポインタがn番目のエントリを指している場合にはインポインタEQ−n信号がHとなり、アンドゲート74の出力がHとなって、D0からのデータをn番目のエントリにロードすべきことを示すLOAD−RSBRn−FROM−D0信号がHとなる。また同時にエントリのバリッドビットをオンにするための信号、すなわちオアゲート87の出力がHとなる。
【0142】
次に、D0に対応してエントリを作成する必要がなく、D1に対応してエントリを作成する必要がある場合には、3つの入力信号のうちD1−LOAD−RSBR信号がHとなり、アンドゲート75の出力がHとなって、アンドゲート76に入力される。この時アンドゲート76に対しては、アンドゲート74に対すると同様にインポインタEQ−n信号が入力されており、これがH、すなわちインポインタがn番目のエントリを指していれば、アンドゲート76、オアゲート77、および87の出力はHとなって、オアゲート77からはD1からのデータをn番目のエントリにロードすべきことを示す信号がHとして出力される。
【0143】
同様にD0,D1のデコード結果に対してはエントリを作成する必要がなく、D2に対してのみエントリを作成すべき場合には、アンドゲート78a,83、オアゲート85,87の出力がHとなり、オアゲート85からはデコード結果D2からn番目のエントリにデータをロードすべきことを示す信号がHとして出力される。
【0144】
次にD0とD1の2つに対応してエントリを作成する必要がある場合には、まずアンドゲート78bの出力がHとなり、その出力はアンドゲート79に入力される。アンドゲート79のもう一方の入力にはインポインタEQ−n−1信号が入力されている。この信号は、インポインタがn−1番目のエントリを指している時にHとなる信号である。
【0145】
すなわち、ここではD0からのデータはn−1番目のエントリ、またD1からのデータはn番目のエントリに格納されることになる。図17はn番目のエントリに格納されるデータを指定するものであり、インポインタがn−1番目のエントリを指している時に、n番目のエントリにはD1からのデータが格納される。
【0146】
そこでインポインタがn−1番目を指している時にはアンドゲート79、オアゲート77,87の出力はHとなり、オアゲート77からD1からのデータをn番目のエントリに格納すべき信号がHして出力される。
【0147】
同様にD0とD2、またはD1とD2からのデータに対してそれぞれエントリが、すなわちエントリが2つ作成されるべき場合には、アンドゲート80aまたは80bの出力がHとなり、オアゲート81、アンドゲート84、オアゲート85,87の出力がHとなって、オアゲート85からn番目のエントリにD2からのデータを格納すべきことを示す信号がHとして出力される。この時D0、またはD1からのデータはn−1番目のエントリに格納されることになる。
【0148】
最後にD0〜D2の3つの命令に対応して全てエントリを作成すべき場合には、アンドゲート82の出力がHとなる。この出力はアンドゲート86に入力されている。アンドゲート86のもう一方の入力端子にはインポインタEQ−n−2信号が入力されており、この信号はインポインタがn−2番目のエントリを指す時にHとなる。すなわち、ここではD2からのデータがn番目のエントリ、D1からのデータがn−1番目のエントリ、D0からのデータはn−2番目のエントリに格納されるべきことになり、図17の回路からはオアゲート85の出力として、D2からのデータをn番目のエントリに格納すべきことを示す信号がHとして出力される。
【0149】
図18はRSBRのインポインタ63の構成例を示す。前述のように、本実施形態においては3つの命令を一度にデコードするため、その中に例えば分岐命令が2つ含まれる場合には、インポインタの値を2つ進ませる必要がある。ポインタの出力は3ビットのD−FF101の出力であり、000,001,・・・,111、すなわち0〜7をカウントするものである。セレクタ97を介して、一度にデコードされる3つの命令のうちで分岐命令がいくつ含まれるかに応じて、現在のカウンタ101の出力、+1、+2,+3のそれぞれのインクリメンタ98,99,100の出力のいずれかをカウンタ101に入力させることによって、インポインタの出力を得ることができる。
【0150】
3つの命令のオペコードD0,D1、およびD2のそれぞれのデコード結果に対応して、RSBRにエントリを作成すべきことを指示する3つの信号の入力がいずれもLである場合には、インバータ90a〜90cの出力は全てHとなり、アンドゲート91の出力によって、セレクタ97は現在のカウンタ101の出力をそのままに保たせるように(0を加算する)動作を行う。
【0151】
3つのエントリ作成指示信号のうちいずれか1つがHである場合には、オアゲート93の出力によってインクリメンタ98の出力がセレクタ97によって選択され、カウンタ101の出力は“1”だけインクリメントされる。
【0152】
エントリ作成指示信号のうち2つがHである場合は、オアゲート95の出力によってインクリメンタ99の出力が選択され、カウンタ101の出力は“2”だけインクリメントされる。
【0153】
更に3つの作成指示信号が全てHである場合には、アンドゲート96の出力によりインクリメンタ100の出力が選択され、カウンタ101の出力は“3”インクリメントされる。
【0154】
図19はRSBRのアウトポインタ67の構成例である。同図においてセレクタ105、インクリメンタ106〜108、カウンタ109は図18のインポインタにおけると同様の動作を行うものである。
【0155】
しかしながら、図10で説明したようにRSBRのエントリの解放はインオーダで行う必要がある。本実施形態においては、インポインタに対すると同様に、アウトポインタの更新時にも3つのエントリに対して同時にエントリの解放ができるか否かを調べるものとする。なおこの一度に調べるエントリの個数は、同時にデコードされる命令の数としての“3”とは無関係であり、任意の数に設定することが当然可能である。
【0156】
図19において、現在のアウトポインタの指す値がトップとされ、次の値がセカンド、更に次の値がサードとされる。例えばアウトポインタの指す値が5であれば、トップが5、セカンドは6、サードは7である。
【0157】
ここで前述のように、RSBRのエントリーの解放は、インオーダで最大3個まで同時に行えるようになっており、セカンドのエントリーを解放する際には必ず同時にトップのエントリーを解放する事が条件となっており、またサードのエントリーを解放する際には必ず同時にトップとセカンドの両方のエントリーを解放する事が条件となっている。
【0158】
すなわち、RSBRのエントリーの解放は、
・いずれのエントリーも解放しない。
【0159】
・トップのエントリーのみの解放。
【0160】
・トップとセカンドの両方のエントリーの解放。
【0161】
・トップとセカンドとサードの3個のエントリーの解放。
の4つの場合がある。
【0162】
いずれの場合も、解放されなかったエントリーのうち、最も実行順序の古いエントリーが次のサイクルではトップのエントリーとなる。
【0163】
具体的には図18でアウトポインタの動作を説明する。
【0164】
まず3つのエントリに対応するコンプリート信号、すなわち分岐に対する処理が全て終了してエントリを解放すべきことを指示するコンプリート信号の値がすべてLである場合には、セレクタ105への選択制御信号のうちインバータ103aの出力のみがHとなり、セレクタ105は“0”の加算を示す信号をカウンタ109に出力し、カウンタ109の出力はそのままの値に保たれる。
【0165】
トップのエントリに対するコンプリート信号のみがHとなった場合には、アンドゲート104aの出力がHとなり、インクリメンタ106の出力が選択され、カウンタ109の出力は“1”だけインクリメントされる。
【0166】
次にトップとセカンドのエントリのそれぞれに対応するコンプリート信号が共にHとなった場合には、アンドゲート104bの出力がHとなり、インクリメンタ107の出力がセレクタ105によって選択されて、カウンタ109の出力は“2”だけインクリメントされる。
【0167】
更にトップ、セカンド、サードの3つのエントリに対応するコンプリート信号がいずれもHとなった場合には、サードのエントリに対応するコンプリート信号がそのまま選択制御信号としてセレクタ105に与えられ、インクリメンタ108の出力が選択されて、カウンタ109の出力は“3”インクリメントされる。
【0168】
図20は図13のEAGインタフェース65の構成例である。同図においては、図2のエフェクティブアドレスジェネレータ(EAG)26によって生成された分岐命令に対する正しい分岐先アドレスと、ブランチヒストリ39から得られたTIAR、すなわちターゲットアドレスとの比較が行われる。
【0169】
まず比較器111によって、EAG26によって生成されたアドレスに対応する命令の識別子EAG IIDと、RSBRの0〜7の各エントリに格納されている命令の識別子IIDとが比較され、その比較によってどのエントリに対応するターゲットアドレスが生成されたかが判明する。
【0170】
その結果に従ってセレクタ112によって各エントリに格納されているTIARのうちの1つが選択され、比較器113によってEAG26によって生成されたアドレスと比較されて、一致すると判定された時に、比較器113の出力によってエントリ内のTIAR−MATCHビットが“1”にセットされる。また比較器111の出力によってエントリ内のターゲットアドレスバリッドビットの値が“1”にセットされる。なお図20において例えばRSBR0 IIDはRSBR23のエントリ0に格納されているIIDを意味する。
【0171】
図21は図13のペンディング条件コード処理部64の構成例を示し、また図22は、このペンディング条件コード処理部の動作を説明するための、命令列の例を示す。これらの図を用いて、ペンディング条件コード処理部64による処理について説明する。
【0172】
前述のように、1つのサイクルで3つの命令が一度にデコードされるものとする。図22において、まず最初の3つの命令、すなわちロード命令、加算命令、およびストア命令がそれぞれD0,D1,D2に対応してデコードされる。これらの3つの命令のうち、命令識別子IID=1の加算命令は、後続のIID=3の分岐命令(BC命令)に対する条件コードの内容を決定するものであり、この命令が終了するまでは、後続のBC命令の分岐の確定を行うことができない。
【0173】
この3つの命令がデコードされるサイクルをサイクルiとする。D1に対応するIID=1の加算命令のデコード結果に対応して、そのIIDをペンディングコンディションコードテーブル(PCCT)−IID119にセットするためのD1−CCST信号が、D1に対するリリース信号と共にアンドゲート115bに与えられることによって、このアンドゲートの出力はHとなり、その出力はアンドゲート117に入力される。アンドゲート117のもう一方の入力、すなわちアンドゲート115cの反転出力もHであり、アンドゲート117の出力によってセレクタ118への入力のうちIID1、すなわち、加算命令に対応するIIDとしての“1”が選択され、この値が例えば4ビットのFF(0000から1111、すなわち0から15までの値を格納)によって構成されるPCCT−IID119にセットされる。このセットのためのクロック信号は、アンドゲート115bの出力がオアゲート120を介して与えられることによって供給される。またオアゲート120の出力は、PCCT−VAL121を構成するセットリセットFFをセットする。
【0174】
次のサイクルi+1では、IIDが3〜5の分岐命令、ロード命令、および減算命令がそれぞれD0,D1,D2に対応してデコードされる。このサイクルでは、すでにPCCT−VALの値はH、PCCT−IID119の値は“1”となっており、一方後述するようにナンドゲート125の出力はHとなっているため、アンドゲート122の出力はHとなり、バッファ123aの出力としてのD0ペンディング信号はHとなり、またバッファ126の出力としてのD0−CCIIDの値は“1”となる。
【0175】
そこでD0に対応するIID=3の分岐命令に対応してRSBR上に作成されるエントリに対しては、ペンディングビットの値が“1”とされ、CCIIDの値として“1”が格納される。この時オアゲート123b,123cの出力としてのD1ペンディング、D2ペンディングの信号もHとなるが、対応するロード命令、および減算命令は分岐命令でないため、これらの信号は意味を持たず、参照されることはない。
【0176】
サイクルi+1における3つ目の命令としての減算命令も条件コードをセットするものである。このためD2−CCST信号がHとなり、リリース信号と共にアンドゲート115cに与えられ、セレクタ118によってIID2、すなわち減算命令に対応するIID=5がPCCT−IID119に格納される。そしてPCCT−VAL121は再びセットされる。
【0177】
サイクルi+2では、次の3つの命令としてのIID=6〜8に対応する比較命令、分岐命令、および比較命令がそれぞれD0,D1,D2に対応してデコードされる。D1に対応するIID=7の分岐命令の条件コードを変更する先行命令はD0に対応するIID=6の比較命令であり、この分岐命令に対するCCIIDの値は“6”である。
【0178】
このため、まずD0に対応して条件コードをセットするD0−CCST信号がHとなり、リリース信号と共にアンドゲート115aに与えられることによって、その出力はHとなる。一方アンドゲート115b,115cの反転出力は共にHであり、アンドゲート116の出力がHとなることによって、セレクタ118によりIID0、すなわちIID=6が選択され、この値がPCCT−IID119に上書きされる。
【0179】
この時、同時にD1に対応する分岐命令によって、RSBR上にエントリが作成されるが、そのエントリに格納されるペンディングビットの値としてはオアゲート123bの出力であるD1ペンディング信号の値としてのH、CCIIDの値としてはIID0の値、すなわちIID=6がセレクタ127を介してD1−CCIIDとして出力されており、RSBRのエントリーのペンディングビットの値は‘1’CCIIDの値は‘6’となる。
【0180】
次に図21に関してPCCT−VAL121を構成するセットリセットFFのリセットについて説明する。このFF121は、PCCT−IID119に格納されているIIDが有効、すなわち条件コードを変更する、実行を開始してまだ完了していない命令が存在する事を示すものである。条件コードを変更する命令の実行が終了した時点で、この命令の識別子を保持する必要性はなくなる。そこで先行命令の終了時点でFF121はリセットされる。このFFの反転リセット入力端子にLが入力されることによってリセットが行われるが、このリセット信号はナンドゲート125の出力として与えられる。
【0181】
ナンドゲート125には、先行命令の終了を示すコミット信号が有効であることを示すコミットバリッド信号と、比較器124の出力とが入力される。比較器124は、実行が終了した命令の識別子、すなわちコミットIIDと、PCCT−IID119に格納されているIIDとを比較するものであり、この2つの命令が一致し、かつコミットバリッド信号がHの時にナンドゲート125はLを出力し、FF121はリセットされる。
【0182】
再度図21において、同一サイクルでデコードされる3つの命令のうちに、分岐命令と、その分岐命令の条件コードを変更する先行命令とが含まれている場合の、エントリに格納すべきCCIIDの出力について説明する。
【0183】
これは3つの命令のうちでD1、またはD2が分岐命令に対応するデコード結果であり、D0またはD1がその条件コードを変更する先行命令に対応するデコード結果であることを意味する。例えばD1が分岐命令、D0がその先行命令のデコード結果であるとすれば、D1に対応して作成されるエントリにはIID0が格納されなければならない。これを選択するのはセレクタ127である。セレクタ127は、D0に対する条件コードセット信号とリリース信号とがHの時に、アンドゲート115aの出力がHなることにより、そのサイクルにおけるIID0を選択して、D1−CCIIDの値として出力することになる。
【0184】
次にデコード結果D2が分岐命令、D0、またはD1がその先行命令に対応するデコード結果である時には、セレクタ128によってIID0、またはIID1が選択されて、D2−CCIIDとして出力される。デコード結果D1に対応する条件コードセット信号、およびリリース信号がHである時に、アンドゲート115bの出力がHとなることによってIID1の選択が行われる。これに対してデコード結果D0に対する条件コードセット信号、およびリリース信号がHとなった時、アンドゲート115aの出力がHとなり、この時アンドゲート115bの出力がLであれば、アンドゲート130bの出力がHとなることによって、IID0が選択される。
【0185】
図23は図13のEUCCインタフェース66の構成例である。同図においては、RSBRの各エントリに格納されている分岐命令の条件コードを更新する先行命令の識別子、すなわちCCIIDと、演算器側で演算が終了した命令の識別子を示すEU−IIDとの比較が比較器132a〜132hによって行われ、いずれか1つから比較結果の一致を示すHが出力されると、その出力は演算結果が有効であることを示すEU−バリッド信号と共にアンドゲート133a〜133hのいずれかに入力され、そのアンドゲートの出力はそのエントリに対応する条件コードが生成されたことを示すEUジェネレートペンディングCC信号として分岐確定処理部41に与えられる。
【0186】
図24は図13の分岐確定処理部41の構成例である。同図においては、分岐の確定処理と分岐の成立/不成立の判定処理が行われる。
【0187】
分岐の確定を示すリゾルブド信号は、オアゲート137の出力として与えられる。このオアゲートの出力はアンドゲート136a、136b、136cのいずれかの出力がHとなった時にHとなる。
【0188】
分岐の確定、および成立/不成立の判定は当然エントリ毎に行われる。まずアンドゲート136aの出力がHとなるために必要な条件として次の3つがある。第1の条件はアンドゲート135の出力がHとなることであり、これはそのエントリがバリッドであり、また未確定であることである。第2の条件はペンディングビットがオフ、すなわちDサイクルで命令デコード時に、実行途中の条件コード変更命令がなくて、条件コードが確定していること、また第3の条件はそのエントリに対応する分岐命令がブランチオンコンディション命令であることである。これらの3つの条件が全て成立した時に、そのエントリに対応する分岐は確定と判定される。
【0189】
次にアンドゲート136bの出力がHとなる条件は、第1の条件はペンディングビットがオン、すなわち命令デコード時に先行する実行途中の条件コード変更命令があること、第2にアンドゲート135の出力がHであること、第3に対応する命令がブランチオンコンディション命令であること、第4に前記の条件コード変更命令が実行されてペンディングとなっていた条件コードが生成されたこと、すなわち図23で対応するエントリに対するジェネレートペンディングCC信号がHとなったことである。 アンドゲート136cの出力がHとなるのはBCT,BXH、またはBXLE命令に対応して、その分岐の成立/不成立の条件が生成されたことが演算ユニットからメッセージとして伝えられた時である。すなわちその入力はアンドゲート135の出力、RSBRのエントリのBCT,BXH、またはBXLE命令であることを示すフィールドの値、演算ユニットから分岐の確定のための条件がメッセージとして到着したことを示すEUメッセージジェネレートコンディション信号であり、これらが全てHとなった時点でアンドゲート136cの出力がHとなる。
【0190】
次に分岐の成立/不成立はオアゲート140の出力として与えられ、分岐が成立した時、その出力はHとなる。
【0191】
オアゲート140の出力がHとなるのは、3つのアンドゲート139a〜139cのいずれかの出力がHとなる時である。
【0192】
アンドゲート139aの出力は、アンドゲート136cの出力とEU−MSG信号とが共にHとなった時にHとなり、オアゲート140から分岐成立を示すテークン信号が出力される。ここでEU−MSG信号は前述のBCT,BXH、またはBXLE命令に対応して演算ユニットから送られるメッセージの実際のデータであり、例えばそのデータが“1”となることによって、オアゲート140から分岐成立を示すテークン信号が出力されることになる。
【0193】
アンドゲート139bは、前述のようにデコードサイクルにおいてすでに条件コードが確定している場合であって、すでに確定して、IUCCに設定されている条件コードとマスクフィールドの値とが一致した時にHを出力する。セレクタ138aによってオペレーションコードの8ビット目から11ビット目、すなわちマスクフィールドの各ビットと、命令制御ユニットから送られた条件コードIUCCの各ビットとが比較され、対応するビットが一致した時にセレクタ138aからHが出力され、またアンドゲート136aからブランチオンコンディション命令に対する分岐が確定したことを示すHが出力されることにより、アンドゲート139bの出力はHとなる。
【0194】
アンドゲート139cの出力は、条件コードを変更する先行命令の演算が実行されて条件コードが生成され、かつマスクフィールドの値と演算器で生成された条件コードとが一致した時にHとなる。すなわちセレクタ138bによってマスクフィールドの4ビットと演算部から送られた演算終了結果としての条件コードの値とが比較され、対応するビットが一致した時にHが出力され、アンドゲート136bの出力、すなわち条件コードが生成されて、分岐が確定したことを示す出力と共にアンドゲート139cに与えられることにより、その出力はHとなる。
【0195】
図25は、図13の再命令フェッチ処理部46の一部としての、再命令フェッチ条件生成部の構成例である。同図において再命令フェッチを指示する信号はオアゲート149の出力として与えられる。その出力がHとなるのは6つのアンドゲート141,143,144,145,147、または148のいずれかの出力がHとなる時である。
【0196】
まずアンドゲート141の出力がHとなるのは、分岐の成立が予測されたにもかかわらず実際には不成立となった時であり、その条件はそのエントリに対する分岐が確定し、エントリがバリッドであり、ターゲットアドレスがバリッドであり、再命令フェッチが行われておらず、ブランチヒストリにヒットしており、そのエントリがテークンでない、すなわち不成立であることである。エントリが不成立であることは、インバータ142の出力がHとなることによって与えられる。
【0197】
アンドゲート143の出力がHとなるのは、分岐が予測され、分岐自体は成立したにもかかわらず、ターゲットアドレスがEAG26によって計算された正しい値と異なる場合、すなわちターゲットアドレスミスマッチの場合である。アンドゲート143に対する入力として、ゲート141に対する入力と異なる点は、エントリがテークンであることと、TIAR−MATCHビットがL、すなわちミスマッチであることを示す信号が追加されていることである。
【0198】
アンドゲート144の出力がHとなるのは、分岐成立が予測され、実際に成立したにもかかわらず、分岐先の命令列が未だに命令バッファ16に取り入れられていない、すなわちブランチヒストリターゲットアクティブがLとなっている場合である。アンドゲート143への入力と比較すると、ターゲットアドレスミスマッチを示すTIAR−MATCH信号(L)に代わって、ブランチヒストリターゲットアクティブ信号としてのLが入力されている点が異なっている。
【0199】
アンドゲート145の出力がHとなるのは、分岐が成立すると予測されていない、すなわち分岐が不成立と予測されていたにもかかわらず、実際に分岐成立となった場合である。例えばアンドゲート141への入力と比較すると、分岐成立を示すテークン信号がインバータを介することなく、そのまま入力されている点と、ブランチヒストリヒットを示す信号がインバータ146によって反転されて入力されている点と、ヘッジターゲットアクティブ信号が、ヘッジフェッチがなされていないことを示すLとして入力されている点が異なっている。
【0200】
アンドゲート147の出力は、EX命令に対応してターゲット命令をフェッチする場合にHとなる。分岐が確定し、エントリがバリッドであり、ファントムバリッド信号とEX信号が共にHである時に、アンドゲート147の出力はHとなる。
【0201】
アンドゲート148の出力は、EX命令に対応してターゲット命令から元の位置の次の命令に戻るための命令フェッチが行われる場合にHとなる。入力としてファントムバリッド、EX,再命令フェッチダンの信号が全てH、ヘッジターゲットアクティブ信号がLの時に、アンドゲート148の出力はHとなる。
【0202】
図26は、再命令フェッチ処理部46の一部としての、フェッチアドレス選択部の構成例である。同図において再命令フェッチアドレスはセレクタ155の出力として与えられるが、セレクタ155は他のフェッチ要求に対応するフェッチアドレスと、本発明に対応する再命令フェッチアドレスとを選択するものである。本発明の再命令フェッチアドレスは、セレクタ154の出力として与えられる。このセレクタ154はトップ、セカンド、およびサードの3つのエントリに対応するフェッチアドレスを選択するものである。ここで3つのエントリに対応する再命令フェッチアドレスを選択することは、前述のように3つの命令を一度にデコードすることや、インポインタ、アウトポインタの更新を3つのエントリ単位で調べることとは無関係であり、その数を任意に設定できることは当然である。
【0203】
トップエントリに対応する再命令フェッチアドレスは、セレクタ152aの出力として与えられる。セレクタ152aは、加算器151aの出力、またはエントリに格納されているターゲットアドレス、すなわちTIARのいずれかを選択するものである。加算器151aは、図3のIAR、すなわちRSBRのエントリーに格納されているその分岐命令、自分の命令アドレスと分岐命令自身の命令語の長さILCとの加算を行うものであり、その加算結果は分岐不成立の場合の分岐命令の次の命令のアドレスを与える。
【0204】
セレクタ152aは、オアゲート153aの出力がHとなった時にTIARを選択し、Lの時に加算器151aの出力を選択する。オアゲート153aの出力がHとなるのは、その入力として分岐が成立したことを示すテークン信号、またはEX命令に対応して、ターゲット命令のフェッチが行われるべきことを示す信号が入力した時である。
【0205】
セカンドエントリに対応する再命令フェッチアドレスはセレクタ152b、サードエントリに対応するアドレスはセレクタ152cの出力として与えられる。その動作はトップエントリに対応するものと同じである。
【0206】
図27は、図13の完了報告処理部51の一部としての、RSBRのエントリに対応する分岐処理完了条件検出部の説明図である。同図において、オアゲート167の出力がHとなることによってn番目のエントリに対応する分岐処理が完了したことが示される。
【0207】
オアゲート167の出力がHとなるのは、6つのアンドゲート161〜166のいずれかの出力がHとなる時である。アンドゲート161の出力がHとなるのは、分岐が予測され、しかもその分岐が成立した時である。アンドゲート161への入力は分岐の成立を示すテークン、ブランチヒストリヒット信号、ターゲットアドレスに対するTIAR−MATCH信号、ブランチヒストリターゲットアクティブ信号、ターゲットアドレスバリッド信号、およびエントリに対するバリッド信号である。これらの6つの信号の全てがHとなった時点で、アンドゲート161の出力はHとなる。
【0208】
アンドゲート162の出力は、分岐が予測されず、しかも、分岐が成立しなかった場合にHとなる。その条件は5つの入力のうち、ターゲットアドレスバリッド信号、エントリに対するバリッド信号、および分岐確定を示すリゾルブドの信号がHであり、また分岐成立を示すテークン信号、およびブランチヒストリヒット信号の2つが共にLである時である。
【0209】
アンドゲート163の出力は、再命令フェッチが行われた時にHとなる。その条件は再命令フェッチダン、およびエントリに対するバリッド信号の2つが共にHとなることである。
【0210】
アンドゲート164の出力は、ファントムブランチであることが判明した時にHとなる。その条件はファントムバリッド信号がHであり、EX信号およびショート再命令フェッチ信号(ショート再命令フェッチとは、エントリに格納されているアドレスを使って分岐とは別に命令再フェッチを行うものであり、そのフェッチが行われている状態を示すショート再命令フェッチ信号がHである時には、アンドゲート164の出力はLとなる。)の2つが共にLであることである。ここでEX信号がLという条件は、EX命令に対応してファントムバリッド信号がHとされているためであり、EX命令の場合との混同を避けるためである。
【0211】
アンドゲート165の出力は、EX命令に対してHとなる。その条件は再命令フェッチダン、EX、ヘッジターゲットアクティブ、およびEX−OR−TGR信号(EX命令の実行の時には、ターゲット命令のオペランドに対応して修飾が行われる。この信号は、その修飾がかけられて、EX命令が実行された時にHとなる。)の4つの信号がいずれもHとなることである。ここでヘッジターゲットアクティブ信号はEX命令に対しも共通に用いられている。
【0212】
アンドゲート166の出力はヘッジフェッチが成功した時にHとなる。その条件はヘッジターゲットアクティブ、バリッド、リゾルブド、およびテークンの4つの信号がいずれもHであり、ブランチヒストリヒット信号がLであることである。
【0213】
図28は、図13の完了報告処理部51の一部としての、プログラムステータスワードのインストラクションアドレスレジスタ更新処理部の構成例を示す。なお図28はコミットスタックエントリ(CSE)20の一部を含む。同図の回路は、基本的にトップからサードまでの3つのエントリに対応するテークン信号、コンプリートレディ信号、およびターゲットアドレスTIARの入力によって動作する。ここでコンプリートレディ信号は、図27のオアゲート167の出力するコンプリートオア信号に対応するが、8つのエントリに対応するコンプリートオア信号から、図29の回路、すなわちコンプリートオア信号からコンプリートレディ信号への変換回路を介して得られ、図28への入力として用いられる。
【0214】
図29において、8つのエントリに対応するコンプリートオア信号のうちからセレクタ186によってトップ、セカンド、サードの3つのエントリに対応するコンプリートレディ信号が選択される。この選択は、アウトポインタの出力がデコーダ187に与えられることによって、デコーダ187の出力によって制御される。
【0215】
図28において、例えばトップエントリに対するテークン信号がHとなると、同一エントリに対応するコンプリートレディ信号がLのままでも、セレクタ174はトップエントリに対するターゲットアドレスTIARを選択し、そのターゲットアドレスはターゲットアドレスバッファ175に格納される。
【0216】
トップエントリに対するテークン信号がL、セカンドエントリに対するテークン信号がHの場合には、インバータ173aとアンドゲート173bの動作により、セレクタ174はセカンドエントリに対するTIARを選択し、そのターゲットアドレスはターゲットアドレスバッファ175に格納される。同様にサードエントリに対するテークン信号のみがHの場合には、インバータ173c、アンドゲート173dの動作により、セレクタ174を介してサードエントリに対するTIARがバッファ175に格納される。
【0217】
トップエントリに対応するテークン信号がHであり、後述するターゲットアドレスバッファ(TAB)ビュジィ信号がLであれば、ナンドゲート170aの出力はHとなり、トップエントリに対応するコンプリートレディ信号がHとなった時点でアンドゲート170bの出力はHとなる。そしてこれがエントリ0に対するコンプリート信号として、コミットスタックエントリ(CSE)20に与えられる。
【0218】
このコンプリート信号は、トップエントリに対する命令識別子IIDの値に応じて、CSE20の内部でコンプリート状態を記憶するフリップフロップ、例えば16個のフリップフロップの中でその識別子に対応するFF、例えば177aに記憶され、その出力はHとなる。ただし、この時点ではCSEアウトポインタが例えば他のエントリに対応する位置を指しており、FF177aの出力はアンドゲート183aにはまだ与えられていないものとする。
【0219】
一方トップエントリに対応するテークン信号とコンプリート信号とはアンドゲート179aに与えられ、その出力がHとなると、オアゲート179dを介してセットリセットFF180がセットされ、その出力QがHとなる。前述のように、例えばアンドゲート183aの出力はまだLであり、オアゲート184を介してD−FF185がセットされていない状態であるため、インバータ181の出力はHとなり、アンドゲート182の出力、すなわちTABビュジィ信号はHとなる。
【0220】
TABビュジィ信号は、ターゲットアドレスバッファ175に次のターゲットアドレスがロードされるのを禁止する制御信号であって、この信号がターゲットアドレスバッファ175に与えられることによって、次のターゲットアドレスのバッファ175への格納は禁止される。
【0221】
例えばトップエントリに対するテークン信号がHとなった時点で、CSE20の中で分岐の成立を示す16個のエントリに対応するフリップフロップ178a〜178pのうち、トップエントリに対応する識別子IIDによって指定されるFF、例えば178aに分岐の成立状態が記憶され、その出力QはHとなっている。
【0222】
CSEアウトポインタがトップエントリに対応するCSE内のFFの位置、ここでは“0”を指すと、2つのフリップフロップ177a、178aの出力がアンドゲート183aに与えられ、オアゲート184の出力がHとなり、セットリセットFF180をリセットすると共に、D−FF185の出力をHとする。
【0223】
この出力は、ターゲットアドレスバッファ175に格納されているターゲットアドレスを、プログラムステータスワードの命令アドレスレジスタ(PSWIAR)176にロードさせるロード制御信号としてPSWIAR176に与えられ、バッファ175に格納されていたターゲットアドレスはPSWIAR176に格納される。
【0224】
またD−FF185の出力はインバータ181によって反転され、Lとしてアンドゲート182に与えられることにより、TABビュジィ信号はLとなり、その結果次のターゲットアドレスがターゲットアドレスバッファ175に格納されることが可能となる。
【0225】
図28において、セカンドエントリと、サードエントリに対応するコンプリート信号としてのBR1コンプリート、BR2コンプリート信号の出力論理について説明する。オアゲート171aからアンドゲート171dまでのゲート群はBR1コンプリート信号を出力するためのものであり、またオアゲート172aからアンドゲート172gまではBR2コンプリート信号を出力するためのものである。
【0226】
図28においては、トップからサードまでの3つのエントリに対応して最大3つのエントリに対応するコンプリート信号を出力することができる。しかしながら、分岐がテークンになる2つ以上のエントリに対して、同時にコンプリート信号を出力することはできない。
【0227】
2つのエントリに対応して分岐がテークンになる場合には、2つのターゲットアドレスが存在することになり、これらのターゲットアドレスはターゲットアドレスバッファ175に格納され、その後PSWIAR176に格納される必要があるが、1つのサイクルにおいてターゲットアドレスバッファ175には1つのターゲットアドレスしか格納することができず、2つ以上のエントリに対して分岐が成立する場合には、1つのエントリに対してだけコンプリート信号を出力し、もう1つのエントリに対しては次のサイクルでコンプリート信号を出力するように制御する必要がある。
【0228】
トップからサードのエントリのうち、例えばトップのエントリに対応する分岐がテークンであれば、セカンド、たまはサードのエントリに対応する分岐がテークンであっても、そのエントリに対応するコンプリート信号の出力は、次のサイクルまで延期される。すなわち上位からトップ、セカンド、サードのエントリの順序に対して、上位のエントリに対する分岐がテークンであれば、下位のエントリに対する分岐がテークンであっても、そのエントリに対応するコンプリート信号の出力は次のサイクル以降になるように制御される。前述のゲート群は、このような制御を行うためのものである。
【0229】
一般的には各サイクル毎にCSE20で完了処理が行われるため、ターゲットアドレスバッファ175にはテークン信号の入力に伴いRSBRに格納されているターゲットアドレスTIARが次々とセットされ、セットされたターゲットアドレスはそれぞれ1サイクル後にPSWIAR176に格納される。
【0230】
図30は、図14で説明したCSE20の内部の再命令フェッチフラッシュ処理部69の構成例を示す。再命令フェッチフラッシュ処理部69は、前述のように例えば再命令フェッチが行われ、命令実行部などのクリアが必要な場合にフラッシュRS信号を出力するものである。
【0231】
図30においてフラッシュRS信号を出力するD−FF194は、前述の1サイクルに3つの命令のデコード、すなわちD0,D1およびD2に対応するデコーダ、および各リザベーションステーション、すなわちCSE20,RSA21,RSE22、およびRSBR23、記憶制御ユニット(Sユニット)内部のオペランドアクセス部、演算実行部、すなわちEユニットで実行されている全てのオペレーションを、例えばバリッドビットをリセットすることによってフラッシュし、無効とする。これによってフラッシュRS信号のセットの原因となった分岐命令以後の実行中の全てのオペレーションのキャンセルが行われる。
【0232】
図30において、フラッシュRS信号を出力するD−FF194の出力がHとなるのは、オアゲート193の出力、すなわち3つのアンドゲート192a〜192cのいずれかの出力がHとなる時である。フラッシュRS信号が出力されるのは、CSE20の内部で処理が完了したエントリの中で実行順序の古いものから順にトップ、セカンド、サードのエントリを選んで送られるコミット信号がHとなり、CSE20の内部で再命令フェッチがなされたことを示すD−FF191a〜191pの中でCSEアウトポインタによって指定されるD−FFの出力がHとなった時である。例えばD−FF191aの出力がHであり、トップエントリに対するコミット信号がHとなった時に、アンドゲート192aの出力がHとなり、トップエントリに対応する分岐命令が原因となったフラッシュRS信号が出力される。
【0233】
再命令フェッチが行われたことを示すD−FFに対しては、各エントリに対応する命令識別子IIDの値に対応してトップ、セカンド、またはサードのそれぞれのエントリに対応する3つのアンドゲート190a〜190cの出力のうち、いずれかがセレクタ195を介して与えられる。例えばトップエントリに対応する再命令フェッチダン信号とコンプリート信号とがアンドゲート190aに与えられ、トップエントリに対応するIIDによって指定されるD−FF、例えば191aに再命令フェッチが行われたことが記憶される。
【0234】
図31は、分岐予測機構、すなわちブランチヒストリに対する図13のブランチヒストリ更新指示部52の構成例である。同図において上側はブランチヒストリへの書込みデータを示し、下側はブランチヒストリに対する指示を示す。なお図31にもブランチヒストリ39の一部が含まれる。
【0235】
まずブランチヒストリに対する更新指示について説明する。その指示としては、古いエントリを更新する指示としてのアップデートオールドエントリ、古いエントリを消去する指示としてのイレーズオールドエントリ、および新しいエントリの作成指示としてのクリエイトニューエントリの3つがある。まずアップデートオールドエントリ信号は、トップ、セカンド、サードのいずれかのエントリに対応するコンプリート信号によって、セレクタ214によって選択されるそれぞれのエントリに対するテークン信号の入力時にHとなり、古いエントリの更新指示がなされる。
【0236】
新しいエントリを作成すべきクリエイトニューエントリの指示は、ブランチヒストリヒット信号がLで、インバータ212の出力がHとなり、かつセレクタ214によって選択された3つのエントリに対応するテークン信号のいずれかがHである時に、アンドゲート213の出力として与えられる。
【0237】
古いエントリを消去すべき指示としてのイレーズオールドエントリ信号は、オアゲート219の出力、すなわちアンドゲート218、または221の出力がHとなった時に出力される。アンドゲート221の出力がHとなるのは、アンドゲート220の出力するBRHISファントム信号がHとなり、かつブランチヒストリヒット信号がHとなった時である。アンドゲート220の出力は、トップエントリに対するファントムバリッド信号と、コンプリート信号とが共にHとなった時に出力される。ここでアンドゲート220に対しては、ファントムバリッド信号のうち、トップエントリに対応するものだけが入力されている。本発明の実施形態においては、ファントムについては1個ずつしか処理を行わないことにし、ファントムバリッド信号としてはトップエントリに対応するものだけを制御信号として用いることにして、セカンドエントリ以降に対するファントムバリッド信号は制御信号として使用しないものとしている。
【0238】
アンドゲート218の出力がHとなるのは、ブランチヒストリヒット信号がH、オアゲート210とアンドゲート217の出力が共にHとなった時である。オアゲート210の出力がHとなるのは、ブランチヒストリディジィ信号がHとなるか、またはターゲットアドレスに対するマッチ信号がLで、インバータ211の出力がHとなる、すなわちターゲットアドレスミスマッチの場合である。
【0239】
アンドゲート217の出力がHとなるのは、インバータ216の出力、BRHISテークン信号の反転信号がHとなり、かつ3つのエントリのいずれかに対応する再命令フェッチダン信号がHとなる時である。アンドゲート217の出力はBRHISノットテークン信号であり、前述のようにBRHISテークン信号、BRHISノットテークン信号、およびBRHISファントム信号のいずれもが“0”であれば、ブランチヒストリに対する更新指示は行われない。
【0240】
ブランチヒストリに対する書込みデータとしては、命令アドレスレジスタの値、ターゲットアドレスレジスタの値、ブランチヒストリヒット信号、ブランチヒストリディジィ信号、その他の信号である。アウトポインタの値はセレクタ205、命令アドレスレジスタの値はセレクタ206、ターゲットアドレスの値はセレクタ207、その他のデータはセレクタ208によって選択され、ブランチヒストリに対する書込みデータとして与えられる。
【0241】
これらのセレクタの制御について説明すると、トップエントリに対応するテークン信号、再命令フェッチダン信号、およびファントムバリッド信号のいずれかがHとなった時にオアゲート201の出力がHとなり、トップエントリに対応する値が選択される。トップエントリーに対応するテークン信号、再命令フェッチダン信号、ファントムバリッド信号のいずれもLであってセカンドエントリに対応するテークン信号、および再命令フェッチダン信号のいずれかがHとなると、オアゲート202の出力がHとなり、アンドゲート204aの出力によってセカンドエントリに対応する値が選択される。2つのオアゲート201,202の出力が共にLである時には、アンドゲート204bの出力によってサードエントリに対応する値が選択される。
【0242】
以上本発明の実施形態について詳細に説明したが、図13で説明したRSBRのブロック構成、各エントリに格納されるデータ、RSBR内の各ブロックの具体的な構成回路などについては、以上の記述に限定されることなく、特許請求の範囲に記載された範囲において様々な実施形態を実現することができることは当然である。
【0243】
【発明の効果】
以上詳細に説明したように、各分岐命令に対応したデータを格納する複数のエントリを備えた分岐リザベーションステーションを用いて、分岐命令および、これに影響を与える命令に対する処理をアウトオブオーダで実行可能とすることによって、分岐命令を含む命令列の処理を高速化することができ、情報処理装置の性能向上に寄与するところが大きい。
【図面の簡単な説明】
【図1】本発明の原理構成ブロック図である。
【図2】本発明の分岐リザベーションステーション(RSBR)が備えられる情報処理装置の全体構成を示すブロック図である。
【図3】RSBRの各エントリの格納内容の例を示す図である。
【図4】ブランチオンコンディション命令の命令形式を説明する図である。
【図5】ブランチオンカウント命令の命令形式を説明する図である。
【図6】ブランチオンインデックスハイ命令の命令形式を説明する図である。
【図7】情報処理装置に順次与えられる命令の例を示す図である。
【図8】RSBR内部の分岐確定処理部による分岐判断を説明する図である。
【図9】RSBR内部の再命令フェッチ処理部の動作を説明する図である。
【図10】RSBRにおけるエントリの割当てと解放を説明する図である。
【図11】RSBR内部の完了報告処理部の動作を説明する図である。
【図12】RSBR内部のブランチヒストリ更新指示部の動作を説明する図である。
【図13】RSBRの構成例を示すブロック図である。
【図14】CSEの内部で本発明に直接関連する部分を示したCSEの構成を示すブロック図である。
【図15】データロード制御部の一部としてのロードデータ決定部の構成例を示す図である。
【図16】図2におけるインストラクションワードレジスタおよびデコーダの構成例を示す図である。
【図17】データロード制御部の一部としてのエントリ毎のロードデータ指定部の構成例を示す図である。
【図18】RSBRのインポインタの構成例を示す図である。
【図19】RSBRのアウトポインタの構成例を示す図である。
【図20】EAGインタフェースの構成例を示す図である。
【図21】ベンディング条件コード処理部の構成例を示す図である。
【図22】図20のベンディング条件コード処理部の動作を説明するための命令列の例を示す図である。
【図23】EUCCインタフェースの構成例を示す図である。
【図24】分岐確定処理部の構成例を示す図である。
【図25】再命令フェッチ処理部の一部としての再命令フェッチ条件生成部の構成例を示す図である。
【図26】再命令フェッチ処理部の一部としてのフェッチアドレス選択部の構成例を示す図である。
【図27】完了報告処理部の一部としての分岐処理完了条件検出部の構成例を示す図である。
【図28】完了報告処理部の一部としてのPSWIAR更新処理部の構成例を示す図である。
【図29】コンプリートオア信号からコンプリートレディ信号への変換回路の例を示す図である。
【図30】再命令フェッチフラッシュ処理部の構成例を示す図である。
【図31】ブランチヒストリに対する更新指示部の構成例を示す図である。
【符号の説明】
1 情報処理装置
2 分岐命令実行制御装置
3 分岐リザベーションステーション手段
4 命令リザベーションステーション手段
10 命令アドレスレジスタ(IAR)
11 命令フェッチエフェクティブアドレスジェネレータ(IFEAG)
16 命令バッファ
18 デコーダ
20 コミットスタックエントリ(CSE)
21 リザベーションステーションフォーアドレスジェネレーション(RSA)
22 リザベーションステーションフォーエクセキューション(RSE)
23 リザベーションステーションフォーブランチ(RSBR)
26 エフェクティブアドレスジェネレータ(EAG)
39 ブランチヒストリ(BRHIS)
40 命令バッファタグ(IBUFTAG)
41 分岐確定処理部
46 再命令フェッチ処理部
51 完了報告処理部
52 ブランチヒストリ更新指示部
62 データロード制御部
63 RSBRインポインタ
64 ペンディング条件コード処理部
65 EAGインタフェース
66 EUCCインタフェース
67 RSBRアウトポインタ
69 再命令フェッチフラッシュ処理部

Claims (18)

  1. 順次与えられる命令を実行する情報処理装置内で分岐命令の実行を制御する分岐命令実行制御装置において、
    命令デコードの結果、該命令が分岐命令であるか、又は、分岐に関する処理が必要であると判断されたとき
    該分岐の確定/未確定を表示するフラグと、分岐の成立/不成立を表示するフラグとの格納領域を有するエントリが作成される分岐リザベーションステーション手段を備え、
    前記命令デコードの結果により、該分岐の成立/不成立が確定するときは、前記作成されるエントリに分岐の確定を示すフラグと成立/不成立を示すフラグとの値が格納され、
    命令デコードの結果により、該分岐の成立/不成立が確定しないときは、該分岐が未確定であることを示すフラグの値が格納されることを特徴とする分岐命令実行制御装置。
  2. デコードされる命令に先行する命令であって、該デコードされる命令についての分岐の成立/不成立に影響を与える先行命令の識別子を記憶する先行命令識別子記憶手段と、
    該先行命令の実行が未完了であり、該先行命令識別子記憶手段に記憶されている識別子が有効であることを示すフラグを記憶する識別子有効フラグ記憶手段と、
    該先行命令の実行が開始されるとき、該フラグを識別子有効フラグ記憶手段に記憶させるとともに、先行命令識別子を先行命令識別子記憶手段に記憶させ、
    該先行命令の実行が完了したとき、該先行命令の完了報告に含まれる命令識別子を該先行命令識別子記憶手段に記憶されている識別子と比較することにより該先行命令の完了を認識し、
    該識別子有効フラグ記憶手段に記憶されているフラグをリセットする制御手段とを更に備えることを特徴とする請求項記載の分岐命令実行制御装置。
  3. 前記命令デコードの結果、分岐の成立/不成立が確定しないとき、
    命令の実行順序無関係に、該成立/不成立の判断が可能になったとき、該判断結果に対応して前記成立/不成立を示すフラグの値が格納されることを特徴とする請求項記載の分岐命令実行制御装置。
  4. 前記命令デコードの結果、該デコードされる命令に先行する命令であって、
    該デコードされる命令についての分岐の成立/不成立に影響を与える先行命令の実行が未完了であるとき、前記作成されるエントリに該先行命令の実行が未完了であることを示すデータと共に該先行命令の識別子が格納されることを特徴とする請求項記載の分岐命令実行制御装置。
  5. 前記先行命令の識別子を記憶する先行命令識別子記憶手段と、
    該先行命令の実行が未完了であること、及び、該先行命令識別子記憶手段に記憶されている識別子が有効であることを示すフラグを記憶する識別子有効フラグ記憶手段と、
    該先行命令の実行が開始されるとき、該フラグを識別子有効フラグ記憶手段に記憶させるとともに、該先行命令の識別子を先行命令識別子記憶手段に記憶させ、
    該先行命令の実行が完了したとき、該先行命令の完了報告に含まれる命令識別子を該先行命令識別子記憶手段に記憶されている識別子と比較することにより該先行命令の完了を認識し、
    該識別子有効フラグ記憶手段に記憶されていフラグをリセットする制御手段とを更に備えることを特徴とする請求項記載の分岐命令実行制御装置。
  6. 命令の実行順序無関係に、前記先行命令の実行完了によって前記デコードされる命令における分岐の成立/不成立の判断が可能になったとき、該判断結果に対応して前記成立/不成立を示すフラグが格納されることを特徴とする請求項記載の分岐命令実行制御装置。
  7. 前記分岐リザベーションステーション手段が、前記先行命令の実行完了を、自手段内のエントリに格納され該先行命令の識別子によって検出することを特徴とする請求項記載の分岐命令実行制御装置。
  8. 分岐命令に対応して該分岐命令のデコードの結果により分岐の成立/不成立を予測し、該予測結果を前記エントリに格納されるべき分岐の成立/不成立を示すフラグの値として前記分岐リザベーションステーション手段に与える分岐成否予測手段と、
    該分岐成否予測手段の予測結果に従って該分岐命令以後の命令投機的に実行される場合に、
    前記分岐リザベーションステーション手段内のエントリに格納された分岐の成立/不成立を表示するフラグの値と分岐の成立/不成立の実際の判断結果とに矛盾を生じたときには、
    該命令の投機的実行の結果を無効とし、該実際の判断結果に対応する命令を実行する命令再実行手段とを更に備えることを特徴とする請求項記載の分岐命令実行制御装置。
  9. 分岐命令に対応して該分岐命令のデコードの結果により分岐の成立/不成立を予測し、該予測結果を前記エントリに格納されるべき分岐の成立/不成立を示すフラグの値として前記分岐リザベーションステーション手段に与えるとともに、分岐成立が予測されるとき、更に分岐先アドレスの予測値を該分岐リザベーションステーション手段に作成されるエントリに格納させる分岐成否予測手段と、
    該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された場合において、
    該分岐リザベーションステーション手段に格納された分岐先アドレスの予測値と実際に求められた分岐先アドレスとが一致しなかったときには、該投機的に実行された命令の実行結果を無効とし、該実際に求められた分岐先アドレスの命令以後の命令を実行する命令再実行手段とを更に備えることを特徴とする請求項記載の分岐命令実行制御装置。
  10. 前記命令デコードの結果、分岐の成立/不成立が確定せず、該デコードされた命令に続く非分岐後続命令が投機的に実行された後に、前記分岐の成立の判断がなされたとき、該命令の投機的実行の結果を無効とし、
    該分岐命令の分岐先の命令以後の命令を実行する分岐先命令実行手段とを更に備えることを特徴とする請求項1記載の分岐命令実行制御装置。
  11. 前記情報処理装置が、前記順次与えられる命令をアウトオブオーダで処理するために命令実行を統合的に制御する命令リザベーションステーション手段を更に備えることを特徴とする請求項1記載の分岐命令実行制御装置。
  12. 前記分岐リザベーションステーション手段が、前記分岐の確定/未確定を表示するフラグと、分岐の成立/不成立を表示するフラグとの格納領域を有するエントリを複数備え、
    命令デコードの結果により命令実行順序に従ってエントリが作成されるとともに、該エントリに前記命令リザベーションステーション手段によって指定され、デコードされた命令を識別する命令識別子が格納され、
    作成されたエントリに対応する分岐処理の完了時に、命令実行順序に従って、分岐成立/不成立の確定結果および該命令識別子を伴って
    該分岐処理の完了を前記命令リザベーションステーション手段に報告する完了報告手段を更に備えることを特徴とする請求項11記載の分岐命令実行制御装置。
  13. 前記命令デコードの結果により、分岐の成立/不成立が確定せず、
    投機的に実行された命令であって、該デコードされた命令に続く非分岐後続命令の実行結果の無効化が必要となったとき、
    前記完了報告手段が該無効化の必要を示すデータを前記命令リザベーションステーション手段に更に与えることを特徴とする請求項12記載の分岐命令実行制御装置。
  14. 分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立/不成立を予測する分岐成否予測手段と、
    該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された後に、該予測と分岐の成立/不成立の実際の判断結果との間に矛盾を生じたとき該投機的に実行された命令の実行結果を無効とし、該実際の判断結果に対応する命令を実行する命令再実行手段とを更に備え、
    前記完了報告手段が該投機的に実行された命令の実行結果の無効化の必要を示すデータを前記命令リザベーションステーション手段に更に与えることを特徴とする請求項12記載の分岐命令実行制御装置。
  15. 前記分岐リザベーションステーション手段が、命令デコード時に命令実行順序に従って作成される前記エントリを複数備え、
    該命令デコードの結果により、分岐の成立/不成立が確定せず、該デコードされた命令に続く非分岐後続命令が投機的に実行された後に該投機的に実行された命令の実行結果の無効化が必要となったとき、
    命令実行の結果として作成されたエントリは直ちに消去されることを特徴とする請求項1記載の分岐命令実行制御装置。
  16. 分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立/不成立を予測する分岐成否予測手段を更に備えるとともに、
    前記分岐リザベーションステーション手段が、命令デコード時に命令実行順序に従って作成される前記エントリを複数備え、
    該分岐成否予測手段の予測結果に従って該分岐命令以後の命令が投機的に実行された後に該投機的命令実行結果の無効化が必要となったとき、該投機的命令実行の結果として作成されたエントリは直ちに消去されることを特徴とする請求項1記載の分岐命令実行制御装置。
  17. 分岐命令に対応して該分岐命令のデコードの結果により、分岐の成立/不成立を予測する分岐成否予測手段と、
    前記分岐リザベーションステーション手段に作成されたエントリに対応する分岐処理の完了時に、
    岐成立/不成立の確定結果、分岐成立時の分岐先アドレス、および前記予測と実際の分岐確定結果との一致/不一致を該分岐成否予測手段に通知する更新指示手段とを更に備え、
    該分岐成否予測手段が該通知結果に従って自手段内に格納されている予測のためのデータを更新することを特徴とする請求項1記載の分岐命令実行制御装置。
  18. 前記分岐リザベーションステーション手段内に作成されるエントリが、
    分岐命令のデコードの結果により、分岐の成立/不成立が確定しないときに分岐先の命令列があらかじめフェッチされることにより格納される記憶領域を示すデータの格納領域を更に備え、
    該分岐命令に続く非分岐後続命令が投機的に実行された後に分岐の設立が確定したときには、該投機的命令実行の結果が無効にされるとともに、該記憶領域に格納された命令列が実行され、
    分岐の不成立が確定したときには、該記憶領域に格納された命令列が消去されることを特徴とする請求項1記載の分岐命令実行制御装置。
JP35877198A 1998-12-17 1998-12-17 分岐命令実行制御装置 Expired - Fee Related JP3565314B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP35877198A JP3565314B2 (ja) 1998-12-17 1998-12-17 分岐命令実行制御装置
US09/461,297 US6851043B1 (en) 1998-12-17 1999-12-15 Branch instruction execution control apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP35877198A JP3565314B2 (ja) 1998-12-17 1998-12-17 分岐命令実行制御装置

Publications (2)

Publication Number Publication Date
JP2000181710A JP2000181710A (ja) 2000-06-30
JP3565314B2 true JP3565314B2 (ja) 2004-09-15

Family

ID=18461029

Family Applications (1)

Application Number Title Priority Date Filing Date
JP35877198A Expired - Fee Related JP3565314B2 (ja) 1998-12-17 1998-12-17 分岐命令実行制御装置

Country Status (2)

Country Link
US (1) US6851043B1 (ja)
JP (1) JP3565314B2 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7334115B1 (en) * 2000-06-30 2008-02-19 Intel Corporation Detection, recovery and prevention of bogus branches
US20030023959A1 (en) * 2001-02-07 2003-01-30 Park Joseph C.H. General and efficient method for transforming predicated execution to static speculation
JP3843048B2 (ja) * 2002-06-28 2006-11-08 富士通株式会社 分岐予測機構を有する情報処理装置
JP3851235B2 (ja) * 2002-06-28 2006-11-29 富士通株式会社 分岐予測装置および分岐予測方法
US7636837B2 (en) 2003-05-28 2009-12-22 Fujitsu Limited Apparatus and method for controlling instructions at time of failure of branch prediction
JP4327008B2 (ja) * 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US7447882B2 (en) * 2005-04-20 2008-11-04 Arm Limited Context switching within a data processing system having a branch prediction mechanism
CN101443772B (zh) * 2006-05-12 2012-07-18 三星电子株式会社 管理安全数据的设备和方法
EP2073155A1 (en) * 2007-12-20 2009-06-24 Siemens Aktiengesellschaft Controlling the re-execution of a rule branch
US20120254593A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for jumps using a mask register
US9875107B2 (en) * 2015-01-19 2018-01-23 International Business Machines Corporation Accelerated execution of execute instruction target
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11150908B2 (en) * 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02173825A (ja) 1988-12-27 1990-07-05 Toshiba Corp 分岐制御装置
US5632023A (en) 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5634103A (en) 1995-11-09 1997-05-27 International Business Machines Corporation Method and system for minimizing branch misprediction penalties within a processor
JP3473249B2 (ja) 1996-03-08 2003-12-02 株式会社日立製作所 中央処理装置
US5752014A (en) 1996-04-29 1998-05-12 International Business Machines Corporation Automatic selection of branch prediction methodology for subsequent branch instruction based on outcome of previous branch prediction

Also Published As

Publication number Publication date
JP2000181710A (ja) 2000-06-30
US6851043B1 (en) 2005-02-01

Similar Documents

Publication Publication Date Title
JP3565314B2 (ja) 分岐命令実行制御装置
US5574871A (en) Method and apparatus for implementing a set-associative branch target buffer
US6526502B1 (en) Apparatus and method for speculatively updating global branch history with branch prediction prior to resolution of branch outcome
KR100270003B1 (ko) 향상된 분기 예측 기법을 사용하는 프로세서 및그 실행 방법
JP3093684B2 (ja) 命令ループを投機的に実行するプロセッサ及び方法
US7117347B2 (en) Processor including fallback branch prediction mechanism for far jump and far call instructions
JP3565504B2 (ja) プロセッサにおける分岐予測方法及びプロセッサ
KR100395763B1 (ko) 멀티프로세싱 마이크로프로세서에 적합한 분기 예측기
JP5255367B2 (ja) 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法
US8943298B2 (en) Meta predictor restoration upon detecting misprediction
JP2008535063A (ja) インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ
JP3154660B2 (ja) 条件レジスタ・データを一時的にバッファリングする方法およびシステム
JP4009248B2 (ja) 分岐予測装置および分岐予測方法
JP3486690B2 (ja) パイプライン方式プロセッサ
US6836841B1 (en) Predicting output of a reuse region using prior execution results associated with the reuse region
US6502186B2 (en) Instruction processing apparatus
US6026477A (en) Branch recovery mechanism to reduce processor front end stall time by providing path information for both correct and incorrect instructions mixed in the instruction pool
JP3725547B2 (ja) 限定ラン分岐予測
JP3518510B2 (ja) リオーダバッファの管理方法及びプロセッサ
US7765387B2 (en) Program counter control method and processor thereof for controlling simultaneous execution of a plurality of instructions including branch instructions using a branch prediction mechanism and a delay instruction for branching
US6658558B1 (en) Branch prediction circuit selector with instruction context related condition type determining
US6421774B1 (en) Static branch predictor using opcode of instruction preceding conditional branch
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers
US20050144427A1 (en) Processor including branch prediction mechanism for far jump and far call instructions
GB2283595A (en) Data processor with both static and dynamic branch prediction, and method of operation

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040402

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040402

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: 20040601

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040602

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: 20090618

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100618

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110618

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120618

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120618

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130618

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140618

Year of fee payment: 10

LAPS Cancellation because of no payment of annual fees