(57)【要約】      （修正有）【課題】浮動小数点型オペレーションを実行することが全くない場合、浮動小数点レジスタは全実行期間中遊んだままになっている。【解決手段】整数値と浮動小数点値を保持するための第１レジスタセット（２０）と整数実行手段（６６）と浮動小数点実行手段（６８）を備え、整数値オペランドまたは浮動小数点オペランドを命令によって指示された通りに第１レジスタセットから取り出し、整数実行手段から整数値結果または浮動小数点実行手段からの浮動小数点結果を命令によって指示された通りに第１レジスタセットにストアする。さらに整数値を保持する第２レジスタセット（１８）とブール値を保持する第３レジスタセット（２２）を備える。【選択図】      図１
2004185638.tif 000002
【特許請求の範囲】
【請求項１】
整数命令を実行するための整数実行手段であって、各整数命令は１つまたは２つ以上の整数値オペランドに対して整数オペレーションを実行して、整数値結果を生成するようにした整数実行手段と、
浮動小数点命令を実行するための浮動小数点実行手段であって、各浮動小数点命令は１つまたは２つ以上の浮動小数点値オペランドに対して浮動小数点オペレーションを実行して、浮動小数点値結果を生成するようにした浮動小数点実行手段と、
ここで、各命令は１つまたは２つ以上のオペランドを取り  出すべき１つまたは２つ以上のソースを指定し、さらに、その結果をストアすべき宛先を指定しており、また各オペレーションは任意的に整数値のベースと整数値のインデックスを指定し、
ｉ）複数の第１レジスタを有し、整数値と浮動小数点値を保持するための第１レジスタ・セット手段を含んでいるレジスタ・バンクと、
第１レジスタ・セット手段と双方の実行手段とに結合されたアクセス手段であって、
ｉ）整数実行手段のための整数値オペランド、浮動小数点実行手段のための浮動小数点値オペランド、またはいずれかの実行手段のための整数値のベースまたはインデックスを、命令によって指示された通りにいずれかひとつの第１レジスタから取り出し、および
ｉｉ）整数値結果を整数実行手段からまたは浮動小数点値結果を浮動小数点実行手段から、命令によって指示された通りにいずれか１つの第１レジスタにストアするためのアクセス手段と
を備えたことを特徴とする装置。
【請求項２】
請求項１記載の装置において、
前記レジスタ・バンクは複数の第２レジスタをもち、整数値を保持するための第２レジスタ・セットをさらに備え、
前記アクセス手段は、さらに、
ｉ）整数実行手段のための整数値オペランドまたはいずれかの実行手段のための整数値のベースまたはインデックスを、命令によって指示された通りに、いずれか１つの第２レジスタから取り出し、および
ｉｉ）整数実行手段からの整数値結果を命令によって指示された通りに、いずれか１つの第２レジスタにストアするように動作する
ことを特徴とする装置。
【請求項３】
請求項２記載の装置において、
ブール組合せ命令を実行するためのブール実行手段であって、各ブール組合せ命令は１つまたは２つ以上のブール値オペランドに対してブール組合せオペレーションを実行して、ブール値結果を生成するようにしたブール実行手段をさらに備え、
前記レジスタ・バンクは、複数の第３レジスタをもち、ブール値を保持するための第３レジスタ・セット手段をさらに備え、
前記アクセス手段は、さらに、
ｉ）ブール実行手段のためのブール値オペランドをブール組合せ命令によって指示された通りに、いずれか１つの第３レジスタから取り出し、および
ｉｉ）ブール実行手段からのブール値結果をブール組合せ命令によって指示された通りに、いずれか１つの第３レジスタにストアするように動作する
ことを特徴とする装置。
【請求項４】
命令を実行するための実行手段を含んでいる装置であって、各命令は１つまたは２つ以上のオペランドに対してオペレーションを実行して結果を生成し、各命令はその１つまたは２つ以上のオペランドを読み取るためにアクセスすべき１つまたは２つ以上のソースとその結果を書くためにアクセスすべき宛先を指定するようにした装置において、
複数のレジスタ・バンクであって、各レジスタ・バンクは複数のレジスタ手段を含んでおり、各レジスタ手段はオペランドまたは結果をストアするためのものであり、各レジスタ・バンク内の複数のレジスタ手段は、所与のレジスタ・バンク内のどの所与のレジスタ手段も所与のレジスタ・バンクまでのオフセットとしてアクセスできるような順番に配列されており、所与の命令のソースと宛先はオフセットとして指定される複数のレジスタ・バンクと、
所与の命令のソースと宛先のオフセットが適用される所与のレジスタ・バンクを選択するためのレジスタ・バンク・セレタタ手段であって、所与の命令のどの内容とも関係なく動作するレジスタ・バンク・セレクタ手段と
を備えたことを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的にはマイクロプロセッサに関し、さらに具体的には、複数の対称レジスタ・セットを備えたＲＩＳＣマイクロプロセッサに関する。
【背景技術】
【０００２】
以下に列挙した米国特許出願は本件特許出願と同時に米国特許出願され、係属中のものであるが、これらの米国特許出願に開示されており、かつそれぞれに対応して出願された日本での特許出願に開示されている事項は、その出願番号を本明細書で引用することにより本明細書の一部を構成するものとする。
【０００３】
１．発明の名称「高性能ＲＩＳＣマイクロプロセッサ・アーキテクチャ」（Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）ＳＭＯＳ−７９８４ＭＦＣ／ＧＢＲ，米国特許出願第０７／７２７，００６号、１９９１年７月８日出願、発明者Ｌｅ  Ｔ．Ｎｇｕｙｅｎ他、およびこれに対応する特願平５−５０２１５０（特表平６−５０１１２２号公報）。
【０００４】
２．発明の名称「拡張可能ＲＩＳＣマイクロプロセッサ・アーキテクチヤ」（Ｅｘｔｅｎｓｉｂｌｅ  ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）ＳＭＯＳ−７９８５ＭＣＦ／ＧＢＲ，米国特許出願第０７／７２７，０５８号、１９９１年７月８日出願、発明者Ｌｅ  Ｔ．Ｎｇｕｙｅｎ他、およびこれに対応する特願平５−５０２１５３（特表平６−５０１１２４号公報）。
【０００５】
３．「アーキテクチャ上の依存関係を隔離したＲＩＳＣマイクロプロセッサ・アーキテクチャ」（ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｗｉｔｈ  Ｉｓｏｌａｔｅｄ  Ａｒｃｈｉｔｅｃｔｕｒａ  Ｄｅｐｅｎｄｅｎｃｉｅｓ）ＳＭＯＳ−７９８７ＭＣＦ／ＧＢＲ／ＲＣＣ，米題特許出願第０７／７２６，７４４号、１９９１年７月８日出願、発明者Ｌｅ  Ｔ．Ｎｇｕｙｅｎ他、およびこれに対応する特願平５−５０２１５２（特表平６−５０２０３４号公報）。
【０００６】
４．発明の名称「高速トラップと例外状態をインプリメントしたＲＩＳＣマイクロプロセッサ・アーキテクチャ」（ＲＩＳＣ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｍｐｉｅｍｅｎｔｉｎｇ  ＦａＳｔ  Ｔｒａｐ  ａｎｄ  Ｅｘｃｅｐｔｉｏｎ  Ｓｔａｔｅ）ＳＭＯＳ−７９８９ＭＣＦ／ＧＢＲ／ＷＳＷ，米国特許出願第０７／７２６，９４２号、１９９１年７月８日出願、発明者Ｌｅ  Ｔ．Ｎｇｕｙｅｎ他、およびこれに対応する特願平５−５０２１５４（特表平６−５０２０３５号公報）。
【０００７】
５．発明の名称「シングル・チップ・ページ・プリンタ・コントローラ」（Ｓｉｎｇｌｅ  Ｃｈｉｐ  Ｐａｇｅ  Ｐｒｉｎｔｅｒ  Ｃｏｎｔｒｏｌｌｅｒ）ＳＭＯＳ−７９９１ＭＣＦ／ＧＢＲ／ＨＫＷ，米国特許出願第０７／７２６，９２９号、１９９１年７月８日出願、発明者Ｄｅｒｅｋ  Ｊ．Ｌｅｎｔｚ他、およびこれに対応する特願平５−５０２１４９（特表平６−５０１５８６号公報）。
【０００８】
６．発明の名称「複数の異種マイクロプロセッサをサポートすることのできるマイクロプロセッサ・アーキテクチャ」（Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｃａｐａｂｌｅ  ｏｆ  Ｓｕｐｐｏｒｔｉｎｇ  Ｍｕｌｔｉｐｌｅ  Ｈｅｔｅｒｏｇｅｎｅｏｕｓ  Ｐｒｏｃｅｓｓｏｒｓ）ＳＣ／ＳＥＲＩＥＳ  Ｎｏ．０７／７２６，８９３、１９９１年７月８日出願、発明者Ｄｅｒｅｋ  Ｊ．Ｌｅｎｔｚ他、およびこれに対応する特願平５−５０２１５１（特表平６−５０１１２３号公報）。
【０００９】
なお、本明細書の記述は本件出願の優先権の基礎たる米国特許出願０７／７２６, ７７３号の明細書の記載に基づくものであって、当該米国特許出願の番号を参照することによって当該米国特許出願の明細書の記載内容が本明細書の一部分を構成するものとする。
【００１０】
マイクロプロセッサをベースとするコンピュータ・システムは、主メモリ記憶装置および補助永続記憶装置の通常の補強に加えて、１つまたは２つ以上の汎用データ・レジスタ、１つまたは２つ以上のアドレス・レジスタ、および１つまたは２つ以上のステータス（状況）フラグをも備えているのが代表的である。従来のシステムには、整数データを格納しておくための整数レジスタと浮動小数点データを格納しておくための浮動小数点レジスタを備えているものもある。ステータス・フラグは、最近に実行されたオペレーションの結果としてのある種の条件を示すために使用されているのが代表的である。一般的には、ステータス・フラグとしては、前のオペレーションにおいて、キャリー（桁上げ）が生じたか否か、負数が生じたか否か、および／またはゼロが生じたか否かを示すものがある。
【００１１】
これらのフラグは、プログラム制御のフロー（流れ）内の条件付きブランチ（分岐）の結果を判定する際に役立っている。例えば、１番目の数を２番目の数と比較し、これらの２つの数が等しいことを条件として、あるサブルーチンヘブランチしたい場合には、マイクロプロセッサは他方から一方を減算し、該当する条件フラグをセットまたはクリアすることによって２つの数を比較することができる。減算の結果の数値はストアしておく必要はない。そのあと、ゼロ・フラグのステータスを条件として、条件付きブランチ命令を実行させることができる。この方式は簡単に実現できるが、柔軟性と威力に欠けている。いったん比較が行われると、該当のフラグに基づく条件付きブランチを行う前に、それ以後の数値その他のオペレーションを行うことができない。もし行うと、比較の結果得た条件フラグ値を途中に置かれた命令が重ね書きするので、正しくないブランチが行われることになる。この方式は、上に示した単純な等価比較例とは異なり、もっと複雑なブランチ・テストを行うことが望ましい場合には、さらに複雑になる。
【００１２】
例えば、１番目の数が２番目の数より大で、３番目の数が４番目の数より小で、５番目の数が６番目の数と等しい、という条件が満たされたときだけ、プログラムをサブルーチンにブランチさせる場合を考えてみる。この場合、従来のマイクロプロセッサでは、条件付きブランチが途中に大量に配置された長い比較の列を実行する必要がある。比較とブランチがシリアルになったこの方式の特に望ましくない特徴は、命令がパイプライン化したどのマイクロプロセッサにも観察されている。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
パイプライン方式マイクロプロセッサでは、どの時点においても２つ以上の命令が実行されており、複数の命令がどの瞬時においても異なる実行ステージに置かれている。これにより、スループットが大幅に向上している。代表的なパイプライン方式マイクロプロセッサでは、パイプライン・ステージは、（ａ）命令のフェッチ、（ｂ）命令のデコード、（ｃ）命令のオペランドの取得、（ｄ）命令の実行、（ｅ）結果のストアからなっている。問題が起こるのは、条件付きブランチ命令がフェッチされるときである。そのようなケースとして、オペランドをまだパイプラインに残っているオペレーションから得るものとする場合に、オペランドがまだ計算されていないので、条件付きブランチの条件がまだテストできない場合がある。この結果、「パイプライン停止」（ｐｉｐｅｌｉｎｅ  ｓｔａｌｌ）が起こり、プロセッサの速度が大幅に低下することになる。
【００１４】
従来のマイクロプロセッサ・ベースのシステムのもう１つの欠点は、いかなるデータ・タイプ（データ型）であっても、レジスタ・セットが１つしか備わっていないことである。従来のアーキテクチャでは、どのデータ・タイプにおいても、レジスタの個数を増やすことが望ましいために、どのタイプのレジスタ・セットの場合であっても、そのセットを大きくすることだけが解決策であった。この結果、アドレス指定上の問題、アクセス衝突という問題、および対称上の問題が起こり得る。
【００１５】
同じように注目すべきことは、従来のアーキテクチャでは、どのレジスタ・セットの場合も、数値データ・タイプが１つに限定されていることである。種々の従来システムでは、汎用レジスタに格納できるのは、数値データかアドレス「データ」のどちらかである。しかし、本明細書で用いている「データ」の用語にはアドレスは含まれていない。そのようにした意図を理解しやすくするために、２つの従来システムを参照して説明する。インテル８０８５マイクロプロセッサは、数値データの２バイトか１個の２バイト・アドレスのどちらかを格納するために使用できるレジスタ・ペア" ＨＬ" を備えている。本発明による改善はこの問題を対象にしていない。もう１つはインテル８０４８６マイクロプロセッサであり、これは整数データ型の汎用レジスタ・セットと浮動小数点レジスタ・セットを備えているが、各セットはそれぞれのデータ・タイプが限定されており、少なくとも算術論理演算ユニットが直接にレジスタを使用することを目的としている。
【００１６】
このことは、マイクロプロセッサが両方のデータ・タイプＪ係わりがないオペレーション（演算）を実行するときは、使用可能なチップ・エリアなどの、マイクロプロセッサの資源を無駄に消費することになる。例えば、ユーザ・アプリケーションは専ら整数型オペレーションと係わりがあることが多く、浮動小数点型オペレーションを実行することはまったくない。この種のユーザ・アプリケーションが浮動小数点レジスタを備えた従来のマイクロプロセッサ（８０４８６など）で実行されるときは、これらの浮動小数点レジスタはその全実行期間中遊んだままになっている。従来のマイクロプロセッサのレジスタ・セット・アーキテクチャのもう１つの問題は、ユーザ・アプリケーションとオペレーティング・システム・カーネルのようにアクセス特権レベルが高いエンティティとの間でコンテキスト・スイッチングまたはステート・スイッチングを行うときに観察されている。マイクロプロセッサ内の制御がコンテキスト、モード、またはステートをスイッチするとき、制御が渡されたオペレーティング・システム・カーネル（ｋｅｒｎｅｌ）または他のエンティティは、ユーザ・アプリケーションがオペレーションに使用したのと同じデータについてオペレーションしないのが普通である。従って、データ・レジスタには、制御を受け取った新しいエンティティには無用なデータ値が格納されるが、その値はユーザ・アプリケーションに制御が返されるまで残しておかなければならないのが普通である。カーネルは、一般的には、独自に使用するレジスタをもっていなければならないが、どのレジスタが現在ユーザ・アプリケーションによって使用中であるかをカーネルに知らせる方法がない。自身のデータ用にスペースを確保するためには、カーネルはスワップ・アウトするか、さもなければ、レジスタのあらかじめ定めたサブセットの内容をストアしなければならない。この結果、特に、カーネルが制御を繰返し要求し、制御を保持している期間が短時間の場合には、オーバヘッドとして負担すべき処理時間の損失が膨大なものとなる。
【００１７】
上記に関連して注目すべきことは、従来のマイクロプロセッサでは、「大規模な」コンテキスト・スイッチを行う必要があるとき、マイクロプロセッサが一般的に大多数の処理サイクルを含めて、さらに大量の処理資源を拡張し、全データとステート情報をセーブしてからスイッチを行う必要があったことである。コンテキストをスイッチ・バックするときは、システムを以前の状態に復元するために、パフォーマンスを犠牲にするという代価を払わなければならなかった。例えば、マイクロプロセッサが２つのユーザ・アプリケーションを実行する場合、各アプリケーションが各データ・タイプのレジスタの完全な補強を必要とし、しかも条件設定オペレーションや数値計算の種々のステージに置かれていると、一方のユーザ・アプリケーションから他方ヘスイッチするたびに、スワッピングを行うか、さもなければシステム内のすべてのデータ・レジスタとステート・フラグの内容をセーブしておく必要がある。この結果、オペレーションに伴うオーバヘッドが大量に発生することは明らかであり、特に、レジスタをセーブしておく必要のある主記憶装置や補助記憶装置がマイクロプロセッサ自体よりも著しく低速の場合には、大幅な性能低下をもたらすことになる。
【００１８】
以上の事実から明らかになったことは、複合条件（ｃｏｍｐｌｅｘ  ｃｏｎｄｉｔｉｏｎ）を構成する各種条件を途中に条件付きブランチを介在させないで計算することを可能にする、改良型マイクロプロセッサ・アーキテクチャを開発することが望ましいことである。さらに、明らかになったことは、多数の単純な条件を並列に計算できるようにすることが望ましく、そうすれば、マイクロプロセッサのスループットが向上することである。
【００１９】
また、明らかになったことは、どのデータ・タイプの場合も、レジスタ・セットを複数にすることが望ましいことである。
【００２０】
さらに、望ましいことは、使用可能な整数レジスタが必要とする整数データ量を最適に格納するのに不十分であった場合に、マイクロプロセッサの浮動小数点レジスタを整数レジスタとして使用できるようにすることである。特に、明らかになったことは、このようなタイプ変更をユーザ・アプリケーションには完全に見えない（ｔｒａｎｓｐａｒｅｎｔ）ようにすることが望ましいことである。
【００２１】
また、非常に望ましいことは、ユーザ・レジスタのサブセットを使用するのではなく、カーネルが使用するために予約した専用レジスタ・サブセットを備えたマイクロプロセッサを開発し、この新しいレジスタ・セットを、これらのレジスタによって代用されたレジスタ・サブセットと全く同じようにアドレス指定できるようにすることであり、そうすれば、カーネルがユーザ・アプリケーションと同じレジスタ・アドレス指定方式を使用できることである。さらに明らかになったことは、マイクロプロセッサの資源を最大限に利用するためには、２つのレジスタ・サブセット間の切替えをマイクロプロセッサのオーバヘッドとなるサイクルを必要としないで行うことが望ましい。
【００２２】
もう１つ明らかになったことは、「大規模な」コンテキスト・スイッチを最小のオーバヘッドで行えるようにするマイクロプロセッサ・アーキテクチャにすることが望ましいことである。これに関連して望ましいことは、各タイプのレジスタ・セットのバンクを複数にすることを可能にするアーキテクチャにすることであり、そうすれば、２つまたはそれ以上のユーザ・アプリケーションをマルチタスキング環境で、あるいはその他の「同時実行」モードで、稼働させることができ、各ユーザ・アプリケーションは少なくともレジスタの１バンク全体に独占的にアクセスできることである。また、明らかになったことは、レジスタ・アドレス指定方式を、レジスタ・バンク間ではなく、ユーザ・アプリケーション間で同じにすることが望ましく、そうすれば、ユーザ・アプリケーションを可能な限り単純化することができ、また、レジスタ・バンク間の切替えをハードウェアでサポートしたシステムにすれば、ユーザ・アプリケーションは現在使用中のレジスタ・バンクがどれであるかを意識しないで済み、また他のレジスタ・バンクや他のユーザ・アプリケーションの存在さえも意識しないで済むことである。
【００２３】
本発明の上記およびその他の利点は、添付図面を参照して詳述する本発明の説明および請求の範囲から理解されるはずである。
【課題を解決するための手段】
【００２４】
本発明によるレジスタ・ファイル・システムは、整数レジスタの第１サブセットと第２サブセットおよびシャドウ・サブセット（ｓｈａｄｏｗ  ｓａｂｓｅｔ）を含む整数レジスタ・セット、整数レジスタまたは浮動小数点レジスタとして個別的に使用できるタイプ変更可能（ｒｅ−ｔｙｐａｂｌｅ）なレジスタ・セットおよび個別的にアドレス可能なブール・レジスタのセットを備えている。
【００２５】
本発明は整数機能ユニット（ｉｎｔｅｇｅｒ  ｆｕｎｃｔｉｏｎａｌ  ｕｎｉｔ）と浮動小数点機能ユニット（ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｆｕｎｃｔｉｏｎａｌ  ｕｎｉｔ）を備え、これらのユニットは整数レジスタ・セットをアクセスする整数命令を実行し、複数のモードで動作する。どのモードにおいても、命令は、整数レジスタの第１サブセットヘの通常アクセス権が許可されている。第１モードでは、命令は、第２サブセットヘの通常アクセス権が許可されている。しかし、第２モードでは、第２サブセットヘのをアクセスを試みる命令には、第２サブセットではなく、シャドウ・サブセットをアクセスする許可が与えられる。これは、命令には見えない（ｔｒａｎｓｐａｒｅｎｔ）形で行われる。従って、どのモードで実行されるかを意識しないでルーチンを書くことができ、システム・ルーチン（これは第２モードで実行される）は、少なくとも第２サブセットを見かけ上自由に使用することができるので、第２サブセットの内容（第１モードで実行されているユーザ・プロセスが使用中の場合がある）をセーブするときに生じるオーバヘッドを負担しないで済む。
【００２６】
本発明によれば、さらに複数の整数レジスタ・セットが用意されている。これらのレジスタ・セットは、命令中のフィールドで指定されるようにして、個別的にアドレス指定が可能である。レジスタ・セットは読取りポートと書込みポートを含んでおり、これらはマルチプレクサによってアクセスされる。この場合、マルチプレクサはレジスタ・セットの内容、つまり、命令中のフィールドの指定によって制御される。
【００２７】
これらの整数レジスタ・セットの１つは、浮動小数点レジスタ・セットとしても使用可能である。本発明の１実施例では、このセットは倍精度浮動小数点データを収容するために６４ビット幅になっているが、下位の３２ビットだけが整数命令によって使用される。
【発明の効果】
【００２８】
本発明によれば、ブール演算を実行するための機能ユニットが備わっており、さらに、ブール演算の結果を保持しておくためのブール・レジスタ・セットが用意されているので、専用の固定ロケーション・ステータス・フラグが不要になっている。整数機能ユニットと浮動小数点機能ユニットは数値比較命令を実行し、これらの命令は比較の結果を収めておくブール・レジスタをそれぞれ指定している。ブール機能ユニットはブール組合せ命令（Ｂｏｏｌｅａｎ  ｃｏｍｂｉｎａｔｉｏｎａｌ  ｉｎｓｔｒａｃｔｉｏｎ）を実行し、そのソースと宛先はブール・レジスタ・セットの中の指定されたレジスタになっている。従って、本発明によれば、複合（ｃｏｍｐｌｅｘ）ブール機能の１つの結果だけで条件付きブランチを実行できるので、複合ブール機能の基本的部分間に条件付きブランチを介在させる必要がなく、データ・プロセッサにおけるパイプライン混乱（ｐｉｐｅｌｉｎｅ  ｄｉｓｒｕｐｔｉｏｎ）を最小にすることができる。
【００２９】
最後に、システムには複数の同種レジスタ・バンクが設けられている。バンクはどのプロセスまたはルーチンにも割り振ることができるので、ルーチン内の命令はどのバンクで実行されるかを指定しないで済むようになっている。
【発明を実施するための最良の形態】
【００３０】
１. レジスタ・ファイル
第１図は、本発明によるＲＩＳＣ（縮小命令セット計算）の命令実行ユニット（ＩＥＵ）１０の基本構成要素を示す図である。ＩＥＵ１０はレジスタ・ファイル１２と実行エンジン１４を備えている。レジスタ・ファイル１２は１つまたは２つ以上のレジスタ・バンク１６−０〜１６−ｎを含んでいる。明らかなように、各レジスタ・バンク１６は他のレジスタ・バンク１６のすべてと同一構造になっている。従って、以下では、レジスタ・バンク１６−０だけを説明することにする。レジスタ・バンクはレジスタ・セットＡ１８、レジスタ・セットＦＢ２０、およびレジスタ・セットＣ２２を含んでいる。
【００３１】
一般的には、ＣＩＳＣ（複合命令セット計算）命令をＣＩＳＣプロセッサが実行するには、従来のレジスタ・ファイルを使用すれば十分であるのに対し、本発明によるＲＩＳＣマイクロプロセッサは、ＲＩＳＣ命令を実行する際に使用するのに最適に構成されたレジスタ・ファイルを備えたことを特徴としている。レジスタ・ファイルを特別に適応したものにすると、マイクロプロセッサのＩＥＵの実行エンジン（ｅｘｅｃｕｔｉｏｎ  ｅｎｇｉｎｅ）は、資源利用効率とロー・スループット（ｒａｗ  ｔｈｒｏｕｇｈｐｕｔ）の面で性能を向上させることができる。一般的考え方はレジスタ・セットをＲＩＳＣ命令に合わせてチューン（調整）することであるが、実施例によっては、アーキテクチャのどのレジスタ・セットでも対象とすることができる。
【００３２】
Ａ. レジスタ・セットＡ
レジスタ・セットＡ１８は整数レジスタ２４（ＲＡ［３１：０］）を含んでおり、その各々は整数値のデータを収めるように適応化されている。１実施例によれば、各整数レジスタ２４は３２ビット幅になっている。ＲＡ［］整数レジスタ２４は複数の第１整数レジスタ２６（ＲＡ［２３：０］）と複数の第２整数レジスタ２８（ＲＡ［３１：２４］）から構成されている。ＲＡ［］整数レジスタ２４は各々が同一構成になっており、整数レジスタ・セット２４内の固有アドレス（ｕｎｉｑｕｅ  ａｄｄｒｅｓｓ）による場合でも、各々が同じ方法でアドレス可能になっている。例えば、第１整数レジスタ３０（ＲＡ［０］）は整数レジスタ２４内のゼロ・オフセットにアドレス指定することが可能である。
【００３３】
ＲＡ［０］は常に値がゼロになっている。これは、ユーザ・アプリケーションや他のプログラムは他の定数値よりも定数値ゼロを使用することが多いことが観察されてきたためである。従って、クリア、比較その他の目的のために、ゼロがいつでも即時に使用できるようになっていることが望ましい。特定の値に関係なく、任意のレジスタに一定の配線（ｈａｒｄ−ｗｉｒｅｄ）した値を入れておくと得られるもう１つの利点は、その任意のレジスタを、結果をセーブしておく必要のない命令の宛先として使用できることである。
【００３４】
また、このことは、固定レジスタ（ｆｉｘｅｄ  ｒｅｇｉｓｔｅｒ）はデータに依存する遅延の原因となることがないことも意味する。データ依存関係が起こるのは、「スレーブ」命令がそのオペランドの１つまたは２つ以上のために、「マスタ」命令の結果を必要とするときである。パイプライン方式プロセッサでは、これはパイプラインを停止（ｓｔａｌｌ）させる原因となる。例えば、マスタ命令は、コード列の中にスレーブ命令よりも早く現れる場合であっても、実行時間が著しく長くなることがある。このことから容易に理解されるように、スレーブの「インクリメントとストア」命令がマスタの「４倍ワード整数除算」命令の結果データに基づいて実行される場合は、スレーブ命令がフェッチされ、デコードされたあと、マスタ命令が実行を終えるまで、多数のクロック・サイクルの間、実行を待たされることになる。しかし、状況によっては、マスタ命令の数値結果は必要とされず、マスタ命令は条件コード・フラグをセットするといった、他の目的に実行される場合もある。マスタ命令の宛先がＲＡ［０］ならば、数値結果は事実上破棄されることになる。ＩＥＵ１０のデータ依存関係チェッカ（図示せず）は、マスタ命令の最終結果、つまり、ゼロはすでに分かっているので、スレーブ命令を遅延させる原因とはならない。
【００３５】
レジスタ・セットＡ１８はシャドウ・レジスタ・セット３２（ＲＴ［３１：２４］）も備えている。各シャドウ・レジスタは整数値を保持することができ、１実施例では、３２ビット幅にもなっている。各シャドウ・レジスタは、各整数レジスタがアドレス指定できるのと同じように、オフセットとしてアドレス指定することができる。
【００３６】
最後に、レジスタ・セットＡはＩＥＵモード整数スイッチ（ｍｏｄｅ  ｉｎｔｅｇｅｒ  ｓｗｉｔｃｈ）３４を備えている。このスイッチ３４は、他の同種の要素と同じように、対応する論理的機能がレジスタ・セット内に用意されている限り、物理的にスイッチとして実現する必要はない。ＩＥＵモード整数スイッチ３４はライン３６を介して整数レジスタの第１サブセット２６に接続され、ライン３８を介して整数レジスタの第２サブセット２８に、ライン４０を介してシャドウ・レジスタ３２に接続されている。レジスタ・セットＡ１８へのアクセスはすべてライン４２上のＩＥＵモード整数スイッチ３４を通して行われる。第１サブセットＲＡ［２３：０］内のレジスタを読み書きするためのアクセス要求はＩＥＵモード整数スイッチ３４を通して自動的に渡される。しかし、第１サブセットＲＡ［２３：０］の外側のオフセットを使用した整数レジスタヘのアクセスは、実行エンジン１４の動作モードに応じて第２サブセットＲＡ［３１：２４］に向けられるか、シャドウ・レジスタＲＴ［３１：２４］に向けられる。
【００３７】
ＩＥＵモード整数スイッチ３４は実行エンジン１４内のモード制御ユニット４４の制御を受けて動作する。モード制御ユニット４４はＩＥＵ１０に関する該当ステートまたはモードＦ情報を、ライン４６経由でＩＥＵモード整数スイッチ３４へ送る。実行エンジンがカーネル（ｋｅｒｎｅｌ）・モードヘの移行といったコンテキスト・スイッチを実行すると、モード制御ユニット４４はＩＥＵモード整数スイッチ３４を次のように制御する。つまり、第２サブセットＲＡ［３１：２４］への要求は、整数セット内で要求した同じオフセットを使用してシャドウＲＴ［３１：２４］ヘリダイレクト（ｒｅ−ｄｉｒｅｃｔｅｄ）される。従って、オペレーティング・システム・カーネルやそのとき実行中の他のエンティティは、見かけ上は第２サブセットＲＡ［３１：２４］をアクセスすることができるので、第２サブセットＲＡ［３１：２４］の内容を主メモリにスワップ・アウトしたり、第２サブセットＲＡ［３１：２４] をスタック上にプッシュしたりするとき生じるオーバヘッドがなくなり、また他の従来のレジスタ格納手法を使用しないで済むことができる。
【００３８】
実行エンジン１４が通常ユーザ・モードに戻って、制御が当初に実行中のユーザ・アプリケーションに渡されると、モード制御ユニット４４は、アクセスが再び第２サブセットＲＡ［３１：２４］に向けられるようにＩＥＵモード整数スイッチ３４を制御する。一実施例では、モード制御ユニット４４は、ＩＥＵ１０における割込み許可の現在の状態に応じて動作するようになっている。また、一実施例では、実行エンジン１４はプロセッサ・ステータス・レジスタ（ＰＳＲ）（図示せず）を備えており、このレジスタは、割込みが許可されているか、禁止されているかを示した１ビット・フラグ（ＰＳＲ［７] ）をもっている。従って、ＩＥＵモード整数スイッチ３４とＰＳＲ内の割込み許可フラグとは、ライン４６で結合するだけでよい。割込みが禁止されている間は、ＩＥＵ１０は整数ＲＡ［２３：０］へのアクセス権を保持しているので、ユーザ・アプリケーションの各種データの分析を行うことができる。これにより、デバッグ、エラー報告、またはシステム・パフォーマンス分析を向上させることができる。
【００３９】
Ｂ. レジスタ・セットＦＢ
タイプ変更可能な（ｒｅ−ｔｙｐａｂｌｅ）レジスタ・セットＦＢ２０とは、浮動小数点レジスタ４８（ＲＦ［３１：０］）および／または整数レジスタ５０（ＲＢ［３１：０］）を含んでいるものと考えてよい。いずれかのデータ・タイプの場合も、一方が他方を除外することを意味しないときは、本明細書では、ＲＦＢ［］という用語を用いることにする。一実施例では、浮動小数点レジスタＲＦ［］は、整数レジスタＲＢ［］と同じ物理的シリコン・スペースを占めている。また、一実施例では、浮動小数点レジスタＲＦ［］は６４ビット幅に、整数レジスタＲＢ［］は３２ビット幅になっている。このことから理解されるように、倍精度浮動小数点数が必要でなければ、レジスタ・セットＲＦＢ［］を３２ビット幅の構成にすると、各浮動小数点レジスタの余分の３２ビット用に必要になるシリコンの面積を節約できるという利点がある。
【００４０】
レジスタ・セットＲＦＢ［］中の個々のレジスタの各々は、浮動小数点値と整数値のいずれかを保持することができる。レジスタ・セットＲＦＢ［］には、オプションとして、浮動小数点値が整数値であるものとして、あるいは整数値が浮動小数点値であるものとして、誤ってアクセスされるのを防止するハードウェアを設けることが可能である。しかし、一実施例では、レジスタ・セットＲＦＢ［］を単純化するために、個々のレジスタが誤った使い方をされるのを防止することは、ソフトウェア設計者に任すようにしている。従って、実行エンジン１４は、レジスタ・セットＲＦＢ［］までのオフセットを指定して、ライン５２上にアクセス要求を出すだけであり、あるオフセットに置かれたレジスタが浮動小数点レジスタとして使用されるものか、整数レジスタとして使用されるものかは指定しない。実行エンジン１４内では、各種エンティティはレジスタ・セットＲＦＢ［］に用意されている６４ビット全部を使用することも、例えば、整数演算や単精度浮動小数点演算において、下位３２ビットだけを使用することもできる。
【００４１】
最初のレジスタＲＦＢ［０］５１は、ＲＢ［０］が３２ビット整数のゼロ（００００hex ）となり、ＲＦ［０］が６４ビット浮動小数点のゼロ（００００００００hex ）となる形式で、定数値のゼロを格納する。このようにすると、ＲＡ［０］に対して上述したのと同じ利点が得られる。
【００４２】
Ｃ. レジスタ・セットＣ
レジスタ・セットＣ２２は、複数のブール・レジスタ（ＲＣ［３１：０］）から構成されている。ＲＣ［］は「条件ステータス・レジスタ」（ＣＳＲ）とも呼ばれている。ブール・レジスタはいずれも構造とアドレス指定方式が同じになっている。ただし、各レジスタはＲＣ［］内の固有アドレスまたはオフセットに個別的にアドレスすることが可能である。
【００４３】
一実施例では、レジスタ・セットＣはさらに「旧条件ステータス・レジスタ」（ＰＣＳＲ）６０を含んでおり、レジスタ・セットＣはＣＳＲセレクタ・ユニット６２も備えている。このユニットはモード制御ユニット４４に応答して、ＣＳＲ５４とＰＣＳＲ６０を交互に選択する。この実施例では、ＣＳＲは割込みが許可されているとき使用され、ＰＣＳＲは割込みが禁止されているとき使用される。ＣＳＲとＰＣＳＲは他の点ではすべて同じである。また、この実施例では、割込み禁止とセットされると、ＣＳＲセレクタ・ユニット６２はＣＳＲの内容をプッシュしてＰＣＳＲに入れ、ＰＣＳＲの旧内容に重ね書きする。割込みが再び許可されると、ＣＳＲセレクタ・ユニット６２はＰＣＳＲの内容をポップしてＣＳＲに戻す。他の実施例では、ＲＡ［３１：２４］およびＲＴ［３１：２４］で行われるのと同じように、ＣＳＲとＰＣＳＲの間でアクセスを交互に行うことが望ましい場合がある。いずれの場合も、ＰＣＳＲは常に３２ビット「特殊レジスタ」として使用することが可能である。
【００４４】
ブール・レジスタは、従来公知のマイクロプロセッサにおけるブール・レジスタと異なり、いずれも専用条件フラグになっていない。つまり、ＣＳＲ５４は、専用キャリー・フラグも、専用マイナス・フラグも、比較が一致したことまたは減算結果がゼロであることを示す専用フラグも含んでいない。その代わりに、どのブール・レジスタも任意のブール・オペレーションのブール結果の宛先となることができる。他のレジスタ・セットの場合と同じように、最初のブール・レジスタ５８（ＲＣ［０］）は常に値ゼロが入るので、ＲＡ［０］で上述したのと同じ利点が得られる。好適実施例では、各ブール・レジスタは１ビット幅で、１つのブール値を示すようになっている。
【００４５】
II. 実行エンジン
実行エンジン１４は１つまたは２つ以上の整数機能ユニット６６、１つまたは２つ以上の浮動小数点機能ユニット６８、および１つまたは２つ以上のブール機能ユニット７０を備えている。これらの機能ユニットは、以下に説明するように命令を実行する。バス７２、７３、７５はＩＥＵ１０の種々エレメントを結んでおり、それぞれはデータ経路、アドレス経路、および制御経路を表しているものとする。
Ａ. 命令の形式
第７図は、実行エンジン１４に実行させることができる整数命令の形式（フォーマット）を示す一例である。理解されるように、すべての命令が図示の形式に厳密に従う必要はなく、データ処理システムには命令フェッチャとデコード（図示せず）が含まれており、これらは形式の異なる命令を処理するように構成されている。第７図には、理解を容易にするために、１つの例だけが示されている。本明細書全体を通して、符号［］は命令の各ビットを示すために用いられている。Ｉ［３１：３０］は、実行エンジン１４の将来の実装に備えて予約されている。Ｉ［２９：２６］は特定の命令の命令クラスを示している。表１は、本発明によって実行される命令の各種クラスを示すものである。
【００４６】
【表１】
2004185638.tif 000003
本発明で特に重要な命令クラスは、クラス０−３のレジスタ間命令とクラス１３のブール・オペレーションである。他のクラスの命令もレジスタ・ファイル１２を処理するが、これらのクラスを詳しく説明しなくても、本発明を十分に理解できると思われるので、説明を省略する。
【００４７】
Ｉ［２５］はＢ０と名付けられ、これは宛先レジスタがレジスタ・セットＡにあるか、レジスタ・セットＢにあるかを示している。Ｉ［２４：２２］は、ある命令クラス内でどの特定機能を実行すべきかを指定した命令コード（ｏｐｃｏｄｅ）である。例えば、レジスタ間命令クラス内では、命令コードは「加算」を指定することができる。Ｉ［２１］は、命令の実行時に使用すべきアドレス指定モード（ａｄｄｒｅｓｓｉｎｇ  ｍｏｄｅ）、つまり、レジスタ・ソースのアドレス指定または即値ソース（ｉｍｍｅｄｉａｔｅ  ｓｏｕｒｃｅ）のアドレス指定を指定している。Ｉ［２０：１６］は、宛先レジスタをＢ０で指定したレジスタ・セット内のオフセットとして指定している。Ｉ［１５］はＢ１と名付けられ、これは第１オペランドがレジスタ・セットＡから得られるか、またはレジスタ・セットＢから得られるかを示している。Ｉ［１４：１０］は、第１オペランドを得るときのレジスタがどれだけオフセットしているかを指定している。Ｉ［9 ：８］は命令コードＩ［２４：２２］の延長部分であり、機能の選択を指定している。Ｉ［７：６］は予備である。Ｉ［５］はＢ２と名付けられ、命令の第２オペランドがレジスタ・セシトＡから得られるか、またはレジスタ・セットＢから得られるかを指定している。最後に、Ｉ［４：０］は、第２オペランドを得るときのレジスタがどれだけオフセットしているかを指定している。
【００４８】
第１図に示すように、整数機能ユニット６６と浮動小数点機能ユニット６８はそれぞれ整数比較命令と浮動小数点比較命令を実行する機能を備えている。比較命令の命令形式は第７図に示されているものとほぼ同じであるが、各フィールドは多少異なる名前を付けて区別しておくと便利である。Ｉ［２０：１６］は結果をストアしておくべき宛先レジスタを指定しているが、アドレス指定モード・フィールドＩ［２１］はレジスタ・セットＡとＢとの間の選択を行わない。その代わりにアドレス指定モード・フィールドは比較の第２ソースがレジスタに入っているか、即値データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）であるかを示している。比較はブール型命令であるので、宛先レジスタは常にレジスタ・セットＣに置かれている。他のフィールドの働きは第７図に示されている。整数および浮動小数点機能ユニットでブール・オペレーションを実行するとき、命令コードと機能選択フィールドは２オペランドを比較する際にどのブール条件をテストするかを指定している。整数および浮動小数点機能ユニットは数値比較に関するＩＥＥＥ標準を完全にサポートしている。
【００４９】
ＩＥＵ１０はロード／ストア・マシン（ｌｏａｄ／ｓｔｏｒｅ  ｍａｃｈｉｎｅ）である。つまり、あるレジスタの内容がメモリにストアされるか、またはメモリから読み出されるとき、どのメモリ・ロケーションをストアまたはロードのソースまたは宛先とするかを判断するためにアドレス計算をしなければならない。そのような場合には、宛先レジスタ・フィールドＩ［２０：１６］はロードまたはストアの宛先またはソースとなるレジスタを指定している。ソース・レジスタ１フィールドＩ［１４：１０］は、メモリ・ロケーションのベース・アドレスを収めているレジスタがセットＡのものか、あるいはセットＢのものかを指定している。一実施例では、ソース・レジスタ２フィールドＩ［４：０］はインデックスまたはベースからのオフセットを収めているレジスタがセットＡのものか、またはセットＢのものかを指定している。ロード／ストア・アドレスはベースにインデックスを加えると求まる。別のモードでは、Ｉ［７：０] はインデックスとしてベースに加えるべき即値データを収めている。
【００５０】
Ｂ. 命令実行ユニットとレジスタ・セットのオペレーション
この分野に精通したものならば理解されるように、整数機能ユニット６６、浮動小数点機能ユニット６８、およびブール機能ユニット７０は、実行しようとする現命令の命令クラス・フィールド、命令コード・フィールド、および機能選択フィールドの内容に応じて動作する。
【００５１】
１. 整数オペレーション
例えば、命令クラス、命令コード、および機能選択が整数レジスタ間加算を実行することを示しているときは、整数機能ユニットはそれを受けて指示されたオペレーションを実行するのに対し、浮動小数点機能ユニットとブール機能ユニットはそれを受けてもそのオペレーションを実行しない。しかし、本件特許出願と同時に出願された係属中の米国特許出願（冒頭に列挙）から理解されるように、浮動小数点機能ユニット６８は、浮動小数点と整数の両方のオペレーションを実行する機能を備えている。また、これらの機能ユニットはいずれも２つ以上の命令を同時に実行する構成になっている。
【００５２】
整数機能ユニット６６は整数演算機能だけを備えている。整数演算を行うには、一般的に、第１ソース、第２ソース、および宛先が必要になる。どの整数型命令も、実行すべき特定のオペレーションを１つまたは２つ以上のソース・オペランドで指定し、整数オペレーションの結果を特定の宛先にストアすることを指定する。ロード／ストア・オペレーションで使用されるアドレス計算のような、ある種の命令では、ソースはベースおよびインデックスとして使用される。整数機能ユニット６６は第１バスに接続され、このバスを介して整数機能ユニット６６はスイッチングとマルチプレクシング制御（ＳＭＣ）ユニットＡ７４およびＳＭＣユニットＢ７６に接続されている。整数機能ユニット６６によって実行される各整数型命令はそのソースと宛先がレジスタ・セットＡに置かれているか、レジスタ・セットＢに置かれているかを指定する。
【００５３】
以下では、ＩＥＵ１０が整数型レジスタ間加算を実行する命令を機能フェッチ・ユニット（図示せず）から受け取った場合を想定して説明する。各種実施例において、この命令はレジスタ・バンクを指定することができ、各ソースと宛先ごとに別のバンクを指定することもできる。一実施例では、命令Ｉ［］は長さが３２ビットまでに制限されているので、どのレジスタ・バンク１６−０〜１６−ｎが命令に関係しているかを示す標識は収められない。その代わりに、バンク・セレクタ・ユニット７８がどのレジスタ・バンクが現在アクティブであるかを制御する。一実施例では、バンク・セレクタ・ユニット７８は、ＩＥＵ１０内のステータス・ワード（図示せず）中の１または２つ以上のバンク選択ビットに応答して動作する。
【００５４】
整数型加算命令を実行するために、整数機能ユニット６６は第１および第２ソース・レジスタのＩ［１４：１０］およびＩ［４：０] 内のＩＤ（識別）に応動する。整数機能ユニット６６は第１および第２ソース・レジスタのＩＤをそれぞれポートＳ１およびＳ２から出力し、ＳＭＣユニットＡ７４とＳＭＣユニットＢ７６に接続された整数機能ユニット・バス７２上に送出する。一実施例では、ＳＭＣユニットＡとＢはそれぞれ命令Ｉ［］からＢ０−２を受け取るように接続されている。一実施例では、それぞれのＢｎに入っているゼロはレジスタ・セットＡを示し、１はレジスタ・セットＢを示している。ロード／ストア・オペレーション時には、整数と浮動小数点機能ユニット６６および６８のソース・ポートは、それぞれ、ベース・ポートＢおよびインデックス・ポートＩとして使用される。
【００５５】
指示されたレジスタ・セットから第１および第２オペランドをバス７２上に得ると、下述するように、整数機能ユニット６６はこれらのオペランドについて指示されたオペレーションを実行し、その結果をポートＤから出力し、整数機能ユニット・バス７２上に送出する。ＳＭＣユニットＡとＢはＢ０に応答して、その結果を該当するレジスタ・セットＡまたはＢあてに送る。
【００５６】
ＳＭＣユニットＢはさらに命令クラス、命令コード、および機能選択に応答し、オペランドを浮動小数点レジスタＲＦ［］から読み取るか、整数レジスタＲＢ［］から読み取るか（あるいは結果をそのどちらにストアするか）を制御する。上述したように、一実施例では、レジスタＲＦ［］は６４ビット幅にできるのに対し、レジスタＲＢ［］はわずか３２ビット幅である。従って、ＳＭＣユニットＢはレジスタ・セットＲＦＢ［］にワードを書くか、またはダブル・ワードを書くかを制御する。ＳＭＣユニットＡには、バス４２上のデータ転送の幅を制御する手段を設ける必要はない。
【００５７】
バス４２上のすべてのデータは３２ビット幅であるが、レジスタ・セットＡには他の種類の複雑さが存在する。ＩＥＵ１０は実行エンジン１４のモード制御ユニット４４の制御に応答し、バス４２上のデータをバス４２経由でバス３６、バス３８またはバス４０に接続するかどうか、およびその逆に接続するかどうかを制御する。
【００５８】
ＩＥＵモード整数スイッチ３４はさらにＩ［２０：１６］、Ｉ［１４：１０］、およびＩ［４：０］に応答する。指示されたある宛先またはソースがＲＡ［２３：０］にあれば、ＩＥＵモード整数スイッチ３４は自動的にデータをライン４２と３６との間に結合する。しかし、レジスタＲＡ［３１：２４］に対しては、ＩＥＵモード整数スイッチ２４はライン４２上のデータがライン３８またはライン４０に接続されているかどうか、およびその逆に接続されているかどうかを判断する。割込みが許可されているときは、ＩＥＵモード整数スイッチ３４はＳＭＣユニットＡを整数レジスタＲＡ［３１：２４］の第２サブセット２８に接続する。割込みが禁止されているときは、ＩＥＵモード整数スイッチ３４はＳＭＣユニットＡをシャドウ・レジスタＲＴ［３１：２４］に接続する。従って、整数機能ユニット６６内で実行される命令は、ＲＡ［３１：２４］をアドレス指定すべきか、またはＲＴ［３１：２４］をアドレス指定すべきかを意識する必要はない。このことから理解されるように、ＳＭＣユニットＡは、それが整数機能ユニット６６によってアクセスされるか、または浮動小数点機能ユニット６８によってアクセスされるかに関係なく、同じように動作できるいう利点がある。
【００５９】
２. 浮動小数点オペレーション
浮動小数点機能ユニット６８は、命令のクラス、命令コード、および機能選択フィールドを受けて動作し、浮動小数点オペレーションを実行する。Ｓ１、Ｓ２、およびＤポートは整数機能ユニット６６で上述したように動作する。ＳＭＣユニットＢは、バス５２経由で浮動小数点レジスタＲＦ［］からの浮動小数点オペランドに応答し、そして数値浮動小数点結果を浮動小数点レジスタＲＦ［］に書き込む。
【００６０】
３. ブール・オペレーション
ＳＭＣユニットＣ８０は命令Ｉ［］の命令クラス、命令コード、および機能選択フィールドを受けて動作する。ＳＭＣユニットＣは、比較オペレーションが数値機能ユニット６６または６８の一方によって実行されたことを検出すると、ＳＭＣユニットＣはその比較を実行した機能ユニットのＤポートにおいて示されたブール・レジスタにバス５６を介してブール・オペレーション結果を書き込む。
【００６１】
ブール機能ユニット７０は、整数および浮動小数点機能ユニット６６と６８とは異なり、比較命令を実行しない。その代わりに、ブール機能ユニット７０は、ブール・レジスタ内容のビット単位の論理的組合せを、表２に列挙されたブール機能に従って実行するのに使用されるだけである。
【００６２】
【表２】
2004185638.tif 000004
複数の同種ブール・レジスタを用意し、その各々が個別的にブール・オペレーションの宛先としてアドレス指定できるようにすると得られる本発明の利点について、表３〜５を参照して説明する。表３は、条件付きブランチを複合（ｃｏｍｐｌｅｘ）ブール機能に基づいて実行するコード・セグメントの例を示すものである。複合ブール機能は論理和（ＯＲ）がとられる３つの部分からなっている。最初の部分はさらに２つの部分からなり、これらは論理積（ＡＮＤ）がとられる。
【００６３】
【表３】
2004185638.tif 000005
表４は、従来マイクロプロセッサが表３の機能を実行するときの１つの類似方法を疑似アセンブリ形式で示すものである。表４のコードは、表３のコードを処理する少なくとも通常インテリジェント機能をもつコンパイラによって生成されるものとして書かれている。つまり、コンパイラは、３部分のいずれかが真であると、表３の２行目から４行目に表されている条件が渡されることを認識する。
【００６４】
【表４】
2004185638.tif 000006
表３の１行目の割当ては表４の１行目の「即値ロード」ステートメントによって実行される。表３の２行目に表されている複合ブール条件の最初の部分は表の４の２行目〜５行目のステートメントで表される。ＲＡ［２］がＲＡ［３] に等しいかどうかをテストするには、表４の２行目の比較ステートメントは、どのようにコーディングしたかに応じて、ＲＡ［３] からＲＡ［２］を減算することあるいはその逆を実行し、減算の結果をストアする場合とストアしない場合がある。比較ステートメントによって実行される重要な機能は、ゼロ、マイナス、およびキャリー・フラグがその結果に応じてセットまたはクリアされることである。
【００６５】
表４の３行目の条件付きブランチ・ステートメントは、ＲＡ［２］がＲＡ［３］と等しくなかったことを条件として、コードの後続部分ヘブランチする。２つが等しくないと、ゼロ・フラグがクリアされるので、２番目のサブ部分を実行する必要がない。表４の３行目に条件付きブランチ・ステートメントが存在するので、２行目の比較結果が分かるまでは、表４の後続ステートメントのフェッチ、デコードおよび実行が禁止されるために、パイプライン停止（ｐｉｐｅｌｉｎｅ  ｓｔａｌｌ）が起こることになる。最初の部分（ＴＥＳＴ１）の最初のサブ部分が渡されると、表４の４行目の第２サブ部分はＲＡ［４］をＲＡ［５］と比較するので、この場合も、該当ステータス・フラグがセットまたはクリアされることになる。
【００６６】
ＲＡ［２］がＲＡ［３］と等しく、ＲＡ［４］がＲＡ［５］より大きければ、複合ブール機能の中の残りの２部分（ＴＥＳＴ２とＴＥＳＴ３）をテストする必要がなく、表４の５行目のステートメントは条件付きでラベルＤＯ＿ＩＦヘブランチし、表４の" ＩＦ" の内側のオペレーションが実行される。しかし、テストの最初の部分が失敗すると、" ＩＦ”と”ＥＬＳＥ”部分のどちらを実行させるかを判定するために追加の処理が必要になる。
【００６７】
ブール機能の第２部分は表４の６行目でＲＡ［６］をＲＡ［７］と比較するものであり、この場合も、該当ステータス・フラグがセットまたはクリアされる。「より小さい」の条件がステータス・フラグによって指示されていると、複合ブール機能が渡され、その実行は即時にＤＯ＿ＩＦラベルヘブランチすることができる。従来の各種マイクロプロセッサでは、「より小さい」条件はマイナス・フラグを検査することでテストすることが可能になっている。ＲＡ［７] がＲＡ［６］より小でなかったときは、テストの第３部分を実行する必要がある。表４の８行目のステートメントはＲＡ［８] をＲＡ［９］と比較する。この比較が失敗したときは、”ＥＬＳＥ”コードを実行させる必要がある。そうでなければ、実行は表４の１０行目の”ＩＦ”コードヘフォールスルー（ｆａｌｌ  ｔｈｒｏｕｇｈ）するだけであり、そのあと”ＥＬＳＥ”コードの前後で別のジャンプが行われることになる。表４の３、５、７および９行目の条件付きブランチはそれぞれが別々のパイプライン停止を引き起こすので、この複合ブール機能を処理するために必要な処理時間が大幅に増加することになる。
【００６８】
本発明のブール・レジスタ・セットＣを採用するとスループットが大幅に向上することは、表５を特に参照すれば容易に理解されるはずである。
【００６９】
【表５】
2004185638.tif 000007
特に表５の２行目〜５行目に示すように、ブール・レジスタ・セットＣを使用すると、マイクロプロセッサは、途中にブランチを介在しないで３つのテスト部分を連続して実行することができる。各ブール比較は２つのオペランド、宛先、およびテストすべきブール条件を指定している。例えば、表５の２行目の比較はＲＡ［２］の内容をＲＡ［３］の内容と比較し、その内容が等しいかをテストし、比較結果のブール値をＲＣ［１１］にストアしている。表５に示すように、ブール機能の各比較はそれぞれの中間結果を別々のブール・レジスタにストアしている。冒頭に列挙した関連特許出願から理解されるように、ＩＥＵ１０はこれらの比較を２つ以上同時に実行する機能を備えている。
【００７０】
表５の２行目〜３行目の最初の２つの比較が完了すると、２つの各中間結果の論理積（ＡＮＤ）が表３の６行目に示すようにとられる。その後、テストの最初の部分の結果がＲＣ［１５］に格納される。ブール機能の第２と第３サブ部分の結果の論理和（ＯＲ）が表５の７行目に示すようにとられる。理解されるように、データ依存関係がないので、６行目のＡＮＤ（論理積）と７行目のＯＲ（論理和）は並列に実行することができる。最後に、これら２つのオペレーションの結果の論理和が表５の８行目に示すようにとられる。
【００７１】
表から理解されるように、表３の複合ブール機能全体が真であるか、偽であるかを示すブール値がＲＣ［１７］に収められる。その後、表５の９行目に示すように、単純条件付きブランチを実行することが可能である。表５に示すモードでは、ブール・レジスタＲＣ［１７］がクリアで、複合機能が失敗したことを示していると、”ＥＬＳＥ”コードヘブランチする。コードの残余部分は、表４に示すようなブール・レジスタがない場合と同じにすることができる。
【００７２】
ブール機能ユニット７０は他の機能ユニットと同じように、命令クラス、命令コード、および機能選択フィールドに応動する。従って、この場合も、表５から理解されるように、整数機能ユニットおよび／または浮動小数点機能ユニットは、１行目〜５行目と１３行目の命令を実行し、ブール機能ユニット７０は６行目〜８行目のブール・ビット単位結合命令（Ｂｏｏｌｅａｎ  ｂｉｔｗｉｓｅ  ｃｏｍｂｉｎａｔｉｏｎ  ｉｎｓｔｒｕｃｔｉｏｎ）を実行する。9 行目〜１２行目の制御フローとブランチ命令はＩＥＵ１０のエレメント（第１図には示されていない）によって実行される。
【００７３】
III.データ経路
第２図〜第５図は、それぞれ、ＩＥＵの浮動小数点、整数、およびブール演算部分内のデータ経路を示す詳細図である。
【００７４】
Ａ. 浮動小数点部分のデータ経路
第２図に示すように、レジスタ・セットＦＢ２０はマルチポート・レジスタ・セットである。一実施例では、レジスタ・セットＦＢ２０は２つの書込みポートＷＦＢ０−１と５つの読取りポートＲＤＦＢ０−４をもっている。第１図の浮動小数点機能ユニット６８は第２図のＡＬＵ２１０２、ＦＡＬＵ１０４、ＭＵＬＴ１０６、およびＮＵＬＬ１０８から構成されている。レジスタ・セット２０とエレメント１０２〜１０８を除く第２図のすべてのエレメントは第１図のＳＭＣユニットＢ７６を構成している。
【００７５】
外部双方向データ・バスＥＸ＿ＤＡＴＡ［］はデータを浮動小数点ロード／ストア・ユニット１２２へ送る。即値浮動小数点データ・バスＬＦＤ＿ＩＭＥＤ［］は「即値ロード」命令からのデータを送る。他の即値浮動小数点データは「即値加算」命令で必要となるものと同じバスＲＦＦ１＿ＩＭＥＤおよびＲＦＦ２＿ＩＭＥＤ上を送られる。データは「特殊レジスタ移動」命令を受けると、バスＥＸ＿ＳＲ＿ＤＴ［］上にも送られる。データは第３図に示す整数部分からバス１１４と１２０上を送られてくることもある。
【００７６】
浮動小数点レジスタ・セットの２つの書込みポートＷＦＢ０とＷＦＢ１は、それぞれ書込みマルチプレクサ１１０−０と１１０−１に結合されている。書込みマルチプレクサ１１０は第３図の整数部分のＡＬＵ０またはＳＨＦ０；ＦＡＬＵ；ＭＵＬＴ；ＡＬＵ２；ＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＦ＿ＩＭＥＤ［］；およびＥＸ＿ＤＡＴＡ［］からデータを受け取る。当業者なら理解されるように、各ポートからどの入力が選択されるかは制御信号（図示せず）から判断され、入力データをどのレジスタに書くかはアドレス信号（図示せず）から判断される。マルチプレクサの制御とアドレス指定は公知であるので、ここでは、マルチプレクサまたはレジスタ・セットに関する詳しい説明は省略する。
【００７７】
浮動小数点レジスタ・セットの５つの読取りポートＲＤＦＢ０〜ＲＤＦＢ４は、それぞれ読取りマルチプレクサ１１２−０〜１１２−４に結合されている。読取りマルチプレクサは、それぞれ、即値ロード・バイパス・バス１２６上のＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＦ＿ＩＭＥＤ［］；外部ロード・データをレジスタ・セットＦＢをスキップさせる外部ロード・データ・バィパス・バス１２７；非乗算整数オペレーションを実行するＡＬＵ２１０２の出力；非乗算浮動小数点オペレーションを実行するＦＡＬＵ１０４；乗算オペレーションを実行するＭＵＬＴ１０６；それぞれ非乗算整数オペレーションとシフト・オペレーションを実行する第３図の整数部分のＡＬＵ０１４０またはＳＨＦ０１４４からもデータを受け取る。読取りマルチプレクサ１１２−１と１１２−３はそれぞれＲＦＦ１＿ＩＭＥＤ［］とＲＦＦ２＿ＩＭＥＤ［］からもデータを受げ取る。
【００７８】
浮動小数点部分内の各算術演算型ユニット１０２〜１０６は、第１および第２ソース・マルチプレクサＳ１とＳ２のそれぞれのセットから２つの入力を受け取る。各ユニットＡＬＵ２、ＦＡＬＵおよびＭＵＬＴの最初のソースは読取りマルチプレクサ１１２−０または１１２−２の出力から得られ、２番目のソースは読取りマルチプレクサ１１２−１または１１２−３の出力から得られる。ＦＡＬＵとＭＵＬＴのソースはバス１１４経由で第３図の整数部分からも得られる。
【００７９】
ＡＬＵ２、ＦＡＬＵ、およびＭＵＬＴの結果は書込みマルチプレクサ１１０へ送り返されて浮動小数点レジスタＲＦ［］にストアされ、読取りマルチプレクサ１１２へも送り返されて以後のオペレーションのオペランドとして再使用される。ＦＡＬＵは浮動小数点比較オペレーションのブール結果を示す信号ＦＡＬＵ＿ＢＤをも出力する。ＦＡＬＵ＿ＢＤはＦＡＬＵの内部ゼロ・フラグと符号フラグから直接に計算される。
【００８０】
空白（ｎｕｌｌ）バイト・テスタＮＵＬＬ１０８は、あるモードにあるとき、ＡＬＵ２の第１ソース・マルチプレクサからのオペランドについて空白バイト・テスト操作を行う。ＮＵＬＬ１０８は、３２ビットの最初のソース・オペランドに値がゼロのバイトが含まれているかどうかを示したブール信号ＮＵＬＬＢ＿ＢＤを出力する。
【００８１】
読取りマルチプレクサ１１２−０、１１２−１および１１２−４の出力はバス１１８経由で（第３図の）整数部分へ送られる。読取りマルチプレクサ１１２−４の出力は、ＳＴＤＴ＿ＦＰ［］ストア・データとして浮動小数点ロード／ストア・ユニット１２２へも送られる。
【００８２】
第５図はＳ１とＳ２マルチプレクサのコントロールを示す詳細図である。図示のように、一実施例では、各Ｓ１マルチプレクサは命令Ｉ［］のビットＢ１を受けて動作し、各Ｓ２マルチプレクサは命令Ｉ［］のビットＢ２を受けて動作する。Ｓ１とＳ２マルチプレクサは各種機能ユニット用のソースを選択する。ソースはレジスタ・ファイルのどちらかから得ることができ、これは命令自体のＢ１とＢ２ビットによって制御される。さらに、各レジスタ・ファイルは２つの読取りポートを備え、そこからソースを得ることもできるが、その制御は図示していないハードウェアで行われる。
【００８３】
Ｂ. 整数部分のデータ経路
第３図に示すように、レジスタ・セットＡ１８もマルチポートになっている。一実施例では、レジスタ・セットＡ１８は２つの書込みポートＷＡ０−１と５つの読取りポートＲＤＡ０−４を備えている。第１図の整数機能ユニット６６は、第３図のＡＬＵ０１４０、ＡＬＵ１１４２、ＳＨＦ０１４４、およびＮＵＬＬ１４６から構成されている。レジスタ・セットＡ１８およびエレメント１４０−１４６を除く第３図のすべてのエレメントは第１図のＳＭＣユニットＡ７４を構成している。
【００８４】
外部データ・バスＥＸ＿ＤＡＴＡ［］はデータを整数ロード／ストア・ユニット１５２へ送る。バスＬＤＩ＿ＩＭＥＤ［］上の即値整数データは「即値ロード」命令を受けて送られる。他の即値整数データは「即値加算」などの非即値ロード命令を受けてバスＲＦＡ１＿ＩＭＥＤとＲＦＡ２＿ＩＭＥＤ上を送出される。データは「特殊レジスタ移動」命令を受けてバスＥＸ＿ＳＲ＿ＤＴ［］上にも送出される。データはバス１１６と１１８経由で浮動小数点部分（第２図に図示）から送られてくる場合もある。
【００８５】
整数レジスタ・セットの２つの書込みポートＷＡ０とＷＡ１はそれぞれ書込みマルチプレクサ１４８−０と１４８−１に結合されている。書込みマルチプレクサ１４８は、（第２図の）浮動小数点部分のＦＡＬＵまたはＭＵＬＴ；ＡＬＵ０；ＡＬＵ１；ＳＨＦ０；ＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＩ＿ＩＭＥＤ［］；およびＥＸ＿ＤＡＴＡ［］からデータを受け取る。
【００８６】
整数レジスタ・セットの５つの読取りポートＲＤＡ０〜ＲＤＡ４はそれぞれ読取りマルチプレクサ１５０−０〜１５０−４に結合されている。各読取りマルチプレクサは即値ロード・バイパス・バス１６０上のＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＩ＿ＩＭＥＤ［］；外部ロード・データがレジスタ・セットＡをスキップすることを可能にするロード外部データ・バイパス・バス１５４；ＡＬＵ０；ＡＬＵ１；ＳＨＦ０；および（第２図の）浮動小数点部分のＦＡＬＵまたはＭＵＬＴからもデータを受け取る。読取りマルチプレクサ１５０−１と１５０−３はそれぞれＲＦＡ１＿ＩＭＥＤ［］とＲＦＡ２＿ＩＭＥＤ［］からもデータを受け取る。
【００８７】
整数部分内の各算術演算型ユニット１４０−１４４は第１および第２ソース・マルチプレクサＳ１とＳ２のそれぞれのセットから２つの入力を受け取る。ＡＬＵ０の第１ソースは読取りマルチプレクサ１５０−２の出力、または３２ビット幅の定数ゼロ（００００hex ）、または浮動小数点読取りマルチプレクサ１１２−４のいずれかから得られる。ＡＬＵ０の第２のソースは読取りマルチプレクサ１５０−３または浮動小数点読取りマルチプレクサ１１２−１のいずれかから得られる。ＡＬＵ１の第１ソースは読取りマルチプレクサ１５０−０またはＩＦ＿ＰＣ［］のいずれかから得られる。ＩＦ＿ＰＣ［］は、ＩＥＵが命令を順序外（out-of-order）の順序で実行できる機能を備えているために、命令フェッチ・ユニット（図示せず）が必要とするリターン・アドレスを計算する際に使用される。ＡＬＵ１の第２ソースは読取りマルチプレクサ１５０−１またはＣＦ＿ＯＦＦＳＥＴ［］のいずれかから得られる。ＣＦ＿ＯＦＦＳＥＴ［］は、同じく順序外で実行できるために、ＣＡＬＬ命令のリターン・アドレスを計算する際に使用される。
【００８８】
シフタＳＨＦ０１４４の第１ソースは、浮動小数点読取りマルチプレクサ１１２−０または１１２−４またはいずれかの整数読取りマルチプレクサ１５０から得られる。ＳＨＦ０の第２ソースは、浮動小数点読取りマルチプレクサ１１２−０または１１２−４または整数読取りマルチプレクサ１５０−０、１５０−２、または１５０−４から得られる。ＳＨＦ０は第３の入力をシフト量（ｓｈｉｆｔ  ａｍｏｕｎｔ−ＳＡ）マルチプレクサから得る。第３の入力はどれだけシフトさせるかを制御するもので、ＳＡマルチプレクサによって浮動小数点読取りマルチプレクサ１１２−１、整数読取りマルチプレクサ１５０−１または１５０−３または５ビット幅定数３２（１１１１１2 または３１1 0 ）から取得される。シフタＳＨＦ０はサイズ・マルチプレクサ（Ｓ）から第４の入力を要求する。第４の入力はどれだけのデータをシフトさせるかを制御するもので、Ｓマルチプレクサによって読取りマルチプレクサ１５０−１、読取りマルチプレクサ１５０−３、または５ビット幅定数１６（１００００2 または１６1 0 ）から取得される。
【００８９】
ＡＬＵ０、ＡＬＵ１、およびＳＨＦ０の結果は書込みマルチプレクサ１４８へ送り返されて整数レジスタＲＡ［］にストアされ、および読取りマルチプレクサ１５０へも送り返されて以後の演算のオペランドとして再使用される。ＡＬＵ０またはＳＨＦ０のいずれかの出力はバス１２０を経由して第２図の浮動小数点部分へ送られる。ＡＬＵ０およびＡＬＵ１は、それぞれ、整数比較オペレーションのブール結果を示した信号ＡＬＵ０＿ＢＤおよびＡＬＵ１＿ＢＤをも出力する。ＡＬＵ０＿ＢＤとＡＬＵ１＿ＢＤはそれぞれの機能ユニットのゼロ・フラグと符号フラグから直接に計算される。ＡＬＵ０は信号ＥＸ＿ＴＡＤＲ［］およびＥＸ＿ＶＭ＿ＡＤＲをも出力する。ＥＸ−ＴＡＤＲ［］は絶対ブランチ命令に対する生成されたターゲット・アドレスであり、ターゲット命令をフェッチするためにＩＦＵ（図示せず）へ送られる。ＥＸ＿ＶＭ＿ＡＤＲ［］は、メモリからロードし、メモリヘストアするとき使用される仮想メモリであり、アドレス変換のためにＶＭＵ（図示せず）へ送られる。
【００９０】
空白バイト・テスタＮＵＬＬ１４６は、第１ソース・マルチプレクサからのオペランドについて空白バイト・テスト操作を行う。一実施例では、このオペランドはＡＬＵ１から得られる。ＮＵＬＬ１４６は、３２ビットの第１ソース・オペランドに値がゼロのバイトが含まれているかどうかを示したブール信号ＮＵＬＬＡ＿ＢＤを出力する。
【００９１】
読取りマルチプレクサ１５０−０および１５０−１の出力はバス１１４を経由して（第２図の）浮動小数点部分へ送られる。また、読取りマルチプレクサ１５０−４の出力は、ＳＴＤＴ−ＩＮＴ［］ストアデータとして整数ロード／ストア・ユニット１５２ヘ送られる。
【００９２】
制御ビットＰＳＲ［７］はレジスタ・セットＡ１８へ送られる。第１図において、モード制御ユニット４４からライン４６上をＩＥＵモード整数スイッチ３４へ送られるのは、この信号である。ＩＥＵモード整数スイッチは第３図に示すようにレジスタ・セットＡ１８の内部に置かれている。
【００９３】
第６図はＳ１およびＳ２マルチプレクサのコントロールの詳細を示した図である。
【００９４】
Ｃ．ブール部分のデータ経路
第４図に示すように、レジスタ・セットＣ２２もマルチポートを備えている。一実施例では、レジスタ・セットＣ２２は２つの書込みポートＷＣ０−１と５つの読取りポートＲＤＣ０−４を備えている。レジスタ・セットＣ２２とブール組合せユニット（Ｂｏｏｌｅａｎ  ｃｏｍｂｉｎａｔｉｏｎａｌ  ｕｎｉｔ）７０を除く第４図のすべてのエレメントは第１図のＳＭＣユニットＣ８０を構成している。
【００９５】
ブール・レジスタ・セットの２つの書込みポートＷＣ０およびＷＣ１は、それぞれ、書込みマルチプレクサ１７０−０および１７０−１に結合されている。書込みマルチプレクサ１７０はブール組合せオペレーションのブール結果を示しているブール組合せユニット７０の出力；整数比較のブール結果を示している第３図の整数部分からのＡＬＵ０＿ＢＤ；浮動小数点比較のブール結果を示している第２図の浮動小数点部分からのＦＡＬＵ＿ＢＤ；ＡＬＵ１における比較命令の結果を示しているＡＬＵ１からのＡＬＵＬＢＤ−Ｐまたは整数部分における空白バイトを示しているＮＵＬＬ１４６からのＮＵＬＬＡ−ＢＤ；およびＡＬＵ２における比較オペレーションの結果を示しているＡＬＵ２からのＡＬＵ２＿ＢＤ−Ｐまたは浮動小数点部分における比較オペレーションの結果を示しているＮＵＬＬ１０８からのＮＵＬＬＢ＿ＢＤからデータを受け取る。あるひとつのモードでは、ＡＬＵ０＿ＢＤ、ＡＬＵ１＿ＢＤ、ＡＬＵ２＿ＢＤ、およびＦＡＬＵ＿ＢＤ信号はデータ経路から受け取られないで、ＰＳＲ内のゼロ・フラグ、マイナス・フラグ、キャリー・フラグ、その他の条件フラグに応じて計算される。一実施モードでは、どの瞬時においても最大８命令までがＩＥＵで実行できるので、ＩＥＵは最大８個のＰＳＲを維持している。
【００９６】
ブール・レジスタ・セットＣはバスＥＸ＿ＳＲ＿ＤＴ［］にも結合されて、「特殊レジスタ移動」命令で使用される。ＣＳＲは、１つの３２ビット・レジスタであるかのように全体として読み書きされる。この結果、ある種の重大なシステム・エラーが起こったときや、ある種の大規模なコンテキスト・スイッチングを行ったとき、必要に応じて、マシン・ステート情報を高速にセーブし復元することができる。
【００９７】
ブール・レジスタ・セットの４つの読取りポートＲＤＣ０〜ＲＤＣ３はそれぞれ読取りマルチプレクサ１７２−０〜１７０−３に結合されている。読取りマルチプレクサ１７２は書込みマルチプレクサ１７０が受け取るのと同じセットの入力を受け取る。ブール組合せユニット７０は、読取りマルチプレクサ１７０−０と１７０−１から入力を受け取る。読取りマルチプレクサ１７２−２およびＢ１７２−３は、それぞれ、信号ＢＬＢＰ＿ＣＰＯＲＴおよびＢＬＢＰ＿ＤＰＯＲＴを出力する。ＢＬＢＰ＿ＣＰＯＲＴはＩＥＵで条件付きブランチ命令の基礎として使用される。ＢＬＢＰ＿ＤＰＯＲＴは「ブールによる加算」命令で使用され、ＡまたはＢセットの中の整数レジスタを、Ｃセットの中のレジスタの内容に応じて、ゼロか１（先行ゼロ付き）にセットする。読取りポートＲＤＣ４は現時点では未使用であり、ＩＥＵのブール演算機能を将来強化する場合に備えて予約されている。
【００９８】
IV. 結論
本発明の特徴および利点を、本発明の特定実施例を参照して種々説明してきたが、本発明は上述した実施例に限定されるものではない、本発明の範囲は請求の範囲に明確化されている通りである。
【図面の簡単な説明】
【００９９】
【図１】本発明のマイクロプロセッサの命令実行ユニットを示すブロック図であり、レジスタ・ファイルの要素を示している。
【図２】図１に示した命令実行ユットの浮動小数点部分を示す簡略ブロック図である。
【図３】図１に示した命令実行ユットの浮動小数点部分を示す簡略ブロック図である。
【図４】図１に示した命令実行ユットの整数部分を示す簡略ブロック図である。
【図５】図１に示した命令実行ユットの整数部分を示す簡略ブロック図である。
【図６】図１に示した命令実行ユットのブール部分を示す簡略ブロック図である。
【図７】浮動小数点および整数部分を示す詳細図であり、レジスタ・セット間の選択手段を示している。
【図８】浮動小数点および整数部分を示す詳細図であり、レジスタ・セット間の選択手段を示している。
【図９】図１に示した命令実行ユニットによって実行可能なマイクロプロセッサ命令ワード例のフィールドを示す図である。
【符号の説明】
【０１００】
１０…命令実行ユニット、１２…レジスタ・ファイル、１４…実行エンジン、１６−０〜１６−ｎ…レジスタ・バンク、１８…レジスタ・セットＡ、２０…レジスタ・セットＦＢ、２２…レジスタ・セットＣ、４４…モード制御ユニット、６２…ＣＳＲセレクタ・ユニット、６６…整数機能ユニット、６８…浮動小数点機能ユニット、７０…ブール機能ユニット、７４…スイッチングとマルチプレクシング制御ユニットＡ、７６…スイッチングとマルチプレクシング制御ユニットＢ、７８…バンク・セレクタ・ユニット、８０…スイッチングとマルチプレクシング制御ユニットＣ
【図１】
2004185638.tif 000008
【図２】
2004185638.tif 000009
【図３】
2004185638.tif 000010
【図４】
2004185638.tif 000011
【図５】
2004185638.tif 000012
【図６】
2004185638.tif 000013
【図７】
2004185638.tif 000014
【図８】
2004185638.tif 000015
【図９】
2004185638.tif 000016
【手続補正書】
【提出日】平成16年1月20日(2004.1.20)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
１. レジスタ・ファイル
図１は、本発明によるＲＩＳＣ（縮小命令セット計算）の命令実行ユニット（ＩＥＵ）１０の基本構成要素を示す図である。ＩＥＵ１０はレジスタ・ファイル１２と実行エンジン１４を備えている。レジスタ・ファイル１２は１つまたは２つ以上のレジスタ・バンク１６−０〜１６−ｎを含んでいる。明らかなように、各レジスタ・バンク１６は他のレジスタ・バンク１６のすべてと同一構造になっている。従って、以下では、レジスタ・バンク１６−０だけを説明することにする。レジスタ・バンクはレジスタ・セットＡ１８、レジスタ・セットＦＢ２０、およびレジスタ・セットＣ２２を含んでいる。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００４５
【補正方法】変更
【補正の内容】
【００４５】
II. 実行エンジン
実行エンジン１４は１つまたは２つ以上の整数機能ユニット６６、１つまたは２つ以上の浮動小数点機能ユニット６８、および１つまたは２つ以上のブール機能ユニット７０を備えている。これらの機能ユニットは、以下に説明するように命令を実行する。バス７２、７３、７５はＩＥＵ１０の種々エレメントを結んでおり、それぞれはデータ経路、アドレス経路、および制御経路を表しているものとする。
Ａ. 命令の形式
図９は、実行エンジン１４に実行させることができる整数命令の形式（フォーマット）を示す一例である。理解されるように、すべての命令が図示の形式に厳密に従う必要はなく、データ処理システムには命令フェッチャとデコード（図示せず）が含まれており、これらは形式の異なる命令を処理するように構成されている。図９には、理解を容易にするために、１つの例だけが示されている。本明細書全体を通して、符号［］は命令の各ビットを示すために用いられている。Ｉ［３１：３０］は、実行エンジン１４の将来の実装に備えて予約されている。Ｉ［２９：２６］は特定の命令の命令クラスを示している。表１は、本発明によって実行される命令の各種クラスを示すものである。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４８
【補正方法】変更
【補正の内容】
【００４８】
図１に示すように、整数機能ユニット６６と浮動小数点機能ユニット６８はそれぞれ整数比較命令と浮動小数点比較命令を実行する機能を備えている。比較命令の命令形式は図９に示されているものとほぼ同じであるが、各フィールドは多少異なる名前を付けて区別しておくと便利である。Ｉ［２０：１６］は結果をストアしておくべき宛先レジスタを指定しているが、アドレス指定モード・フィールドＩ［２１］はレジスタ・セットＡとＢとの間の選択を行わない。その代わりにアドレス指定モード・フィールドは比較の第２ソースがレジスタに入っているか、即値データ（ｉｍｍｅｄｉａｔｅ  ｄａｔａ）であるかを示している。比較はブール型命令であるので、宛先レジスタは常にレジスタ・セットＣに置かれている。他のフィールドの働きは図９に示されている。整数および浮動小数点機能ユニットでブール・オペレーションを実行するとき、命令コードと機能選択フィールドは２オペランドを比較する際にどのブール条件をテストするかを指定している。整数および浮動小数点機能ユニットは数値比較に関するＩＥＥＥ標準を完全にサポートしている。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７３
【補正方法】変更
【補正の内容】
【００７３】
III.データ経路
図２〜図７は、それぞれ、ＩＥＵの浮動小数点、整数、およびブール演算部分内のデータ経路を示す詳細図である。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
Ａ. 浮動小数点部分のデータ経路
図２に示すように、レジスタ・セットＦＢ２０はマルチポート・レジスタ・セットである。一実施例では、レジスタ・セットＦＢ２０は２つの書込みポートＷＦＢ０−１と５つの読取りポートＲＤＦＢ０−４をもっている。図１の浮動小数点機能ユニット６８は図３のＡＬＵ２１０２、ＦＡＬＵ１０４、ＭＵＬＴ１０６、およびＮＵＬＬ１０８から構成されている。レジスタ・セット２０とエレメント１０２〜１０８を除く図２、図３のすべてのエレメントは図１のＳＭＣユニットＢ７６を構成している。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００７５
【補正方法】変更
【補正の内容】
【００７５】
外部双方向データ・バスＥＸ＿ＤＡＴＡ［］はデータを浮動小数点ロード／ストア・ユニット１２２へ送る。即値浮動小数点データ・バスＬＦＤ＿ＩＭＥＤ［］は「即値ロード」命令からのデータを送る。他の即値浮動小数点データは「即値加算」命令で必要となるものと同じバスＲＦＦ１＿ＩＭＥＤおよびＲＦＦ２＿ＩＭＥＤ上を送られる。データは「特殊レジスタ移動」命令を受けると、バスＥＸ＿ＳＲ＿ＤＴ［］上にも送られる。データは図５に示す整数部分からバス１１４と１２０上を送られてくることもある。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００７６
【補正方法】変更
【補正の内容】
【００７６】
浮動小数点レジスタ・セットの２つの書込みポートＷＦＢ０とＷＦＢ１は、それぞれ書込みマルチプレクサ１１０−０と１１０−１に結合されている。書込みマルチプレクサ１１０は図５の整数部分のＡＬＵ０またはＳＨＦ０；ＦＡＬＵ；ＭＵＬＴ；ＡＬＵ２；ＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＦ＿ＩＭＥＤ［］；およびＥＸ＿ＤＡＴＡ［］からデータを受け取る。当業者なら理解されるように、各ポートからどの入力が選択されるかは制御信号（図示せず）から判断され、入力データをどのレジスタに書くかはアドレス信号（図示せず）から判断される。マルチプレクサの制御とアドレス指定は公知であるので、ここでは、マルチプレクサまたはレジスタ・セットに関する詳しい説明は省略する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
浮動小数点レジスタ・セットの５つの読取りポートＲＤＦＢ０〜ＲＤＦＢ４は、それぞれ読取りマルチプレクサ１１２−０〜１１２−４に結合されている。読取りマルチプレクサは、それぞれ、即値ロード・バイパス・バス１２６上のＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＦ＿ＩＭＥＤ［］；外部ロード・データをレジスタ・セットＦＢをスキップさせる外部ロード・データ・バィパス・バス１２７；非乗算整数オペレーションを実行するＡＬＵ２１０２の出力；非乗算浮動小数点オペレーションを実行するＦＡＬＵ１０４；乗算オペレーションを実行するＭＵＬＴ１０６；それぞれ非乗算整数オペレーションとシフト・オペレーションを実行する図５の整数部分のＡＬＵ０１４０またはＳＨＦ０１４４からもデータを受け取る。読取りマルチプレクサ１１２−１と１１２−３はそれぞれＲＦＦ１＿ＩＭＥＤ［］とＲＦＦ２＿ＩＭＥＤ［］からもデータを受げ取る。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
浮動小数点部分内の各算術演算型ユニット１０２〜１０６は、第１および第２ソース・マルチプレクサＳ１とＳ２のそれぞれのセットから２つの入力を受け取る。各ユニットＡＬＵ２、ＦＡＬＵおよびＭＵＬＴの最初のソースは読取りマルチプレクサ１１２−０または１１２−２の出力から得られ、２番目のソースは読取りマルチプレクサ１１２−１または１１２−３の出力から得られる。ＦＡＬＵとＭＵＬＴのソースはバス１１４経由で図５の整数部分からも得られる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
読取りマルチプレクサ１１２−０、１１２−１および１１２−４の出力はバス１１８経由で（図５の）整数部分へ送られる。読取りマルチプレクサ１１２−４の出力は、ＳＴＤＴ＿ＦＰ［］ストア・データとして浮動小数点ロード／ストア・ユニット１２２へも送られる。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
図７はＳ１とＳ２マルチプレクサのコントロールを示す詳細図である。図示のように、一実施例では、各Ｓ１マルチプレクサは命令Ｉ［］のビットＢ１を受けて動作し、各Ｓ２マルチプレクサは命令Ｉ［］のビットＢ２を受けて動作する。Ｓ１とＳ２マルチプレクサは各種機能ユニット用のソースを選択する。ソースはレジスタ・ファイルのどちらかから得ることができ、これは命令自体のＢ１とＢ２ビットによって制御される。さらに、各レジスタ・ファイルは２つの読取りポートを備え、そこからソースを得ることもできるが、その制御は図示していないハードウェアで行われる。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００８３
【補正方法】変更
【補正の内容】
【００８３】
Ｂ. 整数部分のデータ経路
図４に示すように、レジスタ・セットＡ１８もマルチポートになっている。一実施例では、レジスタ・セットＡ１８は２つの書込みポートＷＡ０−１と５つの読取りポートＲＤＡ０−４を備えている。図１の整数機能ユニット６６は、図５のＡＬＵ０１４０、ＡＬＵ１１４２、ＳＨＦ０１４４、およびＮＵＬＬ１４６から構成されている。レジスタ・セットＡ１８およびエレメント１４０−１４６を除く図４、図５のすべてのエレメントは図１のＳＭＣユニットＡ７４を構成している。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
外部データ・バスＥＸ＿ＤＡＴＡ［］はデータを整数ロード／ストア・ユニット１５２へ送る。バスＬＤＩ＿ＩＭＥＤ［］上の即値整数データは「即値ロード」命令を受けて送られる。他の即値整数データは「即値加算」などの非即値ロード命令を受けてバスＲＦＡ１＿ＩＭＥＤとＲＦＡ２＿ＩＭＥＤ上を送出される。データは「特殊レジスタ移動」命令を受けてバスＥＸ＿ＳＲ＿ＤＴ［］上にも送出される。データはバス１１６と１１８経由で浮動小数点部分（図３に図示）から送られてくる場合もある。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００８５
【補正方法】変更
【補正の内容】
【００８５】
整数レジスタ・セットの２つの書込みポートＷＡ０とＷＡ１はそれぞれ書込みマルチプレクサ１４８−０と１４８−１に結合されている。書込みマルチプレクサ１４８は、（図３の）浮動小数点部分のＦＡＬＵまたはＭＵＬＴ；ＡＬＵ０；ＡＬＵ１；ＳＨＦ０；ＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＩ＿ＩＭＥＤ［］；およびＥＸ＿ＤＡＴＡ［］からデータを受け取る。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００８６
【補正方法】変更
【補正の内容】
【００８６】
整数レジスタ・セットの５つの読取りポートＲＤＡ０〜ＲＤＡ４はそれぞれ読取りマルチプレクサ１５０−０〜１５０−４に結合されている。各読取りマルチプレクサは即値ロード・バイパス・バス１６０上のＥＸ＿ＳＲ＿ＤＴ［］またはＬＤＩ＿ＩＭＥＤ［］；外部ロード・データがレジスタ・セットＡをスキップすることを可能にするロード外部データ・バイパス・バス１５４；ＡＬＵ０；ＡＬＵ１；ＳＨＦ０；および（図３の）浮動小数点部分のＦＡＬＵまたはＭＵＬＴからもデータを受け取る。読取りマルチプレクサ１５０−１と１５０−３はそれぞれＲＦＡ１＿ＩＭＥＤ［］とＲＦＡ２＿ＩＭＥＤ［］からもデータを受け取る。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００８９
【補正方法】変更
【補正の内容】
【００８９】
ＡＬＵ０、ＡＬＵ１、およびＳＨＦ０の結果は書込みマルチプレクサ１４８へ送り返されて整数レジスタＲＡ［］にストアされ、および読取りマルチプレクサ１５０へも送り返されて以後の演算のオペランドとして再使用される。ＡＬＵ０またはＳＨＦ０のいずれかの出力はバス１２０を経由して図３の浮動小数点部分へ送られる。ＡＬＵ０およびＡＬＵ１は、それぞれ、整数比較オペレーションのブール結果を示した信号ＡＬＵ０＿ＢＤおよびＡＬＵ１＿ＢＤをも出力する。ＡＬＵ０＿ＢＤとＡＬＵ１＿ＢＤはそれぞれの機能ユニットのゼロ・フラグと符号フラグから直接に計算される。ＡＬＵ０は信号ＥＸ＿ＴＡＤＲ［］およびＥＸ＿ＶＭ＿ＡＤＲをも出力する。ＥＸ−ＴＡＤＲ［］は絶対ブランチ命令に対する生成されたターゲット・アドレスであり、ターゲット命令をフェッチするためにＩＦＵ（図示せず）へ送られる。ＥＸ＿ＶＭ＿ＡＤＲ［］は、メモリからロードし、メモリヘストアするとき使用される仮想メモリであり、アドレス変換のためにＶＭＵ（図示せず）へ送られる。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００９１
【補正方法】変更
【補正の内容】
【００９１】
読取りマルチプレクサ１５０−０および１５０−１の出力はバス１１４を経由して（図３の）浮動小数点部分へ送られる。また、読取りマルチプレクサ１５０−４の出力は、ＳＴＤＴ−ＩＮＴ［］ストアデータとして整数ロード／ストア・ユニット１５２ヘ送られる。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
制御ビットＰＳＲ［７］はレジスタ・セットＡ１８へ送られる。図１において、モード制御ユニット４４からライン４６上をＩＥＵモード整数スイッチ３４へ送られるのは、この信号である。ＩＥＵモード整数スイッチは図４に示すようにレジスタ・セットＡ１８の内部に置かれている。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
図８はＳ１およびＳ２マルチプレクサのコントロールの詳細を示した図である。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
Ｃ．ブール部分のデータ経路
図６に示すように、レジスタ・セットＣ２２もマルチポートを備えている。一実施例では、レジスタ・セットＣ２２は２つの書込みポートＷＣ０−１と５つの読取りポートＲＤＣ０−４を備えている。レジスタ・セットＣ２２とブール組合せユニット（Ｂｏｏｌｅａｎ  ｃｏｍｂｉｎａｔｉｏｎａｌ  ｕｎｉｔ）７０を除く図６のすべてのエレメントは図１のＳＭＣユニットＣ８０を構成している。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００９５
【補正方法】変更
【補正の内容】
【００９５】
ブール・レジスタ・セットの２つの書込みポートＷＣ０およびＷＣ１は、それぞれ、書込みマルチプレクサ１７０−０および１７０−１に結合されている。書込みマルチプレクサ１７０はブール組合せオペレーションのブール結果を示しているブール組合せユニット７０の出力；整数比較のブール結果を示している図５の整数部分からのＡＬＵ０＿ＢＤ；浮動小数点比較のブール結果を示している図３の浮動小数点部分からのＦＡＬＵ＿ＢＤ；ＡＬＵ１における比較命令の結果を示しているＡＬＵ１からのＡＬＵＬＢＤ−Ｐまたは整数部分における空白バイトを示しているＮＵＬＬ１４６からのＮＵＬＬＡ−ＢＤ；およびＡＬＵ２における比較オペレーションの結果を示しているＡＬＵ２からのＡＬＵ２＿ＢＤ−Ｐまたは浮動小数点部分における比較オペレーションの結果を示しているＮＵＬＬ１０８からのＮＵＬＬＢ＿ＢＤからデータを受け取る。あるひとつのモードでは、ＡＬＵ０＿ＢＤ、ＡＬＵ１＿ＢＤ、ＡＬＵ２＿ＢＤ、およびＦＡＬＵ＿ＢＤ信号はデータ経路から受け取られないで、ＰＳＲ内のゼロ・フラグ、マイナス・フラグ、キャリー・フラグ、その他の条件フラグに応じて計算される。一実施モードでは、どの瞬時においても最大８命令までがＩＥＵで実行できるので、ＩＥＵは最大８個のＰＳＲを維持している。