(57)【要約】  キャリー付き加算演算の結果に対応するキャリー情報を与えるために、デスティネーション・ベクトル・レジスタ又はプレディケート・レジスタの対応するフィールドのいくつかの要素を使用する、ベクトル・キャリー付き加算命令が説明される。これは長整数値の乗算を伴う計算を加速するために有用である。
2021507348.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
データ処理を実施するための処理回路と、
前記データ処理を実施するための前記処理回路を制御するために、命令をデコードするための命令デコード回路と、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタと
を備え、
前記命令デコード回路は、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令に応答して、少なくとも前記デスティネーション・ベクトル・レジスタ及び前記キャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含み、前記デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、前記処理回路を制御して
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第１のデータ要素を、前記第１のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、前記キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の前記第２のデータ要素から取得されたキャリー値との加算の結果に対応する値で更新することと、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することと
を行う、装置。
【請求項２】
前記第１のデータ・ソース・ベクトル・レジスタは、前記デスティネーション・ベクトル・レジスタと同一のレジスタであり、前記第１のソース・データ値は前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第１のデータ要素の以前の値を含む、請求項１に記載の装置。
【請求項３】
それぞれのデータ要素の対は、隣接するデータ要素の対を含む、請求項１又は２に記載の装置。
【請求項４】
前記デスティネーション・ベクトル・レジスタ及び前記キャリー・ソース・ベクトル・レジスタ内のデータ要素の対の数が少なくとも２であり、前記対の前記第１のデータ要素は、前記対の前記第２のデータ要素でインターリーブされる、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
前記ベクトル・キャリー付き加算命令に応答して、前記命令デコード回路は、前記処理回路を制御して
前記キャリー・ソース・ベクトル・レジスタの前記対応するデータ要素の対の第２のデータ要素の最下位ビットから前記キャリー値を取得することと、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第２のデータ要素の最下位ビットを、前記加算の前記キャリー出力に対応する前記値で更新することと
行うように構成される、請求項１から４までのいずれか一項に記載の装置。
【請求項６】
前記ベクトル・キャリー付き加算命令に応答して、前記キャリー・ソース・ベクトル・レジスタ及び前記デスティネーション・ベクトル・レジスタの両方について、前記最下位ビット以外の前記第２のデータ要素の残りのビットは使用されない、請求項５に記載の装置。
【請求項７】
それぞれのデータ要素は２Ｎビットを含み、前記第２のソース・データ値は２Ｎビットを含み、ここでＮは整数である、請求項１から６までのいずれか一項に記載の装置。
【請求項８】
前記第２のデータ・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをさらに指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含み、
前記ベクトル・キャリー付き加算命令の第１の変形例に応答して、前記第２のソース・データ値は前記第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素の対の前記第１のデータ要素から取得された値を含み、
前記ベクトル・キャリー付き加算命令の第２の変形例に応答して、前記第２のソース・データ値は、前記第２のデータ・ソース・ベクトル・レジスタの前記対応するデータ要素の対の前記第２のデータ要素から取得された値を含む、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
少なくとも１つのプレディケート指標を指定するプレディケート値に関連付けられる前記ベクトル・キャリー付き加算命令のプレディケートされた変形例に応答して、それぞれのプレディケート指標は前記デスティネーション・ベクトル・レジスタの前記少なくとも１対のデータ要素のうちの１つに対応しており、前記命令デコード回路は、前記処理回路を制御して、
前記対応するプレディケート指標が第１の値を有するデータ要素の対について、前記対の前記第１のデータ要素の、前記加算の前記結果に対応する前記値での前記更新、及び前記対の前記第２のデータ要素の、前記加算の前記キャリー出力での前記更新を実施し、
前記対応するプレディケート指標が第２の値を有するデータ要素の対について、前記対の前記第１のデータ要素の、前記加算の前記結果に対応する前記値での前記更新、及び前記対の前記第２のデータ要素の、前記加算の前記キャリー出力での前記更新を抑制する
ように構成される、請求項１から８までのいずれか一項に記載の装置。
【請求項１０】
前記ベクトル・キャリー付き加算命令の加算の変形例に応答して、前記加算は、前記第１のソース・データ値と、前記第２のソース・データ値と、前記キャリー値とを加算することを含み、
前記ベクトル・キャリー付き加算命令の減算の変形例に応答して、前記加算は、前記減算についてのボロー値を示す前記キャリー値で前記第１のソース・データ値から前記第２のソース・データ値の減算を含み、前記キャリー出力は前記減算のボロー出力を含む、請求項１から９までのいずれか一項に記載の装置。
【請求項１１】
ターゲット・プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト処理装置を制御するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
データ処理を実施するための処理プログラム・ロジックを制御するために、前記ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム・ロジックと、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタを表現するデータを記憶するためのベクトル・レジスタ・データ構造と
を含み、
前記命令デコード・プログラム・ロジックは、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令に応答して、少なくとも前記デスティネーション・ベクトル・レジスタ及び前記キャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含み、前記デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、前記ベクトル・レジスタ・データ構造を更新するために前記処理プログラム・ロジックを制御して、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第１のデータ要素を、前記第１のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、前記キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の前記第２のデータ要素から取得されたキャリー値との加算の結果に対応する値で更新することと、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することと
を行う、コンピュータ・プログラム。
【請求項１２】
データ処理方法であって、
デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令をデコードすることであって、少なくとも前記デスティネーション・ベクトル・レジスタ及び前記キャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含む、デコードすることと、
前記ベクトル・キャリー付き加算命令をデコードすることに応じて、前記デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、処理回路を制御することであって、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第１のデータ要素を、第１のデータ・ソース・ベクトルの選択されたデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、前記キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の前記第２のデータ要素から取得されたキャリー値との加算の結果に対応する新しい値で更新することと、
前記デスティネーション・ベクトル・レジスタの前記データ要素の対の前記第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することとを行う、
制御することと
を含む、データ処理方法。
【請求項１３】
装置であって、
データ処理を実施するための処理回路と、
前記データ処理を実施するための前記処理回路を制御するために、命令をデコードするための命令デコード回路と、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタと、
前記処理回路によって実施される演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・フィールドを含む複数のプレディケート・レジスタと
を備え、
前記命令デコード回路は、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令に応答して、前記デスティネーション・ベクトル・レジスタの所与のデータ要素について、前記処理回路を制御して、
前記デスティネーション・ベクトル・レジスタの前記所与のデータ要素を、前記第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、前記入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との加算の結果に対応する値で更新することと、
前記出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することと
を行う、装置。
【請求項１４】
ターゲット・プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト処理装置を制御するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
データ処理を実施するための処理プログラム・ロジックを制御するために、前記ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム・ロジックと、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタを表現するデータを記憶するためのレジスタ・データ構造と、前記処理プログラム・ロジックによって実施されるベクトル演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・レジスタと
を含み、
前記命令デコード・プログラム・ロジックは、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令に応答して、前記デスティネーション・ベクトル・レジスタの所与のデータ要素について、前記レジスタ・データ構造を更新するために、前記処理回路を制御して、
前記デスティネーション・ベクトル・レジスタの前記所与のデータ要素を、前記第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、前記入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との結果に対応する値で更新することと、
前記出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することと
を行う、コンピュータ・プログラム。
【請求項１５】
データ処理方法であって、
デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令をデコードすることであって、前記入力プレディケート・レジスタ及び前記出力プレディケート・レジスタは、ベクトル演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・レジスタの中から選択される、デコードすることと、
前記ベクトル・キャリー付き加算命令をデコードすることに応じて、前記デスティネーション・ベクトル・レジスタの所与のデータ要素について、処理回路を制御することであって、
前記デスティネーション・ベクトル・レジスタの前記所与のデータ要素を、前記第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、前記第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、前記入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との加算の結果に対応する値で更新することと、
前記出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することとを行う、
制御することと
を含む、データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
いくつかのデータ処理システムは、複数のデータ要素を含むベクトル・オペランドに作用する、又はそのようなベクトル・オペランドを生成するベクトル命令の処理をサポートしている。単一の命令に応答して、複数の別個のデータ要素を処理することをサポートすることにより、コード密度を改善することができ、スカラ命令を使用して同一の操作を実施することに比べて、命令をフェッチ及びデコードするオーバヘッドが削減される。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁
【発明の概要】
【課題を解決するための手段】
【０００４】
少なくともいくつかの実例は、装置であって、
データ処理を実施するための処理回路と、
データ処理を実施するための処理回路を制御するために、命令をデコードするための命令デコード回路と、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタとを備え、
命令デコード回路は、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令(vector add-with-carry instruction)に応答して、少なくともデスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含み、デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、処理回路を制御して、
デスティネーション・ベクトル・レジスタのデータ要素の対の第１のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の第２のデータ要素から取得されたキャリー値との加算の結果に対応する値で更新することと、
デスティネーション・ベクトル・レジスタのデータ要素の対の第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することとを行う、装置を提供する。
【０００５】
少なくともいくつかの実例は、ターゲット・プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト処理装置を制御するためのコンピュータであって、コンピュータ・プログラムは、
データ処理を実施するための処理プログラム・ロジックを制御するために、ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム・ロジックと、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタを表現するデータを記憶するためのベクトル・レジスタ・データ構造とを含み、
命令デコード・プログラム・ロジックは、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令に応答して、少なくともデスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含み、デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、ベクトル・レジスタ・データ構造を更新するために処理プログラム・ロジックを制御して、
デスティネーション・ベクトル・レジスタのデータ要素の対の第１のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の第２のデータ要素から取得されたキャリー値との加算の結果に対応する値で更新することと、
デスティネーション・ベクトル・レジスタのデータ要素の対の第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することとを行う、コンピュータを提供する。
【０００６】
少なくともいくつかの実例は、データ処理方法であって、
デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、及びキャリー・ソース・ベクトル・レジスタを指定するベクトル・キャリー付き加算命令をデコードすることであって、少なくともデスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含む、デコードすることと、
ベクトル・キャリー付き加算命令をデコードすることに応じて、デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、処理回路を制御することであって、
デスティネーション・ベクトル・レジスタのデータ要素の対の第１のデータ要素を、第１のデータ・ソース・ベクトルの選択されたデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の第２のデータ要素から取得されたキャリー値との加算の結果に対応する新しい値で更新することと、
デスティネーション・ベクトル・レジスタのデータ要素の対の第２のデータ要素を、前記加算のキャリー出力に対応する値で更新することとを行う、制御すること、を含む、データ処理方法を提供する。
【０００７】
少なくともいくつかの実例は、装置であって、
データ処理を実施するための処理回路と、
データ処理を実施するための処理回路を制御するために、命令をデコードするための命令デコード回路と、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタと、
処理回路によって実施される演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・フィールドを含む複数のプレディケート・レジスタとを備え、
命令デコード回路は、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令に応答して、デスティネーション・ベクトル・レジスタの所与のデータ要素について、処理回路を制御して、
デスティネーション・ベクトル・レジスタの所与のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との加算の結果に対応する値で更新することと、
出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することとを行う、装置を提供する。
【０００８】
少なくともいくつかの実例は、ターゲット・プログラム・コードの命令を実行するための命令実行環境を提供するためにホスト処理装置を制御するためのコンピュータ・プログラムであって、コンピュータ・プログラムは、
データ処理を実施するための処理プログラム・ロジックを制御するために、ターゲット・プログラム・コードの命令をデコードするための命令デコード・プログラム・ロジックと、
複数のデータ要素を含むベクトル・オペランドを格納するための複数のベクトル・レジスタを表現するデータを記憶するためのレジスタ・データ構造と、処理プログラム・ロジックによって実施されるベクトル演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・レジスタとを含み、
命令デコード・プログラム・ロジックは、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令に応答して、デスティネーション・ベクトル・レジスタの所与のデータ要素について、レジスタ・データ構造を更新するために、処理回路を制御して、
デスティネーション・ベクトル・レジスタの所与のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との結果に対応する値で更新することと、
出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することとを行う、コンピュータ・プログラムを提供する。
【０００９】
少なくともいくつかの実例は、データ処理方法であって、
デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタを指定するベクトル・キャリー付き加算命令をデコードすることであって、入力プレディケート・レジスタ及び出力プレディケート・レジスタは、ベクトル演算のマスキングを制御するためのプレディケート値を格納するための複数のプレディケート・レジスタの中から選択される、デコードすることと、
ベクトル・キャリー付き加算命令をデコードすることに応じて、デスティネーション・ベクトル・レジスタの所与のデータ要素について、処理回路を制御することであって、
デスティネーション・ベクトル・レジスタの所与のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との加算の結果に対応する値で更新することと、
出力プレディケート・レジスタの対応するプレディケート・フィールドを、前記加算のキャリー出力に対応する値で更新することとを行う、制御すること、を含む、データ処理方法を提供する。
【００１０】
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなる。
【図面の簡単な説明】
【００１１】
【図１】ベクトル命令の実行をサポートするデータ処理装置の実例の概略図である。
【図２】プレディケーションを伴うベクトル演算の実例の図である。
【図３】第１の実例による、ベクトル・キャリー付き加算命令の加算の変形例の図である。
【図４】第１の実例による、ベクトル・キャリー付き加算命令の減算の変形例の図である。
【図４Ａ】ベクトル・キャリー付き加算命令のプレディケートされた変形例の図である。
【図５】ベクトル・キャリー付き加算命令を処理する方法を示す流れ図である。
【図６】Ｋａｒａｔｓｕｂａアルゴリズムによる、長整数値の乗算のベクトル化の実例の図である。
【図７】６４ビットのベクトル要素サイズを使用して２つの２５６ビット値の乗算を実施する場合に、加算される部分積の実例の図である。
【図８】図３で示されたベクトル・キャリー付き加算命令を含む、実例の命令のシーケンスの図である。
【図９】ベクトル・キャリー付き加算命令を使用する、命令シーケンスの第２の実例の図である。
【図１０Ａ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｂ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｃ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｄ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｅ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｆ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｇ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｈ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１０Ｉ】図９の命令シーケンスの処理を図示する、一連の図である。
【図１１】加算又は減算用にキャリー値を移送するためにプレディケート・レジスタを使用する、ベクトル・キャリー付き加算命令の第２の実例の図である。
【図１２】図１１の実例による、ベクトル・キャリー付き加算命令の処理を図示する流れ図である。
【図１３】使用され得るシミュレータ実例の図である。
【発明を実施するための形態】
【００１２】
いくつかの処理ワークロードは、１０２４ビット、２０４８ビット、又は４０９６ビット値などの非常に大きな整数値に数学的演算を適用する必要がある場合がある。例えば、暗号化ワークロードは、大きな数を因数分解する困難さに依拠することがあり、そのためメッセージを暗号化又は復号化するためにそのような大きな数の乗算を必要とすることがある。例えば、ＲＳＡ２０４８では、４０９６ビットの積を作り出すために２０４８ビットの数の連続的な乗算が多数ある。一部の金融処理アプリケーションでは、長整数値を処理することがさらに要求される。あるオペランドのそれぞれの桁を他方のそれぞれの桁で乗ずる標準の教科書的な手法を使用して乗算する場合、乗算を実施することの複雑性は、典型的には桁数の２乗に比例する。しかしながら、計算のオーバヘッドが桁数に緩やかに比例するよう、複雑性を低減するためのいくつかのアルゴリズムが知られている。例えば、Ｋａｒａｔｓｕｂａアルゴリズムは、乗算する長桁数を個々に乗算される小さな部分に分け、要求される乗算の回数と、いくつかの追加的な加算、減算、又はシフト演算とのトレードオフを可能にしている。したがって、長整数の乗算は、いくつかの小さな乗算と、いくつかの加算、減算、及びシフトとに分解することができる。ベクトル命令を使用して、単一の命令がいくつかの独立的なサブ乗算の部分の計算を制御できるように異なるサブ乗算を異なるベクトル・レーンにマッピングすることにより、そのような計算をスピード・アップすることができる。この場合、ワークロードのほとんどは、乗算の様々な部分積の、一連の加算、又は減算を実施する際に、効果的に発生することがある。しかしながら、この時、部分積の加算同士でキャリー情報の移送を管理することにおいて、ある加算から得られるキャリー情報は、等価な有意性（ｅｑｕｉｖａｌｅｎｔ  ｓｉｇｎｉｆｉｃａｎｃｅ）の値に対して実施される次の加算に入力される必要がある場合があるため、ある命令からのキャリー情報を別の命令のための入力として使用するために保持する必要性があり得ることから、設計上の課題が生じる。
【００１３】
ある手法は、それぞれのベクトル・レーンで処理される実データの要素サイズを効果的に低減することができ、そのレーンの加算から得られたキャリー情報を格納するために、それぞれのレーンの上部で１つ又は複数のビットを予約し、それによって後続の命令によって読み出すことができる。しかしながら、発明者らは、この手法では、データの入力ベクトルをアンパックするため（ベクトル・レーンを完全に占有する要素を有する）、及びそれぞれのレーン内にさらなるキャリー情報を含める必要があるため、これらの構成要素をリサイズして有効なデータ要素のサイズを小さくし、ベクトル・レーンをまたいで分割するため、多くのさらなる命令が必要とされる可能性があることを認識した。また、入力データが所与の要素サイズの複数の要素を含む場合、キャリー用に予約される空間を設けてレーンをまたいで分割されると、同一の量の入力データが、より多くのベクトル・レーン数を要求することになる。例えば、実データ用に５６ビット、キャリー用に予約される８ビットを有するベクトル・レーンをまたいで広がりがある場合、５６ビットの４レーンは、それぞれ２２４ビットしか与えないため、最後の３２ビットのために第５のレーンが必要となり、４つの６４ビット要素の入力ベクトルは、この場合同じビット数（２５６ビット）の入力データを収容するために５レーンが割り当てられることを必要とする。計算される部分積の数は、ベクトルの構成要素数の２乗に比例するため、これは必要とされる乗算及び部分積加算の回数を著しく増やすことになり、パフォーマンスをさらに低下させる可能性がある。
【００１４】
以下で議論する技法は、入力データをアンパックする必要がないように、ベクトル・キャリー付き加算命令を実装するための技法を提供するが、そのような命令はベクトル・レーン全体を占有するソース・データ要素を直接演算することができるからである。
【００１５】
ある手法では、ベクトル・キャリー付き加算命令はデスティネーション・ベクトル・レジスタ、第１及び第２のデータ・ソース・ベクトル・レジスタ、並びにキャリー・ソース・ベクトル・レジスタを指定する。少なくともデスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタは、少なくとも１対のデータ要素を含むオペランドをそれぞれ指定し、それぞれの対は第１のデータ要素及び第２のデータ要素を含む。命令に応答して、命令デコーダは、デスティネーション・ベクトル・レジスタのデータ要素のそれぞれの対について、処理回路を制御して、デスティネーション・ベクトル・レジスタのデータ要素の対の第１のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの選択されたデータ要素から取得された第２のソース・データ値と、キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の第２のデータ要素から取得されたキャリー値との加算の結果に対応する値で更新する。また、デスティネーション・ベクトル・レジスタのデータ要素の対の第２のデータ要素は、加算のキャリー出力に対応する値で更新される。
【００１６】
したがって、デスティネーション・ベクトル・レジスタ内のそれぞれの要素の対の第２のデータ要素は、加算のキャリー出力を与えるために予約され、同様にキャリー・ソース・ベクトル・レジスタ内のそれぞれの対の第２のデータ要素は、加算にキャリー入力を与えるために使用される。したがって、デスティネーション、及びキャリー・ソース・ベクトル・レジスタは、対応するレイアウトを有しており、実際にはしばしば、これらの命令が実際に使用される場合、ベクトル・キャリー付き加算命令の１つのインスタンスから得られるデスティネーション・ベクトル・レジスタは、ベクトル・キャリー付き加算命令の後続のインスタンスのためのキャリー・ソース・ベクトル・レジスタとして使用される場合がある。
【００１７】
この手法は、ソース・データ及び加算の結果値をキャリーするために利用可能なデータ要素の数を事実上半分にするため、直観に反しており、ベクトル・レジスタ・ファイルの利用を可能な限り増やすことにより計算の効率を改善することを目的とするベクトル・プロセッサにおける通常の設計原理に反している。すなわち、キャリー値を与えるためにベクトル・レーンの半分を使用することは、ベクトル・プロセッサ及びベクトル・レジスタ・ファイルの能力の半分を無駄にし、所与の数のデータ要素を処理するために必要な命令の数を倍にすることになるように思われる。
【００１８】
しかしながら、驚くべきことだが、発明者らは、さらなるキャリー付き加算命令が所与のワークロードを実行するために必要とされる場合があるが、それぞれの要素の対の第２のデータ要素内でキャリーを配置する恩恵は、第１のデータ要素は全レーン・サイズを占有することができ、それは入力ベクトルからの要素のアンパック又はリサイズが要求されないことを意味しており、そのためベクトル・キャリー付き加算命令がパックされたソース・データに直接作用できることであると認識した。実際には、長整数の乗算を伴うワークロードについて、ベクトル・キャリー付き加算命令によって処理される要素の事実上低減された数を補償するためにさらなる命令が必要とされるとしても、（ａ）アンパック／リサイズのオーバヘッドを回避すること、（ｂ）上で議論したイン・レーンのキャリー手法で有効なレーン・サイズの低減によって起こる部分積の数の増加を回避すること、により、全体的なパフォーマンスはなお高いことが分かっている。したがって、全体としてのパフォーマンスは改善され得る。あらゆる場合において、一部のマイクロ・アーキテクチャでは、単一のベクトル・キャリー付き加算命令がアーキテクチャ・レベルで要素の半分に対する演算を行うとしても、組み合わせてすべての要素に対して演算を行う命令の２つのインスタンスは、共に「融合（ｆｕｓｅｄ）」して処理パイプラインによって単一のマイクロ演算として処理することができるか、又は並列に処理することができ、マクロ命令当たりに処理される要素数を半分にすることによる、明らかなパフォーマンス損失を回避する。これは、例えば、マイクロ・アーキテクチャが、結果バスに複数の同時的な書き込みをサポートしている場合に可能である。独立的なキャリー・チェーンの形態では、並列化が、やはり利用可能である。
【００１９】
いくつかの実装形態では、デスティネーション・ベクトル・レジスタは、第１及び第２のソース・ベクトル・レジスタ、並びにキャリー・ソース・ベクトル・レジスタとは別個に、命令によって指定することができ、結果がソース・レジスタのすべてとは異なるレジスタに書き込まれるため、命令が実行された後レジスタ・ファイル内にすべてのソース・ベクトルを保持する非破壊的な命令フォーマットを与える。
【００２０】
しかしながら、他の実装形態では、第１のデータ・ソース・ベクトル・レジスタは、デスティネーション・ベクトル・レジスタと同一のレジスタであってもよく、それぞれの対について、第１のソース・データ値はデスティネーション・ベクトル・レジスタのデータ要素の対の第１のデータ要素の以前の値を含むことができる。実際には、古い累算器の値が第２のソース・データ値及びキャリー値に加算されて同一のレジスタに書き戻される累算演算は、長整数の乗算（乗算の個々の部分積を加算することについて）を伴う多くのワークロードについて有用であり、そのため第１のデータ・ソース・ベクトル・レジスタがデスティネーション・ベクトル・レジスタと独立して指定されることは必須ではない。単一のレジスタを、デスティネーション及び第１のデータ・ソース・ベクトル・レジスタの両方として指定することによって、命令セット・アーキテクチャ内の命令エンコード空間を他の目的のために保存しておくことができる。破壊的な命令フォーマット（同一のレジスタを、デスティネーション及びソース・レジスタのうちの１つ、の両方として使用する）の別の利点は、命令が要求するソース・レジスタ・ポートの数を限定することが時に必要とされることがあるため、また一部のマイクロ・アーキテクチャではデスティネーション・レジスタはプレディケーションをマージすることを伴う演算（デスティネーション・レジスタのプレディケートされたレーンはその以前の値を保持する）の場合では既に読み出される必要がある可能性があるため、２つのさらなるレジスタ・アクセス（第２のソース・ベクトル・レジスタ及びキャリー・ベクトル・レジスタについて）のみを有することが有益な場合があることである。
【００２１】
ベクトル要素サイズ、及び／又はベクトル・オペランドの合計長は、変わってもよい。いくつかの実装形態は、要素サイズ及び／又はベクトル長を、特定の一定値に固定することができる。しかしながら、他のシステムは、可変のベクトル要素サイズ及びベクトル長をサポートする可能性がある。いくつかのベクトル要素サイズ、又はベクトル長について、ベクトルは、２つの要素のみを含む場合があり、この場合、デスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタは、単一のデータ要素の対、すなわち１つの第１のデータ要素、及び１つの第２のデータ要素を含むことができる。
【００２２】
しかしながら、命令デコード回路及び処理回路が、デスティネーション及びキャリー・ソース・ベクトル・レジスタが複数のデータ要素の対を含む、すなわち少なくとも４つの要素を含む（第１及び第２のデータ要素のそれぞれの２つ以上）、ベクトル・キャリー付き加算命令の少なくとも１つのインスタンスの実行をサポートすることが有用である場合がある。これは、システムが単一の命令に応答して複数の加算の計算をサポートすることを可能性にしており、長整数のオペランドの乗算を伴う計算を加速するために有用であり得る。例えば、それぞれの要素の対は、Ｋａｒａｔｓｕｂａアルゴリズムの様々なサブ乗算についての部分積の加算を表すことができる。
【００２３】
データ要素の対の、ベクトル・オペランドの要素へのマッピングは、様々な方法で行うことができる。例えば、一実例では、それぞれの対の第１の要素をレジスタの一方の半分に、それぞれの対の第２の要素はもう一方の半分に配置することができる。例えば、第１及び第２の要素の４対の実例では、これらは順に２ｄ、２ｃ、２ｂ、２ａ、１ｄ、１ｃ、１ｂ、１ａと並べることができる（ここで、１ａは第２の要素２ａに対応する第１の要素であり、対ｂ、ｃ、及びｄについても同様である）。
【００２４】
しかしながら、一実装形態において、それぞれのデータ要素の対は、隣接するデータ要素の対を含むことができる。したがって、デスティネーション・ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタ内のデータ要素の対の数は、少なくとも２であり、対の第１のデータ要素は、対の第２のデータ要素でインターリーブされる。例えば、第１及び第２の要素の４対では、これらは順に２ｄ、１ｄ、２ｃ、１ｃ、２ｂ、１ｂ、２ａ、１ａ（代替的に、それぞれの対で第１及び第２の要素の順を転置することができる）と並べることができる。この手法は、ベクトル命令の所与のサブ計算内で組み合わされるソース・オペランド及び結果値を、２つ以上のベクトル・レーンにまたがる長いクロス・レーン信号経路を要求するのではなく、同一のベクトル・レーン内にあるように、又はすぐ隣のベクトル・レーンにクロスするだけであるように、のいずれかに制限することができることから、ハードウェア設計をより効率的にすることができるため、ハードウェアで実装するためにより効率的であり得る。したがって、必要とされるワイヤリングの複雑性と長さは、それぞれの対の第１及び第２のデータ要素をインターリーブすることによって低減することができる。
【００２５】
キャリー値は、キャリー・ソース・ベクトル・レジスタの対応するデータ要素の対の、第２のデータ要素の最下位ビットから取得することができる。ベクトル・キャリー付き加算命令に応答して、処理回路は、デスティネーション・ベクトル・レジスタのデータ要素の対の第２のデータ要素の最下位ビットを、加算のキャリー出力に対応する値で更新することができる。キャリーを与えるための第２のデータ要素の最下位ビットを使用することは、対応する対の第１のデータ要素の最上位ビットに隣接することができるため、キャリー及びデータの値をデスティネーション・ベクトル・レジスタの隣接部分に書き込むことを可能にしており、より効率的であり得る。最下位ビット以外の第２のデータ要素の残りのビットは、キャリー・ソース・ベクトル・レジスタ、及び累算器ベクトル・レジスタ内で、使用されなくてもよい。多くのビットを未使用のままにしておくことは、ベクトル・レジスタ・ファイルの空間を無駄にし、またベクトル処理ユニット内で処理リソースを無駄にしているように思われる可能性があるが、上で議論したように、長整数の乗算を実施する際の全体的なパフォーマンスはこの手法により改善することができる。
【００２６】
キャリー付き加算命令によって処理されるベクトルは、それぞれ２Ｎビットを有するデータ要素を有することができ、第２のソース・データ値はやはり２Ｎビットを含むことができ、ここでＮは整数である。したがって、第２のソース・データ値は、ベクトル・レーン自身と同一のサイズを有しているため、ビット数の２の累乗に正確に対応し、第２のソース・データ値はベクトル・レーン全体を占有しており、そのためベクトル・キャリー付き加算命令を入力に対して演算できるようにするために、入力ベクトル又は先のベクトル命令の結果からのデータ要素のリサイズ又はアンパックが必要とされない。代わりに、ベクトル・キャリー付き加算命令は、入力ベクトルから選択された要素に対して直接演算を行うことができる。これは、キャリーがデータ結果とは別個のベクトル要素に保持されているために可能である。
【００２７】
第２のソース・データ値は、第２のデータ・ソース・ベクトル・レジスタのあらゆる要素から取得することができる。命令の様々な変形例が、第２のデータ・ソース・ベクトル・レジスタの様々な要素からソース・データ値を選択するために与えられ得る。
【００２８】
一実例において、第２のデータ・ソース・ベクトル・レジスタは、デスティネーション及びキャリー・ソース・ベクトル・レジスタでの要素の対に対応するやり方で並べることができる、少なくとも１対のデータ要素を含むオペランドを与える。例えば、それぞれの対の第１及び第２のデータ要素は、インターリーブすることができる。ベクトル・キャリー付き加算命令の第１及び第２の変形例が、提供され得る。第１の変形例について、第２のソース・データ値は、第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素の対の第１のデータ要素を含むことができる（また、命令の結果は、それぞれの対の第２の要素とは独立的であってもよい）。第２の変形例について、第２のソース・データ値は、対応する対の第２のデータ要素を含むことができる（また、命令の結果は、それぞれの対の第１の要素とは独立的であってもよい）。第２のソース・データ値として異なる要素を選択するために命令の２つの変形例を提供することにより、組み合わせた命令の２つの変形例は、第２のソース・ベクトルのそれぞれの要素を処理することができるため、これは２つのベクトル・キャリー付き加算命令（第１／第２の変形例のそれぞれのうちの１つ）の実行に先立って、第２のソース・ベクトルの要素のあらゆる追加的な並べ直し又はアンパックを実施する必要なく、入力ベクトルのすべての要素を処理できるようにしている。
【００２９】
第１のデータ・ソース・ベクトル・レジスタが、デスティネーション・ベクトル・レジスタとは別個に命令によって指定される実施例において、第１のソース・データ値は、それぞれの対の第１の要素（命令の第１の変形例について）、又はそれぞれの対の第２の要素（命令の第２の変形例について）いずれかから同様に抽出することができる。
【００３０】
一方で、第１のデータ・ソース・ベクトル・レジスタが、デスティネーション・ベクトル・レジスタと同一のレジスタである場合、デスティネーション・ベクトル・レジスタの第２のデータ要素がキャリー情報を表すために使用されるため、それぞれの加算について、第１のデータ・ソース値は、デスティネーション・ベクトル・レジスタの対応する要素の対の第１のデータ要素から抽出することができる（実行される命令の変形例が、第１の変形例か第２の変形例かに関わらず）。
【００３１】
また、少なくとも１つのプレディケート指標を指定するプレディケート値に関連付けられる、キャリー付き加算命令のプレディケートされた変形例が提供され得、それぞれのプレディケート指標は、デスティネーション・ベクトル・レジスタの前記少なくとも１対のデータ要素のうちの１つに対応している。プレディケートされた変形例に応答して、命令デコード回路は、処理回路を制御して、対応するプレディケート指標が第１の値を有するデスティネーション・ベクトル・レジスタのデータ要素の対について、上で議論したように第１／第２のデータ要素の更新を実施し、対応するプレディケート指標が第２の値を有するデータ要素の対についての更新を抑制することができる。プレディケート値は、プレディケート値を格納しているプレディケート・レジスタを識別するプレディケート・レジスタ指定子を含む命令エンコーディングによって、命令に関連付けられる場合があり、又はデフォルトのプレディケート・レジスタは、命令のエンコードに関わらずキャリー付き加算命令のプレディケート変形例のすべてのインスタンスについてのプレディケート値を与えるために使用することができる。対応するプレディケート指標が第２の値を有するデスティネーション・ベクトル・レジスタの要素の対について、要素の対は、デスティネーション・ベクトル・レジスタのその部分に格納される以前の値を保持することができるか、又はゼロ若しくは別の所定の値へとクリアすることができる。したがって、キャリー付き加算命令がプレディケートされる場合、ベクトルの個々のデータ要素の粒度で機能するのではなく、プレディケーションはデータ要素の対の粒度で機能することができる。
【００３２】
ベクトル・キャリー付き加算命令の加算及び減算の変形例が、提供され得る。加算の変形例について、加算は第１及び第２のソース・データ値、並びにキャリー・ソース・ベクトル・レジスタの第２のデータ要素から取得されたキャリー値を加算することを含む。減算の変形例について、演算は第１のソース・データ値から第２のソース・データ値を減算することを含み、キャリー値は減算についてのボロー値を示す。減算の変形例について、キャリー出力は減算のボロー出力を表している。２つのオペランドの減算は、オペランドのうちの１つが加算を実施する前に２の補数となされたものである２つのオペランドの加算と同一であることから、減算はやはり加算として見なされ得ることに留意されたい。同様に、ボロー値は加算についての＋１のキャリーの代わりに、−１のキャリーに単純に相当するため、減算についてのボロー値は加算用のキャリー値と見なすことができる。
【００３３】
ベクトル・キャリー付き加算命令の複数の変形例が与えられる場合、変形例（第１／第２、又は加算／減算）は様々な方法で区別することができる。例えば、キャリー付き加算命令の様々な変形例は、様々な命令オペコードを有することができる。代替的に、変形例は共通のオペコードを共有することができるが、変形例を区別する命令のエンコードにおいて別のフィールドを有することができる。別の実例では、異なる命令の変形例は同一の命令エンコードを有することができるが、後続のベクトル・キャリー付き加算命令に遭遇する際、命令のどの変形例を使用するべきかを選択するために、先行する命令によって設定され得る装置の制御レジスタに格納されるモード・パラメータによって区別することができる。第１／第２の変形例について、第１／第２の要素の選択は、命令によって読み出されるプレディケート又はマスク・レジスタで、やはり表現することができる。
【００３４】
加算／減算用のキャリー情報を移送するためにキャリー・ソース・ベクトル・レジスタ及びデスティネーション・ベクトル・レジスタのいくつかの要素を使用する、上で議論したベクトル・キャリー付き加算命令の形態の利点は、これは命令に応答して書き込まれる必要があるレジスタ（デスティネーション・ベクトル・レジスタ）が１つだけであるためマイクロ・アーキテクチャで実装することが比較的効率的である可能性があることである。やはり、累算器レジスタが、デスティネーション及び第１のソース・ベクトル・レジスタの両方として指定される実例では、１つだけのデスティネーション・レジスタ指定子、及び２つのベクトル・ソース・レジスタが、命令によって指定される必要がある。
【００３５】
しかしながら、大きい整数値の計算を実装するための課題に対する代替的な解決策としては、キャリー情報を伝達するためにプレディケート・レジスタを使用するベクトル・キャリー付き加算命令を提供することを挙げることができる。データ処理装置は、処理回路によって実施される演算のマスクを制御するためのプレディケート値を格納するためのプレディケート・フィールドを含む複数のプレディケート・レジスタを有することができる。他のタイプのベクトル命令について、プレディケート・フィールドは、ベクトル処理のレーンのマスクを制御することができる一方、ベクトル・キャリー付き加算命令については、加算からのキャリー出力を表すためにプレディケート・レジスタを再使用することができ、加算へのキャリー入力を、やはりプレディケート・レジスタのプレディケート・フィールドから取得することができる。
【００３６】
したがって、命令デコード回路は、デスティネーション・ベクトル・レジスタ、第１のデータ・ソース・ベクトル・レジスタ、第２のデータ・ソース・ベクトル・レジスタ、入力プレディケート・レジスタ、及び出力プレディケート・レジスタ、を指定するベクトル・キャリー付き加算命令に応答することができ、デスティネーション・ベクトル・レジスタの所与のデータ要素について、処理回路を制御して、デスティネーション・ベクトル・レジスタの所与のデータ要素を、第１のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第１のソース・データ値と、第２のデータ・ソース・ベクトル・レジスタの対応するデータ要素から取得された第２のソース・データ値と、入力プレディケート・レジスタの対応するプレディケート・フィールドから取得されたキャリー値との加算の結果に対応する値で更新する。また、出力プレディケート・レジスタの対応するプレディケート・フィールドは、前記加算のキャリー出力に対応する値で更新することができる。
【００３７】
この手法はさらに複雑なマイクロ・アーキテクチャ（例えば、プレディケート・レジスタ・ファイルへの速い読み出し／書き込み経路、並びに同一の命令に応答してベクトル・レジスタ・ファイル及びプレディケート・レジスタ・ファイルの両方へ書き込む機能）を要求することがある一方で、この手法の利点は、キャリーがデスティネーション・ベクトル・レジスタの要素に格納されないため、デスティネーション・ベクトル・レジスタのすべての要素を加算結果値を格納するために使用することができ（また、第１／第２のデータ・ソース・ベクトル・レジスタのすべての要素をソース入力として使用することができる）、単一の命令に応答して実施することができる演算の数を効果的に倍増させており、ひいてはパフォーマンスを改善することである。
【００３８】
要約すると、上で議論した実例の両方は、演算のアンパック又はリサイズをせずに入力ベクトルからの完全なデータ要素に直接演算を行うことができるという利点を有しており、その理由は、キャリー情報がデータ結果と同一のレーンには格納されておらず、ベクトル・レジスタの別のレーン、又はプレディケート・レジスタの対応するプレディケート・フィールド内のいずれかに格納されるからである。これは、長整数の乗算を加速させるために非常に有用である。
【００３９】
上で議論した命令の形態の両方は、ベクトル・キャリー付き加算命令に応答して要求される演算を実施するよう処理回路を制御する命令デコーダを使用してハードウェアに実装することができる。例えば、命令デコーダは、ベクトル・キャリー付き加算命令のエンコードを解釈し、上で議論したような入力に基づいて結果レジスタを更新するよう処理回路を制御するために適当な制御信号経路を選択的にアクティベートするための論理ゲートを備えることができる。
【００４０】
しかしながら、技法は物理的なハードウェアではなく、プロセッサ・アーキテクチャのシミュレーションとして、さらに実装することができる。ひいては、シミュレータ・コンピュータ・プログラムが、ホスト処理装置（それ自身は上で議論した命令をサポートしていなくてもよい）を制御するために設けられる場合があり、ターゲット・プログラム・コードの命令をサポートするターゲット処理装置でこれらの実行をシミュレートするように、ターゲット・プログラム・コードの命令を実行するための命令実行環境を提供する。命令デコーダ及び処理回路の機能は、代わりにシミュレータ・プログラムにおいて命令デコード・プログラム・ロジック及び処理プログラム・ロジックによって実施することができ、また、レジスタはシミュレートされるターゲット処理装置のレジスタを表現するデータを記憶するメモリ内でシミュレートされるレジスタ・データ構造として実装することができる。コンピュータ・プログラムは記憶媒体に記憶することができる。記憶媒体は非一時的な記憶媒体であってもよい。
【００４１】
図１は、命令デコーダ６によってデコードされる命令に応じてデータ処理演算を実施するための処理回路４を有するデータ処理装置２の実例を概略的に図示している。プログラム命令は、１つ又は複数のキャッシュ及びメモリを含むことができるメモリ・システム８からフェッチされる。命令は命令デコーダ６によってデコードされ、命令セット・アーキテクチャによって定義される対応する演算を実施するために命令を処理するよう処理回路４を制御する制御信号を生成する。例えば、デコーダ６は、オペコードを解釈するための論理ゲート、及びあらゆる追加的な命令の制御フィールドを含むことができ、算術演算、論理演算又はロード／ストア演算などの演算を実施させるために、処理回路４に適切なハードウェア・ユニットをアクティベートさせるための制御信号を生成する。レジスタ１０は、命令に応答して処理回路４によって処理されるデータ値、及び処理回路の動作を構成するための制御情報を格納する。算術又は論理命令に応じて、処理回路４はレジスタ１０からオペランドを読み出し、命令の結果をレジスタ１０に書き戻す。ロード／ストア命令に応じて、データ値は処理ロジック４を介してレジスタ１０とメモリ・システム８との間を転送される。
【００４２】
レジスタ１０は単一のデータ要素を含むスカラ値を格納するための複数のスカラ・レジスタを備えるスカラ・レジスタ・ファイル１２を含む。スカラ・レジスタは、整数オペランドを格納するための整数レジスタ、及び浮動小数点値を格納するための浮動小数点レジスタを含むことができる。代替的に、整数及び浮動小数点値は、同一のレジスタのセットに格納することができる。命令セット・アーキテクチャ内の命令デコーダ６によってサポートされるいくつかの命令は、処理回路４がスカラ・レジスタ１２から読み出されたスカラ・オペランドを処理し、スカラ・レジスタ１２に書き戻されるスカラ結果を生成するように制御する、スカラ命令である。
【００４３】
レジスタは、ベクトル・レジスタ・ファイル１４、及びプレディケート・レジスタ・ファイル１６をさらに含む。ベクトル・レジスタ・ファイル１４は、複数のデータ要素を含むベクトル・オペランドの記憶をサポートするいくつかのベクトル・レジスタを含む。命令デコーダ６はベクトル命令をサポートしており、ベクトル命令は処理回路４を制御してベクトル・レジスタから読み出されたベクトル・オペランドの各要素に対してベクトル処理のいくつかのレーンを実施し、スカラ・レジスタ１２に書き込まれるスカラ結果又はベクトル・レジスタ１４に書き込まれるさらなるベクトル結果のいずれかを生成する。いくつかのベクトル命令は、１つ又は複数のスカラ・オペランドからベクトル結果をさらに生成することができ、或いはスカラ・レジスタ・ファイル内のスカラ・オペランドに対してさらなるスカラ演算を、同様にベクトル・レジスタ・ファイルから読み出されたオペランドに対してベクトル処理を、実施することができる。ひいては、いくつかの命令はスカラ−ベクトル混合命令であることが可能である。処理回路内で算術又は論理演算をトリガする、ベクトル算術又は論理命令と同様に、デコーダ６は、ベクトル・レジスタ１４とメモリ・システム８との間でデータを転送することができるベクトルのロード／ストア命令をさらにサポートすることができる。
【００４４】
図２は、プレディケート・レジスタ１６のうちの１つにおいて、プレディケート情報によって制御されるベクトル演算の実例を示している。この実例において、ベクトル命令はベクトルの加算命令であり、処理回路４を制御していくつかの独立した加算命令を実施しており、２つの入力ベクトルＺｍ、Ｚｎの対応するデータ要素の対をそれぞれ加算し、加算の結果をデスティネーション・ベクトルＺｄの対応する要素に書き込んでいる。もちろん、加算だけではなく、それぞれのベクトル・レーンで実施される中心となる演算として他の算術又は論理演算を適用することもできる。プレディケート・レジスタＰのそれぞれのプレディケート・フィールドは、デスティネーション・レジスタの対応する要素が加算の結果で更新されるかどうかを制御する。例えば、この実例において、ベクトル・レーン１、２及び５はマスクされており（これらのレーンの対応するプレディケート・フィールドが０であるため）、そのためデスティネーション・レジスタＺｄの対応する要素は加算の結果にセットされていない。マスクされたレーンは、例えばその以前の値を保持することができる。代替的に、プレディケーションをクリアする／ゼロ化する形態は、デスティネーション・レジスタのマスクされた要素を、ゼロ又は別の所定の値にクリアすることができる一方で、マスクされていないレーンはそのレーンでの加算の結果で書き込みが行われる。したがって、一般には、プレディケート・レジスタ１６は特定のレーンでベクトル演算のマスキングを制御するために使用することができる。例えば、条件付きベクトル命令は、所与のベクトルのそれぞれのレーンにおいて入力要素がいくつかの条件を満たすかどうかを試験する比較を実施して、対応するレーンでの比較結果に基づいてプレディケート・レジスタにプレディケート値をセットすることができ、次いでそれぞれのベクトル・レーンでのその命令の効果が、先の条件付きベクトル命令によって実施される比較に応じて条件的になるよう、後続のベクトル命令をプレディケートに応じてマスクすることができる。
【００４５】
図２は所与のベクトルについて並列に実施される加算のすべてを示しているが、これは必須ではない。処理回路４は、ある範囲の異なるデータ要素サイズ及び異なるベクトル長を伴うベクトルの処理をサポートすることができる。例えば、２５６ビットのベクトル・レジスタ１４は、８ビットのデータ要素３２個、１６ビットのデータ要素１６個、３２ビットのデータ要素８個、６４ビットのデータ要素４個、又は１２８ビットのデータ要素２個に分割することができ、或いは例えば単一の２５６ビット要素として解釈することもできる。やはり、様々なサイズのベクトル・レジスタ、例えば１２８、２５６、又は５１２ビット、がサポートされ得る。例えば、ベクトル・レジスタ・バンク１４は、様々な方法で分割可能であり得、様々なベクトル・レジスタのサイズを与える（例えば、固定サイズのいくつかの物理レジスタを組み合わせて、単一のベクトル命令によって動作させ、大きなレジスタ・サイズを表現することができる）。したがって、図１に示すように、レジスタ１０は、ベクトル演算に使用されるデータ要素のサイズを指定する要素サイズ・パラメータ１８（ベクトルの１つのデータ要素内のビット数）、及びベクトル・レジスタの長さを指定するベクトル長パラメータ２０（すべての要素を含む、ベクトル内での合計ビット数）などの、ベクトル処理を制御するための制御情報をさらに含むことができる。いくつかの実装形態において、これらの値は、すべての命令について常に同一であるように固定であることができる。異なる要素サイズ又はベクトル長を有するある範囲のプラットフォームでの実行のために書かれたコードが、現在そのコードを実行しているシステムに実装された特定の要素サイズ又はベクトル長を読み出すことができるように、要素サイズ１８及びベクトル長２０を指定するレジスタを設けることは、なお有用である場合がある。しかしながら、他の実例では、要素サイズ及び又はベクトル長は、所与の演算について命令がどのような要素サイズ又はベクトル長を使用するか指定できるように、プログラム可能な場合がある。代替的に、要素サイズ及び／又はベクトル長は、制御レジスタ内のパラメータではなく、ベクトル命令のエンコードによって指定することができる。
【００４６】
したがって、要素サイズ又はベクトル長は、変わってもよい。選択される特定のサイズによっては、ベクトル処理回路は、ベクトル全体を並列に処理するために十分な処理ハードウェアを常に有していない可能性がある。処理ロジックが所与の演算に使用されるベクトル長よりも狭い場合、ベクトルは狭い処理ロジックを通じる別個の通過により複数サイクルで処理することができる。したがって、ベクトル命令は、処理回路４をトリガして、単一の命令に応答して複数レーンの処理において演算を実施することができる一方で、これは必ずしもこれらのレーンのすべてが並列に処理されなければならないことを含意していない。極端に言えば、いくつかのベクトル実装形態は、単一のレーンに対応する処理ロジックを提供するだけで、ベクトル・レーンのすべてを順次に処理することができる。他の極端な場合、高いパフォーマンスの実装形態は、複数の並列実行ユニットを使用して、すべてのベクトル・レーンを並列に処理することができる。他の実装形態は、いくつかのレーンを並列に処理することができるが、ベクトルを全体として複数の順次的なチャンクとして処理する。
【００４７】
要素サイズ又はベクトル長指標１８、２０は、レジスタ１０に格納することができる制御情報の一部の実例に過ぎないことを了解されたい。他の実例としては、現在の実行のポイントを表現する命令のアドレスを示すプログラム・カウンタ・レジスタ、例外をハンドリングする際に状態を保存又は復元するためにスタック・データ構造のメモリ８における場所のアドレスを示すスタック・ポインタ・レジスタ、及び関数の実行の後に処理が分岐する関数リターン・アドレスを格納するためのリンク・レジスタを挙げることができる。
【００４８】
図３及び図４は、一実例による、ベクトル・キャリー付き加算命令の加算及び減算の変形例(variants)を示している。加算及び減算の変形例の両方について、命令のさらなる第１及び第２の変形例が示される：
ＡＤＣＬＢ  Ｚｄａ，Ｚｎ，Ｚｍ  ／／キャリー付き加算ｌｏｎｇ（下部）(Add with carry long(bottom))−第１の変形例、加算変形例
ＡＤＣＬＴ  Ｚｄａ，Ｚｎ，Ｚｍ  ／／キャリー付き加算ｌｏｎｇ（上部）(Add with carry long(top))−第２の変形例、加算変形例
ＳＢＣＬＢ  Ｚｄａ，Ｚｎ，Ｚｍ  ／／キャリー付き減算ｌｏｎｇ（下部）(Subtract with carry long(bottom))−第１の変形例、減算変形例
ＳＢＣＬＴ  Ｚｄａ，Ｚｎ，Ｚｍ  ／／キャリー付き減算ｌｏｎｇ（上部）(Subtract with carry long(top))−第２の変形例、減算変形例
それぞれの変形例について、Ｚｄａはデスティネーション・ベクトル・レジスタ（第１のデータ・ソース・ベクトル・レジスタとしても機能し、また累算器ベクトル・レジスタとも称される）を表し、Ｚｎは第２のデータ・ソース・ベクトル・レジスタを表し、Ｚｍはキャリー・ソース・ベクトル・データ・レジスタを表している。これらの命令は、加算又は減算を実施することにより大きな整数の処理を加速するために使用することができ、それによって、累算器ベクトル・レジスタ及びキャリー・ソース・ベクトル・レジスタ内で、キャリー又はボローの入力情報が実際のデータ値でインターリーブされる。
【００４９】
したがって、キャリー情報は、ソース及びデスティネーション・ベクトル・レジスタの統合した部分である。ソース及びデスティネーション・ベクトル内で「キャリー」（又は「ボロー」）情報の位置を、「キャリー」を入力として利用する、又は「キャリー」が生成される、算術演算を実施しているレーンに隣接するレーンに制約することは有用である。図３及び図４を見ると、レジスタＺｄａ、Ｚｎ、Ｚｍは、要素の対に分割されている。それぞれの対は、偶数要素に対応する「下部」要素（第１の要素）、及び奇数要素に対応する「上部」要素（第２の要素）を含む。レジスタＺｄａ、Ｚｍについて、キャリー情報がそれぞれの対の上部要素に配置される一方で、下部要素は対応するデータを与える。他の実例が、それぞれの対のデータ／キャリー要素を異なるように配置することができる一方で（例えば、すべてのデータ要素をレジスタの半分に、対応するキャリー要素をもう一方の半分に配置する）、データ及びキャリー要素をインターリーブすることはより効率的である可能性があり、理由としては、Ｚｄａ内で隣接する要素の対を生成するための入力は、Ｚｎ、Ｚｍの対応する要素の対から選択され、２つ以上のベクトルの要素にまたがる長いクロス要素経路のあらゆる必要性を回避しており、これによって処理回路のマイクロ・アーキテクチャの実装形態をより効率的にすることができるからである。したがって、これらの演算は、それぞれのベクトルを、サイズがベクトル要素のサイズの２倍である「粒（ｇｒａｎｕｌｅ）」又はセグメントに効果的に分割する。
【００５０】
図３は、ＡＤＣＬＢ及びＡＤＣＬＴ命令の演算を示している。明瞭さのために、１つの「粒」（隣接する上部及び下部要素の対）だけについて詳細な演算を図示している。対応する演算が、それぞれ他の粒（要素の対）に対して実施されることを了解されたい。ＡＤＣＬＢ命令は、あるソースＺｎの偶数要素Ｂ（又はＡＤＣＬＴ変形例の場合では、奇数要素Ｔ）を、第２のソースＺｍのそれぞれの粒の上半分（奇数要素）の最下位ビットをキャリー入力として使用して、デスティネーション・ベクトル・レジスタの偶数要素に加算する。得られる合計は、デスティネーション・ベクトルのそれぞれの粒の下半分に書き込まれ、一方で生成されたキャリー情報はデスティネーションのそれぞれの粒の上半分の最下位ビットに書き込まれる。Ｚｄａにおいて、それぞれの粒の上半分の残りのビットは、使用されないままである。結果は、キャリー・ソース・レジスタＺｍのそれぞれの粒の下部（偶数）要素のビットとは無関係である。また、ＡＤＣＬＢについて、結果は、データ・ソース・レジスタＺｎの選択されない（上部／奇数）要素とは無関係であり、ＡＤＣＬＴについて、結果は、Ｚｎの選択されない（下部／偶数）要素とは無関係である。
【００５１】
このやり方で、キャリー情報、及び入力又は結果データをインターリーブすることにより、キャリー・チェーンが規則的なデータフローの一部であることを確実にすることができる。これにより、ある程度の並列化を可能にしている。第１に、従属関係がベクトル・レジスタの粒度で解決されるため、同時に保留中の複数のキャリー・チェーンがある。第２に、命令のＢ／Ｔ変形例を、独立的に（Ｂ／Ｔ変形例を単一のマイクロ演算に融合できる場合、又は２つの変形例をパイプラインによって並列に処理することができる場合は、いくつかのマイクロ・アーキテクチャでは同時的に）計算することができる。ＡＤＣＬ命令は典型的に先行する乗算ステップによって生成された部分積を消費するため、これらの命令によって、乗算及び加算のステップを「合理化」し、これらが本質的に累算器に結合されているためキャリーをハンドリングするための余分な演算がないプログラム・シーケンスを設計することを可能にしている。これは、キャリー情報をマーシャリングするオーバヘッドを低減している。
【００５２】
図３及び図４では、結果がそれぞれの対の下部要素に書き込まれるように、要素のそれぞれの対の「第１の要素」を第２の要素よりも下位の要素の位置にあるが、他の実装形態では、結果がそれぞれの対の上部要素を更新し、キャリーが下部要素に書き込まれるように、第１と第２の要素はレジスタ内で転置することができる。しかしながら、マイクロ・アーキテクチャでは、キャリーが加算のデータ結果の最上位ビットより上位の１つのビット位置を表すため、ビットが加算器回路によって出力され得る順序付けに対応する可能性があるため、それぞれの対より上位の要素にキャリーを与えることがさらに効率的な場合がある。
【００５３】
図４は、ベクトル・キャリー付き加算命令の減算の変形例の第１／第２の変形例の処理の対応する処理を示している。ＳＢＣＬＢ及びＳＢＣＬＴ命令の演算又はデータフローは、中心となる演算が「減算」であること以外、それぞれＡＤＣＬＢ及びＡＤＣＬＴに類似しており（つまり、Ｚｎから選択される要素が加算に先立って２の補数になされる以外、同じ加算）、「ボロー」情報は、入力として使用され、「キャリー」情報の代わりに出力で生成される（ボローは−１のキャリーを表す）。Ｚｎからのデータ入力を２の補数にすること、及びボローの反転の両方は、加算器へのＺｎのデータ・ソース入力及びボロー＿イン値を両方単純に反転させることによって、実装することができる。Ｚｎのデータ・ソース入力へ別個に１を加算する必要はないが、ボロー＿イン値の反転が事実上これを実現するためである。ボロー値が０の場合、反転させたボロー＿イン値１が、２の補数について１の加算を与え、ボローは必要ない。ボロー値が１の場合、反転させたボロー＿イン値０は、ボローについての１の減算が２の補数についての１の加算を打ち消すことを反映する。したがって、データ入力及びボロー＿イン値が反転されていると、加算は加算の変形例と同じ方法で実施することができる。
【００５４】
図４Ａは、ベクトル・キャリー付き加算命令のプレディケートされた変形例の実例を示している。この実例において、図３に示したＡＤＣＬＢの変形例にプレディケーションが適用されているが、類似のＡＤＣＬＴ、ＳＢＣＬＢ、及びＳＢＣＬＴの変形例のプレディケートされたバージョンもやはり与えられ得る。デスティネーション・レジスタＺｄａの隣接する上部／下部要素のそれぞれの対に対して実施される中心となるキャリー付き加算演算は、図３で示されるものと同一である。しかしながら、命令は、例えばプレディケート・レジスタ１６のうちの１つに格納されるプレディケート値Ｐにさらに関連付けられる。プレディケート値は図２のものに類似するいくつかのプレディケート・フィールドを含むが、図３及び図４に示されるタイプのベクトル・キャリー付き加算命令については、プレディケーションは要素ごとではなく隣接する要素の対の粒度で適用されるため、プレディケート・フィールドの半分だけが有効である。この実例において、有効なプレディケート・フィールドは、それぞれの対の下部（偶数）要素に対応するプレディケート・フィールドである（そのため、結果はそれぞれの対の上部要素に対応するプレディケート・フィールドとは無関係であり、これらのフィールドの値が結果に影響しないことを示すためにＸで印をつけてある）。しかしながら、他の実装形態では、有効なプレディケート・フィールドとしてそれぞれの要素の対について上部（奇数）のプレディケート・フィールドを使用するよう選択することができる。
【００５５】
対応するプレディケート指標が１であるデスティネーション・ベクトルの要素の対について、キャリー付き加算演算は、図３に示されるのと同一の方法で実施され、対の第１の要素を加算から得られるデータＤで更新し、対の第２の要素を加算のキャリー出力Ｃで更新することができる。しかしながら、対応するプレディケート指標が０である要素の対について（この実例では要素４及び５について示されるように、デスティネーション・ベクトルＺｄａ’のこれらの要素の更新は、抑制される。代わりに、デスティネーション・ベクトルＺｄａ’のこれらの要素は、それらの以前の値を保持することができる（プレディケーションのマージ）か、又はゼロ若しくは別の所定の値にクリアすることができる（プレディケーションのゼロ化）。したがって、プレディケートはそれぞれ個々の要素ではなく、それぞれの粒（要素の対）に適用される。図４Ａは、プレディケート・レジスタ１６の一実例のフォーマットを示しているが、デスティネーション・レジスタＺｄａ’のそれぞれの要素の対がマスクされるべきかどうかを示すプレディケート指標を与えるあらゆる他の技法もまた使用することができることを了解されたい。
【００５６】
図５は、デスティネーション（累算器）ベクトル・レジスタＺｄａ、第２のデータ・ソース・ベクトル・レジスタＺｎ、及びキャリー・ソース・ベクトル・レジスタＺｍ（この実例では、デスティネーション・ベクトル・レジスタＺｄａは、第１のデータ・ソース・ベクトル・レジスタとしてさらに機能する）を指定する、ベクトル加算キャリー命令の処理を示す流れ図である。ステップ５０において、命令デコーダはそのようなベクトル・キャリー付き加算命令が検出されているかどうかを判断し、検出されていない場合、現在の命令はその命令によって表される演算にしたがって処理される。ベクトル・キャリー付き加算命令に遭遇している場合、ステップ５２において、命令デコーダは命令が「上部」（第２）又は「下部」（第１）の変形例かどうかを判断する。命令が上部の変形例である場合、ステップ５４において、第２のデータ・ソース・ベクトル・レジスタＺｎでそれぞれの要素の対から選択された要素は、対の上部の要素、すなわち奇数要素（第２の要素）とされ、一方で命令が下部（第１）の変形例である場合、ステップ５６においてそれぞれの対の下部（第１又は偶数）要素は、第２のデータ・ソース・ベクトル・レジスタＺｎから選択される。
【００５７】
ステップ５８において、命令デコーダは命令が加算の変形例か、又は減算の変形例かどうかを判断する。命令が加算の変形例である場合、ステップ６０においてデスティネーション・ベクトル・レジスタＺｄａにおけるそれぞれの要素の対について、対の下部（第１）要素の新しい値Ｚｄａ（Ｂ）’が、以下の加算の結果にセットされる：（ｉ）デスティネーション・ベクトル・レジスタにおいて、その要素の対の下部要素Ｚｄａ（Ｂ）の以前の値、（ｉｉ）ステップ５４又は５６で選択されたとおりの、第２のデータ・ソース・レジスタＺｎにおいて対応する要素の対の選択される要素（上部又は下部）、及び（ｉｉｉ）キャリー・ソース・ベクトル・レジスタＺｍにおいて対応する要素の対の上部要素Ｚｍ（Ｔ）から抽出されたキャリー入力。やはり、デスティネーション・ベクトル・レジスタＺｄａの対応する要素の対の上部要素Ｚｄａ（Ｔ）’の最下位ビットが、加算のキャリー出力にセットされる。
【００５８】
命令が減算の変形例である場合、ステップ６２において、デスティネーション・ベクトル・レジスタＺｄａ（Ｂ）’におけるそれぞれの要素の対の下部要素は、その下部要素Ｚｄａ（Ｂ）の以前の値、引く、ステップ５４又は５６で選択されたデータ・ソース・ベクトルＺｎにおいて対応する要素の対のうちの１つ、引く、キャリー・ソース・ベクトル・レジスタ・ソースＺｍにおいて対応する要素の対の上部要素Ｚｍ（Ｔ）から抽出されたキャリー値によって表現されるボロー値、の結果にセットされる。やはり、対応する対、又はデスティネーション・ベクトル・レジスタの要素の上部要素Ｚｄａ（Ｔ）’の最下位ビットは、減算からのボロー出力にセットされる（すなわち、Ｚｄａ（Ｔ）の最下位ビットが、減算を実施している加算器回路のキャリー出力に出力された値にセットされる）。
【００５９】
図３〜図５の実例は、同一のレジスタＺｄａがデスティネーション・レジスタ及び第１のデータ・ソース・レジスタ両方として機能する破壊的な命令フォーマットを示している一方で、デスティネーション・レジスタとは別個にさらなるベクトル・レジスタを第１のデータ・ソース・レジスタとして指定する非破壊的な命令フォーマットを、結果をデスティネーション・レジスタに書き込む際第１のソース・ベクトルを上書きすることを回避するために、さらに設けることができる。
【００６０】
これらの命令について、実例の使用事例を以下で議論する。
【００６１】
いくつかの重要な暗号化ワークロードの最も時間のかかる部分には、大きな整数値に対する数学的演算を実施するルーチンが伴う。暗号化のシナリオに加えて、大きな数字を伴う数学的演算は、金融ソフトウェア及び一部の科学アプリケーションで使用されるＧＮＵ  Ｍｕｌｔｉｐｒｅｃｉｓｉｏｎ  Ａｒｉｔｈｍｅｔｉｃ（ＧＭＰ）ライブラリなどのライブラリを支えている。そのような数字は、典型的には（その範囲に関わらず）事再現性又は数学的な厳密さの懸念から浮動小数点算術が適切ではない例で使用される。ＲＳＡアルゴリズムは、最も一般的に使用される公開鍵暗号法アルゴリズムである。その安全性は、大きな数を因数分解する知覚される困難さに依拠している。メッセージを暗号化又は復号化するため、プロセッサは冪剰余として知られる技法で大きな数をできるだけ速く乗算することが要求される。例えば、ＲＳＡ２０４８では、４０９６ビットの積を与え、次いで簡約される２０４８ビット数の多くの連続的な乗算がある。
【００６２】
整数を乗ずる最も簡単な方法（一般的に「教科書的な」方法と称される）は、１つのソースのすべての桁を他のソースのすべての桁に乗ずる必要があるため、ｎ桁のソースに対してＯ（ｎ２）ステップを必要とする。また、以下の実例から分かるように、「加算」及び「データの再アライメント（シフト）」演算が必要とされる：
１１１＊５４３＝３３３＋（４４４＜＜１  ｄｉｇｉｔ）＋（５５５＜＜２  ｄｉｇｉｔｓ）＝６０２７３
しかしながら、Ｋａｒａｔｓｕｂａアルゴリズムは、分割統治法に基づく手法を使用して、２つのｎ桁の数の乗算を、せいぜい
2021507348.tif 000003
の単一桁の乗算まで減らすことができる。この方法は、「乗算」と、「加算」、「減算」などとの間のトレードオフを採用して、「ｎ」が大きい場合にかなりのパフォーマンス上の利点を与える。サイズが「ｎ」の入力オペランドを伴うそれぞれの乗算は、サイズが「ｎ／２」の入力オペランドを伴ういくつかの小さな乗算、及びいくつかの補助的な演算−「加算」、「減算」などに分解される。正式には、２つのｎビットの整数、ＡとＢとを乗算して２ｎビットの結果Ｃを生成する式は、図６の上部の等式で示すように書くことができる。この実例では、部分積が扱いづらいサイズを有さないことを確実にするために、Ｋａｒａｔｓｕｂａアルゴリズムの減算の変形例を使用していることに留意されたい。したがって、２つの２０４８ビットの整数の乗算は、図６に示すように、１０２４ビット整数の３つのサブ乗算に分解することができる。それぞれ１０２４ビットの乗算は、同じ方法でそれ自体を３つの５１２ビット整数の乗算に分解することができる。そして、それぞれ５１２ビットの乗算を、さらに３つの２５６ビット整数の乗算に分解することができる。最終的に、乗算をさらに分解することが、全体的な結果を再構成するために必要とされる追加的な加算、減算、又はシフトのために、合計で大きなオーバヘッドをもたらす点に到達する。
【００６３】
サブ乗算は独立的であるため、適当なデータ・レイアウト及び編成により、図６に示すように、Ｋａｒａｔｓｕｂａアルゴリズムをベクトル化することが可能である。例えば、Ｋａｒａｔｓｕｂａツリーの葉ノードが２５６ビットのサブ乗算を与える場合、Ｋａｒａｔｓｕｂａツリーの所与のブランチの３つの２５６ビットのサブ乗算のそれぞれは、図６の上の実例に示すように、ベクトルの別個のレーンＡ、Ｂ、Ｃに割り当てることができる。また、より大きなベクトルでは、Ｋａｒａｔｓｕｂａツリーの高次レベルでの異なる５１２×５１２ビットの乗算について、図６の下の実例に示すように、６つの２５６ビットのサブ乗算を８要素ベクトルの６レーンに割り当てることができる（３つのレーンＡ、Ｂ、Ｃのそれぞれのセットが、対応する５１２ビットのノードの２５６×２５６ビットの３つの乗算を表している）。
【００６４】
例えば、６４ビットの要素サイズを選択する場合、次のように２つの２５６ビットの整数ＡとＢとを乗算することができる：Ａ×Ｂ＝｛ａ３，ａ２，ａ１，ａ０｝×｛ｂ３，ｂ２，ｂ１，ｂ０｝。この乗算に関連する部分積を、図７に図示する。積は、それぞれの部分積は「再アライン」される必要があるため、右から左にずれており、適当に列に重ねてあることに留意されたい。
【００６５】
図８は、部分積ａ１×｛ｂ３，ｂ２，ｂ１，ｂ０｝を計算するための図７の第２の「リム（ｌｉｍｂ）」の計算を実施するために、必要な命令のシーケンスの１つの可能なインスタンスを表すコード・シーケンスを示している。様々な部分積の下部及び上部の６４ビット部分を生成するために、いくつかの乗算で開始する。２５６ビット×２５６ビットの乗算のそれぞれのインスタンスは、ベクトル処理の単一のレーンを占有し、それぞれ２５６ビットのオペランドの６４ビット構成要素は、（別個の命令で動作する別個のレジスタにおいて）それぞれのベクトルをまたぐのではなく垂直に配置されることに留意されたい。これは、計算：ａ１×｛ｂ３，ｂ２，ｂ１，ｂ０｝についての部分積を生成するために、レジスタｚ１（異なるソース・オペランドからのａ１を含んでいる）が、ｚ４（ｂ０がいくつかの異なるソース・オペランドからであるとして）、ｚ５（ｂ１）、ｚ６（ｂ２）、及びｚ７（ｂ３）のそれぞれで乗算される必要があることを含意している（図８の１行目から８行目）。
【００６６】
図８において、ａｄｃｌｂ及びａｄｃｌｔ命令が、部分積をそれぞれのレーンｚａｃｃ１ＬＢ、ｚａｃｃ１ＬＴ、ｚａｃｃ０ＨＢなどについて累算器に加算するために使用される。ａｄｃｌｂ及びａｄｃｌｔ命令の対応する対が、乗算からの部分積の偶数及び奇数の要素にそれぞれ作用するために実行される。命令は、４−ｗａｙ並列化となるやり方で使用され、Ｂ＆Ｔ変形例は独立的であり、結果として有利にスケジューリングすることができる。加えて、同時的に処理することが可能な２つのキャリー・チェーンがある。１つのキャリー・チェーンは、１０行目で始まり、もう１つは１２行目で始まる。「Ｂ」変形例についての第１のキャリー・チェーンを、１４、１８及び２６行目の命令を通じて追跡することができる。第２のキャリー・チェーンは１６、２０、及び２９行目の命令を通じて追跡することができる。「Ｔ」変形例について同様のチェーンが存在する。３２、３３行目の命令は、以前に独立的であったキャリー・チェーンをマージしつつ、同時に最後の部分積（ａ１×ｂ３（Ｈ））を累算器に加算するために使用される。
【００６７】
図９、及び図１０Ａ〜図１０Ｉは、ベクトル・キャリー付き加算命令の使用の別の実例を示している。図９は、大きな整数の乗算のための、乗算のＫａｒａｔｓｕｂａツリーの一部であり得る大きな乗算の単一リムを表現している乗算｛ａ３，ａ２，ａ１，ａ０｝×ｂｉの部分積の加算を実施するための、ＡＤＣＬＢ命令の、実例の命令シーケンスを示している。図９において、部分積は既に生成されベクトル・レジスタＰ０ｉｌｏ、Ｐ１ｉｌｏ、・・・Ｐ３ｉｈｉに格納されていると仮定している（ここで、Ｐｊｉｌｏ及びＰｊｉｈｉは、ａｊ及びｂｉの積の下半分及び上半分を表す）。ＡｃｃＢ［ｉ］からＡｃｃＢ［ｉ＋４］は、それぞれ列０〜４で示される積｛ａ３，ａ２，ａ１，ａ０｝×ｂｉの５つの部分を格納するための５つの累算器レジスタを表している。ベクトル・レーンのそれぞれの対は、他のベクトル・レーンと比較して様々な入力値に適用される全く独立的な計算を表している−したがって、図７に示されるタイプの所与の計算に必要とされる部分積の加算のそれぞれは、図９の命令のシーケンスによって単一のレーンの対の中で実施される（例えば、レーンのそれぞれの対での計算はＫａｒａｔｓｕｂａツリーの異なるノードに対応する）。簡潔にするために、図１０Ａ〜図１０Ｉは、ベクトルの偶数レーンに作用するＡＤＣＬＢ命令のみを示しており、示されていない対応するＡＤＣＬＴ命令は奇数レーンに作用するよう実行することができる。明瞭さのために、２つの独立的なキャリー・チェーンを、アスタリスク無しの第１のチェーンのキャリー（例えば、ＣＡｃｃＢｉ）、及びアスタリスク付きの第２のチェーンのキャリー（例えば、ＣＡｃｃＢｉ＊）を示すことによって区別する。
・図１０Ａ：ＡｃｃＢ［ｉ］は、列０の累算を表している。ＡｃｃＢ［ｉ］のそれぞれの要素ごとに、対の下部（偶数）要素が、ＡｃｃＢ［ｉ］の下部要素の以前の値、Ｐ０ｉｌｏの対応する要素の対の下部要素、及びキャリー入力としての０（これは結果の最下位部分であるため、下部の加算からのキャリーは必要ない）、の合計にセットされる。結果のこの部分については、結果の最下位部分にはさらなるキャリーをインジェクトすることができないため、加算結果は既に最後の結果値Ｒｅｓ［ｉ］を表している。加算からのキャリー出力ＣａｃｃＢｉは、ＡｃｃＢ［ｉ］の対の上部要素の最下位ビットに書き込まれ、列１の最下位ビットに等価な有意性を有するキャリー・ビットを表している。
・図１０Ｂ：ＡｃｃＢ［ｉ＋１］は、列１の累算を表している。ＡｃｃＢ［ｉ＋１］のそれぞれの要素ごとに、対の下部（偶数）要素が、ＡｃｃＢ［ｉ＋１］の下部要素の以前の値、Ｐ１ｉｌｏの対応する要素の対の下部要素、及びキャリー入力としてＣａｃｃＢｉ、の合計にセットされる。つまり、以前のＡＤＣＬＢ命令のデスティネーション・レジスタＡｃｃＢ［ｉ］が、次のＡＤＣＬＢ命令のキャリー・ソース・ベクトル・レジスタとして指定され、それによって、列０における以前の加算で生成されたキャリーＣａｃｃＢｉが、列１における加算についてのキャリー入力として入力される。列１の累算からのキャリー出力ＣａｃｃＢｉ＋１は、ＡｃｃＢ［ｉ＋１］におけるそれぞれの対の上部要素の最下位ビットに格納され、列２における累算の最下位ビットに適用されるキャリーを表している。
・図１０Ｃ：ＡｃｃＢ［ｉ＋２］は、列２の累算を表している。やはり、以前の命令についての結果ベクトルＡｃｃＢ［ｉ＋１］が、次の命令についてのキャリー・ソース・ベクトル・レジスタとなり、それによって、要素の対ごとに、列１において以前の加算によって生成されたキャリーＣａｃｃＢｉ＋１がＡｃｃＢ［ｉ＋１］における対応する対の上部要素から抽出され、ＡｃｃＢ［ｉ＋２］とＡｃｃＢ［ｉ＋２］の対の要素の下部に書き込まれるＰ２ｉｌｏとの累算に加算され、得られるキャリー出力ＣａｃｃＢｉ＋２がＡｃｃＢ［ｉ＋２］の要素のそれぞれの対の上部要素に格納される。
・図１０Ｄ：この命令は、図１０Ａ〜図１０Ｃを通じて取られたキャリーのチェーンとは無関係に、第２のキャリー・チェーンの開始に印をつけている。この命令は、部分積Ｐ０ｉｈｉを図１０Ｂから得られるＡｃｃＢ［ｉ＋１］への列１における加算を表している。ＡｃｃＢ［ｉ＋１］の奇数要素のキャリー値は図１０Ｃにおいて既に消費されているため、ＡｃｃＢ［ｉ＋１］の偶数要素とＰ０ｉｈｉの偶数要素とのそれぞれの加算から得られる新しいキャリー値ＣａｃｃＢｉ＋１＊によって、奇数要素において上書きすることができる。
・図１０Ｅ：この命令は、第１のキャリー・チェーンの一部であり、図１０Ｃからのキャリー出力ＣａｃｃＢｉ＋２（ＡｃｃＢ［ｉ＋２］における要素のそれぞれの対の上部要素に格納された）を、ＡｃｃＢ［ｉ＋３］における要素のそれぞれの対の下部要素とＰ３ｉｌｏ（列３における加算を表している）との加算へのキャリー入力として使用する。得られるキャリー出力ＣａｃｃＢｉ＋２は、ＡｃｃＢ［ｉ＋３］における要素のそれぞれの対の上部要素に格納される。
・図１０Ｆ：第２のキャリー・チェーンにおいて、この命令は図１０Ｄからのキャリー出力ＣａｃｃＢｉ＋１＊（列２の最下位ビットに等価なビット有意性を有する）を、列２におけるＡｃｃＢ［ｉ＋２］とＰ１ｉｈｉとの加算へのキャリー入力として使用する。
・図１０Ｇ：第１のキャリー・チェーンにおいて、この命令は偶数レーンにおけるＡｃｃＢ［ｉ＋４］とＰ３ｉｈｉとのベクトル加算を実施し、それぞれの加算についてのキャリー入力は、ＡｃｃＢ［ｉ＋３］の奇数レーン由来である（図１０Ｅから得られる）。命令は、個々の加算のキャリー出力をＡｃｃＢ［ｉ＋４］の奇数要素の最下位ビットにさらに書き込むことができるが、この累算は結果の最上位部分を表しているため、実際にはこれらのキャリーはどの後続命令にも必要とされない。
・図１０Ｈ：第２のキャリー・チェーンにおいて、この命令は偶数レーンにおけるＡｃｃＢ［ｉ＋３］とＰ２ｉｈｉとのベクトル加算を実施し、それぞれの加算についてのキャリー入力ＣａｃｃＢｉ＋２＊は、ＡｃｃＢ［ｉ＋２］の奇数レーン由来である（図１０Ｆから得られる）。
・図１０Ｉ：最後に、第２のキャリー・チェーンにおいて、この命令はＡｃｃＢ［ｉ＋４］の偶数レーンとゼロ化されたデータ・ソース・レジスタとのベクトル加算を実施する（最上位列に加算される部分積は１つしかないため、第２のデータ入力はゼロであり、これは既に図１０Ｇの命令によって加算されている）。それぞれの加算についてのキャリー入力ＣａｃｃＢｉ＋２＊は、ＡｃｃＢ［ｉ＋３］の奇数レーン由来である（図１０Ｇから得られる）。それぞれの加算の結果は、累算器レジスタＡｃｃＢ［ｉ＋４］の偶数レーンに書き込まれる。やはり、命令の通常の挙動の一部として、奇数レーンにはそれぞれの加算のキャリー出力が書き込まれ、これらのキャリーはいかなるさらなる命令でも必要とされない。
したがって、この実例は、ＡＤＣＬＢ命令が、乗算の部分積の加算についてのキャリー情報をデータ結果それ自体と共に、どのように効率的に移送させ、２の乗数ビットの要素を有する入力ベクトル（例えば、Ｐ０ｉｌｏからＰ３ｉｈｉ）に適用されるそのような乗算の効率的な計算を可能にすることができるか、それによって、加算を実施する前に、ベクトル乗算命令の結果のアンパックが必要とならないこと、を示している。これは、例えば、Ｋａｒａｔｓｕｂａアルゴリズムを使用して長整数の乗算を伴う計算のパフォーマンスを向上させる。
【００６８】
図１１は、キャリー付き加算命令を実装する代替的な方法を示している。ベクトル・レジスタの交互の要素からキャリー入力を取る代わりに、キャリー入力は、プレディケート・レジスタ・ファイル１６からの入力プレディケート・レジスタＰｍの対応するプレディケート・フィールドから取得される。同様に、キャリー出力がデスティネーション・プレディケート・レジスタＰｄ２の対応するプレディケート・フィールドに書き込まれる。この手法では、１要素おきにキャリーを表現する必要がないため、ベクトルを実データ値で完全に占有することができる。したがって、８要素のベクトルでは、同一の命令に応答して８つの別個の累算が実施されることになる。結果ベクトルＺｄａ１は、それぞれの要素を、その要素の以前の値とデータ・ソース・ベクトルＺｎの対応する要素との合計又は差分にセットされている。加算用のキャリー入力は、入力プレディケート・レジスタＰｍの対応するプレディケート・フィールドから抽出され、加算からのキャリー出力は、出力プレディケート・レジスタＰｄ２の対応するプレディケート・フィールドに書き込まれる。やはり、キャリー入力／出力がキャリー又はボローの情報を表現することができるように、図３及び図４で示されるような加算及び減算の変形例を提供することができる（ボローは、次の最上位桁からの差し引きを表しているが、キャリーは次の最上位桁への加算を表すことができる−つまり、ボローは−１のキャリーである）。
【００６９】
図１１で示される手法がより密にパックされるベクトル・レジスタ・ファイルをもたらすことができ、ひいては半分の数の命令で累算を実施することを可能とする一方で（例えば、ソース・データ・ベクトルのすべての要素を１命令で処理することができるため、別個のＡＤＣＬＢ及びＡＤＣＬＴ命令の必要がない）、ベクトル・レジスタ・ファイルへの書き込みに加え、命令によりプレディケート・レジスタ・ファイルへのさらなる書き込みが必要とされるため、マイクロ・アーキテクチャのより複雑な修正を必要とすることがあり、これは多くのベクトルのマイクロ・アーキテクチャには珍しいことであろう。したがって、図３及び図４、又は図１１の手法が取られるかどうかは、ソフトウェアの効率と、ハードウェアのマイクロ・アーキテクチャの効率とのトレードオフ次第となり得る。
【００７０】
図１２は、キャリー付き加算命令のプレディケートの形態の処理を図示する流れ図を示している。ステップ１００において、そのようなベクトル・キャリー付き加算命令に遭遇したかどうか検出され、検出されていない場合、命令デコーダ６は、検出されたタイプの命令によって表現される他の演算を実施するよう処理回路４を制御する。命令が、ベクトル・キャリー付き加算命令である場合、ステップ１０２において、命令が加算か、又は減算の変形例かどうか検出される。キャリー情報を別個のプレディケート・レジスタに移動することにより、この命令については第１及び第２の（上部又は下部）変形例がなく、キャリー用に要素の半分を予約することは必須ではなく、そのため単一の命令でデータ・ソース・レジスタの要素のすべてに対して作用することが可能であることに留意されたい。
【００７１】
ベクトル・キャリー付き加算命令が、加算の変形例である場合、ステップ１０４において、デスティネーション・レジスタＺｄａ１（ｉ）’のそれぞれの要素ｉの新しい値が、そのデータ要素Ｚｄａ１（ｉ）の以前の値と、データ・ソース・ベクトル・レジスタＺｎ（ｉ）の対応するデータ要素と、入力プレディケート・レジスタＰｍ（ｉ）の対応するプレディケート・フィールドｉから取られたキャリー入力との合計に等しくセットされる。やはり、出力プレディケート・レジスタＰｄ２（ｉ）の対応するプレディケート・フィールドが、加算からのキャリー出力に等しくセットされる。
【００７２】
命令が減算の変形例である場合、ステップ１０６において、デスティネーション・レジスタのそれぞれの要素Ｚｄａ１（ｉ）’は、その要素Ｚｄａ１（ｉ）の以前の値、引く、データ・ソース・レジスタの対応する要素Ｚｎ（ｉ）、引く、入力プレディケート・レジスタＰｍ（ｉ）の対応するプレディケート・フィールドによって示されるボロー値、に対応する新しい値にセットされる。やはり、出力プレディケート・レジスタの対応するプレディケート・フィールドＰｄ２（ｉ）が、減算のボロー出力に等しくセットされる。ステップ１０４、及びステップ１０６は、個々の要素位置ごとに別個に実施されることを了解されたい（つまり、ｉ＝０…Ｎ−１、ここでＮはベクトル内の要素の総数である）。
【００７３】
図１１及び図１２が、同一のレジスタＺｄａ１がデスティネーション・ベクトル・レジスタ及び第１のソース・ベクトル・レジスタの両方として機能する実例を示している一方で、やはり、第１のソース・ベクトル・レジスタとして別個のレジスタが指定される非破壊的な変形例を与えることも可能である。
【００７４】
図１１に示されるキャリー付き加算命令のプレディケートされた変形例を、さらに提供することができ、図２で示されたのと類似の方法で要素ごとにプレディケーションが適用される。
【００７５】
図１３は使用され得るシミュレータの実装形態を図示している。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェア・ベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティング・システム２２０を実行させ、シミュレータ・プログラム２１０をサポートする、ホスト・プロセッサ２３０上で実行することができる。いくつかの配置構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び／又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略は「Ｓｏｍｅ  Ｅｆｆｉｃｉｅｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｉｍｕｌａｔｉｏｎ  Ｔｅｃｈｎｉｑｕｅｓ」、Ｒｏｂｅｒｔ  Ｂｅｄｉｃｈｅｋ、Ｗｉｎｔｅｒ  １９９０  ＵＳＥＮＩＸ  Ｃｏｎｆｅｒｅｎｃｅ、５３〜６３頁に示されている。
【００７６】
実施例が特定のハードウェア構築物又は特徴を参照して以前に説明されてきた範囲で、シミュレートされる実施例において等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の１つ又は複数がホスト・ハードウェアに存在する配置構成（例えば、ホスト・プロセッサ２３０）において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
【００７７】
シミュレータ・プログラム２１０はコンピュータ可読記憶媒体（非一時的媒体であってもよい）に記憶することができ、ターゲット・コード２００（アプリケーション、オペレーティング・システム、及びハイパーバイザを含み得る）にプログラム・インターフェース（命令実行環境）を提供するが、ターゲット・コード２００はシミュレータ・プログラム２１０によってモデリングされるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、ターゲット・コード２００のプログラム命令は、命令実行環境内からシミュレータ・プログラム２１０を使用して実行することができ、それによって、上で議論した装置２のハードウェア特徴を実際には有していないホスト・コンピュータ２３０がこれらの特徴をエミュレートすることができる。例えば、シミュレータ・プログラム２１０は、機能性においてそれぞれ命令デコーダ６、処理回路４、及びレジスタ１０に相当する、命令デコード・プログラム・ロジック２１２、処理プログラム・ロジック２１４、及びレジスタ・データ構造２１６を含むことができる。例えば、デコード・プログラム・ロジック２１２は、ターゲット・コード２００の命令の命令エンコードをチェックするためのシミュレータ・プログラム２１０の一連の「ｉｆ」ステートメントを含み、演算を実施するかどうか判断することができ、また処理プログラム・ロジック２１４は、特定の命令についてアクティベートされる「ｔｈｅｎ」ルーチンに対応し、それらをホスト・オペレーティング・システム２２０によって実行される対応する命令にマッピングすることができる。レジスタ・データ構造２１６は、シミュレータ・プログラム２１０によってシミュレートされている被シミュレート装置２のレジスタをエミュレートするために割り当てられるメモリの領域を含むことができる。
【００７８】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【００７９】
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。
【図１】
2021507348.tif 000004
【図２】
2021507348.tif 000005
【図３】
2021507348.tif 000006
【図４】
2021507348.tif 000007
【図４Ａ】
2021507348.tif 000008
【図５】
2021507348.tif 000009
【図６】
2021507348.tif 000010
【図７】
2021507348.tif 000011
【図８】
2021507348.tif 000012
【図９】
2021507348.tif 000013
【図１０Ａ】
2021507348.tif 000014
【図１０Ｂ】
2021507348.tif 000015
【図１０Ｃ】
2021507348.tif 000016
【図１０Ｄ】
2021507348.tif 000017
【図１０Ｅ】
2021507348.tif 000018
【図１０Ｆ】
2021507348.tif 000019
【図１０Ｇ】
2021507348.tif 000020
【図１０Ｈ】
2021507348.tif 000021
【図１０Ｉ】
2021507348.tif 000022
【図１１】
2021507348.tif 000023
【図１２】
2021507348.tif 000024
【図１３】
2021507348.tif 000025
【国際調査報告】
2021507348.tif 000026
2021507348.tif 000027