(57)【要約】プロセッサは、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する。分岐ミスを検出した際には、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子（ＩＤ＝１）を添付して発行する。分岐以前の命令が全て完了した後に、分岐予測により誤って発行してしまった命令をキャンセルして正しい方向の命令発行を再開する。プロセッサは、分岐ミスが発生してから命令に付ける識別子（ＩＤ）を更新しているため、ミスが発生した分岐命令以前の命令の全ての完了を待たずに正しい方向の命令が発行でき、処理性能が向上する。また命令に付ける識別子は少なくとも２つあれば良く、ハードウェア量の低減する。
2004031944.tif 000002
【特許請求の範囲】
【請求項１】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、
分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２命令制御部と、
前記分岐以前の命令が全て完了した後に、分岐予測により誤って発行してしまった命令をキャンセルして正しい方向の命令発行を開始する第３命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、前記古い分岐命令以前の命令が全て完了するのを待って、後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項３】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、前記第１の分岐ミスの検出により正しい方向と判断して発行した命令をキャンセルした後に、前記第２の分岐ミスの検出により判断した正しい方向の命令発行を開始する第３命令制御部と、
前記第２の分岐ミスが検出されて正しい方向の命令が発行された後に、前記古い分岐命令以前の命令が全て完了するのを待って、前記第２の分岐予測により誤って発行してしまった命令をキャンセルしてから、正しい方向の命令発行を再開する第４命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項４】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、前記新しい分岐命令以前の命令が全て完了するのを待って後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項５】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、正しい方向の命令発行を抑止した状態で、前記第１分岐ミスが検出された古い方の分岐命令以前の命令が全て完了するのを待って、前記古い分岐命令により誤って発行してしまった命令をキャンセルしてから、前記抑止を解除して正しい方向の命令発行を開始する第３命令制御部と、
前記第２の分岐ミスの検出による正しい方向の命令発行が開始された後に、新しい分岐命令以前の命令が全て完了するのを待って、前記第１の分岐予測の検出により発行された命令をキャンセルしてから、前記第２の分岐ミスによる正しい方向の命令発行を再開する第４命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項６】
請求の範囲１乃至５のプロセッサに於いて、更に、
命令が使用するレジスタの番号で参照されるエントリに、リネームに使用するリオーダバッファのアドレス格納領域と、命令制御で添付する複数の識別子に対応して複数の有効フラグ領域を備えたリネームマップと、
命令が使用するレジスタをリオーダバッファを用いてリネームする際に、レジスタの番号で参照されるリネームマップのエントリに、リネームに使用するリオーダバッファのアドレスを格納すると共に、命令に添付される識別子に対応した有効フラグをオンし、分岐ミスを検出した際に、誤って発行されてしまった命令に添付した識別子に対応したリネームマップの有効フラグをオフし、正しい方向に発行した命令に添付される別の識別子に対応したリネームマップの有効フラグをオンするリネーミング処理部と、
を設け、分岐ミスの検出により発行される正しい方向の命令が誤って発行されてしまった命令によるリネーム情報を使用することを防ぐことを特徴とするプロセッサ。
【請求項７】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
前記分岐以前の命令が全て完了した後に、分岐予測により誤って発行してしまった命令をキャンセルして正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項８】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
前記第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、前記古い分岐命令以前の命令が全て完了するのを待って、後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項９】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
前記第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、前記第１の分岐ミスの検出により正しい方向と判断して発行した命令をキャンセルした後に、前記第２の分岐ミスの検出により判断した正しい方向の命令発行を開始する第３ステップと、
前記第２の分岐ミスが検出されて正しい方向の命令が発行された後に、前記古い分岐命令以前の命令が全て完了するのを待って、前記第２の分岐予測により誤って発行してしまった命令をキャンセルしてから、正しい方向の命令発行を再開する第４ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項１０】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
前記第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、前記新しい分岐命令以前の命令が全て完了するのを待って後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項１１】
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
前記第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、正しい方向の命令発行を抑止した状態で、前記第１分岐ミスが検出された古い方の分岐命令以前の命令が全て完了するのを待って、前記古い分岐命令により誤って発行してしまった命令をキャンセルしてから、前記抑止を解除して正しい方向の命令発行を開始する第３ステップと、
前記第２の分岐ミスの検出による正しい方向の命令発行が開始された後に、新しい分岐命令以前の命令が全て完了するのを待って、前記第１の分岐予測の検出により発行された命令をキャンセルしてから、前記第２の分岐ミスによる正しい方向の命令発行を再開する第４ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項１２】
請求の範囲７乃至１１のプロセッサの命令制御方法に於いて、
命令が使用するレジスタの番号で参照されるエントリに、リネームに使用するリオーダバッファのアドレス格納領域と、命令制御で添付する複数の識別子に対応して複数の有効フラグ領域を備えたリネームマップを備えた場合、
命令が使用するレジスタをリオーダバッファを用いてリネームする際に、レジスタの番号で参照される前記リネームマップのエントリに、リネームに使用する前記リオーダバッファのアドレスを格納すると共に、命令に添付される識別子に対応した有効フラグをオンし、
分岐ミスを検出した際に、誤って発行されてしまった命令に添付した識別子に対応した前記リネームマップの有効フラグをオフし、正しい方向に発行した命令に添付される別の識別子に対応した前記リネームマップの有効フラグをオンすることにより、
分岐ミスの検出により発行される正しい方向の命令が誤って発行されてしまった命令によるリネーム情報を使用することを防ぐことを特徴とするプロセッサの命令制御方法。
【請求項１３】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、
前記例外発生命令以前の命令が全て完了した後に、例外発生命令及び例外発生なしとして発生した命令をキャンセルして前記例外発生ルーチンの命令発行を開始する第３命令制御部とを備えたことを特徴とするプロセッサ。
【請求項１４】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、前記古い例外発生命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を開始する第３命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項１５】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、前記第１の例外発生の検出により発行した例外処理ルーチンの命令をキャンセルした後に、前記第２の例外発生の検出により正しい方向となる例外処理ルーチンの命令発行を開始する第３命令制御部と、
前記第２の例外発生が検出されて例外処理ルーチンの命令が発行された後に、前記古い分岐命令以前の命令が全て完了するのを待って、前記第１の例外発生を起こした命令及び該命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を再開する第４命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項１６】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、前記例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、前記新しい例外発生命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、前記第１の例外発生による例外処理ルーチンの命令発行を開始する第３命令制御部と、
を備えたことを特徴とする命令制御方法。
【請求項１７】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、前記例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、前記例外処理ルーチンの命令発行を抑止した状態で、前記第１例外発生が検出された古い方の例外発生命令以前の命令が全て完了するのを待って、前記古い例外発生命令及び該命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、前記抑止を解除して前記第２の例外発生により正しい方向となる例外処理ルーチンの命令発行を開始する第３命令制御部と、
前記第２の例外発生により例外処理ルーチンの命令が発行された後に、新しい例外発生命令以前の命令が全て完了するのを待って前記第２の例外発生の命令及び及び前記第１の例外発生の例外処理ルーチンで発行された命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を再開する第４命令制御部と、
を備えたことを特徴とするプロセッサ。
【請求項１８】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
前記例外発生命令以前の命令が全て完了した後に、例外発生命令及び例外発生なしとして発行してしまった命令をキャンセルして前記例外発生ルーチンの命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項１９】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、前記古い分岐命令以前の命令が全て完了するのを待って、例外発生命令及び後続する全ての命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項２０】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、前記第１の例外発生の検出により発行した例外処理ルーチンの命令をキャンセルした後に、前記第２の例外発生の検出により正しい方向となる例外処理ルーチンの命令発行を開始する第３ステップと、
前記第２の例外発生が検出されて例外処理ルーチンの命令が発行された後に、前記古い分岐命令以前の命令が全て完了するのを待って、前記第１の例外発生を起こした命令及び該命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を再開する第４ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項２１】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、前記例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、前記新しい例外発生命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、前記第１の例外発生による例外処理ルーチンの命令発行を開始する第３ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【請求項２２】
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
前記第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、前記例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、前記例外処理ルーチンの命令発行を抑止した状態で、前記第１例外発生が検出された古い方の例外発生命令以前の命令が全て完了するのを待って、前記古い例外発生命令及び該命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、前記抑止を解除して前記第２の例外発生により正しい方向となる例外処理ルーチンの命令発行を開始する第３ステップと、
前記第２の例外発生により例外処理ルーチンの命令が発行された後に、新しい例外発生命令以前の命令が全て完了するのを待って前記第２の例外発生の命令及び前記第１の例外発生の例外処理ルーチンで発行された命令をキャンセルしてから、前記第２の例外発生による例外処理ルーチンの命令発行を再開する第４ステップと、
を備えたことを特徴とするプロセッサの命令制御方法。
【発明の詳細な説明】
【技術分野】  本発明は、分岐予測により命令を投機時に実行するプロセッサ及び命令制御方法に関し、特に、分岐予測に失敗した場合の後続命令のキャンセルを効率良く行うプロセッサ及び命令制御方法に関する。
【背景技術】  従来、分岐予測と動的パイプライン処理を併用したプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの命令確定部（コミット）を備え、分岐予測に基づき命令を投機的に実行している。即ち、命令発行部は、インオーダーにより複数命令をフェッチしてデコードし、命令格納部の命令格納キューに命令操作（オペコード）とオペランドを保持させる。命令実行部は、命令格納部に全てのオペランドが準備され、演算器が利用可能となり次第、アウトオブオーダーで投機的に命令を実行し、結果を得る。命令確定部は、未完了命令をリオーダーバッファに保持しており、分岐予測が正しかった場合には、分岐の後続命令の結果は有効とされ、リオーダーバッファからレジスタやメモリに書き込まれる。分岐予測が外れて分岐ミスとなった場合には、分岐の後続命令は全て無効とされ、命令格納部およびリオーダーバッファから除去される。ここでリオーダーバッファは、命令発行部が命令で使用する実際のレジスタの代替用として割当てたリオーダーマップで管理しており、アウトオブオーダーで実行された命令の結果を実際のレジスタに書込むのを命令確定部が待つ間だけ保持する。このため分岐予測が外れた場合には、分岐の後続命令に割当てたリオーダーバッファのマップ上の有効ビットをオフする。
図１は従来のプロセッサにおける分岐ミス発生時の処理である。図１（Ａ）の分岐予測による命令の投機的実行において、分岐命令Ｂ４についての分岐予測が失敗して分岐ミス２００が検出されると、図１（Ｂ）のように、分岐命令Ｂ４以前の命令が全て完了した場合、リオーダーバッファを含む資源の更新が完了してから後に、誤って実行してしまった命令５〜命令８をキャンセルするキャンセル処理２０２を行い、その後に図１（Ｃ）のように、正しい方向の命令５０，５１となる命令の発行開始し、命令列を実行するようにしている。
しかしながら、このような命令制御にあっては、分岐ミスとなった分岐命令Ｂ４以前の命令が完了しないと、正しい命令列の発行を再開できず、命令実行の処理性能が低いという問題がある。そこで、プロセッサの処理性能を向上するため、図２のような分岐ミス発生に対する命令制御を行っている。この命令制御にあっては、図２（Ａ）のように、分岐命令Ｂ４，Ｂ８を境に命令列に識別子としてのＩＤをＩＤ＝０，ＩＤ＝１，ＩＤ＝２のように持たせ、図２（Ｂ）で分岐命令Ｂ４の分岐ミス２０４を検出した場合には、分岐命令Ｂ４のＩＤ＝０より新しいＩＤ＝１，ＩＤ＝２を持つ命令５〜命令１１をキャンセルするキャンセル処理２０６を行い、その後、図２（Ｃ）のように、正しい方向の命令５０，５１の発行を開始して命令列を実行するようにしている。このため分岐ミス２０４が検出された分岐命令Ｂ４以前の命令が全て完了していなくても、正しい命令列の実行を再開でき、命令の処理性能を高めることができる。しかし、図２の命令制御にあっては、多数の分岐命令を同時に動作させようとすると、分岐命令の数分のＩＤを持つ必要があり、ハードウェア量の増加と複雑化を招き、プロセッサの高速化には向かないという問題がある。またリネームを行っているプロセッサの場合、分岐命令毎にリネーム情報のスナップショットをとる必要があったため、同様に、ハードウェア量の増加と複雑化を招き、プロセッサの高速化には向かないという問題がある。この問題を詳細に説明すると次のようになる。
図３は、従来のプロセッサで使用するリネームマップの説明図であり、リネーム可能なレジスタＲＥＧ０、ＲＥＧ１，ＲＥＧ２，ＲＥＧ３と、そのリネームに使用するリオーダーバッファＲＯＢ０，ＲＯＢ１，ＲＯＢ２，ＲＯＢ３が存在する場合を例として説明する。リネームマップ２１０はレジスタ番号ＲＥＧ＿ＡＤ２１２をエントリ番号０〜３として索引するテーブルであり、有効ビットフィールドＡＶのフィールド２１６が「１」であると、そのレジスタがリオーダバッファアドレスＲＯＢ＿ＡＤのフィールド２１４の示すリオーダバッファＲＯＢでリネーム中であることを示す。命令発行に伴い例えばレジスタＲＥＧ１をリオーダバッファＲＯＢ３を用いてリネームする場合には、リネームマップのエントリ「１」の有効クラグＡＶのフィールド２１６に「１」を書くと共に、リオーダバッファアドレスＲＯＢ＿ＡＤのフィールド２１４に「３」を書く。また命令の完了によりリネームが終了すると、有効フラグＡＶのフィールド２１６を「０」に書き換えてリオーダバッファＲＯＢ３を開放する。更にリオーダバッファＲＯＢ３を開放する前に同一のレジスタＲＥＧ１を別のリオーダバッファＲＯＢ０でリネームしたい場合には、リネームマップ２１０におけるリネームバッファアドレスＲＯＢ＿ＡＤのフィールド２１４のみを例えば「０」に書き換え、有効クラグＡＶのフィールド２１６はそのレジスタＲＥＧ１を最後にリネームした命令が完了した時に「０」とする。このため図２の命令制御のように、分岐命令を境に命令列毎に識別子であるＩＤを持たせた場合には、図３のようなリネームマップ２１０では、分岐命令毎にリオーダバッファアドレスＲＯＢ＿ＡＤのフィールド２１４を持たなくてはならない上に、中間状態の有効フラグＡＶのフィールドも生成しなくてはならないという問題があり、このためハードウェア量の増加と複雑化を招き、プロセッサの高速化には向かないという問題が生じている。このような命令の投機的実行は、命令実行で例外が発生した場合にも、例外なしとして発行してしまった投機的に実行された命令が無効となり、分岐ミスの場合と同様な問題がある。
本発明は、少ないハードウェア量で投機的実行を誤った時の命令発行再開を速やかに可能とするプロセッサ及び命令制御方法を提供することを目的とする。
【発明の開示】
（分岐予測を制御するプロセッサ）
本発明のプロセッサの第１形態にあっては、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を発行する第２命令制御部と、分岐以前の命令が全て完了した後に、分岐予測により誤って発行してしまった命令をキャンセルして正しい方向の命令発行を開始する第３命令制御部とを備えたことを特徴とする。このように本発明のプロセッサは、分岐ミスが発生してから命令に付ける識別子（ＩＤ）を更新しているため、分岐ミスが発生した分岐命令以前の命令の全ての完了を待たずに正しい方向の命令が発行できることで、命令の処理性能が向上し、また命令に付ける識別子は少なくとも２つあれば良く、処理性能の向上とハードウェア量の低減が両立できる。
本発明のプロセッサの第２形態にあっては、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令に第２識別子（ＩＤ＝１）を添付して発行する第２命令制御部とを備えた点は第１形態と同じであるが、更に、第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令について第２の分岐ミスを検出した場合、古い分岐命令以前の命令が全て完了するのを待って、後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３命令制御部とを備えたことを特徴とする。このように最初の分岐ミスに対し正しい方向に命令発行を開始した後に、それ以前の古い分岐命令について分岐ミスが発生した場合に、古い分岐命令以前の命令の全ての完了を待って未完了の命令を全てキャンセルしてから正しい方向の命令を発行でき、この場合も、命令に付ける識別子は少なくとも２つあれば良く、ハードウェア量を低減できる。
本発明のプロセッサの第３形態にあっては、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子（ＩＤ＝１）を添付して発行する第２命令制御部とを備える点は、第１形態と同じであるが、これに加え、第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令において第２の分岐ミスを検出した場合、第１の分岐ミスの検出により正しい方向と判断して発行した命令をキャンセルした後に、第２の分岐ミスの検出により判断した正しい方向の命令発行を開始する第３命令制御部と、第２の分岐ミスが検出されて正しい方向の命令が発行された後に、古い分岐命令以前の命令が全て完了するのを待って、第２の分岐ミス側の命令をキャンセルしてから、正しい方向の命令発行を再開する第４命令制御部とを備えたことを特徴とする。このように最初の分岐ミスに対し正しい方向に命令発行を開始した後に、それ以前の古い分岐命令について分岐ミスが発生した場合に、古い分岐命令以前の命令の全ての完了を待つことなく、最初の分岐予測で誤って発行した未完了の命令を全てキャンセルして正しい方向の命令を発行でき、その後に、古い分岐命令以前の命令の完了を待って、誤って発行した未完了の命令をキャンセルしてから、正しい方向の命令を発行して処理性能を向上でき、また命令に付ける識別子は少なくとも２つあれば良いからハードウェア量も低減できる。
本発明によるプロセッサの第４形態は、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子（ＩＤ＝１）を添付して発行する第２命令制御部とを備える点は第１形態と同じであるが、これに加えて、第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、新しい分岐命令以前の命令が全て完了するのを待って、後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３命令制御部を備えたことを特徴とする。このように最初の分岐ミスに対し正しい方向に命令発行を開始した後に、正しい命令列内の新たな分岐命令について分岐ミスが発生した場合に、新しい分岐命令以前の命令の全ての完了を待って未完了の命令を全てキャンセルして正しい方向の命令を発行でき、この場合も、命令に付ける識別子は少なくとも２つあれば良く、ハードウェア量を低減できる。
本発明によるプロセッサの第５形態は、第１識別子（ＩＤ＝０）を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１命令制御部と、第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子（ＩＤ＝１）を添付して発行する第２命令制御部とを備えた点は第１形態と同じであるが、これに加えて、第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、正しい方向の命令発行を抑止した状態で、第１の分岐ミスが検出された古い方の分岐命令以前の命令が全て完了するのを待って、古い分岐命令により誤って発行してしまった命令をキャンセルしてから、抑止を解除して正しい方向の命令発行を開始する第３命令制御部と、第２の分岐ミスの検出による正しい方向の命令発行が開始された後に、新しい分岐命令以前の命令が全て完了するのを待って、第２の分岐ミス側の命令をキャンセルしてから、第２の分岐ミスのよる正しい方向の命令発行を再開する第４命令制御部とを備えたことを特徴とする。このように最初の分岐ミスに対し正しい方向に命令発行を開始した後に、正しい方向の命令列内の新しい分岐命令につき分岐ミスが発生した場合に、新しい分岐命令以前の命令の全ての完了を待つことなく、最初の分岐ミスで誤って発行した未完了の命令を全てキャンセルして正しい方向の命令を発行でき、その後に、新しい分岐命令以前の命令の完了を待って誤って発行した未完了の命令をキャンセルして正しい方向の命令を発行することで処理性能を向上でき、また命令に付ける識別子は少なくとも２つあれば良いからハードウェア量も低減できる。
このような第１形態乃至第５形態のプロセッサは、更に、命令が使用するレジスタの番号で参照されるエントリに、リネームに使用するリオーダーバッファのアドレス格納領域と、命令制御で添付する複数の識別子に対応して複数の有効フラグ領域を備えたリネームマップと、命令が使用するレジスタをリオーダーバッファを用いてリネームする際に、レジスタの番号で参照されるリネームマップのエントリに、リネームに使用するリオーダーバッファのアドレスを格納すると共に、命令に添付される識別子に対応した有効フラグをオンし、分岐ミスを検出した際に、誤って発行されてしまった命令に添付した識別子に対応したリネームマップの有効フラグをオフし、正しい方向に発行した命令に添付される別の識別子に対応したリネームマップの有効フラグをオンするリネーミング処理部とを設け、これによって分岐ミスの検出により発行される正しい方向の命令が、誤って発行されてしまった命令によるリネーム情報を使用することを防ぐことを特徴とする。
（分岐予測の命令制御方法）
本発明によるプロセッサの命令制御方法の第１形態は、
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
分岐以前の命令が全て完了した後に、分岐予測により誤って発行してしまった命令をキャンセルして正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの命令制御方法の第２形態は、
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、古い分岐命令以前の命令が全て完了するのを待って、後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの命令制御方法の第３形態は、
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
第１の分岐ミスが検出されて正しい方向の命令が発行された後に、それ以前の古い分岐命令で第２の分岐ミスを検出した場合、第１の分岐ミスの検出により正しい方向と判断して発行した命令をキャンセルした後に、第２の分岐ミスの検出により判断した正しい方向の命令発行を開始する第３ステップと、
第２の分岐ミスが検出されて正しい方向の命令が発行された後に、古い分岐命令以前の命令が全て完了するのを待って、第２の分岐予測により誤って発行してしまった命令をキャンセルしてから、正しい方向の命令発行を再開する第４ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの命令制御方法の第４形態は、
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、新しい分岐命令以前の命令が全て完了するのを待って後続する全ての命令をキャンセルしてから、正しい方向の命令発行を開始する第３ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの命令制御方法の第４形態は、
第１識別子を添付して分岐命令を含む命令を発行し、分岐予測により投機実行する第１ステップと、
第１の分岐ミスを検出した際に、誤って発行してしまった命令の後ろに続けて正しい方向の命令を第２識別子を添付して発行する第２ステップと、
第１の分岐ミスが検出されて正しい方向の命令発行を開始した後に、正しい方向として発行した命令内の新しい分岐命令で第２の分岐ミスを検出した場合、正しい方向の命令発行を抑止した状態で、第１分岐ミスが検出された古い方の分岐命令以前の命令が全て完了するのを待って、古い分岐命令により誤って発行してしまった命令をキャンセルしてから、抑止を解除して正しい方向の命令発行を開始する第３ステップと、
第２の分岐ミスの検出による正しい方向の命令発行が開始された後に、新しい分岐命令以前の命令が全て完了するのを待って、第１の分岐予測の検出により発行された命令をキャンセルしてから、前記第２の分岐ミスによる正しい方向の命令発行を再開する第４ステップと、
を備えたことを特徴とする。
更に第１乃至第５形態におけるブロセッサの命令制御方法にあっては、命令が使用するレジスタの番号で参照されるエントリに、リネームに使用するリオーダバッファのアドレス格納領域と、命令制御で添付する複数の識別子に対応して複数の有効フラグ領域を備えたリネームマップを設けた場合、
命令が使用するレジスタをリオーダバッファを用いてリネームする際に、レジスタの番号で参照される前記リネームマップのエントリに、リネームに使用する前記リオーダバッファのアドレスを格納すると共に、命令に添付される識別子に対応した有効フラグをオンし、
分岐ミスを検出した際に、誤って発行されてしまった命令に添付した識別子に対応した前記リネームマップの有効フラグをオフし、正しい方向に発行した命令に添付される別の識別子に対応した前記リネームマップの有効フラグをオンすることにより、
分岐ミスの検出により発行される正しい方向の命令が誤って発行されてしまった命令によるリネーム情報を使用することを防ぐことを特徴とする。
（例外発生を処理するプロセッサ）
本発明のプロセッサは、分岐予測による命令の投機的実行以外に、例外発生なしとして投機的に実行した命令を例外発生でキャンセルする場合にも、分岐ミスの場合と同様に適用でき、分岐ミスの検出に対応して例外発生についても次の第１形態〜第５形態をとる。
本発明の例外発生を処理するプロセッサの第１形態は、第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、例外発生命令以前の命令が全て完了した後に、例外発生命令及び例外発生なしとして発行してしまった命令をキャンセルして例外発生ルーチンの命令発行を開始する第３命令制御部とを備えたことを特徴とする。
本発明のプロセッサの例外発生を処理する第２形態は、第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、古い分岐命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を開始する第３命令制御部とを備えたことを特徴とする。
本発明のプロセッサの例外発生を処理する第３形態は、第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、第１の例外発生の検出により発行した例外処理ルーチンの命令をキャンセルした後に、第２の例外発生の検出により正しい方向となる例外処理ルーチンの命令発行を開始する第３命令制御部と、第２の例外発生が検出されて例外処理ルーチンの命令が発行された後に、古い分岐命令以前の命令が全て完了するのを待って、第１の例外発生を起こした命令及びこの命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を再開する第４命令制御部とを備えたことを特徴とする。
本発明のプロセッサの例外発生を処理する第４形態は、第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、新しい例外発生命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、第１の例外発生による例外処理ルーチンの命令発行を開始する第３命令制御部とを備えたことを特徴とする。
本発明のプロセッサ例外発生を処理する第５形態は、第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１命令制御部と、第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２命令制御部と、第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、例外処理ルーチンの命令発行を抑止した状態で、第１例外発生が検出された古い方の例外発生命令以前の命令が全て完了するのを待って、古い例外発生命令及びこの命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、抑止を解除して第２の例外発生により正しい方向となる例外処理ルーチンの命令発行を開始する第３命令制御部と、第２の例外発生により例外処理ルーチンの命令が発行された後に、新しい例外発生命令以前の命令が全て完了するのを待って第２の例外発生の命令及び第１の例外発生による例外処理ルーチンで発行された命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を再開する第４命令制御部とを備えたことを特徴とする。
（例外発生を処理する命令制御方法）
本発明によるプロセッサの命令制御方法の例外発生を処理する第１形態は、例外発生により投機的に実行した命令をキャンセルする場合にも、分岐ミスの場合、と同様に適用でき、分岐ミスの検出に対応して例外発生についても次の第１形態〜第５形態をとる。
例外発生を処理する本発明によるプロセッサの命令制御方法の第１形態は、
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
例外発生命令以前の命令が全て完了した後に、例外発生命令及び例外発生なしとして発行してしまった命令をキャンセルして例外発生ルーチンの命令発行を開始する第３ステップとを備えたことを特徴とする。
本発明によるプロセッサの例外発生を処理する命令制御方法の第２形態は、
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、古い分岐命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を開始する第３ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの例外発生を処理する命令制御方法の第３形態は、
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令が発行された後に、それ以前の古い命令で第２の例外発生を検出した場合、第１の例外発生の検出により発行した例外処理ルーチンの命令をキャンセルした後に、第２の例外発生の検出により正しい方向となる例外処理ルーチンの命令発行を開始する第３ステップと、
第２の例外発生が検出されて例外処理ルーチンの命令が発行された後に、前記古い分岐命令以前の命令が全て完了するのを待って、第１の例外発生を起こした命令及びこの命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を再開する第４ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの例外発生を処理する命令制御方法の第４形態は、
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
第１の例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、新しい例外発生命令以前の命令が全て完了するのを待って例外発生命令及び後続する全ての命令をキャンセルしてから、第１の例外発生による例外処理ルーチンの命令発行を開始する第３ステップと、
を備えたことを特徴とする。
本発明によるプロセッサの例外発生を処理する命令制御方法の第５形態は、
第１識別子を添付して例外発生命令を含む命令を発行し、例外発生なしとして投機的に命令を実行する第１ステップと、
例外発生を検出した際に、例外発生なしとして誤って発行してしまった命令の後ろに続けて例外処理ルーチンの命令を第２識別子を添付して発行する第２ステップと、
第１の例外発生が検出されて正しい方向となる例外処理ルーチンの命令発行を開始した後に、例外処理ルーチンにより発行した命令内の新しい命令で第２の例外発生を検出した場合、例外処理ルーチンの命令発行を抑止した状態で、第１例外発生が検出された古い方の例外発生命令以前の命令が全て完了するのを待って、古い例外発生命令及びこの命令により例外発生なしとして誤って発行してしまった命令をキャンセルしてから、抑止を解除して第２の例外発生により正しい方向となる例外処理ルーチンの命令発行を開始する第３ステップと、
第２の例外発生により例外処理ルーチンの命令が発行された後に、新しい例外発生命令以前の命令が全て完了するのを待って第２の例外発生の命令及び第１の例外発生による例外発生ルーチンで発行された命令をキャンセルしてから、第２の例外発生による例外処理ルーチンの命令発行を再開する第４ステップと、
を備えたことを特徴とする。
【図面の簡単な説明】図１は従来のプロセッサにおける分岐ミスに対する命令制御動作の説明図；
図２は分岐命令毎に異なるＩＤを付ける従来のプロセッサにおける分岐ミスに対する命令制御動作の説明図；
図３は従来のプロセッサで使用するリネームマップの説明図；
図４は本発明が適用されるプロセッサの機能構成のブロック図；
図５は本発明のプロセッサで使用するリネームマップの説明図；
図６は命令に付けるＩＤの数によるハードウェア規模を本発明と従来例につき対比した回路図；
図７は本発明による第１モード分岐予測命令制御部のブロック図；
図８は図７の実施形態による命令制御動作の説明図；
図９は図７の実施形態による命令制御動作のタイミングチャート；
図１０は図７の実施形態による命令制御のフローチャート；
図１１は本発明による第２モード分岐予測命令制御部のブロック図；
図１２は図１１の実施形態による命令制御動作の説明図；
図１３は図１１の実施形態による命令制御動作のタイミングチャート；
図１４は図１１の実施形態による命令制御のフローチャート；
図１５は本発明による第３モード分岐予測命令制御部のブロック図；
図１６は図１５の実施形態による命令制御動作の説明図；
図１７は図１５の実施形態による命令制御動作のタイミングチャート；
図１８は図１５の実施形態による命令制御のフローチャート；
図１９は本発明による第４モード分岐予測命令制御部のブロック図；
図２０は図１９の実施形態による命令制御動作の説明図；
図２１は図１９の実施形態による命令制御動作のタイミングチャート；
図２２は図１９の実施形態によるる命令制御のフローチャート；
図２３は本発明による第４モード分岐予測命令制御部のブロック図；
図２４は図２３の実施形態による命令制御動作の説明図；
図２５は図２３の実施形態による命令制御動作のタイミングチャート；
図２６は図２４の実施形態によるる命令制御のフローチャート；
図２７は本発明による第１モードから第５モードの分岐予測命令制御を一体化した命令制御のフローチャート；
図２８は本発明による第１モード例外発生命令制御部のブロック図；
図２９は図２７の実施形態による命令制御動作の説明図；
図３０は図２７の実施形態による命令制御のフローチャート；
図３１は本発明による第２モード例外発生命令制御部のブロック図；
図３２は図３１の実施形態による命令制御動作の説明図；
図３３は図３１の実施形態による命令制御のフローチャート；
図３４は本発明による第３モード例外発生命令制御部のブロック図；
図３５は図３４の実施形態による命令制御動作の説明図；
図３６は図３４の実施形態による命令制御のフローチャート；
図３７は本発明による第４モード例外発生命令制御部のブロック図；
図３８は図３７の実施形態による命令制御動作の説明図；
図３９は図３７の実施形態による命令制御のフローチャート；
図４０は本発明による第５モード例外発生命令制御部のブロック図；
図４１は図４０の実施形態による命令制御動作の説明図；
図４２は図４１の実施形態による命令制御のフローチャート；
図４３は本発明による第１モードから第５モードの例外発生命令制御を一体化した命令制御のフローチャート；
【発明を実施するための最良の形態】  図４は、本発明の命令制御が適用されるプロセッサの機能構成のブロック図である。図４において、プロセッサ１０には、分岐予測部１２、命令発行部１４、命令格納部１６、命令実行部１８、命令確定部２０、レジスタ２２、リネーミング処理部２４が設けられる。命令格納部１６には、リザベーションステーションと呼ばれる命令格納キュー２６−１〜２６−４が設けられている。また命令実行部１８には、分岐処理部２８、整数演算器３０、浮動小数点演算器３２、ロード／ストア処理部３４などの機能処理部が設けられている。更にリネーミング処理部２４には、リオーダバッファ３６とリネームマップ３８が設けられている。
このようなプロセッサ１０の各処理部は命令制御部４０の制御のもとに動作する。本発明にあっては、命令制御部４０には通常の命令制御に加え、本発明に固有な分岐予測命令制御部４２と例外発生命令制御部４４を備えている。この図４の実施形態におけるプロセッサ１０は、いわゆる動的スケジューリング及び分岐予測を併用することにより命令の投機的実行を行う。まず命令発行部１４は、命令キャツシュから例えば４命令をフェッチしてデコードする。分岐予測部１２は分岐予測用の分岐履歴テーブルを備え、予測された分岐方向に投機的実行を行う。
命令発行部１４からインオーダーで発行された命令は、命令格納部１６に各命令とそのオペランドを、命令実行部１８における機能処理部に対応して送る。同時に命令発行部１４は、リオーダバッファ３６に命令を登録する。命令格納部１６に送られた命令は、命令実行部１８に設けている対応する処理部が利用可能になり次第、アウトオブオーダーで命令が実行され、命令に割り当てられたリオーダバッファに結果が格納される。命令確定部２０は、未完了命令を全てリオーダバッファ３６に保持しており、命令実行部１８の分岐処理部２８で分岐が成立するか否かの判定結果を受けると、それに基づいて命令確定部２０は未完了命令の処理を決定する。即ち、分岐予測が正しかった場合には分岐命令に対する後続命令の結果は有効とされ、プログラムの順番に従ったインオーダでレジスタ２２や図示しないメモリに書き込まれる。分岐予測が外れて分岐ミスとなった場合には、分岐命令に対する後続命令の結果は全て無効とされ、命令格納部１６及びリオーダバッファ３６からキャンセルされる。このように、分岐予測により投機的に実行された命令について分岐ミスを検知した際に、命令制御部４０に設けている本発明による分岐予測命令制御部４２は、分岐ミスによって誤った方向に発行してしまった命令のキャンセルと分岐ミスの検出に基づいて正しい方向への命令発行の処理を効率的に行う。
図５は、図４のプロセッサ１０のリネーミング処理部２４に設けたリネームマップ３８の説明図である。本発明の分岐予測命令制御にあっては、命令に付ける識別子であるＩＤとして、少なくともＩＤ＝０，１の２つを使用すればよい。
この命令に付ける２つのＩＤに対応し、リネームマップ３８は命令のレジスタ番号５０で指定される右側に示すエントリ０，１，２，３のそれぞれについて、リオーダバッファアドレスフィールド（ＲＯＢ＿ＡＤ）４６に加え、ＩＤ＝０に対応した有効フラグＡＶ０を格納する有効フラグフィールド（ＡＶ０）４８−０と、ＩＤ＝１に対応した有効フラグＡＶ１を格納する有効フラグフィールド（ＡＶ１）４８−１を設けている。このリネームマップ３８は、レジスタ番号５０で指定されるエントリ、例えばレジスタ番号ＲＧ１の場合にはエントリ「０」のリオーダバッファアドレスフィールド４６に、リネームしたいリオーダバッファのアドレス例えば「００」を書き込む。このとき命令に付けられたＩＤがＩＤ＝０であれば、有効フラグフィールド４８−０の該当フィールドのフラグを「１」にする。命令の完了によりリオーダバッファを開放する場合や分岐ミスの検出により命令を無効にする場合には、例えば「１」としているＩＤ＝０の有効フラグフィールド４８−０を「０」とすればよい。
図６は、図５のリネームマップ３８を対象とした命令に付されたＩＤに応じて有効フラグフィールドを「０」にキャンセルするためのキャンセル信号を発生するハードウェアとしての回路図である。図６（Ａ）は、図５の本発明のリネームマップ３８における２つのＩＤ＝０，１に対応した回路である。これに対し図６（Ｂ）は、図２に示した従来の命令制御においてＩＤ＝０〜７の８つを使用する場合のハードウェアの回路を表わしている。図６（Ａ）の本発明で使用される回路にあっては、キャンセル信号を発生する際にはラッチ５２に命令のＩＤフィールドに設けた１ビットのＩＤデータがセットされ、ＩＤ＝０であればインバータ５４の出力が１となり、アンドゲート５６−０に対するＩＤ＝０を付した命令の完了あるいは無効による入力のタイミングで出力１を生じ、これがオアゲート５８からキャンセル信号として出力される。またラッチ５２に命令のＩＤフィールドのＩＤ＝１が保持された場合には、バッファ５５の出力が１となり、アンドゲート５６−１に対するＩＤ＝１を付した命令の完了あるいは無効化に伴う信号入力を受けたタイミングで、オアゲート５８を介してキャンセル信号を出力する。これに対し図６（Ｂ）の従来の命令制御で使用する回路にあっては、８つのＩＤ＝０〜７に対応し、ラッチ６０からの出力ラインは３ビットラインとなり、またラッチ６０に保持された命令のＩＤフィールドの３ビットの情報から８種類のＩＤに分けるためのデコーダ６２が設けられ、デコーダ６２からの出力は８本の信号線となる。更にデコーダ６２に続いて、ＩＤ＝０〜７に８つに対応してアンドゲート６４−０〜６４−７が設けられ、これらの出力をオアゲート６６でまとめてキャンセル信号を取り出している。この図６（Ａ）における本発明の２つのＩＤを用いた場合と図６（Ｂ）の従来の８つのＩＤを用いた場合と対比して明らかなように、命令に付けるＩＤの数が増加するほどキャンセル信号を出力するための回路規模が大きくなることが分かる。これに対し本発明にあっては、図６（Ａ）のように、基本的には２つのＩＤを使用するだけでよいことから、命令の完了あるいは分岐ミスに伴う命令の無効で必要とするキャンセル信号のハードウェア量を十分に小さくできることが分かる。
図７は、図４のプロセッサ１０に設けている分岐予測命令制御部４２の第１実施形態となる第１モード分岐予測命令制御部４２−１の機能構成のブロック図である。この第１モード分岐予測命令制御部４２−１は、第１命令制御部６８、第２命令制御部７０及び第３命令制御部７２−１を備える。
図８は、図７の第１モード分岐予測命令制御部４２−１による命令制御動作を表わしており、これを参照して図７の制御動作を説明すると次のようになる。まず第１命令制御部６８は、図８（Ａ）のように、第１識別子としてのＩＤ＝０を付けて分岐命令Ｂ４，Ｂ８を含む命令１〜命令１１の発行しており、分岐命令列Ｂ４については分岐予測によって判断された方向に命令５〜命令１１を発行して投機的に実行している。このような分岐予測に基づく命令の投機的な実行により、分岐命令Ｂ４についてて分岐ミス８０が検出されると、図７の第２命令制御部７０は、この分岐ミス８０を検出した時点で、図８（Ｂ）のように、誤って発行してしまった命令５〜命令１１の後ろに続けて、正しい方向の命令５０，５１を第２識別子となる別のＩＤ＝１を付けて発行する。続いて図７の第３命令制御部７２−１が、図８（Ｃ）のように、分岐以前の命令１〜命令Ｂ４が全て完了したことを認識した後に、分岐命令Ｂ４の分岐予測によって誤って発行してしまった命令５〜命令１１に対しキャンセル処理８４を実行し、その後に正しい方向の命令５０，５１に続く命令発行を開始する。この誤って発行してしまった命令５〜命令１１のキャンセル処理８４の際には、キャンセル対象となった命令に付けているＩＤ＝０及び命令の資源をキャンセルする。具体的には、図６（Ａ）の回路によりキャンセルした命令のＩＤフィールドをラッチ５２にセットしてキャンセル信号を発生させ、このキャンセル信号により図４のプロセッサ１０の命令格納部１６に保持している誤って発行してしまった命令５〜命令１１をキャンセルすると共に、図５のリネームマップ３８におけるＩＤ＝０に対応した有効フラグフィールド４８−０の全てのエントリを「０」とすることで、命令資源として使用していたリオーダバッファ３６を開放する。このように本発明の第１モード分岐予測命令制御部による制御動作にあっては、分岐ミスが検出された後に発行する正しい方向の命令に新たなＩＤを付していることから、分岐ミスに対する命令キャンセルと正しい方向の命令発行について使用するＩＤの種類を２つとするだけでよく、ＩＤの使用に伴うハードウェアの量を必要最小限にすることができる。
図９は、図８の命令制御動作に対応するタイミングチャートであり、縦方向に発行された命令を並べ、横方向に経過時間を表わしている。図９にあっては、分岐命令Ｂ４について時刻ｔ１で分岐ミス８０が検出されると、分岐命令Ｂ４の発行済みで実行が終わった後の時刻ｔ２のタイミングで、図８（Ｂ）のようにＩＤ＝１を付して、正しい方向の命令５０，５１の発行を開始している。その後、時刻ｔ３で分岐命令Ｂ４までの命令が全て完了した後の時刻ｔ３のタイミングで、誤って発行した命令５〜命令１１のキャンセルを行っている。
図１０は、図７の第１モード分岐予測命令制御部４２−１による命令制御のフローチャートである。まずステップＳ１で同一のＩＤを付して命令を発行しており、ステップＳ２で発行が済んで実行が終わった分岐命令について分岐ミスが発生すると、ステップＳ３で別のＩＤを付して正しい方向の命令を発行する。続いてステップＳ４で分岐ミス以前の命令が全て完了したか否か監視しており、全て完了すると、ステップＳ５で分岐ミスにより誤って発行してしまった投機失敗命令及びリオーダバッファを含むその資源をキャンセルした後、ステップＳ６で正しい方向の命令発行を再開する。
図１１は、図４のプロセッサ１０に設けた分岐予測命令制御部の第２実施形態となる第２モード分岐予測命令制御部４２−２のブロック図であり、第１命令制御部６８、第２命令制御部７０及び第３命令制御部７２−２を備える。このうち第１命令制御部６８及び第２命令制御部７０は図７の第１モード分岐予測命令制御部４２−１と同じになるが、第３命令制御部７２−２にあっては、分岐ミスにより正しい方向の命令を発行している間に、それより古い分岐命令で分岐ミスが発生した場合の命令制御を処理することを特徴とする。
図１２は、図１１の第２モード分岐予測命令制御部４２−２による制御動作の説明図である。まず第１命令制御部６８は、図１２（Ａ）のように、分岐命令Ｂ２，Ｂ４，Ｂ８を含む命令にＩＤ＝０を付して発行しており、分岐命令Ｂ２，Ｂ４，Ｂ８については、それぞれ分岐予測により投機的に命令を実行させている。この状態でアウトオブオーダーによる分岐命令Ｂ４の実行に伴って分岐ミス８０が検出されたとする。この分岐ミス８０の検出に対し第２命令制御部７０は、図１２（Ｂ）のように、誤って発行してしまった命令５〜命令１１の後ろに続けて正しい方向の命令５０，５１を、別のＩＤ＝１を付けて発行する。この第１命令制御部６８及び第２命令制御部７０による制御動作は、図８（Ａ）（Ｂ）に既に説明した場合と同じである。次に図１２（Ｃ）のように、分岐ミス８０が検出された分岐命令Ｂ４より古い分岐命令Ｂ２のアウトオブオーダーによる実行に伴って分岐ミス８２が検知されたとすると、第３命令制御部７２−２は分岐ミス８２が検出された後に、図１２（Ｄ）のように古い分岐命令Ｂ２以前の命令１及びＢ２が全て完了するのを待って、後続する全ての命令３〜命令５１をキャンセルするキャンセル処理８６を行う。このキャンセル処理８６にあっては、ＩＤ＝０及び資源もキャンセルする。そして図１２（Ｅ）のように、誤って発行してしまった命令のキャンセル処理８６が済んでから、分岐ミス８２に対し正しい方向となる命令６０，６１，６２，…の発行を再開する。このような第２モード分岐予測命令制御部４２−２の制御動作にあっては、図２の従来例のように分岐命令ごとにＩＤを付ける必要がなく、分岐ミスを検出したときに、正しい方向に発生する命令について別のＩＤを付けるだけでよいことから、ＩＤは２つで済み、図６（Ａ）のようにキャンセル信号を発生するハードウェア量を必要最小限にすることができる。
図１３は、図１２に対応した命令制御のタイミングチャートである。図１３において、時刻ｔ１で分岐命令Ｂ４の実行に伴って分岐ミス８０が検出されると、時刻ｔ２から正しい方向の命令５０，５１を別のＩＤ＝１を付けて発行する。その後、時刻ｔ３で分岐命令Ｂ４より古い分岐命令Ｂ２の実行に伴う分岐ミス８２が検出されると、その後の時刻ｔ４における分岐命令Ｂ２の完了後のタイミングで、誤って発行した命令３〜命令５１の全てをキャンセルし、その後の時刻ｔ５で正しい方向の命令６０，６１，…の発行を開始している。
図１４は、図１１の第２モード分岐予測命令制御部４２−２による命令制御のフローチャートである。まずステップＳ１で同一ＩＤを付して命令を発行し、ステップＳ２で分岐予測を行っている分岐命令の実行に伴って分岐ミスが発生すると、ステップＳ３で別のＩＤを付して正しい方向の命令を発行する。その後、ステップＳ４で最初の分岐ミスを起こした分岐命令より古い分岐命令について分岐ミスが発生すると、ステップＳ５で古い分岐ミスの分岐命令以前が全て完了したか否かチェックする。古い分岐ミスの分岐命令以前の命令が全て完了すると、ステップＳ６で分岐ミスによって誤って発行してしまった全ての投機失敗命令及びリオーダバッファを含むその資源をキャンセルした後、ステップＳ７で正しい方向の命令発行を開始する。
図１５は、図４の分岐予測命令制御部４２における第３モード分岐予測命令制御部４２−３のブロック図であり、この実施形態にあっては、第１命令制御部６８、第２命令制御部７０、第３命令制御部７２−３及び第４命令制御部７４−３を備えている。このうち第１命令制御部６８及び第２命令制御部７０は、図７の第１モード分岐予測命令制御部４２−１と同じである。また第３命令制御部７２−３及び第４命令制御部７４−３は、図１１の第２モード分岐予測命令制御部４２−２の第３命令制御部７２−２と同様、最初の分岐ミスを検出した後に古い分岐命令について分岐ミスが検出された場合の命令制御を行うことを特徴とする。
図１６は、図１５の第３モード分岐予測命令制御部４２−３の制御動作の説明図である。図１６（Ａ）（Ｂ）及び（Ｃ）は、図１２の第２モード分岐予測命令制御部４２−２の場合と同じになる。即ち図１６（Ａ）で分岐命令Ｂ４の実行に伴い分岐ミス８０が検出されると、図１６（Ｂ）のように、誤って発行してしまった命令５〜命令１１の後ろに続いて正しい方向の命令５０，５１を別のＩＤ＝１を付けて発行する。その後、図１６（Ｃ）のように、分岐ミス８０を検知した分岐命令Ｂ４より古い分岐命令Ｂ２の実行に伴って分岐ミス８２が検出されたとすると、図１５の第３命令制御部７２−３により、図１６（Ｄ）のように最初の分岐ミス８０の検出により正しい方向と判断して発行した命令５０，５１をキャンセルするキャンセル処理８８を行った後に、図１６（Ｅ）のように分岐ミス８２の検出により判断した正しい方向の命令６０，６１の発行を開始する。続いて、図１５の第４命令制御部７４−３によって図１６（Ｅ）のように古い分岐命令列Ｂ２以前の命令列１，Ｂ２が全て完了するのを待って、分岐命令Ｂ２の分岐予測により誤って発行してしまった命令３〜命令１１をキャンセルするキャンセル処理９０を行ってから、正しい方向に発行した命令６０，６１に続く命令発行を再開する。もちろんキャンセル処理９０にあっては、命令のキャンセルと同時にＩＤ＝０及び資産をキャンセルする。この図１６における第３モード分岐予測命令制御部４２−３による制御動作を図１２の第２モード分岐予測命令制御部４２−２による制御動作と対比してみると、最初の分岐ミス８０に続いて古い分岐命令の分岐ミス８２が検出されるという同じ状況であるが、図１６の場合には、図１６（Ｄ）のように２回目の分岐ミス８２が検出された際に、最初に検知された分岐ミス８０により正しい方向に発行した命令５０，５１のキャンセル処理８８を行って、その後に図１６（Ｅ）のように分岐ミス８２に対し正しい方向の命令６０，６１を発行しており、図１２に比べると２回目の分岐ミス８２による正しい方向の命令発行のタイミングが速くなっており、その分、命令処理の性能を高めることができる。
図１７は図１６の命令制御に対応したタイミングチャートである。図１７にあっては、時刻ｔ１で分岐命令Ｂ４の実行に伴って分岐ミス８０が検出されると、その後の時刻ｔ２で正しい方向の命令５０，５１を別のＩＤ＝１を付して発行する。続いて時刻ｔ３で分岐命令Ｂ４より古い分岐命令Ｂ２の実行に伴い分岐ミス８２が検出されると、その後の時刻ｔ４で分岐ミス８０により正しい方向に発行した命令５０，５１をキャンセルした後に、時刻ｔ５で分岐ミス８２に対する正しい方向の命令６０，６１の発行を開始する。この図１７のタイミングチャートを図１３の同じく２つの分岐ミス８０，８２が検知された場合について対比して見ると、最終的に発行する正しい方向の命令６０，６１の発行タイミングが図１７の方が速くなっており、その分、命令の処理性能が高くなっている。
図１８は、図１５の第３モード分岐予測命令制御部４２−３の命令制御のフローチャートである。図１８において、まずステップＳ１で同−ＩＤを付して命令を発行し、ステップＳ２で発行した命令の中の分岐命令の実行に伴い分岐ミスの発生が判別されると、ステップＳ３で別のＩＤを付して正しい方向の命令を発行する。続いてステップＳ４で最初の分岐ミスを起こした分岐命令より古い分岐命令の実行で分岐ミスが発生するか否かチェックしており、古い分岐ミスが発生すると、ステップＳ５で最初の分岐ミスに対し正しい方向に発行した投機的失敗命令及びリオーダバッファを含む資源をキャンセルする。続いてステップＳ６で、古い分岐命令について発生した分岐ミスに対する正しい方向の命令をステップＳ３と同じＩＤを付して発行する。続いてステップＳ７で古い分岐ミス以前の命令が全て完了したか否か判別しており、全て完了すると、ステップＳ８で分岐ミスによって誤って発行してしまった投機的失敗命令及びその資源をキャンセルすることになる。
図１９は、図４のプロセッサ１０に設けている分岐予測命令制御部４２の第４実施形態となる第４モード分岐予測命令制御部４２−４のブロック図である。この実施形態にあっては、第１命令制御部６８、第２命令制御部７０及び第３命令制御部７２−４を備えており、第１命令制御部６８及び第２命令制御部７０は図７の第１実施形態と同じになる。これに対し第３命令制御部７２−４は、分岐予測による投機的命令実行で最初に分岐ミスが検出された後、分岐ミスに対し正しい方向に発行した命令列の中の新しい分岐命令について、２回目の分岐ミスが検出された場合の命令制御を行うことを特徴とする。
図２０は、図１９の第４モード分岐予測命令制御部４２−４の制御動作の説明図である。図２０（Ａ）は第１命令制御部６８による分岐命令Ｂ２，Ｂ４，Ｂ８を含む命令を発行して、分岐命令については分岐予測により投機的に命令を実行しており、分岐命令Ｂ４のアウトオーダーによる実行に伴い分岐ミス８０が検出されると、図２０（Ｂ）のように第２命令制御部７０によって誤って発行してしまった命令５〜命令１１の後ろに続いて、正しい方向の命令５０，５１を別のＩＤ＝１を付けて発行する。次に図２０（Ｃ）のように、ＩＤ＝１をつけて正しい方向に発行した命令５０〜５３に含まれる分岐命令Ｂ５２の実行に伴って分岐ミス９２が検出されると、第３命令制御部７２−４は図２０（Ｄ）のように分岐ミス９２が検出された分岐命令Ｂ５２以前の命令が全て完了するのを待って、後続する全ての命令５２，５３をキャンセルするキャンセル処理９４を行い、その後に図２０（Ｅ）のように分岐ミス９０による正しい方向の命令６０，６１，６２・・・の発行を開始する。
図２１は、図２０の命令制御に対応したタイミングチャートである。図２１において、時刻ｔ１で分岐命令Ｂ４の実行に伴い、分岐ミス８０が検出されると、時刻ｔ２でＩＤ＝１をつけて正しい方向の命令５０〜５３の発行を開始する。その後、時刻ｔ３で正しい方向に発行した命令の中の分岐命令５２Ｂの発行に伴い分岐ミス９０が検出されると、時刻ｔ４で分岐ミス９２が検出された分岐命令Ｂ５２以前の命令が全て完了するのを待ち、完了後の時刻ｔ５で分岐ミス９２により正しい方向となる命令６０，６１，６２の発行を開始する。
図２２は、図１９の第４モード分岐予測命令制御部４２−４の命令制御のフローチャートである。図２２において、まずステップＳ１で同一ＩＤを付して命令を発行し、発行した命令の中の分岐命令の実行に伴い、ステップＳ２で分岐ミス発生が検知されると、ステップＳ３で別のＩＤを付して正しい方向の命令を誤って発行した命令の後ろに続いて発行する。続いてステップＳ４でステップＳ２で検出した分岐ミスに対し、正しい方向に発行している命令内の分岐命令の実行に伴い、分岐ミスの発生が判別されると、ステップＳ５で新しい分岐ミスの分岐命令以前の命令が全て完了したか否かチェックしておいる。命令完了を判別するとステップＳ６で２回目の分岐ミスにより誤って発行してしまったことになる全ての投機失敗命令及び資源をキャンセルした後、ステップＳ７で正しい方向の命令発行を開始する。
図２３は、図４のプロセッサ１０に設けている分岐命令予測制御部４２の第５実施形態となる第５モード分岐予測命令制御部４２−５のブロック図である。この実施形態にあっては第１命令制御部６８、第２命令制御部７０、第３命令制御部７２−５及び第４命令制御部７４−５を備えており、第１命令制御部６８及び第２命令制御部７０は図７の第１実施形態と同じである。一方、第３命令制御部７２−５及び第４命令制御部７４−５は、図１５の第３モード分岐予測命令制御部４２−３の場合と同様、最初に分岐予測を検出した後、正しい方向に発行した命令内で２回目の分岐ミスが検出された場合の命令制御を行うことを特徴とする。
図２４は、図２３の第５モード分岐予測命令制御部４２−５の制御動作である。図２４（Ａ）は第１命令制御部６８で発行した分岐命令Ｂ２，Ｂ４，Ｂ８を含む命令において、分岐命令Ｂ４の実行に伴い分岐ミス８０が検出された場合であり、分岐ミス８０が検出されると図２４（Ｂ）のように誤って発行してしまった命令５〜命令１１に続いて、正しい方向の命令５０，５１を別のＩＤ＝１をつけて発行する。次に図２４（Ｃ）のように正しい方向に発行した命令５０〜５３の中の分岐命令Ｂ５２の実行に伴い分岐ミス９２が検出されたすると、図２３の第３命令制御部７２−５が分岐ミス９２の検出に基づき、分岐ミス９２に対する正しい方向の命令（命令６０，６１，６２・・・）の発行を抑止した状態で、分岐ミス８０が検出された古い方の分岐命令Ｂ４以前の命令１〜Ｂ４が全て完了するのを待ってをキャンセルするキャンセル処理９６を行ってから、図２４（Ｅ）のように分岐ミス９２による正しい方向の命令６０，６１，６２・・・の発行を開始する。続いて、図２３の第４命令制御部７４−５が図２４（Ｆ）のように新しい分岐命令Ｂ５２以前の命令が全て完了するのを待って、分岐ミス９２の検出により発行された命令５２，５３をキャンセルするキャンセル処理９７を行ってから、分岐ミス９２による正しい方向の命令６０，６１，６２に続く命令発行を再開する。この図２４の第５実施形態における命令制御と図２０の第４実施形態における同じ分岐ミス８０，９２が検出された際の命令制御を対比してみると、図２４の第５実施形態にあっては、図２４（Ｄ）で古い分岐ミス８０が検出された分岐命令Ｂ４以前の命令を全て完了した時点で分岐命令Ｂ４につき分岐予測で誤って発行してしまった命令５〜命令１１を削除するキャンセル処理９６を行った後に、図２４（Ｅ）のように分岐ミス９２に対する正しい方向の命令６０，６１，６２を発行しており、正しい方向の命令６０，６１，６２の発行タイミングが図２０に比べ早まっており、従って、図２４の第５実施形態の方が命令の処理性能を向上することができる。尚、図２４の命令制御にあっては、２つのＩＤを使用する場合を例にとっているが、３つのＩＤを使用可能とした場合には、ＩＤが枯渇するまで待ち合わせをせずに命令発行を行い、ＩＤが枯渇した段階でＩＤ開放を待つようにしても良い。即ち、図２４（Ｄ）で分岐ミス９２による正しい方向の命令発行を抑止せず、段階でＩＤ＝２を付けて正しい方向の命令６０，６１の発行を開始する。
図２５は、図２４の命令制御に対応したタイミングチャートである。図２５において、時刻ｔ１で分岐命令Ｂ４のアウトオブオーダーによる実行に伴い分岐ミス８０が検出されると、時刻ｔ２で正しい方向の命令５０〜５３の発行を別のＩＤ＝１をつけて開始する。その後、正しい方向に発行した命令５０〜５３の中の分岐命令Ｂ５２の実行に伴い分岐ミス９２が検出されると、最初の分岐ミス８０が検出された分岐命令Ｂ４以前の命令が全てが完了した後の時刻ｔ４で、分岐命令Ｂ４の分岐予測で誤って発行してしまった命令５〜命令１１をキャンセルする。次に時刻ｔ５で分岐ミス９２に対する正しい方向の命令６０，６１，６２の発行を既に解放されたＩＤ＝０を付けて開始する。その後、時刻ｔ６で分岐ミス９２に対応した分岐命令Ｂ５２以前の命令が全て完了すると、分岐命令Ｂ５２の分岐予測で誤って発行してしまった命令５２，５３をキャンセルする。この図２５の第５実施形態のタイミングチャートを図２１の第４実施形態のタイミングチャートと参照してみると、分岐ミス９２に対する正しい方向の命令６０，６１，６２の発行タイミングが図２５の第５実施形態の方が早くなっており、その分、命令の処理性能を向上することができる。
図２６は、図２３の第５分岐予測命令制御部４２−５の命令制御のフローチャートである。図２６において、ステップＳ１で同一ＩＤを付して命令を発行し、ステップＳ２で分岐命令の実行に伴い分岐ミスの発生が判別されると、ステップＳ３で別のＩＤを付して正しい方向の命令を誤って発行してしまった命令の後ろに続いて発行する。このステップＳ１〜Ｓ３の処理が図２３の第１命令制御部６８及び第２命令制御部７０の処理である。次に第３命令制御部７２−５によりステップＳ４で正しい方向に発行している命令内の分岐命令の実行に伴い、２回目の分岐ミスの発生が判別されると、ステップＳ５に進み、正しい方向の命令の発行を抑止した状態で、古い方の分岐命令以前の命令が全て完了するのをステップＳ５で判別すると、ステップＳ６に進んで古い分岐命令によって誤って発行してしまった命令をキャンセルした後に抑止を解除して新しい分岐ミスに対する正しい方向の命令発行を開始する。続いて第４命令制御部７４−５により新しい分岐ミスの以前の命令が完了したか否かステップＳ７で判別し、命令の完了を判別するとステップＳ８で新しい分岐ミスの検出前に誤って発行されてしまった命令をステップＳ８でキャンセルしてから、ステップＳ９で正しい方向の命令発行を開始する。
図２７は、図４のプロセッサ１０の分岐予測命令制御部４２のフローチャートであり、図７〜図２５で説明した第１モード〜第５モード分岐予測命令制御を全て一体化した分岐予測命令制御のフローチャートである。図２７において、ステップＳ１〜Ｓ３は第１命令制御部６８及び第２命令制御部７０の処理であり、ステップＳ１で同一ＩＤを付した命令を発行中にステップＳ２で分岐命令の実行に伴い分岐ミスの発生が判別されると、ステップＳ３で誤って発行してしまった命令の後ろに別のＩＤを付して正しい方向の命令を発行する。続いてステップＳ４で分岐ミス以前の命令全て完了したか否かをチェックしており、分岐ミス以前の命令が全て完了するとステップＳ７に進み第１モードの分岐予測命令制御を実行する。このステップＳ７の第１モード分岐予測命令制御の処理内容は図３０のステップＳ５，Ｓ６の処理となる。ステップＳ４で分岐ミス以前の命令が全て完了していない場合には、ステップＳ５で２回目の分岐ミスの発生をチェックしており、２回目の分岐ミスの発生を判別すると、ステップＳ６で２回目の分岐ミスが最初の分岐ミスより古い分岐ミスか否か判別する。古い分岐ミスであった場合にはステップＳ８に進み第２モードあるいは第３モードの分岐予測命令制御を行う。ステップＳ８で行う第２モードの分岐予測命令制御は図３３のステップＳ５〜Ｓ７の処理である。またステップＳ８の第３モードの分岐予測命令制御は図３６のステップＳ５〜Ｓ８の処理である。一方、ステップＳ６で最初の分岐ミスより古い分岐ミスで無かった場合には、ステップＳ２の分岐ミスにより正しい方向に発行している命令の中の分岐命令の実行に伴う新しい分岐ミスであることから、ステップＳ９に進み第４モードあるいは第５モードの分岐予測命令制御を行う。このステップＳ９の第４モードの分岐予測命令制御は図３９のステップＳ５〜Ｓ７の処理となる。また図２７のステップＳ９の第５モードの分岐予測命令制御は図２６のステップＳ５〜Ｓ９の処理となる。
このように本発明は第１モード〜第５モードのいずれかのモードの分岐予測命令制御を行っても良いし、第１モードに対し、第２モードまたは第３モードのいずれか一方と、第４モードまたは第５モードのいずれか一方を加えた組み合わせの制御としても良い。
次に図４のプロセッサ１０に設けている例外発生命令制御部４４について説明する。例外発生命令制御部４４の実施形態としては、図２８の第１モード例外発生命令制御部４４−１、図３１の第２モード例外発生制御部４４−２、図３４の第３モード例外発生命令制御部４４−３、図３７の第４モード例外発生命令制御部４４−４及び図４０の第５モード例外発生命令制御部４４−５がある。これら第１モード、第２モード、第３モード、第４モード及び第５モードの各例外発生命令制御部４４−１〜４４−５は、既に説明した分岐予測命令制御部４２の具体的な実施形態である第１モード、第２モード、第３モード、第４モード及び第５モード分岐予測命令制御部４２−１〜４２−５のそれぞれの処理における分岐ミスの検出を例外発生に置き換えたものに相当し、分岐ミスの場合には分岐ミスが検出された分岐命令に続く投機失敗命令をキャンセルしているが、例外発生の場合には例外発生命令自身を含めて投機失敗命令をキャンセルする点が相違する。
そこで例外発生について簡単に説明すると次のようになる。図２８の第１モード例外発生命令制御部４４−１は、第１命令制御部９８、第２命令制御部１００及び第３命令制御部１０２−１を持つ。
図２９は、図２８の第１モード例外発生制御部４４−１の命令制御動作であり、図２９（Ａ）のＩＤ＝０を付して発行していた命令１〜１０について、命令４で例外１０５が発生すると、例外発生なしとして発行してしまった命令５〜命令１１の後ろに続けて別のＩＤ＝１を付して例外処理ルーチンの命令５０，５１を発行する。次に図２９（Ｃ）のように、例外発生命令４より前の１〜３の全てが完了すると、投機失敗命令５〜命令１１をキャンセルするキャンセル処理１０８を行った後、例外処理ルーチンの命令発行を再開する。
図３０は、第１モード例外発生命令制御のフローチャートである。ステップＳ１で同一のＩＤを付して命令を発行しており、ステップＳ２である命令の実行により例外発生が判別されると、ステップＳ３で投機的失敗命令の後ろに続いて別のＩＤを付して例外処理ルーチンの命令を発行する。次にステップＳ４で例外発生より前の命令が全て完了したことを判別すると、ステップＳ５で例外発生無しとして発行してしまった投機失敗命令及びその資源をキャンセルした後、ステップＳ６で例外処理ルーチンの命令発行を再開する。
図３１は、第２モード例外発生命令制御部４４−２のブロック図であり、第１命令制御部９８、第２命令制御部１００及び第３命令制御部１０２−２を備える。
図３２は、第２モード例外発生命令制御部４４−２の制御動作である。まず図３２（Ａ）でＩＤ＝０を付して発行した命令１〜命令１１の中の命令４の実行により、例外１０６が発生したとすると、図３２（Ｂ）のように例外発生なしとして発行していた投機的失敗命令５〜命令１１の後ろに続いて別のＩＤ＝１を付して例外処理ルーチンの命令５０，５１を発行する。次に図３２（Ｃ）で例外１０６が発生した命令４より古い命令２の実行に伴い例外１１０が発生したとすると、図３２（Ｄ）のように古い命令２の例外１１０より前の命令１が完了した時点で、例外１１０が発生した命令２を含む後続する命令２〜命令５１を全てキャンセルするキャンセル処理１１２を行った後、図３２（Ｅ）のように例外処理ルーチンの命令６０，６１，６２・・・の発行を開始する。
図３３は、第２モード例外発生命令制御のフローチャートである。図３３において、ステップＳ１で同一のＩＤを付して命令を発行し、ステップＳ２である命令の実行に伴い例外が発生がすると、ステップＳ３で例外なしとして誤って発行してしまった命令の後ろに続いて、例外処理ルーチンの命令を別のＩＤを付して発行する。次にステップＳ４で最初の例外発生より古い命令について例外が発生したか否かチェックしており、古い命令について例外が発生すると、ステップＳ５古い例外発生の命令より前の命令が全て完了したか否かを判別し、完了したならばステップＳ６で例外発生となった古い命令を含む全ての投機失敗命令及びその資源をキャンセルした後、ステップＳ７で例外処理ルーチンの命令発行を開始する。
図３４は、第３モード例外発生命令制御部４４−３のブロック図であり、第１命令制御部９８、第２命令制御部１００、第３命令制御部１０２−３及び第４命令制御部１０４−３備える。
図３５は、図３４の第３モード例外発生命令制御部４４−３の命令制御の説明図である。図３５（Ａ）のようにＩＤ＝０を付して発行した命令１〜命令１１の中の命令４の実行に伴い例外１０６が発生すると、図３５（Ｂ）のように命令４に対し例外発生なしとして発行した投機的失敗命令５〜命令１１の後ろに続いて例外処理ルーチンの命令５０，５１を別のＩＤ＝１を付して発行する。続いて図３５（Ｃ）のように例外１０６が発生した命令４より古い命令２の実行に伴い、例外１１０が発生したとすると、図３５（Ｄ）のように例外１０６の発生に対する命令処理ルーチンで発行した命令５０，５１をキャンセルするキャンセル処理１１４を行った後、図３５（Ｅ）で例外１１０の例外処理ルーチンの命令６０，６１を発行する。そして図３５（Ｆ）で古い例外１１０の命令２より前の命令１が完了した後に、例外１１０を発生した命令２を含む投機的失敗命令３〜命令１１をキャンセルするキャンセル処理１１６を行った後、例外１１０の例外処理ルーチンによる命令６０，６１に続く命令発行を再開する。
図３６は、第３モード例外発生命令制御のフローチャートである。図３６において、ステップＳ１で同一のＩＤを付して命令を発行し、この命令の中でステップＳ２で例外が発生がすると、ステップＳ３で例外発生命令に続く例外発生なしとして誤って発行してしまった投機的失敗命令の後ろにＩＤを付して例外処理ルーチンの命令を発行する。次にステップＳ４で最初の例外発生より古い命令で例外が発生したか否か判別しており、古い例外が発生あると、ステップＳ５で最初の例外発生に対する例外処理ルーチンで発行した投機失敗命令及びその資源をキャンセルした後、ステップＳ６で古い例外発生に対する例外処理ルーチンの命令をステップＳ３と同じＩＤを付して発行する。続いてステップＳ７で古い例外発生より前の命令全てが完了したことを判別すると、ステップＳ８で古い例外発生の命令を含め、例外無しとして発行してしまった投機的失敗命令及び資源をキャンセルした後、例外処理ルーチンの命令発行を再開する。
図３７は第４モード例外発生命令制御部４４−４のブロック図であり、第１命令制御部９８、第２命令制御部１００及び第３命令制御部１０２−４を備える。
図３８は、第４モード例外発生命令制御部４４−４の命令制御の説明図である。図３８において、まず図３８（Ａ）のように命令１〜命令１１を発行した後に、命令４の実行に伴い例外１０６が発生すると、図３８（Ｂ）のように例外発生なしとして発行してしまった投機的失敗命令５〜命令１１の後ろに例外１０６の例外処理ルーチンの命令５０，５１を別のＩＤ＝１を付して発行する。続いて図３８（Ｃ）のように例外１０６に対する例外処理ルーチンで発行した命令５０，５１，５２，５３の内、命令５１の実行に伴い、２回目の例外１１６が発生したとすると、図３８（Ｄ）のように例外１１６が発生した命令５０及び命令５１を例外発生無しとして発行してしまった投機的失敗命令５２，５３をキャンセルするキャンセル処理１１８を行った後、図３８（Ｅ）のように例外１１６による例外処理ルーチンの命令６０，６１，６２・・・の発行を再開する。
図３９は、第４モード例外発生命令制御のフローチャートである。図３９において、ステップＳ１で同一のＩＤを付して命令を発行し、ステップＳ２である命令の実行に伴い例外が発生が判別されると、ステップＳ３で例外が発生した命令について例外発生なしとして誤って発行してしまった投機的失敗命令の後ろに別のＩＤを付して例外処理ルーチンの命令を発行する。続いてステップＳ４で例外処理ルーチンにより発行している命令の中のある命令の実行に伴い、２回目の命令が発生することが判別されると、ステップＳ５で新しい例外発生より前の命令が全て完了したことを判別した場合、ステップＳ６に進み新しい例外発生となった命令を含むこれに後続する全ての投機的失敗命令及びその資源をキャンセルした後、ステップＳ７で新しい例外発生に伴う例外処理ルーチンの命令発行を再開する。
図４０は、第５モード例外発生命令制御部４４−５のブロック図である。第１命令制御部９８、第２命令制御部１００、第３命令制御部１０２−５及び第４命令制御部１０４−５を備える。
図４１は、第５モード例外発生命令制御部４４−５の命令制御の説明図である。図４１（Ａ）のようにＩＤ＝０を付して発行した命令１〜命令１１の中の命令４の実行に伴い例外１０６が発生すると、図４１（Ｂ）のように、例外１０６の発生により命令４に続いて例外発生なとして発行してしまった投機的失敗命令５〜命令１１の後ろに続いて別のＩＤ＝１を付して例外処理ルーチンの命令５０，５１を発行する。続いて図４１（Ｃ）のように例外処理ルーチンで発行している命令５０〜５４の中の命令５２の実行に伴い、２回目の例外１１６が発生したとすると、図４１（Ｄ）のように古い方の例外１０６が発生した命令４より前の命令１〜３の全ての実行完了を待って例外発生命令４に続く投機的失敗命令５〜１１をキャンセルするキャンセル処理１２０を行う。続いて図４１（Ｅ）のように２回目の新しい例外１１６によって投機的失敗命令となった命令５３，５４の後ろに続いて、キャンセル処理１２０で解放されたＩＤ＝０を付して例外１１６の例外処理ルーチンの命令６０，６１，６２・・・の発行を開始する。最終的に図４１（Ｆ）のように新しい例外１１６が発生した命令５２より前の全ての命令５０，５１の完了を待って、例外１１６が発生した命令５２及びこれに続く投機的失敗命令５３，５４をキャンセルするキャンセル処理１２２を行った後、例外処理ルーチンとなる命令６０，６１，６２・・・に続く命令発行を再開する。尚、図４１の命令制御にあっては、２つのＩＤを使用する場合を例にとっているが、３つのＩＤを使用可能とした場合には、ＩＤが枯渇するまで待ち合わせをせずに命令発行を行い、ＩＤが枯渇した段階でＩＤ開放を待つようにしても良い。即ち、図４１（Ｄ）で例外１１６の発生による正しい方向の命令発行を抑止せず、この段階でＩＤ＝２を付けて正しい方向の命令６０，６１，６２の発行を開始する。
図４２は、第５モード例外発生命令制御のフローチャートである。図４２において、ステップＳ１で同一のＩＤを付して命令を発行し、ステップＳ２でその中である命令の実行に伴い例外が発生すると、ステップＳ３で例外命令に続く投機的失敗命令の後ろに続いて別のＩＤを付して例外処理ルーチンの命令を発行する。次にステップＳ４で例外処理ルーチンにより発行している命令内である命令の実行に伴い例外が発生すると、ステップＳ５で例外処理ルーチンによる命令発行を抑止した状態で古い例外発生となった命令より前の命令が全て完了したか否か判別する。この命令完了を判別すると、ステップＳ６で例外発生命令及びこれに続く投機的失敗命令及びその資源をキャンセルし、新しい例外に発生に伴う例外処理ルーチンの命令発行を開始する。続いてステップＳ７で新しい例外発生となった命令より前の命令が全て完了したかをチェックしており、命令完了を判別するとステップＳ８で新しい例外発生を起こした命令を含むこれに続く投機失敗命令及びその資源をキャンセルした後、ステップＳ９で新しい例外発生に伴う例外処理ルーチンの命令発行を再開する。
図４３は、図４のプロセッサ１０に設けている例外発生命令制御部４４について、すでに説明した第１モード、第２モード、第３モード、第４モード及び第５モードの例外発生命令制御を全て一体化した例外発生命令制御のフローチャートである。この図４３のフローチャートにあっては、ステップＳ１で同一のＩＤを付して命令を発行し、ステップＳ２である命令の実行により例外発生を判別すると、ステップＳ３で別のＩＤを付して例外処理ルーチンの命令を投機的失敗命令の後ろに続いて発行する。続いてステップＳ４で例外発生より前の命令が全て完了したか否かチェックし、完了を判別するとステップＳ７で第１モードの例外発生命令制御を実行する。この第１モードの例外発生命令制御は図３０のステップＳ５，Ｓ６の処理となる。ステップＳ４で例外発生より前の命令が全て完了していない場合には、ステップＳ５で２回目の例外発生をチェックしている。２回目の例外発生があるとステップＳ６に進み、最初の例外発生より古い例外発生か否かチェックする。古い例外発生であればステップＳ８に進み、第２または第３モードの例外発生命令制御を行う。この場合の第２モードの例外発生命令制御は図３３のステップＳ５〜Ｓ７の処理となる。また第３モードの例外発生命令制御は図３６のステップＳ５〜Ｓ８の処理となる。更にステップＳ６で最初の例外発生より新しい例外発生であった場合にはステップＳ９に進み、第４または第５モードの例外発生命令制御を行う。この第４モードの例外発生命令制御は図３９のステップＳ５〜Ｓ７の処理となる。また第５モードの例外発生命令制御は図４２におけるステップＳ５〜Ｓ９の処理となる。
尚、上記の実施形態は投機的に実行される命令として分岐命令及び命令実行に伴う例外発生を例にとるものであったが、これ以外の適宜の投機的命令について本発明を適用することができる。
また本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。更に本発明は上記の実施形態に示した数値による限定は受けない。
【産業上の利用可能性】  以上説明してきたように本発明によれば分岐予測に基づく投機的な命令実行の際に、分岐ミスが検出された場合に誤って発行してしまった投機的失敗命令のキャンセルを行って正しい方向の命令発行を再開する処理を高速且つ少ないハードウェア資源上で実現することができ、特にプロセッサの動作周波数が高周波化した場合の性能向上に大きく寄与することができる。
同様に命令の例外発生の際にも、例外発生なしとして発行してしまった投機的失敗命令のキャンセルと、例外処理ルーチンによる命令発行を同様に高速且つ少ないハードウェア量で実現することができ、この場合にも動作周波数が高周波化されたプロセッサにおける性能向上に大きく寄与することができる。
【図１】
2004031944.tif 000003
【図２】
2004031944.tif 000004
【図３】
2004031944.tif 000005
【図４】
2004031944.tif 000006
【図５】
2004031944.tif 000007
【図６】
2004031944.tif 000008
【図７】
2004031944.tif 000009
【図８】
2004031944.tif 000010
【図９】
2004031944.tif 000011
【図１０】
2004031944.tif 000012
【図１１】
2004031944.tif 000013
【図１２】
2004031944.tif 000014
【図１３】
2004031944.tif 000015
【図１４】
2004031944.tif 000016
【図１５】
2004031944.tif 000017
【図１６】
2004031944.tif 000018
【図１７】
2004031944.tif 000019
【図１８】
2004031944.tif 000020
【図１９】
2004031944.tif 000021
【図２０】
2004031944.tif 000022
【図２１】
2004031944.tif 000023
【図２２】
2004031944.tif 000024
【図２３】
2004031944.tif 000025
【図２４】
2004031944.tif 000026
【図２５】
2004031944.tif 000027
【図２６】
2004031944.tif 000028
【図２７】
2004031944.tif 000029
【図２８】
2004031944.tif 000030
【図２９】
2004031944.tif 000031
【図３０】
2004031944.tif 000032
【図３１】
2004031944.tif 000033
【図３２】
2004031944.tif 000034
【図３３】
2004031944.tif 000035
【図３４】
2004031944.tif 000036
【図３５】
2004031944.tif 000037
【図３６】
2004031944.tif 000038
【図３７】
2004031944.tif 000039
【図３８】
2004031944.tif 000040
【図３９】
2004031944.tif 000041
【図４０】
2004031944.tif 000042
【図４１】
2004031944.tif 000043
【図４２】
2004031944.tif 000044
【図４３】
2004031944.tif 000045
【国際調査報告】
2004031944.tif 000046
2004031944.tif 000047
2004031944.tif 000048
2004031944.tif 000049