(57)【要約】      （修正有）【課題】高データ密度のＲＩＳＣプロセッサ。【解決手段】ＲＩＳＣプロセッサは、プログラムの実行に必要とされる命令の数と、クロック期間と、命令当たりの平均クロック数との間の関係を最適化することに加えて、Ｓがビットでのプログラム命令のサイズであり、ＩＳがプログラムを表すために必要な命令の静的数（実行によって必要とされる数ではない）であり、ＢＩが命令あたりの平均ビット数である式：Ｓ＝ＩＳ＊ＢＩを最適化するように設計されている命令セットを実行する。通常のＲＩＳＣアーキテクチャと比較すると、このプロセッサは、クロック期間および命令当たりの平均クロック数の増加を最小限にとどめながら、ＢＩおよびＩＳの両者を低下させる。このプロセッサは、ロード／記憶アーキテクチャを備えた汎用レジスタを含むＲＩＳＣ原理に基づいた固定長の高性能符号化における良好なコード密度を達成する。【選択図】図１
2006185462.tif 000002
【特許請求の範囲】
【請求項１】
１６以上の汎用レジスタと
それらのレジスタとデータを交換するメモリにアクセスする手段と、
メモリからの命令を処理するための演算装置とを具備し、全ての命令は２８ビットを越えない長さを有し、全ての命令は完全な特徴のＲＩＳＣ命令のセットを含み、
少なくとも１つの命令は、オプコードフィールドと、命令に対する定数オペランドを特定するフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる１つのソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる１つの行先レジスタフィールドとを有しており、
少なくとも１つの命令は、オプコードフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる複数のソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる１つの行先レジスタフィールドとを有しており、
少なくとも１つの命令は、前記演算装置に複数の複合演算を実行させ、それらの演算の第１のものは第１の計算および論理演算の１つであり、第２のものは第２の計算動作の１つおよび条件ブランチ演算であることを特徴とするプロセッサ。
【請求項２】
命令は、同じ第１の圧縮されていない固定長の命令を有する第１のグループの命令と、第１の固定長の命令とは異なる同じ第２の圧縮されていない固定長の命令を有する第２のグループの命令とを含んでおり、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドはそのビットフィールドを有する命令が属している１つのグループを示している請求項１記載のプロセッサ。
【請求項３】
第１の演算は、命令内のソースレジスタフィールドによって示されたレジスタ値の比較であり、第２の演算は、比較の結果に応答するブランチ演算である請求項１記載のプロセッサ。
【請求項４】
第１の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な左シフトであり、第２の演算は、シフトされたレジスタ内容および別のソースレジスタ値についての計算動作である請求項１記載のプロセッサ。
【請求項５】
第１の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な右シフトであり、第２の演算は、命令の定数フィールドによって特定された値を有するシフトの結果についての論理的なアンド動作である請求項１記載のプロセッサ。
【請求項６】
少なくとも１つの命令は、第２の命令アドレスに到達するまで第１の命令アドレスにおいて開始した命令をプロセッサに実行させ、その後再び第１のアドレスにおいて実行を継続し、命令のソースレジスタフィールドによって示されたソースレジスタの内容によって決定された回数だけ反復する請求項１記載のプロセッサ。
【請求項７】
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも１つの命令を有している請求項１記載のプロセッサ。
【請求項８】
さらに、複数の特定目的のレジスタと、
コプロセッサとデータを交換するために特定目的のレジスタをアクセスする手段とを具備し、
少なくとも１つの命令は、予め定められた値である特定目的のレジスタ中のデータに応答する条件ブランチである請求項１記載のプロセッサ。
【請求項９】
特定目的のレジスタは単一ビットレジスタであり、
前記アクセスする手段はさらに単一ビットレジスタと複数のコプロセッサとの間でデータを交換する請求項８記載のプロセッサ。
【請求項１０】
データを記憶する複数のレジスタと、
メモリとレジスタとの間でデータを交換するためにメモリにアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
複数の命令は複数のレジスタフィールドを有し、各レジスタフィールドは４ビット幅以上のビット幅であり、
命令は、完全な特徴のＲＩＳＣ命令のセットを含み、そしてロードと、セーブと、均等性についての条件ブランチと、非均等性についての条件ブランチと、計算動作のそれぞれの少なくとも１つを含み、命令はそれぞれ２８ビットを越えない長さで符号化されており、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびロード命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドの内容によって指定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第２のソースレジスタフィールドおよび記憶命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置の記憶命令の第１のソースレジスタフィールドの内容によって指定されたレジスタからのデータを記憶し、
演算手段は、均等性についての条件ブランチの実行に応答して非均等性についての条件ブランチ命令により示された２つのレジスタの内容が等しいとき均等性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、非均等性についての条件ブランチ命令の実行に応答して非均等性についての条件ブランチ命令により示された２つのレジスタの内容が等しくないとき非均等性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、計算命令の実行に応答して計算命令の各ソースレジスタフィールドにより示される複数のレジスタの内容について計算動作を実行し、計算命令の行先レジスタフィールドによって示される複数のレジスタ中にその結果を記憶させることを特徴とするプロセッサ。
【請求項１１】
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令のそれぞれのソースレジスタフィールドは各命令の境界に関して同じ位置にあり、
記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の付加的なソースレジスタフィールドは各命令の境界に関して同じ位置にある請求項１０記載のプロセッサ。
【請求項１２】
演算手段はさらに、ループ命令を一度実行するのに応答して他の命令を複数回実行する請求項１１記載のプロセッサ。
【請求項１３】
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令はそれぞれ同じ第１の固定長で符号化され、
演算手段は、短いロード、短い記憶、短い均等性についての条件ブランチ、短い非均等性について条件ブランチ、および短い計算命令はそれぞれ第１の固定長よりも短い同じ第２の固定長で符号化され、それぞれロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の対応する動作を実行する請求項１２記載のプロセッサ。
【請求項１４】
演算手段は、レジスタファイル内のレジスタのグループを示すウインドウベースレジスタを含み、
演算手段はさらに、レジスタフィールドがレジスタのグループ中のウインドウに関係するレジスタを示すようにレジスタファイル内のレジスタのグループをウインドウに示す請求項１２記載のプロセッサ。
【請求項１５】
ウインドウベースレジスタの相対的インクリメントはサブルーチン呼出し命令中の定数によって特定される請求項１４記載のプロセッサ。
【請求項１６】
データを記憶する複数のレジスタと、
メモリと前記レジスタとの間でデータを交換するためにメモリをアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
命令は完全な特徴のＲＩＳＣ命令のセットを含み、各命令は２８ビットを越えない長さを有し、複数の命令は複数のソースレジスタフィールドおよび行先レジスタフィールドを有し、各レジスタフィールドは４ビット幅以上のビット幅であり、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびこの命令の定数フィールドによって特定されたレジスタの１つの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドによって特定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第２のソースレジスタフィールドおよび命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置において命令の第１のソースレジスタフィールドによって特定されたレジスタからのデータを記憶し、
演算手段は、条件ブランチ命令の実行に応答してテストを行い、テストの結果が真実であった場合には、条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
前記テストは、
２つのソースレジスタの内容の均等性、
２つのソースレジスタの内容の非均等性、
ゼロに等しい２つのソースレジスタのビット的論理アンド、
ゼロに等しくない２つのソースレジスタのビット的論理アンド、
ゼロである第２のソースレジスタの内容によって指定された第１のソースレジスタ中のデータの１つの２進ビット、
１である第２のソースレジスタの内容によって指定された第１のソースレジスタ中のデータの１つの２進ビット、
ゼロである命令のフィールドによって指定されたソースレジスタ中のデータの１つの２進ビット、
１である命令のフィールドによって指定されたソースレジスタ中のデータの１つの２進ビット、
第２のソースレジスタの内容より小さい２の補数である命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容以上の大きさの２の補数である命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容より小さい符号のない命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容以上の大きさの符号のない命令のフィールドによって指定された第１のソースレジスタの内容、
ソースレジスタの内容と命令の定数フィールドとの均等性、
ソースレジスタの内容と命令の定数フィールドとの非均等性、
命令の定数フィールドより小さい２の補数のソースレジスタの内容、
命令の定数フィールド以上の大きさの２の補数のソースレジスタの内容、
命令の定数フィールドよりも小さい符号のないソースレジスタの内容、
命令の定数フィールド以上の大きさの符号のないソースレジスタの内容、
からなる第１のグループから選択され、そして
命令は、同じ第１の圧縮されていない固定長の命令を有する第１のセットの命令と、そして圧縮されていない第１の固定長の命令とは異なる、同じ第２の圧縮されていない固定長の命令を有する第２のセットの命令を含み、
両方のセットに共通のオプコードフィールド中の所定のビットフィールドは、そのビットフィールドを有する命令が属している１つのセットを示している
ことを特徴とするプロセッサ。
【請求項１７】
ゼロである１つのソースレジスタの内容、
ゼロではない１つのソースレジスタの内容、
ゼロより小さい２の補数である１つのソースレジスタの内容、
ゼロより大きい２の補数である１つのソースレジスタの内容、
からなる第２のグループおよび前記の第１のグループの中の１つからテストが選択され、
ゼロに対する各比較が、ソースレジスタをゼロでないオーギュメントと比較する対応する命令のオフセットよりも大きいブランチターゲットを指定するためのオフセットを特定する請求項１６記載のプロセッサ。
【請求項１８】
テストは、フィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含んでいる請求項１７記載のプロセッサ。
【請求項１９】
命令は、より少ないビットで符号化されて、対応する条件ブランチ命令よりも短い相対的オフセットフィールドを使用する条件ブランチ命令およびソースレジスタの内容の１つがゼロであることおよび１つのソースレジスタの内容の１つがゼロでないことのテストを含んでいる請求項１８記載のプロセッサ。
【請求項２０】
第２の命令のグループは第１の命令のグループの動作上のサブセットである請求項２記載のプロセッサ。
【請求項２１】
第１および第２の命令のグループは同じオプコードマップを占める請求項２記載のプロセッサ。
【請求項２２】
命令は、同じ第１の圧縮されていない固定長の命令を有する第１の命令のセットと、第１の圧縮されていない固定長の命令とは異なる、同じ第２の圧縮されていない固定長の命令を有する第２の命令のセットを含み、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドがそのビットフィールドを有する命令が属している１つのセットを示す請求項１０記載のプロセッサ。
【請求項２３】
第２の命令のグループは第１の命令のグループの動作上のサブセットである請求項２２記載のプロセッサ。
【請求項２４】
第１および第２の命令のグループは同じオプコードマップを占める請求項２２記載のプロセッサ。
【請求項２５】
命令は、同じ第１の圧縮されていない固定長の命令を有する第１の命令のセットと、第１の圧縮されていない固定長の命令とは異なる、同じ第２の圧縮されていない固定長の命令を有する第２の命令のセットを含み、
両方のグループに共通のオプコードフィールド中の所定のビットフィールドがそのビットフィールドを有する命令が属している１つのセットを示す請求項１６記載のプロセッサ。
【請求項２６】
第２の命令のセットは第１の命令のセットの動作上のサブセットである請求項２５記載のプロセッサ。
【請求項２７】
第１および第２の命令のセットは同じオプコードマップを占める請求項２５記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関し、特に命令幅を高度に有効に使用することのできる高性能で命令セットの数を減少させたコンピュータ（ＲＩＳＣ）アーキテクチャプロセッサに関する。
【背景技術】
【０００２】
プロセッサの命令セットの設計は十分に確立された技術である。多くの命令セット特徴はそれ自体は新しいものではない。しかしながら個々の特徴は技術の進歩のために新しいユニークな方法で組合わせられることができる。特に、命令セット設計が従来の命令セットとは異なった使用に対して最適となるように設計されるとき、命令セットがターゲットアプリケーションにおいて使用されるようにプロセッサが構成されている場合に顕著な改善が得られる。
【０００３】
命令セットの設計は、種々のアルゴリズムを符号化するために必要なマシンコードの大きさを含む多くの競合する目標をバランスさせるために必要であり、それらには、新しいアルゴリズムおよびアプリケーションに対する命令セットの拡大性および適用性、そのようなアルゴリズムにおいて命令セットを実行するプロセッサの性能および消費電力、命令セットを実行するプロセッサのコスト、多くのプロセッサを長い時間使用することに対する命令セットの安定性、命令セットを実行するプロセッサの設計の複雑性、高レベルプログラム言語から編集するためのターゲットとしての命令セットの安定性等が含まれている。
【０００４】
命令セットはプロセッサの性能に対して１つの直接的な影響および２つの間接的な影響を有している。命令セットは直接ＩＥ，すなわち、所定のアルゴリズムを実行するために必要な命令の数を決定する。なお、ここでは、編集のためにターゲットとしての命令セットの安定性は良好であるとしている。プロセッサの性能の他のコンポーネントはクロック期間ＣＰと命令当たりの平均クロックＣＰＩである。これらは命令セットの実行の主要な影響であるが、命令セット特徴はクロック当たりの時間および命令目標当たりのクロックに同時に適合するために実行者の能力に影響する。例えば、符号化の選択は残りの命令の実行により直列に付加的な論理装置に命令してもよく、それはクロック当たりの時間を増加させることにより実行者がアドレスし、或いは命令当たりのクロックを通常増加させる付加的なパイプライン段を追加することによって実行者がアドレスする。
【０００５】
１９８０年代および１９９０年代にＲＩＳＣと呼ばれる新しい命令セットアーキテクチャが開発された。それは上記の妥協の実現により得られたものであり、すなわち、
Ｔ＝ＩＥ＊ＣＰＩ＊ＣＰ
であり、ここで、Ｔは秒で表されるプログラム実行時間であり、他の変数は上述したものである。ＲＩＳＣ命令セットは実行者が著しくＩＥを増加させずにＣＰＩおよびＣＰを顕著に改善することを可能にする。ＲＩＳＣ命令セットはプロセッサの性能を改善し、設計の複雑性を低下させ、所定の性能レベルにおけるプロセッサ構成のコストを低下させ、高レベルプログラム言語からの編集に適している。
【０００６】
プロセッサアーキテクチャコミュニティはＲＩＳＣの完全に満足できる定義について同意していないが、それは一般に次のような属性の多くのものを含んでいる。すなわち、固定サイズの命令ワード；算術演算およびその他の計算動作は１６以上のレジスタを有する汎用レジスタファイルから読取られたオペランドについて行われ、その結果は同じレジスタファイルに書込まれる；レジスタファイルのアクセスが並列に行われるように、ソースレジスタに対して命令ワード中の固定された位置にある；メモリアクセスは主としてメモリからレジスタへのロードにより行われ、レジスタからメモリへ記憶される（計算命令におけるメモリオペランドを有するのと反対）；メモリアドレスを計算する小さい数の方法（通常４以下であり、しばしば１である）；命令のパイプライン実行を困難にする特徴の回避（例えば所定の命令による２回以上のハードウエアリソースの使用）；およびマイクロコードまたはその等価物を要求する特徴の回避等が含まれる。全てのプロセッサが上記の要素の全てを含んでいるＲＩＳＣであるとは考えられないが、全てのプロセッサが上記の要素の多くのものを含んでいる。
【０００７】
しかしながら、初期のＲＩＳＣ命令セットはコンパクトなマシンコードの生成において特に効率的ではない。特に、ＲＩＳＣ命令セットはアプリケーションを符号化するために通常はプレＲＩＳＣ命令セットよりも多くのビットを必要とする。アプリケーションに対するマシンコードの大きさは、全体のソリューションコストにおいてプロセッサそれ自身のコストよりもしばしば重要である。それはアプリケーションを保持するためにより大きいメモリが必要であるからである。ＲＩＳＣは性能が最も重要である多くのアプリケーションにおいて依然として許容されているが、ＲＩＳＣの利点を有しているが、減少されたコードサイズの命令セットは多くの他のプロセッサアプリケーションにおいて有効である。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
初期のプロセッサ命令セット（ＩＢＭ7090，ＣＤＣ6600，ＤＥＣ ＰＤＰ6 ，ＧＥ635 ）のいくつかはＲＩＳＣの特徴のいくつかのものを有している。それはそれらがＲＩＳＣのようなマイクロコードなしでハードウエアにより直接実行されるように設計されていたからである。これらの命令セットの大部分は最新の高レベル言語およびアプリケーションにあまり適したものではない。その理由は、ワード（バイトではなく）アドレス、限定されたアドレススペース、および演算の特別の組合わせのような特徴のためである。実際に多くのものは言語プログラムを組立てるために意図されたものである。いくつかのものは３６ビットのデータワードおよび命令幅に基づいており、３６ビット命令はコード密度に対しては非常に良好であるとは言えない。いくつかのものは計算のための累算器およびメモリ例に基づいており、それは性能を制限する。本発明の個々の特徴のいくつかはこれらのマシンの世代に続くものであるが、所望の特性のものは従来存在していない。
【０００９】
プロセッサを動作させるためのマイクロコードの使用はさらに複雑な命令セットの適合を可能にする（ＩＢＭ360，ＤＥＣ ＰＤＰ11，ＤＥＣ ＶＡＸ，インテルｘ86，ＬＬＮＬ S-1，モトローラ68000）。それ故、次の世代のプロセッサは、複雑な可変命令長コード化による等のために良好なコード密度を有する複雑な命令セットを有している。しかしながら、マイクロコードのプロセッサおよび複雑な命令セットは高性能には良好に適合しないことが多い。複雑な命令は、ハードウエアパイプラインにおける直接の実行の代りにマイクロエンジンの相互作用により実行されるが、それはＣＰＩを増加させる。種々の異なるスタイルのこの世代に出現した命令セットは１個または２個の累算器から汎用レジスタアーキテクチャまたはスタックアーキテクチャのいずれかに変更される傾向がある。レジスタまたはスタックの構成コストは十分に低く、命令セットはこれらの有効なスタイルを使用することができる。
【００１０】
上述のように性能の顕著な改善はあるが、ＲＩＳＣはコード密度に対してはむしろ後退している。多くのＲＩＳＣ命令セットは固定長の３２ビット命令に基づいており、３２ビットは必要以上のものである。またいくつかの種類の可変長符号化が最良のコード密度を得るために必要である。スタックアーキテクチャはコードサイズの点では有利であるが、性能が低いためにこの時点で除外される。それは命令が性能とコードサイズの目標を共に達成することがいかに重要であるかを示している。
【００１１】
ＲＩＳＣのコードサイズの欠点を補償するために、プロセッサ設計者は命令セットのコンパクトな符号化を導入した。ＡＲＭのＴnumbおよびＭＩＯＳ16はその例である。両者は少数の３２ビット命令を含むが、主として１６ビットを使用する。１６ビット符号化（それは命令当たりのビット数を半分にすることによって小さいコードを与える）は貧弱な性能を与える。その理由は８個のレジスタしか有していないからであり（ＩＥを増加）、編集されたソースレジスタオペランドの使用（ＣＰまたはＣＰＩを増加）は命令ワード（ＩＥを増加）の制限範囲を限定し、行先レジスタオペランドの数（多くの場合２以下…ＩＥを増加）を制限する。
【００１２】
ヒタチのＳＨ命令セットはＲＩＳＣと類似し、対象としてコードサイズをターゲットにしている。それは１６ビットの命令セットでスタートするが、後で必要が認められたとき３２ビット命令が追加される。１６のレジスタを有するが命令当たり大抵は２個のレジスタであり（ＩＥを増加）、ブランチオフセットを厳しく制限する。
【００１３】
ＲＩＳＣの性能その他の利点を与え、しかも小型でコストの効率のよいマシンコードを与える命令セット構成が必要とされている。過度に複雑化されることなく、高性能の構成を実現するために、命令セットは簡単な短いパイプラインによってマイクロコードを使用しないで直接実行可能でなければならない。良好な性能を得て編集を最適にするための適切なターゲットである十分な数の汎用レジスタがなければならない。さらにコードサイズを減少させるためにその他の技術が使用されてもよい。
【００１４】
上述した従来の技術の問題に鑑みて、本発明の目的は、完全な特徴のＲＩＳＣ命令セットの２４ビット符号化を行うプロセッサを提供することである。
【００１５】
本発明の別の目的は、命令当たりのバスの平均数が限定された命令符号化を使用したときプログラムを表すために必要な命令の静的な数を低い値に維持するために相乗的に動作する命令を有する命令セットを実行するプロセッサを提供することである。本発明は狭い命令ワードにおける命令定数の効率的な符号化を行うために技術的に有効である。
【００１６】
本発明の別の目的は、２４ビット命令ワード符号化比較および普通の場合にもっと長いターゲット特定素子を有する最も有用な比較および形態を使用するブランチ命令を使用するＲＩＳＣ命令セットの符号化を行うプロセッサを提供することである。  
本発明のさらに別の目的は、プログラムを表すために必要な命令およびサイクルの静的な数およびプログラムを実行するために必要な命令の数を少くすることのできる減少されたオーバーヘッドループ能力を有する汎用（ＤＳＰのような特別の目的のものと対照的な）命令セットを実行するプロセッサを提供することである。
【課題を解決するための手段】
【００１７】
上述の目的は、本発明の第１の好ましい実施形態の命令セットを実行するＲＩＳＣプロセッサを提供することによって達成される。それ命令セットは、上記のような式Ｔ＝ＩＥ＊ＣＰＩ＊ＣＰに対して調整されるために付加される次のようなコードサイズ式により構成される。  
Ｓ＝ＩＳ＊ＢＩ
ここで、Ｓはビットによるプログラムの大きさであり、
ＩＳはプログラムを表すために必要な命令の静的な数（前のもののような実行に必要な数ではない）であり、
ＢＩは命令当たりのビットの平均数である。  
ＲＩＳＣに比較して本発明はＣＰおよびＣＰＩの増加を最小にしてＢＩおよびＩＳを低下させる。それは同時にＩＥを増加および減少させることが特徴である。
【００１８】
本発明のこの特徴は、ロード／記憶アーキテクチャを有する一般的なレジスタを含むＲＩＳＣの原理に基づいた固定長の高性能符号化において良好なコード密度を提供しなければならないことの認識により構成されたものである。典型的なコード密度を得るために、実施例では性能と妥協しない簡単な可変長符号化が付加される。この実施形態はプロセッサ構成のコストを最適なものにする。
【発明を実施するための最良の形態】
【００１９】
本発明の上記およびその他の目的は、以下の詳細な説明および添付図面から容易に明らかになるであろう。  
図１乃至４には、本発明の好ましい実施形態による命令セットを実施するのに適したプロセッサが示されている。一般に、プロセッサは命令およびデータ用の２32バイト、すなわち４ＧＢのバーチャルメモリと、３２ビットのプログラムカウンタＩＰＣと、１６個以上の３２ビットの汎用レジスタと、シフトアドレスレジスタＳＡＲと、３２ビットのループ開始アドレスレジスタＬＢＥＧと、３２ビットのループ終了アドレスレジスタＬＥＮＤと、および３２ビットのループカウントレジスタＬＣＯＵＮＴとを有しており、これら３つのレジスタは全て、以下詳細に説明するようにオーバーヘッド減少ループ命令によって使用される。
【００２０】
とくに、プロセッサパイプラインは５つの基本ステージ：命令フェッチすなわちＩステージ100と、命令デコードおよびレジスタアクセス、すなわちＲステージ200と、実行およびアドレス計算、すなわちＥステージ300と、メモリアクセス、すなわちＭステージ400と、およびライトバック、すなわちＷステージ500とを有している。Ｉステージ100において、実行されるべき命令を検索するためにプログラムメモリがアクセスされる。Ｒステージ200では、このようにフェッチされた命令が復号され、それが使用するレジスタがあるならば、これがアクセスされる。その後、Ｅステージ300において、Ｒステージ200で復号されたレジスタの内容および定数が命令オペランドにしたがってプロセッサのＡＬＵ332によって処理される。Ｍステージ400では、ロード（負荷）、記憶等の任意の必要なメモリアクセスが行われる。最後にＷステージ500において、命令を実行した結果が命令オペランドによって命じられたとおりに汎用レジスタにライトバックされる。
【００２１】
とくにＩステージ100では、ワードがＩステージプログラムカウンタＩＰＣ104中に保持されているアドレスに基づいて命令キャッシュ102から抽出される。その後そのワードは、命令キャッシュＲＡＭ ＩＣ102（以下に示す別のコンポーネントと一緒に、命令キャッシュ116を形成する）から読出され、整列ユニットＡＬＩＧＮ108により最後のフェッチレジスタ106中に保持され、Ｒステージ命令レジスタＲＩＮＳＴ202に記憶された最後のワードと結合される。キャッシュミスは、主プログラムメモリからステージングレジスタＩＲＥＦＩＬＬ110を通ってキャッシュＲＡＭ ＩＣ102までメモリフェッチによって処理され、タグがそれにしたがって、レジスタＩＭＩＳＳＡ112およびタグキャッシュＲＡＭ ＩＴＡＧ114を使用して調節される。マルチプレクサ118は、キャッシュＲＡＭ ＩＣ102の出力か、または主メモリから直接フェッチされた命令かのいずれかを選択し、選択されたデータを整列ユニット108に出力し、この整列ユニット108がそれを、最後のフェッチレジスタ106に記憶されている最後にフェッチされたワードと連結し、必要ならばそのサブセットを選択して、命令長バリエーションに対して調節する。タグ比較装置122はキャッシュミスを検出し、その表示をＩステージコントローラ124に与え、このＩステージコントローラ124はそのステージの全動作を制御する。
【００２２】
素子104として示されている回路はここではプログラムカウンタと呼ばれているが、Ｉステージプログラムカウンタ104は実際はフェッチされるべき命令をカウントするのではなく、ワードをカウントするために使用されることを認識しなければならない。しかしながら、Ｒステージプログラムカウンタ204のような後続するプログラムカウンタは、好ましい実施形態では、実際の命令をカウントする。また、当業者は、Ｉステージコントローラ124に加えて、対応したＲステージコントローラ224、Ｅステージコントローラ324およびＭステージコントローラ424のそれぞれがその各ステージの全動作を制御することを容易に理解するであろう。また、Ｒステージ状態レジスタ203、Ｅステージ状態レジスタ303、Ｍステージ状態レジスタ403およびＷステージ状態レジスタ503のそれぞれが、その各パイプラインステージにおける命令に関する関連状態情報、たとえばデータが有効か否か等の情報を各コントローラに供給する。さらに、ステージコントローラからそれらの各マルチプレクサまで延びているマルチプレクサ選択ライン、クロック信号、例外ベクトルアドレス等のある特徴は、説明を容易にするために省略されているが、しかしながら当業者は、それらの配置を容易に認識するであろう。
【００２３】
命令はＲステージ命令レジスタ202に供給されているが、次のアドレス発生セクション126内の加算器128は、フェッチされるべき次のワードを指すように現在のワードアドレスをインクレメントし、それをマルチプレクサ130に供給し、このマルチプレクサ130がそれを命令プログラムカウンタ104にフィードバックする。ループ命令（以下さらに詳細に説明する）が実行されたとき、それは開始ループアドレスをループ開始レジスタＬＢＥＧ132にロードし、その後マルチプレクサ130が開始アドレスをプログラムカウンタ104に供給する。ループ命令で使用されたように、ループ終了レジスタ134は、ループ状態の終了を検出してループ指標レジスタＬＯＵＮＴ138をデクレメントするために比較装置136によって現在のアドレスと比較される値を供給する。ループ外での実行を続けるために、比較装置140は、カウントがゼロの場合に命令コントローラ124に表示を与える。そうでない場合には、ループ指標レジスタＬＯＵＮＴ138はデクレメンタ142によってデクレメントされ、マルチプレクサ144（レジスタをロードするためにも使用される）を通過させられる。最後に、ＲステージＰＣ選択マルチプレクサ146は、以下さらに詳細に説明するようにＥステージ300に供給されるべきアドレス値を選択する。
【００２４】
Ｒステージ命令レジスタ202に記憶された命令はデコーダ201によって復号され、予め定められたパラメータフィールドを抽出し、命令オプコードにしたがって即値または定数フィールドを復号する。復号された命令は、実行のためにＥステージ命令復号レジスタ302にパイプラインされる。命令復号動作と並列に、命令からのフィールドは、以下詳細に説明するように、ウインドウされるレジスタ動作のために、それにウインドウベース値を加算するために加算器208−212を介してレジスタファイル206に送られる。ある命令中に存在する可能性のある２つのソースレジスタフィールドおよび１つの行先レジスタフィールドのそれぞれに対して１個の加算器が使用される。
【００２５】
レジスタファイル206中の値は読出されて、マルチプレクサ214および216に供給され、その後ＥステージＳおよびＴレジスタ304および306に供給される。マルチプレクサ214および216はレジスタファイル206から値を供給することができる。すなわち、必要とされるデータがまだファイル206中に書込まれていない場合、以下に説明するように、それらはＥステージから供給された値を使用してもよい。マルチプレクサ214はまた定数値を命令デコーダ204から受取ってもよい。
【００２６】
加算器218は、Ｒステージプログラムカウンタ201の内容と命令デコーダ204からの指標定数に基づいて指標付きターゲットアドレスを計算し、その結果をＥステージブランチレジスタ308に記憶する。加算器220は、命令長に応じて２または３をマルチプレクサ222を介してＲステージプログラムカウンタ201内の値に加算することにより次の命令アドレスを計算し、ブランチがとられない場合に使用するためにその結果を次のＰＣレジスタ310に送る。
【００２７】
Ｅステージ300に進むと、バイパスマルチプレクサ318および320は、種々の機能ユニット（ブランチユニット326、シフト／マスクユニット330、ＡＬＵ332、ＡＧＥＮ334および記憶整列ユニット336）に対するオペランドを選択する。マルチプレクサ選択は、Ｅステージ300、Ｍステージ400およびＷステージ500中の現在の命令に基づいて各レジスタ228、230および232によってバイパスブロックＥＢＹＰ314によりＲステージ200において計算され、バイパスブロックＥＢＹＰ226を通ってパイプラインされた。結果がＲステージ200から得られたとき、各マルチプレクサ318，320はＥＴレジスタ312またはＥＳレジスタ316を選択する。マルチプレクサ318および320に対する別の入力は、Ｍステージ400およびＷステージ500からのものである。
【００２８】
ブランチユニット326はマルチプレクサ318および320からの２つのオペランドを使用して、条件付きブランチ採用／不採用決定を生成し、それはＩステージ100およびＲステージ200中のコントローラ124および224にそれぞれ供給され、そこでマルチプレクサが選択をする。シフト／マスクユニット330は、マルチプレクサ328の出力に基づいてシフトおよび抽出命令を実行する。それはマルチプレクサ318および320から２つのオペランドをとるだけでなく、復号された命令レジスタＥＩＮＳＴＤ302からのマスク入力をとり、このＥＩＮＳＴＤ302はまたＭステージ命令レジスタＭＩＮＳＴＤ402に供給する。シフト量はシフト×定数に関してはＥＩＮＳＴＤ302から選択され、あるいはシフト×可変量についてはＥＳＡＲ322から選択される。ＥＳＡＲ322はＥステージ300に対するＩＳＡ状態ＳＡＲを含んでいる。
【００２９】
ＡＬＵ332は、ＡＤＤ，ＳＤＤＩ，ＡＤＤＸ２，ＳＵＢ，ＡＤＮ，ＯＲ，ＸＯＲを含む演算および論理機能を実行する。シフト／マスクユニット330およびＡＬＵ332の出力は、マルチプレクサ338中の命令タイプに基づいて多重化され、ＭＡＬＵレジスタ406に供給される。アドレス発生ユニットＡＧＥＮ334は、レジスタオペランドとＥＩＮＳＴＤ302中の復号された命令からのオフセットとの和を計算する。その出力は、ＭステージバーチャルアドレスレジスタＭＶＡ408に送られる。記憶整列ユニット336は、ＥＴマルチプレクサ318の出力を０，８，１６または２４の位置だけシフトして、記憶されたデータをメモリに適したバイト位置に整列する。出力はＭステージ記憶データレジスタＭＳＤ410に送られる。
【００３０】
前のパイプステージと同様に、ＥＣＴＬ324はＥステージ300に対する制御と、そこで実行される命令の状態の更新とを処理する。Ｅステージ命令アドレスプログラムカウンタＥＰＣ304は、例外処理のためにＭステージ命令アドレスプログラムカウンタＭＰＣ404にパイプラインされる。
【００３１】
パイプラインのＭステージ400は、ロードおよび記憶命令の第２の半分と全てのステージに対する例外決定とを処理する。ＭＰＣ404の出力は、ＷＰＣレジスタ504に送られる。Ｍステージ400における命令が例外または割込みによって無効にされた場合、ＷＰＣ504の出力はＩＳＡ特定例外命令アドレスレジスタＥＰＣ[i] （示されていない）（ＥステージプログラムカウンタＥＰＣ304とは異なる）の１つにロードされる。Ｍステージ400中の命令が再試行されなければならない（たとえば、キャッシュミスために）場合、ＷＰＣレジスタ504の内容は命令フェッチを再スタートするためにＩステージ100に送り返される。
【００３２】
シフトまたはＡＬＵ命令は、このステージにおいてＭＡＬＵ406からＷＡＬＵ506に単に転送されるに過ぎない。ＭＡＬＵ406の出力はまた、このステージにおいてバイパスマルチプレクサ318および320に供給され、それによってシフトまたはＡＬＵ命令の出力は、後続する命令がレジスタファイルに書込まれる前にこれによって使用されることができるようになる。Ｗステージ500におけるロード命令は、データキャッシュＲＡＭおよびデータタグＲＡＭの両者を読出す。Ｗステージ500における記憶命令は、データタグＲＡＭだけを読出す。データキャッシュＲＡＭの書込みは、タグ比較が完了するまで遅延される。非ロード命令は、任意の未決定の記憶データをデータキャッシュＲＡＭに書込む。同じアドレスへのロードが後続する記憶は、記憶データがデータキャッシュＲＡＭに書込まれていないので、特殊バイパスを必要とする。
【００３３】
Ｗステージ中のロード命令は、バーチャルアドレスＭＶＡ408の指標部分をデータタグＲＡＭのアドレス入力に送り、およびマルチプレクサ422を通って直接マップされたデータキャッシュＲＡＭ ＤＣ434のアドレス入力にも送る。ＤＣ434の読出しと並列に、アドレスが、ＳＴＶＩ416中の未決定の記憶バーチャル指標および有効ビットと比較される。比較装置428の出力に基づいて、読出しが未決定の記憶のキャッシュ指標に対するものである場合、マルチプレクサ432は未決定の記憶データバッファ418の結果を選択する。そうしないと、ＤＡ読出しデータが選択される。マルチプレクサ432はロード整列回路436に供給し、この回路436はバーチャルアドレスの下位の２つのビットに基づいてロードデータを０，８，１８または２４だけシフトし、その後Ｌ８ＵＩおよびＬ１６ＵＩ命令に対してビット７または１５からそれぞれゼロ拡張され、Ｌ１６ＳＩ命令に対してビット位置１５から符号拡張される。この結果はＷＬＯＡＤ508によってラッチされる。データタグＲＡＭの出力は、比較装置430によってＭＶＡ408からのＭステージバーチャルアドレスの上位ビットと比較され、このヒット／ミス結果は、キャッシュミスおよび例外を処理するＭステージ制御論理ＭＣＴＬ424に送られる。最後に、ロードバーチャルアドレスがキャッシュミスを処理するためにＷＭＡ510において捕獲される。
【００３４】
ロードキャッシュミスは、パイプラインのＩからＭまでのステージ中の命令を無効にする。ＷＭＡ510からのロードアドレスは、外部メモリに送られる。そのメモリから読出されたデータは、ＷＭＡ510の下位ビットをアドレスとして使用して、マルチプレクサ412およびＳＴＤＡＴＡ418を通ってデータキャッシュＲＡＭ424中に書込まれる。データタグＲＡＭ426はマルチプレクサ414およびＳＴＡＤＤＲ420を通ってＷＭＡ510において捕獲された上位桁のミスアドレスから書込まれ、ＤＴＡＧ420はＭＶＡ408からの小さい桁のビットによってアドレスされる。
【００３５】
Ｗステージ500における記憶命令は、記憶アドレスおよびデータをＳＴＡＤＤＲ418およびＳＴＤＡＴＡ420に入れる。さらに、データタグＲＡＭ426がアクセスされ、その結果がＭＶＡ408の上位桁ビットと比較されて、記憶アドレスがヒットかミスかが決定される。キャッシュにおいて記憶がヒットしたならば、ＳＤＴＤＡＴＡ418の内容が第１の非ロードサイクルにおいて、ＳＤＴＤＡＴＡ418に記憶されているアドレスにおいてデータキャッシュＲＡＭ424中に書込まれる。キャッシュミスの補充が完了したとき、命令フェッチユニットは、ミスされたロード命令から再びスタートするフェッチ命令を開始する。この実施形態のデータキャッシュはライトスルーされ、したがって記憶アドレスおよびデータもまたＳＴＡＤＤＲ420およびＳＴＤＡＴＡ418から書込みバッファ438に送られ、外部メモリに書込まれるまで、この書込みバッファ438に保持される。
【００３６】
ＷＡＬＵおよびＷＬＯＡＤレジスタ506および508の出力は、マルチプレクサ512によって選択され、この時点で命令が依然として有効ならばＲステージ200におけるレジスタファイル206中に書込まれ、それはＡレジスタの結果を有する命令である。
【００３７】
プロセッサはまた６ビットシフト量レジスタを有しており、この６ビットシフト量レジスタは、論理の左、論理の右および演算の右のような通常の即値シフトを行うために使用されるが、直接変数シフトはクリティカルタイミングパスである可能性が高いため、シフト量がレジスタオペランドである場合には単一の命令シフトを行わず、簡単なシフトは効率的に広い幅に広がらない。ファンネルシフトは広げられることができるが、それらには過大な数のオペランドが必要である。本発明の好ましい実施形態によるプロセッサは、そのシフト量がＳＡＲレジスタからとられるファンネルシフトを与えることによってこれらの問題を解決する。変数シフトは、汎用レジスタ中のシフト量からＳＡＲを計算するための命令を使用してコンパイラによって合成され、それに続いてファンネルシフトされる。ＳＡＲに対する値のリーガル範囲は０乃至３１ではなく０乃至３２であり、したがって６つのビットがそのレジスタに対して使用される。
【００３８】
当然ながら、以下において詳細に示される命令セットの説明が与えられたならば、本発明による他の種々のプロセッサアーキテクチャは、当業者に容易に明らかになるであろう。これらの構造もまた請求の範囲に記載された技術的範囲内に含まれるべきものである。
【００３９】
プロセッサ内において種々のパイプライン構造が使用されてもよい。しかしながら、命令セットのある特徴がある実施クラスに関していちばんよく実行する。図５には、１つのこのようなタイプが一般的に示されている。このタイプのアーキテクチャは、浮動小数点ユニットおよびＤＳＰのような主な計算ユニットにより有効に使用されることができ、このパイプラインアーキテクチャの１つの顕著な点は、このようなユニットがＤキャッシュの後に（図５においてＤＲｅｇ／ＤＡＬＵとラベル付けされた位置に）配置されることにより、このようなユニットに対する命令がメモリ参照を１つのソースオペランドとして含むことが可能になることである。これによって、多数の命令セットをサイクルごとにフェッチおよび実行する必要なしに、データキャッシュ参照および動作をサイクルごとに行うことができるようになる。
【００４０】
［一般的な命令セット設計考慮事項］
多数の命令セット特徴はプロセッサ構成費用を増加させる犠牲を伴って、性能を改善し（ＩＥを低くすることにより）、符号サイズを改善する（ＩＳを低くすることにより）。たとえば、“自動インクレメント”アドレスモード（ベースアドレスレジスタが読出し、その後インクレメントされたアドレスで再度書込まれる）には、ロード用の第２のレジスタファイル書込みポートが必要である。“指標付き”アドレスモード（２つのレジスタの和がバーチャルアドレスを形成するために使用される）には、記憶用の３つのレジスタファイル読出しポートが必要である。好ましい実施形態は、妥当な性能のために最小限必要な２個の読出しポートと１個の書込みポートのレジスタファイルに合わせられている。
【００４１】
好ましい実施形態は、構成の費用を増加させるいくつかの特徴を有しているが、レジスタファイルポートの追加と同程度の増額が必要とされる特徴は回避される。これはとくに、構成されたものが多数の命令をサイクルごとに実行する場合に重要である。それは、ポートの数がプロセッサの最大実行機能（たとえば、２乃至８）により増倍されるためである。
【００４２】
性能を維持するために、命令セットは少なくとも２つのソースレジスタフィールドと１つの異なる行先レジスタフィールドとをサポートしなければならない。さもないと、ＩＥおよびＩＳの両者が増加する。符号密度だけを最適化する汎用レジスタ命令セットが、しばしば、１つがソースとしてのみ使用され、１つがソースおよび行先の両方として使用される２つのレジスタフィールドを中心に設計される（たとえば、日立ＳＨ）。これによって符号サイズは、ＩＳの増加がＢＩの減少だけオフセットされたときに減少するが、ＩＥ命令セットの増加を補償する方法は存在しない。少数のレジスタを指定する命令セットは狭いレジスタフィールドを使用し、したがって低いＢＩを使用するが、多くの可変的で一時的な値をメモリ中において強制的に生かしておき、それ故付加的ロードおよび記憶命令を要求することによってＩＥおよびＩＳを増加させる。符号密度だけが優先度である場合、ＩＳの増加は正味の節約としてＢＩの減少分だけオフセットされるが、良好な性能もまた要求された場合にはＩＥの増加を補償する方法はない。
【００４３】
レジスタの数が増えるにしたがって、ＩＥおよびＩＳの減少は低下して特性は平らになる。命令セットは、少なくとも収穫逓減点に達するように、すなわちレジスタカウントをさらに増加した結果としてＩＥおいて対応した著しい減少が生じないように、十分なレジスタを提供しなければならない。とくにＲＩＳＣ性能レベルに対して、少なくとも１６個の汎用レジスタが必要である。また、３個の４ビットレジスドタフィールドは、符号化するために少なくとも１２ビットを必要とする。操作コード（オプコード）および定数フィールドに対するビットもまた要求され、したがっていくつかのプロセッサによって使用されるような１６ビット符号化では不十分である。
【００４４】
［２４ビット符号化］
大部分の従来技術において符号サイズと性能との間の適切なバランスをとることができていない１つの理由は、命令セットの設計者が１６ビットまたは３２ビットのようなある命令サイズを強制されていると感じているためである。実際、プロセッサのデータワード幅に対して簡単な比率の命令サイズを使用することには利点がある。しかしながら、制限を若干緩和することには大きな利点がある。
【００４５】
好ましい実施形態では、２４ビットの固定長符号化をスタート地点として使用する。２４ビットは高性能に対して十分なだけでなく、命令に対して拡張性と空間とを提供し、それがＩＥを減少させる。別の実施形態は、１８−２８ビットの範囲の符号化を使用することができるが、２４ビットより小さいものは拡張性とブランチ範囲が制限されることになる。２４ビット符号化は、ほとんどの３２ビットＲＩＳＣ命令セットからのＢＩおよびしたがって符号サイズにおける２５％の減少を代表的に示す。最後に、２４ビットは３２のデータパス幅を有するプロセッサにおいて非常に簡単に適応する。
【００４６】
好ましい実施形態は４ビットレジスタフィールドを使用し、これは許容可能な性能のために要求される最小のものであり、また２４ビット命令ワード内に満足できるように適合する最大のものである。多くのＲＩＳＣ命令セットは、３２個のレジスタ（５ビットレジスタフィールド）を使用している。３つの５ビットレジスタフィールドの後、２４ビット命令は操作コードおよび定数フィールドのために９ビットだけを残す。短い定数フィールドの結果、ブランチ、呼出しおよび他のＰＣ関連参照の範囲が不十分となる可能性が高い。操作コードに対するビットが少な過ぎると、拡張性が不十分なものになる。これら２つの理由から、５ビットレジスタフィールドを有する２４ビット命令ワードは望ましくない。１６個と３２個の汎用レジスタ間の性能差（ＩＥの差による）（約６％）は、８個と１６個の汎用レジスタ間の差ほど大きくなく、失われた性能（たとえば、以下に認められるように複合命令およびレジスタウインドウ）を生成するために別の特徴が導入されることができるほど十分に小さい。ＩＳの増加（これもまた６％）は、２４ビットと３２ビットの符号化間の差によるオフセット以上のものである。
【００４７】
５ビットレジスタフィールドを有する多くの命令セットは、コンパイル用の３２個の汎用レジスタを提供しないことも認識すべきである。ゼロを保持するために多くのレジスタが専有されるが、ゼロレジスタは、少数の特別命令操作コードを与えることによって容易に必要のないものにすることができる。別のレジスタが特定の用途に使用されることも多いが、これも命令セットの中に別の特徴を含むことによって回避できる。たとえば、ＭＩＰＳはその３１個の汎用レジスタのうち２個を例外処理コードに対して、１個をグローバル区域ポインタに対して使用する。したがって、それは実際には可変的および一時的なものに対して２８個のレジスタしか有しておらず、これは４ビットレジスタフィールドと適切な命令セット特徴とを備えた命令セットより１２個多いだけである。ソフトウェア規定によって汎用レジスタを呼出す側および呼出される側のセーブされたレジスタに分割することは一般的であり、また、大きいレジスタファイルのユーティリティをさらに減少する。好ましい実施形態は、以下さらに詳細に説明するようにこれを回避する特徴を含んでいる。
【００４８】
［複合命令］
ＩＳおよびＩＥを低くするために、好ましい実施形態はまた、ＲＩＳＣにおいて一般に見出される多数の命令の機能とその他の命令セットを組合せる単一の命令を使用する。簡単な複合命令の一例は、左シフトおよび加算／減算である。ＨＰ ＰＡ−ＲＩＳＣおよびＤＥＣアルファは、これらの動作を実行させる命令セットの例である。小さい定数によるアドレス演算および乗算はしばしばこれらの組合せを使用し、これらの動作を実行することによりＣＰの潜在的なコストの増加（計算パイプラインステージにおいて一連の論理装置が追加されるので）を犠牲にしてＩＥおよびＩＳを減少させる。しかしながら、シフトが０乃至３に制限されたとき、追加の論理手段はＣＰに関して最もクリティカルな制約ではないことが種々の構成において立証されている。逆にいえば、ＡＲＭ命令セットは任意のシフトおよび加算を実行し、その実施においてＣＰは非常に低いものである。
【００４９】
右シフトはしばしば、フィールドを大きいワードから抽出するために使用される。符号なしのフィールドを抽出するために、一般に２つの命令（右シフトによって後続される左シフト、または定数とのＡＮＤによって後続される右シフトのいずれか）が使用される。好ましい実施形態では、この機能を行うために単一の複合命令ｅｘｔｕｉが実行される。それは、命令ワードにおいて丁度４ビットの符号化を指定されたマスクを有するＡＮＤによって後続されるシフトとして実行される。複合命令ｅｘｔｕｉのＡＮＤ部分は非常に論理的であるため、命令セットにそれが含まれることによってその構成のＣＰは増加する可能性は少ない。これは、符号付きのフィールドを抽出する命令に対して該当せず、したがってこれは含まれない。
【００５０】
大部分の命令セット、ＲＩＳＣおよびその他（たとえば、ＡＲＭ，ＤＥＣ ＰＤＰ１１，ＤＥＣ ＶＡＸ，インテルｘ８６，モトローラ６８０００，サンＳＰＡＲＣ，モトローラ８８０００）は条件コードを設定する比較命令を使用し、この条件コードは、制御の流れを決定するために条件コードを試験する条件付きブランチ命令によって後続される。条件付きブランチは大部分のＲＩＳＣ命令セットの１０−２０％の命令を構成し、また各条件付きブランチは通常比較命令と対にされており、したがってこのスタイルの命令セットは無駄である。さらに古い命令セットはしばしば比較およびスキップスタイルの条件に基づいていたが、これには分離した比較およびブランチと同じ欠点があった。
【００５１】
いくつかの命令セット（たとえば、Ｃｒａｙ−１，ＭＩＰＳ，ＤＥＣアルファ，ＨＰ  ＰＡ−ＲＩＳＣおよびＳｕｎＳＰＡＲＣの後におけるＶ９バージョン）は、フレキシビリティを変化させる複合比較およびブランチ機能を提供している。ＣｒａｙおよびＤＥＣアルファは、レジスタとゼロの比較とブランチだけを行う。ＭＩＰＳはレジスタ・ゼロ比較とレジスタ・レジスタ同等および非同等ならびにブランチを行う。ＨＰ  ＰＡ−ＲＩＳＣは、非常に完全なセットのレジスタ・レジスタ比較およびブランチ命令を提供する。
【００５２】
好ましい実施形態は、最も有用な複合比較およびブランチ命令を提供する。的確なセットの選択には、とくに２４ビット（３２ビットとは対照的に）符号化が目標である場合、それが消費する操作コード空間により各比較およびブランチのユーティリティのバランスをとることが要求される。その他の命令セットはこのテストに失敗する。たとえば、ＨＰ  ＰＡ−ＲＩＳＣは、ほとんど効用のないいくつかの複合比較およびブランチ命令コード（たとえば、加算の後のネバーおよびオーバーフロー）を提供し、有効ないくつかを削除する。
【００５３】
好ましい実施形態に対して選択された複合比較およびブランチ命令のセットは、
Ａ==０，Ａ！= ０，Ａ＜Ｓ０，Ａ＞= Ｓ０，
Ａ==Ｂ，Ａ！= Ｂ，Ａ＜ＳＢ，Ａ＜ＵＢ，Ａ＞= ＳＢ，Ａ＞= ＵＢ，
（Ａ＆Ｂ）==０，（Ａ＆Ｂ）！= ０，（〜Ａ＆Ｂ）==０，（〜Ａ＆Ｂ）！= ０，
Ａ==Ｉ，Ａ！= Ｉ，Ａ＜ＳＩ，Ａ＜ＵＩ，Ａ＞= ＳＩ，Ａ＞= ＵＩ，
ＡのビットＢ==０，Ａ！のビットＢ= ０，
ＡのビットＩ==０，Ａ！のビットＩ= ０
ここで、ＡおよびＢはレジスタの内容を示し、レジスタの関連演算子上の接尾部“Ｕ”および“Ｓ”は、符号なしの、または符号付きのレジスタ内容との“符号なし”または“符号付き”の各比較を示す。ゼロとの関連演算子上の接尾部（たとえば、Ａ＜Ｓ０）はゼロに対する符号なしの、または符号付きの比較を示し、Ｉは指標定数を示す。
【００５４】
複合比較およびブランチは、分離した比較およびブランチ命令セットと比較して、また、ＭＩＰＳおよびＤＥＣアルファのような部分的比較およびブランチ命令セットと比較した場合でも、ＩＥおよびＩＳを減少させる。好ましい実施形態は、複合比較およびブランチを実施するためにＣＰＩの増加を要求する可能性があるが、全体的な性能効果は依然として改善されたものである。
【００５５】
分離した比較およびブランチ命令セットの主な利点は、比較演算子、比較オペランドおよびブランチ目標を指定するのに２つの命令ワードが利用可能であり、このためにそれぞれに対する豊富なフィールド幅割当てが可能になることである。これと対照的に、複合比較およびブランチ命令セットは、これら全てを単一の命令ワードにパックしなければならず、その結果フィールドが少なくなり、適合しない値を処理するメカニズム（たとえば、広い範囲を有するブランチ）に対する必要性も小さくなる。好ましい実施形態は、比較操作コード、２つのソースレジスタフィールドおよび２４ビット命令ワードへの８ビットＰＣ相対オフセットをパックする。８ビットターゲット特定子は場合によって不十分であり、広い範囲を有する無条件ブランチに基づいて逆の性質の条件付きブランチを使用するためにコンパイラまたはアセンブラが必要になり、これを好ましい実施形態が提供する。この状態は当然ＩＥおよびＩＳを増加させ、これは望ましくない。このために、好ましい実施形態はまた、最も一般的な場合であるゼロに対する試験を行う一連の複合比較およびブランチを提供する。これらの複合比較およびブランチ命令は、それらの同僚(colleagues)よりはるかに広い範囲を提供する１２ビットのＰＣ相対オフセットを有している。両形式を提供した余分な複雑さはＩＥおよびＩＳの改善によって釣り合わせられる。好ましい実施形態は、ＭＩＰＳおよびＤＥＣアルファとは異なり、ゼロに対する全ての比較を提供するわけではなく（ゼロ以下およびゼロより大きいレジスタを省略する）、再び、好ましい実施形態はプログラムニーズを操作コード空間と釣り合わせる命令のセットを提供する。
【００５６】
全ての命令を符号化するために２４ビットしか使用しない１つの結果として、命令ワードにおける定数フィールドのサイズが限定される。これは、ＩＳおよびＩＥを潜在的に増加させる可能性が高い（もっとも、ＩＥの増加はその定数をループの外側のレジスタにロードすることによって減少させることができるが）。好ましい実施形態はこの問題をいくつかの方法で解決する。第１に、それは最も共通する定数を捕獲するために小さい定数フィールドを提供する。狭い（たとえば、４ビット）定数フィールドを最大限に使用するために、命令セットは定数値を直接指定するのではなく、それを符号化するためにフィールドを使用する。符号化された値は、広範囲のプログラム統計群からＮ（たとえば、１６）の最大頻度定数として選択される。好ましい実施形態は、１６の値が０乃至１５ではなく−１および１乃至１５であるように選択されるａｄｄｉ．ｎ命令でこの技術を使用する。０の加算は全く効用がなく（分離したｍｏｖ．ｎ命令が存在する）、−１加算は共通である。ｂｅｑｉ、ｂｎｅｉ、ｂｌｔｉ、ｂｇｅｉ命令はまた、種々の共通定数を符号化する４ビットフィールドを使用する。ｂｌｔｕｉおよびｂｇｅｕｉ命令は、符号のない比較が異なったセットの使用値を有しているため、異なった符号化を使用する。  
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも１つの命令を有している。テスト（試験）はフィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含む。
【００５７】
最も普通の定数は典型的に非常に小さく、狭いフィールドは所望の値のほとんどを捕獲する。しかしながら、ビット様式の論理動作（たとえば、ＡＮＤ、ＯＲ、ＸＯＲ等）で使用される定数は種々の種類のビットマスクを表し、小さい定数ティールドでは適合しないことが多い。たとえば、単一ビットが任意の位置において１に設定されているか、あるいは単一ビットが任意の位置においてゼロに設定されている定数は普通である。１のシーケンスが後続する０のシーケンス、および０のシーケンスが後続する１のシーケンスからなるビットパターンもまたは普通である。この理由から、好ましい実施形態はマスクを命令ワード中に直接入れる必要を避けるための命令を有している。好ましい実施形態における例はｂｂｅｉおよびｂｂｓｉ命令であり、それらはそれぞれ、レジスタの指定されたビットが０か１かに応じてブランチする。そのビットはマスクではなくビット番号として与えられる。ｅｘｔｕｉ命令（上述された）はシフトを行い、このシフトは、一連の１により後続される一連の０から成るマスクによって後続され、ここで１の数はこの命令における定数フィールドである。
【００５８】
［コプロセッサブールレジスタおよびブランチ］
複合比較およびブランチは非常に多数のものを３２ビット未満の広さの命令ワード中にパックするために、上記にリストされた命令は利用可能な命令ワードのかなりの部分を消費する。これは、これらのブランチの頻度とその結果達成される節約のために、これらのブランチのためになる妥協である。
【００５９】
命令セット設計に対するその他の制約の他に、命令セットは拡張可能で（新しいデータタイプの追加を可能にし）なければならず、緊密に結合されたコプロセッサ（共同するプロセッサ）において特徴が活用されなければならない。しかしながら、短い命令には、浮動小数点、ＤＳＰのような他のデータタイプに対する複合比較およびブランチ命令を追加するための空間はない。さらに、各コプロセッサがそれ自身の複合比較およびブランチを実施することはできない可能性がある。個々の複合比較およびブランチ命令の実施が可能な場合でも、それは無駄かもしれない。それは、このようなデータタイプに関する比較およびブランチはまた多くのアプリケーションにおいて整数データより頻度が少ないからである。
【００６０】
この理由から、本発明の好ましい実施形態は、コプロセッサ条件付きブランチに対して異なった方法を使用する。好ましい実施形態において、命令セットは、任意のコプロセッサパッケージに予め必要なものであるオプショナルパッケージを含んでいる。このパッケージは、１６個の単一ビットブールレジスタと、これらのブールレジスタおよびそれに応じたブランチを試験するＢＦ（偽ならばブランチ）およびＢＴ（真ならばブランチ）命令とを追加する。その後、コプロセッサは、たとえばそれらのサポートされているデータタイプの比較に基づいてブールレジスタを設定する命令を出す。ブールレジスタならびにＢＦおよびＢＴ命令は、全てのコプロセッサによって共有され、それによって短い命令ワードが効率的に利用される。
【００６１】
これは、上述した多くの初期の命令セットにおいて見出される条件コードベース比較およびブランチの新しい変形である。初期の命令セットは、プロセッサと、そのコプロセッサ（たとえば、ＰｏｗｅｒＰＣ）と、使用される多数のコプロセッサごとの単一ビット条件コード（たとえば、ＭＩＰＳ）との間における多数の共有多ビット条件コードを有している。本発明の好ましい実施形態では、多数の共有単一ビット条件コードが使用される。
【００６２】
比較に対する多数の行先（たとえば、本発明の好ましい実施形態では、ＭＩＰＳ、ＰｏｗｅｒＰＣ）を設けることにより、コンパイラがコードをさらに自由にスケジュールすることが可能になり、単一の命令中の多数のデータ値を比較して多数の結果（たとえば、ＭＩＰＳ ＭＤＭＸ）を生成する命令が可能になる。
【００６３】
比較結果レジスタを多数のコプロセッサ間で共有する（本発明）か、あるいはこれをプロセッサとそのコプロセッサとの間で共有する（ＰｏｗｅｒＰＣのように）ことによって、比較結果を試験するために必要とされる操作コードの数が節約される。またこれによって、比較結果レジスタ上の論理動作を実行する命令を提供する可能性もまた増加する（本発明の好ましい実施形態およびＰｏｗｅｒＰＣのように）。
【００６４】
単一ビット比較結果レジスタ（本発明の好ましい実施形態、ＭＩＰＳ）を多ビット（他のほとんどのＩＳＡ）の代わりに使用することにより、要求される比較操作コードの数は増加するが、必要とされるブランチ操作コードの数は減少する。ブランチ命令はまたＰＣ相対ターゲットアドレスを提供しなければならないため、好ましい実施形態では単一ビット比較結果（ブール）レジスタが使用され、したがって非常に多数のコプロセッサが存在していなければ、ブランチ命令コードの追加はさらに高価なものとなる。
【００６５】
要約すると、複合比較およびブランチはコードサイズの最小化に対して重要な技術であるが、ＢＩを小さい状態に維持しておくことが必要なことから、異なる頻度および要求されるコプロセッサ操作コードの異なる数のために分割方法がコプロセッサ比較およびブランチに適切であることが分かっている。比較およびブランチ選択肢の範囲内において、コプロセッサ間で共有される多数の単一ビット比較結果レジスタを使用することにより、命令コード空間は最も効率的に利用される。
【００６６】
［ロードおよび記憶命令］
好ましい実施形態のロードおよび記憶命令は、レジスタからのベースアドレスに加算される８ビット定数オフセットを有する命令フォーマットを使用する。最初に、好ましい実施形態はこれら８ビットの大部分を形成し、次にこれが不十分な場合に簡単な拡張方法を適用する。また、好ましい実施形態の４つのロード／記憶オフセットは符号付き拡張（他の多くの命令セットにおいて共通の）ではなくゼロ拡張される。これは、値１２８乃至２５５のほうが値−１２８乃至−１より普通であるためである。また、ほとんどの参照は整列されたベースレジスタからの整列されたアドレスに対するものであるため、オフセットは参照サイズに対して適切に左シフトされる。３２ビットのロードおよび記憶に対するオフセットは２だけシフトされ、１６ビットのロードおよび記憶に対するオフセットは１だけシフトされ、８ビットのロードおよび記憶に対するオフセットはシフトされない。大部分のロードおよび記憶は３２ビットなので、この技術では２の付加的なビット範囲が与えられる。
【００６７】
ロード／記憶命令（またはａｄｄｉ命令）において指定された８ビット定数オフセットが不十分である場合、好ましい実施形態では、８だけ左シフトされたその８ビット定数を加算するａｄｄｍｉ命令が与えられる。したがって、２命令シーケンスは、ａｄｄｍｉからの８およびロード／記憶／ａｄｄｉからの８からなる１６のビット範囲を有する。さらに、上述の方法の１つによって符号化されない定数は、分離した命令によりレジスタ中にロードされなければならない（この技術は、２つではなく単一のレジスタオペランドしかとらないために上記のａｄｄｍｉソリューションを必要とするロード／記憶命令には適用できない）。好ましい実施形態は、定数をレジスタにロードするための２つの方法を提供する。第１の方法は、このためのｍｏｖｉ（および以下に説明される短い命令フォーマットにおけるｍｏｖｉ．ｎ）命令である。ｍｏｖｉは命令ワード中の１２ビット符号付き拡張された対のフィールド中の定数を指定する。また、定数値をレジスタ変数に割当てることはそれ自体は普通のことである。
【００６８】
３２ビット以下の命令フォーマットにおいて、任意の３２ビット定数を符号化できる命令は１つもなく、したがって他のいくつかの方法がレジスタを任意の定数値に設定するために必要とされる。少なくとも２つの方法が別の命令セットにおいて使用されており、これらの方法のどちらもソリューションを提供するために上記の技術と共に使用されてよい。第１のソリューションは、各命令の中の多数の定数を使用して３２ビットの定数を一緒に合成する命令の対を提供することである（たとえば、ＭＩＰＳ ＬＵＩ／ＡＤＤＩ，ＤＥＣアルファ，ＩＢＭ ＰｏｗｅｒＰＣは２つの個別の命令における上位の１６ビットと下位の１６ビットとを指定する命令を有している）。第２のソリューション（たとえば、ＭＩＰＳ浮動小数点定数、ＭＩＰＳ１６およびＡＲＭ Ｔｈｕｍｂ）は、ロード命令によりメモリから定数を読出す簡単な方法を提供することである。
【００６９】
ロード自身が単一の命令だけを必要とする場合、定数を参照するためにロード命令を使用することによって、命令のシーケンスを使用した場合より低いＩＳおよびＩＥが提供されることができる。たとえば、ＭＩＰＳコンパイラは、（とくに）４バイトおよび８バイト浮動小数点定数が保存されている定数プールにポインタを保持するために３１の汎用レジスタの１つを専有する。このレジスタによってアドレスされた区域が６４ＫＢより小さい場合、その定数は単一ロード命令によって参照されることができる。これは、ＭＩＰＳがロードにおいて６４ＫＢのオフセット範囲を有しているためである。一度参照された定数に対して、３２ビットのロード命令プラス３２ビット定数の合計サイズは、命令ワードを使用した２者と同じである。定数が２回以上参照された場合、定数プールはもっと小さい合計サイズを提供する。２４ビットの命令対に対する４８ビットに対して定数プールプラスロードが５６ビットである好ましい実施形態の２４ビットサイズのような他の命令長に対して、妥協は異なる。しかしながら、定数が多数回使用された場合、定数プールはほとんど常にさらに有効な合計サイズソリューションである。
【００７０】
定数およびその他の値をアドレスするためにレジスタを専用にするＭＩＰＳ技術は、上述したようにより狭い命令ワードが一般に３２個より少ないレジスタを提供し、したがって各レジスタはより高い価値を有するために、本発明の好ましい実施形態およびその他の実施形態にとって望ましくない。また、狭い命令セット中のレジスタから利用可能なオフセットは制限され、したがって単一のレジスタは小さい定数プール（小さ過ぎて実用的でない）へのアクセスしか行わない。好ましい実施形態は、定数プールにアクセスするために使用されることのできるＰＣ相対ロードを提供する際に、多数の命令セット（たとえば、ＰＤＰ１１，モトローラ６８０００，ＭＩＰＳ１６，ＡＲＭ Ｔｈｕｍｂ）のソリューションを採用する。
【００７１】
任意の定数をロードするいずれの技術も本発明に適用可能である。好ましい実施形態は、第２の技術を使用しているが、一方、別の実施形態は、完全な定数の一部分をそれぞれ含んでいる複数の命令を使用する。２４ビット命令ワードに対する別の実施形態の具体的な例は、１６ビット命令定数をレジスタの上位部分に入力する１つの命令（１６ビットの定数＋４ビットのレジスタ行先＋４ビットの命令コード＝２４ビット）と、１６ビットの符号付き定数をレジスタに加算する別の命令（１６ビットの定数＋４ビットのレジスタソースおよび行先＋４ビットの命令コード＝２４ビット）とを有するものである。
【００７２】
［オーバーヘッド減少ループ命令］
好ましい実施形態はまたいくつかのデジタル信号プロセッサ（ＤＳＰ）において見出されるが、ＲＩＳＣプロセッサ中では見出されないループ特徴を提供する。ほとんどのＲＩＳＣプロセッサはそれらの既存の条件付きブランチ命令を使用して、新しい特徴を提供することによりループを実施するのではなくループを生成する。この効率的使用によって、プロセッサは簡単なままに維持されるが、ＩＥおよびＩＳが増加する。たとえば、Ｃループ
ｆｏｒ（ｉ＝０；ｉ＜ｎ；ｉ＋＝１）｛
ｂｏｄｙ
｝
は、好ましい実施形態において、
ｍｏｖｉ．  ｎ  ａ３，０                  //initialize  ｉ
ｂｌｔｉ    ａ２，１，done                //no iteration if  ｎ＜＝０
ｌｏｏｐ：
ｂｏｄｙ
ａｄｄｉ．ｎ  ａ３，ａ３，１    //ｉ＋＝１
ｂｌｔ  ａ３，ａ２，ｌｏｏｐ              //continue if ｉ＜ｎ
としてコンパイルされる。あらゆる反復には２つの“ループオーバーヘッド”の命令である、加算および条件付きブランチが存在する。（好ましい実施形態の比較およびブランチ特徴がない場合には、３つのオーバーヘッドの命令が必要になる。）これは明らかにＩＥを増加させる。さらに、いくつかのプロセッサ構成における選ばれた条件付きブランチは、パイプライン化および、またはブランチ予測のために、実行すべきサイクルを別の命令より多く要求する可能性がある。したがって、ＣＰＩが増加する可能性がある。いくつかの命令セットは、レジスタをインクレメントまたはデクレメントし、比較し、ブランチするための単一の命令（たとえば、ＤＥＣ ＰＤＰ６，ＤＥＣ ＰＤＰ１１，ＩＢＭ ＰｏｗｅｒＰＣ）を追加し、この場合はＩＥを低下させる（ＩＢＭ ＰｏｗｅｒＰＣ命令の実施はまたＣＰＩの低下を目標とする。）。
【００７３】
ループ本体が小さいとき、ループオーバーヘッドの性能インパクトはさらに高い。多数のコンパイラは、１以上の反復にわたってループオーバーヘッドを拡散するためにこの場合ではループアンローリングと呼ばれる最適化を使用する。Ｃでは前述のループは例えば以下のように変換される。
【００７４】
ｉ＝０；
ｉｆ（ｎ＞０）｛
ｉｆ（（ｉ＆１）！＝０）｛
ｂｏｄｙ
ｉ＋＝１；
ｉｆ（ｎ＝＝１）ｇｏｔｏ ｄｏｎｅ；
｝
ｄｏ  ｛
ｂｏｄｙ
ｉ＋＝１：
ｂｏｄｙ
ｉ＋＝１；
｝ｗｈｉｌｅ  （ｉ＜ｎ）；
ｄｏｎｅ：；
｛
幾つかのケースでは、
ｂｏｄｙ
ｉ＋＝１；
ｂｏｄｙ
ｉ＋＝１；
これは以下に置換されてもよい。
【００７５】
ｂｏｄｙ（ｉ）
ｂｏｄｙ（ｉ＋１）
ｉ＋＝２；
ｉ＋定数が本体の命令中に（例えばロードと記憶命令のオフセットに）折畳まれることができ、それによってただ１つのインクエメントだけが反復毎に必要とされる。
【００７６】
２よりも大きい係数によるループアンローリングは非常に普通のものであり、４および８が普通である（幾つかの利点を有する２の累乗）。係数２のアンロールについて留意することは、結果として生じるコードサイズの増加である（本体は前述の例では３回生じる）。性能を実現するためのＲＩＳＣプロセッサにおけるこの技術の使用はコードサイズにわたる性能および単純化の強調と一貫している。
【００７７】
多数のＤＳＰと、幾つかの汎用プロセッサはある種のループを実行する他の方法を与える。第１の方法は固定回数だけ第２の命令を反復する命令を与えることである（例えばTI  TMS320C2X.  Intel  x86）。これは実行が非常に簡単である利点を有する。これが適用可能な場合、ループオーバーヘッドを除去し、反復して同じ命令をフェッチする要件を除くことによりパワー消費を節約する。反復命令を有する幾つかの命令セットはプロセッサがループ中に中断を行わないことを必要とし、これは重要な制限である。また、１つの命令ループは限定された状態でのみ便利であり、反復された命令が多数の効果を有するのに十分複雑であるときだけ有効であり、それによって各反復において異なるデータで動作する。
【００７８】
簡単な反復命令についての改良は減少されたまたはゼロループオーバーヘッドで多数回命令のブロックを反復する能力である（例えばTI TMS320C5X）。好ましい実施形態はそのループ、即ちloopgtz およびloopnez 命令によりこの能力を与える。前述の第１のＣループは以下の命令へ編集される。
【００７９】
movi.n a3,0         //ｉ＝０
loopgtz a2,done     //goto done if a2 ＜＝0, otherwise
//set LCOUNT to a2-1, LBEG to loop，
//and LEND to DONE, and the fall
//into body
loop：
body
addi.n a3,a3,1 //ｉ＋＝１
//the processor returns automatically
//to loop when it reaches here (LEND)
done：
ＬＣＯＵＮＴ、ＬＢＥＧおよびＬＥＮＤレジスタは命令セットで利用され、それによってループは中断可能である。これはまたこれらのレジスタが他の命令時実行と並列に読取られ、書込まれることを可能にする（汎用レジスタが使用されるならば、レジスタファイルの読取り／書込みポートは増加される必要がある）。好ましい実施形態はＬＣＯＵＮＴレジスタが命令のフェッチを行うために最大時間を与えるようにテストされた後、直ちにデクリメントされることを特定する。ループ命令は、好ましい実施形態によってループの条件的ブランチコンパイルに関連するブランチペナルティを取ることを防止できることを期待されている。
【００８０】
ａ３（ｉ）のインクレメントはループ命令により自動的に実行されない。前述したように特に強度減少の最適化後に、多数のループは異なる量だけ帰納変数のインクレメントまたはデクレメントを必要とするので、これは別々の命令のままにされる。さらに、幾つかのケースではこれらのインクレメントは自動インクレメントのようなコプロセッサアドレスモードへ折り畳まれることができる。最終的に、汎用レジスタをインクレメントするために、汎用レジスタファイルに特別のポートが必要とされる。
【００８１】
前述の例および説明から認められるように、ループ命令はＩＥとＩＳの両者を減少し、ＣＰＩを減少する構成を容易にする。ループ命令がループアンローリングを行う必要性をなくしたとき、ＩＳにおけるインパクトは最大であるが、アンロールのケースでさえも存在する。しかしながら、当業者により容易に明白であるように、好ましい実施形態ではこれらの命令が存在することにより付加的なプロセッサ構成コスト（例えば特別なレジスタ、特別な命令フェッチ論理装置）が必要とされる。
【００８２】
［ハザード］
ほとんどの命令セットはパイプラインハードウェアにより実行される。パイプラインの使用はしばしばハードウェアまたはソフトウェアで避けなければならない命令実行中のハザードを発生する。例えば多数のパイプラインはパイプラインの端部において（または少なくとも後期に）レジスタファイルを書込む。正確な動作においては、ソースオペランドとして書込まれるレジスタを使用する次の命令は、値が書込まれるまでまたは書込まれる値がバイパスされなければならないか或いは依存命令へ転送されなければならなくなるまでレジスタファイルの読取りを待機しなければならず、レジスタファイル内容は無視される。
【００８３】
ほとんどのプロセッサは結果が有効になるまで通常のレジスタファイルと両遅延依存命令に対してハードウェアの依存検出を行い、その後、これがレジスタファイルに書込まれる前に依存動作をバイパスする。（通常はＮＯＰの挿入による）ソフトウェアの命令の遅延は（ＩＳの増加により）コードサイズを著しく増加し、バイパスしないことは非常に性能を減少する。したがって検出、機能停止、バイパスハードウェアはその価格に値する。
【００８４】
しかしながら、汎用レジスタファイル以外のプロセッサ状態では、このようなレジスタはしばしばそれ程参照されないので、妥協点は異なる。幾つかの命令セット（例えばＭＩＰＳ）はそれ故、（例えば書込みを使用とは別にするためにＮＯＰを挿入することによって）特別なレジスタハザードのソフトウェア管理に切換える。これは残念ながら、命令ストリーム中に組立てられるパイプラインの知識を必要とする。
【００８５】
代りの方法はハザードを避けるために、全ての後続する命令を遅延する特別なレジスタ書込みを有することである。これは簡単で問題を解決するが、（例えば内容スイッチ後の状態を回復するか妨害するため）特別なレジスタの書込みがしばしばグループで行われ、多くは他の特別なレジスタの書込みとそれらに基づく命令を遅延する理由はないので非効率的である。本発明の好ましい実施形態はハイブリッド方法を採用する。これは検出されずハードウェアにより防止されたハザードを防止するためにソフトウェアが挿入しなければならないＩＳＹＮＣ、ＲＳＹＮＣ、ＥＳＹＮＣ、ＤＳＹＮＣ命令を与える。ＮＯＰとは異なって、これらの命令は全ての特別なレジスタの書込みが完了するまで機能停止する。これは１つの構成依存型命令が実現されることを可能にし、そうでなければ、潜在的に多数の特定構造向けＮＯＰを必要とする。また、プログラマーが性能を最大にするために機能停止せずに、特別なレジスタ書込みを共にグループ化することを可能にする。
【００８６】
［コード密度オプション］
好ましい実施形態の命令セットは、命令セットの全ての構成に存在することが好ましい命令のコアセットと、所定の構成に存在しても存在しなくてもよいオプショナル命令パッケージのセットとからなる。１つのこのようなパッケージはＢＩ、すなわち命令当りの平均ビットを減少することにより顕著なコードサイズの減少を行う短い命令フォーマットである。これらの短いフォーマット命令が存在するとき、好ましい実施形態は固定長（２４ビット）命令セットから２つの命令サイズ（２４ビットおよび１６ビット）を有する長さへ変化する。代わりの実施形態は命令サイズの異なるセットを取出す。例えば２４／１６符号化への類似のコード密度による１つの別の方法は２４／１２であり、ここでは短い形態において３つの代わりに２つのレジスタフィールドが存在する。
【００８７】
短い命令形態が随意のものであるので、これらの形態はコードサイズの改良だけに使用され、これらの命令には新しい機能は存在しない。１６ビットで符号化されることができる命令セットは適合する（または例えば一定のフィールド幅の減少によって適合するように変更されることができる）最も統計的に頻度の高い命令として選択される。ほとんどの命令セットにおける最も頻度の高い命令はロード、記憶、ブランチ、付加、移動であり、これらは丁度好ましい実施形態の１６ビット符号化に存在する命令である。ＢＩを減少するための全体的に短いフォーマットの使用はMotorola 68000、Intel x86 、DEC VAX のような可変長命令セットと対称的であり、それらでは各命令は主にオペランドの数、オペランドの種類に依存し、使用の静的頻度に依存しない符号化を有する。
【００８８】
本発明と類似の特性を有することで知られている唯一の命令セットは、Simens Tricoreであり、これは３２ビットの主要なフォーマットと、ＢＩを減少するための１６ビットの短いフォーマットを有する。本発明と異なって、主要なフォーマットは長過ぎるため例示的なＢＩを実現することができず、短い形態は、ソースおよび行先レジスタのうちの一方を同一にさせ、またはソースまたは行先レジスタの一方を操作コードにより示唆させる２つのレジスタフィールドだけを与えるので、それ程機能的ではない。前述したように、示唆されたソースレジスタの使用は構造のＣＰまたはＣＰＩの一方を増加させる傾向がある。
【００８９】
１６ビットのみの命令セットは不十分な性能と機能性を与えることを先に示した。最も頻度の高い命令の１６ビットの符号化はこの落とし穴（pitfall ）を避ける。最も頻度の高い命令だけが短い符号化を必要とするので、３つのレジスタフィールドが有効であり、狭い一定のフィールドは大きな使用部分を捕捉できる。アプリケーションを表すために必要なほぼ半分の命令は、３つの４ビットフィールドがレジスタ特定子または定数のために保留された後、１６ビット符号化に有効な１６個の操作コードの丁度６で符号化されることができる。
【００９０】
１６ビット符号化された密度の高い命令オプションは132i.n命令（ロード３２ビット、４セットオフセット）と、s32i.n（３２ビット保存、４ビットオフセット）と、mov.n （一方のレジスタの内容を別のレジスタへ移動）と、add.n （２つのレジスタの内容を付加）と、addi.n（レジスタと即値を付加、ここでは即値は−１または１…１５の範囲である）と、movi.n（レジスタを即値でロード、ここでは即値は−３２…９５の範囲である）と、nop.n （動作ではない）と、break.n （中断）と、ret.n 、retw.n（ret およびretw）と、beqz.n（レジスタがゼロならば、６ビットのコードなしのオフセットを有するブランチを転送）と、bnez.n（レジスタがゼロでないならば、６ビットのコードなしのオフセットを有するブランチを転送）を含んでいる。
【００９１】
別の実施形態は前述した１２ビットの短い形態を使用する。１２ビット形態は２つの４ビットフィールドと、４ビットの主要操作コードだけをサポートする。これはロードだけをサポートし、オフセットなしで記憶し（時折、フィールドにおけるレジスタ間接アドレスと呼ばれる）、行先と１つのソースレジスタが同一である場合命令を付加する。コンパイラは適切であるとき３つのオペランドを自由に使用するので、他の状況のようにこれらの制限は性能における限定ではない。制限は１２ビット形態がしばしば使用されることを防止するが、その減少されたサイズは部分的に補償する。３０％の１２ビットおよび７０％の２４ビットにおいては、ＢＩは２０．４ビットであり、ほぼ５０％の１６ビットと５０％の２４ビットにより実現される２０．０ビットと同一である。１つのフォーマットが他のフォーマットのサイズの半分であるときに生じる幾つかの構造の単純化が存在するが、命令のサイズとデータ幅の最大の共通の除数（ｇｅｄ）が小さい（これは２４、１２、３２では４、２４、１６、３２では８）とき幾つかの構造問題が存在する。全体的に２は構造価格にほぼ等しく、好ましい実施形態は良好なコードサイズを与える１であり、これは２４／１６である。
【００９２】
２４／１２に比べて２４／１６の付加的な１つのコードサイズの欠点が存在する。ブランチオフセット（異なる命令アドレスを経てターゲット命令を特定する命令定数）は全ての命令サイズのｇｅｄの倍数でなければならない。これは２４／１２に対しては１２であり、２４／１６で８である。この数が大きい程、ブランチはさらに（ビットにおいて）到達できる。この到達点を超えるブランチはＩＳを増加する多数の命令シーケンスを必要とする。
【００９３】
固定長命令の最も重要な利点は、大部分のＲＩＳＣで見られるようにプロセッサ構造がサイクル当たり多数の命令を実行するときに得られる。この状態では、命令は通常並列で復号される。可変長命令では、十分な復号は第２の命令の開始を発見するために第１の命令で行われなければならず、それによって復号はそこで開始することができ、十分な復号は第３の命令の開始を発見するために第２の命令で行われなければならない。これはＣＰを増加する。ＣＰの増加を防止するためにパイプライン段を付加することはＣＰＩを増加する可能性が高い。幾つかの構造は潜在的な命令の開始の都度の復号と、その情報が先の命令の復号から利用できるようになったときに実際の命令の選択によって早期の開始を獲得する。これは明白に構造価格を増加する。命令を分類するパイプライン段を付加することは同様に価格を増加する。命令キャッシュへ予め復号する等のさらに他の可能性も可能であるが、全て構造価格を増加する。
【００９４】
好ましい実施形態は可変長の復号問題を除去しないが、第１にただ２つの命令長を使用し、第２に２つの長さを弁別するため１つの命令ビットを使用することにより、できる限り簡単にする。これは構造価格と、ＣＰに対する任意の影響を最少にする。最後に、短い形態をオプショナルにすることにより、好ましい実施形態は価格と、コードサイズが１番の優先順位ではないときのＣＰ効果を減少することを可能にする。
【００９５】
多数の命令セットはリトルエンディアンまたはビッグエンディアンバイトオーダリングで動作する。これを実現する技術は例えばWeberの米国特許第4,959,779号明細書に記載されている。しかしながら、可変サイズの命令を有する命令セットは付加的な注意を必要とする。ＭＩＰＳ命令セットはビッグおよびリトルエンディアンバイト順序で同じ命令フォーマットを使用し、これは命令が全て１サイズであるので動作するだけである。好ましい実施形態は、命令サイズを決定するために必要なビットが最下位の番号のアドレスバイト（好ましい実施形態では最小のアドレス可能な単位）に存在する特性を維持するために、ビッグおよびリトルエンディアンバイト順序に対して異なる命令ワードを特定する。
【００９６】
［ウィンドウを付けられたレジスタオプション］
別のオプショナルパッケージはウィンドウを付けられたレジスタオプションである。これはさらに低いＩＥおよびＩＳに与えられる。低くされたＩＥからの性能の増加はまた、３２の代わりに１６レジスタを有するので、ＩＥの増加を補償する。レジスタウィンドウはSun SPARCのような幾つかの他のプロセッサで見られる。サブジェクトに対する完全な概論はSun SPARCの文書を参照する。名称“レジスタウィンドウ”とは命令中のレジスタフィールドが現在のウィンドウ中のレジスタをさらに大きいレジスタファイルに特定する典型的な構造を示している。ウィンドウの位置はウィンドウベースのレジスタにより示される。
【００９７】
レジスタウィンドウは（ＩＳとＩＥを減少する）処理エントリおよびエクシートでレジスタを保存し回復する必要性をなくす。これはこれらの点におけるポインタを変更することにより行われ、これは幾つかのレジスタを視界から隠し、新しいレジスタを露出する。露出されたレジスタは通常有効なデータを含まず、直接使用されることができる。しかしながら、露出されたレジスタが有効なデータを含むとき（ウィンドウはさらに移動しているので先の呼フレームのレジスタへラップアラウンドされるため）、実行の継続（これは通常ソフトウェアハンドラへのトラップにより実現される）の前に、ハードウェアがこれを検出し、有効なレジスタをメモリに記憶する。これはレジスタウィンドウオーバーフローと呼ばれる。レジスタがメモリに記憶されているフレームに呼が戻るとき、レジスタウィンドウのアンダーフローが生じ、プロセッサはメモリからの値をロードしなければならない（これもまた通常ソフトウェアハンドラへのトラップにより実現される）。
【００９８】
呼者と、被呼者との間の物理的レジスタファイルの視野中でオーバーラップするレジスタウィンドウはまた、処理手順へのアーギュメントがレジスタで通過されるときに生じるアーギュメントシャッフリングを防止する（アーギュメントシャッフリングはＩＳとＩＥを増加する）。最後に、レジスタウィンドウは可変および一時的な値をレジスタに割当てるブレークイーブン点を変更し、したがってレジスタの使用を助長し、これはメモリ位置を使用するよりも高速度で小型である（またＩＳとＩＥを減少する）。
【００９９】
本発明のレジスタウィンドウとSPARC との主な差は、（１）SPARC はウィンドウポインタに対して固定したインクレメント１６を有し、（２）SPARC はウィンドウを付けられたレジスタに加えてグローバルレジスタを有し、本発明の好ましい実施形態ではそれを具備しておらず、（３）SPARC は現在のウィンドウが先のウィンドウとオーバーラップする状況のときウィンドウのオーバーフローを検出し、一方、好ましい実施形態は先のウィンドウの一部であるレジスタを参照するときウィンドウのオーバーフローを検出することである。
【０１００】
固定したインクレメントから可変のインクレメントへの変更は構造価格を低くするのに重要である。これは非常に小さい物理的レジスタファイルの使用を可能にする。例えば多数のSun SPARC 構造は１３６エントリの物理的レジスタを使用し、好ましい実施形態は類似のウィンドウ性能を実現するために６４のみのエントリのレジスタファイルを必要とするに過ぎない。可変インクレメントの複雑性の増加が存在するが、プロセッサ構造価格の差は３０％以上である（これはさらに簡単な固定したインクレメントSPARC 方法により必要とされるさらに大きいレジスタの価格である）。好ましい実施形態はオーバーフローとアンダーフローを検出し、スタックフレームを組織するための新しい方法を特定する。
【０１０１】
表面上において、レジスタウィンドウ機構はレジスタファイルの読取りと直列して付加（短いにもかかわらず）を必要とすることによりＣＰ（またはＣＰＩ）を増加するように見える（パイプラインに付加を行うための１サイクルが存在するので、レジスタの書込みは問題ではない）。しかしながら、レジスタファイルへのウィンドウを付けられていないレジスタのアクセスに対して類似したタイミングとウィンドウサイズを有する方法でレジスタウィンドウアクセスを実行することが可能である。例えば、６４レジスタの物理的レジスタファイルと、任意の所定の命令に可視である１６のウィンドウを考慮する。この場合、１６の６４：１多重化はウィンドウポインタにのみ基づいて１６の可視レジスタを選択するために使用され、その後これらの１６の結果は１６エントリレジスタファイルのようにアクセスされる。１６の６４：１多重化の使用は、高い構造価格を要する。この理由で、好ましい実施形態は４の倍数に制限されるウィンドウポインタを特定し、この価格を係数４だけ減少する。連続した加算の使用を選択する構成においてさえも、これはレジスタ数の２ビットが即座にレジスタファイルアクセスの開始に使用されることができ、さらに低速度の合計ビット（４ビットと２ビット入力の合計）がアクセスにおける後の点で使用される。最後に、これらの２つの構成間のハイブリッドが可能であり、構造価格は中間になる。
【０１０２】
本発明の実施の形態に記載の発明は、１６以上の汎用レジスタと、それらのレジスタとデータを交換するメモリにアクセスする手段と、２８ビットを越えない長さを有する命令の実質上全てであるメモリからの命令を処理するための演算装置とを具備し、
少なくとも１つの命令は、オプコードフィールドと、命令に対する定数オペランドを特定するフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる１つのソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる１つの行先レジスタフィールドとを有しており、
少なくとも１つの命令は、オプコードフィールドと、ソースレジスタとして前記汎用レジスタの任意のものを指定することのできる複数のソースレジスタフィールドと、行先レジスタとして前記汎用レジスタの任意のものを指定することのできる１つの行先レジスタフィールドとを有しており、
少なくとも１つの命令は、前記演算装置に複数の複合演算を実行させ、それらの演算の第１のものは第１の計算および論理演算の１つであり、第２のものは第２の計算動作の１つおよび条件ブランチ演算であるプロセッサに係る発明を含む。
【０１０３】
さらに、上記構成に加え、
命令は、同じ第１の固定長の命令を有する第１のグループの命令と、第１の固定長とは異なる同じ第２の固定長の命令を有する第２のグループの命令とを含み、そして、両方のグループに共通のオプコードフィールド中の所定のビットフィールドはそのビットフィールドを有する命令が属している１つのグループを示しているプロセッサ、または、
第１の演算は、命令内のソースレジスタフィールドによって示されたレジスタ値の比較であり、第２の演算は、比較の結果に応答するブランチ演算であるプロセッサ、または、
第１の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な左シフトであり、第２の演算は、シフトされたレジスタ内容および別のソースレジスタ値についての計算動作であるプロセッサ、または、
第１の演算は、ソースレジスタフィールドによって示されたレジスタの内容の論理的な右シフトであり、第２の演算は、命令の定数フィールドによって特定された値を有するシフトの結果についての論理的なアンド動作であるプロセッサ、または、
少なくとも１つの命令は、第２の命令アドレスに到達するまで第１の命令アドレスにおいて開始した命令をプロセッサに実行させ、その後再び第１のアドレスにおいて実行を継続し、命令のソースレジスタフィールドによって示されたソースレジスタの内容によって決定された回数だけ反復するプロセッサ、または、
プロセッサは検索表中の定数値を指定する定数フィールドを有する少なくとも１つの命令を有しているプロセッサ、または、
さらに、複数の特定目的のレジスタと、コプロセッサとデータを交換するために特定目的のレジスタをアクセスする手段とを具備し、少なくとも１つの命令は、予め定められた値である特定目的のレジスタ中のデータに応答する条件ブランチであるプロセッサ、さらに、
特定目的のレジスタは単一ビットレジスタであり、前記アクセスする手段はさらに単一ビットレジスタと複数のコプロセッサとの間でデータを交換するプロセッサ、または、
さらに、１つの特定目的のレジスタと、特定目的のレジスタへの書込みの実行がまだ完了していないこと、および全てのペンディングの特定目的のレジスタの書込みの実行が完了したことを選択的に示す状態指示手段とを具備し、命令のセットは、全てのペンディングの書込みの実行が完了したことを状態指示手段が示すまで演算装置に次の命令の実行を遅延させる命令を含んでいるプロセッサに係る発明を含む。
【０１０４】
さらに、本発明の実施の形態に記載の発明は、データを記憶する複数のレジスタと、メモリとレジスタとの間でデータを交換するためにメモリにアクセスする手段と、レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
複数の命令は複数のレジスタフィールドを有し、各レジスタフィールドは４ビット幅以上のビット幅であり、
命令は、ロードと、セーブと、均一性についての条件ブランチと、非均一性についての条件ブランチと、計算動作のそれぞれの少なくとも１つを含み、それらはそれぞれ２８ビットを越えない長さで符号化されており、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびロード命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドの内容によって指定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第２のソースレジスタフィールドおよび記憶命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置の記憶命令の第１のソースレジスタフィールドの内容によって指定されたレジスタからのデータを記憶し、
演算手段は、均一性についての条件ブランチの実行に応答して非均一性についての条件ブランチ命令により示された２つのレジスタの内容が等しいとき均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、非均一性についての条件ブランチ命令の実行に応答して非均一性についての条件ブランチ命令により示された２つのレジスタの内容が等しくないとき非均一性についての条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
演算手段は、計算命令の実行に応答して計算命令の各ソースレジスタフィールドにより示される複数のレジスタの内容について計算動作を実行し、計算命令の行先レジスタフィールドによって示される複数のレジスタ中にその結果を記憶させることを特徴とするプロセッサに係る発明を含む。
【０１０５】
さらに、上記構成に加え、
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令のそれぞれのソースレジスタフィールドは各命令の境界に関して同じ位置にあり、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の付加的なソースレジスタフィールドは各命令の境界に関して同じ位置にあるプロセッサ、さらに、
演算手段はさらに、ループ命令を一度実行するのに応答して他の命令を複数回実行するプロセッサ、さらに、
ロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令はそれぞれ同じ第１の固定長で符号化され、演算手段は、短いロード、短い記憶、短い均等性についての条件ブランチ、短い非均等性について条件ブランチ、および短い計算命令はそれぞれ第１の固定長よりも短い同じ第２の固定長で符号化され、それぞれロード、記憶、均等性についての条件ブランチ、非均等性について条件ブランチ、および計算命令の対応する動作を実行するプロセッサ、または、
演算手段は、レジスタファイル内のレジスタのグループを示すウインドウベースレジスタを含み、演算手段はさらに、レジスタフィールドがレジスタのグループ中のウインドウに関係するレジスタを示すようにレジスタファイル内のレジスタのグループをウインドウに示すプロセッサ、さらに、
ウインドウベースレジスタの相対的インクリメントはサブルーチン呼出し命令中の定数によって特定されるプロセッサを含む。
【０１０６】
さらに、本発明の実施の形態に記載の発明は、データを記憶する複数のレジスタと、
メモリと前記レジスタとの間でデータを交換するためにメモリをアクセスする手段と、
レジスタ中に記憶されたデータを処理するためにメモリからの命令を実行する演算手段とを具備し、
各命令は３２ビット幅より狭く、複数の命令は複数のソースレジスタフィールドおよび行先レジスタフィールドを有し、各レジスタフィールドは４ビット幅以上のビット幅であり、
演算手段は、ロード命令の実行に応答して命令のソースレジスタフィールドおよびこの命令の定数フィールドによって特定されたレジスタの１つの内容の合計に対応しているメモリ位置からのロード命令の行先レジスタフィールドによって特定されたレジスタ中にデータをロードし、
演算手段は、記憶命令の実行に応答して記憶命令の第２のソースレジスタフィールドおよび命令の定数フィールドによって特定されたレジスタの内容の合計に対応しているメモリ位置において命令の第１のソースレジスタフィールドによって特定されたレジスタからのデータを記憶し、
演算手段は、条件ブランチ命令の実行に応答してテストを行い、テストの結果が真実であった場合には、条件ブランチ命令により示された相対的オフセット値に対応する位置で開始するメモリからの命令を順次実行し、
前記テストは、
２つのソースレジスタの内容の均等性、
２つのソースレジスタの内容の非均等性、
ゼロに等しい２つのソースレジスタのビット的論理アンド、
ゼロに等しくない２つのソースレジスタのビット的論理アンド、
ゼロである第２のソースレジスタの内容によって指定された第１のソースレジスタの１ビットの内容、
１である第２のソースレジスタの内容によって指定された第１のソースレジスタの１ビットの内容、
ゼロである命令のフィールドによって指定されたソースレジスタの１ビットの内容、
１である命令のフィールドによって指定されたソースレジスタの１ビットの内容、
第２のソースレジスタの内容より小さい２の補数である命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容以上の大きさの２の補数である命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容より小さい符号のない命令のフィールドによって指定された第１のソースレジスタの内容、
第２のソースレジスタの内容以上の大きさの符号のない命令のフィールドによって指定された第１のソースレジスタの内容、
ソースレジスタの内容と命令の定数フィールドとの均等性、
ソースレジスタの内容と命令の定数フィールドとの非均等性、
命令の定数フィールドより小さい２の補数のソースレジスタの内容、
命令の定数フィールド以上の大きさの２の補数のソースレジスタの内容、
命令の定数フィールドよりも小さい符号のないソースレジスタの内容、
命令の定数フィールドよりも大きい符号のないソースレジスタの内容、
からなる第１のグループから選択されるプロセッサに係る発明を含む。
【０１０７】
さらに、上記構成に加え、
ゼロである１つのソースレジスタの内容、ゼロではない１つのソースレジスタの内容、ゼロより小さい２の補数である１つのソースレジスタの内容、ゼロより大きい２の補数である１つのソースレジスタの内容、からなる第２のグループおよび前記の第１のグループの中の１つからテストが選択され、ゼロに対する各比較が、ソースレジスタをゼロでないオーギュメントと比較する対応する命令のオフセットよりも大きいブランチターゲットを指定するためのオフセットを特定するプロセッサ、さらに、
テストは、フィールド値によって特定された検索表中の位置を参照にすることによって定数を形成する命令の定数フィールドとソースレジスタとの比較を含んでいるプロセッサ、さらに、
全ての命令が３２ビット長よりも短いプロセッサ、さらに、
命令は、より少ないビットで符号化されて、対応する条件ブランチ命令よりも短い相対的オフセットフィールドを使用する条件ブランチ命令およびソースレジスタの内容の１つがゼロであることおよび１つのソースレジスタの内容の１つがゼロでないことのテストを含んでいるプロセッサに係る発明を含む。
【０１０８】
好ましい実施形態の変更および変形は当業者に容易に明白であろう。このような変形は特許請求の範囲に記載されている本発明の技術的範囲内にある。
【図面の簡単な説明】
【０１０９】
【図１】本発明の好ましい実施形態による命令セットを実施するプロセッサのブロック図。
【図２】本発明の好ましい実施形態による命令セットを実施するプロセッサのブロック図。
【図３】本発明の好ましい実施形態による命令セットを実施するプロセッサのブロック図。
【図４】本発明の好ましい実施形態による命令セットを実施するプロセッサのブロック図。
【図５】好ましい実施形態によるプロセッサにおいて使用されるパイプラインのブロック図。
【図１】
2006185462.tif 000003
【図２】
2006185462.tif 000004
【図３】
2006185462.tif 000005
【図４】
2006185462.tif 000006
【図５】
2006185462.tif 000007