(57)【要約】  パイプラインプロセッサ内の複数のパイプラインステージにおいて複数の命令を処理する方法が開示される。この方法は、ストールした命令を、プロセッサ内の実行ステージに先立つ、命令実行以外の機能を有するパイプラインステージにおいて、部分的にあるいは全体的に実行する。実行ステージに先立って命令を部分的にあるいは全体的に実行することはその命令の実行をスピードアップさせ、プロセッサがより効率的にそのリソースを利用することを可能にし、これによりプロセッサの効率を増加させる。
2010522940.tif 000002
【特許請求の範囲】
【請求項１】
ストールした命令をパイプラインプロセッサ内の［命令実行以外の一次機能を有する］ホールディング・ステージにおいて部分的に実行する方法であって、
第１の命令をホールディング・ステージにロードすることと、
前記第１の命令を当該命令がパイプライン・ハザードに遭遇した時に前記ホールディング・ステージにおいてストールし、前記第１の命令を前記ホールディング・ステージにおいて実行することと、
前記第１の命令を実行ステージにロードすることと、
前記第１の命令の実行を前記実行ステージにおいて完了することとを具備する方法。
【請求項２】
前記第１の命令は、当該命令が前記ホールディング・ステージにある時に実行論理回路によって実行される請求項１記載の方法。
【請求項３】
前記ホールディング・ステージは、予約ステージである請求項１記載の方法。
【請求項４】
前記ホールディング・ステージは、命令キューである請求項１記載の方法。
【請求項５】
前記パイプライン・ハザードは、リソースハザードである請求項１記載の方法。
【請求項６】
前記パイプライン・ハザードは、データハザードである請求項１記載の方法。
【請求項７】
前記第１の命令は、複合命令である請求項１記載の方法。
【請求項８】
ストールした命令をパイプラインプロセッサ内の命令実行以外の一次機能を有するパイプラインステージにおいて全体的に実行する方法であって、
第１の命令をホールディング・ステージにロードすることと、
前記第１の命令を、当該命令がパイプライン・ハザードに遭遇した時に前記ホールディング・ステージにおいてストールし、前記第１の命令を前記ホールディング・ステージにおいて全体的に実行することと、
前記第１の命令の実行の結果を書き込むこととを具備する方法。
【請求項９】
前記第１の命令の実行は、前記第１の命令が前記ホールディング・ステージにある時に、実行論理回路によって行なわれる請求項８記載の方法。
【請求項１０】
前記ホールディング・ステージは、予約ステージである請求項８記載の方法。
【請求項１１】
前記ホールディング・ステージは、命令キューである請求項８記載の方法。
【請求項１２】
前記結果はレジスタファイルに書き込まれる請求項８記載の方法。
【請求項１３】
前記ハザードは、リソースハザードである請求項８記載の方法。
【請求項１４】
前記ハザードは、データハザードである請求項８記載の方法。
【請求項１５】
前記第１の命令は、算術命令または論理演算を含む請求項８記載の方法。
【請求項１６】
パイプラインプロセッサであって、
第１の命令を受け取るように構成されたホールディング・ステージと、
前記ホールディング・ステージに結合される実行ステージとを具備し、
前記ホールディング・ステージは、パイプライン・ハザードに遭遇した時に前記第１の命令をストールするように構成され、前記ホールディング・ステージは、実行論理回路をさらに具備し、前記実行論理回路は、前記第１の命令を部分的に実行または全体的に実行するように構成され、前記実行ユニットは、前記部分的に実行される第１の命令を実行するように構成されている、パイプラインプロセッサ。
【請求項１７】
前記第１の命令は複合命令である請求項１６記載のパイプラインプロセッサ。
【請求項１８】
前記実行論理回路は、算術演算または論理演算を実行する請求項１６記載のパイプラインプロセッサ。
【請求項１９】
前記パイプライン・ハザードは、リソースハザードである請求項１６記載のパイプラインプロセッサ。
【請求項２０】
前記パイプライン・ハザードは、データハザードである請求項１６記載のパイプラインプロセッサ。
【請求項２１】
前記ホールディング・ステージは、予約ステージである請求項１６記載のパイプラインプロセッサ。
【請求項２２】
前記ホールディング・ステージは、命令キューである請求項１６記載のパイプラインプロセッサ。
【請求項２３】
レジスタファイルをさらに具備し、前記第１の命令の実行の結果は前記レジスタファイルに書き込まれる請求項１６記載のパイプラインプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータシステムに関し、特にプロセッサにおいて実行ステージに先立って命令を実行するための方法およびシステムに関する。
【背景技術】
【０００２】
プロセッサ・パイプラインは多くのステージから構成さており、各ステージは命令の実行および処理に関連する機能を行なう。各ステージはパイプステージまたはパイプセグメントと称される。これらステージはパイプラインを形成するために相互に接続される。命令はパイプラインの一端に入り、他端で終了する。それら命令は、パイプラインステージそれぞれを通してストリームに連続して流れる。これらステージは、いくつかのステージがいくつかの命令を同時に処理することができるように配置される。異なるパイプラインステージで同時に複数の命令を処理することは、プロセッサが一度に１つの命令のみを処理する場合よりも命令を速く処理することを可能にし、これによりプロセッサの実行速度を改善する。
【０００３】
命令の処理は最初のパイプラインステージの期間中に命令をフェッチすることから始まる。その後、その命令はプロセッサ内の後続するステージに受け継がれ、それらステージによって処理される。命令が各ステージにおいて処理されるにつれ、様々な機能がその命令に対して行なわれるかもしれない。命令の典型的な処理は、その命令をフェッチすること、その命令をデコードすること、その命令を識別すること、その命令を実行すること、その結果を記録することなどを含み得る。
【０００４】
命令を処理している間、プロセッサは命令の実行が遅れることを経験するかもしれない。これらの遅れはプロセッサが遭遇するハザードによって引き起こされ得る。当業者が認識しているように、パイプラインプロセッサ内で遭遇されうる３つのタイプのハザード、リソースハザード（構造ハザードとも称される）、データハザード、制御ハザードがある。これら３つのすべてのハザードは命令の実行を遅らせる。リソースハザードは、命令によって必要とされるハードウェアが利用可能でない時に存在する。典型的には、これは、複数の命令が同じリソースの使用を要求する時に生じる。データハザードは、命令に関係する情報が収集されるかまたは識別される時に発生する。データハザードには、リード・アフター・ライト（ＷＡＷ）ハザードと、ライト・アフター・ライト（ＲＡＷ）ハザードと、ライト・アフター・リード（ＷＡＲ）ハザードとが含まれる。制御ハザードは、ある命令がプログラムカウンターを変更する時に発生する。
【０００５】
いくつかのプロセッサでは、ハザードに遭遇した時、遅れた命令はホールディング・ステージの中に保持され得る。例えば、遅れた命令に関連する情報が収集されるかまたは確認される間、命令はホールディング・ステージの中に保持され得る。その情報が利用可能になった後しばらくして、その命令はホールディング・ステージから放出され、後続するステージに移される。パイプライン内の後のステージのうちの１つでは、命令は、実行ステージによって最終的に処理される。命令が実行ステージの期間中に実行された後、その命令実行の結果はプロセッサによって収集され格納される。
【０００６】
一般にいくつかのプロセッサでは、命令がパイプライン・ハザードによる遅れを経験する場合、その命令は実行ステージに達するのが遅れ、これによってその命令の実行が遅れる。リソースハザードの場合のように、たとえ命令を実行するのに必要な情報のいくつかあるいは全てが利用可能な場合であっても、プロセッサは、その命令を実行するために利用できるリソースを有さないかもしれない。実行ステージに先立って命令の実行を遅らせることは、プロセッサの全体の処理効率に影響を与えそれを低下させるかもしれない。
【発明の概要】
【０００７】
従って、ストールした命令を、プロセッサ内の実行ステージに先立つ、命令実行以外の機能を持つパイプラインステージにおいて、部分的にあるいは全体的に実行することができるプロセッサを所有する必要がこの業界には存在する。パイプライン中で実行ステージに先立って命令を部分的にあるいは全体的に実行することは、その命令の実行をスピードアップするとともに、プロセッサがより効率的にそのリソースを利用することを可能にし、これにより、プロセッサの効率を増加させる。本明細書の開示はこの必要性を認識し、そのようなプロセッサを開示する。
【０００８】
命令実行以外の一次機能を持つパイプラインステージで、ストールした命令を部分的に実行する方法が開示される。この方法は、第１の命令をホールディング・ステージにロードする。この方法は、パイプライン・ハザードに遭遇した場合に第１の命令をストールし、第１の命令を部分的に実行する。この方法は、さらに、第１の命令を実行ステージにロードし、実行ステージにおいて第１の命令の実行を完了する。
【０００９】
他の実施形態では、命令実行以外の一次機能を持つパイプラインステージにおいて、ストールした命令を全体的に実行する方法が開示される。この方法は、第１の命令をホールディング・ステージにロードする。この方法は、パイプライン・ハザードに遭遇した場合に第１の命令をストールし、第１の命令を全体的に実行する。この方法は、さらに、第１の命令の実行の結果をライトする。
【００１０】
パイプラインプロセッサが開示される。このパイプラインプロセッサは、第１の命令を受け取るように構成されたホールディング・ステージを有しており、このホールディング・ステージは実行ステージに結合されている。このホールディング・ステージは、パイプライン・ハザードに遭遇した場合に第１の命令をストールするように構成されており、このホールディング・ステージは、さらに、実行論理回路を具備する。この実行論理回路は第１の命令を部分的に実行するかまたは全体的に実行するように構成されている。実行ステージは、さらに、実行ユニットを具備し、この実行ユニットは部分的に実行された第１の命令を実行するように構成されている。
【００１１】
本発明のさらなる特徴および利点のみならず、本発明のより完全な理解は、以下の詳細な説明および添付図面から明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の実施形態を使用したプロセッサの高レベルロジックハードウェアブロック図を示す。
【図２】図２は図１のプロセッサ内のＣＰＵのより詳細なブロック図を示す。
【図３】図３は、図１のプロセッサによって実行される典型的な命令のグループを示す。
【図４】図４は、図３の典型的な命令のグループが図１のプロセッサの様々なステージを通って実行される場合のタイミング図を示す。
【図５】図５は、図１のプロセッサによって実行される別の典型的な命令のグループを示す。
【図６】図６は、図５の典型的な命令のグループが図１のプロセッサの様々なステージを通って実行される場合のタイミング図を示す。
【発明を実施するための形態】
【００１３】
添付の図面に関して以下に述べる詳細な説明は本発明の様々な実施形態の説明として意図されたものであり、本発明が実施される実施形態だけを表わすように意図されてものではない。詳細な説明は、本発明についての完全な理解を提供する目的で特定の詳細を含んでいる。しかしながら、本発明がこれらの特定の詳細なしで実施し得ることは当業者にとって明白であろう。いくつかの実例では、よく知られた構造およびコンポーネントは本発明の概念を不明瞭にしないようにするためにブロック図の形で示されている。略語および他の記述的な用語は単に便宜と明瞭さのために使用されてもよく、発明の範囲を制限するように意図されていない。
【００１４】
図１は、以下に説明されるような実施形態を利用するスーパースカラープロセッサ１００についての高レベル図を示す。プロセッサ１００は、専用高速バス１０４を介して命令キャッシュ１０６に結合された中央処理装置（ＣＰＵ）１０２を有する。命令キャッシュ１０６は汎用バス１１０を介してメモリ１０８にも結合される。ＣＰＵ１０２は、下位パイプライン（lower pipeline）１６０および１６５に結合された上位パイプライン（upper pipeline）１５０を有する。ＣＰＵ１０２は、メモリ１１４から命令キャッシュ１０６への命令のローディングを制御する。一旦命令キャッシュ１０６に命令がロードされると、ＣＰＵ１０２は高速バス１０４を介してそれら命令にアクセスすることができる。命令は命令キャッシュ１０６から上位パイプライン１５０の中へフェッチされる。命令が上位パイプライン１５０で処理された後、それら命令はさらなる処理のために下位パイプライン１６０または１６５に送られる。
【００１５】
命令は順番に上位パイプラインに入り、より効率的な処理のために下位パイプライン１６０または１６５に再配列（rearrange）されるかもしれない。下位パイプライン１６０および１６５内の命令の再配置は、図２−６の考察でより詳しく説明される。上位パイプライン１５０において命令に対して行なわれるいくつかの典型的な処理機能は、命令をフェッチすること、命令を整列させること、命令をデコードすることなどを含む。下位パイプライン１６０および１６５内では、命令処理は、命令を追跡すること（tracking）、命令を実行すること、命令結果を記録することなどを含む。
【００１６】
下位パイプライン１６０および１６５は、算術論理演算ユニット、浮動小数点ユニット、ストアユニット、ロードユニット、などのような様々な実行ユニット（ＥＵ）１３０を含み得る。例えば、算術論理演算ユニットを持つＥＵ１３０は、整数の加算、減算、単純乗算、ビット単位の論理演算（例えばＡＮＤ、ＮＯＴ、ＯＲ、ＸＯＲ）、ビットシフトなどのような広範囲の算術機能を実行し得る。代わりに、ＥＵ１３０は、ロード、リード、またはライトを行なうロードユニット、またはストアユニットを有してもよい。プロセッサ１００の効率を増加させるために、下位パイプライン１６０および１６５はある機能を行なうために組織化（organize）されていてもよい。例えば、下位パイプライン１６０は算術機能を行なうＥＵ群１３０を含み得、一方、下位パイプライン１６５はロード／ストア機能を行なうＥＵ群１３０を含み得る。ある機能性を別個の下位パイプライン１６０または１６５へ分離することによって、二重のＥＵ群１３０は必要でなくなり得る。もう一つの実施形態では、下位パイプライン１６０および１６５は同様のＥＵ群１３０を含んでいてもよく、このことは、プロセッサが同じプロセッサ・サイクルの期間中に各下位パイプライン１６０および１６５内において複数の命令に対する同様の処理機能を行なうことを許可する。また別の実施形態では、命令を処理する１つの下位パイプラインのみがあってもよい。本明細書に提示される発明概念は１つ以上の下位パイプラインを備えたプロセッサに適用され得る。
【００１７】
当業者が理解しているように、パイプラインステージは、命令を保持するように設計されたレジスタのグループまたはレジスタから成り得る。命令が特定のステージに入る場合、プロセッサは、そのステージにリンクされたレジスタのグループまたはレジスタにその命令をロードする。各ステージには、命令に応じてある演算（operation）を行い得る論理回路が関係づけられてもよい。論理回路がその意図した演算を行なった後、その命令は次の連続するステージに受け継がれる。
【００１８】
図２はＣＰＵ１０２のより詳細なブロック図を示す。上位パイプライン１５０はフェッチ論理回路２０２を有しており、このフェッチ論理回路２０２は、デコードステージ２０４に結合されるフェッチステージ２０３に結合される。下位パイプライン１６０または１６５内では、ホールディング・ステージ２１０は実行ステージ２２０に結合されており、この実行ステージ２２０は書き込み（write-back）ステージ２３０に結合される。ホールディング・ステージ２１０は書き込みステージ２３０に直接結合されてもよい。下位パイプライン１６０および１６５の書き込みステージ２３０それぞれはバス１７０によってレジスタファイル２３５に結合される。ホールディング・ステージ２１０は実行論理回路２４０に結合され、またＥＵ群１３０は実行ステージ２２０に結合される。
【００１９】
命令は上位パイプライン１５０のトップから下位パイプライン１６０および１６５を通って流れる。上位パイプライン１５０内では、フェッチステージ２０３は、命令キャッシュ１０６から命令を決定し続いてフェッチするためにフェッチ論理２０２を使用する。命令キャッシュ１０６では、命令はキャッシュ・ラインとして知られているセクションにグループ化される。各キャッシュ・ラインは複数の命令を含み得る。その結果、一度にいくつかの命令が命令キャッシュ１０６からフェッチされデコードされ得る。命令がフェッチ論理２０２によってフェッチされた後、それら命令はデコードステージ２０４へ送られる。
【００２０】
デコードステージ２０４では、命令がデコードされてその命令の正体（identity）と任意の起こりえる命令依存性（instruction dependencies）（つまりデータハザード）が決定される。デコード論理回路（デコード論理回路は図示の簡単化のために示されてない）によってデコードステージ２０４の期間中に取得または識別された情報は、さらなる処理のために下位パイプライン１６０または１６５のどちらがその命令を受け取るかをプロセッサが決定することを可能にする。以前に述べたように、下位パイプライン１６０は算術機能を取り扱うように設計されてもよく、一方、下位パイプライン１６５はロード／ストア機能を取り扱うように設計されてもよい。図２の実施形態では、たとえそれらが処理する命令が機能的に異なるかもしれないとしても、下位パイプライン１６０および１６５は同様の演算ブロック（operational blocks）を含んでいる。
【００２１】
実例となる例においては、命令は、２つのレジスタの内容同士を乗算し、その結果を第３のレジスタに格納する乗算命令として識別されるかもしれない。識別処理はデコードステージ２０４の期間中に発生し得る。さらにデコードステージ２０４の期間中には、その乗算命令に関する起こりえるデータハザードも確認されるかもしれない。この例では、乗算命令は、その命令のオペランドの一方または両方が利用可能ではないかもしれない（つまり、２つのレジスタの内容がまだ決定されないかもしれない）ということをプロセッサ１００が確認した状態で、下位パイプライン１６０に送られるかもしれない。
【００２２】
一旦命令がデコードステージ２０４を通って下位パイプライン１６０または１６５のどちらかに渡ると、プロセッサ１００は、その命令がその実行を終えてその結果が書き込まれるまで、その命令の処理を監視し続ける。命令が実行を終えていくとき、その結果はバス１７０上に送信され、プロセッサ１００は、後の命令の実行を促進するためにその情報を使用し得る。
【００２３】
プロセッサが命令の監視に使用し得る１つの技術は、命令を「スコアボード化（scoreboarding）」することとして参照される。当業者は、命令スコアボードを使用して命令を追跡(track)することは、プロセッサが、任意の命令依存性のみならず命令を追跡することを可能にすることを理解する。命令がデコードステージ２０４において識別された後、その命令のためのエントリが命令スコアボード内に生成される。そのエントリは、エントリ番号若しくは他の命令識別子と、命令機能（すなわち、乗算、加算、ロード、ストア、など）と、その命令が現在配置されている下位パイプライン内のステージと、その命令が有する任意の依存性とを含み得る。一旦命令が下位パイプライン１６０あるいは１６５において実行を終了すれば、その命令エントリは除去される。
【００２４】
命令が下位パイプライン１６０または１６５に入っていくときに、それらは最初にホールディング・ステージ２１０において処理される。命令は、１つ以上のハザードが解決するのを待つために、１つ以上のプロセッサ・サイクルの間ホールディング・ステージ２１０内に保持され得る。１つの典型的な実施形態では、ホールディング・ステージは予約（reservation）ステージであってもよい。代替の実施形態では、ホールディング・ステージは命令キューであってもよい。当業者は、予約ステージを通って処理される命令はリオーダされ得、それにより、古い命令がデータハザードに遭遇する場合に若い命令がその古い命令をバイパスするのを可能にすることを理解する。これに対し、命令キューは、命令のリオーダを可能にしないかもしれない。命令キューは先入れ先出し方式で命令を処理する。したがって、もし命令キュー内の最も古い命令がデータハザードによる遅れを経験するならば、続く若い命令も遅れに遭遇し、最も古い命令が去るまで命令キューに残るであろう。ホールディング・ステージ２１０の主な目的は、ハザードに遭遇した時に、予約ステージまたは命令キューのいずれかを使って、命令の一時的な保持場所をプロセッサ１００に提供することである。
【００２５】
ハザードが解決するのを待っている命令はストールした命令としても参照されうる。ストールした命令を予約ステージに一時的に保持することは、後続の命令がそのストールした命令をバイパスし、下位パイプライン１６０および１６５を通って移動し続けることを可能にする。ストールした命令をバイパスすることは、プロセッサがその処理リソースをより効率的に使用することを可能にする。予約ステージなしでは、パイプライン・ハザードが解決されるまで、下位パイプライン１６０あるいは１６５を通る命令の流れはブロックされるかもしれない。
【００２６】
１つの実施形態では、ホールディング・ステージ２１０は、単一の命令を保持することができるレジスタを有する予約ステージであってよい。また別の実施形態では、予約ステージは、複数の命令を保持することができる１組のレジスタであってもよい。どれだけの数の命令が予約ステージ内に保持され得るかを決める場合には、保持される命令の数は、プロセッサ１００によって経験されるあらゆる起こりえる性能劣化のみならず、必要とされる追加のハードウェアの量ともバランスをとらなくてはならない。
【００２７】
プロセッサ１００は、ストールした命令をそれがホールディング・ステージ２１０にある間、監視し続ける。ストールした命令に関連したパイプライン・ハザードが解決されたことをプロセッサが一旦決定すると、プロセッサ１００は、その命令を下位パイプライン１６０または１６５の処理ストリーム中に放出する。もしその命令の全てのデータハザードが解決される（つまり、その命令がその全てのオペランドを有する）ならば、その命令はホールディング・ステージ２１０から実行ステージ２２０に移される。実行ステージ２２０内では、その命令はＥＵ群１３０によって実行される。命令が実行された後、その結果は、その命令が書き込みステージにある場合に書き込み論理回路（図示の簡単化のために示されてない）によってレジスタファイル２３５に書き込まれる。
【００２８】
命令または複数の命令が下位パイプライン１６０または１６５内のホールディング・ステージ２１０内に保持されて間に、実行論理回路２４０はそれら命令のうちのいくつかあるいは全てを実行し得る。１つの実施形態では、実行論理回路２４０は、ＥＵ群１３０内に存在する論理回路の部分集合（subset）を含む。実行論理回路２４０によって行い得る実行可能な機能を伴った命令は、実行ステージ２２０への到達に先立って、実行論理回路２４０によって全体的にまたは部分的に実行され得る。ホールディング・ステージ２１０においての命令の部分的な実行からの結果は、プロセッサ１００によって保存され実行ステージ２２０に受け継がれ得る。命令がホールディング・ステージ２１０において全体的にあるいは完全に実行された時、命令実行からの結果は、書き込みステージ２３０によってレジスタファイル２３５に直接的に書き込んでもよい。この処理は、図３−６の後続の考察の中でより詳細に説明される。
【００２９】
典型的な実施形態では、実行論理回路２４０は、論理左シフト（ＬＳＬ）演算を実行する論理回路を含んでいてもよい。この実施形態では、実行論理回路２４０は、下位パイプライン１６０または１６５のＥＵ１３０内にも存在する論理回路の複製を含む。ＥＵ１３０のみならずＥＵ１３０と実行論理回路２４０の双方にＬＳＬ演算を実行する論理回路を有することによって、プロセッサ１００は、ホールディング・ステージ２１０または実行ステージ２２０のいずれかにおいてＬＳＬ演算を伴った命令を実行し得、これによりプロセッサ１００の処理効率が増加される。
【００３０】
実行論理回路２４０においてどの機能をサポートするかを決定する場合には、必要とされる追加のスペースと、電力および放熱と、実行時間の量と、特定の命令の頻度とを考慮してもよい。以前に説明した実施形態では、ＬＳＬ命令は、実行ステージ２２０に先立ってＬＳＬ命令を実行することによって節約されるプロセッサ・サイクルの数が、プロセッサ１００によって経験されるかもしれないあらゆる性能インパクトよりも勝るように、頻繁に実行されるようにしてもよい。代替の実施形態では、加算、減算、論理演算などのような他の機能が、実行論理回路２４０に実装されてもよい。
【００３１】
図３は、本発明の１つの実施形態を利用するプロセッサ１００によって処理される命令３００の典型的なグループを示す。この例の目的のために、実行論理回路２４０は論理左シフト（ＬＳＬ）回路を含む。図４は、上位パイプライン１５０および下位パイプライン１６５のステージを通って処理される命令３００のグループを示すタイミング図４００を示す。タイミング図４００は、Ｙ軸４０４に沿ったプロセッサ・サイクル４０２と、Ｘ軸４０６に沿ったプロセッサ１００のステージ（２０３、２０４、２１０、２２０および２３０）を示す。タイミング図４００は下位パイプライン１６０を通って流れる命令３００のグループを示すが、命令３００のグループは下位パイプライン１６０を通って流れてもよい。さらに、図４に示されたホールディング・ステージ２１０は予約ステージあるいは命令キューのいずれであってもよい。命令３００のグループの処理の説明においては、予約ステージがホールディング・ステージ２１０の例として使用される
図３に示されるように、複合（compound）命令Ｂ、ＣおよびＤは、複数の実行可能なオペレーションを有する。複合命令Ｂは、ＬＳＬオペレーション３０２およびＡＤＤオペレーション３０３から構成される。複合命令ＢのＬＳＬオペレーション３０２は、レジスタ５（Ｒ５）を２だけ論理的に左にシフト（ＬＳＬ）する。ＡＤＤオペレーション３０３は、（２だけ論理的にシフトされた後の）Ｒ５とレジスタ１（Ｒ１）との加算であって、その結果がレジスタ４（Ｒ４）に書き込まれる加算を含む。複合命令ＣはＡＤＤオペレーション３０５のみならずＬＳＬオペレーション３０４も有する。ＬＳＬオペレーション３０４は、レジスタ７（Ｒ７）に定義された値によるＲ５のＬＳＬを含み、ＡＤＤオペレーション３０５は、Ｒ５とＲ１との加算であって、結果がレジスタ６（Ｒ６）に書き込まれる加算である。命令ＤはＬＳＬオペレーション３０６とＳＵＢオペレーション３０７とを有する。命令ＤのＬＳＬオペレーション３０６は、Ｒ７の内容を２だけ論理的に左にシフトする。命令ＤのＳＵＢオペレーション３０７は、Ｒ４の値からＲ７の値を引き、レジスタ８（Ｒ８）に結果を格納する。
【００３２】
図４を参照すると、命令Ａがプロセッサ１００によって処理される最初の命令である。命令Ａは、プロセッサ・サイクル１で命令フェッチステージ２０３にフェッチされる。プロセッサ・サイクル２では、複合命令Ｂがフェッチ論理２０２によってフェッチされ、命令フェッチステージ２０３にロードされる一方、命令Ａはデコードステージ２０４へ送られ。プロセッサ・サイクル３では、命令Ａは下位パイプライン１６０の予約ステージへ送られる。この実施形態では、予約ステージは２つまでの命令を保持し得る。
【００３３】
さらに、プロセッサ・サイクル３の期間中では、複合命令Ｃが命令フェッチステージ２０３によってフェッチされる一方、複合命令Ｂがデコードステージ２０４でデコードされる。命令Ｂがデコードされた後、プロセッサ１００は、命令Ｂが、命令Ａの実行からまだ決定されない情報（つまりＲ１の値）に対する依存性（つまりデータハザード）を有する複合命令であることを決定する。命令Ａは依存性を有さないので、命令Ａは予約ステージに１プロセッサ・サイクル（プロセッサ・サイクル３）だけ維持されるであろう。
【００３４】
プロセッサ・サイクル４では、複合命令Ｂが予約ステージにロードされる一方、命令Ａは実行ステージ２２０において実行される。命令Ｂは、そのオペランドの依存性が解決される（つまり、命令Ａの実行の後にＲ１の値が決定される）まで、予約ステージに保持されるであろう。この例においては、プロセッサ１００が書き込みステージ２３０の期間中に命令Ａの結果をレジスタファイル２３５に書き込んだ時、Ｒ１の値は次のプロセッサ・サイクル（プロセッサ・サイクル５）において利用可能である。プロセッサ・サイクル４の期間中に、複合命令Ｄは命令フェッチステージ２０３によってフェッチされ、複合命令Ｃはデコードステージ２０４において処理される。複合命令Ｃがデコードステージ２０４においてデコードされた後、プロセッサ１００は、複合命令Ｃが論理左シフト機能を含む複合命令であり、命令Ａ（つまりＲ１の値）に対する依存性を有するということを、識別する。
【００３５】
複合命令Ｂがプロセッサ・サイクル４の期間中に予約ステージにある間、実行論理回路２４０はＬＳＬオペレーション３０２を実行し得る。したがって、複合命令Ｂは、予約ステージに保持されている間に、実行論理回路２４０によって部分的に実行され得る。以前に説明したように、実行論理回路２４０は、ＬＳＬオペレーション（この例では、２だけ論理左シフトの命令）を実行する論理回路を含み得る。プロセッサの効率は、そうでなければオペレーションを行なわないストールサイクルの期間中に必要なオペレーションを実行することによって増加する。予約ステージの実行論理回路２４０無しでは、複合命令Ｂは、その実行を完了するために実行ステージ２２０において２つのプロセッサ・サイクルを必要とするであろう（つまりＬＳＬオペレーション３０２を行うための１サイクルと、ＡＤＤオペレーション３０３を行なうための１サイクル）。この例において、ＬＳＬオペレーション３０２の実行からの結果はプロセッサ１００によって保存され、そして、複合命令Ｂが実行ステージ２２０に送られる時に（プロセッサ・サイクル６において）、結果もまた送られる。ＬＳＬオペレーション３０２を実行するために実行論理回路２４０を使用することは、複合命令Ｂが実行ステージ２２０に達した時にプロセッサ１００がＡＤＤオペレーション３０３を１プロセッサ・サイクルで実行することを可能にする。したがって、実行ステージにおいて複合命令Ｂを実行するのに必要な処理時間は、１プロセッサ・サイクルだけ削減される。更に、この実施形態は、複合命令の別の一部に対する依存性が存在している状態、その複合命令の一部が実行されることを可能にする。
【００３６】
以前に言及したように、命令Ａは実行を終え、その結果はプロセッサ・サイクル５において書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。その結果は、複合命令Ｂがプロセッサ・サイクル５において予約ステージにある間に、その複合命令Ｂに提供される。複合命令Ｂは、次のプロセッサ・サイクル（プロセッサ・サイクル６）において実行ステージ２２０に放出されよう。複合命令Ｃはプロセッサ・サイクル５の期間中に予約ステージにロードされる。プロセッサ１００は、複合命令Ｃも、プロセッサ・サイクル５において現在利用可能であるＲ１に格納された値を必要とすることを、決定する。したがって、複合命令Ｃは、もはやオペランド有効性に基づくいかなるデータハザードも有しておらず、もし実行ステージ２２０が次のプロセッサ・サイクル（プロセッサ・サイクル６）の期間中に利用可能であるならば、実行ステージ２２０に放出されるであろう。しかしながら、複合命令Ｂが最初に実行ステージ２２０へ放出され、これにより、複合命令Ｃは、リソースコンフリクト（実行ステージ２２０は命令Ｂによって専有されている）に起因するストールを経験し、複合命令Ｃは、複合命令Ｂが書き込みステージに送られる（プロセッサ・サイクル７）まで、予約ステージに維持される。
【００３７】
複合命令Ｃがプロセッサ・サイクル５の期間中に予約ステージにおいてストールされている間に、実行論理回路２４０はＬＳＬ機能３０４を実行し得る。プロセッサ１００は、プロセッサ・サイクル５の開始時に、Ｒ７の内容を実行論理回路２４０にロードし得る。プロセッサ・サイクル５の期間中に、実行論理回路２４０はＬＳＬ機能３０４を実行し得る。ＬＳＬオペレーション３０４の実行からの結果はプロセッサ１００によって保存され、そして、複合命令Ｃが実行ステージ２２０に送られる時に（プロセッサ・サイクル７において）、結果もまた送られる。予約ステージの実行論理回路２４０無しでは、複合命令Ｃは、その実行を完了するために実行ステージ２２０において２つのプロセッサ・サイクルを必要とするであろう（つまりＬＳＬオペレーション３０４を行うための１サイクルと、ＡＤＤオペレーション３０５を行なうための１サイクル）。ＬＳＬオペレーション３０４を実行するために実行論理回路２４０を使用することは、複合命令Ｃが実行ステージ２２０に達した時にプロセッサ１００がＡＤＤオペレーション３０５を１プロセッサ・サイクルで実行することを可能にする。したがって、実行ステージにおいて複合命令Ｃを実行するのに必要な処理時間は、１プロセッサ・サイクルだけ削減される。
【００３８】
プロセッサ・サイクル５においては、複合命令Ｄはデコードステージ２０４において処理され、また命令Ｅは命令フェッチステージ２０３によってフェッチされる。複合命令Ｄがデコードされた後、プロセッサ１００は、複合命令Ｄが２つの実行可能なオペレーション、ＬＳＬオペレーション３０６およびＳＵＢオペレーション３０７を有する複合命令であることを、識別する。プロセッサ１００は、複合命令Ｄが複合命令Ｂに対する依存性を有することをさらに識別する（つまり、複合命令Ｄは、実行するために決定されるべきＲ４の値を必要とする）。複合命令Ｄにとってのデータハザードが解決された（つまり、Ｒ４の結果は利用可能となった）後、複合命令Ｄは、さらなる実行のために、放出されそして実行ステージ２２０に送られよう。
【００３９】
プロセッサ・サイクル６では、リソースハザードが解決され、複合命令Ｃは予約ステージを去り、プロセッサ・サイクル７において実行ステージ２２０へ送られよう。さらに、プロセッサ・サイクル６の期間中には、複合命令Ｄは予約ステージにロードされ、命令Ｅはデコードステージ２０４において処理され、また命令Ｆは命令フェッチステージ２０３によってフェッチされる。複合命令Ｄはプロセッサ・サイクル７の期間中は予約ステージ内に保持され続ける。その理由は、Ｒ４の値は、複合命令Ｂが実行し終え、その結果が書き込みステージの期間中にレジスタファイル２３５に書き込まれるまで（プロセッサ・サイクル７）、書き込まれないからである。
【００４０】
しかしながら、プロセッサ１００は複合命令Ｄが実行可能なＬＳＬオペレーションを含むことを識別しているので、プロセッサ１００は、プロセッサ・サイクル６の開始時にＲ７の値を実行論理回路２４０にロードする。プロセッサ・サイクル６の期間中に、実行論理回路２４０はＬＳＬオペレーション３０６を実行する。その結果は保存され、複合命令Ｄがプロセッサ・サイクル８において実行ステージ２２０へ送られる時に複合命令Ｄと一緒に送られる。プロセッサ・サイクル７の後、Ｒ４に対する依存性がすでに解決され、また実行ステージ２２０が利用可能である（つまり、リソースハザードによるストールがない）ので、プロセッサ１００は、予約ステージから実行ステージ２２０に命令Ｄを放出する。プロセッサ・サイクル８では複合命令Ｄが実行され、その結果は、プロセッサ・サイクル９において書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。予約ステージにおいてＬＳＬ機能３０６を実行することによって、Ｒ４の依存性は、実行ステージ２２０において複合命令Ｄの実行に影響を与えない。
【００４１】
命令Ｅがプロセッサ・サイクル６においてデコードされた後、プロセッサ１００は、その命令がオペランド利用可能性に基づくどんな依存性（つまりデータハザード）も持っていないと識別する。命令Ｅはプロセッサ・サイクル７において予約ステージへ送られる。プロセッサ・サイクル７の期間中に、命令Ｄは予約ステージを去り、また命令Ｅは、追加のサイクルの間、予約ステージ内に維持される。以前に考察されたように、たとえ命令Ｅがそのオペランドのすべてを有したとしても、命令Ｅは、その実行が開始できる前に、実行ステージ２２０が利用可能になるのを待つ。命令ＥはＬＳＬオペレーションを有していないので、実行論理回路２４０（この例では単にＬＳＬオペレーションを実行する）は、実行ステージ２２０に先立って命令Ｅを実行するためには使用されないかもしれない。
【００４２】
命令Ｆは、プロセッサ・サイクル６の期間中に命令キャッシュ１０６から命令フェッチステージ２０３にフェッチされる。プロセッサ・サイクル７では、命令Ｆはデコードステージ２０４において処理される。命令Ｆは、プロセッサ・サイクル８の期間中にさらなる処理のために下位パイプ１６０の予約ステージへ送られる。先行する命令（命令ＤおよびＥ）が実行ステージ２２０および書き込みステージ２３０においてそれぞれ処理されている間、命令Ｆは予約ステージに２つのプロセッサ・サイクル（プロセッサ・サイクル８、９）の間維持される。命令ＦはＯＲＲ命令であり、実行論理回路２４０はＬＳＬ回路を含んでいるので、命令Ｆのための実行ステージ２２０に先立った実行は行なわれない。結果として、命令Ｆはプロセッサ・サイクル１０において実行され、その結果は、プロセッサ・サイクル１１において書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。
【００４３】
もし命令キューが前の例に記述された命令３００のグループを処理するために予約ステージの代わりに使用されれば、結果は正確に同じになるであろう。結果は同じになるのは、命令３００のグループは予約ステージにおいて処理された後にリオーダされないからである。したがって、命令３００のグループは、それら命令が実行ステージ２２０に実行される時に、アウト・オブ・オーダー（out of order）で実行されない。
【００４４】
図５は、本発明の実施形態を利用するプロセッサ１００によって処理される命令５００の別の典型的なグループを示す。図６は、プロセッサ１００の上位パイプライン１５０および下位パイプライン１６０の種々のステージを通って流れる命令５００のグループのタイミング図６００を示す。タイミング図６００は、Ｙ軸６０４に沿ったプロセッサ・サイクル６０２と、Ｘ軸６０６に沿ったプロセッサ１００のステージ（２０３、２０４、２１０、２２０および２３０）を示す。タイミング図６００は下位パイプライン１６０を通って流れる命令５００のグループを示すが、もし下位パイプライン１６５が命令５００のグループを処理可能であるならば、命令５００のグループは下位パイプライン１６５を通って流れることもできる。さらに、図６に示されたホールディング・ステージ２１０は予約ステージあるいは命令キューのいずれであってもよい。実例の容易さのために、予約ステージが命令５００のグループを処理するために使用される。
【００４５】
図５に示されるように、複合命令Ｂ１およびＣ１は、複数の実行可能なオペレーションを有する。複合命令Ｂ１はＬＳＬオペレーション５０２およびＡＤＤオペレーション５０３を有する。ＬＳＬオペレーション５０２は、Ｒ５に対する２だけの論理左シフト（ＬＳＬ）であり、ＡＤＤオペレーション５０３は、（２だけ論理的に左にシフトされた後の）Ｒ５とＲ１との加算であり、その結果はＲ６に格納される。複合命令Ｃ１はＬＳＬオペレーション５０４およびＡＤＤオペレーション５０５を有する。ＬＳＬ機能５０４は、Ｒ７に定義された値だけＲ５を論理的に左にシフトし、ＡＤＤ機能５０５は、（Ｒ７の値だけ論理的に左にシフトされた後の）Ｒ５とＲ１との加算であり、その結果はＲ４に格納される。
【００４６】
タイミング図６００を参照すると、命令Ａ１はプロセッサ・サイクル１の期間中にフェッチ論理回路を使用して、命令フェッチステージ２０３によって命令キャッシュ１０６からフェッチされる。プロセッサ・サイクル２では、複合命令Ｂ１が命令フェッチステージ２０３によってフェッチされる一方、命令Ａ１は処理のためにデコードステージ２０４へ送られる。命令Ａ１がデコードされた後、プロセッサ１００は、命令Ａ１がいかなる依存性も持っておらず、オペランド利用可能に基づいた依存性解決のために予約ステージに保持されないであろうことを、識別する。
【００４７】
プロセッサ・サイクル３では、命令Ａ１は下位パイプライン１６０の予約ステージへ送られる。命令Ａ１は依存性がないので（つまり、そのオペランドは識別され、またリソースコンフリクトがない）、命令Ａ１は、プロセッサ・サイクル４において実行ステージ２２０へ送られる前に、予約ステージに１プロセッサ・サイクルだけ（プロセッサ・サイクル３）維持されるであろう。プロセッサ・サイクル３の期間中では、複合命令Ｃ１が命令フェッチステージ２０３によってフェッチされる一方、複合命令Ｂ１はデコードステージ２０４においてデコードされる。命令Ｂ１がデコードステージ２０４の期間中にデコードされた後、プロセッサ１００は、複合命令Ｂ１が２つの実行可能なオペレーション（５０２および５０３）を有する複合命令であり、そのうちの１つは２だけの論理左シフト（ＬＳＬ機能５０２）であると、識別する。さらに、プロセッサ１００は、複合命令Ｂ１が命令Ａ１に対する依存性を有すること（つまり、Ｒ１の値は複合命令Ｂ１の実行を完了するために必要である）を識別する。
【００４８】
プロセッサ・サイクル４では、複合命令Ｂ１が予約ステージに入る一方、命令Ａ１は実行ステージ２２０において実行される。複合命令Ｂ１は、オペランド利用可能（つまりデータハザード）に基づくストールに遭遇し、Ｒ１の値が利用可能になるまで、予約ステージ内に保持されるであろう。この例においては、命令Ａ１が実行し終え、その結果がプロセッサ・サイクル５において書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれるまでは、Ｒ１の値は利用可能でない。複合命令Ｂ１が予約ステージにある間、複合命令Ｂ１は部分的に実行され得る。ＬＳＬ機能５０２は、プロセッサ・サイクル４の期間中に実行論理回路２４０によって実行され得る。ＬＳＬオペレーション５０２の実行からの結果はプロセッサ１００によって保存され、複合命令Ｂ１が実行ステージ２２０に送られる時に（プロセッサ・サイクル６）、その結果もまた送られる。複合命令Ｂ１の残るＡＤＤ機能５０３は、実行ステージ２２０の期間中に実行されるであろう。
【００４９】
プロセッサ・サイクル４の期間中に、命令Ｄ１は命令フェッチステージ２０３によってフェッチされ、また複合命令Ｃ１はデコードステージ２０４において処理される。複合命令Ｃ１がプロセッサ・サイクル４においてデコードステージ２０４の期間中にデコードされた後、プロセッサ１００は、複合命令Ｃ１が２つの実行可能なオペレーション、ＬＳＬオペレーション５０４およびＡＤＤオペレーション５０５を含む複合命令であることを、識別する。プロセッサ１００は、さらに複合命令Ｃ１のＡＤＤオペレーション５０５が、複合命令Ｃ１が予約ステージを去ることができる前に解決されなければならない値Ｒ１に対する依存性を有することを、識別する。
【００５０】
命令Ａ１は実行を終え、命令Ａ１がプロセッサ・サイクル５において書き込みステージ２３０にある間に、その結果はレジスタファイル２３５に書き込まれる。複合命令Ｂ１が予約ステージ内に保持されている間に、命令Ａ１の結果は複合命令Ｂ１へ送られる。複合命令Ｂ１がその結果を受け取った後、複合命令Ｂ１は、次のプロセッサ・サイクル（プロセッサ・サイクル６）において実行ステージ２２０に放出されるであろう。複合命令Ｃ１はプロセッサ・サイクル５の期間中予約ステージにおいて処理され続けられる。プロセッサ１００は、Ｒ１の値が今利用可能であるので、複合命令Ｃ１についての依存性はプロセッサ・サイクル５において解決されていることを、決定する。しかしながら、複合命令Ｃ１は、複合命令Ｂ１が最初に放出されることによって発生するリソースハザードにより、プロセッサ・サイクル６において実行ステージ２２０に放出されないであろう。プロセッサ・サイクル５の期間中に、複合命令Ｃ１は部分的に実行され得る。複合命令Ｃ１のＬＳＬオペレーション５０４は実行論理回路２４０によって実行される。ＬＳＬオペレーション５０４の実行からの結果はプロセッサ１００によって保存され、複合命令Ｃ１が実行ステージ２２０に送られる時（プロセッサ・サイクル７）に、その結果もまた送られる。実行論理回路２４０はＡＤＤ機能を実行するのに必要な論理回路を含んでいないので、複合命令Ｃ１の他のＡＤＤオペレーション５０５は、次のプロセッサ・サイクル（プロセッサ・サイクル７）の期間中に実行ステージ２２０において実行されるであろう。
【００５１】
プロセッサ・サイクル５では、命令Ｄ１はデコードステージ２０４において処理され、また命令Ｅ１は命令フェッチステージ２０３によってフェッチされる。命令Ｄ１がデコードされた後、プロセッサ１００は、命令Ｄ１が依存性を持っておらずＬＳＬオペレーションを含んでいないことを、識別する。したがって、命令Ｄ１は、オペランド依存性（つまりデータハザード）のために、予約ステージ内に保持されないであろう。
【００５２】
プロセッサ・サイクル６では、複合命令Ｂ１は実行ステージ２２０において実行される。本発明の１つの局面を利用して、プロセッサは、プロセッサ・サイクル４において実行論理回路２４０によるＬＳＬオペレーション５０２の先行する実行により、複合命令Ｂ１の実行を１つのプロセッサ・サイクルにおいて完了する。ＬＳＬオペレーション５０２を実行するために実行論理回路２４０を使用することは、実行ステージ２２０において複合命令Ｂ１を実行するための処理時間を１プロセッサ・サイクルだけ削減する。更に、この実施形態は、複合命令の別の一部に対する依存性が存在している状態、その複合命令の一部が実行されることを可能にする。
【００５３】
複合命令Ｃ１は、プロセッサ・サイクル６の期間中に実行ステージ２２０に進むことはできない（つまり、複合命令Ｂ１が現在プロセッサ・サイクル６において実行ステージ２２０にあるからである）。さらに、プロセッサ・サイクル６では、命令Ｄ１は予約ステージへ送られる。たとえ命令Ｄ１がオペランド利用可能性に基づく依存性を持っていなくても、命令Ｄ１は、リソースハザード（複合命令Ｃ１はプロセッサ・サイクル７において実行ステージ２２０を使用している）に遭遇し、プロセッサ・サイクル８まで実行ステージ２２０に放出されないであろう。命令Ｄ１はＬＳＬオペレーションを有しておらず、したがって、実行論理回路２４０は実行ステージ２２０に先立って命令Ｄ１を部分的にあるいは全体的に実行しないかもしれない。
【００５４】
命令Ｅ１はデコードステージ２０４において処理され、命令Ｆ１はプロセッサ・サイクル６の期間中にフェッチステージ２０３によってフェッチされる。命令Ｅ１は、Ｒ２の内容を２だけ論理的に左にシフトし、その結果がＲ３に格納される１つの実行可能なＬＳＬオペレーションを有する。命令Ｅ１はＬＳＬオペレーションだけを有しているので、命令Ｅ１は予約ステージにおいて実行論理回路２４０によって全体的にもしくは完全に実行され得る。タイミング図４００に示されるように、予約ステージにいる間、命令Ｅ１はリソースハザードを経験する。
【００５５】
本発明の代替の実施形態では、プロセッサ１００は、命令Ｅ１が完全に実行論理回路２４０によって実行されるのを許可するために、命令Ｅ１を故意に予約ステージにストールし得る。この実例では、プロセッサ１００は、故意にＬＳＬ命令を遅らせることによって、プロセッサ１００が別の命令のために実行ステージ２２０を解放し得ることを決定してもよく、それにより、その処理効率を増加させる。
【００５６】
プロセッサ・サイクル７の期間では、複合命令Ｂ１の実行の結果は、書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。複合命令Ｂ１が実行ステージ２２０を去り、複合命令Ｃ１が実行ステージ２２０に入る。命令Ｄ１は、複合命令Ｃ１が現在そこにあるので、実行ステージ２２０に入ることができない。その結果、命令Ｄ１はリソースコンフリクトによりプロセッサ・サイクル７において予約ステージ内で待ち続ける。プロセッサ・サイクル７の期間中に命令Ｆ１はデコードステージ２０４において処理され、命令Ｅ１は予約ステージにおいて命令Ｄ１に加わる。命令Ｅ１が予約ステージ２２０にある間、プロセッサ１００は、プロセッサ・サイクル７の期間中にＬＳＬオペレーション５０７を実行するために実行論理回路２４０を使用する。
【００５７】
プロセッサ・サイクル８の期間中では、複合命令Ｃ１の実行の結果は、書き込みステージ２３０においてレジスタファイル２３５に書き込まれる。命令Ｄ１は実行ステージ２２０に入り、また命令Ｆ１は予約ステージに入る。プロセッサ・サイクル８の期間中では、命令Ｅ１は、実行論理回路２４０によって全体的に実行される。実行論理回路２４０が命令Ｅ１を全体的に実行したので、実行ステージ２２０に入らずにその結果がレジスタファイル２３５に書き込まれ得る。この実例では、命令Ｅ１の実行の結果は、プロセッサ・サイクル９の期間中に書き込みステージ２３０によってレジスタファイル２３５に書き込まれる。あるいは、もしプロセッサが、予約ステージからの直接的なレジスタファイル２３５の書込みを可能にするバイパス・メカニズムを有していないならば、その命令は実行ステージ２２０にロードされてもよい。命令はその実行をすべて完了しているので、その命令は書き込みステージに送られ、そこでその結果がレジスタファイル２３５に書き込まれ得る。
【００５８】
この実例となる例では、命令Ｅ１はその実行を完了し、その結果は、命令Ｄ１が実行し終える前に、書き込まれる。その結果は予約ステージによって書き込みステージ２３０に直接書き込まれ、それが今度はその結果をレジスタファイル２３５に書き込む。命令Ｅ１を実行ステージ２２０において実行する代わりに命令Ｅ１を実行するために実行論理回路２４０を利用することは、処理時間を節約する。命令Ｅ１の結果はプロセッサ・サイクル８の後に利用可能であり、実行のためにこの情報を必要とするあらゆる後続の命令に送り戻され得る。命令５００の典型的なグループを処理するために既知の技術を利用すると（それらが予約ステージにある間にそれら命令を実行することを含まない）、命令Ｅ１からの結果は、命令Ｄ１が実行ステージ２２０に入った後の４つのプロセッサ・サイクルまで利用できないであろう。３つのプロセッサ・サイクルが命令Ｄ１を実行するために必要とされ、さらに２つのプロセッサ・サイクルが複合命令Ｅ１を実行するために必要とされる。
【００５９】
図６のタイミング図６００を参照すると、命令Ｄ１はプロセッサ・サイクル９において実行し続け、プロセッサ・サイクル１０において実行を終える。命令Ｄ１の結果は、プロセッサ・サイクル１１の期間で書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。さらに、プロセッサ・サイクル１１においては、命令Ｆ１は実行ステージに入り、命令Ｆ１のための結果は、プロセッサ・サイクル１２において書き込みステージ２３０の期間中にレジスタファイル２３５に書き込まれる。
【００６０】
以前に説明されたように、様々な実施形態で説明されるような概念は単一のパイプラインプロセッサの中で実現され得る。あるいは、これらの概念は、２つ以上の下位パイプラインを有するプロセッサに適用され得る。プロセッサ１００中の実行論理回路２４０は、デコードステージ２０４の後且つ実行ステージ２２０に先立って命令を処理するパイプライン中の任意のステージとインタフェースし得る。以前に述べたように、もし後のパイプライン・ハザードに遭遇するかもしれないことをプロセッサ１００が予測したならば、プロセッサ１００は、ホールディング・ステージ２１０において部分的にあるいは全体的に実行することができる命令を故意にストールしてもよい。ホールディング・ステージ２１０内の命令を遅らせることは、実行論理回路２４０が命令を部分的にあるいは全体的に実行することを可能にし、それにより、後続の命令のための処理リソースを解放する。
【００６１】
本明細書における開示に関連して示された様々な実例となる論理ブロック、モジュール、回路、要素、および／またはコンポーネントは、汎用プロセッサ、デジタル信号プロセサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラム可能ゲート・アレイ（ＦＰＧＡ）若しくは他のプログラマブル・ロジック・コンポーネント、ディスクリートゲート若しくはトランジスタロジック、ディスクリートハードウェアコンポーネント、または、本明細書に開示された機能を実行するように設計された上記何れかの組み合わせを用いて実現又は実行され得る。汎用プロセッサはマイクロプロセッサであってもよいが、代わりに、従来のプロセッサ、コントローラ、マイクロコントローラ、又はステートマシンであってもよい。プロセッサは、例えばＤＳＰとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、ＤＳＰコアに接続された１つ又は複数のマイクロプロセッサ、又はこのような任意の構成である計算要素の組み合わせとして実現することも可能である。
【００６２】
特定の実施形態を本明細書において例証し説明したが、当業者は、同じ目的を達成するために意図されたあらゆる構成が、示された特定の実施形態の代わりに用い得、本発明が他の環境で他の応用を有することを理解する。この出願は、本発明のいかなる適応品あるいは変形例もカバーするように意図される。次のクレームは、発明の範囲を本明細書に記述された特定の実施形態に制限するように意図されたものではない。
【図１】
2010522940.tif 000003
【図２】
2010522940.tif 000004
【図３】
2010522940.tif 000005
【図４】
2010522940.tif 000006
【図５】
2010522940.tif 000007
【図６】
2010522940.tif 000008
【国際調査報告】
2010522940.tif 000009
2010522940.tif 000010