JP3494484B2 - 命令処理装置 - Google Patents

命令処理装置

Info

Publication number
JP3494484B2
JP3494484B2 JP24634694A JP24634694A JP3494484B2 JP 3494484 B2 JP3494484 B2 JP 3494484B2 JP 24634694 A JP24634694 A JP 24634694A JP 24634694 A JP24634694 A JP 24634694A JP 3494484 B2 JP3494484 B2 JP 3494484B2
Authority
JP
Japan
Prior art keywords
branch
instruction
prediction
buffer
information
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
JP24634694A
Other languages
English (en)
Other versions
JPH08110857A (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.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
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 Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP24634694A priority Critical patent/JP3494484B2/ja
Priority to US08/538,494 priority patent/US5740415A/en
Publication of JPH08110857A publication Critical patent/JPH08110857A/ja
Application granted granted Critical
Publication of JP3494484B2 publication Critical patent/JP3494484B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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

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】
【従来の技術】図40は、命令をパイプライン的に実行
する処理シーケンスの一例を示す図である。図40にお
いては、パイプラインステージとしては、命令を命令メ
モリからフェッチする命令フェッチステージIFと、こ
のフェッチされた命令をデコードする命令デコードステ
ージIDと、デコードされた命令を処理ユニットで実行
する実行ステージEXと、この処理結果をレジスタなど
に書込むライトバックステージWBを含む4段のパイプ
ラインステージが一例として示される。このパイプライ
ン方式の命令実行は以下のようにして行なわれる。
【0003】サイクルIにおいて、命令Aが命令メモリ
からフェッチされる(IFステージ)。次いで、サイク
ルIIにおいて、命令Aがデコードされ(IDステー
ジ)、これと平行して命令Bが命令メモリからフェッチ
される(IFステージ)。
【0004】サイクルIIIにおいて、デコードされた
命令Aが実行され(EXステージ)、また命令Bがデコ
ードステージIDにおいてデコードされる。このときま
た別の命令Cが命令メモリからフェッチされる(IFス
テージ)。
【0005】サイクルIVにおいて、命令Aの実行結果
がレジスタなどに書込まれ(WBステージ)、命令Bが
実行され(EXステージ)、命令Cがデコードされる
(IDステージ)。このときまた命令Dが命令メモリか
らフェッチされる(IFステージ)。
【0006】上述のように、サイクルIV以降、パイプ
ラインステージIF〜WBはすべて処理を実行してお
り、等価的に、1マシンサイクル(サイクルI、II、
…のサイクル期間)において1命令が実行されることに
なる。したがって、命令をパイプライン的に実行するこ
とにより、高速で命令を実行することができる。
【0007】今、図41に示すように、命令シーケンス
に分岐命令BRが含まれている場合を考える。図41に
示すように命令Aは、サイクルIからパイプラインステ
ージIFに投入され、順次IDステージ、EXステージ
およびWBステージへ投入されて処理が実行される。し
かしながら、分岐命令BRの場合、サイクルIIIにお
いて、デコードステージIDに投入されてデコードさ
れ、その命令が分岐命令であるか否かを判別し、次いで
この分岐命令により分岐が発生するか否かを識別する必
要がある。図41においては、分岐命令BRが、たとえ
ば条件付分岐命令であり、実行サイクルIVにおいて実
行ステージEXで実行されてその分岐の有無の発生が決
定され、サイクルVにおいて、分岐命令BRの実行結果
に従って次の命令C′が命令フェッチステージIFへ投
入される状態が一例として示される。
【0008】この図41に示すように、分岐命令BRの
場合、パイプラインステージにおいて処理が実行されな
いステージ(空きステージ)が生じ、命令の処理効率が
低下する。そこでこのような分岐命令が発生しても、効
率的に命令を処理するために種々の命令処理方式が提案
されている。このような方式の1つに、分岐命令の場
合、予めその分岐命令による分岐の発生の有無を予測
し、その予測に従って次の命令をパイプラインステージ
に投入する「分岐予測方式」がある。この場合、分岐命
令が存在しても、この分岐命令予測にしたがって連続的
に命令をパイプラインステージに投入するため、処理効
率の低下が抑制される。この場合、この予測の精度が高
いほど分岐によるパイプラインの乱れは小さくなり、応
じて命令処理装置の性能低下を抑制することができる。
このような分岐予測方式の1つとして、分岐先バッファ
(BTB)を用いる方式があり、たとえばK・F・リー
等による「分岐予測方式および分岐先バッファの設
計」、IEEE、コンピュータ、第15巻、第1号、1
984年1月、の第6頁ないし第22頁において提案さ
れている。
【0009】図42は、分岐先バッファの構成の一例を
示す図である。図42において、分岐先バッファ1は、
複数のエントリ1aを含むレジスタファイル2を含む。
エントリ1aの各々は、このエントリに格納された情報
が有効であるか否かを示す有効ビットVを格納する有効
ビットフィールド3aと、そのエントリに格納される分
岐命令を特定する分岐命令情報を格納する分岐命令特定
フィールド3bと、その分岐命令の過去の分岐の発生の
有無の履歴についての情報を格納する履歴情報フィール
ド3cと、その分岐命令の次に実行される分岐先命令が
格納される分岐先アドレスなどの分岐先情報を格納する
分岐先情報フィールド3dを含む。このレジスタファイ
ル2におけるエントリの選択は、命令メモリ4の命令の
アドレスを与えるプログラムカウンタ5から出力される
アドレス信号の所定のビットに従って行なわれる。この
プログラムカウンタ5からのアドレス信号(命令フェッ
チアドレスの一部)は、分岐先バッファ1に含まれるア
ドレスデコーダ6へ与えられてデコードされ、対応のエ
ントリの内容が読出されるように示される。分岐先バッ
ファ1は、このようなアドレスデコーダ6を用いる構成
に変えて、TLB(アドレス変換バッファ:トランスレ
ーション・ルックアサイド・バッファ)のような連想記
憶素子を用いる構成であってもよい。以下では説明を簡
略化するに、アドレスデコーダ6によりデコードしてレ
ジスタファイル2から対応のエントリの内容を読出す構
成について説明する。しかしながら、これは本発明の適
用範囲からTLBのような構成に対する適用を排除する
ものではない。
【0010】命令メモリ4から読出された命令は、命令
デコーダ7へ与えられてデコードされる。次に、この分
岐先バッファを用いた命令実行シーケンスについて図4
3に示すフロー図を参照して説明する。
【0011】まず、プログラムカウンタ5から、命令フ
ェッチアドレスが命令メモリ4へ与えられるとともに、
その命令フェッチアドレスの所定数のビットが分岐先バ
ッファ1へ与えられる。命令メモリ4から読出された命
令は、命令デコーダ7へ与えられる。一方、分岐先バッ
ファ1においては、このプログラムカウンタ5から与え
られたアドレス信号に従って対応のエントリが選択さ
れ、このエントリの内容が読出される。この読出された
エントリに含まれるフィールド3aの有効ビットVの値
に従ってまずそのエントリの内容が有効であるか否かの
判別が行なわれる。この読出されたエントリの内容が有
効な場合、フィールド3bの分岐命令情報(たとえば命
令番号)に従ってフェッチされた命令が分岐命令である
か否かの識別が行なわれる。この分岐命令識別は、たと
えば、分岐命令情報が命令番号である場合、フェッチさ
れた命令の番号がその分岐命令情報が示す命令番号と一
致するか否かを判別することにより行なわれる。この場
合、またこれに変えて、分岐命令情報とプログラムカウ
ンタ5の出力するアドレス信号の残りのアドレス信号
(エントリ選択のために使用されるアドレス以外のアド
レス信号)の一致/不一致を見ることにより分岐命令で
あるか否かの識別が行なわれてもよい。これらの一連の
動作により、命令メモリ4からフェッチされた命令が分
岐先バッファに登録された分岐命令であるか否かの識別
が行なわれる(ステップS2)。
【0012】登録分岐命令が存在しない場合、命令デコ
ーダ7において、このフェッチされた命令が分岐命令で
あるか否かの識別が行なわれる(ステップS3)。フェ
ッチされた命令が分岐命令でない場合には、通常の命令
の実行を行なうために実行ステージEXへそのデコード
された命令が発行される(ステップS4)。一方、フェ
ッチされた命令が分岐命令であるとステップS3におい
て判別された場合、この分岐命令に関する情報が分岐先
バッファ1へ格納され、対応の有効ビットVが有効状態
に設定されてフェッチされた未登録の分岐命令の登録が
行なわれる(ステップS5)。
【0013】一方、ステップS2において、登録分岐命
令が存在すると判別された場合、その読出されたエント
リに含まれるフィールド3cの履歴情報に従って分岐の
予測が行なわれ(この分岐予測アルゴリズムについては
後に詳細に説明する)、その予測結果に従ってフィール
ド3dに含まれる分岐先情報すなわち分岐先アドレスの
プログラムカウンタ5への送出が行なわれる(分岐が生
じると予測された場合)(ステップS6)。
【0014】また、命令デコードステージIDに含まれ
る分岐実行ユニットにおいて、この分岐命令が実行さ
れ、分岐発生の有無が決定される。この決定された分岐
条件が、先に予測された分岐条件と一致しているか否か
の判別が行なわれる(ステップS7)。決定された分岐
条件が予測と一致している場合には、命令を継続して実
行する。また、必要に応じて転記先バッファの履歴情報
の更新が行なわれる(履歴情報が複数ビットを含む場
合)(ステップS8)。
【0015】ステップS7において決定された分岐条件
が予測と一致しないと判定された場合すなわち予測が誤
っている場合には、フェッチされた分岐先命令を無効化
し、正しいアドレスに従って命令のフェッチを行ない、
また分岐先バッファ1の対応のエントリの更新を行なう
(この分岐先バッファ更新動作についても後に説明す
る)(ステップS9)。
【0016】次に、具体的に分岐予測アルゴリズムにつ
いて説明する。この分岐予測アルゴリズムは、履歴情報
が複数ビットの場合と1ビットの場合とで異なる。以
下、複数ビットの履歴情報の分岐予測アルゴリズム、お
よび1ビットの履歴情報の場合の分岐予測アルゴリズム
について順に説明する。
【0017】まず、以下の説明において用いられる用語
を定義する。 (1) Taken実行:分岐命令の実行の結果、分岐
が成立する(分岐が生じる)場合を示す。
【0018】(2) Not−Taken実行:分岐命
令の実行の結果、分岐が不成立の(分岐が生じない)場
合を示す。
【0019】(3) taken予測:分岐の予測時に
分岐成立(分岐する)を予測した場合を示す。
【0020】(4) not−taken予測:分岐の
予測時に分岐不成立(分岐しない)と予測する場合を示
す。
【0021】複数ビットの履歴情報を用いる分岐予測方
式においては、以下の手順で分岐の予測および分岐先バ
ッファの更新が行なわれる。
【0022】予測:分岐先バッファから対象となるエン
トリの内容を読出し、そこに分岐命令が登録されている
場合には、そのエントリに含まれる複数ビットの履歴情
報に従って分岐予測を行なう。
【0023】登録:Taken実行された分岐命令が分
岐先バッファに登録されていない場合には、その分岐命
令を分岐先バッファに登録する。
【0024】更新:分岐命令の実行終了ごとにその実行
結果を該分岐命令の履歴情報に反映させる。
【0025】図44は、2ビット履歴情報に基づく分岐
予測アルゴリズムを状態遷移図で示す図である。図44
において、2ビット履歴情報により、4つの状態A−D
が表現される。履歴情報が状態Aまたは状態Bを示すと
き、分岐予測は、taken予測(t)が行なわれる。
履歴情報が状態Cまたは状態Dを示す場合には、not
−taken予測(n)が行なわれる。分岐命令が実行
されたとき、その実行状態に応じて図44の矢印に示す
方向への状態遷移が生じるように履歴情報の更新が行な
われる。たとえば、履歴情報が状態Bを示しておりta
ken予測が行なわれたとき、Taken実行が生じた
場合には、状態Bは状態Aに更新され、一方、Not−
Taken実行が生じた場合には、状態Bは状態Cへ更
新される。この、複数ビットの履歴情報を用いる分岐予
測は、以下の利点を備える。
【0026】今、図45に示すようなループ型処理構造
を考える。このループ型処理構造は処理機能(または
文)P1を、複数回にわたって繰返し実行する。条件式
P2は、この処理機能(または文)P1の実行結果が所
定の条件に満たしているか否かを判別し、その判別結果
に従って再び処理機能(または文)P1へ戻るかまたは
このループから脱出する。条件式P2の用いる式に従っ
てその判別結果がYESの場合およびNOの場合が生
じ、それぞれの場合を図45に併わせて示す。この条件
式P2に分岐命令が含まれており、この分岐命令に従っ
てループの巡回(処理機能または文P1の繰返し実行)
またはループからの脱出が行なわれる場合を考える。
【0027】分岐命令が登録されていない場合、すなわ
ち、始めてこのループ処理が行なわれる場合、分岐予測
はnot−taken予測となる。ループ型構造では、
処理(または文)P1が複数回繰返し連続して実行され
るため、条件式P2により後方分岐が生じ、この分岐命
令の実行結果はTaken実行となる。この未登録の分
岐命令は、分岐先バッファに最初の実行の後登録される
が、そのとき履歴情報は状態Aまたは状態Bを示す初期
状態に設定される。この初期状態は予め固定的に設定さ
れている。
【0028】次に、処理(または文)P1が実行され、
次いで条件式P2の分岐命令が実行される場合、分岐予
測はtaken予測となり、分岐実行結果はTaken
実行となり、分岐予測はヒットする。以降このループが
繰返し実行される限り、この分岐命令の分岐予測はヒッ
トする。このとき分岐命令の履歴情報は状態Aに設定さ
れる。最終的にループから脱出する場合には、分岐予測
はtaken予測、分岐実行結果はNot−Taken
実行となり、分岐予測はミスヒットとなる。この場合、
分岐命令の状態Aが状態Bに更新される。したがって始
めてこのループ型構造の処理が実行される場合には、ル
ープに入るときとループから脱出するときと2回予測ミ
スが生じるが、一旦この分岐命令が分岐先バッファに登
録されれば、以降のループ型構造処理時においては、単
にループ脱出時においてのみ予測ミスが生じるだけであ
り、分岐予測を高精度で行なうことが可能となる。
【0029】1ビット履歴情報を用いる場合には、以下
のような手順で分岐予測および分岐先バッファの更新が
行なわれる。この場合、分岐命令の履歴情報は有効ビッ
トV(図42参照)で表現される。
【0030】分岐予測:分岐先バッファから対応のエン
トリの内容が読出される。この読出されたエントリの有
効ビットが有効である、すなわち命令メモリからフェッ
チされた命令が分岐命令であり、既に分岐先バッファに
登録されている場合には、taken予測が行なわれ
る。未登録の場合には、not−taken予測が行な
われる。
【0031】登録:分岐命令の実行結果がTaken実
行のとき、その分岐命令が分岐先バッファに登録されて
いない場合には、分岐先バッファへの登録を行なう(有
効ビットVの有効化)。
【0032】履歴情報の更新:分岐命令の実行結果がN
ot−Taken実行であり、またこの分岐命令が分岐
先バッファに登録されている場合には、その分岐命令は
分岐先バッファの対応のエントリから削除する(有効ビ
ットVの無効化)。
【0033】上述のように、1ビット履歴方式において
は、分岐先バッファへの書込は、分岐予測が外れたと
き、すなわち(i)not−taken予測でTake
n実行の場合(分岐命令の登録)、または(ii)tak
en予測でNot−Taken実行の場合(登録分岐命
令の無効化)の場合のみ実行される。したがって、分岐
先バッファへの書込の回数は少なく、ある命令処理サイ
クルにおいて分岐先バッファへは、読出または書込のい
ずれかしか行なわれないため、1サイクル内で書込およ
び読出両方を行なう必要がなく、簡易な構成で容易に分
岐先バッファを構築することができるという利点を有す
る。
【0034】
【発明が解決しようとする課題】図46は、複数ビット
の履歴情報に基づく分岐予測を行なう場合における分岐
先バッファ(BTB)へのアクセスシーケンスを示す図
である。サイクル(n−2)において、命令A1につい
て命令メモリ(IC)へアクセスが行なわれ、命令A1
が読出される。そのとき、平行して分岐先バッファ(B
TB)から対応のエントリの内容が読出され、その対応
のエントリに含まれる分岐命令情報が命令A1を特定し
ているか否かの判別が行なわれる。命令A1が分岐命令
の場合、サイクル(n−1)において、命令デコードス
テージIDにおいてデコードが行なわれ、その分岐命令
が分岐実行ユニット(BEX)で実行される。
【0035】このサイクル(n−1)において、次の命
令A2のフェッチが行なわれ、またこの命令A2が分岐
命令であるか否かにかかわらず分岐先バッファ(BT
B)の対応のエントリの内容が読出される。命令A2が
分岐先バッファに登録されていない場合には、分岐予測
としては常にnot−taken予測が行なわれる。
【0036】サイクルnにおいて、命令A1が分岐命令
であった場合には、分岐先バッファ(BTB)の内容の
書替えが行なわれる。すなわち、命令A1が既に分岐先
バッファ(BTB)に登録されている場合には、その履
歴情報の更新が行なわれる。履歴情報が、図44に示す
状態Aに設定されている場合においても、その分岐先バ
ッファへの履歴情報更新処理は実行される。命令A1が
分岐先バッファに登録されておらず、Taken実行さ
れた場合には、対応のエントリがこの命令A1に応じて
書替えられる。
【0037】このサイクルnにおいては、命令A3のた
めに命令メモリ(IC)へのアクセス動作が行なわれ
(命令フェッチ)、また分岐先バッファ(BTB)の対
応のエントリの内容が読出される。分岐先バッファ(B
TB)の読出は毎サイクルごとに行なわれており、した
がってサイクルnにおいて、分岐先バッファの資源競合
が生じる。このような競合に対する対策としては以下の
方策が考えられる。
【0038】(1) サイクルnにおいては、命令メモ
リから命令を読出す命令フェッチ動作を停止し、分岐先
バッファに対する書込のみを行なう。次のサイクル(n
+1)において命令メモリからの命令フェッチおよび分
岐先バッファの対応のエントリの読出を行なう。この方
策では、分岐先バッファに対し書込が行なわれるごとに
命令フェッチ動作(命令メモリからの命令の読出)が停
止され、パイプラインにおいて1サイクルのペナルティ
が生じる。
【0039】(2) サイクルnにおいては、分岐先バ
ッファに対しては書込のみを行ない、命令フェッチは行
なうものの、分岐先バッファからの対応のエントリの読
出は行なわない。この場合、命令メモリから読出された
命令は分岐先バッファに登録されていないと規定され、
not−taken予測を行なう必要がある。このサイ
クルでフェッチされた命令が分岐命令でない命令の場合
も考えられるからである。したがってこの場合、命令メ
モリからフェッチされた命令が分岐先バッファに登録さ
れている分岐命令の場合、有効な予測を妨げられること
になり、予測精度が低下する。
【0040】(3) 分岐先バッファを、1サイクルで
読出および書込両者をできる構成とする。この方策
(3)は、方策(1)および(2)のように1サイクル
に分岐先バッファの読出または書込のいずれかを行なう
構成と異なり、両者を行なうため、命令フェッチおよび
分岐先バッファ読出および分岐先バッファの書込を行な
うことができ、パイプラインにストールが生じることが
なく、処理性能の低下は生じない。しかしながら、高速
クロックで動作する場合、このような高速サイクルにお
いて書込および読出両者を行なうためには分岐先バッフ
ァの構成が複雑になる。
【0041】いずれの方策においても、欠点があるが、
複数ビットの履歴情報を用いる分岐予測方式において
は、分岐予測のヒット/ミスにかかわらず分岐命令の実
行ごとに履歴情報の更新/分岐命令の登録のために分岐
先バッファへの書込を行なう必要がある。しかしなが
ら、方策(1)および(2)を用いると、分岐命令の実
行ごとにサイクル・ペナルティまたは予測妨害が生じ、
性能の低下が著しくなり、これらの方策を利用すること
はできない。したがって、必然的に、1サイクルで書込
および読出を行なうことのできる分岐先バッファを用い
る必要がある。このような分岐先バッファを実現するた
めには、(a) データ書込ポートとデータ読出ポート
とを別々にする2ポート構成とする、および(b) 命
令メモリから命令をフェッチする命令フェッチサイクル
の半分のサイクルでアクセスすることのできる高速バッ
ファを分岐先バッファに適用する。の2つの方式が考え
られる。方式(a)の場合、2ポート構成とするため、
データ書込経路およびデータ読出経路それぞれを別々に
設ける必要があり、またエントリの選択系にも、データ
書込のためのものおよびデータ読出のためのもの両者を
独立に設ける必要があり、ハードウェア量が増加する。
分岐先バッファは、分岐予測のヒット率を上げるため
に、ある程度のエントリ数が必要とされる(256エン
トリ以上が望ましいとされる)。したがって、1ポート
構成でもハードウェア量が多く、この上さらにハードウ
ェア量を増加させるのは、装置規模を増大させるため好
ましくない。
【0042】方式(b)は、大記憶容量を有し(256
エントリ)、かつ小占有面積で高速アクセスすることの
できるバッファを実現するのは困難であるという問題が
ある。記憶容量が増大すれば(エントリ数が増大すれ
ば)、その内部の信号配線も長くなり、信号伝播遅延が
大きくなり、したがって高速アクセスするバッファを実
現するのが困難になる。
【0043】上述のように、複数ビットの履歴情報に基
づく分岐予測を行なう方式においては、1サイクルで書
込/読出を行なうことのできる高速バッファが必要とさ
れるが、そのような高速バッファは、上述のようにその
実現が困難であり、またクロックが高速化され、サイク
ル時間が短くなれば、さらにその高速バッファの実現が
困難となる。
【0044】また、未登録の分岐命令を分岐先バッファ
に登録する場合、その履歴情報の初期値は予め定められ
た値に設定される。この予め定められた初期値は、その
対応の分岐命令の分岐の発生確率が高いか否かにかかわ
らず固定的に設定される。この場合、初期状態がたとえ
ば図44に示す状態Aに設定される場合、たまたまTa
ken実行された分岐確率の低い(分岐が発生する確率
の低い)分岐命令が登録された場合、この分岐命令は2
回連続してNot−Taken実行されないとその分岐
予測はnot−taken予測とならず、その間分岐予
測はミスヒットとなり、分岐予測ヒット率が低下すると
いう問題が生じる。
【0045】また1ビット履歴情報に基づく分岐予測方
式は以下のような欠点を有する。図45に示すようなル
ープ型構造の処理を考える。後方分岐の発生確率が高い
場合、ループを脱出する場合においてtaken予測/
Not−Taken実行となり、分岐予測のミスヒット
が生じる。このとき、1ビット履歴情報を用いる分岐予
測方式においては、この分岐命令は分岐先バッファから
削除される。したがって、再びこのループが実行される
場合、最初にnot−taken予測−Taken実行
のミスヒットが常に生じる。したがってループ型構造の
処理を行なう場合、ループに入る場合とループから脱出
する場合の合計2回の分岐予測ミスヒットが生じ、分岐
予測精度が低いという問題が生じる。
【0046】また、従来の分岐先バッファを用いる分岐
予測方式は、履歴情報のビット数にかかわらず以下の欠
点を備える。
【0047】高集積度および占有面積およびコストの観
点から分岐先バッファのエントリ数は、たとえば256
と制限を受ける。その分岐先バッファのエントリの指定
はプログラムカウンタの出力(命令フェッチアドレス)
の一部により行なわれる(図42参照)。したがって、
分岐先バッファの1つのエントリに複数の分岐命令が割
当られ、この分岐先バッファのエントリに対する資源競
合が生じる。分岐先バッファに登録されている分岐命令
は、taken予測とされる確率が高く(1ビット履歴
情報の場合には常に登録分岐命令はtaken予測とさ
れる)、一方、分岐先バッファに未登録の分岐命令は、
not−taken予測とされる。したがって、分岐確
率が高い分岐命令を分岐先バッファに登録すべきであ
る。しかしながら、Taken実行された未登録の分岐
命令は無条件で分岐先バッファに登録される。したがっ
て、この未登録の分岐命令が分岐確率の低い分岐命令で
あり、登録されるべきエントリに元々分岐確率が高い分
岐命令が登録されていた場合、その分岐確率が高い分岐
命令が消去される。したがって、この既登録の分岐命令
に対する分岐予測が外れてしまう。またこの分岐確率が
低い分岐命令が登録された場合、次回の分岐予測はta
ken予測となるが、実際の分岐実行結果はNot−T
aken実行となり予測が外れる可能性が高い。したが
って、分岐予測精度がこのような未登録の分岐確率の低
い分岐命令により劣化するという問題が生じる。
【0048】それゆえ、この発明の目的は、分岐命令が
存在しても性能劣化の生じない命令処理装置を提供する
ことである。
【0049】この発明の他の目的は、分岐予測精度(ヒ
ット率)の高い分岐予測機構を備える命令処理装置を提
供することである。
【0050】この発明のさらに他の目的は、処理性能お
よび予測精度を低下させることなく書込/読出を行なう
ことのできる分岐先バッファを備える命令処理装置を提
供することである。
【0051】この発明のさらに他の目的は、分岐確率の
高い分岐命令のみを選択的に分岐先バッファに登録する
ことのできる命令処理装置を提供することである。
【0052】
【課題を解決するための手段】請求項1に係る命令処理
装置は、各々が、分岐命令特定情報と該分岐命令の有効
/無効を示す1ビットの有効ビットとを少なくとも格納
する複数のエントリを有する分岐先バッファと、与えら
れた命令が分岐命令のとき、この分岐先バッファの対応
のエントリに格納された情報に含まれる有効ビットに従
って、この分岐命令による分岐の発生の有無を予測する
予測手段と、分岐命令を実行し、その実行結果に従って
分岐予測手段が行なった予想が正しいか否かを判別する
分岐判別手段とを含む。分岐命令は、実行されるべき処
理を示す命令部分と、この分岐命令による分岐の発生が
生じる可能性が高いか否かを示す分岐確率指示部分とを
含んでいる。
【0053】請求項1の命令処理装置は、さらに、分岐
確率指示部分のデータに従って、分岐先バッファの対応
のエントリの内容を変更する変更手段を備える。この変
更手段は、対応のエントリに含まれる有効ビットが有効
を示しかつ分岐発生指示部分が分岐発生の可能性が小さ
いことを示すときその有効ビットを無効状態とする手段
を含む。
【0054】請求項2に係る命令処理装置は、請求項1
の命令処理装置の変更手段が、分岐判別手段の判別結果
が予測と実行結果の不一致を示しかつ有効ビットが有効
を示しかつさらに分岐確率指示部分のデータが分岐発生
の確率が高いことを示すとき、対応のエントリの内容を
変更せずに維持する手段を含む。
【0055】請求項3に係る命令処理装置は、請求項1
の変更手段が、分岐命令が対応のエントリに格納された
分岐命令と同じ命令であるか否かを判別する同一判別手
段と、この同一判別手段の判別結果が不一致を示しかつ
与えられた分岐命令による分岐が発生したとき、分岐発
生指示部分のデータが分岐発生の可能性が高いことを示
すとき、その分岐命令により対応のエントリの内容を変
更する手段をさらに備える。
【0056】請求項4に係る命令処理装置は、請求項1
の装置が、さらに、1つのタグアドレスにより複数の命
令がアドレス指定される命令キャッシュメモリをさらに
含む。分岐先バッファは、1つのタグアドレスにより同
時に指定される複数のエントリを含むように構成されま
たその分岐先バッファのタグアドレスと命令キャッシュ
メモリのタグアドレスは1対1態様で対応付けられる。
【0057】請求項4に係る命令処理装置は、さらに、
この命令キャッシュメモリへ与えられる命令フェッチア
ドレスの一部によりアドレス指定される複数のエントリ
を含み、各エントリに分岐命令特定情報と該分岐命令の
過去の分岐の発生の履歴を示す情報とを少なくとも格納
する分岐先バッファと、命令キャッシュメモリにキャッ
シュミスが生じたとき、この命令キャッシュメモリの置
換されるべき命令群に含まれる分岐命令に対応する、分
岐先バッファ内のエントリの内容を無効化する手段を備
える。
【0058】
【0059】
【0060】
【0061】 請求項に係る命令処理装置は、各々
が、分岐命令特定情報と該分岐命令の有効/無効を示す
有効ビットを含む履歴情報とを格納する複数のエントリ
を含む分岐先バッファと、与えられた命令が分岐命令の
とき、該分岐命令を実行し、分岐が発生したか否かを示
す信号を発生する分岐実行手段を含む。分岐命令は、予
め分岐が発生する可能性が低いか否かを示す分岐確率指
示情報を含む。
【0062】 請求項に係る命令処理装置は、さら
に、分岐実行手段の実行結果が分岐発生を示すかつその
分岐命令の分岐確率指示情報が分岐発生の可能性が低い
ことを示すとき、分岐先バッファの対応のエントリの内
容の変更を禁止する手段を備える。
【0063】 請求項に係る命令処理装置は、各々
が、分岐命令特定情報と該分岐命令による分岐の発生の
期待値を示す情報とを少なくとも格納する複数のエント
リを有する分岐先バッファを含む。
【0064】 請求項に係る命令処理装置は、さら
に、与えられた命令が分岐命令のとき、その分岐命令を
実行し、かつ分岐命令により分岐が発生したか否かを示
す信号を発生する分岐実行手段を含む。この与えられた
分岐命令は、分岐発生の期待値を示す情報を含む。
【0065】 請求項に係る命令処理装置は、さら
に、与えられた分岐命令が分岐先バッファに登録されて
いるか否かを判別する登録判別手段と、この登録判別手
段が与えられた分岐命令の分岐先バッファにおける未登
録を示し、かつ分岐実行手段の出力信号が分岐発生を示
すとき、分岐先バッファの対応のエントリに既に別の分
岐命令についての情報が有効に格納されているか否かを
判別する有効登録判別手段と、この有効登録判別手段が
別の分岐命令が有効に対応のエントリに格納されている
と判別したとき、その与えられた分岐命令の予測期待値
と該別の分岐命令の予測期待値とを比較する比較手段
と、この比較手段が与えられた分岐命令の予測期待値が
別の分岐命令の予測期待値以上であることを示すとき、
この与えられた分岐命令に関連する情報を分岐先バッフ
ァの対応のエントリへ書込む手段を備える。
【0066】 請求項に係る命令処理装置は、請求項
の装置において、分岐先バッファの各エントリが対応
の分岐命令の最近の分岐の履歴を示す履歴情報を含んで
おり、分岐先バッファにおける予測期待値情報はこの
履歴情報により与えられる。
【0067】 請求項に係る命令処理装置は、請求項
8の装置において、書込手段が、この与えられた分岐命
令に付随する分岐期待値情報に従って履歴情報の初期値
を設定する手段を含む。
【0068】 請求項に係る命令処理装置は、各々
が、分岐命令特定情報とその分岐命令の最近の分岐の発
生の有無の履歴を示す履歴情報とを少なくとも格納する
複数のエントリを有する分岐先バッファと、与えられた
分岐命令に関連する情報が分岐先バッファに格納されて
いるか否かを判別する判別手段と、与えられた分岐命令
を実行し、その実行結果に従って与えられた分岐命令に
よる分岐が発生したか否かを示す信号を発生する分岐実
行手段を含む。この与えられた分岐命令は、その分岐命
令による分岐発生の期待値を示す情報を含む。
【0069】 請求項に係る命令処理装置はさらに、
判別手段が分岐命令の分岐先バッファにおける未登録を
示しかつ分岐実行手段の出力信号が分岐発生を示すと
き、この与えられた分岐命令の関連の履歴情報を分岐命
令の含まれる分岐予測期待値に従って決定し、その分岐
命令に関連する情報とともに決定された履歴情報を初期
状態値として分岐先バッファに格納する手段とを備え
る。
【0070】 請求項1に係る命令処理装置は、各々
が、分岐命令特定情報と分岐先情報とを少なくとも格納
する複数のエントリを含む分岐先バッファと、この分岐
先バッファとは別に設けられて、分岐先バッファと独立
に制御が可能でありかつ複数のエントリの各々に対応す
るロケーションを有し、各ロケーションに対応のエント
リに格納された分岐情報の最近の分岐の発生の履歴を示
す履歴情報を格納する分岐履歴バッファと、与えられた
分岐命令の対応のエントリの内容を分岐先バッファから
読出してその分岐命令の分岐の発生の有無を予測する分
岐予測手段と、与えられた分岐命令を実行し、その実行
結果に従って分岐が発生したか否かを示す信号を生成す
る分岐実行手段と、この分岐予測手段の出力信号と分岐
実行手段の出力信号とに従って、分岐履歴バッファの対
応のロケーションに格納された値を変更する変更手段と
を備える。
【0071】 請求項1に係る命令処理装置は、請求
項1における分岐予測手段が、分岐先バッファに与え
られた分岐命令に対応する情報が格納されているか否か
に従って分岐命令の分岐発生の有無を予測する手段を含
む。
【0072】
【0073】 請求項1に係る命令処理装置は、請求
項1の変更手段が、分岐予測手段が分岐非発生を予測
し、かつ分岐実行手段が分岐発生を示すとき、分岐履歴
バッファの対応のロケーションを初期値に設定する手段
を含む。
【0074】 請求項1に係る命令処理装置は、請求
項1の装置において、変更手段が分岐予測手段が分岐
非発生を予測しかつ分岐実行手段が分岐発生を示すと
き、この分岐命令に関連する情報を分岐先バッファ対応
のエントリに格納する手段を含む。請求項14に係る命
令処理装置は、各々が、分岐命令特定情報と分岐先情報
とを少なくとも格納する複数のエントリを含む分岐先バ
ッファと、この分岐先バッファとは別に設けられかつ複
数のエントリの各々に対応するロケーションを有し、各
ロケーションに対応のエントリに格納された分岐情報の
最近の分岐の発生の有無の履歴を示す履歴情報を格納す
る分岐履歴バッファと、与えられた分岐命令の対応のエ
ントリの内容を分岐先バッファから読出してその分岐命
令の分岐の発生の有無を予測する分岐予測手段と、与え
られた分岐命令を実行し、その実行結果に従って分岐が
発生したか否かを示す信号を生成する分岐実行手段と、
この分岐予測手段の出力信号と分岐実行手段の出力信号
とに従って、分岐履歴バッファの対応のロケーションに
格納された値を変更する変更手段とを備える。分岐予測
手段が、分岐先バッファに与えられた分岐命令に対応す
る情報が格納されているか否かに従って分岐命令の分岐
発生の有無を予測し、変更手段が、分岐予測手段が分岐
発生を予測し、かつ分岐実行手段が分岐非発生を示すと
き、分岐履歴バッファの対応のロケーションに格納され
た値を所定値減分する手段と、対応のロケーションの値
が予め定められた値を示すとき、分岐先バッファの対応
のエントリの内容を無効化する手段を含む。
【0075】 請求項1に係る命令処理装置は、各々
が、分岐命令特定情報と分岐確率情報と該分岐命令の過
去の分岐の発生の有無の履歴を示す履歴情報を格納する
複数の記憶位置を含む分岐情報格納手段を備える。分岐
命令はその分岐命令による分岐発生の期待値を示す情報
を含む。
【0076】 請求項1に係る命令処理装置は、さら
に、与えられた分岐命令の期待値情報に従ってしきい値
を設定するしきい値設定手段と、この与えられた分岐命
令の対応の記憶位置の内容を分岐情報格納手段から読出
し、分岐発生の有無を予測する予測手段と、この与えら
れた分岐命令を実行し、その分岐命令による分岐の発生
の有無を示す信号を発生する分岐実行手段と、分岐予測
手段の予測と分岐実行手段の分岐実行結果とが不一致の
とき、該分岐命令に含まれる対応の履歴情報としきい値
設定手段により設定したしきい値とに従ってこの分岐命
令の履歴情報の値を決定し、対応の記憶位置にこの決定
された履歴情報を書込む手段を含む。
【0077】 請求項1に係る命令処理装置は、書込
手段がさらに、分岐予測手段の分岐発生予測と分岐実行
手段の分岐非発生指示とに従って、しきい値設定手段に
より設定されたしきい値と対応の履歴情報とからこの与
えられた分岐命令の分岐発生の予測値を決定しこの予
測値を履歴情報とは別に分岐命令に分岐確率情報として
関連付けて格納する手段を含む。
【0078】 請求項1に係る命令処理装置は、この
請求項1の分岐発生予測値、分岐命令の有効/無効
を示す有効ビットである。
【0079】 請求項18に係る命令処理装置は、請求
項1の命令処理装置の履歴情報設定手段が、分岐予測
手段が分岐非発生を示し、かつ分岐実行手段が分岐発生
を示すとき、この分岐命令の対応の履歴情報の初期値を
しきい値設定手段が設定したしきい値に従って初期設定
する手段を含む。
【0080】 請求項19に係る命令処理装置は、請求
項15の命令処理装置において、分岐命令による分岐の
発生の確率を示す期待値は、その分岐命令に含まれる分
岐先命令のアドレスの即値である。
【0081】 請求項2に係る命令処理装置は、請求
項1の装置において、分岐発生の期待値を示す情報
は、コンパイラにより分岐命令の特定のコード内に予め
設定される。
【0082】 請求項2に係る命令処理装置は、請求
項1の装置において、分岐情報格納手段が、分岐命令
特定情報を記憶する手段と、対応の履歴情報を格納する
記憶手段とが別々に設けられる構成を備える。
【0083】
【作用】請求項1の装置においては、分岐命令に含まれ
る分岐確率指示ビットが分岐発生確率が小さいことを示
すとき、分岐先バッファの対応のエントリの内容が無効
化されるため、分岐先バッファには分岐発生の確率の高
い分岐命令のみが格納される可能性が高くなり、分岐予
測精度が高くなる。
【0084】請求項2の装置においては、分岐予測がミ
スヒットであり、また分岐命令が登録されておりかつさ
らにその分岐命令の分岐発生確率が高いときには分岐先
バッファの対応のエントリの内容を維持しているので、
分岐発生の確率の高い命令がたまたま分岐を生じさせな
い場合においても分岐先バッファから除外されるのが防
止され、分岐先バッファには分岐確率の高い分岐命令を
登録することができ、応じて分岐予測精度が改善され
る。
【0085】請求項3の装置においては、与えれた分岐
命令が対応のエントリに格納された分岐命令と同一か否
かが判別され、両者が異なる場合には分岐が発生しかつ
この与えられた分岐命令の分岐発生確率が高いことを分
岐確率指示ビットが示している場合には、分岐先バッフ
ァの対応のエントリを与えられた分岐命令の内容で書替
えるようにしているため、分岐先バッファには分岐確率
の高い命令が格納され、応じて分岐予測精度が改善され
る。
【0086】請求項4の装置においては、命令メモリに
おいてキャッシュミスが発生したとき、命令メモリにお
いて置換されるべき命令群に含まれる分岐命令は分岐先
バッファにおいて無効化されるため、不使用となる分岐
命令が分岐先バッファに存在する可能性が小さくされ、
使用される分岐命令のみが分岐先バッファに格納され、
分岐先バッファの利用効率が改善される。
【0087】
【0088】
【0089】 請求項の装置においては、分岐発生時
においても分岐命令に含まれる分岐確率情報が分岐確率
の低いことを示すときには、分岐先バッファへの該分岐
命令の登録が禁止されるため、低い分岐確率の分岐命令
で高い分岐確率の分岐命令が書替えられる可能性が低減
され、分岐予測精度の低下が防止される。
【0090】 請求項の装置においては、未登録分岐
命令により分岐が発生したとき、その分岐命令の予測期
待値が対応のエントリに格納された分岐命令より分岐確
率の高いことを示すときにのみ、その未登録分岐命令が
分岐先バッファに登録され、応じて分岐先バッファに分
岐確率の低い分岐命令が登録される可能性が小さくな
り、分岐予測精度の低下が防止される。
【0091】 請求項の装置においては、分岐先バッ
ファに格納された分岐命令の予測期待値はその履歴情報
により表現されるため、分岐先バッファ内に余分の情報
を格納する領域を設ける必要がなく、分岐先バッファの
規模の増大が防止される。また、分岐先バッファ内の履
歴情報は対応の分岐命令の実行時に更新されるため、命
令処理状況に応じて分岐命令の登録/削除を行なうこと
ができ、処理の進行状況に応じて動的に分岐先バッファ
に登録される分岐命令を判別することができ、高い分岐
予測精度を実現することができる。
【0092】 請求項の装置においては、分岐命令に
付随する分岐期待値に従って履歴情報の初期値が設定さ
れるため、分岐命令の分岐確率の高低に従ってその履歴
情報の初期値を設定することができ、分岐確率の低い分
岐命令が分岐先バッファに登録されてもすぐに無効とさ
れる可能性が高く、また分岐確率の高い分岐命令の分岐
予測ミスヒット時においても無効とされる可能性が低
く、分岐予測精度の劣化が防止される。
【0093】 請求項の装置においては、未登録分岐
命令に含まれる分岐期待値に従ってその履歴情報の初期
状態値を決定して、分岐命令情報とともに分岐先バッフ
ァに格納しており、分岐命令の分岐確率の高低に応じて
柔軟にその履歴情報初期値を設定することができ、分岐
予測精度の劣化が防止される。
【0094】 請求項1の装置においては、分岐情報
特定情報と履歴情報とは互いに独立に書込/読出の制御
が可能な別々のバッファに格納されるため、分岐先バッ
ファは通常サイクルにおいてはデータ読出だけであり、
一方、履歴情報を格納する分岐履歴バッファは通常サイ
クルデータ書込動作が行なわれるだけであり、1つのバ
ッファは1サイクルにおいて書込および読出が行なわれ
る可能性が小さく、命令処理機能および分岐予測性能の
低下が防止されるとともに、また高速動作性が要求され
ず容易に分岐先バッファおよび分岐遅延バッファを実現
することができる。
【0095】 請求項1の装置においては、分岐命令
が登録されているか否かに従って分岐予測が行なわれる
ため、1ビット履歴方式の分岐予測と同様に分岐先バッ
ファの構成を簡略化することができる。
【0096】
【0097】 請求項1の装置においては、not−
taken予測でかつTaken実行のときに分岐履歴
バッファにその分岐命令の履歴情報の初期値が設定さ
れ、これにより未登録分岐命令の履歴情報の初期値が格
納されるため、分岐履歴バッファにおいては、何ら通常
サイクルでの書込動作の他に余分の書込動作が必要とさ
れず、未登録分岐命令の登録による処理時間の増大は生
じず、サイクルペナルティは生じない。
【0098】 請求項1の装置においては、not−
taken予測かつTaken実行のときに分岐先バッ
ファにこの未登録分岐命令が登録されるが、このような
登録は未登録分岐命令による分岐が発生したときだけで
あり、その回数は全体として少なく、未登録分岐命令の
登録によるサイクルペナルティは全体として小さな値に
あり、処理性能および予測ヒット率の低下は防止され
る。請求項14の装置においては、分岐履歴バッファ内
の分岐履歴情報が所定値に到達したとき、分岐先バッフ
ァの対応の分岐命令が無効化されており、複数ビット履
歴方式と同じ分岐予測精度を実現することができる。
【0099】 請求項1の装置においては、分岐予測
がミスヒットしたときに、その分岐命令の分岐確率を示
す分岐期待値に従って決定されたしきい値とその分岐命
令の履歴情報とから履歴情報の更新値を決定しており、
偶発的な分岐の方向変化による過剰な履歴情報の更新が
抑制され、分岐予測ヒット率の低下が抑制される。
【0100】 請求項1の装置においては、take
n予測かつNot−Taken実行のとき、分岐命令の
分岐期待値により設定されたしきい値と対応の履歴情報
とから決定された分岐予測値が格納されるため、次回の
分岐予測がこの分岐予測値に従って行なわれ、分岐命令
の分岐確率に応じた精度を持って予測を行なうことがで
き、分岐予測ミスヒットに起因する分岐予測精度低下を
防止することができる。
【0101】 請求項1の装置においては、分岐先バ
ッファ内に格納される分岐予測値は有効ビットで表現さ
れるため、分岐先バッファに余分の情報格納領域を設け
る必要がなく分岐先バッファの規模(ハードウェア量)
の増大が防止される。
【0102】 請求項18の装置においては、take
n予測かつTaken実行のときに分岐命令に含まれる
分岐確率を示す分岐期待値に従って決定されたしきい値
により、その分岐命令の履歴情報の初期値を設定してお
り、分岐命令の分岐確率を反映して履歴情報を決定する
ことができ、分岐予測精度が改善される。
【0103】 請求項19の装置においては、分岐先ア
ドレスの即値を分岐期待値として用いているため、何ら
特別の命令コードを分岐命令に付加する必要がなく、分
岐確率の高い後方分岐命令のような分岐命令の分岐確率
を高精度で表現することができる。
【0104】 請求項2に係る装置においては、分岐
命令に含まれる分岐期待値は、コンパイラにより設定さ
れるため、分岐命令の分岐確率は、その分岐命令の操作
内容に応じて高精度で設定することができ、分岐予測精
度が大幅に改善される。
【0105】 請求項2に係る装置においては、請求
項1の装置において分岐履歴情報と分岐命令特定情報
とが別々のバッファに格納されるため、1つのバッファ
に対し1つのサイクルにおいて情報の書込および読出両
方を行なう必要がほとんどなく、高速クロックサイクル
においても余裕を持って分岐命令情報の読出および履歴
情報の書込(更新)を行なうことができる。
【0106】
【実施例】
[実施例1]図2は、この発明の一実施例である命令処
理装置に用いられる命令コードの構成を示す図である。
図2において、命令コード10は、通常の(従来と同様
の)命令コードが格納される命令コードフィールド10
aと、この命令コードフィールド10aに格納された命
令が分岐命令のとき分岐の発生する可能性(以下、分岐
確率と称す)の高低を示すフラグalways−tを格
納する分岐確率指示フィールド10bを含む。命令コー
ドフィールド10aには、その命令の処理内容を示す操
作コード(opコード)と、その操作に用いられるオペ
ランドデータなどが格納される。分岐命令の場合には、
この命令コードフィールド10a内にまた、分岐発生後
に最初に処理される命令が格納されるアドレスすなわち
分岐先アドレスが格納される。
【0107】分岐確率指示フィールド10bに格納され
るフラグalways−tは、プログラムのコンパイル
時において、コンパイラがその命令に応じてセットす
る。分岐命令による分岐の発生の確率が高い場合には、
フラグalways−tは“1”にセットされ、それ以
外の場合にはこのフラグalways−tは“0”にリ
セットされる。どのような分岐命令が高い分岐確率を有
しまたどのような分岐命令が低い分岐確率を有するかの
一例は、前述のJ・K・Fリーの文献に示されている。
たとえば、ループ制御に用いられる後方分岐のための分
岐命令は、通常発生するため、その分岐確率は高く、サ
ブルーチンコールのために用いられる分岐命令は常に分
岐が発生するためその分岐確率は高く、また“NOP
(no−operation)”として用いられる分岐
命令は、分岐は生じず、その分岐確率は小さい。
【0108】この第1の実施例においては、1ビット履
歴方式すなわち1ビットの履歴情報を保持する分岐先バ
ッファを用いて分岐先予測および分岐先バッファの登録
・更新を行なう。
【0109】図1は、この発明の第1の実施例に従う命
令処理装置の全体の構成を概略的に示す図である。図1
において、命令処理装置は、分岐先命令に関連する情報
を格納する分岐先バッファ20を含む。この分岐先バッ
ファ20は、情報格納のための複数のエントリを有する
書込/読出が可能なバッファ回路21aと、与えられた
アドレス信号ADに従って対応のエントリを選択状態と
するセレクタ21bを含む。バッファ回路21aに含ま
れるエントリの各々は、分岐命令特定情報(命令番号な
ど)PAと、その分岐命令により次に実行される命令が
格納されたアドレスを示す分岐先アドレスBAとそのエ
ントリに分岐命令が登録されているか否かを示す有効ビ
ットVを格納する。有効ビットVが“1”のときに、そ
のエントリに分岐命令が登録されており、有効ビットが
“0”の場合には、そのエントリには分岐命令が登録さ
れていないことが示される。セレクタ21bは、アドレ
ス信号をデコードして対応のエントリを選択状態とする
デコード回路であってもよく、また連想記憶などのよう
に、アドレス信号ADを検索データとして検索動作を行
ない、一致したエントリの内容を読出す構成が利用され
てもよい。以下においては、説明を簡略化するために、
このセレクタ21bは、アドレス信号ADをデコードし
てバッファ回路21aの対応のエントリを選択状態とす
るように説明される。
【0110】命令処理装置はさらに、分岐先バッファ2
0から読出される有効ビットVと固定値“1”の一致/
不一致を検出する比較器22と、この比較器22の出力
信号に従って、固定値“1”と分岐先バッファ20から
読出された分岐先アドレスBAの一方を選択してプログ
ラムカウンタ26のカウント増分値を設定してプログラ
ムカウンタ26の次のサイクルにおけるカウント値すな
わち命令フェッチアドレスを設定するカウント設定回路
24を含む。プログラムカウンタ26から出力されるカ
ウント値すなわち命令フェッチアドレスは図示しない命
令メモリへ与えられるともに、その一部がアドレス信号
ADとして分岐先バッファ20へ与えられる。分岐命令
特定情報PAは、このプログラムカウンタ26からのカ
ウント値、すなわち命令フェッチアドレスPCAのう
ち、アドレス信号ADを除く残りのビットがたとえば用
いられる。
【0111】命令処理装置は、さらに、図示しない命令
デコーダから与えられる分岐命令情報(操作コード等)
およびオペランドデータを受け、その分岐命令を実行
し、その実行結果を示す信号Reを生成する分岐実行ユ
ニット30と、分岐実行ユニット30の出力信号に従っ
て分岐先バッファにおけるエントリの更新および分岐命
令の登録を決定し、かつその登録/更新動作を制御する
BTB登録/更新決定機構32を含む。分岐実行ユニッ
ト30へは、また分岐命令コードに含まれる分岐確率フ
ラグalways−tが与えられ、この分岐確率フラグ
は、BTB登録/更新決定機構32に与えられる。分岐
実行ユニット30は、また比較器22からの分岐予測信
号Prを受けてBTB登録/更新決定機構32へ与える
ように示される。この分岐予測指示信号Prは分岐実行
ユニット30を介することなく直接BTB登録/更新決
定機構32へ与えられる構成が用いられてもよい。ま
た、分岐実行ユニット30は、プログラムカウンタ26
からの命令フェッチアドレスPCAを受けてラッチする
ように示されるが、このプログラムカウンタ26からの
命令フェッチアドレスPCAは、図1において分岐命令
情報として示す情報に含まれていてもよい。ここでは、
信号の流れを明確にするために分岐実行ユニット30へ
与えられる命令フェッチアドレスPCAは、命令デコー
ダから与えられる分岐命令情報とは別の情報であるよう
に示される。分岐実行ユニット30は、後にまたその構
成については説明するが、このプログラムカウンタ26
から与えられた命令フェッチアドレスPCAをラッチし
ており、分岐先バッファ20におけるエントリへの書込
動作時においてはそのラッチした命令フェッチアドレス
PCAを分岐先バッファ20へ与える。次に動作につい
て簡単に説明する。
【0112】命令メモリからの命令のフェッチ時におい
ては、プログラムカウンタ26から命令フェッチアドレ
スPCAが出力されて、命令メモリ(明確には示さず)
および分岐先バッファ20へ与えられる。命令メモリか
らの命令のフェッチ動作と平行して、分岐先バッファ2
0から、この命令フェッチアドレスPCAの一部分であ
るアドレス信号ADに従って対応のエントリの選択が行
なわれる。読出指示信号BTB−reが活性状態とさ
れ、分岐先バッファ20が読出モードに設定され、選択
されたエントリの内容が読出される。この選択されたエ
ントリに含まれる有効ビットVが比較器22へ与えら
れ、また分岐先アドレスBAがカウント設定回路24へ
与えられる。比較器22はこの与えられた有効ビットV
を固定値“1”と比較し、その比較結果に従って分岐予
測信号Prを発生して分岐実行ユニット30およびカウ
ンタ設定回路24へ与える。比較器22は、この有効ビ
ットVが“1”を示している場合には、taken予測
を示す状態に信号Prを設定する。カウント設定回路2
4は、この比較器22からの分岐予測信号Prが、ta
ken予測を示している場合には、カウント設定回路2
4は、この分岐先バッファ20から読出された分岐先ア
ドレスBAを選択し、プログラムカウンタ26のカウン
ト値をこの分岐先アドレスBAに対応する値に設定す
る。分岐予測信号Prがnot−taken予測を示し
ているとき、カウント設定回路24は固定値“1”を選
択し、プログラムカウンタ26のカウント値すなわち次
の命令フェッチアドレスを1増分する。
【0113】分岐実行ユニット30は、命令デコーダか
ら与えられた命令が分岐命令のとき、その分岐命令に含
まれるオペランドデータおよび操作コードおよび分岐確
率フラグalways−tを受けてその分岐命令を実行
する。分岐実行ユニット30は、その分岐命令の実行結
果により分岐が発生するか否かに従って信号ReをTa
ken実行を示す状態およびNot−Taken実行を
示す状態のいずれかの状態に設定する。このとき、分岐
実行ユニット30は、またその分岐命令に関連して与え
られた命令フェッチアドレス(プログラムカウンタ26
の出力カウント値)PCAを分岐命令特定情報として分
岐先バッファ20へ与える。分岐実行ユニット30は、
またこの分岐命令に含まれる分岐先アドレスBAを分岐
先バッファ20へ与える。
【0114】BTB登録/更新決定機構32は、分岐実
行ユニット30から与えられる分岐予測信号Pr、分岐
実行結果指示信号Reおよび分岐確率フラグalway
s−tに従って、分岐先バッファ20の対応のエントリ
への書込を行なうべきか否かを決定し、その決定結果に
従って必要な動作を行なう。このBTB登録/更新決定
機構32が行なう動作およびその構成については後に詳
細に説明するが、このBTB登録/更新決定機構32に
より、以下の動作が行なわれる。
【0115】登録動作:分岐予測信号Prがnot−t
aken予測を示し、分岐実行結果指示信号ReがTa
ken実行を示す場合には、その分岐命令に関連する情
報が分岐先バッファ20の対応のエントリに格納され、
その分岐命令の登録が行なわれる。
【0116】更新動作:分岐予測信号Prがtaken
予測を示し、分岐実行結果指示信号ReがNot−Ta
ken実行を示す場合には、分岐確率フラグalway
s−tの値に従って以下の動作が行なわれる。(i)分
岐確率フラグalways−tがリセットされている
(値が“0”)とき、その分岐命令は分岐先バッファ2
0において無効化され、その登録が抹消される。(ii)
分岐確率フラグalways−tがセットされている
(値が“1”)場合には、分岐先バッファ20への書込
は行なわれず、対応のエントリの内容は維持される。
【0117】上述の構成により、分岐先バッファにおい
て登録されている分岐命令の分岐確率が高い場合には、
その分岐命令が、Not−Taken実行とされても、
依然分岐先バッファ20において登録される。これによ
り、分岐先バッファ20には分岐確率の高い命令が格納
されることになり、分岐予測精度が高くなる。
【0118】図3は図1に示すBTB登録/更新決定機
構の行なう制御動作を一覧にして示す図である。以下、
この図3を参照して図1に示すBTB登録/更新決定機
構の動作について詳細に説明する。
【0119】(I) not−taken予測のとき:
分岐先バッファ20から読出された対応のエントリに含
まれる有効ビットVが“0”の場合、その分岐命令は登
録されていないと見なされ、not−taken予測が
行なわれ、信号Prは“0”の状態に設定される。
【0120】 (a) 分岐実行結果がot−ak
enのとき; この分岐命令による分岐が発生しない場合には、分岐実
行ユニット30(図1参照)から与えられる分岐実行結
果指示信号Reは、Not−Taken実行を示す状態
に設定される。この状態は、not−taken予測/
Not−Taken実行であり、予測はヒットしてい
る。この場合、登録されていない分岐命令による分岐が
発生していないため、この分岐命令の確率フラグalw
ays−tの値にかかわらず、分岐先バッファ書込イネ
ーブル信号BTB−weは“0”に設定され、分岐先バ
ッファ20への書込は行なわれない。
【0121】(b) Taken実行のとき;分岐実行
結果指示信号Reが、Taken実行を示すとき、これ
はnot−taken予測/Taken実行であり、予
測ミスである。この場合、未登録分岐命令による分岐が
発生しているため、分岐確率フラグalways−tの
値にかかわらず分岐先バッファ20への書込が行なわれ
る。すなわち、分岐先バッファ書込イネーブル信号BT
B−weが“1”のデータ書込モードを示す状態に設定
され、かつ有効フラグVが“1”に設定され、その分岐
命令に関連する情報すなわち分岐先アドレスBA、分岐
命令特定情報(命令番号;プラグカウンタからの命令フ
ェッチアドレスの所定のビット)とともに対応のエント
リへ書込まれ、この分岐命令の登録が行なわれる。
【0122】(II) taken予測のとき:分岐先
バッファから読出されたエントリに含まれる有効ビット
Vが“1”のときには、分岐命令が登録されており、t
aken予測が行なわれる。
【0123】(a) Not−Taken実行のとき;
分岐命令の実行結果により分岐が発生しない場合、分岐
実行結果指示信号Reは、Not−Taken実行を示
す状態に設定される。この場合は、taken予測/N
ot−Taken実行であり、予測ミスである。このと
きには、分岐確率フラグalways−tの値に従って
分岐先バッファへの書込または分岐先バッファの対応の
エントリの内容の維持が行なわれる。
【0124】(a1) 分岐確率フラグalways−
tが“0”のとき;この状態は、分岐命令による分岐発
生確率が小さいことを示している。この場合には、分岐
先バッファ書込イネーブル信号BTB−weが“1”と
され、かつ有効ビットVが“0”とされて分岐先バッフ
ァ20の対応のエントリへの書込が行なわれる。有効ビ
ットVが“0”に設定されて、その内容が無効とされ、
対応の分岐命令はその登録からはずされる。
【0125】(a2) 分岐確率フラグalways−
tが“1”のとき;この場合には、分岐命令による分岐
の発生する確率は高いため、対応の分岐先バッファの対
応のエントリの更新は行なわれない。分岐先バッファ書
込イネーブル信号BTB−weは“0”の状態に設定さ
れ、分岐先バッファ20に対する書込動作は行なわれな
い。
【0126】(b) Taken実行のとき;分岐命令
により分岐が発生した場合、分岐実行結果指示信号Re
は、Taken実行を示す状態に設定される。この状態
は、taken予測/Taken実行であり、予測はヒ
ットしている。登録された分岐命令による分岐が発生し
ており、分岐先バッファ書込イネーブル信号BTB−w
eは“0”の状態に設定され、分岐先バッファへのデー
タ書込動作は行なわれず、この分岐命令の登録が維持さ
れる。分岐確率の高い分岐命令は、その分岐確率フラグ
always−tをセットすることにより、一旦分岐先
バッファ20に登録されたならば、たとえNot−Ta
ken実行状態となっても、分岐先バッファ20におけ
る登録が無効化されることはない。したがって、ループ
型処理に用いられる分岐命令などは、そのループ脱出の
際にNot−Taken実行状態に入っても、分岐先バ
ッファ20において無効化されず、その登録が維持され
る。したがって再度このループが実行されたときには、
その分岐命令に対しtaken予測を行なうことがで
き、複数ビット履歴情報を有する分岐先バッファと同様
の精度で分岐予測を行なうことができ、分岐予測のヒッ
ト率もそれと同様の値を期待することができる。しか
も、用いられる履歴情報は1ビットであり、1ビット履
歴方式と同様、分岐先バッファへの書込動作は、分岐予
測が外れた場合にのみ必要とされるだけである。したが
って、ほとんどのサイクルにおいて、分岐先バッファ
は、読出/書込のいずれかの動作を行なうだけであり、
高速動作性は分岐先バッファには要求されず、応じて分
岐先バッファの構築が容易となる。
【0127】図4は、図1に示すBTB登録/更新決定
機構32の構成を概略的に示すブロック図である。図4
においては、分岐実行ユニット30は、オペランドデー
タとオペコードを用いて分岐の発生の有無を検出する分
岐検出部30aを含むように示される。この分岐検出部
30aは、分岐命令が条件付分岐命令の場合に分岐の発
生の有無を検出する。分岐命令が無条件分岐の場合に
は、命令デコーダにより、分岐の発生を示す信号が生成
されるように構成されてもよい。両者を含む場合には、
命令デコーダからの無条件分岐命令による分岐発生を示
す信号とこの分岐検出部30aからの分岐実行結果信号
Reの信号の論理和を取る構成が利用されればよい。
【0128】BTB登録/更新決定機構32は、分岐実
行ユニット30からの分岐実行結果指示信号Reと分岐
予測信号Prとに従って予測ヒット/ミスの判別および
図3に示す4つの予測ヒット/ミス状態のうちのいずれ
であるかを識別する予測判定部32aと、予測判定部3
2aの出力信号と分岐確率フラグalways−tとに
従って次に行なうべき動作を決定する動作識別部32b
と、動作識別部32bの出力信号に従って分岐先バッフ
ァ20へのデータ書込動作を制御する書込制御部32c
を含む。書込制御部32cから分岐先バッファ書込イネ
ーブル信号BTB−weおよび有効ビットVが出力され
る。
【0129】なお、図4においては、分岐予測信号Pr
および分岐確率フラグalways−tは分岐実行ユニ
ット30の外部から与えられるように示されている。こ
れは、分岐予測信号Prは図1に示す比較器22から直
接与えられる構成が利用され、また分岐確率フラグal
ways−tは、命令デコーダにより抽出されて直接こ
のBTB登録/更新決定機構32へ直接与えられる構成
を示しているためである。これらの分岐予測信号Prお
よび分岐確率フラグalways−tがともに図1に示
すように分岐実行ユニット30から与えられてもよい。
【0130】予測判定部32aは、信号ReおよびPr
に従って、予測ミスの状態を検出しかつその予測ミスが
taken予測/Taken実行およびtaken予測
/Not−Taken実行のいずれであるかを判別し、
その判別結果を示す信号を動作識別部32bへ与える。
動作識別部32bは、予測判定部32aの出力信号がn
ot−taken予測/Taken実行を示す場合に
は、分岐確率フラグalways−tの値にかかわらず
書込制御部32cへ分岐命令登録を指示する信号を与え
る。
【0131】動作識別部32bは、予測判定部32aの
出力信号がtaken予測/Not−Taken実行の
場合を示しているときには、分岐確率フラグalway
s−tの値に従って次に行なわれるべき動作を示す信号
を書込制御部32cへ与える。すなわち動作識別部32
bは、この場合には、分岐確率フラグalways−t
が“0”のときに書込制御部32cへ対応のエントリの
内容を無効化するための制御信号を与える。動作識別部
32bは、分岐確率フラグalways−tの値が
“1”のときには書込制御部32cへ書込禁止信号を与
える。したがって、書込制御部32cが分岐先バッファ
への書込動作を行なうのは、not−taken予測/
Taken実行のときの登録動作時とtaken予測/
Not−Taken実行でありかつフラグalways
−t=“0”のときの更新動作時のみである。書込制御
部32cは、登録動作時には有効ビットVを“1”に設
定し、更新動作時には有効ビットVを“0”に設定す
る。
【0132】なお上述の分岐命令の分岐先バッファへの
登録方法に従えば、分岐確率フラグalways−tが
“1”に設定された分岐命令は、分岐先バッファに一旦
登録されると基本的にはその登録状態が維持される。し
かしながら、以下に説明する2つの場合においては、分
岐先バッファに登録された分岐確率フラグalways
−tが“1”に設定された分岐命令の無効化が行なわれ
る。これにより、登録すべき分岐命令の無登録が防止さ
れる。
【0133】(1) 図5は、分岐確率の高い分岐命令
の重書きを行なうための構成を示す図である。図5にお
いてBTB登録/更新決定機構32は、分岐先バッファ
20から読出された対応のエントリに含まれる分岐命令
特定情報PCAとプログラムカウンタ20からの命令フ
ェッチアドレスとの不一致を検出する不一致検出器35
と、分岐実行ユニット30からの分岐実行結果指示信号
Reと、分岐実行ユニット30から与えられる新たな分
岐命令にされた分岐確率フラグalways−tを受け
て分岐先バッファへの登録を行なうためのゲート回路3
6を含む。ゲート回路36は、不一致検出器35の出力
信号が不一致を示し(“1”)、分岐実行結果指示信号
Reが分岐発生を示し(“1”)、かつ新たに与えられ
た分岐命令の分岐確率フラグalways−tが分岐確
率の高いことを示すとき(“1”)、分岐先バッファ書
込イネーブル信号BTB−weを活性状態としかつ有効
フラグVをセット(“1”)する。これにより、未登録
の分岐確率の高い分岐命令により分岐発生が生じたとき
には、この新たな分岐命令により分岐先バッファ20の
対応のエントリの内容が書替えられる。
【0134】なお、図5に示す構成においては、分岐命
令特定情報としてプログラムカウンタ26が出力する命
令フェッチアドレスPCAそのものをすべて用いてい
る。しかしながら、プログラムカウンタ26の出力する
命令フェッチアドレスのうち、分岐先バッファ20のア
ドレス指定を行なうアドレス信号を除くアドレスが分岐
命令特定情報として利用されてもよい。
【0135】(2) 分岐先バッファが命令キャッシュ
とアドレスタグを共有している場合、すなわち同じエン
トリの数(セット数)を有する場合、命令キャッシュメ
モリにおいてキャッシュミスが生じ、命令キャッシュメ
モリにおけるキャッシュブロックの置換が行なわれると
き、この置換が行なわれるべき命令群に含まれる分岐命
令は分岐先バッファにおいて無効状態に設定される。
【0136】すなわち、図6に示すように、命令キャッ
シュメモリにおいては、高速でアクセスするために、メ
インメモリに含まれる命令/データのうち必要な(アク
セスが要求される使用頻度の高い)命令/データが格納
される。この場合、命令キャッシュメモリにおいては、
メインメモリにおけるアドレス領域のうち、アドレスタ
グTAにより指定される領域40に従ってメモリ領域が
分割される。命令キャッシュメモリに格納されるのは、
このアドレスタグTAを先頭アドレスとしてアドレスセ
ットSAで指定されるデータの塊すなわちキャッシュブ
ロック42である。このキャッシュブロック42からセ
レクトワードSWに従って対応の命令が読出される。こ
のセレクトワードSWは、命令キャッシュメモリがセッ
トアソシアティブ方式で命令を格納する場合には、ウェ
イアドレスをも含む。
【0137】図7は、命令メモリにおけるキャッシュミ
ス/ヒットに応じて分岐先バッファ20の内容の無効化
を行なうための構成を示す図である。プログラムカウン
タ26から出力される命令フェッチアドレスPCAは、
アドレスタグTAとアドレスセットSAとセレクトワー
ドSWを含む。アドレスセットSAは、ディレクトリ5
2に与えられ、アドレスセットSAおよびセレクトワー
ドSWが命令メモリ50へ与えられる。命令メモリ50
においては、このアドレスセットSAとセレクトワード
SWに従って対応の命令の読出しが行なわれる。ディレ
クトリ52では、アドレスセットSAで指定される領域
に、命令メモリ50に格納されたアドレスセットSAを
含むアドレスタグTAが格納される。したがって、ディ
レクトリ52からは命令メモリ50に含まれる現在アド
レス指定されるキャッシュブロックのアドレスタグTA
が読出される。
【0138】このディレクトリ52の出力とプログラム
カウンタ26からのアドレスタグTAはタグ比較器54
へ与えられ、そこで一致/不一致が判別される。タグ比
較器54が一致を示す場合には、キャッシュヒットであ
り、命令メモリ50に必要とされる命令が格納されてい
ることを示しており、この命令メモリ50から読出され
た命令が命令デコーダへ与えられる。タグ比較器54の
出力信号CHが不一致を示す場合にはキャッシュミスで
あり、命令メモリ50には必要とされる命令が格納され
ていないため、メインメモリから対応の命令群が読出さ
れて命令メモリ50へ格納される。
【0139】このとき、命令メモリ50においていずれ
の命令群を置換するかはLRU論理56から出力される
アドレス信号SA′により決定される。このLRU論理
56は、最も古くアクセスされたキャッシュブロックの
アドレスを格納しており、キャッシュミス発生時にはそ
の最も古くアクセスされたキャッシュブロックのアドレ
スを出力して命令メモリ50へ与える。このLRU論理
56からのアドレスSA′に従って命令メモリ50にお
けるキャッシュブロックの書替が行われる。分岐先バッ
ファ20へは、またプログラムカウンタ26から命令フ
ェッチアドレスPCAの一部のアドレス信号AWが与え
られて対応のエントリの内容の読出が行なわれる。BT
Bコントローラ58は、タグ比較器54からのキャッシ
ュミスを示す信号CHに従って分岐先バッファ書込イネ
ーブル信号BTB−weを活性状態とするとともに有効
フラグVを無効状態の“0”に設定する。分岐先バッフ
ァ20は、このLRU論理56から出力されるアドレス
信号SA′に従って順次対応のエントリの内容の無効化
を行なう。このとき、命令メモリ50と分岐先バッファ
20のエントリおよびセットの数が同じであれば、アド
レスセットSA(SA′)で示される領域の分岐命令の
無効化が行なわれる。分岐先バッファ20の記憶容量が
命令メモリ50のそれよりも小さい場合、アドレス信号
AWがアドレスセットSAを含む場合には、同様、その
アドレスセットSAに従って分岐先バッファ20の対応
のエントリの無効化が行なわれる。
【0140】BTBコントローラ58は、図1に示すB
TB登録/更新決定機構32に含まれる。これにより、
使用されない分岐命令が分岐先バッファ20に格納さ
れ、誤った分岐予測が行なわれるのを防止することがで
きる。また、新たに分岐命令が与えられたとき、その分
岐実行結果およびその分岐確率フラグの値に従って分岐
先バッファ20の対応のエントリへ書込むことができ、
分岐先バッファの資源の競合を防止することができ、効
率的に分岐命令を格納することができ、分岐予測精度の
低下が防止される。
【0141】以上のように、この第1の実施例の構成に
従えば、有効ビットの値に従って分岐予測を行なってい
るため、1ビットの履歴方式に従う分岐予測と同様、1
サイクルにおいて読出および書込を同時に行なう可能性
が極めて少なく、分岐予測妨害およびサイクルペナルテ
ィが大幅に低減され、また分岐命令に付された分岐確率
フラグに従って分岐先バッファへの分岐命令の登録およ
び分岐先バッファの変更を行なうように構成しているた
め、複数ビット履歴方式とほぼ同じ程度の分岐予測ヒッ
ト率を得ることができる。
【0142】[実施例2]図8は、分岐命令の構造の一
例を示す図である。図8において分岐命令は、命令コー
ドおよび処理されるべきオペランドデータを含む操作コ
ード部OPと、分岐発生時に実行される命令のアドレス
を示す分岐先アドレスDAを含む。この分岐先アドレス
DAは、この分岐命令のアドレスを基準として相対アド
レスを示す即値(Im)で表現される。
【0143】すなわち、図9に示すように、命令メモリ
における分岐先命令のアドレスは、分岐命令のアドレス
PCAとこの分岐命令に含まれる即値Imの和で与えら
れる。図1に示すように分岐発生時にカウント設定回路
により選択された分岐先アドレスBAが、プログラムカ
ウンタ26のそのときのカウント値に加算されることに
より実現される。
【0144】分岐命令は、ループ制御のような後方分岐
を行なう場合、その分岐確率は、平均約90%程度であ
り、一方、前方分岐を行なう分岐命令による分岐確率は
平均で約50%程度である(「コンピュータ・アーキテ
クチャ:クォンティタティブ・アプローチ)」、D.
A.パターソン等、モルガン・カフマン出版社、199
0年発行、第108頁参照)。すなわち、後方分岐命令
は、その分岐確率フラグalways−tは“1”に設
定されると予測される。一方、前方分岐の分岐命令の多
くはその分岐方向に偏りがあまりないと考えられる。し
たがって、分岐確率フラグalways−tを“1”と
すべき分岐命令の多くは、後方分岐命令により占められ
ると考えられる。後方分岐を行なう分岐命令の場合、そ
の命令コードに含まれる即値Imが負であり、この即値
Imの符号を識別することにより、分岐確率をほぼ予測
することができる。
【0145】図10は、この発明の第2の実施例である
命令処理装置の要部の構成を示す図である。図10にお
いては、図1および4に示すBTB登録/更新決定機構
の部分の構成を示す。他の構成は図1に示す構成を利用
することができる。図10においてBTB登録/更新決
定機構32は、与えられた分岐命令に含まれる即値Im
の符号を判別する符号判別器60と、符号判別器60の
出力信号φALWTと分岐実行結果指示信号Reと分岐
予測信号Prに従ってBTBに対して行なうべき動作を
決定し、その決定された動作を実行する登録・更新実行
部62を含む。符号判別器60は、たとえば即値の最上
位ビットの符号ビットの値により即値Imの正/負の符
号を示す信号φALWTを出力する。この符号判別器6
0からの出力信号φALWTは、即値Imが正を示すと
きには“1”に設定され、即値Imが負の場合には、信
号φALWTは“0”に設定される。すなわち、この信
号φALWTは、第1の実施例における分岐確率フラグ
always−tと同じものとして取扱うことができ
る。登録・更新実行部62は、この信号φALWTをフ
ラグalways−tとして用いて図3に示す論理に従
って有効ビットVおよびBTB書込イネーブル信号BT
B−weの状態を決定して出力する。登録・更新実行部
62の行なう動作は、したがって、第1の実施例におけ
るBTB登録/更新決定機構32のそれと同じである。
【0146】この第2の実施例に従えば、分岐命令の命
令コードのフィールドの構成を変更する必要がなく、既
存のオブジェクト・コードを用いて容易に分岐確率の高
い分岐命令を優先的に分岐先バッファへ格納することが
できるとともに、分岐予測は有効ビットVに従って行な
われるため、1ビット履歴方式による分岐予測方法と同
様、容易に分岐先バッファを構築することができ、また
複数ビット履歴方式の分岐予測と同程度の分岐予測ヒッ
ト率を得ることができる。
【0147】[実施例3]図11は、この発明の第3の
実施例において用いられる分岐命令の構造を概略的に示
す図である。図11において、分岐命令コード10は、
通常の分岐命令コードを格納する命令コードフィールド
10aと、この分岐命令の発生確率の高低を示す分岐確
率フラグalways−nを格納する分岐確率指示フィ
ールド10cを含む。この分岐確率フラグalways
−nは、関連の分岐命令による分岐の発生の確率が低い
場合には、“1”にセットされ、そうでない場合には
“0”にセットされる。このような分岐確率の低い命令
としては、前述のように、“NOP”として用いられる
分岐命令、およびレジスタへのロードを行なうために用
いられる分岐命令などがあり、このような例は、前述の
リー等の文献において例示されている。この分岐確率フ
ラグalways−nは、コンパイラにより、命令コー
ドのコンパイル時にセット/リセットされる。
【0148】分岐先バッファは、図1に示すものと同じ
構成を備え、そこに格納される有効ビットVの“1”お
よび“0”によりその分岐予測が行なわれる。すなわ
ち、対応のエントリに格納された有効ビットVが“1”
のときは、taken予測が行なわれ、有効ビットVが
“0”のときには、not−taken予測が行なわれ
る。すなわち、登録分岐命令に対してはtaken予測
が行なわれ、未登録分岐命令に対してはnot−tak
en予測が行なわれる。この分岐予測動作は第1の実施
例のものと同じである。したがって、以下に、分岐先バ
ッファへの書込動作について説明する。
【0149】図12は、この発明の第3の実施例におけ
る分岐先バッファへの書込動作を一覧にして示す図であ
る。以下、図12を参照してこの発明の第3の実施例に
おける分岐先バッファへの書込動作について説明する。
【0150】(I) not−taken予測のとき: (a) Not−Taken実行のとき;この状態は、
予測ヒットであるが、分岐命令実行結果は、Not−T
aken実行であり、この分岐命令の分岐先バッファへ
の登録は行なわれず、したがって分岐先バッファ書込イ
ネーブル信号BTB−weは“0”に維持される。
【0151】(b) Taken実行のとき;予測ミス
であるが、この場合には分岐確率フラグalways−
nが参照されて、その値に従って書込動作が行なわれ
る。
【0152】(b1) always−nが“1”のと
き;この状態においては、分岐命令は、分岐発生の確率
が低い分岐命令であり、分岐先バッファへの登録は行な
われない。したがってこのときには、分岐先バッファ書
込イネーブル信号BTB−weは“0”の状態に維持さ
れる。
【0153】(b2) always−nが“0”のと
き;この場合には、分岐確率の低くない未登録分岐命令
により分岐が発生しているため、分岐先バッファ書込イ
ネーブル信号BTB−weが“1”に設定され、かつ有
効ビットVが“1”に設定され、この分岐命令に関連す
る情報とともに分岐先バッファの対応のエントリに格納
され、この分岐命令の登録が行なわれる。
【0154】(II) taken予測のとき: (a) Not−Taken実行のとき;1ビット履歴
方式に従って、Not−Taken実行の分岐命令はそ
の分岐確率フラグalways−nの値にかかわらず無
効化される。すなわち、分岐先バッファ書込イネーブル
信号BTB−weが“1”に設定され、有効ビットVが
“0”に設定されて分岐先バッファへの書込(更新)が
行なわれる。
【0155】(b) Taken実行のとき;分岐確率
フラグalways−nを参照し、その値に従って次に
行なわれる動作が決定される。
【0156】(b1) always−nが“1”のと
き;この状態は、分岐命令による分岐確率は低いため、
次の実行時において分岐が発生する可能性は極めて低く
なるため、分岐先バッファからこの分岐命令は除外され
る。すなわち、分岐先バッファ書込イネーブル信号BT
B−weが“1”に設定されかつ有効ビットVが“0”
に設定されて対応のエントリの内容の無効化が行なわれ
る。
【0157】(b2) always−nが“0”のと
き;この状態においては、分岐先バッファ書込イネーブ
ル信号BTB−weは“0”の状態に維持され、分岐先
バッファへの書込動作は行なわれず、対応のエントリの
内容は維持される。
【0158】図13は、図12に示す論理を実行するた
めの構成を示す図である。図13において、BTB登録
/更新決定機構64は分岐実行ユニット(図1参照)か
ら与えられる分岐確率フラグalways−n、分岐実
行結果指示信号Reおよび分岐予測信号Prの状態に従
って、分岐先バッファ書込イネーブル信号BTB−we
および有効ビットVを所定の状態に設定する。このBT
B登録/更新決定機構64が、図1に示す命令処理装置
において、BTB登録/更新決定機構32に置き換えて
利用される。
【0159】上述のように、分岐確率の低い分岐命令
は、できるだけ分岐先バッファへの登録を行わないよう
に構成することにより、taken予測/Not−Ta
ken実行の予測ミスが生じる可能性が少なくなり、分
岐予測ヒット率が改善される。また、このような分岐確
率の低い分岐命令の登録をできるだけ行なわないように
構成することにより、対応のエントリに格納されていた
分岐確率の高い分岐命令が無効化される可能性が低くな
り、not−taken予測/Taken実行が生じる
可能性が小さくされ、また分岐予測ヒット率が改善され
る。
【0160】[実施例4]図14は、この発明の第4の
実施例において用いられる分岐先バッファのエントリの
構成を示す図である。図14において、分岐先バッファ
20の記憶領域20aは、複数のエントリ3を含む。エ
ントリ3は、有効ビットVを格納するフィールドと、分
岐命令を特定する情報(PA)を格納するフィールド3
bと、分岐先情報(BA)を格納するフィールド3d
と、このこの分岐命令の分岐の発生の期待値を格納する
フィールド3eを含む。このフィールド3eに格納され
る分岐期待値は、コンパイラにより分岐命令に付加され
る構成が利用されてもよく、また分岐命令の即値に従っ
てハードウェアにより分岐期待値が決定されて対応のエ
ントリに格納される構成が利用されてもよい。これら
は、先の実施例において説明したフラグalways−
t、always−nおよび信号φALWTが、それぞ
れ分岐先バッファへ書込む構成が利用されてもよい。こ
のときまた分岐期待値は、“0”および“1”の2値の
いずれかを取るのではなく、より多くの値のうちのいず
れかを取る多値の分岐期待値であってもよい。ハードウ
ェアにより多値の分岐期待値を発生して分岐先バッファ
対応のエントリに書込む構成については後に説明する。
【0161】図15は、この発明の第4の実施例におけ
る分岐先バッファの書込動作を示すフロー図である。以
下図14および図15を参照してこの発明の第4の実施
例における分岐先バッファの書込動作について説明す
る。
【0162】命令カウントから命令フェッチアドレスが
出力されると、この命令フェッチアドレスに従って命令
メモリから命令が読出され、分岐命令が実行される(ス
テップ(S12)。この分岐命令の実行動作と平行し
て、命令フェッチアドレスに従って分岐先バッファの対
応のエントリに含まれる有効ビットVが読出され、その
有効ビットVの値に従って分岐予測が行なわれる(ステ
ップS14) 分岐命令の実行の結果、その分岐命令による分岐が発生
するか否かの識別が行なわれる(ステップS16)。実
行結果が、Taken実行でない場合、すなわちNot
−Taken実行であり、分岐が発生しない場合には、
分岐先バッファのエントリの内容の変更は行なわれな
い。一方、Taken実行の場合には、この与えられた
分岐命令が分岐先バッファに登録されているか否かの判
別が行なわれる(ステップS18)。この判別動作につ
いては後に説明するが、有効ビットVまたは分岐命令特
定情報(PA)が利用される。与えられた命令が登録さ
れている場合には、分岐先バッファの内容の変更は行な
われない。
【0163】一方、ステップS18において、与えられ
た分岐命令が未登録であると判定された場合、次いで分
岐予測結果に従って分岐先バッファに空きエントリがあ
るか否かの判別が行なわれる(ステップS20)。この
空きエントリの有無の判別においては、分岐予測が、n
ot−takenを示しているときには、有効ビットV
が“0”であり、対応のエントリに登録分岐命令が存在
しないことを示しており、空きエントリがあると判別さ
れる。空きエントリが存在する場合には、この空きエン
トリへ分岐命令に関連する情報がその分岐期待値ととも
に書込まれる(ステップS22)。
【0164】空きエントリが存在しない場合、対象エン
トリのフィールド3eに含まれる分岐期待値が、この実
行された分岐命令の分岐期待値よりも小さいか否かの判
別が行なわれる(ステップS24)。対象エントリの分
岐期待値が実行された分岐命令の分岐期待値よりも大き
い場合には、分岐先バッファへの書込は行なわれない。
一方、実行された分岐命令の分岐期待値が対象エントリ
のフィールド3eに含まれる分岐期待値以上の場合に
は、その対象エントリへの実行された分岐命令に関連す
る情報の書込が行なわれ、実行された分岐命令の登録が
行なわれる(ステップS26)。
【0165】上述の処理動作により、分岐確率の高い登
録分岐命令が、分岐確率の低い分岐命令で書替えられる
のが防止され、分岐予測のヒット率の低下が防止され
る。次に具体的構成について説明する。
【0166】(I) 分岐先バッファがダイレクトマッ
プの場合:分岐先バッファ20における分岐命令の格納
するアドレス領域がダイレクトマッピングで指定される
場合、分岐先バッファ20のアドレス指定には、プログ
ラムカウンタから出力される命令フェッチアドレスのう
ちワードアドレスWAが用いられる。このワードアドレ
スWAは、セットアドレスSAとそのセット内における
対応のワードのアドレスSWを含む。アドレスタグTA
が、対応のエントリ3内の分岐命令特定情報として図1
4に示すフィールド3b内に格納される。なお、ここで
は命令メモリのセット数と分岐先アドレスのエントリ数
が等しいことを想定している。分岐先バッファ20のエ
ントリ数が、命令メモリのセット数よりも少ない場合に
は、この図16に示すワードアドレスWAの所定数の下
位ビットによりアドレス指定する構成が利用されればよ
く、この場合、図14に示すフィールド3b内に含まれ
る分岐命令特定情報はアドレスタグTAとこのワードア
ドレスWAの上位ビットを含む。また単に、プログラム
カウンタから出力される命令フェッチアドレスのうちセ
ットアドレスのみが分岐先バッファのエントリのアドレ
ス指定のために利用される構成が用いられてもよい。
【0167】ダイレクトマップの場合、実行された分岐
命令が書込まれるべきエントリすなわち登録対象エント
リの数は1つである。この場合、登録対象エントリ3が
空の場合には、実行された分岐命令に関連する情報が登
録対象エントリ3に書込まれ、その分岐命令の登録が行
なわれる。このダイレクトマップの場合、単に有効ビッ
トVの値に従って、登録/未登録および空きエントリの
有無の判別が行なわれる。
【0168】登録対象エントリが空きエントリでない場
合、すなわち有効ビットVが“1”の場合、実行された
分岐命令に含まれる分岐期待値と登録対象エントリ3に
格納された分岐期待値の比較を行なう。登録対象エント
リ3に格納された分岐期待値が、実行された分岐命令の
分岐期待値よりも大きい場合、この実行された分岐命令
の登録は行なわれない。
【0169】一方、登録対象エントリに格納された分岐
期待値が、実行された分岐命令の分岐期待値以下の場合
には、この実行された分岐命令の登録が行なわれる。
【0170】図17は、ダイレクトマップ方式の分岐先
バッファに対する登録/更新の分岐先バッファの登録を
行なうための構成を示す図である。図17において、分
岐登録制御部70は、分岐先バッファ20の対応のエン
トリから読出された有効ビットVを格納するラッチ71
と、対応のエントリから読出された分岐期待値BEXP
を格納するラッチ72と、ラッチ71に格納された有効
ビットVの値にしたがって実行された分岐命令が分岐先
バッファ20に登録されているか否かを判別する登録判
別部73と、分岐実行ユニット80からの分岐実行結果
指示信号Reと登録判別部73の出力する登録指示信号
RGに従って分岐先バッファに対する書込を行なうか否
かを判別する書込判別部74と、登録判別部73からの
登録指示信号RGと分岐実行ユニット80からの分岐実
行結果指示信号Reに従って活性信号を発生する活性回
路75と、この活性回路75の出力信号に応答して活性
化され、ラッチ72に格納された分岐期待値BEXPと
分岐実行ユニット80から与えられた分岐期待値BEX
Pの大小を比較する比較器76と、書込判別部74の出
力信号と比較器76の出力信号に従って分岐先バッファ
書込イネーブル信号BTB−weおよび有効ビットVの
状態を設定する書込制御部77を含む。
【0171】分岐実行ユニット80は、分岐命令情報を
受けてその分岐命令を実行し、分岐命令実行結果指示信
号Reを出力するとともに、その実行した分岐命令に関
連する情報およびその分岐期待値BEXPを出力する。
【0172】登録判別部73は、ラッチ71に格納され
た有効ビットVが“1”のときには、実行中の分岐命令
が分岐先バッファに登録されていると判別し、登録判別
信号RGを“1”に設定する。書込判別部74は、分岐
実行ユニット80からの分岐実行結果指示信号ReがT
aken実行を示しかつ登録判別部73からの登録指示
信号RGが未登録を示すとき、書込制御部77へ対応の
実行された分岐命令を書込むことを指示する信号を与え
る。
【0173】活性回路75は、分岐実行ユニット80か
らの実行結果指示信号ReがTaken実行を示し、か
つ登録判別部73の出力する登録指示信号RGが登録を
示すときに活性状態の信号を出力する。比較器76は、
この活性回路75からの活性状態の信号に応答して活性
化され、ラッチ72の分岐期待値BEXPと分岐実行ユ
ニット80からの分岐期待値BEXPの大小を比較し、
分岐実行ユニット80からの分岐期待値80がラッチ7
2からの分岐期待値以上のときに書込制御部77へ実行
された分岐命令を書込むことを示す信号を出力する。
【0174】書込制御部77は、この書込判別部74お
よび比較器76のいずれか一方が書込を指示する場合
に、分岐先バッファ書込イネーブル信号BTB−weを
活性状態としかつ有効ビットVを“1”に設定して分岐
先バッファ20へ与える。これにより、分岐期待値の大
きな分岐命令が分岐先バッファに登録され、分岐期待値
の小さな分岐命令により分岐期待値の大きな分岐命令が
書替えられることが防止される。
【0175】なお、図17に示す構成においては、No
t−Taken実行のときの分岐先バッファへの書込を
制御する構成は示していない。これは、分岐先バッファ
のエントリのフィールドの構成に従って、複数ビットの
履歴情報が利用される場合は、その複数ビットの履歴情
報の値に従って登録の維持/無効が行なわれ、また1ビ
ット履歴方式のように有効ビットVのみが利用される場
合には、単に対応のエントリの有効ビトVの無効化が行
なわれるか、またはその分岐命令の分岐期待値の大きさ
に従って選択的に有効ビットVの無効化が行なわれ、こ
のような構成のいずれが適用されてもよいためである
(このような構成については後に説明する)。
【0176】(II) 分岐先バッファがセットアソシ
アティブの構成を備える場合:今、図18に示すように
分岐先バッファ20が、4つのウェイを備える4ウェイ
セット・アソシアティブ方式の構成を備える場合につい
て説明する。このウェイの数は任意である。この4ウェ
イセット・アソシアティブ方式の場合、プログラムカウ
ンタから出力される命令フェッチアドレスのうち、所定
数のアドレスビットがアドレスタグTAとして用いら
れ、別の所定数のアドレスビットがアドレスセットSA
として用いられる。アドレスセットSAにより分岐先バ
ッファ20の対応のエントリの内容が読出される。分岐
先バッファ20は、4ウェイセット・アソシアティブ方
式であり、このセットアドレスSAに従って4つのエン
トリ3−1〜3−4に格納された内容EN1〜EN4が
同時に選択される。アドレスセットSAは、またディレ
クトリ85へ与えられる。ディレクトリ85は、そのセ
ットアドレスSAが示す領域においてウェイ♯1〜♯4
それぞれに対して格納された分岐命令のアドレスタグT
Aを格納し、セットアドレスSAに従って各ウェイ♯1
〜♯4それぞれに対応するアドレスタグを出力する。比
較器86は、このディレクトリ85から出力された4つ
のアドレスタグとプログラムカウントから与えられた所
定のアドレスビットで構成されるアドレスタグTAとを
比較し(4ウェイ同時に)、その比較結果に従ってウェ
イアドレスWAYおよびヒット/ミス指示信号H/Mを
出力する。ウェイセレクタ87は、このウェイアドレス
WAYに従って、4つのエントリの内容EN1〜EN4
から1つのウェイの内容を選択して出力する。このと
き、比較器86の出力信号H/Mがミスを示している場
合、実行される分岐命令は分岐先バッファ20に登録さ
れていないことを示しており、したがってこの場合no
t−taken予測が行なわれる。すなわちこのヒット
/ミス指示信号H/Mはまた、分岐命令の登録/未登録
を示す仕事して利用され、分岐予測に用いられる。比較
86の出力信号H/Mがヒットを示すとき、ウェイセレ
クタ87により選択されたエントリの内容ENiに従っ
て分岐予測が行なわれる。このような4ウェイセット・
アソシアティブ方式の場合、Taken実行された未登
録分岐命令が登録されるべきエントリの位置は4つ存在
する(ウェイ♯1〜ウェイ♯4のいずれか)。この場
合、以下の手順で未登録分岐命令の登録が行なわれる。
【0177】空きエントリが存在する場合、その空きエ
ントリに対して未登録分岐命令の登録が行なわれる(書
込が行なわれる)。空きエントリの有無は、図18に示
すエントリ3−1〜3−4から読出された内容EN1〜
EN4それぞれに含まれる有効ビットの値を見ることに
より検出される。与えられた分岐命令が未登録であるか
否かは、比較器86から出力される信号H/Mがミスを
示していることにより識別されるか、または分岐命令情
報の比較により識別される。
【0178】空きエントリが全く存在しない場合には、
まず、分岐期待値が最も小さい分岐命令が格納されたエ
ントリが検出される。次いで、この検出された最小の分
岐期待値が、未登録分岐命令の分岐期待値と比較され
る。未登録分岐命令の分岐期待値が、検出された最小の
分岐期待値以上のときに、この最小の分岐期待値の分岐
命令に変えて未登録分岐命令が登録される。検出された
最小の分岐期待値が未登録分岐命令の分岐期待値よりも
大きい場合には、この未登録分岐命令の登録は行なわれ
ない。
【0179】上述の一連の置換動作により、分岐先バッ
ファのエントリの書替えは、新たに与えられた分岐命令
の分岐期待値が、登録分岐命令の分岐期待値以上の場合
に限って行なわれ、書替えが行なわれた後の分岐先バッ
ファのエントリの分岐期待値は、置換前に比べて低くな
ることはない。これにより、エントリ内容の置換による
分岐予測ヒット率の低下を防止することができる。
【0180】図19は、この未登録分岐命令の登録/未
登録を行なうための構成を示す図である。この図19に
示す構成は、図1に示す登録/更新決定機構に対応す
る。
【0181】登録/更新決定機構は、分岐先バッファ2
0から読出されたエントリに含まれる有効ビットと図1
8に示すヒット/ミス信号H/Mとに従って、与えられ
た分岐命令の分岐予測を行ない、その予測結果を示す分
岐予測信号Prを出力する分岐予測器90と、分岐先バ
ッファレジスタから並列に読出された4つのエントリの
それぞれの有効ビットおよび分岐期待値をラッチするラ
ッチ回路91と、分岐命令実行ユニット92から出力さ
れる分岐実行結果指示信号Reと分岐予測信号Prとヒ
ット/ミス指示信号H/Mとに従って、与えられた命令
が登録された分岐命令であるか否かを検出する登録/未
登録検出部93と、登録/未登録検出部93からの未登
録検出信号φRに応答して活性化され、ラッチ回路91
からの4つのエントリの有効ビットV1−V4を受け、
空きエントリが存在するか否かを検出するとともに空き
エントリを示す信号way−eを出力する空きエントリ
検出器94と、登録/未登録検出部93からの未登録検
出信号φRと空きエントリ検出器94の空きエントリ非
検出信号zeとに応答して活性化され、ラッチ回路91
からの4つのエントリそれぞれの分岐期待値から最小の
分岐期待値を有するエントリを検出し、該エントリを示
すウェイ信号way−mを出力する最小値検出器95
と、登録/未登録検出部93からの未登録検出信号φR
に応答して活性化され、最小値検出器95からの最小値
分岐期待値と分岐命令実行ユニット92から出力される
分岐命令の分岐期待値BEXPとを比較し、その比較結
果を示す信号を出力する比較器96と、空きエントリ検
出器94の出力する信号way−e、最小値検出器95
の出力信号way−m、比較器96の出力信号、登録/
未登録検出部93からの出力信号PrおよびRe、およ
び分岐命令実行ユニット92からの分岐期待値およびそ
の他の分岐命令情報を受け、分岐先バッファ20に対す
る書込を行なう書込実行ユニット97を含む。
【0182】分岐予測器90は、分岐先バッファ20の
ウェイセレクタ87により選択されたエントリに含まれ
る有効ビットVが無効状態の“0”を示すかまたはヒッ
ト/ミス信号H/Mがミスを示すときに分岐予測信号P
rをnot−taken予測の状態に設定する。
【0183】登録/未登録検出部93は以下の状態のと
きに未登録検出信号φRを活性状態に設定する。(i)
分岐実行結果指示信号ReがTaken実行を示しかつ
ヒット/ミス指示信号H/Mがミス状態を示すとき:こ
の状態は、実行された分岐命令は、分岐先バッファには
登録されていないことを示しており、その実行された分
岐命令を登録する可能性があることを示す。(ii)分岐
実行結果指示信号ReがTaken実行を示しかつ分岐
予測信号Prがnot−taken予測を示すとき:こ
の場合においては、ヒット/ミス信号H/Mがミスを示
す状態をも含むが、分岐先バッファ20において単に有
効ビットVが無効状態の“0”の状態に設定された分岐
命令が選択されたときにはヒット/ミス信号H/Mがヒ
ット状態を示す場合があり、これに対処するため、その
状態においても未登録検出信号φRを未登録状態を示す
活性状態に設定する。登録/未登録検出部93は、分岐
予測信号Prがtaken予測を示すかまたは分岐実行
結果指示信号ReがNot−Taken実行を示す場合
には、未登録検出信号φRを非活性状態に維持する。
【0184】空きエントリ検出器94は、登録/未登録
検出部93からの未登録検出信号φRが活性状態のとき
に活性化され、ラッチ回路91から与えられる有効ビッ
トV1−V4のうち無効状態を示すウェイを示す信号w
ay−eを出力する。この空きエントリ検出器94の構
成としては、有効ビットV1−V4それぞれをその第1
の入力に受け、未登録検出信号φRをそれぞれの第2の
入力に受け、この未登録検出信号φRが活性状態のとき
にバッファとして動作して対応の有効ビットV1−V4
を出力する構成を利用することができる。信号way−
eは、たとえば、ウェイ♯1〜♯4それぞれに対応して
設けられ、対応のウェイが空きエントリの場合に活性状
態となる4ビットの信号の構成を備える。
【0185】最小値検出器95は、登録/未登録検出部
93からの未登録検出信号φRおよび空きエントリ検出
器94からの空きエントリ非存在検出信号zeがともに
活性状態のときに活性化され、ラッチ回路91から出力
される各ウェイそれぞれの分岐期待値から最小値を選択
し、その最小の分岐期待値を有するウェイを示す信号w
ay−mを出力する。この信号way−mも各ウェイそ
れぞれに対応して設けられる4ビットの信号が一例とし
て利用される。
【0186】比較器96は、未登録検出信号φRに応答
して活性化され、最小値検出器95から出力される最小
分岐期待値BEXPMと分岐命令実行ユニット92から
与えられる分岐期待値BEXPの大小を比較し、その大
小結果に従った信号を出力する。BEXP≧BEXPM
のとき、比較器96は、書替えを示す信号を出力する。
ここで、比較器96へは、空きエントリ検出器94から
の空きエントリ非存在検出信号Zeは与えられていな
い。最小値検出器95は非活性化時信号way−mはい
ずれのウェイをも示さないため、その状態においては比
較器96の出力信号は無視される状態に設定される構成
が利用されるためである。
【0187】書込実行ユニット97は、これらの信号w
ay−e、way−mおよび比較器96の出力信号、さ
らに登録/未登録券支部93を介して与えられる分岐予
測信号Prおよび分岐実行結果指示信号Reに従って分
岐先バッファに対し行なうべき動作を識別し、分岐命令
実行ユニット92から与えられる分岐命令情報と分岐期
待値とを含む分岐命令関連情報の分岐先バッファ20へ
の書込/非書込を行なう。書込実行ユニット97は、信
号way−eが1つのウェイを示す場合には、分岐先バ
ッファ書込イネーブル信号BTB−weを活性状態とし
かつ有効ビットVを有効状態の“1”とし、かつウェイ
信号wayをこの信号way−eに対応するウェイを指
定する状態に設定し、分岐命令関連情報を対応のエント
リへ書込む。書込実行ユニット97は、また、比較器9
6の出力信号が書込を示す場合には最小値検出器95か
らの信号way−mに対応するウェイを示すように信号
wayを設定し、かつ書込イネーブル信号BTB−we
を活性状態としかつ有効ビットVを有効状態を示す
“1”に設定する。
【0188】Not−Taken実行の場合には、書込
実行ユニット97は、分岐先バッファ20へのこの分岐
命令の登録を行なわない。このとき、先の実施例1ない
し3の構成が適用されてもよく、また後に説明する実施
例の構成が適用されてもよい。本実施例においては、T
aken実行された未登録分岐命令の分岐先バッファ2
0への登録動作のみを対象とする。
【0189】書込実行ユニット97は、未登録分岐命令
の登録を行なった場合には、また図18に示すディレク
トリ85に対し対応のウェイにおいて、この分岐命令
(未登録命令)のタグを格納する。
【0190】以上のように、この発明のだい4の実施例
に従えば、未登録分岐命令の分岐期待値と登録対象とな
るエントリに格納された分岐期待値との大小関係に応じ
て、未登録分岐命令の登録を行なうように構成している
ため、分岐バッファのエントリの内容の置換による分岐
期待値の低下を防止することができ、応じて分岐予測ヒ
ット率の低下を防止することができる。
【0191】[実施例5]図20は、この発明の第5の
実施例の分岐期待値の構成を説明するための図である。
複数ビット履歴方式の場合、その複数ビット履歴情報に
従って分岐予測が行なわれる(従来の場合)。図20に
示すように、2ビット履歴情報を用いる場合、4つの状
態A、B、CおよびDを設定することができる。これら
の状態A〜Dそれぞれに対し、分岐期待値BEXPを割
り当てる。一例として、状態Aを分岐期待値(1,1)
に、状態Bを分岐期待値(1,0)に、状態Cを期待値
(0,1)に対応させ、状態Dを期待値(0,0)に対
応させる。すなわち、履歴情報そのものを分岐期待値情
報として利用する。この場合、分岐期待値は状態A>状
態B>状態C>状態Dとなる。
【0192】未登録分岐命令によるTaken実行のと
きの分岐命令の登録は、先の実施例4と同様にして行な
われる。この場合、分岐期待値のフィールドが新たに用
いられる必要はない。すなわち、図21に示すように、
エントリ3においてフィールド3aに有効ビットVが格
納され、フィールド3bに分岐命令特定情報が格納さ
れ、フィールド3cに履歴情報が分岐期待値として格納
され、フィールド3dに分岐先情報が格納される。この
場合、フィールド3cの履歴情報が分岐期待値BEXP
として利用され、図18および図19に示す構成が利用
されて、未登録分岐命令のTaken実行時における登
録動作が行なわれる。
【0193】分岐予測時においては、有効ビットVの値
にのみ従って分岐予測が行なわれてもよく、また従来と
同様有効ビットVにより分岐命令の登録/未登録が識別
され、登録分岐命令に対しては履歴情報に従って分岐予
測が行なわれる構成が利用あれてもよい。また更新動作
においては、第1の実施例と同様履歴情報の更新および
有効ビットVの更新が行なわれる。
【0194】以上のように、この第5の実施例に従え
ば、第4の実施例の構成と同様、分岐先バッファに格納
される分岐命令の分岐期待値は、この置換前よりも低く
なることはないため、未登録分岐命令の登録による分岐
予測ヒット率の低下を防止することができる。
【0195】さらに、分岐先バッファのエントリに格納
される分岐期待値は、その分岐命令の実行結果を反映し
ている(Not−Taken実行およびTaken実行
により履歴情報が更新されるため、応じて分岐期待値も
更新される)ため、コンパイル時において、静的に(予
め固定的に)予測の難しい分岐命令に対しても動的にそ
の分岐期待値が変更されるため、効果的な置換を行なう
ことが可能となる。
【0196】さらに、分岐先バッファのエントリに余分
に分岐期待値を保持するためのフィールドが不要とな
り、分岐先バッファの規模の増大が防止される。
【0197】[実施例6]図22は、この発明の第6の
実施例である命令処理装置における登録動作を説明する
ための図である。図22において、分岐命令コード10
aに対し、分岐確率フラグalways−tが付され
る。この分岐確率フラグalways−tを格納するフ
ィールドとしては、コンパイラにより、分岐命令コード
10aとリンクして命令コード内のフィールド10c内
に付される構成が利用されてもよい。また、先の第3の
実施例の場合と同様、ハードウェアによりこの分岐確率
フラグalways−tが生成される構成が利用されて
もよい。
【0198】エントリ3は、有効ビットVを格納するフ
ィールド3aと、分岐命令を特定する情報(命令番号)
を格納するフィールド3bと、複数ビットの履歴情報を
格納するフィールド3cと、分岐先情報(分岐先アドレ
ス)を格納するフィールド3dを含む。登録初期値設定
部100は、分岐命令の登録時(not−taken予
測かつTaken実行のとき)、この分岐確率フラグa
lways−tを参照し、その値に従って登録すべき分
岐命令の履歴情報の値を設定してフィールド3cへ格納
する。
【0199】分岐確率フラグalways−tは、分岐
命令の分岐確率が高い場合には、“1”に設定され、分
岐確率の低い場合には“0”に設定される。
【0200】図23は、この履歴情報の初期設定の規則
を一覧にして示す図である。図23においては、履歴情
報は、2ビットを含み、図20に示す4つの状態A、
B、CおよびDの状態のいずれかに設定される場合が一
例として示される。登録動作について次に、図22およ
び図23を参照して説明する。
【0201】分岐命令の登録は、not−taken予
測かつTaken実行のときに行なわれる。分岐確率フ
ラグalways−tが“1”のとき、すなわち分岐確
率が高い場合には、その履歴情報の初期状態は図20に
示す状態Aに設定される。分岐確率フラグalways
−tが“0”にあり、この登録すべき分岐命令の分岐確
率が低い場合には、その履歴情報の初期状態は、図20
に示す状態Bに設定される。これ以外の状態においては
分岐命令の登録は行なわれず、更新動作/履歴情報の更
新が行なわれる。この履歴情報の更新動作は、従来の複
数ビット履歴方式の分岐先バッファにおいて利用される
ものと同じ更新動作が行なわれてもよい。また、第1の
実施例における場合と同様に、分岐予測と分岐実行結果
に従ってその履歴情報の更新および有効ビットの更新が
行なわれてもよい。
【0202】複数ビット履歴方式の分岐先バッファを用
いる場合、履歴情報が図20に示す状態CおよびDを示
す場合、not−taken予測となる。分岐命令の登
録は、未登録分岐命令に対してのみ行なわれる。したが
って、図22に示す登録初期値設定部100は、この分
岐命令が登録されているか否かを識別する機能を備え
る。この登録識別機能では、選択されたエントリに含ま
れる有効ビットVの値が“1”の有効状態を示すときに
は、その分岐命令は登録されていると判別される。
【0203】図24は、この発明の第6の実施例に従う
命令処理装置の分岐先バッファ書込部の構成を概略的に
示す図である。図24において、分岐先バッファ書込部
は、命令デコーダ(図示せず)からのオペランドデータ
および分岐先バッファ20から読出される分岐命令情報
を受け、分岐命令を実行するとともに、分岐先バッファ
の対応のエントリから読出された分岐命令情報に従って
分岐予測信号Pr、分岐実行結果指示信号Reおよび分
岐確率フラグalways−tを出力するとともにこの
分岐命令に対して与えられた命令フェッチアドレスPC
Aおよび分岐先情報BAを出力する分岐実行ユニット1
02と、分岐予測信号Pr、分岐実行結果指示信号R
e、および分岐確率フラグalways−tの状態に従
って分岐先バッファ20の対応のエントリへ書込を行な
うか否か(登録/更新動作)を決定するBTB登録/更
新決定機構104と、分岐予測信号Pr、分岐実行結果
指示信号Reおよび分岐確率フラグalways−tに
従って登録すべき分岐命令の履歴情報の初期値HIを設
定して出力する予測初期状態選択回路106を含む。
【0204】分岐実行ユニット102は、分岐先バッフ
ァ20の対応のエントリから読出された分岐命令情報に
含まれる有効ビットVおよび履歴情報に従って分岐予測
信号Prを出力する。また、オペランドデータ(図示し
ない命令デコーダから与えられる)の処理を実行し、そ
の分岐命令の実行により、分岐が発生したか否かを示す
分岐実行結果指示信号Reを出力する。さらに、分岐実
行ユニット102は、分岐命令情報から第2の実施例ま
たは第3の実施例に示す方法に従って確率分岐フラグa
lways−tを抽出して(または生成して)出力す
る。分岐実行ユニット102は、またこの分岐命令の命
令フェッチアドレスPCAをラッチする機能を備え、分
岐先バッファ20へ与える。分岐先バッファ20は、こ
の命令フェッチアドレスPCAのうち一部をデコーダ2
1b(6)に受け、残りのアドレスを分岐命令特定情報
として分岐先バッファの対応のエントリ内のフィールド
に書込むように受ける。
【0205】BTB登録/更新決定機構104は、従来
の複数ビット履歴方式の構成と同様に登録/更新を決定
するように構成されてもよい。また、先の実施例のよう
に、分岐確率フラグalways−tが“1”のときに
は対応のエントリに含まれる履歴情報を分岐期待値とし
て利用して、選択的にこの分岐命令の登録が行なわれる
構成が利用されてもよい。この場合、分岐確率フラグa
lways−tが“0”の場合には、対応のエントリが
空きエントリの場合にのみ、この分岐命令の登録が行な
われる。BTB登録/更新決定機構104は、not−
taken予測/Taken実行の場合には、対応のエ
ントリの履歴情報を増分し、taken予測/Not−
Taken実行の場合には対応の履歴方法の減分を行な
う。
【0206】予測初期状態選択回路106は、分岐予測
信号Pr、分岐実行結果指示信号Reおよび分岐確率フ
ラグalways−tを受け、図23に示す規則に従っ
てこの分岐命令の履歴情報の初期値HIを決定して出力
する。分岐先バッファ20への履歴情報の書込において
は、BTB登録/更新決定機構104が登録と判定した
ときのみ、この予測初期状態選択回路106からの履歴
情報の初期値HIが対応のエントリの対応のフィールド
内に書込まれる。BTB登録/更新決定機構104が、
単に更新のみを行なうことを決定した場合には、この予
測初期状態選択回路106からの履歴情報の初期値HI
の書込は行なわれず、BTB登録/更新決定機構104
が決定した更新履歴情報が必要な情報とともに分岐先バ
ッファ20の対応のエントリ内に書込まれる。なお、こ
の図24に示す構成においてはBTB登録/更新決定機
構104からは有効ビットVが出力されないように示さ
れるが、このときまた登録時においては、対応のエント
リの有効ビットVが登録を示す“1”の状態に設定され
る。
【0207】この第6の実施例の構成に従えば、以下の
利点が得られる。分岐確率フラグalways−tが
“0”の分岐確率の低い分岐命令が、たまたまNot−
Taken実行されて、分岐先バッファに登録される場
合、その履歴情報の初期状態は、図20に示す状態Bと
なる。この分岐命令の次回の実行が、Not−Take
n実行であれば、この分岐命令はその状態が更新され、
状態Cに移行し、その次の回の分岐予測は、not−t
aken予測となる。したがって、この分岐命令につい
てtaken予測となるのはこの分岐命令が登録された
後に始めて実行されるときだけである。分岐確率が低い
分岐命令が連続して2回Taken実行となる確率は極
めて低く、したがってこの分岐命令についての分岐予測
のミスヒットは1回となり、予測精度の低下が防止され
る。この構成により、たまたまTaken実行された分
岐確率の低い未登録分岐命令が登録されても、その分岐
命令が次回の予測がミスヒットとなるだけであり、分岐
予測精度の低下を防止することができる。
【0208】なお、図23に示す登録規則に従えば、2
ビットの履歴情報が想定されているが、この履歴情報の
ビット数はこれより多くても、同様に、この本発明の構
成を適用することができる。
【0209】以上のように、この第6の実施例に従え
ば、分岐確率の低い分岐命令はnot−taken予測
となりやすい状態に、また分岐確率の高い分岐命令は、
not−taken予測となりにくい状態にその予測の
初期状態が設定されるため、極めて低い確率で生じる
(通常の分岐方向とは)逆方向の分岐に起因する予測ミ
スの、分岐予測精度に及ぼす影響を大幅に抑制すること
ができる。
【0210】 [実施例7] 図25は、本発明の第7の実施例である命令処理装置の
分岐命令の登録/更新動作を制御する部分の構成を概略
的に示す図である。この図25に示す構成においては、
分岐先バッファ20に含まれる分岐先バッファレジスタ
21aのエントリ3には、有効ビットVを格納するフィ
ールド3aと、分岐命令特定情報を格納するフィールド
3bと、分岐先情報を格納するフィールド3dのみが設
けられる。この分岐先バッファ20と独立に、その書込
/読出動作を制御することのできる分岐履歴バッファ
(BHC)120が設けられる。この分岐履歴バッファ
120は、分岐先バッファ20のエントリ3にそれぞれ
対応して設けられるエントリ122を含む。この分岐履
歴バッファ120のエントリ122は、分岐先バッファ
20の対応のエントリ3に格納される分岐命令について
の履歴情報のみが格納される。この分岐先バッファ20
に含まれるデコーダ21bおよび分岐履歴バッファ12
0に含まれるデコーダ121bに対しては、分岐命令実
行ユニット102から同じアドレス(分岐命令に対する
命令フェッチアドレスの一部)が与えられる。
【0211】分岐命令実行ユニット102は、図示しな
い読出経路により分岐先バッファ20から読出された分
岐命令情報と図示しない命令デコーダから与えられるオ
ペランドデータとを受け、そのオペランドデータに従っ
て分岐命令を実行し、分岐命令情報に含まれる有効ビッ
トVに従って分岐予測信号Prを出力し、またその分岐
命令の実行結果に従って分岐実行結果指示信号Reを出
力し、かつさらにこの分岐命令に対応するプログラムカ
ウンタから発生された命令フェッチアドレスPCAを出
力する。分岐命令実行ユニット102からの命令フェッ
チアドレスPCAは、この分岐先バッファ20および分
岐履歴バッファ120への情報の書込を行なうときにの
み発生される。分岐先バッファ20からの読出時におい
ては、プログラムカウンタ(図示せず)からの命令フェ
ッチアドレスが分岐先バッファ20へ与えられる。
【0212】 登録更新制御ユニット130は、分岐命
令実行ユニット102からの分岐予測信号Prおよび分
岐実行結果指示信号Reと、分岐履歴バッファ120
ら読出された履歴情報値BHCVとを受け、分岐先バッ
ファ20に対しては分岐先バッファ書込イネーブル信号
BTB−weおよび有効ビットVを出力し、分岐履歴バ
ッファ120に対しては分岐履歴バッファ書込イネーブ
ル信号BHC−we、分岐履歴バッファ読出イネーブル
信号BHC−reおよびこの分岐履歴バッファ120に
対する動作演算内容を示す演算指示信号(データ)OP
Rを出力する。分岐履歴バッファ120の構成について
は後に説明するが、エントリ122は、多ビットアップ
/ダウンカウンタでたとえば構成されており、履歴情報
(カウント値)を読出すことなく外部からの信号OPR
に従ってそのカウント値のインクリメント/デクリメン
トおよびセット/リセットを行なうことができる。分岐
先バッファ20の構成は、先の実施例において説明した
ものと同様であり、書込および読出いずれも行なうこと
のできるレジスタの構成を備える。分岐先バッファ20
のエントリ3に格納される分岐命令関連情報に対応し
て、分岐履歴バッファ120においては、対応のエント
リ122において対応の分岐命令の履歴情報が格納され
る。次に動作について簡単に説明する。
【0213】命令フェッチ時においては、まず図示しな
いプログラムカウンタからの命令フェッチアドレスに従
って分岐先バッファ20から対応のエントリの内容が読
出される。この読出されたエントリの内容は、図示しな
い命令デコーダからのオペランドデータとともに分岐命
令実行ユニット102へ与えられる。分岐命令実行ユニ
ットは、この読出されたエントリ3の内容に含まれる有
効ビットVの値に従って分岐予測を行ない、その予想結
果に従って分岐予測信号Prを“1”または“0”に設
定する。有効ビットVが“1”のときには、分岐予測信
号Prはtaken予測を示す状態に設定され、有効ビ
ットVが無効状態を示す“0”のときには、分岐予測信
号Prはnot−taken予測を示す状態に設定され
る。分岐命令実行ユニット102は、また与えられた分
岐命令を実行し、その実行結果に従って分岐の発生の有
無を示す信号Reを出力する。分岐命令実行ユニット1
02は、またこの分岐命令の特定情報すなわち命令フェ
ッチアドレスPCAとともに分岐先アドレスを分岐先バ
ッファ20へ伝達する。
【0214】 登録更新制御ユニット130は、分岐命
令実行ユニット102からの分岐予測信号Prおよび分
岐実行結果指示信号Reに従って分岐先バッファ20お
よび分岐履歴バッファ120に対して行なうべき動作を
判別し、その判別結果に従って各種制御信号を出力す
る。登録更新制御ユニット130により行なわれる動作
については後に詳細に説明するが、ここでは簡単に、以
下の動作が行われることを述べる。
【0215】 分岐予測ヒット時およびnot−tak
en予測/Taken実行の予測ミスヒット時において
は、分岐履歴バッファ120の対応のエントリ122に
対しその履歴情報の更新が行なわれる。ただし、not
−taken予測/Not−Taken実行の場合、未
登録分岐命令または非分岐命令により分岐が発生してい
ないため、分岐先バッファおよび分岐履歴バッファ12
0の対応のエントリの更新は行なわれない。
【0216】 taken予測/Not−Taken実
行の分岐予測ミスヒット時においては、まず分岐履歴
ッファ120から対応のエントリ122の履歴情報を読
出し、その値BHCVに基づいてその分岐命令の次回の
予測を決定する。その決定された予測が、not−ta
ken予測の場合には、分岐先バッファ20において対
応のエントリの有効ビットVを“0”とし、その分岐命
令を未登録状態に設定する。
【0217】上述の動作方法に従えば、分岐先バッファ
20は、主として情報読出が行なわれるだけである。分
岐先バッファ20において対応のエントリの内容の書替
えが行なわれるのは、未登録分岐命令の登録時および登
録分岐命令の未登録動作時である。いずれも場合も分岐
予測ミスヒット時であり、その発生回数は極わずかであ
る。したがって、分岐先バッファにおいて全サイクルに
おいて情報読出と情報書込とを行なう必要がなく、低速
動作する回路を用いて分岐先バッファを構築することが
できる。
【0218】 一方、分岐履歴バッファ120は、分岐
命令が実行されたときに情報の書込が行なわれる。情報
の読出が分岐履歴バッファ120において行なわれるの
は、taken予測/Not−Taken実行の分岐予
測ミスヒット時においてのみである。したがって分岐履
歴バッファにおいても基本的には1つのサイクルにおい
てデータ書込動作のみが行なわれ、情報読出動作と情報
書込動作が各サイクルにおいて行なわれる回数が極めて
少なく、容易に分岐履歴バッファを構築することができ
る。
【0219】 すなわち、分岐先バッファ20は、基本
的には分岐予測のために情報読出動作が行なわれ、一
方、分岐履歴バッファ120は、分岐命令の履歴情報更
新のために書込が行なわれる。分岐予測時には、分岐先
バッファのエントリに分岐命令が登録れている場合
(有効ビットVが“1”のとき)においては、take
n予測が行なわれ、そうでない場合にはnot−tak
en予測が行なわれる。この場合には何ら履歴情報は参
照されない。したがって、このときには分岐履歴バッフ
120に対する情報読出動作は何ら必要とされない。
分岐履歴バッファ120は、分岐命令の実行結果が、T
aken実行の場合には、その対応のエントリの履歴情
報が値BHCVがインクリメントされNot−Take
n実行の場合には、履歴情報値BHCVのデクリメント
が行なわれる。これは単に分岐履歴バッファ120に対
する書込動作が行なわれるだけである。
【0220】taken予測/Not−Taken実行
の場合においてのみ分岐履歴カウンタ120から対応の
履歴情報が読出され、その値BHCVに従って次回の予
測が決定される。その場合には、履歴情報を参照して次
回の分岐予測を行なっているため、従来の複数ビットの
履歴方式と同じ精度の分岐予測を行なうことができる。
この次回の分岐予測が、not−taken予測の場合
には、対応の分岐命令が分岐先バッファ20において無
効化される(有効ビットVを“0”とする)。
【0221】 すなわち、この第7の実施例の構成に従
えば、分岐先バッファ20に対しては通常読出動作のみ
が行なわれ、taken予測/Not−Taken実行
の予測ミスヒット時においてのみおよびnot−tak
en予測/Taken実行のときに分岐先バッファ20
に対する情報書込動作が行なわれる。一方、分岐履歴
ッファ120は、通常は情報の書込のみが行なわれ(履
歴情報の更新のみ)、taken予測/Not−Tak
en実行の予測ミスヒット時においてのみその履歴情報
の読出が行なわれる。したがって、分岐先バッファ20
および分岐履歴バッファ120は、それぞれ、通常は、
1サイクルにおいては書込動作か読出動作のいずれかの
みが行なわれるため、従来の複数ビット履歴方式の問題
点である1つのサイクルにおいて読出および書込を同時
に行なうという要求が解消され、分岐先バッファおよび
分岐履歴バッファいずれをも容易に構築することができ
るとともに、従来の複数ビット履歴方式に近い予測ヒッ
ト率を実現することができる。
【0222】 図26は、図25に示す登録更新制御ユ
ニット130のより詳細な構成を示す図である。図26
において、登録更新制御ユニット130は、図25に示
す分岐命令実行ユニット102からの分岐予測信号Pr
と分岐命令実行結果指示信号Reとに従って分岐履歴
ッファ120に対する動作を制御するBHC登録/更新
決定部140と、このBHC登録/更新決定部140の
出力する登録無効検出信号VCTLと分岐予測信号Pr
と分岐命令実行結果指示信号Reとに従って分岐先バッ
ファ20に対する書込動作を判別し、その判別結果に従
って分岐先バッファ20に対する書込動作を行なうBT
B登録/更新決定部150を含む。BTB登録/更新決
定部150から分岐先バッファ書込イネーブル信号BT
B−weおよび有効ビットVが出力される。残りの分岐
命令特定情報および分岐先情報(分岐先アドレス)は図
25に示す分岐命令実行ユニット102から分岐先バッ
ファへ与えられる。
【0223】BHC登録/更新決定部140は、分岐予
測信号Prと分岐命令実行結果指示信号Reとに従っ
て、予測のミス/ヒットおよびその種類を識別し、その
識別結果を示す信号を出力する予測結果識別部142
と、予測結果識別部142の出力信号と後に説明する登
録無効検出部148からの登録無効検出信号VCTLに
従って分岐履歴カウンタの動作を制御するための信号B
HC−we、BHC−reおよびOPRならびにφAC
Tを出力する動作決定実行部144と、動作決定実行部
144からの活性化信号φACTに応答して活性化さ
れ、分岐履歴カウンタから読出された履歴情報値BHC
Vに従って次回の分岐予測値を出力する予測値算出部1
46と、この予測値算出部146からの算出された次回
の分岐予測値に従ってその分岐命令の登録を無効にすべ
きか否かを識別し、その識別結果に従って信号VCTL
を出力する登録無効検出部148を含む。
【0224】予測結果識別部142は、分岐予測信号P
rのtaken予測およびnot−taken予測指示
状態と分岐命令実行結果指示信号ReのTaken実行
およびNot−Taken実行の指示状態の各組合せに
従って、いずれの状態が生じたかを識別する。
【0225】 動作決定実行部144は、この予測結果
識別部142の出力信号に従って分岐履歴バッファの履
歴情報の更新(インクリメント/デクリメント)および
初期設定を実行する。この動作決定実行部144は、登
録無効検出部148からの信号VCTLが登録無効を示
すときには対応のエントリの履歴情報を初期値
(“0”)に初期設定する。
【0226】 予測値算出部146は、taken予測
/Not−Taken実行の場合に、動作決定実行部1
44の制御の下に分岐履歴バッファから読出された履歴
情報値BHCVを受け、次回の分岐予測値を決定する。
このtaken予測/Not−Taken実行は分岐予
測ミスヒットであり、履歴情報値BHCVは1デクリメ
ントされる。このデクリメントされた履歴情報値BHC
Vに対応する状態がno−taken予測に対応する
とき、登録無効検出部148は、登録無効を示す信号V
CTLを出力する。すなわち、登録無効検出部148
は、この予測値算出部146により算出された履歴情報
値に従って次回の予測を行ない、次回の分岐予測がno
t−taken予測となる場合には、その出力信号VC
TLを登録無効を示す状態に設定する。BTB登録/更
新決定部150はこの登録無効指示信号VCTLに応答
して対応のエントリの有効ビットVを無効状態の“0”
に設定する。動作決定実行部144は、この登録無効指
示信号VCTLに従って、対応のエントリの履歴情報を
リセットする。このリセット動作は特に行なわれなくて
もよい(分岐先バッファにおいて対応のエントリは無効
状態に設定されており、この履歴情報は利用されないた
めである)。
【0227】 図27は、このBHC登録/更新決定機
構およびBTB登録/更新決定部の動作の論理を一覧に
して示す図である。図27においては、履歴情報値BH
CVの初期値は最小値“0”に設定されまたこの状態は
not−taken予測の状態に対応すると仮定され
る。また、分岐履歴バッファからの履歴情報値読出には
1サイクル必要とされることが仮定される。また、分岐
命令実行結果指示信号Reは、サイクルnの直前にすな
わちサイクル(n−1)の終了時に確定するものとす
る。まず、簡単に論理について説明し、次に具体例につ
いて詳細に説明する。
【0228】 (i) not−taken予測/No
t−Taken実行のとき: この状態は、未登録分岐命令による分岐非発生であり、
分岐先バッファおよび分岐履歴バッファいずれに対して
も書込は行なわれない。ただし、分岐履歴バッファにお
いては、サイクル(n+1)において実行される動作
は、次の命令が分岐命令であるか否かにより決定される
ため、未定である。
【0229】 (ii) not−taken予測/Ta
ken実行のとき: このときには、未登録分岐命令により分岐が発生してい
るため、この分岐命令の登録が行なわれる。すなわち、
サイクルnにおいて分岐先バッファに対し有効ビットV
を有効状態の“1”に設定する動作が行なわれる。同
様、分岐履歴バッファにおいても、サイクルnにおいて
対応のエントリの初期設定が行なわれる。分岐履歴バッ
ファのサイクル(n+1)における動作は、次の命令に
従って決定されるため、未定である。
【0230】 (iii) taken予測/Not−T
aken実行のとき: 登録分岐命令による分岐非発生であり、予測ミスヒット
である。まず、サイクルnにおいて分岐履歴バッファ
履歴情報の読出が行なわれる。その履歴情報値BHCV
の値に従って、行なわれる動作が異なる。
【0231】(a) BHCV=0: この場合、予測ミスヒットであり、履歴情報値BHCV
をデクリメントした場合、負の値となり、次回予測がn
ot−taken予測となる。したがって、サイクル
(n+1)においてこの分岐命令の登録無効化動作が
行なわれる。すなわち、サイクル(n+1)において対
応のエントリの有効ビットVが“0”に設定される。こ
のときまた分岐履歴バッファにおいても対応の履歴情報
値が初期値“0”に設定される。この動作は特に行なわ
れなくてもよい。ここで、図27において、not−t
aken予測/Not−Taken実行のときの次回予
測がtaken予測であり、一方、taken予測/N
ot−Taken実行のときの次回予測がnot−ta
ken予測となるのは以下の理由による。すなわち、初
期値“0”のときには次回予測はtaken予測であ
り、一方、初期値“0”から1デクリメントされた状態
では、not−taken予測となるためである(予測
ミスヒット時には履歴情報値BHCVはデクリメントさ
れる)。
【0232】(b) BHCV≧1のとき: この状態においては、分岐履歴バッファの対応のエント
リから読出された履歴情報値BHCVをその予測ミスヒ
ットにより1デクリメントしても、その値は0以上であ
り、したがって次回予測はtaken予測となる。この
状態においては単にサイクル(n+1)において分岐履
バッファの対応のエントリの履歴情報値のデクリメン
トのみが行なわれる。
【0233】(iv) taken予測/Taken実行
のとき: この状態は、分岐予測ヒットであり、分岐先バッファに
対しては書込動作は何ら行なわれない。分岐履歴バッフ
において対応のエントリの履歴情報値がサイクルnに
おいて1インクリメントされる。
【0234】 上述のように、分岐履歴バッファにおい
て読出が行なわれるのはtaken予測/Not−Ta
ken実行のときのみである。分岐先バッファに対し書
込が行なわれるのは、not−taken予測/Tak
en実行の場合と、taken予測/Not−Take
n実行かつ次回予測がnot−taken予測の場合で
ある。
【0235】 図28は、分岐履歴バッファの構成の一
例を示す図である。図28において分岐履歴バッファ
エントリ122それぞれに対応して2ビットアップダウ
ンカウンタ160が設けられる。ここでは単に一例とし
て2ビットのアップダウンカウンタを示すが、より多く
のビット数を備えるアップダウンカウンタが利用されて
もよい。この2ビットアップダウンカウンタ160は、
アップ/ダウン指示信号入力U/Dとセット/リセット
入力S/Rと、2ビット出力Q1およびQ2を含む。ア
ップ/ダウン入力U/Dおよびセット/リセット入力S
/Rはゲート162および内部バス163aを介して書
込回路168に接続される。ゲート162は、図25に
示すデコーダ121bからの選択信号SELに応答して
導通状態とされる。2ビット出力Q1およびQ2には、
ゲート164および内部データバス163bを介して読
出回路166に接続される。ゲート164も、デコーダ
の出力信号SELに応答して導通状態とされる。読出回
路166は、分岐履歴バッファ読出イネーブル信号BH
C−reに応答して活性化され、内部バス163b上の
信号を増幅して履歴情報値BHCVを出力する。書込回
路168は、分岐履歴バッファ4書込イネーブル信号B
HC−weに応答して活性化され、オペレーション信号
OPRに従って動作制御信号を生成して、選択されたエ
ントリに対応するアップダウンカウンタの入力U/Dお
よびS/Rへ伝達する。
【0236】 この図28に示す構成に従えば、2ビッ
トアップダウンカウンタ160のカウント値Q1および
Q2を通常時においては何ら読出す必要がなく、分岐履
バッファの更新すなわち書込動作のみを行なうことが
できる。
【0237】 図29は、分岐履歴バッファの他の構成
を示す図である。図29において分岐履歴バッファ12
0は、各エントリそれぞれに対応して設けられるレジス
タステージを含むレジスタ回路121aと、各サイクル
ごとに、このレジスタ回路121aの対応のレジスタス
テージの内容を読出しラッチするラッチ回路170と、
外部から与えられる操作指示信号OPRに従ってこのラ
ッチ回路170に格納されたデータに所定の指定された
演算を行なって再びラッチ回路170へ格納する演算回
路172と、分岐履歴バッファ読出イネーブル信号BH
C−reに応答して活性化され、ラッチ回路170に格
納された分岐履歴情報を出力する出力回路174を含
む。この図29に示す分岐履歴バッファの構成の場合、
すべて履歴情報の更新動作が内部で処理され、データは
外部へ読出されない。したがって、各サイクルにおいて
情報の読出/書込が行なわれるだけであり、各サイクル
ごとに出力回路174を動作させる必要がなく、高速で
履歴情報の更新/登録を行なうことができる。
【0238】 図30は、分岐履歴バッファのさらに他
の構成を示す図である。図30に示す構成においては、
分岐履歴バッファ120は、各エントリそれぞれに対応
して設けられるレジスタステージを含み、この分岐履歴
バッファ120の外部に演算回路180が設けられる。
演算回路180へは、操作指示信号OPRが与えられ、
分岐履歴バッファから読出されたデータ(履歴情報)に
対し指定された演算処理が施された後、再び分岐履歴
ッファ120の対応のエントリ(レジスタ)へ格納され
る。この分岐履歴バッファ120のデータ読出は分岐命
令が与えられたことを示す分岐命令検出信号Brの活性
化時にのみ行なわれる。通常動作時においてはこの分岐
履歴バッファ120のアクセスは行なわれない。すなわ
ち、履歴情報をアクセスする必要があるのは分岐命令が
与えられたときのみである。したがって分岐命令検出信
号Brが与えられたときに分岐履歴バッファ120から
対応のエントリの内容を読出し、演算回路180へ与え
る。分岐命令が検出されてからこの分岐命令が実行され
て、その実行結果に従って信号BHC−weおよびOP
Rの状態が決定される。したがって情報読出サイクルと
履歴情報書込サイクルを別々のサイクルで実行すること
ができ、何ら高速動作は要求されず、十分余裕を持って
履歴情報に対し所望の処理を行なうことができる。
【0239】 この図28ないし図30に示す分岐履歴
バッファのいずれの構成が利用されてもよいが、以下の
説明においては、分岐履歴バッファの書込サイクルを強
調するために、書込のみが行なわれる図28の構成を利
用するものと想定する。以下の詳細な動作説明におい
て、図29および図30に示す構成の分岐履歴バッファ
が用いられても同様の動作を実現することができる。次
に、具体的処理動作について写31〜36を参照して詳
細に説明する。
【0240】(i) 分岐予測ヒット時(taken予
測/Taken実行)(図31参照):図31に示すサ
イクル(n−3)において、命令フェッチステージIC
が実行される。すなわち、命令フェッチアドレスがプロ
グラムカウンタから命令メモリへ与えら、命令aが命令
メモリから読出される。この命令aの読出と平行して、
分岐先バッファ(BTB)の対応のエントリの内容が読
出され、分岐予測(taken予測)が行なわれる。
【0241】サイクル(n−2)においてこの命令aの
デコードが行なわれ(命令デコードステージD)、この
命令aが分岐命令であることが識別される。サイクル
(n−2)において、また次の命令bが命令メモリから
読出され、またそれと平行して分岐先バッファ(BT
B)から対応のエントリの内容が読出され、分岐予測が
行なわれる。
【0242】サイクル(n−1)において、命令aは、
分岐命令であり、分岐命令実行ステージ(B)へこの命
令aが投入され、命令aが実行される。命令bは、デコ
ードステージDにおいてその命令がデコードされる。こ
のときまたさらに次の命令cが命令フェッチステージI
Cに入り、命令メモリから命令cが読出され、これと平
行して分岐先バッファ(BTB)から対応のエントリの
内容が読出される。
【0243】 サイクル(n−1)の終了時において分
岐命令実行ステージBにおいて分岐発生が検出され、サ
イクルnにおいて分岐履歴バッファ(BHC)の対応の
エントリの履歴情報の更新(インクリメント)が行なわ
れる。またこのとき、命令bは、そのデコード結果に従
って命令実行ステージへ投入され、また命令cはデコー
ドステージに投入され、さらに次に命令dが命令フェッ
チステージICに入るとともにこの分岐先バッファ(B
TB)からの対応のエントリの内容の読出が行なわれ
る。
【0244】 図31に示すように、サイクルnにおい
て分岐履歴バッファ(BHC)の更新と分岐先バッファ
(BTB)の内容の読出が平行して行なわれる。履歴情
報更新のためにパイプラインを止める必要がなく、サイ
クルペナルティは生じず、また各サイクルごとに分岐予
測を行なうことができる(分岐予測時においては、分岐
先バッファに格納された有効ビットVの値に従って分岐
予測が行なわれ、履歴情報は参照されないためであ
る)。
【0245】(ii) not−taken予測/Tak
en実行(図32参照):まず、サイクル(n−3)に
おいて、命令aのフェッチおよび分岐先バッファからの
有効ビットVの読出が行われる(ICおよびBTBリー
ド)。命令aについては、not−taken予測が行
なわれる。
【0246】サイクル(n−2)において、命令aがデ
コードステージDへ投入され、命令aのデコードが行な
われる。このとき、分岐予測に従って、命令aに続く命
令bに対するフェッチおよび分岐先バッファからの読出
が行なわれる(ICおよびBTBリード)。
【0247】サイクル(n−1)において、命令aが分
岐命令であることが識別され、その分岐命令の実行が行
なわれる(分岐命令実行ステージB)。このとき、命令
bがデコードステージDへ投入され、また命令cが命令
メモリからフェッチされ、また対応の分岐先バッファの
エントリからの読出が行なわれ分岐予測が行なわれる
(ICおよびBTBリード)。
【0248】 サイクル(n−1)において、実行され
た命令aにより分岐が発生したと判別されると、分岐予
測ミスヒットであり、命令bおよびcは実行してはいけ
ない命令であり、無効化される(スカッシュされる)。
サイクルnにおいては、この分岐予測ミスヒットに従っ
て、まず命令aの分岐先バッファ(BTB)への登録が
行なわれる(分岐命令特定情報、分岐先アドレスおよび
有効ビットの書込)。これと平行して分岐履歴バッファ
(BHC)においても対応のエントリに履歴情報の初期
値が格納される。このサイクルnにおいては、分岐先バ
ッファ(BTB)の読出は行なわれないため次の命令は
フェッチすることができず、1サイクルのペナルティが
生じる。
【0249】サイクル(n+1)において、命令aに含
まれる分岐先アドレスに従って次の命令dがフェッチさ
れ、また対応のエントリが分岐先バッファから読出され
る(ICおよびBTBリード)。
【0250】(iii ) taken予測/Not−Ta
ken実行でありかつ次回予測がnot−taken予
測のとき(図33参照):サイクル(n−3)におい
て、命令aが命令メモリからフェッチされ(ICステー
ジ)、また分岐先バッファから対応のエントリの有効ビ
ットが読出され、その有効ビットに従って分岐予測が行
なわれる(BTBリード)。今、taken予測であ
り、分岐先バッファから読出された分岐先アドレスに従
って次の命令フェッチアドレスが設定される。
【0251】サイクル(n−2)において、分岐先アド
レスに格納された命令bが命令メモリから読出され(I
Cステージ)、またそれと平行して分岐先バッファから
対応のエントリの内容が読出される(BTBリード)。
【0252】 サイクル(n−2)でデコードされた分
岐命令aがサイクル(n−1)において実行され(Bス
テージ)、Not−Taken実行であると判別される
と、デコードステージ(D)において命令bおよびcが
それぞれ無効化される。このとき、サイクルnにおい
て、分岐非発生に従って命令aのフォール・スルー(f
all−through)命令(命令コード上で分岐命
令aの次に位置する命令)のアドレスがプログラムカウ
ンタに設定され、対応の命令dの読出および分岐先バッ
ファの対応のエントリの読出が行なわれる。このサイク
ルnにおいて、分岐履歴バッファから対応のエントリに
格納された履歴情報が読出される(BHCリード)。こ
の読出された履歴情報に従って命令aの次回の分岐予測
を決定する(図27参照)。
【0253】サイクル(n+1)において、次回予測が
not−taken予測と決定されたときには、分岐先
バッファにおいて有効ビットが無効状態に設定され(B
TB更新)、また分岐履歴カウンタにおいても履歴情報
のリセットが行なわれる。このリセット動作は特に行な
われなくてもよい。このサイクル(n+1)においては
分岐先バッファに対する書込(分岐命令の無効化)が行
なわれており、命令フェッチは行なわれず、1サイクル
のペナルティが生じる。
【0254】サイクル(n+2)において、命令eに対
しフェッチおよびBTBリードが行なわれる。
【0255】 (iv) taken予測/Not−Ta
ken実行でありかつ次回予測がtaken予測のとき
(図34参照): サイクルnまでは、図33に示す動作と同じ動作が行な
われる。分岐履歴バッファから読出された履歴情報に従
って決定された次回の予測は、taken予測であり、
分岐先バッファへの書込は行なわれない。したがって、
サイクル(n+1)においては分岐履歴バッファの履歴
情報の更新のための書込動作のみが行なわれ(BHCラ
イト)、命令dに続く命令eが命令メモリから読出され
かつ対応の分岐先バッファのエントリの内容の読出が行
なわれる(ICおよびBTBリード)。この場合におい
ては、サイクル(n+1)においては、分岐先バッファ
の内容の更新は行なわれないため、サイクル(n+1)
において分岐先バッファに対し読出を行なうことができ
る。
【0256】 上述の一連の動作から明らかなように、
ある分岐命令に対して分岐履歴バッファが使用されるサ
イクルとしては、その分岐命令が実行されたサイクルの
次の1サイクルが基本的には割当られる。しかしなが
ら、taken予測/Not−Taken実行の場合に
は、分岐命令aは、分岐履歴バッファの読出および書込
のために2サイクルを使用する。分岐命令aに割当られ
ている分岐履歴バッファを使用するサイクルはサイクル
nであり、その次のサイクル(n+1)をも分岐命令a
が分岐履歴バッファを使用することは、本来この分岐履
バッファを使用するはずの命令bと分岐履歴バッファ
の使用において競合が生じると考えられる。しかしなが
ら、このような状況が生じる場合は、分岐命令aの予測
ミス時であり、命令bは無効化され、サイクル(n+
1)において分岐履歴バッファを使用することはない。
したがって、分岐履歴バッファのアクセスに競合は生じ
ないことになる。
【0257】 [パイプライン構成
が異なる場合] 図35は、taken予測/Not−Taken実行時
における分岐履歴バッファおよび分岐先バッファの動作
を示す図である。この図35に示すタイミングチャート
においては、分岐命令aの次回予測が、not−tak
en予測の場合である状態が示される。この図35に示
す構成においては、先に示した図33の場合と異なり、
命令デコードステージ(Dステージ)および分岐命令実
行ステージ(Bステージ)が1サイクルで実行される。
このパイプライン構成が異なる場合においても、命令a
の予測ミスがサイクル(n−1)の終了時に決定した場
合、次の命令bが無効化され、サイクルnにおいて命令
cのフェッチおよび分岐先バッファからの情報の読出が
行なわれる(ICおよびBTBリード)。サイクルnに
おいては、分岐履歴バッファの対応のエントリに格納さ
れた履歴情報の読出が行なわれ、サイクル(n+1)に
おいて、分岐履歴バッファの内容の更新(リセット)お
よび分岐先バッファへの書込(無効化)が行なわれる。
この場合においては、サイクル(n+1)において分岐
先バッファへの読出を行なうことができず、1サイクル
のペナルティが生じる。パイプラインの構成が異なる場
合においても、taken予測/Not−Taken実
行時において次回予測がnot−taken予測の場合
にのみ1サイクルのペナルティが生じるだけであり、こ
のような状態の発生する確率は小さく、応じて全体とし
てサイクルペナルティが生じる可能性は小さく、処理性
能の低下は抑制される。
【0258】 図36は、分岐先バッファ更新と命令フ
ェッチ動作とを同時に行なう場合の分岐先バッファおよ
び分岐履歴バッファの動作を示すタイミングチャート図
である。図36においては、taken予測/Not−
Taken実行時でありかつ次回予測がnot−tak
en予測の場合の動作が示される。また、命令のデコー
ドステージ(Dステージ)および分岐命令実行ステージ
Bはそれぞれ1サイクル必要とする。この動作は、実質
的に図33に示す動作と同じである。サイクル(+1)
においては、分岐先バッファの更新動作と平行して命令
eのフェッチ動作が行なわれる。このとき、分岐先バッ
ファからの読出は行なわれないため、分岐予測は実行さ
れない。しかしながら、命令eのフェッチ動作は行なわ
れており、分岐先バッファの読出のために1サイクル空
き期間を設ける必要がなく、1サイクル・ペナルティの
発生が防止される。
【0259】 以上のように、この発明の第7の実施例
の構成に従えば、分岐先バッファと別に独立に制御が可
能な分岐履歴バッファを設けたため、分岐先バッファお
よび分岐履歴バッファは、いずれも全体として1サイク
ルに読出動作および書込動作のいずれかを行なうだけで
よいため、これらの実現が容易であり、また分岐予測
は、複数ビットの履歴情報を参照しているため、従来の
複数ビット履歴方式に近い予測ヒット率を実現すること
ができる。
【0260】[実施例8]図37は、この発明の第8の
実施例である命令処理装置の要部の構成を示す図であ
る。図37においては、図26に示す登録無効検出部1
48および動作決定実行部144の構成が代表的に示さ
れる。図37において、登録無効検出部148は、分岐
命令実行ユニット102(図25参照)から与えられる
オペランドを受け、その分岐命令が後方分岐命令である
か前方分岐命令であるかを識別し、その分岐命令の種類
に従って分岐確率フラグalways−tの値を設定す
る分岐確率判別部190と、この分岐確率フラグalw
ays−tに従ってしきい値を設定するしきい値設定回
路192と、しきい値設定回路192の出力するしきい
値THと図26に示す予測値算出部146からの更新さ
れた履歴情報値BHCVaとを比較する比較回路194
を含む。
【0261】分岐確率判別部190は、与えられたオペ
ランドが後方分岐命令のような分岐確率の高い分岐命令
を示すときには分岐確率フラグalways−tを
“1”に設定し、与えられた分岐命令が前方分岐命令の
ようなそれ以外の分岐命令の場合には分岐確率フラグa
lways−tを“0”に設定する。この分岐確率判別
部190には、オペランドの即値の正/負に従って分岐
確率フラグalways−tの値を決定する構成が利用
されてもよい。しきい値設定回路192は、分岐確率フ
ラグalways−tが“1”にあり分岐の確率の高い
ことを示すときには、高いしきい値を選択し、分岐確率
フラグalways−tが“0”のときには、低いしき
い値を選択する。比較回路194は、この算出回路14
6からの履歴情報値BHCVaがしきい値TH以上のと
きには、その登録無効検出信号VCLTを“0”とし、
履歴情報値BHCVaがしきい値THよりも小さいとき
には、その出力信号VCTLを“1”とし、登録無効を
示す状態に設定する。
【0262】動作決定実行部144に含まれる初期設定
回路196は、分岐確率フラグalways−tと分岐
予測信号Prと分岐命令実行結果指示信号Reに従って
登録すべき分岐命令の初期状態を設定する。すなわち、
この初期設定回路196は、not−taken予測/
Taken実行のとき、その分岐確率フラグalway
s−tに従って履歴情報の初期状態を選択して分岐履歴
カウンタの対応のエントリへ書込む。この初期設定回路
196からの出力信号OPRは、図28に示すような各
エントリがアップダウンカウンタで構成される場合、セ
ット信号により最大カウント値が設定され、リセット入
力により最小カウントにセットされる構成が利用されて
もよい。また、図29および図30に示すように、分岐
履歴カウンタの各エントリがレジスタで構成される場合
には、初期設定回路196がその初期履歴情報値を設定
して、その設定された値を対応のエントリのレジスタに
書込む構成が利用されてもよい。
【0263】図38は、しきい値設定回路192の設定
するしきい値THと登録される分岐命令の履歴情報の初
期状態の対応関係を示す図である。図38においては、
履歴情報は2ビットで表現され、各分岐命令は4つの状
態A〜Dのいずれかを取る状態が一例として示される。
分岐確率フラグalways−tが“1”の場合には、
図38(a)に示すように、しきい値THは“0”に設
定され、このときまた履歴情報の初期状態は状態Dに設
定される。ここで各状態に対応して履歴情報の値を10
進数で示している。この初期状態において、次に分岐命
令が実行されるときには、taken予測となる。その
とき分岐が発生しない場合には、履歴情報は初期状態の
0からデクリメントされ負の値となり、登録無効検出信
号VCTLが登録無効を示す状態に設定され、この分岐
命令は分岐先バッファの登録が無効にされる。しかしな
がら、分岐確率フラグalways−tが“1”の場合
には、その分岐発生確率は高く、この状態が生じる可能
性が小さく、通常この分岐命令は連続して複数回繰返し
分岐を発生させるため、状態C、B、およびAへと移行
するため、taken予測が実行され、分岐予測精度が
改善される。
【0264】分岐確率の低い分岐命令に対しては分岐確
率フラグalways−tは“0”に設定され、そのと
きしきい値THは3に設定される。また、この新たに登
録された分岐命令の履歴情報の初期状態は状態A(3)
に設定される。この分岐確率の低い分岐命令の場合、次
回の予測はtaken予測となるが、Not−Take
n実行となる確率が高い。そのときの次回予測は、履歴
情報が状態Bであり、not−taken予測となる。
この場合には、比較回路からの登録無効検出信号VCT
Lが登録無効を示す状態に設定され、この分岐命令は分
岐先バッファの登録から外される。したがって分岐確率
の低い分岐命令がたまたま発生した分岐により登録され
ても、このような分岐命令は即座に分岐先バッファの登
録から外されるため、分岐予測精度の低下が防止され
る。
【0265】以上のように、この第8の実施例に従え
ば、分岐命令の分岐確率を反映したしきい値に従って次
回の分岐予測を行なうことにより、偶発的な分岐方向の
変更による分岐確率の低い分岐命令の登録および分岐確
率の高い分岐命令の無効化が生じる可能性を低減するこ
とができ、予測ヒット率の低下を抑制することができ
る。
【0266】[実施例9]図39は、この発明の第9の
実施例に従う分岐予測機構の構成および動作を概略的に
説明するための図である。図39(a)に示すように、
この第11の実施例においては、分岐命令コード10a
に対しさらに予測しきい値を格納するフィールド10f
を設ける。このフィールド10f内には、コンパイラに
より、分岐命令の分岐確率に従って予測しきい値が設定
される。この予測しきい値としては、コンパイラがほと
んど分岐が発生すると判断する分岐命令に対しては、a
lways−tのフラグが付され、しばしば分岐すると
コンパイラが判断した分岐命令に対しては、フラグlo
caly−tが付され、分岐方向が頻繁に変わると判断
した分岐命令に対しては、フラグlikely−nが付
され、ほとんど分岐が発生しないとコンパイラが判断し
た分岐命令に対しては、フラグalways−nが付さ
れる。分岐命令の分岐確率の高低は、たとえば前述のリ
ーの文献に例示されている。
【0267】この図39(a)に示す予測しきい値を有
するフィールド10fが図37に示す分岐確率判別部1
90へ与えられる。この場合には、分岐命令の種別を示
すオペランドは分岐確率判別部190へ与える必要はな
い。分岐確率判別部190からは、この予測しきい値フ
ィールド10fに格納された予測しきい値を示す信号が
生成され、図37に示すしきい値設定回路192へ与え
られる。このとき、単にしきい値設定回路192へ直接
このフィールド10fの予測しきい値データが与えられ
る構成が利用されてもよい。しきい値設定回路192
は、この予測しきい値に従ってしきい値THを設定して
比較回路194へ与える。初期設定回路196は、分岐
命令登録動作時においてその分岐命令の履歴情報の初期
状態を予測しきい値に従って決定し、その決定された初
期状態を分岐履歴カウンタに書込む。次回予測は、対応
のしきい値と履歴情報とに従って行なわれる。次に、こ
のしきい値THと履歴情報の初期状態について2ビット
履歴情報が用いられ、分岐命令が4つの状態を取る場合
を一例として説明する。
【0268】図39(b)に示すように、ほとんど常に
分岐が発生する分岐命令に対してはフラグalways
−tがフィールド10fに設定される。この場合、しき
い値THとしては“0”が選択され、履歴情報の初期状
態は状態D(0の状態)に設定される。この場合、次回
の分岐予測は常にtaken予測であり、状態DでNo
t−Taken実行とならない限り分岐先バッファに登
録されていれば常時taken予測とされる。
【0269】分岐の発生する確率が比較的高いと判断さ
れた分岐命令に対しては、図39(c)に示すように、
フラグlocaly−tが付される。この場合には、し
きい値THとして、“2”が設定され、履歴情報の初期
状態としては状態Bが選択される。この状態において
は、履歴情報値BHCVaが状態CまたはDを示す場合
にはnot−taken予測とされるが、分岐の発生す
る確率が比較的高く、状態Aに留まる確率が高く、ta
ken予測となる確率が高い。したがってこの場合、N
ot−Taken実行が生じても、状態Bに移行するだ
けであり、taken予測が次回の分岐予測として行な
われることになり、比較的高い分岐確率に正確に対応す
ることができる。
【0270】分岐方向が頻繁に変わる分岐命令に対して
は、図39(d)に示すように、フラグlikely−
nが付され、初期状態としては状態Aが設定される。一
旦Not−Taken実行が行なわれると、この命令は
分岐先レジスタの登録から外されるか、またはnot−
taken予測となる。これにより、分岐方向が頻繁に
変わる分岐命令に対し正確にその分岐方向の変化に追随
して分岐予測を行なうことができる。
【0271】分岐がほとんど発生しない分岐命令に対し
ては、図39(e)に示すように、フラグalways
−nが付される。この場合には、しきい値THとして
“4”が付される。履歴情報の初期状態は任意である。
しきい値THが“4”であるため、次回予測は常にno
t−taken予測とされる。したがって、一旦、登録
が行なわれても、次回予測はnot−taken予測で
あり、即座に分岐先バッファの登録も外されることにな
り(実施例7と組合せた場合)、ほとんど分岐しない分
岐命令がたまたま分岐を生じさせたとてしても、即座に
このような分岐命令は分岐先バッファの登録から外すこ
とができ、分岐のほとんど発生しない分岐命令に対して
も正確に分岐予測を行なうことができる。always
−nの分岐命令は、分岐先バッファに登録されないよう
に構成されてもよい。
【0272】なお、このフラグalways−t…等は
2ビットの情報を用いてそれぞれ表現することができ
る。
【0273】また、このしきい値により履歴情報を設定
する方式は、従来の複数ビット履歴方式の分岐先バッフ
ァにも適用できる。この場合には、予測しきい値と履歴
情報との比較により分岐予測が行なわれる。
【0274】以上のように、この第9の実施例に従え
ば、コンパイラを用いて分岐命令それぞれに対し分岐確
率をより詳細に反映させたしきい値を設定し、このしき
い値に従って次回の分岐予測を行なうことにより、偶発
的な分岐方向の変更による分岐命令の登録/無効化に起
因する予測ヒット率の低下を抑制することができる。
【0275】
【発明の効果】請求項1に係る発明に従えば、分岐命令
それぞれに、分岐確率の高低を示す分岐確率指示ビット
を含ませ、分岐予測ミスヒットの場合には、この分岐確
率指示部分のデータに従って分岐発生の可能性が小さい
ことを示すときには、分岐先バッファにおいて対応のエ
ントリの内容を無効化する構成としているため、分岐先
バッファには、分岐発生確率の高い分岐命令のみが格納
される可能性が高くなり、応じて分岐予測精度が高くさ
れる。
【0276】請求項2に係る発明に従えば、請求項1の
装置において、分岐予測がミスヒット時において分岐命
令が既に分岐先バッファに登録されておりかつその分岐
命令に付随する分岐確率指示部分のデータが分岐発生の
可能性の高いことを示すときには、分岐先バッファの対
応のエントリの内容を維持するように構成しているた
め、分岐発生の確率の高い分岐命令が分岐先バッファか
ら除外されるのが防止され、分岐精度の低下が抑制され
る。
【0277】請求項3に係る発明に従えば、請求項1の
装置において、分岐命令が分岐先バッファの対応のエン
トリに格納されている分岐命令と同じ命令であるか否か
を判別する同一判別手段を設け、この同一判別手段の判
別結果が不一致を示しかつその分岐命令による分岐が発
生した場合、分岐命令に付随する分岐確率指示部分のデ
ータが分岐発生の可能性が高いことを示す場合には、そ
の分岐先バッファの対応のエントリの内容を変更するよ
うに構成しているため、分岐確率の低い分岐命令により
分岐確率の高い分岐命令が書替えられるのが防止され、
分岐予測精度の低下を防止することができる。
【0278】請求項4に係る発明に従えば、命令キャッ
シュメモリと分岐先バッファのアドレスタグが共用され
る場合、命令キャッシュメモリにおいてキャッシュミス
が生じ、そのキャッシュブロックが置換される場合に
は、そのキャッシュブロックに含まれる分岐命令に対応
する分岐先バッファ内のエントリの内容は無効化するよ
うに構成しているため、分岐先バッファには使用する可
能性の低い分岐命令が存在する可能性が小さくされ、使
用される分岐命令のみが分岐先バッファに格納され、そ
れにより分岐先バッファのエントリを効率的に利用する
ことができる。
【0279】
【0280】
【0281】 請求項に係る発明に従えば、分岐命令
に含まれる分岐確率情報が分岐確率の低いことを示す場
合には、分岐発生時においてもその分岐命令の分岐先バ
ッファへの登録は禁止するように構成しているため、低
い分岐確率の分岐命令により高い分岐確率の分岐命令が
書替えられる可能性が低減され、分岐予測精度の低下が
防止される。
【0282】 請求項に係る発明に従えば、分岐命令
に分岐発生の期待値を示す情報を含ませておき、未登録
分岐命令による分岐が発生した場合、その分岐命令の予
測期待値が分岐先バッファの対応のエントリに格納され
た分岐命令の分岐期待値よりも分岐確率の高いことを示
す場合にはその未登録分岐命令を分岐先バッファの対応
のエントリに登録するように構成したため、分岐確率の
低い分岐命令が分岐確率の高い分岐命令に代えて登録さ
れる可能性が小さくなり、分岐予測精度の低下が防止さ
れる。
【0283】 請求項に係る発明に従えば、請求項
の装置において、分岐命令の予測期待値を分岐先バッフ
ァのエントリに格納された履歴情報により表現するよう
に構成しているため、分岐命令および分岐先バッファ両
者に対し余分の情報格納領域を設ける必要がなく、従来
と同様の分岐命令コードを利用することができかつ分岐
先バッファの規模の増大が防止される。また、分岐先バ
ッファの履歴情報は対応の分岐命令の実行時には更新さ
れるため、命令処理状況に応じて分岐命令の登録/削除
を行なうことができ、処理の進行状況に応じて動的に分
岐先バッファの内容を変更することができ、高い分岐予
測精度を実現することができる。
【0284】 請求項に係る発明に従えば、請求項
の装置において、分岐命令に付随する分岐期待値に従っ
て分岐命令の登録時にその履歴情報の初期値を設定する
ように構成しているため、分岐確率の低い分岐命令が分
岐先バッファに登録されてもすぐに無効とされる可能性
を高くすることができ、また分岐確率の高い分岐命令
は、分岐予測ミスヒット時においても無効とされる可能
性が低くすることができ、分岐予測精度の劣化を抑制す
ることができる。
【0285】 請求項に係る発明に従えば、分岐命令
に分岐発生の期待値を示す情報を含ませておき、未登録
分岐命令の登録時にはその分岐期待値に従って履歴情報
の初期状態値を決定して分岐先バッファの対応のエント
リに格納するように構成しているため、分岐確率の低い
分岐命令はすぐに無効とされる可能性の高い状態にかつ
分岐確率の高い分岐命令は無効とされる可能性の低い状
態に設定することができ、分岐予測程度の低下抑制す
ることができる。
【0286】 請求項1に係る発明に従えば、分岐命
令特定情報とその分岐命令の履歴情報とを互いに独立に
制御可能なバッファに格納するように構成したため、分
岐先バッファおよび分岐履歴バッファはそれぞれ通常
時、1サイクルにおいては読出動作および書込動作のい
ずれか一方のみが行なわれるだけであり、分岐先バッフ
ァが1サイクルで書込および読出を行なうアクセス競合
が生じる可能性が極めて小さくされ、命令処理性能およ
び分岐予測性能の低下が防止され、また低速動作するバ
ッファを用いてこれらのバッファを構築することができ
る。
【0287】 請求項1に係る発明に従えば、請求項
の装置において、分岐先バッファに分岐命令が登録
されているか否かに従って分岐発生の有無を予測するよ
うに構成しているため、分岐先バッファの構成は1ビッ
ト履歴方式ものと同様に簡略化される。
【0288】
【0289】 請求項1に係る発明に従えば、請求項
の装置において、分岐非発生予測かつ分岐発生実行
の場合には、分岐履歴バッファに格納される履歴情報が
初期値に設定され、分岐先バッファへのこの履歴情報の
登録は行なわれず、また分岐予測は分岐命令履歴情報を
参照しないため、この分岐履歴バッファに対する履歴情
報の初期値設定時においても分岐先バッファから読出動
作を行なって分岐予測を行なうことが可能となる。
【0290】 請求項1に係る発明に従えば、請求項
の装置において、分岐非発生予測/分岐発生実行の
場合には、その分岐命令に関連する情報を分岐先バッフ
ァの対応のエントリに格納しており、これにより未登録
分岐命令の分岐先バッファへの登録が行なわれる。この
未登録分岐命令の登録動作は、未登録分岐命令による分
岐が生じた場合だけであり、その回数は極めて少なく、
未登録分岐命令の登録によるサイクルペナルティは、全
体として小さな値に設定することができ、処理性能の低
下を防止することができる。請求項14に係る発明に従
えば、分岐先バッファと別に設けられた分岐履歴バッフ
ァに格納された分岐履歴情報が所定値に到達した場合に
は、分岐先バッファの対応のエントリに格納された分岐
命令を無効化するように構成しているため、履歴情報を
参照して分岐予測を行なうことと等価となり、複数ビッ
ト履歴方式と同じ程度の分岐予測精度を実現することが
できる。
【0291】 請求項1に係る発明に従えば、分岐命
令に分岐発生期待値を含ませておき、この分岐発生期待
値に従ってしきい値を設定し、分岐予測ミスヒット時に
おいては、履歴情報としきい値との比較結果に従って履
歴情報を設定しており、偶発的な分岐方向変化による分
岐ヒット率の低下を抑制することができる。
【0292】 請求項1に係る発明に従えば、請求項
の装置において、分岐発生予測/分岐非発生実行の
場合に、しきい値設定手段により設定されたしきい値と
対応の履歴情報とから次回の分岐命令の分岐発生の予測
値を決定し、その予測期待値を示す情報を分岐先バッフ
ァに格納しているため、登録分岐命令の分岐非発生時に
おいて、正確に次回の分岐予測を行なうことができ、分
岐予測精度の低下が防止される。
【0293】 請求項1に係る発明に従えば、請求項
の装置において、次回の分岐発生予測値は、分岐命
令の有効/無効を示す有効ビットであり、分岐先バッフ
ァに格納され、1ビット履歴情報を用いる構成により複
数ビット履歴に従って行なう分岐予測の精度とほぼ同様
の分岐予測精度を実現することができる。
【0294】 請求項18に係る発明に従えば、請求項
の装置において、分岐非発生予測/分岐発生実行の
ときには、しきい値設定手段が設定したしきい値に従っ
て履歴情報の初期値を設定しているため、その分岐命令
の分岐確率に従って分岐履歴情報の初期値を設定するこ
とができ、分岐命令の分岐確率を反映した初期状態に履
歴情報を設定することができ、分岐予測精度が改善され
る。
【0295】 請求項19に係る発明に従えば、請求項
の装置において、分岐命令に含まれる即値を用いて
分岐発生確率を示すように構成しているため、命令コー
ドの形態を何ら変更することなく、正確に分岐確率の高
低を表現することができる。
【0296】 請求項2に係る発明に従えば、請求項
の装置において、分岐発生の期待値は、分岐命令の
特定コード内に設定されるように構成しているため、分
岐命令の分岐確率をより詳細に反映してしきい値を設定
することができより高精度の分岐予測を実現することが
できる。
【0297】 請求項2に係る発明に従えば、請求項
の装置において分岐履歴情報と分岐命令特定情報と
が別々のバッファに格納するように構成しているため、
それぞれを独立に駆動することができ1サイクルで書込
および読出を1つのバッファに対して行なう必要がな
く、余裕を持って分岐情報の読出および分岐情報の書込
を(登録/更新)を行なうことができ、処理性能および
分岐予測精度の低下を抑制することができる。
【図面の簡単な説明】
【図1】 この発明の第1の実施例である命令処理装置
の全体の構成を概略的に示す図である。
【図2】 この発明の第1の実施例において用いられる
分岐命令のコードの形態を概略的に示す図である。
【図3】 この発明の第1の実施例における分岐命令の
登録/更新動作を一覧にして示す図である。
【図4】 図1に示す分岐実行ユニットおよびBTB登
録/更新決定機構の具体的構成を示す図である。
【図5】 図1に示すBTB登録/更新決定機構の他の
構成を示す図である。
【図6】 この発明の第1の実施例において用いられる
アドレスタグを説明するための図である。
【図7】 この発明の第1の実施例である命令処理装置
システムの全体の構成を概略的に示す図である。
【図8】 この発明の第2の実施例において用いられる
分岐命令の形態を概略的に示す図である。
【図9】 図8に示す即値を説明するための図である。
【図10】 この発明の第2の実施例において用いられ
るBTB登録/更新決定機構の構成を概略的に示す図で
ある。
【図11】 この発明の第3の実施例において用いられ
る分岐命令の形態を概略的に示す図である。
【図12】 この発明の第3の実施例における分岐バッ
ファの登録/更新動作を一覧にして示す図である。
【図13】 この発明の第3の実施例において用いられ
るBTB登録/更新機構の構成を概略的に示す図であ
る。
【図14】 この発明の第4の実施例において用いられ
る分岐先バッファのエントリの構成を示す図である。
【図15】 この発明の第4の実施例における分岐命令
の登録動作を示すフロー図である。
【図16】 この発明の第4の実施例における分岐命令
の登録時における分岐先バッファの構成の一例を示す図
である。
【図17】 図16に示す分岐先バッファの構成におけ
る分岐命令登録動作を制御するための構成を概略的に示
す図である。
【図18】 この発明の第4の実施例において用いられ
る分岐先バッファの他の構成を示す図である。
【図19】 図18に示す分岐先バッファの構成におい
て分岐命令の登録を行なうための制御系の構成を概略的
に示す図である。
【図20】 この発明の第5の実施例の動作を説明する
ための図である。
【図21】 この発明の第5の実施例における分岐先バ
ッファのエントリの構成を概略的に示す図である。
【図22】 この発明の第6の実施例の動作を説明する
ための図である。
【図23】 この発明の第6の実施例の動作を一覧にし
て示す図である。
【図24】 この発明の第6の実施例に従う分岐先バッ
ファの書込系の構成を概略的に示す図である。
【図25】 この発明の第7の実施例に従う命令処理装
置の分岐先バッファ書込系の構成を概略的に示す図であ
る。
【図26】 図25に示す登録更新制御ユニットおよび
BHC登録/更新決定部の構成を概略的に示す図であ
る。
【図27】 この発明の第7の実施例の動作を一覧にし
て示す図である。
【図28】 この発明の第7の実施例において用いられ
る分岐履歴カウンタの構成の一例を示す図である。
【図29】 この発明の第7の実施例において用いられ
る分岐履歴カウンタの他の構成の一例を示す図である。
【図30】 この発明の第7の実施例において用いられ
る分岐履歴カウンタのさらに他の構成の一例を示す図で
ある。
【図31】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図32】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図33】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図34】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図35】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図36】 この発明の第7の実施例の動作を示すタイ
ミングチャート図である。
【図37】 この発明の第8の実施例の命令処理装置の
要部の構成を示す図である。
【図38】 この発明の第8の実施例の動作を説明する
ための図である。
【図39】 この発明の第9の実施例の動作を説明する
ための図である。
【図40】 従来の命令処理装置におけるパイプライン
処理を説明するための図である。
【図41】 従来の命令処理装置における分岐命令にお
けるパイプラインの空きを説明するための図である。
【図42】 従来の分岐先バッファを用いる命令処理装
置の全体の構成を概略的に示す図である。
【図43】 従来の命令処理装置における分岐先バッフ
ァの更新/登録動作を示すフロー図である。
【図44】 従来の分岐先バッファを用いる命令処理装
置における履歴情報の状態遷移を示す図である。
【図45】 後方分岐命令を説明するための図である。
【図46】 従来の分岐先バッファを用いる命令処理装
置の問題点を説明するための図である。
【符号の説明】
20 分岐先バッファ、21a 分岐先バッファレジス
タ、21b デコーダ、22 比較器、24 カウント
設定回路、26 プログラムカウンタ、30 分岐実行
ユニット、32 BTB登録/更新決定機構、10 分
岐命令コード、10a 通常の分岐命令コードフィール
ド、10b 分岐確率フィールド、30a 分岐検出
部、32a 予測判定部、32b 動作識別部、32c
書込制御部、35 不一致検出器、36 ゲート、5
0 命令メモリ、52 ディレクトリ、54 タグ比較
器、56 LRU、58 BTBコントローラ、60
符号判別器、62 登録・更新実行部、64 BTB登
録/更新決定機構、10c 分岐確率フィールド、3
エントリ、70 BTB登録/更新決定機構、71,7
2 ラッチ、73 登録判別部、74 書込判別部、7
5 活性回路、76 比較器、77 書込制御部、80
分岐実行ユニット、85 ディレクトリ、86 比較
器、87 ウェイセレクタ、90 分岐予測器、92
分岐命令実行ユニット、93 登録/未登録検出部、9
4 空エントリ検出器、95 最小値検出器、96 比
較器、97書込実行ユニット、100 登録初期値設定
部、102 分岐実行ユニット、104 BTB登録/
更新決定機構、106 予測初期状態選択回路、120
分岐履歴バッファ、122 エントリ、121a 分
岐履歴カウンタステージ、121b デコーダ、122
エントリ、130 登録更新制御ユニット、140
BHC登録/更新決定部、142 予測結果識別部、1
44 動作決定実行部、146 予測値算出部、148
登録無効検出部、150 BTB登録/更新決定部、
160 2ビットアップダウンカウンタ、166 読出
回路、168 書込回路、170 ラッチ回路、172
演算回路、174出力回路、180 演算回路、19
0 分岐確率判別部、192 しきい値設定回路、19
4 比較回路、196 初期設定回路。
フロントページの続き (56)参考文献 特開 平3−250221(JP,A) 特開 平4−112327(JP,A) 特開 平6−168119(JP,A) 特開 平3−42722(JP,A) 特開 昭63−61332(JP,A) 特開 昭63−75934(JP,A) 特開 昭60−181931(JP,A) 特開 昭57−76638(JP,A) 特開 昭56−63651(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/38

Claims (21)

    (57)【特許請求の範囲】
  1. 【請求項1】 各々が、分岐命令特定情報と該分岐命令
    の有効/無効を示す有効ビットを格納する複数のエント
    リを有する分岐先バッファと、 与えられた命令が分岐命令のとき、前記分岐先バッファ
    の対応のエントリから読出した情報に含まれる有効ビッ
    トに従って前記分岐命令による分岐の発生の有無を予測
    する予測手段と、 前記分岐命令を実行し、該実行結果に従って前記予測手
    段の予想が正しかったか否かを判別する分岐判別手段と
    を備え、前記分岐命令は実行されるべき処理を示す命令
    部分と該分岐命令による分岐の発生が生じる可能性が高
    いか否かを示す分岐確率指示部分とを含み、 前記分岐判別手段の判別結果が前記予測手段により予測
    が正しくないことを示すとき、前記分岐命令に含まれる
    分岐確率指示部分のデータに従って前記分岐先バッファ
    の対応のエントリの内容を変更する変更手段を備え、前
    記変更手段は該対応のエントリ内の有効ビットが有効を
    示しかつ前記分岐確率指示部分が分岐発生の可能性が小
    さいことを示すとき前記有効ビットを無効状態に設定す
    る手段を含む、命令処理装置。
  2. 【請求項2】 請求項1記載の命令処理装置であって、
    前記変更手段は、前記分岐判別手段の判別結果が予測不
    正確であることを示しかつ前記有効ビットが有効を示し
    かつさらに前記分岐確率指示部分が分岐発生の可能性の
    高いことを示すとき、前記対応のエントリのデータを変
    更せずに維持する手段を含む、命令処理装置。
  3. 【請求項3】 請求項1記載の命令処理装置であって、
    さらに、 前記分岐命令が対応のエントリに格納された分岐命令と
    同じ命令であるか否かを判別する同一判別手段と、 前記同一判別手段の判別結果が不一致を示しかつ前記分
    岐命令による分岐が発生したとき、前記分岐発生指示部
    分が分岐発生の可能性が高いことを示すとき、前記分岐
    命令により対応のエントリの内容を変更する手段をさら
    に備える、命令処理装置。
  4. 【請求項4】 請求項1記載の命令処理装置であって、
    個々のタグアドレスにより複数の命令が同時にアドレス
    指定される命令キャッシュメモリをさらに含み、前記分
    岐先バッファは1つのタグアドレスにより同時に指定さ
    れる複数のエントリを含むように構成されかつ前記分岐
    先バッファのタグアドレスと前記命令キャッシュメモリ
    のタグアドレスとは同じであり、 さらに、前記命令キャッシュメモリにキャッシュミスが
    生じ、前記命令キャッシュメモリの内容が新たな内容で
    置換されるとき、前記キャッシュメモリの置換されるべ
    き命令群に含まれる分岐命令に対応する前記分岐先バッ
    ファ内のエントリの内容を無効化する手段をさらに備え
    る、命令処理装置。
  5. 【請求項5】 各々が、分岐命令特定情報と該分岐命令
    の有効/無効を示す有効ビットとを格納する複数のエン
    トリを含む分岐先バッファと、 与えられた命令が分岐命令のとき、該分岐命令を実行
    し、分岐が発生したか否かを示す信号を発生する分岐実
    行手段とを備え、前記分岐命令は、予め分岐が発生する
    可能性が低いか否かを示す分岐確率指示情報を含み、 前記分岐実行手段の出力信号が分岐発生を示し、かつ前
    記分岐命令の分岐発生指示情報が分岐発生の可能性が低
    いことを示すとき、前記分岐先バッファの対応のエント
    リの格納データの変更を禁止する手段を備える、命令処
    理装置。
  6. 【請求項6】 各々が、分岐命令特定情報と該分岐命令
    による分岐の発生の期待値を示す情報とを少なくとも格
    納する複数のエントリを有する分岐先バッファを備え、 与えられた命令が分岐命令のとき、前記分岐命令を実行
    し、前記分岐命令により分岐が発生したか否かを示す信
    号を発生する分岐実行手段を備え、前記分岐命令は分岐
    発生の期待値を示す情報を含み、 前記分岐命令が前記分岐先バッファに登録されているか
    否かを判別する登録判別手段と、 前記登録判別手段が前記分岐命令の前記分岐先バッファ
    における未登録を示し、かつ前記分岐実行手段の出力信
    号が分岐発生を示すとき、前記分岐先バッファの対応の
    エントリに既に別の分岐命令についての情報が有効に格
    納されているか否かを判別する有効登録判別手段と、 前記有効登録判別手段が前記別の分岐命令が有効に格納
    されていると判別したとき、前記分岐命令の予測期待値
    と前記分岐先バッファに格納された前記別の命令の予測
    期待値とを比較する比較手段と、 前記比較手段が前記分岐命令の予測期待値が前記別の分
    岐命令の予測期待値以上であることを示すとき、前記分
    岐命令を前記別の分岐命令が格納されたエントリへその
    予測期待値情報とともに書込む手段とを備える、命令処
    理装置。
  7. 【請求項7】 請求項記載の命令処理装置であって、 前記分岐先バッファの各エントリは対応の分岐命令の最
    近の分岐の履歴を示す履歴情報を含み、 前記分岐先バッファにおける予測期待値情報は前記履歴
    情報により与えられる、命令処理装置。
  8. 【請求項8】 請求項記載の命令処理装置であって、
    前記書込手段は、前記分岐命令に付随する分岐期待値情
    報に従って前記履歴情報を初期設定する手段を含む、命
    令処理装置。
  9. 【請求項9】 各々が、分岐命令特定情報と該分岐命令
    の最近の分岐の発生の有無の履歴を示す履歴情報とを少
    なくとも格納する複数のエントリを有する分岐先バッフ
    ァと、 与えられた分岐命令に関連する情報が前記分岐先バッフ
    ァに格納されているか否かを判別する判別手段と、 前記分岐命令を実行し、該実行結果に従って前記分岐命
    令による分岐が発生したか否かを示す信号を発生する分
    岐実行手段とを備え、前記分岐命令は前記分岐命令によ
    る分岐発生の予測期待値を示す情報を含み、 前記判別手段が前記分岐命令の前記分岐先バッファにお
    ける未登録を示しかつ前記分岐実行手段の出力信号が分
    岐発生を示すとき、前記分岐命令に関連する履歴情報を
    前記分岐命令の分岐予測期待値に従って決定し、前記分
    岐命令とともに該決定された履歴情報を初期状態値とし
    て前記分岐先バッファに格納する手段とを備える、命令
    処理装置。
  10. 【請求項10】 各々が、分岐命令特定情報と分岐先情
    報とを格納する複数のエントリを含む分岐先バッファ
    と、 前記分岐先バッファとは別に設けられ前記分岐先バッフ
    ァと独立に制御が可能であり、かつ前記分岐先バッファ
    の複数のエントリに対応するロケーションを有し、各前
    記ロケーションに対応のエントリに格納された分岐命令
    の最近の分岐の履歴を示す履歴情報を格納する分岐履歴
    バッファと、 与えられた分岐命令の対応のエントリの内容を前記分岐
    先バッファから読出して前記分岐命令の分岐の発生の有
    無を予測する分岐予測手段と、 前記分岐命令を実行し、該実行結果に従って前記分岐命
    令により分岐が発生したか否かを示す信号を発生する分
    岐実行手段と、 前記分岐予測手段の出力信号と前記分岐実行手段の出力
    信号とに従って、前記分岐履歴バッファの対応のロケー
    ションに格納された値を変更する変更手段とを備える、
    命令処理装置。
  11. 【請求項11】 請求項1に記載の命令処理装置であ
    って、 前記分岐予測手段は、前記分岐先バッファに前記分岐命
    令に対応する情報が格納されているか否かに従って前記
    分岐命令の分岐発生の有無を予測する手段を含む、命令
    処理装置。
  12. 【請求項12】 請求項1記載の命令処理装置であっ
    て、 前記変更手段は、前記分岐予測手段が分岐非発生を予測
    しかつ前記分岐実行手段が分岐発生を示すとき、前記分
    岐履歴バッファの対応のロケーションを初期値に設定す
    る手段を含む、命令処理装置。
  13. 【請求項13】 請求項1記載の命令処理装置であっ
    て、さらに前記分岐予測手段が分岐非発生を予測しかつ
    前記分岐実行手段が分岐発生を示すとき、前記分岐命令
    の関連する情報を前記分岐先バッファの対応のエントリ
    に格納する手段を含む、命令処理装置。
  14. 【請求項14】 各々が、分岐命令特定情報と分岐先情
    報とを格納する複数のエントリを含む分岐先バッファ
    と、 前記分岐先バッファとは別に設けられ、かつ前記分岐先
    バッファの複数のエントリに対応するロケーションを有
    し、各前記ロケーションに対応のエントリに格納された
    分岐命令の最近の分岐の履歴を示す履歴情報を格納する
    分岐履歴バッファと、 与えられた分岐命令の対応のエントリの内容を前記分岐
    先バッファから読出して前記分岐命令の分岐の発生の有
    無を予測する分岐予測手段とを備え、前記分岐予測手段
    は、前記分岐先バッファに前記分岐命令に対応する情報
    が格納されているか否かに従って前記分岐命令の分岐発
    生の有無を予測し、 前記分岐命令を実行し、該実行結果に従って前記分岐命
    令により分岐が発生したか否かを示す信号を発生する分
    岐実行手段と、 前記分岐予測手段の出力信号と前記分岐実行手段の出力
    信号とに従って、前記分岐履歴バッファの対応のロケー
    ションに格納された値を変更する変更手段とを備え、 前記変更手段は、 前記分岐予測手段が分岐発生を予測し、かつ前記分岐実
    行手段が分岐非発生を示すとき、前記分岐履歴バッファ
    対応のロケーションに格納された値を所定値減分する
    手段と、 前記対応のロケーションの値が予め定められた最小値を
    示すとき前記分岐先バッファの対応のエントリの内容を
    無効化する手段とを含む、命令処理装置。
  15. 【請求項15】 各々が、分岐命令特定情報と、該分岐
    命令の分岐の発生確率を示す情報と該分岐命令の過去の
    分岐の発生の有無の履歴を示す履歴情報を格納する複数
    の記憶位置を含む分岐情報格納手段を備え、分岐命令
    は、該分岐命令による分岐発生の期待値を示す情報を含
    み、 与えれた分岐命令の期待値情報に従ってしきい値を設
    定するしきい値設定手段と、 前記分岐情報格納手段の前記与えられた分岐命令の対応
    する記憶位置の内容に含まれる分岐確率情報に従って分
    岐発生の有無を予測する分岐予測手段と、 前記与えられた分岐命令を実行し、前記与えられた分岐
    命令による分岐が発生したか否かを判別する分岐実行手
    段と、 前記分岐予測手段の予測と前記分岐実行手段の判別結果
    とが不一致のとき、前記分岐命令の対応の履歴情報と前
    記しきい値とに従って前記対応の履歴情報の値を設定
    し、該対応の記憶位置に設定された履歴情報を書込む手
    段を含む、命令処理装置。
  16. 【請求項16】 請求項1記載の命令処理装置であっ
    て、さらに、 前記分岐予測手段の分岐発生予測と前記分岐実行手段の
    分岐非発生指示とに応答して、前記しきい値設定手段に
    より設定されたしきい値と前記対応の履歴情報とから前
    記分岐命令の分岐発生の予測値を決定して前記分岐先情
    報格納手段に前記分岐命令と関連付けて前記分岐確率情
    報として格納する手段を含む命令処理装置。
  17. 【請求項17】 請求項1に記載の命令処理装置であ
    って、 前記分岐発生予測値は、前記分岐命令の有効・無効を示
    す有効ビットである、命令処理装置。
  18. 【請求項18】 請求項1記載の命令処理装置であっ
    て、 前記履歴情報設定手段は、前記分岐予測手段が分岐非発
    生を示し、かつ前記分岐実行手段が分岐発生を示すと
    き、前記分岐命令の対応の履歴情報の初期値を前記しき
    い値に従って初期設定する手段を含む、命令処理装置。
  19. 【請求項19】 請求項1記載の命令処理装置であっ
    て、 前記分岐命令による分岐の発生を示す期待値は、前記分
    岐命令に含まれる分岐先命令のアドレスを示す即値であ
    る、命令処理装置。
  20. 【請求項20】 請求項1記載の命令処理装置であっ
    て、 前記分岐発生の期待値を示す情報は、前記分岐命令の特
    定のコード内に予め設定される、命令処理装置。
  21. 【請求項21】 前記分岐情報格納手段は、前記分岐命
    令特定情報と分岐先情報と前記分岐確率情報とを格納す
    るバッファ手段と、前記バッファ手段と独立に設けら
    れ、前記分岐命令の履歴情報をそれぞれ前記バッファ手
    段のエントリに対応して格納する履歴バッファ手段とを
    備える、請求項1記載の命令処理装置。
JP24634694A 1994-10-12 1994-10-12 命令処理装置 Expired - Fee Related JP3494484B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP24634694A JP3494484B2 (ja) 1994-10-12 1994-10-12 命令処理装置
US08/538,494 US5740415A (en) 1994-10-12 1995-10-03 Instruction supplying apparatus with a branch target buffer having the contents so updated as to enhance branch prediction accuracy

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP24634694A JP3494484B2 (ja) 1994-10-12 1994-10-12 命令処理装置

Publications (2)

Publication Number Publication Date
JPH08110857A JPH08110857A (ja) 1996-04-30
JP3494484B2 true JP3494484B2 (ja) 2004-02-09

Family

ID=17147198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP24634694A Expired - Fee Related JP3494484B2 (ja) 1994-10-12 1994-10-12 命令処理装置

Country Status (2)

Country Link
US (1) US5740415A (ja)
JP (1) JP3494484B2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
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
US5938761A (en) * 1997-11-24 1999-08-17 Sun Microsystems Method and apparatus for branch target prediction
EP1050811A1 (en) * 1999-05-03 2000-11-08 STMicroelectronics SA Branching in a computer system
US7134004B1 (en) * 1999-09-29 2006-11-07 Fujitsu Limited Processing device for buffering sequential and target sequences and target address information for multiple branch instructions
JP3723020B2 (ja) 1999-09-30 2005-12-07 富士通株式会社 分岐履歴情報の書き込み制御装置及びその方法
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6757815B2 (en) * 1999-12-23 2004-06-29 Intel Corporation Single array banked branch target buffer
US7085920B2 (en) 2000-02-02 2006-08-01 Fujitsu Limited Branch prediction method, arithmetic and logic unit, and information processing apparatus for performing brach prediction at the time of occurrence of a branch instruction
US7117347B2 (en) * 2001-10-23 2006-10-03 Ip-First, Llc Processor including fallback branch prediction mechanism for far jump and far call instructions
US20050144427A1 (en) * 2001-10-23 2005-06-30 Ip-First Llc Processor including branch prediction mechanism for far jump and far call instructions
TWI285841B (en) * 2004-07-16 2007-08-21 Samsung Electronics Co Ltd Branch target buffer, branch target buffer memory array, branch prediction unit and processor with a function of branch instruction predictions
KR100591769B1 (ko) * 2004-07-16 2006-06-26 삼성전자주식회사 분기 예측 정보를 가지는 분기 타겟 버퍼
US7426631B2 (en) 2005-02-02 2008-09-16 International Business Machines Corporation Methods and systems for storing branch information in an address table of a processor
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
JP4728877B2 (ja) * 2006-05-29 2011-07-20 エヌイーシーコンピュータテクノ株式会社 マイクロプロセッサおよびパイプライン制御方法
US7827392B2 (en) * 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US8935517B2 (en) * 2006-06-29 2015-01-13 Qualcomm Incorporated System and method for selectively managing a branch target address cache of a multiple-stage predictor
US20080040590A1 (en) * 2006-08-11 2008-02-14 Lea Hwang Lee Selective branch target buffer (btb) allocaiton
US20080040591A1 (en) * 2006-08-11 2008-02-14 Moyer William C Method for determining branch target buffer (btb) allocation for branch instructions
US8375188B1 (en) * 2007-08-08 2013-02-12 Symantec Corporation Techniques for epoch pipelining
JP2009069960A (ja) * 2007-09-11 2009-04-02 Nec Electronics Corp 分岐予測装置、分岐予測方法、及びマイクロプロセッサ
US8909907B2 (en) * 2008-02-12 2014-12-09 International Business Machines Corporation Reducing branch prediction latency using a branch target buffer with a most recently used column prediction
US7937573B2 (en) * 2008-02-29 2011-05-03 Freescale Semiconductor, Inc. Metric for selective branch target buffer (BTB) allocation
US7895422B2 (en) * 2008-02-29 2011-02-22 Freescale Semiconductor, Inc. Selective postponement of branch target buffer (BTB) allocation
US8205068B2 (en) * 2008-07-29 2012-06-19 Freescale Semiconductor, Inc. Branch target buffer allocation
US8078852B2 (en) * 2009-05-28 2011-12-13 International Business Machines Corporation Predictors with adaptive prediction threshold
US8959320B2 (en) 2011-12-07 2015-02-17 Apple Inc. Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US10747539B1 (en) 2016-11-14 2020-08-18 Apple Inc. Scan-on-fill next fetch target prediction

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5628021A (en) * 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5530825A (en) * 1994-04-15 1996-06-25 Motorola, Inc. Data processor with branch target address cache and method of operation

Also Published As

Publication number Publication date
JPH08110857A (ja) 1996-04-30
US5740415A (en) 1998-04-14

Similar Documents

Publication Publication Date Title
JP3494484B2 (ja) 命令処理装置
US5553255A (en) Data processor with programmable levels of speculative instruction fetching and method of operation
US6029228A (en) Data prefetching of a load target buffer for post-branch instructions based on past prediction accuracy's of branch predictions
US5943687A (en) Penalty-based cache storage and replacement techniques
US5758142A (en) Trainable apparatus for predicting instruction outcomes in pipelined processors
US6216219B1 (en) Microprocessor circuits, systems, and methods implementing a load target buffer with entries relating to prefetch desirability
US6170054B1 (en) Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache
US7900026B2 (en) Target branch prediction using a plurality of tables
US5805877A (en) Data processor with branch target address cache and method of operation
AU632324B2 (en) Multiple instruction preprocessing system with data dependency resolution
US7165168B2 (en) Microprocessor with branch target address cache update queue
US6119222A (en) Combined branch prediction and cache prefetch in a microprocessor
US4942520A (en) Method and apparatus for indexing, accessing and updating a memory
US5592634A (en) Zero-cycle multi-state branch cache prediction data processing system and method thereof
US5761723A (en) Data processor with branch prediction and method of operation
US20020091915A1 (en) Load prediction and thread identification in a multithreaded microprocessor
US20060236080A1 (en) Reducing the fetch time of target instructions of a predicted taken branch instruction
US5774710A (en) Cache line branch prediction scheme that shares among sets of a set associative cache
US5935238A (en) Selection from multiple fetch addresses generated concurrently including predicted and actual target by control-flow instructions in current and previous instruction bundles
JPH10177481A (ja) 改善された分岐予測機能を有するマイクロプロセッサ及びその動作方法
JPH0334024A (ja) 分岐予測の方法とそのための装置
JPH10198563A (ja) マイクロプロセッサ内の動的にロード可能なパターン履歴表
US5964869A (en) Instruction fetch mechanism with simultaneous prediction of control-flow instructions
EP1439459B1 (en) Apparatus and method for avoiding instruction fetch deadlock in a processor with a branch target address cache
US5761490A (en) Changing the meaning of a pre-decode bit in a cache memory depending on branch prediction mode

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20031104

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

Free format text: PAYMENT UNTIL: 20071121

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20081121

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees