(57)【特許請求の範囲】
【請求項１】
少なくとも命令の記憶元からの命令の取得と前記取得した命令の実行とを繰り返すコンピュータの前記取得において複数命令を取得する取得部と、
前記コンピュータによって次の実行で実行される命令が分岐命令であるか否かを過去に実行された命令の履歴情報にしたがって予測する分岐命令予測部と、
前記取得された命令の少なくとも１つを前記実行で実行する実行部と、を備え
前記分岐命令予測部は、
前記実行された命令または前記取得された命令に含まれる分岐命令の分岐先アドレスを、前記命令の記憶元を参照するための命令アドレスから決定される複数のウェイのいずれかに前記履歴情報として記憶する履歴記憶部と、
実行された分岐命令の分岐先アドレスまたは前記取得で取得された分岐命令の分岐先アドレスを前記履歴情報として記憶すべき場合に、前記複数のウェイのいずれかを選択するための選択情報を参照してウェイを選択する選択部と、
選択されたウェイに前記分岐先アドレスを記憶する記憶制御部と、
前記ウェイへの記憶に対応して前記選択情報を更新する更新部と、を有し、
前記選択部は、分岐命令を含む命令の取得から前記取得した命令の実行の完了までに前記ウェイに格納すべき分岐先アドレスが複数ある場合に、前記複数の分岐先アドレスのうちの第１の分岐先アドレスを前記ウェイに記憶したときに前記更新部によって更新された後の前記選択情報にしたがって、前記複数の分岐先アドレスのうちの第２の分岐先アドレスのウェイを選択し、
前記履歴記憶部は、前記第１の分岐先アドレスと前記第２の分岐先アドレスとを前記選択されたウェイにそれぞれ記憶する演算処理装置。
【請求項２】
前記選択情報は、前記命令アドレスよって決定される前記複数のウェイへの書き込み順を指定する、複数のウェイのそれぞれに対して１ビットの書き込み順情報を含み、
前記選択部は、前記書き込み順情報にしたがって前記分岐先アドレスのウェイを選択する請求項１に記載の演算処理装置。
【請求項３】
前記選択部は、前記ウェイに格納すべき分岐先アドレスが複数ある場合で、かつ、第１の分岐先アドレスが前記履歴記憶部によって前記いずれかのウェイから検索されたもので
ある場合に、そのウェイを第１のウェイとするとともに、前記選択情報にしたがって第２のウェイを選択する請求項１または２に記載の演算処理装置。
【請求項４】
前記選択部は、前記ウェイに格納すべき分岐先アドレスが複数ある場合で、かつ、第１の分岐先アドレスが前記履歴記憶部によって前記いずれかのウェイから検索されたものでない場合に、前記選択情報にしたがって第１のウェイを選択するとともに、前記選択情報を更新し、前記更新された選択情報にしたがって第２のウェイを選択する請求項１または２に記載の演算処理装置。
【請求項５】
前記選択情報は、前記複数のウェイごとにその格納内容が有効か無効かを示すフラグ情報を有し、
前記選択部は、前記フラグ情報によって格納内容が無効であると示されているウェイを優先して選択する請求項１から４のいずれかに記載の演算処理装置。
【請求項６】
少なくとも命令の記憶元からの命令の取得と前記取得した命令の実行とを繰り返す演算処理装置が有する取得部が前記取得で複数命令を取得し、
前記演算処理装置が有する分岐命令予測部が、前記演算処理装置によって次の実行で実行される命令が分岐命令であるか否かを過去に実行された命令の履歴情報にしたがって予測し、
前記演算処理装置が有する実行部が、前記取得された命令の少なくとも１つを前記実行で実行し、
さらに、前記分岐命令予測部が、
実行された分岐命令の分岐先アドレスまたは前記取得で取得された分岐命令の分岐先アドレスを前記履歴情報として記憶すべき場合に、前記複数のウェイのいずれかを選択するための選択情報を参照してウェイを選択し、
前記選択されたウェイに前記分岐先アドレスを記憶し、
前記ウェイへの記憶に対応して前記選択情報を更新し、
さらに、前記選択において、分岐命令を含む命令の取得から前記取得した命令の実行の完了までに前記ウェイに格納すべき分岐先アドレスが複数ある場合に、前記複数の分岐先アドレスのうちの第１の分岐先アドレスを前記ウェイに記憶したときに前記更新された後の前記選択情報にしたがって、前記複数の分岐先アドレスのうちの第２の分岐先アドレスのウェイを選択し、前記第１の分岐先アドレスと前記第２の分岐先アドレスとを前記選択されたウェイにそれぞれ記憶する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータの分岐予測機構に関するものである。
【背景技術】
【０００２】
コンピュータの分岐予測機構は、過去に実行された命令のメモリ上での記憶アドレス（以下、命令アドレスという）を基に分岐命令の実行履歴を管理することによって、次に分岐命令が実行される場合の分岐先を予測していた。【０００３】
その場合、分岐予測機構は、過去に記憶元から分岐命令が取得（命令をフェッチするという）された命令アドレス（分岐元アドレス）の一部からセットアソアシアティブ方式の記憶装置のセットを決定する。そして、分岐予測機構は、分岐元アドレスのさらに他の部分をタグにして、当該セット内の１つのウェイに分岐先アドレスを記憶しておく。【０００４】
そして、分岐予測機構は、命令のフェッチ段階で命令アドレスを利用して、上記記憶装置を検索する。そして、過去に実行済みの分岐命令で、その分岐先アドレスが記憶装置に記憶されている場合には、分岐予測機構は、その命令アドレスが命令は分岐命令であり、さらに、その分岐先への分岐が発生すると予測する。【０００５】
そして、分岐予測機構は、該当するセット内のタグの内容がフェッチ中の命令アドレスの部分（タグに格納されるべき部分）と一致するウェイから分岐先アドレスを入手する。このようにして、分岐予測機構は、命令のフェッチと並行して、その命令が分岐命令であるか否か（分岐元の命令アドレスの部分をタグにして分岐先アドレスが記憶されているか否か）を判定することができる。【０００６】
さらに、この技術では、コンピュータは、命令が分岐命令であった場合に予測される分岐先アドレスを入手できる。したがって、コンピュータがパイプライン処理を行っている場合であっても、現在の命令フェッチと並行して、事前に予測される分岐先から次のステージでの命令フェッチを準備することができる。【０００７】
そして、現在フェッチ中の命令から得られた分岐先が予測された分岐先であった場合には、パイプライン処理を止めることなく各ステージを並列動作できる。一方、現在フェッチ中の命令から得られた分岐先が予測された分岐先でなかった場合には、正しい分岐先から命令フェッチを再開することになる。現在フェッチ中の分岐命令の命令アドレスに対応して上記記憶手段に分岐先が記憶されていなかった場合（分岐予測がヒットしなかったが分岐命令が実行された場合）も、分岐予測を利用できず、フェッチ後の分岐命令をデコードして得られた分岐先アドレスから命令フェッチを再開することになる。【０００８】
このような従来の分岐予測機構への分岐先アドレスの登録においては、例えば、分岐元アドレスが上記記憶装置に記憶されていた場合（アドレスがヒットしたという）、分岐先アドレスとともにヒットしたウェイの番号を分岐命令に付加していた。そして、分岐命令の実行結果にしたがい、その番号のウェイに存在するデータを更新していた。すなわち、例えば、分岐予測が正しかった場合で、次にも同様にその分岐先に分岐する可能性が高い場合には、分岐予測機構は、そのウェイの情報を維持するとともに、そのウェイの情報が極力長期に保持されるように管理情報を更新していた。
また、アドレスがヒットしなかったにも拘わらず（分岐予測が外れて）、実際に分岐が発生し、分岐先を新たに記憶装置に記憶するべき場合には、分岐予測機構は、管理情報により予め決定されていた新規登録すべきウェイにその分岐先を記憶するとともに、そのウェイの情報が極力長期に保持されるように管理情報を更新していた。【０００９】
本出願人は、すでに、このようなウェイの管理（分岐元アドレスから決定されるセット内において、どのウェイを優先的に保持すべきか）を効率的に実施するための提案を行っている（下記特許文献１参照）。この技術では、各ウェイにリプレースフラグおよびバリッドフラグという情報をそれぞれ１ビット設け、分岐先アドレスが新たに書き込まれたウェイへの次の書き換えが極力遅くなるように対応するリプレースフラグが更新される。【００１０】
そして、新たに記憶すべき分岐先が発生した場合、現在の１組のリプレースフラグ（ウェイの数に対応するビットパターン）によって、次に記憶すべきウェイ（そのウェイの現在の分岐予測先情報は破棄されることになる）が決定されていた。【００１１】
ところが、１回のフェッチにおいて、複数命令、例えば、４命令をフェッチする方式のコンピュータでは、以下のような問題が生じる。すなわち、その４命令中に複数の分岐命令が含まれている場合があり、そのいずれをも記憶装置に記憶する必要が生じる場合がある。これは、典型的には、例えば、４命令中で最初に現れた分岐命令が実行されず、第２番目に表れた分岐命令が実行された場合である。そのような場合、一般的には、実際に分岐が発生した分岐先が記憶装置登録される。【００１２】
しかしながら、他の事情、例えば、グローバルヒストリによって分岐予測を行う分岐予測機構では、実際に分岐が発生した分岐先の他に、分岐が発生しなかった分岐先アドレスを記憶する必要が生じる場合がある。一例としては、２つの分岐命令によって２重のループが形成されている場合、グローバルヒストリによれば、現在実行されなかった分岐先が将来実行される分岐先として記憶手段に記憶される対象となる。なお、グローバルヒストリに関しては、本出願人によってすでに提案がなされている（下記特許文献２参照）。【００１３】
同様に、スーパースカラマシンのように、複数本のパイプラインを備え、複数命令を同時にデコード／実行する場合にも、複数の分岐命令が同一のステージで検索される可能性がある。すなわち、それら複数の分岐命令の命令アドレスから生成されるセットが一致し、セット内のウェイを競合する場合がある。【００１４】
また、複数命令をフェッチする方式でなくても、分岐予測が外れた場合で、グローバルヒストリから予測された分岐先と実際の分岐先の両方を記憶すべき場合もある。
【特許文献１】特開２００４−３８２９８号公報
【特許文献２】特開２００４−３８３２３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
上述のように、複数の分岐命令による複数の分岐先を記憶装置に記憶するとともに、リプレースフラグを管理すべきである。しかし、従来の技術では、次に新たな分岐先を格納できるウェイは１つだけ選択されていたため、１回の命令フェッチの結果について、複数の分岐先を記憶装置に記憶することができなかった。すなわち、複数の分岐先を新たに記憶装置に記憶する場合に、適切に複数のウェイを選択できていなかった。さらに困難な問題としては、そのような複数のウェイを選択する場合に、新たに書き換えられた複数のウェイの情報（分岐先アドレス）が極力長期間保持されるように、管理する技術は提案されていなかった。【００１６】
したがって、複数の分岐先アドレスを記憶装置に登録する必要がある場合に、どちらかの情報が欠落する可能性があった。すなわち、分岐先がヒットしなかった場合、あるいは、分岐先の予測が外れた場合で、複数の分岐先を登録すべき場合に、情報の欠落が発生し、分岐予測の性能を低下させる原因となっていた。また、分岐先がヒットしたがグローバルヒストリによって複数の分岐先の登録が必要となる場合も同様である。本発明の目的は、このような従来の技術の問題を解決することにある。
【課題を解決するための手段】
【００１７】
本発明は前記課題を解決するために、以下の手段を採用した。すなわち、本発明は、少なくとも命令の記憶元から命令を取得する取得段階と前記命令を処理する実行段階とを含む実行サイクルを繰り返す、そのようなコンピュータの前記取得段階で複数命令を取得する取得部と、前記コンピュータによって次の実行段階で実行される命令が分岐命令であるか否かを過去に実行された命令の履歴情報にしたがって予測する分岐命令予測部と、前記取得された命令の少なくとも１つを前記実行段階で実行する実行部と、を備え前記分岐命令予測部は、前記実行された分岐命令の分岐先アドレスを、前記分岐命令の記憶元を参照するための命令アドレスから決定される複数の格納先のいずれかに前記履歴情報として記憶する履歴記憶部と、実行された分岐命令の分岐先アドレスまたは前記取得段階で取得された分岐命令の分岐先アドレスを前記履歴情報として記憶すべき場合に、前記複数の格納先のいずれかを選択するための選択情報を参照して格納先を選択する選択部と、選択された格納先に前記分岐先アドレスを記憶する記憶制御部と、前記格納先への記憶に対応して前記選択情報を更新する更新部と、を有し、前記選択部は、前記格納先に格納すべき分岐アドレスが複数ある場合に、第１の分岐先アドレスを前記格納先に記憶したときに前記更新手段によって更新された後の前記選択情報にしたがって第２の分岐先アドレスの格納先を選択するコンピュータの分岐予測装置である。【００１８】
本発明によれば、第１の分岐先アドレスを前記格納先に記憶したときに生じる前記更新手段による更新の後の前記選択情報にしたがって第２の分岐先アドレスの格納先を選択するので、１回の実行サイクルにおいて複数の分岐先アドレスを登録する必要がある場合にも、選択情報にしたがった適正な格納先に格納できる。なお、ここで命令を処理するとは、命令に従った所定の処理を実行することをいい、例えば、条件付き分岐命令の場合には、条件の判定と判定結果に基づく分岐先への分岐または分岐しない処理を含む。【００１９】
前記選択情報は、前記命令アドレスによって決定される前記複数の格納先への書き込み順を指定する、複数の格納先のそれぞれに対して１ビットの書き込み順情報を含み、前記選択部は、前記書き込み順情報にしたがって前記分岐先アドレスの格納先を選択するようにしてもよい。本発明によれば、複数の格納先のそれぞれに対して１ビット書き込み順情報によって格納先を選択できる。【００２０】
前記履歴記憶部は、前記命令の取得段階において取得中の命令アドレスにしたがって前記複数の格納先からその命令が分岐命令であった場合の分岐先アドレスを検索し、前記選択部は、前記格納先に格納すべき分岐アドレスが複数ある場合で、かつ、第１の分岐先アドレスが前記履歴記憶部によって前記いずれかの格納先から検索されたものである場合に、その格納先を第１の格納先とするとともに、前記選択情報にしたがって第２の格納先を選択するようにしてもよい。【００２１】
本発明によれば、複数の分岐先アドレスを格納する必要がある場合に、すでにいずれかの格納先から分岐アドレスが検索されていた場合には、その格納先を第１の格納先とし、さらに、前記選択情報にしたがって、第２の格納先を選択できる。【００２２】
前記選択部は、前記格納先に格納すべき分岐アドレスが複数ある場合で、かつ、第１の分岐先アドレスが前記履歴記憶部によって前記いずれかの格納先から検索されたものでない場合に、前記選択情報にしたがって第１の格納先を選択するとともに、前記選択情報を更新し、前記更新された選択情報にしたがって第２の格納先を選択するようにしてもよい。【００２３】
本発明によれば、複数の分岐先アドレスを格納する必要がある場合に、すでにいずれかの格納先から分岐アドレスが検索されていない場合には、選択情報にしたがって第１の格納先を選択するとともに、その選択にともなって選択情報を更新した上で、第２の格納先を選択できる。したがって、複数の分岐先アドレスを適正な格納先に格納できる。【００２４】
前記選択情報は、前記複数の格納先ごとにその格納内容が有効か無効かを示すフラグ情報を有し、前記選択部は、前記フラグ情報によって格納内容が無効であると示されている格納先を優先して選択するようにしてもよい。格納内容が無効な格納先を優先して選択することで、効率的に格納先を管理できる。
【発明の効果】
【００２５】
本発明によれば、複数の分岐先アドレスを記憶装置に登録する必要がある場合に、情報が欠落することなく、分岐予測の性能低下を抑制できる。
【図面の簡単な説明】
【００２６】
【図１】本処理装置が有する４ウェイ・セット・アソシアティブ方式の分岐予測装置の概略構成を説明するための図（その１）である。
【図２】本処理装置が有する４ウェイ・セット・アソシアティブ方式の分岐予測装置の概略構成を説明するための図（その２）である。
【図３】分岐履歴記憶装置のセットを構成する各ウェイの構成を説明するための図である。
【図４】置換対象ウェイ選択部の概略構成を示す図である。
【図５】リプレースフラグによってウェイを選択する論理を説明するための図である。
【図６】無効なウェイが選択された場合に、リプレースフラグの反転の有無を決定する論理を示す図である。
【図７】分岐予測装置を含む処理装置のシステム構成図である。
【図８】１６バイト単位でフェッチされた命令中で２つの分岐命令が存在する場合に、分岐予測の発生パターンを示す図である。
【図９】分岐命令の実行結果と、次の分岐命令の分岐予測結果との組合せを示す図である。
【図１０】２つの分岐命令が存在し、１つ目がヒットした場合の分岐命令の実行結果と、次の予測結果の組合せを示す図である。
【図１１】２つの分岐命令が存在し、２つ目がヒットした場合の分岐命令の実行結果と、次の予測結果の組合せを示す図である。
【図１２】分岐が予測されなかった場合の実行結果と次の予測との組合せのパターンを示す図である。
【図１３】分岐予測装置で実行される分岐履歴検索処理の概要を示す図である。
【図１４】リプレースフラグにしたがって２つのウェイを選択する処理の詳細を示す図である。
【図１５】２つの無効ウェイ選択処理の詳細を示す図である。
【図１６】無効ウェイと有効ウェイ選択処理の詳細を示す図である。
【図１７】有効な２つのウェイ選択処理の詳細を示す図である。
【図１８】分岐命令格納処理のフローチャートである。
【図１９】変形例に係る分岐予測装置で実行される分岐履歴検索処理の概要を示す図である。
【符号の説明】
【００２７】
１０１  アドレス生成ユニット
１０２  命令キャッシュ
１０３  デコーダ
１２０  演算ユニット
１２１  主記憶装置
１２２  プログラムカウンタ
１２３  命令フェッチ制御ユニット
１２４  命令キャッシュ制御ユニット
１２６  分岐リザベーションステーション
１２７  その他リザベーションステーション
１２８  命令完了管理ユニット
１２９  オペランドキャッシュ
１３０  分岐履歴記憶装置
１３１  データキャッシュ制御ユニット
１４０  グローバルヒストリ
【発明を実施するための最良の形態】
【００２８】
以下、図面を参照して本発明の実施の形態に係る処理装置を説明する。【００２９】
《第１実施形態》
以下、図１から図７の図面に基づいて本発明の第１実施形態に係る処理装置を説明する。【００３０】
図１および図２は、本処理装置が有する４ウェイ・セット・アソシアティブ方式の分岐予測装置１００の概略構成を説明するための図である。また、図７は、図１および図２に示した分岐予測装置１００を組み込んだ処理装置のシステム構成図である。【００３１】
図１および図２に示すように、分岐予測装置１００は、主に、４つのウェイＷ０からＷ３を持つ分岐履歴記憶装置１３０、アドレス生成ユニット１０１、キャッシュメモリ１０２、デコーダ１０３、分岐履歴検索結果判定ユニット１０４、等価性判定部１０５、ヒットウェイ選択部１０６、置換対象ウェイ選択部１０７、分岐履歴検索結果判定部１０８、および、グローバルヒストリ１４０等を備える。これらはバス等を介して接続されている。【００３２】
図３は、分岐履歴記憶装置１３０のセットを構成する各ウェイの構成を説明するための図である。分岐履歴記憶装置１３０は、ＳＲＡＭ等の比較的高速にアクセス可能な記憶装置である。４ウェイの分岐履歴記憶装置１３０は、１つのセット内に４つのウェイに対応するエントリを有する。図３に示すように、各エントリは、タグ部ＴＧとデータ部ＤＴを含む。タグ部ＴＧは、命令アドレス（の一部）ＴＧ１、バリッドフラグＶ、リプレースフラグＲ、および、その他のフラグＴＧ２からなる。データ部ＤＴは、所定データとしての分岐先アドレスＤＴ１からなる。【００３３】
１つのセットは、アドレス生成ユニット１０１から出力される命令アドレスＡの一部（例えば＜１５：５＞）によって決定される。本実施形態では４ウェイなので、セットの決定により４つのエントリが指定されることになる。さらに、その４つのエントリのうち、命令アドレスＡの一部（例えば＜３１：１６＞）によって一のエントリが決定される。この一のエントリを決定するために、命令アドレスＴＧ１には命令アドレスの一部（例えば＜３１：１６＞）が格納されている。例えば、登録時に、命令アドレスＡの一部＜１５：５＞を使ってセットが決定され、残りの部分がセット内のいずれかのエントリ（４つのウェイに対応する４つのエントリのいずれか）のタグ部（命令アドレスＴＧ１を含む）にデータとして格納されるようになっている。なお、命令アドレス＜３１：１６＞との記載は、命令アドレスＴＧ１が命令アドレス（例えば３２ビット）の一部３１ビット目から１６ビット目であることを意味する。【００３４】
バリッドフラグは、エントリの有効又は無効を示すフラグである。例えば、バリッドフラグが”１”であればそのバリッドフラグを含むエントリが有効であること、バリッドフラグが”０”であればそのバリッドフラグを含むエントリが無効であることを示す。エントリが有効とは、ウェイに登録されたデータである分岐先アドレスが抹消されていないという意味である。バリッドフラグは、置換対象のウェイを選択するためにも用いられる。【００３５】
リプレースフラグは、置換対象のウェイを選択するために用いられるフラグである。分岐先アドレスには、キャッシュメモリ１０２（または主記憶装置）からフェッチされた分岐命令の分岐先アドレスが格納される。【００３６】
アドレス生成ユニット１０１は、命令アドレスＡ等を生成し出力するためのものである。アドレス生成ユニット１０１はプログラムカウンタ等を含む。キャッシュメモリ１０２は、ＳＲＡＭ等の比較的高速にアクセス可能な記憶装置である。デコーダ１０３は、キャッシュメモリ１０２（または主記憶装置）からフェッチされた分岐命令等をデコードするためのものである。【００３７】
等価性判定部１０５は、アドレス生成ユニット１０１から出力される命令アドレスＡ（の一部）とタグ部ＴＧの命令アドレスＴＧ１とを比較し、一致する命令アドレスＴＧ１が存在すればヒット信号（ヒットを示すビット）を出力する。ヒットウェイ選択部１０６は、各ウェイからのヒット信号に基づいてヒットしたウェイを指定するヒットウェイ選択信号を出力する。【００３８】
分岐履歴検索結果判定ユニット１０４は、分岐予測装置から得られた分岐先アドレスがメモリ領域（キャッシュメモリ１０２または主記憶装置）からフェッチされた分岐命令の分岐先アドレスと等しいか、つまり、予測が正しかったかどうかを判定するためのものである。【００３９】
置換対象ウェイ選択部１０７は、主に置換対象のウェイを選択するためのものである。図４に置換対象ウェイ選択部１０７の概略構成を示す。置換対象ウェイ選択部１０７は、各ウェイｗａｙ０（W0）からｗａｙ３（W3）それぞれから、同一アドレスＡによって指定されるエントリに含まれるリプレースフラグＲ（ｒｅｐｌａｃｅ＿ｆｌａｇ＿ｗａｙ０，ｒｅｐｌａｃｅ＿ｆｌａｇ＿ｗａｙ１，ｒｅｐｌａｃｅ＿ｆｌａｇ＿ｗａｙ２，ｒｅｐｌａｃｅ＿ｆｌａｇ＿ｗａｙ３）およびバリッドフラグ（ｗａｙ０＿ｖａｌｉｄ，ｗａｙ１＿ｖａｌｉｄ，ｗａｙ２＿ｖａｌｉｄ，ｗａｙ３＿ｖａｌｉｄ）を取得する。置換対象ウェイ選択部１０７は最終的に、置換対象のウェイを指定する置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）およびその選択信号によって指定されるウェイに書き込むリプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）を出力する。【００４０】
置換対象ウェイ選択部１０７は、ウェイＷ０からＷ３それぞれから取得されたリプレースフラグに基づいて、置換対象のウェイを選択する。図５は、それらリプレースフラグによってウェイが選択される論理を説明するための図である。同図は、ウェイｗａｙ０からｗａｙ３それぞれから左側のリプレースフラグ（例えば（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）＝（０，０，０，０））が取得された場合には、置換対象のウェイとして右側の○が位置するウェイ（例えばウェイ０）が選択されることを示す。【００４１】
例えば、図５において、リプレースフラグが（０，０，０，０）である場合を考える。この場合、図５によれば、置換対象としてｗａｙ０が選択される。選択されたウェイのリプレースフラグは反転されるので、この場合リプレースフラグは、（１，０，０，０）となる。【００４２】
そして、リプレースフラグが（１，０，０，０）の場合には、図５によれば、置換対象としてｗａｙ１が選択される。そして、リプレースフラグは、（１，１，０，０）となる。【００４３】
さらに、リプレースフラグが（１，１，０，０）の場合には、図５によれば、置換対象としてｗａｙ２が選択される。そして、リプレースフラグは、（１，１，１，０）となる。【００４４】
さらに、リプレースフラグが（１，１，１，０）の場合には、図５によれば、置換対象としてｗａｙ３が選択される。そして、リプレースフラグは、（１，１，１，１）となる。【００４５】
さらに、リプレースフラグが（１，１，１，１）の場合には、図５によれば、置換対象としてｗａｙ０が選択される。そして、リプレースフラグは、（０，１，１，１）となる。【００４６】
このように、図５の表にしたがって、ウェイを選択するとともに、リプレースフラグを反転した場合、選択されたウェイが次に選択される時期を可能な限り送らせて、ＬＲＵに近い効率を達成することができる。【００４７】
例えば、単純に図５の表を最上段の行（０，０，０，０）と第８行目（０，０，０，１）との間で遷移する場合には、常に、選択されたウェイが次に選択される時期は最後（４番目）となる。また、第９行目（１，０，１，０）と最下段の行（１，０，１，１）との間で遷移する場合には、常に、選択されたウェイが次に選択される時期は最後（４番目）となる。【００４８】
置換対象ウェイ選択部１０７は、ウェイＷ０からＷ３それぞれから取得されたバリッドフラグすべてが有効であれば、リプレースフラグに基づいて選択されたウェイ（図５の関係で定まるウェイ）を指定する置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）を出力する。【００４９】
また、置換対象ウェイ選択部１０７は、ウェイｗａｙ０からｗａｙ３それぞれから取得されたバリッドフラグに基づいて、置換対象のウェイを選択する。すなわち、置換対象ウェイ選択部１０７は、各ウェイから取得されたバリッドフラグのうち少なとも１つが無効であれば、バリッドフラグに基づいて選択されたウェイ（その無効なエントリを有するウェイ）を指定する置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）を出力する。【００５０】
また、置換対象ウェイ選択部１０７は、置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）によって指定されるウェイに書き込むリプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）を出力する。すなわち、置換対象ウェイ選択部１０７は、ウェイｗａｙ０からＷ３それぞれから取得されるバリッドフラグすべてが有効であれば、置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）によって指定されるウェイから取得されたリプレースフラグを反転したリプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）を出力する。一方、置換対象ウェイ選択部１０７は、ウェイｗａｙ０からｗａｙ３それぞれから取得されたバリッドフラグのうち少なくとも１つが無効であれば、図６の表にしたがってリプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）を出力する。【００５１】
同図の各行は、左側部分のリプレースフラグの組（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）によってユニークに区別される。各行は、現在のそれぞれのウェイのリプレースフラグの状態を示している。また、表の右側部分のウェイの組（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）が、無効なウェイの位置に相当する。このようにして、各行の右側部分で、無効な位置に相当する表のエントリに、反転の有無が指定される。【００５２】
今、ウェイｗａｙ０からｗａｙ３それぞれから左側のリプレースフラグの組（例えば（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）＝（０，０，０，０））が取得され、かつ、置換対象ウェイ選択信号（ｒｅｐｌａｃｅ＿ｗａｙ＜１：０＞）によって無効なエントリを有するウェイとして右側部分のいずれかのウェイ（例えばｗａｙ０のウェイ）が指定されたとする。すると、表の左側部分で（０，０，０，０）の組で指定される行において、表の右側部分においてｗａｙ０の箇所には、”反転”が指定されている。したがって、この場合の選択信号によって指定されるウェイ０から取得されたリプレースフラグは反転され、リプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）として出力されることになる。【００５３】
また、例えば、同行のウェイ２の箇所には、”反転”が指定されていない（空欄である）。このような場合には、リプレースフラグは反転されることなく、そのままリプレースフラグ（ｎｅｗ＿ｒｅｐｌａｃｅ＿ｆｌａｇ）として出力される。【００５４】
例えば、（０，０，０，０）の状態で、バリッドフラグにしたがってｗａｙ０が選択された場合には、図６より反転が指定されているので、リプレースフラグは、（１，０，０，０）となる。この場合、図５の表にしたがうと、次にＷａｙ０が選択されるのは、最も遅く（４番目に）なる。【００５５】
また、  例えば、（０，０，０，０）の状態で、バリッドフラグにしたがってｗａｙ１が選択された場合には、図６より反転が指定されているので、リプレースフラグは、（０，１，０，０）となる。この場合、図５の表にしたがうと、次にＷａｙ１が選択されるのは、第１２行（０，１，０，０）＝＞第１３行（０，１，０，１）＝＞第１４行（１，１，０，１）と遷移した後である。この場合、最も遅い４番目の遷移より１つ前の３番目の遷移でｗａｙ１が選択されることになる。【００５６】
このような図５および図６の状態遷移は、論理ゲートによって実現できる。例えば、本出願人がすでに出願済みの特開２００４−３８２９８において図５および図６のリプレースフラグと出力との関係を実現する論理回路が示されている。【００５７】
グローバルヒストリ１４０は、過去に実行された分岐命令ごとに分岐方向の履歴を記憶した記憶部を有し、過去の複数回の分岐の結果から分岐予測を管理する。すなわち、過去の複数回の分岐の履歴の規則性からそれぞれ分岐命令の将来の分岐の有無を予測する。【００５８】
また、グローバルヒストリ１４０は、例えば、分岐命令ごとに最近の連続分岐成立回数および最近の連続分岐不成立回数を記憶する。そして、現在は分岐が成立したとすると、現在の連続分岐成立回数が前回の連続分岐成立回数を越えない場合には次も分岐成立（分岐する）と予測し、現在の分岐連続成立回数が前回の連続分岐成立回数と一致した場合には、次には分岐不成立（分岐しない）と予測する。また現在は分岐が成立しなかったとすると、現在の連続分岐不成立回数が前回の連続分岐不成立回数を超えない場合には、次も分岐不成立（分岐しない）と予測し、現在の分岐連続不成立回数が前回の連続分岐不成立回数と一致した場合には、次には分岐成立（分岐する）と予測する。【００５９】
本実施形態のグローバルヒストリ１４０は、グローバルヒストリに基づく分岐予測を分岐履歴記憶装置１３０に送出し、分岐命令のウェイへの登録の要否を指示する。分岐履歴記憶装置１３０は、分岐命令の実行によって分岐先アドレスが確定した後、グローバルヒストリ１４０からの指示にしたがい、各分岐命令に付加された候補のウェイに格納する。【００６０】
図７は、以上のような分岐予測装置を含む処理装置のシステム構成図である。本処理装置は、例えば、主記憶装置１２１に格納された命令を読み出して実行する、いわゆるプログラム内蔵方式のコンピュータである。【００６１】
図７のように、この処理装置は、命令を実行する演算ユニット１２０と、演算ユニット１２０で実行される命令および演算ユニット１２０が処理するデータ等を格納する主記憶装置１２１と、演算ユニット１２０が実行すべき命令の主記憶装置１２１上のアドレスを指定するプログラムカウンタ１２２とを有している。このようなプログラムカウンタ１２２の制御に基づく処理装置の制御は周知である。【００６２】
図７では、さらに具体的に、プログラムカウンタ１２２の生成するアドレスに基づいて命令のフェッチを制御する命令フェッチ制御ユニット１２３と、命令キャッシュ１０２を管理し命令フェッチ制御ユニット１２３からの命令フェッチ要求にしたがって命令をフェッチする命令キャッシュ制御ユニット１２４と、命令キャッシュ１０２からフェッチされた命令を保持する命令バッファ１２５と、命令バッファ１２５の命令をデコードするデコーダ１０３と、デコードされた命令の実行タイミングを制御するリザベーションユニット（分岐命令の実行を制御する分岐リザベーションユニット１２６およびレジスタ演算命令、アドレス演算命令の実行を制御するその他リザベーションユニット１２７）と、命令の実行完了を監視する命令完了管理ユニット１２８と、演算ユニット１２０で実行される命令のオペランドを高速に演算ユニット１２０に供給するオペランドキャッシュ１２９と、主記憶装置１２１とオペランドキャッシュ１２９との間でデータの授受を管理するデータキャッシュ制御ユニット１３１とを有している。【００６３】
このうち、命令フェッチ制御ユニット１２３が図１のアドレス生成ユニット１０１に該当する。以下、本処理装置の制御手順を説明する。まず、プログラムカウンタ１２２からの命令アドレス（命令が格納された主記憶装置１２１上のアドレス）が命令フェッチ制御ユニット１２３に送出される。【００６４】
命令フェッチユニット１２３は、命令キャッシュ制御ユニット１２４にその命令アドレスの命令取得を指示するとともに、分岐予測装置１００に対して、分岐予測を指示する。すると命令キャッシュ１０２での命令取得処理と並行して、分岐予測装置１００での分岐履歴記憶装置１３０の検索がなされる。【００６５】
そして、分岐予測装置１００は、現在の命令アドレスで分岐命令がヒットした場合には、その分岐先アドレスを命令フェッチ制御ユニット１２３に送出する。このとき、分岐予測装置１００は、分岐先アドレスとともに、ヒットしたウェイについてのウェイの番号とリプレースフラグの値（以下、ウェイの情報という）を命令フェッチ制御ユニット１２３に送出する。【００６６】
命令フェッチ制御ユニット１２３は、分岐予測装置１００でヒットした分岐命令の分岐先アドレスによって、さらに、次の命令取得を命令キャッシュ制御ユニット１２４に指示する（このような処理は、通常、パイプラインのステージを形成する）。なお、分岐予測がヒットしなかった場合には、分岐しない次の命令アドレスを命令フェッチ制御ユニット１２３の内部で生成し、次の命令取得を命令キャッシュ制御ユニット１２４に指示する。【００６７】
そして、命令フェッチ制御ユニット１２３は、命令キャッシュ制御ユニット１２４からフェッチされた命令群を命令バッファ１２５から参照する。そして、命令フェッチ制御ユニット１２３は、ヒットした場合にはヒットしたウェイの情報、またヒットしなかった場合には、図５および図６の表に示した論理にしたがって、次に分岐命令を格納すべきウェイの情報を命令バッファ１２５上の分岐命令に付与する。ウェイの情報が付与された命令は、それぞれデコーダ１０３に送出される。【００６８】
その結果、命令はデコードされ、分岐リザベーションステーション１２６、その他リザベーションステーション１２７、および命令完了ユニット１２８に送出される。なお、命令がデコードされた後も、ウェイの情報は分岐命令とともに分岐リザベーションステーション１２６で維持されている。デコードされた命令は、その他リザベーションステーション１２７によってオペランドの処理等に基づいて、実行の待ち合わせを受ける。そして、オペランドが揃った時点で、各命令が演算ユニット１２０またはデータキャッシュ制御ユニット１３１で実行される。【００６９】
一方、分岐命令については、分岐リザベーションステーション１２６によって命令の待ち合わせがなされる。そして、分岐命令の実行によって分岐するか否か、また分岐する場合には分岐先アドレスが確定したときに、完了報告が分岐リザベーションステーション１２６から、命令完了ユニット１２８および分岐予測装置１００に送出される。このとき、分岐命令の命令アドレス、分岐先アドレス、および格納すべきウェイの情報（ウェイの番号とリプレースフラグ）が分岐予測装置１００に送出される。【００７０】
このとき、分岐リザベーションステーション１２６内の分岐履歴検索結果判定部１０８（図１参照）は分岐予測が正しかったか否かを判定する。すなわち、（a１）その命令アドレスにて分岐予測装置１００によって分岐予測がヒットし（分岐履歴記憶装置１３０に分岐先アドレスが格納されていた）、（a２）フェッチされた分岐命令がその分岐先アドレスに分岐した場合に、分岐予測が正しかったことが分かる。あるいは、（b１）その命令アドレスにて分岐予測装置１００がヒットせず、（b２）フェッチされた命令が分岐命令ではなかったかもしくは分岐命令であっても分岐しなかった場合に、分岐予測が正しかったことがわかる。【００７１】
この場合、すでにキャッシュ制御ユニット１２４に依頼済みの命令フェッチは、そのまま続行されることになる。【００７２】
また、分岐予測が正しくなかった場合には、すでに、キャッシュ制御ユニット１２４に依頼済みの命令フェッチおよびその後に続く一連の処理は中断されることになる。同時に分岐リザベーションステーション１２６からは、正しい分岐先からの再命令フェッチを行うよう、命令フェッチ制御ユニット１２３に指示が出される。【００７３】
グローバルヒストリ１４０は、このような分岐命令の実行結果にしたがって、分岐予測装置１００の分岐履歴記憶装置１３０に登録すべきか否かを判定する。そして、グローバルヒストリ１４０は、エントリの更新指示を分岐履歴記憶装置１３０に送出する。【００７４】
分岐予測装置１００は、グローバルヒストリ１４０からの更新指示にしたがい、セレクタ１３２を介して実行された分岐命令をウェイに格納する。このとき格納されるウェイは、分岐予測の時点で、命令バッファ１２５において分岐予測装置１００によって各命令に付与されたウェイ番号のウェイである。さらに、分岐命令のウェイへの格納とともに、同じく命令に付与されたリプレースフラグを格納する。【００７５】
以上述べたように、本実施形態の処理装置によれば、図５および図６のルールにしたがって、置換対象となる機会が順番に巡ってくることになる。つまり、最新の登録されたウェイができるだけ遅く置換対象として選択されるようになる。ただし、組合せによっては、最も遅い場合よりも１つだけ早く置換の機会が来る場合もあるが、すべての組合せで、「最も遅く置換の機会が来る」か、あるいは、「最も遅い順番よりも１つだけ早い順番で（例えば、４ウェイの場合に、３回目の書き換えタイミングで）置換の機会が来る」制御が実現され、完全なＬＲＵではないが、それに近い状態で動作する。【００７６】
すなわち、本実施形態の分岐予測装置１００によれば、各ウェイに１ビットのリプレースフラグを用意し、取り決めにしたがってリプレースフラグ、およびバリッドフラグからエントリの置換の制御を行い、またリプレースフラグを更新することで、ＬＲＵに近い動作での分岐履歴記憶装置１３０のエントリの入れ替えが実現される。このために必要な情報は、ウェイにつき１ビットのフラグのみである。また、その情報を外部に出すときは、さらに１ビットに圧縮される。これは、従来のＬＲＵのような方法と比べて、格段に低コストとなることを意味する。【００７７】
《第２実施形態》
以下、図８から図１４の図面に基づいて、本発明の第２実施形態に係る処理装置を説明する。上記第１実施形態では、図５および図６に示したテーブルに基づいて、新規に書き込まれたウェイが極力遅く書き換えられるように制御する分岐予測装置１００の処理について説明した。本実施形態では、同一のフェッチステージで複数の命令がフェッチされる処理装置において、第１実施形態の場合と同様に、ウェイの管理を行う処理装置について説明する。本実施形態に置ける他の構成および作用は、第１実施形態の場合と同様である。そこで、同一の構成要素については、同一の符号を付してその説明を省略する。また、必要に応じて、図１から図７の図面を参照する。【００７８】
本実施形態では、処理装置は、１命令４バイトの命令を実行する。また、処理装置は、１６バイト、すなわち、１つの命令フェッチステージにおいて４命令をフェッチする（本実施形態では、このような処理を同時にフェッチするという）。【００７９】
上記４命令は同一の命令アドレスで命令フェッチされるので、同一のセット（ラインともいう）内の４つのウェイを共有する。そして、取得した分岐命令が次回の命令フェッチにおいて取得され実行されると予測される場合、分岐予測装置１００は、そのような分岐命令の分岐先アドレスをいずれかのウェイに格納する。この場合、分岐予測装置１００は、まず、その分岐命令の分岐元アドレスの一部によって、内蔵する分岐履歴記憶装置１３０の４つのウェイを共有する１つのセットを決定する。そして、そのセット内の４つのウェイから書き換えられるべきウェイを決定する。【００８０】
すなわち、セット内の各ウェイにそれぞれ１ビットのリプレースフラグとバリッドフラグが付与されており、リプレースフラグとバリッドフラグの現在の状態にしたがって、次に書き換えられるべきウェイが決定される。そして、分岐予測装置１００は、そのウェイに対応するエントリに、タグ（分岐元アドレスの一部で、セットの決定に使用されなかった部分のビットを含む）を書き込むとともに、ウェイに分岐先アドレスを書き込む。さらに、分岐予測装置１００は、現在のリプレースフラグの状態にしたがって、リプレースフラグの状態を設定する（反転する、または、反転しない）。この設定は、第１実施形態と同様、現在書き込まれたウェイが今後書き換えるタイミングが完全には最も遅くすることはできないが、極力遅くなる（最も遅い順番か、最も遅い順番より１回早い順番）、所定の規則にしたがっている。【００８１】
本実施形態で想定する命令セットアーキテクチャの仕様では、同時にフェッチされる４命令中には、通常動作においては高々２個の分岐命令しか含まれないと仮定できる。したがって、本実施形態では、同一のフェッチステージで複数命令がフェッチされる命令アドレスに対応して、セット（ラインともいう）を共有する分岐命令の数は高々２個と仮定する。すなわち、分岐予測と命令の実行結果に基づいて、同一タイミング（同一のステージ）で、分岐予測手段が登録すべき分岐命令の数は、最大２個と仮定する。【００８２】
このような命令の実行において、分岐予測装置１００の処理の概要は、以下の通りである。
（１）現在フェッチ中の命令アドレスによる分岐履歴記憶装置１３０の検索により、分岐命令がヒットした場合には、分岐予測装置１００は、ヒットしたウェイの情報をリプレースフラグの更新に使用する。【００８３】
さらに、フェッチされた４命令中のヒットしなかった分岐命令で、グローバルヒストリ１４０の予測から今後分岐すると予測される分岐命令が存在する場合、現在のリプレースフラグの状態から図５にしたがって新たなウェイを選択する。【００８４】
このとき、バリッドフラグにより無効なウェイが存在することが分かった場合には、分岐予測装置１００は、無効なウェイを優先して選択し、図６の表にしたがって、リプレースフラグの反転の有無を決定する。そして、グローバルヒストリ１４０の指示にしたがい、分岐予測装置１００は、そのヒットしなかった分岐命令の分岐先アドレスをそのウェイに格納するとともに、リプレースフラグを更新する。
（２）現在フェッチ中のアドレスによる分岐履歴記憶装置１３０の検索により、分岐命令がヒットせず、かつ、２つの命令（これを第１の候補、および第２の候補と呼ぶ）を分岐履歴記憶装置１３０に記憶すべき場合には、分岐予測装置１００は、まず、現在のリプレースフラグおよびバリッドフラグから第１の候補を格納すべきウェイを決定し、リプレースフラグを仮に書き換える。次に、第１の候補の選択によって仮に書き換えられた状態のリプレースフラグの組合せとバリッドフラグから、第２の候補を格納すべきウェイを決定し、リプレースフラグをさらに仮に書き換える。そして、最終的には、グローバルヒストリ１４０の指示にしたがい、実際に格納するか否かが決定され、リプレースフラグが書き換えられる。【００８５】
＜分岐予測装置１００の処理概要＞
分岐予測装置１００は、命令フェッチに際して分岐履歴記憶装置１３０に登録された分岐履歴を利用して分岐予測を実行する。上述のように、命令フェッチは、１６バイト（４命令）単位で行われる。したがって、分岐予測装置１００は、１６バイト内に含まれる分岐命令を検索することになる。分岐予測装置１００は、命令アドレスの一部を用いて分岐履歴記憶装置１３０にアクセスし、４ウェイ分のデータを取得する。これらのデータには、上記リプレースフラグおよびバリッドフラグも含まれている。【００８６】
この分岐履歴記憶装置１３０には、分岐する分岐命令が格納されている。分岐予測装置１００は、分岐履歴記憶装置１３０の検索時、該当するセットの４つのウェイに対応する４つのエントリ（タグが格納されている）を、命令アドレスの一部（タグとなるべきビット部分）と比較する。そして、エントリのタグがそのビット部分と一致した時点（分岐命令が分岐履歴記憶装置１３０でヒットした時点）で、分岐予測装置１００は、分岐先に分岐するとみなす。【００８７】
したがって、分岐を予測しなかった場合も、新たに分岐履歴記憶装置１３０に登録すべき分岐命令がフェッチされた４命令中に存在する場合がある。【００８８】
第１に、４つの命令中に分岐しない分岐命令が存在する場合である。この場合、たとえ現在の処理（ステージ）でその分岐命令が分岐しなくても、次回分岐することがグローバルヒストリ１４０により予測され、登録指示が出される場合がある。  第２に、分岐予測が誤った場合である。これは、分岐予測装置１００が分岐予測を誤った結果、分岐履歴記憶装置１３０がヒットせず、かつ、フェッチされた４命令中の分岐命令が分岐した場合である。この場合、分岐予測装置１００は、分岐が予測されず分岐した分岐命令を次に「分岐する分岐命令」として無条件で登録するすなわち、分岐予測装置１００は、リプレースフラグにより予め決定され、命令に負荷されていたウェイの情報に従ってエントリにタグおよび分岐先アドレスを格納する。【００８９】
図８に、１６バイト単位でフェッチされた命令中で２つの分岐命令が存在する場合に、分岐予測の発生パターンを示す。２つの分岐命令のうち、例えば１つ目の分岐命令が分岐すれば、当然２つ目の分岐命令は実行されない。本実施形態では、分岐予測装置１００は、１６バイト中の最初の分岐命令がヒットした時点で、２つ目の分岐命令の予測は必要ないものとして処理する。【００９０】
図９に、分岐命令の実行結果と、次の分岐命令の分岐予測結果との組合せを示す。図９では、”分岐する（Ｔａｋｅｎ）”を”Ｔｋ”で示し、”分岐しない（ＮｏｔＴａｋｅｎ）”を”Ｎ＿ｔｋ”で示している。図のように、フェッチされた２つの分岐命令が分岐予測装置１００の処理対象となるのは、１つ目の分岐命令が分岐しなかった場合である。以下、図８の（１−１）、（１−２），および（２）のそれぞれについて、図９から図１２とともに説明する。
（１−１）現在のフェッチステージで、フェッチされた１６バイト中に２つの分岐命令が存在し、１つ目がヒットしたとする。図１０に、この場合の２つ目の分岐命令の実行結果と、次の予測結果の組合せを示す。この場合、ヒットしたウェイには、１つ目の分岐命令が登録されており、ヒットしなかった２つ目の分岐命令の処理が問題となる。【００９１】
図１０において、パターン７は、１つ目の分岐命令がヒットし、かつ、分岐した場合である。本実施形態の分岐予測装置１００は、分岐履歴検索時に書き換えるウェイの情報を一旦命令フェッチ制御ユニット１２３に送出し、命令のデコードおよび実行後に分岐リザベーションステーション１２６から戻されたウェイの情報にしたがって分岐先アドレスをウェイに格納する。このため、１つ目の分岐命令で分岐すると、２つ目の分岐命令をウェイに格納する機会はこの時点では消滅する。【００９２】
また、図１０において、”ヒットした”にも拘わらず、実行結果が”Ｎ＿Ｔｋ”というのは、分岐予測を誤ったことを示す。【００９３】
図１０の場合に、２つ目の分岐命令の登録動作が生じるのは、パターン２、３、５、および６である。このうち、パターン２、３については、１つ目の分岐命令が”次の予測”において”Ｎ＿Ｔｋ”の場合であり、１つ目の分岐命令のヒットしたウェイが書き換えられても構わない場合である。【００９４】
一方、パターン５、６については、１つ目の分岐命令の”次の予測”が”Ｔｋ”であるので、予測上は、１つ目の分岐命令の実行が優先することとなる。このため、１つ目の分岐命令のヒットしたウェイを２つ目の分岐命令によって書き換えたくない場合である。この場合に、２つ目の分岐命令の登録を抑止するか、２つ目の分岐命令を登録するための別のウェイ（同一セット内ウェイ）を準備する必要がある。
（１−２）次に、フェッチされた１６バイト中に２つの分岐命令が存在し、２つ目がヒットしたとする。図１１に、この場合の２つ目の分岐命令の実行結果と、次の予測結果の組合せを示す。この場合、ヒットしたウェイには、２つ目の分岐命令が登録されており、ヒットしなかった１つ目の分岐命令の処理が問題となる。【００９５】
図１１において、パターン７は、１つ目の分岐命令がヒットしなかったが、分岐した場合であり、この場合には、２つ目の分岐命令は実行されない。また、図１１においても、”ヒットした”にも拘わらず、実行結果が”Ｎ＿Ｔｋ”というのは、分岐予測を誤ったことを示す。【００９６】
図１１で、１つ目の分岐命令の登録が必要になるのは、パターン４から７である。このうち、パターン５、６については、ヒットした二つ目の分岐命令のウェイの情報しかなかった場合、ヒットしたウェイに１つ目の分岐命令を登録してしまうと、一旦登録できたとしても、直ちに、２つ目の分岐命令の再登録によって上書きされることになる。【００９７】
また、パターン４については、２つ目の分岐命令が今回はヒットした（分岐すると予測された）けれども次には分岐しないと予測された結果、エントリの消去動作が発生する。つまりこの場合には、ヒットした二つ目の分岐命令のウェイの情報しかなかった場合、ヒットしたウェイに１つ目の分岐命令を登録してしまうと、２つ目の分岐命令の消去動作によって、せっかく登録した一つ目の分岐命令が消去されてしまうことになる。【００９８】
これらの問題を回避するために、図１０のパターン５、６および図１１のパターン４−６については、一つ目のヒットしなかった分岐命令について、ヒットしたウェイとは異なる場所に分岐先アドレスを登録する必要がある。これには、リプレースフラグで決定されるウェイを使用することが考えられる。【００９９】
すなわち、命令フェッチによって得られた４つの命令でヒットした分岐命令は、そのままヒットしたウェイを使用するように設定される。具体的には、分岐予測装置１００は、ヒットした分岐命令にヒットしたウェイの情報を付加してデコーダ１０３に送出する。【０１００】
また、ヒットしなかったがフェッチされた４つの命令に含まれており、次に分岐が予測される分岐命令は、リプレースフラグにしたがって選択されるウェイを使用するように設定される。具体的には、分岐予測装置１００は、ヒットしなかった分岐命令にリプレースフラグとバリッドフラグにしたがって選択されたウェイの情報を付加してデコーダ１０３に送出する。【０１０１】
さらに、４つの命令がデコードされ、実行された結果にしたがって、分岐予測装置１００は、ウェイの情報（リプレースフラグ、バリッドフラグ等）と格納内容とを更新する。具体的には、分岐予測装置１００は、不図示のグローバルヒストリ１４０の予測にしたがって、次に分岐が予測される分岐先アドレスのウェイへの登録、リプレースフラグの変更、およびヒットしたウェイのバリッドフラグを変更する。【０１０２】
例えば、デコードされた４つの命令中に２つ分岐命令が含まれ、このうち、後の分岐命令がヒットした場合を考える。この場合に、グローバルヒストリ１４０の予測内容が、ヒットしなかった最初の分岐命令が次に分岐する分岐命令であり、ヒットした分岐命令は次に分岐が予測されない、というものであったとする（図１１のパターン４の場合）。このような場合、ヒットした分岐命令が格納されていたウェイは、バリッドフラグがオフされ、無効なウェイ（未使用のウェイ）にされる。登録は順番に行われるので二つ目の分岐命令のための消去動作によって一つ目が消去されるのを防ぐため、次に分岐が予測される一つ目の分岐命令のために、ヒットしたウェイ以外のウェイを用意する必要がある。【０１０３】
また、図１１のパターン７のように、ヒットしなかった最初の分岐命令を実行した結果それが分岐し、分岐予測が外れた場合には、その分岐命令を登録するウェイを用意する必要がある。また、図１１のパターン５、６のように、ヒットしたウェイの分岐先アドレスへの次回の分岐が予測されるとともに、ヒットしなかった最初の分岐命令が次に分岐されると予測された場合も、ヒットしたウェイの他、さらになるウェイを用意する必要がある。
（２）次に、図８の最後のパターン（分岐が予測されなかった場合である。図８において（２）で示されている）について説明する。この場合の実行結果と次の予測との組合せのパターンを図１２に示す。今、同時フェッチされた４命令中に２つの分岐命令が含まれている場合を想定する。このうち、パターン２、３および４においては、登録動作が生じるのは２つの分岐命令のうち、１つ目あるいは２つ目だけであるので、登録すべきウェイは１つでよい。【０１０４】
一方、パターン５、６のとき、次に分岐が予測されるのは、同時にフェッチされた４命令中の１つ目の分岐命令である。しかし、パターン５では、グローバルヒストリ１４０が２つ目の分岐命令の分岐をも予測している。またパターン６では、二つ目の分岐命令について予測が“Ｎ＿Ｔｋ”であったにも関わらず実行結果が“ Ｔｋ ”であったため、登録動作が生じる。【０１０５】
このような場合が生じるのは、実行されるプログラム中に２重のループがあって、１つ目の分岐命令が内側の小さなループを形成し、２つ目の分岐命令が外側の大きなループを形成する場合が考えられる。この場合、２つ目の分岐命令は、１つ目の分岐命令（内側の小さなループを形成する分岐命令）がＮ＿Ｔｋとなったときに実行されることになる。したがって、このような場合には、グローバルヒストリ１４０から、分岐するとの予測（登録する旨の指示）が送出される。このような場合、それぞれの分岐命令を登録するウェイを用意する必要がある。以下、バリッドフラグの状態を場合分けして説明する。
（ａ）無効なウェイが２つ以上存在する場合
無効なウェイが存在する場合には、無効なウェイを優先して使用する。分岐予測装置１００は、無効なウェイのうち、ウェイ番号の若い方から２つウェイを取得する。すなわち、無効なウェイが存在する場合のリプレースラグの操作論理（図６）にしたがって、２回分のウェイの取得操作を行った結果、更新されたリプレースフラグを２つ送出する。【０１０６】
例えば、読み出したリプレースフラグが（ｗａｙ０、ｗａｙｌ、ｗａｙ２、ｗａｙ３）＝（０，０，０，１）だったとする。また、無効なウェイがｗａｙ０，ｗａｙ１，ｗａｙ３であったとする。【０１０７】
このとき、１つ目の分岐命令を登録すべき候補のウェイ（第一候補）は、例えば、番号の若い順に選択すると、ｗａｙ０となる。また、２つ目の分岐命令を登録すべき候補のウェイ（第二候補）は、ｗａｙｌとなる。リプレースフラグの反転の有無は、図６の操作表にしたがう。【０１０８】
例えば、読み出したリプレースフラグが（０，０，０，１）であって、無効なウェイであるｗａｙ０を使用した場合には、図６より、リプレースフラグの反転が必要となる。このため、第一候補として，登録用ウェイ番号ｗａｙ０および、リプレースフラグ１（０の反転）を命令フェッチ制御ユニット１２３に送出する。【０１０９】
このとき、分岐予測装置１００は、一旦、ｗａｙｏのリプレースフラグは１になったと仮定し、さらに次のウェイの選択を続行する。すなわち、リプレースフラグは、（ｗａｙ０，ｗａｙｌ，ｗａｙ２，ｗａｙ３）＝（１，０，０，１）と仮定される。分岐予測装置１００は、この仮定に基づいて第二候補の反転の有無を決定する。すなわち、リプレースフラグが（１，０，０，１  ）であって、無効なウェイであるｗａｙｌを使用した場合、図６より、リプレースフラグの反転は必要ない。【０１１０】
そこで、分岐予測装置１００は、第二候補として、登録用ウェイ番号ｗａｙ１および、リプレースフラグ０を送出する。すなわち、以上の処理によって分岐予測装置１００は、
第一候補：ｗａｙ０，リプレースフラグ＝１；
第二候補：ｗａｙ１，リプレースフラグ＝０：
を決定し、命令フェッチ制御ユニット１２３に送出する。【０１１１】
すると、命令フェッチ制御ユニット１２３は、命令バッファ１２５を参照し、分岐命令が存在する場合に、第一候補、第二候補の順に、ウェイ番号およびリプレースフラグを分岐命令に付与する。
（ｂ）無効なウェイが１つだけ存在する場合
この場合、分岐予測装置１００は、無効なウェイを第一候補として決定する。次に、分岐予測装置１００は、無効なウェイが存在する場合のリプレースフラグ操作表（図６）にしたがって、操作を行った後のリプレースフラグの組合せを仮定する。そして、分岐予測装置１００は、仮定されたリプレースフラグの組合せから、第二候補を決定する。【０１１２】
例えば、読み出したリプレースフラグが（ｗａｙ０，ｗａｙ１，ｗａｙ２、ｗａｙ３）＝（０，０，０，１）だったとする。また、無効なウェイがｗａｙ０であったとする。【０１１３】
このとき、１つ目の分岐命令用のウェイ（第一候補）はｗａｙ０となる。リプレースフラグの操作（仮定）は、操作表にしたがう。リプレースフラグが（０，０，０，１）のときは、ｗａｙ０を使用した場合、リプレースフラグの反転が必要となる（図６参照）。そこで、分岐予測装置１００は、第一候補として、登録用ウェイ番号ｗａｙ０および，リプレースフラグ１（０の反転）を送出する。【０１１４】
このとき、分岐予測装置１００は、一旦、ｗａｙ０のリプレースフラグは１になったと仮定し、リプレースフラグは（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）＝（１，０，０，１）となる。【０１１５】
分岐予測装置１００は、この仮定に基づいて第二候補を決定する。本例では、１つの無効なウェイを使用すれば、残りのウェイはすべて有効なウェイである。この場合には、分岐予測装置１００は、リプレースフラグによるウェイの決定表（図５参照）から、置換対象のウェイとしてｗａｙ２を選択し、これを第二候補とする。この場合には、分岐予測装置１００は、選択したｗａｙ２のリプレースフラグを反転して送出する（バリッドフラグは有効であるので、図６の論理にしたがうことなく、リプレースフラグが無条件に反転される）。すなわち、以上の処理によって分岐予測装置１００は、
第一候補：ｗａｙ０，リプレースフラグ＝１；
第二候補：ｗａｙ２，リプレースフラグ＝１；
を決定し、命令フェッチ制御ユニット１２３に送出する。
（ｃ）無効なウェイがない場合
この場合、分岐予測装置１００は、リプレースフラグによるウェイの決定表（図５）から、候補を選択する。例えば、読み出したリプレースフラグが（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）＝（０，０，０，１）だったとする。【０１１６】
分岐予測装置１００は、リプレースフラグによるウェイの決定表（図５）から、置換対象のウェイとしてｗａｙ３を選択し、これを第一候補とする。ｗａｙ３のリプレースフラグは、無条件に反転して送出されるので、その後のリプレースフラグの状態は、（ｗａｙ０，ｗａｙ１，ｗａｙ２，ｗａｙ３）＝（０、０、０、０）となると仮定される。【０１１７】
分岐予測装置１００は、この仮定されたリプレースフラグに基づいて第二候補を決定する。すなわち、分岐予測装置１００は、図５の表から置換対象のウェイとしてｗａｙ０を選択し、第二候補とする。このとき、ｗａｙ０のリプレースフラグは無条件に反転して送出される。すなわち、以上の処理によって分岐予測装置１００は、
第一候補：ｗａｙ３、リプレースフラグ＝０
第二候補：ｗａｙ０、リプレースフラグ＝１
を決定し、命令フェッチ制御ユニット１２３に送出する。【０１１８】
以上のように、分岐履歴記憶装置１３０の読み出し時点で、分岐予測装置１００は、２つの候補ウェイ（第一候補、第二候補）を決定し、命令フェッチ制御ユニット１２３に送出する。【０１１９】
命令フェッチ制御ユニット１２３は、フェッチされた順に分岐命令に第一候補、および第二候補の情報（ウェイ番号およびリプレースフラグ）を付与する。これらの情報は、命令に付加された状態で、分岐リザベーションユニット１２６に保持される。そして、分岐命令の実行結果とともに、第一候補の情報が付加された分岐命令または第二候補の情報が付加された分岐命令が分岐予測装置１００に戻される。【０１２０】
このとき、グローバルヒストリ１４０からは、次に分岐が予測された分岐か否かの指示が分岐予測装置１００に通知される。分岐予測装置１００は、グローバルヒストリ１４０の予測にしたがって、分岐命令に付与された番号のウェイに分岐命令を登録する。【０１２１】
＜処理フロー＞
図１３から図１８の図面により、分岐予測装置１００の処理を説明する。図１３から図１７は、分岐予測装置１００で実行される分岐履歴検索処理を示している。一方、図１８は、一旦分岐予測装置１００から、分岐予測結果と、ウェイの情報が命令フェッチ制御ユニット１２３に送出され、分岐命令のデコードおよび実行後に分岐リザベーションユニット１２６から、分岐命令（ウェイの情報が付加された分岐命令）が戻された後の処理を示している。【０１２２】
これらの処理は、基本的には、図５および図６に示された論理にしたがって、高々２個のウェイを選択する処理である。したがって、図５および図６の論理を実現する論理回路を２回駆動させる制御回路（論理ゲートの組合せ）により、以下の処理が実現される。【０１２３】
図１３のように、分岐予測装置１００は、命令フェッチ制御ユニット１２３からの分岐予測指示にしたがい、命令アドレスを基に、分岐履歴記憶装置１３０のセットを決定する。そして、決定されたセットを構成するウェイに対応するエントリからタグを読み出す（Ｓ１）。【０１２４】
次に、分岐予測装置１００は、分岐命令がいずれかのウェイでヒットしたか否かを判定する（Ｓ２）。すなわち、分岐予測装置１００は、ヒットタグの内容が、タグを構成すべき命令アドレスの一部、例えば、命令アドレス＜３１：１６＞と一致した場合には、ヒットしたと判定する。【０１２５】
ヒットした場合には、分岐先アドレスを命令フェッチ制御ユニット１２３に送出する。さらに、分岐予測装置１００は、現在のバリッドフラグおよびリプレースフラグの設定にしたがいウェイを選択する（Ｓ４）。【０１２６】
すなわち、無効なウェイがあった場合には、そのウェイを優先して選択する。その際に、図６の表にしたがって、リプレースフラグの反転の有無を決定する。また、無効なウェイがない場合には、現在のリプレースフラグの設定を元に、図５の表にしたがって、ウェイを選択する。すでに、第１実施形態で説明したにように、リプレースフラグから図５の選択および図６の反転の有無を決定する処理は、論理ゲートの組合せによって実現できる。【０１２７】
そして、分岐予測装置１００は、ウェイ（ヒットしたウェイとＳ３で選択されたウェイ、または、Ｓ４で選択された２つのウェイ）の情報を命令フェッチ制御ユニット１２３に送出する（Ｓ５）。【０１２８】
一方、Ｓ２の判定で、分岐命令がいずれのウェイにおいても、ヒットしなかった場合、分岐予測装置１００は、リプレースフラグにしたがって２つのウェイを選択する（Ｓ４）。そして、分岐予測装置１００は、選択された２つのウェイの情報を命令フェッチ制御ユニット１２３に送出する（Ｓ６）。【０１２９】
図１４に、分岐予測装置１００がリプレースフラグにしたがって２つのウェイを選択する処理（図１３のＳ５、２ウェイ選択処理という）の詳細を示す。この処理では、分岐予測装置１００は、まず、無効なウェイが２つ存在するか否かを判定する（Ｓ５１）。該当するセットに２つ以上の無効なウェイが存在する場合には、分岐予測装置１００は、２つの無効ウェイ選択処理を実行する（Ｓ５２）。【０１３０】
また、無効なウェイが２つ存在しない場合、分岐予測装置１００は、まず、無効なウェイが１つ存在するか否かを判定する（Ｓ５３）。該当するセットに１つの無効なウェイが存在する場合には、分岐予測装置１００は、無効ウェイと有効ウェイ選択処理を実行する（Ｓ５４）。【０１３１】
また、該当するセットに無効なウェイが存在しない場合には、分岐予測装置１００は、有効な２つのウェイ選択処理を実行する（Ｓ５５）。【０１３２】
図１５に、２つの無効ウェイ選択処理（図１４のＳ５２）の詳細を示す。この処理では、分岐予測装置１００は、ウェイのバリッドフラグを参照し、第１の無効ウェイを選択する（Ｓ５２１）。どの無効なウェイを選択するかについて特に制限はない。例えば、ウェイの番号の若い順に選択してもよい。【０１３３】
次に、分岐予測装置１００は、図６の表の論理にしたがって、リプレースフラグの反転の有無を仮決定する（Ｓ５２２）。さらに、分岐予測装置１００は、ウェイのバリッドフラグを参照し、第二の無効ウェイを選択する（Ｓ５２３）。そして、Ｓ５２２で仮決定されたリプレースフラグの状態と、図６の表の論理にしたがって、さらに、リプレースフラグの反転の有無を仮決定する（Ｓ５２４）。なお、これらのウェイの情報（番号とリプレースフラグ）は、図６のＳ６の処理で送出される。反転の有無が仮決定されたリプレースフラグは、分岐命令の実行後、分岐履歴の格納において、反転が確定する。【０１３４】
図１６に、無効ウェイと有効ウェイ選択処理（図１４のＳ５４）の詳細を示す。この処理では、分岐予測装置１００は、ウェイのバリッドフラグを参照し、無効ウェイを選択する（Ｓ５４１）。【０１３５】
次に、分岐予測装置１００は、図６の表の論理にしたがって、リプレースフラグの反転の有無を仮決定する（Ｓ５４２）。次に、分岐予測装置１００は、仮決定されたウェイの状態にしたがって、有効なウェイを１つ選択する（Ｓ５４３）。そして、選択されたウェイのリプレースフラグを仮に反転する（Ｓ５２４）。なお、仮に反転されたリプレースフラグは、分岐命令の実行後、分岐履歴の格納において、反転が確定する。【０１３６】
図１７に、有効な２つウェイ選択処理（図１４のＳ５５）の詳細を示す。この処理では、分岐予測装置１００は、現在のリプレースフラグを参照し、第一のウェイを選択する（Ｓ５５１）。【０１３７】
次に、分岐予測装置１００は、選択された第一のウェイのリプレースフラグを仮に反転する（Ｓ５５２）。次に、分岐予測装置１００は、仮反転されたウェイの状態にしたがって、有効な第二のウェイを１つ選択する（Ｓ５５３）。そして、選択された第二のウェイのリプレースフラグを仮に反転する（Ｓ５５４）。【０１３８】
図１８に、分岐命令格納処理のフローチャートを示す。この処理では、分岐予測装置１００は、実行が完了した分岐命令またはフェッチされて分岐しなかった分岐命令と、その分岐命令に付加されているウェイの情報（ウェイの番号、仮決定された反転の有無）を分岐リザベーションステーション１２６から取得する（Ｓ１１）。【０１３９】
次に、分岐予測装置１００は、グローバルヒストリ１４０から、その分岐命令が次に分岐するか否かの情報（グローバルヒストリ１４０の予測）を取得する（Ｓ１２）。なお、グローバルヒストリ１４０による予測そのものは、本実施形態の処理と直接関係がないので、その説明を省略する。【０１４０】
そして、分岐予測装置１００は、その分岐命令が次に分岐すると予測されているか否かを判定する（Ｓ１３）。そのウェイのバリッドフラグをクリアし、無効なウェイとする（Ｓ１４）。Ｓ１３の判定で、次に分岐すると判定された場合、分岐予測装置１００は、分岐履歴（分岐先アドレス）をその分岐命令に付加されている情報で指定されたウェイに格納する（Ｓ１５）。このとき、その命令アドレスの一部がタグとしてエントリに格納される。【０１４１】
次に、分岐予測装置１００は、分岐命令に付加されている情報にしたがってリプレースフラグを設定する（Ｓ１６）。この時点で、仮設定されたリプレースフラグの内容が確定することになる。【０１４２】
以上述べたように、本実施形態の分岐処理装置１００によれば、１回のフェッチにおいて複数命令をフェッチするような装置においても、ＬＲＵに近い効率でリプレースフラグを管理することができる。すなわち、ＬＲＵほど最適の選択はできないが、図５および図６の表にしたがって、書き換えたウェイを可能な限り後の時点（第１実施形態の場合と同様、最悪でも４つのウェイに対して最後に書き換えられたウェイが３回目のアクセスで書き換えられる場合がある）で書き換えるにようにウェイの書き換えを制御できる。【０１４３】
《変形例》
上記第２実施形態では、１回のフェッチで２つ以上の分岐命令が存在することがあり得る処理装置において、図５および図６のテーブルにしたがって、書き換えるべきウェイを選択する処理を示した。この処理では、２つ分岐命令の分岐先アドレスを格納するウェイとして、まず、１つのウェイを選択し、その後、仮にリプレースフラグを設定した上で、第２番目のウェイを決定した。【０１４４】
しかし、このような複雑な処理を実行する代わりに、以下のような処理を行ってもよい。【０１４５】
例えば、ヒットしたウェイの番号を元にウェイ番号を生成してウェイを選択するようにしてもよい。【０１４６】
例えば、４つのウェイ番号を示す２ビットの信号をｗａｙ＜ｌ：０＞とすれば、”００”、”０１”、”１０”、”１１”のビットパターンが存在する。例えば、ヒットしたウェイが存在する場合には、一方のビットｗａｙ＜ｌ＞を反転するという処理を構成すればよい。この場合、ヒットしたウェイが”００”であれば、上位ビットを反転し”１０”を生成してウェイを選択すればよい。このようなビットの操作は、ハードウェア（論理ゲート）で簡易に実現できる。【０１４７】
また、これは例えば、上記第１実施形態および第２実施形態で用いたバリッドフラグを優先してもよい。すなわち、ヒットしたウェイが存在する場合で、２つ目のウェイを選択する場合（図１３のＳ４）、まず、バリッドフラグから無効なウェイが存在するか否かを判定するようにしてもよい。そして、無効なウェイが存在する場合には、その無効なウェイを２つ目のウェイとして、選択するようにし、無効なウェイが存在しない場合には、上記のようなビットの反転によってヒットしたウェイ以外のウェイを選択するようにしてもよい。このような制御にすることで、無効なウェイを有効に利用するとともに、ヒットしたウェイの上書きを極力低減することができる。【０１４８】
また、ヒットしなかった場合には、リプレースフラグで決定されるウェイを通常通り一つの候補とし、そのウェイの番号を元にして、前述のヒットしたウェイ番号がある場合と同様の処理を行ってもよい。つまり、リプレーフラグで決定された４つのウェイ番号を示す２ビットの信号をｗａｙ＜ｌ：０＞とすれば、”００”、”０１”、”１０”、”１１”のビットパターンが存在する。ここから、一方のビットｗａｙ＜ｌ＞を反転するという処理などでもう一つのウェイ番号を構成すればよい。例えば、元のリプレースフラグによる一つ目の分岐命令のためのウェイが”００”であれば、上位ビットを反転し”１０”を生成して二つ目の分岐命令のためのウェイとすればよい。【０１４９】
図１９に、このような変形例に係る分岐履歴検索処理のフローチャートを示す。図１９の処理で、図１３と同様の処理については、図１３と同一の符号を付している。【０１５０】
すなわち、図１９のように、分岐予測がヒットした場合には、分岐予測装置１００は、ヒットしたウェイの情報を基に、ヒットしたウェイ以外のウェイを
つ選択する（Ｓ４Ａ）。【０１５１】
一方、ヒットしなかった場合には、分岐予測装置１００は、２ウェイ選択処理を実行する（Ｓ５Ａ）。この場合の２ウェイ選択処理は、図１４と同様の処理でもよい。また、２ウェイ選択処理として、上述のように、バリッドフラグとリプレースフラグとで決定されるウェイを通常通り一つの候補とし、そのウェイの番号を元にして、前述のヒットしたウェイ番号がある場合と同様のビット反転処理を行って２つ目の候補としてもよい。
【図１】
0005136404.tif 000002
【図２】
0005136404.tif 000003
【図３】
0005136404.tif 000004
【図４】
0005136404.tif 000005
【図５】
0005136404.tif 000006
【図６】
0005136404.tif 000007
【図７】
0005136404.tif 000008
【図８】
0005136404.tif 000009
【図９】
0005136404.tif 000010
【図１０】
0005136404.tif 000011
【図１１】
0005136404.tif 000012
【図１２】
0005136404.tif 000013
【図１３】
0005136404.tif 000014
【図１４】
0005136404.tif 000015
【図１５】
0005136404.tif 000016
【図１６】
0005136404.tif 000017
【図１７】
0005136404.tif 000018
【図１８】
0005136404.tif 000019
【図１９】
0005136404.tif 000020