(57)【要約】  入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルに対してベクトル処理演算をサポートするための、装置、方法、プログラム、及び複素数処理命令が提供される。命令に応答して、データ項目の少なくとも１つの第１のセットが第１のソース・レジスタ内の交互する位置から抽出され、データ項目の少なくとも１つの第２のセットが第２のソース・レジスタ内の交互する位置から抽出され、ここで第１及び第２のソース・レジスタ内の連続データ項目は複素数の個々のセットの交互する実数成分及び虚数成分を含む。複素数成分の結果セットが、データ項目の２つのセットをオペランドとして使用して生成され、複素数成分の結果セットは、複素数の２つのセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである。複素数成分の結果セットがデスティネーション・レジスタに適用される。
2020527795.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードするための命令デコーダ回路と、
入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路と
を備え、
前記命令デコーダ回路は複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、前記データ処理回路が、
前記第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、前記第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、前記第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第１のセット及び前記複素数の第２のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、
前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
を行うように制御するための制御信号を生成する、装置。
【請求項２】
前記複素数成分の結果セットは前記複素数結果の実数成分のセットである、請求項１に記載の装置。
【請求項３】
前記複素数成分の結果セットは前記複素数結果の虚数成分のセットである、請求項１に記載の装置。
【請求項４】
前記データ処理回路は前記制御信号に応答して前記複素数成分の結果セットを前記デスティネーション・レジスタ内の連続位置に適用する、請求項１から３までのいずれかに記載の装置。
【請求項５】
前記複素数成分の結果セットのそれぞれの複素数成分は、前記データ項目の第１及び第２のセットのそれぞれのデータ項目より拡大している、請求項４に記載の装置。
【請求項６】
前記データ処理回路は前記制御信号に応答して、前記複素数成分の結果セットを、複素数成分のさらなる結果セットでインターリーブされる前記デスティネーション・レジスタ内の交互する位置に適用し、
前記複素数成分の結果セットが前記複素数結果の実数成分のセットである場合、前記複素数成分のさらなる結果セットは前記複素数結果の虚数成分のセットであり、
前記複素数成分の結果セットが前記複素数結果の虚数成分のセットである場合、前記複素数成分のさらなる結果セットは前記複素数結果の実数成分のセットである、
請求項１から３までのいずれかに記載の装置。
【請求項７】
前記複素数処理命令は、前記データ項目の第１のセットが前記第１のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定し、前記複素数処理命令は、前記データ項目の第２のセットが前記第２のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定する、請求項１から６までのいずれかに記載の装置。
【請求項８】
前記複素数処理命令は、前記第１のソース・レジスタ及び前記第２のソース・レジスタのうちの少なくとも１つについての複製インデックスをさらに指定し、前記データ処理回路はさらに前記制御信号に応答して、前記第１のソース・レジスタ及び前記第２のソース・レジスタのうちの前記少なくとも１つにおける前記複製インデックスによって示される複素数のソース・セットを複製する、請求項１から７までのいずれかに記載の装置。
【請求項９】
前記複素数のソース・セットの複製は、前記複素数のソース・セットの複数回の複製を含む、請求項８に記載の装置。
【請求項１０】
前記第１のソース・レジスタから抽出される前記データ項目の少なくとも１つの第１のセットは、前記データ項目の第１のセット及びデータ項目の第３のセットを含み、
前記データ項目の第１のセットが前記複素数の第１のセットの実数成分である場合、前記データ項目の第３のセットは前記複素数の第１のセットの虚数成分であり、前記データ項目の第１のセットが前記複素数の第１のセットの虚数成分である場合、前記データ項目の第３のセットは前記複素数の第１のセットの実数成分であり、
前記データ処理回路は前記制御信号にさらに応答して、さらに前記データ項目の第３のセットをオペランドとして使用して、前記複素数成分の結果セットを生成する、請求項１から９までのいずれかに記載の装置。
【請求項１１】
前記第２のソース・レジスタから抽出される前記データ項目の少なくとも１つの第２のセットは、前記データ項目の第２のセット及びデータ項目の第４のセットを含み、
前記データ項目の第２のセットが前記複素数の第２のセットの実数成分である場合、前記データ項目の第４のセットは前記複素数の第２のセットの虚数成分であり、前記データ項目の第２のセットが前記複素数の第２のセットの虚数成分である場合、前記データ項目の第４のセットは前記複素数の第２のセットの実数成分であり、
前記データ処理回路は前記制御信号にさらに応答して、さらに前記データ項目の第４のセットをオペランドとして使用して、前記複素数成分の結果セットを生成する、請求項１から１０までのいずれかに記載の装置。
【請求項１２】
前記複素数演算は、複素数ドット積演算であり、前記データ処理回路は前記制御信号に応答して、前記複素数の第１のセットの実数成分−虚数成分対の対のセット、並びに前記複素数の第２のセットの実数成分−虚数成分対の対のセット、の部分積から前記複素数成分の結果セットを累算する累算回路を備える、請求項１０又は１１に記載の装置。
【請求項１３】
前記複素数演算は複素数乗算演算を含む、請求項１から１１までのいずれかに記載の装置。
【請求項１４】
前記複素数演算は複素数加算演算、又は複素数減算演算である、請求項１から１１までのいずれかに記載の装置。
【請求項１５】
前記複素数処理命令がさらに転置パラメータを指定し、前記データ処理回路が前記制御信号に応答して、前記複素数の第１及び第２のセットへの前記複素数演算の適用に先立って前記複素数の第１及び第２のセットのうちの少なくとも１つに対して転置演算を適用する、請求項１から１４までのいずれかに記載の装置。
【請求項１６】
前記転置演算は、
少なくとも１つの前記複素数の第１のセット及び前記複素数の第２のセットにおいて、
実数成分の虚数成分での置換、
虚数成分の実数成分での置換、
実数成分と虚数成分の交換、
実数成分を負の値にすること、及び
虚数成分を負の値にすること
のうちの少なくとも１つを含む、請求項１５に記載の装置。
【請求項１７】
前記複素数処理命令は即値として前記転置パラメータを指定する、請求項１５又は１６に記載の装置。
【請求項１８】
前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することは、前記複素数成分の結果セットを前記デスティネーション・レジスタに格納することを含む、請求項１から１７までのいずれかに記載の装置。
【請求項１９】
前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することは、前記複素数成分の結果セットを前記デスティネーション・レジスタの内容で累算することを含む、請求項１から１８までのいずれかに記載の装置。
【請求項２０】
前記デスティネーション・レジスタは前記第１のソース・レジスタ及び前記第２のソース・レジスタのうちの１つである、請求項１から１９までのいずれかに記載の装置。
【請求項２１】
前記複素数演算は飽和演算である、請求項１から２０までのいずれかに記載の装置。
【請求項２２】
データ処理装置を動作させる方法であって、
命令をデコードするステップと、
入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用するステップと、
複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、前記データ処理装置のデータ処理回路が、
前記第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、前記第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、前記第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第１のセット及び前記複素数の第２のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、
前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
を行うように制御するための制御信号を生成するステップと
を含む、方法。
【請求項２３】
命令をデコードする手段と、
入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトルへの前記命令によって指定されるベクトル処理演算を選択的に適用する手段と、
複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が、
前記第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、前記第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、前記第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第１のセット及び前記複素数の第２のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、
前記複素数成分の結果セットを前記デスティネーション・レジスタに適用することと
を行うための手段を制御するための制御信号を生成する手段と
を備える、装置。
【請求項２４】
命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
命令をデコードするための命令デコード・プログラム・ロジックと、
入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む前記入力データ・ベクトル構造体への前記命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックと
を含み、
前記命令デコード・プログラム・ロジックは複素数演算、第１のソース・データ構造体、第２のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、前記データ処理プログラム・ロジックが、
前記第１のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、前記第１のソース・データ構造体内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記第２のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、前記第２のソース・データ構造体内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、
前記データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、前記複素数成分の結果セットは、前記複素数の第１のセット及び前記複素数の第２のセットに適用された前記複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、
前記複素数成分の結果セットを前記デスティネーション・データ構造体に適用することと
を行うように制御するための制御信号を生成する、コンピュータ・プログラム。
【請求項２５】
請求項２４に記載の前記コンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はデータ処理装置に関する。より詳細には、データ処理装置で複素数演算を実施することに関する。
【背景技術】
【０００２】
データ処理装置は様々なコンテキストにおいて複素数計算を実施することが要求され得る。いくつかのデータ処理システムは、ソース・オペランド又はベクトル処理命令によって指定される結果値が指定されるデータ処理演算に並列にかけられる複数のデータ項目を含むベクトルであるベクトル命令の処理をサポートする。複素数の２部構造（すなわち、その実数部、及び虚数部）は、ベクトル化されるやり方で複素数演算を実施することができるデータ処理システムを提供することが単純ではないことを意味している。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、１９９０年冬季ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００４】
一実例の実施例において、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備える装置があり、命令デコーダ回路は複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理回路が、第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成する。
【０００５】
別の実例の実施例において、データ処理装置を動作させる方法があり、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置のデータ処理回路が第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することと、を行うように制御するための制御信号を生成するステップとを含む。
【０００６】
別の実例の実施例において、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することと、を行うための手段を制御するための制御信号を生成する手段とを含む装置がある。
【０００７】
別の実例の実施例において、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムがあり、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは複素数演算、第１のソース・データ構造体、第２のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、データ処理プログラム・ロジックが、第１のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・データ構造体内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・データ構造体内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・データ構造体に適用することと、を行うように制御するための制御信号を生成する。
【０００８】
本技法は、その実施例を参照して添付の図面に図示されるように、単に実例としてさらに説明される。
【図面の簡単な説明】
【０００９】
【図１】一実施例における、データ処理装置を概略的に示す図である。
【図２】一実施例における、非拡大（ｎｏｎ−ｗｉｄｅｎｉｎｇ）複素数演算を実施するデータ処理回路を概略的に示す図である。
【図３】一実施例における、拡大（ｗｉｄｅｎｉｎｇ）複素数演算を実施するデータ処理回路を概略的に示す図である。
【図４】一実施例における、複製演算から複素数演算を始めるデータ処理回路を概略的に示す図である。
【図５】符号付き乗算複素数命令の４つの種類に応じた実施例における、データ処理回路の動作の図である。
【図６】ベクトル化された複素数の最終的なセットを生成するための、図５で示されるものなどの複素数命令の使用に続くナロー・シフト（ｎａｒｒｏｗｉｎｇ  ｓｈｉｆｔ）演算の使用の図である。
【図７】図７Ａ−７Ｄは、一実施例における、４つの異なるタイプの複素数ドット積命令に応じたデータ処理回路を概略的に示す図である。
【図８】初期のデータ精度に戻るために、図７Ａ〜図７Ｄで示されるものなどの複素数ドット積命令の使用に続いて一実施例で実行される一連の演算を示す図である。
【図９】図９Ａ−９Ｄは、一実施例における、４つの異なるタイプの非拡大複素数ドット積命令に応じたデータ処理回路を概略的に示す図である。
【図１０】初期のデータ精度に戻るために、図９Ａ〜９Ｄで示されるものなどの命令の実行に続いて一実施例で実行される一連の演算を示す図である。
【図１１】図１１Ａ−１１Ｂは、一実施例における、さらに転置パラメータを含む、複素数加算命令をサポートするためのデータ処理回路を概略的に示す図である。
【図１２】一実施例における４つの個々の転置パラメータに応じて実行される４つの転置のセットを示す図である。
【図１３】一実施例の方法を実行する際に行われる一連のステップを示す図である。
【図１４】一実施例において、シミュレータ実装形態を提供するシステムのコンポーネントを概略的に示す図である。
【発明を実施するための形態】
【００１０】
少なくともいくつかの実施例は、命令をデコードするための命令デコーダ回路と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理回路とを備える装置であり、命令デコーダ回路は複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理回路が、第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成する、装置を提供する。
【００１１】
現代のデータ処理システムは、様々なコンテキスト、例えば数例を挙げると、デジタル通信、レーダ・システム、及び光学システムにおいて、複素数の算術的計算を実施するよう要求されることがある。さらには、ベクトル化されたやり方でデータを処理することができる（すなわち、単一の命令によって指定されるデータ処理演算をデータ・ベクトル内の複数のデータ項目に対して並列に適用することができる）データ処理システムは、スループット及び処理効率の点から有利性をもたらすことができる。しかしながら、複素数データにベクトル処理技法を適用することは、いくつかの理由で単純ではない。まず、複素数の固有の構造（実数成分及び虚数成分）は、データ処理システムが、ベクトル内のデータ項目の大きなセット内のそれぞれの別個の複素数のデータ項目のこれらの個々の部分を正確に扱えるように構成されなければならないこと、さらには、入力データがベクトル化されている性質により、複素数の２つのセットの個々の成分を所与の複素数演算でまとめることができるやり方に対してさらなる制約が加えられることを意味している。本技法は、データ処理回路がソース・レジスタのそれぞれにおいて交互する位置、つまりソース・レジスタが連続データ項目のセットを保持しており、ここでこれらのデータ項目は複素数のセットの実数成分と虚数成分との交互になっており、且つ実数成分と虚数成分とが別個の複素数を形成するために対（または「ペア」ともいう）となっていると認識される場所、からデータ項目のセットを抽出する手法を提供する。それによって、データ処理回路は例えば、ソース・レジスタから実数成分を引き出すことができる（他の実例では代替又は追加で、同様に虚数成分を抽出できることに留意すべきであるが）。よって、データ処理回路は次いで必要とされる複素数演算を、個々のソース・レジスタから抽出した成分に適用して、結果セットの複素数成分を作ることができ、ここで複素数成分の結果セットは、複素数演算の複素数結果の実数成分のセット、又は虚数部のいずれかである。これは、複素数成分のさらなるセットがやはり生成されることを排除するものではないこと、すなわち、複素数のセットの実数部及び虚数部の両方が生成され得るが、いくつかの実施例においてはどちらか一方しか生成されないことに留意されたい。次いで複素数成分の結果セットは複素数処理命令で指定されるデスティネーション・レジスタに適用されるが、この適用は様々な形態を取ることができる。例えば、結果セットは単にデスティネーション・レジスタに格納することができるか、又はデスティネーション・レジスタの既存の内容に累算する（数学的方法の一種）ことができる。
【００１２】
上で言及したように、複素数成分の結果セットは、定義された特定の複素数処理命令に依存して変化することができるが、いくつかの実施例において、複素数成分の結果セットは複素数結果の実数成分のセットである。同様に、他の実施例では、複素数成分の結果セットは複素数結果の虚数成分のセットである。
【００１３】
複素数処理命令に応答してデータ処理回路によって生成された複素数成分の結果セットは、様々な方法でデスティネーション・レジスタに適用することができるが、いくつかの実施例において、データ処理回路は制御信号に応答して複素数成分の結果セットをデスティネーション・レジスタ内の連続位置に適用する。それにより、複素数成分の結果セットが複素数演算の複素数結果の実数部及び虚数部のうちの１つである場合、これはデスティネーション・レジスタの内容が第１及び第２のソース・レジスタの内容とは異なるフォーマットであること、すなわち、第１及び第２のソース・レジスタが複素数のセットの実数成分及び虚数成分の連続する対を保持している場合、デスティネーション・レジスタは連続する実数成分又は連続する虚数成分のいずれかのみを保持していることを意味している。これによって、多様な複素数演算を定義することが可能となるが、結果については、ベクトル処理構成内で扱われることができるだけである。
【００１４】
実際一部のそのような実施例において、複素数成分の結果セットのそれぞれの複素数成分は、データ項目の第１及び第２のセットのそれぞれのデータ項目より拡大している。それにより、複素数成分の結果セットの成分のこの拡大は、複素数成分の結果セットの精度が、ベクトル処理環境内で演算するにもかかわらずより良好に保存され、そうでなければ結果セットの複素数成分は、それらをベクトル処理の自身の個々のレーンにフィットさせるために、著しい切り捨てを必要としていたかも知れないことを意味している。したがって、本技法は例えば、複素数の結果セットの実数成分及び虚数成分を２つの別個の命令によって決定することができ、その後これらの成分を実数及び虚数の複素数対の連続するセットに再結合する機会を伴う手法を提供するものであることを理解すべきである。
【００１５】
それにもかかわらず、上で言及したいくつかの実施例においてデータ処理回路は複素数成分の結果セットをデスティネーション・レジスタの連続位置に適用することができるが、いくつかの実施例においては、データ処理回路は複素数実数成分の結果セット、及び対応する複素数虚数成分の結果セットの両方を生成し、これらは連続する実数成分−虚数成分対が結果として複素数の連続するセットを形成するよう、デスティネーション・レジスタへの適用においてインターリーブすることができる。それにより、いくつかの実施例において、データ処理回路は制御信号に応答して、複素数成分の結果セットを、複素数成分のさらなる結果セットでインターリーブされるデスティネーション・レジスタ内の交互する位置に適用し、複素数成分の結果セットが複素数結果の実数成分のセットである場合、複素数成分のさらなる結果セットは複素数結果の虚数成分のセットであり、複素数成分の結果セットが複素数結果の虚数成分のセットである場合、複素数成分のさらなる結果セットは複素数結果の実数成分のセットである。
【００１６】
データ処理回路がデータ項目の第１のセット及びデータ項目の第２のセットを第１及び第２のソース・レジスタ内のそれらの個々の交互する位置から抽出するやり方は様々に定義することができ、実際いくつかの実施例において様々に制御することができ、例えば、いくつかの実施例において複素数処理命令は、データ項目の第１のセットが第１のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定し、複素数処理命令は、データ項目の第２のセットが第２のソース・レジスタの奇数番号位置又は偶数番号位置から抽出されるかどうかをさらに指定する。「奇数」及び「偶数」位置は、本明細書で「下位（又はボトム(bottom)）」及び「上位(又はトップ(top))」位置と称されることもある。
【００１７】
また、複素数演算を実施するために、データ項目の第１及び第２のセットが抽出される前に、第１のソース・レジスタ及び第２のソース・レジスタのうちの少なくとも１つに適用されるさらなるデータ処理があってもよく、いくつかの実施例において、複素数処理命令は、第１のソース・レジスタ及び第２のソース・レジスタのうちの少なくとも１つについての複製インデックスをさらに指定し、データ処理回路はさらに制御信号に応答して、第１のソース・レジスタ及び第２のソース・レジスタのうちの少なくとも１つにおける複製インデックスによって示される複素数のソース・セットを複製する。したがって、第１及び第２のソース・レジスタのうちの少なくとも１つの「インデックス付け」によって、プログラマは個々のレジスタに保持されているデータのサブセットを識別することができ、このサブセットは再作成することができ、それにより第１及び第２のデータ・セットの抽出が次いでこの再作成されたサブセットを使用することができる。例えば、定義されるインデックスの性質に依存して、複製インデックスはベクトル・レジスタの所定の部分の２つの２分の１のうちの１つを指定することができ、次いで複製によってその指定された２分の１を、それぞれ所定の部分内の他の２分の１にコピーする。具体的な一実例を挙げると、複製インデックスが適用されるベクトル・レジスタの単位が１２８ビット長であり、複製インデックスがこの単位の上半分を指定し、本技法がその１２８ビットの空間を利用して４つの連続する３２ビットの複素数成分（すなわち、２つの６４ビットの複素数）を格納してある場合、複製によって、識別された６４ビットの複素数を、その１２８ビット単位中で隣接する６４ビット空間に複製する。この動作は、ベクトル・レジスタの全幅にわたって繰り返される。
【００１８】
上記実例は一回実施される複製を示しているが、いくつかの実施例において、複素数のソース・セットの複製は、複素数のソース・セットの複数回の複製を含む。例えば、複製インデックスがベクトルの所与の単位の４分の１を指定する場合、この４分の１は単位すべてを満たすために３回複製することができる。上記実例の１２８ビット単位をそのままにしておくが、複素数成分はそれぞれの１６ビットである一実例においては、これによって識別された３２ビットの複素数（１６ビットの実数成分及び１６ビットの虚数成分）が、この１２８ビット単位上にある他の３つの３２ビットの部分に複製される。このような「インデックス付け」を本明細書で説明される命令のあらゆるものに適用することができる。
【００１９】
いくつかの実施例においては、単一のデータ項目のセットのみが第１のソース・レジスタから抽出されており、第１のソース・レジスタ内の複素数のセットの実数成分のセット又は虚数成分のセットのいずれかを表現しているが、いくつかの実施例では実数成分及び虚数成分の両方が抽出される。それにより、これらの実施例では、第１のソース・レジスタから抽出されるデータ項目の少なくとも１つの第１のセットは、データ項目の第１のセット及びデータ項目の第３のセットを含み、データ項目の第１のセットが複素数の第１のセットの実数成分である場合、データ項目の第３のセットは複素数の第１のセットの虚数成分であり、データ項目の第１のセットが複素数の第１のセットの虚数成分である場合、データ項目の第３のセットは複素数の第１のセットの実数成分であり、またデータ処理回路は制御信号にさらに応答して、さらにデータ項目の第３のセットをオペランドとして使用して、複素数成分の結果セットを生成する。したがって、データ処理回路は複素数演算における改善のために複素数の第１のセットの実数成分及び虚数成分の両方を有しており、定義された特定の複素数処理命令（したがって、複素数演算）に適当である。
【００２０】
同様に、いくつかの実施例において、第２のソース・レジスタから抽出されるデータ項目の少なくとも１つの第２のセットは、データ項目の第２のセット及びデータ項目の第４のセットを含み、データ項目の第２のセットが複素数の第２のセットの実数成分である場合、データ項目の第４のセットは複素数の第２のセットの虚数成分であり、データ項目の第２のセットが複素数の第２のセットの虚数成分である場合、データ項目の第４のセットは複素数の第２のセットの実数成分であり、またデータ処理回路は制御信号にさらに応答して、さらにデータ項目の第４のセットをオペランドとして使用して、複素数成分の結果セットを生成する。
【００２１】
複素数演算は様々な形態を取ることができるが、いくつかの実施例において、複素数演算は、複素数ドット積演算であり、データ処理回路は制御信号に応答して、複素数の第１のセットの実数成分−虚数成分対の対のセット、並びに複素数の第２のセットの実数成分−虚数成分対の対のセット、の部分積から複素数成分の結果セットを累算する累算回路を備える。いくつかの実施例において、複素数演算は複素数乗算演算を含む。いくつかの実施例において、複素数演算は複素数加算演算である。いくつかの実施例において、複素数演算は複素数減算演算である。
【００２２】
本技法は複素数の第１及び第２のセットの１つ又は両方の成分の追加的な操作が複素数演算に先立って実行され得ることをさらに提供するが、これは特に必要とされる複素数結果の効率的な決定を可能とすると見出されているためであり、例えば、そうでなければ第１及び第２のソース・レジスタのうちの少なくとも１つの内容を操作するために追加的な命令が予め実行されることを必要としていたであろう。ひいては、いくつかの実施例は複素数処理命令がさらに転置パラメータを指定すること、またデータ処理回路が制御信号に応答して、複素数の第１及び第２のセットへの複素数演算の適用に先立って複素数の第１及び第２のセットのうちの少なくとも１つに対して転置演算を適用することを提供する。
【００２３】
複素数の第１及び第２のセットのうちの少なくとも１つに適用されるこの転置演算は、様々に定義することができる。これは「回転」と称されることがあり、実際、いくつかの事例においては、原点を中心とする複素数平面において表現される複素数の回転に対応することができるが、本技法はそのような「真」の回転に対応する転置に限定されず、いくつかの実施例においては、転置演算は以下のうちの少なくとも１つを含む：少なくとも１つの複素数の第１のセット及び複素数の第２のセットにおいて、実数成分の虚数成分での置換、虚数成分の実数成分での置換、実数成分と虚数成分の交換、実数成分を負の値にすること（ｎｅｇａｔｉｏｎ）、及び虚数成分を負の値にすること。
【００２４】
転置パラメータは様々な方法で与えられ得るが、いくつかの実施例において、複素数処理命令は即値として転置パラメータを指定する。上で言及したように、転置は常に複素数平面内の真の回転に直接対応しているわけではないが、それにもかかわらず、転置パラメータは本明細書において所々「回転値」と称され、いくつかの実施例において、４つの値のセットのうちの１つを取ることができ、複素数平面の回転の実例に類似して、複素数平面内の４分の１回転の回転角を指して０、９０、１８０、及び２７０と記されていることがある。
【００２５】
上で言及したように、複素数成分の結果セットは様々な方法でデスティネーション・レジスタに適用することができるが、いくつかの実施例において、複素数成分の結果セットをデスティネーション・レジスタに適用することは、複素数成分の結果セットをデスティネーション・レジスタに格納することを含む。他の実施例において、複素数成分の結果セットをデスティネーション・レジスタに適用することは、複素数成分の結果セットをデスティネーション・レジスタの内容で累算することを含む。
【００２６】
デスティネーション・レジスタは、第１及び第２のソース・レジスタ両方とは別個のレジスタとして指定することができるが、いくつかの実施例において、デスティネーション・レジスタが第１のソース・レジスタ及び第２のソース・レジスタのうちの１つである「相殺的」演算を定義することができる。
【００２７】
データ処理回路が、結果値がその値を保持するよう定義された記憶装置には大きくなり過ぎてしまう状況を扱うやり方は、様々な形態を取ることができる。例えば、値はラップ・アラウンドする（すなわち、最大値を超えると０に戻る）ことができる、一方でいくつかの実施例において、複素数演算は飽和演算（すなわち、換言すると、最大値を超えると結果はその最大値のまま保持される）である。
【００２８】
少なくともいくつかの実施例は、データ処理装置を動作させる方法を提供し、方法は、命令をデコードするステップと、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用するステップと、複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置のデータ処理回路が、第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うように制御するための制御信号を生成するステップとを含む。
【００２９】
少なくともいくつかの実施例は、装置を提供し、装置は、命令をデコードする手段と、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルへの命令によって指定されるベクトル処理演算を選択的に適用する手段と、複素数演算、第１のソース・レジスタ、第２のソース・レジスタ、及びデスティネーション・レジスタを指定する複素数処理命令に応答して、データ処理装置内のデータ処理が、第１のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・レジスタ内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・レジスタ内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・レジスタ内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・レジスタに適用することとを行うための手段を制御するための制御信号を生成する手段とを備える。
【００３０】
少なくともいくつかの実施例は、命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムを提供し、コンピュータ・プログラムは、命令をデコードするための命令デコード・プログラム・ロジックと、入力データ・ベクトル構造体内の個々の位置に複数の入力データ項目を含む入力データ・ベクトル構造体への命令によって指定されるベクトル処理演算を選択的に適用するためのデータ処理プログラム・ロジックとを含み、命令デコード・プログラム・ロジックは複素数演算、第１のソース・データ構造体、第２のソース・データ構造体、及びデスティネーション・データ構造体を指定する複素数処理命令に応答して、データ処理プログラム・ロジックが、第１のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第１のセットを抽出することであって、第１のソース・データ構造体内の連続データ項目は複素数の第１のセットの交互する実数成分及び虚数成分を含む、抽出することと、第２のソース・データ構造体内の交互する位置からデータ項目の少なくとも１つの第２のセットを抽出することであって、第２のソース・データ構造体内の連続データ項目は複素数の第２のセットの交互する実数成分及び虚数成分を含む、抽出することと、データ項目の第１及び第２のセットをオペランドとして使用して複素数成分の結果セットを生成することであって、複素数成分の結果セットは、複素数の第１のセット及び複素数の第２のセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである、生成することと、複素数成分の結果セットをデスティネーション・データ構造体に適用することとを行うように制御するための制御信号を生成する。
【００３１】
少なくともいくつかの実施例は、上で言及したコンピュータ・プログラムの実施例にしたがってコンピュータ・プログラムを非一時的に記憶するコンピュータ可読記憶媒体を提供する。
【００３２】
いくつかの特定の実施例を次に図面を参照して説明する。
【００３３】
図１は本技法の様々な実例を具現化し得るデータ処理装置１０を概略的に図示している。装置は、それが実行する一連の命令に応答してデータ項目に対してデータ処理演算を実施するデータ処理回路１２を備える。これらの命令は、データ処理装置がアクセス権を有するメモリ１４から取り出され、当業者に馴染みのあるやり方でこの目的のためにフェッチ回路１６が設けられる。さらには、フェッチ回路１６によって取り出された命令は命令デコーダ回路１８を通過し、命令デコーダ回路１８は、処理回路１２並びにレジスタ２０のセット、及びロード／ストア・ユニット２２の、設定及び動作の様々な態様を制御するように構成される制御信号を生成する。一般的に、データ処理回路１２はパイプライン様式に構成することができるが、その詳細は本技法に関連性がない。当業者であれば図１が表す全体的な構成には馴染みがあるが、そのさらなる詳細な説明は、単に簡略化のためここでは省略する。図１から分かるように、レジスタ２０はそれぞれ複数のデータ要素についての記憶装置を備え、それによって処理回路はデータ処理演算を指定されたレジスタ内の指定されたデータ要素に適用することができるか、又はデータ処理演算を指定されたレジスタ内の指定されたデータ要素の群（「ベクトル」）に適用することができる。特に、図示されるデータ処理装置はベクトル化されたデータ処理演算のパフォーマンス、具体的にはレジスタ２０に保持されるデータ要素の観点から、複素数処理命令の実行に関連しており、そのさらなる説明をいくつかの具体的な実施例を参照して以下でより詳細に与える。命令の実行においてデータ処理回路１２によって必要とされるデータ値、及びそれらのデータ処理命令の結果として生成されるデータ値は、ロード／ストア・ユニット２２によって、メモリ１４に書き込まれ、メモリ１４から読み出される。図１のメモリ１４は一般的に、本技法の命令を記憶することができるコンピュータ可読記憶媒体の実例として、典型的には処理回路がその後に実行する所定の命令のシーケンスの一部（「プログラム」）として、見なされ得ることにも留意されたい。しかしながら処理回路は、ＲＡＭ内の、ＲＯＭ内の、ネットワーク・インターフェースを介して、などの、様々な異なるソースからそのようなプログラムにアクセスすることができる。本開示は、処理回路１２が実行することができる様々な新規な命令を説明しており、これらの命令の実行などをサポートするために以下の図面はこれらの命令の性質、データ処理回路における変形例のさらなる説明を与える。
【００３４】
図２は一実施例における、複素数乗算命令をサポートするための、データ処理回路を概略的に図示している。図面の下部に見られるように、複素数乗算命令ＣＭＵＬは第１のソース・レジスタＳ１、第２のソース・レジスタＳ２、及びデスティネーション・レジスタＺを指定している。さらに、この実施例において、複素数乗算命令は関与する複素数成分のデータ・サイズをさらに指定しており、すなわちこれらが３２ビット値であることを示す「．ｓ」の追加的な指定を伴う。この命令に応答して（又は、図１の上述から理解されるように厳密に言うと、命令に応答してデコーダ回路１８によって生成された制御信号に応答して）データ処理回路は第１のソース・レジスタＳ１及び第２のソース・レジスタＳ２の両方から実数の複素数成分のセット及び虚数の複素数成分のセットを抽出し、これらの成分のそれぞれは３２ビット値である。図２においてソース・レジスタＳ１及びＳ２の内容を記している実例の成分から分かるように、それぞれのソース・レジスタの内容は複素数成分対、すなわち、実数成分及び虚数成分のシーケンスである。ソース・レジスタ内のデータのこの構造は、複素数が共にレジスタ内のこの場所、及びそれらをロードしてきたメモリ場所の両方に格納されるという点で有用であり、これは別個の実数成分及び虚数成分をメモリからロードするための演算をロードすること及びデインタリーブすることに関連する複雑さが、必要ではないことを意味している。さらには、図示される命令及びそれをサポートするためのデータ処理回路の提供は、それぞれのソース・レジスタ内のインターリーブされた実数成分及び虚数成分を直接処理することができ、それによって連続的なロード及びストア命令の使用がこれらの値のセットをレジスタに入れ、またメモリに戻すことを可能にしており、さらに実装を容易にし、パフォーマンスの改善をサポートしていることを意味している。図２に図示される複素数乗算命令の具体的な実例において、第１及び第２のソース・レジスタから入力の個々の対を受信する乗算ユニット３０のセットが示されている。図面にはそれぞれのソース・レジスタ及びデスティネーション・レジスタ内には４つの成分のセットのみが示されて明示的に記されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって（図面の左右への破線によって示されるように）複製することができることを提供することに留意すべきである。乗算ユニット３０によって実施される乗法演算の結果は、対になった入力を加算ユニット３２に与え、２つの実体（ｉｎｓｔａｎｃｅ）のうち加算ユニット用の入力の１つは加算ユニットに適用される前に負の値にされる（すなわち、減算を実装するため）ことに留意されたい。次いで加算ユニット３２の結果は、結果レジスタＺ内の個々の位置に格納される。この実例において、３２ビット値が指定されている場合、加算ユニット３２によって生成された結果値のセットはそれぞれ３２ビット値である。
【００３５】
図２のＣＭＵＬ命令が属する、非拡大命令である、本技法によって提供される実例の命令のセットは次の通りである：
?       CMUL  :  complex multiply with rotation;
?       CMLA  :  complex multiply accumulate with rotation;
?       SQRDCMULH  :  signed saturating rounding doubling complex multiply with rotation, returning high half; and
?       SQRDCMLAH  :  signed saturating rounding doubling complex multiply-accumulate with rotation, returning high half.
（上記命令セットの訳は以下の通り）
・ＣＭＵＬ：回転ありの複素数乗算
・ＣＭＬＡ：回転ありの複素数乗累算
・ＳＱＲＤＣＭＵＬＨ：上位半分を返す、回転ありの符号付き飽和丸め付きダブル複素数乗算
・ＳＱＲＤＣＭＬＡＨ：上位半分を返す、回転ありの符号付き飽和丸め付きダブル複素数乗累算
【００３６】
図３は一実施例における別の複素数処理命令を概略的に図示しており、図２の実例とのいくつかの顕著な差異を示している。この実例において、命令の命名規則ＳＱＤＭＬＡＬＢＴは「符号付き ダブル 乗算 加算 Ｌｏｎｇ 下位 上位」(“signed doubling multiply add long bottom top”)に対応している。図３から分かるように、この命令をサポートするために与えられるデータ処理回路の観点から、４つの乗算ユニット３６のセットは第１及び第２のソース・レジスタから入力を受信し、命令はやはり「シングルの」３２ビット値のセットがそれぞれから抽出されるべきであるよう指定「ｓ」している。この命令の「下位 上位」(“bottom top”)の特徴は、成分対の下半分は第１のソース・レジスタｚｓ１から抽出され、成分対の上半分は第２のソース・レジスタｚｓ２から抽出されることを示していることに留意されたい。これらの対同士の乗法演算の結果、加算ユニット３８のセットへの１つの入力を抽出し、加算ユニット３８はこの値のセットをデスティネーション・レジスタｚｄから抽出される値へ加算する、すなわち、これは累算演算である。さらには、命令はデスティネーション・レジスタ内の成分のサイズを「ｄ」すなわち６４ビット値として指定することに留意されたい。換言すると、この演算は拡大演算である。図示される命令の結果として、ソース・レジスタｚｓ１内の複素数のセットとソース・レジスタｚｓ２内の複素数のセットとの乗算の結果の虚数成分のセットが生成され、デスティネーション・レジスタｚｄに累算され、結果成分が入力成分に対して拡大することを可能にしており、それによって精度が保存される。図２の事例のように、図面では４つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができる（図面の左右への破線及び省略によって示されるように）ことを提供する。
【００３７】
図３のＳＱＤＭＬＡＬＢＴ命令が属する、拡大命令であり、加算／減算下位／上位下位／上位（ここで下位及び上位はアクセスされる複素数の下半分及び上半分を指す、すなわちそれぞれの複素数の実数部及び虚数部）を指定する、本技法によって提供される実例の命令のセットは次の通りである：
?       SQDMLALB  :  signed multiply add long bottom bottom;
?       SQDMLSLB  :  signed multiply subtract long bottom bottom;
?       SQDMLALT  :  signed multiply add long top top;
?       SQDMLSLT  :  signed multiply subtract long top top;
?       SQDMLALBT  :  signed multiply add long bottom top; and
?       SQDMLSLBT  :  signed multiply subtract long bottom top.
（上記命令セットの訳は以下の通り）
・ＳＱＤＭＬＡＬＢ：符号付き 乗算 加算 Ｌｏｎｇ 下位 下位
・ＳＱＤＭＬＳＬＢ：符号付き 乗算 減算 Ｌｏｎｇ 下位 下位
・ＳＱＤＭＬＡＬＴ：符号付き 乗算 加算 Ｌｏｎｇ 上位 上位
・ＳＱＤＭＬＳＬＴ：符号付き 乗算 減算 Ｌｏｎｇ 上位 上位
・ＳＱＤＭＬＡＬＢＴ：符号付き 乗算 加算 Ｌｏｎｇ 下位 上位
・ＳＱＤＭＬＳＬＢＴ：符号付き 乗算 減算 Ｌｏｎｇ 下位 上位
【００３８】
これらはすべて「ＭＬＡ」（乗算加算（ｍｕｌｔｉｐｌｙ  ａｄｄ）−乗累算としても知られる）命令であり、「ＭＵＬ」バージョン（すなわち純粋に乗算のバージョン）が、例えばデスティネーション・レジスタのあらゆる既存の内容が累算されるべきではない累算処理の初回の繰り返しでの使用のために、やはり与えられることに留意されたい。これらのためには、上記列挙の「ＭＬＡ」をちょうど「ＭＵＬ」に置き換える必要がある。
【００３９】
図４は、本技法にしたがって、別の実例の命令、すなわち複素数乗累算命令をサポートするために一実施例において提供されるデータ処理回路を概略的に図示している。図４において特に留意すべきこととして、第２のソース・レジスタｚｓ２についての複製インデックス（［１］）の追加的な指定が挙げられる。図面で示されるように、サポートされる処理のベクトル化された性質が１２８ビットの粒度で適用される場合、すなわち図示される処理がベクトル・レジスタの幅にわたってこれらの１２８ビットの粒度で繰り返される場合、且つ命令が、入力成分サイズがシングルすなわち３２ビットであると指定する場合、複製インデックスを「１」と指定することは、１２８ビットの粒度の上半分にある３２ビット値の対によって表される複素数が、その下半分に複製されるべきであることを示す。他の実例において、例えば、命令が同じ１２８ビット粒度内で「ハーフ」（すなわち１６ビット）の値を指定する場合、粒度の内容は２倍の数の複素数を表すことになり、すなわち８個の１６ビット値があることになり、この複製インデックスによってそのセット内の（４つのうち）第２の複素数が他の３つに複製されることになることに留意されたい。しかしながら、図４に示される具体的な実例を考慮すると、複製に続いて第１及び第２のソース・レジスタから抽出された成分は、実際には図２に示されるユニット３０と同じ乗算ユニットであってもよい乗算ユニット４０への入力の対を与える。同様に、乗算ユニット４０の対の結果は加算ユニット４２への入力を与える。図２における事例のように、加算ユニット４２のうち２つは負の値にされた入力のうちの１つを有しているが、図２の実例とは対照的に、図４の実例における命令は累算演算であり、そのためデスティネーション・レジスタで保持される個々の成分の既存の内容は、加算ユニット４２へ追加的な入力を与えることに留意されたい。このように生成された結果値は、デスティネーション・レジスタｚｄｓ３の個々の成分の新しい内容を形成する。これは拡大命令ではない、すなわち結果成分が入力成分と同じサイズであり、したがって、この命令のアクションに続くデスティネーション・レジスタの内容は、複素数のセットのインターリーブされた実数成分及び虚数成分のセットであること、すなわち２つのソース・レジスタが有するのと同一のフォーマットであることに留意されたい。図２及び図３の事例のように、図面では４つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができる（図面の左右への破線及び省略によって示されるように）ことを提供する。
【００４０】
図５は、いくつかの実施例におけるさらなる命令のセットの動作を図示している。これらはすべていずれかの連続する実数の複素数成分のセット（第１の命令の実例において）又は連続する虚数成分のセット（第３及び第４の命令の実例において）を生成する拡大命令であることが分かる。やはり、図２〜図４について上述したように、それぞれの命令は処理されるデータ要素のサイズ、及び生成される結果データ要素のサイズを指定するが、ここでは具体的なサイズは図面では汎用のままである、例えば＜Ｚｄａ＞．＜Ｔ＞及び＜Ｚｎ＞＜Ｔｂ＞であることに留意されたい。図５の表記では、処理の終了において、作られた実数及び虚数の結果はデインタリーブされており、デスティネーション・レジスタＺｄａはすべての実数結果を含み、且つＺｄｂはすべての虚数結果を含むことが分かる。図６に目を移すと、次にデスティネーション・レジスタＺｃの複素数成分の図示される結果セットを作るために、ナロー・シフト演算を使用してレジスタＺａ及びＺｂからのデータを並べ替えることができるが、この場合これらは元々のソース・レジスタＺｎ及びＺｍ（図５）の連続する複素数のフォーマットであり、したがってデータのさらなる再配置は必要とされない。したがってこの複素数の結果のセットは連続的なストア動作でメモリに格納し戻すことができる。先の図面の事例のように、図５及び図６においては４つの成分のセットのみがそれぞれのソース・レジスタから抽出されてデスティネーション・レジスタに累算されるように明示的に示されているが、本技法はこの処理がベクトル・レジスタの全幅にわたって複製することができることを提供する。
【００４１】
これらの乗算 加算／減算 下位／上位 下位／上位命令(“multiply add/subtract bottom/top bottom/top instructions”)を利用する命令（１）の実例のプログラム・シーケンスは、例えば次の通りであり得る：
実例のコード・シーケンス（１）：
．．．
．Ｌｏｏｐ：
．．．
ＬＤ１＜Ｔｂ＞  ＜Ｚｎ＞．＜Ｔｂ＞，＜Ｐｎ＞／ｚ，［＜Ｘｎ＞］
ＬＤ１＜Ｔｂ＞  ＜Ｚｍ＞．＜Ｔｂ＞，ｐ／ｚ，［＜Ｘｍ＞］
ＳＱＤＭＬＡＬＢ  ＜Ｚｄａ＞．＜Ｔ＞，＜Ｚｎ＞．＜Ｔｂ＞，＜Ｚｍ＞．＜Ｔｂ＞
ＳＱＤＭＬＳＬＴ  ＜Ｚｄａ＞．＜Ｔ＞，＜Ｚｎ＞．＜Ｔｂ＞，＜Ｚｍ＞．＜Ｔｂ＞
ＳＱＤＭＬＡＬＴＢ  ＜Ｚｄｂ＞．＜Ｔ＞，＜Ｚｎ＞．＜Ｔｂ＞，＜Ｚｍ＞．＜Ｔｂ＞
ＳＱＤＭＬＡＬＴＢ  ＜Ｚｄｂ＞．＜Ｔ＞，＜Ｚｍ＞．＜Ｔｂ＞，＜Ｚｎ＞．＜Ｔｂ＞
．．．
．ｅｎｄＬｏｏｐ：
ＳＱＳＨＲＮＢ  ＜Ｚｄａ＞．＜Ｔｂ＞，＜Ｚｄａ＞．＜Ｔ＞，＜ｉｍｍ＞
ＳＱＳＨＲＮＴ  ＜Ｚｄａ＞．＜Ｔｂ＞，＜Ｚｄｂ＞．＜Ｔ＞，＜ｉｍｍ＞
ＳＴ１          ＜Ｚｄａ＞．＜Ｔｂ＞，＜Ｐｄ＞，［Ｘｄ］
…
【００４２】
上で言及した乗算命令と同じく、本技法はまた様々な複素数ドット積命令を提供し、その一部を、それらをサポートするために与えられるデータ処理回路と併せて図７Ａ〜図７Ｂの実例の実施例に示す。そのような複素数ドット積演算をサポートする第１の手法では、図７Ａ〜図７Ｄが図示するように結果値の実数部及び虚数部は別個に計算される。それにより、これは示される命令のセットが結果データに対して拡大する効果を生み出すことを可能にし、図７Ａ〜図７Ｄの実例から分かるように、データ精度を４倍高める、すなわち入力複素数成分（実数及び虚数）がそれぞれ１６ビット値である場合、結果値は６４ビット値である。ドット積ユニット５０は、それぞれのソース・レジスタから得られる複素数の対の、個々の実数成分及び虚数成分からの４つの入力成分の個々のセットからそれぞれ部分積を算出する。「−１」と付されるいくつかの実体において、与えられる入力が負の値にされることに留意されたい。このように生成される部分積が、加算回路５２によって累算される。やはりこれらの図面で図示されるように、これらの演算は累算演算であり、デスティネーション・レジスタの個々の部分の既存の内容は、最終的な結果を生成する加算ユニットに対するさらなる入力を形成する。それにより、図７Ａ〜図７Ｄで示される演算の簡略な概要において、ＣＤＯＴＲＥは２つの複素数乗算の実数部を累算し、ＣＤＯＴＩＭは２つの複素数乗算の虚数部を累算し、ＣＣＤＯＴＲＥは２つの複素共役乗算の実数部を累算し、ＣＣＤＯＴＩＭは２つの複素共役乗算の虚数部を累算する。
【００４３】
これらの命令のうちの２つの使用に続き（「通常の」複素数乗算が実施されているか、又は複素共役乗算かどうかに依存する）、初期のデータ精度に戻るため、図８に示されるような一連の演算を実行することができる。見て分かるように、レジスタＺａ、Ｚｂ、Ｚｃ、及びＺｄ内の実数成分及び虚数成分は、個々の実数成分及び虚数成分の２つのセットをデスティネーション・レジスタＺｅ及びＺｆにインターリーブするためにナロー・シフト演算にかけられ、次いで成分サイズをさらに削減し（そして元々のソース・レジスタの成分サイズに戻る）、１つのレジスタ内に最終的な複素数結果を与えるよう実数成分及び虚数成分をインターリーブするためにさらなるナロー・シフト演算が実施される。先の図面の事例のように、図７Ａ〜図７Ｄ、及び図８で明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
【００４４】
本技法の利益は、次の２つの実例のコード・シーケンス（２）及び（３）を考慮することによって理解され得、それらは図７Ａ〜図７Ｄで図示されるようなものなどの命令を使用する本技法にしたがって取られる手法と比較した場合の、そのような複素数ドット積処理の先行技術の実装形態を表している。本技法のＣＤＯＴ命令によって、データ処理回路の計算スループットの著しい改善（２倍）を可能にし、一方で累算ヘッドルームを増加させている（１６ビット入力に対して６４ビットの累算器、すなわち４倍）ことが分かる。
【００４５】
実例の先行技術のコード・シーケンス（ＡＲＭ（登録商標）  ＮＥＯＮ（商標）の、複素数ドット積の実装形態）（２）：
．．．
．Ｌｏｏｐ：
．．．
／／ａとｂから８つの複素数値をロード
ｌｄ２  ｛ｖ０．８ｈ，ｖ１．８ｈ｝，［ａＰｔｒ］，＃３２
ｌｄ２  ｛ｖ２．８ｈ，ｖ３．８ｈ｝，［ｂＰｔｒ］，＃３２
ｓｍｌａｌ  ｖ４．４ｓ，ｖ０．４ｈ，ｖ２．４ｈ  ／／ｃ．ｒｅ＋＝ａ．ｒｅ＊ｂ．ｒｅ
ｓｍｌａｌ  ｖ５．４ｓ，ｖ１．４ｈ，ｖ２．４ｈ  ／／ｃ．ｉｍ＋＝ａ．ｉｍ＊ｂ．ｒｅ
ｓｍｌｓｌ  ｖ４．４ｓ，ｖ１．４ｈ，ｖ３．４ｈ  ／／ｃ．ｒｅ−＝ａ．ｒｅ＊ｂ．ｉｍ
ｓｍｌａｌ  ｖ５．４ｓ，ｖ０．４ｈ，ｖ３．４ｈ  ／／ｃ．ｉｍ＋＝ａ．ｒｅ＊ｂ．ｉｍ
ｓｍｌａｌ２  ｖ６．４ｓ，ｖ０．８ｈ，ｖ２．８ｈ  ／／ｃ．ｒｅ＋＝ａ．ｒｅ＊ｂ．ｒｅ
ｓｍｌａｌ２  ｖ７．４ｓ，ｖ１．８ｈ，ｖ２．８ｈ  ／／ｃ．ｉｍ＋＝ａ．ｉｍ＊ｂ．ｒｅ
ｓｍｌｓｌ２  ｖ６．４ｓ，ｖ１．８ｈ，ｖ３．８ｈ  ／／ｃ．ｒｅ−＝ａ．ｒｅ＊ｂ．ｉｍ
ｓｍｌａｌ２  ｖ７．４ｓ，ｖ０．８ｈ，ｖ３．８ｈ  ／／ｃ．ｉｍ＋＝ａ．ｒｅ＊ｂ．ｉｍ
．．．
．ｅｎｄＬｏｏｐ：
．．．
ａｄｄ  ｖ４．４ｓ，ｖ４．４ｓ，ｖ６．４ｓ
ａｄｄ  ｖ５．４ｓ，ｖ５．４ｓ，ｖ７．４ｓ
ａｄｄｖ  ｓ４，ｖ４．４ｓ  ／／実数に対して水平の累算
ａｄｄｖ  ｓ５，ｖ５．４ｓ  ／／虚数に対して水平の累算
ｓｑｓｈｒｎ  ｈ４，ｓ４，＃１６  ／／実数を１６右シフト
ｓｑｓｈｒｎ  ｈ５，ｓ５，＃１６  ／／虚数を１６右シフト
ｓｔ２  ｛ｖ４．ｈ，ｖ５．ｈ｝［０］，［ｏｕｔＰｔｒ］  ／／出力を格納
【００４６】
本技法による実例のコード・シーケンス（ＣＤＯＴを使用する複素数ドット積について）（３）：
．．．
．Ｌｏｏｐ：
．．．
／／ａとｂから８つの複素数値をロード
ｌｄ１ｈ  ｚ０．ｈ，＜Ｐｎ＞／ｚ，［ａＰｔｒ，＃０］
ｌｄ１ｈ  ｚ２．ｈ，＜Ｐｎ＞／ｚ，［ａＰｔｒ，＃１６］
ｌｄ１ｈ  ｚ１．ｈ，＜Ｐｎ＞／ｚ，［ｂＰｔｒ，＃０］
ｌｄ１ｈ  ｚ３．ｈ，＜Ｐｎ＞／ｚ，［ｂＰｔｒ，＃１６］
ｃｄｏｔｒｅ  ｚ４．ｄ，ｚ０．ｈ，ｚ１．ｈ  ／／ｃ．ｒｅ＋＝ａ．ｒｅ＊ｂ．ｒｅ
ｃｄｏｔｉｍ  ｚ５．ｄ，ｚ０．ｈ，ｚ１．ｈ  ／／ｃ．ｉｍ＋＝ａ．ｉｍ＊ｂ．ｒｅ
ｃｄｏｔｒｅ  ｚ６．ｄ，ｚ２．ｈ，ｚ３．ｈ  ／／ｃ．ｒｅ＋＝ａ．ｒｅ＊ｂ．ｒｅ
ｃｄｏｔｉｍ  ｚ７．ｄ，ｚ２．ｈ，ｚ３．ｈ  ／／ｃ．ｉｍ＋＝ａ．ｉｍ＊ｂ．ｒｅ
．．．
．ｅｎｄＬｏｏｐ：
．．．
ｓｑｒｓｈｒｎｂ  ｚ８．ｓ，ｚ４．ｄ，＃１６
ｓｑｒｓｈｒｎｂ  ｚ８．ｓ，ｚ６．ｄ，＃１６
ｓｑｒｓｈｒｎｂ  ｚ９．ｓ，ｚ５．ｄ，＃１６
ｓｑｒｓｈｒｎｂ  ｚ９．ｓ，ｚ７．ｄ，＃１６
ｓｑｒｓｈｒｎｂ  ｚ１０．ｈ，ｚ８．ｓ，＃１６
ｓｑｒｓｈｒｎｂ  ｚ１０．ｈ，ｚ９．ｓ，＃１６
ｒｅｖ  ｚ１１．ｈ，＜Ｐｍ＞／ｍ，ｚ１０．ｈ
ｕｚｉｐ１  ｚ１２．ｓ，＜Ｐｍ＞／ｍ，ｚ１１．ｓ
ｓｔｒ  ｓ１２，［ｃＰｔｒ］
．．．
【００４７】
また本技法によって複素数ドット積演算をサポートする代替的な手法が提供され、図９Ａ〜図９Ｄ及び図１０を参照して次に議論する。ここで、上で議論した複素数ドット積命令とは対照的に、データの拡大は２倍だけであり、図９Ａ〜図９Ｄの実例から分かるように、ドット積命令の結果はやはり結果レジスタ内でインターリーブされる（すなわち、交互する実数成分及び虚数成分）。この手法では、図９Ａ〜図９Ｄから分かるように、個々のソース・レジスタから抽出された成分に対する演算の初期のセットは、乗算ユニット５４によって実施される乗法演算だけである。図７Ａ〜図７Ｄの実例のように、ある入力は負の値にされることに留意されたい。また、図９Ａ〜図９Ｄの実例では命令は１つだけ定義され、すなわちＳＱＲＤＣＤＯＴであるが、４つの実例において示されるこの命令に対して４つの異なる応答が、命令内の追加的なパラメータ（すなわち、＃０、＃９０、＃１８０、及び＃２７０）の使用から生じ、これらのパラメータは転置を表している、すなわちそれぞれのソース・レジスタの個々の実数成分及び虚数成分を結合する特定のやり方を示していることにも留意されたい。これらは複素数平面内の複素数の回転と類似していることから口語表現的には「回転」と称されるが、実施される転置は一般的には複素数平面内の回転に厳密に対応しないと理解することが重要である。これは、成分の対応する使用が「回転値」の４つの異なる値について第１及び第２のソース・レジスタから得られる図１２をさらに参照して理解され得ることであるが、ここで第２のソース・レジスタについて使用される転置が実際に、回転パラメータ値によって与えられる回転角によって表される複素数の複素数平面内の回転に対応していることが分かるが、これは第１のソース・レジスタの場合に適用される転置についてはこの通りではなく、それゆえ一般的にこれらの転置が厳密には複素数平面内の回転ではないとコメントされる。乗算ユニット５４の結果は、図９Ａ〜図９Ｄに示される累算（加算）ユニット５６に第１の入力の対を与え、この時デスティネーション・レジスタの個々の部分の既存の内容がさらなる入力（すなわち累算用）を与える。したがって、実数成分及び虚数成分の両方がこの手法にしたがって生成され、複素数ドット積結果を作るが、それにもかかわらず、これはなお生成された実数及び虚数成分が、実数及び虚数の入力成分のサイズの２倍となる、拡大演算である。上述の第１の手法のように、図９Ａ〜図９ＤのＳＱＲＤＣＤＯＴ命令の、命令の使用にはナロー・シフト演算の対が続くことができ、データを初期のデータ精度に戻し、実数及び虚数結果を１つのデスティネーション・レジスタにインターリーブすることができ、この時別のデスティネーション・レジスタ内の実数及び虚数成分は複素数成分の単一のセットを作り、インターリーブされた実数成分及び虚数成分は図１０から分かるように単一のデスティネーション・レジスタ内に複素数値を形成する。先の図面の事例のように、図９Ａ〜図９Ｄ、及び図１０で明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
【００４８】
上で言及した「回転値」はまた本明細書で説明される他の複素数処理命令の多くに有用に適用することができ、次に説明する。例えば、複素数加算命令は、極表示で考えると、要素の対を相殺的なやり方で第１のソース・ベクトルの対応する要素に加算する前に、第２のソース・ベクトル内で複素数を９０度又は２７０度回転させることができる。
【００４９】
複素数乗算加算命令は、２つの命令を結合することにより複素数に対して乗算加算演算の作成を可能とするためにオペランドの変形を実施する。変形は次のように実施される：（１）極形式で考えて、第２のソース・ベクトル内の複素数を、第１のソース・ベクトルの重複している実数成分を乗算する前に、０度、又は１８０度回転させる。（２）極形式で考えて、第２のソース・ベクトル内の複素数を、第１のソース・ベクトルの重複している虚数成分を乗算する前に、９０度、又は２７０度回転させる。得られる積は次いでデスティネーション且つ加数ベクトルの対応する成分に加算される。これらの変形を使用して、２つの命令を有利に結合することができる。例えば、次のシーケンスを考える場合：
ＳＱＲＤＣＭＬＡＨ  Ｚｄａ．Ｓ，Ｚｎ．Ｓ，Ｚｍ．Ｓ，＃Ａ
ＳＱＲＤＣＭＬＡＨ  Ｚｄａ．Ｓ，Ｚｎ．Ｓ，Ｚｍ．Ｓ，＃Ｂ
この時ＡとＢとの意味のある結合は次の通りである：
Ａ＝０，Ｂ＝９０。この場合、Ｚｎ及びＺｍ内の複素数の２つのベクトルは乗算され、その積がＺｄａ内の複素数に加算される。
Ａ＝０，Ｂ＝２７０。この場合、Ｚｎ内の複素数の共役はＺｍ内の複素数で乗算され、その積がＺｄａ内の複素数に加算される。
Ａ＝１８０，Ｂ＝２７０。この場合、Ｚｎ及びＺｍ内の複素数の２つのベクトルは乗算され、その積がＺｄａ内の複素数から減算される。
Ａ＝１８０，Ｂ＝９０。この場合、Ｚｎ内の複素数の共役はＺｍ内の複素数で乗算され、その積がＺｄａ内の複素数から減算される。
【００５０】
上述のように、拡大複素数固定小数点命令は、複素数値の実数成分及び虚数成分をデインタリーブするが、一方で入力値よりも数値精度のより高い複素数結果の成分を生成するためにそれらを処理する（すなわち、それらが「拡大する」）。したがって、これらの命令は、複素数結果の両方の成分をデスティネーションにおいて隣接する要素に書き込むべくそれぞれの複素数の実数成分及び虚数成分を一緒に処理する他の複素数命令とは、殊に異なっている。以下の命令は複素数乗算加算の結果の拡大した成分を生成する際、有用である：
・ＳＱＤＭＬＡＬＢＴ：拡大した虚数
・ＳＱＤＭＬＳＬＴ：拡大した実数
・ＳＱＤＭＬＡＬＢ：拡大した共役実数
・ＳＱＤＭＬＳＬＢＴ：拡大した共役虚数
【００５１】
固定小数点複素数ドット積命令は、ソース・ベクトルを例えば８ビット、又は１６ビットの符号付き整数複素数の対にデリミットする。それぞれの対の中で、第１のソース・ベクトル内の複素数値は第２のソース・ベクトル内の対応する複素数値で乗算され、得られる拡大した積は合計され、第１のソース・ベクトル内の複素数の対をオーバーラップさせる累算器の例えば３２ビット又は６４ビット要素に加算される。
【００５２】
これらの命令は、基本的なドット積の機能性を提供することに加え複素数値をデインタリーブする。したがって、ソース・ベクトルはインターリーブされた複素数の実数成分及び虚数成分を含むが、デスティネーション・ベクトルは拡大実数成分又は拡大虚数成分のいずれかの排他的セットを保持している。これらの命令についての回転値を使用すると次の通りである：
回転が０の場合、結果は複素数ドット積演算の実数成分を含むベクトルである。
回転が９０の場合、結果は複素数ドット積演算の虚数成分を含むベクトルである。
回転が１８０の場合、結果は複素共役ドット積演算の実数成分を含むベクトルである。
回転が２７０の場合、結果は複素共役ドット積演算の虚数成分を含むベクトルである。
【００５３】
符号付き／符号なし整数複素数ドット積命令は、ソース・ベクトルを例えば８ビット、又は１６ビットの符号付き／符号なし整数複素数の対にデリミットする。それぞれの対の中で、第１のソース・ベクトル内の複素数値は第２のソース・ベクトル内の対応する複素数値で乗算され、得られる拡大した積は合計され、第１のソース・ベクトル内の複素数の対をアラインする累算器の、例えば３２ビット又は６４ビット要素（デスティネーション要素）に加算される。
【００５４】
被乗数ソース・ベクトルから読み出された値は、乗算ステップが実施される前に回転パラメータに基づいて変形される。イミディエイトな回転値に依存して、ソース複素数の部分のうちの１つ又は両方が並べ替えられる、及び／又は負の値にされるか、ソース複素数の部分のいずれも並べ替えられない、及び／又は負の値にされない。これらの命令についての回転値を使用すると次の通りである：
回転が０の場合、第２のソースからの複素数の奇数番号の成分が負の値にされ、デスティネーション・ベクトルは複素数ドット積演算の実数成分を含む。
回転が９０の場合、第２のソースからの複素数の実数部と虚数部がスワップされ、デスティネーション・ベクトルは複素数ドット積演算の虚数成分を含む。
回転が１８０の場合、変形は適用されず、デスティネーション・ベクトルは複素共役ドット積演算の実数成分を含む。
回転が２７０の場合、第２のソースからの複素数の偶数番号の成分が負の値にされ、次に第２のソースから導出されて得られるベクトルの実数部と虚数部がスワップされ、デスティネーション・ベクトルは複素共役ドット積演算の虚数成分を含む。
【００５５】
いくつかの実施例において、複素数演算は様々な複素数加算（すなわち、複素数減算を含む）であってもよく、これらの一部をサポートするためのデータ処理回路を図１１Ａ及び図１１Ｂに概略的に図示している。繰り返しになるが、上で言及される「回転値」が利用され、図１１Ａの実例では＃９０の値が使用され、図１１Ｂの実例では＃２７０の値が使用される。図面で示されるように、これらの回転値（４つのセットである）は実際には２ビット値で表現されるよう提案され、これらの実例では００は＃９０に対応し、０１は＃２７０に対応していることに留意されたい。
【００５６】
図１１Ａ及び図１１Ｂで示される実例は、複素数加算命令をサポートするよう提供されるデータ処理回路の表現であり、一実例において、命令セットはＳＱＣＡＤＤ又はＵＱＡＤＤのいずれかとして定義され（すなわち、飽和複素数加算命令の符号付き又は符号なしの変形例）、ここで飽和とは結果のそれぞれの成分内の結果値がラップ・アラウンドしないが、所定の最大値において飽和することを意味している。したがって、加算ユニット６０は入力ソース・レジスタの個々の実数成分及び虚数成分から入力を得、（いくつかの入力は負の値にされることに留意されたい）これらを合計してデスティネーション・レジスタ内でインターリーブされる実数成分及び虚数成分を作る。回転パラメータの異なる値を使用して、第１及び第２のソース・レジスタ内の、すべての必要とされる複素数の実数成分及び虚数成分の結合の並べ替えを達成することができる。先の図面の事例のように、図１１Ａ及び図１１Ｂで明示的に示される回路及び処理は、ベクトル・レジスタの全幅にわたって複製することができる。
【００５７】
さらなる実例において、ＳＵＢＬＴＢ及びＡＤＤＬＢＴ命令はインターリーブされた実数成分及び虚数成分に対して動作し、拡大命令である。これらの命令は、Ｘ及びＹを複素数として複素数加算（Ｘ＋ｊＹ）又は（Ｘ−ｊＹ）の結果の拡大した成分を生成する際、有用である：
ＡＤＤＬＢＴ：（Ｘ＋ｊＹ）を計算する際の拡大した虚数値
ＳＵＢＬＢＴ：（Ｘ＋ｊＹ）を計算する際の拡大した実数値
ＳＵＢＬＴＢ：（Ｘ−ｊＹ）を計算する際の拡大した虚数値
ＡＤＤＬＢＴ：（Ｘ−ｊＹ）を計算する際の拡大した実数値
【００５８】
図１３は、一実施例の方法を実施する際に行われる一連のステップを示している。フローは、ステップ１００から始まると考えることができるが、ここで受信された命令のシーケンス内の次の命令がデコードされる。次いでステップ１０２で、これが本技法の複素数命令かどうか判断される。そうではない場合、フローはステップ１０４に進みここでこれらの命令が適当に処理されるが、これは本開示が考慮するところではない。次にフローはステップ１００に戻り、次の命令をデコードする。しかしながら、これが複素数命令である場合は、フローはステップ１０６に進み、ここで遭遇する複素数命令の特定のタイプに依存して、第１のソース・レジスタから実数成分及び／又は虚数成分が抽出され、ステップ１０８において第２のソース・レジスタから実数成分及び／又は虚数成分が抽出される。ステップ１０６及びステップ１０８の抽出は典型的には並列に実施され、図１３では明瞭さのために、これを順次的な様式で説明するだけであることに留意すべきである。ステップ１１０において、これらの抽出された成分を使用して複素数演算が実施される。ステップ１１２はこれがインターリーブされる結果か、そうでないかを判断する。次にフローがステップ１１４に進む場合、実数及び虚数の結果成分が、デスティネーション・レジスタに適用される際にインターリーブされ、そうではなくこのフローがステップ１１６に進む場合は、この時実数の結果成分のセット又は虚数の結果成分のセットいずれかであるインターリーブされる結果が指定されたデスティネーション・レジスタに適用される。どのルートを取っても、次の命令をデコードするためにフローはステップ１００に戻る。
【００５９】
図１４は使用され得るシミュレータ実装形態を図示している。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティングシステム７２０を実行させ、シミュレータ・プログラム７１０をサポートする、ホスト・プロセッサ７３０上で実行することができる。いくつかの構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び／又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再使用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略はＲｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、１９９０年冬季ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に示されている。
【００６０】
ある程度、その実施例は特定のハードウェア構築物又は特徴を参照して以前に説明されており、シミュレートされる実施例においては、等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の１つ又は複数がホスト・ハードウェアに存在する構成（例えば、ホスト・プロセッサ７３０）において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
【００６１】
シミュレータ・プログラム７１０はコンピュータ可読記憶媒体（非一時的媒体であってもよい）に記憶することができ、ターゲット・コード７００にプログラム・インターフェース（命令実行環境）を提供するが、ターゲット・コード７００はシミュレータ・プログラム７１０によってモデリングされるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述の複素数処理命令を含むターゲット・コード７００のプログラム命令は、命令実行環境内からシミュレータ・プログラム７１０を使用して実行することができ、それによって、上で議論した装置のハードウェア特徴を実際には有していないホスト・コンピュータ７３０がこれらの特徴をエミュレートすることができる。
【００６２】
簡単で全体的な概要としては、入力データ・ベクトル内の個々の位置に複数の入力データ項目を含む入力データ・ベクトルに対してベクトル処理演算をサポートするための、装置、方法、プログラム、及び複素数処理命令が提供される。命令に応答して、データ項目の少なくとも１つの第１のセットが第１のソース・レジスタ内の交互する位置から抽出され、データ項目の少なくとも１つの第２のセットが第２のソース・レジスタ内の交互する位置から抽出され、ここで第１及び第２のソース・レジスタ内の連続データ項目は複素数の個々のセットの交互する実数成分及び虚数成分を含む。複素数成分の結果セットが、データ項目の２つのセットをオペランドとして使用して生成され、複素数成分の結果セットは、複素数の２つのセットに適用された複素数演算の複素数結果の実数部及び虚数部のうちの１つである。複素数成分の結果セットがデスティネーション・レジスタに適用される。
【００６３】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【００６４】
図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び趣旨を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組合せが可能である。
【図１】
2020527795.tif 000003
【図２】
2020527795.tif 000004
【図３】
2020527795.tif 000005
【図４】
2020527795.tif 000006
【図５】
2020527795.tif 000007
【図６】
2020527795.tif 000008
【図７】
2020527795.tif 000009
【図８】
2020527795.tif 000010
【図９】
2020527795.tif 000011
【図１０】
2020527795.tif 000012
【図１１】
2020527795.tif 000013
【図１２】
2020527795.tif 000014
【図１３】
2020527795.tif 000015
【図１４】
2020527795.tif 000016
【国際調査報告】
2020527795.tif 000017
2020527795.tif 000018
2020527795.tif 000019