(57)【要約】      （修正有）【課題】プロセッサの分岐予測ミスに伴うペナルティを少なくした演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】パイプライン回路は、フェッチされた命令をデコードして分岐命令の第１の分岐予測ミス判定を行い、デコードした命令をインオーダーで発行する命令デコーダと、命令デコーダが発行した分岐命令を入力して分岐命令の第２の分岐予測ミス判定を行う分岐命令処理部ＲＳＢＲと、を有する。命令デコーダは、第１の分岐予測ミス判定で分岐予測ミスが確定した場合、分岐命令の分岐予測先の命令の前記命令デコーダによる発行を抑止する。分岐命令処理部は、命令デコーダで分岐予測ミスが確定した第１の分岐命令を入力した場合、命令デコーダ以前のパイプライン状態をクリアし、命令フェッチ部に正しい分岐先の命令のフェッチを開始させ、命令デコーダによる命令の発行抑止を解除する。【選択図】図９
2020060946.tif 000002
【特許請求の範囲】
【請求項１】
命令をフェッチする命令フェッチ部と、
フェッチされた命令をデコードし、分岐命令の第１の分岐予測ミス判定を行い、デコードした命令をインオーダーで発行する命令デコーダと、
前記命令デコーダが発行した分岐命令以外の命令を処理する命令処理部と、
前記命令デコーダが発行した分岐命令を入力し、前記分岐命令の第２の分岐予測ミス判定を行う分岐命令処理部と、を有するパイプライン構造のパイプライン回路と、
前記パイプライン回路の命令処理部と分岐命令処理部が処理した命令のコミット処理をインオーダーで実行するコミット処理部とを有し、
前記命令デコーダは、前記第１の分岐予測ミス判定で分岐予測ミスが確定した場合、前記分岐命令の分岐予測先の命令の前記命令デコーダによる発行を抑止し、
前記分岐命令処理部は、前記命令デコーダで分岐予測ミスが確定した第１の分岐命令を入力した場合、前記命令デコーダ以前のパイプライン状態をクリアし、前記命令フェッチ部に正しい分岐先の命令のフェッチを開始させ、前記命令デコーダによる命令の発行抑止を解除する、演算処理装置。
【請求項２】
前記命令デコーダは、前記第１の分岐予測ミス判定で分岐予測ミスが確定しなかった場合、前記命令デコーダによる命令発行を抑止せず、
前記分岐命令処理部は、前記命令デコーダで分岐予測ミスが確定しなかった第２の分岐命令を入力した場合、前記命令デコーダ以前のパイプライン状態をクリアし、前記命令フェッチ部に正しい分岐先の命令のフェッチを開始させ、前記命令デコーダによる命令の発行を抑止し、
前記コミット処理部は、前記第２の分岐命令のコミット処理を行うとき、前記命令デコーダによる命令の発行抑止を解除する、請求項１に記載の演算処理装置。
【請求項３】
前記コミット処理部は、前記第２の分岐命令のコミット処理を行うとき、前記パイプライン回路をクリアする、請求項２に記載の演算処理装置。
【請求項４】
前記分岐命令処理部は、入力される分岐命令のエントリが生成される分岐命令キューと、前記分岐命令キューの先頭の分岐命令について前記第２の分岐予測ミス判定を行う第２の分岐予測ミス判定回路とを有する、請求項１に記載の演算処理装置。
【請求項５】
前記命令デコーダは、前記分岐命令が分岐成立するか否かと分岐先とを判定する第１の分岐判定を行い、前記第１の分岐予測ミス判定を、前記第１の分岐判定の結果と、分岐成立か否かと分岐先とを有する分岐予測情報とを比較して行い、
前記分岐命令処理部は、前記分岐命令が分岐成立するか否かと分岐先とを判定する第２の分岐判定を行い、前記第２の分岐予測ミス判定を、前記第２の分岐判定の結果と、分岐成立か否かと分岐先とを有する分岐予測情報とを比較して行う、請求項１に記載の演算処理装置。
【請求項６】
少なくとも前記命令フェッチ部と前記命令デコーダのパイプラインは、複数列のパイプライン構造を有し、前記命令フェッチ部は複数の命令を並列にフェッチし、前記命令デコーダは前記複数の命令を並列にデコードし、並列に発行する、請求項１に記載の演算処理装置。
【請求項７】
前記命令デコーダは、前記第１の分岐予測ミス判定で分岐予測ミスが確定した場合、前記並列にデコードした複数の命令に含まれる前記分岐予測先の命令の前記命令デコーダによる発行を抑止する、請求項６に記載の演算処理装置。
【請求項８】
前記分岐命令処理部は、前記コミット処理部に、前記第１の分岐命令についてはパイプライン回路のクリア要求を行わず、前記第２の分岐命令についてはパイプライン回路のクリア要求を行う、請求項３に記載の演算処理装置。
【請求項９】
命令をフェッチする命令フェッチ部と、
フェッチされた命令をデコードし、分岐命令の第１の分岐予測ミス判定を行い、デコードした命令をインオーダーで発行する命令デコーダと、
前記命令デコーダが発行した分岐命令以外の命令を処理する命令処理部と、
前記命令デコーダが発行した分岐命令を入力し、前記分岐命令の第２の分岐予測ミス判定を行う分岐命令処理部と、を有するパイプライン構造のパイプライン回路と、
前記パイプライン回路の命令処理部と分岐命令処理部が処理した命令のコミット処理をインオーダーで実行するコミット処理部とを有する演算処理装置の制御方法であって、
前記命令デコーダは、前記第１の分岐予測ミス判定で分岐予測ミスが確定した場合、前記分岐命令の分岐予測先の命令の前記命令デコーダによる発行を抑止し、
前記分岐命令処理部は、前記命令デコーダで分岐予測ミスが確定した第１の分岐命令を入力した場合、前記命令デコーダ以前のパイプライン状態をクリアし、前記命令フェッチ部に正しい分岐先の命令のフェッチを開始させ、前記命令デコーダによる命令の発行抑止を解除する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置（またはプロセッサ、CPU（Central Processing Unit）、以下プロセッサと称する）は、プログラム順に（インオーダーで）、メモリ内の命令をフェッチし、命令をデコードし、論理演算処理部等にデコードされた命令を発行する。さらに、プロセッサ内のリザベーションステーションは、インオーダーで発行された命令を、論理演算処理の準備ができた命令からアウトオブオーダーで論理演算処理部に入力し論理演算処理を行う。これにより、プロセッサは、プログラム順とは異なるアウトオブオーダーで命令を論理演算処理する。そして、プロセッサ内のコミットスタックエントリは、命令のコミット処理（完了処理）をインオーダーで行う。これにより、プロセッサは、プログラムの命令の実行効率を高める。
【０００３】
また、命令デコーダ、論理演算処理部等は、パイプライン化された回路で構成される。パイプライン化することで、プロセッサは、複数の命令をタイムシフトして並列に実行し、プログラムの命令の実行効率を高くする。近年は、クロックの高周波数化に伴い、パイプライン長が伸びる傾向にある。
【０００４】
一方、分岐命令の分岐先が確定するまで後続の命令を実行しない制御の場合、分岐先が確定するまでに必要とする時間が長くなればなるほど、何も実行できない状態が長くなる。そこで、プロセッサは、分岐命令の分岐先を予測する分岐予測器を有し、分岐命令の分岐が確定する前に分岐予測先の命令を投機的に実行する。
【０００５】
分岐命令の後続の命令を投機実行する場合、分岐が確定し分岐予測が正しいときには、性能向上につながる。但し、分岐予測が誤りのときは、分岐命令の分岐予測先の命令のパイプライン回路内の実行状態を全てキャンセルし、正しい分岐先の命令を実行する。これにより、プログラムは正常に動作する。投機実行された命令は、分岐命令がコミット（完了）するまでコミット処理されず、命令セットで定義されたアーキテクチャレジスタを更新することがないので、投機実行中の命令のパイプライン回路内の状態をキャンセルすることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２００８／０２９４５０号
【特許文献２】国際公開第２００４／０３１９４４号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
プロセッサ内の分岐命令用の実行キューであるリザベーションステーション（RSBR：Reservation Station for Branch）は、分岐命令の分岐が成立するか否かの判定と分岐先の決定を含む分岐判定を行う分岐命令処理部である。そして、RSBRは、分岐命令の分岐判定結果と分岐予測器の分岐予測とを比較して、分岐予測ミスが発生したか否かの判定を行う。
【０００８】
しかし、RSBRが分岐予測ミスを検出して分岐予測ミスが確定するまで、分岐命令の分岐予測先命令がパイプライン回路に発行され続ける。そのため、分岐予測ミスが確定した時点で、パイプライン回路内に投機実行された複数の命令の実行状態が生成されている。
【０００９】
そこで、分岐命令の後に投機実行された命令の実行状態をパイプライン回路からクリアするパイプラインクリアが行われる。パイプラインクリアの一つの方法として、コミットスタックエントリ（CSE：Commit Stack Entry）が分岐命令のコミット処理をインオーダーで実行する際に、パイプライン回路内の全ての演算状態をクリアし、正しい分岐先の命令発行を開始することが行われる。これにより、分岐命令より前の命令の実行状態がクリアされることが回避され、分岐命令の分岐予測先の投機実行されている命令の実行状態だけをクリアすることができる。
【００１０】
しかし、分岐命令より前の命令が、例えばキャッシュミスが発生するロード命令など、その命令の処理に長時間を要する場合、CSEによる分岐命令のコミット処理が遅延し、正しい分岐先の命令の発行が遅延し、プログラムの処理効率の低下を招く。
【００１１】
そこで，本実施の形態の第1の側面の目的は，分岐命令の分岐予測ミスに伴うペナルティを少なくした演算処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１２】
本実施の形態の第１の側面は，命令をフェッチする命令フェッチ部と、
フェッチされた命令をデコードし、分岐命令の第１の分岐予測ミス判定を行い、デコードした命令をインオーダーで発行する命令デコーダと、
前記命令デコーダが発行した分岐命令以外の命令を処理する命令処理部と、
前記命令デコーダが発行した分岐命令を入力し、前記分岐命令の第２の分岐予測ミス判定を行う分岐命令処理部と、を有するパイプライン構造のパイプライン回路と、
前記パイプライン回路の命令処理部と分岐命令処理部が処理した命令のコミット処理をインオーダーで実行するコミット処理部とを有し、
前記命令デコーダは、前記第１の分岐予測ミス判定で分岐予測ミスが確定した場合、前記分岐命令の分岐予測先の命令の前記命令デコーダによる発行を抑止し、
前記分岐命令処理部は、前記命令デコーダで分岐予測ミスが確定した第１の分岐命令を入力した場合、前記命令デコーダ以前のパイプライン状態をクリアし、前記命令フェッチ部に正しい分岐先の命令のフェッチを開始させ、前記命令デコーダによる命令の発行抑止を解除する、演算処理装置である。
【発明の効果】
【００１３】
第１の側面によれば，分岐命令の分岐予測ミスに伴うペナルティを少なくできる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態のプロセッサを搭載する情報処理装置の概略図である。
【図２】本実施の形態におけるプロセッサの主にコアの構成例を示す図である。
【図３】プロセッサの脆弱性を説明する図である。
【図４】分岐命令とその前後の命令列の一例を示す図である。
【図５】本実施の形態における分岐命令の実行処理のフローチャートを示す図である。
【図６】本実施の形態における分岐命令の実行処理のフローチャートを示す図である。
【図７】本実施の形態における命令デコーダの構成例を示す図である。
【図８】命令発行抑止回路の構成例を示す図である。
【図９】本実施の形態におけるRSBRの構成例を示す図である。
【図１０】命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の分岐命令に対する処理のタイミングチャートを示す図である。
【図１１】命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の分岐命令に対する処理のタイミングチャートを示す図である。
【図１２】命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の分岐命令に対する処理のタイミングチャートを示す図である。
【図１３】命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の分岐命令に対する処理のタイミングチャートを示す図である。
【図１４】パイプライン回路の動作サイクルを示す図である。
【発明を実施するための形態】
【００１５】
［本実施の形態のプロセッサ及びそれを有する情報処理装置］
図１は、本実施の形態のプロセッサを搭載する情報処理装置の概略図である。情報処理装置、HPC：High Performance Computerやスーパーコンピュータは、複数のノードそれぞれに、プロセッサCPU（Central Processing Unit）と、メインメモリM_MEMと、入出力部I/Oとを有する。各ノードのプロセッサCPUは、プロセッサ内に設けたインターコネクトI_CNCTを介して相互にパケット通信する。
【００１６】
演算処理装置であるプロセッサCPUは、複数のコアCORE_0〜CORE_nと、複数のコアで共有されるラストレベルキャッシュLL$（Last Level Cache）と、メモリへのアクセスを制御するメモリアクセス制御部MACと、他のノードのプロセッサとの間のパケット通信を制御するインターコネクトI_CNCTとを有する。各コアCOREは、後述するとおり、命令デコーダと、論理演算器と、L1キャッシュ等を有する。そして、図１のラストレベルキャッシュLL$は、例えば第２レベルキャッシュまたはL2キャッシュである。
【００１７】
図２は、本実施の形態におけるプロセッサの主にコアの構成例を示す図である。図２のプロセッサは、命令制御部として、命令フェッチ部である命令フェッチアドレス生成器I_F_ADD_GENと、L1命令キャッシュL1_ICACHEと、L2命令キャッシュL2_ICACHEと、命令バッファI_BUFと、命令デコーダI_DECと、命令デコーダが発行した複数の命令をエントリし演算器に投入するリザベーションステーションRSA, RSE, RSFを有する。また、命令制御部は、分岐命令用リザベーションステーションRSBRと、コミットスタックエントリCSEを有する。
【００１８】
更に、プロセッサは、複数の演算器として、ストレージユニットSU、固定小数点演算器FX_EXC、浮動小数点演算器FL_EXCを有する。これらの演算器は、それぞれ単一または複数個を有する。
【００１９】
ストレージユニットSUは、アドレス計算するための加減算回路を含むオペランドアドレス生成器OP_ADD_GENと、L1データキャッシュL1_D$を有する。L1データキャッシュは、キャッシュメモリに加えて、キャッシュメモリに対する制御を行うL1キャッシュ制御部L1$_CNTを有する。
【００２０】
また、固定小数点演算器FX_EXC、浮動小数点演算器FL_EXCは、例えば、加減算回路と論理演算器と乗算器などを有する。浮動小数点演算器は、例えば、SIMD（Single Instruction Multiple Data）演算ができるように、SIMD幅に対応した数の演算器を有する。プロセッサは、これらの演算器の処理結果を格納する固定小数点物理レジスタファイルFX_REGと、浮動小数点用レジスタファイルFL_REGを有する。これらのレジスタファイルは、複数のレジスタを有し、その一部は、命令コミット処理前に処理結果が格納されるリネーミングレジスタと、命令コミット処理時に処理結果が格納されるアーキテクチャレジスタである。アーキテクチャレジスタは、ソフトウエアからアクセス可能なレジスタであり、汎用レジスタである。
【００２１】
プロセッサは、更に、複数のコアで共有されるL2キャッシュL2$を有し、図示しないメモリコントローラを介してメインメモリM_MEMに接続される。また、L2命令キャッシュL2_ICACHEもメモリコントローラを介してメインメモリM_MEMに接続される。L2キャッシュL2$は、前述のラストレベルキャッシュである。
【００２２】
コア内の命令フェッチ部である命令フェッチアドレス生成器I_F_ADD_GEN、命令バッファI_BUF、命令デコーダI_DEC、リザベーションステーションRS、演算器EXCなどは、パイプライン回路を構成する。また、パイプライン回路は、複数列のパイプライン回路を有する場合、複数の命令を並列に処理することができる。
【００２３】
プロセッサ全体の構成について、パイプライン回路での命令の処理の流れに沿って以下概略を説明する。命令フェッチアドレス生成器I_F_ADD_GENがフェッチアドレスを生成し、プログラム内の実行順に（インオーダーで）、L1命令キャッシュL1_ICACHEからフェッチ命令を読み出し一旦命令バッファI_BUFに格納する。そして、命令デコーダI_DECが、命令バッファ内のフェッチ命令をインオーダーで入力しデコードし、実行に必要な情報を付加した実行可能命令（実行命令）を生成し、インオーダーで発行する。
【００２４】
次に、命令デコーダから発行された実行命令は、インオーダーで、リザベーションステーションと呼ばれるキュー構造のストレージにキューインされ蓄積される。リザベーションステーションは、実行命令をキューに蓄積する実行キューであり、命令を実行する演算器毎に設けられる。
【００２５】
リザベーションステーションは、例えば、L1データキャッシュL1$を含むストレージユニットSUに設けられた、RSA（Reservation Station for Address generation）と、固定小数点演算器FX_EXCに設けられたRSE(Reservation Station for Execution)と、浮動小数点演算器FL_EXCに設けられたRSF（Reservation Station for Floating point）とを有する。さらに、分岐予測ユニットBR_PRDに対応するRSBR(Reservation Station for Branch)を有する。
【００２６】
以下、リザベーションステーションは、適宜、省略してRSと称する。
【００２７】
そして、各ＲＳにキューインされた実行命令は、命令実行に必要な入力オペランドが前の命令の演算処理の完了処理により汎用レジスタファイルから読み出し可能であるか否か（リードアフターライト（RAW）制約が満たされるか否か）や、演算器の回路資源を使用できるか否かなど、命令の実行条件が整ったものから、順不同で（アウトオブオーダーで）演算器に投入され演算器で実行される。
【００２８】
一方、命令デコーダI_DECは、実行命令に、そのプログラム内の実行順に命令識別子（Instruction Identification: IID）を割り振り、実行命令をインオーダーでコミットスタックエントリCSE（Commit Stack Entry、以下CSEと称する）に送信する。CSEは、送信されてきた実行命令をインオーダーで格納するキュー構造のストレージと、演算器のパイプライン回路からの命令の処理完了報告に応答してキュー内の情報等に基づき各命令のコミット処理（完了処理）を行う命令コミット処理ユニットとを有する。したがって、CSEは命令のコミット処理を行うコミット処理回路（コミット処理部）である。
【００２９】
実行命令は、CSE内のキューにインオーダーで格納され、各演算器からの命令の処理完了報告を待つ。そして、上記したとおり、各ＲＳから実行命令がアウトオブオーダーで演算器に送信され、演算器により実行される。その後、命令の処理完了報告がCSEに送られると、CSEの命令コミット処理ユニットが、キューに格納された処理完了報告待ちの命令の中から処理完了報告に対応する実行命令をインオーダーでコミット処理し、レジスタなどの回路資源の更新を行う。CSEは、コミット処理でプログラムカウンタPCをインクリメントする。
【００３０】
分岐処理用のRSBRにキューインされる分岐命令は、分岐予測ユニットBR_PRDによって分岐予測され、予測結果に基づいて命令フェッチアドレス生成器I_F_ADD_GENが分岐先アドレスを生成する。これに応答して、分岐予測に基づく命令が、命令キャッシュから読み出され、命令バッファ、命令デコーダを経由して、演算器により投機的に実行される。RSBRは、分岐命令の分岐成立か否かの判定と分岐先を検出する分岐判定を行う。また、RSBRは、分岐判定結果と分岐予測回路の分岐予測とを比較し、分岐予測ミスか否かの判定を行う。
【００３１】
さらに、プロセッサのコアは、命令デコーダによる命令発行を抑止（禁止）したり抑止を解除したりする命令発行抑止回路ISU_INHを有する。命令発行抑止回路は、命令デコーダにより命令発行抑止トリガを有効（抑止状態）に制御され、RSBRまたはCSEにより無効（抑止解除状態）に制御される。
【００３２】
［プログラムの実行率の低下の例］
RSBRは、分岐命令の分岐成立か否かの判定と分岐先を検出する分岐判定を行い、分岐予測ミスか否かの判定を行う。RSBRが分岐予測ミス判定により分岐予測ミスが確定すると、パイプライン回路内の分岐予測により投機実行されていた命令の実行状態をクリアするパイプラインクリアを行う。しかし、パイプラインクリアのタイミングは、分岐命令がCSEによりコミット処理されるまで待たされる。そのため、分岐命令より前の命令の完了が遅くなると、その分パイプラインクリアが遅くなり、正しい分岐先の命令のフェッチ開始も遅くなる。その結果、プログラムの実行効率が低下する。
【００３３】
［プロセッサのセキュリティの脆弱性の例］
図３は、プロセッサの脆弱性を説明する図である。プロセッサのセキュリティの脆弱性は、例えば、以下の不正な命令列が実行された場合に生じる場合がある。
JMP C                        //分岐先Cに分岐する分岐命令//
B LOAD1 R0 [秘密値格納のアドレス] //秘密値が格納されたアドレスで投機的にロードし
レジスタR0に秘密値を格納//
A LOAD2  *[100+R0]          //レジスタR0内のアドレス（秘密値）で投機的にロードする//
上記の命令列には、分岐命令JMP Cの後ろに不正なロード命令“LOAD1”“LOAD2”が追加されている。不正なプログラムは、最初にキャッシュメモリの内容をクリアしておき、特権モード（OSモード）に遷移する（S91）。そして、プロセッサが、特権モードで、分岐命令JMP Cを実行する。分岐命令の分岐先Cが確定する前に、分岐予測先Bのロード命令LOAD1を投機的に実行する（S92）。この分岐予測先Bは分岐予測情報として不正に登録されていて、分岐命令の正しい分岐先はCであるとする。
【００３４】
プロセッサが、この誤った分岐予測先Bのロード命令LOAD1を投機的に実行すると、特権モードでしかアクセスが許可されていないプロテクトされたメモリ領域M0内の秘密値Xを読み出し、レジスタR0に格納する。このロード命令によりL1（Level-1）キャッシュメモリ内にも秘密値Xが登録される。
【００３５】
更に、秘密値Xをアクセス許可領域M1の先頭アドレス「100」に加算し（S93）、次のロード命令A LOAD2を投機的に実行する（S94）。すると、先頭アドレス[100]にレジスタR0内の秘密値Xを加算したアドレス100+Xのロード命令LOAD2が、L1キャッシュでキャッシュミスし、L2（Level-2）キャッシュにデータ要求を発行する。このデータ要求で、ユーザモードでアクセスが許可されているメモリのアクセス許可領域M1内のアドレス100+XのデータDA1が読み出される。この結果、プロセッサのL1キャッシュメモリ内のアドレス100+XのエントリにデータDA1が登録され、L1キャッシュの更新が行われる（S95）。
【００３６】
その後、プロセッサが、アドレスを変更しながら図示しないロード命令LOAD3を繰り返すと（S96）、データDA1が登録されているアドレス100+Xへのロード命令のアクセスレイテンシが他のアドレス100よりも短くなり、アドレス100+Xの内容を知ることができる。これにより、秘密値Xのセキュリティが低下する。
【００３７】
２つのロード命令LOAD1, LOAD2が投機的に実行された後、分岐命令JMP Cの実行が完了して分岐先が確定すると、分岐予測先Bが分岐予測ミスであったことが判明する。その結果、プロセッサ内のパイプライン回路で投機的に実行されたロード命令LOAD1, LOAD2が無効化され、レジスタR0の内容がクリアされる。投機実行の命令は未完了であり、リネーミングレジスタであるレジスタR0の内容はクリアされる。しかし、キャッシュメモリの内容はクリアされないため、キャッシュメモリのレイテンシに基づいて秘密値Xを獲得することができる。
【００３８】
このように、分岐命令JMPの分岐先が確定する前に、誤った分岐予測先の投機実行のロード命令LOAD1,LOAD2が実行されることと、LOAD2の実行によりキャッシュ登録状態が維持されることが、プロセッサの脆弱性の原因の一つである。分岐命令の分岐判定が遅れることは、上記の投機実行の時間が長くなり、脆弱性が高まることが懸念される。
【００３９】
［本実施の形態の演算処理装置の分岐命令の処理］
図４は、分岐命令とその前後の命令列の一例を示す図である。図４に示された命令列は、あるアドレスのデータを読み出すロード命令LOAD、ターゲットTARGETに無条件に分岐する分岐命令B、そして、分岐予測先の命令列INST_B1〜INST_B4、及び正しい分岐先の命令列INST_C1,INST_C2などを有する。分岐命令BのターゲットTARGETは、現在のプログラムカウンタPCのアドレスとの相対差分に現在のPCのアドレスを足した値を示す。つまり、分岐命令Bは、分岐先指定方式がPC相対の無条件分岐命令である。
【００４０】
尚、分岐命令は、分岐条件がない無条件分岐命令と、分岐条件がある条件分岐命令とに区分される。無条件分岐命令は、分岐条件がないので実行されると無条件に分岐先に分岐するが、条件分岐命令は、分岐条件が真の場合に分岐先に分岐する。また、無条件分岐命令の分岐先指定方法は、上記の分岐命令BのようなPC相対と、分岐先アドレスが記憶されているレジスタアドレスを指定する方法（レジスタ間接）とがある。
【００４１】
分岐命令の具体例は、例えば、次のとおりである。
B TARGET：PC相対の無条件分岐命令
BR <Xn>：レジスタXn内のアドレスに無条件分岐するレジスタ間接の無条件分岐命令
B.<cond> <label>：条件condが真の場合に分岐先を表す<label>に分岐する条件分岐命令
図４に示した命令列の場合、分岐命令B TARGETをフェッチする段階で分岐予測回路が予測済みである。そして、分岐命令B TARGETがデコーダから発行された後、RSBRにより分岐命令の分岐判定が行われ分岐予測ミス（分岐予測失敗）の判断がされるまで、つまり、分岐予測ミス確定まで、デコーダが分岐予測先の命令INST_B1とその後の命令列INST_B2〜B4の発行を継続する。そして、RSBRで分岐予測ミスが確定すると、正しい分岐先の命令INST_C1,INST_C2がフェッチ、デコードされる。そして、分岐命令Bがコミット処理され、パイプライン回路の実行状態がクリアされた後に命令デコーダが正しい分岐先の命令を発行する。
【００４２】
前述したとおり、正しくない分岐予測先の命令のパイプライン回路の実行状態を、分岐予測ミス確定後できるだけ早くクリアし、正しい分岐先の命令のフェッチとデコードと発行を出来るだけ早く行うことが望ましい。
【００４３】
本実施の形態では、命令デコーダが分岐命令の第１の分岐予測ミス判定を行い、命令デコーダで分岐予測ミスの判定ができない場合、RSBRが第２の分岐予測ミス判定を行う。第１に、PC相対の無条件分岐命令は、命令デコーダがデコードした段階で、分岐成立の判定と分岐先の検出の分岐判定が可能であり、分岐判定結果と分岐命令に添付された分岐予測情報（分岐成立か否かと分岐先）と比較することで、分岐予測ミスか否かの判定が可能である。第２に、レジスタ間接の無条件分岐命令は、分岐命令をデコードした段階で、分岐成立の判定が完了するので、分岐命令に添付された分岐予測情報の分岐成立か否かと比較することで、分岐予測ミスが確定する場合がある。第３に、分岐予測回路の分岐履歴メモリの情報に誤りがあり分岐予測情報が分岐命令に添付されてきたが、命令デコーダが分岐命令ではないと判定した場合も、分岐予測ミスが確定する。
【００４４】
本実施の形態では、（１）RSBRよりパイプラインステージが前段の命令デコーダが分岐予測ミスの確定を検出できる場合、命令デコーダが分岐命令の分岐予測先の命令の発行を抑止する。そして、RSBRが、分岐命令を処理する際に、命令デコーダ以前のパイプライン回路をクリアし、正しい分岐先の命令のフェッチを命令フェッチ部に要求し、命令デコーダの発行抑止を解除する。これにより、正しい分岐先の命令列の処理開始を早くできる。（２）命令デコーダが分岐予測ミスの確定を検出できない場合は、RSBRが分岐予測ミスの確定を検出した段階で、命令デコーダ以前のパイプライン回路をクリアし、分岐予測先命令の命令デコーダによる発行を抑止する。そして、CSEが分岐命令のコミット処理で分岐予測先命令によるパイプライン回路の状態をクリアし、命令デコーダによる発行抑止を解除する。
【００４５】
図５、図６は、本実施の形態における分岐命令の実行処理のフローチャートを示す図である。図５は、命令デコーダが分岐予測ミスを判定できた場合の処理が、図６は、命令デコーダが分岐予測ミスを判定できず、RSBRが分岐予測ミスを判定できた場合の処理が、それぞれ示される。これらのフローチャートは、後で参照される。以下、命令デコーダの構成例と、RSBRの構成例について説明した後、分岐命令の実行処理の具体例を説明する。
【００４６】
［命令デコーダの分岐判定及び分岐予測ミス判定］
図７は、本実施の形態における命令デコーダの構成例を示す図である。図７には、命令デコーダI_DECの構成と、命令発行抑止回路ISU_INHと、各種リザベーションステーションRS、RSBR、CSEとが示される。
【００４７】
命令デコーダI_DECは、命令バッファI_BUFから命令１００を入力し、命令デコード部１０内のデコード回路１１が入力された命令をデコードし、命令発行部１４がデコードされた命令１００ＤをリザベーションステーションRS,RSBRやCSEに発行する。命令１００は、分岐予測回路の分岐予測情報１０１が付加されて命令デコーダI_DECに入力され、デコードされた命令１００Ｄにも分岐予測情報１０１が付加される。分岐予測情報１０１は、分岐成立か否かの判定結果と分岐予測先とが含まれる。
【００４８】
本実施の形態では、更に、命令デコーダI_DEC内の命令デコード部１０は、デコード回路１１に加えて、分岐命令の分岐判定（分岐成立か否かと分岐先の判定）を行う分岐判定回路１２と、分岐判定D（分岐成立か否かと分岐先）１０２Ｄと分岐予測情報（分岐成立か否かと分岐予測先）１０１とを比較し、分岐予測ミスか否かを判定する分岐予測ミス判定回路１３とを有する。
【００４９】
デコード回路１１は、入力された命令１００をデコードする際に、命令１００が分岐命令であることを判別でき、その分岐命令が（１）無条件分岐命令（PC相対）か、（２）無条件分岐命令（レジスタ間接）か、（３）条件分岐命令かを判別できる。
【００５０】
そこで、分岐判定回路１２は、デコード回路１１からの上記判別結果に基づいて、（１）無条件分岐命令（PC相対）の場合、分岐成立で且つ分岐先はTARGETと判定する。また、分岐判定回路１２は、（２）無条件分岐命令（レジスタ間接）の場合、分岐成立で但し分岐先未定と判定する。さらに、（３）条件分岐命令の場合、分岐成立未定且つ分岐先未定と判定する。上記（１）と（２）の分岐判定１０２Ｄは、分岐予測ミス判定回路１３に入力される。
【００５１】
命令デコード部１０内の分岐予測ミス判定回路１３は、デコーダでの分岐判定D（分岐成立か否かと分岐先）１０２Ｄと、分岐予測回路から出力された分岐予測情報１０１の分岐成立か否かの判定と分岐先とを比較し、第１の分岐予測ミス判定を実行する。
【００５２】
上記（１）の無条件分岐命令（PC相対）の場合、分岐判定１０２Ｄは分岐成立且つ分岐先TARGETであるので、分岐予測情報１０１が分岐不成立の場合に比較結果が不一致となり、分岐予測情報１０１が分岐成立でも分岐予測先が分岐判定１０２Ｄの分岐先と異なると比較結果が不一致となり、いずれも分岐予測ミスが確定する。
【００５３】
上記（２）無条件分岐命令（レジスタ間接）の場合、分岐判定１０２Ｄは分岐成立且つ分岐先未定であるので、分岐予測情報１０１が分岐不成立の場合に比較結果が不一致となり、それ以外は分岐予測ミス未確定となる。さらに、上記（３）の条件分岐命令の場合、分岐判定は分岐予測ミス未確定となる。
【００５４】
分岐予測ミス判定回路１３は、分岐予測ミスが確定した場合、分岐予測ミス確定通知D（１０３Ｄ）を命令発行抑止回路ISU_INHに出力する。そして、命令発行部１４は、分岐命令を発行すると、分岐命令発行通知１０４を命令発行抑止回路ISU_INHに出力する。
【００５５】
［命令発行抑止回路］
図８は、命令発行抑止回路の構成例を示す図である。命令デコーダから出力された分岐予測ミス確定通知D（１０３Ｄ）と分岐命令発行通知１０４が共に有効「１」になると、AND回路３０の出力が「１」となり、OR回路３１を介してフリップフロップ３３がクロックCLKに同期して命令発行抑止トリガ３００を有効「１」状態で保持する。そして、OR回路３７を経由して、有効「１」状態の命令発行抑止トリガ３００が出力される。図７に示されるとおり、この命令発行抑止トリガ３００が有効「１」になると、命令発行部１４は命令デコーダからの命令発行を抑止（禁止）する。
【００５６】
命令発行抑止回路は、後述するRSBRが出力する命令発行抑止通知R（２０３Ｒ）が有効「１」になる場合も、OR回路３５を介してフリップフロップ３６がクロックCLKに同期して命令発行抑止トリガ３００を有効「１」状態で保持する。そして、OR回路３７を経由して、有効「１」状態の命令発行抑止トリガ３００が出力される。これにより、命令発行部１４は命令デコーダからの命令の発行を抑止（禁止）する。
【００５７】
一方、命令発行抑止回路は、後述するRSBRが出力する発行抑止解除通知R（２１２Ｒ）が有効「１」になると、AND回路３２の出力が無効「０」となり、OR回路３１を介してフリップフロップ３３がクロックCLKに同期して命令発行抑止トリガ３００を無効「０」で保持する。これにより、命令発行部１４は、命令の発行抑止状態を解除され、デコードした命令の発行を開始する。または、後述するCSEが出力する発行抑止解除通知C（４１２Ｃ）が有効「１」になると、AND回路３４の出力が無効「０」となり、OR回路３５を介してフリップフロップ３６がクロックCLKに同期して命令発行抑止トリガ３００を無効「０」で保持する。この場合も、命令発行部１４は、命令の発行抑止状態を解除され、デコードした命令の発行を開始する。
【００５８】
［RSBR］
図９は、本実施の形態におけるRSBRの構成例を示す図である。図９には、命令フェッチアドレス生成器I_F_ADD_GENと、命令デコーダI_DECと、命令発行抑止回路ISU_INHと、CSEも示される。RSBRは、命令デコーダI_DECがインオーダーで発行するデコード済の命令１００Ｄを入力する。
【００５９】
この命令１００Ｄには、分岐予測情報１０１と、命令デコーダで生成された分岐判定D（１０２Ｄ）と、分岐予測ミス確定通知D１０３Ｄとが付加される。RSBRは、命令１００Ｄに付加されている分岐判定D１０２Ｄが分岐未判定を示す場合や、分岐予測ミス確定通知D（１０３Ｄ）が分岐予測ミス未確定を示す場合、命令デコーダが命令発行抑止を実行しなかったことを検出する。
【００６０】
RSBRは、分岐命令キュー２０と分岐予測ミス判定回路２１とを有する。分岐命令キュー２０は、入力される分岐命令１００Ｄとそれに付加された情報のエントリを生成する分岐命令キューを有し、各分岐命令キューは、エントリの分岐命令１００Ｄの分岐判定を行う分岐判定回路を有する。このRSBRの分岐判定回路は、命令デコーダで分岐判定を完了できなかった場合に、分岐判定を実行し完了する。つまり、RSBRには、レジスタ間接の無条件分岐命令のレジスタ値（分岐先アドレス）を演算回路から入力し分岐先を検出する。または、RSBRは、条件分岐命令の分岐条件の演算結果を演算回路から入力し分岐成立か否かの判定と分岐先の検出を行う。
【００６１】
分岐命令キュー２０は、分岐判定された分岐命令をインオーダーで出力する。したがって、図４の分岐命令Bに着目すると、この分岐命令Bより前の分岐命令の正しい分岐先に分岐命令Bが存在する場合、分岐命令Bは正しく実行されることを意味する。分岐命令Bより前の分岐命令の正しい分岐先に分岐命令Bが存在しない場合、分岐命令Bより前の分岐命令の分岐判定の結果、分岐命令Bは分岐命令キュー２０からクリアされて、実行されることはない。したがって、分岐命令キュー２０内の先頭の分岐命令は、正しく実行されることが確定した分岐命令となる。
【００６２】
分岐命令キュー２０は、分岐命令１００Ｄとその付加情報である、分岐予測情報１０１分岐命令キュー２０、命令デコーダでの分岐判定D（１０２Ｄ）及び分岐予測ミス判定通知D（１０３Ｄ）、RSBRでの分岐判定R（１０２Ｒ）を、分岐予測ミス判定回路２１に出力する。分岐予測ミス判定回路２１は、命令デコーダで分岐予測ミスが確定していない場合、RSBRでの分岐判定１０２Ｒと分岐予測情報１０１とを比較し、第２の分岐予測ミス判定を実行する。
【００６３】
次に、分岐予測ミス判定回路２１による動作について２つの場合に分けて以下説明する。
【００６４】
（１）命令デコーダが分岐予測ミス確定通知D（１０３Ｄ）を有効（分岐予測ミス確定）にしていた場合
この場合、分岐予測ミス判定回路２１は、命令デコーダで命令発行を抑止済みであることを判別する。そして、分岐予測ミス判定回路２１は、パイプラインクリア指示２１１を命令デコーダI_DEC以前のパイプライン回路（命令デコーダ、命令バッファ、命令フェッチアドレス生成器等）に発行し、パイプラインクリアする。さらに、分岐予測ミス判定回路２１は、発行抑止解除通知R（２１２Ｒ）を命令発行抑止回路ISU_INHに発行し、命令発行抑止状態を解除すると共に、命令フェッチ要求２１３を命令フェッチアドレス生成器I_F_ADD_GENに発行し、正しい分岐先の命令のフェッチを要求する。命令フェッチ要求２１３には、分岐判定で検出した正しい分岐先情報が付加され、命令フェッチアドレス生成器はその正しい分岐先情報に基づいて、命令フェッチを開始する。
【００６５】
この場合、RSBRは、CSEに分岐命令のコミット処理でのパイプラインクリア不要を通知する。
【００６６】
（２）命令デコーダが分岐予測ミス確定通知D（１０３Ｄ）を無効（分岐予測ミス未確定）にしていた場合
この場合、分岐予測ミス判定回路２１は、命令デコーダで命令発行を抑止していないことを判別する。そして、分岐予測ミス判定回路２１は、パイプラインクリア指示２１１を命令デコーダI_DEC以前のパイプライン回路に発行し、パイプラインクリアする。さらに、分岐予測ミス判定回路２１は、分岐予測ミス確定通知R（２０３Ｒ）を命令発行抑止回路ISU_INHに発行し、命令発行抑止トリガ３００を有効（発行抑止状態）にすると共に、命令フェッチ要求２１３を命令フェッチアドレス生成器I_F_ADD_GENに発行し、正しい分岐先の命令のフェッチを要求する。
【００６７】
この場合、RSBRは、CSEに分岐命令の完了処理でのパイプラインクリア要を通知する。
【００６８】
次に、プロセッサのコアが実行する分岐命令に対する処理について、単列のパイプライン構造の第１の実施の形態と、複数列のパイプライン構造の第２の実施の形態とに分けて以下説明する。各パイプライン構造について、（１）命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の処理と、（２）命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の処理とを、以下具体的に説明する。
【００６９】
［第１の実施の形態、命令フェッチアドレス生成回路と命令デコーダが単列のパイプライン構造の場合（図１０，図１１）］
第１の実施の形態は、命令フェッチアドレス生成回路と命令デコーダ等が単列のパイプライン構造に適用した場合の分岐命令の処理について、図５，６のフローチャートと図７，８，９の命令デコーダ、命令発行抑止回路、RSBRの構成を参照しながら説明する。
【００７０】
（１）命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の処理
図１０は、命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の分岐命令に対する処理のタイミングチャートを示す図である。命令列は、図４に示した命令列で分岐命令は例えばPC相対の無条件分岐命令Bである。プロセッサは、図５の工程S11〜S15の処理を実行する。
【００７１】
図１４は、パイプライン回路の動作サイクルを示す図である。図１４に示されるとおり、
IF1,IF2は、命令フェッチアドレス生成回路での命令フェッチの第１サイクルと第２サイクルである。
D1,D2は、命令デコーダでの命令デコードの第１サイクルと第２サイクルである。
RS1,RS2は、リザベーションステーションでの第１サイクルと第２サイクルである。
E1,E2は、命令実行部の第１サイクルと第２サイクルである。
C1,C2は、CSEでのコミット処理（完了処理）の第１サイクルと第２サイクルである。
【００７２】
各動作サイクルの数は一例であり、プロセッサの構造に応じて異なる動作サイクル数になる場合があるが、いずれの動作サイクル数でも本実施の形態に適用できる。
【００７３】
図１０において、ロード命令LOAD、分岐命令B、分岐予測先の命令列INST_B1,B2,B3,B4が、それぞれ１サイクルずれて、命令フェッチサイクルIF1,IF2、命令デコードサイクルD1,D2、リザベーションステーションサイクルR1,R2、命令実行サイクルE1,E2を行う。命令実行サイクルE1,E2からコミットサイクルC1,C2までの時間は、命令の実行時間に依存して異なるが、CSEがインオーダーでコミット処理を行うので、各命令のコミットサイクルC1,C2もずれている。
【００７４】
命令デコーダが、デコードサイクルD1で、分岐命令Bについて、分岐判定し、分岐予測ミス判定で分岐予測ミスが確定する（S11)。それに応答して、命令デコーダが分岐予測ミス確定通知D（１０３Ｄ）を命令発行抑止回路ISU_INHに送信し、命令デコーダの命令発行部１４がデコードサイクルD2で分岐命令を発行すると、分岐命令発行通知１０４を命令発行抑止回路に送信する（S12）。発行された分岐命令Bは、RSBR内の命令キューにエントリを生成され、分岐命令の処理を実行される。
【００７５】
分岐命令発行通知１０４に応答して、命令発行抑止回路は、命令発行抑止トリガ３００を有効「１」にし、命令デコーダの命令発行部１４はその後の命令の発行を抑止（禁止）する（S13）。この結果、分岐命令Bの分岐予測先である命令列INST_B1〜INST_B4は、それぞれ命令フェッチされ、デコードされるが、命令デコーダからは発行されず、それらの命令のパイプライン処理は一旦停止する。
【００７６】
発行された分岐命令Bは、RSBRに入力される。RSBRは、分岐命令Bに付加されている命令デコーダの分岐予測ミス確定通知D（１０３Ｄ）が有効「１」になっていることから、命令デコーダが命令発行を抑止したことを検出する（S14）。
【００７７】
そして、RSBRの分岐予測ミス判定回路２１が、命令実行サイクルE1,E2で、パイプラインクリア指示２１１を命令フェッチアドレス生成器から命令デコーダまでのパイプライン回路に送信し、命令デコーダ以前のパイプラインをクリアする（S14）。これにより、分岐予測ミス方向の命令INST_B1〜B4のパイプライン状態がクリアされる（図中Ｘ）。更に、RSBRの分岐予測ミス判定回路２１が、発行抑止解除通知R（２１２Ｒ）を命令発行抑止回路に送信し、命令発行抑止トリガを解除し、命令デコーダの命令発行部１４の発行抑止状態を解除する（S14）。更に、RSBRの分岐予測ミス判定回路２１が、命令フェッチ要求２１３を正しい分岐先アドレスを付加して命令フェッチアドレス生成回路に送信し、正しい分岐先の命令列INST_C1,C2のフェッチを要求する。図１０の例では、正しい分岐先命令列INST_C1,C2のパイプライン回路内の状態はパイプラインクリア指示２１１によりクリアはされていないが、タイミング的にクリアされる場合もある。上記のパイプラインクリア指示２１１と、発行抑止解除通知R（２１２Ｒ）と、命令フェッチ要求２１３とは、同じ信号であってもよい。
【００７８】
また、RSBRは、分岐命令の処理が終わるとCSEに処理の終了を通知し、その際、コミット処理でパイプラインクリアは不要と通知する（S14）。これにより、CSEは、分岐命令Bのコミット処理でパイプラインクリアは行わない（S15）。
【００７９】
RSBRの命令フェッチ要求に応答して、正しい分岐先の命令INST_C1,C2の命令フェッチが開始され、命令デコーダでの発行抑止が解除済みであるので、正しい分岐先の命令INST_C1,C2は命令デコーダから発行される。
【００８０】
上記の通り、パイプライン回路のより前段の位置に設けられた命令デコーダが、分岐命令の分岐判定と分岐予測ミス判定を行い、分岐予測ミスを検出して分岐予測ミス確定となった場合、分岐命令の分岐予測先の命令列の発行を禁止する。それに伴い、RSBRが、命令デコーダ以前のパイプラインをクリアし（２１１）、RSBRによる命令フェッチ要求２１３と発行抑止解除通知２１２Ｒで、正しい分岐先命令INST_C1,C2の命令デコーダからの発行を行うことができる。つまり、分岐命令がCSEでコミット処理されるまで、正しい分岐先の命令の命令デコーダによる発行が抑止される状況を回避できる。
【００８１】
例えば、分岐命令Bより前のロード命令LOADがキャッシュミスによりメモリアクセスを実行した場合、分岐命令Bに対するCSEによるコミット処理が遅延する。しかし、上記の通り、RSBRの段階で、命令デコーダの発行抑止を解除できるので、分岐命令のコミット処理まで正しい分岐先の命令の発行が禁止されることを回避できる。その結果、プログラムの命令列の処理効率を高くできる。
【００８２】
更に、命令デコーダが分岐命令について分岐予測ミスを検出できると、分岐予測先の投機実行されている命令の命令デコーダからの発行を抑止するので、図３で説明した投機実行のロード命令LOAD1 R0の実行を抑止でき、プロセッサのセキュリティレベルを向上できる。
【００８３】
（２）命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の処理
図１１は、命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の分岐命令に対する処理のタイミングチャートを示す図である。命令列は、図４に示した命令列であるが、分岐命令は例えばレジスタ間接の無条件分岐命令や条件分岐命令である。図１１には、レジスタ間接の無条件分岐命令BRが一例として示される。プロセッサは、図６の工程S16〜S19の処理を実行する。
【００８４】
命令デコーダは、分岐命令について分岐判定と分岐予測ミス判定を行うが、分岐予測ミスを判定できない（S16）。例えば、分岐命令がレジスタ間接の無条件分岐命令BRで、レジスタのアドレスの読み出しが完了していない場合、または、分岐命令が条件分岐命令で、条件の演算結果が完了していない場合、命令デコーダは第１の分岐予測ミス判定で分岐予測ミス確定通知Ｄ（１０３Ｄ）を出力できない。そのため、命令デコーダは、分岐命令の分岐予測先の命令INST_B1, B2,B3の発行を継続する。
【００８５】
次に、RSBRは、サイクルRS1およびRS2で、分岐命令キューの先頭になった分岐命令BRについて処理する。つまり、分岐命令キューの先頭であることは、分岐命令BRがそれより前の分岐命令の正しい分岐先の分岐命令であることを意味する。
【００８６】
RSBRは、分岐命令に付加された情報に基づいて命令デコーダでの分岐予測ミスを判定できなかったこと（分岐予測ミス未確定）を検出し、分岐判定して分岐命令の分岐成否と分岐先を検出し、第２の分岐予測ミス判定を行い分岐予測ミスか否かを判定する（S17）。RSBRは、レジスタ間接の無条件分岐命令についてのレジスタの分岐先を、また、条件分岐命令についての条件の演算結果を、それぞれ演算器から受信済みであり、分岐予測ミス判定を行うことができる。
【００８７】
RSBRは、命令実行サイクルE1およびE2で、分岐予測ミス判定で分岐予測ミスを検出すると、命令フェッチアドレス生成器から命令デコーダのパイプライン回路をクリアし（２１１）、分岐予測ミス確定通知Ｒ（２０３Ｒ）を命令発行抑止回路に出力して発行抑止トリガを有効「１」にして命令デコーダによる命令発行を禁止し、命令フェッチ要求（２１３）を命令フェッチアドレス生成器に出力して正しい分岐先の命令のフェッチを開始させる（S18）。これにより、命令INST_B4の命令デコーダ以前のパイプライン回路がクリアされ（図中Ｘ）、正しい分岐先の命令INST_C1がフェッチされ、命令デコーダでデコードされ、命令発行部で発行抑止（禁止）状態にされる。
【００８８】
RSBRは、分岐命令BRの処理が終了すると、CSEに処理終了を通知し、その際、コミット処理でのパイプラインクリアを要求する（S18）。そして、分岐命令BRは、先行するロード命令のコミット処理（サイクルC1,C2）が行われるまで、コミット処理待ち状態となる。その後、ロード命令のコミット処理後に、分岐命令BRはCSEによりコミット処理される。
【００８９】
CSEは、分岐命令BRのコミット処理を行う（S19）。分岐命令BRのコミット処理で、CSEは、パイプラインクリア４１１Ｃを発行してパイプライン回路内の分岐予測先の命令INST_B1,B2,B3の状態をクリア（図中Ｘ）し、プログラムカウンタPCを正しい分岐先命令INST_C1のアドレスに変更し、発行抑止解除通知Ｃ（４１２Ｃ）を命令発行抑止回路に出力して命令発行抑止トリガ３００を無効化（抑止解除状態）にする。これにより、発行待機中の正しい分岐先命令INST_C1,C2の命令デコーダからの発行が開始される。
【００９０】
上記のとおり、命令デコーダが分岐命令BRの分岐予測ミスを判定できない場合、RSBRが、本来行うべき分岐命令の分岐判定と分岐予測ミス判定を行う。そして、RSBRは、分岐予測ミスを検出すると、分岐予測先の命令のフェッチに代えて、正しい分岐先命令のフェッチを開始し、命令デコーダでの発行を禁止した状態で待機させる。その後、CSEが分岐命令BRのコミット処理を行う際に、パイプラインクリアし、命令デコーダによる命令の発行抑止を解除し、命令デコーダによる正しい分岐先命令の発行を開始する。この場合は、正しい分岐先命令の発行は、分岐命令のCSEによるコミット処理まで待たされる。
【００９１】
［第２の実施の形態、命令フェッチアドレス生成回路と命令デコーダが複数列のパイプライン構造の場合（図１２，図１３）］
第２の実施の形態は、命令フェッチアドレス生成回路と命令デコーダ等が複数列（４並列）のパイプライン構造に実施の形態が適用された場合の分岐命令の処理について説明する。図５，６のフローチャートと図７，８，９の命令デコーダ、命令発行抑止回路、RSBRの構成を参照しながら説明する。
【００９２】
（１）命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の処理
図１２は、命令デコーダが分岐予測ミスを判定して分岐予測ミスが確定した場合の分岐命令に対する処理のタイミングチャートを示す図である。図１２のタイミングチャートでは、パイプラインが４並列構造であるため、命令フェッチIF1,IF2、命令デコードD1,D2、リザベーションステーションの処理RS1,RS2、命令実行処理E1,E2が４並列で行われる。但し、命令デコーダの処理と、RSBRの処理と、CSEの処理は、第１の実施の形態の図１０のタイミングチャートと同じである。したがって、図１２での処理について、図１０の処理と異なる処理を主に説明する。
【００９３】
図１２に示されるとおり、ロード命令LOAD、PC相対の無条件分岐命令B、分岐予測先命令INST_B1,B2の４つの命令が並列にフェッチされ（IF1,IF2）、並列に命令デコードされる（D1,D2）。命令デコーダは、分岐命令BRについて分岐判定と第１の分岐予測ミス判定を行い、分岐予測ミスを検出し、分岐予測ミスが確定する（S11）。
【００９４】
命令デコーダは、分岐予測ミスが確定したことに応答して、４並列で処理中の分岐命令Bより後ろの命令INST_B1,B2の命令デコーダからの発行を抑止する。この処理は、図１０の処理と異なる。命令デコーダは、例えばサイクルD1で分岐予測ミスを検出し、サイクルD2での後ろの命令INST_B1,B2の命令デコーダからの発行を抑止する。この発行抑止は、命令発行抑止トリガ３００にはよらない。但し、命令発行抑止回路がサイクルD2で後ろの命令の発行を抑止できる場合は、命令発行抑止トリガ３００で発行抑止してもよい。
【００９５】
さらに、命令デコーダは、分岐予測ミス確定通知Ｄ（１０３Ｄ）を命令発行抑止回路に出力する（S12）。これに応答して、命令発行抑止回路が命令発行抑止トリガ３００を有効（抑止状態）にする（S13）。これに応答して、次のサイクルでフェッチされた４つの命令以降の命令デコーダによる発行が禁止される。この処理は、図１０の処理と同じである。命令発行抑止トリガ３００が有効（抑止状態）になることで、命令INST_B3,B4の命令デコーダによる発行は禁止される。
【００９６】
RSBRは、分岐命令Bを処理し、図１０と同様に、命令実行サイクルE1,E2で分岐予測ミス確定を検出すると、パイプラインクリア指示２１１、発行抑止解除通知Ｒ（２１２Ｒ）、命令フェッチ要求２１３をそれぞれ出力する（S14)。これにより、命令デコーダで発行抑止されていた命令INST_B1〜INST_B4の命令デコーダ以前のパイプラインがクリアされる（図中Ｘ）。さらに、正しい分岐先命令INST_C1,C2が、フェッチされ、命令デコーダから発行され、発行された命令それぞれの演算が実行される。CSEは、分岐命令BRのコミット処理でパイプラインクリアは行わない（S15）。
【００９７】
（２）命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の処理
図１３は、命令デコーダが分岐予測ミスを判定できず分岐予測ミスが未確定だった場合の分岐命令に対する処理のタイミングチャートを示す図である。この場合、命令デコーダは、分岐命令BRについて分岐予測ミス予測を検出できない（S16）。つまり、分岐命令BRは分岐予測ミス未確定状態のままである。
【００９８】
そして、RSBRは、分岐命令BRについて、分岐命令に付加された分岐予測ミス判定の情報から、分岐予測ミス確定であることを検出し、分岐判定と分岐予測ミス判定を行う（S17）。RSBRが、命令実行サイクルE1,E2で分岐予測ミスを検出すると、命令デコーダ以前のパイプラインをクリアし、命令フェッチアドレス生成器に命令フェッチ要求を出力して、正しい分岐先命令のフェッチを開始させ、分岐予測ミス確定通知Ｒ（２０３Ｒ）を命令発行抑止回路に出力して、命令デコーダによる命令発行を禁止する（S18）。
【００９９】
そして、分岐命令の処理が終了しRSBRがCSEに処理終了を通知し、その後、CSEがロード命令のコミット処理を行った後、分岐命令のコミット処理を行う。このコミット処理で、CSEは、パイプラインクリア４１１を出力し、分岐命令BRの後ろの分岐予測ミスの命令のパイプライン回路の状態をクリアする（図中Ｘ）。さらに、CSEは、発行抑止解除通知Ｃ（４１２Ｃ）を出力して、命令発行抑止回路の命令発行抑止トリガを解除させ、命令デコーダによる命令発行を開始させる（S19）。これにより、正しい分岐先命令は命令デコーダから発行される。
【０１００】
以上説明したとおり、本実施の形態によれば、命令デコーダが分岐命令について分岐予測ミスを検出できると、分岐命令の分岐予測先の命令の命令デコーダによる発行を抑止し、RSBRによって正しい分岐先命令の命令デコーダによる発行が開始されるので、プロセッサのプログラムの命令列の処理効率を高めることができる。
【０１０１】
また、図３で説明した、悪意の投機実行されるロード命令LOAD1 R0などの実行を抑止することができ、プロセッサのセキュリティレベルを高めることができる。
【符号の説明】
【０１０２】
I_F_ADD_GEN：命令フェッチアドレス生成回路、命令フェッチ部
I_DEC：命令デコーダ
ISU_INH：命令発行抑止回路
RSA,RSE,RSF：リザベーションステーション
FX_EXC, FL_EXC：論理演算処理部、演算器、演算処理部
RSBR：分岐命令用リザベーションステーション。分岐命令処理部
CSE：コミット処理部
PC：プログラムカウンタ
BR_PRD：分岐予測回路
【図１】
2020060946.tif 000003
【図２】
2020060946.tif 000004
【図３】
2020060946.tif 000005
【図４】
2020060946.tif 000006
【図５】
2020060946.tif 000007
【図６】
2020060946.tif 000008
【図７】
2020060946.tif 000009
【図８】
2020060946.tif 000010
【図９】
2020060946.tif 000011
【図１０】
2020060946.tif 000012
【図１１】
2020060946.tif 000013
【図１２】
2020060946.tif 000014
【図１３】
2020060946.tif 000015
【図１４】
2020060946.tif 000016