JPH08292887A - 命令の分岐方法およびプロセッサ - Google Patents
命令の分岐方法およびプロセッサInfo
- Publication number
- JPH08292887A JPH08292887A JP8058296A JP5829696A JPH08292887A JP H08292887 A JPH08292887 A JP H08292887A JP 8058296 A JP8058296 A JP 8058296A JP 5829696 A JP5829696 A JP 5829696A JP H08292887 A JPH08292887 A JP H08292887A
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- address
- reserved
- processor
- 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.)
- Pending
Links
Landscapes
- Advance Control (AREA)
Abstract
(57)【要約】
【課題】 プログラムのコンパイル時に生成される分岐
予約命令を用いて、パイプライン化されたプロセッサで
の命令の分岐動作を効率化することにある。 【解決手段】 分岐元アドレスと分岐先アドレスの複数
の組を保持する分岐アドレススタック(以下、スタッ
ク)10と、現在の命令フェッチアドレスを保持するプロ
グラムカウンタ(PC)12と、スタック10の保持する最
新の組の内の分岐元アドレスとPC12の値とを比較する
比較器11と、比較の結果が一致のときに命令フェッチア
ドレスをPC12の値からスタック10の保持する最新の組
の内の分岐先アドレスに切り替えるセレクタ14を備えた
プロセッサで、命令列中の分岐点に先立って、分岐予約
命令によりスタック10に分岐先アドレスと分岐元アドレ
スの組を予約しておき、命令の読み込みが分岐点に達し
たならば速やかに次の命令読み込みアドレスを分岐先に
切り替えることで、分岐動作を行う。
予約命令を用いて、パイプライン化されたプロセッサで
の命令の分岐動作を効率化することにある。 【解決手段】 分岐元アドレスと分岐先アドレスの複数
の組を保持する分岐アドレススタック(以下、スタッ
ク)10と、現在の命令フェッチアドレスを保持するプロ
グラムカウンタ(PC)12と、スタック10の保持する最
新の組の内の分岐元アドレスとPC12の値とを比較する
比較器11と、比較の結果が一致のときに命令フェッチア
ドレスをPC12の値からスタック10の保持する最新の組
の内の分岐先アドレスに切り替えるセレクタ14を備えた
プロセッサで、命令列中の分岐点に先立って、分岐予約
命令によりスタック10に分岐先アドレスと分岐元アドレ
スの組を予約しておき、命令の読み込みが分岐点に達し
たならば速やかに次の命令読み込みアドレスを分岐先に
切り替えることで、分岐動作を行う。
Description
【0001】
【発明の属する技術分野】本発明は、プロセッサに関
し、特に命令の読み出しと命令の実行がパイプライン化
されて並列に行われるプロセッサに適する命令の分岐方
法とそのための装置に関するものである。
し、特に命令の読み出しと命令の実行がパイプライン化
されて並列に行われるプロセッサに適する命令の分岐方
法とそのための装置に関するものである。
【0002】
【従来の技術】まず、従来のパイプライン化されたプロ
セッサにおける分岐動作について述べる。なお、ここで
述べる従来のパイプライン化されたプロセッサにおける
分岐動作については、文献「Computer Arc
hitecture:A Quantative Ap
proach」(David A.Patterson
and John L.Hennnessy、Morg
an KaufmannPublishers、In
c.、1990)で、特に6章においてよくまとめられ
ている。一般的なパイプライン化されたプロセッサで
は、高速化のために、命令の実行とこれに後続する命令
の読み込みが並列に行われている。しかし分岐命令が実
行されてかつ分岐が生じる時には、分岐命令に後続する
命令は実行されないので、その読み込みは無駄になる。
更に従来では、分岐命令の実行の結果初めて分岐先が定
まるので、分岐先の命令の読み込みが行えるようになる
までには時間がかかる。パイプライン化されたプロセッ
サでは、このように分岐命令においてパイプラインによ
る命令の読み込みと実行の並列動作が不可となるので、
大きく性能を落とす要因となっていた。
セッサにおける分岐動作について述べる。なお、ここで
述べる従来のパイプライン化されたプロセッサにおける
分岐動作については、文献「Computer Arc
hitecture:A Quantative Ap
proach」(David A.Patterson
and John L.Hennnessy、Morg
an KaufmannPublishers、In
c.、1990)で、特に6章においてよくまとめられ
ている。一般的なパイプライン化されたプロセッサで
は、高速化のために、命令の実行とこれに後続する命令
の読み込みが並列に行われている。しかし分岐命令が実
行されてかつ分岐が生じる時には、分岐命令に後続する
命令は実行されないので、その読み込みは無駄になる。
更に従来では、分岐命令の実行の結果初めて分岐先が定
まるので、分岐先の命令の読み込みが行えるようになる
までには時間がかかる。パイプライン化されたプロセッ
サでは、このように分岐命令においてパイプラインによ
る命令の読み込みと実行の並列動作が不可となるので、
大きく性能を落とす要因となっていた。
【0003】そこで従来では、分岐命令に続く後続命令
を1命令だけそのまま実行することによって、後続命令
の読み込みを有効に利用しようとする方策が採られてい
た。これは、見かけ上分岐が生じるのが分岐命令の次の
命令の後に遅れるように見えることから、遅延分岐方式
と呼ばれる。プロセッサの回路方式を工夫すれば、更に
分岐先アドレスの計算も後続命令を読み込んでいる間に
行うことが可能であり、そのように構成すれば、後続命
令の次に続けて分岐先の命令の読み込みを行うことも出
来る。このようにすることによってパイプライン化され
たプロセッサにおいても分岐動作を効率良く行おうとし
ていた。
を1命令だけそのまま実行することによって、後続命令
の読み込みを有効に利用しようとする方策が採られてい
た。これは、見かけ上分岐が生じるのが分岐命令の次の
命令の後に遅れるように見えることから、遅延分岐方式
と呼ばれる。プロセッサの回路方式を工夫すれば、更に
分岐先アドレスの計算も後続命令を読み込んでいる間に
行うことが可能であり、そのように構成すれば、後続命
令の次に続けて分岐先の命令の読み込みを行うことも出
来る。このようにすることによってパイプライン化され
たプロセッサにおいても分岐動作を効率良く行おうとし
ていた。
【0004】ところが、オペレーティング・システムな
どプロセスの管理を行うようなプログラムでは、分岐先
アドレスの計算をレジスタ等の値を用いて動的に行う分
岐命令が用いられている。しかし、このような複雑な分
岐先アドレスの計算を行うと、後続命令をたかだか1命
令読み込んでいる時間では計算が終了しないと言うこと
も生じる。また分岐命令につづいて実行される後続命令
1命令は、特にその分岐命令が条件分岐命令の時は分岐
の生起/不生起に関わらず実行できることが条件とな
る。しかし、そのような命令を常に見付けることは、プ
ログラムの性質にもより、完全にはできないことが多
い。
どプロセスの管理を行うようなプログラムでは、分岐先
アドレスの計算をレジスタ等の値を用いて動的に行う分
岐命令が用いられている。しかし、このような複雑な分
岐先アドレスの計算を行うと、後続命令をたかだか1命
令読み込んでいる時間では計算が終了しないと言うこと
も生じる。また分岐命令につづいて実行される後続命令
1命令は、特にその分岐命令が条件分岐命令の時は分岐
の生起/不生起に関わらず実行できることが条件とな
る。しかし、そのような命令を常に見付けることは、プ
ログラムの性質にもより、完全にはできないことが多
い。
【0005】さらに、近年では高性能化のために、一つ
のプロセッサ内に複数の命令実行パイプラインを用意
し、複数の命令を同時に読み込んで並列に実行させる、
スーパースカラ方式やVLIW(Very Long
Instruction Word)方式と呼ばれる命
令単位の並列実行方式を採るプロセッサも多くなって来
ている。このようなプロセッサでは、分岐命令とそれに
後続する命令がしばしば同時に読み込まれてしまうの
で、遅延分岐方式のように後続命令の読み込み時間で分
岐命令の実行時間を隠すことができない。結果として、
分岐命令(を含む複数命令)の読み込みから次に実行す
べき分岐先の命令を読み込めるようになるまでの時間が
顕著に現われてしまい、このような命令単位の並列実行
方式を採るプロセッサにおける大きな問題となってい
た。
のプロセッサ内に複数の命令実行パイプラインを用意
し、複数の命令を同時に読み込んで並列に実行させる、
スーパースカラ方式やVLIW(Very Long
Instruction Word)方式と呼ばれる命
令単位の並列実行方式を採るプロセッサも多くなって来
ている。このようなプロセッサでは、分岐命令とそれに
後続する命令がしばしば同時に読み込まれてしまうの
で、遅延分岐方式のように後続命令の読み込み時間で分
岐命令の実行時間を隠すことができない。結果として、
分岐命令(を含む複数命令)の読み込みから次に実行す
べき分岐先の命令を読み込めるようになるまでの時間が
顕著に現われてしまい、このような命令単位の並列実行
方式を採るプロセッサにおける大きな問題となってい
た。
【0006】このような問題に対する従来の解決策は、
分岐予測方式である。これには、静的な分岐予測と動的
な分岐予測の二つの基本方式がある。静的な分岐予測で
は、分岐命令のタイプと分岐先が前方か後方かなどの静
的な情報によって分岐が起こるかどうかを予測する。動
的な分岐予測では、その分岐命令で過去に分岐したかど
うかの履歴をある程度記録しておき、その履歴に基づい
て一定のアルゴリズムで次に分岐が起こるかどうかを予
測する。プロセッサ内の命令の読み込み部では、読み込
んだ(複数)命令中に分岐命令があるかどうかを検出す
る。分岐命令があった場合には、分岐予測の結果に従っ
て次に読み込む命令を後続の命令にするか分岐先の命令
にするかを決定する。この命令読み込み部における分岐
命令の検出は、すぐ次の命令読み込みに間に合うように
充分素早く行う必要がある。従来の分岐予測方式では、
分岐命令があったアドレスをその分岐先アドレスと組に
して記録しておく、内容(の一部)での検索が可能な連
想メモリを用いたテーブルを用意するという方法を採っ
ている。即ち、それぞれの分岐命令の初回の実行でその
分岐命令が置かれていたアドレスをその実行の結果得ら
れる分岐先アドレスと共に記録しておき、新しく命令を
読む込む度にそのアドレスが記録されていないかどうか
そのテーブルを検索する。このようにすることによっ
て、それぞれの分岐命令が2回目以降、早期に検出で
き、分岐先のアドレスも得ることができる。またテーブ
ルには分岐命令の置かれているアドレス及び分岐先のア
ドレスと組にして、その分岐命令の過去の分岐発生の履
歴に関する情報を記録しておけば、分岐予測に関する機
構も同時に実装することが可能である。
分岐予測方式である。これには、静的な分岐予測と動的
な分岐予測の二つの基本方式がある。静的な分岐予測で
は、分岐命令のタイプと分岐先が前方か後方かなどの静
的な情報によって分岐が起こるかどうかを予測する。動
的な分岐予測では、その分岐命令で過去に分岐したかど
うかの履歴をある程度記録しておき、その履歴に基づい
て一定のアルゴリズムで次に分岐が起こるかどうかを予
測する。プロセッサ内の命令の読み込み部では、読み込
んだ(複数)命令中に分岐命令があるかどうかを検出す
る。分岐命令があった場合には、分岐予測の結果に従っ
て次に読み込む命令を後続の命令にするか分岐先の命令
にするかを決定する。この命令読み込み部における分岐
命令の検出は、すぐ次の命令読み込みに間に合うように
充分素早く行う必要がある。従来の分岐予測方式では、
分岐命令があったアドレスをその分岐先アドレスと組に
して記録しておく、内容(の一部)での検索が可能な連
想メモリを用いたテーブルを用意するという方法を採っ
ている。即ち、それぞれの分岐命令の初回の実行でその
分岐命令が置かれていたアドレスをその実行の結果得ら
れる分岐先アドレスと共に記録しておき、新しく命令を
読む込む度にそのアドレスが記録されていないかどうか
そのテーブルを検索する。このようにすることによっ
て、それぞれの分岐命令が2回目以降、早期に検出で
き、分岐先のアドレスも得ることができる。またテーブ
ルには分岐命令の置かれているアドレス及び分岐先のア
ドレスと組にして、その分岐命令の過去の分岐発生の履
歴に関する情報を記録しておけば、分岐予測に関する機
構も同時に実装することが可能である。
【0007】このように従来では分岐予測方式によっ
て、パイプライン化されたプロセッサで分岐をさらに効
率化しようとしていた。しかし、従来では分岐命令の初
めの実行によってその分岐命令の置かれているアドレス
と分岐先のアドレスを登録するので、初回の実行は常に
予測ができない。また登録するテーブルも限られた大き
さであり、多数の分岐命令が存在するときはLRU(L
east Recently Used)など一定のア
ルゴリズムで入れ替えを行わなければならない。入れ替
えの結果追い出された分岐命令は、再び予測不可とな
る。またさらに大きな問題としては、分岐予測の精度が
ある。即ち、分岐予測方式では、実際の分岐命令の実行
に先だってあくまで予測をするだけであるので、予測が
はずれることも充分有り得る。このような予測の精度
は、先に述べたような分岐予測の方法にもよるが、実行
するプログラムの性質にもよる。即ち、実行する度に毎
回分岐の生起/不生起が変化するような分岐命令を含む
ようなプログラムでは、予測の精度を上げることは非常
に困難である。予測がはずれた場合には、予測の結果に
基づいて読み込んでいた命令を一旦すべて取り消して、
元の分岐点まで戻って命令の読み込みからやり直さなけ
ればならない。その結果、予測しなかった場合よりもか
えって余分な時間がかかる場合も多い。
て、パイプライン化されたプロセッサで分岐をさらに効
率化しようとしていた。しかし、従来では分岐命令の初
めの実行によってその分岐命令の置かれているアドレス
と分岐先のアドレスを登録するので、初回の実行は常に
予測ができない。また登録するテーブルも限られた大き
さであり、多数の分岐命令が存在するときはLRU(L
east Recently Used)など一定のア
ルゴリズムで入れ替えを行わなければならない。入れ替
えの結果追い出された分岐命令は、再び予測不可とな
る。またさらに大きな問題としては、分岐予測の精度が
ある。即ち、分岐予測方式では、実際の分岐命令の実行
に先だってあくまで予測をするだけであるので、予測が
はずれることも充分有り得る。このような予測の精度
は、先に述べたような分岐予測の方法にもよるが、実行
するプログラムの性質にもよる。即ち、実行する度に毎
回分岐の生起/不生起が変化するような分岐命令を含む
ようなプログラムでは、予測の精度を上げることは非常
に困難である。予測がはずれた場合には、予測の結果に
基づいて読み込んでいた命令を一旦すべて取り消して、
元の分岐点まで戻って命令の読み込みからやり直さなけ
ればならない。その結果、予測しなかった場合よりもか
えって余分な時間がかかる場合も多い。
【0008】
【発明が解決しようとする課題】本発明は、分岐先の決
定は多くの場合、プログラムのコンパイル時に予め静的
に、あるいはサブルーチンからの戻り(リターン)など
のように動的に決定される場合にも、命令列中で分岐を
しなければならない分岐点に充分先立って決定できるこ
とに着目し、前述した問題点を解消しようとするもので
ある。本発明の目的は、プログラムのコンパイル時に生
成される分岐予約命令によって、パイプライン化された
プロセッサで命令の読み込みと命令の実行が並列に行わ
れていても、効率良く分岐を行う方法およびプロセッサ
を提供することにある。
定は多くの場合、プログラムのコンパイル時に予め静的
に、あるいはサブルーチンからの戻り(リターン)など
のように動的に決定される場合にも、命令列中で分岐を
しなければならない分岐点に充分先立って決定できるこ
とに着目し、前述した問題点を解消しようとするもので
ある。本発明の目的は、プログラムのコンパイル時に生
成される分岐予約命令によって、パイプライン化された
プロセッサで命令の読み込みと命令の実行が並列に行わ
れていても、効率良く分岐を行う方法およびプロセッサ
を提供することにある。
【0009】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、プロセッサにおける命令の分岐方法であ
り、分岐予約命令の実行に応じて該分岐予約命令が指定
する分岐元のアドレスと分岐先のアドレスを予約するス
テップと、命令の読み込みを行うアドレスが前記予約し
た分岐元のアドレスに達したか否か比較判定するステッ
プと、前記比較判定の結果、前記命令の読み込みを行う
アドレスが前記予約した分岐元のアドレスに達したと
き、該命令の読み込みを行うアドレスを前記予約した分
岐先のアドレスに切り替えるステップからなるようにし
ている。さらに、前記分岐予約命令が複数個順次実行さ
れたとき、前記分岐予約命令が指定する分岐元のアドレ
スと分岐先のアドレスを予約するステップを複数回繰り
返すことにより複数の分岐を予約し、前記比較判定する
ステップにおいては、前記予約された複数の分岐の内最
も最近に予約された分岐元のアドレスを選択して前記比
較判定をするようにしている。さらに、分岐予約命令の
実行により分岐元のアドレスと分岐先のアドレスの予約
が行われた後で分岐が行なわれる前記分岐元のアドレス
に達する前に前記分岐の予約を条件的に取り消す命令が
配置されている場合、該分岐予約命令を条件的に取り消
す命令の読み出しに応じて前記予約した分岐元のアドレ
スと分岐先のアドレスを条件的に取り消すステップを設
けることにより命令の条件付き分岐を行なうようにして
いる。また、命令読み込み手段と、少なくとも一つの命
令解読手段と、少なくとも一つの命令実行手段を備え、
前記命令読み込み手段と命令解読手段と命令実行手段が
並列に動作可能なプロセッサにおいて、前記命令読み込
み手段は、命令の読み込みを行うアドレスを保持するプ
ログラム・カウンタと、分岐予約命令が実行されたとき
該分岐予約命令が指定する分岐元のアドレスと分岐先の
アドレスの組を格納保持する分岐アドレス組保持手段
と、前記プログラム・カウンタの保持する値と前記分岐
アドレス組保持手段の保持する分岐アドレス組の内の分
岐元のアドレスとを比較する比較手段と、前記比較手段
による比較の結果が一致を示すとき、前記プログラム・
カウンタの保持する値を前記分岐アドレス組保持手段の
保持する分岐アドレス組の内の分岐先アドレスの値に切
り替えて出力する切り替え手段を備え、命令の読み込み
を行うアドレスが分岐予約命令の指定した分岐元のアド
レスと一致したとき、分岐予約命令が指定した分岐先の
アドレスの命令へ分岐を行うようにしている。さらに、
前記分岐アドレス組保持手段は、分岐先アドレスと分岐
元アドレスの組を複数保持でき、前記比較手段は、前記
分岐アドレス組保持手段に保持された分岐アドレス組の
内の最新の組を選択し、該選択した組の分岐元のアドレ
スの値と前記プログラム・カウンタの保持する値とを比
較するようにしている。さらに、前記分岐アドレス組保
持手段は、前記命令実行手段からの取り消し信号を受け
て該取り消し信号の指定する分岐元のアドレスと分岐先
のアドレスの組を消去する手段を備えるようにしてい
る。
め、本発明は、プロセッサにおける命令の分岐方法であ
り、分岐予約命令の実行に応じて該分岐予約命令が指定
する分岐元のアドレスと分岐先のアドレスを予約するス
テップと、命令の読み込みを行うアドレスが前記予約し
た分岐元のアドレスに達したか否か比較判定するステッ
プと、前記比較判定の結果、前記命令の読み込みを行う
アドレスが前記予約した分岐元のアドレスに達したと
き、該命令の読み込みを行うアドレスを前記予約した分
岐先のアドレスに切り替えるステップからなるようにし
ている。さらに、前記分岐予約命令が複数個順次実行さ
れたとき、前記分岐予約命令が指定する分岐元のアドレ
スと分岐先のアドレスを予約するステップを複数回繰り
返すことにより複数の分岐を予約し、前記比較判定する
ステップにおいては、前記予約された複数の分岐の内最
も最近に予約された分岐元のアドレスを選択して前記比
較判定をするようにしている。さらに、分岐予約命令の
実行により分岐元のアドレスと分岐先のアドレスの予約
が行われた後で分岐が行なわれる前記分岐元のアドレス
に達する前に前記分岐の予約を条件的に取り消す命令が
配置されている場合、該分岐予約命令を条件的に取り消
す命令の読み出しに応じて前記予約した分岐元のアドレ
スと分岐先のアドレスを条件的に取り消すステップを設
けることにより命令の条件付き分岐を行なうようにして
いる。また、命令読み込み手段と、少なくとも一つの命
令解読手段と、少なくとも一つの命令実行手段を備え、
前記命令読み込み手段と命令解読手段と命令実行手段が
並列に動作可能なプロセッサにおいて、前記命令読み込
み手段は、命令の読み込みを行うアドレスを保持するプ
ログラム・カウンタと、分岐予約命令が実行されたとき
該分岐予約命令が指定する分岐元のアドレスと分岐先の
アドレスの組を格納保持する分岐アドレス組保持手段
と、前記プログラム・カウンタの保持する値と前記分岐
アドレス組保持手段の保持する分岐アドレス組の内の分
岐元のアドレスとを比較する比較手段と、前記比較手段
による比較の結果が一致を示すとき、前記プログラム・
カウンタの保持する値を前記分岐アドレス組保持手段の
保持する分岐アドレス組の内の分岐先アドレスの値に切
り替えて出力する切り替え手段を備え、命令の読み込み
を行うアドレスが分岐予約命令の指定した分岐元のアド
レスと一致したとき、分岐予約命令が指定した分岐先の
アドレスの命令へ分岐を行うようにしている。さらに、
前記分岐アドレス組保持手段は、分岐先アドレスと分岐
元アドレスの組を複数保持でき、前記比較手段は、前記
分岐アドレス組保持手段に保持された分岐アドレス組の
内の最新の組を選択し、該選択した組の分岐元のアドレ
スの値と前記プログラム・カウンタの保持する値とを比
較するようにしている。さらに、前記分岐アドレス組保
持手段は、前記命令実行手段からの取り消し信号を受け
て該取り消し信号の指定する分岐元のアドレスと分岐先
のアドレスの組を消去する手段を備えるようにしてい
る。
【0010】
【実施例】本発明の実施例を図によって説明する。図1
は、本発明の一実施例を図示したものである。本発明は
プロセッサの、特に命令フェッチ(読み込み)アドレス
生成部において実施されるので、図1では命令フェッチ
アドレス生成部に限って示してある。プロセッサ全体の
構成については、一例を図2に掲げておく。図1では、
命令実行部で分岐予約命令が実行されることにより、分
岐元アドレスと分岐先アドレスが分岐アドレススタック
10に登録される。上記分岐予約命令はプログラムのコ
ンパイル時に予め作成され、分岐点に充分先立って命令
列中に配置される。すなわち、分岐点における分岐先の
決定は、多くの場合、予め「静的」=「プログラムのコ
ンパイル時」に或いはサブルーチンからの戻り(リター
ン)などのように動的に決定される場合にも、命令列中
で分岐をしなければならない分岐点に充分先立って行な
うことができる。そして、コンパイル時に分岐元アドレ
スと分岐先アドレスを指定する分岐予約命令が分岐点に
充分先立って命令列中に配置される。命令フェッチへは
通常はプログラムカウンタ(PC)12より命令読み込
みアドレスがフェッチアドレス101のパスへ出力され
ている。また、一回の命令読み込みごとに次の命令読み
込みアドレスがインクリメンタ(“+1”加算器)13
より計算されて、プログラムカウンタ12に書き戻され
る。プログラムカウンタ12の出力は、また比較器11
にも入力され、分岐アドレススタック10に登録されて
いる分岐元アドレスと一致していないかどうか、比較さ
れている。図1の例では、分岐アドレススタック10に
は複数の分岐元アドレスと分岐先アドレスの組が登録可
能であり、その中で最新の組が選ばれて、その分岐元ア
ドレスが比較器11に入力されている。比較器11で一
致が検出されると、分岐アドレススタック10に登録さ
れたその組の分岐先アドレスが取り出されセレクタ14
によりフェッチアドレス101のパスへ出力されて、命
令フェッチに用いられる。該分岐先アドレスが分岐アド
レススタック10から取り出されると、この分岐先アド
レスと分岐元アドレスの組が分岐アドレススタック10
から消去され、上の段に格納されていた組が最新の組と
なる。また同時に、分岐先アドレスがインクリメンタ1
3を通してプログラムカウンタ12に書き戻されるの
で、分岐先アドレスから以後再び連続して命令を読み込
むことが可能となる。
は、本発明の一実施例を図示したものである。本発明は
プロセッサの、特に命令フェッチ(読み込み)アドレス
生成部において実施されるので、図1では命令フェッチ
アドレス生成部に限って示してある。プロセッサ全体の
構成については、一例を図2に掲げておく。図1では、
命令実行部で分岐予約命令が実行されることにより、分
岐元アドレスと分岐先アドレスが分岐アドレススタック
10に登録される。上記分岐予約命令はプログラムのコ
ンパイル時に予め作成され、分岐点に充分先立って命令
列中に配置される。すなわち、分岐点における分岐先の
決定は、多くの場合、予め「静的」=「プログラムのコ
ンパイル時」に或いはサブルーチンからの戻り(リター
ン)などのように動的に決定される場合にも、命令列中
で分岐をしなければならない分岐点に充分先立って行な
うことができる。そして、コンパイル時に分岐元アドレ
スと分岐先アドレスを指定する分岐予約命令が分岐点に
充分先立って命令列中に配置される。命令フェッチへは
通常はプログラムカウンタ(PC)12より命令読み込
みアドレスがフェッチアドレス101のパスへ出力され
ている。また、一回の命令読み込みごとに次の命令読み
込みアドレスがインクリメンタ(“+1”加算器)13
より計算されて、プログラムカウンタ12に書き戻され
る。プログラムカウンタ12の出力は、また比較器11
にも入力され、分岐アドレススタック10に登録されて
いる分岐元アドレスと一致していないかどうか、比較さ
れている。図1の例では、分岐アドレススタック10に
は複数の分岐元アドレスと分岐先アドレスの組が登録可
能であり、その中で最新の組が選ばれて、その分岐元ア
ドレスが比較器11に入力されている。比較器11で一
致が検出されると、分岐アドレススタック10に登録さ
れたその組の分岐先アドレスが取り出されセレクタ14
によりフェッチアドレス101のパスへ出力されて、命
令フェッチに用いられる。該分岐先アドレスが分岐アド
レススタック10から取り出されると、この分岐先アド
レスと分岐元アドレスの組が分岐アドレススタック10
から消去され、上の段に格納されていた組が最新の組と
なる。また同時に、分岐先アドレスがインクリメンタ1
3を通してプログラムカウンタ12に書き戻されるの
で、分岐先アドレスから以後再び連続して命令を読み込
むことが可能となる。
【0011】図2では、プロセッサ1と主記憶2につい
て示してある。プロセッサ1では、図1のような構成を
取る命令フェッチアドレス生成部21を持つほかに、読
み込んだ命令を解読する命令デコード部22、解読結果
に従って命令を実行する命令実行部23、及びプロセッ
サ内でデータを蓄えるレジスタファイル24を備えてい
る。また主記憶2は、プロセッサ1の外の記憶要素であ
り、プロセッサ1とは、フェッチアドレス101、フェ
ッチ命令202、データアドレス203、書き込みデー
タ204、読み出しデータ205の各データパスによっ
て接続されている。主記憶2は、まず、フェッチアドレ
ス101のパスに出力された命令アドレスに従って記憶
されている命令をフェッチ命令202のパスに返す。ま
たデータアドレス203に出力されたデータアドレスに
従って書き込みデータ204のパスに出力されたデータ
を記録したり、読み出しデータ205のパスに記憶され
たデータを出力したりする。この主記憶2にはキャッシ
ュを含んでいても良い。主記憶2よりフェッチ命令20
2のパスに読み出された命令は、フェッチアドレス10
1による命令アドレスと共に命令デコード部22に送ら
れる。命令デコード部22では、命令を解読して解読結
果を命令実行部23に送ると同時にレジスタファイル2
4より必要なレジスタの内容を読み出して、同じく命令
実行部23に送る。命令実行部23では、送られた命令
解読結果及びレジスタの内容を用いて命令を実行し、実
行結果をレジスタファイル24に書き戻したり、主記憶
25に対してデータの読み出し/書き込みを行ったりす
る。特に分岐予約命令の時には、実行の結果定まる分岐
元アドレスと分岐先アドレスの値をそれぞれ分岐元アド
レス206、分岐先アドレス207のパスに出力し、命
令フェッチアドレス生成部21に送る。図2では、以上
のような命令フェッチアドレス生成部21、命令デコー
ド部22、及び命令実行部23の動作は並列に行われて
いるものとする。即ち、これによって命令の処理がパイ
プライン化されている。
て示してある。プロセッサ1では、図1のような構成を
取る命令フェッチアドレス生成部21を持つほかに、読
み込んだ命令を解読する命令デコード部22、解読結果
に従って命令を実行する命令実行部23、及びプロセッ
サ内でデータを蓄えるレジスタファイル24を備えてい
る。また主記憶2は、プロセッサ1の外の記憶要素であ
り、プロセッサ1とは、フェッチアドレス101、フェ
ッチ命令202、データアドレス203、書き込みデー
タ204、読み出しデータ205の各データパスによっ
て接続されている。主記憶2は、まず、フェッチアドレ
ス101のパスに出力された命令アドレスに従って記憶
されている命令をフェッチ命令202のパスに返す。ま
たデータアドレス203に出力されたデータアドレスに
従って書き込みデータ204のパスに出力されたデータ
を記録したり、読み出しデータ205のパスに記憶され
たデータを出力したりする。この主記憶2にはキャッシ
ュを含んでいても良い。主記憶2よりフェッチ命令20
2のパスに読み出された命令は、フェッチアドレス10
1による命令アドレスと共に命令デコード部22に送ら
れる。命令デコード部22では、命令を解読して解読結
果を命令実行部23に送ると同時にレジスタファイル2
4より必要なレジスタの内容を読み出して、同じく命令
実行部23に送る。命令実行部23では、送られた命令
解読結果及びレジスタの内容を用いて命令を実行し、実
行結果をレジスタファイル24に書き戻したり、主記憶
25に対してデータの読み出し/書き込みを行ったりす
る。特に分岐予約命令の時には、実行の結果定まる分岐
元アドレスと分岐先アドレスの値をそれぞれ分岐元アド
レス206、分岐先アドレス207のパスに出力し、命
令フェッチアドレス生成部21に送る。図2では、以上
のような命令フェッチアドレス生成部21、命令デコー
ド部22、及び命令実行部23の動作は並列に行われて
いるものとする。即ち、これによって命令の処理がパイ
プライン化されている。
【0012】図3は、命令フェッチアドレス生成部21
についての、本発明の別の実施例である。図3では、分
岐アドレスレジスタ30に一組だけの分岐元アドレス及
び分岐先アドレスの値が保持されている。また命令実行
部からは、図1の実施例では分岐元アドレスと分岐先ア
ドレスの設定信号だけであったが、図3の例ではそれに
加えて設定取り消し信号も備えられている。分岐先アド
レスが分岐アドレスレジスタ30から取り出されると、
この分岐先アドレスの組、すなわち分岐先アドレスと分
岐元アドレス、が分岐アドレスレジスタ30から消去さ
れることは図1の場合と同様である。命令実行部におい
て条件取り消し命令が実行され、その条件取り消し命令
で指定された条件(例えば、フラグA=1)が成立して
いると、この設定取り消し信号が出力され、これにより
分岐アドレスレジスタ30に一旦登録されていた分岐元
アドレスと分岐先アドレスが取り消されて無効となる。
これにより条件分岐の処理を実現している。その他の比
較器11、プログラムカウンタ12、インクリメンタ1
3、セレクタ14の構成は図1と同じである。
についての、本発明の別の実施例である。図3では、分
岐アドレスレジスタ30に一組だけの分岐元アドレス及
び分岐先アドレスの値が保持されている。また命令実行
部からは、図1の実施例では分岐元アドレスと分岐先ア
ドレスの設定信号だけであったが、図3の例ではそれに
加えて設定取り消し信号も備えられている。分岐先アド
レスが分岐アドレスレジスタ30から取り出されると、
この分岐先アドレスの組、すなわち分岐先アドレスと分
岐元アドレス、が分岐アドレスレジスタ30から消去さ
れることは図1の場合と同様である。命令実行部におい
て条件取り消し命令が実行され、その条件取り消し命令
で指定された条件(例えば、フラグA=1)が成立して
いると、この設定取り消し信号が出力され、これにより
分岐アドレスレジスタ30に一旦登録されていた分岐元
アドレスと分岐先アドレスが取り消されて無効となる。
これにより条件分岐の処理を実現している。その他の比
較器11、プログラムカウンタ12、インクリメンタ1
3、セレクタ14の構成は図1と同じである。
【0013】図8は、さらに別の実施例であり、図1に
示す構成に図3に示す設定取り消し信号を備えたもので
ある。この設定取り消し信号により分岐アドレススタッ
ク10の最下段の組、すなわち最新の予約の組、を取り
消すようにしている。なお、分岐アドレススタック10
に設定された複数の予約の組の内どれを取り消すかを指
定するようにしてもよい。
示す構成に図3に示す設定取り消し信号を備えたもので
ある。この設定取り消し信号により分岐アドレススタッ
ク10の最下段の組、すなわち最新の予約の組、を取り
消すようにしている。なお、分岐アドレススタック10
に設定された複数の予約の組の内どれを取り消すかを指
定するようにしてもよい。
【0014】図4は、分岐予約命令の例および分岐の予
約を取り消す命令の例である。図4(a)は最も基本的
な分岐予約命令の形式であり、分岐元アドレス(fro
m_addr)、及び分岐先アドレス(to_add
r)の二つを命令中で値を指定する即値オペランドとし
て持つ。この二つの即値オペランドの内のどちらか、あ
るいは両方とも、現在のプログラムカウンタの値からの
相対値としても良い。相対値によるアドレス計算が必要
であれば、例えば図2の例では命令実行部23で計算さ
せることができる。
約を取り消す命令の例である。図4(a)は最も基本的
な分岐予約命令の形式であり、分岐元アドレス(fro
m_addr)、及び分岐先アドレス(to_add
r)の二つを命令中で値を指定する即値オペランドとし
て持つ。この二つの即値オペランドの内のどちらか、あ
るいは両方とも、現在のプログラムカウンタの値からの
相対値としても良い。相対値によるアドレス計算が必要
であれば、例えば図2の例では命令実行部23で計算さ
せることができる。
【0015】図4(b)は他の分岐予約命令の形式であ
り、図4(a)に対し、分岐先アドレスをレジスタ(r
eg)の内容で指定できるにようにした例である。この
命令が実行されると、上記レジスタ(reg)の内容を
参照して、分岐先アドレスを求め、命令で指定された分
岐元アドレスと求められた分岐先アドレスを組として分
岐アドレススタックあるいは分岐アドレスレジスタに設
定する。このような命令形式は、サブルーチンからの戻
り(リターン)など、実行時に動的に分岐先が決まる場
合や、図4(a)では二つの即値に対して、(コンパイ
ラにより機械語を生成する際の)命令のエンコードに必
要なビット数が不足して充分大きな値を設定できない場
合にも有効である。
り、図4(a)に対し、分岐先アドレスをレジスタ(r
eg)の内容で指定できるにようにした例である。この
命令が実行されると、上記レジスタ(reg)の内容を
参照して、分岐先アドレスを求め、命令で指定された分
岐元アドレスと求められた分岐先アドレスを組として分
岐アドレススタックあるいは分岐アドレスレジスタに設
定する。このような命令形式は、サブルーチンからの戻
り(リターン)など、実行時に動的に分岐先が決まる場
合や、図4(a)では二つの即値に対して、(コンパイ
ラにより機械語を生成する際の)命令のエンコードに必
要なビット数が不足して充分大きな値を設定できない場
合にも有効である。
【0016】図4(c)は、一旦予約した分岐を条件的
に取り消す命令の例である。これを図4(a)または
(b)のような分岐予約命令と組み合わせれば、条件分
岐の処理を実現できる。対象とするプロセッサで図8の
実施例のように同時に複数の分岐予約ができる場合に
は、どの予約を取り消すのかも指定する必要があるが、
ここでは図8の説明で述べたように、常に最新の予約の
組を取り消すと定める。そのため図4(c)では、取り
消すための条件のみを命令中のconditionで指
定する形式となっている。すなわち、条件として、例え
ば、フラグA=1を指定すれば、フラグA=1が成立し
ている場合、設定取り消し信号が分岐アドレススタック
10に与えられ、最新の予約の組が強制的に取り消され
る。このように複数の組から最新のものを選ぶ機能は、
図1のような実施例では、比較器11に供給する分岐元
アドレスをどの組から選ぶか決定されている際に用いら
れるものであるので、これを取り消す組の選択にも利用
することが可能である。
に取り消す命令の例である。これを図4(a)または
(b)のような分岐予約命令と組み合わせれば、条件分
岐の処理を実現できる。対象とするプロセッサで図8の
実施例のように同時に複数の分岐予約ができる場合に
は、どの予約を取り消すのかも指定する必要があるが、
ここでは図8の説明で述べたように、常に最新の予約の
組を取り消すと定める。そのため図4(c)では、取り
消すための条件のみを命令中のconditionで指
定する形式となっている。すなわち、条件として、例え
ば、フラグA=1を指定すれば、フラグA=1が成立し
ている場合、設定取り消し信号が分岐アドレススタック
10に与えられ、最新の予約の組が強制的に取り消され
る。このように複数の組から最新のものを選ぶ機能は、
図1のような実施例では、比較器11に供給する分岐元
アドレスをどの組から選ぶか決定されている際に用いら
れるものであるので、これを取り消す組の選択にも利用
することが可能である。
【0017】図4(d)は、一旦予約した分岐を条件的
に取り消す命令の別の例である。これは、指定された二
つのレジスタ%a及び%bの内容を比較し、更にcon
ditionで指定した条件が成立していれば、図4
(c)と同じく最も最近に予約された分岐を取り消す。
この命令は、条件分岐の処理によく現われる比較を行う
命令と、図4(c)にあるような取り消す条件のみを指
定する条件付き取り消し命令との融合命令である。この
ような命令を設けることにより、特に図4(c)のよう
な予約した分岐を取り消すための命令を別個に実行する
必要がなくなり、命令数が削減される。また図4(d)
では、命令で指定しなければならないオペランドは比較
の対象となるレジスタ二つと、分岐を取り消すための条
件の計三つであり、簡単であるので、命令のエンコード
にも難点はない。もし、命令のエンコードに難点が予想
されるような複雑な条件を指定するなど、図4(d)の
ように一命令で実現するには複雑な実施を行う場合に
は、図4(c)のような条件のみを指定する分岐取り消
し命令と、通常の比較命令などを組み合わせて行えばよ
い。
に取り消す命令の別の例である。これは、指定された二
つのレジスタ%a及び%bの内容を比較し、更にcon
ditionで指定した条件が成立していれば、図4
(c)と同じく最も最近に予約された分岐を取り消す。
この命令は、条件分岐の処理によく現われる比較を行う
命令と、図4(c)にあるような取り消す条件のみを指
定する条件付き取り消し命令との融合命令である。この
ような命令を設けることにより、特に図4(c)のよう
な予約した分岐を取り消すための命令を別個に実行する
必要がなくなり、命令数が削減される。また図4(d)
では、命令で指定しなければならないオペランドは比較
の対象となるレジスタ二つと、分岐を取り消すための条
件の計三つであり、簡単であるので、命令のエンコード
にも難点はない。もし、命令のエンコードに難点が予想
されるような複雑な条件を指定するなど、図4(d)の
ように一命令で実現するには複雑な実施を行う場合に
は、図4(c)のような条件のみを指定する分岐取り消
し命令と、通常の比較命令などを組み合わせて行えばよ
い。
【0018】次に本発明を、従来の分岐方式と比較して
みる。図5は、本発明による分岐予約を行うプロセッサ
と、従来のプロセッサでの条件分岐を行う命令列の例で
ある。まず、図5(a)にC言語による条件処理の例を
掲げる。図中指定された条件(a==b)が成立すると
then部が、不成立の時にはelse部が実行され
る。図5(a)のような条件分岐の処理を従来の分岐命
令を持つプロセッサの命令列で実現した例が図5(b)
である。図5(b)では、変数a及びbの値が予めレジ
スタ%a及び%bにそれぞれ保持されているものとす
る。まず比較命令 compare %a、%b によ
り変数a、bの値が等しいかどうか調べられ、等しくな
い時、条件分岐命令 branch not_equa
l、L1によりelse部の処理を行うラベルL1以下
へ分岐する。変数a、 bの値が等しい時はラベルL1
への分岐は行われず、then部の処理を行うラベルL
0以下が実行される。そしてthen部の最後に、ラベ
ルL1以下のelse部の処理を行なわずに、処理をラ
ベルL2以下の処理に続けるために、無条件分岐命令
branch L2 によりラベルL2へ分岐する。
みる。図5は、本発明による分岐予約を行うプロセッサ
と、従来のプロセッサでの条件分岐を行う命令列の例で
ある。まず、図5(a)にC言語による条件処理の例を
掲げる。図中指定された条件(a==b)が成立すると
then部が、不成立の時にはelse部が実行され
る。図5(a)のような条件分岐の処理を従来の分岐命
令を持つプロセッサの命令列で実現した例が図5(b)
である。図5(b)では、変数a及びbの値が予めレジ
スタ%a及び%bにそれぞれ保持されているものとす
る。まず比較命令 compare %a、%b によ
り変数a、bの値が等しいかどうか調べられ、等しくな
い時、条件分岐命令 branch not_equa
l、L1によりelse部の処理を行うラベルL1以下
へ分岐する。変数a、 bの値が等しい時はラベルL1
への分岐は行われず、then部の処理を行うラベルL
0以下が実行される。そしてthen部の最後に、ラベ
ルL1以下のelse部の処理を行なわずに、処理をラ
ベルL2以下の処理に続けるために、無条件分岐命令
branch L2 によりラベルL2へ分岐する。
【0019】これに対し、本発明による分岐予約方式の
命令列は図5(c)のようになる。図5(c)では、初
めに条件が不成立だったとき実行されるラベルL1以下
のelse部への分岐を命令 branch_targ
et L0、L1 により予約しておく。図5(c)で
も図5(b)と同じく、変数a及びbの値は予めレジス
タ%a及び%bにそれぞれ保持されているものとする。
これにより、比較付き条件取り消し命令 compar
e_and_pop %a、%b、equal でまず
変数a、bの値の比較を行う。そして変数a、 bの値
が等しいという条件が成立していた時のみ、else部
への分岐の予約を取り消す。実際には、この予約の取り
消しも分岐点L0の命令の読み込み前に終了できるよう
にコンパイラで命令列のスケジューリングの最適化が行
われるものとする。もし最適化が行われず条件取り消し
命令による予約の取り消しが分岐点の命令の実行の直前
となり、その読み込みに間に合わなかったときには、予
約に従って読み込まれていた命令を取り消すなどの制御
が必要である。逆に図5(b)のような従来のプロセッ
サの命令列との大きな違いは、分岐点L0までの命令が
すべて予約に関する命令であり、分岐点L0(の直前)
には何の命令も置く必要はないので、分岐点L0よりか
なり以前に遡る命令のスケジューリングも可能であると
言うことである。即ちコンパイラにおける命令スケジュ
ーリングの最適化に関する自由度が大きい。図5(c)
において、条件取り消し命令によって分岐予約が取り消
された時にはラベルL0以下のthen部が実行される
が、その先頭で命令 branch_target L
1、 L2 でthen部の終り(else部の直前)
L1からの分岐を予約し、then部の処理の終了後、
ラベルL1以下のelse部の処理をすることなく、滞
り無く次のラベルL2以下の処理を続けられるようにし
ている。この場合も分岐点となるラベルL1(の直前)
には何の命令も置く必要もなく、命令のスケジューリン
グに大きな自由度がある。
命令列は図5(c)のようになる。図5(c)では、初
めに条件が不成立だったとき実行されるラベルL1以下
のelse部への分岐を命令 branch_targ
et L0、L1 により予約しておく。図5(c)で
も図5(b)と同じく、変数a及びbの値は予めレジス
タ%a及び%bにそれぞれ保持されているものとする。
これにより、比較付き条件取り消し命令 compar
e_and_pop %a、%b、equal でまず
変数a、bの値の比較を行う。そして変数a、 bの値
が等しいという条件が成立していた時のみ、else部
への分岐の予約を取り消す。実際には、この予約の取り
消しも分岐点L0の命令の読み込み前に終了できるよう
にコンパイラで命令列のスケジューリングの最適化が行
われるものとする。もし最適化が行われず条件取り消し
命令による予約の取り消しが分岐点の命令の実行の直前
となり、その読み込みに間に合わなかったときには、予
約に従って読み込まれていた命令を取り消すなどの制御
が必要である。逆に図5(b)のような従来のプロセッ
サの命令列との大きな違いは、分岐点L0までの命令が
すべて予約に関する命令であり、分岐点L0(の直前)
には何の命令も置く必要はないので、分岐点L0よりか
なり以前に遡る命令のスケジューリングも可能であると
言うことである。即ちコンパイラにおける命令スケジュ
ーリングの最適化に関する自由度が大きい。図5(c)
において、条件取り消し命令によって分岐予約が取り消
された時にはラベルL0以下のthen部が実行される
が、その先頭で命令 branch_target L
1、 L2 でthen部の終り(else部の直前)
L1からの分岐を予約し、then部の処理の終了後、
ラベルL1以下のelse部の処理をすることなく、滞
り無く次のラベルL2以下の処理を続けられるようにし
ている。この場合も分岐点となるラベルL1(の直前)
には何の命令も置く必要もなく、命令のスケジューリン
グに大きな自由度がある。
【0020】図6は、本発明による分岐予約を行うプロ
セッサでの、サブルーチン呼び出し/戻りを行う命令列
の例である。サブルーチン呼び出しでは、サブルーチン
の先頭アドレスは多くの場合静的に決定でき、本発明の
分岐予約方式を容易に適用できる。またサブルーチンか
らの戻り(リターン)は、戻り先が一般には動的に決定
されるが、その決定の時点はサブルーチンの呼び出し時
であり、実際の分岐点であるサブルーチンの終りに充分
先立って決定されている。これらのことから、サブルー
チンの呼び出し/戻りにも、本発明による分岐予約方式
を適用して効率を高めることができる。
セッサでの、サブルーチン呼び出し/戻りを行う命令列
の例である。サブルーチン呼び出しでは、サブルーチン
の先頭アドレスは多くの場合静的に決定でき、本発明の
分岐予約方式を容易に適用できる。またサブルーチンか
らの戻り(リターン)は、戻り先が一般には動的に決定
されるが、その決定の時点はサブルーチンの呼び出し時
であり、実際の分岐点であるサブルーチンの終りに充分
先立って決定されている。これらのことから、サブルー
チンの呼び出し/戻りにも、本発明による分岐予約方式
を適用して効率を高めることができる。
【0021】図6において、サブルーチンL2の呼び出
しを命令 branch_target L1、L2
によって実際の呼び出し点L1に充分先立って予約して
いる。またサブルーチンからの戻りアドレスを設定する
ために、呼び出し点L1までに命令 mov L1、%
r1 で戻りアドレスL1(図6の例では呼び出し点に
同じ)をレジスタ%r1に設定しておく。呼び出された
側のサブルーチンL2では、サブルーチンの終りL3ま
でにレジスタ%r1の内容を分岐先とする分岐予約命令
branch_on_register L3、%r
1 により戻り先を予約しておく。以上のような命令列
によって、呼び出し点L1よりサブルーチンL2が呼び
出され、サブルーチンの終りL3から再び戻り点L1へ
戻るという動作が分岐予約により実現される。
しを命令 branch_target L1、L2
によって実際の呼び出し点L1に充分先立って予約して
いる。またサブルーチンからの戻りアドレスを設定する
ために、呼び出し点L1までに命令 mov L1、%
r1 で戻りアドレスL1(図6の例では呼び出し点に
同じ)をレジスタ%r1に設定しておく。呼び出された
側のサブルーチンL2では、サブルーチンの終りL3ま
でにレジスタ%r1の内容を分岐先とする分岐予約命令
branch_on_register L3、%r
1 により戻り先を予約しておく。以上のような命令列
によって、呼び出し点L1よりサブルーチンL2が呼び
出され、サブルーチンの終りL3から再び戻り点L1へ
戻るという動作が分岐予約により実現される。
【0022】次に実際のパイプラインの動作として、本
発明による分岐予約と従来の例を比較してみる。図7
は、図1、図3あるいは図8で示したような本発明によ
る分岐予約を行うプロセッサで実際の分岐が生じている
時のパイプライン動作と、従来のプロセッサの分岐のパ
イプライン動作の比較である。ここで、Fは命令フェッ
チ、Dは命令デコード、Eは命令実行、Mはメモリ・ア
クセス、Wはレジスタ・ライトバック、また、矢印は分
岐アドレスの供給を示す。
発明による分岐予約と従来の例を比較してみる。図7
は、図1、図3あるいは図8で示したような本発明によ
る分岐予約を行うプロセッサで実際の分岐が生じている
時のパイプライン動作と、従来のプロセッサの分岐のパ
イプライン動作の比較である。ここで、Fは命令フェッ
チ、Dは命令デコード、Eは命令実行、Mはメモリ・ア
クセス、Wはレジスタ・ライトバック、また、矢印は分
岐アドレスの供給を示す。
【0023】図7(a)は従来の分岐方式による分岐処
理時のパイプライン動作の例である。分岐命令の直前
(分岐点)の命令、分岐命令、分岐命令の結果次に分岐
先の命令を読み込めるまでのディレイスロット1サイク
ルと、分岐先の命令の各実行サイクルをパイプラインに
沿って図示してある。図7(a)のように、従来の方式
では、最低限分岐命令が読み込まれて命令デコードサイ
クル(D)まで達しないと分岐先が決定できない。この
ため図7(a)では、分岐の直前(分岐点)の命令から
分岐先の命令までの間に分岐命令とそのディレイスロッ
トの2サイクルが存在する。これに対し、図7(b)に
本発明による分岐予約方式のパイプライン動作の例を示
す。図7(b)では、分岐点には、分岐のためには何ら
命令を必要としない。分岐点の命令(分岐の直前の命
令)のフェッチサイクル(F)において、命令の読み込
みが分岐点まで達っしたことが検出されると、図1、図
3、図8で説明したような機構で速やかに分岐先の命令
の読み込みを開始できる。分岐点の命令と分岐先の命令
の間にも余計なサイクルは不要である。このようにパイ
プラインにおける動作を非常に効率化できる。
理時のパイプライン動作の例である。分岐命令の直前
(分岐点)の命令、分岐命令、分岐命令の結果次に分岐
先の命令を読み込めるまでのディレイスロット1サイク
ルと、分岐先の命令の各実行サイクルをパイプラインに
沿って図示してある。図7(a)のように、従来の方式
では、最低限分岐命令が読み込まれて命令デコードサイ
クル(D)まで達しないと分岐先が決定できない。この
ため図7(a)では、分岐の直前(分岐点)の命令から
分岐先の命令までの間に分岐命令とそのディレイスロッ
トの2サイクルが存在する。これに対し、図7(b)に
本発明による分岐予約方式のパイプライン動作の例を示
す。図7(b)では、分岐点には、分岐のためには何ら
命令を必要としない。分岐点の命令(分岐の直前の命
令)のフェッチサイクル(F)において、命令の読み込
みが分岐点まで達っしたことが検出されると、図1、図
3、図8で説明したような機構で速やかに分岐先の命令
の読み込みを開始できる。分岐点の命令と分岐先の命令
の間にも余計なサイクルは不要である。このようにパイ
プラインにおける動作を非常に効率化できる。
【0024】図9A〜Cは、本発明の予約による分岐の
パイプラインの動作と、従来の予測による分岐のパイプ
ライン動作の違いを示した例である。図9A〜Cにおい
て、Fは命令のフェッチ(読み込み)、Dは命令のデコ
ード(解読)、Eは命令の実行、Mはメモリ(キャッシ
ュまたは主記憶)のアクセス、Wは命令の結果のレジス
タへの書き戻しの動作を行うパイプライン・ステージを
示す。また、分岐先アドレスの供給を実線の矢印で表し
ている。更に、分岐点の命令フェッチの開始時点をSP
1、分岐先の命令フェッチの開始時点をSP2として示
してある。
パイプラインの動作と、従来の予測による分岐のパイプ
ライン動作の違いを示した例である。図9A〜Cにおい
て、Fは命令のフェッチ(読み込み)、Dは命令のデコ
ード(解読)、Eは命令の実行、Mはメモリ(キャッシ
ュまたは主記憶)のアクセス、Wは命令の結果のレジス
タへの書き戻しの動作を行うパイプライン・ステージを
示す。また、分岐先アドレスの供給を実線の矢印で表し
ている。更に、分岐点の命令フェッチの開始時点をSP
1、分岐先の命令フェッチの開始時点をSP2として示
してある。
【0025】図9Aは、従来の予測による分岐の方法に
おいて、分岐が生じたときに予測が誤っていた場合のパ
イプライン動作の例である。図9Aにおいて、命令1は
分岐点(分岐命令の直前)の命令、命令2は分岐命令、
命令3は分岐命令に後続する、誤った予測によってフェ
ッチされた命令である。また命令4は正しい分岐先の命
令である。分岐の予測の誤りは分岐命令(命令2)がD
ステージで解読されて、検出可能となる。このとき、分
岐命令に後続する命令3は既にFステージで読み込まれ
ているので、命令3のデコードおよびそれ以降の動作を
取り消さなければならない。また同時に正しい分岐先の
命令4をフェッチし直す必要がある。正しい分岐先、即
ち命令4のアドレスは、分岐命令のDステージ以降で生
成されるので、結果として、分岐先の命令フェッチ(S
P2)は、分岐点の命令フェッチ(SP1)から3サイ
クルかかることになる。
おいて、分岐が生じたときに予測が誤っていた場合のパ
イプライン動作の例である。図9Aにおいて、命令1は
分岐点(分岐命令の直前)の命令、命令2は分岐命令、
命令3は分岐命令に後続する、誤った予測によってフェ
ッチされた命令である。また命令4は正しい分岐先の命
令である。分岐の予測の誤りは分岐命令(命令2)がD
ステージで解読されて、検出可能となる。このとき、分
岐命令に後続する命令3は既にFステージで読み込まれ
ているので、命令3のデコードおよびそれ以降の動作を
取り消さなければならない。また同時に正しい分岐先の
命令4をフェッチし直す必要がある。正しい分岐先、即
ち命令4のアドレスは、分岐命令のDステージ以降で生
成されるので、結果として、分岐先の命令フェッチ(S
P2)は、分岐点の命令フェッチ(SP1)から3サイ
クルかかることになる。
【0026】図9Bは、従来の予測による分岐の方法に
おいて、分岐が生じたときに予測が正しかった場合であ
る。図9Bにおいて、命令1は分岐点(分岐命令の直
前)の命令、命令2は分岐命令、命令3は予測によって
フェッチされた分岐先の命令である。分岐の予測は分岐
命令(命令2)のフェッチによって行われるので、図の
ように、分岐命令の読み込みに続いて、遅滞なくすぐ次
のサイクルで分岐先の命令3のフェッチを開始すること
が可能である。結果として分岐点の命令フェッチ(SP
1)から2サイクルで分岐先の命令フェッチ(SP2)
が始まっている。
おいて、分岐が生じたときに予測が正しかった場合であ
る。図9Bにおいて、命令1は分岐点(分岐命令の直
前)の命令、命令2は分岐命令、命令3は予測によって
フェッチされた分岐先の命令である。分岐の予測は分岐
命令(命令2)のフェッチによって行われるので、図の
ように、分岐命令の読み込みに続いて、遅滞なくすぐ次
のサイクルで分岐先の命令3のフェッチを開始すること
が可能である。結果として分岐点の命令フェッチ(SP
1)から2サイクルで分岐先の命令フェッチ(SP2)
が始まっている。
【0027】図9Bのように正しい予測が行われるため
には、分岐命令2が1回以上実行されて、分岐先が記録
されている必要がある。また同時に予測に用いているア
ルゴリズムが該分岐命令の動作を正しく予測できなけれ
ばならない。従って、分岐命令2の初回の実行、および
予測のアルゴリズムが正しく予測できないときには、パ
イプラインの動作は図9Aに示したようになり、3サイ
クルかかることになる。
には、分岐命令2が1回以上実行されて、分岐先が記録
されている必要がある。また同時に予測に用いているア
ルゴリズムが該分岐命令の動作を正しく予測できなけれ
ばならない。従って、分岐命令2の初回の実行、および
予測のアルゴリズムが正しく予測できないときには、パ
イプラインの動作は図9Aに示したようになり、3サイ
クルかかることになる。
【0028】これらに対し、図9Cに本発明の予約によ
る分岐のパイプライン動作を示す。図9Cにおいて、命
令1は分岐予約命令、命令2は通常の命令、命令3は分
岐点の命令、命令4は分岐先の命令である。パイプライ
ンの動作では、まず、分岐予約命令(命令1)の実行に
よりEステージで、分岐点のアドレスと分岐先のアドレ
スの両方が登録されて、分岐の予約が行われる。分岐予
約命令は、命令のフェッチが分岐が生じる分岐点に達す
る充分前に行われるように、コンパイラによってプログ
ラムのコード生成時に配置される。その後、図9Cで
は、一個以上の通常命令(命令2)がフェッチされ、実
行される。そして、命令のフェッチが分岐点の命令3に
達したことがFステージで検出されると、命令のフェッ
チアドレスがすぐに分岐予約命令1で登録された分岐先
アドレスに切り替えられ、遅滞なく分岐先の命令4のフ
ェッチが行われる。このとき、分岐が生じる分岐点にお
いては、分岐に関る命令はなんら実行される必要はな
い。分岐点の命令3も命令2と同じく、任意の通常命令
でよい。結果として、分岐点の命令3のフェッチ(SP
1)から1サイクルで、分岐先の命令4のフェッチが行
われている。図9Cのようなパイプライン動作は、本発
明の予約による分岐では、分岐予約命令の初回の実行か
ら常に可能である。
る分岐のパイプライン動作を示す。図9Cにおいて、命
令1は分岐予約命令、命令2は通常の命令、命令3は分
岐点の命令、命令4は分岐先の命令である。パイプライ
ンの動作では、まず、分岐予約命令(命令1)の実行に
よりEステージで、分岐点のアドレスと分岐先のアドレ
スの両方が登録されて、分岐の予約が行われる。分岐予
約命令は、命令のフェッチが分岐が生じる分岐点に達す
る充分前に行われるように、コンパイラによってプログ
ラムのコード生成時に配置される。その後、図9Cで
は、一個以上の通常命令(命令2)がフェッチされ、実
行される。そして、命令のフェッチが分岐点の命令3に
達したことがFステージで検出されると、命令のフェッ
チアドレスがすぐに分岐予約命令1で登録された分岐先
アドレスに切り替えられ、遅滞なく分岐先の命令4のフ
ェッチが行われる。このとき、分岐が生じる分岐点にお
いては、分岐に関る命令はなんら実行される必要はな
い。分岐点の命令3も命令2と同じく、任意の通常命令
でよい。結果として、分岐点の命令3のフェッチ(SP
1)から1サイクルで、分岐先の命令4のフェッチが行
われている。図9Cのようなパイプライン動作は、本発
明の予約による分岐では、分岐予約命令の初回の実行か
ら常に可能である。
【0029】図10A〜Bは、本発明による分岐予約命
令を用いてプログラムをコンパイルしてコード生成を行
う例を示したものである。図10Aでは、プログラムを
コンパイルする際の、コンパイラの全体の操作の例を示
してある。まずステップ110でコンパイルするプログ
ラムのソースが読み込まれ、ステップ120で構文解析
及び文法チェックが行われる。次にステップ130では
プログラムの意味解析が行われ、ステップ140で制御
フローグラフを、ステップ150でデータフローグラフ
が生成される。これらのフローグラフの情報を元にステ
ップ160で大域的最適化及び局所的最適化が行われ、
ステップ170で実際の機械コードが生成されて、出力
される。
令を用いてプログラムをコンパイルしてコード生成を行
う例を示したものである。図10Aでは、プログラムを
コンパイルする際の、コンパイラの全体の操作の例を示
してある。まずステップ110でコンパイルするプログ
ラムのソースが読み込まれ、ステップ120で構文解析
及び文法チェックが行われる。次にステップ130では
プログラムの意味解析が行われ、ステップ140で制御
フローグラフを、ステップ150でデータフローグラフ
が生成される。これらのフローグラフの情報を元にステ
ップ160で大域的最適化及び局所的最適化が行われ、
ステップ170で実際の機械コードが生成されて、出力
される。
【0030】図10Bは、図10Aのステップ170に
おける機械コード生成を詳細に示したものである。図1
0Bにおいて、まずステップ171で各基本ブロック毎
にその中に含まれる演算操作が決定される。次にステッ
プ172でそれぞれの演算操作に対応する機械命令を生
成する。ステップ173で機械命令コードにおける最適
化を行う。そしてステップ174で分岐予約命令を各基
本ブロックの先頭に挿入する。最後にステップ175で
生成した機械コードの列を出力する。
おける機械コード生成を詳細に示したものである。図1
0Bにおいて、まずステップ171で各基本ブロック毎
にその中に含まれる演算操作が決定される。次にステッ
プ172でそれぞれの演算操作に対応する機械命令を生
成する。ステップ173で機械命令コードにおける最適
化を行う。そしてステップ174で分岐予約命令を各基
本ブロックの先頭に挿入する。最後にステップ175で
生成した機械コードの列を出力する。
【0031】図10Cは実際にコンパイルされるプログ
ラムのソースの構造の例を示している。また図10Dは
図10Cのプログラムをコンパイルした結果を示してい
る。これらにおいて、基本ブロックはA〜Dの4個が示
されている。図10Cでは、プログラムの構造を基本ブ
ロックA〜Dの接続として示してある。即ちプログラム
は基本ブロックAから開始され、基本ブロックAの終わ
りから基本ブロックBまたはCへ条件分岐を行う。基本
ブロックB及びCは基本ブロックDへ無条件に分岐す
る。基本ブロックDをすべて実行するとプログラムが終
了する。
ラムのソースの構造の例を示している。また図10Dは
図10Cのプログラムをコンパイルした結果を示してい
る。これらにおいて、基本ブロックはA〜Dの4個が示
されている。図10Cでは、プログラムの構造を基本ブ
ロックA〜Dの接続として示してある。即ちプログラム
は基本ブロックAから開始され、基本ブロックAの終わ
りから基本ブロックBまたはCへ条件分岐を行う。基本
ブロックB及びCは基本ブロックDへ無条件に分岐す
る。基本ブロックDをすべて実行するとプログラムが終
了する。
【0032】このような分岐を本発明の分岐予約命令を
用いて実現すると、図10Dに示したような機械コード
列となる。即ち、基本ブロックAの先頭には、Aの終わ
りからCの先頭への分岐を予約する分岐予約命令が置か
れる。その後、基本ブロックAの演算を行う機械命令と
共に、条件分岐を行うための条件生成の命令が置かれ、
これを受けて分岐予約の取り消しを行う条件取消命令も
置かれる。基本ブロックAの命令列の直後には基本ブロ
ックBの命令列が配置され、基本ブロックAの命令列に
おいて生成された条件が成立していると、条件取消命令
により、基本ブロックAの先頭で予約された分岐が取り
消され、命令の実行はそのまま基本ブロックBに移る。
このとき、条件取消命令で指定する条件は分岐を取り消
す条件、即ち分岐しない条件である。この条件が不成立
の時には、条件取消命令が実行されても予約の取り消し
は行われず、基本ブロックAの命令列の最後から(最後
の命令をフェッチすると)、予約された分岐が実行さ
れ、命令の実行が基本ブロックCに移る。基本ブロック
Bの先頭には、Bの終わりからDの先頭への分岐を予約
する分岐予約命令が置かれ、Bの終わりからは(無条件
に)Dの先頭への分岐が起こる。従って、図10Dのよ
うに基本ブロックCの命令列を基本ブロックBの命令列
の直後に配置することが可能であり、基本ブロックDの
命令列をCの直後に配置しておけば、図10Cに示した
基本ブロックB及びCから基本ブロックDへの無条件分
岐が表現できる。
用いて実現すると、図10Dに示したような機械コード
列となる。即ち、基本ブロックAの先頭には、Aの終わ
りからCの先頭への分岐を予約する分岐予約命令が置か
れる。その後、基本ブロックAの演算を行う機械命令と
共に、条件分岐を行うための条件生成の命令が置かれ、
これを受けて分岐予約の取り消しを行う条件取消命令も
置かれる。基本ブロックAの命令列の直後には基本ブロ
ックBの命令列が配置され、基本ブロックAの命令列に
おいて生成された条件が成立していると、条件取消命令
により、基本ブロックAの先頭で予約された分岐が取り
消され、命令の実行はそのまま基本ブロックBに移る。
このとき、条件取消命令で指定する条件は分岐を取り消
す条件、即ち分岐しない条件である。この条件が不成立
の時には、条件取消命令が実行されても予約の取り消し
は行われず、基本ブロックAの命令列の最後から(最後
の命令をフェッチすると)、予約された分岐が実行さ
れ、命令の実行が基本ブロックCに移る。基本ブロック
Bの先頭には、Bの終わりからDの先頭への分岐を予約
する分岐予約命令が置かれ、Bの終わりからは(無条件
に)Dの先頭への分岐が起こる。従って、図10Dのよ
うに基本ブロックCの命令列を基本ブロックBの命令列
の直後に配置することが可能であり、基本ブロックDの
命令列をCの直後に配置しておけば、図10Cに示した
基本ブロックB及びCから基本ブロックDへの無条件分
岐が表現できる。
【0033】図11A〜Eは、本発明の予約による分岐
について、更に詳細な動作の例を説明したものである。
図11Aにおいて、メモリ内にはアドレス99に、分岐
点アドレスが102、分岐先アドレスが1000の分岐
予約命令が置かれている。プロセッサ内において、図1
1Aでは、このアドレス99の分岐予約命令の読み込み
は終了しており、命令実行部において実行が開始されて
いる。命令実行部における実行の結果、分岐アドレスス
タックには、分岐点アドレス102と分岐先アドレス1
000のアドレスペアが登録され、分岐が予約される。
その後、図11Bにおいてプログラムカウンタ(PC)
により保持されている命令フェッチアドレスが分岐アド
レススタックに登録された分岐点アドレス102と等し
くなると、図11Cにおいて命令フェッチアドレスが登
録された分岐先1000に切り替えられる。図11Cで
命令フェッチアドレスの切り替えが行われている間に分
岐点の命令102の読み込みが完了し、図11Dで分岐
先1000の命令の読み込みが行われている間に並列に
実行されている。同様に、分岐先命令の読み込みは図1
1Dで完了し、図11Eで後続のアドレス1001の命
令が読み込まれている間に、これと並列に実行される。
について、更に詳細な動作の例を説明したものである。
図11Aにおいて、メモリ内にはアドレス99に、分岐
点アドレスが102、分岐先アドレスが1000の分岐
予約命令が置かれている。プロセッサ内において、図1
1Aでは、このアドレス99の分岐予約命令の読み込み
は終了しており、命令実行部において実行が開始されて
いる。命令実行部における実行の結果、分岐アドレスス
タックには、分岐点アドレス102と分岐先アドレス1
000のアドレスペアが登録され、分岐が予約される。
その後、図11Bにおいてプログラムカウンタ(PC)
により保持されている命令フェッチアドレスが分岐アド
レススタックに登録された分岐点アドレス102と等し
くなると、図11Cにおいて命令フェッチアドレスが登
録された分岐先1000に切り替えられる。図11Cで
命令フェッチアドレスの切り替えが行われている間に分
岐点の命令102の読み込みが完了し、図11Dで分岐
先1000の命令の読み込みが行われている間に並列に
実行されている。同様に、分岐先命令の読み込みは図1
1Dで完了し、図11Eで後続のアドレス1001の命
令が読み込まれている間に、これと並列に実行される。
【0034】図12A〜Cは、従来の予測による条件分
岐のパイプライン動作の様子と、本発明の分岐予約によ
る条件分岐のパイプライン動作の様子の違いの例を示し
たものである。図12A〜Cにおいて、Fは命令のフェ
ッチ(読み込み)、Dは命令のデコード(解読)、Eは
命令の実行、Mはメモリ(キャッシュまたは主記憶)の
アクセス、Wは命令の結果のレジスタへの書き戻しの動
作を行うパイプライン・ステージを示す。また、図12
A、Bでは、分岐先アドレスの供給を実線の矢印で、分
岐点の命令フェッチの開始時点をSP1、分岐先の命令
フェッチの開始時点をSP2として示してある。図12
Cでは、条件分岐に関る条件取消命令のフェッチ開始時
点をSP1とし、分岐後の命令フェッチの開始時点をS
P2としている。
岐のパイプライン動作の様子と、本発明の分岐予約によ
る条件分岐のパイプライン動作の様子の違いの例を示し
たものである。図12A〜Cにおいて、Fは命令のフェ
ッチ(読み込み)、Dは命令のデコード(解読)、Eは
命令の実行、Mはメモリ(キャッシュまたは主記憶)の
アクセス、Wは命令の結果のレジスタへの書き戻しの動
作を行うパイプライン・ステージを示す。また、図12
A、Bでは、分岐先アドレスの供給を実線の矢印で、分
岐点の命令フェッチの開始時点をSP1、分岐先の命令
フェッチの開始時点をSP2として示してある。図12
Cでは、条件分岐に関る条件取消命令のフェッチ開始時
点をSP1とし、分岐後の命令フェッチの開始時点をS
P2としている。
【0035】図12Aは、従来の予測による条件分岐
で、予測が誤っていた場合の例である。図12Aで、命
令1は比較命令、命令2は条件分岐命令、命令3は誤っ
た予測によってフェッチされた命令、命令4は正しい分
岐先の命令である。命令3のDステージ以降の処理は、
条件分岐命令(命令2)がDステージで解読されて予測
が誤っていたことが検出されると、取り消される。その
際、正しい分岐先のアドレスが生成されて、Fステージ
に伝達され、命令4のフェッチが行われる。この結果、
分岐点、即ち条件分岐命令(命令2)の直前の比較命令
1のフェッチ時点SP1から、正しい分岐先の命令4の
フェッチ時点SP2まで3サイクルかかる。
で、予測が誤っていた場合の例である。図12Aで、命
令1は比較命令、命令2は条件分岐命令、命令3は誤っ
た予測によってフェッチされた命令、命令4は正しい分
岐先の命令である。命令3のDステージ以降の処理は、
条件分岐命令(命令2)がDステージで解読されて予測
が誤っていたことが検出されると、取り消される。その
際、正しい分岐先のアドレスが生成されて、Fステージ
に伝達され、命令4のフェッチが行われる。この結果、
分岐点、即ち条件分岐命令(命令2)の直前の比較命令
1のフェッチ時点SP1から、正しい分岐先の命令4の
フェッチ時点SP2まで3サイクルかかる。
【0036】図12Bは、従来の予測による条件分岐
で、予測が正しかった場合のパイプライン動作の例であ
る。図12Bで、命令1は比較命令、命令2は、条件分
岐命令、命令3は予測による(この場合は正しい)分岐
先の命令である。図のように、条件分岐命令(命令2)
のフェッチで分岐先のアドレスが予測されるので、予測
が正しい場合には、すぐ次のサイクルで分岐先の命令4
のフェッチを行うことができる。結果として、分岐点の
命令1のフェッチSP1から分岐先の命令4のフェッチ
まで2サイクルになる。このように分岐先のアドレスま
で正しく予測できるためには、図9Bとの場合と同じ
く、条件分岐命令2が一度以上実行されて、分岐先のア
ドレス計算が行われ、何等かの分岐予測の手段により記
録されていなければならない。また同時に予測に用いる
アルゴリズムが条件分岐の成立/不成立を正しく予測で
きなければならない。
で、予測が正しかった場合のパイプライン動作の例であ
る。図12Bで、命令1は比較命令、命令2は、条件分
岐命令、命令3は予測による(この場合は正しい)分岐
先の命令である。図のように、条件分岐命令(命令2)
のフェッチで分岐先のアドレスが予測されるので、予測
が正しい場合には、すぐ次のサイクルで分岐先の命令4
のフェッチを行うことができる。結果として、分岐点の
命令1のフェッチSP1から分岐先の命令4のフェッチ
まで2サイクルになる。このように分岐先のアドレスま
で正しく予測できるためには、図9Bとの場合と同じ
く、条件分岐命令2が一度以上実行されて、分岐先のア
ドレス計算が行われ、何等かの分岐予測の手段により記
録されていなければならない。また同時に予測に用いる
アルゴリズムが条件分岐の成立/不成立を正しく予測で
きなければならない。
【0037】図12Cは、本発明の分岐予約による条件
分岐のパイプライン動作の例を示したものである。特
に、分岐が生じる条件が成立せず、分岐しなかった場合
を示す。図12Cで、命令1は分岐予約命令、命令2は
条件取消命令、命令3は通常の命令、命令4は分岐点に
あたる通常の命令、命令5は分岐点に連続する(分岐し
なかったときの)命令である。これらの内、命令3、4
は任意の有効な通常命令を充てることが出来る。図12
Cでは、分岐予約命令(命令1)の実行によりEステー
ジで分岐点と分岐先のアドレスが予約される。分岐先ア
ドレスは、図の点線の矢印で示すように、分岐点に後続
する命令5のFステージに伝達されようとする。しかし
条件取消命令(命令2)の実行によりEステージで取り
消しが生じて(図中の“X”印)、分岐が生じず、命令
5は分岐点の命令4に後続する命令となる。以上の動作
により、図12Cでは、分岐点の命令4のフェッチから
遅滞なく1サイクルで後続する命令5のフェッチを行う
ことが出来る。条件分岐に関る条件取消命令(命令2)
のフェッチ時点(SP1)から数えても、3サイクルで
条件分岐を行うことが出来る。
分岐のパイプライン動作の例を示したものである。特
に、分岐が生じる条件が成立せず、分岐しなかった場合
を示す。図12Cで、命令1は分岐予約命令、命令2は
条件取消命令、命令3は通常の命令、命令4は分岐点に
あたる通常の命令、命令5は分岐点に連続する(分岐し
なかったときの)命令である。これらの内、命令3、4
は任意の有効な通常命令を充てることが出来る。図12
Cでは、分岐予約命令(命令1)の実行によりEステー
ジで分岐点と分岐先のアドレスが予約される。分岐先ア
ドレスは、図の点線の矢印で示すように、分岐点に後続
する命令5のFステージに伝達されようとする。しかし
条件取消命令(命令2)の実行によりEステージで取り
消しが生じて(図中の“X”印)、分岐が生じず、命令
5は分岐点の命令4に後続する命令となる。以上の動作
により、図12Cでは、分岐点の命令4のフェッチから
遅滞なく1サイクルで後続する命令5のフェッチを行う
ことが出来る。条件分岐に関る条件取消命令(命令2)
のフェッチ時点(SP1)から数えても、3サイクルで
条件分岐を行うことが出来る。
【0038】このように、本発明の予約により分岐する
方法においても、条件分岐を効率良く行うことができ
る。
方法においても、条件分岐を効率良く行うことができ
る。
【0039】
【発明の効果】本発明により、命令単位の並列実行を行
うプロセッサを含むパイプライン化されたプロセッサに
おいて、命令の実行と命令の読み込みの並列動作をなん
ら妨げることなく、効率的に分岐動作を行わせることが
できる。
うプロセッサを含むパイプライン化されたプロセッサに
おいて、命令の実行と命令の読み込みの並列動作をなん
ら妨げることなく、効率的に分岐動作を行わせることが
できる。
【図1】本発明によるプロセッサの命令フェッチアドレ
ス生成部の一実施例を示す図である。
ス生成部の一実施例を示す図である。
【図2】プロセッサの全体構成の例を示す図である。
【図3】本発明によるプロセッサの命令フェッチアドレ
ス生成部の第2の実施例を示す図である。
ス生成部の第2の実施例を示す図である。
【図4】本発明による分岐予約を行うための分岐予約命
令の例および分岐予約の取り消し命令を示す図である。
令の例および分岐予約の取り消し命令を示す図である。
【図5】本発明による条件分岐処理と従来技術による条
件分岐処理の比較説明のための命令列の例を示す図であ
る。
件分岐処理の比較説明のための命令列の例を示す図であ
る。
【図6】本発明による分岐予約命令を用いたサブルーチ
ン呼び出し及び戻りの例を示す図である。
ン呼び出し及び戻りの例を示す図である。
【図7】本発明による分岐予約命令と従来の分岐命令の
パイプライン動作の比較を説明するための図である。
パイプライン動作の比較を説明するための図である。
【図8】本発明によるプロセッサの命令フェッチアドレ
ス生成部の第3の実施例を示す図である。
ス生成部の第3の実施例を示す図である。
【図9A】従来の予測において、分岐が生じたときに予
測が誤っていた場合のパイプライン動作の例を示す図で
ある。
測が誤っていた場合のパイプライン動作の例を示す図で
ある。
【図9B】従来の予測において、分岐が生じたときに予
測が正しかった場合のパイプライン動作の例を示す図で
ある。
測が正しかった場合のパイプライン動作の例を示す図で
ある。
【図9C】本発明の予約による分岐のパイプライン動作
の例を示す図である。
の例を示す図である。
【図10A】プログラムをコンパイルする際の、コンパ
イラの全体の操作の例を示す図である。
イラの全体の操作の例を示す図である。
【図10B】図10Aのステップ170における機械コ
ード生成を詳細に示す図である。
ード生成を詳細に示す図である。
【図10C】実際にコンパイルされるプログラムのソー
スの構造の例を示す図である。
スの構造の例を示す図である。
【図10D】図10Cのプログラムをコンパイルした結
果を示す図である。
果を示す図である。
【図11A】本発明の予約による分岐動作の例を説明す
るための図である。
るための図である。
【図11B】図11Aの分岐動作の続きを説明するため
の図である。
の図である。
【図11C】図11Bの分岐動作の続きを説明するため
の図である。
の図である。
【図11D】図11Cの分岐動作の続きを説明するため
の図である。
の図である。
【図11E】図11Dの分岐動作の続きを説明するため
の図である。
の図である。
【図12A】従来の予測による条件分岐で、予測が誤っ
ていた場合のパイプライン動作の例を示す図である。
ていた場合のパイプライン動作の例を示す図である。
【図12B】従来の予測による条件分岐で、予測が正し
かった場合のパイプライン動作の例を示す図である。
かった場合のパイプライン動作の例を示す図である。
【図12C】本発明の分岐予約による条件分岐のパイプ
ライン動作の例を示す図である。
ライン動作の例を示す図である。
1 プロセッサ 2 主記憶 10 分岐アドレススタック 11 比較器 12 プログラムカウンタ 13 インクリメンタ 14 セレクタ 21 命令フェッチアドレス生成部 22 命令デコード部 23 命令実行部 24 レジスタファイル 30 分岐アドレスレジスタ 101 フェッチアドレス
───────────────────────────────────────────────────── フロントページの続き (72)発明者 金子 憲二 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内
Claims (6)
- 【請求項1】 プロセッサにおける命令の分岐方法であ
って、 分岐予約命令の実行に応じて該分岐予約命令が指定する
分岐元のアドレスと分岐先のアドレスを予約するステッ
プと、 命令の読み込みを行うアドレスが前記予約した分岐元の
アドレスに達したか否か比較判定するステップと、 前記比較判定の結果、前記命令の読み込みを行うアドレ
スが前記予約した分岐元のアドレスに達したとき、該命
令の読み込みを行うアドレスを前記予約した分岐先のア
ドレスに切り替えるステップからなることを特徴とする
命令の分岐方法。 - 【請求項2】 請求項1記載の命令の分岐方法におい
て、 前記分岐予約命令が複数個順次実行されたとき、前記分
岐予約命令が指定する分岐元のアドレスと分岐先のアド
レスを予約するステップを複数回繰り返すことにより複
数の分岐を予約し、 前記比較判定するステップにおいては、前記予約された
複数の分岐の内最も最近に予約された分岐元のアドレス
を選択して前記比較判定をすることを特徴とする命令の
分岐方法。 - 【請求項3】 請求項1または請求項2記載の命令の分
岐方法において、 分岐予約命令の実行により分岐元のアドレスと分岐先の
アドレスの予約が行われた後で分岐が行なわれる前記分
岐元のアドレスに達する前に前記分岐元のアドレスと分
岐先のアドレスの予約を条件的に取り消す命令が配置さ
れている場合、該条件的に取り消す命令の実行に応じて
前記予約した分岐元のアドレスと分岐先のアドレスを条
件的に取り消すステップを設けることにより命令の条件
付き分岐を行なうことを特徴とする命令の分岐方法。 - 【請求項4】 命令読み込み手段と、少なくとも一つの
命令解読手段と、少なくとも一つの命令実行手段を備
え、前記命令読み込み手段と命令解読手段と命令実行手
段が並列に動作可能なプロセッサにおいて、 前記命令読み込み手段は、命令の読み込みを行うアドレ
スを保持するプログラム・カウンタと、 分岐予約命令が実行されたとき該分岐予約命令が指定す
る分岐元のアドレスと分岐先のアドレスの組を格納保持
する分岐アドレス組保持手段と、 前記プログラム・カウンタの保持する値と前記分岐アド
レス組保持手段の保持する分岐アドレス組の内の分岐元
のアドレスとを比較する比較手段と、 前記比較手段による比較の結果が一致を示すとき、前記
プログラム・カウンタの保持する値を前記分岐アドレス
組保持手段の保持する分岐アドレス組の内の分岐先アド
レスの値に切り替えて出力する切り替え手段を備え、 命令の読み込みを行うアドレスが分岐予約命令の指定し
た分岐元のアドレスと一致したとき、分岐予約命令が指
定した分岐先のアドレスの命令へ分岐を行うことを特徴
とするプロセッサ。 - 【請求項5】 請求項4記載のプロセッサにおいて、 前記分岐アドレス組保持手段は、分岐先アドレスと分岐
元アドレスの組を複数保持でき、 前記比較手段は、前記分岐アドレス組保持手段に保持さ
れた分岐アドレス組の内の最新の組を選択し、該選択し
た組の分岐元のアドレスの値と前記プログラム・カウン
タの保持する値とを比較することを特徴とするプロセッ
サ。 - 【請求項6】 請求項4または請求項5記載のプロセッ
サにおいて、 前記分岐アドレス組保持手段は、前記命令実行手段から
の取り消し信号を受けて該取り消し信号の指定する分岐
元のアドレスと分岐先のアドレスの組を消去する手段を
備えることを特徴とするプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP8058296A JPH08292887A (ja) | 1995-02-24 | 1996-02-21 | 命令の分岐方法およびプロセッサ |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP7-62198 | 1995-02-24 | ||
JP6219895 | 1995-02-24 | ||
JP8058296A JPH08292887A (ja) | 1995-02-24 | 1996-02-21 | 命令の分岐方法およびプロセッサ |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH08292887A true JPH08292887A (ja) | 1996-11-05 |
Family
ID=26399352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8058296A Pending JPH08292887A (ja) | 1995-02-24 | 1996-02-21 | 命令の分岐方法およびプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH08292887A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6898698B1 (en) | 1999-09-29 | 2005-05-24 | Fujitsu Limited | Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof |
CN108885549A (zh) * | 2016-03-23 | 2018-11-23 | Arm有限公司 | 分支指令 |
JP2019530074A (ja) * | 2016-09-13 | 2019-10-17 | エイアールエム リミテッド | 処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 |
-
1996
- 1996-02-21 JP JP8058296A patent/JPH08292887A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6898698B1 (en) | 1999-09-29 | 2005-05-24 | Fujitsu Limited | Device predicting a branch of an instruction equivalent to a subroutine return and a method thereof |
CN108885549A (zh) * | 2016-03-23 | 2018-11-23 | Arm有限公司 | 分支指令 |
JP2019509576A (ja) * | 2016-03-23 | 2019-04-04 | エイアールエム リミテッド | 分岐命令 |
CN108885549B (zh) * | 2016-03-23 | 2023-03-07 | Arm有限公司 | 分支指令 |
JP2019530074A (ja) * | 2016-09-13 | 2019-10-17 | エイアールエム リミテッド | 処理回路による命令実行を示すトレースストリームを生成し処理するための装置および方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5917616B2 (ja) | 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置 | |
JP5889986B2 (ja) | 実行された命令の結果を選択的にコミットするためのシステムおよび方法 | |
US6697932B1 (en) | System and method for early resolution of low confidence branches and safe data cache accesses | |
US6338136B1 (en) | Pairing of load-ALU-store with conditional branch | |
US7441110B1 (en) | Prefetching using future branch path information derived from branch prediction | |
US6615333B1 (en) | Data processing device, method of executing a program and method of compiling | |
JP3397081B2 (ja) | 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を推測的に実行するためのプロセッサ、データ処理システム及び方法 | |
US5606676A (en) | Branch prediction and resolution apparatus for a superscalar computer processor | |
US5996060A (en) | System and method for concurrent processing | |
US6263427B1 (en) | Branch prediction mechanism | |
US5878254A (en) | Instruction branching method and a processor | |
WO2004001584A2 (en) | A method for executing structured symbolic machine code on a microprocessor | |
WO1998037485A1 (en) | Method and apparatus for forwarding of operands in a computer system | |
US5771377A (en) | System for speculatively executing instructions using multiple commit condition code storages with instructions selecting a particular storage | |
US7017030B2 (en) | Prediction of instructions in a data processing apparatus | |
EP0742517B1 (en) | A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions | |
US6622240B1 (en) | Method and apparatus for pre-branch instruction | |
US6871343B1 (en) | Central processing apparatus and a compile method | |
US20070174592A1 (en) | Early conditional selection of an operand | |
US7603545B2 (en) | Instruction control method and processor to process instructions by out-of-order processing using delay instructions for branching | |
JPH08292887A (ja) | 命令の分岐方法およびプロセッサ | |
JP2001243070A (ja) | プロセッサ及び分岐予測方法並びにコンパイル方法 | |
JP2006053830A (ja) | 分岐予測装置および分岐予測方法 | |
JP2002024008A (ja) | データ処理装置およびプログラム変換装置 | |
JP2883035B2 (ja) | パイプライン・プロセッサ |