(57)【要約】プログラム可能なプロセッサと、少なくとも２つのソースオペランド又はソースオペランドと結果オペランドを、汎用レジスタ又はデータパス幅のいずれかの幅よりも大きい幅まで拡張することにより、プロセッサの性能を改良する方法。オペランドのサイズと形態と同様に、複数のデータのデータパス幅が読まれること、又は書き込まれることができるようなメモリアドレスを指定するために、汎用レジスタの内容を使用することにより、本発明は、プロセッサのデータパス幅より十分に大きいオペランドを提供する。その上、数個の命令とこれらの命令を遂行する装置は、幅とアクセス可能な汎用レジスタの数とにオペランドが制限されなければ、性能面での優位性を獲得する。
2007531072.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータパス幅を有する第１のメモリシステムと、それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムとを備えるプログラム可能なプロセッサにおいて計算を実行する方法であって、
前記第１のデータパス幅を有する第１のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、
前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、
前記第１のデータパス幅を有する第３のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするステップと、
前記第１のデータパス幅を有し、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結されて第２の連結データを生成する第４のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするステップと、
前記第１及び第２の連結データを使用して、単一命令の計算を実行するステップとを備える
計算実行方法。
【請求項２】
請求項１に記載の方法において、
前記計算を実行するステップは、
それぞれ幅が前記第１のデータパス幅より大きい前記第１の連結データの一部と前記第２の連結データの一部とを読み出し、前記第１の連結データの一部と前記第２の連結データの一部とを用いて計算を実行するステップを更に備えるものである
計算実行方法。
【請求項３】
請求項２に記載の方法において、
前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するステップを更に備える
計算実行方法。
【請求項４】
請求項３に記載の方法において、
前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態を指定するステップを更に備える
計算実行方法。
【請求項５】
請求項２に記載の方法において、
前記第２のメモリシステム内の前記第１の連結データと前記第３のメモリシステム内の前記第２の連結データとのそれぞれの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１及び第２の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可するステップを更に備える
計算実行方法。
【請求項６】
請求項２に記載の方法において、
前記計算を実行するステップは、
前記第１の連結データに含まれる区分要素と前記第２の連結データに含まれる区分要素との間の畳込みを実行して、畳込みデータを生成し、前記畳込みデータの指定された部分フィールドを抽出し、抽出データを連結して前記演算器のデータパス幅と同じサイズの連結結果を生成するステップを更に備えるものである
計算実行方法。
【請求項７】
請求項２に記載の方法において、
前記計算を実行するステップは、
前記第２の連結データに含まれる係数を用いて前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結するステップを更に備えるものである
計算実行方法。
【請求項８】
第１のデータパス幅を有する第１のメモリシステムと、前記第１のデータパス幅よりも大きなデータパス幅を有する第２及び第３のメモリシステムとを備えるプログラム可能なプロセッサにおいて計算を実行する方法であって、
前記第１のデータパス幅を有する第１のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、
前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、
前記第１の連結データを使用して単一命令の計算を実行し、第２の連結データを生成するステップと、
前記第１のデータパス幅を有し、前記第２の連結データの一部を含む第３のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするステップと、
前記第１のデータパス幅を有し、前記第２の連結データの一部を含み、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結される第４のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするステップとを備える
計算実行方法。
【請求項９】
請求項８に記載の方法において、
前記計算を実行するステップは、
幅が前記第１のデータパス幅よりも大きい前記第１の連結データの一部を読み出し、前記第１の連結データの一部を用いて計算を実行するステップを更に備えるものである
計算実行方法。
【請求項１０】
請求項９に記載の方法において、
前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するステップを更に備える
計算実行方法。
【請求項１１】
請求項１０に記載の方法において、
前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態を指定するステップを更に備える
計算実行方法。
【請求項１２】
請求項９に記載の方法において、
前記第２のメモリシステム内の前記第１の連結データの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可するステップを更に備える
計算実行方法。
【請求項１３】
請求項８に記載の方法において、
前記計算を実行するステップは、
前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結して前記第２の連結データを生成するステップを更に備えるものである
計算実行方法。
【請求項１４】
請求項８に記載の方法において、
前記計算を実行するステップは、
ブール演算を用いて前記抽出データの一部を累積されたブールデータと結合し、ブール演算を用いて前記累積されたブールデータの区分要素を結合して、結合されたブールデータを生成し、前記結合されたブールデータから抽出されたデータの最上位ビットを確定して、前記最上位ビットの位置を含む結果をレジスタに返すステップを更に備えるものである
計算実行方法。
【請求項１５】
請求項８に記載の方法において、
前記第１及び第２の連結データに対応する第１及び第２の有効性情報を操作し、前記第１の連結データのメモリアドレスを指定する命令が完了した後で、前記第２の連結データの内容が、前記第１の連結データに代えて前記第１のメモリシステムへ供給されるステップを更に備える
計算実行方法。
【請求項１６】
第１のデータパス幅を有する第１のメモリシステムと、
それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムと、
前記第１のデータパス幅を有する第１のメモリオペランド部を前記第１のメモリシステムから前記第２のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように構成された第１のコピーモジュールと、
前記第１のデータパス幅を有する第３のメモリオペランド部を前記第１のメモリシステムから前記第３のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結されて第２の連結データを生成する第４のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするように構成された第２のコピーモジュールと、
前記第１及び第２の連結データを用いて計算を実行するように構成された演算器とを備える
プログラム可能なプロセッサ。
【請求項１７】
請求項１６に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
幅が前記第１のデータパス幅よりも大きい前記第１及び第２の連結データのそれぞれの一部を読み出し、前記第１及び第２の連結データのそれぞれの一部を用いて計算を実行するように構成されているものである
プログラム可能なプロセッサ。
【請求項１８】
請求項１７に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するように構成されているものである
プログラム可能なプロセッサ。
【請求項１９】
請求項１８に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態とを指定するように構成されているものである
プログラム可能なプロセッサ。
【請求項２０】
請求項１７に記載のプログラム可能なプロセッサにおいて、
前記第２のメモリシステム内の前記第１の連結データと前記第３のメモリシステム内の前記第２の連結データとのそれぞれの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１及び第２の連結データのそれぞれを前記第１のメモリシステムからコピーすることなく使用することを許可する制御部を更に備える
プログラム可能なプロセッサ。
【請求項２１】
請求項１６に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１の連結データに含まれる区分要素と前記第２の連結データに含まれる区分要素との間でを畳込みを行って、畳込みデータを生成し、前記畳込みデータの指定された部分フィールドを抽出し、抽出データを連結して前記演算器のデータパス幅と同じサイズの連結結果を生成するように構成されているものである
プログラム可能なプロセッサ。
【請求項２２】
請求項１６に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第２の連結データに含まれる係数を用いて前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結するように構成されているものである
プログラム可能なプロセッサ。
【請求項２３】
第１のデータパス幅を有する第１のメモリシステムと、
それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムと、
前記第１のデータパス幅を有する第１のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように構成された第１のコピーモジュールと、
前記第１のデータパス幅を有し第２の連結データの一部を含む第３のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、第２の連結データの一部を含み、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結される第４のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするように構成された第２のコピーモジュールと、
前記第１及び第２の連結データを用いて計算を実行するように構成された演算器とを備える
プログラム可能なプロセッサ。
【請求項２４】
請求項２３に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
幅が前記第１のデータパス幅よりも大きい前記第１の連結データの一部を読み出し、前記第１の連結データの一部を用いて計算を実行するように構成されているものである
プログラム可能なプロセッサ。
【請求項２５】
請求項２４に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するように構成されているものである
プログラム可能なプロセッサ。
【請求項２６】
請求項２５に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態とを指定するように構成されているものである
プログラム可能なプロセッサ。
【請求項２７】
請求項２４に記載のプログラム可能なプロセッサにおいて、
前記第２のメモリシステム内の前記第１の連結データの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可する制御部を更に備える
プログラム可能なプロセッサ。
【請求項２８】
請求項２３に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結して前記第２の連結データを生成するように構成されているものである
プログラム可能なプロセッサ。
【請求項２９】
請求項２３に記載のプログラム可能なプロセッサにおいて、
前記演算器は、
ブール演算を用いて前記抽出データの一部を累積されたブールデータと結合し、ブール演算を用いて前記累積されたブールデータの区分要素を結合して、結合されたブールデータを生成し、前記結合されたブールデータから抽出されたデータの最上位ビットを確定して、前記最上位ビットの位置を含む結果を供給するように構成されているものである
プログラム可能なプロセッサ。
【請求項３０】
請求項２３に記載のプログラム可能なプロセッサにおいて、
前記第１及び第２の連結データに対応する第１及び第２の有効性情報を操作し、前記第１の連結データのメモリアドレスを指定する命令が完了した後で、前記第２の連結データの内容が、前記第１の連結データに代えて前記第１のメモリシステムへ供給されるように構成されている制御部を更に備える
プログラム可能なプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用プロセッサのアーキテクチャに関し、拡張オペランドのアーキテクチャに関する。
【背景技術】
【０００２】
通信製品は、ソフトウェアにおけるデジタル信号をリアルタイムで処理するために、計算の性能を強化させる必要がある。処理技術の改良を通じ、またマイクロプロセッサの設計の改良によって、性能の強化が実現されてきた。強化された並列処理、高められたクロックレート、増加された集積度、結びついた改良された設計ツール、コンパイラは、このようにより実用的になってきた。しかし、これらの改良の多くは、計算機に密接に結び付けられる必要な帯域幅の欠如に起因して、メモリオーバーヘッドと待ち時間の増加を代償としてもたらす。
【０００３】
プロセッサ、特に汎用プロセッサの性能レベルは、クロックレート、クロック当たりのゲート数、オペランド数、オペランドとデータパス幅、オペランドとデータパス区分の、複数の相互依存する要因、すなわち、クロックレート、クロック当たりのゲート数、オペランド数、オペランド幅とデータパス幅、オペランド区分とデータパス区分、の倍数により評価され得る。クロックレートは、回路と論理技術の選択によって大いに影響されるが、クロック当たりのゲート数の数にもまた影響される。クロック当たりのゲート数とは、１クロックサイクルの間に、パイプライン内のいくつのゲートが状態を変えることができるか、ということである。これは、データパスの中へラッチを挿入することで減らすことができる。ラッチ間のゲートの数が減れば、高いクロックが可能である。しかし、ラッチを追加することは、パイプラインの長さが長くなることをもたらし、このように命令待ち時間の増加という代償をもたらす。オペランド数についてが分かりやすい。例えば、桁上げ保存加算の技術を加えることによって、２つの値を加算するときに必要とされるよりもわずかに大きい遅延を伴って、３つの値が加算される。オペランド幅とデータパス幅は、どれだけのデータがすぐに処理され得るかを定義づける。より拡張されたデータパスは、より複雑な機能を実行することができるが、一般的に、このことはより高い実装コストをもたらす。オペランドとデータパスの区分化により、多大なピークでの使用を維持する目的をもって、幅を増やす場合のような、データパスの効率的な使用に注意が向けられる。
【０００４】
最後の要因である、オペランドとデータパスの区分化は、本発明の譲受人に譲渡されたアメリカ合衆国特許第5,742,840号と第5,794,060号と第5,794,061号と第5,809,321号と第5,822,603号において広範に扱われており、これらの内容の全てを参照としてここに援用する。これらには、命令の組を加えることによって汎用プロセッサの利用率を高めるシステムと方法が、記述されている。これらの命令の組は、データパスソースとして汎用レジスタの内容を使用し、指定サイズの符号に向けてオペランドを分割し、並列での稼働を実行し、結果を連結し、連結結果を汎用レジスタの中へ配置する。本発明と同様に全て同じ譲受人に譲渡されているこれらの特許は、重要な並列処理を経るメディアデータストリームの処理と伝送を最適化する汎用マイクロプロセッサについて教唆する。
【０００５】
先行の特許が、汎用マイクロプロセッサの利用と性能において重要な改良を提供する一方、特に、メディアデータストリームのように、ブロードバンド通信の取り扱いについて、他の進歩が見込まれる。
【０００６】
多くの汎用プロセッサは、データパスの大きさに合ったレジスター幅を有し、命令のためのオペランドを格納する汎用レジスタを備える。プロセッサの設計は一般的に、命令当たりアクセス可能なレジスタの数に限定される。なぜならば、これらのレジスタにアクセスするためのハードウェアは、パワーと面積において相対的に高価だからである。アクセス可能なレジスタの数がプロセッサの設計を通じて変化する一方、プロセッサの１クロック周期もしくは１パイプラインフロー内で扱うためにそのような命令が設計される時は、その数は、命令当たり２つまたは３つまたは４つのレジスタにしばしば限られる。モトローラ６８０００のようないくつかのプロセッサは、無限のレジスタの数をセーブしリストアする命令を有するが、そのような命令を実行するには複数のサイクルを必要とする。
【０００７】
モトローラ６８０００はまた、命令の実行のために複数のサイクル又はパイプラインフローを用いて、このようにより拡張されたデータパスを真似ることによって、狭いレジスタファイルと結び付けられた狭いデータパスを克服することを試みている。しかし、そのような複合的な精密技術は、クロックサイクルの増加が必要とされる展望においては、改良は限界に近い。汎用レジスタの幅とアクセス可能な数は、このように、レジスタベースの装置において、１つの命令で実行され得る処理の量を根本的に制限する。
【０００８】
プロセッサの存在は、１又は複数で汎用プロセッサのメモリシステムから読み出される
オペランドを受け取る命令を、供給する。しかし、これらのメモリオペランドが一般にレジスタオペランドに指定され、メモリシステムのデータパスがプロセッサのデータパスよりも広くないように、１サイクル又はパイプラインフロー当たりの命令１つ当たりの汎用オペランドの幅とアクセス可能な数字は、高められることはない。
【０００９】
命令当たりアクセス可能な汎用レジスタオペランドの数は、一般に、ロジックの複雑さと命令のサイズにより制限される。例えば、汎用レジスタの大きな数字を指定することにより、確実に望ましいが複雑な機能を実行することは、可能かもしれない。しかし、
同時に起こるレジスタの値の読み込みと回避を許可するために、従来型の設計に、かなりの量の追加ロジックが加えられなければならないだろう。ソースオペランド又は結果の、数又はサイズを増やすために、専用レジスタがいくつかの従来技術の設計において使用されている間は、明示的な命令がこれらの専用レジスタの中へ値をロード又はストアし、また、プロセッサ状態の変化の上で、これらのレジスタをセーブしリストアするためには、追加の命令が必要とされる。
【００１０】
汎用レジスタの結果が、その結果のためには、専用でない、又は他の特別な記憶装置が必要となるように、実行装置のサイズの結果は制限される。
結果が大きな数字の汎用レジスタを指定することは、レジスタ値の書き込みとバイパスすることが同時に起こるのを許可するために、同様に多大な追加ロジックが一般的な設計に加えられることを必要とするだろう。
【００１１】
実行装置のサイズの結果が制限されるとき、その結果は、単一の命令によって合理的に扱われることができる計算の量を制限する。結果として、全ての中間の結果が制限の中で表されることのできる一連の単一命令のステップにおいて、アルゴリズムは実行されねばならない。この制限を削除することによって、より大きいアルゴリズムの構成要素が単一命令として実行される中で、命令のセットは開発されることができる。そして、中間の結果が表すものは、もはやサイズに限定されない。さらに付け加えると、これらの中間の結果のうちいくつかは、より大きいアルゴリズムの構成要素の完成の上で保持されることは必要とされていない。そこで、これらの不自然さから解放されたプロセッサは、汎用レジスタファイルからこれらの結果を蓄積したり訂正したりすることなく、性能を向上させ、制御電力を減少させることができる。汎用レジスタファイルにおいて中間の結果が保持されないとき、プロセッサの命令のセットと実行されるアルゴリズムは、汎用レジスタファイルの大きさに制限されない。
【００１２】
それゆえに、効率的なオペランドの取り扱いと、メモリシステム又はアクセス可能な汎用レジスタならどんなものでも、のうちいずれかより大きい幅の結果を実現可能なプロセッサシステムの必要性が存在してきた。また、効率的なオペランドの取り扱いと、レジスタファイルの全体より大きい全体のサイズの結果を実現可能なプロセッサシステムの必要性も存在する。
【発明の開示】
【課題を解決するための手段】
【００１３】
本発明の譲受人に譲渡され、関連しているアメリカ合衆国特許第6,295,599号は、少なくとも１つのソースオペランドを、汎用レジスタ又はデータパス幅のいずれかの幅よりも大きい幅に拡張することによって、汎用プロセッサの性能を改良するためのシステムと方法を詳細に記述している。性能の更なる改良は、ソースオペランドの最多数に、メモリシステム又はアクセス可能な汎用レジスタならどんなものでも、のうちいずれかより大きい幅に拡張されることを許すことと、少なくとも１つの結果オペランドに、メモリシステム又はアクセス可能な汎用レジスタならどんなものでも、のうちいずれかより大きい幅に拡張されることを許すことにより達成される。
【００１４】
本発明は、少なくとも１つのソースオペランド又は少なくとも１つの結果オペランドを、汎用レジスタ又はデータパス幅のいずれかの幅よりも大きい幅に拡張することによって、汎用プロセッサの性能を改良するためのシステムと方法を提供する。さらに、もし、ソースオペランド又は少なくとも１つの結果オペランドが、幅とアクセス可能な汎用レジスタの数に制限されるのなら、効率的に実行されることができない、いくつかの命令の組が提供されるだろう。
【００１５】
本発明においては、プロセッサのデータパス幅よりもかなり大きい、ソースと結果のオペランドが提供される。このことは、少なくとも２以上だが典型的ないくつかのデータパス幅が読み出され得るメモリアドレスを、少なくとも１つ指定するために汎用レジスタを使用することによって、部分的には達成されている。そのような拡張オペランドに、単一サイクル内で実行されることを許可するため、演算器のデータパスは、最初の命令の実行においてメモリオペランドがコピーされる専用記憶部とともに増大される。その命令又は同じメモリアドレスを指定する他の同様な命令の更なる実行により、オペランド値を獲得するために専用記憶部から読み出すことができる。しかしながら、そのような読み出しは、メモリオペランドが命令を介在することによっては変化を受けないことを確かめる状態であることを条件とする。もしメモリオペランドが現在のまま残れば、それは、次のような状態になることである。メモリオペランドフェッチは、結果を生み出しながら、演算器において１又はそれより多くのレジスタオペランドと結び付けられ得る。汎用レジスタの結果が、その結果のためには、専用でない、又は他の特別な記憶装置が必要となるように、結果のサイズは制限される。追加の命令に対する結果のサイズは、それほど制限されることなく、また、命令を実行した上で結果オペランドが置かれる専用記憶部をそれほど利用することもないだろう。その専用記憶部は、演算器を備える論理回路と密接につながれたローカルメモリで実行されるだろう。
【００１６】
本発明は、拡張内蔵メモリからオペランドを受け取ることと、拡張内蔵メモリの中へ結果を預けることの、両方の演算を実行するための方法と装置を含む従来の実施形態を、拡張する。本発明は、アクセスと計算の複数の連続した周期において、拡張内蔵メモリを自立的に読み出して更新する演算を含む。本発明はまた、同時に２又はそれ以上独立してアドレス指定される、拡張内蔵メモリを用いる演算をも、記述している。
【００１７】
拡張演算を使用する典型的な命令は、大きいレベルのスイッチング（拡張スイッチング（Wide Switch））と、バイト又は大きいテーブル探索（拡張変換（Wide Translate））と、拡張行列乗算（Wide Multiply Matrix）と、拡張抽出行列乗算（Wide Multiply Matrix Extract）と、拡張即時抽出行列乗算（Wide Multiply Matrix Extract Immediate）と、拡張浮動小数点行列乗算（Wide Multiply Matrix Floating point）と、拡張ガロア行列乗算（Wide Multiply Matrix Galois）とを実行する拡張命令を含む。
【００１８】
拡張演算を使用するさらなる典型的な命令は、繰り返し方程式を解き（拡張ソルブ・ガロア（Wide Solve Galois））、速い変形を実行し（拡張部分配列変形（Wide Transform Slice））、デジタルフィルター又は運動予測を計算し（拡張抽出畳込み（Wide Convolve Extract）、拡張浮動小数点畳込み（Wide Convolve Floating-point））、ビタビ（Viterbi）又はターボ符号（turbo codes）を復号化する（拡張復号化）拡張命令と、汎用テーブル探索と、相互接続（拡張ブーリアン（Wide Boolean））とを含む。
【００１９】
本発明の他の局面は、高精度な算術に目一杯使用されている乗算器アレイの、効率的な使用に対応している。ただし、乗算器アレイは、他の低い精度の演算にも、部分的にのみ使用されている。このことは、汎用レジスタ又は命令の一部分として指定された調整による動的なシフト量によって調整され、レジスタ又は命令部からの制御値によって丸められた、乗算の積又は積の合計の上位の一部分を抽出することによって、実現される。丸めは、
最近点への丸めと、切り捨てと、下向きの丸めと、上向きの丸めとを含む数種のタイプのどれであってもよい。桁あふれは、通常、出力結果において正確に表現することができる、最大値と最小値への結果に限定することによって操作される。
【００２０】
抽出がレジスタによって制御される場合、結果において適するサイズよりも、小さいビット数に丸めて限定することを許可することにより、結果のサイズは指定され得る。このことは、桁あふれと丸めを考慮せずに、次の演算における使用のために結果が基準化されることを許可する。結果として、性能は向上する。抽出がレジスタにより制御される、それらの例において、単一のレジスタ値は、オペランドのサイズと、結果のサイズとシフト量と、丸め制御とを定義する。単一のレジスタの中にそのような制御情報を置くことにより、さもなければ、命令が、再度の性能の改良とプロセッサの汎用性の強化を必要とするようなビット数以上に、命令のサイズは減じられる。典型的な命令は、アンサンブル抽出畳込み（Ensemble Convolve Extract）と、アンサンブル抽出乗算（Ensemble Multiply Extract）と、アンサンブル抽出加算乗算（Ensemble Multiply Add Extrac）と、アンサンブル抽出スケーリング加算（Ensemble Scale Add Extract）とである。Ensemble Scale Add Extract命令への特定の関連によって、レジスタの中で、抽出制御情報は、２つのベクトル被乗数の内容へのスカラ乗数として使用される２つの値と結合される。この結合は、このように、命令のために必要なビット数を減らしながら、レジスタ数その他必要なものを減じる。
【００２１】
第１のデータパス幅を有する第１のメモリシステムと、それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムとを備えるプログラム可能なプロセッサにおいて計算を実行する方法は、前記第１のデータパス幅を有する第１のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、前記第１のデータパス幅を有する第３のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするステップと、前記第１のデータパス幅を有し、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結されて第２の連結データを生成する第４のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするステップと、前記第１及び第２の連結データを使用して、単一命令の計算を実行するステップとを備えてもよい。
【００２２】
プログラム可能なプロセッサにおいて計算を実行する方法では、計算を実行するステップは、それぞれ幅が前記第１のデータパス幅より大きい前記第１の連結データの一部と前記第２の連結データの一部とを読み出し、前記第１の連結データの一部と前記第２の連結データの一部とを用いて計算を実行するステップを更に備えてもよい。
【００２３】
プログラム可能なプロセッサにおいて計算を実行する方法は、前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するステップを更に備えてもよい。
【００２４】
プログラム可能なプロセッサにおいて計算を実行する方法は、前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態を指定するステップを更に備えてもよい。
【００２５】
プログラム可能なプロセッサにおいて計算を実行する方法は、前記第２のメモリシステム内の前記第１の連結データと前記第３のメモリシステム内の前記第２の連結データとのそれぞれの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１及び第２の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可するステップを更に備えてもよい。
【００２６】
プログラム可能なプロセッサにおいて計算を実行する方法は、前記第１の連結データに含まれる区分要素と前記第２の連結データに含まれる区分要素との間の畳込みを実行して、畳込みデータを生成し、前記畳込みデータの指定された部分フィールドを抽出し、抽出データを連結して前記演算器のデータパス幅と同じサイズの連結結果を生成するステップを更に備えてもよい。
【００２７】
第１のデータパス幅を有する第１のメモリシステムと、前記第１のデータパス幅よりも大きなデータパス幅を有する第２及び第３のメモリシステムとを備えるプログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法は、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするステップと、前記第１の連結データを使用して単一命令の計算を実行し、第２の連結データを生成するステップと、前記第１のデータパス幅を有し、前記第２の連結データの一部を含む第３のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするステップと、前記第１のデータパス幅を有し、前記第２の連結データの一部を含み、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結される第４のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするステップとを備えてもよい。
【００２８】
プログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法では、計算を実行するステップは、幅が前記第１のデータパス幅よりも大きい前記第１の連結データの一部を読み出し、前記第１の連結データの一部を用いて計算を実行するステップを更に備えてもよい。
【００２９】
プログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法は、前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するステップを更に備えてもよい。
【００３０】
プログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法は、前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態を指定するステップを更に備えてもよい。
【００３１】
プログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法は、前記第２のメモリシステム内の前記第１の連結データと前記第３のメモリシステム内の前記第２の連結データとのそれぞれの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可するステップを更に備えてもよい。
【００３２】
計算を実行する別の選択可能な方法では、計算を実行するステップは、前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結して前記第２の連結データを生成するステップを更に備えてもよい。
【００３３】
計算を実行する別の選択可能な方法では、計算を実行するステップは、ブール演算を用いて前記抽出データの一部を累積されたブールデータと結合し、ブール演算を用いて前記累積されたブールデータの区分要素を結合して、結合されたブールデータを生成し、前記結合されたブールデータから抽出されたデータの最上位ビットを確定して、前記最上位ビットの位置を含む結果をレジスタに返すステップを更に備えてもよい。
【００３４】
プログラム可能なプロセッサにおいて計算を実行する別の選択可能な方法は、前記第１及び第２の連結データに対応する第１及び第２の有効性情報を操作し、前記第１の連結データのメモリアドレスを指定する命令が完了した後で、前記第２の連結データの内容が、前記第１の連結データに代えて前記第１のメモリシステムへ供給されるステップを更に備えてもよい。
【００３５】
本発明によるプログラム可能なプロセッサは、第１のデータパス幅を有する第１のメモリシステムと、それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムと、前記第１のデータパス幅を有する第１のメモリオペランド部を前記第１のメモリシステムから前記第２のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように構成された第１のコピーモジュールと、前記第１のデータパス幅を有する第３のメモリオペランド部を前記第１のメモリシステムから前記第３のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結されて第２の連結データを生成する第４のメモリオペランド部を、前記第１のメモリシステムから前記第３のメモリシステムへコピーするように構成された第２のコピーモジュールと、前記第１及び第２の連結データを用いて計算を実行するように構成された演算器とを備えてもよい。
【００３６】
プログラム可能なプロセッサにおいて、前記演算器は、幅が前記第１のデータパス幅よりも大きい前記第１及び第２の連結データのそれぞれの一部を読み出し、前記第１及び第２の連結データのそれぞれの一部を用いて計算を実行するように構成されていてもよい。
【００３７】
プログラム可能なプロセッサにおいて、前記演算器は、前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するように構成されていてもよい。
【００３８】
プログラム可能なプロセッサにおいて、前記演算器は、前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態とを指定するように構成されていてもよい。
【００３９】
プログラム可能なプロセッサは、前記第２のメモリシステム内の前記第１の連結データと前記第３のメモリシステム内の前記第２の連結データとのそれぞれの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１及び第２の連結データのそれぞれを前記第１のメモリシステムからコピーすることなく使用することを許可する制御部を更に備えてもよい。
【００４０】
プログラム可能なプロセッサにおいて、前記演算器は、前記第１の連結データに含まれる区分要素と前記第２の連結データに含まれる区分要素との間でを畳込みを行って、畳込みデータを生成し、前記畳込みデータの指定された部分フィールドを抽出し、抽出データを連結して前記演算器のデータパス幅と同じサイズの連結結果を生成するように構成されていてもよい。
【００４１】
プログラム可能なプロセッサにおいて、前記演算器は、前記第２の連結データに含まれる係数を用いて前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結するように構成されていてもよい。
【００４２】
本発明による別の選択可能なプログラム可能なプロセッサは、第１のデータパス幅を有する第１のメモリシステムと、それぞれが前記第１のデータパス幅より大きなデータパス幅を有する第２及び第３のメモリシステムと、前記第１のデータパス幅を有する第１のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、前記第２のメモリシステムにおいて前記第１のメモリオペランド部と連結されて第１の連結データを生成する第２のメモリオペランド部を、前記第１のメモリシステムから前記第２のメモリシステムへコピーするように構成された第１のコピーモジュールと、前記第１のデータパス幅を有し第２の連結データの一部を含む第３のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするように、かつ、前記第１のデータパス幅を有し、第２の連結データの一部を含み、前記第３のメモリシステムにおいて前記第３のメモリオペランド部と連結される第４のメモリオペランド部を、前記第３のメモリシステムから前記第１のメモリシステムへコピーするように構成された第２のコピーモジュールと、前記第１及び第２の連結データを用いて計算を実行するように構成された演算器とを備えてもよい。
【００４３】
別の選択可能なプログラム可能なプロセッサにおいて、前記演算器は、幅が前記第１のデータパス幅よりも大きい前記第１の連結データの一部を読み出し、前記第１の連結データの一部を用いて計算を実行するように構成されていてもよい。
【００４４】
別の選択可能なプログラム可能なプロセッサにおいて、前記演算器は、前記第１のメモリシステム内の前記第１及び第２の連結データのそれぞれのメモリアドレスを指定するように構成されていてもよい。
【００４５】
別の選択可能なプログラム可能なプロセッサにおいて、前記演算器は、前記第１及び第２の連結データのそれぞれのメモリオペランドサイズとメモリオペランド形態とを指定するように構成されていてもよい。
【００４６】
別の選択可能なプログラム可能なプロセッサは、前記第２のメモリシステム内の前記第１の連結データの有効性をチェックし、有効性が確認されれば、その次の命令に、前記第１の連結データを前記第１のメモリシステムからコピーすることなく使用することを許可する制御部を更に備えてもよい。
【００４７】
別の選択可能なプログラム可能なプロセッサにおいて、前記演算器は、前記第１の連結データに含まれる区分要素の変換を実行して変換データを生成し、前記変換データの指定された部分フィールドを抽出して抽出データを生成し、前記抽出データを連結して前記第２の連結データを生成するように構成されていてもよい。
【００４８】
別の選択可能なプログラム可能なプロセッサにおいて、前記演算器は、ブール演算を用いて前記抽出データの一部を累積されたブールデータと結合し、ブール演算を用いて前記累積されたブールデータの区分要素を結合して、結合されたブールデータを生成し、前記結合されたブールデータから抽出されたデータの最上位ビットを確定して、前記最上位ビットの位置を含む結果を供給するように構成されていてもよい。
【００４９】
別の選択可能なプログラム可能なプロセッサは、前記第１及び第２の連結データに対応する第１及び第２の有効性情報を操作し、前記第１の連結データのメモリアドレスを指定する命令が完了した後で、前記第２の連結データの内容が、前記第１の連結データに代えて前記第１のメモリシステムへ供給されるように構成されている制御部を更に備えてもよい。
【発明を実施するための最良の形態】
【００５０】
（プロセッサ・レイアウト）
最初に、図１を参照すると、汎用プロセッサが、ブロック図で示されている。図１において、それぞれがアクセス命令フェッチキューＡ−Ｑｕｅｕｅ１０１〜１０４を備えるアクセスユニットが、４つ示されている。アクセス命令フェッチキューＡ−Ｑｕｅｕｅ１０１〜１０４はそれぞれ、アクセスレジスタファイルＡＲ１０５〜１０８に接続され、アクセスレジスタファイルＡＲ１０５〜１０８は、それぞれが２つのアクセス演算器Ａ１０９〜１１６に接続されている。例示的な実施形態では、プロセッサのそれぞれのスレッドは、６４個の汎用レジスタに似ていると言える（例：ＡＲ１０５〜１０８とＥＲ１２５〜１２８）。アクセスユニットは、同時に発生する４つの実行スレッドに対して、独立して動作する。それぞれのアクセスユニットは、算術命令及び分岐命令を実行することによってプログラム制御フローを処理し、ロード命令及びストア命令を実行することによってメモリにアクセスする。これらのアクセスユニットはまた、拡張（wide）オペランド命令に拡張オペランド指定子を提供する。これらの８つのアクセス演算器Ａ１０９〜１１６は、アクセスレジスタファイルＡＲ１０５〜１０８のための結果と、共有メモリシステム１１７〜１２０へのメモリアドレスを生成する。
【００５１】
１つの実施形態では、メモリ階層は、チップ上の命令メモリと、チップ上のデータメモリと、命令キャッシュと、データキャッシュと、仮想メモリ機構と、外部装置へのインタフェースとを備える。図１において、メモリシステムは、結合キャッシュ・ニッチメモリ１１７と、外部バスインタフェース１１８と、装置の外部に、２次記憶１１９と、入出力デバイスを有する主記憶装置１２０とを備える。メモリシステム１１７〜１２０からフェッチされた記憶内容は、アクセスユニットでは処理されない実行命令と結び付けられ、４つの実行命令キューＥ−Ｑｕｅｕｅ１２１〜１２４に入れられる。拡張命令のために、メモリシステム１１７〜１２０からフェッチされた記憶内容はまた、バス１３７によって、拡張オペランドマイクロキャッシュ１３２〜１３６に供給される。Ｅ−ｑｕｅｕｅ１２１〜１２４からの命令とメモリデータは、実行レジスタファイル１２５〜１２８に与えられ、実行レジスタファイル１２５〜１２８は、実行レジスタファイルソースオペランドをフェッチする。命令は、実行装置であるアービトレーション装置Ａｒｂｉｔｒａｔｉｏｎ１３１に連結されている。アービトレーション装置Ａｒｂｉｔｒａｔｉｏｎ１３１は、４つのスレッドからのどの命令を、利用可能な実行演算器であるＥ１４１，１４９、Ｘ１４２，１４８、Ｇ１４３〜１４４，１４６〜１４７、Ｔ１４５に転送すべきであるか選択をする。実行演算器Ｅ１４１，１４９と、実行演算器Ｘ１４２，１４８と、実行演算器Ｔ１４５はそれぞれ、拡張オペランドマイクロキャッシュ１３２〜１３６を備え、拡張オペランドマイクロキャッシュ１３２〜１３６はそれぞれ、バス１３７によってメモリシステム１１７に接続されている。
【００５２】
実行演算器Ｇ１４３〜１４４とＧ１４６〜１４７は、単純な算術命令及び論理命令並びにソースと結果のオペランドが特定のシンボルサイズの値のグループを表すグループ演算を実行するグループ算術論理演算器である。これらのオペランドは、分割され独立して演算が施され、結果が連結される。本発明では特定のデータパスのサイズに限定される意図はないのだが、現在のところ好ましい実施形態では、データパスは１２８ビットの幅である。
【００５３】
実行演算器Ｘ１４２，１４８は、クロスバースイッチ命令を実行するクロスバースイッチ装置である。クロスバースイッチ装置Ｘ１４２，１４８は、取り決め、入れ換え、シフト、拡張、圧縮、かき混ぜ、順序変更、リバースに加え、以下に論じられる拡張演算を含むデータ取り扱い演算を、データパスソースオペランドバス１５１〜１５８を経由して供給されるデータストリームに対して実行する。本発明の第１の局面の鍵となる要素において、少なくとも１つのそのような演算が、汎用レジスタとデータパスの幅よりも大きい幅に広げられる。
【００５４】
実行演算器Ｅ１４１，１４９は、データパスソースオペランドバス１５１〜１５８から分割され、整数、浮動小数点、多項式またはガロア体の値として扱われるオペランドのグループ又はベクトルの乗算及び行列乗算を含むアンサンブル命令を、大きなアレイを有する乗算器を使用して実行するアンサンブルユニットである。行列乗算命令と他の演算は、拡張オペランドマイクロキャッシュ１３２，１３６に読み込まれた拡張オペランドを利用する。
【００５５】
実行演算器Ｔ１４５は、レジスタオペランドから分割されたオペランドのグループ上で、テーブル探索の演算を実行し、結果を連結する変換器である。拡張変換命令は、拡張オペランドマイクロキャッシュ１３４に読み込まれる拡張オペランドを利用する。
【００５６】
実行演算器Ｅ１４１，１４９と、実行演算器Ｘ１４２，１４８と、実行演算器Ｔ１４５はそれぞれ、以下に論じられるように、拡張オペランドを含むソースオペランドを記憶できるように専用記憶部を備える。拡張マイクロキャッシュとして考えられる専用記憶部１３２〜１３６は、通常は、データパスソースオペランドバス１５１〜１５８に関連付けられるデータパスオペランドの幅の倍数である幅を有している。このように、もしデータパス１５１〜１５８の幅が１２８ビットならば、専用記憶部１３２〜１３６は、２５６ビット又は５１２ビット又は１０２４ビット又は２０４８ビットの幅を有していてもよい。拡張オペランドが専用記憶部の幅の全体を使用することは必ずしも必要ではないが、専用記憶部の幅全体を利用するオペランドをここでは拡張オペランドと称する。メモリシステム１１７〜１２０の出力のメモリデータパスと、実行演算器１４１〜１４９の入力の演算器データパスとの幅よりも大きい一部分を、拡張オペランドが使用すれば十分であり、これらの２つが結合されたものの幅よりも必ずしも大きい必要はない。専用記憶部１３２〜１３６の幅は、メモリオペランドバス１３７の幅よりも大きいので、拡張オペランドの一部分が、専用記憶部１３２〜１３６の中へ連続して読み込まれる。しかしながら、一度読み込まれると、拡張オペランドはその後、ほぼ同時に使用され得る。演算器１４１〜１４９と、対応する実行レジスタ１２５〜１２８とが、データ演算器を構成しているということができる。その要素は、厳密には実装によって異なっていてもよい。
【００５７】
実行レジスタファイルＥＲ１２５〜１２８のソースオペランドは、ソースオペランドバス１５１〜１５４を使用して実行ユニット１４１〜１４５に、ソースオペランドバス１５５〜１５８を使用して実行ユニット１４５〜１４９に接続されている。実行ユニット１４１〜１４５からの演算器結果オペランドは、結果バス１６１を使用して実行レジスタファイルＥＲ１２５〜１２８に接続され、実行ユニット１４５〜１４９からの演算器結果オペランドは、結果バス１６２を使用して実行レジスタファイルに接続されている。
【００５８】
（拡張行列乗算（Wide Multiply Matrix））
本発明の拡張オペランドは、図２に示されているWide Multiply Matrix命令のような複雑な命令を実行する能力を提供する。また図２は、図３と同様に、二者択一の形式で理解することができる。図２と図３から理解することができるように、拡張オペランドは、例えば、データパス幅より大きい様々な大きさと形態の行列の乗算を許可する。図２の例は、１２８ビットのレジスタｒｄの中へ入れられる結果を生成するために、１２８ビットの大きさであるレジスタｒｂに含まれるベクトルによって乗算される、１２８×６４ビットの大きさ（この例では５１２ビット）の、レジスタｒｃによって指定される行列を必然的に含む。
【００５９】
図２と次の同様な図で使用される表記は、水平と垂直の次元に映し出された２つのオペランドの交点での陰付きの部分での乗算を例示する。合計する箇所が、合計された乗算の積の位置で黒く塗られた点を接続する線上の部分として描かれている。合計する箇所で減じられる積は、陰付きの部分での中でマイナスの符号で指し示される。
【００６０】
浮動小数点の値で命令が機能するとき、描かれた乗算と合計は、浮動小数点での乗算と合計である。例示的な実施形態では、中間の結果を丸めることなしに、あたかも無限の正確さで計算され、それから１回だけ丸められたかのように最終的な結果の計算をして、これらの演算が実行される。
【００６１】
乗算器の例示的な実施形態では、回路面積と遅延を最小化するために、桁上げ保存加算の形式における積を計算することができ、ブースエンコーディングを使用して乗数ｒｂを符号化することができるということが、理解することができる。そのような合計する箇所の例示的な実施形態では、合計することによる遅延を最小化するために、例えば、２進化基数ツリー又は高度な基数ツリーにおける加算の実行などによる、計算による遅延を最小化するための個別の配慮とともに、任意の順序で乗数を合計することができ、加算を実行するための桁上げ保存加算器を使用することができるということが、理解することができる。また、例示的な実施形態では、中間の結果における定点又は浮動小数点での桁あふれが起こらないような、中間の十分な正確さを使用して合計することを実行するということも、理解することができる。
【００６２】
同じ演算がこれらの２つの図において描かれているように、図２で使用される表記と、図３でのより以前の図式化された表記との関係が明確なことが、図２と図３の比較により言える。
【００６３】
（拡張オペランド）
プロセッサのデータパス幅より大いに大きいオペランドは、メモリ指定子を指定するための汎用レジスタを使用することにより供給されるが、いくつかの実施形態では、２以上の数個のデータデータパス幅は、専用記憶部の中に読み込まれる。メモリ指定子は通常、演算が行われるデータの行列のサイズと形態とともに、メモリアドレスも一緒に含む。メモリ指定子又は拡張オペランド指定子は、図５からより良く理解することができる。図５の中で、指定子５００はアドレスに見え、加えて、データのサイズ（size）／２を表現する領域と、さらに、データの幅（width）／２を表現する領域とがあり、サイズとは、データの深さ（depth）と幅の積である。アドレスは、例えば６４バイトなど、指定されたサイズにアラインされ、よって、複数の下位のビット（例えば６ビット）はゼロである。指定子５００はこのように、アドレス用の最初の領域５０５と、加えて、下位６ビット内でサイズと幅を表す２つの領域を含むことが分かる。
【００６４】
（指定子の復号化）
指定子５００の復号化は、図６からより良く理解することができる。図６では、図に挙げられた指定子６００は、複数の下位のビットを備えた領域６１０と一緒にアドレス領域６０５で作られている。ステップ６１５とステップ６２０に示されている一連の算術演算によると、幅／２を表現する領域６１０の一部が展開されている。６２５と６３０に示されている同様な一連のステップによると、ｔの値が復号化され、それらのステップでは、サイズとアドレスの両方を復号化し得る。アドレスがステップ６４５とステップ６５０において同様な方法で復号化される間に、サイズ／２を表現する領域６１０の一部は、ステップ６３５とステップ６４０で示されているように復号化される。
【００６５】
（拡張演算器）
拡張演算器は、図７からより良く理解することができる。図７では、レジスタ数７００は、オペランドチェッカー７０５に供給される。拡張オペランド指定子７１０は、オペランドチェッカー７０５と通信を行い、また、定義されたメモリ幅を有するメモリ７１５をアドレス指定する。メモリアドレスは、複数のレジスタオペランド７２０Ａｎを有し、レジスタオペランド７２０Ａｎは、データ演算器７２５の専用記憶部７１４の一部分に蓄積される。図７に示される例示的な実施形態では、専用記憶部７１４は、８個の拡張オペランド部７３０Ａ〜Ｈが拡張オペランドを形成するために専用記憶部の中に連続的に読み込まれるように、８個のデータパス幅に等しい幅を有することが分かる。図７には８個の拡張オペランド部が示されているが、本発明は、８又はデータパス幅の他の特定の倍数に限られるものではない。一旦、拡張オペランド部７３０Ａ〜Ｈが連続的に読み込まれると、それらは、演算機構７４０によって、単一の拡張オペランド７３５として使用されてもよい。また、演算機構７４０としては、図１のどの要素を接続しても良い。その後、拡張オペランドの結果は、結果レジスタ７４５に供給される。本発明の好ましい実施形態においては、拡張オペランド７４５は、メモリ幅と同一の幅を有する。
【００６６】
一旦、拡張オペランドが専用記憶部７１４にうまく読み込まれると、本発明の第２の局面が評価され得る。この命令又は同じメモリアドレスを指定する他の似た命令の更なる実行によって、メモリオペランドが介在命令によって変更されているかどうかを確定する特定の状態のもとで、オペランド値を獲得するために専用記憶部を読むことができる。これらの状態に直面したと仮定すると、専用記憶部からのメモリオペランドフェッチは、演算器において、結果を生成しながら、１又はそれより多くのレジスタオペランドと結合する。結果のために必要な専用記憶部がないように、いくつかの実施形態においては、結果のサイズは汎用レジスタのサイズに限定される。しかしながら、いくつかの異なる実施形態においては、結果が拡張オペランドであって、さらに性能を増すものであってもよい。
【００６７】
拡張オペランド値が同じメモリアドレスを指定する次の命令によってアドレス指定されることを許可するために、様々な状態についてチェックし、考慮される必要がある。
【００６８】
それらの状態を以下に記す。
【００６９】
メモリストア命令はそれぞれ、専用記憶部のために記録されたメモリアドレスに対するメモリアドレスをチェックする。メモリストア命令が、専用記憶部７１４に記憶されたどのメモリアドレスに方向付けられてもデータが上書きされていることを示すことから、どの組み合わせであっても、記憶部は無効と印付けられる。
【００７０】
記憶部をアドレス指定するために使用されるレジスタ数が、記録される。もし、レジスタに書き込まれていない介在命令がない、又は、同じレジスタが次の命令で使用される場合は、記憶部は有効である。（ルール＃１によって無効と印付けられた場合を除く）
もし、レジスタが変更されている、又は異なったレジスタ数が使用されている場合は、レジスタの値は、読み出され、専用記憶部のために記録されたアドレスに対して比較される。この場合は、レジスタの内容をフェッチすることが必要なことと、レジスタの幅がレジスタ数自身の幅よりも大きいため、＃１よりも多くのリソースを使用する。もしアドレスが一致すると、記憶部は有効である。新しいレジスタ数は、専用記憶部のために記録される。
【００７１】
もし、状態＃２又は＃３に直面したと仮定すると、レジスタの内容は、汎用プロセッサのメモリをアドレス指定することと、専用記憶部を読み込むことに使用される。もし、専用記憶部が既に完全に読み込まれている場合は、専用記憶部の一部は、新しい値向けに場所を空けるために、必ず放棄される（犠牲にされる）。その後、新たに更新された専用記憶部を使用して、命令が実行される。アドレスとレジスタ数は、専用記憶部のために記録される。
【００７２】
上記のコンディションをチェックすることにより、専用記憶部のセーブとリストアの必要性がなくなる。加えて、もしプロセッサの状態が変化して、新しい状態では同じ専用記憶部を参照する拡張命令が使用できない場合は、元々の状態がリストアされると、ルール＃３を使用して、専用記憶部の内容は、メモリからの値を更新せずに使用されることが許可される。拡張命令を実行することにより、専用記憶部の中の値は、メモリから読まれ、直接には修正されないので、値は、結果を汎用メモリに記憶することをしなくても、いつでも廃棄されることができる。この特性は、上記ルール＃４の遂行を平易にする。
【００７３】
本発明の代替となる実施形態は、以下のルールに伴い、上記ルール＃１に取って代わる。
【００７４】
１ａ．それぞれのメモリストア命令は、専用記憶部のために記録されたメモリアドレスに対するメモリアドレスをチェックする。汎用メモリと同様に、どの組み合わせであっても、専用記憶部は更新される。
【００７５】
上記ルール１ａ．の使用により、メモリストア命令は、変更されている専用記憶部のまさに一部だけを更新して、変更されていない残りの部分はそのままにして、専用記憶部を修正することができる。汎用メモリの更新を続けることにより、結果を汎用メモリの中に記憶しなくても、専用メモリの内容がいつでも放棄され得ることは、今なお正しい。このように、この選択により、ルール＃４がより複雑化されることはない。この代替となる実施形態の利点は、メモリストア命令によって、専用記憶部が廃棄される（無効にされる）必要はないことである。
【００７６】
（拡張マイクロキャッシュデータ構造）
次に図９を参照すると、拡張マイクロキャッシュ又は専用記憶部１１４のデータ構造の例示的な配置が評価され得る。拡張マイクロキャッシュの内容ｗｍｃ．ｃは、例示されたものでは数が８個だが、複数のデータパス幅９００ａ〜ｎを形成することが分かる。内容のサイズｗｍｃ．ｓｉｚｅは、例示的な実施形態では１０ビットとして示されている領域にも提供される。１ビットの「正しい内容」を示すフラグｗｍｃ．ｃｖも、直近に使用されたスレッド、ｗｍｃ．ｔｈのための２ビットの領域とともに、データ構造の中に含まれている。加えて、直近に使用されたレジスタ、ｗｍｃ．ｒｅｇのための６ビットの領域が、例示的な実施形態の中で提供されている。さらに、正しいレジスタとスレッド、ｗｍｃ．ｒｔｖのための１ビットの領域が提供されてもよい。
【００７７】
（ソフトウェアにおける拡張マイクロキャッシュ制御）
マイクロキャッシュが拡張オペランドで最初に書き込まれ、その後、高速な次の演算にとって正しいことが確認されるプロセスが、図８から評価され得る。プロセスは、８００で始まり、レジスタの内容のチェックが記憶値ｗｍｃ．ｒｃに対して行われるステップ８０５に進む。真なら、ステップ８１０で、スレッドを確認するためのチェックが行われる。真なら、プロセスはそれから、レジスタとスレッドが正しいかどうかを確認するステップ８１５に進む。ステップ８１５で真と報告されたら、内容が正しいかどうかを確認するために、ステップ８２０でチェックが行われる。ステップ８０５から８２０までの全てが真を返したら、ステップ８２５で示されているように、次の命令は、現在の拡張オペランドを利用することができる。ステップ８２５の後、プロセスは終了する。しかしながら、ステップ８０５から８２０までのいずれかが偽を返すと、プロセスはステップ８３０に分岐する。プロセス８３０では、内容と物理アドレスとサイズがセットされる。ステップ８０５から８２０までの全てがステップ８２５又は８３０のいずれかに導くため、ステップ８０５から８２０までは、プロセスを変えなければどんな順序でも、又は同時にでも、実行されてもよい。プロセスはそれから、サイズがチェックされるステップ８３５に進む。物理アドレスが直接、仮想アドレスの使用と置き換えることができるように、このチェックは基本的に、変換器のサイズが拡張オペランドのサイズより大きいか等しいことを保証する。懸案事項は、いくつかの実施形態においては、拡張命令が、仮想メモリシステムがマッピングできる、最小限の領域より大きくてもよいことである。結果として、単一の隣接する仮想アドレスレンジが、物理アドレスと比較するタスクを複雑にしながら、多様なばらばらの物理アドレスレンジにマッピングされることが起こり得るであろう。拡張オペランドのサイズを決定することと、参照される領域をマッピングする仮想アドレスのサイズに対してサイズを比較することにより、拡張オペランドがマッピング領域より大きい場合に、例外の通知の割り込みで命令が中止される。このことは、プロセッサの安全な演算を保証する。ソフトウェアはその後、望ましい場合は実行を続けるために、より大きなサイズのマップを使用して、領域を再度マッピングすることができる。このように、サイズが受け入れられないとステップ８３５で報告された場合は、ステップ８４０で例外の通知の割り込みが生成される。サイズが受け入れられると、プロセスは、物理アドレスがチェックされるステップ８４５に進む。チェックが合うと報告されると、プロセスはステップ８５０に進み、ステップ８５０では、正しい内容とのフラグのチェックが行われる。ステップ８４５又は８５０でのいずれかのチェックが偽と報告した場合は、プロセスは分岐して、新しい内容が、それに応じてセットされるフィールドとともに、専用記憶部１１４の中に書き込まれる。ステップ８５０でのチェックで真と報告された否かにかかわらず、もしくは、新しい内容がステップ８５５で書き込まれたか否かにかかわらず、プロセスはステップ８６０に進む。ステップ８６０では、データの正当性を示すために適したデータがセットされ、ステップ８６０の後は、要求された機能がステップ８２５で実行されることができる。その後、プロセスは終了する。
【００７８】
（ハードウェアにおける拡張マイクロキャッシュ制御）
次に、ハードウェアの観点からのマイクロキャッシュ・コントローラーの演算を示している、図１０と１１を参照すると、マイクロキャッシュ・コントローラーの演算が、より理解されるかもしれない。ハードウェアの実装において、上記図８と９における連続的なステップに示される状態が、そのような拡張オペランドのチェックによる遅延を減らしながら、並行して実行されることができるのは明らかである。さらに、示されたハードウェアのコピーが、それぞれの拡張マイクロキャッシュに含まれていてもよい。またそれによって、命令によって代わりに参照されてもよいような全てのマイクロキャッシュは、並行して検査されることができる。上記図８と９の広範な考察を考慮すると、図１０と１１の更なる考察がもはや必要でないことがいえる。
【００７９】
前述の手法に対する多様な代替案は、拡張オペランドの使用のために確かに存在し、単一の命令が２つの拡張オペランドを受け取ることができる実装を含んで、オペランドを符号化分割し、対応する符号をともに乗算し、場合によっては合計の一部分を抽出した後に、単一のスカラ値又はレジスタファイルの幅の区分化された値のベクトルを生成するために、積を加算する。そのような命令は、動作の検出又はビデオ圧縮における動作の評価にとって、価値あるものとなり得る。そのような命令の更なる強化により、１つの拡張オペランドのアドレスが、専用記憶部において以前に指定された拡張オペランドの範囲内の場合、その範囲内では一部分さえ読み込まずに、必要に応じて範囲内の一部をシフトすることによって、専用記憶部は漸増的に更新され得る。そのような強化は、演算が、可能な値のスライディングウィンドウで実行されることを可能にする。そのような命令においては、漸増的に更新される第２の拡張オペランドがアラインされていない間に、１つの拡張オペランドは、アラインされ、サイズと形態の情報を提供する。
【００８０】
以下に記述されるWide Convolve Extract命令とWide Convolve Floating-point命令は、２つの拡張オペランドを受け取る命令の、１つの別の実施形態である。
【００８１】
本発明の他の別の実施形態は、オペランド結果が拡張オペランドである追加の命令を定義することができる。そのような強化によって、汎用レジスタのサイズよりも大きい結果があり得ないという制限がなくなり、さらに性能が強化される。このような拡張結果は、それらを作り出す演算器へ、局所的にキャッシュされることができるが、記憶部が再度利用される前に、かつ、仮想メモリシステムが拡張結果のアドレスのマッピングを変更する前に、汎用メモリシステムへコピーされる必要がある。読み込みの演算と他の拡張命令がこれらの拡張結果を読めるように、演算器の出力から入力へ戻すような拡張結果の転送が比較的容易になるように、データパスは追加される必要がある。しかし、拡張結果を拡張オペランドとして他の演算器に戻すように転送することが望まれる場合は、追加のデータパスを導入する必要があるかもしれない。
【００８２】
前述の通り、メモリオペランドのサイズと形態の指定は、アドレスの下位ビットを含む。現在の好ましい実装においては、そのようなメモリオペランドは、典型的には、サイズにおいて２のべき乗になり、そのサイズにアラインされる。一般的には、合計サイズの２分の１がメモリアドレスに加えられ（包括的に又は含められた又は排他的に又は排除された）、データ幅の２分の１がメモリアドレスに加えられる（包括的に又は含められた又は排他的に又は排除された）。これらのビットは、コントローラーが全ての必要なアドレスに進むことができるように、復号化され、メモリアドレスからはぎ取られることができるようになっている。このことにより、これらの命令に必要な明確なオペランド数は、メモリオペランドのサイズと形態とアドレスが単一のレジスタオペランド値に結合できるように、減少される。
【００８３】
以下のWide Switch命令と他の命令について後述される、別の例示的な実施形態においては、拡張オペランド指定子は、任意のサイズと形態の指定子として述べられる。そのようなものとして、指定子の値の省略によって、特定の命令の属性から定義される既定のサイズ又は形態が得られる。
【００８４】
以下のWide Convolve Extract命令について後述される、別の例示的な実施形態においては、拡張オペランド指定子は、強制的なサイズと形態の指定子を含む。指定子の値の省略によって、命令を中止する例外の通知がもたらされる。特に、実装よりも大きいサイズ又は形態の指定は、拡張オペランドメモリの限られたサイズに、サイズと形態の記述子が、正しい指定子値が位置するかもしれない限られたビットの範囲内のみで検索されるような、同様の例外において生じてもいいように、限られたリソースによって許可する。このことは、例外の通知が検出された状態において、実装よりも大きい指定子値を必要とするソフトウェアが結果を供給できることを保証するために、使用されることができる。例えばそれは、複数のプロセッサの同じ命令の組み合わせの実装が、能力において異なる場合である。またこのことにより、より大きい値に対する拡張オペランドのサイズと形態の上向きの互換性がある拡張が、同じ命令の組み合わせの拡張された実装において、認められる。
【００８５】
別の例示的な実施形態においては、拡張オペランド指定子は、サイズと形態のパラメータの値に直線的に結び付けられる以外の別の表示において、サイズと形態の指定子を含む。例えば、指定子の下位ビットは、００なら１２８の値、０１なら２５６の値、１０なら５１２の値、１１なら１０２４の値を伝送する２ビットの領域のような、対数的にその値に関係付けられる固定サイズのバイナリ値を含んでもよい。固定サイズ領域の使用は、例えば、より最新の上向きの互換性のあるプロセッサの実装において指定され得る最大値を、制限する。
【００８６】
以下のテーブルは、以下に参照される図中の擬似コードで使用される、算術的で記述的な注釈を描いている。
【００８７】
【表１】
2007531072.tif 000003
【００８８】
（拡張演算）
本発明で定義される拡張命令の個々の例は、大きいレベルのスイッチングを実行するWide Switch命令を含む。Wide Switch命令としては、バイト（又は大きい）テーブル探索を実行するWide Translate命令、Wide Multiply Matrix、Wide Multiply Matrix ExtractとWide Multiply Matrix Extract Immediateと（前述の）、Wide Multiply Matrix Floating-pointとWide Multiply Matrix Galois（同様に前述の）が挙げられる。以下で、典型的な命令にとっての個々のサイズに焦点を当てて論じながら、本発明が個々の幅に制限されないことが評価されるであろう。
【００８９】
（拡張スイッチ）
Wide Switch命令の例示的な実施形態は、図１２Ａ〜１２Ｄに示されている。例示的な実施形態において、Wide Switchは、完全な幅（１２８ビット）のレジスタ結果を生成しながら、ビットレベルで２個までのレジスタ（２５６ビット）の内容を、再配置する。再配置を制御するために、ビット位置当たり８ビットから成る、単一のレジスタに指定された拡張オペランドが使用される。それぞれの結果のビット位置のために、それぞれのビット位置のための８個の拡張オペランドのビットは、結果の中に入れることができる２５６個のソースレジスタのビットのいずれかを選択する。１２８バイトより小さい拡張オペランドのサイズが指定された場合、メモリオペランドが、それぞれの符号で同じ演算を実行しながら、オペランドサイズの符号の中でビット選択を指定するために、メモリオペランドの上位ビットは、結果のビット位置に対応する値に置き換えられる。
【００９０】
例示的な実施形態において、メモリからの大きいオペランドと汎用レジスタからの第２のオペランドをフェッチし、オペランドの中のビットのパーティション上の演算のグループを実行し、汎用レジスタに結果を入れながら結果を一緒に連結するために、これらの命令は、汎用レジスタからのアドレスを取得する。Wide Switch命令のフォーマット１２１０の例示的な実施形態は、図１２Ａに示されている。
【００９１】
Wide Switch命令のスキーマ１２３０の例示的な実施形態は、図１２Ｂに示されている。例示的な実施形態において、レジスタｒｃの内容は、仮想アドレスａｐｄと、任意でオペランドサイズを指定し、指定されたサイズの値は、メモリから読み込まれる。第２の値は、レジスタｒｄとｒｂの内容と結合される。それぞれの擬似コードのビット位置のために、メモリの値からの８個の擬似コードのビットは、第２の値からの単一の結果ビットを選択するために使用される。結果のグループは、結合され、レジスタｒａの中に置かれる。
【００９２】
例示的な実施形態において、仮想アドレスは、１２８バイトにアラインされるか、又は、アラインされたアドレスの合計になり、バイトにおいてメモリオペランドの２分の１のサイズになる必要がある。アラインされたアドレスは、バイトで表現された正確な倍数になる必要がある。メモリオペランドのサイズは、８又は１６又は３２又は６４又は１２８バイトでなければならない。もしアドレスが正確でないなら、「仮想アドレスに許可されていないアクセス」という例外の通知が発生する。１２８ビットより小さいサイズが指定された場合は、同じメモリオペランドがオペランドサイズの符号の中でのビット選択を指定し、同じ演算がそれぞれの符号において実行されるように、メモリオペランドの上位ビットが、ビット位置に対応した値に取って代わられる。
【００９３】
Wide Switch命令の擬似コード１２５０の例示的な実施形態は、図１２Ｃに示されている。Wide Switch命令の例外の通知１２８０の例示的な実施形態は、図１２Ｄに示されている。
【００９４】
（拡張変換）
Wide Translate命令の例示的な実施形態は、図１３Ａ〜１３Ｄに示されている。例示的な実施形態において、Wide Translate命令は、２５６エントリーまでの深さのテーブルと、１２８ビットまでの幅とを指定するために、拡張オペランドを使用する。レジスタの内容は、１又は２又は４又は８バイトのオペランドに分割され、パーティションは、並行してテーブルから値を選択するために使用される。テーブルの深さと幅は、上記の通り、拡張オペランドのサイズと形態を指定することにより、選択される。
【００９５】
例示的な実施形態において、これらの命令は、汎用レジスタに結果を入れながら、メモリからの大きなオペランドと汎用レジスタからの第２のオペランドをフェッチし、オペランドの中のビットのパーティション上の演算のグループを実行し、結果を一緒に連結するために、汎用レジスタからアドレスを取得する。Wide Translate命令のフォーマット１３１０の例示的な実施形態は、図１３Ａに示されている。
【００９６】
Wide Translate命令のスキーマ１３３０の例示的な実施形態は、図１３Ｂに示されている。例示的な実施形態において、レジスタｒｃの内容は、仮想アドレスとして使用され、指定されたサイズの値は、メモリから読み込まれる。第２の値は、レジスタｒｂの内容である。値は、指定されたサイズのオペランドのグループに分割される。値の第２のグループの下位バイトは、値のグループを生成しながら、１以上の項目又は第１の値より構成されたより多くのテーブルを選択するためのアドレスとして使用される。結果のグループは、連結され、レジスタｒｄの中に入れられる。
【００９７】
例示的な実施形態において、既定では、テーブルの全体幅は１２８ビットである。グループサイズよりも小さいが、１２８又は６４又は３２又は１６又は８ビットのテーブルの全体幅は、バイトでの望ましいテーブルの全体幅を、１６又は８又は４又は２又は１の指定されたアドレスへ加えることによって指定されてもよい。１２８ビットより少ない値が指定された場合は、テーブルは１２８ビット幅を満たすまで繰り返す。
【００９８】
例示的な実施形態において、それぞれのテーブルの既定の深さは、２５６項目、又はバイトでは、ビットのグループのサイズの３２倍である。演算は、アドレスにメモリオペランドサイズの２分の１を加えることにより、４又は８又は１６又は３２又は６４又は１２８又は２５６項目のテーブルを指定してもよい。テーブルのインデックス値は、テーブルの指定された一部分のみ使用されることを保証するために、マスクされる。ちょうど２項目のテーブルは、指定されることはできない。もし２項目のテーブルが望ましいならば、項目をレジスタに読み込み、テーブルの項目を選択するためにＧ．ＭＵＸを使用することが推奨される。
【００９９】
例示的な実施形態において、小さい深さのテーブルでの命令が、大きい深さのテーブルでの命令によって既に初期化されたテーブル項目にアクセスできるように、テーブル全体の初期化に失敗することは、潜在的なセキュリティホールを招く。このセキュリティホールは、テーブル全体を初期化すること、又は、余計なサイクルが必要であっても、テーブルの初期化された部分のみが使用されるようにインデックスビットをマスクすること、これらのうち、いずれかによってクローズされてもよい。例示的な実施形態は、即座に１２８のテーブル項目と同じだけ書き込むことにより、サイクルの中で不利益なしに、テーブル全体を初期化してもよい。一度に１項目のみへの書き込みでのテーブル全体の初期化では、テーブルがより小さくても、２５６サイクルの書き込みを必要とする。インデックスビットをマスクする方法が好ましい解決法である。例示的な実施形態において、２５６項目以上に大きいテーブルに対してのこの命令が、プロセッサが１２８ビットを満たすのに十分に独立した読み込み命令を実行するような、汎用メモリ変換機能に拡張されてもよいことを、インデックスビットのマスクは示唆する。このように、この機能の１６ビット版と３２ビット版と６４ビット版は、８，４，２の取り消し命令と、８又は４又は２のインデックス読み込み命令と、７又は３又は１のグループ抽出命令と同等の内容を実行する。言い換えると、この命令は、既存の命令２３又は１１又は５と同じように強力である。８ビット版は、既存の命令４７に取って代わる単一サイクルの演算である。よって、これらの拡張は、さほど強力でなく、それにもかかわらず、このことは、読み込みタイミング当たり１サイクルであっても、２命令同時発行可能なプロセッサにおいて少なくとも５０％の改良になる。このことを可能にするために、既定のテーブルサイズは、この命令の１６ビット版と３２ビット版と６４ビット版向けに、６５５３６と２の３２乗と２の６４乗となる。
【０１００】
例示的な実施形態において、この命令のビッグ・エンディアン版のために、以下の定義において、レジスタｒｂの内容が補完される。このことは、インデックスがゼロの場合に、最も低く位置付けられたテーブル項目が選択されるように、テーブルを編成することが望ましいことを示している。ロジックの遂行において、ビッグ・エンディアン版やリトル・エンディアン版とは異なるようにテーブルメモリを読み込むことによって、具体的には、インデックスが命令のビッグ・エンディアン版にとってのゼロである場合に、最も高く位置付けられたテーブル項目が選択されるように、テーブルをメモリの中に読み込むことによって、インデックスの補完は避けられ得る。ロジックの遂行の例示的な実施形態において、ビッグ・エンディアン版とリトル・エンディアン版とは異なるようにテーブルメモリを読み込むことによって、インデックスの補完は避けられ得る。インデックスの補完を避けるために、テーブル項目が命令のビッグ・エンディアン版でテーブルに書き込まれているアドレスを補完することによって、テーブルメモリは、命令のビッグ・エンディアン版とは異なるように読み込まれる。
【０１０１】
例示的な実施形態において、仮想アドレスは、４０９６バイトにアラインされるか、もしくは、アラインされたアドレスとバイトでのメモリオペランドの２分の１のサイズと（又は）バイトでの望ましいテーブルの全体幅の合計のうち、いずれかにされなければならない。アラインされたアドレスは、バイトで表されたサイズの正確な倍数にされなければならない。メモリオペランドのサイズは、４から４０９６バイトまでの２のべき乗にならなければならないが、少なくともグループサイズの４倍で、かつ全体のテーブル幅の４倍でなければならない。アドレスが正しくない場合は、「仮想アドレスによる許可されていないアクセス」という例外の通知が発生する。
【０１０２】
例示的な実施形態において、拡張変換（W. TRANSLATE. 8. L or W. TRANSLATE. 8. B）命令は、深さにおいては１６項目（vsize=16）で、１バイト（gsize=8 bits）のグループサイズで、８バイト（wsize=64 bits）の幅である変換テーブルを指定する。アドレスは、テーブル（64）のバイトでの２分の１のサイズを加えることと、アドレス仕様におけるテーブルアドレスにテーブル幅（8）のバイトにおけるサイズを加えることにより、全体のテーブルサイズ（msize=1024 bits=vsize*wsize）とテーブル幅（wsize=64 bits）を指定する。オペランドの１２８ビットが１２８ビットの結果を生成しながら即座に実行されるように、命令は、データパスの上位と下位６４ビットの中で、このテーブルの複製を作り出すことになる。
【０１０３】
Wide Translate命令の擬似コード１３５０の例示的な実施形態は、図１３Ｃに示されている。Wide Translate命令の例外の通知１３８０の例示的な実施形態は、図１３Ｄに示されている。
【０１０４】
（拡張行列乗算（Wide Multiply Matrix））
Wide Multiply Matrix命令の例示的な実施形態は、図１４Ａ〜１４Ｅに示されている。例示的な実施形態において、Wide Multiply Matrix命令は、６４ビットまでの（レジスタファイルとデータパス幅の２分の１）幅と符号のサイズ当たり１２８ビットまでの深さとの値の行列を指定するために、拡張オペランドを使用する。汎用レジスタ（１２８ビット）の内容は、ソースオペランド符号のサイズの２倍の符号の１２８ビットまでの幅のベクトルを生成しながら、ソースオペランドとして使用され、符号のベクトルの中へ分割され、行列と乗算される。行列の幅と深さは、上述の通り、拡張オペランドのサイズと形態を指定しながら、選択される。命令の範囲内での制御は、符号を付けられ又は混合符号を付けられ又は符号を付けられないで又は複素の又は多項式のオペランドの指定を、許可する。
【０１０５】
例示的な実施形態において、これらの命令は、汎用レジスタに結果を入れながら、メモリからの大きなオペランドと汎用レジスタからの第２のオペランドをフェッチし、オペランドの中のビットのパーティション上の演算のグループを実行し、結果を一緒に連結するために、汎用レジスタからアドレスを取得する。Wide Multiply Matrix命令のフォーマット１４１０の例示的な実施形態は、図１４Ａに示されている。
【０１０６】
Wide Multiply Matrix命令のスキーマ１４３０と１４６０の例示的な実施形態は、図１４Ｂと１４Ｃに示されている。例示的な実施形態において、レジスタｒｃの内容は、仮想アドレスとして使用され、指定されたサイズの値は、メモリから読み込まれる。第２の値は、レジスタｒｂの内容である。値は、指定されたサイズのオペランドのグループの中へ分割される。第２の値は、結果の値のグループを生成しながら、第１の値と乗算され、それから合計される。結果の値のグループは、連結され、レジスタｒｄの中に入れられる。
【０１０７】
例示的な実施形態において、メモリ乗算命令（W.MUL.MAT, W.MUL.MAT.C, W.MUL.MAT.M, W.MUL.MAT.P, W.MUL.MAT.U）は、６４×１２８ビットである８１９２ビットまでの区分乗算アレイを実行する。アレイの幅は、６４ビット又は３２ビット又は１６ビットに制限され得るが、仮想アドレスオペランドである４又は２又は１に、バイトにおける望ましいサイズの２分の１を加えることにより、グループサイズの２倍より小さくはならない。
【０１０８】
例示的な実施形態において、仮想アドレスは、１０２４/gsize bytes（or 512/gsize for W.MUL.MAT.C）（with gsize measured in bits）にアラインされるか、又は、アラインされたアドレスとメモリオペランドのバイトにおけるサイズの２分の１と（又は）バイトにおける結果のサイズの４分の１との合計にならなければならない。アラインされたアドレスは、バイトで表されたサイズの正確な倍数にならなければならない。もしアドレスが正しくない場合は、「仮想アドレスによって許可されていないアクセス」という例外の通知が発生する。
【０１０９】
例示的な実施形態において、ensemble-multiply-sum-octlets命令（E. MUL. SUM. type. 64）が、メモリからよりもむしろ１２８ビットレジスタから乗数が供給される点を除いて同じ演算を実行するように、wide multiply octlets命令（W.MUL.MAT.type.64, type=NONE M U P）は、遂行されず、予約命令例外を発生させる。同様に、wide-multiply-complex-quadlets命令（W.MUL.MAT.C.32）の代わりに、ensemble-multiply-complex-quadlets命令（E. MUL. SUM. C. 32）を使用すべきである。
【０１１０】
図１４Ｂに示されるように、wide-multiply-doublets（W.MUL.MAT, W.MUL.MAT.M, W.MUL.MAT.P, W.MUL.MAT.U）の例示的な実施形態は、積（hm31+gm27+... +bm7+am3... hm28+gm24+... +bm4+amO）を生成しながら、メモリ（m31 m30... ml mO）をベクトル（h g f e d c b a）と乗算する。
【０１１１】
図１４Ｃに示されるように、wide-multiply-matrix- complex-doublets命令（W.MUL.MAT.C）の例示的な実施形態は、積（hml4+gml5+... +bm2+am3... hml2+gml3+...+bmO+aml hml3+gml2+...bml+amO）を生成しながら、メモリ（ml5 ml4... ml mO）をベクトル（h g f e d c b a）と乗算する。
【０１１２】
Wide Multiply Matrix命令の擬似コード１４８０の例示的な実施形態は、図１４Ｄに示されている。Wide Multiply Matrix命令の例外の通知１４９０の例示的な実施形態は、図１４Ｅに示されている。
【０１１３】
（拡張抽出行列乗算（Wide Multiply Matrix Extract））
Wide Multiply Matrix Extract命令の例示的な実施形態は、図１５Ａ〜１５Ｆに示されている。例示的な実施形態において、Wide Multiply Matrix Extract命令は、１２８ビット（レジスタファイルとデータパスの全体幅）までの幅の値の行列と、符号サイズ当たり１２８ビットまでの深さとを指定するために、拡張オペランドを使用する。汎用レジスタ（１２８ビット）の内容は、ソースオペランド符号に桁あふれなしで積の合計を表すための追加ビットを加えて、その２倍のサイズの符号の２５６ビットまでの幅のベクトルを生成しながら、ソースオペランドとして使用され、符号のベクトルの中へ分割され、行列と乗算される。結果はそれから、命令により指定された汎用レジスタの内容によって制御されるように、以下に述べられた方法（Enhanced Multiply Bandwidth by Result Extraction）で抽出される。汎用レジスタはまた、符号を付けられ、かつ混合符号を付けられ、かつ符号を付けられないで、かつ、バイト（８ビット）又はダブレット（１６ビット）又はクワドレット（３２ビット）又はヘックスレット（６４ビット）のオペランドのサイズと同様に複素の、オペランドのフォーマットを指定する。
【０１１４】
例示的な実施形態において、これらの命令は、汎用レジスタに結果を入れながら、メモリからの大きなオペランドと汎用レジスタからの第２のオペランドをフェッチし、オペランドの中のビットのパーティション上の演算のグループを実行し、結果を一緒に連結するために、汎用レジスタからアドレスを取得する。Wide Multiply Matrix Extract命令のフォーマット１５１０の例示的な実施形態は、図１５Ａに示されている。
【０１１５】
Wide Multiply Matrix Extract命令のスキーマ１５３０と１５６０の例示的な実施形態は、図１５Ｃと１４Ｄに示されている。例示的な実施形態において、レジスタｒｃの内容は、仮想アドレスとして使用され、指定されたサイズの値がメモリから読み込まれる。第２の値は、レジスタｒｄの内容である。グループサイズと他のパラメータは、レジスタｒｂの内容から指定される。値は、値のグループを生成しながら、指定されたサイズのオペランドのグループに分割され、乗算され、合計される。値のグループは、サイズが指定である結果のグループを生成しながら、丸められ、指定された通りに制限される。結果のグループは、連結され、レジスタｒａのの中に入れられる。
【０１１６】
例示的な実施形態において、演算のサイズは、レジスタｒｂの内容から決定される。乗算器の使用は絶え間ないが、メモリオペランドサイズは、逆に、グループサイズに関係付けられる。おそらく、このことにより、キャッシュの正当性がチェックされ得る。
【０１１７】
例示的な実施形態において、ｒｅの下位ビットは、グループサイズと一致しなければならないサイズを示すために使用される。メモリオペランドはキャッシュされるので、このように、サイズを複合化するのに必要な時間を削りながら、ｒｂからかｒｃからかにかかわらず、サイズもまたキャッシュされることができる。
【０１１８】
例示的な実施形態において、Wide Multiply Matrix Extract命令（W.MUL.MAT.X.B, W.MUL.MAT.X.L）は、１２８×１２８ビットである１６３８４ビットまでの区分化乗算器アレイを実行する。アレイの幅は、１２８又は６４又は３２又は１６ビットに制限され得るが、バイトにおいて望ましいサイズの２分の１を仮想アドレスオペランド８又は４又は２又は１に加えることにより、グループサイズの２倍より小さくはならない。アレイは、１２８又は６４又は３２又は１６ビットに垂直に制限され得るが、メモリオペランドのバイトにおいて望ましいサイズの２分の１を仮想アドレスオペランドに加えることにより、グループサイズの２倍より小さくはならない。図１５Ｂに示されている通り、例示的な実施形態において、レジスタｒｂの内容のビット３１〜０は、データが抽出される方法を制御するいくつかのパラメータを指定する。制御領域の位置と既定値は、ソース位置が動的計算用の固定制御値に加えられることを許可し、制御領域の下位１６ビットが、単一のＧＣＯＰＹＩ命令により、簡素化された抽出の格（cases）のいくつかにセットされることを許可する。
【０１１９】
例示的な実施形態において、以下のテーブルは、それぞれのラベルの意味を表現する。
【０１２０】
【表２】
2007531072.tif 000004
【０１２１】
例示的な実施形態において、９ビットのｇｓｓｐ領域は、数式「gssp= 512 4*gsize+spos」によって、グループサイズｇｓｉｚｅとソース位置ｓｐｏｓとの両方を符号化する。グループサイズｇｓｉｚｅは、範囲１〜１２８の範囲内の２のべき乗である。ソース位置ｓｐｏｓは、０〜（2*gsize）１の範囲内である。
【０１２２】
例示的な実施形態において、ｓ，ｎ，ｍ，ｔでの値とｒｎｄ領域は、以下の意味を持つ。
【０１２３】
【表３】
2007531072.tif 000005
【０１２４】
例示的な実施形態において、仮想アドレスは、アラインされなければならない。すなわち、仮想アドレスは、バイトで表されたオペランドサイズの正確な倍数にならなければならない。アドレスがアラインされない場合、「仮想アドレスにより許可されていないアクセス」という例外の通知が発生する。
【０１２５】
例示的な実施形態において、切り捨て（Z (zero) rounding）は、符号なしの抽出演算に対しては定義されておらず、もし試みられた場合、予約命令（ReservedInstruction）の例外の通知が、発生させられる。下向きの丸め（F (floor) rounding）は、符号なしの結果を適切に下方へ丸めるだろう。
【０１２６】
図１５Ｃに示されている通り、wide-multiply-matrix- extract-doublets命令（W.MUL.MAT.X.B or W.MUL.MAT.X.L）の例示的な実施形態は、丸められて指定された通りに制限された積[am7+bm15+cm23+dm31 +em39+fin47+gm55+hm63...am2+bm10+cm18+dm26+em34+fm42+gm50+hm58 am1+bm9+cm17+dm25+em33+6n41+gm49+hm57 am0+bm8+cm16+dm24+em32+fm40+gm48+hm56]を生成しながら、メモリ[m63 m62 m61... m2 m1 mO]をベクトル[h g f e d c b a]と乗算する。
【０１２７】
図１５Ｄに示されている通り、wide-multiply-matrix- extract-doublets命令（W.MUL.MAT.X with n set in rb）の例示的な実施形態は、丸められて指定された通りに制限されて積[am7+bm6+cm15+dm14+em23+fm22+gm31+hm30... am2-bm3+cm10-dm11+em18- fm19+gm26-hm27 am1+bm0+cm9+dm8+em17+fm16+gm25+hm24 amO-brn1+cmS-dm9+em16-f17+gm24 hm25]を生成しながら、メモリ[m31 m30 m29... m2 m1mO]をベクトル[h g f e d c b a]と乗算する。
【０１２８】
Wide Multiply Matrix Extract命令の擬似コード１５８０の例示的な実施形態は、図１５Ｅに示されている。Wide Multiply Matrix Extract命令の例外の通知１５９０の例示的な実施形態は、図１５Ｆに示されている。
【０１２９】
（行列拡張乗算即値抽出命令（Wide Multiply Matrix Extract Immediate））
Wide Multiply Matrix Extract Immediate命令の一実施形態を図１６Ａから図１６Ｅに示す。一実施形態においては、Wide Multiply Matrix Extract Immediate命令は、抽出及びオペランドフォーマット、オペランドサイズがその命令のフィールドによって制御される以外は、上記と同様の演算を行う。この形式は、上記の命令の一般的な形式を符号化し、所要の制御情報でレジスタを初期化する必要はない。この命令内での制御により、符号付オペランド、混合符号付きオペランド、符号なしオペランド及び複素数オペランドの仕様が可能となる。
【０１３０】
一実施形態において、これらの命令は、汎用レジスタからアドレスを取得し、メモリから大きいオペランドを、汎用レジスタから第２のオペランドをフェッチし、それらのオペランド内のビットのパーティションに対して一群の演算を行い、結果を連結させ、その結果を汎用レジスタに入れる命令である。図１６Ａは、Wide Multiply Matrix Extract Immediate命令のフォーマット１６１０の一実施形態を示す。
【０１３１】
Wide Multiply Matrix Extract Immediate命令の概略図１６３０及び１６６０の一実施形態を図１６Ｂと図１６Ｃに示す。一実施形態において、レジスタｒｃの内容を仮想アドレスとして使用し、指定サイズの値をメモリから読み込む。第２の値は、レジスタｒｂの内容である。それらの値を、サイズが指定されたオペランドのグループに区分し、コラム内で乗算した後加算し、和のグループを生成する。この和のグループを丸めた後、制限し、指定された通りに抽出する。これにより、指定サイズごとに結果のグループを生成する。そして、この結果のグループを結合し、レジスタｒｄに入れる。すべての結果には、符号が付され、Ｎ（最も近い）丸めが使われる。また、すべての結果が、表現可能な最大の符号付の値に制限される。
【０１３２】
一実施形態においては、wide-multiply-extract-immediate-matrix命令(W.MUL.MAT.X.I, W.MUL.MAT.X.I.C)は、１６３８４ビット、つまり、１２８×１２８ビットまでの区分アレイ乗算を行う。アレイの幅は、バイトで示した所望のサイズの半分を仮想アドレスオペランド８、４、２又は１へ加えることによって、１２８ビット、６４ビット、３２ビット、又は１６ビットに制限できるが、グループサイズの２倍よりも小さくは制限できない。アレイは、バイトで示した所望のメモリオペランドサイズの半分を仮想アドレスオペランドに加えることによって、縦方向には１２８バイト、６４バイト、３２バイト、又は１６バイトに制限することができるが、グループサイズの２倍より小さくは制限できない。
【０１３３】
一実施形態において、仮想アドレスは、２０４８／ｇｓｉｚｅ（又は、W.MUL.MAT.X.I.Cについては、１０２４／ｇｓｉｚｅ）バイトにアラインされているか、又は、アラインされたアドレスとバイト単位のメモリオペランドサイズの半分及び／又はバイト単位の結果のサイズの半分との和でなければならない。アラインされたアドレスはバイトで示したサイズの正確な倍数でなければならない。アドレスが有効でない場合、“仮想アドレスによるアクセス不許可”の例外が生じる。
【０１３４】
図１６Ｂに示すように、wide-multiply-extract-immediate-matrix-doublets命令(W.MUL.MAT.X.I.16)の一実施形態は、メモリ[m63 m62 m61 …m2 m1 m0]をベクトル[h g f e d c b a]で乗算する命令であり、指定どおりに丸められ、制限させた積[am7+bm15+cm23+dm31+em39+fm47+gm55+hm63…am2+bm10+cm18+dm26+em34+fm42+gm50+hm58 am1+bm9+cm17+dm25+em33+fm41+gm49+hm57 am0+bm8+cm16+dm24+em32+fm40+gm48+hm56]を得る。
【０１３５】
図１６Ｃに示すように、wide-multiply-matrix-extract-immediate-complex-doublets命令(W.MUL.MAT.X.I.C.16)の一実施形態は、メモリ[m31 m30 m29 …m2 m1 m0]をベクトル[h g f e d c b a]で乗算し、指定どおりに丸められ、制限された積[am7+bm6+cm15+dm14+em23+fm22+gm31+hm30…am2-bm3+cm10-dm11+em18-fm19+gm26-hm27 am1+bm0+cm9+dm8+em17+fm16+gm25+hm24 am0-bm1+cm8-dm9+em16-f17+gm24-hm25]を得る。
【０１３６】
Wide Multiply Matrix Extract Immediate命令の疑似コード１６８０の一実施形態を図１６Ｄに示す。Wide Multiply Matrix Extract Immediate命令の例外１５９０の一実施形態を図１６Ｅに示す。
【０１３７】
（行列浮動小数点拡張乗算（Wide Multiply Matrix Floating-point））
Wide Multiply Matrix Floating-point命令の一実施形態を図１７Ａ〜図１７Ｅに示す。一実施形態において、Wide Multiply Matrix Floating-point命令は、乗算及び加算を浮動小数点演算で実行する以外は、上記と同様の形式で行列乗算を行う。サイズとしては、命令内で、ハーフ（１６ビット）、シングル（３２ビット）、ダブル（６４ビット）、及び、ハーフ、シングル、ダブルの複素数サイズを指定することができる。
【０１３８】
一実施形態においては、これらの命令は、汎用レジスタからアドレスを取得し、メモリから大きなオペランドを、汎用レジスタから第２のオペランドをフェッチし、それらのオペランド内で、ビットのパーティションに演算群を実行し、結果を連結させ、その結果を汎用レジスタに入れる命令である。図１７Ａは、Wide Multiply Matrix Floating point命令のフォーマット１７１０の一実施形態を示す。
【０１３９】
Wide Multiply Matrix Floating-point命令の概略図１７３０及び１７６０の一実施形態を図１７Ｂと図１７Ｃに示す。一実施形態においては、レジスタｒｃの内容を仮想アドレスとして使用し、指定サイズの値はメモリから読み込む。第２の値は、レジスタｒｂの内容である。それらの値を、サイズが指定されたオペランドのグループに区分する。第２の値を第１の値で乗算した後加算し、結果値のグループを生成する。これらの結果値のブループを結合し、レジスタｒｄに入れる。
【０１４０】
一実施形態において、wide-multiply-matrix-floating-point命令(W.MUL.MAT.F, W.MUL.MAT.C.F)は、１６３８４ビット、つまり、１２８×１２８ビットまでの区画アレイ乗算を行う。アレイの幅は、バイトで示した所望のサイズの半分を仮想アドレスオペランド８、４、又は２へ加えることによって、１２８ビット、６４ビット、３２ビットに制限できるが、グループサイズの２倍よりも小さくは制限できない。アレイは、バイトで示した所望のメモリオペランドサイズの半分を仮想アドレスオペランドに加えることによって、縦方向には１２８バイト、６４バイト、３２バイト、又は１６バイトに制限することができるが、グループサイズの２倍より小さくは制限できない。
【０１４１】
一実施形態において、仮想アドレスは、２０４８／ｇｓｉｚｅ（又は、W.MUL.MAT.C.Fについては、１０２４／ｇｓｉｚｅ）バイトにアラインされているか、又は、アラインされたアドレスとバイトで表すメモリオペランドサイズの半分及び／又はバイト単位の結果のサイズの半分との和でなければならない。アラインされたアドレスはバイトで示したサイズの正確な倍数でなければならない。アドレスが有効でない場合、“仮想アドレスによるアクセス不許可”の例外が生じる。
【０１４２】
図１７Ｂに示すように、wide-multiply-matrix-floating-point-half命令(W.MUL.MAT.F)の一実施形態は、メモリ[m31 m30 …m1 m0]をベクトル[h g f e d c b a]で乗算する命令であり、積[hm31+gm27+…+bm7+am3…hm28+gm24+…+bm4+am0]を得る。
【０１４３】
図１７Ｃに示すように、wide-multiply-matrix-complex-floating-point-half命令(W.MUL.MAT.F)の一実施形態は、メモリ[m15 m14 …m1 m0]をベクトル[h g f e d c b a]で乗算する命令であり、積[hm14+gm15+…+bm2+am3…hm12+gm13+…+bm0+am1-hm13+gm12+…-bm1+am0]を得る。
Wide Multiply Matrix Floating-point命令の疑似コード１７８０の一実施形態を図１７Ｄに示す。図ＦＬ０ＡＴ−１は、前記及び他の浮動小数点命令によって使用される追加の疑似コード演算を示す。Wide Multiply Matrix Floating-point命令の例外１７９０の一実施形態を図１７Ｅに示す。
【０１４４】
（行列拡張ガロア乗算（Wide Multiply Matrix Galois））
Multiply Matrix Galois命令の一実施形態を図１８Ａから図１８Ｄに示す。一実施形態において、Wide Multiply Matrix Galois命令は、乗算と加算がガロア体算術で実行される以外は、上記と同様の形式で行列乗算を行う。８ビットのサイズを命令内に指定することができる。汎用レジスタの内容は、ガロア体剰余演算の実行に用いる多項式を指定する。この行列乗算の本質は新しいものである。これを以下詳細に説明する。
【０１４５】
一実施形態において、これらの命令は、汎用レジスタからアドレスを取得し、メモリから大きいオペランドを、汎用レジスタから第２及び第３のオペランドをフェッチし、それらのオペランド内のビットパーティションに対して演算群を実行し、結果を連結させ、その結果を汎用レジスタに入れる。図１８Ａは、Wide Multiply Matrix Galois命令のフォーマット１８１０の一実施形態を示す。
【０１４６】
Wide Multiply Matrix Galois命令の概略図１８３０の一実施形態を図１８Ｂに示す。一実施形態において、レジスタｒｅの内容を仮想アドレスとして使用し、指定サイズの値をメモリから読み込む。第２の値及び第３の値は、レジスタｒｄとレジスタｒｂの内容である。それらの値を、サイズが指定されたオペランドのグループに区分する。第２の値は、第１の値で多項式として乗算し、第３の値によって指定されたガロア体に縮小された（reduced）結果を得るとともに、結果のグループを得る。この結果の値のグループを結合し、レジスタｒａに入れる。
【０１４７】
一実施形態においては、wide-multiply-matrix-Galois-bytes命令(W.MUL.MAT.G.8)は、１６３８４ビット、つまり、１２８×１２８ビットまでの区分アレイ乗算を行う。アレイの幅は、バイトで示した所望のサイズの半分を仮想アドレスオペランド８、４、２又は１へ加えることによって、１２８ビット、６４ビット、３２ビット、又は１６ビットに制限できるが、グループサイズである８ビットの２倍よりも小さくは制限できない。アレイは、バイトで示した所望のメモリオペランドサイズの半分を仮想アドレスオペランドに加えることによって、縦方向には１２８バイト、６４バイト、３２バイト、又は１６バイトに制限することができるが、グループサイズである８ビットの２倍より小さくは制限できない。
【０１４８】
一実施形態において、仮想アドレスは、２５６バイトにアラインされているか、又は、アラインされたアドレスとバイト単位のメモリオペランドサイズの半分及び／又はバイトで示した結果のサイズの半分との和でなければならない。アラインされたアドレスはバイトで示したサイズの正確な倍数でなければならない。アドレスが有効でない場合、“仮想アドレスによるアクセス不許可”の例外が生じる。
【０１４９】
図１８Ｂに示すように、wide-multiply-matrix-Galois-byte命令(W.MUL.MAT.G.8)は、メモリ[m255 m254 …m1 m0]をベクトル[p o n m l k j i h g f e d c b a]で乗算し、多項式[q]を法とする結果に縮小し（reducing）、積[(pm255+om247+…+bm31+am15 mod q)(pm254+om246+…+bm30+am14 mod q)… (pm248+om240+…+bm16+am0 mod q)]を得る。
Wide Multiply Matrix Galois命令の疑似コード１８６０の一実施形態を図１８Ｃに示す。Wide Multiply Matrix Galois命令の例外１８９０の一実施形態を図１８Ｄに示す。
【０１５０】
（通常のリトルエンディアン又はビッグエンディアンバイト順序のメモリオペランド）
本発明の他の側面において、通常のリトルエンディアン又はビッグエンディアンバイト順序のいずれのメモリオペランドも容易に実行される。その結果、全ての拡張オペランド命令は二つの形式に分けられる。一つはリトルエンディアン順序、もう一つはビッグエンディアン順序であり、これらは命令の一部によって指定される。バイト順序は、データパス幅（１２８ビット）のユニット内でバイトを配信する順序をメモリシステムに指定するとともに、さらに大きな拡張オペランド内に複数のメモリワード（１２８ビット）を配置する順序を指定する。
【０１５１】
（乗数積(multiplier product)または積の和の上位の部分の抽出）
本発明の別の局面は、大きなマルチプライヤアレイを効率的に利用する方法として、乗数積または積の和の上位の部分の抽出を取り扱う。関連の米国特許第５，７４２，８４０号および第５，９５３，２４１号は、特定のクラスの命令を汎用プロセッサに追加することによりマルチプライヤアレイの利用を向上させるシステムおよび方法を記載している。これは、高精度の算術演算のためにフルに使用される大きなマルチプライヤアレイを最大限利用するという課題に取り組むものである。例えば、６４×６４ビットのマルチプライヤは６４ビット×６４ビットの乗算によってフルに使用されるが、（マルチプライヤデータ幅およびレジスタと比較して）低精度の演算である３２ビット×３２ビットの乗算には、１／４のみが使用される。特に、種々の方法で互いに結合（加算）された大量の低精度乗算を実行する演算が規定されている。１組の演算の選択において他に優先して考慮されることの１つは、結果オペランドのサイズを制限することである。例示的な実施形態において、例えば、このサイズは、１２８ビットのオーダーまたは単一のレジスタに制限されるが、特定のサイズの制限は必要ない。
【０１５２】
乗算結果（積）のサイズは、通常、オペランド、つまり被乗数および乗数のサイズの合計である。結果、乗算命令は、結果のサイズが同一サイズの入力オペランドのサイズの２倍である演算を規定する。本発明者らの従来の設計では、例えば、乗算命令は、６４ビットのレジスタソースを受け取り、６４ビットのシンボルに対して６４×６４マルチプライヤアレイ全体を用いて、３２ビットのシンボルの対に対して該マルチプライヤアレイの半分を用いて、または、１６ビットのシンボルの四分の一のもの(quads)に対して該マルチプライヤアレイの１／４を用いて、単一の１２８ビットのレジスタ−ペアの結果を生成する。これらの場合の全てにおいて、６４ビットの２つのレジスタソースが組み合わされ、１２８ビットの結果が得られることに留意されたい。
【０１５３】
複素乗算(complex multiplies)、畳込み、および行列乗算を含む演算のいくつかにおいて、低精度の乗数積が合算される。合算は、要求される精度をさらに高くする。２個の積の合計は、１ビット分の精度上昇を要求する。したがって、４個の積の合算は２ビット分の精度上昇を要求し、８個の積の合算は３ビット分の精度上昇を要求し、１６個の積の合算は４ビット分の精度上昇を要求する。いくつかの従来の設計においては、この精度の一部が失われ、オーバーフローを防止するためにマルチプライヤオペランドのスケーリングが必要となり、さらに結果の精度を低下させる。
【０１５４】
レジスタペアの使用により、レジスタペアおよび個々のレジスタ値の両方を後続の命令へとバイパスする必要があるといった望ましくない複雑性が生じる。その結果、従来の技術では、ソースオペランドの１２８ビットレジスタ値の半分のみが、単一レジスタの１２８ビットの結果の生成のために使用され得る。
【０１５５】
本発明において、乗数積または積の和の上位部分が抽出され、一般レジスタからの動的シフト量または命令の一部として指定された調節量で調節され、レジスタからの制御値または命令部分によって、最近点への丸め(round-to-nearest/even)、切り捨て(toward zero)、下向きの丸め(floor)、または上向きの丸め(ceiling)といった丸め処理が行われる。オーバーフローは、出力結果中に正確に表現され得る最大値および最小値に結果を制限することにより処理される。
【０１５６】
（レジスタによる抽出の制御）
本発明において、抽出がレジスタによって制御される場合、結果のサイズが指定され得、それにより、丸め処理および結果に適合し得るよりも少ない数のビットへの制限が可能になる。これにより、結果は、オーバーフローまたは丸め処理を考慮せずに後続の演算において使用されるようにサイズが変更され、パフォーマンスが向上する。
【０１５７】
また、本発明において、抽出がレジスタによって制御される場合、単一のレジスタ値が、オペランドのサイズ、シフト量、および結果のサイズ、ならびに丸め制御を規定する。この制御情報を全て単一のレジスタに配置することにより、配置しなかった場合に命令が必要とするビットの数に対して命令のサイズが低減され、それにより、パフォーマンスが向上し且つプロセッサの自由度が向上する。
【０１５８】
本発明の本局面に含まれる具体的な命令は、Ensemble Convolve Extract、Ensemble Multiply Extract、Ensemble Multiply Add ExtractおよびEnsemble Scale Add Extractである。
【０１５９】
（アンサンブル所定位置抽出（Ensemble Extract Inplace））
Ensemble Extract Inplace命令の例示的な実施形態を図１９Ａ〜図１９Ｇに示す。例示的な実施形態において、これら命令のうちのいくつか（Ensemble Convolve Extract, Ensemble Multiply Add Extract）は、通常、抽出が命令の一部として指定される形態においてのみ利用可能である。別の実施形態では、オペランドのサイズ、シフト量、丸め処理が汎用レジスタの内容（Ensemble Multiply Extract命令に含まれる）により制御され得る演算の形態を含み得る。Ensemble Convolve ExtractおよびEnsemble Multiply Add Extractに対するこの種の命令の定義は４個のソースレジスタを要求し、このことで、さらなる汎用レジスタ読み出しポートの追加により複雑さが増す。
【０１６０】
例示的な実施形態において、これらの演算は、４つのレジスタからオペランドを取得し、オペランド内のビットのパーティションに対して演算を実行し、連結された結果を４つのレジスタ内に配置する。Ensemble Extract Inplace命令のフォーマットおよびオペレーションコード１９１０の例示的な実施形態を図１９Ａに示す。
【０１６１】
Ensemble Extract Inplace命令の図１９３０、１９４５、１９６０および１９７５の例示的な実施形態を図１９Ｃ、図１９Ｄ、図１９Ｅおよび図１９Ｆに示す。例示的な実施形態において、レジスタｒｄ、ｒｃ、ｒｂおよびｒａの内容がフェッチされる。これらのオペランドに対して指定された演算が実行される。結果はレジスタｒｄに配置される。
【０１６２】
例示的な実施形態において、E.CON.X命令について、レジスタｒｄおよびｒｃの内容がｃ‖ｄのように連結され、第１の値として使用される。第２の値は、レジスタｒｂの内容である。これらの値は、指定されたサイズのオペランドの複数の群へと分割され、畳み込まれて、１群の値を生成する。該１群の値は、指定された通りに丸められ且つ制限され、抽出されて、指定されたサイズである１群の結果が得られる。該１群の結果は、連結され、レジスタｒｄに配置される。
【０１６３】
例示的な実施形態において、E.MUL.ADD.X命令について、レジスタｒｃおよびｒｂの内容は、指定されたサイズのオペランドの複数のグループに分割され、乗算されて、レジスタｒｄの分割され拡大された内容が加算された１群の値が得られる。該１群の値は、指定された通りに丸められ且つ制限され、抽出されて、指定されたサイズである１群の結果が得られる。該１群の結果は、連結され、レジスタｒｄに配置される。
【０１６４】
図１９Ｂに示すように、例示的な実施形態において、レジスタｒａの内容のビット３１..０が、データを抽出する様態及び所定の演算については演算を実行する様態を制御する複数のパラメータを指定する。制御フィールドの位置は、動的な計算のための固定制御値にソースポジションを加えることを可能にし、且つ、制御フィールドの下位１６ビットが、単一のGCOPYI.128命令によってより単純な抽出のケースのいくつかに対して設定されることを可能にする。制御フィールドは、さらに下位８ビットがノンゼロである（ゼロでない）場合にのみ、切り捨て(truncation)を伴うが丸め処理は伴わない１２８ビットの抽出を実行するように構成されている。
【０１６５】
例示的な実施形態において、下に示すテーブルは各ラベルの意味を説明する。
【０１６６】
【表４】
2007531072.tif 000006
【０１６７】
例示的な実施形態において、９ビットのｇｓｓｐフィールドは、式gssp = 512-4*gsize+sposにしたがって、群サイズｇｓｉｚｅおよびソースポジションｓｐｏｓの両方をエンコードする。群サイズｇｓｉｚｅは、範囲１..１２８に含まれる２のベキであり、ソースポジションｓｐｏｓは、範囲０..（２＊ｇｓｉｚｅ）−１に含まれる。
【０１６８】
例示的な実施形態において、ｘフィールド、ｓフィールド、ｎフィールド、ｍフィールド、ｌフィールドおよびｒｎｄフィールドの値は下記の意味を有する。
【０１６９】
【表５】
2007531072.tif 000007
【０１７０】
（アンサンブル抽出乗加算（Ensemble Multiply Add Extract））
図１９Ｃに示すように、アンサンブルダブレット抽出乗加算命令(E.MULADDX)の例示的な実施形態は、ベクトルｒｃ［h g f e d c b a］をベクトルｒｂ［p o n m l k j i］で乗算し、ベクトルｒｄ［x w v u t s r q］を加算し、それにより結果ベクトルｒｄ［ｈｐ＋ｘ  ｇｏ＋ｗ  ｆｎ＋ｖ  ｅｍ＋ｕ  ｄｌ＋ｔ  ｃｋ＋ｓ  ｂｊ＋ｒ  ａｉ＋ｑ］を得て、ra31..0によって指定された通りに丸められ且つ制限される。
【０１７１】
図１９Ｄに示すように、アンサンブルダブレット抽出複素乗加算命令（ｎがセットされたE.MUL.X）の例示的な実施形態は、オペランドベクトルｒｃ［h g f e d c b a］をオペランドベクトルｒｂ［p o n m l k j i］で乗算し、結果ベクトルｒｄ［ｇｐ＋ｈｏ  ｇｏ−ｈｐ  ｅｎ＋ｆｍ  ｅｍ−ｆｎ  ｃｌ＋ｄｋ  ｃｋ−ｄｌ  ａｊ＋ｂｉ  ａｉ−ｂｊ］を得て、ra31..0によって指定された通りに丸められ且つ制限される。この命令には、実部が虚部の右側（低精度）に配置された複素数からなる構成が好ましい。
【０１７２】
（アンサンブル抽出畳込み（Ensemble Convolve Extract））
図１９Ｅに示すように、アンサンブルダブレット抽出畳込み命令(n=0のECON.X)の例示的な実施形態は、ベクトルｒｃ||ｒｄ［x w v u t s r q p o n m l k j i］をベクトルｒｂ［h g f e d c b a］で畳込み、以下の積ベクトルｒｄ
［ａｘ＋ｂｗ＋ｃｖ＋ｄｕ＋ｅｔ＋ｆｓ＋ｇｒ＋ｈｑ．．．ａｓ＋ｂｒ＋ｃｑ＋ｄｐ＋ｅｏ＋ｆｎ＋ｇｍ＋ｈｌ
ａｒ＋ｂｑ＋ｃｐ＋ｄｏ＋ｅｎ＋ｆｍ＋ｇｌ＋ｈｋ  ａｑ＋ｂｐ＋ｃｏ＋ｄｎ＋ｅｍ＋ｆｌ＋ｇｋ＋ｈｊ］
を得て、ra31..0によって指定された通りに丸められ且つ制限される。
【０１７３】
図１９Ｆに示すように、アンサンブルダブレット複素抽出畳込み命令(n=lのECON. X)の例示的な実施形態は、ベクトルｒｄ‖ｒｃ［x w v u t s r q p o n m l k j i］をベクトルｒｂ［h g f e d c b a］で畳込み、以下の積ベクトルｒｄ
［ａｘ＋ｂｗ＋ｃｖ＋ｄｕ＋ｅｔ＋ｆｓ＋ｇｒ＋ｈｑ．．．ａｓ−ｂｔ＋ｃｑ−ｄｒ＋ｅｏ−ｆｐ＋ｇｍ−ｈｎ
ａｒ＋ｂｑ＋ｃｐ＋ｄｏ＋ｅｎ＋ｆｍ＋ｇｌ＋ｈｋ  ａｑ−ｂｒ＋ｃｏ−ｄｐ＋ｅｍ−ｆｎ＋ｇｋ＋ｈｌ］
を得て、ra31..0によって指定された通りに丸められ且つ制限される。
【０１７４】
Ensemble Extract Inplace命令の疑似コード１９９０の例示的な実施形態を図１９Ｇに示す。例示的な実施形態において、例示的な実施の形態においては、Ensemble Extract Inplace命令についての例外はない。
【０１７５】
（アンサンブル抽出（Ensemble Extract））
Ensemble Extract命令の例示的な実施形態を図２０Ａ〜図２０Ｊに示す。例示的な実施形態において、これらの演算は、３つのレジスタからオペランドを取得し、オペランド内のビットのパーティションに対して演算を実行し、連結された結果を第４のレジスタに配置する。Ensemble Extract命令のフォーマットおよびオペレーションコード２０１０の例示的な実施形態を図２０Ａに示す。
【０１７６】
Ensemble Extract Inplace命令の図２０２０、２０３０、２０４０、２０５０、２０６０、２０７０および２０８０を図２０Ｃ、図２０Ｄ、図２０Ｅ、図２０Ｆ、図２０Ｇ、図２０Ｈおよび図２０Ｉ、に示す。例示的な実施形態において、レジスタｒｄ、ｒｃおよびｒｂの内容がフェッチされる。これらのオペランドに対して指定された演算が実行される。結果はレジスタｒａに配置される。
【０１７７】
図２０Ｂに示すように、例示的な実施形態において、レジスタｒｂの内容のビット３１..０が、データを抽出する様態ならびに所定の演算については演算を実行する様態を制御する複数のパラメータを指定する。制御フィールドの位置は、動的な計算のための固定制御値にソースポジションを加えることを可能にし、且つ、制御フィールドの下位１６ビットが、単一のGCOPYI.128命令によってより単純な抽出のケースのいくつかに対して設定されることを可能にする。制御フィールドは、さらに下位８ビットがノンゼロである（ゼロでない）場合にのみ、切り捨て(truncation)を伴うが丸め処理は伴わない１２８ビットの抽出を実行するように構成されている。
【０１７８】
例示的な実施形態において、下に示すテーブルは各ラベルの意味を説明する。
【０１７９】
【表６】
2007531072.tif 000008
【０１８０】
例示的な実施形態において、９ビットのｇｓｓｐフィールドは、式gssp= 512 4*gsize+sposにしたがって、群サイズｇｓｉｚｅおよびソースポジションｓｐｏｓの両方をエンコードする。群サイズｇｓｉｚｅは、範囲１..１２８に含まれる２のベキであり、ソースポジションｓｐｏｓは、範囲０..（２＊ｇｓｉｚｅ）−１に含まれる。
【０１８１】
例示的な実施形態において、ｘフィールド、ｓフィールド、ｎフィールド、ｍフィールド、ｌフィールド、ｒｎｄフィールドの値は下記の意味を有する。
【０１８２】
【表７】
2007531072.tif 000009
【０１８３】
例示的な実施形態において、E.SCAL.ADD.X命令について、レジスタｒｂの内容のビット１２７．．６４は、レジスタｒｄおよびｒｃの被乗数に対する乗数を指定する。具体的には、bits64+2*gsize-1.. 64+gsizeは、レジスタｒｄの内容に対する乗数であり、bits64+gsize-1.. 64は、レジスタｒｃの内容に対する乗数である。
【０１８４】
（アンサンブル抽出乗算（Ensemble Multiply Extract））
図２０Ｃに示すように、アンサンブルダブレット抽出乗算命令(E.MULX)の例示的な実施形態は、ベクトルｒｄ［h g f e d c b a］をベクトルｒｃ［p o n m l k j i］で乗算し、結果ベクトルｒａ［ｈｐ  ｇｏ  ｆｎ  ｅｍ  ｄｌ  ｃｋ  ｂｊ  ａｉ］を得て、rb31..0によって指定された通りに丸められ且つ制限される。
【０１８５】
図２０Ｄに示すように、アンサンブルダブレット抽出複素乗算命令（ｎがセットされたE.MUL.X）の例示的な実施形態は、ベクトルｒｄ［h g f e d c b a］をベクトルｒｃ［p o n m l k j i］で乗算し、結果ベクトルｒａ［ｇｐ＋ｈｏ  ｇｏ−ｈｐ  ｅｎ＋ｆｍ  ｅｍ−ｆｎ  ｃｌ＋ｄｋ  ｃｋ−ｄｌ  ａｊ＋ｂｉ  ａｉ−ｂｊ］を得て、rb31..0によって指定された通りに丸められ且つ制限される。この命令には、実部が虚部の右側（低精度）に配置された複素数からなる構成が好ましい。
【０１８６】
（アンサンブル抽出スケーリング加算（Ensemble Scale Add Extract））
本発明の一局面は、Ensemble Scale Add Extract命令を規定する。Ensemble Scale Add Extract命令は、レジスタ内の抽出制御情報を、スカラ乗数として用いられる２つの値と共に、２つのベクトル被乗数の内容に組み合わせる。
【０１８７】
この組み合わせにより、組み合わせを行わなかった場合に要求されるレジスタの数もしくは組み合わせを行わなかった場合に命令が要求するビット数が減少され、性能が向上する。本発明の別の利点は、組み合わされた演算が、中間的な丸め処理もオーバーフローも発生しない合算ノード(summation node)上に十分な内部精度(internal precision)を与えた例示的な実施形態によって実行され得ることであり、これにより、この計算を実行するために２つ以上の命令が要求される従来技術の演算と比べて精度が向上する。
【０１８８】
図２０Ｅに示すように、アンサンブルダブレット抽出スケール加算命令(E.SCAL.ADD.X)の例示的な実施形態は、ベクトルｒｄ［h g f e d c b a］をrb95..80[r]で乗算し、その積を、ベクトルｒｃ［p o n m l k j i］をrb79..64[q]で乗算した積に加算し、結果［ｈｒ＋ｐｑ  ｇｒ＋ｏｑ  ｆｒ＋ｎｑ  ｅｒ＋ｍｑ  ｄｒ＋ｌｑ  ｃｒ＋ｋｑ  ｂｒ＋ｊｑ  ａｒ＋ｉｑ］を得て、rb31..0によって指定された通りに丸められ且つ制限される。
【０１８９】
図２０Ｆに示すように、アンサンブルダブレット抽出スケール複素加算命令(ｎがセットされたE. SCLADD. X)の例示的な実施形態は、ベクトルｒｄ［h g f e d c b a］をrb127..96[t s]で乗算し、その積を、ベクトルｒｃ［p o n m l k j i］をrb95..64[r q]で乗算した積に加算し、結果［ｈｓ＋ｇｔ＋ｐｑ＋ｏｒ  ｇｓ−ｈｔ＋ｏｑ−ｐｒ  ｆｓ＋ｅｔ＋ｎｑ＋ｍｒ  ｅｓ−ｆｔ＋ｍｑ−ｎｒ  ｄｓ＋ｃｔ＋ｌｑ＋ｋｒ  ｃｓ−ｄｔ＋ｋｑ−ｌｒ  ｂｓ＋ａｔ＋ｊｑ＋ｉｒ  ａｓ−ｂｔ＋ｉｑ−ｊｒ］を得て、rb31..0によって指定された通りに丸められ且つ制限される。
【０１９０】
（アンサンブル抽出（Ensemble Extract））
図２０Ｇに示すように、例示的な実施形態において、E.EXTRACT命令について、ｍ＝０且つｘ＝０の場合、レジスタｒｂの内容によって指定されるパラメータが解釈されて、レジスタｒｄおよびｒｃの連結された内容のダブルサイズシンボルからフィールドが選択され、それにより連結され且つレジスタｒａに配置された値が抽出される。
【０１９１】
図２０Ｈに示すように、例示的な実施形態において、アンサンブル抽出マージ（an ensemble-merge- extract）（ｍ＝１の場合のE.EXTRACT）について、レジスタｒｂの内容によって指定されるパラメータが解釈されて、レジスタｒｄの内容のシンボルからのフィールドがレジスタｒｃの内容と併合される。その結果は、連結され且つレジスタｒａに配置される。ｍ＝１の場合、ｘフィールドは機能しない。
【０１９２】
図２０Ｉに示すように、例示的な実施形態において、アンサンブル抽出拡張（an ensemble-expand- extract）（ｍ＝０且つｘ＝１の場合のE. EXTRACT）について、レジスタｒｂの内容で指定されたパラメータが解釈されて、レジスタｒｄの内容のシンボルからフィールドが抽出される。その結果は、連結され且つレジスタｒａに配置される。ｒｃの値は使用されない。
【０１９３】
Ensemble Extract命令の疑似コード２０９０の例示的な実施形態を図２０Ｊに示す。例示的な実施形態において、Ensemble Extract命令についての例外はない。
【０１９４】
（レジスタ読み出しポートの減少）
別の実施形態は、オペランドのサイズ、シフトおよび丸め処理がレジスタによって制御される命令の実行に必要なレジスタ読み出しポートの数を減らすことが出来る。抽出制御レジスタの値は、初期実行の際に追加のサイクルを用いてフェッチされ、後続の実行のための演算器の内部または近傍に保持され得る。このことにより、追加の性能ペナルティ(performance penalty)が小さい場合の実行に必要なハードウェアの量が低減される。レジスタを修正する命令によって、保持された値は無効であるとマークされ得、それにより抽出制御レジスタの再フェッチが行われるか、あるいは、保持された値がそのような演算によって更新され得る。抽出制御レジスタの再フェッチは、後続の実行において異なるレジスタ数が指定される場合にも要求され得る。上記２つの異なる実施形態の特徴を組み合わせ得ることは明らかである。
【０１９５】
（ガロア体算術）
本発明の別の局面はガロア体算術を含む。ガロア体算術では、乗算が、初期２進多項式乗算（桁上げ(carries)を抑制した符号なし２進乗算）によって実行され、その後、多項モジュロ／剰余演算（桁上げを抑制した符号なし２進除算）が行われる。剰余演算は面積および遅延について比較的コストが高い。ガロア体算術において、加算は、桁上げを抑制した２進加算、またはこれと均等な、ビット単位の排他的論理和演算によって実行される。本発明のこの局面において、行列乗算はガロア体算術を用いて実行される。この演算において、乗算および加算はガロア体乗算およびガロア体加算である。
【０１９６】
従来技術の方法を用いる場合、１６×１６バイトの行列による１６バイトのベクトルの乗算は、２５６回の８ビットガロア体乗算および１６＊１５（＝２４０）回の８ビットガロア体加算として実行され得る。２５６回のガロア体乗算は、２５６回の多項式乗算および２５６回の多項式剰余演算を含む。
【０１９７】
本発明を用いると、２５６回の多項式乗算、２４０回の１６ビット多項式加算および１６回の多項式剰余演算を実行することによって、総計算量が大幅に減少する。ここでは８ビット演算ではなく１６ビット演算を行うので、多項式加算のコストはガロア体加算の二倍であるが、多項式剰余関数のコストは１／１６倍に減少されることに留意されたい。これは、全体として、加算のコストが剰余のコストよりもかなり低いので、好ましいトレードオフであるといえる。
【０１９８】
（実行パイプラインからのデカップルドアクセスおよび同時マルチスレッディング（Decoupled Access from Execution Pipelines and Simultaneous Multithreading））
本発明のさらに別の局面（図４に最もよく示す）において、本発明は、実行パイプラインからのデカップルドアクセスおよび同時マルチスレッド処理の両方を一意的な方法で用いる。従来技術では同時マルチスレッド処理されたパイプラインを用いて、複数ある実行スレッドのうちの一つから各演算器へ命令を発行させることによりデータパスユニットの利用を増大させる（例えば、Dean M. Tullsen、Susan J. EggersおよびHenry M. Levyの"Simultaneous Multithreading: Maximizing On Chip Parallelism," Proceedings of the 22nd Annual International Symposium on Computer Architecture, Santa Margherita Ligure, Italy, June, 1995)。
【０１９９】
従来技術において、実行パイプラインからのデカップルドアクセスを用いて、アクセスユニットからの結果をバッファすることにより実行データパスユニットの利用を増大させる。なお、アクセスユニットはメモリユニットへのアドレスを計算し、メモリユニットは要求されたアイテムをメモリからフェッチし、その後それらを実行ユニットに対して提供する。（例えば、J. E. Smith,"Decoupled Access/Execute Computer Architectures", Proceedings of the Ninth Annual International Symposium on Computer Architecture, Austin, Texas (April 26 29,1982), pp. 112-119）。
【０２００】
従来のパイプラインと比較して、Eggersの従来技術は、命令が演算器に対して発行される前に追加のパイプラインサイクルを用いる。この追加のパイプラインサイクルは、いずれのスレッドに命令の発行を許可すべきかということを判定する必要がある。その結果、従来のパイプラインに対して、従来技術の設計には、依存分岐遅延(dependent branch delay)を含む遅延が追加されている。
【０２０１】
本発明は、各実行スレッドについて、関連するレジスタファイルを有する個別のアクセスデータパスユニットを含む。これらのアクセスユニットはアドレスを生成する。生成されたアドレスは、共通のメモリユニットに集められる。該メモリユニットは、全てのアドレスをフェッチして、メモリ内容を１個以上のバッファに配置する。実行ユニットについての命令（スレッド間において異なる程度で共用される）もまた、後の実行のためにバッファされる。その後、実行ユニットは、共用される関数データパスユニット（functional data path units）を用いて全てのアクティブスレッドからのオペレーションを実行する。
【０２０２】
実行ユニットによって実行される命令の場合、従来技術の同時マルチスレッディング設計に必要な延長サイクルは、実行サイクルからの従来技術のデカップルドアクセスからのメモリデータアクセス時間と重複するので、リソースをスケジューリングする実行演算ユニットによる追加の遅延は生じない。アクセスユニットによって実行される命令の場合、各スレッドに対して別個のアクセスユニットを用いることにより、共用されたリソースをスケジューリングするための追加サイクルが削除される。
【０２０３】
これは好ましいトレードオフといえる。なぜなら、スレッドはアクセス演算器を共用しないが、これらのユニットは、スレッドによって共用される実行演算ユニットと比べて比較的小さいからである。
【０２０４】
実行ユニットの共用に関して、本発明は、コスト、利用および性能が異なる複数の異なるクラスの演算器を実行ユニットに対して用いる。特に、単純な加算およびビット単位のオペレーションを実行するＧユニットは、他のユニットと比べて（面積および電力に関して）比較的安価であり、その利用率は比較的高い。その結果、この設計はそのようなユニットを４つ使用する。各ユニットは２つのスレッド間で共用され得る。ブロードクラスのデータスイッチング関数を実行するＸユニットは、比較的高価で且つ利用率が比較的低いため、２つのユニットが設けられ、各々のユニットは２つのスレッド間で共用される。Wide Translate命令を実行するＴユニットは、高価で且つ利用率が低いため、１つのユニットが４つ全てのスレッド間で共用される。Ensemble命令のクラスを実行するＥユニットは、他の演算器と比べて、面積および電力について非常にコストが高いが利用率は比較的高く、そのため本発明者らは、そのようなユニットを２つ設け、各々のユニットが２つのスレッドによって共用される構成とした。
【０２０５】
図４にアクセスユニットの４つのコピーを示す。各アクセスユニットは、アクセス命令フェッチキューA-Queue４０１〜４０４を有し、アクセスレジスタファイルAR４０５〜４０８に接続されている。アクセスレジスタファイルAR４０５〜４０８の各々は、２つのアクセス演算器A４０９〜４１６に接続されている。該アクセスユニットは、実行の４つの同時スレッドについて、独立して機能する。これら８つのアクセス演算器A４０９〜４１６は、アクセスレジスタファイルAR４０５〜４０８についての結果および共用メモリシステム４１７へのアドレスを生成する。メモリシステム４１７からフェッチされたメモリ内容は、アクセスユニットによって実行されてない実行命令と組み合わされ、４つの実行命令キューE-Queue４２１〜４２４に入力される。実行命令キューE-Queue４２１〜４２４からの命令およびメモリデータは、実行レジスタファイル４２５〜４２８に提供される。実行レジスタファイル４２５〜４２８は、実行レジスタファイルソースオペランドをフェッチする。命令は、実行ユニット・アービトレーション装置Arbitration４３１に結合される。アービトレーション装置Arbitration４３１は、４つのスレッドからの命令のいずれを利用可能な実行ユニットE４４１および４４９、X４４２および４４８、G４４３〜４４４および４４６〜４４７、ならびにT４４５にルートすべきかを選択する。実行レジスタファイルソースオペランドER４２５〜４２８は、ソースオペランドバス４５１〜４５４を用いて実行ユニット４４１〜４４５に結合され、且つ、ソースオペランドバス４５５〜４５８を用いて実行ユニット４４５〜４４９に結合される。実行ユニット４４１〜４４５からの演算器結果オペランドは、結果バス４６１を用いて実行レジスタファイルに結合され、実行ユニット４４５〜４４９からの演算器結果オペランドは、結果バス４６２を用いて実行レジスタファイルに結合される。
【０２０６】
（相互特権ゲートウェイの改良）
本発明のさらに別の局面において、並列性が高まりかつ性能が向上する相互特権ゲートウェイの改良について記載する。関連米国特許出願第０８／５４１，４１６号には、制御された状態で低い特権レベルから高い特権レベルへ制御の受け渡し（分岐）ができる命令を実行するシステム及び方法が記載されている。本発明は、同じ目的を達成しかつ特有の利点をもつ変形された命令のための改良システム及び方法である。
【０２０７】
仮想メモリシステム自体の制御、入出力演算及びシステム制御機能のようなプロセッサリソースには、これらを保護特権領域内に包囲することにより偶発的な誤用又は不正使用から保護されているものが多い。これらの保護領域の保全を維持するために、ゲートウェイと呼ばれる特定のエントリポイントを経由しなければこの領域にエントリしてはいけない。
【０２０８】
この演算の従来のバージョンでは一般に、有効なゲートウェイエントリポイントを含むデータ領域に対して設定されるにすぎない保護された仮想メモリ属性を用いてメモリの領域からアドレスをロードした後、メモリの内容に含まれたアドレスに分岐する。基本的に、３つのステップ、すなわちロード、分岐及びチェックが含まれている。この演算は、レジスタ対レジスタ計算命令、メモリロード及びストア並びにレジスタに基づく分岐のような他の命令と比較してかなり長い演算であり、そのため、パイプライン実装が遅延するとともに複雑化することになる。
【０２０９】
本発明では、ブランチゲートウェイ(Branch Gateway)命令は、１）レジスタ０の内容に分岐する演算と、２）レジスタ１の内容を用いて、指定されたバイト順（リトルエンディアン）及び指定されたサイズ（６４ビット）でロードが実行される演算とを並行して実行する。メモリからロードされた値がレジスタ０の内容と等しくしない場合には、前記命令は例外のため中途終了される。さらに、３）命令が中途終了されない場合には戻りアドレス （前記ブランチゲートウェイ命令に続く次のシーケンス命令のアドレス）がレジスタ０に書き込まれる。基本的に、このアプローチには、ユーザーコードで特権コードにアクセスできるための必要なアクセス許可を行うために第１の命令が使用されており、第１の命令についてアクセス許可が出されているため、第２の命令は特権コードに直接分岐できる。
【０２１０】
本発明では、新特権レベルもレジスタ０に含まれており、新特権レベルが旧特権レベルより大きくない場合には第２の並列演算を実行する必要はない。この第２の並列演算が実行されない場合、命令の残りの部分は、特権引き上げを必要としないプロシージャの呼び出しに用いられるブランチリンク(branch link)命令と同一の関数を実行する。この特徴によりもたらされる利点は、特権引き上げを必要としたり必要としなかったりするプロシージャを呼び出すためにブランチゲートウェイ命令を使用できることにある。
【０２１１】
メモリロード演算によって、ロードされる領域が有効なゲートウェイデータを含むものとしてタグ付けされたことが仮想メモリシステムで確認される。本発明の別の利点は、前述の呼び出されたプロシージャが、レジスタ１にゲートウェイデータをロードしたアドレスが含まれていることに依拠してもよく、該プロシージャの必要な更なるデータ又はアドレスを位置決めするのにレジスタ１の内容を使用できることにある。この命令の従来のバージョンでは、更なるアドレスを保護された状態で初期化するためにメモリのゲートウェイ領域からそのアドレスをロードする必要があったが、本発明では、特別な保護を必要としない“通常の”ロード演算でアドレス自体をロードすることができる。
【０２１２】
また、本発明では、ブランチゲートウェイ命令を出す前に“通常の”ロード演算でレジスタ０の内容をロードすることができる。本発明はブランチゲートウェイ命令で実行される特別な“ゲートウェイ”ロード演算だけでなく通常のロード演算にも領域を使用できる仮想メモリシステムを備えているので、値はブランチゲートウェイ命令によってロードされる同一メモリアドレスからロードできる。
【０２１３】
（相互特権ゲートウェイの改良−システム及び特権ライブラリ呼び出し）
システム及び特権ライブラリ呼び出しの実施形態の例を図２１Ａおよび図２１Ｂに示している。システム及び特権ライブラリ呼び出しの略図２１１０の実施形態の例を図２１Ａに示している。実施形態の例において、上記の通常のプロシージャとできる限り同様にシステム機能及び特権ライブラリを呼び出すことを目的とする。例外としてシステムの呼び出しを実行することにより待ち時間がかなり長くなり且つ複雑になってしまわないように、プロセス特権レベルを必要なレベルまで穏やかに上昇させるプロシージャの呼び出しの変形が用いられる。この機構を安全に提供するために、仮想メモリシステムとの対話が必要とされる。
【０２１４】
実施形態の例では、そのようなプロシージャには、セキュリティチェックが行われた後又は無効なレジスタ内容でプロシージャにエントリするのを阻止するために、正当なエントリポイント以外のいずれの場所からもエントリしてはいけない。そうしないと、高い特権レベルへアクセスすることでセキュリティ侵害になり得る。加えて、プロシージャは一般に、メモリデータに対してアクセスできなければならない。そのため特権コードによってアドレスを生成しなければならない。これらのアドレスを容易に生成するためには、ブランチゲートウェイ命令によって、特権コードのプロシージャが、単一レジスタに有効メモリ領域に対するポインタが含まれていることが確認されていることに依拠できるようにする。
【０２１５】
実施形態の例では、ブランチゲートウェイ命令によって、確実に、プロシージャが適切なエントリポイントで呼び出されるとともに、データポインタ及びスタックポインタのような他のレジスタが適切に設定できることになる。このことを確実にするためには、ブランチゲートウェイ命令では、保護仮想メモリスペースから直接“ゲートウェイ”が検索される。ゲートウェイには目的の特権レベル及びプロシージャのエントリポイントの仮想アドレスが含まれている。ゲートウェイは、これらを含むようにした仮想アドレススペースの領域に存在できるにすぎず、ゲートウェイが確実に偽造できないようにメモリ領域を書き換えることが可能な特権レベル又はそれ以下の特権レベルにアクセスするために用いることができるにすぎない。
【０２１６】
実施形態の例では、レジスタ０（ｌｐ）の内容をメモリから検索したゲートウェイと比較するとともにそれらが整合しない場合に例外トラップを発生させることにより、ブランチゲートウェイ命令は、レジスタ１（ｄｐ）に、この目的のコードアドレスのゲートウェイに対する有効ポインタが必ず含まれるようにできる。レジスタ１がゲートウェイを確実に示せば、データポインタ及びスタックポインタのような補助情報は、レジスタ１の内容によって位置決めされた値をロードすることよって設定できる。例えば、ゲートウェイに続く８バイトはプロシージャのためのデータ領域に対するポインタとして用いてもよい。
【０２１７】
実施形態の例では、ブランチゲートウェイ命令を実行する前に、レジスタ１はゲートウェイを示すように設定されなければならず、またレジスタ０は目的のコードアドレスおよび所望の特権レベルに設定されなければならない。“L.I.64.L.A r0=r1,0”命令は、レジスタ１が既に設定されている場合にレジスタ０を設定する一つの方法であるが、レジスタ０に正しい値を入れる他の手段も許容できる。
【０２１８】
実施形態の例では、同様に、システム又は特権ルーチンから戻ると特権が低下する。このことはアーキテクチャ機能によって注意深く制御される必要がなく、従って、プロシージャは特権の低下したコードアドレスに自由に分岐してもよい。通常、このようなプロシージャではスタックフレームを復元し、戻りに対してブランチダウン(branch-down)命令を使用する。
【０２１９】
一般的なダイナミックリンク・インターゲートウエイの呼び出し列２１３０の実施形態の例を図２１Ｂに示す。実施形態の例では、前記呼び出し列は、B.LINK命令の代わりにB.GATE命令を使用する点を除いて、上記で示したインターモジュール呼び出し列の場合と同一である。実際に、ｌｐレジスタの特権レベルが現行の特権レベルより高くない時にB.GATE命令が用いられる場合に、B.GATE命令はB.LINKと同一の関数を実行する。
【０２２０】
実施形態の例では、局所変数割り当てにスタックを使用する場合、呼ばれる側は、それを通過したｓｐの値を必ずしも信用できない。なぜなら、この値は偽造され得るからである。同様に、呼ばれる側が提供するいかなるポインタも、呼ばれる側がアドレス指定できるべき領域を示していることが確認されない限り直接使用すべきでない。これは、全ての値がレジスタを通りレジスタに戻されるアプリケーションプログラミングインターフェース（ＡＰＩ）を定義したりパラメータを通しかつ戻すように信頼できる中間特権ラッパ（wrapper）ルーチンを用いたりすることによって避けることができる。また以下に記載する方法も使用できる。
【０２２１】
実施形態の例では、特権の高いコードに特権の低下したルーチンを呼び出させるのが有効である。例えば、ユーザは、特権ルーチンにおけるエラーがユーザ供給エラーログルーチンを呼び出すことにより報告されるよう要求してもよい。プロシージャを呼び出すために、ブランチダウン命令を介して特権を下げることができる。プロシージャからの戻りには実際には、注意深く制御されなければならない特権の引き上げが必要である。これは、特権の低いプロシージャラッパ内にプロシージャの呼び出しを置くことにより対応され、安全なリエントリポイントを介しての呼び出しの後高い特権の領域に戻すのにブランチゲートウェイ命令が使用される。全てのレジスタを保存すること及び特権の低下したルーチンによって操作される新しいスタックフレームをセットアップすること（又は元の特権の低いスタックを復元すること）のようなスタック又は保存レジスタの破損によって特権の低下したルーチンが確実に無許可アクセスできないように特別の注意が払われなければならない。さらに、このような技法は、直接リエントリポイントを用いようとする特権なしのルーチンに対して脆弱であり、そのため、リエントリポイントに入るための許可を制御する特権状態変数を保持することが適切である。
【０２２２】
（相互特権ゲートウェイの改良−ブランチゲートウェイ）
ブランチゲートウェイ命令の実施形態の例を図２１Ｃないし図２１Ｆに示す。実施形態の例では、この演算により、より高い特権レベルにおけるものを含むプロシージャを呼び出すためのセキュリティ保護された手段が得られる。ブランチゲートウェイ命令のフォーマット及び演算コード２１６０の実施形態の例を図２１Ｃに示す。
【０２２３】
ブランチゲートウェイ命令の略図２１７０の実施形態の例を図２１Ｄに示す。実施形態の例では、レジスタｒｂの内容としては、上位６２ビットに分岐アドレス、下位２ビットに新しい特権レベルがある。前記分岐アドレスに分岐及びリンクし、特権レベルは新しい特権レベルに引き上げられる。現行のプログラムカウンタに対する後続要素の上位６２ビットは２ビットの現行実行特権と連結され、レジスタ０に置かれる。
【０２２４】
実施形態の例では、新しい特権レベルが現行特権レベルより大きい場合には、８バイト分のメモリデータが、リトルエンディアンバイトオーダー及びゲートウェイアクセス型を用いてレジスタ１で特定されたアドレスからフェッチされる。レジスタ０の元の内容が前記メモリデータと等しくない場合には、Gateway Disallowed例外が生じる。
【０２２５】
実施形態の例では、新しい特権レベルが現行特権レベルと同じである場合には、レジスタ１のチェックは実行されない。
【０２２６】
実施形態の例では、新特権レベルがメモリデータを書き込むのに必要な特権レベルより大きい場合、又は旧特権レベルがゲートウェイとしてメモリデータにアクセスするのに必要な特権より低い場合、又はアクセスが８バイト境界にアラインされない場合に、Access Disallowed例外が生じる。
【０２２７】
実施形態の例では、ｒｃフィールドが１ではない場合又はｒｄフィールドが０でない場合に、Reserved Instruction例外が生じる。
【０２２８】
実施形態の例では、図２１Ｄの例において、レベル０からレベル２へのゲートウェイが例示されている。レジスタｒｃの内容（１）で位置決めされたゲートウエイポインタはメモリからフェッチされるとともに、レジスタｒｂの内容（０）と比較される。命令は、これらの値が等しい場合に完了できるにすぎない。同時に、レジスタｒｂの内容（０）はプログラムカウンタ及び特権レベルに置かれ、次のシーケンスアドレス及び特権レベルのアドレス（０）はレジスタｒｄ内に置かれる。ゲートウェイの目的のコードはデータポインタをゲートウェイポインタ（レジスタ１）からオフセットするよう位置決めするとともに、それをレジスタ１にフェッチし、データ領域を利用できるようにする。スタックポインタは保存され、データ領域、データ領域から位置決めした別の領域、又は元のゲートウエイポインタからオフセットするよう位置決めしたデータ領域を用いてフェッチされる。
【０２２９】
実施形態の例では、この命令によって、目的のプロシージャにおいて、必ず、レジスタ０が有効戻りアドレス及び特権レベルを含み、レジスタ１がゲートウェイロケーションを示すとともにゲートウェイロケーションが８バイトごとにアラインされる。従って、レジスタ１はメモリの値にセキュリティ上安全に到達するのに用いられてもよい。リテラルプールの共用が望ましくない場合には、レジスタ１は直接リテラルプールポインタとして用いられてもよい。リテラルプールの共用が望ましい場合には、レジスタ１は、新しいリテラルプールポインタをロードするのに適当なオフセット量をもって、例えばレジスタ１からオフセットした一つのキャッシュラインで用いられてもよい。ここでは、仮想メモリシステムがキャッシュラインの粒度（granularity）に応じて動作するので、幾つかのゲートウェイロケーションが同時に生成されなければならない。
【０２３０】
実施形態の例では、ソフトウェアによって、仮想メモリで指定した領域内の任意の８バイトをゲートウェイとして適切に用いることができるか又は正当な例外が発生するかのいずれかに必ずなるようにしなければならない。例えば、隣接した８バイト同士がリテラルプールロケーションに対するポインタを含んでいる場合、ソフトウェアによって、必ず、これらリテラルプールが実行できないか又はアドレスのアラインによって実行特権レベルを引き上げできないかのいずれかにされるべきである。レジスタ１が直接リテラルプールロケーションとして用いられる場合、ソフトウェアによって、必ず、ゲートウェイとしてアクセスできるこれらのリテラルプールロケーションのためにセキュリティ侵害にならないようにしなければならない。
【０２３１】
実施形態の例では、レジスタ０は有効戻りアドレス及び特権レベルを含み、この値はゲートウェイの呼ばれる側に戻すためにブランチダウン（Ｂ．ＤＯＷＮ）命令において直接使用するのに適している。
【０２３２】
ブランチゲートウェイ命令の疑似コード２１９０の実施形態の例を図２１Ｅに示す。ブランチゲートウェイ命令の例外２１９９の実施形態の例を図２１Ｆに示す。
【０２３３】
（グループ加算（Group Add））
本発明の一実施形態によれば、プロセッサは、多様な固定小数点または整数のグループ演算を処理する。例えば、図２６Aには、バイト（８ビット）、ダブレット（１６ビット）、クワドレット（３２ビット）、オクトレット（６４ビット）、へクスレット（１２８ビット）のような様々なオペランドサイズに対応するＧｒｏｕｐＡｄｄ命令の様々な例を示している。図２６Bおよび図２６Cには、図２６Aに示す様々なＧｒｏｕｐＡｄｄ命令を実行するのに使用できるフォーマットおよび演算コードの実施形態の例を示している。図２６Bおよび図２６Cに示すように、この実施形態の例では、レジスタｒｃおよびｒｂの内容は、サイズが特定されたオペランドのグループに区分されるとともに加算され、それらの内容が指定されたり、オーバーフローがないかチェックされたり、制限されたりした場合、サイズが指定された結果のグループが得られる。該結果のグループは連結されるとともにレジスタｒｄに配置される。２つのオペランドレジスタと別の結果レジスタを使用していることがこのセクションや本明細書中の別の箇所に記載されているが、即値を使用するというような別の方法を行ってもよい。
【０２３４】
本実施形態では、例えば、指定されたオペランドサイズがバイト（８ビット）であるとともに各レジスタが１２８ビット幅である場合、各レジスタの内容は、それぞれ１６のオペランドに区分され、一つのGroup Add命令の結果として１６の異なる加算演算が行われてもよい。オペランドのグループに関わる他の命令によって、同様にグループ演算が行われてもよい。
【０２３５】
（グループセット及びグループ減算（Group Set and Group Subtract））
同様に、図２７Ａには、様々なオペランドサイズに対応するGroup Set命令およびGroup Subtract命令の様々な例を示している。図２７Ｂおよび図２７Ｃには、前記の様々なGroup Set命令およびGroup Subtract命令を実行するのに使用できるフォーマットおよび演算コードの実施形態の例を示している。図２７Bおよび図２７Cに示すように、この実施形態の例では、レジスタｒｃおよびｒｂの内容は、サイズが特定されたオペランドのグループに区分されて、Group Set命令の場合、指定された演算条件について比較され、Group Subtract命令の場合、減算される。これらの内容が指定されたり、オーバーフローがないかチェックされたり、制限されたりした場合、サイズが特定された結果のグループが得られる。該結果のグループは連結されるとともにレジスタｒｄに配置される。
【０２３６】
（アンサンブル畳込み、除算、乗算、乗加算（Ensemble Convolve, Divide, Multiply, Multiply Sum））
本実施形態では、その他の固定小数点グループ演算を利用することもできる。図２８Ａに各種オペランドサイズに対応するEnsemble Convolve命令、Ensemble Divide命令、Ensemble Multiply命令およびEnsemble Multiply Sum命令の種々の例を示す。図２８Ｂおよび図２８Ｃにフォーマットおよび種々のEnsemble Convolve命令、Ensemble Divide命令、Ensemble Multiply命令およびEnsemble Multiply Sum命令を実行するために使用できる演算コードの一実施形態を示す。図２８Ｂおよび図２８Ｃに示すように、本実施形態において、レジスタｒｃおよびｒｂの内容は指定されたサイズのオペランド群に区分され、畳込み、除算または乗算を経て結果群を生じるか、あるいは乗算および加算されて単一の結果を生じる。結果群は連結されてレジスタｒｄに入れられ、単一結果はそのままレジスタｒｄに入れられる。
【０２３７】
（アンサンブル浮動小数点加算、除算、乗算および減算（Ensemble Floating-Point Add, Divide, Multiply and Subtract））
本発明の一実施形態によれば、プロセッサは各種オペランドサイズに対応する多様な浮動小数点グループ演算を取り扱う。ここで、各種オペランドサイズとは、例えば半精度（１６ビット）、単精度（３２ビット）、倍精度（６４ビット）および４倍精度（１２８ビット）等の様々な精度の浮動小数点オペランドを意味する。図２９にその他のセクションおよび図面における詳細な命令の定義に用いるために定義された関数の例を示す。図２９に示す関数では、内部フォーマットが、（１）ｓ（サインビット）：０が正、１が負、（２）ｔ（タイプ）：ＮＯＲＭ、ＺＥＲＯ、ＳＮＡＮ、ＱＮＡＮ、ＩＮＦＩＮＩＴＹ、（３）ｅ（指数部）および（４）ｆ：（小数部）で構成される四要素構造としての無限精度浮動小数点値を表す。通常値の数学的解釈では分数の単位に２進小数点を配置し、指数：（−１）＾ｓ＊（２＾ｅ）＊ｆによって調整される。関数ＦはパックドＩＥＥＥ浮動小数点値を内部フォーマットに変換する。関数ＰａｃｋＦは、丸めおよび例外制御を用いて内部フォーマットをＩＥＥＥ浮動小数点値に再変換する。
【０２３８】
図３０Ａおよび図３１Ａに、Ensemble Floating Point Add命令、Ensemble Divide命令、Ensemble Multiply命令、Ensemble Subtract命令の種々の例を示す。図３０Ｂ−Ｃおよび図３１Ｂ−Ｃにフォーマットおよび種々のEnsemble Floating Point Add命令、Ensemble Divide命令、Ensemble Multiply命令およびEnsemble Subtract命令を実行するために使用できる演算コードの一実施形態を示す。これらの実施例のうち、Ensemble Floating Point Add命令、Ensemble Divide命令およびEnsemble Multiply命令のラベルは“EnsembleFloatingPoint”となる。また、Ensemble Floating-Point Subtract命令のラベルは“EnsembleReversedFloatingPoint”となる。図３０Ｂ−Ｃおよび図３１Ｂ−Ｃに示すように、本実施形態においては、レジスタｒｃおよびｒｂの内容が指定されたサイズのオペランド群に区分され、指定されたグループ演算が実行されることにより、結果群が生じる。結果群は連結されてレジスタｒｄに入れられる。
【０２３９】
本実施形態において、演算は、指定された丸めオプションを用いて、または特に記載されない場合には四捨五入を用いて丸められる。丸めオプションが指定された状態で浮動小数点無効演算、ゼロ除算、オーバーフローまたはアンダーフローが生じた場合、あるいは指定された状態で結果が不正確である場合に、演算は浮動小数点例外を生成する。丸めオプションが指定されない場合には、浮動小数点例外は生成されず、ＩＥＥＥ７５４のデフォルトルールに従って処理される。
【０２４０】
（アンサンブル浮動小数点スケーリング加算（Ensemble Scale-Add Floating-point））
新規の命令であるEnsemble-Scale-Addは、２組の並行乗算処理を行い、その積を対で合計することにより、プロセッサの性能を向上させる。これにより、２つのベクトルを２つの独立した値によってスケーリングし、次いで合計する必要のある演算に対するパフォーマンスが向上し、直近の従来技術によるfused-multiply-add演算と比較して２つの利点が得られる。この演算を従来技術による命令を用いて実行するためには、第１のベクトルおよび第１のスケーリング値に対するensemble-multiplyおよび第２のベクトルおよび第２のスケーリング値に対するensemble-multiply-addの２つの命令が要求される。これらの演算は明らかに従属的である。これに対し、本発明では、ベクトルの各対応要素に対する２つの乗算と加算が、単一演算として融合されている。ここで得られる第１の利点としては、性能の向上があげられる。すなわち、一実施形態において、組み合わされた演算によって多数の乗算が１回の演算で行われ、組込み乗算器の利用率が向上する。第２の利点は精度の向上である。すなわち、一実施形態において、融合された演算が十分な中間精度で計算されるため、積を中間で丸める必要がなくなる。
【０２４１】
Ensemble Scale-Add Floating-point命令の一実施形態を図２２Ａ−図２２Ｂに示す。一実施形態において、これらの演算はレジスタから３つの値を取り、オペランドのビットのパーティションについて浮動小数点算術演算群を実行し、レジスタに連結結果を入れる。Ensemble Scale-Add Floating-point命令のフォーマット２２１０の一実施形態を図２２Ａに示す。
【０２４２】
一実施形態において、浮動小数点オペランド群を表すためにレジスタｒｄおよびｒｃの内容を取る。レジスタｒｄからのオペランドは、レジスタｒｄの内容の最下位ビットから取られた浮動小数点オペランドと乗算され、次いでレジスタｒｂの内容の次の最下位ビットから取られた浮動小数点オペランドと乗算されたレジスタｒｃからのオペランドに加算される。この結果は単一浮動小数点演算において、表示可能な（representable）最近の浮動小数点値に丸められる。浮動小数点例外は生じず、ＩＥＥＥ７５４のデフォルトルールに従って処理される。その結果は連結されてレジスタｒａに入れられる。
Ensemble Scale-Add Floating-point命令の擬似コード２２３０の一実施形態を図２２Ｂに示す。一実施形態において、Ensemble Scale-Add Floating-point命令に対する例外は存在しない。
【０２４３】
（単一命令における３入力ビット単位ブール演算の実行（Group Boolean））
本発明のさらに別の観点において、単一命令で３入力ビット単位ブール演算を実行するためのシステムおよび方法が提供される。新規の方法はこのような演算の８つの可能な出力状態を７ビットにエンコードし、この７ビットを再び８つの状態にデコードするのに使用される。
【０２４４】
Group Boolean命令の一実施形態を図２３Ａ−図２３Ｃに示す。一実施形態において、これらの演算は３つのレジスタからオペランドを取り、オペランドの対応ビットについてブール演算を実行し、その連結結果を第３のレジスタに入れる。図２３ＡにGroup Boolean命令のフォーマット２３１０の一実施形態を示す。
【０２４５】
図２３ＢにGroup Boolean命令のプロシージャ２３２０の一実施形態を示す。一実施形態において、３つの値がレジスタｒｄ、ｒｃおよびｒｂの内容から取られる。ｉｈフィールドおよびｉｌフィールドは３ビットの関数を指定し、単一ビット結果を生成する。指定された関数の値が各ビット位置で求められ、その結果は連結されてレジスタｒｄに入れられる。一実施形態において、レジスタｒｄはこの命令のソースでありデスティネーションである。
【０２４６】
一実施形態において、関数は８ビットで指定される。これにより、各ビット位置における３つのソースビットの想定しうる値に対する結果が与えられる。
【０２４７】
【表８】
2007531072.tif 000010
【０２４８】
一実施形態において、関数は即値のビットを再配列することによって変更することができる。下表に即値ｆの再配列によって同じ関数に対するオペランドｄ、ｃ、ｂをどのように再順序付けすることができるかを示す。
【０２４９】
【表９】
2007531072.tif 000011
【０２５０】
一実施形態において、このような再配列を利用することにより、形式：ｂ＝ｆ（ｄ、ｃ、ｂ）の演算を正規の形式：ｂ＝ｆ（ｂ、ｄ、ｃ）に再コード化することができる。例えば、関数：ｂ＝ｆ（ｄ、ｃ、ｂ）＝ｄ？ｃ：ｂはコードできないが、等価の関数：ｄ＝ｃ？ｂ：ｄは、ｆ（ｄ、ｃ、ｂ）⇒ｆ（ｃ、ｂ、ｄ）のルールに従い、１１００１０１０であるｄ＝ｆ（ｄ、ｃ、ｂ）＝ｄ？ｃ：ｂのコードを１１０１１０００に再配列することにより求められる。
【０２５１】
（エンコーディング）
一実施形態において、この再配列の格別の特徴は、８つの関数指定ビットをこの命令において７つの即値ビットに圧縮する方法の基本原理である。上記の表に見られるように、一般的な場合、ｆ（ｄ、ｃ、ｂ）からｆ（ｄ、ｂ、ｃ）へのオペランド再配列（ｒｃおよびｒｂの交換）には、値ｆおよびｆの交換ならびに値ｆおよびｆの交換が要求される。
【０２５２】
一実施形態において、この命令が実行し得る２５６の関数のうち１／４（６４の関数）はこの再配列によって変化しない。これらの関数はｆ＝ｆかつｆ＝ｆという性質を有している。ｒｃおよびｒｂの値（ｒｃおよびｒｂはレジスタ修飾子であってレジスタの内容ではない）は自由に交換可能であり、値ｆを示すために昇順または降順でソートされる（ｒｃ＝ｒｂのときは特別なケースとして、ｒｃおよびｒｂのソートによって情報搬送が行われない。しかしながら、値ｆ、ｆ、ｆおよびｆだけはこの場合でも生じうるので、値ｆ、ｆ、ｆおよびｆはこの場合コード化する必要がなく、特定の処理は要求されない）。これらの関数は即値フィールドで値ｆ、ｆ、ｆ、ｆおよびｆによって、さらにｒｃ＞ｒｂかどうかに応じて値ｆによってエンコードされる。したがって、６４の関数に対して３２の即値が用いられる。
【０２５３】
一実施形態において、さらに別の１／４の関数は、ｆ＝１かつｆ＝０である。これらの関数は、ｒｃおよびｒｂ、ｆおよびｆならびにｆおよびｆの交換によって再コード化される。これらはｆ＝０かつｆ＝１である１／４の関数と同じエンコーディングを共有し、即値フィールドの値ｆ、ｆ、ｆ、ｆ、ｆおよびｆによりエンコードされる。このように１２８の関数に対して６４の即値が用いられる。
【０２５４】
一実施形態において、残りの１／４の関数はｆ＝ｆかつｆ≠ｆである。このうちの半分がｆ＝１かつｆ＝０であり、ｒｃおよびｒｂ、ｆおよびｆならびにｆおよびｆの交換によって再コード化される。これらはｆ＝０かつｆ＝１である関数の８番目と同じエンコーディングを共有し、即値フィールドの値ｆ、ｆ、ｆ、ｆおよびｆによりエンコードされる。このように６４の関数に対して３２の即値が用いられる。
【０２５５】
一実施形態において、関数のエンコーディングを表にまとめる。
【０２５６】
【表１０】
2007531072.tif 000012
【０２５７】
一実施形態において、関数のデコーディングを表にまとめる。
【０２５８】
【表１１】
2007531072.tif 000013
【０２５９】
上記の説明から分かるように、エンコードされた命令を生成するコンパイラまたはアセンブラの一実施形態は、命令をエンコードする上記のステップを実行し、即値フィールドの値ｆおよびｆ、値ｆおよびｆを比較して即値フィールドをエンコードするためのいくつかの手段のうちどれが使用されるかを決定する。また、エンコードされた命令へのｔｒｂおよびｒｔｃレジスタ修飾子の配置は値ｆ（またはｆ）および値ｆ（またはｆ）に依存している。
【０２６０】
図２３ＣにGroup Boolean命令の擬似コード２３３０の一実施形態を示す。このコードから分かるように、この命令をデコードする回路の一実施形態は、即値ビットｉｈおよびｉｌ５がゼロの時にレジスタ修飾子ｒｃおよびｒｂを演算比較することにより値ｆおよびｆを生成し、ｒｃ＞ｒｂの時にｆおよびｆに対して１つ（１）の値を生成する。一実施形態において、Group Boolean命令に対する例外は存在しない。
【０２６１】
（コードの単純反復ループ分岐予測の改良）
本発明のさらに別の観点では、コードの単純反復ループ分岐予測を改良するシステムおよび方法が記載される。このような単純ループにおいては、ループの終端はループの始端への後方向の条件付き分岐で示される。このようなループの条件付き分岐は、それが設けられないときには最終繰り返しを除くループの各繰り返しに対して設けられる。従来技術による分岐予測システムは、このような条件付き分岐の大部分を適切に予測するために有限状態機械演算を使用しているが、ループの繰り返し回数についての特定の情報がない場合には、ループ終端時に予想誤差が生じる。
【０２６２】
本発明のシステムおよび方法は、分岐が不成立になる前に分岐が何回成立することになるかを指示するカウントフィールドを設けることを含み、コンパイラがループの繰り返し回数を指定できる時に単純ループの最初と最後の分岐の両方を適切に予測する能力を高める。これにより、従来技術の分岐予測ハードウェアにおいて生じるように、ループが終端して命令の実行がループを超えて継続される時に、ループの終端における分岐の予測ミスを回避することによって性能が向上する。
【０２６３】
（分岐ヒント（Branch Hint））
Branch Hint命令の一実施形態を図２４Ａ−図２４Ｃに示す。一実施形態において、この演算はレジスタで指定される、先の分岐ロケーション（future branch location）を示す。
【０２６４】
一実施形態において、この命令はプロセッサの命令フェッチ部に対し、レジスタｒｄの内容によって指定されたアドレスに対する現行の後続命令に続くｓｉｍｍ命令で分岐がｃｏｕｎｔ回生じる可能性があることを指示する。図２４ＡにBranch Hint命令のフォーマット２４１０の一実施形態を示す。
【０２６５】
一実施形態において、ｃｏｕｎｔ回の分岐後、命令フェッチ部は、現行の後続命令に続くｓｉｍｍ命令での分岐は起こらないだろうと推定する。ｃｏｕｎｔがゼロの場合は、このヒントは分岐が６３回より多く生じる可能性があることを命令フェッチ部に指示する。
【０２６６】
一実施形態において、レジスタｒｄの内容がクワドレットバウンダリー（quadlet boundary）に配列されない時にアクセス不許可例外が生じる。
【０２６７】
図２４ＢにBranch Hint命令の擬似コード２４３０の一実施形態を示す。図２４ＣにBranch Hint命令の例外２４６０の一実施形態を示す。
【０２６８】
（プロセッサ命令への浮動小数点情報の取り込み）
本発明のさらに別の観点において、プロセッサ命令に浮動小数点情報を組み込む技術が提供される。関連する米国特許第５８１２４３９号には、浮動小数点命令の丸めおよび例外の制御を命令そのものに組み込むシステムおよび方法が記載されている。本発明は上記発明の延長であり、浮動小数点命令の特定のクラスについて、丸めが指定されただけでなく、例外のデフォルト処理も指定された別個の命令を含むものである。
【０２６９】
（アンサンブル浮動小数点シンク（Ensemble Sink Floating-point））
例示的な実施形態において、Ensemble Sink Floating-point命令（浮動小数点の値を整数値に変換する命令）は、３つの新たな組み合わせ（Ｚ．Ｄ…ゼロ方向への丸め処理（round toward zero）とデフォルト例外処理（default exception handling），Ｆ．Ｄ…切り下げ丸め処理（floor rounding）とデフォルト例外処理，Ｃ．Ｄ…切り上げ丸め処理（celing rounding）とデフォルト例外処理）と同様に、あらかじめ指定された組み合わせのすべて（default…近似丸め処理（near rounding）とデフォルト例外（default exception），Ｚ…ゼロ方向への丸め処理と例外の捕獲（trap on exceptions），Ｎ…最近接値への丸め処理（round to nearest）と例外の捕獲，Ｆ…切り下げ丸め処理（マイナス無限大へ向かう丸め）と例外の捕獲，Ｃ…切り上げ丸め処理（プラス無限大へ向かう丸め）と例外の捕獲，Ｘ…不正確（inexact）やその他の例外（other exceptions）の捕獲）を含む命令における制御で利用可能である。（その他の組み合わせ：Ｎ．Ｄはデフォルトと同等である。Ｘ．Ｄ…不正確の捕獲であるが、特に有用ではないがその他の例外に対するデフォルト処理が可能である。）
図２５Ａ〜図２５Ｃは、Ensemble Sink Floating-point命令の例示的な実施形態を示す。例示的な実施形態において、これらの演算は、レジスタから１つの数値データ（value）を取得し、オペランドにおけるパーティション（partitions）に整数値への浮動小数点算術変換の集合を実行し、連結結果をレジスタに入れる。図２５Ａは、Ensemble Sink Floating-point命令の演算コード，選択（selection）およびフォーマット２５１０の例示的な実施形態を示す。
【０２７０】
例示的な実施形態において、レジスタｒｃのコンテンツ（contents）は、指定された精度を有する浮動小数点のオペランドに分割され、整数値に変換される。結果は、連結されて、レジスタｒｄにセットされる。
【０２７１】
例示的な実施形態において、演算は、指定された丸めオプション（specified round option）を使用して、または、指定されていない場合には最近接値への丸め処理（round to nearest）を使用して、丸められる。丸めオプションが指定されている場合には、デフォルト例外処理（default exception handling）が指定されていなければ、浮動小数点無効演算（floating point invalid operation），ゼロによる除算（divide by zero），オーバーフロー（overflow），またはアンダーフロー（underflow）が生じるときに、または、規定されていれば結果が不正確であるときに、演算は浮動小数点例外（floartiing point exception）を発生する（raise）。丸めオプションが指定されていない場合、または、デフォルト例外処理が指定されている場合には、浮動小数点例外は発生せず、IEEE 754のデフォルトルール（default rule）に従って処理される。
【０２７２】
図２５Ｂは、Ensemble Sink Floating-point命令の擬似コード２５３０の例示的な実施形態を示す。図２５Ｃは、Ensemble Sink Floating-point命令の例外２５６０の例示的な実施形態を示す。
【０２７３】
図２５Ｄは、Ensemble Sink Floating-point命令の擬似コード２５７０の例示的な実施形態を示す。
【０２７４】
（クロスバーの圧縮，拡張，回転，シフト（Crossbar Compress，Expand，Rotate，and Shift））
本発明の１つの実施形態において、クロスバースイッチユニット（例えば、ユニット１４２や１４８）は、前述のように、データ処理演算（data handling operations）を実行する。図３２Ａに示されたように、そのようなデータ処理演算は、Crossbar Compress演算，Crossbar Expand演算，Crossbar Rotate演算，およびCrossbar Shift演算についての様々な例を含むことも可能である。図３２Ｂおよび図３２Ｃは、様々なCrosbar Compress命令，Crossbar Rotate命令，Crossbar Expand命令，Crossbar Shift命令を実行するために使用可能であるフォーマットおよび演算コードの例示的な実施形態を示す。図３２Ｂおよび図３２Ｃに示されたように、この例示的な実施形態において、レジスタｒｃのコンテンツは、指定されたサイズを有するオペランドの集合に分割され、レジスタｒｂのコンテンツの一部によって指定された量（amount）に基づいて圧縮され，拡張され，回転され，または，シフトされて、結果の集合を生成（yielding）する。結果の集合は、連結されて、レジスタｒｄにセットされる。
【０２７５】
様々なGroup Compress演算は、オペランドの集合を低精度のデータから高精度のデータに変換することも可能である。各々のビットフィールド（bit field）についての任意の半分のサイズのサブフィールドは、選択されて、結果の中に現れることが可能である。例えば、図３２Ｄは、X.COMPRESS rd=rc,16,4演算を示す。X.COMPRESS rd=rc,16,4演算は、１６バイトデータ（hexlet）における４バイトデータ（quadlet）の各々のビット19..4を選択する。様々なGroup Shift演算は、指定された方向（例えば、右へのシフトや、左へのシフト）において、指定されたビット数に基づいてオペランドの集合をシフトさせることが可能である。図３２Ｃを見ても分かるように、特定のGroup Shift Left命令は、各々のオペランドに対して、シフトに関連する中身のない（empty）下位のビットを除去すること（ゼロにすること）を引き起こす（involve）ことも可能である。特定のGroup Shift Right命令は、各々のオペランドに対して、シフトに関連する中身のないの上位ビットを除去すること（ゼロにすること）を引き起こすことも可能である。さらに、特定のGroup Shift Right命令は、各々のオペランドに対して、符号ビットのコピーを伴うシフトに関連する中身のない上位ビットを埋める（filling）こと引き起こすことも可能である。
【０２７６】
（抽出）
本発明の１つの実施形態において、データ処理演算（data handling operations）は、Crossbar Extract命令を含むことも可能である。図３３Ａおよび図３３Ｂは、Crossbar Extract命令を実行するために使用可能であるフォーマットおよび演算コードの例示的な実施形態を示す。図３３Ａおよび図３３Ｂに示されたように、この例示的な実施形態において、レジスタｒｄ，ｒｃ，およびｒｂのコンテンツは、取り出される（fetched）。指定された演算は、これらのオペランドで実行される。結果は、レジスタｒａにセットされる。
【０２７７】
Crossbar Extract命令は、様々な方法で異なるオペランドからビットを抽出することを可能にする。特に、レジスタｒｂのコンテンツのビット31..0は、データを抽出する方法と特定の演算に対してその演算を実行する方法とを制御するいくつかのパラメータを指定する。制御フィールドのポジションは、ソース位置（source position）に対して、動的な演算処理（dynamic computation）のための固定制御値（fixed control value）を追加することを可能にし、制御フィールドの下位の１６ビットに対して、単一のGCOPYI.128命令（付録を参照）によってより簡潔な抽出ケース（the simpler extract cases）のいくつかについてセットすることを可能にする。制御フィールドは、さらに、下位の８ビットがゼロでない場合に丸め処理ではなく切り捨て処理（truncation）で１２８ビット抽出が実行されるように、配列される。
【０２７８】
【表１２】
2007531072.tif 000014
【０２７９】
以下のテーブルには、各ラベルについての意味が記述されている。
【０２８０】
【表１３】
2007531072.tif 000015
【０２８１】
９ビットgsspフィールドは、数式 gssp=512-4*gsize+spos に従って、集合サイズgsizeおよびソース位置sposの両方を符号化する。集合サイズgsizeは、値域1..128における２のべき（累乗）である。ソース位置sposは、値域0..(2*gsize)-1の中に存在する。
【０２８２】
s,n,m,l,およびrndのフィールドにおける数値は、以下の意味を有する。
【０２８３】
【表１４】
2007531072.tif 000016
【０２８４】
図３３Ｃに示されたように、X.EXTRACT命令について、m=0のとき、パラメータが解釈されてレジスタｒｄおよびｒｃの連結コンテンツからフィールドが選択され、連結され且つレジスタｒａにセットされた数値が抽出される。図３３Ｄに示されたように、クロスバーの結合抽出（crossbar merge extract）（X.EXTRACT  m=1のとき）について、パラメータが解釈されてレジスタｒｃのコンテンツとともにレジスタｒｄのコンテンツからのフィールドが結合される。結果は、連結されて、レジスタｒａにセットされる。
【０２８５】
（シャッフル）
図３４Ａに示されたように、本発明の１つの実施形態によれば、データ処理演算は、様々なShuffle命令を含むことも可能である。Shuffle命令は、レジスタのコンテンツをオペランドの集合に分割して種々の方法で交互配置（interleaved）することを可能にする。図３４Ｂおよび図３４Ｃは、様々なShuffle命令を実行するために使用可能であるフォーマットおよび演算コードの例示的な実施形態を示す。図３４Ｂおよび図３４Ｃに示されたように、この例示的な実施形態において、ｒｃおよびｒｂのフィールドが同等であるか否かに依存して、２つの演算のうち１つが実行される。図３４Ｂと以下の記述は、rd,rc,rb,op,v,w,h,およびsizeのフィールドのフォーマットとrd,rc,rb,op,v,w,h,およびsizeのフィールドの関係とについて説明している。
【０２８６】
この実施形態において、ｒｃおよびｒｂのフィールドが同等である場合、１２８ビットオペランドが、レジスタｒｃのコンテンツから取得される。サイズvのアイテムは、wパイルに分割されて、sizeビットの集合内において、opの値に応じて一緒にシャッフルされる。結果は、レジスタｒｄにセットされる。
【０２８７】
さらに、ｒｃおよびｒｂのフィールドが同等ではない場合、レジスタｒｃおよびｒｂのコンテンツが、２５６ビットのオペランドの中に連結される。サイズvのアイテムは、ｗパイルに分割されて、opの値に従って一緒にシャッフルされる。hの値，opのサブフィールドに依存して、２５６ビットのシャッフルされたコンテンツのうち下位の１２８ビット（ｈ＝０）または上位の１２８ビット（ｈ＝１）が、結果として選択される。結果はレジスタｒｄにセットされる。
【０２８８】
図３４Ｄに示されたように、１６バイトデータ命令（hexlet instruction）(X.SHUFFLE.128 rd=rcb.8.4)内におけるクロスバー４分割シャッフル（crossbar 4-way shuffle）の一例は、１２８ビットのオペランドを１６バイトに分割して、バイトを４つに分割することも可能である（分割方法は、以下のダイアグラムにおいて形態を変化することによって示される）。４つのパーティションは、完全にシャッフルされて、１２８ビットの結果を生成する。図３３Ｅに示されたように、triclet命令（X.SHUFFLE.256 rd=rc,rb,8,4,0）内におけるバイトのクロスバー４分割シャッフルの一例は、ｒｃとｒｂのコンテンツを連結して、その後、２５６ビットのコンテンツを３２バイトに分割して、バイトを４つに分割することも可能である（分割方法は、以下のダイアグラムにおいて形態を変化することによって示される）。４つのパーティションのうち下位の半分は、完全にシャッフルされて、１２８ビットの結果を生成する。
【０２８９】
最新の即値ｈを１（X.SHUFFLE.256 rd=rc,rb,8,4,1）に変化させることにより、４つのパーティションの上位半分で同じ機能を実行する演算を修正してもよい。ｒｃとｒｂが等しい場合は、以下のテーブルは、ｏｐフィールドの値と、ｓｉｚｅとｖとｗに関連した値とを示す。
【０２９０】
【表１５】
2007531072.tif 000017
【０２９１】
ｒｃとｒｂが等しくない場合は、以下のテーブルは、ｏｐ４．．０フィールドの値と、ｓｉｚｅとｖとｗに関連した値とを示す。Ｏｐ５はｈの値であり、ｈは、それぞれのパーティションの上位又は下位の、どちらの半分が結果の中へシャッフルされるかを制御する。
【０２９２】
【表１６】
2007531072.tif 000018
【０２９３】
（拡張ガロア解法（Wide Solve Galois ））
Wide Solve Galois命令 の例示的な実施形態が、図３５Ａ〜３５Ｂに示される。図３５Ａは、方程式を反復して解くための方法と装置をあげて本発明を説明する。説明される特定の動作は、S,L,およびWが次数がそれぞれ2T,T+1,およびTのGF(256)等のガロア体の多項式である場合の、ガロア多項式一致方程式L*S=W(mod z**2T)の種類向きの拡張ソルバーである。この問題の解決が、デジタル通信や記憶媒体をより信頼性のあるものにするために符号ブロックにおいて最大Ｔ個までのエラーを最適に訂正する、リード・ソロモン符号等のある種のエラー訂正コードにおける最も重要な計算ステップである。この実施を支持する数学的処理のさらに進んだ詳細は（Sarwate, Dilip V. and Shanbhag, Naresh R. "High-Speed Architectures for Reed-Solomon Decoders", 2000年6月7日改訂, IEEE Trans.VLSI Systems に提出。, http://icims.csl.uiuc.edu/-shanbhag/vips/publications/bma.pdf からアクセス可能であり、それらの全体を参照としてここに援用する。）から得られる。
【０２９４】
図３５Ａの装置は、本発明で参照された例示的な実施形態にすでに含まれるメモリ片（strip）、ガロア乗算器、ガロア加算器、マルチプレクサ、および制御回路を含む。Wide Matrix Multiply Galois命令の説明から理解できるように、従来よりガロア乗算と関連づけられる多項式剰余ステップは、剰余を求めその後加算するステップを、多項式加算を行いその後剰余を求めるステップに交換することによって、ガロア加算の後に移動させることができる。
【０２９５】
この装置は、左の反復制御ブロックによる指定に従って、多数の連続反復ステップのために組み込まれたメモリ片に対して読み出しと書き込みの両方を行う。それぞれのメモリ片には、最初に多項式Ｓがロードされ、2Tの反復が完了した時（示される例では、T=4）、上のメモリ片は、所望の解多項式であるLとWとを収容している。図３５Ｂのコードブロックは、図３５Ａの装置の動作の詳細をＣ言語表記を用いて説明する。
【０２９６】
類似したコードと装置が、様々な大きさの整数および浮動小数点数等、他の数学分野でのスカラー量の乗算加算反復方程式ソルバー用、および正定値行列やサイメトリックス(symetrix)行列、または上三角行列もしくは下三角行列等の特定の特性の行列オペランド用に開発され得る。
【０２９７】
（拡張変換スライス（Wide Transform Slice））
Wide Transform Slice命令の例示的な実施形態が、図３６Ａ〜図３６Ｂに示される。図３６Ａは、周波数領域での通信や画像解析等に必要とされるフーリエ変換等の変換における非常に速い計算のための方法と装置を説明する。この装置には、１６の複素乗算器の４×４の配置が示され、それぞれ第１の拡張オペランドキャッシュに隣接している。第２の拡張オペランドキャッシュ、または組み込まれた係数メモリアレイが、拡張組み込みキャッシュによるデータアクセスで乗算器によって乗算されたオペランドを供給する。結果として生じる積は、不可分変換の片に供給される。片は、この好まれる実施形態において、基数４または基数２のバタフライユニットである。これらのユニットは、乗算器の列または行から積を受け取り、結果を、指定されたペース(stride)で桁反転させて第１の拡張オペランドキャッシュに再び置く。
【０２９８】
汎用レジスタraは、サイズや構造の指定子のみならず、第１の拡張オペランドのアドレスをも収容し、第２の汎用レジスタrbは、サイズや構造の指定子のみならず、第２の拡張オペランドのアドレスをも収容する。
【０２９９】
更なる汎用レジスタrcは、精度等のパラメータ、すなわち結果抽出パラメータを指定する（本発明について説明されるさまざまな抽出（Extract）命令のように）。
【０３００】
別の実施形態では、第１と第２のいずれのメモリオペランドでもアドレス指定によって獲得できる特有のメモリを用いることによって、拡張されたメモリに第２のメモリオペランドが第１のメモリオペランドと一緒に置かれてもよい。
【０３０１】
別の実施形態では、結果が第３の拡張オペランドキャッシュメモリに置かれる。この第３のメモリオペランドは、再度別のメモリアドレス指定を用いることによって、第１のメモリオペランドと組み合わされてもよい。拡張オペランドキャッシュタグを再びつけることによって、第３のメモリが第１のメモリと交代で記憶場所となってもよい。このようにして、Wide Transform Slice命令の完了時には、第１のメモリオペランド用に指定された位置に結果が現れるように、拡張オペランドキャッシュタグが再びつけられる。この交代は、ふさわしい場所でない場所を指定する変換ステップを可能にし、中止されて実行フローの中断の結果として要求される場合には、再スタートが続いて行われる動作を可能にする。
【０３０２】
図３６Ｂのコードブロックは、図３６Ａの装置の動作の詳細をＣ言語表記を用いて説明する。類似したコードと装置が、他の変換および、多項式、ガロア体、および様々な大きさの整数と浮動小数点の実数や複素数等の他の数学分野のために開発され得る。
【０３０３】
例示的な実施形態において、Wide Transform Slice命令はまた、命令のスカラー量の結果として値を汎用レジスタrcに配置されるように戻し、すべての結果要素の最上位ビットの位置を計算する。これは、抽出制御、および他の情報が配置されるのと同じオペランドであるが、代わりの実施形態では、別個のレジスタであってもよい。特に、例示的な実施形態において、最上位ビットのこの位置は、ベクトル量のブール（Boolean）演算結果を生じる、結果成分のうち並列なサブセットについての一連のブール演算を用い、演算の終わりにおいて、ブール演算結果のベクトル量がスカラー量のブール値に換算し、スカラー量のブール値の最上位ビットを決定することによって計算されてもよい。
【０３０４】
抽出制御や他の情報を表す値を最上位ビットのこの位置に加えることによって、Wide Transform Slice命令の次の段階で用いられる適切な拡大縮小パラメータが得られる。最上位ビットの情報を蓄積することによって、変換全体の包括的な拡大縮小値を得ることができ、変換された結果は、先行技術の固定拡大縮小方式を超える精度を維持する。
【０３０５】
（拡張畳み込み抽出（Wide Convolve Extract））
Wide Convolve Extract命令の例示的な実施形態が、図３７Ａ〜図３７Ｋに示される。同様の方法と装置が、１次元（1-D）または２次元（2-D）の畳み込み（convolution）の方法によるディジタルフィルタリングと１次元または２次元の相関（correlation）の方法による動き評価とのいずれにも応用されうる。相関は１次元または２次元のパターンの順序を逆にして畳み込みを行うことによって計算され得るので、同じ操作が相関に用いられてもよい。したがって、ここで説明される畳み込み命令は、相関に用いられてもよいし、または、係数オペランドブロックの順が１次元または２次元で逆にされることを除いては、ここで説明される畳み込み命令に類似するWide Convolve Extract命令が組み立てられてもよい。
【０３０６】
ディジタルフィルタ係数、または評価テンプレートブロックは、一つの拡張オペランドメモリに記憶され、映像データは２番目の拡張オペランドメモリに記憶される。映像データの単独の行または列は、映像データの配置とテンプレートブロックおよび乗算器との関係の対応する変更を伴って、映像アレイに移される。２番目の組み込みメモリのデータを部分的に新しくして移動させるこの方法により、映像に対するテンプレートの相関が、乗算器アレイにとって大幅に強調される効果的な帯域幅と共に計算されうる。なお、本実施形態においては、アレイの移動よりもむしろ循環アドレス指定が採用されており、移動量やスタート位置は、命令のパラメータと同様に指定される。
【０３０７】
図３７Ａと３７Ｂは、Wide Convolve Extract命令を実行するために用いられうるフォーマットとオペレーションコードの例示的な実施形態を示す。図３７Ａと３７Ｂに示されるように、この例示的な実施形態において、汎用レジスタrcとrdの内容は、拡張オペランド指定子として用いられる。これらの指定子は、拡張オペランド用の仮想のアドレス、拡張オペランドのサイズ、および構造を決定する。仮想のアドレスとオペランドサイズが用いられ、指定されたサイズの第１および第２の値がメモリからロードされる。集合のサイズと他のパラメータが汎用レジスタrbの内容から指定される。値は、指定されたサイズと構造のオペランドの集合に分割され、畳み込まれ、値の集合を生み出す。値の集合は、指定された通りに、端数を丸められ、制限されており、指定されたサイズの結果の集合をもたらす。結果の集合は連結リストに配列され、汎用レジスタraに配置される。
【０３０８】
拡張畳み込み抽出（wide-convolve-extract）命令(W. CONVOLVE. X. B, W. CONVOLVE. X. L)は、データパスのサイズではなく、メモリオペランドの範囲のみによって制限される最大のサイズの分割アレイの乗算を実行する。メモリオペランドの範囲、サイズおよび構造のパラメータは、常に２のべき乗として指定される。他のパラメータがさらに、有効なオペランドの範囲を２のべき乗の範囲に制限してもよい。
【０３０９】
図３７Ｃに示されるように、例示的な実施形態において、拡張オペランド指定子のそれぞれは、所望のメモリオペランドのバイト範囲の２分の１を指定子に加えることによって、メモリオペランドの範囲を指定する。拡張オペランド指定子のそれぞれは、所望のバイト幅の４分の１を指定子に加えることによって、メモリオペランドの構造を指定する。各メモリオペランドの縦幅はオペランドの範囲をオペランドの横幅で割ることによって推測されうる。１次元ベクトルは、１の高さ、および範囲と等しい幅を持つ行列として表される。代わりの実施形態では、ここでの仕様の一部が命令の一部として含まれるものであってもよい。
【０３１０】
例示的な実施形態において、Wide Convolve Extract命令は、様々な方法で計算された値の集合からビットが抽出されるのを許容する。例えば、汎用レジスタrbの内容のビット31..0は、データが抽出される方法を制御する様々なパラメータを指定する。制御領域の位置およびデフォルト値は、ソース位置が動的な計算用の固定された制御値に加算されることを見越しており、制御領域の下位１６ビットが、単一のGCOPYI命令によって、より単純なケースのいくつかに設定されることを見越している。代わりの実施形態では、ここでの明細の一部が命令の一部として含まれるものであってもよい。
【０３１１】
【表１７】
2007531072.tif 000019
【０３１２】
下の表は、各ラベルの意味を説明する。
【０３１３】
【表１８】
2007531072.tif 000020
【０３１４】
９ビットのgssp領域は、集合のサイズ（group size）であるgsizeとソース位置（source position）であるsposとの両方を、公式gssp =512-4*gsize + sposに従ってエンコードする。集合のサイズであるgsizeは、1..128の範囲の２のべき乗である。ソース位置であるsposは、０..(2*gsize)-1の範囲にある。
【０３１５】
x,s,n,m,1の値、およびrnd領域は次の意味を有する。
【０３１６】
【表１９】
2007531072.tif 000021
【０３１７】
汎用レジスタrbの中身の95..32ビットは、メモリオペランドの部分の選択を制御する様々なパラメータを指定する。制御領域の位置やデフォルト値は、乗数の０の長さのフィールドがデフォルトで０になり、被乗数の始点位置領域計算が３２ビット計算を用いることによって他の領域へのオーバーフローを起こさせることなくラップすることを可能にする。
【０３１８】
【表２０】
2007531072.tif 000022
【０３１９】
下の表は、各ラベルの意味を説明する。
【０３２０】
【表２１】
2007531072.tif 000023
【０３２１】
３２ビットのmpos領域は、被乗数の始点（origin）の水平位置および垂直位置をエンコードし、その位置は、乗数の０番目の要素が結果の０番目の要素を生じるように組み合わせる被乗数要素の位置である。この領域で変化する値は、様々な結果が、２つの拡張オペランドを変化させることなく計算されることを可能にする。mpos領域は被乗数オペランドの開始からの１バイトのオフセットである。
【０３２２】
３２ビットのmzero領域は、０の値を有する乗数オペランドの部分をエンコードし、それはかけ算や加算から省略されてもよい。実施では、命令を実行するための時間および／または電力を減らすために、この領域に０でない値を用いてもよいし、あるいは、この領域の内容を無視してもよい。実施では、dmsize-..dmsize-(mzero*8)のビットの乗数オペランドを０の値と考えて、このビット範囲から得られる任意の乗数の乗算を省いてもよい。mzero領域は、乗数オペランドの最後から１バイトのオフセットである。
【０３２３】
拡張オペランドの仮想アドレスはアラインされていなければならず、すなわち、バイトアドレスは、バイトで表されるオペランド範囲の正確な倍数でなければならない。もしアドレスがアラインされていなければ、仮想アドレスは妥当な指定子にエンコードされ得ない。妥当でない指定子には、「オペランド境界」例外（"Operand Boundary" exception）の原因となるものもある。
【０３２４】
Z(ゼロ)に端数を丸めることは、符号なしの抽出演算のためには定義されておらず、F（フロア）丸めが代用される。F丸めにより、符号なしの結果が下方に適切に丸められる。
【０３２５】
オペランドメモリやキャッシュ、または正確に合計される値の数の制限によってオペランドの範囲が制限されてもよい。それにより、予約命令（Reserved Instruction）例外が引き起こされる。
【０３２６】
図３７Ｄと３７Ｅに示されるように、固有のレジスタ値の例として、拡張畳み込み抽出ダブレット(wide-convolve-extract-doublets)命令(W.CONVOLVE.X.B or W.CONVOLVE.X.L)は、rb=24で開始し、メモリベクトルrc[c31 c30.. c1 c0]をメモリベクトルrd[d15 d14... d1 d0]で畳み込み、汎用レジスタrbの内容によって指定される通りに丸められて制限された積[c16d15+c17d14+...+c30d1+c31d0 c15d15+c16d14+...+c29d1+c30d0 ... c10d15+c11d14+...+c24d1+c25d0 c9d15+c10d14+...+c23d1+c24d0]を生じる。値c8...c0は、計算で用いられず、どんな値でもよい。
【０３２７】
固有のレジスタ値の例として、図３７Ｆと３７Ｇに示されるように、rb=8のmposとrb=48のmzero（それで、長さ=(512-mzero)*dmsize/512=13）における拡張畳み込み抽出ダブレット(wide-convolve-extract-doublets)命令(W.CONVOLVE.X.L)は、メモリベクトルrc[c31 c30.. c1 c0]をメモリベクトルrd[d15 d14... d1 d0]で畳み込み、指定される通りに丸められて制限された積[c3d12+c4d11+...+c14d1+c15d0 c2d12+c3d11+...+c13d1+c14d0 ... c29d12+c30d11+...+c8d1+c9d0 c28d12+c29d11+...+c7d1+c8d0]を生じる。この場合、値の有効な範囲がc0からc31...28にラップするようにスタート位置が配置される。値c27...c16は、計算で用いられず、どんな値でもよい。長さのパラメータは13に設定されるので、d15...d13の値は０でなければならない。
【０３２８】
固有のレジスタ値の例として、図３７Ｈと３７Ｉに示されるように、rb=24のmposとrc=rd=4のvsizeにおける拡張畳み込み抽出ダブレット２次元(wide-convolve-extract-doublets-two-dimensional)命令(W.CONVOLVE.X.B or W.CONVOLVE.X.L)は、メモリベクトルrc[c127 c126 ... c31 c30 ...c1 c0]をメモリベクトルrd[d63 d62 ... d15 d14 ... d1 d0]で畳み込み、汎用レジスタrbの内容によって指定される通りに丸められて制限された積[c113d63+c112d62+...+c16d15+c17d14+...+c30d1+c31d0 c112d63+c111d62+...+c15d15+c16d14+...+c29d1+c30d0 ... c107d63+c106d62+...+c10d15+c11d14+...+c24d1+c25d0 c106d63+c105d62+...+c9d15+c10d14+...+c23d1+c24d0]を生じる。
【０３２９】
固有レジスタ値の例として、図３７Ｊと３７Ｋに示されるように、rb=12のmposにおける拡張畳み込み抽出複素ダブレット(wide-convolve-extract-complex-doublets)命令(rbで設定されたnと共にW.CONVOLVE.X.B or W.CONVOLVE.X.L)は、メモリベクトルrc[c15 c14.. c1 c0]をメモリベクトルrd[d7 d6 ... d1 d0]で畳み込み、汎用レジスタrbの内容によって指定される通りに丸められて制限された積[c8d7+c9d6+...+c16d1+c15d0 c7d7+c8d6+...+c13d1+c14d0 c6d7+c7d6+...+c12d1+c13d0 c5d7+c6d6+...+c11d1+c12d0]を生じる。
【０３３０】
（拡張畳み込み浮動小数点(Wide Convolve Floating-point））
Wide Convolve Floating-point命令は、オペランドの乗算と加算とが浮動小数点演算を用いて進むことを除いては、上で説明したWide Convolve Extract命令と同様に演算する。実質的に制約されない精度での丸め処理なしに、最終結果に対して結果オペランドの精度にするための１回の丸めを行い、例示的な実施形態の乗算積と中間和との表現がなされる。代わりの実施形態において、積と和は、拡大されているが制約された精度で計算される。別の代わりの実施形態において、積と和は、オペランドのサイズに制限された精度で計算される。
【０３３１】
例示的な実施形態のWide Convolve Floating-point命令は、浮動小数点演算に適用されないs領域を除いては、汎用レジスタrb領域にWide Convolve Extract命令と同じフォーマットを用いてもよい。例えば、fsize,dpos,s,mおよびl領域とgssp領域のsposパラメータは、この命令においては無視されてもよい。代わりの実施形態において、残りの情報のいくつかは、例えば、gsizeパラメータまたはnパラメータのように、命令の中で指定されてもよいし、例えば、端数を丸めるパラメータが最も近い値への丸め（round-to-nearest）に固定されてもよいように、指定された値に固定されてもよい。代わりの実施形態において、残りの領域は再配列し直されてもよい。例えば、mpos領域を除くすべてが命令に含まれるか、あるいは無視された場合、mpos領域は単独で、汎用レジスタrbの内容の最下位部分に含まれ得る。
【０３３２】
（拡張デコード（Wide Decode））
強化された拡張演算は、ビタビ（Viterbi）復号やターボ復号によるエラー訂正にも有用である。この場合、組み込みメモリ片は、状態メトリクスやプレトレースバック決定数字を収容するのに用いられる。Add-Compare-Swapまたは、log-MAPユニットは、例えば私たちの好ましい実施形態における外部レジスタからの１２８ビットといった、少数の分岐メトリクスを受け取る。アレイは、多くの実質的なコードにとって非常に大きい状態メトリックメモリのエントリを読み、再計算し、更新する。複数の決定数字は、典型的にはそれぞれ１６を基数とするプレトレースバック方法の４ビットであり、２番目のトレースバックメモリに蓄積される。アレイ計算と状態メトリックの更新は、指定された数のサイクル繰り返し実行される。次に第２の繰り返し操作は、状態トレリスを通る最も見込みのあるパスを分析するために、トレースバックメモリをトラバースする。
【０３３３】
（拡張ブール演算（Wide Boolean））
強化された拡張演算は、近傍のマルチプレクサとラッチに相互に接続され、典型的には入力アドレスの３または４ビットでそれぞれ指定される８または１６エントリを伴う小さいルックアップテーブル(LUTs)のアレイを要するWide Boolean演算でもある。LUTエントリ、マルチプレクサ選択、およびラッチクロックイネーブルの制御は、組み込み拡張メモリによって規定される。この構造は、一般的な用途のマイクロプロセッサのレジスタから供給されるオペランドに対する繰り返し演算を実行できるフィールドプログラマブルゲートアレイの片を供給する方法を提供する。これらの演算は、内部ラッチとメモリ片自体の両方を更新する任意に規定できる論理演算を実行しながら、多数サイクル繰り返し得る。
【０３３４】
（拡張オペランドメモリ間の転送（Transfers Between Wide Operand Memories））
ここで説明する方法と装置は、特定用途向けIC(ASICs: application-specific integrated circuits)で実現されるものを見積もるマイクロプロセッサの演算器の実効的な帯域幅を増大させる問題に広く適用できる。拡張オペランドを処理することが可能な機能ユニットが同時に２つ以上存在する時、データを発生する一つの機能ユニットから組み込みメモリへデータを移し、さらにメモリシステムを介して、または迂回させて、拡張オペランドメモリにデータをロードした後に、データを消費する必要がある拡張オペランドを処理することが同様に可能な第２の機能ユニットにデータを転送する問題が起きる。データをあるメモリ位置から他にあからさまにコピーすることは、このような転送を達成するが、それに伴うオーバーヘッドがプロセッサ全体の効率を減らす。
【０３３５】
図３８は、オーバーヘッドを減少させた２つ以上のユニット間の転送についてのかかる問題を解決するための方法と装置を説明する。組み込みメモリアレイは、単一のグローバルメモリ空間に概念上存在するデータのローカルコピーを保持するキャッシュとして機能する。キャッシュ整合性制御部（cache coherency controller）は、キャッシュ動作のアドレスストリームを監視し、指定された基準に達する整合性を維持するためにMOESIやMESI等の整合性プロトコルの一つを採用する。キャッシュ整合性制御部の適切な初期化によって、一般的な用途のマイクロプロセッサで動作するソフトウェアが、拡張ユニットでの計算とオーバーラップして拡張ユニット間でのデータ転送をバックグラウンドで行うことを可能にし、あからさまな読み込みと格納のオーバーヘッドを減らす。
【０３３６】
（結論）
本発明の好ましい実施形態と他の選択可能な方法を十分に説明したが、当業者は、ここでの教示を与えられると、本発明から離れない多数の選択可能な方法、および同等のものが存在することを認識するだろう。したがって、本発明は上記説明によって制限されず、請求項だけによって制限されることが意図されている。
【図面の簡単な説明】
【０３３７】
【図１】図１は、本発明の例示的な実施形態に従って、システムの機能ブロックを示すシステムレベルの図である。
【図２】図２は、本発明の例示的な実施形態に従った拡張行列乗算（wide matrix multiply）のマトリックス表現である。
【図３】図３は、本発明の例示的な実施形態に従った拡張行列乗算（wide matrix multiply）の更なる表現である。
【図４】図４は、本発明の例示的な実施形態に従って、実行パイプラインからのデカップルドアクセスおよび同時マルチスレッド処理(Simultaneous Multi Threading and  Decoupled Access from Execution)複合プロセッサを組み込んだシステムの機能ブロックを示すシステムレベルの図である。
【図５】図５は、本発明の例示的な実施形態に従って、拡張オペランドを説明している。
【図６】図６は、本発明の例示的な実施形態に従って、復号化する指定子の扱い方を説明している。
【図７】図７は、本発明の例示的な実施形態に従って、操作上のブロック形態で拡張演算器を説明している。
【図８】図８は、本発明の例示的な実施形態に従って、拡張マイクロキャッシュ制御機能をフロー図の形式で説明している。
【図９】図９は、本発明の例示的な実施形態に従って、拡張マイクロキャッシュのデータ構造を説明している。
【図１０】図１０は、本発明の例示的な実施形態に従って、拡張マイクロキャッシュ制御を説明している。
【図１１】図１１は、本発明の例示的な実施形態に従って、拡張マイクロキャッシュ制御を説明している。
【図１２】図１２Ａ〜１２Ｄは、本発明の例示的な実施形態に従って、Wide Switch命令を説明している。
【図１３】図１３Ａ〜１３Ｄは、本発明の例示的な実施形態に従って、Wide Translate命令を説明している。
【図１４】図１４Ａ〜１４Ｅは、本発明の例示的な実施形態に従って、Wide Multiply Matrix命令を説明している。
【図１５】図１５Ａ〜１５Ｆは、本発明の例示的な実施形態に従って、Wide Multiply Matrix Extract命令を説明している。
【図１６】図１６Ａ〜１６Ｅは、本発明の例示的な実施形態に従って、Wide Multiply Matrix Extract Immediate命令を説明している。
【図１７】図１７Ａ〜１７Ｅは、本発明の例示的な実施形態に従って、Wide Multiply Matrix Floating point命令を説明している。
【図１８】図１８Ａ〜１８Ｄは、本発明の例示的な実施形態に従って、Wide Multiply Matrix Galois命令を説明している。
【図１９】図１９Ａ〜１９Ｇは、本発明の例示的な実施形態に従って、Ensemble Extract Inplace命令を説明している。
【図２０】図２０Ａ〜２０Ｊは、本発明の例示的な実施形態に従って、Ensemble Extract命令を説明している。
【図２１】図２１Ａ〜２１Ｂは、本発明の例示的な実施形態に従って、System and Privileged Library Callsを説明している。
【図２２】図２２Ａ〜２２Ｂは、本発明の例示的な実施形態に従って、Ensemble Scale-Add Floating-point命令を説明している。
【図２３】図２３Ａ〜２３Ｃは、本発明の例示的な実施形態に従って、Group Boolean命令を説明している。
【図２４】図２４Ａ〜２４Ｃは、本発明の例示的な実施形態に従って、Branch Hint命令を説明している。
【図２５】図２５Ａ〜２５Ｃは、本発明の例示的な実施形態に従って、Ensemble Sink Floating-point命令を説明している。
【図２６】図２６Ａ〜２６Ｃは、本発明の例示的な実施形態に従って、Group Add命令を説明している。
【図２７】図２７Ａ〜２７Ｃは、本発明の例示的な実施形態に従って、Group Set命令とGroup Subtract命令とをを説明している。
【図２８】図２８Ａ〜２８Ｃは、本発明の例示的な実施形態に従って、Ensemble Convolve命令とEnsemble Divide命令とEnsemble Multiply命令とEnsemble Multiply Sum命令とを説明している。
【図２９】図２９は、他の部分での詳細な命令定義の範囲内での使用が定義された典型的な機能を説明している。
【図３０】図３０Ａ〜３０Ｃは、本発明の例示的な実施形態に従って、Ensemble Floating-Point Add命令とEnsemble Floating- Point Divide命令とEnsemble Floating-Point Multiply命令とを説明している。
【図３１】図３１Ａ〜３１Ｃは、本発明の例示的な実施形態に従って、Ensemble Floating-Point Subtract命令を説明している。
【図３２】図３２Ａ〜３２Ｃは、本発明の例示的な実施形態に従って、Crossbar Compress命令とExpand命令とRotate命令とShift命令とを説明している。
【図３３】図３３Ａ〜３３Ｄは、本発明の例示的な実施形態に従って、Extract命令を説明している。
【図３４】図３４Ａ〜３４Ｅは、本発明の例示的な実施形態に従って、Shuffle命令を説明している。
【図３５】図３５Ａ〜３５Ｂは、本発明の例示的な実施形態に従って、Wide Solve Galois命令を説明している。
【図３６】図３６Ａ〜３６Ｂは、本発明の例示的な実施形態に従って、Wide Transform Slice命令を説明している。
【図３７】図３７Ａ〜３７Ｋは、本発明の例示的な実施形態に従って、Wide Convolve Extract命令を説明している。
【図３８】図３８は、本発明の例示的な実施形態に従って、拡張オペランドメモリ間の転送（Transfers Between Wide Operand Memories）を説明している。
【図１】
2007531072.tif 000024
【図２】
2007531072.tif 000025
【図３】
2007531072.tif 000026
【図４】
2007531072.tif 000027
【図５】
2007531072.tif 000028
【図６】
2007531072.tif 000029
【図７】
2007531072.tif 000030
【図８】
2007531072.tif 000031
【図９】
2007531072.tif 000032
【図１０】
2007531072.tif 000033
【図１１】
2007531072.tif 000034
【図１２Ａ】
2007531072.tif 000035
【図１２Ｂ】
2007531072.tif 000036
【図１２Ｃ】
2007531072.tif 000037
【図１２Ｄ】
2007531072.tif 000038
【図１３Ａ】
2007531072.tif 000039
【図１３Ｂ】
2007531072.tif 000040
【図１３Ｃ】
2007531072.tif 000041
【図１３Ｄ】
2007531072.tif 000042
【図１４Ａ】
2007531072.tif 000043
【図１４Ｂ】
2007531072.tif 000044
【図１４Ｃ】
2007531072.tif 000045
【図１４Ｄ−１】
2007531072.tif 000046
【図１４Ｄ−２】
2007531072.tif 000047
【図１４Ｄ−３】
2007531072.tif 000048
【図１４Ｅ】
2007531072.tif 000049
【図１５Ａ】
2007531072.tif 000050
【図１５Ｂ】
2007531072.tif 000051
【図１５Ｃ】
2007531072.tif 000052
【図１５Ｄ】
2007531072.tif 000053
【図１５Ｅ−１】
2007531072.tif 000054
【図１５Ｅ−２】
2007531072.tif 000055
【図１５Ｅ−３】
2007531072.tif 000056
【図１５Ｆ】
2007531072.tif 000057
【図１６Ａ】
2007531072.tif 000058
【図１６Ｂ】
2007531072.tif 000059
【図１６Ｃ】
2007531072.tif 000060
【図１６Ｄ−１】
2007531072.tif 000061
【図１６Ｄ−２】
2007531072.tif 000062
【図１６Ｅ】
2007531072.tif 000063
【図１７Ａ】
2007531072.tif 000064
【図１７Ｂ】
2007531072.tif 000065
【図１７Ｃ】
2007531072.tif 000066
【図１７Ｄ−１】
2007531072.tif 000067
【図１７Ｄ−２】
2007531072.tif 000068
【図１７Ｅ】
2007531072.tif 000069
【図１８Ａ】
2007531072.tif 000070
【図１８Ｂ】
2007531072.tif 000071
【図１８Ｃ−１】
2007531072.tif 000072
【図１８Ｃ−２】
2007531072.tif 000073
【図１８Ｄ】
2007531072.tif 000074
【図１９Ａ】
2007531072.tif 000075
【図１９Ｂ】
2007531072.tif 000076
【図１９Ｃ】
2007531072.tif 000077
【図１９Ｄ】
2007531072.tif 000078
【図１９Ｅ】
2007531072.tif 000079
【図１９Ｆ】
2007531072.tif 000080
【図１９Ｇ−１】
2007531072.tif 000081
【図１９Ｇ−２】
2007531072.tif 000082
【図１９Ｇ−３】
2007531072.tif 000083
【図１９Ｇ−４】
2007531072.tif 000084
【図２０Ａ】
2007531072.tif 000085
【図２０Ｂ】
2007531072.tif 000086
【図２０Ｃ】
2007531072.tif 000087
【図２０Ｄ】
2007531072.tif 000088
【図２０Ｅ】
2007531072.tif 000089
【図２０Ｆ】
2007531072.tif 000090
【図２０Ｇ】
2007531072.tif 000091
【図２０Ｈ】
2007531072.tif 000092
【図２０Ｉ】
2007531072.tif 000093
【図２０Ｊ−１】
2007531072.tif 000094
【図２０Ｊ−２】
2007531072.tif 000095
【図２０Ｊ−３】
2007531072.tif 000096
【図２０Ｊ−４】
2007531072.tif 000097
【図２１Ａ】
2007531072.tif 000098
【図２１Ｂ】
2007531072.tif 000099
【図２１Ｃ】
2007531072.tif 000100
【図２１Ｄ】
2007531072.tif 000101
【図２１Ｅ】
2007531072.tif 000102
【図２１Ｆ】
2007531072.tif 000103
【図２２Ａ】
2007531072.tif 000104
【図２２Ｂ】
2007531072.tif 000105
【図２３Ａ】
2007531072.tif 000106
【図２３Ｂ】
2007531072.tif 000107
【図２３Ｃ】
2007531072.tif 000108
【図２４Ａ】
2007531072.tif 000109
【図２４Ｂ】
2007531072.tif 000110
【図２４Ｃ】
2007531072.tif 000111
【図２５Ａ−１】
2007531072.tif 000112
【図２５Ａ−２】
2007531072.tif 000113
【図２５Ｂ】
2007531072.tif 000114
【図２５Ｃ】
2007531072.tif 000115
【図２５Ｄ−１】
2007531072.tif 000116
【図２５Ｄ−２】
2007531072.tif 000117
【図２５Ｄ−３】
2007531072.tif 000118
【図２５Ｄ−４】
2007531072.tif 000119
【図２５Ｄ−５】
2007531072.tif 000120
【図２５Ｄ−６】
2007531072.tif 000121
【図２５Ｄ−７】
2007531072.tif 000122
【図２５Ｄ−８】
2007531072.tif 000123
【図２５Ｄ−９】
2007531072.tif 000124
【図２５Ｄ−１０】
2007531072.tif 000125
【図２５Ｄ−１１】
2007531072.tif 000126
【図２５Ｄ−１２】
2007531072.tif 000127
【図２６Ａ】
2007531072.tif 000128
【図２６Ｂ】
2007531072.tif 000129
【図２６Ｃ】
2007531072.tif 000130
【図２７Ａ−１】
2007531072.tif 000131
【図２７Ａ−２】
2007531072.tif 000132
【図２７Ｂ】
2007531072.tif 000133
【図２７Ｃ−１】
2007531072.tif 000134
【図２７Ｃ−２】
2007531072.tif 000135
【図２８Ａ−１】
2007531072.tif 000136
【図２８Ａ−２】
2007531072.tif 000137
【図２８Ｂ】
2007531072.tif 000138
【図２８Ｃ−１】
2007531072.tif 000139
【図２８Ｃ−２】
2007531072.tif 000140
【図２８Ｃ−３】
2007531072.tif 000141
【図２９−１】
2007531072.tif 000142
【図２９−２】
2007531072.tif 000143
【図２９−３】
2007531072.tif 000144
【図２９−４】
2007531072.tif 000145
【図２９−５】
2007531072.tif 000146
【図２９−６】
2007531072.tif 000147
【図２９−７】
2007531072.tif 000148
【図２９−８】
2007531072.tif 000149
【図２９−９】
2007531072.tif 000150
【図２９−１０】
2007531072.tif 000151
【図３０Ａ−１】
2007531072.tif 000152
【図３０Ａ−２】
2007531072.tif 000153
【図３０Ｂ】
2007531072.tif 000154
【図３０Ｃ】
2007531072.tif 000155
【図３１Ａ】
2007531072.tif 000156
【図３１Ｂ】
2007531072.tif 000157
【図３１Ｃ】
2007531072.tif 000158
【図３２Ａ−１】
2007531072.tif 000159
【図３２Ａ−２】
2007531072.tif 000160
【図３２Ｂ】
2007531072.tif 000161
【図３２Ｃ−１】
2007531072.tif 000162
【図３２Ｃ−２】
2007531072.tif 000163
【図３２Ｃ−３】
2007531072.tif 000164
【図３２Ｄ】
2007531072.tif 000165
【図３３Ａ】
2007531072.tif 000166
【図３３Ｂ】
2007531072.tif 000167
【図３３Ｃ】
2007531072.tif 000168
【図３３Ｄ】
2007531072.tif 000169
【図３４Ａ】
2007531072.tif 000170
【図３４Ｂ】
2007531072.tif 000171
【図３４Ｃ】
2007531072.tif 000172
【図３４Ｄ】
2007531072.tif 000173
【図３４Ｅ】
2007531072.tif 000174
【図３５Ａ】
2007531072.tif 000175
【図３５Ｂ】
2007531072.tif 000176
【図３６Ａ】
2007531072.tif 000177
【図３６Ｂ−１】
2007531072.tif 000178
【図３６Ｂ−２】
2007531072.tif 000179
【図３６Ｂ−３】
2007531072.tif 000180
【図３６Ｂ−４】
2007531072.tif 000181
【図３６Ｂ−５】
2007531072.tif 000182
【図３６Ｂ−６】
2007531072.tif 000183
【図３６Ｂ−７】
2007531072.tif 000184
【図３７Ａ】
2007531072.tif 000185
【図３７Ｂ−１】
2007531072.tif 000186
【図３７Ｂ−２】
2007531072.tif 000187
【図３７Ｂ−３】
2007531072.tif 000188
【図３７Ｃ】
2007531072.tif 000189
【図３７Ｄ】
2007531072.tif 000190
【図３７Ｅ】
2007531072.tif 000191
【図３７Ｆ】
2007531072.tif 000192
【図３７Ｇ】
2007531072.tif 000193
【図３７Ｈ】
2007531072.tif 000194
【図３７Ｉ】
2007531072.tif 000195
【図３７Ｊ】
2007531072.tif 000196
【図３７Ｋ】
2007531072.tif 000197
【図３８】
2007531072.tif 000198
【国際調査報告】
2007531072.tif 000199
2007531072.tif 000200