(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
第１ビット幅を有する第１データパス（７１５と７３０Ａ−Ｈとの間のパス）と、
前記第１ビット幅よりも広い第２ビット幅を有する第２データパス（７３０Ａ−Ｈと７４０との間のパス）と、
ビット幅の合計が前記第２ビット幅よりも狭い複数の第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）と、
前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）と前記第２データパス（７３０Ａ−Ｈと７４０との間のパス）とに結合され、前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）を経由して記憶部（１２０，７１５）から受け取られかつ前記第１ビット幅よりも大きいビット数のサイズを有するワイド・オペランドを記憶する、ワイド・オペランド記憶部（７１４）と、
複数のレジスタを有し、前記第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）に接続され、前記ワイド・オペランドの前記記憶部（１２０，７１５）におけるアドレスを少なくとも指定するワイド・オペランド指定子を含むワイド・オペランド指定子レジスタ（７１０）を有するレジスタファイル（７２０Ａ−７２０ｎ）と、
前記第２データパス（７３０Ａ−Ｈと７４０との間のパス）によって前記ワイド・オペランド記憶部（７１４）に結合され、前記第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）によって前記レジスタファイル（７２０Ａ−７２０ｎ）に結合される機能ユニット（７４０）とを備え、
前記機能ユニット（７４０）は、（ｉ）前記ワイド・オペランド記憶部（７１４）に記憶するための前記ワイド・オペランドの取り出しを行うワイド・オペランド指定子レジスタ（７１０）と、（ｉｉ）前記レジスタファイル（７２０Ａ−７２０ｎ）におけるソースレジスタと、（ｉｉｉ）前記レジスタファイル（７２０Ａ−７２０ｎ）における結果レジスタと、を指定するインストラクションフィールド（ｒａ，ｒｂ，ｒｃ，ｒｄ）を含む単一のインストラクションを実行し、前記単一のインストラクションにより、前記ソースレジスタ及び前記ワイド・オペランドからのデータが前記結果レジスタに配置される結果を生成するのに用いられる、プロセッサ。
【請求項２】
前記インストラクションが実行されると、前記プロセッサはレジスタ（７１０）から前記ワイド・オペランド指定子を読み出し、前記ワイド・オペランド指定子におけるより上位のビットは、前記ワイド・オペランドがフェッチされる前記記憶部（１２０，７１５）における前記アドレスを提供し、前記ワイド・オペランド指定子におけるより下位のビットは、前記ワイド・オペランドのサイズを指定する、請求項１に記載のプロセッサ。
【請求項３】
前記記憶部（１２０，７１５）は、前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）に結合され、前記ワイド・オペランド指定子に示されるアドレスに前記ワイド・オペランドを記憶するメモリ（７１５）であり、
前記メモリ（７１５）における前記ワイド・オペランドのアドレスは、前記アドレスの複数の下位ビットが前記ワイド・オペランドの取り出しに必要とされないように配置される、請求項２に記載のプロセッサ。
【請求項４】
前記機能ユニット（７４０）は、前記ソースレジスタからのビットを前記結果レジスタにおける前記ワイド・オペランドによりビット単位で指定された場所にコピーする単一のワイドスイッチインストラクションを実行する、請求項１に記載のプロセッサ。
【請求項５】
前記結果レジスタにおける各ビットに対して、前記ワイド・オペランドは、前記ソースレジスタにおいてそのビットのコピー元の場所を指定する複数のビットを提供する、請求項４に記載のプロセッサ。
【請求項６】
前記インストラクションは、複数のソースレジスタの内容を連結し、連結された内容を前記結果レジスタにコピーする、請求項４に記載のプロセッサ。
【請求項７】
前記ワイド・オペランドは、前記レジスタファイル（７２０Ａ−７２０ｎ）における２つのレジスタの内容に対するビットレベルの再配列を制御するために前記プロセッサによって用いられるデータを提供し、その再配列の結果の前記結果レジスタへの配置を前記プロセッサに行わせる、請求項４に記載のプロセッサ。
【請求項８】
前記単一のインストラクションは、前記レジスタファイル（７２０Ａ−７２０ｎ）におけるオペランドレジスタを指定するインストラクションフィールド（ｒａ，ｒｂ，ｒｃ，ｒｄ）をさらに含み、前記インストラクションにより、前記機能ユニット（７４０）は、前記ワイド・オペランドに含まれるマトリクスエレメントと前記オペランドレジスタに含まれる複数の乗数エレメントとの間でマトリクス乗算動作を実行し、前記マトリクス乗算動作は前記結果レジスタに記憶するための複数の結果エレメントを生成する、請求項１に記載のプロセッサ。
【請求項９】
前記マトリクス乗算動作に用いるマトリクスは、６４ビットまでのビット幅で１２８ビットを前記マトリクスエレメントのサイズにより割った数までのエレメント数の深度を有するように指定される、請求項８に記載のプロセッサ。
【請求項１０】
前記マトリクス乗算動作は浮動小数点演算で実行される、請求項８に記載のプロセッサ。
【請求項１１】
前記マトリクス乗算動作はガロア体演算で実行される、請求項８に記載のプロセッサ。
【請求項１２】
前記単一のインストラクションは、前記マトリクスエレメントのそれぞれのサイズを指定する、請求項８に記載のプロセッサ。
【請求項１３】
前記単一のインストラクションは、前記乗数エレメントのサイズを指定する、請求項１２に記載のプロセッサ。
【請求項１４】
前記マトリクスエレメントのサイズは前記乗数エレメントのサイズと同じである、請求項１３に記載のプロセッサ。
【請求項１５】
前記マトリクス乗算動作は、積を生成するエレメントの浮動小数点乗算、及び浮動小数点結果エレメントを生成するこれらの積の浮動小数点加算を用いて行われる、請求項８に記載のプロセッサ。
【請求項１６】
前記マトリクス乗算は、積を生成するエレメントの多項式乗算、及びこれらの積の多項式加算、その後ガロア体結果エレメントを生成する多項式剰余を用いて行われる、請求項８に記載のプロセッサ。
【請求項１７】
前記マトリクス乗算は、積を生成するガロア体乗算、及び多項式結果エレメントを生成するこれらの積の多項式加算を用いて行われる、請求項８に記載のプロセッサ。
【請求項１８】
制御レジスタは、各結果について、その結果を、符号付きか又は符号なしとみなすべきか、複素乗算か又は実数乗算とみなすべきか、符号が混在した乗算か又は同一符号の乗算とみなすべきか、打ち切りか又は飽和とみなすべきか、及び丸めるべきか又は切り捨てるべきか、のうちの少なくとも１つをさらに指定する、請求項８に記載のプロセッサ。
【請求項１９】
前記マトリクスのエレメントの中には負の数として扱われるものがある、請求項１８に記載のプロセッサ。
【請求項２０】
前記機能ユニット（７４０）は、前記レジスタファイル（７２０Ａ−７２０ｎ）における制御レジスタをさらに指定するインストラクションフィールド（ｒａ，ｒｂ，ｒｃ，ｒｄ）を含む単一のインストラクションを実行し、前記インストラクションにより、前記機能ユニット（７４０）は前記ワイド・オペランド記憶部（７１４）に含まれるマトリクスエレメントと前記ソースレジスタに含まれるベクトルエレメントとの間でマトリクス乗算動作を行い、前記マトリクスエレメントと前記ベクトルエレメントとは制御レジスタにより指定されるサイズを有し、それによって複数の結果エレメントを生成し、前記機能ユニット（７４０）はまた、前記制御レジスタに制御されて前記結果エレメントを抽出し、前記結果レジスタに記憶される値を生成する、請求項１に記載のプロセッサ。
【請求項２１】
前記ワイド・オペランドは指定された幅と深度の値のマトリクスを定義する、請求項２０に記載のプロセッサ。
【請求項２２】
前記マトリクスは、１２８ビットまでのビット幅で１２８ビットを前記マトリクスエレメントのサイズにより割った数までのエレメント数の深度を有するように指定される、請求項２０に記載のプロセッサ。
【請求項２３】
前記インストラクションは、１次元又は２次元の相関を用いるデジタルフィルタとしての動作に用いられる、請求項２０に記載のプロセッサ。
【請求項２４】
前記マトリクスエレメントは、前記制御レジスタにおけるフィールドに基づいて符号付き又は符号なしとして扱われる、請求項２０に記載のプロセッサ。
【請求項２５】
前記抽出は、ゼロから、エレメントサイズから１を引いた数までの数であるシフト量を指定し、複数丸め動作のうちの１つを指定する、前記制御レジスタにおけるフィールドによりさらに制御される、請求項２４に記載のプロセッサ。
【請求項２６】
前記結果エレメントの抽出は、前記結果エレメントのそれぞれについて行われ、前記結果レジスタにおいて連結される、請求項２０に記載のプロセッサ。
【請求項２７】
前記結果は、最近接偶数への丸め、ゼロへの丸め、フロアへの丸め、シーリングへの丸めを含む複数の丸め動作のうちの１つにより丸められる、請求項２６に記載のプロセッサ。
【請求項２８】
前記マトリクス乗算動作は、前記レジスタファイル（７２０Ａ−７２０ｎ）における少なくとも１つの第１レジスタにより制御される抽出を含み、前記レジスタファイル（７２０Ａ−７２０ｎ）において、前記少なくとも１つの第１レジスタは、前記ワイド・オペランドから抽出されるフィールドのシフト量とサイズとを指定する、請求項２０に記載のプロセッサ。
【請求項２９】
前記抽出は、レジスタに指定されるシフト量によって調整される乗算の積の高位部の抽出と、その後の、前記レジスタからの制御値による前記高位部の丸めとを含む、請求項２８に記載のプロセッサ。
【請求項３０】
前記少なくとも１つの第１レジスタは、オペランドのサイズと、結果のシフト量及びサイズとをさらに定義する、請求項２８に記載のプロセッサ。
【請求項３１】
前記単一のインストラクションは、オペランドを複数のレジスタから取り出すグループ演算動作を指定し、前記オペランドにおけるビットのパーティションに対して演算動作が並列に行われ、連結された結果がレジスタに配置される、請求項２８に記載のプロセッサ。
【請求項３２】
前記少なくとも１つの第１レジスタは、前記抽出されるフィールドが符号付きフィールドか符号付きフィールドではないかをさらに指定する、請求項２８に記載のプロセッサ。
【請求項３３】
前記少なくとも１つの第１レジスタは、前記結果において前記抽出されたフィールドが配置される場所をさらに指定する、請求項２８に記載のプロセッサ。
【請求項３４】
前記少なくとも１つの第１レジスタは、前記抽出されるフィールドの丸めを行うかどうかをさらに指定する、請求項２８に記載のプロセッサ。
【請求項３５】
前記少なくとも１つの第１レジスタは、前記抽出されるフィールドの最大値を指定する、請求項２８に記載のプロセッサ。
【請求項３６】
前記少なくとも１つの第１レジスタは、前記結果レジスタのビット数よりも少ないビット数にビット数を制限する値を提供する、請求項２８に記載のプロセッサ。
【請求項３７】
前記ワイド・オペランドは値の表を備え、前記ソースレジスタはｘバイトの幅であり、前記結果レジスタはｘバイトの幅であり、前記ソースレジスタの一部の中の値は表における行を指定し、前記ソースレジスタ内の前記値の位置は前記表の列を定義し、前記ワイド・オペランドはｘバイトの幅とｙバイトの深度の値の前記表を備え、前記機能ユニット（７４０）は、前記指定の行と前記指定の列との交点の値を前記結果レジスタにおける前記ソースレジスタ内の前記値の位置と同じ位置にコピーさせる、ワイド・トランスレート・インストラクションを実行する、請求項１に記載のプロセッサ。
【請求項３８】
前記ソースレジスタの各部分について、前記単一のインストラクションにより、前記指定の行と前記指定の列との交点の値に対する処理が同時に行われ、それにより前記結果レジスタを満たす、請求項３７に記載のプロセッサ。
【請求項３９】
前記ソースレジスタは、１６個の８ビットバイトのレジスタを備え、各バイトの８ビットは２５６行のうちの１つの行を指定する、請求項３８に記載のプロセッサ。
【請求項４０】
第１ビット幅を有する第１データパス（７１５と７３０Ａ−Ｈとの間のパス）と、前記第１ビット幅よりも広い第２ビット幅を有する第２データパス（７３０Ａ−Ｈと７４０との間のパス）と、ビット幅の合計が前記第２ビット幅よりも狭い複数の第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）と、前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）と前記第２データパス（７３０Ａ−Ｈと７４０との間のパス）とに結合され、前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）を経由して記憶部（１２０，７１５）から受け取られかつ前記第１ビット幅よりも大きいビット数のサイズを有するワイド・オペランドを記憶する、ワイド・オペランド記憶部（７１４）と、複数のレジスタを有し、前記第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）に接続され、前記ワイド・オペランドの前記記憶部（１２０，７１５）におけるアドレスを少なくとも指定するワイド・オペランド指定子を含むワイド・オペランド指定子レジスタ（７１０）を有するレジスタファイル（７２０Ａ−７２０ｎ）と、前記第２データパス（７３０Ａ−Ｈと７４０との間のパス）によって前記ワイド・オペランド記憶部（７１４）に結合され、前記第３データパス（７２０Ａ−７２０ｎと７４０との間のパス）によって前記レジスタファイル（７２０Ａ−７２０ｎ）に結合される機能ユニット（７４０）とを備えるプロセッサにおける方法であって、
（ｉ）前記ワイド・オペランド記憶部（７１４）に記憶するための前記ワイド・オペランドの取り出しを行うワイド・オペランド指定子レジスタ（７１０）と、（ｉｉ）前記レジスタファイル（７２０Ａ−７２０ｎ）におけるソースレジスタと、（ｉｉｉ）前記レジスタファイル（７２０Ａ−７２０ｎ）における結果レジスタと、を指定するインストラクションフィールド（ｒａ，ｒｂ，ｒｃ，ｒｄ）を含む単一のインストラクションを実行し、
前記単一のインストラクションにより、前記ソースレジスタ及び前記ワイド・オペランドからのデータが前記結果レジスタに配置される結果を生成するのに用いられる、方法。
【請求項４１】
単一のインストラクションを実行する工程は、前記ワイド・オペランド指定子が読み出されると、
前記ワイド・オペランド指定子におけるより上位のビットを用いて前記ワイド・オペランドがフェッチされる前記記憶部（１２０，７１５）における前記アドレスを提供することと、
前記ワイド・オペランド指定子におけるより下位のビットを用いて前記ワイド・オペランドのサイズを指定することを備える、請求項４０に記載の方法。
【請求項４２】
前記プロセッサは、前記第１データパス（７１５と７３０Ａ−Ｈとの間のパス）に結合されたメモリ（７１５）を備え、前記ワイド・オペランドは前記メモリ（７１５）における前記ワイド・オペランド指定子に示されるアドレスに記憶され、
前記メモリ（７１５）における前記ワイド・オペランドのアドレスを、前記アドレスの複数の下位ビットが前記ワイド・オペランドの取り出しに必要とされないように配置することをさらに備える、請求項４１に記載の方法。
【請求項４３】
前記動作は、前記ワイド・オペランドに含まれるマトリクスエレメントと前記ソースレジスタに含まれる複数の乗数エレメントとの間でマトリクス乗算動作を行うことを備え、前記マトリクス乗算動作は前記結果レジスタに記憶するための複数の結果エレメントを生成する、請求項４０に記載の方法。
【請求項４４】
前記マトリクス乗算動作は、積を生成するエレメントの浮動小数点乗算及び浮動小数点結果エレメントを生成するこれらの積の浮動小数点加算を用いて行われる、請求項４３に記載の方法。
【請求項４５】
前記マトリクス乗算は、積を生成するエレメントの多項式乗算及びこれらの積の多項式加算、その後ガロア体結果エレメントを生成する多項式剰余を用いて行われる、請求項４３に記載の方法。
【請求項４６】
前記マトリクス乗算は、積を生成するガロア体乗算及び多項式結果エレメントを生成するこれらの積の多項式加算を用いて行われる、請求項４３に記載の方法。
【請求項４７】
前記マトリクス乗算動作は制御レジスタを指定し、
前記制御レジスタに制御されて、積の和から最終結果を導出することと、
前記最終結果を連結し、前記結果レジスタに配置する値を生成することをさらに備える、請求項４３に記載の方法。
【請求項４８】
前記単一のインストラクションは、前記マトリクスエレメントのそれぞれのサイズを指定する、請求項４７に記載の方法。
【請求項４９】
前記単一のインストラクションは、前記乗数エレメントのサイズを指定する、請求項４７に記載の方法。
【請求項５０】
前記マトリクスエレメントのサイズは前記乗数エレメントのサイズと同じである、請求項４７に記載の方法。
【請求項５１】
前記制御レジスタは、各結果について、その結果を、符号付きか又は符号なしとみなすべきか、複素乗算か又は実数乗算とみなすべきか、符号が混在した乗算か又は同一符号の乗算とみなすべきか、打ち切りか又は飽和とみなすべきか、及び丸めるべきか又は切り捨てるべきか、のうちの少なくとも１つをさらに指定する、請求項４７に記載の方法。
【請求項５２】
前記抽出は、ゼロから、エレメントサイズから１を引いた数までのシフト量を指定し、複数の丸め動作のうちの１つを指定する、前記制御レジスタにおけるフィールドによりさらに制御される、請求項４７に記載の方法。
【請求項５３】
前記結果は、最近接偶数への丸め、ゼロへの丸め、フロアへの丸め、シーリングへの丸めを含む複数の丸め動作のうちの１つにより丸められる、請求項４７に記載の方法。
【請求項５４】
前記マトリクスエレメントは、前記制御レジスタにおけるフィールドに基づいて符号付き又は符号なしとして扱われる、請求項４７に記載の方法。
【請求項５５】
前記抽出は、ゼロから、マトリクスエレメントサイズから１を引いた数までのシフト量を指定し、複数の丸め動作のうちの１つを指定する、前記制御レジスタにおけるフィールドによりさらに制御される、請求項４７に記載の方法。
【請求項５６】
前記結果エレメントの抽出は、前記結果エレメントのそれぞれについて行われ、前記結果レジスタにおいて連結される、請求項４７に記載の方法。
【請求項５７】
オペランドフォーマット及びサイズは、前記単一のインストラクションにおけるフィールドにより定義され、それによりレジスタに制御情報が記憶されることを避ける、請求項４７に記載の方法。
【請求項５８】
前記インストラクションはワイドスイッチインストラクションであり、前記動作は前記ソースレジスタからのビットを、前記結果レジスタにおける前記ワイド・オペランドによりビット単位で指定された場所にコピーする再配列動作を行うことを備える、請求項４０に記載の方法。
【請求項５９】
前記結果レジスタにおける各ビットに対して、前記ワイド・オペランドは、前記ソースレジスタにおいてビットがそこからコピーされる場所を指定する複数のビットを提供する、請求項５８に記載の方法。
【請求項６０】
前記インストラクションの実行に応答して、前記プロセッサが汎用レジスタから前記ワイド・オペランド指定子を読み出し、前記ワイド・オペランド指定子におけるより上位のビットを前記ワイド・オペランドがフェッチされるメモリにおけるアドレスとして用い、前記ワイド・オペランド指定子におけるより下位のビットを前記ワイド・オペランドのサイズを指定するのに用いる工程が行われる、請求項５８に記載の方法。
【請求項６１】
前記インストラクションは、前記ワイド・オペランドがｘバイトの幅でｙバイトの深度の値の表を提供し、前記ソースレジスタがｘバイトの幅で、前記結果レジスタもｘバイトの幅であるワイド・トランスレート・インストラクションであり、前記動作は、
前記ソースレジスタの一部内の値に前記表における行を指定し、前記ソースレジスタ内の前記値の位置に前記表の列を指定することと、
前記指定の行と前記指定の列との交点の値を前記結果レジスタにおける前記ソースレジスタの一部内の前記値と同じ位置にコピーすることとを備える、請求項４０に記載の方法。
【請求項６２】
前記ソースレジスタの各部分について、前記指定の行と前記指定の列との交点の値を同時にコピーし、それにより前記結果レジスタを満たすことをさらに備える、請求項６１に記載の方法。
【請求項６３】
前記単一のインストラクションにより、前記ソースレジスタの各部分について、前記指定の行と前記指定の列との交点の値を同時にコピーし、それにより前記結果レジスタを満たすことをさらに備える、請求項６１に記載の方法。
【請求項６４】
前記ソースレジスタは、少なくとも１６個の８ビットバイトのレジスタを備え、各バイトの８ビットは２５６行のうちの１つの行を指定する、請求項６３に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、１９９８年１０月１日に出願された米国特許出願第０９／１６９，９６３号、現在では米国特許第６，００６３１８号である、の一部係属出願として１９９９年８月２４日に出願された米国特許出願第０９／３８２，４０２号の一部係属出願であり、さらに１９９５年８月１６日に出願された米国特許出願第０８／５１６，０３６号、現時点では米国特許第５，７４２，８４０号に関連する。１９９９年８月２４日に出願された米国特許出願第０９／３８２，４０２号の内容は、本願において参照として含まれる。
【０００２】
本発明は、概ねプロセッサ・アーキテクチャに関し、より詳細にはワイド・オペランド・アーキテクチャに関する。
【０００３】
【従来の技術】
プロセッサ、具体的には汎用目的のためのプロセッサの性能レベルは、互いに重なり合って依存する複数の要因：クロック・レート、クロックあたりのゲート、オペランドの数、オペランドの幅とデータ・パスの幅、オペランドとデータ・パスとのパーティショニングにより推定することができる。クロック・レートは、回路の選択、論理技術に大きく影響され、またクロックあたりのゲートの数にも影響を受ける。クロックあたりのゲートとは、パイプラインにおいてどれだけ多くのゲートが単一のクロック・サイクルにおいて状態を変化させるか、をいう。これは、データ・パス中にラッチを挿入することによって低減することができ、ラッチの間のゲート数を低減させた場合には、より高いクロックが可能となる。しかしながら、ラッチを追加することは、パイプライン長をより長くするので、インストラクションのレイテンシが増加してしまうという代償を伴うことになる。オペランドの数は、直接的であり、例えばキャリー・セーブ技術を追加することにより行われ、２つの値を追加するために必要なディレイよりも僅かに多くのディレイを与えるだけで、３つの値を追加することができる。オペランドおよびデータ・パスの幅は、一度にどれだけのデータを処理することができるかを規定し、より広いデータ・パスは、より複雑な機能を実行できるが、概ねこのことは実装するコストを高めてしまうことになる。オペランドおよびデータ・パスのパーティショニングは、幅を増大させるにつれて実質的にピーク使用時に維持する目的でデータ・パスを有効に使用することを参照する。
【０００４】
最後の要因としては、オペランドとデータ・パスとのパーティショニングは、共通の譲受人に譲渡された米国特許第５，７４２，８４０号、米国特許第５，７９４，０６０号、米国特許第５，７９４，０６１号、米国特許第５，８０９，３２１号および米国特許第５，８２２，６０３号において包括的に取り扱われており、インストラクションのクラスを追加することによる汎用目的のプロセッサの利用性を向上させるシステムおよび方法を開示している。これらのインストラクションクラスは、データ・パス・ソースとして汎用目的のレジスタの内容を利用し、オペランドを特定されたサイズのシンボルへとパーティションし、並列に動作を実行させ、結果を記憶し、汎用目的のレジスタへと、この記憶されたされた結果を配置する。これらの特許は、すべては本発明の譲受人と同一の譲受人へと譲渡されており、汎用目的マイクロプロセッサが著しい並列性を持ってメディア・データ・ストリームを処理すると共に通信するように最適化させることができることを教示している。
【０００５】
上述した特許は、汎用目的マイクロプロセッサの、特にメディア・データ・ストリームといった広い範囲における通信を取り扱うための利用性および性能を著しく向上させることができるが、その他の改善も可能である。
【０００６】
多くの汎用目的プロセッサは、汎用レジスタを含んでいて、インストラクションのためのオペランドを記憶しており、レジスタの幅は、データ・パスのサイズにマッチングされている。プロセッサ設計は、概ね１インストラクションあたりにアクセスできるレジスタの数により制限を受けるが、この理由は、これらのレジスタにアクセスすることができるハードウエアは、相対的に電力および面積的に相対的に高くつくことにある。アクセス可能なレジスタの数は、プロセッサの設計により変化するが、上述したインストラクションが、単一プロセッサ・クロック・サイクル、または単一のパイプライン・フローにおいて動作するように設計されている場合には、１インストラクションあたり２、３、または４レジスタに制限されてしまう。いくつかのプロセッサ、例えばモトローラ（商標）の６８０００は、制限されない数のレジスタ節約し、リストアするインストラクションを含んでいるが、上述したインストラクションを実行させるためには多重のサイクルを必要とする。
【０００７】
モトローラ６８０００はまた、インストラクションの実行を多重のサイクルまたはパイプライン・フローを用いることにより、広いデータ・パスをエミュレートして狭いレジスタに組み合わされた狭いデータ・パスを克服しようとしている。しかしながら、上述した多重の精密な技術は、クロック・サイクルの追加が必要であるといった点では、限界的な改善でしかない。汎用目的レジスタの幅およびアクセス可能な数は、このようにしてレジスタ・ベースの機械における単一インストラクションにより実行することができる処理の量を基本的には制限してしまうことになる。
【０００８】
既存のプロセッサは、汎用目的プロセッサのメモリ・システムから、１つまたはそれ以上が読取られるオペランドを許容するインストラクションを与える。しかしながら、これらのメモリ・オペランドは、概ねレジスタのオペランドにより特定され、メモリ・システムデータ・パスは、プロセッサ・データ・パスよりも広くないので、１サイクルまたはパイプライン・フローの１インストラクションあたりにつき汎用目的オペランドの広さおよびアクセス可能な数は、増加しない。
【０００９】
１インストラクションあたりにオペランドがアクセス可能な汎用目的レジスタの数は、概ね論理の複雑性およびインストラクション・サイズにより制限される。例えば、汎用目的レジスタを大量に特定することにより、望ましくはあるが複雑な機能を導入することとなり、レジスタ値の同時的な読取りおよびバイパスを可能とするために、実質的に付加的な論理が従来の設計に追加されることになろう。所望するレジスタは、いくつかの従来の設計において専用のレジスタが使用され、ソース・オペランドまたは結果の数またはサイズが増加され、これらの専用レジスタには厳密なインストラクションがロードされ、または値が記憶されているものの、追加のインストラクションが、プロセッサのコンテキストを変更する際には、これらのレジスタを保存し、リストアすることが必要とされる。
【００１０】
【発明が解決しようとする課題】
したがって、メモリ・システム、またはいかなるアクセス可能な汎用目的レジスタのいずれかよりも、より大きな幅のオペランドを効率的に扱うことが可能なプロセッサ・システムが必要とされていた。
【００１１】
【課題を解決するための手段】
本発明は、汎用目的レジスタの幅、またはデータ・パス幅のいずれかよりも広い幅へと、少なくとも１つのソース・オペランドを拡張することにより、汎用目的プロセッサの性能を改善するシステムおよび方法を提供するものである。加えて、いくつかのインストラクションクラスが提供され、オペランドが幅、または汎用目的レジスタのアクセス可能な数により制限されている場合には、インストラクションが効率よく実行できない。
【００１２】
本発明においては、オペランドには、プロセッサのデータ・パスよりも実質的に広いデータ・パスが提供される。このことは、部分的には汎用目的レジスタを使用してデータの少なくとも１つ、またはそれ以上、典型的には数データ・パスからメモリ・アドレスを特定することによって達成される。単一サイクルにおいて上述した広いオペランドを許容させるために、データ・パス機能ユニットは、専用記憶部により補助されていて、この記憶部にインストラクションの最初の実行に際してオペランドがコピーされる。インストラクションの実行、または同一のメモリ・アドレスが読取られる別の同様のインストラクションの実行に際しては、専用記憶部が読み取られて、オペランド値を取得する。しかしながら、このような読取りは、メモリ・オペランドがインストラクションの調停によりメモリ・オペランドが変更されていないことが認証される条件において実行される。メモリ・オペランドがカレントのまま保持されている場合、すなわち、条件がメモリ・オペランドのフェッチが上述した機能ユニット内の１つ、またはそれ以上のレジスタ・オペランドに組み合わされている条件に適合する場合に、結果を生成する。この結果のサイズは、典型的には汎用レジスタのサイズに制限され、この結果に対する専用または別の記憶部は必要とされない。
【００１３】
ワイド・オペレーションを使用するインストラクションの例は、ビット−レベルのスイッチング（ワイド・スイッチ）、バイトまたはより大きなテーブル−ルック・アップ（ワイド・トランスレート）、ワイド・マルチプライ・マトリックス、ワイド・マルチプライ・マトリックス・イクストラクト、ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート、ワイド・マルチプライ・マトリックスフローティング・ポイント、ワイド・マルチプライ・マトリックス・ガロアを実行するワイド・インストラクションを挙げることができる。
【００１４】
本発明の別の構成では、高精度の演算のために完全に使用されるが、一部分のみを別の低精度オペレーションのために使用して、マルチプライヤ・アレイの効率的な使用が行われる。これは、汎用レジスタからの動的なシフト量を調整することにより、またはインストラクションの特定された部分を調整することにより、マルチプライヤの積または積の和の高次の部分を、イクストラクションすること、およびレジスタまたはインストラクション部分から制御値をラウンディングすることにより達成される。このラウンディングは、いくつかあるうちのいかなるものでも良く、四捨五入(round-to-nearest/even)、ツワード・ゼロ(roward zero)、フロア(Floor)、またはシーリング(ceiling)を挙げることができる。オーバーフローは、典型的には、出力における正確に表現された最も大きな値または小さな値へと結果を制限することにより取り扱われる。
【００１５】
イクストラクトがレジスタにより制御される場合には、結果のサイズが特定されて、結果の適合するビットのより小さな数がラウンディングされ、制限されることになる。これは、オーバーフローまたはラウンディングを考慮することなく後続のオペレーションにおいて使用することができるように、結果をスケールすることを可能とする。この結果、性能が向上できる。イクストラクトがレジスタにより制御される上述した場合には、単一のレジスタ値が、オペランドのサイズ、シフト量、結果のサイズおよびラウンディング制御を規定する。単一のレジスタに上述した制御情報を配置することにより、インストラクションのサイズは、そうでなければ上述したインストラクションが必要とする多数のビットを低減させ、さらに性能を改善するとともに、プロセッサのフレキシビリティを向上させる。例示的なインストラクションとしては、アンサンブル・コンボルブ・イクストラクト、アンサンブル・マルチプライ・イクストラクト、アンサアンブル・マルチプライ・アド・イクストラクト、アンサンブル・スケール・アド・イクストラクトを挙げることができる。アンサンブル・スケール・アド・イクストラクト・インストラクションを特に考えると、イクストラクト制御情報は、レジスタ内でスカラ・マルチプライヤとして使用される２つの値と、２つのベクトル・マルチプライヤの内容とが組み合わされる。この組み合わせは、そうでなければ必要とされるレジスタの数を低減させ、インストラクションに必要とされるビット数を低減させる。
【００１６】
【発明の実施の形態】
プロセッサ・レイアウト
図１を参照すると、汎用目的プロセッサが、ブロック図の形態で示されている。図１においては、アクセス・ユニットの４つのコピーが示されており、それぞれは、アクセス・インストラクション・フェッチ・キュー１０１−１０４を伴っている。それぞれのアクセス・インストラクション・フェッチ・キューＡ−キュー１０１−１０４は、アクセス・レジスタファイルＡＲ１０５−１０８にカップルされており、これらはぞれぞれ２つのアクセス機能ユニットＡ１０９−１１６へとカップルされている。典型的な実施の形態においては、プロセッサのそれぞれのスレッドは、６４のオーダの汎用目的レジスタ（例えば、ＡＲの１０５−１０８およびＥＲの１２５−１２８）を含んでいる。アクセス・ユニットは、独立した４つの同時実行として機能し、それぞれ、演算および分岐インストラクションの実行およびロードを実行させ、アクセス・メモリが記憶インストラクションを実行することによりプログラム制御されたフローを計算する。これらのアクセス・ユニットはまた、ワイド・オペランド・インストラクションのためのワイド・オペランド・スペシファイアを提供する。これらの８つのアクセス機能ユニットＡ１０９−１１６は、アクセス・レジスタ/
ファイルＡＲ１０５−１０８および共有メモリ・システム１１７−１２０へのメモリ・アドレスのための結果を発生させる。
【００１７】
メモリ・システムは、キャッシュ・メモリと、ニッシェ・メモリ１１７との組み合わせと、外部バス・インタフェイス１１８と、デバイスの外部におけるセコンダリ・キャッシュ１１９と、Ｉ／Ｏデバイス１２０を含むメイン・メモリ・システム１２０とを含んでいる。メモリ・システム１１７−１２０からフェッチされたメモリ内容は、アクセス・ユニットにより実行される実行インストラクションと組み合わされ、４つの実行インストラクションキューＥ−Ｑ１２１−１２４へと入力される。４つのワイド・インストラクションについては、メモリ・システム１１７−１２０からフェッチされたメモリ内容ga
また、バス１３７によりワイド・オペランド・マイクロキャッシュ１３２−１３６へと与えられている。Ｅ−キュー１２１−１２４からのインストラクションおよびメモリ・データは、実行レジスタ・ファイル１２５−１２８へと与えられ、これらは、実行レジスタ・ファイル・ソース・オペランドをフェッチさせる。インストラクションは、実行ユニット調停ユニット“アルビトレーション”１３１へとカップルされ、このアルビトレーション１３１は、４つのスレッドからのどのインストラクションが利用可能な実行機能ユニットＥ１４１，１４９，Ｘ１４２，１４８，Ｇ１４３−１４４，１４６−１４７，Ｔ１４５へとルーティングされるべきかを選択する。実行機能ユニットＥ１４１、１４９と、実行機能ユニットＸ１４２，１４８と、実行機能ユニットＴ１４５は、それぞれワイド・オペランド・マイクロキャッシュ１３２−１３６を含んでおり、これらのマイクロキャッシュは、バス１３７によりメモリ・システム１１７へとカップルされている。
【００１８】
実行機能ユニットＧ１４３−１４４および１４６−１４７は、グループ・オペレーションを含む簡単な演算および論理インストラクションを実行する演算ユニットおよび論理ユニットのグループであり、ソース・オペランドと結果オペランドとは、特定されたシンボル・サイズの値グループを示し、これらのオペランドは、パーティションされていると共に別々に実行され、結果が互いに記憶される。本発明の好適な実施の形態においては、データ・パスは、１２８ビット幅を有しているが、本発明は、データ・パスの特定のサイズに限定することを意図するものではない。
【００１９】
実行機能ユニットＸ１４２，１４８は、クロスバー・スイッチ/
インストラクションを実行するクロスバー・スイッチ・ユニットである。クロスバー・スイッチ・ユニット１４２，１４８は、データ・パス・オペランド・バス１５１−１５８を介して与えられる、データ・ストリームのハンドリング・オペレーション、例えば分配、シャッフル、シフト、イクスパンド、圧縮、スイズル、パーミュート、リバース、プラスを含む、後述する広い動作を実行する。本発明の第１の構成におけるキー・エレメントは、少なくとも上述した１つのオペレーションが、通常のレジスタおよびデータ・パス幅よりも広く拡張されることにある。
【００２０】
実行機能ユニットＥ１４１，１４９は、大きなアレイ乗算を使用するアンサンブルインストラクションを実行させるアンサンブル・ユニットであり、グループまたはベクトル乗算と、整数として処理されるデータ・パス・ソース・オペランド・バス１５１−１５８からパーティションされた、オペランドのマトリックス乗算と、浮動小数点と、多項式またはガロア体の値を含んでいる。マトリックス・マルチプライ・インストラクションおよび他のオペレーションは、ワイド・オペランド・マイクロ・キャッシュ１３２，１３６にロードされたワイド・オペランドを使用する。
【００２１】
実行機能ユニットＴ１４５は、レジスタ・オペランドからパーティションされたオペランドのグループのテーブル−ルック−アップ操作を実行するトランスレート・ユニットであり、結果を記憶する。ワイド・トランスレート・インストラクションは、ワイド・オペランド・マイクロキャッシュ１３４内にロードされたワイド・オペランドを使用する。
【００２２】
実行機能ユニットＥ１４１，１４９、実行機能ユニットＸ−１４２，１４８および実行機能ユニットＴは、それぞれ専用化された記憶部を含んでいて、後述するワイド・オペランドを含むソース・オペランドの記憶を許可する。専用化された記憶部１３２−１３６は、ワイド・マイクロキャッシュと考えることができ、典型的にはデータ・パス・ソース・オペランド・バス１５１−１５８に関連するデータ・パス・オペランドの多数の幅を有している。このため、データ・パス１５１−１５８の幅が１２８ビットである場合には、専用記憶部１３２−１３６は、２５６，５１２，１０２４，２０４８ビットの幅を有する。専用化された記憶部の全幅を使用するオペランドを、本発明においてはワイド・オペランドといい、すべての場合についてオペランドが専用化された記憶部の幅を完全に使用することは必要とされない：ワイド・オペランドは、メモリ・システム１７−１２０の出力のメモリ・データ・パスおよび機能ユニット・データ・パスの実行機能ユニット１４１−１４９の入力の幅よりも広い部分を使用するだけで充分であり、これら２つの組み合わせた幅より大きくなくともよい。専用化された記憶部１３２−１３６は、メモリ・オペランド・バス１３７の幅よりも広いので、ワイド・オペランドの一部は、連続的に専用化された記憶部１３２−１３６へとロードされる。しかしながら、一度ロードされると、ワイド・オペランドは、その後実質的に同時に使用されることができる。機能ユニット１４１−１４９と、それらに伴われる実行レジスタ１２５−１２８とは、データ・機能ユニットを形成し、その正確な要素は、実装に際して変更することができる。
【００２３】
実行レジスタ・ファイルＥＲ１２５−１２８ソース・オペランドは、実行ユニット１４１−１４５へとソース・オペランド・バス１５１−１５４を使用し、katu
実行ユニット１４５−１４９へとソース・オペランド・バス１５５−１５８を使用してカップルされている。実行ユニット１４１−１４５からの機能ユニット結果オペランドは、実行レジスタ・ファイルＥＲ１２５−１２８へと、結果バス１６１２を使用してカップルされており、実行ユニット１４５−１４９からの機能ユニット結果オペランドは、結果バス１６２を使用して実行レジスタへとカップルされている。
【００２４】
ワイド・マルチプライ・マトリックス
本発明のワイド・オペランドは、図２に示すワイド・マルチプライ・マトリックス・インストラクションといった複雑なインストラクションを実行する能力を提供し、またこれは、図３のように別の形態として理解することもできる。図２および図３から理解されるように、ワイド・オペランドは、例えばデータ・パス幅を超える種々のサイズおよび形状のマトリックスの乗算を可能とする。図２の実施の形態は、１２８＊６４サイズのビット（この実施の形態においては、５１２ビット）レジスタｒｃにより特定されるマトリックスが、１２８ビットのレジスタｒｂに含まれるベクトルにより乗算が行われ、得られた結果が１２８ビットのレジスタｒｄに配置されている。
【００２５】
図２およびその後の類似の図において使用されているノーテーションは、斜線を引いた領域で垂直および水平の次元に射影された２つのオペランドの交差部における乗算を示したものである。加算ノードは、加算されるマルチプライヤにの位置におけるダークエンド・ドットで示されたライン・セグメントにより示されている。加算ノードにおいて減算される積は、斜線が付けられた領域内のマイナス・シンボルにより示されている。インストラクションが、浮動小数点の値でオペレーションされる場合には、示された乗算および加算は、浮動小数点の乗算と加算とになる。例示的な実施の形態においては、これらの動作は、中間的な結果をラウンディングすることなく実行され、このため最終的な結果が有限の精度で算出され、一度だけラウンディングが行われるかのように算出される。
【００２６】
インストラクションが、浮動小数点値でオペレートされる場合には、乗算および加算は、浮動小数点乗算および加算となる。マルチプライヤの例示的な実施の形態においては、積を、キャリーを保存する形態において算出し、かつブース・エンコーディングを使用してマルチプライヤをエンコードして、回路領域およびディレイを低減させることができることが理解されよう。上述した加算ノードの例示的な実施の形態においては、積の加算は、バイナリ、またはより高次のラディックス・ツリーにおいて加算を実行するといった計算ディレイを最低化させる特定の配慮により、いかなるオーダにおいて実行することができ、かつキャリーを保存するアダーを使用して加算を行い、加算のディレイを最低化することができることが理解されよう。また、例示的な実施の形態においては、固定小数点または浮動小数点オーバーフローが、中間結果において発生しないように充分な中間精度を使用して実行することができることを理解できよう。
【００２７】
図２および図３を比較することにより、これらの２つの図においては、同一の動作が示されているので、図２において使用されるノーテーションと、図３における、より従来の概略的なノーテーションとの間の関係を明確化することができる。
【００２８】
ワイド・オペランド
プロセッサのデータ・パス幅よりも実質的に大きなオペランドは、汎用目的レジスタを使用することにより、メモリ・スペシファイアを特定するために与えられており、１ビット、またいくつかの実施の形態においては、データの数データ・パス幅が、専用記憶部に読取られる。メモリ・スペシファイアは、典型的には動作されるデータ・マトリックスのサイズと、形状とともに、メモリ・アドレスを含んでいる。メモリ・スペシファイア、またはワイド・オペランド・スペシファイアは、図５からより理解することができ、スペシファイア５００がアドレスとして示され、加えてサイズ／２を示すフィールドと、さらに幅／２のフィールドとが示されており、サイズは、データの深さと、幅との積である。アドレスは、特定のサイズ、例えば６４バイトへと配列されているので、複数の低次ビット（例えば６ビット）がゼロとなる。スペシファイア５００は、このようにしてアドレスのための第１のフィールド５０５と、低次の６ビット内においてサイズと幅とを示す、２つのフィールド識別子５１０を含んでいるのが示される。
【００２９】
スペシファイア・デコーディング
スペシファイア５００のデコーディングは、さらに図６から理解される。図６においては、所定のスペシファイア６００が、複数の低次ビットを含むフィールド６１０とともにアドレス・フィールド６０５から形成されいる。ステップ６１５およびステップ６２０で示される演算動作のシリーズにより、幅／２を示すフィールド６１０の部分が与えられている。６２５および６３０で示される同様のステップのシリーズにおいては、ｔの値がデコードされ、その後サイズおよびアドレスをデコードするために使用される。フィールド６２０の部分は、サイズ／２を表し、ステップ６３５および６４０で示されるようにデコードされるが、アドレスは、ステップ６４５および６５０において同様にしてデコードされる。
【００３０】
ワイド・機能ユニット
ワイド機能ユニットは、図７から理解することができ、レジスタ・ナンバー７００は、オペランド・チェッカ７０５へと与えられている。ワイド・オペランド・スペシファイア７１０は、オペランド・チェッカ７０５と通信し、かつ規定されたメモリ幅を有するアドレス・メモリ７１５と通信を行う。メモリ・アドレスは、複数のレジスタ・オペランド７２０Ａ−ｎを含んでおり、これらは、データ機能ユニット７２５の専用記憶部７１４に積算される。図７の例示的な実施の形態においては、専用記憶部７１４は、８データ・パス幅に等しい幅を有しており、８つのワイド・オペランド部分７３０Ａ−Ｈが連続して専用記憶部へとロードされて、ワイド・オペランドを形成する。図７においては、８つの部分が示されているが、本発明は８またはいかなる別の特定の多重のデータ・パス幅に限定されるものではない。ワイド・オペランド部分７３０Ａ−Ｈは、連続してロードされ、これらは、機能要素７４０により単一のワイド・オペランド７３５として使用することができ、これに接続された図１からのいかなる要素または複数の要素とすることができる。ワイド・オペランドの結果は、その後結果レジスタ７４５へと与えられ、この好適な実施の形態においては、メモリ幅と同一とされている。
【００３１】
ワイド・オペランドが成功裏に専用記憶部７１４へとロードされると、本発明の第２の構成が、理解できる。同一のメモリ・アドレスを特定するインストラクションまたは別の同様なインストラクションの実行は、専用化記憶部を読出してメモリ・オペランドがインストラクションの調停により変更されたか否かを判断する特定の条件の下での、オペランド値を取得する。これらの条件が適合すると仮定する場合、専用化記憶部からフェッチされるメモリ・オペランドは、機能ユニットにおける１つまたはそれ以上のメモリ・オペランドと結合されて、結果を発生させる。いくつかの実施の形態においては、結果のサイズは、汎用レジスタのサイズに制限され、同様の専用記憶部は、結果のためには必要とされない。しかしながら、いくつかの別の実施の形態においては、結果は、ワイド・オペランドとされ、さらに性能が向上される。
【００３２】
同一のメモリ・アドレスを特定するそれに続くインストラクションによりアドレスされるワイド・オペランド値を許容するために種々の条件がチェックおよびコンファームされる必要がある。これらの条件を以下に挙げる。
１．それぞれのメモリ・インストラクションは、専用メモリについて記録されるメモリ・アドレスに対して、メモリ・アドレスをチェックすることである。いかなるマッチであっても、専用化記憶部７１４に記憶されたメモリ・アドレスのいずれかに向けられるメモリ記憶インストラクションが、データをオーバーライトしてしまうことになるので、記憶部が正当ではないものとしてマークされる。
２．記憶部をアドレスするために用いられるレジスタ・ナンバーが記録される。レジスタにまったく調停インストラクションが書き込まれておらず、かつ同一のレジスタがそれに続くインストラクションにおいて使用される場合には、記憶部は、正当である（規則＃１により正当ではないとマークされていない限りである）。
３．レジスタが変更されているか、または異なったレジスタ・ナンバーが使用されている場合、レジスタの値が読取られ、専用化記憶部に記録されたアドレスに対して比較が行われる。これは、レジスタの内容をフェッチする必要があり、かつレジスタの幅がレジスタ・ナンバー自体よりも大きいので、＃１以上の資源を使用する。アドレスが適合する場合には、記憶部は正当である。新たなレジスタ・ナンバーは、専用化記憶部に記録される。
４．条件＃２または＃３に適合しない場合には、レジスタ内容は、汎用目的プロセッサのメモリをアドレスするため、および専用化記憶部にロードするために用いられる。専用化記憶部がすでに完全にロードされている場合には、専用化記憶部の部分は、廃棄（犠牲）にされて、新たな値のための空間が形成される。インストラクションは、その後新たにアップデートされる専用化記憶部を使用して実行される。アドレスおよびレジスタ・ナンバーは、専用化記憶部について記録される。
【００３３】
上述した条件をチェックすることにより、専用化記憶部を保存し、かつレストアする必要が排除できる。加えて、プロセッサのコンテキストが変更され、新たなコンテキストが同一の専用化記憶部を参照するワイド・インストラクションを使用しない場合には、元のコンテキストがレストアされ、専用化記憶部の内容は、チェック規則を使用して、＃３メモリから値が更新されずに使用することが可能となる。専用化記憶部内の値はメモリから読取られ、ワイド・オペレーションの実行により直接変更されないので、値は、汎用メモリに結果を記録することなく廃棄することができる。
【００３４】
本発明の別の実施の形態においては、上述した規則＃１を、下記の規則で置き換えることができる。
１ａ．それぞれのメモリ記録インストラクションは、専用化記憶部に対して記録されたメモリ・アドレスについてメモリ・アドレスをチェックすることができる。いかなるマッチングであっても、汎用メモリの他、専用化記憶部のアップデートを行わせる。
上述した規則１ａを用いることにより、メモリ記憶インストラクションは、専用化記憶部を変更することができ、変更された専用化記憶部のちょうど一部をアップデートし、残りを不変のままとする。汎用メモリのアップデートを続けることにより、専用化メモリの内容は、汎用メモリ内に結果を記録することなく、いつでも廃棄することができる。このため、規則＃４は、この選択を行う場合には、より複雑にはならない。この別の実施の形態の効果は、専用化記憶部は、メモリ記憶動作により廃棄（正当でなく）する必要がない。
【００３５】
ワイド・マイクロキャッシュ・データ構造
図９を参照して、ワイド・マイクロキャッシュまたは専用化記憶部１１４のデータ構造の例示的な構成をよりよく理解できる。実施の形態においては、８つの数が示されているが、ワイド・マイクロキャッシュの内容ｗｍｃ．ｃは、複数のデータ・パス幅９００Ａ−ｎを形成するのを示すことができる。物理アドレスｗｍｃ．ｐａは、示された実施の形態においては６４ビットとして示されているが、本発明においては、特定の幅に制限されるものではない。内容のサイズ、ｗｍｃ．ｓｉｚｅはまた、例示する実施の形態においては１０ビットとして示されるフィールドに示されている。１ビットの“内容正当フラグ”ｗｍｃ．ｃｖはまた、最後に使用された２ビット・フィールド、すなわちｗｍｃ．ｔｈと共にデータ構造内に含まれている。加えて、最後に使用したレジスタの６ビット・フィールド、ｗｍｃ．ｒｅｇは、例示する実施の形態において与えられている。さらに、レジスタのための１ビット・フラグおよびスレッド正当フラグ、ｗｍｃ．ｒｔｖが与えられている。
【００３６】
ワイド・マイクロキャッシュ・コントロール−ソフトウエア
マイクロキャッシュを初期にワイド・オペランドで書き込むプロセス、およびその後に早い後続のオペレーションにより正当であるとの承認は、図８から、よりよく理解することができる。プロセスは８００から開始し、ステップ８０５へと進んで、レジスタの内容が記憶された値ｗｍｃ．ｒｃのチェックが行われる。これがｔｒｕｅである場合には、ステップ８２０においてチェックが行われ、スレッドが認証される。ｔｒｕｅの場合には、その後ステップ８１５へと進んでレジスタおよびスレッドが正当であるか否かを認証する。ステップ８１５においてｔｒｕｅであると報告される場合には、ステップ８２０においてチェックが行われ、内容が正当であるか否かを認証する。ステップ８０５からステップ８２０のステップがｔｒｕｅを返す場合には、後続するインストラクションは、プロセスが終了した後、ステップ８２５に示されるように既存のワイド・オペランドを使用することが可能となる。しかしながら、ステップ８０５からステップ８２０のいずれかのステップがｆａｌｓｅを返す場合には、プロセスは、ステップ８３０へと分岐して、内容、物理アドレス、サイズをセットする。ステップ８０５からステップ８２０は、すべてステップ８２５または８３０へと導き、ステップ８０５からステップ８２０は、いかなる順番でも、または同時にでもプロセスを変更することなく実行することができる。プロセスはその後、ステップ８３５へと進んで、サイズがチェックされる。このチェックは、基本的にはトランスレーション・ユニットのサイズが、ワイド・オペランドのサイズよりも大きいかまたは等しいかを保証するものなので、物理アドレスは、直接仮想アドレスの使用に直接置き換えることができる。考慮すべきことは、いくつかの実施の形態においては、ワイド・オペランドは、仮想メモリ・システムがマッピングすることができる、最低領域よりも大きいことである。この結果、単一の連続的な仮想アドレス範囲が多重の、連結されていない物理アドレス領域へとマッピングでき、物理アドレスを比較するタスクを複雑化させる。ワイド・オペランドのサイズを決定することにより、およびそのサイズを、参照される仮想アドレス・マッピング領域と比較することにより、ワイド・オペランドがマッピング領域よりも大きな場合には、インストラクションを例外トラップにより中断させる。これは、プロセッサの確実な動作を保証するものである。ソフトウエアは、その後より大きなサイズ・マップを使用して領域を再度マッピングし、所望する場合には実行を継続することができる。このようにして、ステップ８３５においてサイズが許容できないことが報告される場合には、ステップ８４０において例外処理が発生される。サイズが許容できる場合には、プロセスはステップ８４５へと進んで、物理アドレスがチェックされる。このチェック・レポートが適合する場合には、プロセスはステップ８５０へと進んで内容正当フラグが生成されているか否かをチェックする。ステップ８４５またはステップ８５０のチェックがいずれかがｆａｌｓｅであると報告される場合には、プロセスは分岐し、新たな内容が、専用化記憶部１１４へと書き込まれ、そのフィールドが、それにしたがって設定される。ステップ８５０のチェックがｔｒｕｅであると報告される場合、またはステップ８５５において新たな内容が書き込まれた場合には、プロセスは、ステップ８６０へと進んで適切なフィールドを設定して、データが正当であることを示し、その後要求される機能がステップ８２５において実行される。その後、プロセスは終了する。
【００３７】
ワイド・マイクロキャッシュ・コントロール−ハードウエア
図１０および図１１を参照すると、これらの図は、ともにハードウエアの観点からマイクロキャッシュ・コントローラの動作を示した図であり、マイクロキャッシュ・コントローラの動作がより良く理解できる。ハードウエアの実装においては、上述した図８および図９のステップにおける連続するステップとして示された条件が並列的に実行され、上述したワイド・オペランド・チェックのためのディレイが低減されている。さらに、示されたハードウエアのコピーは、それぞれワイド・マイクロキャッシュを含んでいて、インストラクションにより上述したすべてのマイクロキャッシュを交互に参照することができ、並列的にテストすることができる。上述した図８および図９についてさらに説明を行うことにより、図１０および図１１についてさらに説明する必要はないであろう。
【００３８】
ワイド・オペランドを使用するための種々の別の実施の形態があり、単一のインストラクションが２つのワイド・オペランドを受け取り、オペランドをシンボルへとパーティションし、対応するシンボルを互いに乗算し、積を加算して、和の一部のイクストラクションの後、可能であれば、単一のスカラ値またはレジスタ・ファイルの幅のパーティションされた値のベクトルを生成することを含むものである。上述したインストラクションは、ビデオ圧縮における運動の検出または運動の見積もりのために有効である。上述したインストラクションのさらなる改善は、専用化記憶部において、あらかじめ特定されたワイド・オペランドの領域内にある場合には、１つのワイド・オペランドのアドレスを、上述した範囲内にすでに含まれていない部分のみをロードし、必要に応じて領域内の部分をシフトさせることでで専用化記憶部を順次的にアップデートすることにより行うことができる。このような改善は、動作を可能な値の“スライド・ウインドウ”を介して実行することを可能とする。このようなインストラクションにおいては、１つのワイド・オペランドが揃えられ、サイズ情報と形状情報とを与えるが、順次的にアップデートされる第２のワイド・オペランドは、揃えられない。
【００３９】
本発明の別の実施の形態では、結果オペランドがワイド・オペランドとされる付加的なインストラクションが定義される。このような改善は、結果が汎用レジスタのサイズよりも大きくない場合の制限を無くすることで、性能を向上させるものである。これらのワイド・結果を生成する機能ユニットへとローカルにキャッシュすることができるが、記憶部が再度使用される前であって、かつ仮想メモリ・システムがワイドな結果のアドレスをマッピングする前に汎用メモリ・システムへとコピーされる必要がある。データ・パスは、ロード動作および他のワイド・オペレーションが、これらのワイドな結果を読取ることができるように加えられる必要がある。機能ユニットの出力からワイド・結果を、その入力へと回送して戻すことは比較的容易であるが、ワイド・結果をワイド・オペランドとして別の機能ユニットへと回送して戻す場合には、追加のデータ・パスを導入することができる。
【００４０】
上述したように、メモリ・オペランドのサイズと形状とは、アドレスの低次のビットに含まれている。本発明において好ましい実装においては、上述したメモリ・オペランドは、典型的にはサイズが２の累乗で、かつそのサイズに揃えられている。通常では、全サイズの半分がメモリ・アドレスに加えられ、（またはＯＲを含み、またはＯＲを含まない）、データ幅の半分がメモリ・アドレスに加えられる（またはＯＲを含み、またはＯＲを含まない）。これらのビットは、デコードされ、かつメモリ・アドレスから読み取られ、コントローラは、必要とされるアドレスを通してステップを実行させる。これは、これらのインストラクション、サイズ、形状のために必要な別々のオペランドの数を減少させ、かつメモリ・オペランドのアドレスが単一のレジスタ・オペランド値へと結合させる。
【００４１】
後述する表は、後述する図における疑似コードに使用される演算および記述のノーテーションを示す。
0004933693.tif 000002
【００４２】
ワイド・オペレーション
本発明により定義される、特定の実施の形態のワイド・オペレーションとしては、ビット・レベルでスイッチングを行うワイド・スイッチ・インストラクション；バイト（またはより大きな）テーブル・ルックアップを実行するワイド・トランスレート・インストラクション；ワイド・マルチプライ・マトリックス；ワイド・マルチプライ・マトリックス・イクストラクト；ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート（後述する）；ワイド・マルチプライ・マトリックス・フローティング−ポイントおよびワイド・マルチプライ・マトリックス・ガロア（また、後述する）を挙げることができる。後述するディスカッションは、例示するインストラクションのための特定のサイズに焦点をあてるが、本発明は、特配の幅に限定されるわけではない。
【００４３】
ワイド・スイッチ
ワイド・スイッチの例示的な実施の形態は、図１２Ａ〜図１２Ｄに示されている。例示的な実施の形態においては、ワイド・スイッチ・インストラクションは、２つのレジスタ（２５６ビット）までの内容をビット・レベルで再配置し、全幅（１２８ビット）のレジスタ結果を生成する。再配置を制御するため、ビット・ポジションあたり８ビットから構成され単一のレジスタにより特定されるワイド・オペランドが使用される。それぞれの結果ビット・ポジションについて、ビット・ポジションそれぞれ８ビット幅のワイド・オペランド・ビットが結果に配置される２５６の可能なソース・レジスタ・ビットを選択する。１２８バイトよりも小さなワイド・オペランド・サイズが特定される場合には、メモリ・オペランドの高次オーダーは、結果ビット・ポジションに対応する値と置き換えられ、メモリ・オペランドは、オペランド・サイズのシンボル内のビット選択を特定し、それぞれのシンボルにつき、同一の動作を実行させる。
【００４４】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからのアドレスを取得して、メモリから大きなオペランドをフェッチさせると共に、汎用レジスタから第２のオペランドをフェッチさせ、オペランド内のビットのパーティション上で動作のグループを実行させ、結果を互いに記憶させ、汎用レジスタ内に結果を配置させる。ワイド・スイッチ・インストラクションのフォーマット１２１０の例示的な実施の形態を、図１２Ａに示す。
【００４５】
ワイド・スイッチ・インストラクションの概略的な１２３０の例示的な実施の形態を、図１２Ｂに示す。例示的な実施の形態においては、レジスタｒｃの内容は、仮想アドレスと、随意にオペランド・サイズとを特定し、特定されたサイズの値は、メモリからロードされる。メモリ値からの８つの対応するビットは、第２の値からの単一の結果ビットを選択するために使用される。結果のグループは、記憶され、かつレジスタｒａ内に配置される。
【００４６】
例示的な実施の形態においては、仮想アドレスは、１２８バイトに揃えられるか、または揃えられたアドレスの和とされると共に、バイト内のメモリ・オペランドのサイズ半分とされる必要がある。揃えられたアドレスは、バイト内で表現されるサイズの積をイクストラクションする。メモリ・オペランドのサイズは、８、１６、３２、６４または１２８バイトとされる必要がある。１２８バイトよりも小さなサイズが特定された場合には、メモリ・オペランドの高次オーダーは、ビット・ポジションに対応する値に置き換えられるので、同一のメモリ・オペランドは、オペランド・サイズのシンボル内でのビット選択を特定し、かつ各シンボルで同一の動作が実行される。
【００４７】
例示的な実施の形態においては、ワイド・スイッチ（W.SWITCH.LまたはW.SWITCH.B)インストラクションは、８−ビットの位置を、それぞれの結果ビットにつき、メモリ・オペランドから特定し、レジスタｒｄおよびｒｂの記憶された内容により表現される２５６ビットのうちの１つを選択する。
【００４８】
ワイド・スイッチ・インストラクションの疑似コード１２５０の例示的な実施の形態を図１２Ｃに示す。ワイド・スイッチ・インストラクション１２８０を除外した例示的な実施の形態を、図１２Ｄに示す。
【００４９】
ワイド・トランスレート
ワイド・トランスレート・インストラクションの例示的な実施の形態を、図１３Ａ〜図１３Ｄに示す。例示的な実施の形態においては、ワイド・トランスレーション・インストラクションは、ワイド・オペランドを使用して２５６エントリの深さと、１２８ビットの幅を有するテーブルを特定する。レジスタの内容は、１、または２、または４、または８バイトのオペランドへとパーティションされ、このパーティションは、テーブルから並列的に値を選択するために用いられる。テーブルの深さと幅とは、上述したようにワイド・オペランドのサイズと形状とを特定することにより選択することができる。
【００５０】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからアドレスを取得して、メモリから大量のオペランドをフェッチし、汎用レジスタから第２のオペランドをフェッチして、オペランド中のビットのパーティションにおいてグループ・オペレーションを実行させ、かつ結果を互いに記憶させ、その結果を汎用レジスタに配置させる。ワイド・トランスレート・インストラクションの１３１０フォーマットの例示的な実施の形態は、図１３Ａに示されている。
【００５１】
ワイド・トランスレート・インストラクションの概略的な１３３０の例示的な実施の形態を、図１３Ｂに示す。例示的な実施の形態においては、レジスタｒｃの内容は、仮想アドレスとして使用され、かつ特定されたサイズの値がメモリからロードされる。第２の値は、レジスタｒｂの内容である。値は、サイズが特定されたオペランドのグループへとパーティションされる。値の第２のグループの低次バイトは、第１の値から構成される１つ以上のテーブルからエントリを選択するためのアドレスとして使用され、値のグループを生成する。結果のグループは、記憶され、レジスタｒｄに配置される。
【００５２】
例示的な実施の形態においては、デフォルトによりテーブルの全幅が１２８ビットとされ、テーブルの全幅は、１２８，６４，３２，１６，８ビットとされるが、より大きなグループ・サイズ：１６，８，４，２，１もまた、特定されたアドレスへとバイトでのテーブルの全幅を加えるように特定することができる。１２８ビットよりも少なく特定される場合には、テーブルは、１２８ビット幅を満たすように繰り返される。
【００５３】
例示的な実施の形態においては、それぞれのテーブルのデフォルトの深さは、２５６エントリとされるか、またはビットでのグループ・サイズの３２倍のバイトとされる。オペレーションは、アドレスに対してメモリ・オペランド・サイズの半分を加えることにより、４，８，１６，３２，６４，１２８または２５６のエントリ・テーブルを特定する。テーブル・インデックス値は、マスクされて、テーブルの特定された部分のみが使用されることを確実にさせる。ちょうど２のエントリを有するテーブルは、特定されない；２つのエントリのテーブルが望ましい場合には、レジスタへとエントリをロードすることを要求するか、Ｇ．ＭＵＸを使用してテーブル・エントリを選択する。
【００５４】
例示的な実施の形態においては、小さな深さのテーブルが大きな深さのテーブルを用いるインストラクションにより、予め初期化されたアクセス・テーブル・エントリでのインストラクションなので、全テーブルの初期化の失敗は、セキュリティの欠陥となる可能性がある。このセキュリティの欠陥は、余分なサイクルが要求される場合であっても全テーブルの初期化によるか、またはマスキング・ビットによるいずれかにより可能性が高められ、このためテーブルの初期化された部分のみが使用されることになる。例示的な実施の形態は、一度に１２８のテーブル・エントリを書き込むことによりサイクルの不利益をまったく生じさせずに全テーブルを初期化する。一度でただ１つのエントリを書き込む全テーブルの初期化は、テーブルが小さな場合であっても２５６サイクルの書き込みを必要とする。インデックス・ビットのマスキングは、好ましいソリューションである。
【００５５】
例示的な実施の形態においては、インデックス・ビットのマスキングは、このインストラクションが２５６エントリよりも大きなテーブルについては、汎用目的メモリのトランスレートへと拡張できることを示している。この場合には、プロセッサは、１２８ビットを満たす独立な充分なロード・オペレーションを実行する。したがって、この機能の１６，３２，６４ビット・バージョンは、８，４，２の読み出し、または８，４，２のロード・インデックス、または１グループのイクストラクションインストラクションと等価に実行される。すなわち、このインストラクションは、２３，１１または５の以前に存在していたインストラクションとして有効である。８ビット・バージョンは、既存の４７インストラクションを置き換える単一サイクル・オペレーションなので、これらの拡張は、効果的とはいえないが、ロードあたり１サイクルのタイミングである２−イッシュー・プロセッサにおいては少なくとも５０％の改善となる。これを可能とするために、デフォルト・テーブル・サイズは、インストラクションの１６ビット、３２ビット、６４ビット・バージョンに対して６５５３６、２＾３２および２＾６４となる。
【００５６】
例示的な実施の形態においては、このインストラクションのビッグ−エンディアン・バージョンについては、下記に定義するように、レジスタｒｂの内容は、相補的となる。これは、テーブルを組織化して、最も低いアドレスとされたテーブル・エントリが、インデックスがゼロとなるように選択する要求に反映される。論理実装の例示的な実施の形態においては、相補的なインデックスは、ビッグ−エンディアン・バージョンおよびリトル−エンディアン・バージョンについては、別々のテーブルメモリをロードすることにより避けることができる。相補的なインデックスを避けるために、テーブル・メモリは、アドレスを相補化することによってビッグ−エンディアン・バージョンについて別々にロードされ、この場合には、テーブル・エントリは、インストラクションのビッグ−エンディアン・バージョンのためのテーブルへと書き込まれる。
【００５７】
例示的な実施の形態においては、仮想アドレスは、それぞれ４０９６バイトに揃えられるか、または揃えられたアドレスの和とされ、メモリ・オペランドのバイトの半分および／またはバイトの所望する全テーブル幅とされる。揃えられたアドレスは、バイトにより表現されるサイズの正確な倍数となる。メモリ・オペランドのサイズは、４〜４０９６までの２の累乗となるが、グループ・サイズの少なくとも４倍および全テーブル幅の４倍とする必要がある。アドレスが正当でない場合には、“アクセスが仮想アドレスにより許可されない”例外が発生する。
【００５８】
例示的な実施例においては、ワイド−トランスレート（W.TRANSLATE.8.LまたはW.TRANSLATE.8.B）インストラクションは、深さが１６エントリ（ｖｓｉｚｅ＝１６）であり、グループ・サイズが１バイト（ｇｓｉｚｅ＝８ビット）、幅が８バイト（ｗｓｉｚｅ＝６４ビット）のトランスレーション・テーブルを特定する。アドレス特定においては、アドレスは、全テーブル・サイズ（ｍｓｉｚｅ＝１０２４ビット＝ｖｓｉｚｅ＊ｗｓｉｚｅ）および全テーブル幅（ｗｓｉｚｅ＝６４ビット）を、テーブル（６４）のバイト・サイズの半分を加算し、テーブル幅（８）のバイト・サイズをテーブル・アドレスへと加えることにより特定する。インストラクションは、データ・パスの上部６４ビットおよび下部６４ビットにおける、このテーブルのコピーを生成し、オペランドの１２８ビットが一度に処理でき１２８ビットの結果が得られる。
【００５９】
ワイド・トランスレート・インストラクションの疑似コード１３５０の例示的な実施例を、図１３Ｃに示す。ワイド・トランスレート・インストラクションの例外を示した例示的な実施の形態を、図１３Ｄに示す。
【００６０】
ワイド・マルチプライ・マトリックス
ワイド・マルチプライ・マトリックス・インストラクションを、図１４Ａ〜図１４Ｅに示す。例示的な実施の形態においては、ワイド・マルチプライ・マトリックス・インストラクションは、ワイド・オペランドを使用して、６４ビット（レジスタ・ファイルおよびデータ・パス幅の半分）および１２８ビット／シンボル・サイズまでの深さのマトリックスの値を特定する。汎用レジスタ（１２８ビット）の内容は、ソース・オペランドとして使用され、シンボルのベクトルへとパーティションされ、マトリックスにより乗算されて、ソース・オペランド・シンボルのサイズの２倍のシンボルの１２８ビットまでのベクトルを発生させる。マトリックスの幅および深さは、上述したようにワイド・オペランドのサイズおよび形状を特定することにより選択することができる。インストラクションの中のコントロールは、符号が付けられた、符号が入り交じった、符号なし、複素数、または多項式オペランドの特定を可能とする。
【００６１】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからアドレスを取得し、メモリから大量のオペランドをフェッチさせ、汎用レジスタから第２のオペランドをフェッチさせ、オペランド中のビットのパーティションについてオペレーションのグループを実行させ、結果を互いに記憶させ、その結果を汎用レジスタへと配置する。ワイド・マルチプライ・マトリックス・インストラクションのフォーマット１４１０を、図１４Ａに示す。
【００６２】
ワイド・マルチプライ・マトリックス・インストラクションの概略１４３０および１４６０の例示的な実施の形態を図１４Ｂおよび図１４Ｃに示す。例示的な実施の形態においては、レジスタｒｃの内容が仮想アドレスとして使用され、特定されたサイズの値が、メモリからロードされることになる。第２の値は、レジスタｒｂの内容である。値は、サイズが特定されたオペランドのグループへとパーティションされる。第２の値は、第１の値により乗算され、その後に和算され、結果の値が生成される。結果の値のグループは、記憶され、レジスタｒｄ内に配置される。
【００６３】
例示的な実施の形態においては、メモリ−マルチプライ・インストラクション(W.MUL.MAT, W. MUL.MAT.C, W.MUL.MAT.M, W.MUL.MAT.P, W. MUL.MAT.U)は、８１９２ビット、６４×１２８ビットまでのパーティションされたアレイの乗算を実行する。アレイの幅は、６４，３２，または１６に制限することができるが、本発明においてはグループ・サイズの２倍よりも小さくなければ、仮想アドレス・オペランド：４，２または１へとバイトを所望するサイズの半分を加えることにより制限することができる。アレイは、仮想的に１２８、６４，３２，または１６ビットへと制限することができるが、しかしながらグループ・サイズの２倍より小さくなければ、仮想アドレス・オペランドへとバイトで、所望するメモリ・オペランドの半分を加えることにより制限することができる。
【００６４】
例示的な実施の形態においては、仮想アドレスは、１０２４／ｇサイズのバイト（または、W.MUL.MAT.Cについては、５１２／ｇバイト）（ｇサイズは、ビットにおいて計る）、または揃えられたアドレスの和およびバイト単位でのメモリ・オペランドのサイズの半分および／またはバイトにおいて結果のサイズの１／４とする必要がある。揃えられたアドレスは、バイトにおいて表現されたサイズの正確な倍数とされている必要がある。アドレスが正当でない場合には、“仮想アドレスによりアクセス許可されず”の例外が発生する。
【００６５】
例示的な実施の形態においては、ワイド−マルチプライ−オクトレット・インストラクション(W.MUL.MAT.type.64, type=NONE MUP)は実装されず、反転されたインストラクションの例外が発生し、アンサンブル−マルチプライ−サム−オクトレット・インストラクション(E.MUL.SUM.type.64)は、マルチプライヤがメモリではなく、１２８ビットレジスタからソースされることを除き同一の動作を実行する。同様に、ワイド−マルチプライ−コンプレックス−クアドレット・インストラクション(W.MUL.MAT.C.32)の代わりに、アンサンブル−マルチプライ−コンプレックス−クアドレット・インストラクション(E.MUL.SUM.C.32)を使用することもできる。
【００６６】
図１４Ｂに示されるように、ワイド−マルチプライ−ダブレット・インストラクション(W.MUL.MAT, W.MUL.MAT.M, W.MUL.MAT.P, W.MUL.MAT.U)は、メモリ[m31m30...m1m0]に対して、ベクトル[hgfedcba]を乗算して、積、
[hm31+gm27+...+bm7+am3...hm28+gm24+...+bm4+am0]を生成する。
【００６７】
図１４Ｃに示されるように、ワイド−マルチプライ−マトリックス−コンプレックス−ダブレット・インストラクション(W.MUL.MAT.C)は、メモリ[m15m14...m1m0]とベクトル[hgfedcba]とを乗算して、積[hm14+gm15+...+bm2+am3...hm12+gm13+...+bm0+am01-hm13+gm12+...-bm1+am0]を生成する。
【００６８】
ワイド・マルチプライ・マトリックス・インストラクションの疑似コード１４８０の例示的な実施の形を、図１４Ｄに示す。ワイド・マルチプライ・マトリックス・インストラクションの例外１４９０の例示的な実施の形態を、図１４Ｅに示す。
【００６９】
ワイド・マルチプライ・マトリックス・イクストラクト
ワイド・マルチプライ・マトリックス・イクストラクトの例示的な実施の形態を、図１５Ａ〜図１５Ｆに示す。例示的な実施の形態においては、ワイド・マルチプライ・マトリックス・イクストラクト・インストラクションは、ワイド・オペランドを使用して、１２８ビットまでの幅の値レジスタ・ファイル（データ・パスの全幅である）および１２８ビット／シンボル・サイズの深さのマトリックスを特定する。汎用レジスタ（１２８ビット）の内容は、ソース・オペランドとして用いられ、シンボルのベクトルへとパーティションされ、マトリックスと乗算されて、ソース・オペランドのサイズの２倍であるシンボルの２５６ビットの幅のベクトルと、付加的なビットとを加算して、オーバーフローさせずに積の和を与える。結果は、インストラクションにより特定される汎用レジスタの内容により制御されるように、その後、後述する方法によりイクストラクションされる（結果イクストラクションによる、エンハンスド・マルチプライ・バンドウイドス）。汎用レジスタはまた、オペランドのフォーマット；オペランドのサイズの他にも、符号がついているか、符号が混合しているか、符号がないか、複素数であるか、バイト（８ビット）、ダブレット（１６ビット）、クアドレット（３２ビット）、またはヘックスレット（６４ビット）であるかを特定する。
【００７０】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからのアドレスを取得し、メモリから大量のオペランドをフェッチし、汎用レジスタから第２のオペランドをフェッチし、オペランド中のビットのパーティションにおいてグループとなったオペレーションを実行させ、その結果を互いに記憶させ、その結果を汎用レジスタ内に配置させる。ワイド・マルチプライ・マトリックス・イクストラクト・インストラクションのフォーマット１５１０を、図１５Ａに示す。
【００７１】
ワイド・マルチプライ・マトリックス・イクストラクト・インストラクションの概略の例示的な実施の形態を、図１５Ｃおよび図１５Ｄに示す。例示する実施の形態においては、レジスタｒｃの内容は、仮想アドレスとして用いられ、かつ特定のサイズの値は、メモリからロードされる。第２の値は、レジスタｒｄの内容である。グループのサイズと別のパラメータとは、レジスタｒｂの内容から特定される。値は、特定されたサイズのオペランドのグループへとパーティションされ、乗算および加算が行われて、値のグループが形成される。値のグループは、ラウンディングされ、特定されるように制限されて、サイズが特定された結果のグループを得る。結果のグループは、記憶されレジスタｒａ内に配置される。
【００７２】
例示的な実施の形態においては、オペランドのサイズは、レジスタｒｂの内容から決定される。マルチプライヤの使用は、一定しているが、メモリ・オペランド・サイズは、グループ・サイズに逆比例する。これは、予めキャッシュの正当性のためにチェックすることができる。
【００７３】
例示する実施の形態においては、ｒｃの低次ビットは、サイズを指定するために使用され、サイズは、グループ・サイズに一致している必要がある。メモリ・オペランドがキャッシュされるので、サイズもまた、キャッシュされ、このため、ｒｂまたはｒｃいずれかについて、サイズをデコードする必要が排除できる。
【００７４】
例示する実施の形態においては、ワイド−マルチプライ−マトリックスーイクストラクト−・インストラクション(W.MUL.MAT.X.B, W.MUL.MAT.X.L)は、１６３８４ビット、すなわち１２８×１２８ビットまでのパーティションされたアレイ・マルチプライを生成する。アレイの幅は、１２８，６４，３２または１６ビットに制限することができるが、グループ・サイズの２倍よりも小さくなければ、仮想アドレス・オペランドに対してバイトにおいて所望するサイズの半分を加えることにより制限される。アレイは、仮想的に１２８、６４，３２または１６ビットに制限されるが、グループ・サイズの２倍よりも小さくないかぎり、仮想アドレス・オペランドに対するビットで所望するオペランド・サイズの半分を加えることにより、制限される。
【００７５】
図１５Ｂに示されるように、例示する実施の形態においては、レジスタｒｂの内容のビット３１，，，０は、いくつかのパラメータを特定し、これらのパラメータは、データがイクストラクションされる方法を制御する。制御フィールドのポジションおよびデフォルト値は、ソース・ポジションに対して動的な計算のために固定された制御値を加えることを可能とし、制御フィールドの下位１６ビットについて、単一のGCOPYインストラクションにより、より簡単なイクストラクション・ケースのいくつかについてセットが可能となる。
【００７６】
例示的な実施の形態においては、下記の表は、各ラベルの意味づけを示している。
0004933693.tif 000003
【００７７】
例示的な実施の形態においては、９−ビットｇｓｓｐフィールドは、グループサイズｇｓｉｚｅ、ソース・ポジション、ｓｐｏｓのそれぞれをエンコードし、式ｇｓｓｐ＝５１２−４＊ｇｓｉｚｅ＋ｓｐｏｓで示される。グループ・サイズ、ｇｓｉｚｅは、範囲１．．１２８の２の累乗であり、ソース・ポジションｓｐｏｓは、範囲０．．（２＊ｇｓｉｚｅ）−１である。
【００７８】
例示的な実施の形態においては、ｓフィールド、ｎフィールド、ｍフィールド、ｒｎｄフィールドの値は、下記の意味づけを有している。
0004933693.tif 000004
【００７９】
例示的な実施の形態においては、仮想アドレスは、揃えられている、すなわちバイトで表現されたオペランドの正確な倍数とされる必要がある。アドレスがそろっていない場合には、“アクセスは、仮想アドレスにより許容されない”の例外が発生する。
【００８０】
例示的な実施の形態においては、Ｚ（ゼロ）ラウンディングは、符号が付けられていない正確なオペレーションについては定義されておらず、試みられた場合には、リザーブド・インストラクション例外が発生する。Ｆ（フロア）ラウンディングは、適切に符号が付けられていない結果を下方向にラウンディングする。
【００８１】
図１５Ｃに示されるように、ワイド−マルチプライ−マトリックス−イクストラクト−ダブレット・インストラクション(W.MUL.MAT.X.BまたはW.MUL.MAT.X.L)は、メモリ[m63m62m61...m2m1m0]と、ベクトル[hgfedcba]とを乗算させて、積
[am7+bm15+cm23+dm31+em39+fm47+gm47+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]を発生させ、特定されたようにラウンディングされると共に制限される。
【００８２】
図１５Ｄに示すように、ワイド−マルチプライ−マトリックス−イクストラクト−コンプレックス−ダブレット・インストラクション(W.MUL.MAT.Xｒｂ内のｎセット）は、メモリ[m31m30m29...m2m1m0]と、ベクトル[hgfedcba]とを乗算し、積
[am7+bm6+cm15+dm14+em23+fm22+gm31+hm30...am2^bm3+cm10-dm11+em18-fm19+gm26-hm27am1+bm0+cm9+dm8+em17+fm16+gm25+hm24am0-bm1+cm8-dm9+em16-f17+gm24-hm25]を発生させ、特定されたようにラウンディングされ、かつ制限される。
【００８３】
ワイド・マルチプライ・マトリクス・イクストラクト・インストラクションの疑似コード１５８０の例示的な実施の形態を、図１５Ｅに示す。ワイド・マルチプライ・マトリックス・イクストラクト・インストラクションの例外の例示的な実施の形態を、図１５Ｆに示す。
【００８４】
ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート
ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションの例示的な実施の形態を、図１６Ａ〜図１６Ｅに示す。例示的な実施の形態においては、ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションは、イクストラクションを除き上述した機能と同一の機能を実行し、オペランドおよびサイズは、インストラクションのフィールドにより制御される。この形態は、要求される制御情報でレジスタを初期化させる必要なく、上述のインストラクションの共通の形態をエンコードする。インストラクションに含まれる制御は、符号が付けられたオペランド、符号が混合したオペランド、符号が付けられていないオペランド、複素数のオペランドの特定を可能とする。
【００８５】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからアドレスを取得して、大量のオペランドをメモリからフェッチさせると共に、汎用レジスタから第２のオペランドをフェッチして、オペランドにおけるビットのパーティション上でオペレーションのグループを実行させ、結果を互いに記憶させて、汎用レジスタ内に結果を配置させる。ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションのフォーマット１６１０の例示的な実施の形態を、図１６Ａに示す。
【００８６】
ワイド・マルチプライ・マトリックス・イメディエート・インストラクションの概略１６３０および１６６０の例示的な実施の形態を、図１６Ｂおよび図１６Ｃに示す。例示的な実施の形態においては、レジスタｒｃの内容は、仮想アドレスとして使用され、特定のサイズの値がメモリからロードされる。第２の値は、レジスタｒｂの内容である。これらの値は、特定されたサイズのオペランドのグループへとパーティションされ、かつカラムが乗算され、和算されて、合計のグループが生成される。合計のグループは、特定されたようにラウンディングされ、制限され、イクストラクションが行われて、結果のグループが得られ、それらは、それぞれサイズが特定されている。結果のグループは、記憶され、レジスタｒｄに配置される。すべての結果は、符号付けされ、Ｎ（nearest）ラウンディングが使用されて、すべての結果が最大の表現可能な符号付けされた値へと制限される。
【００８７】
例示的な実施の形態においては、ワイド−マルチプライ−イクストラクト−イメディエート−マトリックス・インストラクション(W.MUL.MAT.X.I, W.MUL.MAT.X.I.C)は、１６３８４ビット、すなわち１２８×１２８ビットまでのパーティションされたアレイ・マルチプライを実行する。アレイの幅は、１２８，６４，３２または１６ビットへと制限されるが、グループ・サイズの２倍よりも小さくなければバイトサイズの所望する半分を仮想アドレス・オペランドに加えることにより８，４，２または１とすることができる。アレイは、１２８，６４，３２または１６ビットへと制限することができるが、グループ・サイズの２倍よりも小さくなければバイトサイズの所望する半分を仮想アドレス・オペランドに加えることもできる。
【００８８】
例示的な実施の形態においては、仮想アドレスは、２０４８／ｇｓｉｚｅバイト（またはW.MUL.MAT.X.I.Cについて、１０２４／ｇｓｉｚｅ）、または揃えられたアドレスの合計のいずれかとする必要があり、メモリ・オペランドのサイズの半分および／またはバイトにおいて結果のサイズの半分とする必要がある。揃えられたアドレスは、バイトで表現してサイズの正確な倍数となっている必要がある。アドレスが正当でなければ、“アクセスは、仮想アドレスが許容しない”例外が発生する。
【００８９】
図１６Ｂに示されるように、ワイド−マルチプライ−イクストラクト−イメディエート−マトリックス−ダブレット・インストラクション(W.MUL.MAT.X.I.16)は、メモリ[m63m62m61...m1m2m0]と、ベクトル[hgfedcba]とを乗算し、積、
[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]を発生させ、特定されたようにラウンディングされ、かつ制限される。
【００９０】
図１６Ｃに示されるように、ワイド−マルチプライ−マトリックス−イクストラクト−イメディエート−コンプレックス−ダブレット・インストラクション(W.MUL.MAT.X.I.C.16)は、メモリ[m31m30m29...m2m1m0]と、ベクトル[hgfedcba]とを乗算し、積、
[am7+bm6+cm15+dm14+em23+fm22+gm31+hm30...am2-bm3+cm10-
dm11+em18-fm19+gm2-
hm27am1+bm0+cm9+dm8+em17+fm16+gm25+hm24am0-bm1+em18-
fm19+gm26-hm27am1+bm0+cm9+dm8+em17+fm16+gm25+hm24am0-
bm1+cm8-dm9+em16-f17+gm24-hm25]を得、特定されたようにラウンディングされ、かつ制限される。
【００９１】
ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションの疑似コード１６８０の例示的な実施の形態を、図１６Ｄに示す。ワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションの例外１５９０の例示的な実施の形態を図１６Ｅに示す。
【００９２】
ワイド・マルチプライ・マトリックス・フローティング−ポイント
ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションの例示的な実施の形態を、図１７Ａ〜図１７Ｅに示す。例示的な実施の形態においては、ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションは、浮動小数点演算で乗算および和を実行することを除き、上述したと同一の方法でマトリックスの乗算を行う。半分のサイズ（１６ビット）、シングル（３２ビット）、ダブル（６４ビット）および複合サイズ、シングル、ダブルの半分は、インストラクション内において特定することができる。
【００９３】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからアドレスを取得して大量のオペランドをフェッチさせると共に、汎用レジスタから第２のオペランドをフェッチさせ、オペランド内のビットのパーティションでのグループ・オペレーションを実行させ、その結果を互いに記憶させ、結果を汎用レジスタ内に配置する。ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションのフォーマット１７１０の例示的な実施の形態を、図１７Ａに示す。
【００９４】
ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションの例示的な実施の形態を、図１７Ｂおよび図１７Ｃに示す。例示的な実施の形態においては、レジスタｒｃの内容は、仮想アドレスとして用いられ、かつ特定のサイズの値は、メモリからロードされる。第２の値は、レジスタｒｂの内容である。値は、サイズの特定されたオペランドのグループへとパーティションされる。第２の値は、第１の値と乗算され、その後合計されて結果値のグループが生成される。結果のグループは、記憶され、レジスタｒｄ内に配置される。
【００９５】
例示的な実施の形態においては、ワイド−マルチプライ−マトリックス−フローティング−ポイント・インストラクション(W.MUL.MAT.F, W.MUL.MAT.C.F)は、１６３８４ビット、すなわち１２８×１２８ビットまでのパーティションされたアレイの乗算を実行する。アレイの幅は、１２８，６４，３２ビットに制限することができるが、グループ・サイズの倍よりも小さくなければ、仮想アドレス・オペランドへと、所望するサイズのバイトの半分を加えることで８，４または２とすることができる。アレイは、仮想的に１２８、６４，３２，または１６ビットへと制限することができるが、グループ・サイズの倍よりも小さくなければ、仮想アドレス・オペランドへと所望するサイズのバイトの半分を加えることができる。
【００９６】
例示的な実施の形態においては、仮想アドレスは、２０４８／ｇｓｉｚｅバイト（またはW.MUL.MAT.C.Fでは１０２４／ｇｓｉｚｅ）、または揃えられたアドレスの合計のいずれかとされる必要があり、バイトにおいてメモリ・オペランドのサイズの半分および／またはバイトで結果のサイズの半分とすることができる。揃えられたアドレスは、バイトで表現して正確にサイズの倍数になっていることが必要である。アドレスが正当でない場合には、“アクセスは、仮想アドレスにより許可されない”との例外が発生する。
図１７Ｂに示すように、ワイド−マルチプライ−マトリックス−フローティング−ポイント−ハーフ・インストラクション(W.MUL.MAT.F)は、メモリ[m31m30...m1m0]と、ベクトル[hgfedcba]とを乗算し、積
[hm31+gm27+...+bm7+am3...hm28+gm24+bm4+am0]を得る。
【００９７】
図１７Ｃに示されるように、ワイド−マルチプライ−マトリックス−コンプレックス−フローティング−ポイント−ハーフ・インストラクション(W.MUL.MAT.F)は、メモリ[m15m14...m1m0]と、ベクトル[hgfedcba]とを乗算して、積、
[hm14+gm15+...+bm2+am3...hm12+gm13+...+bm0+am1-hm13+gm12+...-bm1+am0]を発生する。
【００９８】
ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションの疑似コードの例示的な実施の形態を、図１７Ｄに示す。このために使用される追加された疑似コード機能および別のフローティング−ポイント・インストラクションは、図FLOART-1に示されている。ワイド・マルチプライ・マトリックス・フローティング−ポイント・インストラクションの例外１７９０の例示的な実施の形態を、図１７Ｅに示す。
【００９９】
ワイド・マルチプライ・マトリックス・ガロア
ワイド・マルチプライ・マトリックス・ガロア・インストラクションの例示的な実施の形態を、図１８Ａ〜図１８Ｄに示す。例示的な実施の形態においては、ワイド・マルチプライ・マトリックス・ガロア・インストラクションは、乗算および加算をガロア体の演算として実行することを除き、上述したと同様にマトリックスの乗算を実行する。汎用レジスタの内容は、ガロア体の残りのオペレーションを実行させるために多項式を特定する。マトリックス乗算の性質は、新規であり、詳細に後述する。
【０１００】
例示的な実施の形態においては、これらのインストラクションは、汎用レジスタからアドレスを取得してメモリから大量のオペランドをフェッチすると共に、汎用レジスタから第２のオペランドと第３のオペランドとを取得して、オペランドにおけるビットのパーティション上のグループ・オペレーションを実行し、その結果を互いに記憶させて、その結果を汎用レジスタに配置する。ワイド・マルチプライ・マトリックス・ガロア・インストラクションのフォーマット１８１０の例示的な実施例を、図１８Ａに示す。
【０１０１】
ワイド・マルチプライ・マトリックス・ガロア・インストラクションの概略１８３０の例示的な実施の形態を、図１８Ｂに示す。例示的な実施の形態においては、レジスタｒｃの内容は、仮想アドレスとして用いられ、特定されたサイズの値がメモリからロードされる。第２および第３の値は、ｒｄおよびｒｂの内容とされる。値は、サイズの特定されたオペランドのグループへとパーティションされる。第２の値は、第１の値と多項式として乗算され、第３の値により特定されるガロア体へと低減された結果を生成する。結果のグループは、記憶され、かつレジスタｒａへと配置される。
【０１０２】
例示的な実施の形態においては、ワイド−マルチプライ−マトリックス−ガロア−バイト・インストラクション(W.MUL.MAT.G.8)は、１６３８４ビット、すなわち１２８×１２８ビットのパーティションされたアレイ乗算を実行する。アレイの幅は、１２８、６４，３２または１６ビットへと制限することができるが、８ビットのグループ・サイズの倍よりも小さくなければ、仮想アドレスオペランドへとバイトで所望するサイズを半分加えることで、８，４，２または１とすることができる。アレイは、１２８、６４，３２または１６ビットへと制限することができるが、８ビットのグループ・サイズの倍よりも小さくなければ、仮想アドレス・オペランドへとバイトで所望するサイズを半分加えることができる。
【０１０３】
例示的な実施の形態においては、仮想アドレスは、２５６バイトに揃えられているか、揃えられたアドレスと、バイトにおけるメモリオペランドのサイズの半分および／またはバイトでの結果のサイズの半分との和となっていることが必要である。揃えられたアドレスは、バイトでのサイズの正確な倍数となっている必要がある。アドレスが正当でない場合には、“アクセスは、仮想アドレスにより許可されない”の例外が発生する。
【０１０４】
図１８Ｂに示されるように、ワイド−マルチプライ−マトリックス−ガロア−バイト・インストラクション(W.MUL.MAT.G.8)は、メモリ[m255m254...m1m0]と、ベクトル[ponmlkjihgfedcba]とを乗算し、結果のモジューロ多項式[q]を低減させ、積、
[(pm255+om247+...+bm31+am15modq)(pm254+om246+...+bm30+am14modq)....(pm248+om240+...+bm16+am0modq)]を得る。
【０１０５】
ワイド・マルチプライ・マトリックス・ガロア・インストラクションの疑似コード１８６０の例示的な実施の形態を、図１８Ｃに示す。ワイド・マルチプライ・マトリックス・ガロア・インストラクションの１８９０における例外の例示的な実施の形態を、図１８Ｄに示す。
【０１０６】
リトル−エンディアンまたはビッグ−エンディアンいずれかのコンベンショナル・バイト・オーダリングのメモリ・オペランド
本発明の別の構成においては、リトル−エンディアンまたはビッグ−エンディアンいずれかの従来のバイト・オーダリングのメモリ・オペランドが利用される。この結果、すべてのワイド・オペランド・インストラクションは、２つの形態に特定され、インストラクションの部分により特定されるようにその１つは、リトル−エンディアン・バイト・オーダリングであり、もう１つは、ビッグ−エンディアン・バイト・オーダリングである。バイト・オーダは、メモリ・システムを特定し、そのオーダは、より大きなワイド・オペランド内の多重のメモリ・ワード（１２８ビット）の他、データ・パス幅（１２８ビット）のユニット内でバイトを提供する。
【０１０７】
マルチプライヤの積または積の和の高次部分のイクストラクション
本発明の別の構成は、大きなマルチプライヤ・アレイを使用する方法のように、マルチプライヤの積または積の和の高次部分のイクストラクションに対応するものである。米国特許第５，７４２，８４０号および米国特許第５，９５３，２４１号に関連して、汎用目的プロセッサに対して特定のインストラクションクラスを追加することによるマルチプライヤ・アレイの利用性を向上するためのシステムおよび方法が開示されている。これは、高精度の演算、例えば６４×６４ビットのマルチプライヤが６４ビット×６４ビットを完全に使用するような場合のために完全に利用できる、大きなマルチプライヤ・アレイを使用する場合に問題となることに対応するものであるが、３２ビット×３２ビットの乗算のために使用される１／４のみの（マルチプライヤのデータ幅およびレジスタに比較して）低精度演算オペレーションにも対応するものである。特に、種々の方法で互いに結合（加算）される大量の低精度乗算を実行するオペレーションを特定することができる。オペレーションのセットの選択において優先して考慮されることの１つは、結果オペランドのサイズの制限である。例示的な実施の形態においては、例えばこのサイズは、１２８ビットまたは単一のレジスタに限定されるが、特定のサイズの制限は、全く存在しない。
【０１０８】
乗算結果、積のサイズは、概ねオペランドのサイズと、被乗数のサイズと、マルチプライヤのサイズとの合計となる。この結果、乗算インストラクションは、結果のサイズが、同定されたサイズの入力オペランドのサイズの２倍となる。我々の従来の設計では、例えば乗算インストラクションは、６４ビットのレジスタ・ソースを受け取り、単一の１２８ビット・レジスタ−ペアの結果を発生させる６４ビット・シンボルのための完全な６４×６４マルチプライヤ・アレイまたは３２ビット・シンボルのペアについての半分のマルチプライヤ・アレイ、または１／４の１６ビット・シンボルを使用する１／４のマルチプライヤ・アレイに対する。これらのすべての場合について、６４ビットの２つのレジスタ・ソースが、１２８ビットの結果を得ることに留意されたい。
【０１０９】
複素数の乗算、コンボルブ、およびマトリックスの乗算を含むオペレーションのいくつかにおいては、低精度マルチプライヤの積は、互いに加算される。加算は、さらに要求される制度を増加させる。２つの積の和は、１つの余分な精度のビットを要求し、４つの積では２つの余分な精度のビットを要求し、８つの積では、３つの余分な精度のビットを要求し、１６の積は、４つの余分な精度のビットを要求する。いくつかの従来の設計においては、この精度のいくらかは失われ、オーバーフローを防止するためにマルチプライヤ・オペランドのスケーリングを必要とし、さらに結果の精度を低下させる。
【０１１０】
レジスタ・ペアを使用することは、レジスタ・ペアおよび個々のレジスタ値が後続するインストラクションへとバイパスされてしまうといった望ましくない複雑性を生じさせる。この結果、従来の技術では、ソース・オペランドの１２８ビットレジスタ値のわずかに半分しか単一の１２８ビットの結果を生成するために使用することができるにすぎない。
【０１１１】
本発明おいては、汎用レジスタから動的にシフト量が調節されるか、またはインストラクションの部分として特定され、調整されたマルチプライヤの積の高次部分、または積の和がイクストラクションされ、かつレジスタまたはインストラクション部分からの制御値により、四捨五入、ツワード・ゼロ、フロア、またはシーリングといった丸目が行われる。それ以外は、正確に出力される結果に反映されるように、結果を最大値および最小値へと制限するように取り扱う。
【０１１２】
レジスタによるイクストラクションの制御
本発明においては、イクストラクションをレジスタにより制御する場合に、結果のサイズが特定されることで、結果に適合させるよりも低位のビットへとラウンディングおよびスケールを行うことが可能となる。これは、結果を後続のオペレーションにおいてオーバーフローまたはラウンディングを考慮することがないようにスケールすることを可能とし、性能を向上させるものである。
【０１１３】
また、本発明においては、レジスタによりイクストラクションを制御する場合に、単一のレジスタ値がオペランド、シフト量、結果のサイズ、ラウンディング制御を規定する。この制御情報を単一のレジスタに配置することにより、そうでなければ必要とされるインストラクションのサイズが、ビットの数にわたって低減でき、性能が向上でき、かつプロセッサのフレキシビリティが向上する。
【０１１４】
本発明のこの構成において含まれる特定のインストラクションは、アンサンブル・コンボルブ・イクストラクト、アンサンブル・マルチプライ・イクストラクト、アンサンブル・マルチプライ・アド・イクストラクト、アンサンブル・スケール・アド・イクストラクトである。
【０１１５】
アンサンブル・イクストラクト・インプレース
アンサンブルイクストラクト・インプレース・インストラクションの例示的な実施の形態を、図１９Ａ〜図１９Ｇに示す。例示的な実施の形態においては、上述したインストラクションのいくつか（アンサンブル・コンボルブ・イクストラクト、アンサンブル・マルチプライ・アド・イクストラクト）は、典型的にはイクストラクトがインストラクションの部分として特定されている場合の形態においてのみ、利用可能である。別の実施の形態では、オペランドのサイズ、シフト量、ラウンディングが汎用レジスタの内容により制御されるというオペレーションのフォームが含まれる（これらは、アンサンブル・マルチプライ・イクストラクト・インストラクションである）。アンサンブル・コンボルブ・イクストラクト、アンサンブル・マルチプライ・アド・イクストラクトのためのこの種類のインストラクションの定義は、４つのソース・レジスタを必要とし、これは、付加的な汎用レジスタ読み出しポートを必要とするので複雑性を高めることになる。
【０１１６】
例示的な実施の形態においては、これらのオペレーションは、４つのレジスタからのオペランドを取得して、オペランド内のビットのパーティションに応じてオペレーションを実行し、記憶された結果を４つのレジスタ内に配置する。アンサンブル・イクストラクト・インプレース・インストラクションのフォーマットおよびオペレーション・コード１９１０の例示的な実施の形態を図１９Ａに示す。
【０１１７】
アンサンブル・イクストラクト・インプレース・インストラクションの１９３０，１９４５，１９６０，１９７５の概略を、図１９Ｃ，図１９Ｄ，図１９Ｅ，図１９Ｆに示す。例示的な実施の形態においては、レジスタｒｄ、ｒｃ、ｒｂおよびｒａの内容が、フェッチされる。特定されたオペレーションは、これらのオペランド上で実行される。この結果は、レジスタｒｄへと配置される。
【０１１８】
例示的な実施の形態においては、E.CON.Xインストラクションについてレジスタｒｄ、ｒｃの内容がｃ‖ｄとして記憶され、第１の値として使用される。第２の値は、レジスタｒｂの内容である。これらの値は、特定されたサイズのオペランドのグループへとパーティションされ、コンボルブされて、値のグループを生成する。値のグループは、特定されるようにラウンディングされ、制限されて、サイズが特定された結果のグループを与える。結果のグループは、記憶され、レジスタｒｄに配置される。
【０１１９】
例示的な実施の形態においては、E.MUL.ADD.Xインストラクションについて、レジスタｒｃおよびｒｂの内容は、サイズが特定されたオペランドのグループへとパーティションされ、かつ乗算されて、パーティションされ、延長されたレジスタｒｄの内容とが加算される。値のグループは、特定されたようにラウンディングされ、制限されて、サイズが特定された結果のグループを得る。結果のグループは、記憶され、レジスタｒｄに配置される。
【０１２０】
図１９Ｂに示されるように、例示的な実施の形態においては、レジスタｒａのビット３１．．０の内容がデータをイクストラクションする方法を制御するいくつかのパラメータを特定し、所定のオペレーションについては、オペレーションが実行される方法を特定する。制御フィールドの位置は、ソース・ポジションに対して、動的な計算のために固定された制御値を加えることが可能とされ、制御フィールドの下位１６ビットが、単一のGCOPI.128より簡単なイクストラクション・ケースのいくつかに設定される。この制御フィールドは、さらに下位８ビットがノン−ゼロである場合にのみ、トランケーションおよびラウンディングを行わない１２８ビットのイクストラクションが実行されるように構成されている。
【０１２１】
例示的な実施の形態においては、下記のテーブルは、それぞれのラベルを意味する。
0004933693.tif 000005
【０１２２】
例示的な実施の形態においては、９−ビットｇｓｓｐフィールドは、グループサイズｇｓｉｚｅ、ソース・ポジション、ｓｐｏｓのそれぞれをエンコードし、式ｇｓｓｐ＝５１２−４＊ｇｓｉｚｅ＋ｓｐｏｓで示される。グループ・サイズ、ｇｓｉｚｅは、範囲１．．１２８の２の累乗であり、ソース・ポジションｓｐｏｓは、範囲０．．（２＊ｇｓｉｚｅ）−１である。
【０１２３】
例示的な実施の形態においては、ｘフィールド、ｓフィールド、ｎフィールド、ｍフィールド、ｒｎｄフィールドの値は、下記の意味づけを有している。
0004933693.tif 000006
【０１２４】
アンサンブル・マルチプライ・アド・イクストラクト
図１９Ｃに示されるように、アンサンブル−マルチプライ−アド−イクストラクト−ダブレット・インストラクション(E.MULADDX)は、ベクトル[hgfedcba]と、ベクトル[ponmlkji]とを乗算し、ベクトルｒｄ[xwvutsrq]を加算して、結果ベクトルｒｄ[hp+x go+w fn+v em+u dl+t ck+s bj+r ai+q]を得、ｒａ３１．．０で特定されるようにラウンディングされ、制限される。
【０１２５】
図１９Ｄに示されているように、アンサンブル−マルチプライ−アド−イクストラクト−ダブレット−コンプレックス・インストラクション(ｎがセットされたE.MUL.X）は、オペランド・ベクトルｒｃ[gfedcba]と、オペランド・ベクトルｒｂ[ponmlkji]とを乗算して、結果ベクトルｒｄ[gp+ho go+hp en+fn cl+dk ck-dl aj+bi ai-bi]を得、ｒａ３１．．０により特定されたようにラウンディングおよび制限する。このインストラクションは、実部が虚部よりも右側（低精度）にある複素数の統合するために好適である。
【０１２６】
アンサンブル・コンボルブ・イクストラクト
図１９Ｅに示すように、アンサンブル−コンボルブ−イクストラクト−ダブレット・インストラクション(ECON,X n=0)は、ベクトルｒｃ‖ｒｄ[xwvutsrqponmlkji]と、ベクトルｒｂ[hgfedcba]とをコンボルブして、積ベクトルｒｄ[ax+bw+cv+du+et+fs+gr+jq+...+as+br+cq+dp+eo+fn+gm+hl
+ar+bq+cp+do+en+fm+gl+hk+aq+bp+co+dn+em+fl+gk+hj]を得、ｒａ３１．．０により特定されるようにラウンディングおよび制限される。
【０１２７】
図１９Ｆに示すように、アンサンブル−コンボルブ−イクストラクト−ダブレット・インストラクション(ECON,X n=1)は、ベクトルｒｄ‖ｒｃ[xwvutsrqponmlkji]と、ベクトルｒｂ[hgfedcba]とをコンボルブして、積ベクトルｒｄ[ax+bw+cv+du+et+fs+gr+jq+...+as-bt+cq-dr+eo-fp+gm-hn
+ar+bq+cp+do+en+fm+gl+hk+aq+br+co-dp+em-fn+gk+hj]を得、ｒａ３１．．０により特定されるようにラウンディングおよび制限される。
【０１２８】
アンサンブル・イクストラクト・インプレース・インストラクションの疑似コード１９９０の例示的な実施の形態を図１９Ｇに示す。例示的な実施の形態においては、アンサンブル・イクストラクト・インプレース・インストラクションのための例外はない。
【０１２９】
アンサンブル・イクストラクト
アンサンブル・イクストラクト・インストラクションの例示的な実施の形態を、図２０Ａ〜図２０Ｊに示す。例示的な実施の形態においては、上述したオペレーションは、３つのレジスタからオペランドを取得して、オペランド中のビットのパーティションにおいてオペレーションを実行させ、記憶された結果を４番目のレジスタに配置する。アンサンブル・イクストラクト・インストラクションのフォーマットおよびオペレーション・コード２０１０の例示的な実施の形態を、」図２０Ａに示す。
【０１３０】
アンサンブル・イクストラクト・インプレース・インストラクション２０２０、２０３０，２０４０，２０５０，２０６０，２０７０，２０８０の概略の例示的な実施の形態を、図２０Ｃ，図２０Ｄ，図２０Ｅ，図２０Ｆ，図２０Ｇ，図２０Ｈ，図２０Ｉに示す。例示的な実施の形態においては、登録されたｒｄ，ｒｃ，ｒｂの内容が、フェッチされる。特定されたオペレーションは、これらのオペランド上で実行される。結果は、レジスタｒａに配置される。
【０１３１】
図２０Ｂに示されるように、例示的な実施の形態においては、レジスタｒｂの内容のビット３１．．０は、データをイクストラクションする方法を制御するいくつかのパラメータを特定し、かつ所定の条件においてはその方法によりオペレーションが実行される。制御フィールドの位置は、ソース・ポジションに対して、動的な計算のために固定された制御値を加えることが可能とされ、制御フィールドの下位１６ビットが、単一のGCOPI.128より簡単なイクストラクション・ケースのいくつかに設定される。この制御フィールドは、さらに下位８ビットがノン−ゼロである場合にのみ、トランケーションおよびラウンディングを行わない１２８ビットのイクストラクションが実行されるように構成されている。
【０１３２】
例示的な実施の形態においては、下記のテーブルは、それぞれのラベルを意味する。
0004933693.tif 000007
【０１３３】
例示的な実施の形態においては、９−ビットｇｓｓｐフィールドは、グループサイズｇｓｉｚｅ、ソース・ポジション、ｓｐｏｓのそれぞれをエンコードし、式ｇｓｓｐ＝５１２−４＊ｇｓｉｚｅ＋ｓｐｏｓで示される。グループ・サイズ、ｇｓｉｚｅは、範囲１．．１２８の２の累乗であり、ソース・ポジションｓｐｏｓは、範囲０．．（２＊ｇｓｉｚｅ）−１である。
【０１３４】
例示的な実施の形態においては、ｘフィールド、ｓフィールド、ｎフィールド、ｍフィールド、ｒｎｄフィールドの値は、下記の意味づけを有している。
0004933693.tif 000008
【０１３５】
例示的な実施の形態においては、E.SCAL.ADD.Xインストラクションについて、レジスタｒｂの内容のビット１２７．．６４が、レジスタｒｄおよびｒｃの乗算についてのマルチプライヤを特定する。特にビット６４＋２＊ｇｓｉｚｅ−１．．６４＋ｇｓｉｚｅは、レジスタｒｄの内容についてのマルチプライヤとなり、ビット６４＋ｇｓｉｚｅ−１．．６４は、レジスタｒｃの内容となる。
【０１３６】
アンサンブル・マルチプライ・イクストラクト
図２０Ｃに示されるように、アンサンブル−マルチプライ−イクストラクト−ダブレット・インストラクション(E.MULX)は、ベクトルｒｄ[hgfedcba]と、ベクトルｒｃ[ponmlkji]とを乗算し、結果ベクトルｒａ[hp go fn em dl ck bj ai]を得、ｒｂ３１．．０により特定されるラウンディングがなされ、かつ制限される。
【０１３７】
図２０Ｄにおいて示されるように、アンサンブル−マルチプライ−イクストラクト−ダブレット−コンプレックス・インストラクション(ｎをセットしたE.MUL.X）の例示的な実施の形態では、ベクトルｒｄ[hgfedcba]と、ベクトルｒｃ[ponmlkji]とを乗算し、結果ベクトル[gp+ho go-hp en+fm em-fn cl+dk ck-dl aj+bi ai-bi]を得、ｒｂ３１．．０により特定されるラウンディングおよび制限が行われる。このインストラクションは、実部が虚部よりも右側（低精度）にある複素数の統合のために好適である。
【０１３８】
アンサンブル・スケール・アド・イクストラクト
本発明の構成は、アンサンブル・スケール・アド・イクストラクト・インストラクションを定義し、これは、レジスタ内のイクストラクションされた制御情報とスカラ・マルチプライヤとして用いられる２つの値と共に組み合わせる。
【０１３９】
この組み合わせは、そうでなければ必要とされるレジスタの数を低減させるか、またはインストラクションが必要とするビット数を低減させ、性能を改善させる。本発明の別の効果は、組み合わせオペレーションが中間的なラウンディングまたはオーバーフローを発生させずに、加算ノードにおいて充分な内部精度を有する例示的な実施の形態において実行することができることにあり、この計算を実行させるために１つ以上のインストラクションが必要とされる従来の技術に比べて、精度を改善することができる。
【０１４０】
図２０Ｅに示されるように、アンサンブル−スケール−アド−イクストラクト−ダブレット・インストラクション(E.SCAL.ADD.X)は、ベクトル[hgfedcba]と、ｒｂ９５．．８０とを乗算し、積をベクトルｒｂ７９．．６４の[ponmlkji]へと加算して、結果[hr+pq gr+oq fr+nq er+mq dr+lq cr+kq br+jq ar+iq]を得、ｒｂ３１．．０に従ってラウンディングおよび制限が行われる。
集団スケールアド抽出命令
本発明の一つの概念では、スケーラ乗数として用いられる二つの値と共にレジスタにおける抽出制御情報を二つのベクトル被乗数の内容に組合わせる集団スケールアド抽出命令を定義する。
この組合わせは、要求されるレジスタの数又は情報が必要とするビットの数を低減し、性能を改善する。本発明の別の利点は、組合わせ操作が中間ラウンディング又はオーバーフローの生じない合計ノードに十分な内部精度をもつ実施の形態で実行され得ることにあり、これにより、この計算を実行するのに一つ以上の命令を必要とする従来技術の操作に比べて精度が改善される。
図２０Ｅに示すように、集団スケールアド抽出ダブレット命令（Ｅ．ＳＣＡＬ．ＡＤＤ．Ｘ）の実施の形態はベクトルｒｄ［ｈｇｆｅｄｃｂａ］をｒｂ９５．．８０［ｒ］で乗算し、そしてその積をベクトルｒｃ［ｐｏｎｍｌｋｊｉ］とｒｂ７９．．６４［ｑ］との積に加算し、それによりｒｂ３１．．０で特定されてラウンドされ制限された結果［ｈｒ＋ｐｑｇｒ＋ｏｑｆｒ＋ｎｑｅｒ＋ｍｑｄｒ＋ｌｑｃｒ＋ｋｑｂｒ＋ｊｑａｒ＋ｉｑ］が得られる。
図２０Ｆに示すように、集団スケールアド抽出ダブレット・複素命令（ｎセットのＥ．ＳＣＡＬＡＤＤ．Ｘ）の実施例はベクトルｒｄ［ｈｇｆｅｄｃｂａ］をｒｂ１２７．．９６［ｔｓ］で乗算し、そしてその積をベクトルｒｃ［ｐｏｎｍｌｋｊｉ］とｒｂ９５．．６４［ｒｑ］との積に加算し、それによりｒｂ３１．．０で特定されてラウンドされ制限された結果［ｈｓ＋ｇｔ＋ｐｑ＋ｏｒｇｓ−ｈｔ＋ｏｑ−ｐｒｆｓ＋ｅｔ＋ｎｑ＋ｍｒｅｓ−ｆｔ＋ｍｑ−ｎｒｄｓ＋ｃｔ＋ｌｑ＋ｋｒｃｓ−ｄｔ＋ｋｑ−ｌｒｂｓ＋ａｔ＋ｊｑ＋ｉｒａｓ−ｂｔ＋ｉｑ−ｊｒ］が得られる。
集団抽出
図２０Ｇに示すように、一つの実施例において、Ｅ．ＥＸＴＲＡＣＴ命令ではｍ＝０、ｘ＝０の時、レジスタｒｂの内容で特定されたパラメータはレジスタｒｄ及びｒｃの連鎖内容のダブルサイズシンボルからフィールドを選択するように解釈され、それにより連鎖されかつレジスタｒａに置かれる値を抽出する。
図２０Ｈに示すように、一つの実施例において、集団・併合・抽出（ｍ＝１の時Ｅ．ＥＸＴＲＡＣＴ）では、レジスタｒｂの内容で特定されたパラメータはレジスタｒｄの内容のシンボルからのフィールドをレジスタｒｃの内容と併合するように解釈される。その結果は連鎖されかつレジスタｒａに置かれる。ｘフィールドは、ｍ＝１の時機能しない。
図２０Ｉに示すように、一つの実施例において、集団・拡張・抽出（ｍ＝０、ｘ＝１の時Ｅ．ＥＸＴＲＡＣＴ）では、レジスタｒｂの内容で特定されたパラメータはレジスタｒｄの内容のシンボルからフィールドを抽出するように解釈される。その結果は連鎖されかつレジスタｒａに置かれる。ｒｃの値は用いられない。
集団抽出命令の疑似コード２０９０の実施例は図２０Ｊに示される。実施例では集団抽出命令に対する例外はない。
レジスタリードポートの低減
別の代わりの実施例では、オペランドのサイズ、シフト及びラウンディング（丸め）をレジスタによって制御する命令の実現に必要なレジスタリードポートを低減できる。抽出制御レジスタの値は初期実行において付加的なサイクルを用いることにより取り出され得、そして引き続いての実行のための機能単位内又はその近くに保持され得、こうして、わずかな付加的な性能ペナルティで実現に必要なハードウエアの量を低減できる。保持値は、抽出制御レジスタを変更する命令によって無効であるとマークされ、抽出制御レジスタの再取り出しを行わせるか、又は代わりに、保持値はそのような操作で更新され得る。抽出制御レジスタの再取り出しはまた、引き続いての実行において異なるレジスタ数が特定される場合にも必要となる。上記二つの代わりの実施の形態の性質は結合される得ることが明かであるべきである。
ガロア体（フィールド）演算
本発明の別の概念はガロア体演算を包含し、乗算は初期二進多項式乗算（キャリアを抑制した符号なし乗算）によって実行され、その後に多項式モジュロ／乗除操作（キャリアを抑制した符号なし二進除算）が続く。乗除操作はエリアにおいて比較的高価であり、しかも遅い。ガロア体演算では、加算はキャリアを抑制した二進加算か又は等価的にビット単位の排他的論理和によって実行される。本発明のこの概念において、マトリックス乗算はガロア体演算を用いて実行され、乗算及び加算はガロア体乗算及び加算である。
従来技術の方法を用いると、１６バイトベクトルの１６×１６バイトマトリックスによる乗算は２５６  ８ビットガロア体乗算及び１６＊１５＝２４０  ８ビットガロア体加算として実行され得る。２５６ガロア体乗算には、２５６多項式乗算及び２５６多項式乗除操作が含まれる。
本発明を用いると、総計算は、２５６多項式乗算、２４０  １６ビット多項式加算、及び１６多項式乗除操作を実行することによって相当に低減される。多項式加算のコストは、現在８ビット操作ではなく１６ビット操作であるので、ガロア体加算と比較して二倍となるが、多項式乗除操作のコストは１６のファクタで低減されることが認められる。これは、加算のコストが乗除のコストより非常に低いので、有利な交換である。
実行パイプラインからの減結合アクセス及び同時マルチスレッド処理
図４に最もよく示す本発明のさらに別の概念では、本発明は実行パイプラインからの減結合アクセス及び同時マルチスレッド処理の両方をユニークな仕方で使用する。従来技術では同時マルチスレッド処理したパイプラインは、幾つかの実行スレッドの一つから各機能装置へ命令を発行させることによりデータパスの利用を拡張するのに使用されてきた  （例えば、Dean M. Tullsen 、Susan J. Eggers 及びHenry M. Levy 著“同時マルチスレッド処理：オンチップパラレルリズムの最大化”コンピュータアーキテクチャにおける第２２回国際シンポジウムの会議録、Santa Margherita Ligure 、Italy １９９５年６月）。
実行パイプラインからの減結合アクセスは、従来技術では、メモリから要求された項目を取り出すメモリ装置に対するアドレスを計算するアクセス装置からの結果をバッファし、そしてそれらを実行装置に供給することによって実行データパス装置の利用を拡張するのに使用されてきた（例えば、E.J. Smith著、“コンピュータアーキテクチャの減結合アクセス／実行”コンピュータアーキテクチャにおける第９回国際シンポジウムの会議録、Austin Texas、１９８２年４月２６−２９日  ｐｐ．１１２−１１９９）。
従来のパイプラインに比較して、Eggersの従来技術は、命令が機能装置に発せられる前に付加的なパイプラインサイクルを使用し、この付加的なパイプラインサイクルは、どのスレッドが命令を発生できるかを決めるのに必要であった。その結果、従来のパイプラインに比較して、従来技術の構成は、関連した分岐遅延を含む付加的な遅延を伴う。
本発明は、各実行スレッドに対する関連したレジスタファイルをもつ個々のアクセスデータパス装置を備えている。これらのアクセスデータパス装置は、共通のメモリ装置に集合されるアドレスを発生し、全てのアドレスを取り出し、そして一つ以上のバッフアにメモリの内容を置く。スレッドの間で種々の程度に共用される実行装置に対する命令も後の実行のためにバッファされる。そして実行装置は、共用される機能データパス装置を用いて全てのアクティブスレッドから操作を実行する。
実行装置によって行われる命令の場合、従来技術の同時マルチスレッド処理構成に必要なエクストラサイクルは、実行サイクルからの従来技術の減結合アクセスからのメモリデータアクセスタイムとオーバーラップされ、それによりリソースをスケジューリングする実行機能装置によって付加的な遅延は伴わない。アクセス装置によって行われる命令の場合には、各スレッドに対して個々のアクセス装置を使用することにより、共用リソースをスケジューリングする付加的なサイクルも除去される。
これは、スレッドがアクセス機能装置を共用しないが、これら装置が、スレッドによって共用される実行機能装置と比較して相対的に小さいので、有効な交換である。
実行装置の共用に関して、本発明は、変化するコスト、利用及び性能で、実行装置に対する幾つかの異なったクラスの機能装置を使用する。特に、単純な加算及びビット単位の操作を実行するＧ装置は他の装置に比較して比較的安価（エリア及びパワーにおいて）であり、またそれの利用は比較的高い。その結果、この構成は四つのそのような装置を使用し、各装置は二つのスレッド間で共用され得る。ブロードクラスのデータスイッチング機能を実行するＸ装置は比較的高価であり、ほとんど使用されず、それで各々二つのスレッド間で共用される二つの装置が設けられる。ワイドトランスレート命令を実行するＴ装置は高価であり、利用は低く、そのため四つのスレッド間で単一の装置が共用される。集団命令のクラスを実行するＥ装置は他の機能装置に比較してエリア及びパワーにおいて非常に高価であるが、利用は比較的高く、それで各々二つのスレッドによって共用される二つのそのような装置が設けられる。
図４には、アクセス装置の四つのコピーが示され、各々アクセス命令取り出し待ち行列Ａ−Ｑｕｅｕｅ４０１−４０４をもち、アクセスレジスタファイルＡＲ４０５−４０８に接続され、そして各々二つのアクセス機能装置Ａ４０９−４１６に接続されている。これらのアクセス装置は四つの同時スレッドの実行に対して独立して機能する。これら八つのアクセス機能装置Ａ４０９−４１６は、アクセスレジスタファイルＡＲ４０５−４０８の対する結果及び共用メモリシステム４１７に対するアドレスを発生する。メモリシステム４１７から取り出したメモリ内容は、アクセス装置によって実行されてない実行命令と組合され、そして四つの実行命令待ち行列Ｅ−Ｑｕｅｕｅ４２１−４２４に入れられる。実行命令待ち行列Ｅ−Ｑｕｅｕｅ４２１−４２４からの命令及びメモリデータは実行レジスタファイル４２５−４２８に供給され、実行レジスタファイルソースオペランドを取り出す。命令は、実行装置アービトレーション装置Ａｒｂｉｔｒａｔｉｏｎ４３１に結合され、このアービトレーション装置は、四つのスレッドからのどの命令が利用可能な実行装置Ｅ４４１及び４４９、Ｘ４４２及び４４８、Ｇ４４３−４４４及び４４６−４４７、並びにＴ４４５にルートされることになるかを選択する。実行レジスタファイルソースオペランドＥＲ４２５−４２８は、ソースオペランドバス４５１−４５４を用いて実行装置４４１−４４５に結合され、またソースオペランドバス４５５−４５８を用いて実行装置４４５−４４９に結合される。実行装置４４１−４４５からの機能装置結果オペランドは結果バス４６１を用いて実行レジスタファイルに結合され、また実行装置４４５−４４９からの機能装置結果オペランドは結果バス４６２を用いて実行レジスタファイルに結合される。改良された相互特権ゲートウエイ
本発明のさらに別の概念において、並列性の増大を伴いかつ性能の拡大に繋がる改良された相互特権ゲートウエイが記載される。関連した米国特許出願第０８／５４１，４１６号には、制御された形態で低い特権レベルから高い特権レベルへ制御の変換（分岐）を可能にする命令を実行するシステム及び方法が記載されている。本発明は、同じ目的を達成ししかも特殊な利点をもつ変更型の命令の改良されたシステム及び方法にある。
仮想メモリシステム自体の制御、入出力操作及びシステム制御機能のような多くのプロセッサリソースはそれらを保護特権領域に包囲することにより偶発的な又は不正誤用から保護される。この領域へのエントリーは、これらの保護領域の完全性を維持するためにケートウエイと呼ばれる特定のエントリーポイントを通してのみ確立されなければならない。  この操作の従来技術のバージョンは一般に、有効ゲートウエイエントリーポイントを含むデータ領域に対して設定されるだけである保護仮想メモリ属性を用いてメモリの領域からアドレスをロードし、そしてメモリの内容に含まれたアドレスに対して分岐を実行する。基本的には、三つのステップすなわちロード、分岐及びチェックが含まれている。レジスタ対レジスタ計算命令、メモリロード及び記憶並びにレジスタに基づく分岐のような多野命令に比較して、これは実質的に長い操作であり、パイプライン実現に対して遅延と複雑さを導入することになる。
本発明では、分岐・ゲートウエイ命令は以下の二つの操作：１）分岐がレジスタ０の内容に対して実行される操作、及び２）ロードがレジスタ１の内容を用いて特定のバイト順序（わずかのエンディアン）及び特定のサイズ（６４ビット）で実行される操作を並列に実行する。メモリからロードされた値がレジスタ０の内容に等しくしない場合には、命令は例外のため打ち切られる。さらに、３）命令が打ち切られない場合には戻りアドレス  （分岐・ゲートウエイ命令に続く次の後続の命令アドレス）はレジスタ０に書き込まれる。このアプローチは本質的には、ユーザーコードで特権コードをアクセスできる必須のアクラス許容を確立するのに第１の命令を使用し、そして第１の命令について発生したアクセス許容のため第２の命令は特権コードに直接分岐するようにされる。
本発明では、新規の特権レベルはまたレジスタ０に含まれ、そして新規の特権レベルが古い特権レベルより大きくない場合には第２の並列操作を実行する必要はない。この第２の並列操作が抑制されると、命令の乗除は、特権において増加を必要としない手続きの呼び出しに用いられる分岐リンク命令に対して同一の機能を実行する。この特徴によりもたらされる利点は、特権の増加を必要とする又は必要としない手続きを呼び出すために分岐・ゲートウエイ命令を使用できることにある。
メモリロード操作は、ロードされる領域が有効なゲートウエイデータを含むものとしてタグ付けされたことを仮想メモリシステムで照合する。本発明の別の利点は、レジスタ１がゲートウエイデータをロードしたアドレスを含んでいることに呼び出し手続きが頼り得、そして手続きの必要な付加的なデータ又はアドレスを位置決めするのにレジスタ１の内容を使用できることにある。この命令の従来技術のバージョンでは、アドレスを保護された仕方で初期化するためにメモリのゲートウエイ領域から付加的なアドレスをロードする必要があったが、本発明では、特殊な保護を必要としない“通常の”ロード操作でアドレス自体をロードすることができる。
また、本発明では、分岐・ゲートウエイ命令を発生する前に“通常の”ロード操作でレジスタ０の内容をロードすることができる。本発明は分岐・ゲートウエイ命令で行われる特定の“ゲートウエイ”ロード操作と共に通常のロード操作に領域を使用できる仮想メモリシステムを備えているので、値は分岐・ゲートウエイ命令によってロードされる同一メモリアドレスからロードされ得る。
改良された相互特権ゲートウエイ−システム及び特権ライブラリ呼び出し
システム及び特権ライブラリ呼び出しの実施の形態は図２１Ａ−２１Ｂに示す。システム及び特権ライブラリ呼び出しの図式２１１０の実施の形態は図２１Ａに示す。実施の形態において、目的は上記の通常の手続きとできる限り同様にシステム機能及び特権ライブラリに対して呼び出しを行うことにある。有意待ち時間及び複雑さを伴う例外として呼び出しシステムの呼び出しよりむしろ、プロセス特権レベルを必要なレベルまでそっと上昇させる変更手続きの呼び出しが用いられる。この機構を安全に設けるために、仮想メモリシステムをもつ相互作用が必要とされる。
実施の形態では、そのような手続きは、セキュリティチェックり行われる点以後又は無効レジスタ内容で手続きに入るのを阻止するために真正なエントリーポイント以外のいずれの場所からも入れてはならなず、そうしないと、高い特権レベルへのアクセスがセキュリティ侵害につながり得る。加えて、手続きは一般に、メモリデータに対してアクセスしなければならず、そのためアドレスは特権コードで行わなければならない。これらのアドレスを容易に発生するために、分岐・ゲートウエイ命令は、特権コード手続きを、単一レジスタが有効メモリ領域に対するポインタを含んでいることを照合したことに依存させる。
実施の形態では、分岐・ゲートウエイ命令は、手続きが適切なエントリポイントで呼び出されること及びデータポインタ及びスタックポインタのような他のレジスタが適切に設定され得ることを保証する。これを保証するために、分岐・ゲートウエイ命令は、保護仮想メモリスペースから直接“ゲートウエイ”を検索する。ゲートウエイは目標特権レベル及び手続きのエントリポイントの仮想アドレスを含んでいる。ゲートウエイは単にそれらを含むようにされた仮想アドレススペースの領域に存在できるだけであり、そしてゲートウエイが偽造され得ないことを保証するためにメモリ領域が書き込まれ得る特権レベル又はそれ以下の特権レベルをアクセスするのに用いられ得るだけである。
実施の形態では、分岐・ゲートウエイ命令は、レジスタ１（ｄｐ）がレジスタ０（ｌｐ）の内容をメモリから検索したゲートウエイと比較しそしてそれらが整合しない場合に例外トラップを生じさせることによりこの目標特権レベルのゲートウエイに対する有効ポインタを含むことを保証する。ゲートウエイに対するレジスタ１のポインタを保証することにより、データポインタ及びスタックポインタのような補助情報は、レジスタ１の内容によって位置決めされた値をロードすることよって設定され得る。例えば、ゲートウエイに続く８バイトは手続きのためのデータ領域に対するポインタとして用いられ得る。
実施の形態では、分岐・ゲートウエイ命令を実行する前に、レジスタ１はゲートウエイでポイントするように設定されなければならず、またレジスタ０は目標コードアドレスプラス所望の特権レベルのアドレスに設定されなければならない。“Ｌ．Ｉ．６４．Ｌ．Ａｒ０＝ｒ１，０”命令は、レジスタ１が既に設定されている場合にレジスタ０を設定する一つの仕方であるが、レジスタ０に正しい値を入れる他の手段も許容できる。
実施の形態では、同様に、システムからの戻りすなわち特権ルーチンは特権の低減を伴う。これはアーキテクチャ機能によって注意深く制御される必要がなく、従って、手続きは特権無しのコードアドレスに対して自由に分岐し得る。通常、このような手続きはスタックフレームを復元し、戻りに対してブランチダウン命令を使用する。
典型的なダイナミックリンク・インターゲートウエイの呼び出し列２１３０の実施の形態は図２１Ｂに示す。実施の形態では、呼び出し列は、Ｂ．ＬＩＮＫ命令の代わりにＢ．ＧＡＴＥ命令を使用する点を除いて、上記で示したインターモジュール呼び出し列の場合と同一である。実際に、ｌｐレジスタにおける特権レベルが最新の特権レベルより高くない時にＢ．ＧＡＴＥ命令が用いられる場合に、Ｂ．ＧＡＴＥ命令はＢ．ＬＩＮＫと同一の機能を実行する。
実施の形態では、局所変数割り付けに対するスタックを使用する場合、呼ばれる側は、偽造され得るので、それを通過したｓｐの値を必ずしも信用できない。同様に、呼ばれる側が行う全てのポインタは、それらが、呼ばれる側がアドレスできるようにされるべきである領域に対してポイントするように照合されない限り直接使用されるべきでない。これは、全ての値がレジスタを通りレジスタに戻されるアプリケーションプログラミングインターフェース（ＡＰＩ）を画定することによってか又はパラメータを通しかつ戻す信頼できる中間特権ラッパールーチンを用いることによって避けられ得る。また以下に記載する方法も使用できる。
実施の形態では、高度に特権のコード呼び出し特権なしルーチンを設けるのが有効である。例えば、ユーザは、特権ルーチンにおけるエラーがユーザ供給エラーログルーチンを呼び出すことにより報告されることを要求し得る。手続きを呼び出すために、特権はブランチダウン命令を介して低減され得る。手続きからの戻りは実際には、注意深く制御されなければならない特権の増大を要求する。これは、低い特権手続きラッパー内に手続きの呼び出しを置くことにより処理され、保証リエントリーポイントを介しての呼び出しの後高い特権の領域に戻すのに分岐・ゲートウエイ命令を使用する。全てのレジスタを保存すること及び特権なしのルーチンによって操作され得る新しいスタックフレームをセットアップすること（又は元の低い特権スタックを復元すること）のようなスタック又は保存レジスタの破壊によって無許可アクセスを得るように特権なしルーチンがされ得ないことを保証するように特別の注意がなされなければならない。さらに、このような技法は、直接リエントリーポイントを用いるように試みる特権なしのルーチンに晒され、それでリエントリーポイントに入る許可を制御する特権状態変数を保つのが適当であり得る。
改良された相互特権ゲートウエイ−分岐ゲートウエイ
分岐ゲートウエイ命令の実施の形態は図２１Ｃ−図２１Ｆに示す。実施の形態では、この操作は高い特権レベルにおけるものを含む手続きを呼び出す保証手段を提供する。分岐ゲートウエイ命令のフォーマット及び操作コード２１６０の実施の形態は図２１Ｃに示す。
分岐ゲートウエイ命令の図式２１７０の実施の形態は図２１Ｄに示す。実施の形態では、レジスタｒｂの内容は高位６２ビットの分岐アドレス及び低位２ビットの新しい特権レベルである。分岐及びリンクは分岐アドレスに生じ、そして特権レベルは新しい特権レベルに上昇される。最新のプログラムカウンタに対する高位６２ビットの後続要素は２ビット現行実行特権と結合され、レジスタ０に置かれる。
実施の形態では、新しい特権レベルが現行特権レベルより大きい場合には、メモリデータは、わずかなエンディアンバイトオーダー及びゲートウエイアクセス型を用いてレジスタ１で特定されたアドレスから取り出される。レジスタ０の元の内容がメモリデータを等しくしない場合に、ゲートウエイ不許容例外が生じる。
実施の形態では、新しい特権レベルが現行特権レベルと同じである場合には、レジスタ１のチェックは実行されない。
実施の形態では、新しい特権レベルがメモリデータを書き込むのに必要な特権レベルより大きい場合、又は古い特権レベルがゲートウエイとしてメモリデータをアクセスするのに必要な特権より低い場合、又はアクセスが８バイト境界に配列されない場合に、アクセス不許可例外が生じる。
実施の形態では、ｒｃフィールドが１ではない場合又はｒｄフィールドが０でないばあに、予約命令例外が生じる。
実施の形態では、図２１Ｄの例において、レベル０からレベル２へのゲートウエイが例示されている。レジスタｒｃ（１）の内容で位置決めされたゲートウエイポインタはメモリから取り出され、そしてレジスタｒｂ（０）の内容と比較される。命令は、これらの値が等しい場合に完了するだけであり得る。同時に、レジスタｒｂ（０）の内容はプログラムカウンタ及び利権レベルに置かれ、そして後続のアドレス及び利権レベルのアドレスはレジスタｒｄ（０）内に置かれる。ゲートウエイの目標のコードはデータポイントをゲートウエイポインタ（レジスタ１）からオフセットして位置決めし、そしてそれをレジスタ１に取り出し、データ領域を利用できるようにする。スタックポインタは保存され、そしてデータ領域、データ領域から位置決めした別の領域、又は元のゲートウエイポインタからオフセットして位置決めしたデータ領域を用いて取り出される。
実施の形態では、この命令は、レジスタ０が有効戻りアドレス及び特権レベルを含み、レジスタ１がゲートウエイロケーションにポイントし、そしてゲートウエイロケーションがオクトレット配列されることの保証の目標手続きを行う。従って、レジスタ１はメモリの値に保証して到達するのに用いられ得る。リテラルプールの共用が望ましくない場合には、レジスタ１は直接リテラルプールポインタとして用いられ得る。リテラルプールの共用が望ましい場合には、レジスタ１は、新しいリテラルプールポインタをロードするのに適当なオフセットをもって、例えばレジスタ１からオフセットした一つのキャツシュラインで用いられ得る。仮想メモリシステムがキャツシュライングラニュール数で動作するので、幾つかのゲートウエイロケーションが互いに形成されるなければならないことが認められる。
実施の形態では、ソフトウエアは、ゲートウエイとして仮想メモリで指定した領域内の任意のオクトレットを用いる試みが適切に機能するか又は真正の例外を生じさせることを保証しなければならない。例えば、隣接したオクトレットがリテラルプールロケーションに対するポインタを含んでいる場合、ソフトウエアは、これらのリテラルプールが実行できないか又はアドレスの配列によって実行特権レベルを上昇できないことを保証しなければならない。レジスタ１が直接リテラルプールロケーションとして用いられる場合、ソフトウエアは、ゲートウエイとしてアクセスできるこれらのリテラルプールロケーションが保証侵害に繋がらないことを保証しなければならない。
実施の形態では、レジスタ０は有効戻りアドレス及び特権レベルを含み、値はゲートウエイの呼ばれる側に戻すためにブランチダウン（Ｂ．ＤＯＷＮ）命令において直接使用するのに適している。
分岐ゲートウエイ命令の疑似コード２１９０の実施の形態は図２１Ｅに示す。分岐ゲートウエイ命令の例外２１９９の実施の形態は図２１Ｆに示す。
集団スケールアド浮動小数点
新しい命令Ensemble-Scale-Addは二組の並列乗算を実行しそしてその積を対を成して合計することによりプロセッサ性能を改善する。これにより、操作の性能が改善され、二つのベクトルは二つの独立した値によってスケールされ、合計なければならず、フューズド・マルチプライ・アドの最近の従来技術の操作に勝る二つの利点をもたらす。従来技術の命令を用いてこの操作を実行するために、二つの命令、一つのベクトル及び一つのスケーリング値に対する集団・マルチプライと、第２のベクトル及び第２のスケーリング値に対する集団・マルチプライ・アドが要求され、またこれら操作は明らかに関連している。これに対して、本発明は、ベクトルの要素を単一操作に各々相応させるため二つの乗算と、加算との両方をフューズする。得られる第１の利点は、実施の形態では、組合さった操作が単一操作で多数の乗算を実行し、従って区分乗算器装置の利用を改善するので改善された性能である。得られる第２の利点は、実施の形態では、十分な中間精度でフューズド操作を計算でき、それにより積を中間で丸めることは必要でない。
集団スケールアド浮動小数点命令の実施の形態は図２２Ａ−図２２Ｂに示す。実施の形態では、これらの操作は、レジスタから三つの値を取り、オペランドにおけるビットの区分において一群の浮動小数点演算操作を実行し、そしてレジスタに連結結果を置く。集団スケールアド浮動小数点命令のフォーマット２２１０の実施の形態は図２２Ａに示す。
実施の形態では、レジスタｒｄ及びｒｃの内容は一群の浮動小数点オペランドをもたらすように取られる。レジスタｒｄからのオペランドは、レジスタｒｂの内容の最下位のビットから取られた浮動小数点オペランドと乗算され、そしてレジスタｒｂの内容の次の最下位のビットから取られた浮動小数点オペランドで乗算したレジスタｒｃからのオペランドに加算される。その結果は単一浮動小数点操作における最も近い表示可能な浮動小数点値に丸められる。浮動小数点例外は生じられず、ＩＥＥＥ７５４の省略時ルールに従って処理される。その結果は連結され、レジスタｒａに置かれる。
集団スケールアド浮動小数点命令の疑似コード２２３０の実施の形態は図２２Ｂに示す。実施の形態では、集団スケールアド浮動小数点命令の例外はない。
単一命令における三入力ビット単位のブール演算の実行（グループブール）
本発明のさらに別の概念において、単一命令で三入力ビット単位のブール演算を実行するシステム及び方法が提供される。新規の方法は、そのような演算操作の八つの可能な出力状態を単に七つのビットにエンコードし、そしてこれら七つのビットを八つの状態にデコーディングするのに用いられる。
グループブール命令の実施の形態は図２３Ａ−図２３Ｃに示す。実施の形態において、これらの演算操作は三つのレジスタからオペランドを取り、オペランドの相応したビットにおいてブール演算を実行し、そして結合結果を第３のレジスタに置く。グループブール命令のフォーマット２３１０の実施の形態は図２３Ａに示す。
グループブール命令の手続き２３２０の実施の形態は図２３Ｂに示す。実施の形態において、三つの値はレジスタｒｄ、ｒｃ及びｒｂの内容から取られる。ｉｈ及びｉｌフィールドは三つのビットの機能を特定し、単一ビット結果を形成する。特定した機能は各ビット位置毎に評価され、その結果は結合されてレジスタｒｄに置かれる。実施の形態では、レジスタｒｄはこの命令のソース及び宛先の両方である。
実施の形態では、機能は八つのビットで特定され、各ビット位置における三つのソースビットの各可能な値に対する結果を与える。
0004933693.tif 000009
実施の形態では、機能は即値のビットを再配列することによって変更され得る。下表には即値ｆ７．．．０の再配列が同じ機能に対してオペランドｄ、ｃ、ｂをどのように再順序付けできるかを示している。
0004933693.tif 000010
実施の形態では、このような再配列を使用することにより、形式ｂ＝ｆ（ｄ，ｃ，ｂ）の演算は正当な形式ｂ＝ｆ（ｂ，ｄ，ｃ）に再コード化され得る。例えば、関数ｂ＝ｆ  （ｄ，ｃ，ｂ）＝ｄ？ｃ：ｂはコード化され得ないが、等価関数ｄ＝ｃ？ｂ：ｄは、ｆ  （ｄ，ｃ，ｂ）→ｆ（ｃ，ｂ，ｄ）のルールに従って１１００１０１０であるｄ＝ｆ（ｄ，ｃ，ｂ）＝ｄ？ｃ：ｂのコードをコード１１０１１０００に再配列することにより決められ得る。
エンコーディング
実施の形態において、この再配列のある特定の特徴は、八つの機能仕様ビットがこの命令における七つの即値ビットに圧縮される仕方の基本である。上記の表に見られるように、一般的な場合、ｆ（ｄ，ｃ，ｂ）からｆ（ｄ，ｂ，ｃ）へのオペランドの再配列（ｒｃ及びｒｂの交換）はｆ６及びｆ５の値及びｆ２及びｆ１の値の交換を必要とする。
実施の形態において、この命令の実行できる２５６の可能な機能のうち１／４（６４の機能）はこの再配列によって変えられない。これらの機能はｆ６＝ｆ５及びｆ２＝ｆ１である性質をもっている。ｒｃ及びｒｂの値（ｒｃ及びｒｂはレジスタの指定子であり、レジスタの内容ではない）は自由に交換でき、それでｆ２の値を指示するために上昇又は下降順序に整列（分類）される。（ｒｃ＝ｒｂの時に特定の場合が生じ、ｒｃ及びｒｂの整列（分類）は情報を搬送できない。しかしながら、値ｆ７、ｆ４、ｆ３及びｆ０だけが常にこの場合となり得るので、ｆ６、ｆ５、ｆ２及びｆ１がこの場合コード化されず、従って特定の処理は要求されない。）これらの機能は、ｒｃ＞ｒｂであるかどうかによって即値フィールドにおけるｆ７、ｆ６、ｆ４、ｆ３及びｆ０及びｆ２の値でエンコードされ、従って６４の機能に対して３２の即値を使用する。
実施の形態では、機能の別の１／４はｆ６＝１及びｆ５＝０を備える。これらの機能は、ｒｃとｒｂ、ｆ６とｆ５、ｆ２とｆ１を交換することによって再コード化される。これらは、ｆ６＝０及びｆ５＝１である機能の１／４と同じエンコーディングを分類し、そして即値フィールドにおけるｆ７、ｆ４、ｆ３、ｆ２、ｆ１及びｆ０の値でエンコーディングされ、従って１２８の機能に対して６４の即値を使用する。
実施の形態では、機能の残りの１／４はｆ６＝ｆ５及びｆ２≠ｆ１を備える。ｆ２＝１及びｆ１＝０であるこれらの半分はｒｃとｒｂ、ｆ６とｆ５、ｆ２とｆ１を交換することによって再コード化される。従ってそれらは、ｆ２＝１及びｆ１＝０である機能の八番目と同じエンコーディングを分類し、そして即値フィールドにおけるｆ７、ｆ６、ｆ４、ｆ３及びｆ０の値でエンコーディングされ、従って６４の機能に対して３２の即値を使用する。
実施の形態では、機能の残りの１／４はｆ６＝ｆ５及びｆ２≠ｆ１を備える。ｆ２＝１及びｆ１＝０であるこれらの半分はｒｃとｒｂ、ｆ６とｆ５、ｆ２とｆ１を交換することによって再コード化される。従ってそれらは、ｆ２＝１及びｆ１＝０である機能の八番目と同じエンコーディングを分類し、そして即値フィールドにおけるｆ７、ｆ６、ｆ４、ｆ３及びｆ０の値でエンコーディングされ、従って６４の機能に対して３２の即値を使用する。
実施の形態では、機能のエンコーディングは下表にまとめられる。
0004933693.tif 000011
実施の形態では、機能のデコーディングは下表にまとめられる。
0004933693.tif 000012
上記の説明から分かるように、エンコード化命令を処理するコンパイラ又はアセンブラの実施の形態は、命令をエンコードするために上記のステップを実行し、即値フィールドのｆ６とｆ５の値及びｆ２及びｆ１の値を比較し、即値フィールドをエンコードする幾つかの手段のどれが使用されることになるかを決め、そしてエンコード化命令へのｔｒｂ及びｔｒｃレジスタ指定子の配置はｆ２（又はｆ１）及びｆ６（又はｆ５）の値に依存する。  グルーブブール命令の疑似コード２３３０の実施の形態は図２３Ｃに示す。コードから認められ得るように、この命令をデコーディングする回路の実施の形態は、即値ビットｉｈ及びｉｌ５がゼロである時にレジスタ指定子ｒｃ及びｒｂを演算比較することによりｆ２及びｆ１の値を発生し、ｒｃ＞ｒｂの時ｆ２及びｆ１に対して１の値を発生する。実施の形態では、グルーブブール命令に対して例外はない。
コードの単純な反復ループの分岐予測の改良
本発明のさらに別の概念では、コードの単純な反復ループの分岐予測を改良するシステム及び方法が記載される。このような単純な反復ループにおいては、ループの終端はループの始端に対して後方の条件付き分岐で示される。このようなループの条件付き分岐は、それが設けられない時には最終繰り返しを除いてループの各繰り返しに対して設けられる。従来技術の分岐予測システムはそのような条件付き分岐の大部分を適当に予測する試みのために有限状態機構演算を使用しているが、ロープの繰り返す回数に関しての特定の情報なしでは、ループの終端する時に予測に誤差が生じる。
本発明のシステム及び方法は，分岐が取られない時に分岐が何回取られることになるかを指示するカウントフィールドを設けるを含んでおり、コンパイラかループの実行される繰り返し数を決めることができる時に単純なループの最初及び最後の分岐の両方を適切に予測する能力を高める。これにより、従来技術の分岐予測ハードウエアにおいて生じるようにループが終端し、そして命令の実行がそのループを越えて続けられる時に、ループの終端における分岐の予測間違いを避けることにより性能が改善される。
分岐ヒント
分岐ヒント命令の実施の形態は図２４Ａ−図２４Ｃに示す。実施の形態では、この演算操作はレジスタで特定したフューチャ分岐ロケーションを指示する。
実施の形態では、この命令は、分岐がレジスタｒｄの内容で特定したアドレスに対する現行の後続要素命令に続くシム命令でカウント回数を生じるプロセッサの命令取り出し装置を指示する。分岐ヒント命令のフォーマット２４１０の実施の形態は図２４に示す。
実施の形態では、カウント回数の分岐後、命令取り出し装置は、現行の後続要素命令に続くシム命令で分岐が生じないことを推定する。カウントがゼロである場合には、このヒントは、分岐が６３回以上生じることを命令取り出し装置に指示する。
実施の形態では、レジスタｒｄの内容がクワードレット境界において配列されない場合にアクセス不許可例外が生じる。
分岐ヒント命令の疑似コード２４３０の実施の形態は図２４Ｂに示す。分岐ヒント命令の例外２４６０の実施の形態は図２４Ｃに示す。
プロセッサ命令への浮動小数点情報の結合
本発明のさらに別の概念において、プロセッサ命令へ浮動小数点情報を結合する技法が提供される。関連した米国特許第５８１，２４３９号には、命令自体へ浮動小数点情報の丸め及び例外の制御を結合するシステム及び方法が開示されている。本発明は上記米国特許発明を、丸めが特定されしかも浮動小数点情報の特定のクラスについて例外の省略時処理も特定される別個の命令を含むように拡張している。
集団シンク浮動小数点
実施の形態では、浮動小数点値を積分値に変換する集団シンク浮動小数点命令は、前に特定した全ての組合わせ（省略時に近い丸め及び省略時例外、Ｚ・ゼロに向かう丸め及びトラップオン例外、Ｎ・最も近くへの丸めト及びトラップオン例外、Ｆ・床丸め（マイナス無限大に向かう）及びトラップオン例外、Ｃ・天井丸め（プラス無限大に向かう）及びトラップオン例外、及びＸ・トラップオン不正確及び他の例外）、並びに三つの新しい組合わせ（Ｚ．Ｄ・ゼロに向かう丸め及び省略時例外処理、Ｆ．Ｄ床丸め及び省略時例外処理、及びＣ．Ｄ天井丸め及び省略時例外処理）を含む命令における制御で利用できる。  （その他の組合わせ：Ｎ．Ｄは省略時に相当し、また他の例外に対するトラップオン不正確かつ省略時例外処理も可能であるが実際には価値がない。）
集団シンク浮動小数点命令の実施の形態は図２５Ａ−図２５Ｃに示す。実施の形態では、これらの操作はレジスタから一つの値を取り出し、オペランドにおけるビットの区分に置ける整数への一群の浮動小数点演算変換を実行し、そして結合結果をレジスタに配置する。浮動小数点命令の演算コード、選択及びフォーマット２５１０の実施の形態は図２５Ａに示す。
実施の形態では、レジスタｒｃの内容は特定した精度の浮動小数点オペランドに区分され、そして整数値に変換される。その結果は結合されてレジスタｒｄに配置される。
実施の形態では、演算は特定の丸めオプションを用いて又は特定されない場合には丸め・ツウ・ニャレストを用いて丸められる。丸めオプションが特定される場合には、省略時例外処理が特定されない限り、演算処理は、浮動小数点無効演算、ゼロでの分割、オーバーフロー又は案ターフローが生じる場合又は特定された時には結果が不正確である場合に浮動小数点例外を生じる。丸めオプションが特定されない場合又は省略時例外処理が特定される場合には、浮動小数点例外は生じられず、ＩＥＥＥ７５４の省略時ルールに従って処理される。
集団シンク浮動小数点命令の疑似コード２５３０の実施の形態は図２５Ｂに示す。集団シンク浮動小数点命令の例外２５６０の実施の形態は図２５Ｃに示す。  浮動小数点命令の疑似コード２５７０の実施の形態は図２５Ｄに示す。
結論
本発明の好ましい実施の形態及び種々の変更例について説明してきたが、当業者には本明細書の記載から認められるように、本発明から逸脱しない種々の変更例及び等価例が存在する。従って、本発明は上記の説明で限定されるものではなく、特許請求の範囲によってのみ限定されるものである。
【図面の簡単な説明】
【図１】  図１は、本発明の例示的な実施の形態に従ったシステムの機能ブロックを示したシステム・レベル・ダイアグラム。
【図２】  図２は、本発明の例示的な実施の形態に従ったワイド・マトリックス・マルチプライのマトリックス表現を示した図。
【図３】  図３は、本発明の例示的な実施の形態に従ったワイド・マトリックス・マルチプライを示した図。
【図４】  図４は、本発明の例示的なマルチ処理および実行プロセッサからデカップル・アクセスを含むシステムの機能ブロック図を示した図。
【図５】  本発明のワイド・オペランドを示した図。
【図６】  本発明の例示的な実施の形態に従ったスペシファイア・デコーディングのアプローチを示した図。
【図７】  図７は、本発明の例示的な実施の形態に従ったワイド・ファンクション・ユニット形態をとるオペレーショナル・ブロックを示した図。
【図８】  図８は、本発明の例示的な実施の形態に従うワイド・マイクロキャッシュ・コントロールの形態をとるフロー図。
【図９】  本発明の例示的な実施の形態に従うワイド・マイクロキャッシュ・データ構造を示した図。
【図１０】  本発明の例示的な実施の形態に従うワイド・マイクロキャッシュ・コントロールを示した図。
【図１１】  本発明の例示的な実施の形態に従うワイド・マイクロキャッシュ・コントロールを示した図。
【図１２Ａ】  図１２Ａは、本発明の例示的な実施の形態に従うワイド・スイッチ・インストラクションを示した図。
【図１２Ｂ】  図１２Ｂは、本発明の例示的な実施の形態に従うワイド・スイッチ・インストラクションを示した図。
【図１２Ｃ】  図１２Ｃは、本発明の例示的な実施の形態に従うワイド・スイッチ・インストラクションを示した図。
【図１２Ｄ】  図１２Ｄは、本発明の例示的な実施の形態に従うワイド・スイッチ・インストラクションを示した図。
【図１３Ａ】  図１３Ａは、本発明の例示的な実施の形態に従うワイド・トランスレート・インストラクションを示した図。
【図１３Ｂ】  図１３Ｂは、本発明の例示的な実施の形態に従うワイド・トランスレート・インストラクションを示した図。
【図１３Ｃ】  図１３Ｃは、本発明の例示的な実施の形態に従うワイド・トランスレート・インストラクションを示した図。
【図１３Ｄ】  図１３Ｄは、本発明の例示的な実施の形態に従うワイド・トランスレート・インストラクションを示した図。
【図１４Ａ】  図１４Ａは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・インストラクションを示した図。
【図１４Ｂ】  図１４Ｂは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・インストラクションを示した図。
【図１４Ｃ】  図１４Ｃは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・インストラクションを示した図。
【図１４Ｄ】  図１４Ｄは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・インストラクションを示した図。
【図１４Ｅ】  図１４Ｅは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・インストラクションを示した図。
【図１５Ａ】  図１５Ａは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１５Ｂ】  図１５Ｂは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１５Ｃ】  図１５Ｃは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１５Ｄ】  図１５Ｄは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１５Ｅ】  図１５Ｅは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１５Ｆ】  図１５Ｆは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１６Ａ】  図１６Ａは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１６Ｂ】  図１６Ｂは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１６Ｃ】  図１６Ｃは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１６Ｄ】  図１６Ｄは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１６Ｅ】  図１６Ｅは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・イクストラクト・イメディエート・インストラクションを示した図。
【図１７Ａ】  図１７Ａは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・フローティング・ポイント・インストラクションを示した図。
【図１７Ｂ】  図１７Ｂは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・フローティング・ポイント・インストラクションを示した図。
【図１７Ｃ】  図１７Ｃは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・フローティング・ポイント・インストラクションを示した図。
【図１７Ｄ】  図１７Ｄは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・フローティング・ポイント・インストラクションを示した図。
【図１７Ｅ】  図１７Ｅは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・フローティング・ポイント・インストラクションを示した図。
【図１８Ａ】  図１８Ａは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・ガロア・インストラクションを示した図。
【図１８Ｂ】  図１８Ｂは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・ガロア・インストラクションを示した図。
【図１８Ｃ】  図１８Ｃは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・ガロア・インストラクションを示した図。
【図１８Ｄ】  図１８Ｄは、本発明の例示的な実施の形態に従うワイド・マルチプライ・マトリックス・ガロア・インストラクションを示した図。
【図１９Ａ】  図１９Ａは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｂ】  図１９Ｂは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｃ】  図１９Ｃは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｄ】  図１９Ｄは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｅ】  図１９Ｅは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｆ】  図１９Ｆは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図１９Ｇ】  図１９Ｇは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インプレース・インストラクションを示した図。
【図２０Ａ】  図２０Ａは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｂ】  図２０Ｂは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｃ】  図２０Ｃは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｄ】  図２０Ｄは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｅ】  図２０Ｅは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｆ】  図２０Ｆは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｇ】  図２０Ｇは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｈ】  図２０Ｈは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｉ】  図２０Ｉは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２０Ｊ】  図２０Ｊは、本発明の例示的な実施の形態に従うアンサンブル・イクストラクト・インストラクションを示した図。
【図２１Ａ】  図２１Ａは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２１Ｂ】  図２１Ｂは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２１Ｃ】  図２１Ｃは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２１Ｄ】  図２１Ｄは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２１Ｅ】  図２１Ｅは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２１Ｆ】  図２１Ｆは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２２Ａ】  図２２Ａは、本発明の例示的の実施の形態に従うアンサンブル・スケール−アド・フローティング−ポイント・インストラクションを示した図。
【図２２Ｂ】  図２２Ｂは、本発明の例示的の実施の形態に従うアンサンブル・スケール−アド・フローティング−ポイント・インストラクションを示した図。
【図２３Ａ】  図２３Ａは、本発明の例示的の実施の形態に従うグループ・ブーリアン・インストラクションシステムを示した図。
【図２３Ｂ】  図２３Ｂは、本発明の例示的の実施の形態に従うグループ・ブーリアン・インストラクションシステムを示した図。
【図２３Ｃ】  図２３Ｃは、本発明の例示的の実施の形態に従うグループ・ブーリアン・インストラクションシステムを示した図。
【図２４Ａ】  図２４Ａは、本発明の例示的の実施の形態に従うブランチ・ヒント・インストラクションを示した図。
【図２４Ｂ】  図２４Ｂは、本発明の例示的の実施の形態に従うシステムおよびプリビレッジド・ライブラリ・コールを示した図。
【図２４Ｃ】  図２４Ｃは、本発明の例示的の実施の形態に従うブランチ・ヒント・インストラクションを示した図。
【図２５Ａ】  図２５Ａは、本発明の例示的の実施の形態に従うアンサンブル・シンク・フローティング−ポイント・インストラクションを示した図。
【図２５Ｂ】  図２５Ｂは、本発明の例示的の実施の形態に従うアンサンブル・シンク・フローティング−ポイント・インストラクションを示した図。
【図２５Ｃ】  図２５Ｃは、本発明の例示的の実施の形態に従うアンサンブル・シンク・フローティング−ポイント・インストラクションを示した図。
【図２５Ｄ】  図２５Ｄは、本発明の例示的の実施の形態に従うアンサンブル・シンク・フローティング−ポイント・インストラクションを示した図。
【図１】
0004933693.tif 000013
【図２】
0004933693.tif 000014
【図３】
0004933693.tif 000015
【図４】
0004933693.tif 000016
【図５】
0004933693.tif 000017
【図６】
0004933693.tif 000018
【図７】
0004933693.tif 000019
【図８】
0004933693.tif 000020
【図９】
0004933693.tif 000021
【図１０】
0004933693.tif 000022
【図１１】
0004933693.tif 000023
【図１２Ａ】
0004933693.tif 000024
【図１２Ｂ】
0004933693.tif 000025
【図１２Ｃ】
0004933693.tif 000026
【図１２Ｄ】
0004933693.tif 000027
【図１３Ａ】
0004933693.tif 000028
【図１３Ｂ】
0004933693.tif 000029
【図１３Ｃ】
0004933693.tif 000030
【図１３Ｄ】
0004933693.tif 000031
【図１４Ａ】
0004933693.tif 000032
【図１４Ｂ】
0004933693.tif 000033
【図１４Ｃ】
0004933693.tif 000034
【図１４Ｄ】
0004933693.tif 000035
【図１４Ｄ−１】
0004933693.tif 000036
【図１４Ｅ】
0004933693.tif 000037
【図１５Ａ】
0004933693.tif 000038
【図１５Ｂ】
0004933693.tif 000039
【図１５Ｃ】
0004933693.tif 000040
【図１５Ｄ】
0004933693.tif 000041
【図１５Ｅ】
0004933693.tif 000042
【図１５Ｅ−１】
0004933693.tif 000043
【図１５Ｅ−２】
0004933693.tif 000044
【図１６Ａ】
0004933693.tif 000045
【図１６Ｂ】
0004933693.tif 000046
【図１６Ｃ】
0004933693.tif 000047
【図１６Ｄ】
0004933693.tif 000048
【図１６Ｄ−１】
0004933693.tif 000049
【図１６Ｅ】
0004933693.tif 000050
【図１７Ａ】
0004933693.tif 000051
【図１７Ｂ】
0004933693.tif 000052
【図１７Ｃ】
0004933693.tif 000053
【図１７Ｄ】
0004933693.tif 000054
【図１７Ｄ−１】
0004933693.tif 000055
【図１７Ｅ】
0004933693.tif 000056
【図１８Ａ】
0004933693.tif 000057
【図１８Ｂ】
0004933693.tif 000058
【図１８Ｃ】
0004933693.tif 000059
【図１８Ｃ−１】
0004933693.tif 000060
【図１８Ｄ】
0004933693.tif 000061
【図１９Ａ】
0004933693.tif 000062
【図１９Ｂ】
0004933693.tif 000063
【図１９Ｃ】
0004933693.tif 000064
【図１９Ｄ】
0004933693.tif 000065
【図１９Ｅ】
0004933693.tif 000066
【図１９Ｆ】
0004933693.tif 000067
【図１９Ｇ】
0004933693.tif 000068
【図１９Ｇ−１】
0004933693.tif 000069
【図１９Ｇ−２】
0004933693.tif 000070
【図２０Ａ】
0004933693.tif 000071
【図２０Ｂ】
0004933693.tif 000072
【図２０Ｃ】
0004933693.tif 000073
【図２０Ｄ】
0004933693.tif 000074
【図２０Ｅ】
0004933693.tif 000075
【図２０Ｆ】
0004933693.tif 000076
【図２０Ｇ】
0004933693.tif 000077
【図２０Ｈ】
0004933693.tif 000078
【図２０Ｉ】
0004933693.tif 000079
【図２０Ｊ】
0004933693.tif 000080
【図２０Ｊ−１】
0004933693.tif 000081
【図２０Ｊ−２】
0004933693.tif 000082
【図２０Ｊ−３】
0004933693.tif 000083
【図２１Ａ】
0004933693.tif 000084
【図２１Ｂ】
0004933693.tif 000085
【図２２Ａ】
0004933693.tif 000086
【図２２Ｂ】
0004933693.tif 000087
【図２３Ａ】
0004933693.tif 000088
【図２３Ｂ】
0004933693.tif 000089
【図２３Ｃ】
0004933693.tif 000090
【図２４Ａ】
0004933693.tif 000091
【図２４Ｂ】
0004933693.tif 000092
【図２４Ｃ】
0004933693.tif 000093
【図２５Ａ】
0004933693.tif 000094
【図２５Ａ−１】
0004933693.tif 000095
【図２５Ｂ】
0004933693.tif 000096
【図２５Ｃ】
0004933693.tif 000097
【図２５Ｄ】
0004933693.tif 000098
【図２５Ｄ−１】
0004933693.tif 000099
【図２５Ｄ−２】
0004933693.tif 000100
【図２５Ｄ−３】
0004933693.tif 000101
【図２５Ｄ−４】
0004933693.tif 000102
【図２５Ｄ−５】
0004933693.tif 000103
【図２５Ｄ−６】
0004933693.tif 000104
【図２５Ｄ−７】
0004933693.tif 000105
【図２５Ｄ−８】
0004933693.tif 000106
【図２５Ｄ−９】
0004933693.tif 000107