(58)【調査した分野】(Int.Cl.,DB名)
前記少なくとも1つのフィールドは、変位フィールド、ベース・フィールド、及びインデックス・フィールドを含み、前記ベース・フィールド及び前記インデックス・フィールドは、前記第2のオペランドのアドレスを形成するために前記変位フィールドのコンテンツに加えられるコンテンツを有する汎用レジスタを指し示すためのものである、請求項1に記載の方法。
前記実行することは、前記第2のオペランドのアドレスを用いて、前記ブロックの前記ブロック境界を判断することを含み、前記アドレスは、前記ブロックの前記ブロック境界を判断するためのデータ構造の検索において用いられる、請求項1に記載の方法。
前記第2のオペランドのアドレスは、データを第1のオペランドにロードする、メモリ内の前記開始アドレスであり、前記実行することは、ロードすることを停止する終了アドレスを判断することをさらに含み、前記ロードすることは前記終了アドレスで停止する、請求項1に記載の方法。
前記ロードすることは、前記第1のオペランドを左から右にロードすること、又は前記第1のオペランドを右から左にロードすることの一方を含む、請求項1に記載の方法。
前記マシン命令は、1つ又は複数のレジスタを指定するのに用いられる延長フィールドをさらに含み、前記レジスタ・フィールドは、前記レジスタを指定するための前記延長フィールドの少なくとも一部分と組み合わせられる、請求項1に記載の方法。
【発明を実施するための形態】
【0012】
本発明の1つの態様によると、レジスタへのデータのロードを容易にするための能力が提供される。例として、データは、文字データ、整数データ、及び/又は他のタイプのデータを含む。さらに、レジスタは、ベクトル・レジスタ又は別のタイプのレジスタである。
【0013】
文字データは、これらに限定されるものではないが、いずれかの言語の英文字、数字、句読点、及び/又は他の記号を含む。文字データは、データ・ストリングである場合も又はそうでない場合もある。例として、これらに限定されるものではないが、ASCII(American Standard Code for Information Interchange)、並びに、UTF(Unicode Transformation Format)8、UTF16等を含むがこれらに限定されないUnicodeが挙げられ規格が、文字データと関連付けられる。
【0014】
ベクトル・レジスタ(ベクトルとも呼ばれる)は1つ又は複数の要素を含み、例として、各要素の長さは、1バイト、2バイト、又は4バイトである。さらに、ベクトル・オペランドは、例えば、複数の要素を有するSIMD(Single Instruction、Multiple Data)オペランドである。他の実施形態において、要素は他のサイズのものとすることができ、ベクトル・オペランドは、SIMDである必要はなく、及び/又は1つの要素を含んでいてもよい。
【0015】
一例において、データがロードされる指定されたメモリの境界を超えないことを保証しながら、可変数のバイトのデータをメモリからベクトル・レジスタにロードする、Vector Load to Block Boundary命令が提供される。この境界は、命令により明示的に指定してもよく(例えば、命令テキスト内の変数値、操作コードにおいて符号化された固定命令テキスト値、命令において指定されたレジスタ・ベースの境界等)、又はマシンにより動的に決定してもよい。例えば、命令は、データがページ又はキャッシュ・メモリにロードされることを規定し、マシンは、キャッシュ・ライン又はページ・サイズを判断し(例えば、ページ・サイズを判断するための変換ルックアサイド・バッファ(translation look aside buffer)などの検索(looks−up in))、そのポイントにロードする。
【0016】
更に別の例として、この命令は、データ・アクセスを選択された境界に合わせるためにも用いられる。
【0017】
一実施形態において、命令は、あるタイプのブロック境界(例えば、キャッシュ・ライン又はページ)により動的に求められた主メモリ(別名、主ストレージ)のブロック内にある第2のオペランドの対応するバイトと共に、ベクトル・レジスタ(第1のオペランド)のバイトをロードするだけである。本明細書で用いられるとき、主メモリ(主ストレージとも呼ばれる)のブロックとは、指定されたサイズの任意のメモリ・ブロックである。指定されたサイズは、ブロック境界とも呼ばれ、境界はブロックの最後である。
【0018】
更に別の実施形態において、他のタイプのレジスタがロードされる。つまり、ロードされるレジスタは、ベクトル・レジスタではなく、別のタイプのレジスタである。この文脈において、命令は、Load to Block Boundary命令と呼ばれ、この命令は、データをレジスタにロードするために用いられる。
【0019】
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、
図1を参照して説明される。コンピューティング環境100は、例えば1つ又は複数のバス108及び/又は他の接続を介して互いに結合された、例えば、プロセッサ102(例えば中央演算処理ユニット)、メモリ104(例えば主メモリ)、並びに1つ又は複数の入力/出力(I/O)デバイス、及び/又はインターフェース106を含む。
【0020】
一例において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architectureに基づいており、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、System zサーバなどのサーバの一部であり、z/Architectureを実装する。z/Architectureの一実施形態は、非特許文献1に記載されている。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、z/OSなどのオペレーティング・システムを実行する。IBM(登録商標)、Z/ARCHITECTURE(登録商標)及びZ/OS(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【0021】
更に別の実施形態において、プロセッサ102は、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPower Architectureに基づいている。Power Architectureの一実施形態は、非特許文献2に記載されている。POWER ARCHITECTURE(登録商標)は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【0022】
更に別の実施形態において、プロセッサ102は、Intel Corporationにより提供されるIntelアーキテクチャに基づいている。Intelアーキテクチャの一実施形態は、非特許文献3及び非特許文献4に記載されている。Intel(登録商標)は、カリフォルニア州サンタクララ所在のIntel Corporationの登録商標である。
【0023】
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の実施形態が、
図2を参照して説明される。この例において、コンピューティング環境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、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。
【0024】
ネイティブ中央演算処理ユニット202は、環境内での処理の際に用いられる、1つ又は複数の汎用レジスタ及び/又は1つ又は複数の専用レジスタなどの1つ又は複数のネイティブ・レジスタ210を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【0025】
さらに、ネイティブ中央演算処理ユニット202は、メモリ204内に格納された命令及びコードを実行する。1つの特定の例において、中央演算処理ユニットは、メモリ204内に格納されたエミュレータ・コード212を実行する。このコードにより、1つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード212により、PowerPCプロセッサ、pSeriesサーバ、xSeriesサーバ、HP Superdomeサーバ又は他のものなどの、z/Architecture以外のアーキテクチャに基づいたマシンが、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェア及び命令を実行することが可能になる。
【0026】
エミュレータ・コード212に関する更なる詳細が、
図3を参照して説明される。ゲスト命令250が、ネイティブCPU202のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令(例えば、マシン命令)を含む。例えば、ゲスト命令250は、z/Architectureプロセッサ102上で実行されるように設計されるが、代わりに、例えばIntel Itanium IIプロセッサとすることができるネイティブCPU202上でエミュレートされることもある。一例において、エミュレータ・コード212は、メモリ204から1つ又は複数のゲスト命令250を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ユニット252を含む。エミュレータ・コード212また、取得されたゲスト命令のタイプを判断し、ゲスト命令を1つ又は複数の対応するネイティブ命令256に変換するための命令変換ルーチン254も含む。この変換は、例えば、ゲスト命令により実施される機能を識別することと、その機能を実施するためのネイティブ命令を選択することとを含む。
【0027】
さらに、エミュレータ212は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、ネイティブCPU202に、1つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令256の実行は、データをメモリ204からレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又は変換ルーチンによって求められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
【0028】
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央演算処理ユニット202によって実行される、ソフトウェアで実装される。他の例において、1つ又は複数のルーチン又は演算は、ファームウェア、ハードウェア、ソフトウェア、又はそれらの幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブCPUのレジスタ210又はメモリ204内の位置を使用して、エミュレートすることができる。実施形態において、ゲスト命令250、ネイティブ命令256、及びエミュレータ・コード212は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間に分散されてもよい。
【0029】
本明細書で用いられるファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び/又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎をなすハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【0030】
一例において、取得され、変換され、実行されるゲスト命令250は、本明細書で説明される1つの命令である。1つのアーキテクチャ(例えば、z/Architecture)のものであるこの命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC、pSeries、xSeries、Intelなど)のネイティブ命令256のシーケンスとして表される。次に、これらのネイティブ命令が実行される。
【0031】
一実施形態において、本明細書で説明される命令は、本発明の1つの態様に従って提供されるベクトル・ファシリティの一部であるベクトル命令である。ベクトル・ファシリティは、例えば、1つの要素から16の要素までの範囲の固定サイズのベクトルを提供する。各ベクトルは、ファシリティ内で定められたベクトル命令により操作されるデータを含む。一実施形態において、ベクトルが複数の要素で構成される場合、各々の要素は、他の要素と並行処理される。全ての要素の処理が完了するまで、命令は完了しない。
【0032】
本明細書で説明されるように、ベクトル命令は、これらに限定されるものではないが、z/Architecture、Power、Intel等を含む、種々のアーキテクチャの一部として実装することができる。本明細書で説明される実施形態はz/Architectureに関するものであるが、ベクトル命令、及び本発明の1つ又は複数の態様は、他の多くのアーキテクチャに基づくことができる。z/Architectureは一例にすぎない。
【0033】
ベクトル・ファシリティがz/Architectureの一部として実装される一実施形態において、ベクトル・レジスタ及び命令を使用するために、指定された制御レジスタ(例えば、制御レジスタ0)におけるベクトル・イネーブルメント制御及びレジスタ制御が、例えば1に設定される。ベクトル・ファシリティがインストールされており、ベクトル命令がイネーブルメント制御の設定なしに実行される場合、データ例外が認識される。ベクトル・ファシリティがインストールされておらず、ベクトル命令が実行される場合、演算例外が認識される。
【0034】
ベクトル・データは、ストレージにおいて、例えば、他のデータ形式と同じ左から右への順序で現れる。0−7の番号が付けられたデータ形式のビットは、ストレージ内の左端の(最小番号が付された)バイト位置のバイトを構成し、ビット8−15は、次の順次位置のバイトを形成し、以下同様である。更に別の例において、ベクトル・データは、ストレージにおいて、右から左などの別の順序で現れることがある。
【0035】
ベクトル・ファシリティが与えられるベクトル命令の多くは、指定ビットのフィールドを有する。レジスタ拡張ビット(register extension bit)又はRXBと呼ばれるこのフィールドは、ベクトル・レジスタ指定オペランドの各々について最上位ビットを含む。命令によって指定されないレジスタ指示のためのビットは、予約され、ゼロに設定される。
【0036】
一例において、RXBフィールドは4ビット(例えば、ビット0−3)を含み、これららのビットは、以下のように定義される。
0−命令の第1ベクトル・レジスタ指定のための最上位ビット。
1−もしあれば、命令の第2ベクトル・レジスタ指定のための最上位ビット。
2−もしあれば、命令の第3ベクトル・レジスタ指定のための最上位ビット。
3−もしあれば、命令の第4ベクトル・レジスタ指定のための最上位ビット。
【0037】
各ビットは、例えば、レジスタ番号に応じて、アセンブラによりゼロ又は1に設定される。例えば、レジスタ0−15に対してビットは0に設定され、レジスタ16−31に対してビットは1に設定される、などである。
【0038】
一実施形態において、各々のRXBビットは、1つ又は複数のベクトル・レジスタを含む命令における特定の位置のための拡張ビットである。例えば、1つ又は複数のベクトル命令において、RXBのビット0は、位置8−11に対する拡張ビットであり、これが、例えばV
1に割り当てられ、RXBのビット1は、位置12−15に対する拡張ビットであり、これが例えばV
2に割り当てられ、以下同様である。
【0039】
更に別の実施形態において、RXBフィールドは付加的なビットを含み、1つより多くのビットが、各ベクトル又は位置のための拡張として用いられる。
【0040】
RXBフィールドを含む、本発明の1つの態様に従って提供される1つの命令は、Vector Load To Block Boundary命令であり、その一例を
図4に示す。一例において、Vector Load To Block Boundary命令300は、Vector Load To Block Boundary操作を指示する操作コード・フィールド302a(例えば、ビット0−7)、302b(例えば、ビット40−47)と、ベクトル・レジスタ(V
1)を指示するのに用いられるベクトル・レジスタ・フィールド304(例えば、ビット8−11)と、インデックス・フィールド(X
2)306(例えば、ビット12−15)と、ベース・フィールド(B
2)308(例えば、ビット16−19)と、変位フィールド(D
2)310(例えば、ビット20−31)と、マスク・フィールド(M
3)312(例えば、ビット32−35)と、RXBフィールド314(例えば、ビット36−39)とを含む。フィールド304−314の各々は、一例において、操作コード・フィールドから分離され、独立している。さらに、一実施形態において、これらのフィールドは互いに分離し、独立しているが、他の実施形態においては、1つより多くのフィールドを組み合わせてもよい。これらのフィールドの使用に関する更なる情報を以下に説明する。
【0041】
一例において、操作コード・フィールド302aにより指示される操作コードの選択されたビット(例えば、最初の2ビット)は、命令の長さ及び形式を指定する。この特定の例において、長さが3ハーフワード(halfword)であり、形式は、拡張された操作コード・フィールドを伴うベクトル・レジスタ・アンド・インデックス・ストレージ操作(vector register−and−index−storage operation)であることを示す。ベクトル(V)フィールドは、RXBにより指定されるその対応する拡張ビットと共に、ベクトル・レジスタを指示する。特に、ベクトル・レジスタについては、オペランドを含むレジスタは、例えば、レジスタ拡張ビット(RXB)を最上位ビットとして付加したレジスタ・フィールドの4ビット・フィールドを用いて指定される。例えば、4ビット・フィールドが0110であり、拡張ビットが0である場合、5ビット・フィールド00110はレジスタ番号6を示す。
【0042】
命令フィールドに付随する下付き数字は、そのフィールドが適用されるオペランドを示す。例えば、V
1に付随する下付き数字1は、第1のオペランドを示し、以下同様である。レジスタ・オペランドは、長さが1レジスタであり、これは例えば128ビットである。
【0043】
一例において、ベクトル・レジスタ・アンド・インデックス・ストレージ操作命令において、X
2及びB
2フィールドにより指示される汎用レジスタのコンテンツをD
2フィールドのコンテンツに加えて、第2のオペランド・アドレスを形成する。一例において、Vector Load To Block Boundary命令については、変位D
2は、12ビットの符号なし整数として扱われる。
【0044】
一実施形態において、M
3フィールドは、そこまでロードされるメモリの(本明細書では境界サイズとも呼ばれる)境界を求めるために用いられる。例えば、境界が命令により指定される一実施形態において、M
3フィールドは、そこまでロードされるブロック境界に関してCPUに知らせるために用いられるコードを指定する。予約値が指定される場合、指定例外が認識される。例示的なコード及び対応する値は以下の通りである。
コード 境界
0 64−バイト
1 128−バイト
2 256−バイト
3 512−バイト
4 1K−バイト
5 2K−バイト
6 4K−バイト
【0045】
しかしながら、命令を実行するプロセッサにより境界が動的に求められる更に別の実施形態において、M
3フィールドは、例としてキャッシュ又はページの境界などの境界タイプの表示を示す。次に、プロセスは、タイプと、プロセッサにより使用されるキャッシュ・ライン又はページ・サイズなどの1つ又は複数のプロセッサ特性とに基づいて、境界サイズを求める。プロセッサは、固定された境界サイズを使用してもよく、又はサイズを動的に求めてもよい。例えば、M
3フィールドが、タイプがページ境界であることを示す場合、プロセッサは、例えば、開始アドレスの変換ルックアサイド・バッファ等においてテーブル検索を行って、ページ・サイズを取得することができる。
【0046】
更に別の例においては、M
3フィールドが与えられず、タイプは、命令の別のフィールドによって又は命令以外の制御から示される。
【0047】
一実施形態において左から右へと進む、Vector Load To Block Boundary(VLBB)命令の一実施形態の実行において、第1のオペランド(V
1フィールド+拡張ビットにより指示されるレジスタにおいて指定される)がロードされ、第2のオペランドからのバイトと共に、ゼロによりインデックス付けされたバイト要素で開始する。第2のオペランドは、第2のオペランド・アドレス(開始アドレスとも呼ばれる)により指し示されるメモリ位置である。以下に説明されるように、ロードは、そのメモリ位置から開始し、命令(又は、プロセッサ)により計算される終了アドレスまで続く。境界条件に遭遇した場合、第1のオペランドの残りをどのように取り扱うかは、モデルによって決まる。ロードされないバイトに対して、アクセス例外は認識されない。一例において、ロードされないバイトは予測できない。
【0048】
上の例示的な命令において、開始アドレスは、インデックス・レジスタ値(X
2)+ベース・レジスタ値(B
2)+変位(D
2)により決定されるが、他の実施形態においては、ほんの幾つかの例として、レジスタ値;命令アドレス+命令テキスト指定のオフセット;レジスタ値+変位;又はレジスタ値+インデックス・レジスタ値により与えられる。さらに、一実施形態において、命令は、RXBフィールドを含まない。代わりに、拡張は、使用されない、又は命令以外の制御からなどの別の方法で与えられる、又は命令の別のフィールドの一部として与えられる。
【0049】
Vector Load to Block Boundary命令を処理する一実施形態の更なる詳細を、
図5を参照して説明する。一例において、コンピューティング環境のプロセッサは、この論理を実施している。
【0050】
一実施形態において、最初に、ロードが始まるメモリ内の位置を示す開始アドレスを計算する(ステップ400)。例として、開始アドレス402は、レジスタ値;命令アドレス+命令テキスト指定のオフセット;レジスタ値+変位;レジスタ値+インデックス・レジスタ値;又は、レジスタ値+インデックス・レジスタ値+変位により与えることができる。本明細書で与えられる命令において、開始アドレスは、X
2フィールド、B
2フィールド、及びD
2フィールドによって与えられる。つまり、X
2及びB
2によって指示されるレジスタのコンテンツをD
2により示される変位に加えて、開始アドレスを提供する。開始アドレスを計算するための上述の方法は単なる例にすぎず、他の例も可能である。
【0051】
その後、境界を動的に判断するかどうかについて判断がなされる(問い合わせ404)。境界が動的に判断されない場合、M
3フィールドにおいて指定された値が境界サイズ(BdySize)として使用される(ステップ406)。他の場合には、プロセッサは、境界サイズを動的に判断する(ステップ406)。例えば、M
3フィールドは、境界のタイプを指定し、そのタイプと、プロセッサの1つ又は複数の特性(プロセッサのキャッシュ・ライン・サイズ、プロセッサのページ・サイズ等)とに基づいて、プロセッサが境界を判断する。例として、タイプに基づいて、プロセッサは、固定された境界サイズ(例えば、プロセッサの予め定められた固定キャッシュ・ライン又はページ・サイズ)を使用するか、又はタイプに基づいて境界を判断する。例えば、タイプがページ境界である場合、プロセッサはTLBにおおて開始アドレスを検索し、そこからページ境界を判断する。他の例も存在する。
【0052】
境界サイズを判断した後、指定された境界までの近さを判断するために用いられる境界マスクを、動的に又は指定された命令により生成する(ステップ410)。マスクを生成するために、一例において、境界サイズ(BdySize)408の2の補数否定を取り、境界マスク412を生成する(例えば、BdyMask=0−BdySize)。
【0053】
次に、終了アドレスを計算し、どこでロードを停止すべきかを示す(ステップ420)。この計算のための入力は、例えば、境界サイズ408、開始アドレス402、ベクトル・サイズ414(例えば16などのバイト単位の)及び境界マスク412である。一例において、終了アドレス422は、以下のように計算される。:
【数1】
【0054】
その後、第1のオペランド(即ち、指定されたベクトル・レジスタ)がロードされ、開始アドレスで開始し、終了アドレスで終端するメモリから、インデックス付けされたバイト0で開始する(ステップ430)。これにより、指定されたメモリ境界を超えずに、可変数のバイトを、メモリからベクトルにロードすることが可能になる。例えば、メモリ境界は64バイトにあり、開始アドレスは58バイトにある場合、バイト58−64は、ベクトル・レジスタ内にロードされる。
【0055】
本発明の1つの態様による、ベクトル・レジスタ内にロードされるデータの一例を
図6に示す。示されるように、データは、垂直点線で示される境界を超えてロードされない。境界を超える位置はアクセス可能でなく、例外は発生しない。1つの特定の実施形態において、ベクトルは、左から右にロードされる。しかしながら、別の実施形態においては、ベクトルは右から左にロードされ得る。一実施形態において、左から右又は右から左へのベクトルの方向が与えられる。例えば、命令は、レジスタ、状況制御、又は例として左から右又は右から左へのいずれかの処理方向を示す他のエンティティにアクセスする。一実施形態において、この方向制御は、命令の一部として符号化されず、実行時に命令に与えられる。
【0056】
本明細書で説明するように、ベクトル・レジスタは、主ストレージのブロック内からのデータ・バイトと共にロードされる。ブロックの境界は、ブロックの最後とみなされる。ブロックの始まりは、StartAddress及び境界マスクを用いて計算することができる。例えば、ブロックの始まりは、StartAddress AND BdyMaskにより計算される。
【0057】
上述したのは、ロード命令の一例である。ストリング・データなどのデータをロードする際、ストリングがページ境界の前に終了するかどうかは未知であることが多い。その境界まで境界を超えずにロードするための能力は、典型的には、最初にストリングの最後をチェックすることを必要とする。幾つかの実施では、境界を超えることに対するペナルティがある場合もあり、ソフトウェアは、境界を超えるのを避けたい。従って、幾つかの境界までロードする能力は有用である。データが指定境界を超えてロードされないことを保証しながら、可変数のバイトをベクトル・レジスタにロードする命令が提供される。
【0058】
一実施形態において、32のベクトル・レジスタが存在し、他のタイプのレジスタは、ベクトル・レジスタの象限にマッピングすることができる。例えば、
図8に示すように、32のベクトル・レジスタ602を含むレジスタ・ファイル600が存在し、各レジスタの長さが128ビットである場合、長さが64ビットである16の浮動小数点レジスタ604は、ベクトル・レジスタに重ね合わせることができる。従って、一例として、浮動小数点レジスタ604が修正されると、ベクトル・レジスタ602も修正される。他のタイプのレジスタについての他のマッピングも可能である。
【0059】
本明細書において、メモリ、主メモリ、ストレージ、及び主ストレージは、明示的に又は文脈によって別様に示されない限り、互換的に使用される。
【0060】
ベクトル・ファシリティに関する付加的な詳細は、他の命令の例を含めて、この詳細な説明のさらに後半の部分として与えられる。
【0061】
当業者により認識されるように、本発明の1つ又は複数の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の1つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の1つ又は複数の態様は、コンピュータ可読プログラム・コードが組み込まれた、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【0062】
1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置又はデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
【0063】
ここで
図8を参照すると、一例において、コンピュータ・プログラム製品700は、例えば、本発明の1つ又は複数の態様を提供し、容易にするように、コンピュータ可読プログラム・コード手段又は論理704をその上に格納するための1つ又は複数の非一時的(non−transitory)コンピュータ可読ストレージ媒体702を含む。
【0064】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
【0065】
本発明の1つ又は複数の態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、SmallTalk(登録商標)、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
【0066】
本発明の1つ又は複数の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
【0067】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0068】
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにもすることもできる。
【0069】
図面内のフローチャート及びブロック図は、本発明の1つ又は複数の態様の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【0070】
上記に加えて、本発明の1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、1つ又は複数の顧客に対して本発明の1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1つ又は複数の第三者に対する広告コンテンツの販売から支払いを受けることができる。
【0071】
本発明の一態様において、本発明の1つ又は複数の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、本発明の1つ又は複数の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0072】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
【0073】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は本発明の1つ又は複数の態様を含む。コードは、コンピュータ・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
【0074】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、本発明の1つ又は複数の態様を組み込み、用いることが可能である。さらに、他のサイズのレジスタを用いることができ、本発明の精神から逸脱することなく、命令に対して変更を加えることができる。
【0075】
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを格納及び/又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
【0076】
入力/出力即ちI/O装置(キーボード、ディスプレイ、ポインティング装置、DASD、テープ、CD、DVD、親指ドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない)は、直接的に、又は介在するI/Oコントローラを通して、システムに結合することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又は遠隔プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット・カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
【0077】
図9を参照すると、本発明の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は、1つより多いCPUが利用可能な大容量のキャッシュと、大型のキャッシュと各CPUとの間のより小型でより高速な(下位レベルの)キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ5009を介して、命令フェッチ・ユニット5004により、命令がメモリ5002からフェッチされる。命令は、命令デコード・ユニット5006でデコードされ、命令実行ユニット5008にディスパッチされる(幾つかの実施形態においては他の命令と共に)。一般的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット5008が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ5002からオペランドにアクセスする(ロード又はストアする)場合、典型的には、ロード/ストア・ユニット5005が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
【0078】
既述のように、コンピュータ・システムは、ローカル(又は主)ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方が、主ストレージにロードされる。
【0079】
主ストレージは、キャッシュと呼ばれることもある、1つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
【0080】
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
【0081】
ストレージは、長い水平方向のビットのストリングと考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットのストリングは、8ビット単位で分割される。この8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まって、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである。
【0082】
情報は、ストレージとCPU又はチャネル・サブシステムとの間で、一度に1バイトずつ、又は1バイト・グループずつ伝送される。特に断りのない限り、例えばz/Architectureにおいては、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙に指定されるか又は明示的に指定される。CPU操作に用いられる場合、バイト・グループはフィールドと呼ばれる。例えばz/Architectureにおいては、バイト・グループの中の各々において、ビットは、左から右の順序で番号が付けられる。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バイト、2バイト、4バイト、8バイト、又は16バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有すると言われる。可変長オペランドは、1バイトのインクリメントにより変化し得る(又は、一部の命令では、2バイトの倍数若しくは他の倍数)。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイト位置のコンテンツのみが置き換えられる。
【0083】
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワードは、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワッドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要件をもたない。
【0084】
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、その格納が、後にフェッチされる命令を変更するかどうかに関係なく、著しい遅延が生じることがある。
【0085】
一実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の1つ又は複数の態様と整合性がある)により実施することができる。
図9を参照すると、本発明の1つ又は複数の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム5000のプロセッサ5001により、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ5002からユーザに分散させても、又は、こうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0086】
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラムの機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0087】
図10は、本発明の1つ又は複数の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。
図10のシステム5020は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つ又は複数のプロセッサ5026と、周知の技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、ハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、メモリ5025及び長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
【0088】
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット又はモデムである。或いは、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)、又はシステム5021内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【0089】
図11は、本発明の1つ又は複数の態様を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【0090】
さらに
図11を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個々のネットワークへの入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1つ又は複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM(登録商標) eServer(商標)System zサーバを用いて実装することができる。
【0091】
図10及び
図11を同時に参照すると、本発明の1つ又は複数の態様を具体化することができるソフトウェア・プログラム・コードには、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ5050、5051に分散させても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0092】
或いは、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネント及び1つ又は複数のアプリケーション・プログラム5032の機能及び相互作用を制御するオペレーティング・システムを含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0093】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メインストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0094】
図12を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ5053が用いられる。キャッシュ5053は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
【0095】
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architectureプロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM(登録商標) z/Architectureの命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ5061が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0096】
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0097】
次いで、フェッチされた命令が、プロセッサ5026によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令の操作コードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
【0098】
プロセッサ5026は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット5057、5058、5060を有する。
図13を参照すると、実行ユニット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が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0099】
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対して操作コードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
【0100】
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3オペランドに格納し、ここで第3オペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM z/Architectureは、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
【0101】
図14を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信することができる。
【0102】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタのコンテンツとを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
【0103】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、操作コード・フィールドによって、オペランドとして識別されるインプライド・レジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architectureの長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、指標レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
【0104】
図15を参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0105】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architectureでは、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後に仮想アドレスを用いることで、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
【0106】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0107】
I/Oユニット5054(
図12)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標) System z(登録商標)のようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0108】
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、環境は、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)又はそのサブセットをエミュレートする(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)エミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの1つ又は複数のエミュレーション機能により、本発明の1つ又は複数の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
【0109】
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1つ又は複数のサブルーチンとして実装される。
【0110】
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/ArchitectureのIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、Power Systemsサーバ及びSystem x(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(登録商標)などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【0111】
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
【0112】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ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、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能なターゲット・マシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
【0113】
図16において、ホスト・アーキテクチャのホスト・コンピュータ・システム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を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【0114】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【0115】
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲及び精神から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【0116】
Vector String(ベクトル・ストリング)命令
ベクトル・ストリング・ファシリティ
→
命令
別に指定しない限り、全てのオペランドはベクトル・レジスタ・オペランドである。アセンブラ構文における「V」は、ベクトル・オペランドを指示する。
【表1】
VECTOR FIND ANY EQUAL
【表2】
左から右へ進み、第2のオペランドの全ての符合なし2進整数要素は、第3のオペランドの符合なし2進整数要素の各々と、及びM
5フィールド内にZero Search(ゼロ検索)フラグが設定されている場合には随意的にゼロと、等値性に関して比較される。
【0117】
M
5フィールド内のResult Type(結果タイプ)(RT)フラグがゼロである場合、第3のオペランド内のいずれかの要素と一致するか又は随意的にゼロである第2のオペランド内の各要素に対して、第1のオペランド内の対応する要素のビット位置が1に設定され、他の場合には、ゼロに設定される。
M
5フィールド内のResult Type(RT)フラグが1である場合、第3のオペランド内の一要素と一致するか又はゼロである第2のオペランド内の左端要素のバイト・インデックスが、第1のオペランドのバイト7に格納される。
【0118】
各命令は、推奨される拡張ニーモニック及びそれらの対応するマシン・アセンブラ構文を記述するExtended Mnemonic(拡張ニーモニック)部分を有する。
【0119】
プログラミング上の注意:随意的に条件コードを設定する全ての命令に関して、条件コードが設定される場合には性能が低下する可能性がある。
【0120】
M
5フィールド内のResult Type(RT)フラグが1であり、どのバイトも等しいことが見出されないか、又はゼロ検索フラグが設定されている場合にゼロである場合、ベクトル内のバイト数に等しいインデックスが、第1のオペランドのバイト7に格納される。
【0121】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0122】
M
5フィールドは以下の形式を有する。
【表3】
【0123】
M
5フィールドのビットは、以下のように定義される。
・Result Type(RT):ゼロの場合、結果の各要素は、その要素に関する全範囲比較のマスクとなる。1の場合、バイト・インデックスが第1のオペランドのバイト7に格納され、ゼロが全ての他の要素に格納される。
・Zero Search(ゼロ検索)(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(条件コード設定)(CC):ゼロの場合、条件コードは設定されず、変更されないままである。1の場合、条件コードは、以下の節で指定されるように設定される。
【0124】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0がゼロでない。
【0125】
結果の条件コード:
CCフラグがゼロである場合、コードは変更されないままである。
CCフラグが1である場合、コードは以下のように設定される。
0 ZSビットが設定されている場合、第2のオペランド内のゼロより下位のインデックス付き要素内に一致が存在しなかった。
1 第2のオペランドの幾つかの要素が、第3のオペランド内の少なくとも1つの要素と一致する。
2 第2のオペランド内の全ての要素が、第3のオペランド内の少なくとも1つの要素と一致した。
3 第2のオペランド内の要素は、第3のオペランド内のいずれの要素とも一致しない。
【0126】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制限
【0128】
VECTOR FIND ELEMENT EQUAL
【表5】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3のオペランドの対応する符合なし2進整数要素と比較される。2つの要素が等しい場合、左端等値要素の最初のバイトのバイト・インデックスが、第1のオペランドのバイト7に入れられる。第1のオペランドの残りのバイトにゼロが格納される。どのバイトも等しくないか、又は、ゼロ比較が設定されている場合にゼロである場合、ベクトル内のバイト数に等しいインデックスが、第1のオペランドのバイト7に格納される。残りのバイトにはゼロが格納される。
【0129】
M
5フィールド内にZero Search(ZS)ビットが設定されている場合、第2のオペランド内の各要素は、等値性に関してゼロとも比較される。第2及び第3のオペランドのいずれかの他の要素が等しいことが見出される前に、第2のオペランド内にゼロの要素が見出された場合、ゼロであることが見出された要素の最初のバイトのバイト・インデックスが第1のオペランドのバイト7に格納され、全ての他のバイト位置にゼロが格納される。Condition Code Set(CC)フラグが1である場合、条件コードはゼロに設定される。
【0130】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0131】
M
5フィールドは以下の形式を有する。
【表6】
M
5フィールドのビットは、以下のように定義される。
・Reserved(予約される):ビット0−1は予約されており、ゼロでなければならない。そうでない場合には、指定例外が認識される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは変更されないままである。1の場合、条件コードは、以下の節で指定されるように設定される。
【0132】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0−1がゼロでない。
【0133】
結果の条件コード:
M
5フィールドのビット3が1に設定されている場合、コードは以下のように設定される:
0 ゼロ比較ビットが設定されている場合、比較により、第2のオペランド内のゼロ要素がいずれの等値比較よりも小さいインデックスを有する要素内で検出された。
1 比較により、第2のオペランドと第3のオペランドとの間で何らかの要素の一致が検出された。ゼロ比較ビットが設定されている場合、この一致は、ゼロ比較要素より小さい又はこれに等しいインデックスを有する要素において生じた。
2 −−
3 比較したいずれの要素も等値でない。
M
5フィールドのビット3がゼロである場合、コードは変更されないままである。
【0134】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制限
【0136】
プログラミング上の注意:
1.バイト・インデックスは、いずれの要素サイズに関しても常に第1のオペランド内に格納される。例えば、要素サイズがハーフワードに設定され、第2のインデックス付きハーフワードが等値比較された場合、4のバイト・インデクッスが格納される。
2.第3のオペランドは、ゼロ値を有する要素を含んではならない。第3のオペランドがゼロを含み、且つ、他のいずれかの等値比較の前に第2のオペランド内のゼロ要素と一致した場合、ゼロ比較ビットの設定に関わらず、条件コード1が設定される。
【0137】
VECTOR FIND ELEMENT NOT EQUAL
【表8】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3のオペランドの対応する符合なし2進整数要素と比較される。2つの要素が等しくない場合、左端の非等値要素のバイト・インデックスが、第1のオペランドのバイト7に入れられ、他の全てのバイトにゼロが格納される。M
5フィールド内のCondition Code Set(CC)ビットが1に設定されている場合、条件コードはどのオペランドがより大きかったかを示すように設定される。全ての要素が等しかった場合、ベクトル・サイズに等しいバイト・インデックスが第1のオペランドのバイト7に入れられ、他の全てのバイト位置にはゼロが配置される。CCビットが1である場合、条件コード3が設定される。
【0138】
M
5フィールド内にゼロ検索(ZS)ビットが設定されている場合、第2のオペランド内の各要素は、等値性に関してゼロとも比較される。第2のオペランドのいずれかの他の要素が非等値であることを見出される前に、第2のオペランド内にゼロ要素が見出された場合、ゼロであることが見出された要素の最初のバイトのバイト・インデックスが第1のオペランドのバイト7に格納される。全ての他のバイトにはゼロが格納され、条件コード0が設定される。
【0139】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0140】
M
5フィールドは以下の形式を有する。
【表9】
M
5フィールドのビットは、以下のように定義される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず変更されないままである。1の場合、条件コードは以下の節で指定されるように設定される。
【0141】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、その他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
2.M
5フィールドのビット0−1がゼロでない。
【0142】
結果の条件コード:
M
5フィールドのビット3が1に設定されている場合、コードは以下のように設定される:
0 ゼロ、比較ビットが設定されている場合、比較により、両オペランド内のゼロ要素がいずれの非等値比較よりも下位のインデックス付き要素内で検出された。
1 要素不一致が検出され、VR2内の要素がVR3内の要素より小さい。
2 要素不一致が検出され、VR2内の要素がVR3内の要素より大きい。
3 比較された全ての要素が等値であり、ゼロ比較ビットが設定されている場合、第2のオペランド内にゼロ要素が見出されなかった。
M
5フィールドのビット3がゼロである場合、コードは変更されないままである。
【0143】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制限
【0145】
VECTOR STRING RANGE COMPARE
【表11】
左から右へ進み、第2のオペランドの符合なし2進整数要素が、第3及び第4のオペランド内の要素の偶数−奇数対によって定義される値の範囲と比較される。第4のオペランドからの制御値との組み合わせが、実施される比較の範囲を定める。ある要素が第3及び第4のオペランドによって指定された範囲のいずれかと一致する場合、一致であると見なされる。
【0146】
M
6フィールド内のResult Type(RT)フラグがゼロである場合、第2のオペランド内の比較される要素に対応する第1のオペランド内の要素のビット位置が、その要素がいずれかの範囲に一致する場合には1に設定され、他の場合には、ゼロに設定される。
【0147】
M
6フィールド内のResult Type(RT)フラグが1に設定される場合、第3及び第4のオペランドによって指定される範囲のいずれかと一致する、又はZSフラグが1に設定されている場合にはゼロ比較と一致する、第2のオペランド内の第1の要素のバイト・インデックスが第1のオペランドのバイト7に入れられ、残りのバイトにはゼロが格納される。いずれの要素も一致しない場合、ベクトル内のバイト数に等しいインデックスが第1のオペランドのバイト7に入れられ、残りのバイトにはゼロが格納される。
【0148】
M
6フィールド内のZero Search(ZS)フラグが1に設定されている場合、第2のオペランド要素のゼロとの比較を、第3及び第4のオペランドによって与えられる範囲に加える。ゼロ比較が他のいずれの真の比較よりも下位のインデックス付き要素内にある場合、条件コードはゼロに設定される。
【0149】
オペランドは、M
5フィールド内のElement Size(要素サイズ)制御によって指定されるサイズの要素を含む。
【0150】
第4のオペランド要素は、以下の形式を有する。
ESが0に等しい場合:
【表12】
ESが1に等しい場合:
【表13】
ESが2に等しい場合:
【表14】
【0151】
第4のオペランド要素内のビットは、以下のように定義される。
・Equal(等しい)(EQ):1のとき、等値比較がなされる。
・Grater Than(大なり)(GT):1のとき大なり(greater than)比較が実施される。
・Less Than(小なり)(LT):1のとき、小なり(less than)比較が実施される。
・全ての他のビットは、予約され、将来の互換性を保証するためにゼロにすべきである。
【0152】
制御ビットは、任意の組み合わせで用いることができる。いずれのビットも設定されていない場合、比較は常に偽の結果を生じることになる。全てのビットが設定されている場合、比較は常に真の結果を生じることになる。
【0153】
M
5フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3〜15−予約される
【0154】
M
6フィールドは以下の形式を有する。
【表15】
M
6フィールドのビットは。以下のように定義される。
・Invert Result(反転結果)(IN):ゼロの場合、制御ベクトル内の値の対について比較が続けられる。1の場合、その範囲内の比較の対の結果が反転される。
・Result Type(RT):ゼロの場合、結果の各要素は、その要素についての全ての範囲比較のマスクとなる。1の場合、インデックスが第1のオペランドのバイト7に格納される。残りのバイトにはゼロが格納される。
・Zero Search(ZS):1の場合、第2のオペランドの各要素は、ゼロとも比較される。
・Condition Code Set(CC):ゼロの場合、条件コードは設定されず、変更されないままである。1の場合、条件コードは、以下の節で指定されるように設定される。
【0155】
特別条件
指定例外が認識され、以下のいずれかが生じた場合、他のいずれのアクションもとられない。
1.M
4フィールドが3から15までの値を含む。
【0156】
結果の条件コード:
0 ZS=1であり、且つ、いずれの比較よりも下位のインデクス付き要素内にゼロが見出される場合
1 比較が見出される
2 −−
3 比較が見出されない
【0157】
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制限
【0158】
拡張ニーモニック
【表16】
【表17】
【0159】
LOAD COUNT TO BLOCK BOUNDARY
【表18】
上限16とされた指定ブロック境界を超えることなく、第2のオペランド位置からロードすることが可能なバイト数を含んだ32ビットの符合なし2進整数が、第1のオペランドに入れられる。
変位は、12ビットの符号なし整数として扱われる。
第2のオペランド・アドレスは、データをアドレス指定するのには使用されない。
M
3フィールドは、ロードされる可能なバイト数を計算するためのブロック境界サイズに関してCPUに信号を送るのに用いられるコードを指定する。予約値が指定された場合には、指定例外が認識される。
【0160】
コード境界
0 64バイト
1 128バイト
2 256バイト
3 512バイト
4 1Kバイト
5 2Kバイト
6 4Kバイト
7〜15 予約される
【0161】
結果の条件コード:
0 オペランド1が16である
1 −−
2 −−
3 オペランド1が16より小さい
【0162】
結果の条件コード:
プログラム例外:
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定
【0163】
結果の条件コード:
プログラミング上の注意:ロードされたバイト数を判定するために、LOAD COUNT TO BLOCK BOUNDARYは、VECTOR LOAD TO BLOCK BOUNDARYと併せて使用されると予想される。
【0164】
VECTOR LOAD GR FROM VR ELEMENT
【表19】
M
4フィールド内のES値で指定されたサイズの、第2のオペランド・アドレスでインデックス付けされた第3のオペランドの要素が、第1のオペランド位置内に入れられる。第3のオペランドは、ベクトル・レジスタである。第1のオペランドは、汎用レジスタである。第2のオペランド・アドレスによって指定されたインデックスが、指定された要素サイズの第3のオペランド内の最高番号を付された要素よりも大きい場合、第1のオペランド内のデータは、予測不可能である。
ベクトル・レジスタ要素がダブルワードより小さい場合、要素は64ビット汎用レジスタ内で右寄せされ、残りのビットにゼロが入れられる。
【0165】
第2のオペランド・アドレスは、データをアドレス指定するのには使用されず、代りに、アドレスの右端の12ビットが、第2のオペランド内の要素のインデックスを指定するのに使用される。
【0166】
M
4フィールドは、要素サイズ制御(ES)を指定する。ES制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
0−バイト
1−ハーフワード
2−ワード
3−ダブルワード
4〜15−予約されており、変更されない。
【0167】
結果の条件コード:コードは変更されない。
プログラム例外:
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたES値)
・トランザクション制限
【0169】
VECTOR LOAD TO BLOCK BOUNDARY
【表21】
第1のオペランドが、第2のオペランドからのバイトを伴うゼロでインデックス付けされたバイト要素で開始して、ロードされる。境界条件に遭遇した場合、第1のオペランドの残りは予測不可能である。ロードされていないバイトに対して、アクセス例外は認識されない。
VLBBの変位は、12ビットの符合なし整数として取り扱われる。
M
3フィールドは、ロードするためのブロック境界サイズに関してCPUに信号を送るのに用いられるコードを指定する。予約値が指定された場合には、指定例外が認識される。
【0170】
コード境界
0 64バイト
1 128バイト
2 256バイト
3 512バイト
4 1Kバイト
5 2Kバイト
6 4Kバイト
7〜15 予約される
【0171】
結果の条件コード:コードは変更されないままである。
プログラム例外:
・アクセス(フェッチ、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・指定(予約されたブロック境界コード)
・トランザクション制限
【0172】
プログラミング上の注意:
1.ある特定の状況において、データがブロック境界を超えてロードされることがある。しかしながら、これは、そのデータについてのアクセス例外がない場合にのみ生じる。
【0173】
VECTOR STORE
【表22】
第1のオペランド内の128ビット値が、第2のオペランドによって指定される記憶位置に格納される。VSTの変位は、12ビットの符号なし整数として取り扱われる。
【0174】
結果の条件コード:コードは変更されないままである。
プログラム例外:
・アクセス(ストア、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・トランザクション制限
【0175】
VECTOR STORE WITH LENGTH
【表23】
左から右へ進み、第1のオペランドからのバイトが、第2のオペランド位置に格納される。汎用レジスタにより指定された第3のオペランドは、格納する最高のインデックス付きバイトを表す値を含む32ビットの符号なし整数を含む。第3のオペランドが、ベクトルの最高バイト・インデックスより大きいか又はこれに等しい値を含む場合、第1のオペランドの全てのバイトが格納される。
【0176】
アクセス例外は、格納されたバイトについてのみ認識される。
VECTOR STORE WITH LENGTHに関する変位は、12ビットの符号なし整数として取り扱われる。
【0177】
結果の条件コード:条件コードは変更されないままである。
プログラム例外:
・アクセス(ストア、オペランド2)
・DXC FEを伴うデータ、ベクトル・レジスタ
・ベクトル拡張ファシリティがインストールされていない場合の演算
・トランザクション制限
【0178】
RXBの説明
全てのベクトル命令は、命令のビット36−40において、RXBとラベル付けされたフィールドを有する。このフィールドは、ベクトル・レジスタが指示する全てのオペランドの最上位ビットを含む。命令によって指定されていないレジスタ指示のためのビットは、予約され、ゼロに設定されるべきであり、さもなければ、プログラムは、将来、互換的に動作することができない。その最上位ビットが4ビット・レジスタ指示の左に連結されて、5ビットのベクトル・レジスタ指定が作成される。
ビットは以下のように定義される:
0.命令のビット8−11内のベクトル・レジスタ指示のための最上位ビット。
1.命令のビット12−15内のベクトル・レジスタ指示のための最上位ビット。
2.命令のビット16−19内のベクトル・レジスタ指示のための最上位ビット。
3.命令のビット32−35内のベクトル・レジスタ指示のための最上位ビット。
【0179】
Vector Enablement(ベクトル・イネーブルメント)制御
ベクトル・レジスタ及び命令は、制御レジスタ・ゼロ内のベクトル・イネーブルメント制御(ビット46)及びAFPレジスタ制御(ビット45)の両方が1に設定されている場合にのみ使用することができる。ベクトル・ファシリティがインストールされ、ベクトル命令がイネーブルメント・ビットの設定なしに実行される場合、DXC EF hexによるデータ例外が認識される。ベクトル・ファシリティがインストールされていない場合、演算例外が認識される。