(57)【特許請求の範囲】
【請求項１】
下記を具備する方法：
第１の実行パイプラインおよび第２の実行パイプラインを含む、複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および前記第１の命令に依存する第２の命令を含む命令のパケットを受信することと、ここにおいて前記命令のパケットは、前記第２の命令が、別のパケットからの以前に実行された命令に関連づけられる結果の代わりに、前記第１の命令に関連づけられる第１の結果を使用して実行されるべきである表示を含む、
前記第１の命令の少なくとも一部および前記第２の命令の少なくとも一部を並行に実行することと、
前記第１の結果に基づいて、前記第２の実行パイプラインを用いて前記第２の命令の少なくとも一部を実行したことの第２の結果を選択的にコミットすること。
【請求項２】
請求項１に記載の方法、ここにおいて前記命令のパケットは、超長命令語（ＶＬＩＷ）の命令のパケットであり、前記第１の命令は、比較命令であり、前記第２の命令は、ロード命令、ストア命令、算術命令、またはそれらの組み合わせである。
【請求項３】
請求項１に記載の方法、ここにおいて前記命令のパケットは、同じ宛先レジスタをターゲットとする少なくとも２つの条件付きの命令を含む。
【請求項４】
請求項３に記載の方法、プレディケートレジスタに、前記第１の結果に関連するデータを書き込むことをさらに具備し、ここにおいて前記第２の命令は、前記プレディケートレジスタから前記第１の結果に関連する前記データを受信し、前記第１の結果に関連する前記データは、前記プレディケートレジスタに格納された以前の結果を置き換える。
【請求項５】
請求項１に記載の方法、ここにおいて前記第２の結果を選択的にコミットすることは下記を具備する：
メモリを格納するバッファに前記第２の結果を書き込むことと、
前記第１の結果を利用できるときは、レジスタに対する書き戻しのオペレーションを選択的にキャンセルすること。
【請求項６】
請求項１に記載の方法、ここにおいて前記第２の命令は、条件付きのフローの変更の命令を含む、前記方法はさらに下記を具備する：
前記第１の実行パイプラインおよび前記第２の実行パイプラインのうちの１つの復号のステージにおいて、前記第２の命令および前記第１の命令の一部を復号することと、
前記条件付きのフローの変更の命令がコミットされる見込みか否かを指示する前記復号された一部に基づいて静的な予測を行うこと。
【請求項７】
前記静的な予測が、前記条件付きのフローの変更の命令がコミットされる見込みであることを指示するときは、フローの変更に関連する複数の命令を読み出すために、命令の取り出しパイプラインを操縦することをさらに具備する、請求項６に記載の方法。
【請求項８】
前記第２の結果をコミットするかどうかを決定した後に、前記第２の結果を宛先レジスタに対して条件付き書き戻しすることをさらに具備する、請求項１に記載の方法。
【請求項９】
請求項１に記載の方法、ここにおいて前記第１の命令は比較命令を具備し、前記第２の命令はフローの変更の命令を具備する、前記方法はさらに下記を具備する：
前記第１の結果に基づいて、プレディケートビットをプレディケートレジスタに設定することと、
前記フローの変更の命令を実行した後に、前記プレディケートビットの値に基づいて、前記フローの変更の命令よって指示された前記フローの動作の変更を行うために、選択的にコミットすること。
【請求項１０】
第２のパイプラインが前記第１の実行パイプラインによって使用されるべき前記第１の結果を有するかどうかを決定するために、前記命令のパケットの一部を復号することをさらに備える、請求項１に記載の方法。
【請求項１１】
前記第２の実行パイプラインにおいて、前記第１の実行パイプラインが前記第２の命令に依存する前記第１の結果を有すると決定することをさらに備える、請求項１に記載の方法。
【請求項１２】
前記第１の命令の一部に関連づけられる値を決定するために、前記第２の実行パイプラインにおいて、前記第１の命令の一部を復号することをさらに備える、請求項１に記載の方法。
【請求項１３】
前記第１の命令および前記第２の命令の実行の前に、前記命令のパケットから前記第１の命令および前記第２の命令を並行に抽出することをさらに備える、請求項１に記載の方法。
【請求項１４】
下記を具備する方法：
複数の並列実行のパイプラインを有するプロセッサにおいて、比較命令および第２の命令を含むパケットを受信すること、前記第２の命令は前記比較命令に依存している、ここにおいて前記パケットは、前記第２の命令が、第２のパケットからの以前に実行された命令に関連づけられる結果の代わりに、前記比較命令に関連づけられる第１の結果を使用して実行されるべきである表示を含む、
前記第２の命令がコミットされるかどうかに関連する予測を決定するために前記第２の命令および前記比較命令を復号すること、
前記比較命令および前記第２の命令を並行に実行することと、
前記第２の命令におよび前記予測に一部基づいて、取り出しパイプラインを選択的に操縦すること。
【請求項１５】
請求項１４に記載の方法、ここにおいて前記取り出しパイプラインを選択的に操縦することは、前記第２の命令がフローの変更の命令であるとき、および前記フローの変更の命令がコミットされる見込みであると前記予測が指示するときに、予測されるフローの変更に基づいてメモリからの複数の命令の読み出しを開始することを具備する。
【請求項１６】
請求項１４に記載の方法、ここにおいて前記取り出しパイプラインを選択的に操縦することは、前記予測がフローの変更を指示するときは、前記予測に基づいてメモリからフローの変更に関連する複数の命令の読み出しを開始することを、しかし前記予測が前記フローの変更を指示しないときは、読み出しを開始しないことを、具備する。
【請求項１７】
前記予測が誤りであると決定された後に、前記取り出しパイプラインから前記読み出された複数の命令を削除することをさらに具備する、請求項１５に記載の方法。
【請求項１８】
第１の実行パイプラインに関連づけられる前記比較命令に関連する少なくとも第１の結果に基づいて、第２の実行パイプラインを用いて実行される前記第２の命令の第２の結果を選択的にコミットすることをさらに具備する、請求項１４に記載の方法。
【請求項１９】
請求項１８に記載の方法、ここにおいて前記第１の結果は、前記第２の結果がコミットされる前に、前記第２の命令に対して利用できる。
【請求項２０】
前記第２の結果がコミットされないときに、前記第２の命令の実行により引き起こされる複数の例外をキャンセルすることをさらに具備する、請求項１９に記載の方法。
【請求項２１】
さらに下記を具備する、請求項１４に記載の方法：
前記比較命令および前記第２の命令のうちの１つは、プレディケートレジスタの中のビットに基づいた有効なプレディケートを有するかどうかを決定すること、および
前記有効なプレディケートを有する前記命令に基づいて、前記比較命令の第１の結果および前記第２の命令の第２の結果のうちの、両方ではなく、１つをコミットすること。
【請求項２２】
請求項１４に記載の方法、ここにおいて前記パケットに含まれる表示は、前記比較命令に関連づけられる前記第１の結果が前記第２の命令によって使用されるべきであることを指示する前記第２の命令におけるビットの値に基づく。
【請求項２３】
請求項１４に記載の方法、ここにおいて前記パケットに含まれる表示は、前記第２の命令におけるビットフラグである。
【請求項２４】
下記を具備するプロセッサ：
複数の命令を並行して実行するように適応されたマルチプルな複数の実行パイプライン、前記マルチプルな複数の実行パイプラインは、第１の結果を決定する命令のパケットの第１の命令を実行するための第１の実行パイプラインと、前記第１の命令から決定された前記第１の結果に依存する前記命令のパケットの第２の命令を実行するための第２の実行パイプラインとを含む、前記第１の命令および前記第２の命令は同時に実行される、前記命令のパケットは、前記第２の命令が、別のパケットからの以前に実行された命令に関連づけられる結果の代わりに、前記第１の命令から決定される前記第１の結果を使用して実行されるべきである表示を含む、および
前記第１の命令の実行から決定される、前記第１の実行パイプラインからの前記第１の結果を、前記第２の命令による使用のために前記第２の実行パイプラインへ提供するように適応された論理回路。
【請求項２５】
請求項２４に記載のプロセッサ、ここにおいて前記論理回路は、前記第２の実行パイプラインと関連づけられる第２の結果がコミットされる前に、前記第１の結果を前記第２の実行パイプラインへ提供する。
【請求項２６】
前記マルチプルな複数の実行パイプラインにアクセス可能であり、ならびに前記第１の結果に関連するデータを格納するように適応されたプレディケートレジスタをさらに具備する、請求項２４に記載のプロセッサ。
【請求項２７】
前記第１の命令および前記第２の命令を含む複数の命令の前記パケットを受信するシーケンサをさらに具備し、前記シーケンサは、前記第１の命令を前記第１の実行パイプラインに提供し、前記第２の命令を前記第２の実行パイプラインに提供する、請求項２４に記載のプロセッサ。
【請求項２８】
請求項２７に記載のプロセッサ、ここにおいて前記第１の命令は比較命令を具備する、ここにおいて前記第２の命令は前記比較命令の実行の結果に依存する、およびここにおいて前記第２の命令は算術命令、論理演算命令、ロード命令、ストア命令、分岐命令、およびジャンプ命令のうちの少なくとも１つを具備する。
【請求項２９】
前記マルチプルな複数の実行パイプラインに結合され、前記第２の命令の実行による第２の結果がコミットされる前に、前記第１の命令の実行による前記第１の結果を取得するのに十分な遅延を提供するように構成されたメモリバッファをさらに具備する、請求項２４に記載のプロセッサ。
【請求項３０】
下記を具備するプロセッサ：
第１の実行パイプラインおよび第２の実行パイプラインを含む複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および前記第１の命令に依存する第２の命令を含む命令のパケットを受信するための手段と、ここにおいて前記命令のパケットは、前記第２の命令が、別のパケットからの以前に実行された命令に関連づけられる結果の代わりに、前記第１の命令に関連づけられる第１の結果を使用して実行されるべきである表示を含む、
前記第１の命令の少なくとも一部および前記第２の命令の少なくとも一部を並行に実行するための手段と、
前記第１の実行パイプラインを用いて前記第１の命令の実行に関連する前記第１の結果に基づいて、前記第２の実行パイプラインを用いて前記第２の命令の少なくとも一部の実行の第２の結果を選択的にコミットするための手段。
【請求項３１】
下記をさらに具備する、請求項３０に記載のプロセッサ：
メモリを格納するバッファに前記第２の結果を書き込むための手段と、
前記第１の結果が利用できるときは、レジスタに対する書き戻しのオペレーションを選択的にキャンセルするための手段。
【請求項３２】
請求項３０に記載のプロセッサ、ここにおいて前記命令のパケットは、条件を計算する命令を含み、前記条件は、前記第２の命令の実行中に計算され、前記計算された条件は、前記第２の命令の実行中に使用される。
【請求項３３】
プロセッサにオペレーションを実行させるためのプログラム、ここにおいて、前記プロセッサは、第１の実行パイプラインおよび第２の実行パイプラインを含む複数の並列実行のパイプラインを有し、前記オペレーションは下記を具備する：
第１の命令および前記第１の命令に依存する第２の命令を含む命令のパケットを受信すること、ここにおいて前記命令のパケットは、前記第２の命令が、別のパケットからの以前に実行された命令に関連づけられる結果の代わりに、前記第１の命令に関連づけられる第１の結果を使用して実行されるべきである表示を含む、
前記第１の命令の少なくとも一部および前記第２の命令の少なくとも一部を並行に実行すること、
前記第１の結果に基づいて、前記第２の実行パイプラインを用いて前記第２の命令の少なくとも一部を実行したことの第２の結果を選択的にコミットすること。
【請求項３４】
請求項３３に記載のプログラム、ここにおいて前記命令のパケットは、超長命令語（ＶＬＩＷ）の命令のパケットであり、前記第１の命令は、比較命令であり、前記第２の命令は、ロード命令、ストア命令、算術命令、またはそれらの組み合わせである。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的に、実行された命令の結果を選択的にコミットするシステムおよび方法に関連する。
【背景技術】
【０００２】
多くのアルゴリズムは、ある条件に基づいたオペレーション（operation）を選択的に行なう。ソフトウェアコードにおいて、そのような選択的なパフォーマンスは、比較オペレーション（compare operation）の複数の結果に基づいて前記コードの複数の部分を任意に読み飛ばす分岐命令によって後続される比較命令を使用して成し遂げられることができる。幾つかのアーキテクチャー（architectures）は、前記オペレーションそれ自身が条件付きで実行することを可能にでき、それによって分岐オペレーションを除去している。しかしながら、前記特定の条件の結果に対しては、なお依存性がある。
【０００３】
典型的に、超長命令語（Very Long Instruction Word）（ＶＬＩＷ）プロセッサのアーキテクチャーにおいて、比較オペレーションは行なわれることができ、そしてその比較命令からの結果は、ある正の数（some positive number）の複数のプロセッササイクル（processor cycle）の後に利用可能である。複数のコンピュータプログラムにおいて、比較オペレーションは、比較オペレーションの結果が分岐オペレーションを実行するかどうか決定するために使用されるところの分岐オペレーションによってしばしば後続される。典型的に、コンパイラは、そのような複数の依存性によるパイプラインの複数の機能停止（stalls）を減らす複数の命令を編成（organize）するために使用される。
【０００４】
非ＶＬＩＷ（non-VLIW）プロセッサのアーキテクチャーでは、複数の分岐の前記依存性を投機的（speculatively）に除去するために、分岐予測の複数の技術を利用することが一般的である。しかしながら、そのような分岐予測は、プロセッサのコア（core）の電力消費量を増加させ、および複雑性を増す。ＶＬＩＷプロセッサの複数のアーキテクチャーがソフトウェアによってグループ化される多くのフライト中（in-flight）の命令を有するので、分岐予測は、ＶＬＩＷプロセッサのアーキテクチャーにおいて、典型的に制限されるかあるいは存在しない。それにも拘わらず、比較および分岐オペレーション間の複数の依存性は、なお存在する。従って、命令の複数の依存性に起因するパイプラインの複数の機能停止を減らすために、改良されたプロセッサのアーキテクチャーの必要性がある。
【発明の概要】
【０００５】
特定の態様では、第１の実行パイプラインおよび第２の実行パイプラインを含む、複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および第１の命令に依存する第２の命令を含む、命令のパケットを受信することを含む方法が開示される。さらにこの方法は、第１の命令の少なくとも一部および第２の命令の少なくとも一部を並行に実行することを含む。この方法はまた、第１の実行パイプラインを用いた第１の命令の実行に関連する第１の結果に基づいて、第２の実行パイプラインを用いて第２の命令の少なくとも一部を実行したことの第２の結果を選択的にコミットすることを含む。
【０００６】
別の特定の態様では、複数の並列実行のパイプラインを有するプロセッサにおいて、比較命令および第２の命令を含む命令のパケットを受信することを含む方法が開示される。第２の命令は比較命令に依存している。さらにこの方法は、第２の命令がコミットされるかどうかに関連する予測を決定するために第２の命令および比較命令を復号すること、第１の命令および第２の命令を並行に実行すること、および第２の命令におよび前記予測に一部基づいて、取り出しパイプラインを選択的に操縦すること（steering）とを含む。
【０００７】
なお別の特定の態様では、プロセッサは、複数の命令を並行して実行するように適応されたマルチプルな複数の実行パイプラインを含む。このマルチプルな複数の実行パイプラインは、比較命令を実行するための第１の実行パイプラインと、比較命令に依存する第２の命令を実行するための第２の実行パイプラインを含む。比較命令および第２の命令は同時に実行される。プロセッサはまた、比較命令の実行から決定される、第１の実行パイプラインからの第１の結果を、第２の命令による使用のために第２の実行パイプラインへ提供するように適応された論理回路を含む。
【０００８】
このシステムおよび複数の方法の複数の態様によって提供される１つの特定の利点は、コンパイラが依存性関連の（dependency-related）複数の待ち時間（latencies）を導入することなく、プロセッサによる同時実行のために、比較命令と共にその比較命令の結果を利用する分岐命令を単一のパケットにグループ化することができることである。
【０００９】
別の特定の利点は、比較命令が、比較オペレーションのその結果に依存する、算術のおよびメモリロード（memory load）の命令のような他の複数の命令と、グループ化されること、および並行して実行されることができることにおいて提供される。なお別の特定の利点は、これら複数の命令が、同じサイクルにおいて、ならびに実行ユニット（execution unit）がその複数の結果をコミットする必要がある前に、比較命令の結果を使用することができることにおいて提供され、それによって、不必要な書き込みオペレーションを防いでいる。
【００１０】
本開示の他の観点、利点、および特徴は、次に続く複数のセクション：図の簡単な説明、発明を実施するための形態、および特許請求の範囲、とを含む本出願全体のレビューの後に明白になるだろう。
【図面の簡単な説明】
【００１１】
【図１】図１は、並行に実行される（parallel-executed）複数の命令を条件付きでコミットするためのロジックを含むプロセッサの特定の例示的な実施形態を示すブロック図。
【図２】図２は、並行に実行される複数の命令を条件付きでコミットするためのプロセッサの、第２の特定の例示的な実施形態を示すブロック図。
【図３】図３は、第１の比較命令の実行からの第１の結果に基づく第２の結果の選択的なコミットメントを例示している、マルチプルな実行のステージ（stage）を含む実行サイクルの特定の例示的な例を示す図。
【図４】図４は、比較命令、および比較命令の結果に依存する第２の命令を含む複数のパケットに複数の命令をコンパイルする方法の特定の例示的な実施形態を示す流れ図。
【図５】図５は、並行に実行される複数の命令を条件付きでコミットする方法の特定の例示的な実施形態を示す流れ図。
【図６】図６は、予測される条件付きのフローの変更に従って、取り出しパイプラインを操縦する方法の、特定の例示的な実施形態を示す流れ図。および、
【図７】図７は、並行に実行される複数の命令を条件付きでコミットするためのロジックを含む、代表的な携帯可能な（portable）通信装置を示すブロック図。
【発明を実施するための形態】
【００１２】
図１は、並行に実行される複数の命令を条件付でコミットするためのロジックを含むプロセッサ１００の、特定の例示的な実施形態のブロック図である。プロセッサ１００は、バスインターフェース１０８を介して命令キャッシュ１１０に結合されるメモリ１０２を含む。プロセッサ１００はまた、バスインターフェース１０８を介してメモリ１０２に結合されるデータキャッシュ１１２を含む。命令キャッシュ１１０はバス１１１を介してシーケンサ１１４に結合される。シーケンサ１１４はまた、複数の一般的な割込み（general interrupts）１１６を受信し、それらは割込みレジスタ（表示されていない）から読み出されることができる。特定の実施形態では、命令キャッシュ１１０は、複数の現行命令のレジスタを介してシーケンサ１１４に結合されることができ、それはバス１１１に結合されることができ、ならびにプロセッサ１００の特定の複数のスレッドに関連づけられる（associated with）ことができる。特定の実施形態では、プロセッサ１００は、６つのスレッドを含む、インターリーブされた（interleaved）マルチスレッドのプロセッサである。
【００１３】
特定の実施形態では、バス１１１は百二十八ビット（１２８−ビット）のバスであり、またシーケンサ１１４は、各々が三十二（３２）ビットの長さを有するマルチプルな命令を含む複数の命令のパケットを介してメモリ１０２から複数の命令を読み出すように構成される。バス１１１は、第１の命令実行ユニット１１８、第２の命令実行ユニット１２０、第３の命令実行ユニット１２２、および第４の命令実行ユニット１２４に結合される。各命令実行ユニット１１８、１２０、１２２、１２４は、第１のバス１２８を介して汎用レジスタファイル（general register file）１２６に結合されることができる。汎用レジスタファイル１２６はまた、第２のバス１３０を介してシーケンサ１１４、データキャッシュ１１２、およびメモリ１０２に結合されることができる。特定の例示的な実施形態では、データキャッシュ１１２は、まだ決定されていない条件に基づいて前記データが格納される一時記憶番地（temporary storage location）を提供するための、メモリを格納するバッファ１３２を含むことができる。
【００１４】
プロセッサ１００はまた、複数の割込みを受け取るかどうか、ならびに複数の命令の実行を制御するかどうか、を決定するためのシーケンサ内の制御ロジックによってアクセスされることができる複数のビットを格納するための、複数の監視制御レジスタ１３４および複数のグローバル制御レジスタ（global control registers）１３６を含むことができる。プロセッサ１００はまた、実行ユニット１１８、１２０、１２２、１２４に結合されるプレディケート論理回路１３８および複数のプレディケートレジスタ１４０を含んでいる。特定の実施形態では、複数のプレディケートレジスタ１４０は、スカラーおよびベクトルの比較オペレーションの結果を保持する４つの読み取り／書き込みの８―ビットレジスタを含むことができる。複数の比較の結果は、バス１４２を介して実行ユニット１１８、１２０、１２２および１２４によってプレディケートレジスタ１４０に書き込まれることができる。プレディケート論理回路１３８は、複数のプレディケートレジスタ１４０からデータを読み出しならびに複数の比較の結果を要する選択された実行ユニットに対して複数の比較の結果を提供するように適応される。特定の例では、プレディケート論理回路１３８は、各実行ユニット１１８、１２０、１２２および１２４内に組み込まれることができ、ならびに分岐命令に関連付けられる標識の存在に基づいてプレディケートレジスタ１４０からデータを読み出すことができる。例えば、分岐命令は、その分岐命令のために使用される条件付きのデータが同じ命令のパケット中に含まれた比較の結果であることを識別している何等かの他の標識あるいはビット設定を含むことができる。そのような標識は、複数のプレディケートレジスタ１４０から比較の結果を読み出すための、プレディケート制御ロジック（predicate control logic）を引き起こすことができる。
【００１５】
プレディケート論理回路１３８および複数のプレディケートレジスタ１４０は、第１の実行パイプラインの実行の初期のステージにおける比較命令からの結果を、分岐命令、論理オペレーション命令（すなわち、論理積（logical AND）、論理和（logical OR）、否定論理積（logical NAND）、否定論理和（logical NOR）、否定排他的論理和（logical exclusive-OR）、または他の複数の論理演算）、ロード命令、ストア命令、算術命令、別の条件付き命令、またはそれらのいずれの組み合わせで使用するために第２の実行パイプラインへ提供するためのプロセッサ１００によって利用される。特定の実施形態では、プレディケート論理回路１３８は、比較の結果（プレディケート）が生成されたのと同じ実行サイクル内で、そのプレディケートを使用することを分岐に許可するために、第１の実行パイプラインから、別の実行パイプラインによって使用するための複数の結果を読み出すように適応される。特定の例において、分岐命令は、実行ユニット１１８によって実行される比較命令からの結果を使用して、その比較の結果が計算されたおよそゼロ（approximately zero）の観測されたサイクル（observed cycles）後に、実行ユニット１２０によって実行されることができる。従来のＶＬＩＷアーキテクチャーにおける比較オペレーションの結果が、多くの（a number of）サイクルの後に利用可能である一方、プロセッサ１００は、分岐命令が、実行パイプラインからの利用可能な時間の中で、比較オペレーションの結果を受信することを可能にするために、プレディケート論理回路１３８を利用する。従って、比較の結果は、複数の命令が並行に実行している間は、その同じ命令のパケットの分岐命令によって使用されることができる、すなわち分岐命令は、比較の結果が決定されているのと同じ実行サイクルにおいてその比較の結果を受信する。
【００１６】
特定の実施形態では、プレディケート論理回路１３８は、実行ユニット１１８、１２０、１２２および１２４に対する外部の回路部品（circuit component）として例示される。代わりの実施形態では、プレディケート論理回路１３８は、実行ユニット１１８、１２０、１２２および１２４の各々の内部に組み込まれることができる。別の代わりの実施形態では、プレディケート論理回路１３８はシーケンサ１１４内に含まれることができる。
【００１７】
特定の例示的な実施形態では、複数の命令の複数のパケットは、バス１１１を介してシーケンサ１１４によって命令キャッシュ１３４から取り出される。シーケンサ１１４は、指定された命令実行ユニット１１８、１２０、１２２および１２４へ複数の命令を提供する。命令実行ユニット１１８、１２０、１２２および１２４は、前記複数の命令を並行して実行する、および複数の命令の間の依存性に依存して、命令実行ユニット１１８、１２０、１２２および１２４は、第１の命令の結果に基づいて第２の命令からの結果を条件付きでコミットするように適応される。
【００１８】
例えば、特定の実施形態では、複数の命令のパケットは、第２の命令は第１の命令の結果に依存しているところの第１および第２の命令を含むことができる。プロセッサ１００は、フローの変更の命令（ジャンプ命令、分岐命令あるいは他のフローの変更の命令のような）、ロード命令、ストア命令、算術命令、別の依存するオペレーションあるいはそれらの何れの組み合わせとグループ化される比較命令を受け取るように適応される。特に、プロセッサ１００は、分岐を取るか、特定のデータをロードするかまたはストアするか、を決定するために、第１の結果または第２の結果が正しいかどうかを決定するために、またはそれらの何れの組み合わせのために、比較オペレーションの結果が同じ実行サイクル内で使用されることができる実行パイプラインの十分に早い時点において、プレディケートレジスタ１４０に比較オペレーションの結果を提供するように適応される。
【００１９】
特定の例において、プロセッサ１００は、１つまたは複数の実行ユニットからの複数の結果を一時的に格納するためのメモリを格納するバッファ１３２を利用して、その結果の計算と、メモリ１０２にその結果を書き込む書き戻し（write back）のオペレーションとの間に遅延を提供する。例えば、メモリを格納するバッファ１３２は、条件および複数の値がメモリ１０２に提供されるときに遅延を提供する。メモリを格納するバッファ１３２がなければ、条件および複数の値は、前記複数の結果を用意するには、あまりにも早く必要になり得る。メモリを格納するバッファ１３２は、条件の結果を得るために十分な遅延を提供する。プレディケート論理回路１３８は、条件が決定されるまでは、メモリを格納するバッファ１３２に前記複数の結果を書き込むように、実行ユニット１１８、１２０、１２２および１２４を制御することができる、そして次に、決定された条件に従って、記憶域（memory location）に前記複数の結果のうち１つだけを書き込む。
【００２０】
例えば、プロセッサ１００は、比較命令と、その比較命令からの結果に依存する分岐命令とが、並行に実行されることを可能にすることができる。例えば、比較命令は実行ユニット１１８によって処理されることができ、ならびに分岐命令は実行ユニット１２０によって同時に実行されることができる。この分岐命令は、比較の結果が、別のパケットからの以前に実行された命令の結果からよりも、同じパケット中の比較命令から派生される（derived）べきであることを示す他の表記法（notation）あるいはビットを含むことができる。実行パイプライン内では、プレディケート論理回路１３８は、分岐の結果がコミットされる前に、前記結果が分岐命令において使用されることができるように、実行ユニット１２０へ比較命令の結果を提供するようにすることができる。実行パイプラインにおいて、比較オペレーションの結果を初期に利用可能にすることによって、分岐命令は、複数の結果がコミットされる前に正しい（correct）結果を決定するために前記結果を使用することができる。分岐の方向（branch direction）はパイプラインにおいて典型的に初期に決定されるので、分岐が採用された場合には、典型的に分岐命令は、パイプラインの機能停止を回避するために正しい次の命令のパケットを取り出すための時間がない。しかしながら、特定の実施形態では、プレディケート論理回路１３８はまた、分岐が取られるかどうかを決定するために、および／または実行パイプラインの前記データがコミットされるかどうかを予測するために、初期の比較の結果を使用するように適応されることができる。プレディケート論理回路１３８は、前記予測に従って、複数の命令を読み出すための取り出しオペレーションを開始するために、シーケンサ１１４と（例えば、表示されていないバスを介して）通信することができる。
【００２１】
図２は、並行に実行される複数の命令を条件付きでコミットするためのプロセッサ２００の、第２の特定の例示的な実施形態を示すブロック図である。プロセッサ２００は、バス２０３を介してシーケンサ２０４と通信する命令キャッシュ２０２を含む。命令キャッシュ２０２は、シーケンサ２０４に複数の命令のパケットを提供することができる。シーケンサ２０４は、複数の命令のパケットから派生される複数の命令を提供するために、第１の実行パイプライン２１０および第２の実行パイプライン２１２と通信する。第１の実行パイプライン２１０および第２の実行パイプライン２１２は、複数の命令を実行し、そして格納バッファ２１６へおよび、条件が満たされた場合は、メモリ２１８へ複数の命令の複数の結果を条件付きでコミットする。特定の実施形態では、データキャッシュ等のメモリ２１８は、図１の中のメモリ１０２における記憶位置（memory location）のような記憶域にデータを通信するためにバスに結合されることができる。
【００２２】
プロセッサ２００はまた、制御論理回路２０６およびプレディケートレジスタ２０８を含む。プレディケートレジスタ２０８は、第２の実行パイプライン２１２および第１の実行パイプライン２１０によって実行される複数の比較命令の複数の結果を受信するように適応される。制御論理回路２０６は、プレディケートレジスタ２０８からそのような複数の結果を、並列して実行される命令において使用するために、第１の実行パイプライン２１０および第２の実行パイプライン２１２のうちの１つに選択的に通信するように適応される。制御論理回路２０６はまた、バス２０７を介してシーケンサ２０４と通信することができる。
【００２３】
特定の実施形態では、シーケンサ２０４は、バス２０３を介して命令キャッシュ２０２から第１の命令および第２の命令を含む複数の命令のパケットを受信することができる。第２の命令は、第１の命令の実行に関連する結果に依存することができる。例えば、第２の命令は、特定の分岐を取るべきかどうかを決定するための、第１の命令（比較命令のような）の結果を使用する分岐命令であることができる。第１の実行パイプライン２１０は第１の命令を実行することができ、ならびに第２の実行パイプライン２１２は第２の命令を並行して実行することができる。第１の実行ユニット２１０は、プレディケートレジスタ２０８に第１の命令（すなわち、比較命令）の結果を提供する。第２の実行パイプライン２１２は、プレディケートレジスタ２０８から前記結果を受信し、そして第２の命令の実行中に前記結果を使用し、結果として第２の命令の結果をコミットするかどうかを決定する。特定の実施形態では、制御論理回路２０６は第２の実行パイプライン２１２に前記結果を提供する。別の特定の実施形態では、第１の実行パイプライン２１０および第２の実行パイプライン２１２は、制御論理回路２０６を含むことができる。
【００２４】
特定の例において、シーケンサ２０４は、第１の比較命令および第２の分岐命令を含む複数の命令のパケットを受信することができる。第２の分岐命令は第１の比較命令の結果に依存することができる。特定の例において、第２の分岐命令は、ビットフラグ（bit flag）あるいは他の標識のような、その命令内に組み込まれる記述法を使用して第１の比較命令に対する依存性を示すことができる。第１の比較命令および第２の分岐命令の実行中に、第１の実行パイプライン２１０はプレディケートレジスタ２０８に比較の結果を書き込む。同じ実行サイクルにおいて、制御論理回路２０６は、分岐命令の実行において前記結果を使用する第２の実行パイプライン２１２と前記結果を共用する。同時に、制御論理回路２０６は、フローの変更と関連する複数の命令をメモリから読み出すための取り出しオペレーションを開始するために、バス２０７を介してシーケンサ２０４にシグナルを提供することができる。初期の表示（indication）（すなわち、実行ユニットは分岐命令に基づいてプログラムのフローを変更する見込みであるという予測）は、パイプラインの待ち時間を減らすための関連する複数の命令を取り出すために、シーケンサによって使用されることができる。
【００２５】
別の特定の例において、第１の命令が比較命令でありならびに第２の命令がストア命令であるときは、第１の実行パイプライン２１０は、プレディケートレジスタ２０８にその比較の結果を書き込むことができ、および制御論理回路２０６は、第２の実行パイプラインが結果をコミットする前に、第２の実行パイプラインへ前記結果を提供することができる。この実例において、第２の実行パイプラインと関連づけられる書き戻しのオペレーションは、書き戻しが開始される前にキャンセルされることができる。あるいは、データは、書き戻しのオペレーションをコミットする前に追加の遅延を提供するために格納バッファ２１６に一時的にコミットされることができ、それによって第１の実行パイプラインの比較の結果が、不必要な書き戻しのオペレーションを防ぐために利用されることを可能にする、そこでは第２の実行パイプラインからの前記データは必要とされない。
【００２６】
別の特定の例において、比較命令は、その比較命令の結果に依存する、メモリのロードのまたは算術の命令とパケット中にグループ化されることができる。第１の実行パイプライン２１０は、比較命令を実行し、そして実行サイクルの比較的に初期に、プレディケートレジスタにその結果を提供することができる、そして複数の条件付き命令の結果は、その複数の結果がコミットされるところのパイプラインのステージよりも前で、キャンセルされることができる。
【００２７】
一般に、複数の比較命令は実行され、そして、実行ユニット２１０および２１２は、その比較の結果に基づいて、複数のプレディケートビットをプレディケートレジスタ２０８の中に設定する。次に、これらのプレディケートビットは、ある複数の命令を条件付きで実行するために使用されることができる。複数の分岐命令、複数のロード命令、複数のストア命令、複数の算術命令および多重化された（multiplex）命令は、そのような条件付きで実行可能な命令の例である。あるスカラー演算（scalar operations）は、最下位のビットのような、プレディケートレジスタ２０８内の複数の特定のビットに条件付けることができる。対照的に、ベクトル演算は、特定のコードに依存して、プレディケートレジスタ２０８からのより多くのビットを利用することができる。
【００２８】
一般に、プロセッサ２００は、データに依存する複数の命令（data dependent instructions）を並列に実行するために使用されることができる。例えば、そのようなデータに依存する複数の命令は、ロード命令または比較命令からのデータを使用する論理的なあるいは算術的なおよび他の数学的な命令を含むことができる。特定の例において、ロード命令は、比較の結果に基づいて、記憶域からデータを取り出すことができる。特定の実施形態では、そのような条件付きのあるいはデータに依存する複数の命令は、ドット−新規（dot-new）（すなわち、「．ｎｅｗ」）の表記法、ドット−依存（つまり、「．ｄｅｐ」）の表記法、他の表記法またはそれら何れの組み合わせのような、特定のアセンブリ言語の記述法を使用して識別されることができる。特定の例において、アセンブリ言語コンパイラは、そのような表記法を認識し、ならびに順次にそのような表記法を含む複数の命令の複数のパケットをアレンジするように適応されることができる。（アセンブリ言語の表記法「．ｎｅｗ」を使用している）比較命令の結果に基づいた、ワードを条件付きでロードするための条件付きのロードオペレーションを例示しているアセンブリ構文（assembly syntax）の例が、下記に現される：
【数１】
0005889986.tif 000002
【００２９】
別の特定の例において、比較命令は、どのオペランドを選択するかを決定するために使用されることができ、また選択されるオペランドは、算術演算の中で使用されることができる。そのような条件付きの算術演算を例示しているアセンブリ構文の例が、下記に現される：
【数２】
0005889986.tif 000003
【００３０】
別の特定の例において、マルチプルな複数の結果は計算されることができ、また比較の結果は、メモリにどの結果を書き込むかを決定するために使用されることができる。あるいは、比較の結果は、結果が格納されるべきかどうかを決定するために使用されることができる。条件付きのストア命令を例示しているアセンブリ構文の例が、下記に現される：
【数３】
0005889986.tif 000004
【００３１】
一般に、条件付きの、転送、移動あるいは結合の命令を含む、何れの数の条件付き命令は実行されることができる。結合および転送の命令を例示しているアセンブリ構文の例が、下記に現される：
【数４】
0005889986.tif 000005
【００３２】
一般に、ビットフラグ、標識、あるいはドット−新規の（「．ｎｅｗ」）表記法のような特定の表記法は、認識されることができ、またそのようなコードは、プロセッサのパフォーマンスを向上させるために初期の比較の結果を利用するように複数のパケット中にグループ化されることができる。特に、プロセッサは、条件が計算され、そしてその計算された条件の結果が、同じ命令のパケットの実行中に使用されるように、そのような複数のデータに依存する命令を含む複数の命令のパケットを並列に実行することができる。例えば、比較命令の実行からの結果は、別の命令において、その複数の結果をコミットする（すなわち、メモリにその複数の結果を書き込む）かどうかを決定するために使用されることができる。前記条件が、前記結果はコミットされるべきでないと示す場合には、書き戻しのオペレーションはキャンセルされることができる。
【００３３】
どのようにドット−新規の表記法が使用されることができるかの例は、下記の表１および表２に示される。表１は、Ｃコードのサンプルセグメントを示し、そして表２は、ドット−新規の表記法を使用しているサンプルＣコードのアセンブリのインプリメンテーション（implementation）を示す。
【表１】
0005889986.tif 000006
【００３４】
ドット−新規タイプの表記法をサポートするプロセッサのための、アセンブリレベルのコード（assembly level code）の代表的な例が表２において下記に示される。
【表２】
0005889986.tif 000007
【００３５】
この例において、比較命令および新しく生成されたプレディケートのマルチプルな用途は、同じパケット中にグループ化された。図１および２に関して上記で論じられたように、複数の実行ユニットは、同じ実行サイクルにおいて比較のおよびその依存する命令を実行することができる。一般に、パケット中の命令は、同じ宛先レジスタ（destination register）に書き込むことができない。アセンブラまたはコンパイラは、そのような複数のパケットを無効としてフラグを立てることができる。しかしながら、複数の条件付き命令は、提供される同じ宛先レジスタをターゲットにすることが許され、その複数の結果のうちのたった１つがコミットされる。
【００３６】
図３は、実行パイプライン３００に関連付けられるマルチプルな実行のステージの特定の例示的な例のブロック図である。実行パイプライン３００は、第１の比較命令と、第１の命令の結果に依存する第２の命令を実行するように適応される。実行パイプライン３００は、復号のステージ３０２、レジスタの読み出しのステージ３０４、第１の実行のステージ３０６、第２の実行のステージ３０８、第３の実行のステージ３１０および書き戻しのステージ３１２を含む。この例において、１つまたは複数の取り出しのステージは省略され、また実行パイプライン３００は、あたかもそれが復号のステージ３０２から始まるかのように例示される。特定の例において、ステージ３０２、３０４、３０６、３０８、３１０および３１２の各々は、クロックサイクルを表わすことができる。
【００３７】
この例において、比較の結果は第２の実行のステージ中に、３１４において、決定され、そして結果は、３１６で比較の結果に基づいて結果をコミットするかあるいはキャンセルするかを決定するために、第３の実行のステージの３１０において使用される。どのタイプの依存する命令が処理されているかによって、３１４における比較の結果は、複数の機能停止を減らすために取り出しパイプラインを操縦するための制御論理を可能にするために、実行パイプライン３００において十分に早く提供される。３１４での比較の結果は、「ドット−新規」の表記法または表示を使用している依存する命令によって選ばれる。さらに、復号のステージ３０２では、ジャンプまたは分岐が採用されるかどうかについての予測を作成することができる。特定の実施形態では、前記予測は静的な予測を使用して作成されることができる。前記予測は、分岐またはブランチが採用される見込みのときは、さらに複数の機能停止を減らすために取り出しパイプラインを操縦するために、使用されることができる。特に、比較の結果は、第２の実行のステージ３０８までは利用できないので、パイプラインの機能停止なしに次の命令を取り出すには、遅すぎることがある。しかしながら、前記予測（すなわち、「ジャンプ／分岐が採用される（jump/branch taken）」、「ジャンプ／分岐が採用されない（jump/branch not taken）」、他の予測またはそれら何れの組み合わせ）を追加することによって、制御論理は、フローの変更が生じる場合に、パイプラインの機能停止を防ぐために次の命令を取り出すことができる。静的な予測が間違っているときは、取り出しパイプラインはフラッシュされることができ、そして次の命令のパケットが処理のために取り出されることができる。
【００３８】
特定の例において、マルチスレッドのプロセッサの各スレッドは、他の複数の実行ユニットが、それが必要であり得る複数の結果を有することができるだろうかどうかを決定するためにおよび／または予測するために、前記パケット全体の複数の部分を復号することができる。別の特定の例では、書き戻しのオペレーションはキャンセルされることができ、それによって汎用レジスタファイルに対する書き込みオペレーションを防いでいる。
【００３９】
特定の例では、（３１４において）比較の結果が用意される前に、第２の実行のステージにおいて、書き戻しのオペレーションにコミットすることは、複数のタイミングの目的にとって、それは必要になることができる。この事例において、前記結果は、図１に例示されるメモリを格納するバッファ１３２のような、一時的なバッファの中に格納されることができる。メモリを格納するバッファは、さらに後の時点において、メモリ内へコミットすることができる。この例において、あなたは、データを格納するためにコミットすることを遅延させることができ、ならびにキャンセルされるべきである書き戻しの複数のオペレーションを防ぐためにバッファ付きの書き込み（buffered write）を使用することができる。
【００４０】
図４は、比較命令の結果に依存する第２の命令およびその比較命令を含む複数のパケットの中へ複数の命令をコンパイルするための方法の、特定の例示的な実施形態の流れ図である。この方法は、４０２において、１つまたは複数のコンパイリングのステージを介して、複数の超長命令語（ＶＬＩＷ）の命令を、複数の機械可読命令にコンパイルすることを含む。４０４へ前進して、この方法は、マルチスレッドのプロセッサによって並行に実行されることができる、複数の命令を含む複数のパケットに複数の機械可読命令を形成すること（すなわち、グループ化すること）をさらに含む。複数のパケットのうちの少なくとも１つのパケットは、同時に実行することが可能な第１の命令と第２の命令とを含む。第２の命令は第１の命令に依存している。第１および第２の命令は同時に実行される。特定の例において、第１の命令の結果は、同じ処理のサイクル内において第２の命令を処理するために使用される。この方法は４０６で終了する。
【００４１】
特定の実施形態では、複数のパケットのパケットは、同じ宛先レジスタをターゲットとする（target）少なくとも２つの条件付きの命令を含む。従来のコンパイラが誤りを返すことがある一方、ただ１つの条件付きの複数の命令がコミットされることができるという条件で、少なくとも２つの条件付きの命令は、同じ宛先レジスタをターゲットとすることを許されることができる。
【００４２】
図５は、並列に実行される複数の命令を条件付きでコミットする方法の特定の例示的な実施形態の流れ図である。この方法は、５０２において、第２の命令は第１の命令に依存するところの、複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および第２の命令を含むパケットを受信することを含む。複数の並列実行のパイプラインは、第１の実行パイプラインおよび第２の実行パイプラインを含むことができる。第１の命令は比較命令であることができ、また第２の命令は、比較命令の結果に基づいて条件付きである命令であることができる。５０４へ進み、この方法は、第１の命令の少なくとも一部および第２の命令の少なくとも一部を、並列に、実行することを含む。特定の例において、各実行パイプラインは、第２の命令および第１の命令の一部を復号することができ、ならびに第１の実行パイプラインは第１の命令を実行することができ、そして同時に第２の実行パイプラインは第２の命令を実行することができる。例えば、第２の実行パイプラインは、第１の命令の一部と関連付けられる値を決定するために、あるいはビットの値を読み出すために、第１の命令の一部を復号することができる。
【００４３】
５０６まで継続し、実行パイプラインは、前記結果をコミットするかどうかを決定する。第１の命令を実行したことの第１の結果が、第２の命令を実行したことの第２の結果がコミットされる（すなわち、汎用レジスタファイル、メインメモリ、別のメモリ、あるいはそれらの何れの組み合わせに書き込まれる）べきであることを示す場合には、この方法は５０８へ進み、そして第２の命令を実行したことの第２の結果がコミットされる。あるいは、第１の結果が、第２の結果がコミットされるべきでないことを示す場合には、この方法は５１０へ進み、そして第２の結果のコミットメントはキャンセルさせる。この事例において、この方法は、第１の命令の実行に関連する第１の結果に基づいて、第２の命令を実行したことの第２の結果を選択的にコミットすることを含む。この方法は５１２で終了する。
【００４４】
特定の実施形態では、この方法は、実行の前にパケットから第１のおよび第２の命令を並行に抽出すること（読み出すこと）を含む。第１の命令の第１の結果は、プレディケートの結果（predicate result）を含むことができる。第１の命令は、プレディケートを生成する比較命令または別のタイプの命令であることができる。プレディケートは、分岐またはフローの変更が採用されるかどうかの初期の表示を提供することができる。特定の例では、ストア命令は、比較命令に基づいて条件付きであることができる。この事例において、実行パイプラインの書き戻しのステージにおける、書き戻しのオペレーションは、比較の結果に基づいてキャンセルされることができる。
【００４５】
別の特定の実施形態では、複数の命令のパケットは、同時に実行される命令からのプレイディケートデータを使用する第３の命令を含むことができる。特定の例において、第１のベクトルは、併合されるデータを生産するための前記データに基づく第２のベクトルと併合され、また第３のベクトルは、プレディケートレジスタからの前記データに従って併合されるデータに基づいて出力される。
【００４６】
別の例において、第１の命令は比較命令であり、また第２の命令はジャンプ命令である。この例において、この方法は、第２の結果がコミットされるかどうかを予測するために第１および第２の命令の一部を復号すること、および予測に従って、次の複数のパケットを取り出すことを含む。
【００４７】
特定の実施形態では、第２の命令は、第２の命令によって比較命令の第１の結果が使用されるべきであることを示す標識あるいはビットを含むことができる。第１の結果は、第２の結果がコミットされる前に、第２の命令が正しい結果を決定することができるように、第２の命令に対して利用できるようにされる。別の特定の例において、この方法は、第２の結果がコミットされないときに、第２の命令の実行によって引き起こされる複数の例外をキャンセルすることを含むことができる。
【００４８】
別の特定の例において、この方法は、並行に複数の命令を実行すること、ならびに第１の命令と第２の命令のうちの１つが、プレディケートレジスタの中のビットに基づいた有効なプレディケートを有するかどうかを決定すること、を含むことができる。この方法はまた、有効なプレディケートに従って、第１の結果および第２の結果のうちの、両方ではなく、１つをコミットすることを含む。
【００４９】
別の特定の例において、この方法は、第１のアドレスに第１の結果を書き込むことおよび並行して第２の宛先のアドレスに第２の結果を書きこむことを含むことができる。さらに、この方法は、第１の結果が第２の結果が放棄される（discarded）べきことを示すときは、第２の結果を放棄することを含むことができる。結果をコミットすることは、書き戻しのオペレーション、ストアのオペレーション、ロードのオペレーション、算術のオペレーション、およびジャンプまたは分岐のオペレーションのようなフローの変更のオペレーション、のうちの１つを行うことを参照することができる。
【００５０】
図６は、予測されるフローの条件付き変更に従って、取り出しパイプラインを操縦する方法の、特定の例示的な実施形態の流れ図である。６０２において、この方法は、複数の並列実行のパイプラインを有するプロセッサにおいて、比較命令および第２の命令を含むパケットを受信することを含む。第２の命令は比較命令に依存する。６０４へ進み、この方法は、第２の命令がコミットされるだろうかどうかに関連する予測を決定するために第２の命令および比較命令を復号することをさらに含む。特定の例において、前記予測は、実行ユニットにおけるあるいはシーケンサ内の予測のロジックによって作成された静的または動的な予測であることができる。６０６に前進して、この方法は、第１の命令および第２の命令を並行に実行することを含む。
【００５１】
６０８へ進み、この方法は、前記予測および第２の命令に一部基づいて「採用された」パスを下って取り出しパイプラインを操縦することを含む。例えば、取り出しパイプラインは、採用されたパスに関連する複数の命令を用いてロードされる（loaded）ことができる。６１０まで継続して、「採用された」パスが正しい場合には、この方法は６１２へ進み、そして第２の命令は、第１の結果に基づいて選択的にコミットされる。そうでなければ、６１０において選択されたパスが正しくない場合には、この方法は６１４へ進み、そして取り出しパイプラインがフラッシュされる。６１６へ前進して、この方法は、「採用されなかった」パス（すなわち、６０４で予測されなかったパス）を下って取り出しパイプラインを選択的に操縦することを含む。
【００５２】
特定の例において、分岐は投機的な（speculative）分岐であることができる。予測のロジックが、投機的な分岐が採用されるだろうことを予測する場合には、取り出しパイプラインは、前記予測に従ってロードされることができる。前記予測が正しくない場合には、パイプラインはフラッシュされ、そして別のパスへと操縦されることができる。
【００５３】
特定の例において、取り出しパイプラインを選択的に操縦することは、第２の命令がフローの変更の命令であるとき、および前記予測がフローの変更の命令がコミットされる見込みであることを示すときは、予測されたフローの変更に基づいて、メモリから複数の命令の読み出しを開始することを含む。別の例において、取り出しパイプラインを選択的に操縦することは、前記予測がフローの変更を示すときに、その予測に基づいて、メモリからフローの変更と関連する複数の命令の読み出しを開始することを含む。あるいは、読み出しは、前記予測がフローの変更を示さないときには開始されない。特定の例において、読み出された複数の命令は、前記予測が正しくないと決定された後に、取り出しパイプラインから削除される。
【００５４】
別の例において、第２の命令は、第２の命令が比較命令の第１の結果を使用することを示している命令の表記法を含む。第１の結果は、第２の結果がコミットされる前に、第２の命令が正しい結果を決定することができるように、第２の命令に対して利用可能である。特定の実施形態では、第２の命令の実行によって引き起こされる複数の例外は、第２の結果がコミットされないときには、キャンセルされる。別の例において、この方法はまた、第１の命令および第２の命令のうちの１つが有効なプレディケートを有するかどうかを決定すること、および有効なプレディケートに従って、第１の結果および第２の結果のうち、両方ではなく、１つをコミットすることを含む。
【００５５】
図７は、携帯可能な通信装置７００として例示される、依存する複数の命令を同時に処理するように適応されるシステムの実施形態のブロック図である。携帯可能な通信装置７００は、複数のプレディケートレジスタ７６０、プレディケート論理回路７６２、およびデータを格納するバッファ７６４を有するデジタル信号プロセッサ（ＤＳＰ）７１０を含む。特定の実施形態では、ＤＳＰ  ７１０は、図１および２において例示されたプロセッサ１００および２００のような、マルチスレッドのプロセッサであることができる。ＤＳＰ  ７１０は、比較命令およびその比較の結果を使用する分岐命令のような、互いに依存する、並行に実行される複数の命令を条件付きでコミットするためのプレディケート論理回路７６２および複数のプレディケートレジスタ７６０を利用するように適応される。携帯可能な通信装置７００は、デジタル信号プロセッサ７１０のようなプロセッサを含むオンチップ（on-chip）システム７２２を含む。ＤＳＰ  ７１０は、図１−３および５−６に関連して記述されるように、複数のプレディケートレジスタ７６０およびプレディケート論理回路７６２を含む。特定の例示的な実施形態では、プレディケートレジスタ７６０およびプレディケート論理７６２は、同じ実行サイクル内で、比較の結果を使用する依存する命令を処理している第２の実行パイプラインと共に、比較の結果を共有することを第１の実行パイプラインに許すことにより処理の効率を向上するために使用されることができる。さらに、プレディケートレジスタ７６０、プレディケート論理７６２およびデータを格納するバッファ７６２は、メモリに複数の結果を条件付きでコミットするために、そして前記条件が満たされなかったときには、書き戻しの複数のオペレーションをキャンセルするあるいは強制終了（kill）するために利用されることができる。
【００５６】
図７はまた、デジタル信号プロセッサ７１０におよび表示装置７２８に結合される表示装置制御器７２６を示す。そのうえ、入力装置７３０はデジタル信号プロセッサ７１０に結合される。さらに、メモリ７３２はデジタル信号プロセッサ７１０に結合される。符号器／復号器（ＣＯＤＥＣ）７３４もまた、デジタル信号プロセッサ７１０に結合されることができる。スピーカー７３６およびマイクロホン７３８は、ＣＯＤＥＣ  ７３４に結合されることができる。
【００５７】
図７はまた、無線制御装置７４０は、デジタル信号プロセッサ７１０におよび無線アンテナ７４２に結合されることができることを示す。特定の実施形態では、電源７４４はオンチップシステム７２２に結合される。そのうえ、図７に例示されるように、表示装置７２８、入力装置７３０、スピーカー７３６、マイクロホン７３８、無線アンテナ７４２および電源７４４は、オンチップシステム７２２の外部にあることができる。しかしながら、各々はオンチップシステム７２２の構成要素に結合される。
【００５８】
特定の例示的な実施形態では、プレディケート論理回路７６２および複数のプレディケートレジスタ７６０は、望まれていない書き戻しの複数のオペレーションを減らすまたは除去するために使用されることができ、それによって、携帯可能な通信装置７００の全体的なパフォーマンスを向上している。さらに、プレディケート論理回路７６２および複数のプレディケートレジスタ７６０は、様々な機能を条件付きで行うために使用されることができ、依存する複数の命令が並行に実行されることを可能にし、およびパイプラインの複数の機能停止という点においては、オーバーヘッド（over head）のペナルティーなしに望まれていない結果を放棄して、装置７００のパフォーマンスを向上させている。
【００５９】
プレディケート論理回路７６２および複数のプレディケートレジスタ７６０は、ＤＳＰ
７１０の別々の構成要素として描かれている一方、その代わりに、プレディケート論理回路７６２および複数のプレディケートレジスタ７６０は、図１において例示されるシーケンサ１１４のような制御回路に統合されることができることが理解されるべきである。同様に、プレディケート論理回路７６２およびデータを格納するバッファ７６４は、マルチスレッドのプロセッサの複数の実行ユニットに統合されることができる。
【００６０】
当業者は、ここに開示された複数の実施形態に関連して記述された、様々な例示的な、論理ブロック（logical blocks）、構成、モジュール、回路およびアルゴリズムのステップは、電子ハードウェア、コンピュータソフトウェア、あるいは両方の組み合わせとしてインプリメント（implemented）されることができることを、さらに評価するだろう。明白にハードウェアとソフトウェアのこの互換性を例示するために、様々な例示的な、構成要素、ブロック、構成、モジュール、回路、およびステップは、概してそれらの機能性の点から、上に記述されている。そのような機能性が、ハードウェアまたはソフトウェアとしてインプリメントされるかどうかは、全体的なシステムに課された設計の制約および特定のアプリケーションに依存する。当業者は、それぞれの特定のアプリケーションへ多様の仕方（ways）において、前記記述された機能性をインプリメントすることができるが、そのようなインプリメンテーションの決定は、本開示の範囲から逸脱すると解釈されるべきでない。
【００６１】
ここに開示された実施形態に関連して記述されるアルゴリズムまたは方法のステップは、ハードウェアにおいて、プロセッサによって実行されるソフトウェアモジュールにおいて、あるいは２つの組み合わせにおいて、直接具体化（embodied）されることができる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＰＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または当技術においてよく知られる記憶媒体のいずれの他の形式で、常駐する（reside）ことができる。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読みならびにそれに情報を書くことができるように、プロセッサに結合されることができる。代わりにおいて、記憶媒体はプロセッサに不可欠であることができる。プロセッサと記憶媒体は、ＡＳＩＣに常駐することができる。ＡＳＩＣは、ユーザ端末に常駐することができる。代わりにおいて、プロセッサと記憶媒体は、ユーザ端末の個別の構成要素として常駐することができる。
【００６２】
開示された複数の実施形態についての前の記述は、いずれの当業者が、開示された複数の実施形態を作るあるいは利用することができるようにするために提供される。これらの例に対する様々な変更（modification）は、当業者にとっては、容易に（readily）明白であることができ、ここに定義された一般的な（generic）複数の法則は、ここに記述された複数の新規の観点の精神または範囲から外れることなく、他の複数の実施形態へ応用されることができる。したがって、本開示は、ここに示される複数の実施形態に制限されるようには意図されず、次に述べるＣの範囲によって定義されるように、ここに開示された複数の法則および複数の新規の特徴と一致する最も広い範囲を与えられることになる。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［書類名］特許請求の範囲
［Ｃ１］
下記を具備する方法：
第１の実行パイプラインおよび第２の実行パイプラインを含む、複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および第１の命令に依存する第２の命令を含む命令のパケットを受信することと、
前記第１の命令の少なくとも一部および前記第２の命令の少なくとも一部を並行に実行することと、
前記第１の実行パイプラインを用いた前記第１の命令の実行に関連する第１の結果に基づいて、前記第２の実行パイプラインを用いて前記第２の命令の少なくとも一部を実行したことの第２の結果を選択的にコミットすること。
［Ｃ２］
Ｃ１に記載の方法、ここにおいて前記第２の命令は、前記第１の結果が前記第２の命令によって使用されることを示す命令表記を含む。
［Ｃ３］
プレディケートレジスタに、前記第１の結果に関連するデータを書き込むことをさらに具備する、Ｃ１に記載の方法。
［Ｃ４］
Ｃ３に記載の方法、ここにおいて前記第２の命令は、前記プレディケートレジスタから前記第１の結果に関連する前記データを受信する。
［Ｃ５］
Ｃ１に記載の方法、ここにおいて前記第２の結果を選択的にコミットすることは下記を具備する：
メモリを格納するバッファに前記第２の結果を書き込むことと、
前記第１の結果を利用できるときは、レジスタに対する書き戻しのオペレーションを選択的にキャンセルすること。
［Ｃ６］
Ｃ１に記載の方法、ここにおいて前記第２の命令は、条件付きのフローの変更の命令を含む、前記方法はさらに下記を具備する：
前記第１の実行パイプラインおよび前記第２の実行パイプラインのうちの1つの復号のステージにおいて、前記第２の命令および前記第１の命令の一部を復号することと、
前記条件付きのフローの変更の命令がコミットされる見込みか否かを指示する前記復号された一部に基づいて静的な予測を行うこと。
［Ｃ７］
前記静的な予測が、前記条件付きのフローの変更の命令がコミットされる見込みであることを指示するときは、フローの変更に関連する複数の命令を読み出すために、命令の取り出しパイプラインを操縦することをさらに具備する、Ｃ６に記載の方法。
［Ｃ８］
前記第２の結果をコミットするかどうかを決定した後に、前記第２の結果を宛先レジスタに対して条件付き書き戻しすることをさらに具備する、Ｃ１に記載の方法。
［Ｃ９］
Ｃ１に記載の方法、ここにおいて前記第1の命令は比較命令を具備し、前記第２の命令は前記フローの変更の命令を具備する、前記方法はさらに下記を具備する：
前記第１の結果に基づいて、プレディケートビットをプレディケートレジスタに設定することと、
前記フローの変更の命令を実行した後に、前記プレディケートビットの値に基づいて、前記フローの変更の命令よって指示された前記フローの動作の変更を行うために、選択的にコミットすること。
［Ｃ１０］
下記を具備する方法：
複数の並列実行のパイプラインを有するプロセッサにおいて、比較命令および第２の命令を含むパケットを受信すること、前記第２の命令は前記比較命令に依存している、
前記第２の命令がコミットされるかどうかに関連する予測を決定するために前記第２の命令および前記比較命令を復号すること、
前記第１の命令および前記第２の命令を並行に実行することと、
前記第２の命令におよび前記予測に一部基づいて、取り出しパイプラインを選択的に操縦すること。
［Ｃ１１］
Ｃ１０に記載の方法、ここにおいて前記取り出しパイプラインを選択的に操縦することは、前記第２の命令がフローの変更の命令であるとき、および前記フローの変更の命令がコミットされる見込みであると前記予測が指示するときに、予測されるフローの変更に基づいてメモリからの複数の命令の読み出しを開始することを具備する。
［Ｃ１２］
Ｃ１０に記載の方法、ここにおいて前記取り出しパイプラインを選択的に操縦することは、前記予測がフローの変更を指示するときは、前記予測に基づいてメモリからフローの変更に関連する複数の命令の読み出しを開始することを、しかし前記予測が前記フローの変更を指示しないときは、読み出しを開始しないことを、具備する。
［Ｃ１３］
前記予測が誤りであると決定された後に、前記取り出しパイプラインから前記読み出された複数の命令を削除することをさらに具備する、Ｃ１１に記載の方法。
［Ｃ１４］
第１の実行パイプラインに関連づけられる前記第１の命令に関連する少なくとも第１の結果に基づいて、第２の実行パイプラインを用いて実行される前記第２の命令の前記第２の結果を選択的にコミットすることをさらに具備する、Ｃ１０に記載の方法。
［Ｃ１５］
Ｃ１４に記載の方法、ここにおいて、前記第２の命令は、前記第２の命令が前記比較命令の前記第１の結果を利用することを指示する命令表記を含む、およびここにおいて前記第１の結果は、前記第２の結果がコミットされる前に、前記第２の命令に対して利用できる。
［Ｃ１６］
前記第２の結果がコミットされないときに、前記第２の命令の実行により引き起こされる複数の例外をキャンセルすることをさらに具備する、Ｃ１５に記載の方法。
［Ｃ１７］
さらに下記を具備する、Ｃ１０に記載の方法：
前記第１の命令および前記第２の命令のうちの１つは、有効なプレディケートを有するかどうかを決定すること、および
前記有効なプレディケートを有する前記命令に基づいて、前記第１の命令の第１の結果および前記第２の命令の第２の結果のうちの、両方ではなく、１つをコミットすること。
［Ｃ１８］
下記を具備するプロセッサ：
複数の命令を並行して実行するように適応されたマルチプルな実行パイプライン、前記マルチプルな実行パイプラインは、第１の結果を決定する第１の命令を実行するための第１の実行パイプラインと、前記第１の命令から決定された前記第１の結果に依存する第２の命令を実行するための第２の実行パイプラインとを含む、前記第１の命令および前記第２の命令は同時に実行される、および
前記第１の命令の実行から決定される、前記第１の実行パイプラインからの前記第１の結果を、前記第２の命令による使用のために前記第２の実行パイプラインへ提供するように適応された論理回路。
［Ｃ１９］
Ｃ１８に記載のプロセッサ、ここにおいて前記論理回路は、前記第２の実行パイプラインと関連づけられる第２の結果がコミットされる前に、前記第１の結果を前記第２の実行パイプラインへ提供する。
［Ｃ２０］
前記マルチプルな実行パイプラインにアクセス可能であり、ならびに前記第１の結果に関連するデータを格納するように適応されたプレディケートレジスタをさらに具備する、Ｃ１８に記載のプロセッサ。
［Ｃ２１］
前記第１の命令および前記第２の命令を含む複数の命令のパケットを受信するシーケンサ、前記シーケンサは前記第１の命令を前記第１の実行パイプラインに提供する、および前記シーケンサは前記第２の命令を前記第２の実行パイプラインに提供する、をさらに具備する、Ｃ１８に記載のプロセッサ。
［Ｃ２２］
Ｃ２１に記載のプロセッサ、ここにおいて前記第１の命令は比較命令を具備する、およびここにおいて前記第２の命令は前記比較命令の実行の結果に依存する、およびここにおいて前記第２の命令は算術命令、論理演算命令、ロード命令、ストア命令、分岐命令、および飛越し命令のうちの少なくとも１つを具備する。
［Ｃ２３］
前記第２の命令の実行による第２の結果がコミットされる前に、前記第１の命令の実行による前記第１の結果を取得するのに十分な遅延を提供するための、前記マルチプルな実行パイプラインに結合されたメモリバッファをさらに具備する、Ｃ１８に記載のプロセッサ。
［Ｃ２４］
下記を具備するプロセッサ：
第１の実行パイプラインおよび第２の実行パイプラインを含む複数の並列実行のパイプラインを有するプロセッサにおいて、第１の命令および第１の命令に依存する第２の命令を含む命令のパケットを受信するための手段と、
前記第１の命令の少なくとも一部および前記第２の命令の少なくとも一部を並行に実行するための手段と、
前記第１の実行パイプラインを用いて前記第１の命令を実行することに関連する第１の結果に基づいて、前記第２の実行パイプラインを用いて前記第２の命令の少なくとも一部を実行したことの第２の結果を選択的にコミットするための手段。
［Ｃ２５］
下記をさらに具備する、Ｃ２４に記載のプロセッサ：
メモリを格納するバッファに前記第２の結果を書き込むための手段と、
前記第１の結果が利用できるときは、レジスタに対する書き戻しのオペレーションを選択的にキャンセルするための手段。
【図１】
0005889986.tif 000008
【図２】
0005889986.tif 000009
【図３】
0005889986.tif 000010
【図４】
0005889986.tif 000011
【図５】
0005889986.tif 000012
【図６】
0005889986.tif 000013
【図７】
0005889986.tif 000014