(54)【発明の名称】終端文字を有する文字データのメモリ位置間でのコピーのための方法、システム、およびコンピュータ・プログラム(終端文字を有する文字データのメモリ位置間でのコピー)
(58)【調査した分野】(Int.Cl.,DB名)
前記カウントと前記終端値とを比較するステップは、前記終端値が前記カウントの値よりも大きいことに基づいて追加のデータがコピーされることを示す、請求項2に記載の方法。
前記カウントを取得するステップは、前記カウントを計算するために、前記メモリのブロック内の開始アドレスおよび前記メモリのブロックの境界を使用するステップを含む、請求項1〜3のいずれか一項に記載の方法。
前記カウントを取得するステップは、Load to Count Block Boundary命令を使用するステップを含む、請求項1〜4のいずれか一項に記載の方法。
前記レジスタにロードされることになる前記データは複数のデータの単位を含み、前記ロードするステップは、前記複数のデータの単位を前記レジスタ内に並列にロードするステップを含み、前記ロードするステップは、前記メモリのブロックの境界を横切ることなく実行される、請求項1〜5のいずれか一項に記載の方法。
前記ロードするステップは、Vector Load to Block Boundary命令によって実行され、前記メモリのブロックは、前記Vector Load to Block Boundary命令によって指定されるか、または前記Vector Load to Block Boundary命令を実行するプロセッサによって動的に決定されるかの、いずれか一方である、請求項1〜6のいずれか一項に記載の方法。
前記終端値を決定するステップは、Vector Find Element Not Equal命令を使用するステップを含み、前記位置は前記レジスタ内のバイト・インデックスを含む、請求項1〜7のいずれか一項に記載の方法。
命令の長さを決定するためにコンピュータ・コードを取得するステップをさらに含み、前記コンピュータ・コードは、前記ロードするステップを実行するためのVector Load to Block Boundary命令、前記カウントを取得するためのLoad Count to Block Boundary命令、および前記終端値を決定するためのVector Find Element Not Equal命令を含む、請求項1に記載の方法。
【発明を実施するための形態】
【0011】
本発明の態様によれば、任意の言語のアルファベット文字、数字、句読点、または他の記号、あるいはそれらすべてを含むが、それらに限定されない、文字データの処理を容易にするための機能が提供される。文字データは、データの文字列であるかまたはない場合がある。文字データに関連付けられる標準の例は、ASCII(American Standard Code forInformation Interchange)、UTF(Unicode Transformation Format)8を含むがこれに限定されないユニコード、UTF16などを含むが、これらに限定されない。
【0012】
一態様において、終端文字データ・セット(たとえば文字のヌル終端文字列)の文字を、並列処理を使用し、保証されていない例外を発生させることなく、1つのメモリ位置から別のメモリ位置へコピーするための技法が提供される。コピーされる文字データは、1つまたは複数のレジスタ内にロードされる。特に、一実施形態において、ベクトル・レジスタ内のデータを指定された境界に並列にロードし、ロードされた文字数を決定するための方法を提供する、命令(たとえば、Vector Load to Block Boundary命令)が使用される。一実施形態において、ロードされた文字数(カウント)を決定するために、別の命令(たとえば、Load Count to Block Boundary命令)が使用される。さらに、第1の区切り文字のインデックス、すなわち文字データ内のゼロまたはヌル文字などの第1の終端文字を見つけるための、命令(たとえば、Vector Find Element Not Equal命令)が使用される。この命令は、複数バイトのデータを並列にチェックする。これらの命令を使用することによって、文字データは最小数の分岐命令を使用してコピーされる。さらに、偽の例外を防ぎながら、文字データの高速並列コピーが提供される。
【0013】
本明細書で説明するように、ベクトル・レジスタ(別名、ベクトル)の要素は、例として長さが1、2、または4バイトであり、ベクトル・オペランドは、たとえば複数の要素を有するSIMD(単一命令複数データ)オペランドである。他の実施形態において、要素は他のサイズとすることが可能であり、ベクトル・オペランドはSIMDである必要がないか、または、1つの要素を含む可能性がある、あるいはその両方である。
【0014】
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態を、
図1を参照しながら説明する。コンピューティング環境100は、たとえば、たとえば1つまたは複数のバス108または他の接続あるいはその両方を介して互いに結合された、プロセッサ102(たとえば中央処理ユニット)、メモリ104(たとえば主メモリ)、および、1つまたは複数の入力/出力(I/O)デバイスまたはインターフェースあるいはその両方106を含む。
【0015】
一例において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるz/Architectureに基づき、同様にインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供され、z/Architectureを実装する、System zサーバなどのサーバの一部である。z/Architectureの一実施形態は、2010年8月IBM(R)出版の「z/Architecture Principles of Operation」と題するIBM(R)Publication No.SA22-7832-08、第9版に記載されている。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供される、z/OSなどのオペレーティング・システムを実行する。IBM(R)、Z/ARCHITECTURE(R)、およびZ/OS(R)は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名前は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標、または製品名とすることができる。
【0016】
他の実施形態において、プロセッサ102はインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるPower Architectureに基づいている。Power Architectureの一実施形態は、2010年7月23日インターナショナル・ビジネス・マシーンズ・コーポレーションによる「Power ISA(TM)Version 2.06 RevisionB」に記載されている。POWER ARCHITECTURE(R)は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【0017】
さらに他の実施形態において、プロセッサ102は、Intel Corporationによって提供されるIntelアーキテクチャに基づいている。Intelアーキテクチャの一実施形態は、2011年12月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, A-L」Order Number 253666-041US、および、2011年12月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, M-Z」Order Number 253667-041USに記載されている。Intel(R)は、カリフォルニア州サンタクララのIntel Corporationの登録商標である。
【0018】
本発明の1つまたは複数の態様を組み込んで使用するための、コンピューティング環境の別の実施形態を、
図2を参照しながら説明する。この例において、コンピューティング環境200は、たとえば、たとえば1つまたは複数のバスまたは他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理ユニット202、メモリ204、および、1つまたは複数の入力/出力デバイスまたはインターフェースあるいはその両方206を含む。例として、コンピューティング環境200は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるPowerPCプロセッサ、pSeriesサーバ、またはxSeriesサーバ;カリフォルニア州パロアルトのHewlett Packard Co.,によって提供されるIntel Itanium IIプロセッサを備えるHP Superdome;または、インターナショナル・ビジネス・マシーンズ・コーポレーション、Hewlett Packard、Intel、Oracle、またはその他によって提供されるアーキテクチャに基づく他のマシン、あるいはそれらすべてを、含むことができる。
【0019】
ネイティブ中央処理ユニット202は、環境内の処理中に使用される、1つまたは複数の汎用レジスタ、または、1つまたは複数の特定用途向けレジスタ、あるいはその両方などの、1つまたは複数のネイティブ・レジスタ210を含む。これらのレジスタは、任意の特定時点での環境の状態を表す情報を含む。
【0020】
さらに、ネイティブ中央処理ユニット202は、メモリ204に記憶された命令およびコードを実行する。特定の一例において、中央処理ユニットは、メモリ204に記憶されたエミュレータ・コード212を実行する。このコードは、1つのアーキテクチャ内に構成された処理環境が、別のアーキテクチャをエミュレートできるようにするものである。たとえばエミュレータ・コード212は、PowerPCプロセッサ、pSeriesサーバ、xSeriesサーバ、HP Superdomeサーバ、またはその他などの、z/Architecture以外のアーキテクチャに基づいて、マシンがz/Architectureをエミュレートすること、ならびに、z/Architectureに基づいて開発されたソフトウェアおよび命令を実行することを、可能にする。
【0021】
エミュレータ・コード212に関する詳細を、
図3を参照しながら説明する。ゲスト命令250は、ネイティブCPU202のそれ以外のアーキテクチャ内で実行されるように開発されたソフトウェア命令(たとえばマシン命令)を含む。たとえばゲスト命令250は、z/Architectureプロセッサ102上で実行するように設計されることが可能であるが、その代わりに、たとえばIntel Itanium IIプロセッサとすることが可能なネイティブCPU202上でエミュレートされている。一例において、エミュレータ・コード212は、メモリ204から1つまたは複数のゲスト命令250を取得するため、およびオプションで、取得された命令のためにローカル・バッファリングを提供するための、命令フェッチ・ユニット252を含む。さらに、取得されたゲスト命令のタイプを決定するため、および、ゲスト命令を1つまたは複数の対応するネイティブ命令256に変換するための、命令変換ルーチン254も含む。この変換は、たとえばゲスト命令によって実行される機能を識別すること、および、その機能を実行するためのネイティブ命令を選択することを含む。
【0022】
さらにエミュレータ212は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、以前に取得された1つまたは複数のゲスト命令をエミュレートし、こうした実行の終わりに、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために命令フェッチ・ルーチンに制御を戻す、ネイティブ命令のルーチンを、ネイティブCPU202に実行させることができる。ネイティブ命令256の実行は、メモリ204からレジスタ内へデータをロードすること、レジスタからメモリへデータを戻して記憶すること、あるいは、何らかのタイプの算術または論理演算を実行することを、含むことができる。
【0023】
各ルーチンは、たとえばメモリに記憶され、ネイティブ中央処理ユニット202によって実行される、ソフトウェア内に実装される。他の例において、ルーチンまたは演算のうちの1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組み合わせで実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ210を使用して、またはメモリ204内の位置を使用することによって、エミュレートすることができる。実施形態において、ゲスト命令250、ネイティブ命令256、およびエミュレータ・コード212は、同じメモリ内に常駐するか、または異なるメモリ・デバイス間に分配されることが可能である。
【0024】
本明細書で使用される場合、ファームウェアは、たとえばプロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはそれらすべてを含む。これはたとえば、ハードウェアレベル命令、または、より高レベルのマシン・コードの実装で使用されるデータ構造、あるいはその両方を含む。一実施形態において、これはたとえば、典型的には、基礎をなすハードウェアに特有の信頼されるソフトウェアまたはマイクロコードを含み、オペレーティング・システムのシステム・ハードウェアへのアクセスを制御する、マイクロコードとして送達される、プロプライエタリ・コード(proprietary code)を含む。
【0025】
一例において、取得、変換、および実行されるゲスト命令250は、本明細書で説明する命令のうちの1つまたは複数である。1つのアーキテクチャ(たとえばz/Architecture)の命令は、メモリからフェッチされ、別のアーキテクチャ(たとえばPowerPC、pSeries、xSeries、Intelなど)のネイティブ命令256のシーケンスとして変換および表される。その後、これらのネイティブ命令は実行される。
【0026】
一実施形態において、本明細書で説明される様々な命令は、本発明の態様に従って提供されるベクトル機構の一部である、ベクトル命令である。ベクトル機構は、たとえば、1から16までの要素の固定サイズのベクトルを提供する。各ベクトルは、機構内に定義されたベクトル命令によってその上で動作されるデータを含む。一実施形態において、ベクトルが複数の要素で構成される場合、各要素は他の要素と共に並列に処理される。命令の完了は、すべての要素の処理が完了するまで発生しない。
【0027】
本明細書で説明されるように、ベクトル命令は、z/Architecture、Power、Intelなどを含むがこれらに限定されない、様々なアーキテクチャの一部として実装可能である。本明細書で説明される実施形態はz/Architectureに関するものであるが、ベクトル命令および本発明の1つまたは複数の態様は、多くの他のアーキテクチャに基づくものとすることができる。z/Architectureは単なる一例である。
【0028】
ベクトル機構がベクトル・レジスタおよび命令を使用するためにz/Architectureの一部として実装される、一実施形態において、指定された制御レジスタ(たとえば制御レジスタ0)内のベクトル使用可能性制御およびレジスタ制御は、たとえば1に設定される。ベクトル機構がインストールされ、ベクトル命令が使用可能性制御設定なしで実行される場合、データ例外が認識される。ベクトル機構がインストールされず、ベクトル命令が実行された場合、演算例外が認識される。
【0029】
ベクトル・データは、たとえば他のデータ形式と同じ左から右へのシーケンスで、ストレージ内に現れる。0〜7と番号付けされたデータ形式のビットは、ストレージ内の最も左の(最も低い番号が付けられた)バイト位置内にバイトを構成し、ビット8〜15は、次の順次シーケンス内にバイトを形成する、と言う具合である。他の例において、ベクトル・データは、右から左などの別のシーケンスで、ストレージ内に現れることができる。
【0030】
ベクトル機構が提供されたベクトル命令の多くは、指定されたビットのフィールドを有する。このフィールドはレジスタ拡張ビットまたはRXBと呼ばれ、ベクトル・レジスタ指定オペランドのそれぞれについて、最上位ビットを含む。命令によって指定されていないレジスタ指定に関するビットは、予約され、ゼロに設定される。
【0031】
一例において、RXBフィールドは4ビット(たとえばビット0〜3)を含み、ビットは以下のように定義される。
【0032】
0−命令の第1のベクトル・レジスタ指定に関する最上位ビット。
1−あれば、命令の第2のベクトル・レジスタ指定に関する最上位ビット。
2−あれば、命令の第3のベクトル・レジスタ指定に関する最上位ビット。
3−あれば、命令の第4のベクトル・レジスタ指定に関する最上位ビット。
【0033】
各ビットは、たとえばレジスタ数に応じて、アセンブラにより0または1に設定される。たとえばレジスタ0〜15の場合、ビットは0に設定され、レジスタ16〜31の場合、ビットは1に設定される、などである。
【0034】
一実施形態において、各RXBビットは、1つまたは複数のベクトル・レジスタを含む命令内の特定の位置に関する拡張ビットである。たとえば1つまたは複数のベクトル命令において、RXBのビット0は、たとえばV
1に割り当てられた位置8〜11に対する拡張ビットであり、RXBのビット1は、たとえばV
2に割り当てられた位置12〜15に対する拡張ビットである、と言う具合である。
【0035】
他の実施形態において、RXBフィールドは追加のビットを含み、複数のビットが各ベクトルまたは位置に関する拡張として使用される。
【0036】
本明細書で説明されるように、終端文字列からのデータなどの文字データを1つのメモリ位置から別のメモリ位置にコピーするために、本発明の態様に従って、様々な命令が使用される。コピーに関連付けられた処理および使用される様々な命令について、以下でより詳細に説明する。
【0037】
初めに
図4を参照すると、一実施形態において、ヌル終端文字列などの終端文字データをコピーするために、ステップ300で、たとえばVector Load to Block Boundary命令を使用して、コピーされる文字データ・セットの少なくとも一部がベクトル・レジスタにロードされる。この命令は、たとえば16バイトまでのデータを、データのロード元である主メモリの指定された境界を横切ることなく、並列にロードする。この命令に関する詳細を、以下で説明する。
【0038】
その後、以下で説明するように、ステップ302で、ロードされたデータのバイト数が、たとえばLoad Count to Block Boundary命令を使用して決定される。
【0039】
次に、ステップ304で、文字データの終わり(たとえばヌルまたはゼロ)の検索が実行される。一例では、以下で説明する、Vector Find Element Not Equal命令を使用して、終端文字(たとえばヌル、ゼロ、または別の終端文字)について、ロードされたレジスタが検索される。この命令は、一例では、ゼロ要素(たとえば要素全体がゼロである)とも呼ばれるヌル要素について、ロードされたベクトル・レジスタを検索する。ヌルまたはゼロ要素とは、文字データの終端、たとえばデータの特定の文字列の終わりを示す。検索の結果は、本明細書では終端文字と呼ばれる、第1のヌル要素のインデックス(たとえばバイト・インデックス)、または、終端文字が見つからない場合、検索されているベクトルのサイズなどの事前に指定された値である。
【0040】
その後、照会306で、終端文字が見つかったかどうかが判別される。Vector Find Element Not Equal命令によって終端文字が見つかった場合、照会308で、ロードされた文字数(たとえば、Load Count to Block Boundary命令から決定される)がベクトルのサイズ、たとえば16未満であるかどうかがさらに判別される。ベクトルのサイズ未満でない場合、ステップ310で、ロードされた文字はメモリの指定位置に記憶される。さらに、ステップ312で、メモリ内でデータの記憶を続行するための位置を提供することになるインデックスが、ベクトル・サイズの分だけ増分される。すなわち、記憶される追加のデータが以前のデータに付け加えられることになる。たとえば、追加データに関する開始アドレスは、第1の文字が記憶された指定位置から16バイト(またはベクトル・サイズに応じて他のサイズ)となる。ステップ300で処理は続行する。
【0041】
照会308に戻り、ロードされたバイト数がベクトル・サイズより大きいかまたは等しい場合、ステップ314で、境界までロードされたベクトルのバイトは、これが論理を介する初回であるかまたは後続の反復であるかに応じて、指定位置またはそこからのオフセットのいずれかで、メモリ内に記憶される。さらにステップ316で、(次の文字セットが、このデータが記憶された場所から次の順次メモリ位置で記憶されるように)境界に対してメモリ・アドレスが増分され、ステップ300で処理は続行する。
【0042】
照会306に戻り、ロードされたベクトル内に終端文字が見つかった場合、照会318で、(Vector Find Element Not Equal命令によって提供される)終端文字のインデックスが、(Load Count to Block Boundary命令から判別された)ロードされたバイト数より少ないかまたは等しいかどうかが、さらに判別される。少ないかまたは等しい場合、ステップ320で、ロードされたバイト数がメモリに記憶され、それ以上のデータは記憶されない。文字データのセットは、1つのメモリ位置から別のメモリ位置にコピーされている。そうでない場合、ステップ314で処理は続行する。
【0043】
如何に、終端文字列をコピーするために使用される、例示の擬似コードを示す。
【0045】
上記に示されるように、初期に、たとえばRXとRXとの間でXORを実行し、その結果をRX内に配置することによって、レジスタRXはゼロに初期設定される。その後、16バイトまでのデータがレジスタVSTRにロードされるループが開始する。次に、VSTR内で終端文字の検索が実行され、その結果が変数VPOS内に配置される。さらに、VSTR内にロードされたバイト数のカウントが決定され、変数GLEN内に配置される。
【0046】
その後、終端文字のインデックスがVPOSから抽出され、GPOS内に配置される。終端文字が見つかった場合、文字列の終わり(EOS)の処理に進む。見つからない場合、カウントがベクトル・サイズと比較され、ベクトル・サイズより小さい場合、ページの終わり(EOP)の処理が実行される。小さくない場合、ロードされたベクトルのデータは別のメモリ位置に記憶され、インデックス・ポインタRXはベクトルのサイズ、たとえば16だけ増分され、処理はループする。
【0047】
EOP処理で、データを記憶する場所の現行値を取得するために、基本レジスタにインデックスが追加され、その位置にデータが記憶される。その後、記憶されたバイト数によってインデックスが更新される。
【0048】
EOSについて、終端インデックスがカウントより少ないかまたは等しいかどうかを判別するために、比較が行われる。少なくないかまたは等しくない場合、ページの終わりでロードされ、検出されたゼロは予測されていないデータにおけるゼロであるため、ページの終わりの処理にループする。少ないかまたは等しい場合、ポインタを増分し、終端文字までメモリにバイトを書き出す。これで処理は完了する。
【0049】
他の実施形態において、カウントと16との比較は実行されず、代わりに、LCBBからの条件コードはカウントが16未満であるかどうかを示す。
【0050】
文字列のコピー元である主メモリ400の一例が、
図5に示されている。図に示されるように、この主メモリは「Hello World!」の文字データを含み、たとえばメモリ位置0X6FF3にある。コピーの一部として、主メモリからの文字データは1つまたは複数のベクトル・レジスタ内にロードされる。データのロード時に横切られない主メモリの境界は、縦の破線402で示されている。このデータはベクトル・レジスタ420内にロードされ、その例が
図6に示されている。
【0051】
データのコピー元であり、ベクトル・レジスタがロードされた、主メモリ450の別の例が、
図7に示されている。図に示されるように、このメモリは「Hello World!」の文字データを含み、たとえばメモリ位置0X6FF6にある。データのロード時に横切られないメモリの境界は縦の破線452で示されており、文字データの終わりよりも前である。したがって、その例が
図8に示されるように、境界までの文字データが第1にベクトル・レジスタ470にロードされ、次に
図9に示されるように、残りのデータがベクトル・レジスタ490にロードされる。
【0052】
上記で示されるように、一実施形態において、ヌル終端文字列などの終端文字データを1つのメモリ位置から別のメモリ位置にコピーするために、様々な命令が使用される。これらの命令の例を、以下で詳細に説明する。
【0053】
ベクトル・レジスタにロードするために使用される1つの命令が、Vector Load to Block Boundary(VLBB)命令であり、その例を、
図10を参照しながら説明する。一例において、Vector Load to Block Boundary命令500は、Vector Load to Block Boundary動作を示す命令コード502a(たとえばビット0〜7)、502b(たとえばビット40〜47)、ベクトル・レジスタ(V
1)を指定するために使用されるベクトル・レジスタ・フィールド504(たとえばビット8〜11)、インデックス・フィールド(X
2)506(たとえばビット12〜15)、基本フィールド(B
2)508(たとえばビット16〜19)、変位フィールド(D
2)510(たとえばビット20〜31)、マスク・フィールド(M
3)512(たとえばビット32〜35)、およびRXBフィールド514(たとえばビット36〜39)を含む。一例において、フィールド504〜514はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【0054】
一例において、命令コード・フィールド502aによって指定される命令コードの選択されたビット(たとえば最初の2つのビット)は、命令の長さおよび形式を指定する。この特定の例において、長さは3つのハーフワードであり、形式は、拡張命令フィールドを伴うベクトル・レジスタおよびインデックス・ストレージ動作である。ベクトル(V)フィールドならびにRXBによって指定されるその対応する拡張ビットは、ベクトル・レジスタを指定する。特にベクトル・レジスタの場合、オペランドを含むレジスタは、たとえば、最上位ビットとしてのレジスタ拡張ビット(RXB)の追加を伴う、レジスタ・フィールドの4ビット・フィールドを使用して指定される。たとえば、4ビット・フィールドが0110であり、拡張ビットが0である場合、5ビット・フィールド00110はレジスタ数6を示す。
【0055】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、V
1に関連付けられた下付き数字1は第1のオペランドを示す、と言う具合である。レジスタ・オペランドは1レジスタ長さであり、これはたとえば128ビットである。
【0056】
一例において、ベクトル・レジスタおよびインデックス・ストレージ動作命令内で、X
2およびB
2のフィールドによって指定される汎用レジスタのコンテンツは、第2のオペランド・アドレスを形成するために、D
2フィールドのコンテンツに追加される。Vector Load to Block Boundary命令に関する変位D
2は、一例において、12ビットの符号なし整数として扱われる。
【0057】
一実施形態において、M
3フィールドは、ロードするためのブロック境界に関してCPUに信号送信するために使用される、コードを指定する。予約値が指定された場合、指定例外が認識される。例示のコードおよび対応する値は、以下の通りである。
【0059】
Vector Loadto Block Boundary(VLBB)命令の一実施形態の実行において、一実施形態中で左から右へと先行して(preceding)、(V
1フィールドならびに拡張ビットによって指定されたレジスタ内で指定された)第1のオペランドには、ゼロとインデックス付けされたバイト要素から始まり、第2のオペランドからのバイトがロードされる。第2のオペランドは、第2のオペランド・アドレス(開始アドレスとも呼ばれる)によって指定されるメモリ位置である。ロードはそのメモリ位置から開始され、以下で説明するように命令(またはプロセッサ)によって計算された終了アドレスまで続行される。境界条件に遭遇した場合、第1オペランドの残りがどのように扱われるかはモデルに依存する。アクセス例外は、ロードされていないバイトでは認識されない。一例において、ロードされていないバイトは予測不可能である。
【0060】
上記の例示の命令において、開始アドレスは、インデックス・レジスタ値(X
2)+基本レジスタ値(B
2)+変位(D
2)によって決定されるが、他の実施形態においては、単にいくつかの例として、レジスタ値、命令アドレス+命令テキスト指定オフセット、レジスタ値+変位、またはレジスタ値+インデックス・レジスタ値によって提供される。さらに一実施形態において、命令はRXBフィールドを含まない。代わりに、拡張は使用されないか、あるいは、拡張は命令外部の制御からなどの別の様式で提供されるか、または命令の別のフィールドの一部として提供される。
【0061】
Vector Loadto Block Boundary命令に関連付けられた処理の一実施形態の他の詳細を、
図11を参照しながら説明する。この例では、境界サイズは命令内に指定される。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【0062】
一実施形態において、初期にステップ600で境界マスク(BdyMask)が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ(BdySize)602の2の補数否定(2’s complement negation)が取られ、境界マスク604を作成する(たとえば、BdyMask=0−BdySize)。一例では境界サイズは命令(たとえばM
3フィールド)によって提供され、または別の例では、本明細書で説明するように、マシンによって決定される。
【0063】
その後、ステップ610で、ロードが開始されるメモリ内の位置を示す開始アドレスが計算される。例として、開始アドレス612は、レジスタ値、命令アドレス+命令テキスト指定オフセット、レジスタ値+変位、レジスタ値+インデックス・レジスタ値、またはレジスタ値+インデックス・レジスタ値+変位によって、提供することが可能である。本明細書で提供される命令において、開始アドレスは、X
2フィールド、B
2フィールド、およびD
2フィールドによって提供される。すなわち、X
2およびB
2によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにD
2によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【0064】
次に、ステップ620で、ロードを停止する箇所を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ602、開始アドレス612、ベクトル・サイズ(vec_size)614(たとえばバイト単位で、たとえば16)、および境界マスク604である。一例において、終了アドレス622は以下のように計算される。
【0065】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【0066】
その後、ステップ630で、インデックス付けされたバイト0から始まる第1のオペランド(すなわち指定されたベクトル・レジスタ)が、開始アドレスから始まり終了アドレスで終了するメモリからロードされる。これにより、指定されたメモリ境界を横切ることなく、可変数のバイトをメモリからベクトルにロードすることが可能である。たとえばメモリ境界が64バイトにあり、開始アドレスが58バイトである場合、バイト58〜64がベクトル・レジスタ内にロードされる。一例において、バイトは並列にロードされる。
【0067】
Vector Loadto Block Boundary命令に関連付けられた処理の別の実施形態を、
図12を参照しながら説明する。この実施形態において、境界サイズは命令によって指定されないが、代わりに、境界サイズは命令を実行するプロセッサによって動的に決定される。
【0068】
一実施形態において、初期にステップ650で、ロードが開始されるメモリ内の位置を示す開始アドレスが計算される。例のように、開始アドレス652は、レジスタ値、命令アドレス+命令テキスト指定オフセット、レジスタ値+変位、レジスタ値+インデックス・レジスタ値、またはレジスタ値+インデックス・レジスタ値+変位によって提供可能である。本明細書で提供される命令において、開始アドレスは、X
2フィールド、B
2フィールド、およびD
2フィールドによって提供される。すなわち、X
2およびB
2によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにD
2によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【0069】
その後、照会654で、境界が動的に決定されるかどうかが判別される。動的に決定されない場合、M
3フィールド内に指定された値が境界サイズ(BdySize)として使用される。そうでない場合、プロセッサはステップ656で、境界サイズを動的に決定する。たとえばM
3フィールドは、境界のタイプ(たとえばキャッシュ・ライン、ページなど)を指定し、このタイプおよびプロセッサの1つまたは複数の特徴(たとえばプロセッサに関するキャッシュ・ライン・サイズ、プロセッサに関するページ・サイズなど)に基づいて、プロセッサは境界を決定する。例として、タイプに基づいて、プロセッサは境界に固定サイズ(たとえば事前に定義されたプロセッサに関する固定キャッシュ・ラインまたはページ・サイズ)を使用するか、または、タイプに基づいてプロセッサは境界を決定する。たとえば、タイプがページ境界である場合、プロセッサは変換索引バッファ(TLB)内で開始アドレスを探索し、そこからページ境界を決定する。他の例も存在する。
【0070】
動的であるかまたは指定された命令によるかのいずれかでの境界サイズの決定に続き、ステップ660で、境界マスク(BdyMask)が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ(BdySize)658の2の補数否定が取られ、境界マスク662を作成する(たとえば、BdyMask=0−BdySize)。
【0071】
次に、ステップ670で、ロードを停止する箇所を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ658、開始アドレス652、ベクトル・サイズ(vec_size)664(たとえばバイト単位で、たとえば16)、および境界マスク662である。一例において、終了アドレス672は以下のように計算される。
【0072】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【0073】
その後、ステップ680で、インデックス付けされたバイト0から始まる第1のオペランド(すなわち指定されたベクトル・レジスタ)が、開始アドレスから始まり終了アドレスで終了するメモリからロードされる。これにより、指定されたメモリ境界を横切ることなく、可変数のバイトをメモリからベクトルにロードすることが可能である。上記に示したように、たとえばメモリ境界が64バイトにあり、開始アドレスが58バイトである場合、バイト58〜64がベクトル・レジスタ内にロードされる。一例において、バイトは並列にロードされる。
【0074】
Vector Loadto Block Boundary命令のいずれかの実施形態に従ってロードされるベクトル・レジスタの一例は、
図6に示されている。図に示されるように、
図5の縦の破線で指定された境界を超えてデータがロードされることはない。境界を超えた位置にはアクセス不可能であり、例外はない。特定の一実施形態において、ベクトルは左から右へロードされる。しかしながら他の実施形態では、右から左へロードすることが可能である。一実施形態において、左から右または右から左のベクトルの方向は、ランタイム時に提供される。たとえば命令は、例として、処理の方向が左から右または右から左のいずれかであることを示す、レジスタ、状況制御、または他のエンティティにアクセスする。一実施形態において、この方向制御は命令の一部としては符号化されないが、ランタイム時に命令に提供される。
【0075】
一例において、VectorLoad to Block Boundary命令は、主メモリ(本明細書では主ストレージとも呼ばれる)のブロック内にある第2のオペランドの対応するバイトと共に、ベクトル・レジスタのバイト(第1のオペランド)のみをロードする。主メモリのブロックは、命令内に指定される(たとえば、サイズならびにロードが開始されるブロック内のアドレスは命令内に指定される)か、または、ブロック境界のタイプ(たとえばキャッシュ・ラインまたはページ)、および、キャッシュ・ラインまたはページ・サイズなどの、命令を実行するプロセッサの1つまたは複数の特徴によって動的に決定される。本明細書で使用される場合、主メモリのブロックは、指定されたサイズのメモリの任意のブロックである。指定されたサイズはブロックの境界とも呼ばれ、境界はブロックの終わりである。
【0076】
ヌル・ターミネータなどの終端文字を見つけるために使用される1つの命令が、Vector Find Element Not Equal命令(VFBNEZ)であり、その例が
図13に示されている。この命令は、一実施形態において、不等性について複数のベクトルのデータを比較すること、ならびに、ヌルまたはゼロ要素(たとえば要素全体がゼロである)などのターミネータに関して、選択されたベクトルを検索することが可能である。
【0077】
一例において、VectorFind Element Not Equal命令700は、Vector Find Element Not Equal動作を示す命令コード702a(たとえばビット0〜7)、702b(たとえばビット40〜47)、第1のベクトル・レジスタ(V
1)を指定するために使用される第1のベクトル・レジスタ・フィールド704(たとえばビット8〜11)、第2のベクトル・レジスタ(V
2)を指定するために使用される第2のベクトル・レジスタ・フィールド706(たとえばビット12〜15)、第3のベクトル・レジスタ(V
3)を指定するために使用される第3のベクトル・レジスタ・フィールド708(たとえばビット16〜19)、第1のマスク・フィールド(M
5)710(たとえばビット24〜27)、第2のマスク・フィールド(M
4)712(たとえばビット32〜35)、およびRXBフィールド714(たとえばビット36〜39)を含む。一例において、フィールド704〜714はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【0078】
一例において、命令コード・フィールド702aによって指定される命令コードの選択されたビット(たとえば最初の2つのビット)は、命令の長さおよび形式を指定する。この特定の例において、選択されたビットは、長さが3つのハーフワードであり、形式は拡張命令フィールドを伴うベクトル・レジスタおよびインデックス・ストレージ動作であることを示す。ベクトル(V)フィールドのそれぞれ、ならびにRXBによって指定されるその対応する拡張ビットは、ベクトル・レジスタを指定する。特にベクトル・レジスタの場合、オペランドを含むレジスタは、たとえば、最上位ビットとしてのレジスタ拡張ビット(RXB)の追加を伴う、レジスタ・フィールドの4ビット・フィールドを使用して指定される。たとえば、4ビット・フィールドが0110であり、拡張ビットが0である場合、5ビット・フィールド00110はレジスタ数6を示す。
【0079】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、ベクトル・レジスタV
1に関連付けられた下付き数字1は第1のオペランドを示す、と言う具合である。レジスタ・オペランドは1レジスタ長さであり、これはたとえば128ビットである。
【0080】
たとえば0〜3の4ビットを有するM
4フィールドは、たとえばビット1〜3内に要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタ・オペランド内に要素のサイズを指定する。一例において、要素サイズ制御はバイト、ハーフワード(たとえば2バイト)、またはワード(たとえば4バイト)を指定することができる。たとえば0はバイトを示し、1はハーフワードを示し、2はワード、別名フルワードを示す。予約値が指定された場合、指定例外が認識される。
【0081】
M
5フィールドは、たとえば以下を含む、たとえば4ビット・フィールドのビット0〜3である。
【0082】
ゼロ検索フィールド(ZS、ビット2)。1である場合、第2のオペランドの各要素もゼロと比較される。(他の例において、これは、ゼロと比較される第3のオペランドまたは別のオペランドの各要素である。)
【0083】
条件コード設定フィールド(CC、ビット3)。ゼロである場合、条件コードは設定されず、未変更のままである。1である場合、条件コードは、例として以下に指定されたように設定される。
【0084】
0−ゼロ検索ビットが設定されている場合、比較は、不等の比較よりも低いインデックス要素内の両方のオペランドでゼロ要素を検出した。
1−要素の不一致が検出され、V
2内の要素はV
3内の要素よりも小さい。
2−要素の不一致が検出され、V
2内の要素はV
3内の要素よりも大きい。
3−すべての要素が同等を比較し、ゼロ検索ビットが設定されている場合、第2のオペランド(または、別の実施形態では他のオペランド)内にゼロ要素は発見されなかった。
【0085】
Vector FindElement Not Equal命令の一実施形態を実行する際、一実施形態において左から右へ進むと、(V
2およびその拡張ビットによって指定されたベクトル・レジスタに含まれる)第2のオペランドの符号なし2進整数要素が、(V
3およびその拡張ビットによって指定されたベクトル・レジスタに含まれる)第3のオペランドの対応する符号なし2進整数要素と比較される。2つの要素が等しくない場合、左端の不等要素のバイト・インデックスは(V
1およびその拡張ビットによって指定されたレジスタ内に指定される)第1のオペランドの指定バイト(たとえばバイト7)内に配置され、第1のオペランドの他のすべてのバイトにゼロが記憶される。
【0086】
一例において、戻された(たとえば指定バイト内に記憶された)要素のバイト・インデックスは、等しくない左端要素の第1のバイトのインデックスである。たとえば、要素サイズがバイトである場合、左端の不等要素のインデックスが戻される(たとえば、16の要素、0〜15が存在し、要素6が不等である場合、バイト・インデックス6が戻される)。同様に、要素サイズがハーフワードであり、8つの要素、0〜7が存在し、要素3のバイト6または7のいずれかが不等である場合、バイト・インデックス6が戻される。同様に、要素サイズがフルワードであり、4つの要素、0〜3が存在し、要素1のバイト4〜7のうちの1つが不等である場合、バイト・インデックス4が戻される。
【0087】
M
5フィールド内の条件コード設定ビットが、たとえば1に設定された場合、条件コードは、いずれのオペランドが大きかったかを、もしもあれば、示すように設定される。すなわち、たとえば第2のオペランド内の文字と同等の2進整数が、第3のオペランド内の不等文字と同等の2進整数と比較され、条件コードはこの比較に基づいて設定される。要素が等しかった場合、ベクトル・サイズに等しいバイト・インデックスが第1のオペランドの指定バイト(たとえばバイト7)内に配置され、すべての他のバイト位置にゼロが配置される。条件コード設定ビットが1である場合、選択された条件コード(たとえば条件コード3)が設定される。
【0088】
Vector FindElement Not Equal命令が終端文字を見つけるためにのみ使用されているこの実施形態では、第2および第3の両方のオペランドが同じデータを含むため、比較によって不等文字が生じることはない。
【0089】
M
5フィールド内にゼロ検索ビットが設定された場合、第1のオペランド(または他の実施形態では、第3のオペランドまたは別のオペランド)内の各要素は、同等性に関してゼロ(ヌル、ターミネータ、終端文字、文字列の終わりなどとも呼ばれる)とも比較される。第2のオペランドの任意の他の要素が不等であることが見つかる前に、第2のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第1のバイトのバイト・インデックスは、第1のオペランドの指定バイト(たとえばバイト7)内に記憶される。ゼロはすべての他のバイト内に記憶され、選択された条件コード(たとえば条件コード、ゼロ)が設定される。
【0090】
一実施形態において、要素の比較は並列に実行される。たとえば、比較されているベクトル・レジスタが16バイト長さである場合、16バイトは並列に比較される。他の実施形態において、データの単位はバイト以外であってよく、並列な比較数は単位サイズに対応する。さらに別の実施形態において、左から右または右から左のベクトルの方向は、ランタイム時に提供される。たとえば命令は、例として、処理方向が左から右または右から左のいずれかであることを示す、レジスタ、状況制御、または他のエンティティにアクセスする。一実施形態において、この方向制御は命令の一部としては符号化されないが、ランタイム時に命令に提供される。
【0091】
他の実施形態において、命令はRXBフィールドを含まない。代わりに、拡張は使用されないか、あるいは、拡張は命令外部の制御からなどの別の様式で提供されるか、または命令の別のフィールドの一部として提供される。
【0092】
Vector FindElement Not Equal命令を処理する一実施形態に関する他の詳細を、
図14を参照しながら説明する。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【0093】
初期に、照会800で、ヌル(ゼロ要素、文字列の終わり、ターミネータなどと呼ばれる)の検索が実行されるかどうかが判別される。ヌルの検索が実行される場合、ステップ802でヌル文字に対する、すなわちゼロ要素に関する比較が実行され、その結果がnullidx803に出力される。たとえばゼロ要素の左端バイトのインデックスがnullidx内に配置される。たとえば、要素サイズがバイトであり、バイト5内にゼロ要素が見つかった場合、ゼロ要素が見つかったバイトのインデックス(たとえば5)がnullidx内に配置される。同様に、要素サイズがハーフワードであり、8つの要素、0〜7が存在し、要素3(すなわちバイト6〜7)がゼロである場合、6(バイト・インデックス6の場合)がnullidx内に配置される。同様に、要素サイズがフルワードであり、4つの要素、0〜3が存在し、要素1(すなわちバイト4〜7)がゼロである場合、4(バイト・インデックス4の場合)がnullidx内に配置される。ヌル要素が見つからない場合、一例において、ベクトルのサイズ(たとえばバイト単位で、例えば16)がnullidx内に配置される。
【0094】
加えて、またはヌル検索が実行されない場合、ステップ804で、比較動作に基づいてAとBを比較する複数の比較(たとえば16)が並列に実行される。一例において、Aは第2のオペランドのコンテンツであり、Bは第3のオペランドのコンテンツであって、比較動作は等しくない。
【0095】
比較の結果は、左または右のいずれからの検索であるかに応じて、左インデックスcmpidxl、または右インデックスcmpidxrのいずれかと呼ばれる、変数806内に記憶される。たとえば、比較が等しい比較でない場合、検索は左から右であり、比較の結果として1つまたは複数の不等性が生じ、最下位の不等要素の第1のバイトに関連付けられたインデックスがcmpidxl内に配置される。一例として、要素サイズがバイトであり、ベクトル内に16の要素(0〜15)が存在し、要素6内に不等性が見つかった場合、6がcmpidxl内に記憶される。同様に、要素サイズがハーフワードであり、ベクトル内に8つの要素(0〜7)が存在し、要素3内に(たとえばバイト6または7に)不等性が見つかった場合、要素の第1のバイトのインデックス(バイト6)が戻される。同様に、要素サイズがフルワードであり、4つの要素(0〜3)が存在し、要素1内に(たとえばバイト4〜7に)不等性が見つかった場合、要素の第1のバイトのインデックス(バイト4)が戻される。不等比較が存在しない場合、一実施形態では、比較の方向に応じて、cmpidxlまたはcmpidxrがベクトルのサイズ(たとえばバイト単位で、たとえば16)に等しく設定される。
【0096】
その後、照会808で、検索が左からまたは右からのいずれであるかに関して判別される。検索が左からである場合、変数cmpidxはステップ810で、cmpidxlに等しく設定され、そうでなければ、cmpidxはステップ812で、cmpidxrに等しく設定される。
【0097】
cmpidxの設定に続いて、照会814で、ヌル文字についての検索が実行されたかどうかが判別される。ヌル文字についての検索がなかった場合、ステップ816で、変数idxは比較インデックスcmpidxに設定される。ヌルが検索された場合、ステップ818で、idxは最小の比較インデックスまたはヌル・インデックスnullidxに設定される。これで処理は終結する。
【0098】
図14の処理に関するブロック論理の例が、
図15に示されている。この例には、2つの入力ベクトルB900およびベクトルA902が存在する。どちらの入力も、比較(たとえば不等)を並列に実行する、比較論理904への入力である。さらに一方の入力、ベクトルAは、ヌル処理を実行するゼロ検出論理906への入力でもある。
【0099】
比較論理の出力idxLまたはidxR908、ならびにゼロ検出論理の出力nullidx910は、結果決定論理912への入力である。結果決定論理は、以下の制御、すなわち検索の方向を示す右/左914、ヌル処理が実行されるかどうかを示すゼロ検出916、および各要素のサイズ(たとえばバイト、ハーフワード、ワード)を提供する要素サイズ918も、入力として採用し、出力ベクトル922(たとえばバイト7)に記憶される結果のインデックス920、resultidxを生成する。
【0100】
さらに、結果決定論理は、オプションで条件コード924を出力する、条件コード処理923を含む。
【0101】
比較論理904に関する擬似コードの例は、以下の通りである。
【0103】
図に示されるように、方向に応じて、変数idxLまたはidxRがベクトルのサイズ(たとえばバイト単位で、たとえば16)に初期設定される。その後、ベクトルAの各要素とベクトルBの対応する要素とが比較される。一例において、比較はバイト比較であるため、比較は16バイトのそれぞれ(i)に対して行われる。この例では、比較動作は等しくなく、不等性が見つかった場合、不等バイトのインデックスは、左からの検索の場合はidxLに、右からの検索の場合はidxRに記憶される。
【0104】
ゼロ検出論理906に関する擬似コードの例は、以下の通りである。
【0106】
図に示されるように、ゼロに等しいかどうかを見るためにベクトルの各要素(j)がテストされる。要素がゼロに等しい場合、nullidxは、その要素のインデックスに要素サイズを掛け合わせたものに等しく設定される。たとえば、要素サイズがハーフワード(2バイト)であり、ヌル文字が要素3内で検出された場合、3に2が掛け合わされ、nullidxは6に設定され、これはバイト6を表す。同様に、要素サイズがフルワード(4バイト)であり、ヌル文字が要素3内で検出された場合、3に4が掛け合わされ、nullidxは12に設定される。
【0107】
同様に、結果決定論理912に関する擬似コードの例は、以下の通りである。
【0109】
図に示されるように、左/右制御が左を示す場合、cmpidxはidxLに等しく設定され、そうでなければcmpidxはidxRに等しく設定される。さらに、ゼロ検出インジケータがオンの場合、resultidxは最小のcmpidxまたはnullidxに等しく設定され、条件コード設定制御がオンであり、cmpidxがnullidxよりも大きい場合、条件コードはゼロに設定される。そうでない場合、ゼロ検出はオンでなく、resultidxはcmpidxに等しく設定される。
【0110】
さらに、要素サイズがバイトに等しい場合、要素サイズ・マスクは
'11111
'に設定され、要素サイズが2バイトに等しい場合、マスクは
'11110
'に設定され、要素サイズが4バイトに等しい場合、マスクは
'11100
'に設定される。
【0111】
その後、resultidxは、要素サイズ・マスクとANDされたresultidxに等しく設定される。たとえば、要素サイズがハーフワードであり、バイト7がresultidxの場合、resultidx=00111 AND 11110となり、00110を提供するため、resultidxは6(すなわち、2進数の00110)に等しく設定され、これは要素の第1のバイトである。
【0112】
加えて、条件コードがオプションで設定される。命令の設定条件コード制御がオンに設定された場合、条件コードが提供され、層でない場合、条件コードは設定されない。例として、制御がオンに設定された場合、resultidx=16であれば、条件コードは3に設定される。そうでない場合、AのresultidxがBのresultidxよりも小さい場合、条件コードは1に設定され、さもなければ条件コードは2に設定される。
【0113】
128ビット・ベクトルの場合、比較論理は、たとえば256比較ではなく、たとえば16バイト比較のみを実行する。これにより、より大きなベクトルに対するスケーリングが提供される。さらに、左/右制御がランタイム値として提供可能であり、命令内には符号化されない。さらにまた、結果として戻される値は要素インデックスではなくバイト位置である。さらに、4バイト比較ならびに1バイトおよび2バイト比較がサポートされる。
【0114】
他の実施形態において、ゼロ検索は条件でないが、代わりに、Vector Find Element Not Equal命令が実行される時に実行される。命令の実行に基づくかまたはこれに応答して、ゼロ検索が実行され、ゼロ要素の位置(たとえばバイト・インデックス)、または第1の不一致要素の位置(たとえばバイト・インデックス)、あるいはその両方が戻される。一実施形態において、実施形態に関係なく、Vector Find Element Not Equal命令に関して実行される比較の数は、ベクトルのバイト数に対応する。たとえば、検索または比較されているベクトルが16バイトの場合、多くとも16比較が、たとえば並列に実行される。他の実施形態において、不一致またはゼロ要素が見つかると、比較は終了する。
【0115】
Load Countto Block Boundary(LCBB)命令の一実施形態を、
図16を参照しながら説明する。この命令は、たとえば、メモリ内の指定されたアドレスから指定されたメモリ境界までのデータのバイト数のカウントを提供する(たとえば、メモリの指定された境界を横切ることなく、ベクトル・レジスタ内にロードされたバイト数を提供する)。
【0116】
一例において、LoadCount to Block Boundary命令1000は、Load Count to Block Boundary動作を示す命令コード・フィールド1002a(たとえばビット0〜7)、1002b(たとえばビット40〜47)、汎用レジスタ(R
1)を指定するために使用されるレジスタ・フィールド1004(たとえばビット8〜11)、インデックス・フィールド(X
2)1006(たとえばビット12〜15)、ベース・フィールド(B
2)1008(たとえばビット16〜19)、変位フィールド(D
2)1010(たとえばビット20〜31)、およびマスク・フィールド(M3)1012(たとえばビット32〜35)を含む。一例において、フィールド1004〜1012はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【0117】
一実施形態において、命令コード・フィールド1002aによって指定される命令コードの選択されたビット(たとえば第1の2ビット)は、命令の長さおよび形式を指定する。この特定の例では、長さは3ハーフワードであり、形式は拡張命令コード・フィールドを伴うレジスタおよびインデックス・ストレージ動作である。
【0118】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、R
1に関連付けられた下付き数字1は第1のオペランドを示す、と言う具合である。レジスタ・オペランドは1レジスタ長さであり、これはたとえば128ビットである。
【0119】
一例において、レジスタおよびインデックス・ストレージ動作命令では、第2のオペランド・アドレスを形成するために、X
2およびB
2フィールドによって指定された汎用レジスタのコンテンツが、D
2フィールドのコンテンツに追加される。Load Count to Block Boundary命令に関する変位D
2は、一例では、12ビット符号なし整数として扱われる。第2のオペランド・アドレスは、主メモリ内の位置を示すために使用されるが、本実施形態では、データのアドレス指定には使用されない。
【0120】
一実施形態において、M
3フィールドは、メモリ境界を横切ることなくロードすることが可能なバイト数を計算するために、ブロック境界サイズに関してCPUに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。コードおよび対応する値の例は以下の通りである。
【0122】
他の例において、境界サイズは命令に含められないが、代わりに、命令を実行するプロセッサによって動的に決定される。たとえば、M
3フィールドは境界のタイプ(たとえば、キャッシュ・ライン、ページなど)を指定し、プロセッサは、プロセッサのタイプおよび1つまたは複数の特徴(たとえばプロセッサに関するキャッシュ・ライン・サイズ、プロセッサに関するページ・サイズなど)に基づいて境界を決定する。例として、プロセッサは、タイプに基づいて境界に対して固定サイズを使用する(たとえば、プロセッサに対する事前に定義された固定キャッシュ・ラインまたはページ・サイズ)か、または、タイプに基づいてプロセッサは境界を決定する。たとえば、タイプがページ境界である場合、プロセッサは変換索引バッファ(TLB)内で開始アドレスを探索し、そこからページ境界を決定する。他の例も存在する。たとえばタイプは、命令の別のフィールドによって、または命令外部の制御から、提供可能である。
【0123】
Load Countto Block Boundary命令の一実施形態の実行において、指定されたブロック境界を横切ることなく、第2のオペランド位置からロードすることが可能なバイト数を含む符号なし2進整数(たとえば64ビット)は、たとえばロードされることになるベクトル・レジスタのサイズ(たとえば16)を上限として、第1のオペランド内に指定された汎用レジスタ内に配置される。
【0124】
命令の実行の結果、オプションの条件コードはたとえば以下のように設定される。
【0125】
0−オペランド1は16である
1−
2−
3−オペランド1は16未満である
【0126】
上記の例示の命令において、カウントが開始される開始アドレスは、インデックス・レジスタ値(X
2)+基本レジスタ値(B
2)+変位(D
2)によって決定されるが、他の実施形態において、これは単なるいくつかの例として、レジスタ値、命令アドレス+命令テキスト指定オフセット、レジスタ値+変位、または、レジスタ値+インデックス・レジスタ値によって提供される。
【0127】
Load Countto Block Boundary命令を処理する一実施形態の詳細を、
図17を参照しながら説明する。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【0128】
一実施形態において、初期にステップ1100で境界マスク(BdyMask)が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ(BdySize)1102の2の補数否定が取られ、境界マスク1104を作成する(たとえば、BdyMask=0−BdySize)。一例では境界サイズは命令(たとえばM
3フィールド)によって提供され、または別の例では、本明細書で説明するように、マシンによって決定される。
【0129】
その後、ステップ1110で、カウントが開始されるメモリ内の位置を示す開始アドレスが計算される。例として、開始アドレス1112は、レジスタ値、命令アドレス+命令テキスト指定オフセット、レジスタ値+変位、レジスタ値+インデックス・レジスタ値、またはレジスタ値+インデックス・レジスタ値+変位によって、提供することが可能である。本明細書で提供される命令において、開始アドレスは、X
2フィールド、B
2フィールド、およびD
2フィールドによって提供される。すなわち、X
2およびB
2によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにD
2によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【0130】
次に、ステップ1120で、カウントを停止する位置を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ1102、開始アドレス1112、ベクトル・サイズ(vec_size)1114(たとえばバイト単位で、たとえば16)、および境界マスク1104である。ベクトル・サイズはベクトル・レジスタまたは他のレジスタのサイズ(たとえばバイト単位で、たとえば16)である。レジスタは、たとえば内部にデータがロードできるレジスタである。一例において、終了アドレス1122は以下のように計算される。
【0131】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【0132】
その後、ステップ1130でカウントが計算される。たとえば、カウント=EndAddress 1122-StartAddress 1112である。他の例において、カウントは、終了アドレスを用いることなく開始アドレスから計算することができる。この例では、カウント=min(16、BdySize−(StartAddress AND BdyMask))であり、この式で16はベクトル・レジスタ(または他のレジスタ)のサイズである。他の例において、他のベクトル・サイズが使用可能である。
【0133】
一実施形態において、LoadCount to Block Boundary命令を使用して、ベクトル・レジスタなどのレジスタに何バイトがロードされたかが決定される。このカウントは、本明細書で説明されるように、終端文字列などの文字データ・セットの長さを決定する場合、または他の処理で有用である。
【0134】
図に示されるように、一実施形態において、1つのメモリ位置から別のメモリ位置にデータをコピーするために、ベクトル・レジスタが使用される。ベクトル機構の一例において、32のベクトル・レジスタが存在し、他のタイプのレジスタをベクトル・レジスタの象限(quadrant)にマッピングすることができる。たとえば
図18に示されるように、32ベクトル・レジスタ1202を含むレジスタ・ファイル1200が存在し、各レジスタが128ビット長さである場合、64ビット長さの16の浮動小数点レジスタ1204がベクトル・レジスタにオーバレイ可能である。したがって、例として、浮動小数点レジスタ2が修正された場合、ベクトル・レジスタ2も修正される。他のタイプのレジスタに関する他のマッピングも可能である。
【0135】
上記で、終端文字データを、保証されていない例外を発生させることなく並列にコピーするための技法について、詳細に説明した。典型的には、文字を区切り文字列の一方から他方へ並列にコピーすることは、境界を横切るアクセスが望ましくないアクセス例外を発生させる可能性のある、選択された境界交差近くで、ソース文字列が終了するかどうかがわからないため、困難である。以前の技法は、1回に1文字のみをコピーするか、または文字列が境界近くにあるかどうかを知るためにチェックを追加した。1回に1文字のみの作業は、本質的に遅い。チェックを追加することで複雑さが与えられ、待ち時間が追加される。
【0136】
指定された境界にデータを並列にロードし、ロードされた文字の数を決定する方法を提供する命令、および、第1の区切り文字のインデックスを見つけるための(データを並列にチェックする)命令を使用することによって、最小数の分岐命令を用いて終端文字データ(たとえばヌル終端)をコピーするための技法が提供される。さらに、列文字の高速並列コピー、ならびに偽の例外の防止も提供される。
【0137】
上記の技法の1つまたは複数の態様を使用することで、実行時間の短縮を含む性能の向上がもたらされる。
【0138】
本明細書では、特に明示的にまたは文脈によって示されない限り、メモリ、主メモリ、ストレージ、および主ストレージは交換可能に用いられる。
【0139】
他の命令の例を含むベクトル機構に関する追加の細部を、本発明を実施するための形態の一部として以下でさらに説明する。
【0140】
当業者であれば理解されるように、本発明の1つまたは複数の態様は、システム、方法、またはコンピュータ・プログラム製品として具体化可能である。したがって本発明の1つまたは複数の態様は、完全にハードウェア実施形態、完全にソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、あるいは、本明細書ではすべてが全体として「回路」、「モジュール」、または「システム」と呼ばれる場合のあるソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形を取ることができる。さらに本発明の1つまたは複数の態様は、その上に具体化されたコンピュータ読み取り可能プログラム・コードを有する1つまたは複数のコンピュータ読み取り可能媒体内に具体化された、コンピュータ・プログラム製品の形を取ることもできる。
【0141】
1つまたは複数のコンピュータ読み取り可能媒体の任意の組み合わせが利用可能である。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいはそれらの任意の好適な組み合わせとすることができるが、これらに限定されない。コンピュータ読み取り可能記憶媒体のより特定の例(非網羅的リスト)は、1本または複数本のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光記憶デバイス、磁気記憶デバイス、または、それらの任意の好適な組み合わせを含む。本明細書との関連において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによって、あるいはそれらに関連して使用するためのプログラムを含むかまたは記憶することが可能な、任意の有形媒体とすることができる。
【0142】
次に
図19を参照すると、一例において、コンピュータ・プログラム製品1300は、たとえば、本発明の1つまたは複数の態様を提供および容易にするために、コンピュータ読み取り可能プログラム・コード手段または論理1304をその上に記憶するための、1つまたは複数の持続性コンピュータ読み取り可能記憶媒体1302を含む。
【0143】
コンピュータ読み取り可能媒体上に具体化されたプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、RFなど、またはそれらの任意の好適な組み合わせを含むがそれらに限定されない、適切な媒体を使用して、伝送可能である。
【0144】
本発明の1つまたは複数の態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語、および、「C」プログラミング言語、アセンブラ、または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、完全にリモート・コンピュータまたはサーバ上で、実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続することができるか、あるいは、(たとえばインターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続することができる。
【0145】
本発明の1つまたは複数の態様を、本発明の実施形態に従った方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら、本明細書で説明する。流れ図またはブロック図あるいはその両方の各ブロック、および、流れ図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ・プログラム命令によって実装可能であることを理解されよう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装するための手段を作成するように、マシンを生成するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供可能である。
【0146】
これらのコンピュータ・プログラム命令は、コンピュータ読み取り可能媒体内にも記憶可能であり、特定の様式で機能するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに命じることが可能であるため、結果としてコンピュータ読み取り可能媒体に記憶された命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装する命令を含む製品を生成することになる。
【0147】
コンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル装置上で実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装するためのプロセスを提供するように、コンピュータ実装プロセスを生成するために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードすることも可能である。
【0148】
図面内の流れ図およびブロック図は、本発明の1つまたは複数の態様の様々な実施形態に従った、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、または動作を示す。この点で、流れ図またはブロック図内の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、またはコードの一部を表すことができる。いくつかの代替実装において、ブロック内に示された機能は、図に示された順序以外で実行可能であることにも留意されたい。たとえば、連続して示された2つのブロックは、実際にはほぼ同時に実行可能であるか、またはブロックは、関連する機能に応じて、時には逆の順序で実行可能である。ブロック図または流れ図あるいはその両方の各ブロック、および、ブロック図または流れ図あるいはその両方内のブロックの組み合わせは、指定された機能または動作を実行する特定用途向けのハードウェアベース・システム、あるいは特定用途向けハードウェアおよびコンピュータ命令の組み合わせによって、実装可能であることにも留意されよう。
【0149】
上記に加え、本発明の1つまたは複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって、提供、提示、展開、管理、サービス提供などが実行可能である。たとえばサービス・プロバイダは、1人または複数の顧客に対して本発明の1つまたは複数の態様を実行する、コンピュータ・コードまたはコンピュータ・インフラストラクチャ、あるいはその両方を、作成、維持、サポートすることなどが可能である。見返りに、サービス・プロバイダは、例として、加入または料金あるいはその両方の契約の下で、顧客から支払いを受けることができる。加えて、または別の方法として、サービス・プロバイダは、1人または複数の第三者への広告コンテンツの販売から、支払いを受けることができる。
【0150】
本発明の一態様において、本発明の1つまたは複数の態様を実行するためのアプリケーションを展開することができる。一例として、アプリケーションの展開は、本発明の1つまたは複数の態様を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0151】
本発明の他の態様として、コードとコンピューティング・システムとの併用で本発明の1つまたは複数の態様を実行することが可能なコンピューティング・システムに、コンピュータ読み取り可能コードを組み込むことを含む、コンピューティング・インフラストラクチャが展開可能である。
【0152】
本発明の他の態様として、コンピュータ読み取り可能媒体コードをコンピュータ・システムに組み込むことを含む、コンピューティング・インフラストラクチャを組み込むためのプロセスが提供可能である。コンピュータ・システムは、コンピュータ媒体が本発明の1つまたは複数の態様を含む、コンピュータ読み取り可能媒体を備える。コードとコンピュータ・システムとの併用で、本発明の1つまたは複数の態様を実行することが可能である。
【0153】
上記で様々な実施形態を説明したが、これらは単なる例である。たとえば、他のアーキテクチャのコンピューティング環境は、本発明の1つまたは複数の態様を組み込んで使用することができる。さらに、本発明の趣旨を逸脱することなく、他のサイズのベクトルを使用することが可能であり、命令への変更を行うことが可能である。加えて、Vector Find Element Equal命令などであるがこれに限定されない命令の処理において、他の命令を使用することが可能である。さらに、ヌル終端文字データ以外のデータのコピーを、本発明の1つまたは複数の態様を使用して実行することができる。さらに、ベクトル・レジスタ以外のレジスタが使用可能であるか、または、データが、整数データまたは他のタイプのデータなどの文字データ以外であることが可能である、あるいはその両方である。
【0154】
さらに、他のタイプのコンピューティング環境が、本発明の1つまたは複数の態様から恩恵を受けることができる。例として、プログラム・コードの記憶または実行あるいはその両方に好適な、システム・バスを介してメモリ要素に直接または間接的に結合された少なくとも2つのプロセッサを含む、データ処理システムが使用可能である。メモリ要素は、たとえば、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量ストレージ、および、実行時に大容量ストレージからコードを取り出さなければならない回数を減らすために少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリを、含む。
【0155】
入力/出力またはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、および他のメモリ媒体などを含むがこれらに限定されない)を、直接、または介在するI/Oコントローラを介して、システムに結合することができる。データ処理システムを他のデータ処理システムあるいはリモートのプリンタまたは記憶デバイスに結合できるようにするために、介在する専用または公衆ネットワークを介して、ネットワーク・アダプタをシステムに結合することも可能である。モデム、ケーブル・モデム、およびイーサネット・カードは、ネットワーク・アダプタの使用可能なタイプのごく一部である。
【0156】
図20を参照すると、本発明の1つまたは複数の態様を実装するためのホスト・コンピュータ・システム5000の代表的な構成要素が描かれている。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(すなわち中央ストレージ)5002と通信している1つまたは複数のCPU5001、ならびに、記憶媒体デバイス5011および他のコンピュータまたはSANなどと通信するためのネットワーク5010へのI/Oインターフェースを備える。CPU5001は、アーキテクチャ命令セットおよびアーキテクチャ機能を有する、アーキテクチャに準拠している。CPU5001は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(DAT)5003を有することができる。DATは、典型的には、コンピュータ・メモリ5002のブロックへのその後のアクセスがアドレス変換の遅延を必要としないように、変換をキャッシュに入れるための、変換索引バッファ(TLB)5007を含む。典型的には、キャッシュ5009は、コンピュータ・メモリ5002とプロセッサ5001との間で使用される。キャッシュ5009は、複数のCPUが使用可能な大型のキャッシュと、大型のキャッシュとそれぞれのCPUとの間に小型で高速な(低レベル)キャッシュとを有する、階層型とすることができる。いくつかの実装において、低レベル・キャッシュは、命令フェッチおよびデータ・アクセスのために別々の低レベル・キャッシュを提供するように分割される。一実施形態において、命令は、キャッシュ5009を介し、命令フェッチ・ユニット5004によってメモリ5002からフェッチされる。命令は、命令復号ユニット5006内で復号され、(いくつかの実施形態では他の命令と共に)命令実行ユニット5008にディスパッチされる。典型的には、いくつかの実行ユニット5008、たとえば、算術実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットが使用される。命令は、必要に応じて命令指定レジスタまたはメモリからオペランドにアクセスする、実行ユニットによって実行される。オペランドがメモリ5002からアクセス(ロードまたは記憶)される場合、ロード/記憶ユニット5005は、典型的には、実行されている命令の制御の下でアクセスを処理する。命令は、ハードウェア回路内または内部マイクロコード(ファームウェア)内で、あるいはそれらの組み合わせによって、実行可能である。
【0157】
上記のように、コンピュータ・システムは、ローカル(または主)ストレージ内に情報、ならびに、アドレス指定、保護、ならびに参照および変更記録を含む。アドレス指定のいくつかの態様は、アドレスの形式、アドレス・スペースの概念、様々なタイプのアドレス、および、1つのタイプのアドレスが別のタイプのアドレスに変換される様式を含む。いくつかの主ストレージは、永続的に割り当てられた記憶位置を含む。主ストレージは、直接アドレス指定可能なデータの高速アクセス・ストレージを、システムに提供する。データおよびプログラムは、どちらも、処理される前に(入力デバイスから)主ストレージにロードされることになる。
【0158】
主ストレージは、時にはキャッシュと呼ばれる、1つまたは複数の小型で高速アクセスのバッファ・ストレージを含むことができる。キャッシュとは、典型的には、CPUまたはI/Oプロセッサに物理的に関連付けられる。性能を除く、物理的構成および別個の記憶媒体の使用の効果は、一般に、プログラムが観察することはできない。
【0159】
命令およびデータ・オペランドに対して、別々のキャッシュを維持することはできない。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン(または略してライン)と呼ばれる、規定境界(integral boundary)上の連続バイト内で維持される。モデルは、キャッシュ・ラインのサイズをバイト単位で戻す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルは、データまたは命令キャッシュ内へのストレージのプリフェッチ、あるいは、キャッシュからのデータの解放を実行する、PREFETCH DATAおよびPREFETCH DATA RELATIVE LONG命令も提供することができる。
【0160】
ストレージは、ビットの長い水平文字列としてみなされる。ほとんどの動作の場合、ストレージへのアクセスは左から右への順に進行する。ビットの文字列は8ビット単位に細分される。8ビット単位はバイトと呼ばれ、すべての情報形式の基本構築ブロックである。ストレージ内の各バイト位置は、そのバイト位置のアドレス、または単にバイト・アドレスである、固有の負でない整数によって識別される。隣接するバイト位置は、左の0から始まり、左から右への順に進行する、連続アドレスを有する。アドレスは符号なし2進整数であり、24、31、または64ビットである。
【0161】
情報は、ストレージとCPUまたはチャネル・サブシステムとの間で、1回に1バイトまたはバイトのグループで伝送される。特に指定の無い限り、たとえばz/Architectureにおいて、ストレージ内のバイトのグループは、グループの左端のバイトによってアドレス指定される。グループ内のバイト数は、実行されることになる動作によって、暗示または明示的に指定される。CPU動作で使用される場合、バイトのグループはフィールドと呼ばれる。たとえばz/Architectureにおいて、各バイトのグループ内のビットは、左から右への順に番号付けされる。z/Architectureにおいて、左端のビットは時には「上位」ビットと呼ばれ、右端のビットは「下位」ビットと呼ばれる。しかしながら、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能である。ストレージ内のバイトの個々のビット上で動作するために、バイト全体がアクセスされる。バイト内のビットは、(たとえばz/Architectureでは)左から右へ0から7の番号が付けられる。アドレス内のビットは、24ビット・アドレスの場合8〜31または40〜63、あるいは31ビット・アドレスの場合1〜31または33〜63と番号付けされ、64ビット・アドレスの場合、0〜63と番号付けされる。複数バイトの任意の他の固定長形式内では、形式を構成するビットには、0から始まる連続番号が付けられる。エラー検出のために、および好ましくは訂正のために、各バイトまたはバイトのグループと共に、1つまたは複数のチェック・ビットを伝送することができる。こうしたチェック・ビットはマシンによって自動的に生成され、プログラムによって直接制御することはできない。記憶容量はバイト数で表される。記憶オペランド・フィールドの長さが命令の命令コードによって暗示される場合、フィールドは固定長を有すると言われ、1、2、4、8、または16バイトが可能である。いくつかの命令については、より大きなフィールドが暗示可能である。記憶オペランド・フィールドの長さが暗示されずに明示的に示される場合、フィールドは可変長を有すると言われる。可変長オペランドは、1バイトの増分によって(またはいくつかの命令を使用して、2バイトの倍数または他の倍数で)長さを変更することができる。情報がストレージ内に配置される場合、たとえストレージへの物理経路の幅が、記憶されているフィールドの長さよりも大きい可能性があっても、指定されたフィールドに含まれる、それらのバイト位置のみのコンテンツが置き換えられる。
【0162】
ある情報の単位が、ストレージ内の規定境界上にあるものとされる。境界は、そのストレージ・アドレスがバイト単位の長さの倍数である場合に、情報の単位に対して規定と呼ばれる。規定境界上の2、4、8、および16バイトのフィールドに、特別な名前が与えられる。ハーフワードは、2バイト境界上の2つの連続するバイトのグループであり、命令の基本構築ブロックである。ワードは、4バイト境界上の4つの連続するバイトのグループである。ダブルワードは、8バイト境界上の8つの連続するバイトのグループである。クワドワード(quadword)は、16バイト境界上の16の連続するバイトのグループである。ストレージ・アドレスがハーフワード、ワード、ダブルワード、およびクワドワードを指定する場合、アドレスの2進数表現は、それぞれ1つ、2つ、3つ、または4つの右端ゼロ・ビットを含む。命令は2バイトの規定境界上にあるものとする。ほとんどの命令の記憶オペランドは、境界整合要件を有さない。
【0163】
命令およびデータ・オペランドに対して別々のキャッシュを実装するデバイス上では、記憶がその後フェッチされる命令を変更するか否かにかかわらず、その後命令がフェッチされるキャッシュ・ライン内にプログラムが記憶する場合、かなりの遅延を体験する可能性がある。
【0164】
一実施形態において、本発明は、ソフトウェア(時には、許可内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、そのうちのいずれかが本発明の1つまたは複数の態様に一致することになる)によって実施可能である。
図20を参照すると、本発明の1つまたは複数の態様を具体化するソフトウェア・プログラム・コードに、CD−ROMドライブ、テープ・ドライブ、またはハード・ドライブなどの長期記憶媒体デバイス5011から、ホスト・システム5000のプロセッサ5001によってアクセス可能である。ソフトウェア・プログラム・コードは、ディスケット、ハード・ドライブ、またはCD−ROMなどの、データ処理システムと共に使用するための様々な知られた媒体のいずれかの上に、具体化することができる。コードは、こうした媒体上で配布するか、あるいは、1つのコンピュータ・システムのコンピュータ・メモリ5002またはストレージから、ネットワーク5010を介して他のコンピュータ・システムへと、こうした他のシステムのユーザが使用するために、ユーザに配布することができる。
【0165】
ソフトウェア・プログラム・コードは、様々なコンピュータ構成要素および1つまたは複数のアプリケーション・プログラムの機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体デバイス5011から、プロセッサ5001による処理に使用可能な相対的に高速のコンピュータ・ストレージ5002へとページングされる。メモリ内、物理媒体上で、ソフトウェア・プログラム・コードを具体化するため、または、ネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形媒体(電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むが、これらに限定されない)上で作成および記憶された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0166】
図21は、内部で本発明の1つまたは複数の態様が実施可能な、代表的なワークステーションまたはサーバ・ハードウェア・システムを示す。
図21のシステム5020は、オプションの周辺デバイスを含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的な基本コンピュータ・システム5021を備える。基本コンピュータ・システム5021は、既知の技法に従って、1つまたは複数のプロセッサ5026と、プロセッサ5026とシステム5021の他の構成要素との間を接続し、その通信を実行可能にするために使用される、バスとを含む。バスは、プロセッサ5026をメモリ5025と、たとえばハード・ドライブ(たとえば磁気媒体、CD、DVD、およびフラッシュ・メモリのいずれかを含む)またはテープ・ドライブを含むことが可能な、長期記憶5027とに、接続する。システム5021は、バスを介してマイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、または、タッチセンサ式スクリーン、デジタル入力パッドなどの任意のユーザ・インターフェース・デバイスとすることが可能な他のインターフェース・デバイス、あるいはそれらすべてなどの、1つまたは複数のインターフェース・デバイスに接続する、ユーザ・インターフェース・アダプタも含むことができる。バスは、LCDスクリーンまたはモニタなどのディスプレイ・デバイス5022を、ディスプレイ・アダプタを介してマイクロプロセッサ5026にも接続する。
【0167】
システム5021は、ネットワーク5029との通信5028が可能なネットワーク・アダプタを用いて、他のコンピュータまたはコンピュータのネットワークと通信することができる。例示のネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット、またはモデムである。別の方法として、システム5021は、CDPD(セルラ・デジタル・パケット・データ)カードなどの、ワイヤレス・インターフェースを使用して通信することができる。システム5021は、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)内のこうした他のコンピュータに関連付けることが可能であるか、あるいは、システム5021は、別のコンピュータなどを伴うクライアント/サーバ配置構成内のクライアントとすることができる。これらの構成ならびに適切な通信ハードウェアおよびソフトウェアはすべて、当分野で知られている。
【0168】
図22は、内部で本発明の1つまたは複数の態様が実施可能なデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、ワイヤレス・ネットワークおよびワイヤード・ネットワークなどの複数の個別ネットワークを含むことが可能であり、そのそれぞれが複数の個別のワークステーション5041、5042、5043、5044を含むことが可能である。加えて、当業者であれば理解されるように、1つまたは複数のLANを含むことが可能であり、LANはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを備えることができる。
【0169】
さらに
図22を参照すると、ネットワークは、ゲートウェイ・コンピュータ(クライアント・サーバ5046)またはアプリケーション・サーバ(データ・リポジトリにアクセス可能であり、ワークステーション5045から直接アクセスすることも可能な、リモート・サーバ5048)などの、メインフレーム・コンピュータまたはサーバも含むことができる。ゲートウェイ・コンピュータ5046は、各個別のネットワークへの入口ポイントとして働く。ゲートウェイは、ネットワーキング・プロトコル間を接続する際に必要とされる。ゲートウェイ5046は、好ましくは、通信リンクを用いて別のネットワーク(たとえばインターネット5047)に結合することができる。ゲートウェイ5046は、通信リンクを使用して1つまたは複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM eServer(TM) System zサーバを利用して実装可能である。
【0170】
図21および
図22を同時に参照すると、本発明の1つまたは複数の態様を具体化可能なソフトウェア・プログラミング・コードには、CD−ROMドライブまたはハード・ドライブなどの長期記憶媒体5027から、システム5020のプロセッサ5026によってアクセス可能である。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、またはCD−ROMなどの、データ処理システムと共に使用するための様々な既知の媒体のいずれか上で、具体化することができる。コードは、こうした媒体上で配布可能であるか、または、1つのコンピュータ・システムのメモリまたはストレージから、ネットワークを介して他のコンピュータ・システムへと、こうした他のシステムのユーザが使用するために、ユーザ5050、5051に配布可能である。
【0171】
別の方法として、プログラミング・コードはメモリ5025内に具体化可能であり、プロセッサ・バスを使用してプロセッサ5026によってアクセス可能である。こうしたプログラミング・コードは、様々なコンピュータ構成要素および1つまたは複数のアプリケーション・プログラム5032の機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体5027から、プロセッサ5026による処理に使用可能な高速メモリ5025へとページングされる。メモリ内、物理媒体上で、ソフトウェア・プログラミング・コードを具体化するため、または、ネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形媒体(電子メモリ・モジュール(RAM)、フラッシュ・メモリ、コンパクト・ディスク(CD)、DVD、磁気テープなどを含むが、これらに限定されない)上で作成および記憶された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0172】
プロセッサが最も容易に使用可能な(通常、プロセッサの他のキャッシュよりも高速で小型の)キャッシュは最下位(L1またはレベル1)キャッシュであり、主記憶(主メモリ)は最高位キャッシュ(3レベル存在する場合はL3)である。最下位キャッシュはしばしば、実行されることになるマシン命令を保持している命令キャッシュ(I−Cache)と、データ・オペランドを保持しているデータ・キャッシュ(D−Cache)とに分割される。
【0173】
図23を参照すると、プロセッサ5026に関する例示のプロセッサ実施形態が示されている。典型的には、プロセッサ性能を向上させるために、メモリ・ブロックをバッファリングするためにキャッシュ5053の1つまたは複数のレベルが使用される。キャッシュ5053は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持している高速バッファである。典型的なキャッシュ・ラインは、メモリ・データの64、128、または256バイトである。データをキャッシュするためよりも、命令をキャッシュするために、別々のキャッシュがしばしば使用される。キャッシュ・コヒーレンス(メモリおよびキャッシュ内のラインのコピーの同期化)が、当分野で周知の様々な「スヌープ」アルゴリズムによってしばしば提供される。プロセッサ・システムの主メモリ・ストレージ5025は、しばしばキャッシュと呼ばれる。4レベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、コンピュータ・システムが使用可能な不揮発性ストレージ(DASD、テープなど)の一部のみを保持するため、時には、レベル5(L5)キャッシュと呼ばれる。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025の内部および外部でページングされたデータのページを「キャッシュ」する。
【0174】
プログラム・カウンタ(命令カウンタ)5061は、実行されることになる現行命令のアドレスを追跡する。z/Architectureプロセッサ内のプログラム・カウンタは64ビットであり、前のアドレス指定制限をサポートするために、31または24ビットに切り詰めることができる。プログラム・カウンタは、典型的には、コンテキスト切り替え時に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえばオペレーティング・システム(プログラム環境からオペレーティング・システム環境へのコンテキスト切り替え)によって中断され得る。プログラムがアクティブでない間、プログラムのPSWがプログラム・カウンタを維持し、オペレーティング・システムが実行している間、オペレーティング・システムのプログラム・カウンタ(PSW内)が使用される。典型的には、プログラム・カウンタは、現行命令のバイト数に等しい量だけ増分される。RISC(縮小命令セット・コンピューティング)命令は、典型的には固定長であるが、CISC(複数命令セット・コンピューティング)命令は、典型的には可変長である。IBM z/Architectureの命令は、長さ2、4、または6バイトを有するCISC命令である。プログラム・カウンタ5061は、たとえばコンテキスト切り替え動作または分岐命令の分岐実行動作(branch taken operation)のいずれかによって修正される。コンテキスト切り替え動作の場合、現行プログラムのカウンタ値は、実行されているプログラムに関する他の状態情報(条件コードなど)と共に、プログラム状況ワード内に保存され、実行されることになる新しいプログラム・モジュールの命令を指示する新しいプログラムのカウンタ値がロードされる。分岐実行動作は、分岐命令の結果をプログラム・カウンタ5061内にロードすることによって、プログラムが決定するかまたはプログラム内でループすることを許可するために実行される。
【0175】
典型的には、命令フェッチ・ユニット5055は、プロセッサ5026の代わりに命令をフェッチするために使用される。フェッチ・ユニットは、「次の順次命令」、分岐実行命令のターゲット命令、またはコンテキスト切り替え後のプログラムの第1の命令の、いずれかをフェッチする。最新命令フェッチ・ユニットは、プリフェッチされた命令が使用される確率に基づいて命令を投機的にプリフェッチするために、プリフェッチ技法を使用する。たとえば、フェッチ・ユニットは、次の順次命令を含む命令の16バイトおよび他の順次命令の追加バイトを、フェッチすることができる。
【0176】
フェッチされた命令は、その後、プロセッサ5026によって実行される。実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令を復号し、複合された命令に関する情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、復号された算術命令に関する情報を命令フェッチ・ユニット5055から受信し、命令の命令コードに従ってオペランド上で算術演算を実行することになる。オペランドは、好ましくはメモリ5025、アーキテクチャ・レジスタ5059、または、実行されている命令の即値フィールド(immediate field)から、実行ユニット5057に提供される。実行の結果は、記憶される場合、メモリ5025、レジスタ5059、または他のマシン・ハードウェア(制御レジスタ、PSWレジスタ、その他など)に記憶される。
【0177】
プロセッサ5026は、典型的には、命令の機能を実行するための1つまたは複数のユニット5057、5058、5060を有する。
図24を参照すると、実行ユニット5057は、アーキテクチャ汎用レジスタ5059、復号/ディスパッチ・ユニット5056、ロード記憶ユニット5060、およびその他5065プロセッサ・ユニットと、インターフェース論理5071を用いて通信することができる。実行ユニット5057は、算術論理ユニット(ALU)5066が動作することになる情報を保持するために、いくつかのレジスタ回路5067、5068、5069を使用することができる。ALUは、加算、減算、乗算、および除算などの算術演算、ならびに、AND、ORおよび排他的OR(XOR)、回転、またはシフトなどの、論理関数を実行する。好ましくは、ALUは、設計に依存する特殊演算をサポートする。他の回路は、たとえば条件コードおよび回復サポート論理を含む他のアーキテクチャ機構5072を提供する。典型的には、ALU演算の結果は、結果を様々な他の処理機能に転送することが可能な、出力レジスタ回路5070内に保持される。プロセッサ・ユニットの多くの配置構成が存在し、本説明は一実施形態の代表的な理解を提供することのみが意図されている。
【0178】
たとえばADD命令は、算術および論理機能を有する実行ユニット5057内で実行されるが、たとえば浮動小数点命令は、特殊な浮動小数点機能を有する浮動小数点実行内で実行される。好ましくは、実行ユニットは、オペランド上で命令コード定義機能を実行することにより、命令によって識別されたオペランド上で動作する。たとえばADD命令は、命令のレジスタ・フィールドによって識別された2つのレジスタ5059内で見つけられたオペランドで、実行ユニット5057によって実行可能である。
【0179】
実行ユニット5057は、2つのオペランドで算術加算を実行し、その結果を第3のオペランドに記憶し、ここで第3のオペランドは、第3のレジスタまたは2つのソース・レジスタのうちの1つとすることができる。実行ユニットは、好ましくは、Shift、Rotate、And、Or、およびXORなどの様々な論理機能、ならびに、加算、減算、乗算、除算のいずれかを含む様々な代数関数が実行可能な算術論理ユニット(ALU)を使用する。いくつかのALU5066はスカラー演算用に設計され、いくつかは浮動小数点用である。データは、アーキテクチャに応じて、ビッグ・エンディアン(最下位バイトが最上位バイト・アドレスにある)またはリトル・エンディアン(最下位バイトが最下位バイト・アドレスにある)とすることができる。IBM z/Architectureはビッグ・エンディアンである。符号付きフィールドは、符号と、アーキテクチャに応じて1の補数または2の補数である絶対値とすることができる。2の補数は、2の補数における負の値または正の値のいずれかがALUにおいて加算のみを必要とするため、ALUが減算機能を設計する必要がないという点で有利である。数字は一般に簡略して記述され、12ビット・フィールドが4096バイト・ブロックのアドレスを定義し、たとえば一般に4Kバイト(キロバイト)ブロックとして記述される。
【0180】
図25を参照すると、分岐命令を実行するための分岐命令情報は、典型的には、他の条件付き演算が完了する前に分岐の結果を予測するための分岐履歴テーブル5082などの分岐予測アルゴリズムをしばしば使用する、分岐ユニット5058に送信される。現行分岐命令のターゲットがフェッチされ、条件付き演算が完了する前に投機的に実行されることになる。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件に合致する場合、ターゲット・アドレスに分岐することが可能であり、ターゲット・アドレスは、たとえばレジスタ・フィールドまたは即値フィールド内に見られる数値を含むいくつかの数値に基づいて計算可能である。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077および出力レジスタ回路5080を有する、ALU5074を使用することができる。分岐ユニット5058は、たとえば汎用レジスタ5059、復号ディスパッチ・ユニット5056、または他の回路5073と通信することができる。
【0181】
命令のグループの実行は、たとえば、オペレーティング・システムによって示されるコンテキスト切り替え、コンテキスト切り替えを発生させるプログラムの例外またはエラー、(マルチスレッド環境において)複数のプログラムのコンテキスト切り替えまたはマルチスレッド・アクティビティを発生させるI/O中断信号を含む、様々な理由で中断される可能性がある。好ましくは、コンテキスト切り替えアクションは、現在実行中のプログラムに関する状態情報を保存し、その後、呼び出されている別のプログラムに関する状態情報をロードする。状態情報は、たとえばハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、好ましくは、実行されることになる次の命令を指示するプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクチャ・レジスタ・コンテンツを含む。コンテキスト切り替えアクティビティは、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード(マイクロコード、ピココード、または許可内部コード(LIC))が単独で、あるいは組み合わせで、働かせることができる。
【0182】
プロセッサは、命令定義方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即値オペランドを提供することが可能であり、汎用レジスタまたは特定用途向けレジスタ(たとえば浮動小数点レジスタ)のいずれかを明示的に指示する、1つまたは複数のレジスタ・フィールドを提供することが可能である。この命令は、命令コード・フィールドによってオペランドとして識別された暗黙レジスタを使用することができる。命令は、オペランド用のメモリ位置を使用することができる。オペランドのメモリ位置は、z/Architecture long displacementfacilityによって例示されるように、レジスタ、即値フィールド、またはレジスタと即値フィールドの組み合わせによって、提供可能であり、ここでは命令が、たとえばメモリ内のオペランドのアドレスを提供するためにまとめて追加される、基本レジスタ、インデックス・レジスタ、および即値フィールド(変位フィールド)を定義する。本明細書では、特に指定の無い限り、位置は、典型的には主メモリ(主ストレージ)内の位置を示唆する。
【0183】
図26を参照すると、プロセッサは、ロード/記憶ユニット5060を使用してストレージにアクセスする。ロード/記憶ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得すること、および、レジスタ5059または別のメモリ5053位置にオペランドをロードすることによって、ロード動作を実行することができるか、または、メモリ5053内のターゲット・オペランドのアドレスを取得すること、および、レジスタ5059または別のメモリ5053位置から取得したデータをメモリ5053内のターゲット・オペランド位置に記憶することによって、記憶動作を実行することができる。ロード/記憶ユニット5060は投機的とすることが可能であり、命令順とから外れた順序でメモリにアクセスすることができるが、ロード/記憶ユニット5060は、命令が順番通りに実行されたような外観をプログラムに対して維持することになる。ロード/記憶ユニット5060は、汎用レジスタ5059、復号/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、または他の要素5083と通信可能であり、ストレージ・アドレスを計算するため、および動作を順序通りに維持するようにパイプライン順序付けを提供するための、様々なレジスタ回路、ALU5085、および制御論理5090を備える。いくつかの動作は順序外れの場合があるが、当分野で周知のように、ロード/記憶ユニットは、順序外れ動作を順序通りに実行されたようにプログラムに対して見せるための機能を提供する。
【0184】
好ましくは、アプリケーション・プログラムが「見る」アドレスは、しばしば仮想アドレスと呼ばれる。仮想アドレスは、時に、「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスにオフセット値をプレフィックスすること、1つまたは複数の変換テーブルを介して仮想アドレスを変換すること、変換テーブルが好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独または組み合わせで含むこと、セグメント・テーブルがページ・テーブルを指示するエントリを有することを含むが、これらに限定されない、様々な動的アドレス変換(DAT)技術のうちの1つによって、物理メモリ位置にリダイレクトされるという点で、仮想的である。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、およびオプション・ページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、しばしば、仮想アドレスを関連付けられた物理メモリ位置にマッピングするエントリを備える、変換索引バッファ(TLB)を使用することによって向上する。エントリは、DATが変換テーブルを使用して仮想アドレスを変換する場合に作成される。後続の仮想アドレスの使用では、低速順次変換テーブル・アクセスではなく高速TLBのエントリを使用することができる。TLBコンテンツは、LRU(最長時間未使用)を含む様々な置換アルゴリズムによって管理することができる。
【0185】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、各プロセッサは、コヒーレンスのために連結されたI/O、キャッシュ、TLB、およびメモリなどの共有リソースを維持するための責務を負う。典型的には、キャッシュ・コヒーレンスを維持する際には、「スヌープ」技術が使用されることになる。スヌープ環境において、各キャッシュ・ラインは、共有を容易にするために、共有状態、排他的状態、変更状態、無効状態などのうちのいずれか1つであるものとしてマーク付けすることが可能である。
【0186】
I/Oユニット5054(
図23)は、たとえばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺デバイスに接続するための手段を、プロセッサに提供する。I/Oユニットは、しばしば、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される。IBM(R)からのSystem zなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタは、オペレーティング・システムと周辺デバイスとの間に通信を提供する、メインフレームのI/Oユニットである。
【0187】
さらに、他のタイプのコンピューティング環境は、本発明の1つまたは複数の態様から恩恵を受けることができる。例として、環境は、特定のアーキテクチャ(たとえば、命令実行、アドレス変換などのアーキテクチャ機能、およびアーキテクチャ・レジスタを含む)、またはそのサブセットが(たとえばプロセッサおよびメモリを有するネイティブ・コンピュータ・システム上で)エミュレートされる、エミュレータ(たとえばソフトウェアまたは他のエミュレーション機構)を含むことができる。こうした環境において、エミュレータの1つまたは複数のエミュレーション機能は、たとえエミュレータを実行しているコンピュータが、エミュレートされている機能とは異なるアーキテクチャを有する可能性があっても、本発明の1つまたは複数の態様を実装することができる。一例として、エミュレーション・モードでは、エミュレートされている特定の命令または動作が復号され、個別の命令または動作を実装するために適切なエミュレーション機能が構築される。
【0188】
エミュレーション環境において、ホスト・コンピュータは、たとえば、命令およびデータを記憶するためのメモリと、メモリから命令をフェッチするため、およびオプションで、フェッチされた命令にローカル・バッファリングを提供するための、命令フェッチ・ユニットと、フェッチされた命令を受信するため、およびフェッチされた命令のタイプを決定するための、命令復号ユニットと、命令を実行するための命令実行ユニットと、を含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタからメモリに戻して記憶すること、または、復号ユニットによって決定されたように何らかのタイプの算術または論理演算を実行することを、含むことができる。一例において、各ユニットはソフトウェア内に実装される。たとえばユニットによって実行されている演算は、エミュレータ・ソフトウェア内の1つまたは複数のサブルーチンとして実装される。
【0189】
より具体的に言えば、メインフレーム内で、アーキテクチャ・マシン命令は、しばしばコンパイラ・アプリケーションを介して、プログラマ、通常は現在の「C」プログラマによって使用される。記憶媒体内に記憶されたこれらの命令は、本来、z/Architecture IBM(R)サーバ内で、あるいは他のアーキテクチャを実行しているマシン内で実行可能である。それらは、既存および将来のIBM(R)メインフレーム・サーバ内で、ならびにIBM(R)の他のマシン(たとえば、Power SystemsサーバおよびSystem x(R)サーバ)上で、エミュレート可能である。それらは、IBM(R)、Intel(R)、AMD(TM)、その他によって製造されたハードウェアを使用する多種多様なマシン上でLinuxを実行しているマシン内で実行可能である。z/Architectureの下でのそのハードウェア上での実行に加えて、Linux、ならびにHercules、UMX、またはFSI(Fundamental Software,Inc)によるエミュレーションを使用するマシンが使用可能であり、一般に、実行はエミュレーション・モードである。エミュレーション・モードの場合、エミュレーション・ソフトウェアは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、ネイティブ・プロセッサによって実行される。
【0190】
ネイティブ・プロセッサは、典型的には、エミュレートされたプロセッサのエミュレーションを実行するために、ファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含む、エミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令をフェッチおよび実行する責務を負う。エミュレーション・ソフトウェアは、命令境界を追跡するために、エミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、1回に1つまたは複数のエミュレートされたマシン命令をフェッチし、その1つまたは複数のエミュレートされたマシン命令を、ネイティブ・プロセッサによる実行のために、ネイティブ・マシン命令の対応するグループに変換する。これらの変換された命令は、より高速の変換が達成できるようにキャッシュに入れることができる。それにもかかわらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ用に作成されたオペレーティング・システムおよびアプリケーションが正しく動作することを保証するように、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持するものである。さらに、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、中断機構、コンテキスト切り替え機構、時刻機構(TOD)、およびI/Oサブシステムへのアーキテクチャ・インターフェースを含むがこれらに限定されない、エミュレートされたプロセッサ・アーキテクチャによって識別されたリソースを提供するものである。
【0191】
エミュレートされている特定の命令が復号され、個別の命令の機能を実行するために、サブルーチンが呼び出される。エミュレートされたプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、たとえば「C」サブルーチンまたはドライバ内で、あるいは、好ましい実施形態の説明を理解すれば当分野の範囲内であるような、特定のハードウェアにドライバを提供する何らかの他の方法で、実装される。Beausoleil等による「Multiprocessor for Hardware Emulation」という名称の米国特許証第5551013号と、Scalzi等による「Preprocessing of Stored Target Routines forEmulating Incompatible Instructions on a Target Processor」という名称の米国特許証第6009261号と、Davidian等による「Decoding Guest Instruction to Directly AccessEmulation Routines that Emulate the Guest Instructions」という名称の米国特許証第5574873号と、Gorishek等による「Symmetrical Multiprocessing Bus and ChipsetUsed for Coprocessor Support Allowing Non-Native Code to Run in a System」という名称の米国特許証第6308255号と、Lethin等による「Dynamic Optimizing Object Code Translator forArchitecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の米国特許証第6463582号と、Eric Trautによる「Method for Emulating Guest Instructions on aHost Computer Through Dynamic Recompilation of Host Instructions」という名称の米国特許証第5790825号と、多くのその他とを含むがこれらに限定されない、様々なソフトウェアおよびハードウェア・エミュレーション特許は、当業者が使用可能なターゲット・マシンに対して異なるマシン用にアーキテクチャされた命令形式のエミュレーションを達成する、様々な既知の方法を示す。
【0192】
図27では、ホスト・アーキテクチャのホスト・コンピュータ・システム5000’をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の例が示されている。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091はエミュレートされたホスト・プロセッサ(または仮想ホスト・プロセッサ)であり、ホスト・コンピュータ5000’のプロセッサ5091のそれとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を備える。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示の実施形態において、メモリ5094は、ホスト・コンピュータ・メモリ5096部分およびエミュレーション・ルーチン5097部分に区分される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従ってエミュレートされたホスト・コンピュータ5092のプログラムが使用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のそれとは異なるアーキテクチャのアーキテクチャ命令セットのネイティブ命令を実行し、そのネイティブ命令はエミュレーション・ルーチン・メモリ5097から取得され、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するために、アクセスされたホスト命令を復号することが可能な、あるシーケンスおよびアクセス/復号ルーチンで取得された1つまたは複数の命令を使用することによって、ホスト・コンピュータ・メモリ5096内のプログラムから実行のためにホスト命令にアクセスすることが可能である。ホスト・コンピュータ・システム5000’アーキテクチャ用に定義された他の機構は、たとえば汎用レジスタ、制御レジスタ、動的アドレス変換およびI/Oサブシステム・サポート、ならびにプロセッサ・キャッシュなどの機構を含む、アーキテクチャ機構ルーチンによってエミュレート可能である。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を向上させるために、(汎用レジスタおよび仮想アドレスの動的変換などの)エミュレーション・プロセッサ5093内で使用可能な機能も利用することができる。ホスト・コンピュータ5000’の機能をエミュレートする際にプロセッサ5093を支援するために、特別なハードウェアおよびオフロード・エンジンも提供可能である。
【0193】
本明細書で使用される用語は、特定の実施形態を説明する為のみのものであり、本発明を制限することは意図されていない。本明細書で使用される場合、単数形「a」、「an」、および「the」は、文脈によって特に明白に示されていない限り、複数形も同様に含むことが意図される。用語「含む」または「含んでいる」あるいはその両方は、本明細書で使用される場合、示された特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらすべての存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらすべての存在または追加を除外するものではないことをさらに理解されよう。
【0194】
以下の特許請求の範囲内のすべての手段またはステップ、ならびに機能要素の対応する構造、材料、動作、および等価物は、もしもあれば、具体的に請求された他の請求要素と組み合わせて機能を実行するための、任意の構造、材料、または動作を含むことが意図される。本発明の1つまたは複数の態様の説明は、例示および説明の目的で提示されたものであり、開示された形の本発明を網羅するかまたはそれに限定されることは意図されていない。当業者であれば、本発明の範囲を逸脱することなく、多くの修正および変形が明らかとなろう。実施形態は、本発明の原理および実際の適用例を最も良く説明するため、ならびに、他の当業者が、企図された特定の用途に適切な様々な修正を伴う様々な実施形態に関して本発明を理解できるようにするために、選択および説明されたものである。
【0195】
ベクトル文字列機構
命令
特に指定の無い限り、すべてのオペランドはベクトル・レジスタ・オペランドである。アセンブラ構文内の「V」はベクトル・オペランドを指定する。
【表7】
【表8】
【0196】
左から右へと進み、第2のオペランドのあらゆる符号なし2進整数要素は、第3のオペランドの各符号なし2進整数要素との、およびオプションでM
5フィールドにZero Searchフラグが設定された場合はゼロとの、同等性について比較される。
【0197】
M
5フィールド内のResult Type(RT)フラグがゼロである場合、第3のオペランド内の任意の要素に、またはオプションでゼロに一致する、第2のオペランド内の各要素について、第1のオペランド内の対応する要素のビット位置は1に設定され、そうでない場合はゼロに設定される。
【0198】
M
5フィールド内のResult Type(RT)フラグが1である場合、第3のオペランド内の要素またはゼロに一致する第2のオペランド内の左端要素のバイト・インデックスは、第1のオペランドのバイト7に記憶される。
【0199】
各命令は、推奨される拡張簡略記号およびそれらの対応するマシン・アセンブラ構文を記述する、Extended Mnemonicセクションを有する。
【0200】
プログラミング留意点:オプションで条件コードを設定するすべての命令について、条件コードが設定された場合、性能は低下する可能性がある。
【0201】
M
5フィールド内のResult Type(RT)フラグが1であり、等しいバイトが見つからないか、またはゼロ検索フラグが設定された場合に、ゼロである場合、ベクトル内のバイト数に等しいインデックスは第1のオペランドのバイト7に記憶される。
【0202】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約済み
M
5フィールドは以下の形式を有する。
【0204】
M
5フィールドのビットは以下のように定義される。
・Result Type(RT):ゼロの場合、各結果要素はその要素上のすべての領域比較のマスクである。1の場合、バイト・インデックスは第1のオペランドのバイト7に記憶され、ゼロはすべての他の要素内に記憶される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素もゼロと比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず、未変更のままである。1の場合、条件コードは以下のセクションで指定されるように設定される。
【0205】
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
1.M
4フィールドが3〜15の値を含む。
2.M
5フィールドのビット0がゼロでない。
結果として生じる条件コード:
CCフラグがゼロの場合、コードは未変更のままである。
CCフラグが1の場合、コードは以下のように設定される。
0 ZSビットが設定された場合、第2のオペランド内のゼロより下位のインデックス付けされた要素に一致がなかった。
1 第2のオペランドのいくつかの要素が、第3のオペランド内の少なくとも1つの要素と一致している。
2 第2のオペランドのすべての要素が、第3のオペランド内の少なくとも1つの要素と一致した。
3 第2のオペランド内のいずれの要素も、第3のオペランド内のいずれの要素と一致していない。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制約
拡張簡略記号:
【表10】
【表11】
【0206】
左から右へと進み、第2のオペランドの符号なし2進整数要素は、第3のオペランドの対応する符号なし2進整数要素と比較される。2つの要素が等しい場合、左端の等しい要素の第1のバイトのバイト・インデックスは、第1のオペランドのバイト7に配置される。ゼロは第1のオペランドの残りのバイト内に記憶される。等しいバイトが、またはゼロ比較が設定された場合はゼロが、見つからない場合、ベクトル内のバイト数に等しいインデックスが、第1のオペランドのバイト7に記憶される。ゼロは残りのバイト内に記憶される。
【0207】
M
5フィールド内にZero Search(ZS)ビットが設定された場合、第2のオペランド内の各要素は、ゼロとの同等性も比較される。第2および第3のオペランドの任意の他の要素が等しいことが見つかる前に、第2のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第1のバイトのバイト・インデックスは第1のオペランドのバイト7に記憶され、ゼロはすべての他のバイト位置に記憶される。Condition Code Set(CC)フラグが1の場合、条件コードはゼロに設定される。
【0208】
M
4フィールドは要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約済み
【0209】
M
5フィールドは以下の形式を有する。
【表12】
【0210】
M
5フィールドのビットは以下のように定義される。
・予約済み:ビット0〜1は予約され、ゼロでなければならない。そうでない場合、指定例外が認識される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素もゼロと比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは未変更のままである。1の場合、条件コードは以下のセクションに指定されたように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
1.M
4フィールドが3〜15の値を含む。
2.M
5フィールドのビット0〜1がゼロでない。
結果として生じる条件コード:
M
5フィールドのビット3が1に設定された場合、コードは以下のように設定される。
0 ゼロ比較ビットが設定される場合、比較は、任意の同等比較よりも小さいインデックスを備える要素内の第2のオペランド内にゼロ要素を検出した。
1 比較は、何らかの要素内の第2と第3のオペランド間に一致を検出した。ゼロ比較ビットが設定される場合、この一致は、ゼロ比較要素よりも小さいかまたは等しいインデックスを備える要素内で発生した。
2 ――
3 いかなる要素も同等を比較しなかった。
M
5フィールドのビット3がゼロの場合、コードは未変更のままである。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制約
拡張簡略記号:
【表13】
【0211】
プログラミング留意点:
1.バイト・インデックスが、任意の要素サイズに関する第1のオペランド内に常に記憶される。たとえば、要素サイズがハーフワードに設定され、第2のインデックス付けされたハーフワードが等しく比較された場合、4のバイト・インデックスが記憶されたことになる。
2.第3のオペランドはゼロの値を伴う要素を含まないはずである。第3のオペランドがゼロを含み、これが、任意の他の同等比較の前に、第2のオペランド内のゼロ要素と一致する場合、ゼロ比較ビット設定にかかわらず、条件コード1が設定される。
【表14】
【0212】
左から右へと進み、第2のオペランドの符号なし2進整数要素は、第3のオペランドの対応する符号なし2進整数要素と比較される。2つの要素が等しくない場合、左端の等しくない要素のバイト・インデックスは、第1のオペランドのバイト7に配置され、ゼロはすべての他のバイトに記憶される。M
5フィールド内のCondition Code Set(CC)ビットが1に設定された場合、条件コードは、いずれのオペランドが大きかったかを示すように設定される。すべての要素が等しかった場合、ベクトル・サイズに等しいバイト・インデックスは第1のオペランドのバイト7に配置され、ゼロはすべての他のバイト位置に配置される。CCビットが1の場合、条件コード3が設定される。
【0213】
M
5フィールド内にZero Search(ZS)ビットが設定された場合、第2のオペランド内の各要素は、ゼロとの同等性も比較される。第2のオペランドの任意の他の要素が等しくないことが見つかる前に、第2のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第1のバイトのバイト・インデックスは、第1のオペランドのバイト7に記憶される。ゼロはすべての他のバイトに記憶され、条件コード0が設定される。
【0214】
M
4フィールドは要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約済み
M
5フィールドは以下の形式を有する。
【表15】
【0215】
M
5フィールドのビットは以下のように定義される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素もゼロと比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず、未変更のままである。1の場合、条件コードは以下のセクションに指定されたように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
1.M
4フィールドが3〜15の値を含む。
2.M
5フィールドのビット0〜1がゼロでない。
結果として生じる条件コード:
M
5フィールドのビット3が1に設定された場合、コードは以下のように設定される。
0 ゼロ、比較ビットが設定される場合、比較は、任意の不等比較よりも下位のインデックス付けされた要素内の両方のオペランド内にゼロ要素を検出した。
1 要素不一致が検出され、VR2内の要素はVR3内の要素よりも小さい。
2 要素不一致が検出され、VR2内の要素はVR3内の要素よりも大きい。
3 すべての要素が同等を比較し、ゼロ比較ビットが設定された場合、第2のオペランド内にゼロ要素は見つからなかった。
M
5フィールドのビット3がゼロの場合、コードは未変更のままである。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制約
拡張簡略記号:
【表16】
【表17】
【0216】
左から右へと進み、第2のオペランド内の符号なし2進整数要素は、第3および第4のオペランド内の要素の偶数奇数ペアによって定義された値の範囲と比較される。第4のオペランドからの制御値との組み合わせは、実行されることになる比較の範囲を定義する。要素が、第3および第4のオペランドによって指定された範囲のいずれかと一致する場合、これは一致であるとみなされる。
【0217】
M
6フィールド内のResult Type(RT)フラグがゼロの場合、第2のオペランド内で比較されている要素に対応する第1のオペランド内の要素のビット位置は、要素が範囲のいずれかに一致する場合、1に設定され、そうでない場合はゼロに設定される。
【0218】
M
6フィールド内のResult Type(RT)フラグが1に設定された場合、第3および第4のオペランドによって、またはZSフラグが1に設定された場合はゼロ比較によって、指定された範囲のいずれかと一致する、第2のオペランド内の第1の要素のバイト・インデックスは第1のオペランドのバイト7に配置され、ゼロは残りのバイト内に記憶される。要素が一致しない場合、ベクトル内のバイト数に等しいインデックスが第1のオペランドのバイト7に配置され、ゼロは残りのバイトに記憶される。
【0219】
M
6フィールド内のZero Search(ZS)フラグは、1に設定された場合、第2のオペランド要素のゼロと第3および第4のオペランドによって提供された範囲との比較を追加することになる。任意の他のtrue比較よりも下位のインデックス付けされた要素におけるゼロ比較の場合、条件コードはゼロに設定される。
【0220】
オペランドは、M
5フィールド内の要素サイズ制御によって指定された要素を含む。第4のオペランド要素は以下の形を有する。
【表18】
【0221】
第4のオペランド要素内のビットは、以下のように定義される。
・Equal(EQ):1の場合、同等に関する比較が実行される。
・Greater Than(GT):1の場合、大なり比較(greater than comparison)が実行される。
・Less Than(LT):1の場合、小なり比較が実行される。
・すべての他のビットは予約され、今後の互換性を保証するためにゼロのはずである。
【0222】
制御ビットは任意の組み合わせで使用可能である。ビットがいずれも設定されない場合、比較は常にfalse結果を生成する。ビットのすべてが設定された場合、比較は常にtrue結果を生成する。
【0223】
M
5フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約済み
【0224】
M
6フィールドは以下の形式を有する。
【表19】
【0225】
M
6フィールドのビットは以下のように定義される。
・Invert Result(IN):ゼロの場合、比較は制御ベクトル内の値のペアを用いて進行する。1の場合、範囲内の比較のペアの結果は逆転される。
・Result Type(RT):ゼロの場合、各結果要素はその要素上のすべての領域比較のマスクである。1の場合、インデックスは第1のオペランドのバイト7に記憶される。ゼロは残りのバイト内に記憶される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素もゼロと比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず、未変更のままである。1の場合、条件コードは以下のセクションで指定されるように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
1.M
4フィールドが3〜15の値を含む。
結果として生じる条件コード:
0 ZS=1および、任意の比較より下位のインデックス付けされた要素内にゼロが見つかった場合
1 比較が見つかった
2 −−
3 比較は見つからず
プログラム例外
・ DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制約
拡張簡略記号:
【表20】
【表21】
【表22】
【0226】
指定されたブロック境界を横切ることなく、第2のオペランド位置からロードすることが可能なバイト数を含む32ビットの符号なし2進整数は、上限16として、第1のオペランド内に配置される。
【0227】
変位は、12ビットの符号なし整数として扱われる。
【0228】
第2のオペランド・アドレスは、データのアドレス指定に使用されない。
【0229】
M
3フィールドは、ロードされる可能なバイト数を計算するために、ブロック境界に関してCPUに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。
【表23】
結果として生じる条件コード:
0 オペランド1は16
1 −−
2 −−
3 オペランド1は16未満
結果として生じる条件コード:
プログラム例外:
・ベクトル拡張機構がインストールされていない場合の演算
・指定
プログラミング留意点:LOADCOUNT TO BLOCK BOUNDARYは、ロードされたバイト数を決定するために、VECTOR LOAD TO BLOCK BOUNDARYと共に使用されることになるものと予測される。
【表24】
【0230】
M
4フィールド内のES値によって指定されたサイズの第3のオペランドの、第2のオペランド・アドレスによってインデックス付けされた要素は、第1のオペランド位置に配置される。第3のオペランドはベクトル・レジスタである。第1のオペランドは汎用レジスタである。第2のオペランド・アドレスによって指定されたインデックスが、指定された要素サイズの、第3のオペランド内で最高の数が付けられた要素よりも大きい場合、第1のオペランド内のデータは予測不可能である。
ベクトル・レジスタ要素がダブルワードよりも小さい場合、要素は64ビット汎用レジスタ内で右揃えされ、ゼロが残りのビットを満たす。
第2のオペランド・アドレスはデータのアドレス指定に使用されず、代わりに、アドレスの右端12ビットが、第2のオペランド内の要素のインデックスを指定するために使用される。
M
4フィールドは要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3−ダブルワード
4〜15−予約済み未変更
結果として生じる条件コード:コードは未変更である。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制約
拡張簡略記号:
【表25】
【表26】
第1のオペランドは、ゼロ・インデックス付けされたバイト要素から始まり、第2のオペランドからのバイトでロードされる。境界条件に遭遇した場合、第1のオペランドの残りは予測不可能である。アクセス例外は、ロードされていないバイトでは認識されない。
VLBBに関する変位は、12ビットの符号なし整数として扱われる。
M
3フィールドは、ロードするためのブロック境界サイズに関して、CPUに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。
【表27】
結果として生じる条件コード:コードは未変更のままである。
プログラム例外:
・アクセス(フェッチ、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定(予約されたブロック境界コード)
・トランザクション制約
プログラミング留意点:
1.ある環境において、データはブロック境界を超えてロードすることができる。しかしながらこれは、そのデータに関してアクセス例外がない場合にのみ発生することになる。
【表28】
第1のオペランド内の128ビット値は、第2のオペランドによって指定された記憶位置に記憶される。VSTに関する変位は、12ビットの符号なし整数として扱われる。
結果として生じる条件コード:コードは未変更のままである。
プログラム例外:
・アクセス(記憶、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・トランザクション制約
【表29】
左から右へと進み、第1のオペランドからのバイトは第2のオペランド位置に記憶される。第3のオペランドを指定した汎用レジスタは、最高位のインデックス付けされたバイトを記憶することを表す値を含む32ビットの符号なし整数を含む。第3のオペランドがベクトルの最高位ビット・インデックスより大きいかまたは等しい値を含む場合、第1のオペランドのすべてのバイトが記憶される。
アクセス例外は、記憶されたバイトに関してのみ認識される。
VECTOR STORE WITH LENGTHに関する変位は、12ビットの符号なし整数として扱われる。
結果として生じる条件コード:条件コードは未変更のままである。
プログラム例外:
・アクセス(記憶、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・トランザクション制約
【0231】
RXBの説明
すべてのベクトル命令は、RXBとラベル表示された命令のビット36〜40にフィールドを有する。このフィールドは、すべてのベクトル・レジスタ指定オペランドに関する最上位ビットを含む。命令によって指定されないレジスタ指定に関するビットは予約され、ゼロに設定されるはずであるが、そうでない場合、プログラムは将来互換的に動作しない可能性がある。最上位ビットは5ビットのベクトル・レジスタ指定を作成するために、4ビットのレジスタ指定の左側に切り詰められる。
ビットは以下のように定義される。
0. 命令のビット8〜11内のベクトル・レジスタ指定に関する最上位ビット。
1. 命令のビット12〜15内のベクトル・レジスタ指定に関する最上位ビット。
2. 命令のビット16〜19内のベクトル・レジスタ指定に関する最上位ビット。
3. 命令のビット32〜35内のベクトル・レジスタ指定に関する最上位ビット。
ベクトル実行可能化制御
ベクトル・レジスタおよび命令は、制御レジスタ・ゼロ内のベクトル実行可能化制御(ビット46)およびAFPレジスタ制御(ビット45)の両方が1に設定された場合にのみ、使用可能である。ベクトル機構がインストールされ、実行可能化ビットが設定されずにベクトル命令が実行される場合、DXC FE 16進数を伴うデータ例外が認識される。ベクトル機構がインストールされていない場合、演算例外が認識される。