【文献】
International Business Machines Corporation,"Power ISA Version 2.06 Revision B",米国,2010年 7月23日,p.405-406,URL,https://www.power.org/wp-content/uploads/2012/07/PowerISA_V2.06B_V2_PUBLIC.pdf
(58)【調査した分野】(Int.Cl.,DB名)
前記マシン命令は別のマスク・フィールドをさらに含み、前記別のマスク・フィールドは要素サイズ制御を含み、前記要素サイズ制御は、前記第1のオペランド、前記第2のオペランド、又は前記第3のオペランドの少なくとも1つにおける要素のサイズを指定し、前記サイズは前記調整するステップで使用される、請求項2に記載の方法。
前記結果は前記第2のオペランドのサイズを示す値を含み、前記方法は、前記結果を前記第1のオペランド内に格納するステップをさらに含む、請求項1〜3のいずれか1項に記載の方法。
前記実行するステップは、前記比較の方向を判断するステップを含み、前記方向は左から右又は右から左のうちの一方である、請求項1〜6のいずれか1項に記載の方法。
前記第2のオペランド及び前記第3のオペランドはNバイトを含み、前記比較するステップは、前記第2のオペランドの前記Nバイトを前記第3のオペランドの前記Nバイトと並行して比較するステップを含み、要素のサイズは1バイト、2バイト、又は4バイトのうちの1つを含む、請求項1〜8のいずれか1項に記載の方法。
前記ゼロ要素の前記インデックスはバイト・インデックスを含み、前記バイト・インデックスは前記ゼロ要素の最初のバイトのインデックスである、請求項1〜9のいずれか1項に記載の方法。
前記等値要素の前記インデックスはバイト・インデックスを含み、前記バイト・インデックスは前記等値要素のバイトのインデックスである、請求項1〜10のいずれか1項に記載の方法。
ゼロ要素が見出されない旨の前記指示又は等値性がない旨の前記指示は、前記ヌル・インデックス又は前記比較インデックスの少なくとも一方において、前記第2のオペランドのサイズを表す数を含む、請求項1〜11のいずれか1項に記載の方法。
【発明を実施するための形態】
【0012】
本発明の1つの態様によると、これらに限定されるものではないが、いずれかの言語の英文字、数字、句読点、及び/又は他の記号を含む、文字データの処理を容易にするための能力が提供される。文字データは、データ・ストリングである場合も又はそうでない場合もある。規格が文字データと関連付けられ、規格の例として、これらに限定されるものではないが、ASCII(American Standard Code for Information Interchange)、及びUnicodeが挙げられるが、Unicodeは、これらに限定されるものではないが、UTF(Unicode Transformation Format)8、UTF16等を含む。
【0013】
一例において、等値性(equality)に関して複数のベクトルのデータを比較し、等値性が存在する場合には等値性の指示を提供するFind Element Equal命令が提供される。一例において、等値要素と関連付けられたインデックスが、ターゲット・ベクトル・レジスタに格納される。
【0014】
本明細書で説明されるように、ベクトル・レジスタ(ベクトルとも呼ばれる)の要素の長さは、例として、1バイト、2バイト、又は4バイトであり、ベクトル・オペランドは、例えば、複数の要素を有するSIMD(Single Instruction、Multiple Data)オペランドである。他の実施形態において、要素は他のサイズとすることができ、ベクトル・オペランドは、SIMDである必要はなく、及び/又は1つの要素を含んでいてもよい。
【0015】
更に別の実施形態において、同じ命令、即ちFind Element Equal命令はまた、ゼロ要素(例えば、要素全体がゼロである)とも呼ばれるヌル(null)要素を探して、選択されたベクトルを検索する。ヌル又はゼロ要素は、例えば、特定のデータ・ストリングの最後などの文字データの終端を示す。命令の結果は、ヌル検索が実施されるか又は比較だけかによって決まる。
【0016】
更に別の実施形態において、特定の文字及び/又はゼロ要素を探してベクトルを検索し、一致した文字又はゼロ要素のマスク又はバイト・インデックスを戻す、Vector Find Any Equal命令が提供される。
【0017】
本発明の1以上の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、
図1を参照して説明される。コンピューティング環境100は、例えば1以上のバス108及び/又は他の通信手段を介して互いに接続された、例えば、プロセッサ102(例えば中央演算処理ユニット)、メモリ104(例えばメインメモリ)、並びに1以上の入力/出力(I/O)デバイス及び/又はインターフェース106を含む。
【0018】
一例において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architectureに基づいており、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、System zサーバなどのサーバの一部であり、z/Architectureを実装する。z/Architectureの一実施形態は、非特許文献1に記載されている。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、z/OSなどのオペレーティング・システムを実行する。IBM(登録商標)、Z/ARCHITECTURE(登録商標)及びZ/OS(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名である場合がある。
【0019】
更に別の実施形態において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPower Architectureに基づく。Power Architectureの一実施形態は、非特許文献2に記載されている。POWER ARCHITECTURE(登録商標)は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【0020】
更に別の実施形態において、プロセッサ102は、Intel Corporationにより提供されるIntelアーキテクチャに基づく。Intelアーキテクチャの一実施形態は、非特許文献3及び非特許文献4に記載されている。Intel(登録商標)は、カリフォルニア州サンタクララ所在のIntel Corporationの登録商標である。
【0021】
本発明の1以上の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、
図2Aを参照して説明される。この例において、コンピューティング環境200は、例えば1以上のバス208及び/又は他の通信手段を介して互いに接続された、例えば、ネイティブ中央演算処理プロセッサ202、メモリ204、並びに1以上の入力/出力(I/O)デバイス及び/又はインターフェース206を含む。例として、コンピューティング環境200は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPowerPCプロセッサ、pSeiesサーバ、又はxSeriesサーバ、及びカリフォルニア州Palo Alto所在のHewlett Packard Co.により提供されるIntel Itanium IIプロセッサを伴うHP Superdome、及び/又はインターナショナル・ビジネス・マシーンズ・コーポレーション、Hewlett Packard、Intel、Oracle、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
【0022】
ネイティブ中央演算処理ユニット202は、コンピューティング環境内での処理の際に用いられる、1以上の汎用レジスタ及び/又は1以上の専用レジスタなどの1以上のネイティブ・レジスタ210を含む。これらのレジスタは、任意の時点におけるコンピューティング環境の状態を表す情報を含む。
【0023】
さらに、ネイティブ中央演算処理ユニット202は、メモリ204内に格納された命令及びコードを実行する。1つの特定の例において、中央演算処理ユニットは、メモリ204内に格納されたエミュレータ・コード212を実行する。このコードにより、1つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード212により、PowerPCプロセッサ、pSeriesサーバ、xSeriesサーバ、HP Superdomeサーバなどの、z/Architecture以外のアーキテクチャに基づくマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェア及び命令を実行することが可能になる。
【0024】
エミュレータ・コード212に関する更なる詳細が、
図2Bを参照して説明される。ゲスト命令250が、ネイティブCPU202のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令(例えば、マシン命令)を含む。例えば、ゲスト命令250は、z/Architectureプロセッサ102上で実行されるように設計されるが、代わりに、例えばIntel Itanium IIプロセッサとすることができるネイティブCPU202上でエミュレートされることもある。一例において、エミュレータ・コード212は、メモリ204から1以上のゲスト命令250を取得し、取得された命令に対してローカル・バッファリングを任意で提供するための命令フェッチ・ユニット252を含む。エミュレータ・コード212また、取得されたゲスト命令のタイプを判断し、ゲスト命令を1以上の対応するネイティブ命令256に変換するための命令変換ルーチン254も含む。この変換は、例えば、ゲスト命令により実施される機能を識別するステップと、その機能を実施するためのネイティブ命令を選択するステップとを含む。
【0025】
さらに、エミュレータ212は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、ネイティブCPU202に、1以上の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又は1群のゲスト命令の取得をエミュレートするために、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令256の実行は、データをメモリ204からレジスタ内にロードするステップと、データをレジスタから再びメモリに格納するステップと、又は変換ルーチンによって求められるような何らかのタイプの算術演算又は論理演算を実施するステップとを含むことができる。
【0026】
各ルーチンは、例えば、メモリ内に格納されてネイティブ中央演算処理ユニット202によって実行されるソフトウェアに実装される。他の例において、1以上のルーチン又はオペレーションは、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせに実装される。エミュレートされるプロセッサのレジスタは、ネイティブCPUのレジスタ210又はメモリ204内の位置を使用して、エミュレートすることができる。実施形態において、ゲスト命令250、ネイティブ命令256、及びエミュレータ・コード212は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分散されてもよい。
【0027】
本明細書で用いられるファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び/又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎となるハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【0028】
一例において、取得され、変換され、実行されるゲスト命令250は、本明細書で説明される命令の1つである。或るアーキテクチャ(例えば、z/Architecture)の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC、pSeries、xSeries、Intelなど)のネイティブ命令256のシーケンスとして表される。次に、これらのネイティブ命令が実行される。
【0029】
一実施形態において、本明細書で説明される命令は、本発明の1つの態様に従って提供される、ベクトル・ファシリティの一部であるベクトル命令である。ベクトル・ファシリティは、例えば、1つの要素から16の要素までの範囲の固定サイズのベクトルを提供する。各ベクトルは、ファシリティ内で定められたベクトル命令により演算されるデータを含む。一実施形態において、ベクトルが複数の要素で構成される場合、各要素は、他の要素と並行して処理される。全ての要素の処理が完了するまで、命令は完了しない。
【0030】
本明細書で説明されるように、ベクトル命令は、これらに限定されるものではないが、z/Architecture、Power、Intel等を含む、種々のアーキテクチャの一部として実装することができる。本明細書で説明される実施形態はz/Architectureに関するものであるが、ベクトル命令、及び本発明の1以上の態様は、他の多くのアーキテクチャに基づくことができる。z/Architectureは一例にすぎない。
【0031】
ベクトル・ファシリティがz/Architectureの一部として実装される一実施形態において、ベクトル・レジスタ及び命令を使用するために、指定された制御レジスタ(例えば、制御レジスタ0)におけるベクトル・イネーブルメント制御(vector enablement control)及びレジスタ制御が、例えば1に設定される。ベクトル・ファシリティがインストールされており、ベクトル命令がイネーブルメント制御の設定なしに実行される場合、データ例外が認識される。ベクトル・ファシリティがインストールされておらず、ベクトル命令が実行される場合、演算例外が認識される。
【0032】
ベクトル・データは、ストレージにおいて、例えば、他のデータ形式と同じ左から右への順序で現れる。0−7の番号が付けられたデータ形式のビットは、ストレージ内の左端の(最小番号を付された)バイト位置のバイトを構成し、ビット8−15は、次の順次位置のバイトを形成し、以下同様である。更に別の例において、ベクトル・データは、ストレージにおいて、右から左などの別の順序で現れることがある。
【0033】
ベクトル・ファシリティが与えられるベクトル命令の多くは、指定ビットのフィールドを有する。レジスタ拡張ビット(register extension bit)又はRXBと呼ばれるこのフィールドは、ベクトル・レジスタ指定のオペランドの各々についての最上位ビットを含む。命令によって指定されないレジスタ指示のためのビットは、予約され、ゼロに設定される。
【0034】
一例において、RXBフィールドは4ビット(例えば、ビット0−3)を含み、これららのビットは、以下のように定義される。
0−命令の第1のベクトル・レジスタ指定のための最上位ビット。
1−もしあれば、命令の第2のベクトル・レジスタ指定のための最上位ビット。
2−もしあれば、命令の第3のベクトル・レジスタ指定のための最上位ビット。
3−もしあれば、命令の第4のベクトル・レジスタ指定のための最上位ビット。
【0035】
各ビットは、例えば、レジスタ番号に応じて、アセンブラによりゼロ又は1に設定される。例えば、レジスタ0−15に対してビットは0に設定され、レジスタ16−31に対してビットは1に設定される、などである。
【0036】
一実施形態において、各々のRXBビットは、1以上のベクトル・レジスタを含む命令における特定の位置のための拡張ビットである。例えば、1以上のベクトル命令において、RXBのビット0は、位置8−11のための拡張ビットであり、これが、例えばV
1に割り当てられ、RXBのビット1は、位置12−15のための拡張ビットであり、これが例えばV
2に割り当てられ、以下同様である。
【0037】
更に別の実施形態において、RXBフィールドは付加的なビットを含み、複数のビットが、各ベクトル又は位置のための拡張として用いられる。
【0038】
RXBフィールドを含む、本発明の1つの態様に従って提供される1つの命令は、Vector Find Element Equal命令であり、その一例を
図3に示す。一例において、Vector Find Element Equal命令300は、Vector Find Element Equalオペレーションを指示するオペコード・フィールド302a(例えば、ビット0−7)、302b(例えば、ビット40−47)と、第1のベクトル・レジスタ(V
1)を指示するのに用いられる第1のベクトル・レジスタ・フィールド304(例えば、ビット8−11)と、第2のベクトル・レジスタ(V
2)を指示するのに用いられる第2のベクトル・レジスタ・フィールド306(例えば、ビット12−15)と、第3のベクトル・レジスタ(V
3)を指示するのに用いられる第3のベクトル・レジスタ・フィールド308(例えば、ビット16−19)と、第1のマスク・フィールド(M
5)310(例えば、ビット24−27)と、第2のマスク・フィールド(M
4)312(例えば、ビット32−35)と、RXBフィールド314(例えば、ビット36−39)とを含む。フィールド304−314の各々は、一例において、オペコード・フィールドから分離され、独立している。さらに、一実施形態において、これらのフィールド304−314は互いに分離し、独立しているが、他の実施形態においては、複数のフィールドを組み合わせてもよい。これらのフィールドの使用に関する更なる情報を以下に説明する。
【0039】
一例において、オペコード・フィールド302aにより指示されるオペコードの選択されたビット(例えば、最初の2ビット)は、命令の長さ及び形式を指定する。この特定の例において、選択されたビットは、長さは3ハーフワード(halfword)であり、形式は、拡張されたオペコードを伴うベクトル・レジスタ・アンド・レジスタ操作(vector register−and−register operation)であることを示す。ベクトル(V)フィールドの各々は、RXBによって指定されたその対応するレジスタ拡張ビットと共に、ベクトル・レジスタを指示する。特に、ベクトル・レジスタについては、オペランドを有するレジスタは、例えば、レジスタ拡張ビット(RXB)を最上位ビットとして付加したレジスタ・フィールドの4ビット・フィールドを用いて指定される。例えば、4ビット・フィールドが0110であり、拡張ビットが0である場合、5ビット・フィールド00110はレジスタ番号6を示す。
【0040】
命令フィールドに付随する下付き数字は、そのフィールドが適用されるオペランドを示す。例えば、ベクトル・レジスタV
1に付随する下付き数字1は、第1のオペランドを示し、以下同様である。レジスタ・オペランドは、長さが1レジスタであり、これは例えば128ビットである。
【0041】
例えば4ビット(0−3)を有するM
4フィールドは、例えばビット1−3における要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタ・オペランドにおける要素のサイズを指定する。例として、要素サイズ制御は、バイト、ハーフワード(例えば2バイト)、又はワード(word)(例えば4バイト)を指定する。例えば、0は1バイトを示し、1はハーフワードを示し、2はワード、別名フルワード(fullword)を示す。予約値が指定されている場合、指定例外が認識される。
【0042】
M
5フィールドは、例えば4ビット・フィールド(ビット0−3)であり、例えば、以下のものを含む。
ゼロ検索(zero search)フィールド(ZS、ビット2):1である場合、第2のオペランドの各要素がゼロ(又は、ヌル)とも比較される。(更に別の例において、ゼロと比較するのは、第3のオペランド又は別のオペランドの各要素である。)
条件コード設定(condition code set)フィールド(CC、ビット3):ゼロである場合、条件コードは設定されず、変更されないままである。1である場合、条件コードは、一例として以下に指定されるように設定される。
0−ゼロ検索ビットが設定されている場合、比較により、いずれの等値比較よりも下位のインデックスを有する要素のオペランド内でゼロ要素が検出された。
1−比較により、ある要素における第2のオペランドと第3のオペランドとの間で一致が検出された。ゼロ検索ビットが設定されている場合、この一致は、ゼロ比較要素より小さいか又はこれに等しいインデックスを有する要素において生じた。
2−−−
3−等値比較される要素はない。
【0043】
一実施形態において左から右へと進む、Vector Find Element Equal命令の一実施形態の実行において、第2のオペランド(V
2+そのRXBビットにより指示されるレジスタ内に含まれる)の符号なし2進整数要素を、第3のオペランド(V
3およびそのRXBビットにより指示されるレジスタ内に含まれる)の対応する符号なし2進整数要素と比較する。2つの要素が等しい場合、左端の等値要素の最初のバイトのバイト・インデックスが、第1のオペランド(V
1+そのRXBビットにより指示されるレジスタ内に含まれる)の選択されたバイト(例えば、バイト7)に入れられる。第1のオペランドの残りのバイトにゼロが格納される。
【0044】
例えば、要素サイズが1バイトである場合、左端の等値要素のバイト・インデックスが戻される(例えば、16個の要素(0−15)が存在し、要素6が等値である場合、バイト・インデックス6が戻される)。同様に、要素サイズがハーフワードであり、8つの要素(0−7)が存在し、且つ、要素3のバイト6及び7の両方とも等値である場合、バイト・インデックス6が戻される。さらに、要素サイズがフルワードであり、4つの要素(0−3)が存在し、要素1のバイト4−7の全てが等値である場合、バイト・インデックス4が戻される。
【0045】
いずれのバイトも等値であることが見出されず、又はゼロ検索が設定された場合にゼロである場合、ベクトル・サイズ(例えば、16などのバイト数)に等しいインデックスが、第1のオペランドの指定されたバイト(例えば、バイト7)に格納される。残りのバイトにゼロが格納される。
【0046】
M
5フィールドにおいてゼロ検索ビットが設定されている場合、等値性に関して、第2のオペランド(又は、別の実施形態においては、オペランド3などの別のオペランド)の各要素を、ゼロ(又は、ヌルやストリングの最後等)とも比較する。第2のオペランド及び第3のオペランドの他のいずれかの要素が等値であることが見出される前に、第2のオペランドにおいてゼロ要素が見出された場合、ゼロであることが見出された要素の最初のバイトのバイト・インデックスが、第1のオペランドの指定されたバイト(例えば、バイト7)に格納され、全ての他のバイト位置にゼロが格納される。条件コード設定フラグが1である場合、条件コードが0に設定される。
【0047】
一実施形態において、要素の比較が、並行して行われる。例えば、比較されるベクトル・レジスタの長さが16バイトである場合、16バイトが並行して比較される。さらに、一実施形態においては、実行時に、左から右又は右から左へのベクトル方向が与えられる。例えば、命令は、レジスタ、状況制御、又は例として左から右又は右から左への処理の方向を示す他のエンティティにアクセスする。一実施形態において、この方向制御は、命令の一部として符号化されないが、実行時に命令に与えられる。
【0048】
更に別の実施形態において、命令は、RXBフィールドを含まない。代わりに、拡張は、使用されないか、又は命令の外部の制御からなどの別の手法で与えられるか、又は命令の別のフィールドの一部として与えられる。
【0049】
Vector Find Element Equal命令の処理の一実施形態に関する更なる詳細が、
図4を参照して説明される。一例において、コンピューティング環境のプロセッサが、この論理を実施している。
【0050】
最初に、ヌル(ゼロ要素、ストリングの最後、ターミネータ等としても知られる)の検索を実施するかどうかについての判断がなされる(問い合わせ400)。ヌルの検索が実施される場合、ヌル文字に対して、即ちゼロ要素に関して、比較が実施され(ステップ402)、結果がnullidx403に出力される。例えは、要素サイズがバイトであり、バイト5内にゼロ要素が見出された場合、ゼロ要素が見出されたバイトのインデックス(例えば、5)がnullidxに入れられる。同様に、要素サイズがハーフワードであり、8つの要素(0−7)が存在し、要素3(即ち、バイト6−7)がゼロである場合、6(バイト・インデックス6に関する)がnullidxに入れられる。同様に、要素サイズがフルワードであり、4つの要素(0−3)が存在し、要素1(即ち、バイト4−7)がゼロである場合、4(バイト・インデックス4に関する)がnullidxに入れられる。ヌル要素が見出されない場合、次に、一例において、ベクトルのサイズ(例えば、16などのバイト単位の)がnullidxに入れられる。
【0051】
付加的に、又はヌル検索が実施されない場合、比較演算に基づいてAとBとを比較する複数(例えば、16)の比較が並行して実施される(ステップ404)。一例において、Aは第2のオペランドのコンテンツであり、Bは第3のオペランドのコンテンツであり、比較演算は等値比較である。
【0052】
比較の結果は、検索が左からであるか又は右からであるかに応じて、左インデックス(cmpidxl)又は右インデックス(cmpidxr)と呼ばれる変数406に格納される。例えば、比較が等値比較であり、検索が左から右であり、比較により1以上の等値性がもたらされる場合、最下位の等値要素の最初のバイトと関連したインデックスがcmpidxlに入れられる。一例として、要素サイズがバイトであり、ベクトル内に16の要素(0−15)が存在し、要素6内に等値性が見出された場合、6がcmpidxlに格納される。同様に、要素サイズがハーフワードであり、ベクトル内に8つの要素(0−7)が存在し、要素3において(例えば、バイト6又は7において)等値性が見出された場合、要素の最初のバイト(バイト6)のインデックスが戻される。同様に、要素サイズがフルワードであり、4つの要素(0−3)が存在し、要素1内に(例えば、バイト4−7に)等値性が見出された場合、要素の最初のバイト(バイト4)のインデックスが戻される。等値比較が存在しない場合、次に、一実施形態において、比較の方向に応じて、cmpidxl又はcmpidxrが、ベクトルのサイズ(例えば、16などのバイト単位の)と等しくなるように設定される。
【0053】
その後、検索が左からか又は右からかについての判断がなされる(問い合わせ408)。検索が左からである場合、変数cmpidxはcmpidxlと等しくなるように設定され(ステップ410)、他の場合には、cmpidxは、cmpidxrと等しくなるように設定される(ステップ412)。
【0054】
cmpidxを設定した後、ヌル文字に関して検索が実施されたかどうかについての判断がなされる(問い合わせ414)。ヌル文字の検索が実施されなかった場合、例えば、変数idxが設定されるか、又は比較インデックスcmpidxが設定される(ステップ416)。ヌルが検索された場合、idxは、比較インデックス又はヌル・インデックス、nullidxの最小値に設定される(ステップ418)。これで処理は終了する。
【0055】
図4の処理についてのブロック論理の例が、
図5に示される。この例では、2つの入力、即ちベクトルB500及びベクトルA502が存在する。両方の入力とも、比較(例えば、非等値)を並行して実施する比較論理504に入力される。さらに、一方の入力、ベクトルAは、ヌル処理を行うゼロ検出論理506にも入力される。
【0056】
比較論理の出力idxL又はidxR508、並びにゼロ検出論理の出力nullidx510が、結果判断論理512に入力される。また、結果判断論理は、以下の制御、即ち検索の方向を指示する右/左514、ヌル処理が行われるかどうかを指示するゼロ検出516、及び各要素のサイズ(例えば、バイト、ハーフワード、ワード)をもたらす要素サイズ518を入力として利用し、結果のインデックス520、resultidxを生成し、これを出力ベクトル522に(例えば、バイト7に)格納する。
【0057】
さらに、結果判断論理は、条件コード524を任意で出力する条件コード処理523を含む。
【0058】
比較論理504に関する擬似コードの例は以下の通りである。
【表1】
【0059】
示されるように、方向に依存する変数idxL又はidxRを、ベクトルのサイズ(例えば、16などのバイト数での)に初期化する。次に、ベクトルAの各要素を、ベクトルBの対応する要素と比較する。一例において、比較はバイト比較であり、従って、16バイトの各々(i)について比較を実施する。この例では、比較演算は等値比較であり、等値性が見出された場合、バイトのインデックスは、左からの検索の場合にはidxLに、又は右からの検索の場合にはidxRに格納される。
【0060】
ゼロ検出論理506についての例示的な擬似コードは、以下の通りである。
【表2】
【0061】
示されるように、ベクトルの各要素(j)を検査して、各要素(j)がゼロに等しいかどうかを確認する。要素がゼロに等しい場合、nullidxを、その要素のインデックスと要素サイズとの積に等しくなるように設定する。例えば、要素サイズがハーフワード(2バイト)であり、要素3内にヌル文字が検出された場合、3に2を乗算し、nullidxを、バイト6を表す6に設定する。同様に、要素サイズがフルワード(4バイト)であり、要素3内にヌル文字が検出された場合、3に4を乗算し、nullidxを12に設定する。
【0062】
同様に、結果判断論理512に関する例示的な擬似コードは以下の通りである。
【表3】
【0063】
示されるように、左/右制御が左を指示する場合、cmpidxは、idxLに等しくなるように設定され、他の場合には、cmpidxは、idxRに等しくなるように設定される。さらに、ゼロ検出インジケータがオンである場合、resultidxは、cmpidx又はnullidxの最小値に等しくなるように設定され、条件コード設定制御がオンであり、cmpidxがnullidxより大きい場合、条件コードがゼロに設定される。他の場合には、ゼロ検出がオンでない場合、resultidxは、cmpidxに等しくなるように設定される。
【0064】
さらに、要素サイズがバイトに等しい場合、要素サイズ・マスクは
ξ11111
ξに設定され、要素サイズが2バイトに等しい場合、マスクは
ξ11110
ξに設定され、要素サイズが4バイトに等しい場合、マスクは
ξ11100
ξに設定される。
【0065】
その後、resultidxが、要素サイズ・マスクと論理積演算(AND)されたresultidxに等しくなるように設定される。例えば、要素サイズがハーフワードであり、バイト7がresultidxである場合、resultidx=00111 AND 11110であり、00110を提供し、従って、resultidxは、6(即ち、2進数では00110)に等しくなるように設定され、これが要素の最初のバイトである。
【0066】
付加的に、条件コードが任意で設定される。命令の条件コード制御設定がオンに設定される場合には条件コードが与えられ、他の場合には、条件コードは設定されない。例として、制御がオンに設定される場合、nullidx<cmpidxであれば、条件コードは0に設定される。他の場合には、cmpidx<16であれば、条件コードは1に設定され、他の場合には、条件コードは3に設定される。
【0067】
上述したのは、文字データ処理を容易にするために用いられるベクトル命令の一例である。本明細書で説明されるように、128ビット・ベクトルについては、比較論理により、例えば256比較ではなく、16バイト比較が実施されるだけである。これにより、より大きいベクトルのためのスケーリングがもたらされる。さらに、左/右制御は、実行時値として与えることができ、命令内で符号化することはできない。さらに、結果として戻される値は、要素インデックスではなく、バイト位置である。さらに、1バイト及び2バイト比較と共に、4バイト比較がサポートされる。
【0068】
一実施形態において、32のベクトル・レジスタが存在し、他のタイプのレジスタは、ベクトル・レジスタの象限にマッピングすることができる。例えば、
図6に示すように、32のベクトル・レジスタ602を含むレジスタ・ファイル600が存在し、各レジスタの長さが128ビットである場合、長さが64ビットである16の浮動小数点レジスタ604は、ベクトル・レジスタに重ね合わせることができる。従って、一例として、浮動小数点レジスタ2が修正されると、ベクトル・レジスタ2も修正される。他のタイプのレジスタに対する他のマッピングも可能である。
【0069】
本発明の更に別の態様において、ベクトル・ファシリティが与えられ、本発明の1つの態様に従って用いられる別の命令が、入力ベクトルにおける全ての文字(又は、別の実施形態においては下位集合)を、別の入力ベクトルにおける各文字(又は、選択された文字)と比較する、Vector Fin Any Equal命令である。出力は、マスク、又は一致した文字へのインデックスとして記録される。これは、例えば、データ・ストリングなどの文字データを構文解析する際に有用である。構文解析時、実施される1つの操作は、次の構文解析ステップに進む前に幾つかの特殊文字を探すことである。この命令により、一度に幾つかの文字を検索することが可能になる。
【0070】
Vector Find Any Equal命令の例が
図7に示され、ここで、一実施形態において、Vector Find Any Equal命令700は、例えば、Vector Find Any 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)(例えば、ビット32−35)712と、RXBフィールド714(例えば、ビット36−39)とを含む。フィールド704−714の各々は、一例において、オペコード・フィールドとは別個であり独立している。さらに、1つの実施形態においてこれらは互いに別個であり、独立しているが、他の実施形態においては、複数のフィールドを組み合わせてもよい。これらのフィールドの使用に関する更なる情報を以下に説明する。
【0071】
上記と同様に、この例において、オペコード・フィールド702aにより指示されるオペコードの選択されたビット(例えば、最初の2ビット)が、命令の長さ及び形式を指定する。この例において、選択されたビットは、長さは3ハーフワードであり、形式は、拡張オペコード・フィールドを伴うベクトル・レジスタ・アンド・レジスタオペレーション(vector register−and register operation)であることを示す。ベクトル(V)フィールドの各々は、RXBによって指定されたその対応する拡張ビットと共に、ベクトル・レジスタを指定する。特に、ベクトル・レジスタについては、オペランドを有するレジスタは、例えば、レジスタ拡張ビット(RXB)を最上位ビットとして付加したレジスタ・フィールドの4ビット・フィールドを用いて指定される。例えば、4ビット・フィールドが0110であり、拡張ビットが0である場合、5ビット・フィールド00110はレジスタ番号6を示す。
【0072】
命令フィールドに付随する下付き数字は、そのフィールドが適用されるオペランドを示す。例えば、ベクトル・レジスタV
1に付随する下付き数字1は、第1のオペランドを示し、以下同様である。レジスタ・オペランドは、長さが1レジスタであり、これは例えば128ビットである。
【0073】
例えば4ビット(0−3)を有するM
4フィールドは、例えばビット1−3における要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタ・オペランドにおける要素のサイズを指定する。一例において、要素サイズ制御は、バイト、ハーフワード(例えば2バイト)、又はワード(例えば4バイト)を指定することができる。例えば、0は1バイトを示し、1はハーフワードを示し、2はワード、別名フルワードを示す。予約値が指定されている場合、指定例外が認識される。
【0074】
M
5フィールドは、例えば、4ビット・フィールド(ビット0−3)であり、例えば、以下のものを含む。
結果タイプ・フィールド(RT、ビット1):ゼロである場合、結果の要素の各々は、その要素に関する全範囲比較のマスクである。1である場合、バイト・インデックスは、第1のオペランドの指定されたバイト(例えば、バイト7)に格納され、全ての他の要素内にゼロが格納される。
ゼロ検索フィールド(ZS、ビット2):1である場合、第2のオペランド(又は、別のオペランド)の各要素がゼロと比較される。
条件コード設定フィールド(CC、ビット3):ゼロである場合、条件コードは設定されず、変更されないままである。1である場合、条件コードは、一例を挙げれば、以下に指定されるように設定される。
0−ゼロ検索ビットが設定されている場合、第2のオペランドのゼロより下位のインデックス付き要素において一致が存在しなかった。
1−第2のオペランドの幾つかの要素が、第3のオペランドの少なくとも1つの要素と一致する。
2−第2のオペランドの全ての要素が第3のオペランドの少なくとも1つの要素と一致する。
3−第2のオペランドの要素が第3のオペランドのどの要素とも一致しない。
【0075】
一例において、左から右へと進む、Vector Find Any Equal命令の一実施形態の実行において、第2のオペランド(V
2+RXBにより指定されるレジスタ内に含まれる)のあらゆる符号なし2進整数要素を、等値性に関して、第3のオペランド(V
3+RXBにより指定されるベクトル・レジスタ内に含まれる)の対応する符号なし2進整数要素の各々と比較し、M
5フィールドにおいてゼロ検索フラグが設定されている場合は、任意でゼロと比較される。
【0076】
M
5フィールド内の結果タイプ・フラグがゼロである場合、第3のオペランドのいずれかの要素又は任意でゼロと一致する第2のオペランドの各要素について、第1のオペランド(V
1+RXBにより指定されるレジスタ内に含まれる)の対応する要素のビット位置が1に設定され、他の場合には、ゼロに設定される。
【0077】
M
5フィールド内の結果タイプ・フラグが1である場合、第3のオペランドの要素又はゼロと一致する第2のオペランドの左端の要素のバイト・インデックス(例えば、要素の最初のバイトのバイト・インデックス)が、第1のオペランドの指定されたバイト(例えば、バイト7)に格納される。
【0078】
M
5フィールド内の結果タイプ・フラグが1であり、且つ、いずれのバイトも等しいことが見出されない場合、又はゼロ検索フラグが設定されている場合のゼロである場合、ベクトルのサイズ(例えば、例えば16などのバイト数)に等しいインデックスが、第1のオペランドの指定されたバイト(例えば、バイト7)に格納される。
【0079】
一実施形態において、実行時に、左から右又は右から左のベクトル方向が与えられる。例えば、命令は、レジスタ、状況制御、又は例として左から右又は右から左への処理の方向を示す他のエンティティにアクセスする。一実施形態において、この方向制御は、命令の一部として符号化されず、実行時に命令に与えられる。
【0080】
更に別の実施形態において、命令は、RXBフィールドを含まない。代わりに、拡張は使用されないか、又は命令の外部の制御からなど、別の手法で与えられるか、又は命令の別のフィールドの一部として与えられる。
【0081】
Vector Find Any Equal命令の処理の一実施形態に関する更なる詳細が、
図8を参照して説明される。一例において、コンピューティング環境のプロセッサが、この論理を実施している。
【0082】
最初に、zeroidx802、resultidx804、及びresultmask806と呼ばれる変数を初期化する(ステップ800)。例えば、zeroidxは第2のオペランドのサイズ(例えば、16)に等しくなるように設定され、resultidxは第2のオペランドのサイズ(例えば、16)に等しくなるように設定され、resultmaskは全てゼロに等しくなるように設定される。一実施形態において、resultmaskは、第2のオペランドの128ビットに対応する128ビットを含む。
【0083】
その後、例えば命令の第2のオペランドである、本明細書でopAと呼ばれるオペランドから文字(即ち、要素)をロードする(ステップ808)。その後、ゼロ検索を指示するゼロ検索フィールドが設定され、zeroidxが16に等しくなるように設定されているかどうかについての判断がなされる(問い合わせ810)。そうである場合、ゼロ検索が実施され(ステップ812)、結果はzeroidx802及びresultmask806に出力される。例えば、zeroidxにおいて、ゼロ要素の左端バイトのバイト・インデックスが指示され、resultmaskのその要素に対応するビットが1に設定される。例えば、zeroidxに関して、要素サイズがバイトであり、バイト5においてゼロ要素が見出された場合、ゼロ要素が見出されたバイトのインデックス(例えば、5)がzeroidxに入れられる。同様に、要素サイズがハーフワードであり、8つの要素(0−7)が存在し、要素3(即ち、バイト6−7)がゼロである場合、6(バイト・インデックス6の)がzeroidxに入れられる。同様に、要素サイズがフルワードであり、4つの要素(0−3)が存在し、要素1(即ち、バイト4−7)がゼロである場合、4(バイト・インデックス4の)がzeroidxに入れられる。ヌル要素が見出されない場合、次に、一例において、ベクトルのサイズ(例えば、16などのバイト単位の)がzeroidxに入れられる。
【0084】
その後、又はゼロ検索が実施されない場合、次に、ロードした文字を、例えば命令の第3のオペランドである、本明細書でopBと呼ばれるオペランド内の文字と比較する(ステップ818)。一致が存在する場合、一致は、resultidx804及びresultmask806において示される。例えば、resultidxは一致する要素の最初のバイトに等しくなるように設定され、要素に対応するresultmaskのビットは1に等しくなるように設定される。一例として、resultidxに関して、要素サイズがバイトであり、ベクトル内に16の要素(0−15)が存在し、要素6において等値性が見出された場合、6がresultidxlに格納される。同様に、要素サイズがハーフワードであり、ベクトル内に8つの要素(0−7)が存在し、要素3において(例えば、バイト6又は7において)等値性が見出された場合、要素の最初のバイト(バイト6)のインデックスが戻される。同様に、要素サイズがフルワードであり、4つの要素(0−3)が存在し、要素1において(例えば、バイト4−7において)等値性が見出された場合、要素の最初のバイト(バイト4)のインデックスが戻される。等値比較が存在しない場合、次に、一実施形態において、resultidxは、ベクトルのサイズ(例えば、16などのバイト単位の)と等しくなるように設定される。
【0085】
その後、opAの最後に到達したかどうかについての判断がなされる(問い合わせ830)。到達していない場合、次に、変数iが、例えば1だけインクリメントされ(ステップ832)、処理はステップ808を続行する。他の場合には、処理は、結果タイプがゼロに等しいかどうかの判断を続行する(問い合わせ834)。結果タイプがゼロに等しい場合、例えば命令の第1のオペランドである、本明細書でopCと呼ばれるオペランドが、resultmaskに等しくなるように設定される(ステップ836)。他の場合には、opCの指定されたバイト(例えば、バイト7)が、resultmask及びzeroidxの最小値に等しくなるように設定される(及び、他のバイトがゼロに設定される)(ステップ838)。
【0086】
結果をopCに入れた後、条件コード設定フィールドが、条件コードが設定されることを示しているかどうかについての判断がなされる(問い合わせ840)。条件コード設定フィールドが1に設定されている場合、条件コードが設定される(ステップ842)。例えば、ZSフィールドが設定され、第2のオペランド内にゼロより下位のインデックス付き要素の一致が存在しなかった場合、条件コードはゼロに設定され、第2のオペランド内の幾つかの要素が第3のオペランド内の少なくとも1つの要素と一致する場合は1に設定され、第2のオペランド内の全ての要素が第3のオペランド内の少なくとも1つの要素と一致した場合には2に設定され、第2のオペランドの要素が第3のオペランドのいずれの要素とも一致しない場合には3に設定される。他の場合には、条件コード設定フィールドがゼロに等しければ、条件コードは設定されない。
【0087】
本明細書で説明されるように、一実施形態において、ゼロ検索の実施と非実施との間で切り替え、且つ、ゼロ要素又は等値要素のいずれかのバイト・インデックスを条件付きで戻すことができる、Vector Find Any Equal命令が提供される。このバイト・インデックスは、報告される要素の最初のバイトである。ゼロ要素が検索される場合、次に、そのゼロ要素の位置を与えることができる。従って、その命令がゼロ検索を伴う比較又はゼロ検索を伴わない比較を実施することができる、1つの特定のオペコードを有する1つの命令が提供される。
【0088】
上述したのは、文字データ処理を容易にするために用いられるベクトル命令の一例である。本明細書で説明されるように、128ビット・ベクトルを有するVector Find Element Equal命令については、比較論理により、例えば256の比較ではなく、16バイト比較が実施されるだけである。これは、より大きいベクトルのためのスケーリングをもたらす。さらに、Vector Find Element Equal命令又はVector Find Any Equal命令については、左/右制御は、実行時の値として与えることができ、命令内で符号化され得ない。さらにまた、結果として戻される値は、要素インデックスではなくバイト位置である。さらに、1バイト及び2バイト比較と共に、4バイトの比較がサポートされる。
【0089】
本発明の1つの態様によると、命令に与えられる制御に基づいて、条件コードが任意で与えられる。条件コードが設定されることによって、命令のスケジューリングが容易になる。
【0090】
更に別の実施形態において、ゼロ検索は、必要条件ではなく、代わりに、命令の実行時に実施される。命令の実行に基づいて又はこれに応答して、ゼロ検索が実施され、一例において、ゼロ要素の位置(例えば、バイト・インデックス)及び/又は最初の一致要素の位置(例えば、バイト・インデックス)が戻される。一実施形態においては、Vector Find Element Equal命令に関して、実施形態に関係なく、実施される比較の数は、ベクトルのバイト数に対応する。例えば、検索又は比較されるベクトルが16バイトである場合、最大で16の比較が、例えば並行して実施される。更に別の実施形態において、ひとたび一致又はゼロ要素が見出されると、比較は停止する。
【0091】
本明細書において、メモリ、メインメモリ、ストレージ、及びメインストレージは、明示的に又は文脈によって別様に示されない限り、互換的に使用される。
【0092】
ベクトル・ファシリティに関する付加的な詳細は、他の命令の例を含めて、この詳細な説明のさらに後半の部分として与えられる。
【0093】
当業者により認識されるように、本発明の1以上の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の1以上の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の1以上の態様は、コンピュータ可読プログラム・コードが組み込まれた、1以上のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【0094】
1以上のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置又はデバイス、又は上記のいずれかの適切な組み合わせとすることができる。より具体的なコンピュータ可読ストレージ媒体の例(非網羅的なリスト)として、以下のもの、即ち、1以上の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
【0095】
ここで
図9を参照すると、一例において、コンピュータ・プログラム製品900は、例えば、コンピュータ可読プログラム・コード手段又は論理904をその上に格納するための1以上の非一時的な(non−transitory)コンピュータ可読ストレージ媒体902を含み、本発明の1以上の態様を提供し、容易にする。
【0096】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
【0097】
本発明の1以上の態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、SmallTalk(登録商標)、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1以上のプログラミング言語のいずれかの組み合わせで記述することができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)外部コンピュータへの接続がなされる場合もある。
【0098】
本発明の1以上の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
【0099】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1以上のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0100】
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1以上のブロックにおいて指定された機能/動作を実行するためのプロセスを提供することもできる。
【0101】
図面内のフローチャート及びブロック図は、本発明の1以上の態様の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1以上の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【0102】
上記に加えて、本発明の1以上の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、1以上の顧客に対して本発明の1以上の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1以上の第三者に対する広告コンテンツの販売から支払いを受けることができる。
【0103】
本発明の一態様において、本発明の1以上の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、本発明の1以上の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0104】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、本発明の1以上の態様を実施することができる。
【0105】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は本発明の1以上の態様を含む。コードは、コンピュータ・システムと協働して、本発明の1以上の態様を実施することができる。
【0106】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、本発明の1以上の態様を組み込んで使用することが可能である。さらに、他のサイズのベクトルを用いることができ、本発明の趣旨から逸脱することなく、命令に対する変更をなすことができる。さらに、ベクトル・レジスタ以外のレジスタを使用してもよく、及び/又はデータは、整数データ又は他のタイプのデータなど、文字データ以外であってもよい。
【0107】
さらに、他のタイプのコンピューティング環境が、本発明の1以上の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に接続された少なくとも2つのプロセッサを含む、プログラム・コードを格納及び/又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
【0108】
入力/出力即ちI/O装置(キーボード、ディスプレイ、ポインティング装置、DASD、テープ、CD、DVD、サムドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない)は、直接的に、又は介在するI/Oコントローラを通して、システムに接続することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又は遠隔プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット・カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
【0109】
図10を参照すると、本発明の1以上の態様を実装するためのホスト・コンピュータ・システム5000の代表的なコンポーネントが描かれている。代表的なホスト・コンピュータ5000は、コンピュータ・メモリ(即ち、中央ストレージ)5002と通信状態にある1以上のCPU5001に加えて、ストレージ媒体デバイス5011及び他のコンピュータ又はSAN等と通信するためのネットワーク5010へのI/Oインターフェースを含む。CPU5001は、アーキテクチャ化された(architected)命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。CPU5001は、プログラム・アドレス(仮想アドレス)をメモリの実アドレスに変換するための動的アドレス変換(Dynamic Address Translation、DAT)5003を有することができる。DATは、一般的に、変換をキャッシュに入れるための変換ルックアサイド・バッファ(TLB)5007を含むため、コンピュータ・メモリ5002のブロックへの後のアクセスは、アドレス変換の遅延を必要としない。一般的に、コンピュータ・メモリ5002とプロセッサ5001との間に、キャッシュ5009が用いられる。キャッシュ5009は、複数のCPUが利用可能な大容量のキャッシュと、大型のキャッシュと各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ5009を介して、命令フェッチ・ユニット5004により、命令がメモリ5002からフェッチされる。命令は、命令デコード・ユニット5006でデコードされ、(幾つかの実施形態においては他の命令と共に)命令実行ユニット5008にディスパッチされる。一般的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット5008が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ5002からオペランドにアクセスする(ロード又はストアする)場合、典型的には、ロード/ストア・ユニット5005が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
【0110】
上述したように、コンピュータ・システムは、ローカル(又はメイン)ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。メインストレージの一部は、永続的に割り当てられた記憶位置を含む。メインストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方が、メインストレージにロードされる。
【0111】
メインストレージは、キャッシュと呼ばれることもある、1以上のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより監視することはできない。
【0112】
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
【0113】
ストレージは、長い水平方向のビットのストリングと考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットのストリングは、8ビット単位で分割される。この8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まって、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである。
【0114】
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1群のバイトずつ伝送される。特に断りのない限り、例えばz/Architectureにおいては、ストレージ内の1群のバイトは、当該1群のバイトの左端のバイトによりアドレス指定される。1群のバイト内のバイト数は、実行されるオペレーションにより暗黙に指定されるか又は明示的に指定される。CPUオペレーションに用いられる場合、1群のバイトはフィールドと呼ばれる。例えばz/Architectureにおいては、1群のバイトの中の各々において、ビットは、左から右の順序で番号が付けられる。z/Architectureにおいては、左端ビットは「上位(high−order)」ビットと呼ばれることがあり、右端ビットは「下位(low−order)」ビットと呼ばれることがある。しかしながら、ビット数は、ストレージ・アドレスではない。バイトだけを、アドレス指定することができる。ストレージ内の1つのバイトの個々のビットに対して操作を行うためには、そのバイト全体にアクセスされる。1バイトの中のビットには、左から右に0から7までの番号が付けられる(例えばz/Architectureにおいて)。1つのアドレスの中のビットには、24ビット・アドレスの場合は8−31若しくは40−63の番号を付けることができ、又は、31ビット・アドレスの場合は1−31若しくは33−63の番号を付けることができ、64ビット・アドレスの場合は0−63の番号が付けられる。複数のバイトから成る他のいずれかの固定長形式の中では、その形式を構成するビットには、0から始まる連続番号が付けられる。エラー検出のため及び好ましくは訂正のために、各バイト又は1群のバイトと共に、1以上の検査ビットが伝送されることがある。このような検査ビットは、マシンにより自動的に生成されるものであり、プログラムが直接制御することはできない。記憶容量は、バイト数で表わされる。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードで暗黙的に指定される場合、そのフィールドは固定長を有すると言われ、固定長は、1バイト、2バイト、4バイト、8バイト、又は16バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有する。可変長オペランドは、1バイトのインクリメントにより変化し得る(又は、一部の命令では、2バイトの倍数若しくは他の倍数)。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイト位置のコンテンツのみが置き換えられる。
【0115】
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数境界であることを意味する。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続した1群のバイトあり、これは、命令の基本的な構成要素である。ワードは、4バイト境界上にある4個の連続した1群のバイトである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続した1群のバイトである。クワッドワード(quadword)は、16バイト境界上にある16個の連続した1群のバイトである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要求をもたない。
【0116】
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、その格納が、後にフェッチされる命令を変更するかどうかに関係なく、著しい遅延が生じることがある。
【0117】
一実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の1以上の態様と整合性がある)により実施することができる。
図10を参照すると、本発明の1以上の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム5000のプロセッサ5001により、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体でに配布しても、又はコンピュータ・メモリ5002からユーザに提供しても、又は、こうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに提供してもよい。
【0118】
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネント及び1以上のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内や物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0119】
図11は、本発明の1以上の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。
図11のシステム5020は、任意の周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1以上のプロセッサ5026と、周知技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、ハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、メモリ5025及び長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1以上のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
【0120】
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。或いは、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)、又はシステム5021内のこのような他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【0121】
図12は、本発明の1以上の態様を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個別のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個別のネットワークを含むことができる。さらに、当業者であれば理解するように、1以上のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに接続された複数のインテリジェント・ワークステーションを含むことができる。
【0122】
さらに
図12を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個別のネットワークへの入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のネットワーク・プロトコルに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に接続できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1以上のワークステーション5041、5042、5043、5044に直接接続することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM(登録商標) eServer(商標)System zサーバを用いて実装することができる。
【0123】
図11及び
図12を同時に参照すると、本発明の1以上の態様を具体化できるソフトウェア・プログラム・コードには、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体で配布しても、又はメモリからユーザ5050、5051に提供しても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに提供してもよい。
【0124】
或いは、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1以上のアプリケーション・プログラム5032の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内や物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0125】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メインストア(メインメモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0126】
図13を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1以上のレベルのキャッシュ5053が用いられる。キャッシュ5053は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムのメインメモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、メインストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。メインストレージ5025は、オペレーティング・システムによってメインストレージ5025との間でページングされるデータのページを「キャッシュする」。
【0127】
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architectureプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM(登録商標) z/Architectureの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)オペレーションにより、プログラム・カウンタ5061が変更される。コンテキスト・スイッチオペレーションにおいて、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立オペレーションを行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0128】
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0129】
次いで、フェッチされた命令が、プロセッサ5026によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令のオペコードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
【0130】
プロセッサ5026は、典型的には、命令の機能を実行するための1以上の実行ユニット5057、5058、5060を有する。
図14Aを参照すると、実行ユニット5057は、インターフェース論理5071を介して、アーキテクチャ化された汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、ロード・ストア・ユニット5060、及び他のプロセッサ・ユニット5065と通信することができる。実行ユニット5057は、幾つかのレジスタ回路5067、5068、5069を用いて、算術論理演算ユニット(ALU)5066が動作する情報を保持することができる。ALUは、加算(add)、減算(subtract)、乗算(multiply)、及び除算(divide)などの算術演算、並びに、論理積(and)、論理和(or)、及び排他的論理和(XOR)、ローテート(rotate)及びシフト(shift)のような論理関数を実行する。ALUは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及び回復サポート論理を含む、他のアーキテクチャ化ファシリティ5072を提供することができる。典型的には、ALU演算の結果は、出力レジスタ回路5070に保持され、この出力レジスタ回路5070が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0131】
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
【0132】
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3のオペランドに格納し、ここで第3のオペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM(登録商標) z/Architectureは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
【0133】
図14Bを参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを検査し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信することができる。
【0134】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みが生じることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタのコンテンツとを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
【0135】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に示す1以上のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architectureの長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、指標レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスを提供する。ここでの位置(location)は、典型的には、特に断りのない限り、メインメモリ(メインストレージ)内の記憶位置を意味する。
【0136】
図14Cを参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという状態を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行ってオペレーションをイン・オーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0137】
好ましくは、アプリケーション・プログラムが「参照する」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1以上の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的なメモリ位置にリダイレクトされるという点で仮想的であり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを示すエントリを有することが好ましい。z/Architectureでは、第1の領域テーブル、第2の領域テーブル、第3の領域テーブル、セグメント・テーブル、及び任意のページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的なメモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換するときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
【0138】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0139】
I/Oユニット5054(
図13)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標) System z(登録商標)のようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0140】
さらに、他のタイプのコンピューティング環境が、本発明の1以上の態様から利益を得ることができる。一例として、コンピューティング環境は、(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)特定のアーキテクチャ又は(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)そのサブセットをエミュレートするエミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能と異なるアーキテクチャを有する場合にも、エミュレータの1以上のエミュレーション機能により、本発明の1以上の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又はオペレーションを実施する。
【0141】
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、任意で、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードするステップと、データをレジスタから再びメモリに格納するステップと、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行するステップとを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1以上のサブルーチンとして実装される。
【0142】
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、多くの場合コンパイラ・アプリケーションを介して、プログラマ、通常今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/ArchitectureのIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、Power Systemsサーバ及びSystem x(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(登録商標)などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【0143】
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1以上のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1以上のエミュレートされたマシン命令を、対応する1群のネイティブマシン命令に変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
【0144】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサの1の機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「C」サブルーチン又はドライバにおいて、或いは好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。種々のソフトウェア及びハードウェア・エミュレーションの特許には、これらに限られるものではないが、Beausoleil他による「Multiprocessor for Hardware Emulation」という名称の特許文献1、Scalzi他による「Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor」という名称の特許文献2、Davidian他による「Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions」という名称の特許文献3、Gorishek他による「Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non−Native Code to Run in a System」という名称の特許文献4、Lethin他による「Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の特許文献5、Eric Trautによる「Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions」という名称の特許文献6、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
【0145】
図15において、ホスト・アーキテクチャのホスト・コンピュータ・システム5000’をエミュレートする、エミュレートされたホスト・コンピュータ・システム5092の一例が提供される。エミュレートされたホスト・コンピュータ・システム5092では、ホスト・プロセッサ(CPU)5091は、エミュレートされたホスト・プロセッサ(又は仮想ホスト・プロセッサ)であり、且つ、ホスト・コンピュータ5000’のプロセッサ5091の命令セット・アーキテクチャとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ5093を含む。エミュレートされたホスト・コンピュータ・システム5092は、エミュレーション・プロセッサ5093がアクセス可能なメモリ5094を有する。例示的な実施形態において、メモリ5094は、ホスト・コンピュータ・メモリ5096の部分と、エミュレーション・ルーチン5097の部分とに区分化される。ホスト・コンピュータ・メモリ5096は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム5092のプログラムに利用可能である。エミュレーション・プロセッサ5093は、エミュレートされたプロセッサ5091のアーキテクチャ以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ5097から取得されたものであり、且つ、エミュレーション・プロセッサ5093は、シーケンス及びアクセス/デコード・ルーチンにおいて取得される1以上の命令を用いることにより、ホスト・コンピュータ・メモリ5096の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス/デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。ホスト・コンピュータ・システム5000’のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びI/Oサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化されたファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ5093において利用可能な(汎用レジスタ、及び仮想アドレスの動的変換といった)機能を利用することもできる。ホスト・コンピュータ5000’の機能をエミュレートする際にプロセッサ5093を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【0146】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1以上の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの組み合わせの存在又は追加を排除するものではないこともさらに理解されるであろう。
【0147】
下記の特許請求の範囲におけるすべての手段又は機能要素を加えたステップの対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲及び精神から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【0148】
Vector String(ベクトル・ストリング)命令
ベクトル・ストリング・ファシリティ
→
命令
別に指定しない限り、全てのオペランドはベクトル・レジスタ・オペランドである。アセンブラ構文における「V」は、ベクトル・オペランドを指示する。
【表4】
VECTOR FIND ANY EQUAL
【表5】
左から右へ進み、第2のオペランドの全ての符合なし2進整数要素は、第3のオペランドの符合なし2進整数要素の各々と、及びM
5フィールド内にZero Search(ゼロ検索)フラグが設定されている場合には任意でゼロと、等値性に関して比較される。
【0149】
M
5フィールド内のResult Type(結果タイプ)(RT)フラグがゼロである場合、第3のオペランド内のいずれかの要素と一致するか又は任意でゼロである第2のオペランド内の各要素に対して、第1のオペランド内の対応する要素のビット位置が1に設定され、他の場合には、ゼロに設定される。
【0150】
M
5フィールド内のResult Type(RT)フラグが1である場合、第3のオペランド内の一要素と一致するか又はゼロである第2のオペランド内の左端要素のバイト・インデックスが、第1のオペランドのバイト7に格納される。
【0151】
各命令は、推奨される拡張ニーモニック及びそれらの対応するマシン・アセンブラ構文を記述するExtended Mnemonic(拡張ニーモニック)部分を有する。
【0152】
プログラミング上の注意:任意で条件コードを設定する全ての命令に関して、条件コードが設定される場合には性能が低下する可能性がある。
【0153】
M
5フィールド内のResult Type(RT)フラグが1であり、いずれのバイトも等しいことが見出されないか、又はゼロ検索フラグが設定されている場合にゼロであるとき、ベクトル内のバイト数に等しいインデックスが、第1のオペランドのバイト7に格納される。
【0154】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0155】
M
5フィールドは以下の形式を有する。
【表6】
【0156】
M
5フィールドのビットは、以下のように定義される。
・Result Type(RT):ゼロの場合、結果の各要素は、その要素についての全ての範囲比較のマスクとなる。1の場合、バイト・インデックスが第1のオペランドのバイト7に格納され、ゼロが全ての他の要素に格納される。
・Zero Search(ゼロ検索)(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(条件コード設定)(CC):ゼロの場合、条件コードは設定されず、変更されないままである。1の場合、条件コードは、以下の節で指定すように設定される。
【0157】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0がゼロでない。
【0158】
結果の条件コード:
CCフラグがゼロである場合、コードは変更されないままである。
CCフラグが1である場合、コードは以下のように設定される。
0 ZSビットが設定されている場合、第2のオペランド内のゼロより下位のインデックス付き要素内に一致が存在しなかった。
1 第2のオペランドの幾つかの要素が、第3のオペランド内の少なくとも1つの要素と一致する。
2 第2のオペランド内の全ての要素が、第3のオペランド内の少なくとも1つの要素と一致した。
3 第2のオペランド内の要素は、第3のオペランド内のいずれの要素とも一致しない。
【0159】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたES値)
・トランザクション制限
【0161】
VECTOR FIND ELEMENT EQUAL
【表8】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3のオペランドの対応する符合なし2進整数要素と比較される。2つの要素が等しい場合、左端の等値要素の最初のバイトのバイト・インデックスが、第1のオペランドのバイト7に入れられる。第1のオペランドの残りのバイトにゼロが格納される。いずれのバイトも等しくないか、又は、ゼロ比較が設定されている場合にゼロであるとき、ベクトル内のバイト数に等しいインデックスが、第1のオペランドのバイト7に格納される。残りのバイトにはゼロが格納される。
【0162】
M
5フィールド内にZero Search(ZS)ビットが設定されている場合、第2のオペランド内の各要素は、等値性に関してゼロとも比較される。第2及び第3のオペランドの他のいずれかの要素が等しいことが見出される前に、第2のオペランド内にゼロの要素が見出された場合、ゼロであることが見出された要素の最初のバイトのバイト・インデックスが第1のオペランドのバイト7に格納され、全ての他のバイト位置にはゼロが格納される。Condition Code Set(CC)フラグが1である場合、条件コードはゼロに設定される。
【0163】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0164】
M
5フィールドは以下の形式を有する。
【表9】
M
5フィールドのビットは、以下のように定義される。
・Reserved(予約される):ビット0−1は予約されており、ゼロでなければならない。そうでない場合には、指定例外が認識される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは変更されないままである。1の場合、条件コードは、以下の節で指定されるように設定される。
【0165】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0−1がゼロでない。
【0166】
結果の条件コード:
M
5フィールドのビット3が1に設定されている場合、コードは以下のように設定される。
0 ゼロ比較ビットが設定されている場合、比較により、第2のオペランド内のゼロ要素がいずれの等値比較よりも小さいインデックスを有する要素内で検出された。
1 比較により、第2のオペランドと第3のオペランドとの間で何らかの要素の一致が検出された。ゼロ比較ビットが設定されている場合、この一致は、ゼロ比較要素より小さいか又はこれに等しいインデックスを有する要素において生じた。
2 −−
3 比較したいずれの要素も等値ではない。
M
5フィールドのビット3がゼロである場合、コードは変更されないままである。
【0167】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたES値)
・トランザクション制限
【0169】
プログラミング上の注意:
1.バイト・インデックスは、いずれの要素サイズに関しても常に第1のオペランド内に格納される。例えば、要素サイズがハーフワードに設定され、第2のインデックス付きハーフワードが等値比較された場合、4のバイト・インデクッスが格納される。
2.第3のオペランドは、ゼロ値を有する要素を含んではならない。第3のオペランドがゼロを含み、且つ、他のいずれかの等値比較の前に第2のオペランド内のゼロ要素と一致した場合、ゼロ比較ビットの設定に関わらず、条件コード1が設定される。
【0170】
VECTOR FIND ELEMENT NOT EQUAL
【表11】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3のオペランドの対応する符合なし2進整数要素と比較される。2つの要素が等しくない場合、左端の非等値要素のバイト・インデックスが、第1のオペランドのバイト7に入れられ、他の全てのバイトにゼロが格納される。M
5フィールド内のCondition Code Set(CC)ビットが1に設定されている場合、条件コードはいずれのオペランドがより大き且つたかを示すように設定される。全ての要素が等し且つた場合、ベクトル・サイズに等しいバイト・インデックスが第1のオペランドのバイト7に入れられ、他の全てのバイト位置にはゼロが配置される。CCビットが1である場合、条件コード3が設定される。
【0171】
M
5フィールド内にゼロ検索(ZS)ビットが設定されている場合、第2のオペランド内の各要素は、等値性に関してゼロとも比較される。第2のオペランドの他のいずれかの要素が非等値であることが見出される前に、第2のオペランド内にゼロ要素が見出された場合、ゼロであることが見出された要素の最初のバイトのバイト・インデックスが第1のオペランドのバイト7に格納される。全ての他のバイトにはゼロが格納され、条件コード0が設定される。
【0172】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0173】
M
5フィールドは以下の形式を有する。
【表12】
M
5フィールドのビットは、以下のように定義される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず変更されないままである。1の場合、条件コードは以下の節で指定するように設定される。
【0174】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、その他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0−1がゼロでない。
【0175】
結果の条件コード:
M
5フィールドのビット3が1に設定されている場合、コードは以下のように設定される:
0 ゼロである場合、比較ビットが設定され、比較により、両オペランド内のゼロ要素がいずれの非等値比較よりも下位のインデックス付き要素内で検出された。
1 要素不一致が検出され、VR2内の要素がVR3内の要素より小さい。
2 要素不一致が検出され、VR2内の要素がVR3内の要素より大きい。
3 比較された全ての要素が等値であり、ゼロ比較ビットが設定されている場合、第2のオペランド内にゼロ要素が見出されなかった。
M
5フィールドのビット3がゼロである場合、コードは変更されないままである。
【0176】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたES値)
・トランザクション制限
【0178】
VECTOR STRING RANGE COMPARE
【表14】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3及び第4のオペランド内の要素の偶数−奇数対によって定義される値の範囲と比較される。第4のオペランドからの制御値との組み合わせが、実施される比較の範囲を定める。ある要素が第3及び第4のオペランドによって指定された範囲のいずれかと一致する場合、一致であると見なされる。
【0179】
M
6フィールド内のResult Type(RT)フラグがゼロである場合、第2のオペランド内の比較される要素に対応する第1のオペランド内の要素のビット位置が、その要素がいずれかの範囲に一致するときには1に設定され、他の場合には、ゼロに設定される。
【0180】
M
6フィールド内のResult Type(RT)フラグが1に設定される場合、第3及び第4のオペランドによって指定される範囲のいずれかと一致する、又はZSフラグが1に設定されている場合にはゼロ比較と一致する、第2のオペランド内の第1の要素のバイト・インデックスが第1のオペランドのバイト7に入れられ、残りのバイトにはゼロが格納される。いずれの要素も一致しない場合、ベクトル内のバイト数に等しいインデックスが第1のオペランドのバイト7に入れられ、残りのバイトにはゼロが格納される。
【0181】
M
6フィールド内のZero Search(ZS)フラグが1に設定されている場合、第2のオペランド要素のゼロとの比較を、第3及び第4のオペランドによって規定される範囲に行う。ゼロ比較が、他のいずれの真の比較よりも下位のインデックス付き要素内にある場合、条件コードはゼロに設定される。
【0182】
オペランドは、M
5フィールド内のElement Size(要素サイズ)制御によって指定されるサイズの要素を含む。
【0183】
第4のオペランド要素は、以下の形式を有する。
ESが0に等しい場合:
【表15】
ESが1に等しい場合:
【表16】
ESが2に等しい場合:
【表17】
【0184】
第4のオペランド要素内のビットは、以下のように定義される。
・Equal(等しい)(EQ):1のとき、等値比較がなされる。
・Grater Than(大なり)(GT):1のとき大なり(greater than)比較が実施される。
・Less Than(小なり)(LT):1のとき、小なり(less than)比較が実施される。
・全ての他のビットは、予約され、将来の互換性を保証するためにゼロにすべきである。
【0185】
制御ビットは、任意の組み合わせで用いることができる。いずれのビットも設定されていない場合、比較は常に偽の結果を生じることになる。全てのビットが設定されている場合、比較は常に真の結果を生じることになる。
【0186】
M
5フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0187】
M
6フィールドは以下の形式を有する。
【表18】
M
6フィールドのビットは。以下のように定義される。
・Invert Result(反転結果)(IN):ゼロの場合、制御ベクトル内の値の対について比較が続けられる。1の場合、その範囲内の比較の対の結果が反転される。
・Result Type(RT):ゼロの場合、結果の各要素は、その要素についての全ての範囲比較のマスクとなる。1の場合、インデックスが第1のオペランドのバイト7に格納される。残りのバイトにはゼロが格納される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず、変更されないままである。1の場合、条件コードは、以下の節で指定するように設定される。
【0188】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
【0189】
結果の条件コード:
0 ZS=1であり、且つ、いずれの比較よりも下位のインデクス付き要素内にゼロが見出される場合
1 比較が見出される
2 −−
3 比較が見出されない
【0190】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたES値)
・トランザクション制限
【0191】
拡張ニーモニック
【表19】
【表20】
【0192】
LOAD COUNT TO BLOCK BOUNDARY
【表21】
上限16とされた指定ブロック境界を超えることなく、第2のオペランド位置からロードすることが可能なバイト数を含んだ32ビットの符合なし2進整数が、第1のオペランドに入れられる。
変位は、12ビットの符号なし整数として扱われる。
第2のオペランド・アドレスは、データをアドレス指定するのには使用されない。
M
3フィールドは、ロードされる可能なバイト数を計算するためのブロック境界サイズに関してCPUに信号を送るのに用いられるコードを指定する。予約値が指定された場合には、指定例外が認識される。
【0193】
コード境界
0 64バイト
1 128バイト
2 256バイト
3 512バイト
4 1Kバイト
5 2Kバイト
6 4Kバイト
7〜15 予約される
【0194】
結果の条件コード:
0 オペランド1が16である
1 −−
2 −−
3 オペランド1が16より小さい
【0195】
結果の条件コード:
プログラム例外:
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定
【0196】
プログラミング上の注意:ロードされたバイト数を判定するために、LOAD COUNT TO BLOCK BOUNDARYは、VECTOR LOAD TO BLOCK BOUNDARYと併せて使用されると予想される。
【0197】
VECTOR LOAD GR FROM VR ELEMENT
【表22】
M
4フィールド内のES値で指定されたサイズの、第2のオペランド・アドレスでインデックス付けされた第3のオペランドの要素が、第1のオペランド位置内に入れられる。第3のオペランドは、ベクトル・レジスタである。第1のオペランドは、汎用レジスタである。第2のオペランド・アドレスによって指定されたインデックスが、指定された要素サイズの第3のオペランド内の最高番号を付された要素よりも大きい場合、第1のオペランド内のデータは、予測不可能である。
【0198】
ベクトル・レジスタ要素がダブルワードより小さい場合、要素は64ビット汎用レジスタ内で右寄せされ、残りのビットにゼロが入れられる。
【0199】
第2のオペランド・アドレスは、データをアドレス指定するのには使用されず、代りに、アドレスの右端の12ビットが、第2のオペランド内の要素のインデックスを指定するのに使用される。
【0200】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3−ダブルワード
4〜15−予約されており、変更されない。
【0201】
結果の条件コード:コードは変更されない。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたES値)
・トランザクション制限
【0203】
VECTOR LOAD TO BLOCK BOUNDARY
【表24】
第1のオペランドが、第2のオペランドからのバイトを伴うゼロでインデックス付けされたバイト要素で開始して、ロードされる。境界条件に遭遇した場合、第1のオペランドの残りは予測不可能である。ロードされていないバイトに対して、アクセス例外は認識されない。
【0204】
VLBBの変位は、12ビットの符合なし整数として取り扱われる。
【0205】
M
3フィールドは、ロードするためのブロック境界サイズに関してCPUに信号を送るのに用いられるコードを指定する。予約値が指定された場合には、指定例外が認識される。
【0206】
コード境界
0 64バイト
1 128バイト
2 256バイト
3 512バイト
4 1Kバイト
5 2Kバイト
6 4Kバイト
7〜15 予約される
【0207】
結果の条件コード:コードは変更されないままである。
プログラム例外:
・アクセス(フェッチ、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・指定(予約されたブロック境界コード)
・トランザクション制限
【0208】
プログラミング上の注意:
1.ある特定の状況において、データがブロック境界を超えてロードされることがある。しかしながら、これは、そのデータについてのアクセス例外がない場合にのみ生じる。
【0209】
VECTOR STORE
【表25】
第1のオペランド内の128ビット値が、第2のオペランドによって指定される記憶位置に格納される。VSTの変位は、12ビットの符号なし整数として取り扱われる。
【0210】
結果の条件コード:コードは変更されないままである。
プログラム例外:
・アクセス(ストア、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・トランザクション制限
【0211】
VECTOR STORE WITH LENGTH
【表26】
左から右へ進み、第1のオペランドからのバイトが、第2のオペランド位置に格納される。汎用レジスタにより指定された第3のオペランドは、格納する最高のインデックス付きバイトを表す値を含む32ビットの符号なし整数を含む。第3のオペランドが、ベクトルの最高バイト・インデックスより大きいか又はこれに等しい値を含む場合、第1のオペランドの全てのバイトが格納される。
【0212】
アクセス例外は、格納されたバイトについてのみ認識される。
VECTOR STORE WITH LENGTHに関する変位は、12ビットの符号なし整数として取り扱われる。
【0213】
結果の条件コード:条件コードは変更されないままである。
プログラム例外:
・アクセス(ストア、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合のオペレーション
・トランザクション制限
【0214】
RXBの説明
全てのベクトル命令は、命令のビット36−40において、RXBとラベル付けされたフィールドを有する。このフィールドは、ベクトル・レジスタが指示する全てのオペランドの最上位ビットを含む。命令によって指定されていないレジスタ指示のためのビットは、予約され、ゼロに設定されるべきであり、さもなければ、プログラムは、将来、互換的に動作することができない。その最上位ビットが4ビット・レジスタ指示の左に連結されて、5ビットのベクトル・レジスタ指定が作成される。
ビットは以下のように定義される:
0.命令のビット8−11内のベクトル・レジスタ指示のための最上位ビット。
1.命令のビット12−15内のベクトル・レジスタ指示のための最上位ビット。
2.命令のビット16−19内のベクトル・レジスタ指示のための最上位ビット。
3.命令のビット32−35内のベクトル・レジスタ指示のための最上位ビット。
【0215】
Vector Enablement(ベクトル・イネーブルメント)制御
ベクトル・レジスタ及び命令は、制御レジスタ・ゼロ内のベクトル・イネーブルメント制御(ビット46)及びAFPレジスタ制御(ビット45)の両方が1に設定されている場合にのみ使用することができる。ベクトル・ファシリティがインストールされ、イネーブルメント・ビットが設定されていない状態でベクトル命令が実行される場合、DXC EF hexによるデータ例外が認識される。ベクトル・ファシリティがインストールされていない場合、演算例外が認識される。