【誤訳訂正書】
【提出日】平成24年3月19日(2012.3.19)
【誤訳訂正１】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
プロセッサの複数の機能ユニットへ複数の発行ポートを通じて分散される命令グループを形成する方法であって、コンピュータが、
複数のプールを提供するステップであって、各プールは、１以上の発行ポートに関連付けられており、且つ、少なくとも１つの発行ポートを共有する少なくとも第１のプール及び第２のプールを含み、前記第１のプールは命令を格納する少なくとも１つの命令空間を有し且つ前記少なくとも１つの発行ポートに関連付けられ、及び、前記第２のプールは前記第１のプールよりも多い数の命令空間を有し且つ前記少なくとも１つの発行ポートに関連付けられ、命令は、利用できる命令空間を占有するために所望のプールへ割り当てられうる、前記提供するステップと、
命令の種類に従って複数のプールに命令を格納するステップであって、前記第１のプールに命令を格納することに応答して、前記第２のプールの命令空間の数を減少させる、前記格納するステップと、
前記格納された命令の集合から命令グループを生成するステップと、
前記プロセッサの前記複数の機能ユニットへ前記複数の発行ポートを通じて前記生成された命令グループを分散するステップと
を実行することを含む、前記方法。
【請求項２】
前記複数のプールは、前記第１のプールが前記第２のプールの上位に位置するように階層アーキテクチャを形成する、請求項１に記載の方法。
【請求項３】
前記第１のプールは、前記第２のプールよりも少ない数の発行ポートに関連付けられている、請求項１又は２に記載の方法。
【請求項４】
前記提供するステップが、
前記複数のプール内各々であと何個の命令を格納できるかを示すカウンタ値を提供するステップ
を含み、
前記格納するステップが、
各カウンタ値を所定の閾値と比較して、前記第１のプール及び前記第２のプールが命令を受け入れることができるかを確認するステップと、
命令が前記第１のプールに格納される毎に、前記第１のプールのカウンタ値をデクリメントするステップと
を含む、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記コンピュータが、
前記カウンタ値を前記プールが格納できる命令の最大数に初期化するステップと、
命令が前記プールに格納される毎に、前記カウンタ値をデクリメントするステップと、
前記カウンタ値をゼロの閾値と比較するステップと
をさらに実行することを含む、請求項４に記載の方法。
【請求項６】
前記コンピュータが、
前記複数のプールにおける少なくとも１つの前記所定の最大数を、１つのプールに関連付けられた発行ポートによりおよび／または前記１つのプールに関連付けられた命令の種類により決定される前記１つのプールについての絶対最大数未満に制約するステップ
をさらに実行することを含む、請求項５に記載の方法。
【請求項７】
前記コンピュータが、
候補命令の待機リストを形成するステップと、
前記待機リストから候補命令を選択するステップと、
前記候補命令を前記複数のプールのうちの１つに格納するステップと
をさらに実行することを含む、請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記待機リスト内の候補命令は、各々独立して実行可能である、請求項７に記載の方法。
【請求項９】
前記コンピュータが、
それまでに格納された候補命令により全ての依存性が満たされた後に、候補命令を前記待機リストへ付加するステップ
をさらに実行することを含む、請求項８に記載の方法。
【請求項１０】
前記コンピュータが、
対象コードのセクションを、目標コード命令のブロックに変換するステップと、
前記目標コード命令のブロックから１以上の命令を前記待機リストへ選択的に付加するステップと
をさらに実行することを含む、請求項９に記載の方法。
【請求項１１】
前記コンピュータが、
前記プールから前記格納された命令を順次取り出して前記命令グループを生成するステップ
をさらに実行することを含む、請求項１〜１０のいずれか一項に記載の方法。
【請求項１２】
前記コンピュータが、
前記複数のプールに命令の所定の最大数が格納された場合か、または前記複数のプールにさらなる命令を格納することが適切でない場合に前記命令グループを生成するステップ
をさらに実行することを含む、請求項１〜１１のいずれか一項に記載の方法。
【請求項１３】
前記コンピュータが、
前記格納された命令の組み合わせをテンプレート集合に対してチェックするステップ
をさらに実行することを含む、請求項１〜１２のいずれか一項に記載の方法。
【請求項１４】
前記コンピュータが、
前記複数のプールに既に格納されたゼロまたは１以上の命令と共に、前記複数のプールに格納すべき命令の候補組み合わせを形成するステップと、
前記プロセッサの複数の機能ユニット内において有効に実行可能な命令組み合わせを表すテンプレート集合に対して、前記候補組み合わせをチェックするステップと
をさらに実行することを含む、請求項１〜１３のいずれか一項に記載の方法。
【請求項１５】
前記複数のプールは、少なくとも、メモリ、浮動小数点、および整数の種類の命令を供給する発行ポートに関連付けられている、請求項１〜１４のいずれか一項に記載の方法。
【請求項１６】
前記複数のプールは、少なくとも、メモリ、浮動小数点、整数、および分岐の種類の命令を供給する発行ポートに関連付けられている、請求項１４に記載の方法。
【請求項１７】
前記第１のプールが狭域プールであり、前記第２のプールが広域プールである、請求項１〜１６のいずれか一項に記載の方法。
【請求項１８】
目標プロセッサの複数の機能ユニットへ複数の発行ポートを通じて分散される目標命令の命令グループを形成する方法であって、コンピュータが、
前記対象命令から目標命令のブロックを生成するステップと、
前記目標命令のブロックの集合を複数のプールに格納するステップであって、各プールは、１以上の発行ポートに関連付けられており、且つ、少なくとも１つの発行ポートを共有する少なくとも狭域プール及び広域プールを含み、前記狭域プールは命令を格納する少なくとも１つの命令空間を有し且つ前記少なくとも１つの発行ポートに関連付けられ、及び、前記広域プールは前記狭域プールよりも多い数の命令空間を有し且つ前記少なくとも１つの発行ポートに関連付けられ、命令は、利用できる命令空間を占有するために所望のプールへ割り当てられることができ、前記目標命令のブロックの前記集合の１つを前記狭域プールの１つに格納することに応答して、前記広域プールの命令空間の数を減少させる、前記格納するステップと、
前記格納された目標命令の集合から命令グループを形成するステップと、
前記目標プロセッサの前記複数の機能ユニットへ前記複数の発行ポートを通じて前記生成された命令グループを分散するステップと
を実行することを含む、前記方法。
【請求項１９】
前記複数のプールは、前記狭域プールが前記広域プールの上位に位置するように階層アーキテクチャを形成する、請求項１８に記載の方法。
【請求項２０】
前記コンピュータが、
前記狭域プール及び前記広域プールの両方に格納可能な目標命令を、狭域プールに優先して広域プールに格納するステップ
をさらに実行することを含む、請求項１８又は１９に記載の方法。
【請求項２１】
前記コンピュータが、
前記狭域プール及び前記広域プール内各々であと何個の命令を格納できるかを示すカウンタ値を提供するステップ
をさらに実行することを含む、請求項１８〜２０のいずれか一項に記載の方法。
【請求項２２】
前記コンピュータが、
前記狭域プール及び前記広域プールのいずれかに命令が格納される毎に、前記狭域プール及び前記広域プールのカウンタ値をデクリメントするステップ
をさらに実行することを含む、請求項１８〜２１のいずれか一項に記載の方法。
【請求項２３】
前記コンピュータが、
前記対象コードを複数のブロックに分割して、対象コードの現行ブロックを選択するステップと、
前記対象コードの現行ブロックを、動的バイナリ変換を通じて目標コードの現行ブロックに変換し、該目標コードの現行ブロック内に含まれる目標命令を命令グループ内に準備するステップと、
前記命令グループを使用して前記目標コードの現行ブロックを実行するとともに、次なる対象コードの現行ブロックを決定するステップと、
前記次なる対象コードの現行ブロックに関して、前記変換と前記実行とを繰り返すステップと
をさらに実行することを含む、請求項１８〜２２のいずれか一項に記載の方法。
【請求項２４】
対象コードを目標プロセッサにより実行可能な目標コードに変換するように構成されたトランスレータ装置であって、
前記目標プロセッサの複数の機能ユニットへ複数の発行ポートを通じて分散される目標コードの命令グループを形成するように構成されたトランスレータユニットを備えており、前記トランスレータユニットは請求項１〜２３のいずれか一項に記載の方法を実行するように構成されている、前記トランスレータ装置。
【請求項２５】
コンピュータに、請求項１〜２３のいずれか一項に記載の方法の各ステップを実行させるコンピュータ・プログラム。
【誤訳訂正２】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】複数の発行ポートを有するプロセッサにおける命令グループを形成する方法、並びに、その装置及びコンピュータ・プログラム
【技術分野】
【０００１】
本発明は、概してコンピュータとコンピュータソフトウェアの分野、特に、例えばプログラムコードを変換するコードトランスレータ、エミュレータ、およびアクセルレータにおいて有用なプログラムコード変換の方法と装置に関する。
【０００２】
埋込み型及び非埋込み型のＣＰＵにおいては、命令集合アーキテクチャ（ＩＳＡ）が支配的であり、そのために、性能を「加速」できるか、または一層良いコスト／性能の利点を提供する種々の有能なプロセッサへ「変換」できる（ただしそれらのプロセッサが関連するソフトウェアへ透過的にアクセスできるのを条件として）多数のソフトウェアが存在する。支配的なＣＰＵアーキテクチャも見出され、それらのアーキテクチャは、適時に、それらのＩＳＡへロックされ、性能またはマーケットの範囲において展開できない。そのようなＣＰＵは、ソフトウェア指向のプロセッサ・コ・アーキテクチャから有利である。
【背景技術】
【０００３】
そのような加速、変換およびコーアーキテクチャの機能を容易にするプログラムコード変換の方法と装置は、たとえば、ＰＣＴ出願公開ＷＯ００／２２５２１および他の出願において開示される。
【０００４】
プログラムコード変換の実施は、対象プロセッサ上での対象プログラムの固有の実行と比べて、この変換プロセスにおいて必然的に経費をもたらす。
多くのプロセッサは、専用浮動少数点演算装置のような特定のタスクを実施するために、専用の機能ユニットを採用する。全てのプロセッサは、有限の資源を有し、および特定の機能ユニットで実行できる命令の種類に関して制約を有するという問題が生じる。さらにパイプラインプロセッサは、単一のクロックサイクルで同時に２個以上の命令で作動できる。そのようなプロセッサは、１サイクルで複数の命令を実行できる。パイプラインプロセッサにおいて１つのグループとして共に実行するために、複数の命令を作成する際に問題が生じる。
【０００５】
特定の例として、Intel (登録商標)Itanium (登録商標) プロセッサアーキテクチャは、発行ポートの集合を採用し、それらのポートを通して、命令が、プロセッサの機能実行ユニットへ発行される。本発明の背景として、たとえば、www.intel.com から入手できる２００１年１１月付けの文書２４５４７３−００３、「ソフトウェア最適化のためのIntel Itanium プロセッサ参照マニュアル（Intel Itanium Processor Reference Manual for Software Optimization）」が優先されるが、そこにおける３．０章が、Itanium アーキテクチャについての機能ユニットと発行ルールを検討している。発行ルールは、各種機能ユニットにより実行される命令の種類、数、クラスを決定する。Itanium （登録商標）プロセッサは、十分にパイプライン化された、少なくとも、整数、メモリ、浮動小数点、および分岐の種類（Ｉ、Ｍ、ＦまたはＢ型）の機能ユニットを提供するので、それぞれの機能ユニットが、クロックサイクル毎に１つの新しい命令を受け入れ可能である（一定の除外付きで）。
【０００６】
命令グループが、その種類の命令用の実行ユニットがあるよりも多くの命令を含む場合、分割発行が生じ、それにより、プロセッサは、対応するユニットを利用することができるまで、１回以上のクロックサイクルの間、機能を停止する。機能停止は、一部のプロセッサ資源または機能ユニットが不必要に使用されないままであるので効率が悪い。逆に、機能ユニットの細区分不足も効率が悪く、プロセッサの潜在的資源を有効に利用できない命令のグループを生成する。
【０００７】
最近では、Intel (登録商標)Itanium (登録商標) 2 プロセッサを入手できるようになっていて、そのプロセッサは、多数の機能ユニットを有し、かつサイクル毎に一層多くの命令をパイプライン化できる。このために、有効な命令割当を達成することが益々難しくなっている。２００４年５月付けの文書２５１１１０−００３、「ソフトウェア開発と最適化のためのIntel Itanium 2 プロセッサ参照マニュアル（Intel Itanium 2 Processor Reference Manual for Software Development and Optimization）」が参照され、そこにおける３．０章が、Itanium 2 プロセッサの機能ユニットと発行規則を説明している。
【０００８】
プログラムコード変換、および特に動的バイナリ変換（dynamic binary translation）の分野において、実行可能なコードが作動時に自動的に発生する。発生コードを改良するために、特に命令グループを改良または調整するために、人間による介在または見直しの機会は全く無い。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、プログラムコード変換の性能を改良することにある。好ましい目的は、動的バイナリ変換の性能を改良することにある。本発明の他の好ましい目的は、単一のプロセッササイクルにおいて分散される複数の命令を含む命令グループを作成するときの効率を改良することにある。特に、パイプラインプロセッサの複数の機能ユニットへ複数の発行ポートを通じて分散される命令を作成する有効な方法を提供することが望ましい。さらに、好ましい目的は、プロセッサの複数の機能ユニットを有効に利用する命令グループを作成することにある。
【課題を解決するための手段】
【００１０】
本発明によれば、添付の特許請求の範囲に記載される装置と方法が提供される。本発明の好ましい特徴は、特許請求の範囲および以下の詳細な説明から明らかとなる。
１つの態様において、複数の発行ポートを通じてプロセッサの複数の機能ユニットへ分散される命令グループを形成する方法が提供される。複数のプールの各々は、１以上の発行ポートに関連付けられ、かつ少なくとも１つの発行ポートを共有する少なくとも第１及び第２のプールを含む。命令は、命令の種類に従ってプールに格納され、命令が第１のプールへ格納されると、第２のプールの占有が減少する。次に、命令グループが、格納された命令から生成される。
【００１１】
他の態様において、複数の発行ポートを通じて目標プロセッサの複数の機能ユニットへ分散される目標命令の命令グループを、対象プロセッサにより実行可能な対象命令に基づき作成する方法が提供される。この方法は、対象命令から目標命令のブロックを生成することを含む。目標命令の集合が、複数のプールに格納され、各プールは、従属する広域プールよりも少ない命令ポートに関連付けられた上位の狭域プールを有するオーバーラップ階層構造において、発行ポートの部分集合に関連付けられる。従属する広域プールの占有は、階層構造において目標命令の集合の１つを上位の狭域プールに格納することに応答して減少する。命令グループは、格納された目標命令の集合から形成される。
【００１２】
本発明は、上記方法の全てを実施するように構成された計算プラットフォームまで包含する。更に本発明は、上記方法の全てを実施するように構成されたトランスレータ装置、特に動的バイナリ変換まで包含する。
【００１３】
一実施態様において、本発明はＡＳＩＣ（Application-Specific Integrated Circuit ）のような専用ハードウェアにおいて提供される。また本発明は、命令を含むコンピュータ読取可能な記憶媒体まで包含し、それらの命令は、計算プラットフォームにより実行されることにより上記方法の全てを実施する。記憶媒体は、適切には、固体媒体（メモリチップ）、光ディスクまたは磁気ディスクのような可搬型記憶装置である。この媒体は、ネットワーク記憶装置、サーバ、または卓上コンピュータにおけるハードディスクのような非携帯型記憶装置でもよい。この媒体は、さらに、インターネットからダウンロードするように、伝送信号に符号化してもよい。
【発明を実施するための最良の形態】
【００１４】
以下の説明は、当業者が本発明を形成及び使用するために提供され、本発明者らによって企図された、本発明を実行するための最良の形態を示す。しかし、種々の変形が可能であることを当業者は理解し得る。本発明の一般的な原理は、改良されたプログラム・コード変換の方法および装置を提供するように本明細書で定義される。
【００１５】
以下の用語において、対象プログラムは、対象プロセッサを含む対象計算プラットフォーム上で実行するように意図される。目標プロセッサを含む目標計算プラットフォームは、動的プログラムコード変換を実施するトランスレータを通して対象プロセッサを実行するのに使用される。トランスレータは、目標コードが目標計算プラットフォーム上で実行可能であるように、対象コードから目標コードへのコード変換を実施する。
【００１６】
図１は、複数の目標レジスタ１５を有する目標プロセッサ１３と、複数のソフトウェア構成要素１７、１９、２０、２１、２７を格納するメモリ１８とを備える代表的な目標計算プラットフォームを図示する。ソフトウェア構成要素は、オペレーティングシステム２０、対象コード１７、トランスレータコード１９、および変換された目標コード２１を含む。
【００１７】
一実施態様において、トランスレータコード１９は、対象命令集合アーキテクチャ（ＩＳＡ）の対象コードを、最適化には関係なく、他のＩＳＡの変換された目標コードに変換するエミュレータである。他の実施態様において、トランスレータ１９は、プログラムコード最適化を実施することにより、対象コードを、同一のＩＳＡそれぞれの目標コードに変換するアクセルレータとして機能する。
【００１８】
トランスレータ１９、即ちトランスレータを実現する原始コードのコンパイルバージョン、および変換コード２１、即ちトランスレータ１９により生成される対象コード１７のトランスレーションは、一般的にはマイクロプロセッサまたは他の適切なコンピュータである目標プロセッサ１３で稼動するオペレーティングシステム２０と連係して実行する。
【００１９】
図１に図示される構造は単なる代表例であり、例えば本発明のソフトウェア、方法およびプロセスは、オペレーティングシステム内またはその下にあるコードで実現してもよいことを理解し得る。対象コード１７、トランスレータコード１９、オペレーティングシステム２０、およびメモリ１８の記憶機構は、当業者であれば、いずれの型式でもよいことを理解し得る。
【００２０】
図１に従う装置において、プログラムコード変換は、目標コード２１が実行される稼動時に、好ましくは動的に実施される。トランスレータ１９は、変換されたプログラム２１に従って実行する。トランスレータ１９は好ましくは、目標アーキテクチャ用にコンパイルされたアプリケーションとして採用される。対象プログラム１７は、目標アーキテクチャ１４で実行するために、稼動時にトランスレータ１９により変換される。
【００２１】
トランスレータ１９を通して対象プログラム１７を実行することは、インタリーブされた態様で実行する２つの異なる種類のコード、すなわちトランスレータコード１９および目標コード２１に関与する。トランスレータコード１９は、トランスレータ１９の高レベル原始コード実現に基づいて稼動時の前にコンパイラなどにより発生される。対照的に、目標コード２１は、変換が行われているプログラムの格納された対象コード１７に基づいて、稼動時全体を通して、トランスレータコード１９により発生される。
【００２２】
対象プログラム１７は、対象プロセッサ（図示されない）で稼動するように意図される。一実施態様において、トランスレータ１９は、エミュレータとして機能する。すなわち、トランスレータ１９は、対象プロセッサをエミュレートする一方、対象プロセッサ１３上で目標コード２１として対象プログラム１７を実際に実行する。好ましい実施態様において、少なくとも１つの広域レジスタストア２７が設けられる（対象レジスタバンク２７または抽象レジスタバンク２７とも呼ばれる）。多プロセッサ環境において、任意選択的に、１以上の抽象レジスタバンク２７が、対象プロセッサのアーキテクチャに従って設けられる。対象プロセッサ状態の表示は、トランスレータ１９の構成要素と目標コード２１により提供される。すなわち、トランスレータ１９は、変数および／またはオブジェクトのような種々の明示的なプログラミング言語デバイスで、対象プロセッサ状態を格納する。トランスレータ１９をコンパイルするのに使用されるコンパイラは、どのようにして、その状態と演算が目標コードで実現されるかを判断する。これに比べて、目標コード２１は、対象プロセッサ状態を、目標コード２１の目標命令により操作される目標レジスタ１５と記憶場所１８において黙示的に提供する。たとえば、低レベル広域レジスタストア２７は、単に、割当てられたメモリの領域である。しかしながら、トランスレータ１９の原始コードにおいて、広域レジスタストア２７は、より高いレベルでアクセスおよび操作できるデータアレイまたはオブジェクトである。
【００２３】
図２は、本発明の好ましい実施態様に従ってプログラムコード変換において採用される実行制御を図示する概略フロー図である。
図２に示されるように、制御は、最初に、トランスレータ制御ループ１９０でなされる。ステップ２０１において、制御ループ１９０が、トランスレータ１９のコード発生機能１９２を呼出し、そのトランスレータは、対象コード１７のブロックを、変換されるコード２１の対応するブロックに変換する。ついで、ステップ２０２において、変換されたコード２１のブロックは、目標プロセッサ１３で実行される。１つの好ましい実施態様において、変換されたコード２１のそれぞれのブロックの最後は、制御を制御ループ２０１へ戻す命令を含む。言い換えれば、対象コードを変換および実行するそれらのステップは、対象プログラム１７のそれらの部分が、順に変換され、ついで実行されるように、インターレースされる。
【００２４】
用語「基本ブロック」は、当業者に周知である。基本ブロックは、正確な１つの入口点と正確な１つの出口点を有するコードのセクションであり、そのセクションによりブロックコードが単一の制御パスへ限定される。この理由のために、基本ブロックは、制御流れの有用な基本的なユニットである。適切には、トランスレータ１９が、対象コード１７を複数の基本ブロックに分割し、そこにおいて、それぞれの基本ブロックは、唯一の入口点における第１の命令と唯一の出口点における最後の命令との間の命令の順次集合である（飛び越し、呼出し、または分岐の命令のような）。トランスレータは、これらの基本ブロックの１つのみ（ブロックモード）を選択してもよいし、または基本ブロックのグループ（グループブロックモード）を選択してもよい。グループブロックは適切には、単一ユニットとして共に処理される２個以上の基本ブロックから成る。さらに、トランスレータは、対象コードの同一の基本ブロックを表示するが、異なる入口条件の下での等ブロック（等ブロックモード）を形成する。
【００２５】
この好ましい実施態様において、中間表示（ＩＲ）のツリーは、元の対象プログラム１７から目標コード２１を発生するプロセスの一部分として、対象命令シーケンスに基づいて発生される。ＩＲツリーは、対象プログラムにより、計算された表現および実施された演算の抽象表示である。その後、目標コード２１は、ＩＲツリーに基づいて発生される。ＩＲノードの収集は、実際には指向される非周期的グラフ（ＤＡＧ）であるが、口語的に「ツリー」と呼ばれる。
【００２６】
当業者には分かるように、一実施態様において、トランスレータ１９は、Ｃ＋＋のようなオブジェクト指向プログラミング言語を使用して実現される。たとえば、ＩＲノードは、Ｃ＋＋オブジェクトとして実現され、および他のノードへの参照は、これらの他のノードに対応するＣ＋＋オブジェクトへのＣ＋＋参照として実現される。したがって、ＩＲツリーは、種々の互いの参照を含むＩＲノード・オブジェクトの収集として実現される。
【００２７】
さらに、本実施形態の説明では、ＩＲ生成は、対象プログラム１７の実行が意図されている、対象アーキテクチャの特定のフィーチャに対応する抽象レジスタ定義セットを使用する。例えば、対象アーキテクチャ上の各物理レジスタ（「対象レジスタ」）に関する固有の抽象レジスタ定義が存在する。このため、トランスレータにおける抽象レジスタ定義は、ＩＲノード・オブジェクトへのリファレンスを含むＣ＋＋オブジェクト（すなわち、ＩＲツリー）として実装可能である。抽象レジスタ定義セットによって参照されるすべてのＩＲツリーの集合は、作業ＩＲフォレスト（複数の抽象レジスタ・ルートを含み、その各々がＩＲツリーを参照するため、「フォレスト」である）と呼ばれる。それらのＩＲツリー、およびその他の工程は、好ましくは、トランスレータ・コード生成ファンクション１９２の一部を形成する。
【００２８】
図３は、本発明の好ましい実施態様におけるプログラムコード変換に従う、対象プログラムにおける命令と目標プログラムにおける命令との間の関係を示す概略図である。
この例では、対象命令Ｓ１〜Ｓ３が、機能的に均等な目標命令Ｔ１〜Ｔ３をもたらす。対象命令Ｓ１は、デッド・コード削除最適化などによって除去されており、生成された目標コード内において対応物を有さない。対象命令Ｓ２は、１つの均等な目標命令Ｔ３をもたらす。これに対して、対象命令Ｓ３は、２つの目標命令Ｔ１，Ｔ２をもたらす。目標コード命令と対象コード命令との間に、１対０、１対１、１対多、または多対１の関係が、存在可能である。
【００２９】
図３に示すように、別の一般的に使用される最適化は、目標コード中の命令シーケンスが、対象コードの中の元のシーケンスと均等でないコード再スケジューリングを実行することである。ここでは、第２の対象命令Ｓ２は、第３の目標命令Ｔ３として再スケジューリングされている。
【００３０】
図４は、Itanium (登録商標) 2 プロセッサのような、代表的なパイプライン化されたプロセッサのコアパイプラインを示す。コアパイプラインは、命令バッファ（ＩＢ）により分離される、フロントエンド（ＦＥ）とバックエンド（ＢＥ）に分離される。フロントエンドＦＥは、サイクル毎に６個の命令を取り出す。同様に、バックエンドＢＥは、サイクル毎に６個の命令を発行する。このために、Itanium （登録商標）2 プロセッサは、サイクル毎に６個の命令を発行するものとみなされる。これらの６個の命令は共に、命令グループと名づけられる。
【００３１】
図５は、代表的なIntel (登録商標)Itanium (登録商標) 2 プロセッサ内の機能実行ユニットを示す概略図である。種々のタイプの多数の機能ユニット６２０がある。これにより、命令の多くの異なる組み合わせを、サイクル毎に発行できる。しかしながら、６個の命令のみしかサイクル毎に発行できないので、プロセッサの機能ユニット６２０の一部分のみが、サイクル毎に使用される。
【００３２】
Itanium (登録商標) 2 プロセッサは、一般目的シフト命令と他の特別シフト命令のために、６個の一般目的の算術と論理のユニット（ＡＬＵ  ０、１、２、３、４、５）、２個の整数ユニット（Ｉ０、Ｉ１）、および１つのシフトユニット（Ｉｓｈｉｆｔ）を提供する。
【００３３】
データキャッシュユニット（ＤＣＵ  ０〜４）は、４個のメモリポートを提供する。メモリポートのうち２個は、一般にロード演算に使用され、および他の２個は、格納演算に通常使用される。
【００３４】
６個のマルチメディア機能ユニット（ＰＡＬＵ  ０〜５）、２個の並列シフトユニット（ＰＳＭＵ  ０、１）、１つの並列乗算ユニット（ＰＭＵＬ）、および１つの母集団カウントユニット（ＰＯＰＣＮＴ）がある。これらは、マルチメディア、並列乗算および特定のＰＯＰＣＮＴ命令の種類を取り扱う。
【００３５】
浮動小数点乗加算を実行する２個のＦＭＡＣユニット（ＦＭＡＣ  ０，１）、および他の浮動小数点演算を実行する２個のＦＭＩＳＣユニット（ＦＭＩＳＣ  １，０）から成る４個の浮動小数点機能ユニットがある。
【００３６】
３個の分岐ユニット（Ｂ  ０〜２）があるので、３個の分岐をサイクル毎に実行できる。
機能ユニット６２０のそれぞれは、パイプライン化され、かつクロックサイクル毎に１つの新しい命令を受け入れることができる。しかしながら、特定のサイクル内で実行できる、それぞれの種類の命令数に関して限界がある。
【００３７】
図６は、Intel (登録商標)Itanium (登録商標) 2 プロセッサのようなパイプライン化されたプロセッサ内における命令分散の概略全体図を示す。
図６に示されるように、それぞれの命令６００は、３個の命令のバンドル６０３の一部分を形成する。６個の命令（すなわち、２個のバンドル）は共に、命令グループ６０６を形成する。命令６００は、命令キャッシュ６０９に格納される。フロントエンドＦＥは、バンドル回転として知られるプロセスにより、サイクル毎に命令キャッシュ６０９からゼロか、１つかまたは２つのバンドル６０３を取り出す。
【００３８】
それぞれの命令６００は、発行ポート６１０を通して機能ユニット６２０の１つに割り当てられる。機能ユニット６２０よりも少ない発行ポート６１０がある。図６に示されるように、この例において、１１個の発行ポートと２７個の機能ユニットがある。ポートＭ０、Ｍ１、Ｍ２、Ｍ３、Ｉ０、Ｉ１、Ｆ０とＦ１は、それぞれ非分岐命令用である。ポートＢ０、Ｂ１、およびＢ２は、分岐命令用である。分散は、命令６００を機能ユニット６２０へ割当てるプロセスであり、かつ命令発行ポート６１０の所定のマッピングに依存する。
【００３９】
それぞれの命令グループが、発行ポートへの割当のための発行規則を先ず満たさなければならないし、その規則は、好都合にはテンプレートとして表示される。すなわち、それぞれの命令グループ内（およびそれぞれのバンドル内の）命令の数、種類および位置は、テンプレートの所定の集合の１つに合致しなければならない。テンプレートに合致しないグループは、拒否される。通常、例外または故障が報告されて、実行が終了させられる。
【００４０】
発行規則が合致し、かつ有効なテンプレートが示されると仮定すると、命令は、ついで、発行ポート６１０へ割り当てられる。
命令は、命令の種類（たとえば、ＡＬＵ、メモリ、整数など）に基づいて発生ポートの部分集合へマッピングされる。ついで、命令グループ内の命令の位置に応じて、その命令は、部分集合内の特定の発行ポートへマッピングされる。一例として、Ａ型命令は、全てのＭとＩのポート上で発行できる一方、Ｉ型命令は、Ｉポートのみに発行できる。さらに、Ｉポートは非対称であり、そこにおいて、一部のＩ型命令は、ポートＩ０上でのみ発行できる。さらに、Ｍポートは、多くの非対称部分を有し、そこにおいて、Ｍ型命令は、メモリポートの１つまたは２つ上でのみ発行できる。
【００４１】
Itanium （登録商標）アーキテクチャは、３個の４１ビット命令６００と５ビットテンプレート領域とを含む各バンドル６０３毎に１２８ビット符号化を使用する。このテンプレートビットは、プロセッサが命令を復号化および経路指定するのに役立つ。また、テンプレートビットは、それぞれの命令グループ６０６の端部をマークする停止の位置を示す。
【００４２】
命令６００は、分散規則の集合に従って発行ポート６１０から機能ユニット６２０へ分散される。異なる発行ポートの種類毎に異なる規則がある。命令を機能ユニットへ分散するとき、プロセッサは、１つまたは２つのバンドル（３つの命令のそれぞれ）を同時に見る。
【００４３】
バンドルにおける命令のそれぞれが発行されたとき、バンドル回転が生じて、新しい命令のバンドルを、現在検討している２バンドル窓に入れる。１つあるいは２つのバンドルが回転可能である。バンドルが所期通りに完了しない場合、プロセッサは、そのバンドル６０３における未発行命令を、次のサイクルまで機能停止する。このようにして、プロセッサ資源は、結局は、機能停止された命令を実行するために利用できるようになる。プロセッサハードウェアは、機能停止を避けるために、命令を再順序付けしない。
【００４４】
発行規則（テンプレート）および分散規則を満たす命令グループを、可能のときは何時でも、作成することが望ましい。特に、機能停止を最小にすることが望ましい。また命令が、プロセッサの利用できる資源を有効に利用できる場合、コードグループを生成することが望ましい。
【００４５】
さらに、プログラムコード変換、および特に動的バイナリ変換に関して、以下で詳細に説明するように、命令グループを自動的に生成する機構についての強いニーズがある。
図７は、命令グループを作成する好ましい機構を示す。図７に示されるように、複数のプール７００が提供される。それぞれのプール７００は、１以上の命令６００を含むように配列される。好都合には、それぞれのプール７００は、１以上の命令空間７０１を有する。
【００４６】
プール７００のそれぞれは、１以上の発行ポート６１０に関連付けられる。図７の例において、プールＭ０は、発行ポートＭ０に関連付けられる一方、プールＦは、発行ポートＦ０および発行ポートＦ１に関連付けられる。同様に、プールＭ０＿３は、ポートＭ０〜Ｍ３のそれぞれに関連付けられる一方、プールＡは、任意のＭまたはＩのポート（Ｍ０、Ｍ１、Ｍ２、Ｍ３、Ｉ０またはＩ１）を対象にする。
【００４７】
これらのプールは、全体または少なくとも部分的にオーバーラップする。すなわち、プール７００の少なくとも２個は、特定の発行ポート６１０を共有する。一例として、第１のプールＭ０と第２のプールＭ０＿３は、発行ポートＭ０を共有する。
【００４８】
プール７００は、階層構造を形成する。この実施態様において、その構造は、第１から第４までのレベル７１１、７１２、７１３、７１４を有する。この階層構造において、幾つかの発行ポート６１０に関係する広域プール（たとえば、プールＭ０＿３）は、より少ない発行ポートに関係する狭域プール（たとえば、プールＭ０）へ従属する。狭域プール（Ｍ０）と広域プール（Ｍ０＿３）は、少なくとも１つの発行ポート（Ｍ０）を共有する。
【００４９】
他の例として、プールＩ０は、プールＩ０＿１よりも狭く、かつその上位にあり、ついでプールＩ０＿１がプールＡの上位にある。これらのプールＩ０、Ｉ０＿１、Ａは、少なくともポートＩ０を共有する。
【００５０】
図８は、本発明の好ましい実施態様に従う命令グループ作成の概略全体図である。
図８に示されるように、対象プログラム１７は、目標コード２１に変換される（すなわち、図１のトランスレータ１９により）。実行可能な目標コード命令６００は待機リスト（ready list）８２０に作成される。待機リスト８２０は、実行される準備ができている目標コード命令を含む。理想的には、待機リスト８２０における命令６００は、待機リストにおいて、それぞれの命令が、他の命令と関係なく実行できるという点で、それぞれ独立している。
【００５１】
この好ましい実施態様において、目標コード命令は、一旦依存性が除かれると、待機リスト内に入れられる。すなわち、目標コード命令２１は、目標コード２１において他の命令に依存しているかが調べられる。一例として、命令ＬＯＡＤ  Ｒ１、０（定数０を有するロードレジスタＲ１）は依存性を有しない一方、この場合に、次のＰＵＳＨ  Ｒ１（レジスタＲ１の内容をスタックへプッシュする）は、ＬＯＡＤ命令に依存する。適切には、ＰＵＳＨ命令は、ＬＯＡＤが置かれた後でのみ待機リストへ加えられる。
【００５２】
図７に図示されるように、命令は、待機リスト８２０から取り出され、ついで階層プール構造７００に格納される。並列実行可能な命令グループ（たとえば、２個のバンドルで６個の命令の集合）は、ついで、格納された命令から形成される。図６を参照して上述したように、複数の発行ポート６１０を通じて複数の機構ユニット６２０へ分散されるために、命令グループ６０６は、命令キャッシュ６０９へ加えられる準備ができる。通常、作成された命令グループ６０６は、メモリ１８内などに先ず格納される。適切には、格納された命令グループは、完全な目標コードブロックにおいて後で実行される。
【００５３】
図９は、本発明の好ましい実施態様におけるプログラムコード変換、特に動的バイナリ変換中に採用される、命令グループを作成する好ましい方法の概略全体図である。
候補命令８２１の待機リスト８２０はステップ９０１において提供される。第１の候補命令８２１は、ステップ９０２において待機リスト８２０から選択される。一実施態様において、候補命令は、待機リスト内の経年数（たとえば、そのリストにおける最も古い命令）に基づいて選択される。他の実施態様において、その命令は、当該命令を実行するのに要する時間に基づいて選択される。その命令を実行するのに要する時間(latency) （すなわちexecution time）は、１〜２４サイクルの範囲である。キャッシュを欠くメモリからのロード、およびチェック命令（推測に使用される）は、５０サイクルを超えることがある。このために、好ましい例において、実行の最も長くかかる命令が、少ないクロックサイクルで実行する命令に優先して選択される。他の特に好ましい実施態様において、命令は、その命令、およびその命令に従属する命令を実行するのに要する累積時間に基づいて選択される（たとえば、ＬＯＡＤ命令は、累積時間を有し、その命令を実行するのに要する時間も、従属ＰＵＳＨ命令の上記命令を実行に要する時間を含む）。
【００５４】
ステップ９０３において、選択された候補命令８２１を、プール階層における対応する利用可能なプール７００に格納する試みがなされる。最初に、命令の種類、およびその命令用の対応する発行ポート（単数あるいは複数）に従って、１以上の対応するプールの集合が決められる。たとえば、「付加（add）」命令は、発行ポートＭ０〜３またはＩ０〜１のいずれかを通して発行でき、およびこれらの発行ポートのいずれかに関係する任意のプールに格納されるのが適切である。ついで、この所望のプールは、対応するプールのその集合から選択される。図７の代表的な構造において、「付加」命令用の所望のプールは、対応するプールＭ０、Ｍ２、Ｉ０、Ｍ０＿１、Ｍ２＿３、Ｉ０＿１、Ｍ０＿３、またはＡの集合の中から選択される。対照的に、「Ｆ取得」命令は、ポートＩ０を通してのみ発行でき、およびそのポートに関連付けられたプールに格納されなければならない。この例において、Ｉ０プールは、唯一の可能な所望のプールである。
【００５５】
ステップ９０４において、所望のプール７００が、命令を受容できるかどうか、たとえば、空き命令空間７０１を有するかどうかが判断される。また、このステップは、それぞれの従属プールが満ちていないことをチェックするのを含む。この階層構造は、プールのどれが、所望のプールの下位であるかを判断する。この代表的な「Ｆ取得」命令について、プールＩ０＿１およびＡが、所望のプールＩ０に加えて、チェックされる。
【００５６】
所望のプール、および従属プールのそれぞれが利用できる場合、ステップ９０５において、命令は、所期通り格納される。候補命令が格納されると、その命令が格納されたプールの占有が減少する。また、命令が格納されると、格納されたプールに従属する下位プールそれぞれの占有が減少する。
【００５７】
対応するプールが利用できない場合、候補命令は拒否される。新しい候補命令が、待機リスト８２０から選択され、上述のステップが繰り返される。
ステップ９０６において、命令グループが、プール階層７００に格納された命令の集合から準備できるかどうかが判断される。準備できない場合、次の命令がステップ９０２において選択される。準備できる場合、格納された命令はステップ９０７において命令グループに形成される。ついで待機リストは、格納された命令に対応するように更新され（ステップ９０２）、そして、このプロセスが繰り返される。特に、実行準備ができた命令グループに作成された命令により依存性が除かれる場合、新しい目標命令が待機リストへ加えられる。
【００５８】
命令グループは、命令の所定の集合が一旦格納されると形成される、すなわち、６個の命令により２個のバンドルが形成される。あるいは命令グループは、一旦それ以上の命令を格納することができないと、形成される。これは、すなわち待機リストからの候補命令が空のプールに対して適切でないか、または、待機リストがここで空であるからである。適切には、ＮｏＯＰｓ（「非動作」または非動作命令）が、部分的に完全な命令グループを満たすのに使用される。
【００５９】
このプロセスは、待機リストが一旦完全に空になると終了し、これ以上さらに作成する目標命令は無い。この好ましい実施態様において、目標コード命令２１は、基本ブロック、グループブロックまたは等ブロック（iso-block ）のような、目標コードの１つのブロックを表す。このために、この作成プロセスは、目標コードのこのブロックにおける命令のすべてが一旦命令グループに作成されると、終了する。
【００６０】
好ましい方法を、図１０と図１１に示される作動例を参照してさらに詳細に説明する。
図１０を参照すると、命令６００（ここでは文字「Ｔ」により示される）は、利用できる命令空間７０１を占有するために、所望のプール７００へ割り当てられる。図１０の例において、第１の命令Ｔ１は、プールＭ０に格納されるメモリ型Ｍ命令である。このプールは、１つの命令のみを受け入れることができるので、命令Ｔ１がプールＭ０を満たす。
【００６１】
図１０に示されるように、それぞれの従属プール（Ｍ０＿１、Ｍ０＿３、Ａ）の占有も減少され、すなわち、命令空間７０１は、上位プールＭ０に格納された命令Ｔ１に応答して満たされたとマークされる。すなわち、命令が利用できるプールに格納されるとき、ゼロまたはより低い層におけるそれぞれの従属プールの空白は、格納された命令の結果として減少される。
【００６２】
Ｉ型命令である第２の命令Ｔ２が入れられ、その命令は、望ましくは、第２のレベル７１２のプールＩ０＿１における命令空間を満たす。レベル７１４の従属プールＡにおける対応する命令空間も、占有されたとマークされる。
【００６３】
図１１は、完全な命令グループを形成する準備ができるように格納された命令の例を示す。命令Ｔ１〜Ｔ６のそれぞれは、対応するプールに格納される。
図７、１０および１１を参照すると、この好ましい実施態様において、追加の最下位グループ・プール７１５が、命令グループを表すために提供される。このグループ・プール７１５は適切には、６個の命令空間（この命令グループにおける最大）を有する。命令は、グループ・プール７１５に直接格納することができない。代わりに、このグループ・プールは、６個の命令が、上位レベルのプールに適正に、かつ有効に格納されたことを確認する好都合な機構を提供する。
【００６４】
柔軟性のために、命令が、最下位の適用プールに格納されることが望ましい。すなわち、「付加」命令は、発行ポートＭ０〜３またはＩ０〜１のいずれにも発行でき、理想的にはＡプールに格納される。対照的に、「Ｆ取得」命令は発行ポートＩ０を通してのみ発行することができ、利用できる場合にはプールＩ０へ割当される。
【００６５】
図７、１０および１１を再び参照すると、それぞれのプール７００は、好都合には、カウント値７０２に関連付けられる。カウント値７０２は、適切には、プール７００内で利用できる命令空間７０１の個数に対応する整数値である。
【００６６】
別の実施態様において、１以上のプールには、そのプールの最大占有未満の制約されたカウント値が与えられる。すなわち、複数のプールの少なくとも１つの最大占有は、その１つのプールに関連付けられた発行ポートにより決定される絶対最大占有未満に制約される。代わりに、絶対最大占有は、命令の種類に関して決められる。図示される代表的なプールにおいて、Ｍ０＿３プールは、発行ポートＭ０〜Ｍ３に対応する４Ｍ型命令の絶対最大占有を有する。しかしながら、Ｍ０＿３プールは、好ましくは、２個のＭ型命令のみを、任意の１つの命令グループに格納することができるように、「２」のカウントなどに制約される。一定の種類の命令グループの数をシステム最大に制約することにより、一層有効な実行可能なコードを、一部の状況において発生させることができる。すなわち、実際に、多くの「Ｍ」命令を有する命令グループのシーケンスを発行することは、多くても２個の「Ｍ」命令をそれぞれ有する発行グループよりも有効性が低いことがある。この制約されたカウント値により、命令グループ構成を調整および制御することができる。
【００６７】
カウンタ７０２は、命令がプール７００に格納される毎に調整される。またそのカウンタは、図１０と１１の例に示されるように、命令が高位のプールへ付加される毎に調整される。カウンタ７０２は、プールまたは準備プールが満たされているかどうかを判断する単純で好都合な機構である。好ましい実施態様において、そのカウンタは、所定の値に初期化され（すなわち、対応するプールの最大空白、または制約される値）、格納された命令毎に１だけデクリメントされる。これにより、有効な「ゼロに等しいか、それ未満」に関する比較により、特定のプールが満たされているかどうかが判断できる（すなわち、ゼロに等しいか、それ未満の空きの命令カウントを有する）。
【００６８】
グループ・プール７１５には、同様にカウンタ値７０２が設けられ、その値は、単一グループにされ、かつ格納された命令毎にデクリメントされる命令の最大数として６のように初期化される。
【００６９】
好ましい実施態様において、格納された命令の集合（すなわち、Ｔ１〜Ｔ６まで）は、命令を取り出すことにより、命令グループに形成される。その好ましい順序は、最大上位レベル７１１にある最も制約されたプールで始まる。これらの命令は、命令が分散されるときに、これらの最も制約された命令が、対応する発行ポート（複数）へアクセスするために、グループが作成されるときに優先度を有する。命令を最下位（最も広い）の対応するプールに格納することにより、最も柔軟な命令が予約に保持されるので、コードのシーケンスにおいて後で生じる制約の少ない命令を、一層良い機会として、対応する発行ポートに格納することができる。たとえば、プールＡにおける「付加」命令は、任意の高位の命令が、たとえば、それが必要とする発行ポートＭ０またはＩ０に格納されたかどうかが判断されたときにのみ、命令グループに取り入れられる。
【００７０】
階層プールの連結占有は、細区分上の資源を防止する。それぞれの命令グループは、単一パスにおいて正確に作成される（「ライト・ファーストタイム（right first time）」）。
【００７１】
図１２は、図１１に格納された命令Ｔ１〜Ｔ６から取り出された代表的な命令グループ６０６を示す。このグループは、テンプレート「ＭＦＩ〜ＭＦＩｓ」に一致する。このテンプレートは、命令グループ内に担持される５ビットテンプレート領域に符号化される。図１２において、「Ｓ」は、第２のバンドルが、そのグループの最後であることを示す。
【００７２】
図７、１０および１１に示される好ましい代表的な配列は、命令をＭ、ＩおよびＦの命令スロットへ割当てる。この配列は、ブロック毎のコード変換に特に適切である。すなわち、基本ブロックは、定義により、分岐型出口を１つのみ含む。ブロックの主作動が、非分岐命令に関係し、それらの命令は、図７のプール構造を使用して命令グループに作成される。このために、作成されたコードは、そのブロックの主部分用に対する一連の完全で有効な命令グループに形成される。そのブロックの末尾部分は、限定された残りの候補命令のために、ＮＯＰｓを有する不完全なグループ含むことがある。最終の命令グループまたは複数のグループは、分岐命令を含む。これらの分岐命令は、適切には、コードにおける引続くブロックを決めて、次に作成および実行する。図２を参照して上述した代表的な実施態様において、分岐命令は適切には、制約を、次の基本ブロックの表示を有するトランスレータ実行ループ１９０へ戻す。
【００７３】
図１３は、他の好ましいプール構造を示す。この実施態様において、好ましいプール機構は、分岐発行ポート（すなわちＢ０＿２）へ関係するプールも含むように拡大される。
図１４は、命令グループを作成する別の好ましい方法を示す。この方法は適切には、図１３に示されるプール構造を使用する。
【００７４】
図１４に示されるように、この好ましい方法は、図９のステップ９０１〜９０７と同等なステップ１４０１〜１４０７を含む。また、この実施態様において、この方法は、選択された命令をテンプレート集合に対してチェックするステップ１４０８を含む。
【００７５】
代表的なItanium（登録商標）2 プロセッサにおいて、Ｍ、ＦおよびＩ命令の組み合わせが、比較的少ない制約を有し、それらの制約は、適切には、図９のプール構造により取り扱われる。しかしながら、Ｉ、ＦおよびＢ命令の組み合わせは、許容できる組み合わせに関して比較的に制約的である。ステップ１４０８は、選択された候補命令８２１および既に格納された命令との組み合わせを、テンプレートの所定の集合と比較することを含む。それぞれのテンプレートは、目標プロセッサにより実行できる有効な命令組み合わせを表す。テンプレートの集合は、メモリ１８などに格納される検索用テーブルに好都合には保持される。提案された組み合わせが、テンプレートの所定の集合のいずれにも合致しない場合、選択された候補命令は、拒否されて待機リストに戻され、および新しい候補が選択される。ステップ１４０８のテンプレートチェックにより、分岐命令を、プールを使用して命令グループ作成内に含めることができる。
【００７６】
Itanium （登録商標）2 プロセッサは、ＭＬＸフォーマットテンプレートを必要とする特別ケースの「Ｘ」型命令も提供する。Ｘ型命令は、Ｆ発行ポートとＩ発行ポートの両方を必要とする。ステップ１４０８のテンプレートチェックは、Ｘ型命令を容易に識別する。適切には、Ｘ型命令は、ＦとＩの命令をプール７００に格納することを試みることにより、特別ケースとして取り扱われる。Ｘ型命令は、ＩとＦの両方が所期通り格納される場合にのみ、所期通り格納される。すなわち、これは一例であり、それにより、１つの目標コード命令が、プール構造において１つを超える命令空間を必要とする。そのプール構造は、好都合には、これらの命令に特殊な、または変化する占有を提供する。
【００７７】
本発明の好ましい実施態様を、代表的なItanium (登録商標)2プロセッサを参照して説明してきた。しかしながら、本発明は、多くの他のプロセッサとプロセッサの種類にも適用できる。特に、本発明は、サイクル毎に複数の命令を発行するプロセッサへ適用できる。例として、本発明は、とりわけ、ｘ８６アーキテクチャプロセッサおよびＰｏｗｅｒＰＣ（ＰＰＣ）アーキテクチャにも適用できる。本発明は、ここで説明された原理と特徴に基づいて当業者により適用できる。
【００７８】
要約すると、上記した本発明の好ましい実施態様は、複数の発行ポートを通してプロセッサの複数の機構ユニットへ分散される準備ができた命令グループを作成する好都合な自動機構を提供する。この命令グループは、正確に、かつ自動的に発生される。復号化エラーと機能停止は、最小化されるか、または完全に避けられる。
【００７９】
種々の好ましい実施形態を図示して説明したが、添付の特許請求の範囲で定義される本発明の範囲を逸脱することなく、種々の変更および変形が可能であることが、当業者には理解し得る。
【００８０】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する特徴のすべて、および／またはそのように開示する方法またはステップのすべては、そのような特徴および／またはステップの少なくともいくつかが互いに相容れない組み合わせを除き、任意の組み合わせで組み合わせ可能である。
【００８１】
本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する各特徴は、特に明記しない限り、同一の目的、均等の目的、または同様の目的を果たす代替の特徴によって置き換えられてもよい。このため、特に明記しない限り、開示する各特徴は、一連の一般的な均等の特徴、または同様の特徴の一例に過ぎない。
【００８２】
本発明は、以上の実施形態の詳細に限定されない。本発明は、本明細書（添付の特許請求の範囲、要約書、および図面を含む）で開示する特徴の任意の新たな１つ、または任意の新たな組み合わせにまで、あるいはそのように開示する方法またはステップの任意の新たな１つ、または任意の新たな組み合わせにまで拡張される。
【図面の簡単な説明】
【００８３】
【図１】本発明の実施態様がアプリケーションを示す装置を図示するブロック線図である。
【図２】本発明の好ましい実施態様に採用される実行制御を図示する概略フロー図である。
【図３】本発明の好ましい実施態様におけるプログレスコード変換を示す概略図である。
【図４】代表的なパイプラインプロセッサのコアパイプラインの概略線図である。
【図５】代表的なプロセッサ内の機能ユニットの概略全体図である。
【図６】代表的なプロセッサ内の命令分散の概略全体図である。
【図７】本発明の実施態様において採用される命令を作成する好ましい機構の概略図である。
【図８】本発明の好ましい実施態様に従う命令グループ作成の概略全体図である。
【図９】命令グループを作成する好ましい方法の概略フロー図である。
【図１０】部分的に完全な代表的な命令グループを有する好ましい機構を示す。
【図１１】完全な代表的な命令グループを有する好ましい機構を示す。
【図１２】代表的な命令グループを示す。
【図１３】命令グループを作成する好ましい機構の他の実施態様を示す。
【図１４】命令グループを作成する他の好ましい方法を示す概略フロー図である。