(57)【特許請求の範囲】
【請求項１】
処理パイプラインで実行される方法であって、前記処理パイプラインは、前記パイプラインの実行ステージに対して、一サイクル毎に第１の数までの複数の命令をディスパッチ可能なものであり、
処理パイプラインの第１のサイクルでスキップ命令をデコードして、前記処理パイプライン内のスキップすべき後続の命令の総数を決定するステップを有し、
第２のサイクルで前記スキップ命令を実行するステップを有し、
処理パイプラインで前記後続の命令の実行を禁止するステップを有し、このステップは、
前記第２のサイクルで前記スキップ命令に続く第２の数の命令の実行を禁止するステップを有し、前記第２の数は、０〜前記第１の数より１小さい数の間で可変であり、
その後に、前記総数の命令のうちスキップすべき後続の命令が残っている場合に、前記第２のサイクルの次の第３のサイクルで第３の数の命令の実行を禁止するステップを有し、前記第３の数は、前記第１の数と、後続の命令数のうちスキップすべき状態のままにある命令の数と、のうちの小さい値のほうの数を上限として可変である、方法。
【請求項２】
前記処理パイプラインの後続の命令の実行を禁止するステップは、前記処理パイプランの前記命令における後段への分岐処理を、前記処理パイプランのプログラムカウンタを変更することなく実行する、請求項１記載の方法。
【請求項３】
前記処理パイプラインの後続の命令の実行を禁止するステップは、前記処理パイプランの前記命令における後段への分岐処理を、前記処理パイプラインのスキップすべき命令のみを無効化することで実行する、請求項１記載の方法。
【請求項４】
前記後段への分岐の実行は、先に無効化された命令を再度パイプラインに入力することなく達成される、請求項３記載の方法。
【請求項５】
（ｉ）分岐命令が後段へのオフセット値を有するか否かを判定し、（ｉｉ）前記後段へのオフセット値がしきい値以下であるか否かを判定することで、分岐命令がスキップ命令であるか否かを判定するステップを更に有する、請求項１記載の方法。
【請求項６】
処理パイプラインを有する装置であって、前記処理パイプラインは、前記パイプラインの実行ステージに対して、一サイクル毎に第１の数まで複数の命令をディスパッチ可能なものであり、
前記処理パイプラインの第１のサイクルでスキップ命令をデコードして、前記処理パイプライン内のスキップすべき後続の命令の総数を決定するように動作可能である命令デコードユニットを有し、
第２のサイクルで前記スキップ命令を実行するよう動作可能なスキップ命令ユニットを有し、
命令無効化信号を生成するよう動作可能である命令スキップカウンタを有し、この命令無効化信号による処理パイプライン内の後続の命令の禁止では、
前記第２のサイクルで前記スキップ命令に続く第２の数の命令の実行が禁止され、前記第２の数は、０〜前記第１の数より１小さい数の間で可変とされ、
その後に、前記第２の数の命令の実行を禁止した後に前記総数の命令のうちスキップすべき後続の命令が残っている場合に、前記第２のサイクルの次の第３のサイクルで第３の数の命令の実行が禁止され、前記第３の数は、前記第１の数と、後続の命令数のうちスキップすべき状態のままにある命令の数と、のうちの小さい値のほうの数を上限として可変とされる、装置。
【請求項７】
前記スキップ命令ユニットは、スキップすべき後続の命令の総数を示すカウント値をセットするように動作可能であり、前記命令スキップカウンタは、更に、（ｉ）前記命令無効化信号の値が前記後続の命令をスキップすべきでないことを示す値である、（ｉｉ）前記カウント値が安定状態値である、の少なくとも一方が成り立つときは、前記処理パイプライン内の後続の命令を実行すべきであることを示す信号を生成するように動作可能である、請求項６記載の装置。
【請求項８】
前記命令スキップカウンタは、更に、前記カウント値を、当該カウント値の値が安定状態値に等しくなるまで、前記処理パイプラインのサイクルにおいてインクリメントまたはデクリメントするように動作可能である、請求項７記載の装置。
【請求項９】
前記命令スキップカウンタは、更に、前記カウント値を前記スキップ命令のデコードにより前記命令デコードユニットによって得られるオフセット値に等しい値にセットするよう動作可能で、前記カウント値を前記処理パイプラインの前記第２のサイクル及び前記第３のサイクルの少なくとも一方においてデクリメントするよう動作可能である、請求項８記載の装置。
【請求項１０】
前記スキップ命令以外の命令を実行可能な命令実行ユニットを更に有し、当該命令実行ユニットは、前記命令無効化信号に応答して、前記スキップ命令以外の命令の実行を禁止するものである、請求項６記載の装置。
【請求項１１】
前記処理パイプランにおける前記後続の命令の処理を禁止することで、前記処理パイプランのプログラムカウンタの変更を行うことなく前記処理パイプランの前記命令における後段への分岐処理が実行される、請求項６記載の装置。
【請求項１２】
前記処理パイプランにおける前記後続の命令の実行を禁止することで、前記パイプライン内に存在するスキップすべき命令のみを無効化して前記処理パイプランの命令における後段への分岐処理が実行される、請求項６記載の装置。
【請求項１３】
前記後段への分岐処理は、先に無効化された命令を再度前記パイプラインに入力することなく達成される、請求項１２記載の装置。
【請求項１４】
前記スキップ命令ユニットは、更に、スキップすべき後続の命令の総数の決定で、前記スキップ命令により特定される条件が生じたか否かを判定するよう動作可能である、請求項６記載の装置。
【請求項１５】
前記スキップ命令ユニット及び命令デコードユニットの少なくとも一方は、更に、（ｉ）前記分岐命令が後段へのオフセット値を有するか否かを判定し、かつ、（ｉｉ）前記後段へのオフセット値がしきい値以下であるか否かを判定することで、分岐命令がスキップ命令であるか否かを判断するように動作可能である、請求項６記載の装置。
【請求項１６】
前記スキップ命令は、前記後続の命令の総数は、特定の条件が発生した場合にはスキップのみが行われることを特定するものであり、
更に、前記特定の条件が発生した場合にのみ前記後続の命令の総数の実行が禁止されるように、前記特定の条件が発生したか否かの判定を行うステップを更に有する、請求項１記載の方法。
【請求項１７】
前記スキップ命令をデコードする際にオフセット値を得るとともに、このオフセット値は、前記処理パイプライン内のスキップすべき後続の命令の総数を表すものであり、
前記オフセット値をカウント値の決定に用い、
前記カウント値で表される後続の命令の総数の実行を禁止する、請求項１６記載の方法。
【請求項１８】
前記特定の条件が発生しない場合には後続の命令の総数の実行を許可する、請求項１６記載の方法。
【請求項１９】
前記カウント値が安定状態値に到達するまでスキップされる各命令に対するカウント値をインクリメント又はデクリメントする、請求項１８記載の方法。
【請求項２０】
前記処理パイプラインは、スーパースカラ処理パイプラインを含む、請求項１記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン命令処理に関し、例えば、パイプライン内でスキップすべき命令のみを無効化することで、パイプライン処理における後段における処理に影響を与える、後段への分岐（またはジャンプ）命令（forward branch instrction）の処理に関する。
【０００２】
【従来の技術】
マイクロプロセッサでは、一般に、複数の命令、例えばadd,load,mov,and,or等の命令を含んだソフトウェアプログラムが実行される。通常は、マイクロプロセッサによる命令セットでは、いわゆる分岐（またはジャンプ）命令がサポートされており、この分岐命令は、一連の命令フローを即時に中断させることでマイクロプロセッサの命令フローを変更するものである。その例として、プログラムの全く別の部分への分岐、一連の命令フローにおいて一つ以上の先の命令に進むこと、あるいは一つ以上前の命令に戻ることが挙げられる。
【０００３】
図１に、後段への分岐命令及びその他の命令、即ち、INST.#1、INST.#2、INST.#3、INST.#4の各命令を含む複数の命令が実行される処理フローを示す。図１中のステップ１０において、後段への分岐命令が解析され、プロセスをどこに分岐させるかが決定される。より詳細には、分岐命令におけるオフセットが得られ、上述の一連の命令においてスキップする命令数の決定に当該オフセットが用いられる。
【０００４】
この例においては、オフセットは＋３であり、プロセスフローにおいて、現在の命令から３段後段の命令へと進むことが示され、これにより、INST.#1、INST.#2の各命令がスキップされる。このような３つ後の命令に進む処理は、分岐条件、例えば、フラッグビットまたはレジスタのコンテンツが特定の値と等しいか特定の値よりも大きい、あるいは小さいという分岐条件が満たされた場合にのみ実行される。このような条件が満たされた場合（即ち、図１中でステップ１０の判断結果がtrueの場合）、プロセスフローは、ステップ１０からINST.#3に進む。このことは、一連の命令において３段進むことを意味する。一方、この条件が満たされない場合（即ち、図１中でステップ１０の判断結果がfalseの場合）、プロセスフローは次の命令に進み、この例では、INST.#1が実行される。
【０００５】
上記判断結果がtrue（真）の場合において図１に示される命令フローにおける変更（即ち、INST.#1、INST.#2の各命令をスキップすること）は、マイクロプロセッサのプログラムカウンタを修正することでなされる。このプログラムカウンタは、次にフェッチ、デコード、実行等がなされる命令のメモリにおけるアドレスを表すものである。従って、通常、分岐命令（branch instructions）は以下のように定義される。
【０００６】
BRANCH condition, offset
If condition=true, then PC <- PC + offset
図２は、図１の処理フローの命令がシングルスカラープロセッサ（single scalar processor）で処理される様子のシーケンス図である。シングルスカラープロセッサでは、どのサイクルにおいても単一命令がパイプラインにディスパッチされ、与えられたサイクルにおいて、一つの命令のみが実行可能である。分岐命令、INST.#1、INST.#2、INST.#3、INST.#4の命令のそれぞれが、シーケンシャルに配列された各ボックスに対して示される。各ボックスは、個々のステージまたはサイクルにおいてパイプラインで実行されるオペレーションを示す。各命令に対しては、８個のボックスが一連に配置され、８個のボックスの各セットは、１サイクルごとにオフセットされる。この動作は、シングルスカラープロセッサパイプラインにおけるパイプラインを進行させる処理と一致する。
【０００７】
パイプラインにおける具体的なシーケンスを示すと、まず、分岐命令がサイクル１においてパイプラインに入力され、特定のオペレーション、図ではＡ、がそのサイクルで実行される。なお、この例は、単に例示のためのものであり、上述のオペレーション自体の詳細は重要ではない。サイクル２において、この分岐命令はパイプラインの次の段に進み、もう一つのオペレーション、図ではＢ、が実行される。前述の命令であるINST.#1がサイクル２においてパイプラインの最初の段に入力され、その命令にオペレーションＡが実行される。サイクル３においては、分岐命令はパイプラインの３段目に進み、新たなオペレーション、図でのＣ、がその命令に実行される。INST.#1の命令は、サイクル３において第２のステージに進み、オペレーションＢが実行される。INST.#2がサイクル３においてパイプラインの最初の段に入力され、オペレーションＡがその命令に実行される。
【０００８】
サイクル４では、分岐命令はパイプラインの４段目に進み、デコード（decode）及びディスパッチ動作（dispatch operation:DD）が実行される。INST.#1は、サイクル４でパイプラインの３段目に進み、オペレーションＣがその命令に実行される。同様に、サイクル４においてINST.#2はパイプライン２段目に進み、INST.#3がパイプラインの最初の段に入力される。サイクル５において、分岐命令はパイプラインの第５段に進み、実行動作（execution operation:EX）が実行される。この５番目のサイクルにおいて、INST.#1は、パイプラインの４段目に入力され、INST.#2は、パイプラインの３段目に入力され、INST.#3は、パイプラインの２段目に入力され、INST.#4はパイプラインの最初の段に入力される。
【０００９】
しかしながら、５番目のサイクルにおいて分岐命令を実行することで、マイクロプロセッサのプログラムカウンタに修正がなされ（図１のステップ１０で判定結果がtrueだったものとする）、当該プログラムカウンタが、INST.#3が格納された位置に対応するメモリにおけるアドレスを表すようになされる。このことは、図２において、分岐命令に対するパイプラインの第４段から、２回目に出現しているほうのINST.#3のパイプラインにおける最初の段に延びる点線により示される。
【００１０】
図１に示されるプロセスフローに従うと、INST.#1とINST.#2とをスキップし、INST.#3を実行しなければならない。そのため、サイクル６，７，８及び９における各INST.#1〜INST.#4に対する各実行動作EXは、無効化（キャンセル）されねばならない。このことは、これらのボックスにおいて、×印で示される。更に、サイクル６において、INST.#3は、再度パイプラインの最初の段に入力され、INST.#4は、サイクル７においてパイプラインの最初の段に入力される。従って、一連のオペレーションＡ、Ｂ、Ｃ及びＤＤが再度実行された後に、INST.#3とINST.#4とが、それぞれサイクル１０，１１で実行される。
【００１１】
【発明が解決しようとする課題】
図２に示されるパイプライン処理では、図１に示される処理フローを達成することができるものの、問題点もいくつか出現している。分岐命令が実行されたとき、プログラムカウンタの値が上書きされることで、パイプラインのパフォーマンスが悪くなるおそれがある。その主な理由としては、パイプラインにおいて、スキップされるべきサイクルだけでなく、すべてが無効化されてしまうことが挙げられる。例えば、サイクル８及びサイクル９においては、それぞれINST.#3、INST.#4を実行することが望ましいのにもかかわらず、これらの実行がキャンセルされてしまう。実際、INST.#3とINST.#4とがスキップ（無効化）されてしまうことから、サイクル６，７において、それぞれこれらの命令を再入力する必要があり、かつ、実行オペレーションにいたるすべてのオペレーション（例えば、オペレーションＡ，Ｂ，Ｃ，ＤＤ）を繰り返さなければならない。パイプラインで無効化（nullifying）された段、即ち、サイクル８、９における第５段が無効化されることで、パイプライン及びその結果のスループット全体のパフォーマンスが悪くなってしまう。サイクル８、９ではINST.#3、INST.#4がそれぞれ実行される筈であるが、実際には、２サイクル遅延し、それぞれサイクル１０，１１で実行される。
【００１２】
特に、後段への小さな分岐が頻繁に生じる場合に、パイプラインにおける、命令の無効化という望ましからざる現象が最も多く発生する。このことは、マイクロプロセッサにより行われるプロトコルは、パイプラインに既に入力されている命令のうち、依然として実行すべき状態にあるにも拘わらず、パイプライン中の全ての実行オペレーションを無効化するように記述されていることに起因する。このような状態は、上述のオフセット量が比較的小さいときに生じやすい。
【００１３】
上述の難点を回避するため、従来法においては、いわゆる条件命令（例えばconditional mov）が用いられている。この条件命令は、その命令内の特定の条件がtrueである場合にのみ実行される。図１に戻ると、上述の条件命令が用いられた場合、分岐命令、INST.#1、INST.#2は、二つの条件命令で置き換えられる。これらの条件命令は、特定された状態がtrueである場合のみ実行される。しかしながら、条件命令においては、その命令内のユニークなオプコード（opcode:操作符号）またはユニークなオペランドビット（operand bits）のアサイニング、つまり割り当てを行うことが要求される。従って、このような条件命令をサポートするマイクロプロセッサの命令セットは、非常に限られてしまう。
【００１４】
従って、パイプライン命令の処理方法及び装置であって、後段への分岐命令が、プログラムカウンタを変更することなく、かつ、パイプライン中の既に入力された命令であってキャンセルされた場合には再入力が必要となる命令を無効化することなく、処理パイプラインで実行されるものが必要とされている。また、このような方法及び装置において、パイプラインのパフォーマンスの向上、例えばスループットの向上やデータ処理速度の向上等を達成することが望まれている。
【００１５】
【課題を解決するための手段】
本発明の一形態によれば、複数の命令を多段処理パイプラインの各段に導入するステップと、パイプライン内に既に入力済みの一つもしくは複数の命令であって後段への分岐命令を実行するためにスキップすべき命令に対してのみその実行を禁止するステップと、を有する方法が提供される。
【００１６】
本発明の他の形態によれば、処理パイプラインの最初のサイクルでスキップ命令をデコードして少なくともオフセット値を得るステップを有し、前記オフセット値は、処理パイプライン内のスキップすべき後続の命令の数がとり得る値、あるいはスキップすべき後続の命令数の値、を表すものであり、処理パイプラインの２番目のサイクルで前記スキップ命令を実行して、当該スキップ命令の状態が、前記オフセット値により表される数の命令をスキップすべきことを指示しているか否かを判定するステップを有し、前記オフセット値を用いてカウント値を確定するステップを有し、（ｉ）前記特定の状態の値が、前記オフセット値により表される数の命令をスキップすべきことを示しており、かつ、(ii）前記カウント値が安定状態値と異なるときは、前記処理パイプラインの後続の命令を禁止するステップを有する、方法も提供される。
【００１７】
好適には、上述の方法において、（ｉ）前記状態の値が、前記オフセット値により表される数の命令をスキップしてはならないことを示しているか、又は、(ii)前記カウント値が前記安定状態値に等しいとき、の少なくとも一つが満たされる場合は、前記処理パイプラインの後続の命令の実行を許可するステップを有するようにする。
【００１８】
また、好適には、上記方法において、前記カウント値が前記安定状態値に達するまで、前記処理パイプラインのサイクルでカウント値のインクリメント又はデクリメントを行うようにする。例えば、安定状態値がカウント値より大きいときには、当該カウント値をインクリメントし、小さいときにはデクリメントすることで、カウント値を前記安定状態値に近づける。更に好適には、前記オフセット値を用いてカウント値を確定するステップでは、前記カウント値を前記オフセット値に等しい値にセットするステップを含み、前記カウント値は、前記処理パイプラインのサイクルで、その値が、安定状態値である「０」に達するまでデクリメントが行われる。
【００１９】
また、例えばシングルスカラーパイプラインが用いられる場合、好適には、上述のカウント値は、１サイクルごとにインクリメントまたはデクリメントされる。その際、カウント値は、当該サイクルにおいて実行が禁止される命令の数に比例した値ごとに増減される。従って、例えば、二つの命令がパイプライン内のあるサイクルで実行段に到達し、そのサイクルでの当該命令の実行が禁止される場合、このカウント値は、好適には、２ごとに、あるいは２の倍数ごとにインクリメントあるいはデクリメントされる。
【００２０】
本発明の更に他の形態によれば、上述の方法、及び/または以下の実施形態等で後述する方法は、適切なハードウェア、例えば以下の図面に示すハードウェアにおいて実行される。このようなハードウェアは、特に制限なく既知の技術を用いることで実現可能であり、例えばスタンダードなデジタル回路、アナログ回路、及びソフトウェアやファームウェアの実行が可能なものであれば特に制限なく既知のプロセッサを用いることや、プログラマブルデジタルデバイスあるいはシステム、例えばプログラマブルリードオンリーメモリ（programmable read only memory:PROM)、プログラマブルアレイ論理デバイス（programmable array logic device:PAL）を実現すること、及びこれらを組み合わせて実現することが可能である。
【００２１】
本発明の更に他の形態によれば、処理パイプラインの最初のサイクルでスキップ命令のデコードを行って少なくともオフセット値を得るように動作可能である命令デコードユニットであって、前記オフセット値は、前記処理パイプラインにおいてスキップすべき後続の命令の数が取り得る値を表すものである、命令デコードユニットと、前記処理パイプラインの２番目のサイクルで前記スキップ命令を実行して、前記スキップ命令の状態が、前記オフセット値により表される数の命令をスキップすべきであることを示すか否かを判定し、命令スキップ信号の値を前記判定結果を表す値にセットするように動作可能である、スキップ命令ユニットと、（ｉ）前記命令スキップ信号の値が前記後続の命令をスキップすべきことを示す値であり、かつ（ｉｉ）前記カウント値が安定状態値とは異なる値であるときに、（ａ）前記オフセット値を受けて当該オフセット値を用いてカウント値を確定して、（ｂ）前記処理パイプライン内における後続の命令を実行禁止することを示すという内容の、命令無効化信号を生成するように動作可能である命令スキップカウンタと、を有する装置も提供される。
【００２２】
上記命令スキップカウンタは、好適には、更に、（ｉ）前記命令スキップ信号の値が前記後続の命令をスキップすべきでないことを示す値である、（ｉｉ）前記カウント値が安定状態値である、の少なくとも一方が成り立つときは、前記処理パイプライン内の後続の命令を実行すべきであることを示す内容となるように前記命令無効化信号を生成するように動作可能とする。
【００２３】
例えば無効化信号の値が、ある値、例えば１であれば、前記オフセット値を受けて当該オフセット値を用いてカウント値を確定して、前記処理パイプライン内における後続の命令を実行禁止することを示すようにし、他の値、例えば０であれば、前記処理パイプライン内の後続の命令を実行すべきであることを示すように構成することで、上記構成を達成することが可能である。
【００２４】
好適には、上記命令スキップカウンタは、更に、前記カウント値を、当該カウント値の値が安定状態値に等しくなるまで、前記処理パイプラインのサイクルにおいてインクリメントまたはデクリメントするように動作可能である。
【００２５】
更にまた、前記命令スキップカウンタは、前記カウント値を前記オフセット値に等しい値にセットするよう動作可能で、前記カウント値を前記処理パイプランのサイクルにおいて、当該カウント値を、安定状態値、例えば０にまでデクリメントするよう動作可能でとすることが好ましい。
【００２６】
本発明のその他の特徴、利点、その他は、本明細書の以下の記述及び図面を用いて明らかとされる。
【００２７】
【発明の実施の形態】
以下、図面を参照して本発明の好適実施形態を示すが、本発明は、この実施形態に限定されるものではない。また、図面の要素には参照符号を付しており、実質的に同一の要素には共通の参照符号を付している。図３に本実施形態に係る処理装置１００を示す。この処理装置１００は、本実施形態においてはマイクロプロセッサであるが、その他のものとすることもできる。この処理装置１００は、スキップ命令実行ユニット１０２、分岐命令実行ユニット１０４、算術論理命令実行ユニット１０６，命令デコード及びディスパッチユニット１０８，及び命令スキップカウンタ１１０を有する。図３に示される機能ブロックは、一例として示したものであり、本発明の趣旨及び範囲を逸脱しない範囲でこの機能ブロックの修正や変形を行うことも勿論可能である。例えば、スキップ命令実行ユニット１０２及び分岐命令実行ユニット１０４を一体化することも可能である。その他、本発明の範囲内で、このような一体化やユニットの分割等を行うことが可能である。
【００２８】
一般的な意味では、処理装置１００は、好適には、後段への相対的に短い分岐のターゲット（分岐先）アドレスを有した分岐命令を実行する際に、プログラムカウンタの値の上書き（又は変更）を行い、かつ、その分岐命令でスキップすべき命令のみの実行を無効化する。ここでいう後段への相対的に短い分岐のターゲットアドレスとは、例えば、いずれの時点であるかを問わずパイプライン内の相異なる命令の数に比較してオフセットが相対的に小さいことを意味する。後段への相対的に短い分岐のターゲットアドレスを有する分岐命令は、後段への相対的に長い分岐のオフセット（又は前段へのオフセット）とは異なるものであり、ここでは、スキップ命令と称する。スキップ命令は、好適には、処理装置１００で特殊なオプコードを割り当てるか、または、分岐命令のオフセット値を評価してその値が後段への相対的に短い分岐のターゲットを表すかどうかを判定することで認識される。
【００２９】
以下、図３〜図５を参照して、処理装置１００の詳細な動作を説明する。図４は、図３の処理装置１００で好適に実行される基本処理フローを示す。しかし、図４は、単に例示のためのものであり、本発明の他の形態においてこれとは異なるフローを用いることも勿論可能である。これらの変形例をすべて示すと煩雑になるため、図４の例示的処理フローのみを示して説明を行う。図４の処理フローは、その他の変形例も実質的に内包するものである。図５は、図４の処理フローを実行する処理装置１００において達成されるシングルスカラーパイプラインのシーケンス図である。
【００３０】
図４において、ステップ２００では、与えられた命令が本発明に係るスキップ命令であるかを判定する。好適には、この判定は、スキップ命令実行ユニット１０２か、または命令デコード及びディスパッチユニット１０８のいずれかでなされる。例えば、この判定は、命令中の特定のオプコードを識別することでなされる。あるいは、この判定は、その命令のオフセット値を評価して、その値が後段への相対的に短い分岐のターゲットを表すか否かを判断することで、上述の判定を行うようにしてもよい。一例として、上述のオフセット値は、しきい値と比較されて、しきい値よりも小さい（あるいはしきい値以下）である場合に、スキップ命令であると判定される。
【００３１】
いずれの場合においても、その命令がスキップ命令と判定された場合、処理フローはステップ２０２へと進む。一方、当該命令がスキップ命令でないと判断された場合、処理フローは、好適にはステップ２０４へと進み、その命令に対してパイプライン内での通常の処理がなされる。ステップ２０２において、スキップ命令がデーコードされて、当該命令に関する種々の情報、例えばオフセット値（まだオフセット値が得られていない場合）等が得られる。デコード及びディスパッチのオペレーションは、命令デコード及びディスパッチユニット１０８で行われる（図３）。図５において、サイクル４でパイプラインの４段目でスキップ命令がデコード及びディスパッチされる。サイクル４では、INST.#1がパイプラインの３段（この段でオペレーションＣが実行される）に進んでおり、INST.#2はパイプラインの２段目（この段でオペレーションＢが実行される）に進んでおり、INST.#3がパイプラインの１段目（この段でオペレーションＡが実行される）に入力されている。
【００３２】
図３に戻ると、命令デコード及びディスパッチユニット１０８は、上述のオフセット値を得て、その値を、オフセット値バス１１４を経由して命令スキップカウンタ１１０に送る。この命令スキップカウンタ１１０は、本実施形態では、何らかの形式で格納する。ステップ２０６（図４）では、命令スキップカウンタの値（又はカウント値）がオフセット値から確定され、命令スキップカウンタ１１０にロード（読み出し）される。例えば、カウント値は、オフセット値と同じ値に設定され、上述の例ではその値は３となっている。このカウント値は、パイプライン処理においてスキップされるべき一連の命令の個数がいくつになりえるかを表す。
【００３３】
図５に示されるように、サイクル４で、パイプラインの４段においてカウント値が確定され、その値は命令スキップカウンタ１１０にロードされる。このことは、カウント値が確定される及び／又は命令スキップカウンタ１１０にロードされるという一例を示すものである。以下、その詳細を説明する。
【００３４】
ステップ２０８（図４）では、スキップ命令が実行され、この実施形態では、スキップ命令実行ユニット１０２（図３）で実行される。このことは、図５にも示されており、スキップ命令がサイクル５において処理パイプラインの５段目に入力され、実行オペレーション、図中のＥＸ、が行われる。より詳細には、この実施形態では、スキップ命令の実行と関連して、スキップ命令の状態（コンディション）を判定、つまり、スキップ命令の状態が真（true）であるか否かが判定される（図４のステップ２１０）。つまり、このステップでは、スキップ命令の真偽状態が判定される。判定された状態が偽（false）である場合、処理フローは、ステップ２１２へと進み、分岐命令もスキップ命令も実行されない。一方、状態の判断結果がtrueであった場合には、本実施形態では、スキップ命令実行ユニット１０２（図３）が命令スキップ信号をアクティブにし、つまり有効化して、その信号を、ライン１１２を通じて命令スキップカウンタ１１０に送る。
【００３５】
図５に示されるように、命令スキップ信号は、本実施形態では、命令スキップ信号のレベルを「high」にすることでアクティブとされる。
【００３６】
図４において、上記コンディションが真である場合、処理フローはステップ２１４へと進み、パイプラインにおける次の命令の実行が禁止される。より詳細には、ライン１１２にアクティブな命令スキップ信号が存在することで、命令スキップカウンタ１１０がアクティブ命令無効化信号を生成し、その信号を命令デコード及びディスパッチユニット１０８にライン１１６を通じて送る。この命令無効化信号がアクティブな場合、本実施形態においては図５に示されるロジックレベルがhighである場合、命令デコード及びディスパッチユニット１０８は、好適には、パイプライン内の次の命令を無効化すべきであるということを示す信号を送出する。例えば、本実施形態においては、命令デコード及びディスパッチユニット１０８は、算術論理命令実行ユニットに、パイプラインの次の命令を実行してはならないという信号を送信するようにしてもよい。図５を参照すると、このことは、サイクル６でINST.#1に関する実行動作ＥＸに「×」を付していることで示される。
【００３７】
換言すれば、サイクル６において、命令スキップカウンタ１１０は、好適には、命令無効化信号をアクティブにする動作が可能であり、この信号は、処理パイプラインにおける後続の命令（例えばINST.#1）の実行が、以下の場合に禁止されることを示す。
【００３８】
（１）命令スキップ信号の値が、命令をスキップすべきだということを示す値であるとき（つまり、この信号がアクティブであるとき）。
【００３９】
（２）カウント値が、通常の安定状態値、例えば０、とは異なるとき。
【００４０】
サイクル６では、命令スキップ信号は既にアクティブとされている（命令無効化信号がアクティブとなることにより、命令スキップ信号がアクティブとされているからである）。更に、カウント値（初期状態では２）は、ゼロという安定状態値とは異なった値である。従って、命令無効化信号はアクティブ（例えば論理レベルがhigh）のままとなり、INST.#1の実行が無効化される。
【００４１】
ステップ２１６において、カウント値は、その値を１だけ小さくされる。本実施形態では、この動作は命令スキップカウンタ１１０で行った。この動作は、図５に示され、サイクル６で命令スキップカウンタ値が２から１に変化されている。ステップ２１８においては、カウント値が安定状態値、つまり０にまで減少されたかどうかが判定される。カウント値が安定状態値に達していない場合、処理フローは、ステップ２１４に戻り、パイプラインの次の命令が禁止される。例えば、図５に示されるように、サイクル７でINST.#2の実行が禁止される。命令スキップカウンタ値が０になっておらず、命令無効化信号がアクティブのままだからである。ステップ２１６（図４）において、カウント値から１が減算される。このことは、図５のサイクル７に示され、命令スキップカウンタ値が１から０となり、命令無効化信号は、アクティブ状態から非アクティブ状態へと変更される。
【００４２】
図５を参照すると、命令スキップカウンタ値が確定した状態が示され、サイクル４でその値がロードされ、サイクル５，６，７においてその値が順次１ずつ減少されて、安定状態値である０に達する。他の形態で上述の処理を実行することも可能であり、例えば、サイクル５において命令スキップカウンタ値の確定及び／または読み込みを命令スキップカウンタ１１０で行うようにしてもよい。しかし、この場合、カウント値は、オフセット値から１を減算した値とする必要がある。従って、この場合はカウント値は、スキップ命令が実行されるサイクル５で、その値が２として読み込まれ、上述のような１を減算する処理は行われない。この例では命令の無効化が生じないからである。他の形態では、カウント値をオフセット値に等しい値で確定し、サイクル５で命令スキップカウンタ１１０に読み込んだ後に、そのサイクル５でカウント値を１だけ小さくする処理を行うようにしても良い。いずれの手法であっても、本発明の目的が達成されることには変わりない。
【００４３】
この実施形態では、命令スキップカウンタ値を減少させるようにしたが、本発明の範囲内で、他の形態を採用することも可能である。例えば、安定状態値を適切に設定してさえあれば、命令スキップカウンタ値を、処理パイプラインの１サイクル、あるいは複数のサイクルで増加させるようにもできる。例えば、安定状態値を適切な正数にセットし、カウント値を安定状態値とオフセット値の差分の値にセットすることもできる。従って、例えば、安定状態値が１０で、オフセット値が３である場合、命令スキップカウンタ値は７にセットされる。その後、命令スキップカウンタ値は、安定状態値である１０に達するまで、処理パイプラインのサイクルで増加される。いずれの場合においても、本願の目的は達成される。
【００４４】
本発明の方法及び/または装置を実施するにあたって、外部及び/または内部割り込みの扱いを考慮する必要がある。好適には、外部割り込み、例えばパイプライン内の命令以外の要因によって生じた割り込みは、命令の実行が禁止された（例えば無効化された）ときは、無視される。これにより、外部割り込みに応答するときに、プログラムカウンタ値の値を維持することができるという利点がある。内部割り込み、例えば処理パイプライン内の命令に起因する割り込みは、命令の無効化の間は生じてはならず、従って、このような内部割り込みに応答する必要はない。割り込みのその他の扱いかたとしては、割り込みに応答するときに、プログラムカウンタを分岐ターゲットのアドレスを書き換えるということもできる。
【００４５】
上述の図３〜５を参照した説明は、シングルスカラープロセッシングパイプライン（個々のサイクルにおいてパイプラインの実行段に対して命令が一つだけディスパッチされているもの）のためのものであるが、スーパースカラ処理パイプライン（与えられたサイクルにおいてパイプラインの実行段で複数の命令がディスパッチされるもの）でも本発明の利益を享受することができる。図６に、スーパースカラ処理装置である処理装置２５０を示す。この処理装置２５０は、後段への短い分岐のターゲットアドレスを有する分岐命令を、プログラムカウンタの値を上書きすることなく、かつ、スキップすべきパイプライン内の命令の実行を無効化するだけで、実行することができる。図７は、処理装置２５０による、このような分岐（又はスキップ）命令の処理を更に詳細に説明するパイプラインシーケンス図である。
【００４６】
通常、図６の処理装置２５０を形成する機能ブロックは、命令スキップカウンタ値の生成、命令スキップ信号、及び命令無効化信号に関しては、実質的に、図３の処理装置１００を構成する機能ブロックと実質的に同様のものとなっている。一方、スキップ命令カウンタ１１０は、本実施形態では、処理パイプラインの任意の（与えられた）サイクルでインクリメント（増加）あるいはデクリメント（減少）動作することが可能であり、これらのインクリメント、デクリメントでは、そのサイクルで実行が禁止される命令の数に比例して減少、あるいは増加され、通常１より大きな数での減少または増加なされる。
【００４７】
一例として、処理ユニット２５０は、パイプラインの任意のサイクルにおいて二つの命令を実行段にディスパッチすることが可能なスーパースカラプロセッサパイプラインを表す。図７において、オフセット値は４であり、分岐（スキップ）命令の状態判定結果がtrueの場合はINST.#1〜INST.#3がスキップされるべきものであるとする。この分岐（スキップ）命令及びINST.#1は、サイクル５でパイプラインの実行段に入力される。しかし、命令無効化信号はサイクル５でアクティブであるので、当該分岐命令後のパイプラインの次の命令の実行（即ち、INST.#1の実行）は、INST.#1に対応する実行オペレーションＥＸのボックスに「×」と記載されているように、禁止される。
【００４８】
本発明によれば、一つの命令（即ちINST.#1）が禁止されることから、カウント値は、この１に上述の比例した値を乗算した値によりインクリメント又はデクリメントがなされる。しかしながら、サイクル６では、二つの命令（即ち、INST.#2とINST.#3）の実行が禁止され、従って、このカウント値は、この２に上述の比例した値を乗算した値だけインクリメント又はデクリメントされる。サイクル７では、INST.#4の実行が許可される。命令無効化信号が非アクティブになっているからである（即ち、カウント値が安定状態値に達している）。
【００４９】
本発明の利点として、パイプラインにおける後段への分岐命令の処理が、プログラムカウンタ値を変更することなく、かつスキップすべき命令のみ、その実行を無効化することができるということが挙げられる。
【００５０】
以上、本発明を特定の実施形態に即して説明したが、これらの実施形態は、本発明の原理及び実施の一例を例示するに過ぎないものである。
【００５１】
従って、上記例示的な実施形態は、請求の範囲に記載した発明の趣旨及び範囲を逸脱することなく種々の変形、修正等が可能である。
【図面の簡単な説明】
【図１】  従来技術に係る分岐命令の処理フローの説明図。
【図２】  従来技術に係る分岐命令の処理を示すパイプラインシーケンスの説明図。
【図３】  本発明の一実施形態に係る処理システムの説明図。
【図４】  本発明の一実施形態に係る処理フローのフローチャート。
【図５】  本発明図３に係る装置を用いて達成される命令処理を示すパイプラインシーケンスの説明図。
【図６】  本発明の他の実施形態に係る処理装置の機能説明図。
【図７】  本発明図６に係る装置における命令処理を示すパイプラインシーケンスの説明図。
【符号の説明】
１００      処理装置
１０２      スキップ命令実行ユニット
１０４      分岐命令実行ユニット
１０６      算術論理命令実行ユニット
１０８      命令デコード及びディスパッチユニット
１１０      命令スキップカウンタ
１１２      ライン
１１４      オフセット値バス
１１６      ライン
２５０      処理装置
【図１】
0003749233.tif 000002
【図２】
0003749233.tif 000003
【図３】
0003749233.tif 000004
【図４】
0003749233.tif 000005
【図５】
0003749233.tif 000006
【図６】
0003749233.tif 000007
【図７】
0003749233.tif 000008