【文献】
土居 意弘,「POWERの先進機能とパフォーマンス」,月刊アスキードットテクノロジーズ,日本,株式会社アスキー・メディアワークス,2009年 8月 1日,第14巻 第8号,62頁〜73頁
(58)【調査した分野】(Int.Cl.,DB名)
前記オペコードは、第2の値である場合、ゾーン形式のソース及び拡張形式の10進浮動小数点形式の結果を示す、請求項1または2に記載のコンピュータ・プログラム。
前記実行することは、前記第2オペランドをメモリから読み出すことと、前記メモリから読み出された前記第2オペランドに対する前記変換を実施することとをさらに含む、請求項1〜5のいずれか1項に記載のコンピュータ・プログラム。
前記実行することは、前記結果についての符号を判断することをさらに含み、前記置くことは、前記第1オペランド位置内に前記結果と併せて前記判断された符号を含めることを含む、請求項1〜6のいずれか1項に記載のコンピュータ・プログラム。
前記実行することは、前記メモリから前記第2オペランドを読み出すことと、前記メモリから読み出された前記第2オペランドに対する前記変換を実施することとをさらに含む、請求項11に記載のコンピュータ・システム。
前記実行することは、前記結果についての符号を判断することをさらに含み、前記置くことは、前記第1オペランド位置内に前記結果と併せて前記判断された符号を含めることを含む、請求項11に記載のコンピュータ・システム。
前記実行するステップは、前記コンピュータが、前記結果についての符号を判断するステップをさらに含み、前記置くステップは、前記コンピュータが、前記第1オペランド位置内に前記結果と併せて前記判断された符号を含めるステップを含む、請求項14に記載の方法。
【発明を実施するための形態】
【0013】
異なるコンピュータ・アーキテクチャが異なるデータ形式をサポートし、サポートされるデータ形式が、時間の経過と共に変化することがある。例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるマシンは、従来より、EBCDIC形式及びASCII形式をサポートしてきた。より最近のマシンは、IEEE標準(IEEE754−2008)が存在する10進浮動小数点(decimal floating point、DFP)形式及び演算をサポートし始めた。しかしながら、DFP演算を用いるためには、EBCDIC及びASCII形式のデータをDFP形式に変換しなければならない。
【0014】
本発明の1つの態様によると、EBCDIC又はASCII形式と10進浮動小数点形式との間で変換するための効率的な機構が提供される。一例において、この機構は、他の技術のメモリ・オーバーヘッドなしに、変換を実施する。
【0015】
本発明の一態様において、メモリからEBCDIC又はASCII形式のデータ(これはゾーン形式を有する)を読み出し、それを適切な10進浮動小数点形式に変換してターゲット浮動小数点レジスタ又は浮動小数点レジスタ対に書き込む、マシン命令が提供される。これらの命令は、本明細書では、長形式のゾーン形式からの変換(long Convert from Zoned、CDZT)命令及び拡張形式のゾーン形式からの変換(extended Convert from Zoned、CXZT)命令と呼ばれる。
【0016】
本発明の更に別の態様において、ソース浮動小数点レジスタ又は浮動小数点レジスタ対における10進浮動小数点(DFP)オペランドをEBCDIC又はASCII形式のデータに変換し、それをターゲット・メモリ位置に格納する、マシン命令が提供される。これらの命令は、本明細書では、長形式のゾーン形式への変換(long Convert to Zoned,CZDT)命令及び拡張形式のゾーン形式への変換(extended Convert to Zoned、CZXT)命令と呼ばれる。
【0017】
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、
図1を参照して説明される。コンピューティング環境100が、例えば1つ又は複数のバス108及び/又は他の接続を介して互いに結合された、例えば、プロセッサ102(例えば中央演算処理ユニット)、メモリ104(例えばメイン・メモリ)、及び1つ又は複数の入力/出力(I/O)デバイス及び/又はインターフェース106を含む。
【0018】
一例において、プロセッサ102は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーション(IBM(登録商標))により提供されるSystem z(登録商標)サーバの一部であるz/Architecture(登録商標)プロセッサである。System z(登録商標)サーバは、コンピュータの論理構造及び機能操作を指定する、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるz/Architecture(登録商標)を実装する。z/Architecture(登録商標)の一実施形態は、非特許文献1に記載されている。一例において、サーバは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、z/OS(登録商標)などのオペレーティング・システムを実行する。IBM(登録商標)、z/Architecture(登録商標)及びz/OS(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【0019】
本発明の1つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の実施形態が、
図2を参照して説明される。この例では、コンピューティング環境200は、例えば1つ又は複数のバス208及び/又は他の接続を介して互いに結合された、例えば、ネイティブ(native)中央演算処理ユニット202、メモリ204、及び1つ又は複数の入力/出力デバイス及び/又はインターフェース206を含む。例として、コンピューティング環境200は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるPowerPC(登録商標)プロセッサ、pSeries(登録商標)サーバ又はxSeries(登録商標)サーバ、カリフォルニア州Palo Alto所在のHewlett Packard Co.,により提供される、Intel Itanium II(登録商標)プロセッサ搭載のHP Superdome、及び/又は、IBM(登録商標)、Hewlett Packard、Intel、Sun Microsystems、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。PowerPC(登録商標)、pSeries(登録商標)及びxSeries(登録商標)は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。Intel(登録商標)及びItanium II(登録商標)は、カリフォルニア州Santa Clara所在のIntel Corporationの登録商標である。
【0020】
ネイティブ中央演算処理ユニット202は、環境内での処理の際に用いられる、1つ又は複数の汎用レジスタ及び/又は1つ又は複数の専用レジスタのような1つ又は複数のネイティブ・レジスタ210を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【0021】
さらに、ネイティブ中央演算処理ユニット202は、メモリ204内に格納された命令及びコードを実行する。1つの特定の例において、中央演算処理ユニットは、メモリ204内に格納されたエミュレータ・コード212を実行する。このコードにより、1つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード212により、PowerPC(登録商標)プロセッサ、pSeries(登録商標)サーバ、xSeries(登録商標)サーバ、HP Superdomeサーバ又は他のもののような、z/Architecture(登録商標)以外のアーキテクチャに基づいたマシンが、z/Architecture(登録商標)をエミュレートし、z/Architecture(登録商標)に基づいて開発されたソフトウェア及び命令を実行することが可能になる。
【0022】
エミュレータ・コード212に関する更なる詳細が、
図3を参照して説明される。ゲスト命令250が、ネイティブCPU202のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令(例えば、マシン命令)を含む。例えば、ゲスト命令250は、z/Architecture(登録商標)プロセッサ102上で実行されるように設計されるが、代わりに、ネイティブCPU202(例えば、Intel(登録商標)Itanium II(登録商標)プロセッサとすることができる)上でエミュレートされることもある。一例において、エミュレータ・コード212は、メモリ204から1つ又は複数のゲスト命令250を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ユニット252を含む。エミュレータ・コード212はまた、取得されたゲスト命令のタイプを判断し、ゲスト命令を1つ又は複数の対応するネイティブ命令256に変換するための命令変換ユニット254も含む。この変換は、例えば、ゲスト命令により実行される機能を識別することと、その機能を実行するためのネイティブ命令を選択することとを含む。
【0023】
さらに、エミュレータ212は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、ネイティブCPU202に、1つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令250の実行は、メモリ204からレジスタにデータをロードすること、データをレジスタから再びメモリに格納すること、又は、変換ルーチンによって求められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
【0024】
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央演算処理ユニット202によって実行される、ソフトウェアで実装される。他の例において、1つ又は複数のルーチン又は演算は、ファームウェア、ハードウェア、ソフトウェア、又はその幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブCPUレジスタ210を使用して、又は、メモリ204内の位置を使用して、エミュレートすることができる。実施形態において、ゲスト命令250、ネイティブ命令256、及びエミュレータ・コード212は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間で分担されてもよい。
【0025】
本明細書で用いられるファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び/又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び/又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎をなすハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【0026】
一例においては、取得され、変換され、実行されるゲスト命令250が、本明細書で説明される命令の1つである。この例においては、z/Architecture(登録商標)命令であるこの命令は、メモリからフェッチされ、変換され、これらを実行するネイティブ命令256のシーケンス(例えば、PowerPC(登録商標)、pSeries(登録商標)、xSeries(登録商標)、Intel(登録商標)など)として表される。
【0027】
別の実施形態において、命令の1つ又は複数が、例えば、非特許文献2、非特許文献3、非特許文献4、非特許文献5、及び/又は非特許文献6に記載されるようなアーキテクチャを含む、別のアーキテクチャ環境において実行される。
【0028】
本明細書で説明されるプロセッサ及び他のものは、例えば、EBCDIC又はASCII形式と10進浮動小数点形式との間の変換などの特定の機能を実行するための命令を実行する。一例においては、EBCDIC又はASCII形式のデータはゾーン形式を有し、従って、例示的な命令は、例えば、本明細書に説明されるような、ゾーン形式から10進浮動小数点形式への変換(convert from zonedto decimal floating point)命令、並びに、10進浮動小数点形式からゾーン形式への変換(convert to zoned from decimal floating point)命令を含む。
【0029】
しかしながら、命令を説明する前に、本明細書で言及する種々のデータ形式を説明する。例えば、ゾーン形式においては、バイトの右端4ビットは、数値ビット(N)と呼ばれ、通常、10進数字(桁)を表すコードを含む。バイトの左端4ビットは、10進オペランドの右端バイトを除き、ゾーン・ビット(Z)と呼ばれ、これらのビットはゾーンおよび符号(S)のうちのどちらかとして扱うことができる。
【0030】
ゾーン形式における10進数字は、英文字及び特殊文字も含むより大きい文字セットの一部となることもある。従って、ゾーン形式は、人間が読み取れる形式での数値データの入力、編集、及び出力に適している。一実施形態において、10進演算命令は、ゾーン形式の10進数を直接操作せず、このような数は、最初に、例えば10進浮動小数点形式の1つに変換される。
【0031】
10進浮動小数点データは、短(short)形式、長(long)形式、又は拡張(extended)形式の3つのデータ形式のいずれかで表すことができる。各データ形式の内容は、符号化された情報を表す。有限数をNaN(Not-a-Number、非数)及び無限大と区別するために、特殊コードが割り当てられる。
【0032】
有限数に関しては、形式において、バイアス指数(biased exponent)が用いられる。形式ごとに、右単位表示(right-units-view、RUV)指数の場合と左単位表示(left-units-view、LUV)指数の場合とは、異なるバイアスが用いられる。バイアス指数は、符号なしの数である。バイアス指数は、combination(コンビネーション)フィールドにおいて、仮数の左端桁(LMD)とともに符号化される。仮数の残りの桁は、encoded trailing−significand(符号化された仮数末尾部)フィールドにおいて符号化される。
【0033】
これらのデータ形式の例は、以下の通りである。
DFP短形式
【表1】
DFP短形式のオペランドが浮動小数点レジスタにロードされると、そのオペランドはレジスタの左半分を占め、右半分は変更されないままである。
DFP長形式
【表2】
DFP長形式のオペランドが浮動小数点数レジスタにロードされると、そのオペランドはレジスタ全体を占める。
DFP拡張形式
【表3】
【0034】
DFP拡張形式のオペランドは、浮動小数点数レジスタ対を占める。左端64ビットは、より低い番号のレジスタ対全体を占め、右端64ビットはより高い番号のレジスタ全体を占める。
符号ビットは各形式のビット0にあり、例えば、正の場合はゼロであり、負の場合は1である。
【0035】
有限数に関しては、combinationフィールドは、バイアス指数、及び仮数の左端桁を含む。NaN及び無限大に関しては、このフィールドは、それらを識別するためのコードを含む。
【0036】
形式のビット1−5が00000−11101の範囲内にある場合、オペランドは有限数である。バイアス指数の2つの左端ビット及び仮数の左端桁が、形式のビット1−5において符号化される。ビット6からcombinationフィールドの終わりまでは、バイアス指数の残りを含む。
【0037】
形式のフィールドのビット1−5が11110である場合、オペランドは無限大である。形式のビット5の右までのcombinationフィールドの全ビットが、無限大のための予約済みフィールド(reserved field)を構成する。予約済みフィールドの非ゼロ値は、ソースの無限大では受け入れられ、予約済みフィールドは、結果の無限大においてゼロに設定される。
【0038】
形式のビット1−5が11111である場合、オペランドはNaNであり、SNaNビットと呼ばれるビット6が、QNaNとSNaNをさらに区別する。ビット6がゼロである場合、これはQNaNであり、他の場合には、SNaNである。形式のビット6の右までのcombinationフィールドの全ビットが、NaNのための予約済みフィールドを構成する。予約済みフィールドの非ゼロ値は、ソースのNaNでは受け入れられ、予約済みフィールドは、結果のNaNにおいて、ゼロに設定される。
【0039】
以下の表は、combinationフィールドの符号化及びレイアウトを要約する。表においては、有限数のバイアス指数は、2つの部分、即ち(1)形式のビット1−5から得られる2つの左端ビット、及び(2)combinationフィールドの残りのビットの連結である。例えば、DFP短形式のcombinationフィールドが2進数10101010101を含む場合、これは、2進数10010101のバイアス指数、及び5の仮数の左端桁を表す。
【表4】
【表5】
【0040】
encoded Trailing Significandフィールドは、仮数末尾部(trailing significand)における桁を表す符号化された10進数を含む。仮数末尾部は、左端桁を除く、仮数の全桁を含む。無限大に関しては、仮数末尾部の非ゼロ桁は、ソースの無限大では受け入れられ、他に断りのない限り、結果の無限大における仮数末尾部の全桁は、ゼロに設定される。NaNについては、このフィールドは、ペイロードと呼ばれる診断情報を含む。
【0041】
encoded trailing significandフィールドは、デクレット(declet)と呼ばれる10ビット・ブロックの倍数である。デクレットの数は、形式によって決まる。各デクレットは、10ビット値で3つの10進数字を表す。
【0042】
以下の表において、種々の形式における有限数の値が示される。
【表6】
【0043】
仮数という用語は、例えば、以下を意味するように用いられる。
1.有限数に関しては、仮数は、combinationフィールドから得られた仮数の左端桁が左に詰められた仮数末尾部の全桁を含む。
2.無限大及びNaNに関しては、仮数は、ゼロ桁で左がパディングされた仮数末尾部の全桁を含む。
【0044】
有限数に関しては、DFP有効桁は、仮数の左端の非ゼロ桁で始まり、仮数の右端桁で終わる。
【0045】
有限数に関しては、DFP有効桁の数は、形式精度から先頭のゼロの数を減算した差である。先頭のゼロの数は、左端の非ゼロ桁の左までの仮数におけるゼロの数である。
【0046】
上記に加えて、densely packed decimal(DPD)形式が存在する。3桁の10進数(000−999)の、デクレットと呼ばれる10ビット値へのマッピングの例を以下の表に示す。DPDエントリは、16進法で示される。10進数の最初の2桁が、左端の列に示され、第3桁は上の行に沿って示される。
【表7】
【0047】
10ビット・デクレットの、3桁の10進数へのマッピングの例が、以下の表に示される。10ビット・デクレット値は、どちらも16進法で表される、左列に示される6ビット指標、及び上の行に沿って示される4ビット指標に分割される。
【表8】
【0048】
本発明の1つの態様によると、ゾーン形式から10進浮動小数点形式に変換するための命令が提供される。一実施形態において、長形式のゾーン形式からの変換(long Convert from Zoned、CDZT)命令及び拡張形式のゾーン形式からの変換(extended Convert from Zoned、CXZT)命令を含む、2つのタイプのゾーン形式から10進浮動小数点形式への変換(convert from zoned to Decimal Floating Point)命令が存在し、その各々が以下に説明される。これらの命令は、データを、直接メモリ内のEBCDIC又はASCII形式からレジスタ内の10進浮動小数点形式に変換するための効率的な手段を提供する。
【0049】
例えば、
図4を参照すると、一実施形態において、各々のマシン命令が、メモリからEBCDIC又はASCII形式のデータを読み出し(ステップ300)、それを適切な10進浮動小数点形式に変換し(ステップ302)、ターゲット浮動小数点レジスタ又は浮動小数点レジスタ対に書き込む(ステップ304)。
【0050】
長形式のゾーン形式からの変換(long Convert from Zoned、CDZT)命令は、指定されたメモリ位置からオペランド・データを読み出し、それを、ゼロ指数を有する倍精度(double precision)DFPオペランドに変換して、指定されたターゲット浮動小数点レジスタに書き込む。拡張形式のゾーン形式からの変換(extended Convert from Zoned、CXZT)命令は、指定されたメモリ位置からオペランド・データを読み出し、それをゼロ指数を有する拡張精度(extended precision)DFP演算に変換して、指定されたターゲット浮動小数点レジスタ対に書き込む。ソース・メモリ位置におけるバイト数は、命令内で指定されており、CDZTについては1乃至16バイト、又は、CXZTについては1乃至34バイトとすることができる。ソース・オペランドの桁が、有効な数字コードに関して全てチェックされる。命令内の符号フィールドは、ソース・オペランドの符号ニブルが処理されることを示す。符号フィールドが設定されている場合、符号が、有効な符号コードに関してチェックされる。それが有効であると仮定すると、DFP結果の符号は、ソース・オペランドの符号ニブルが示すのと同じ符号に設定される。無効な数字又は符号コードが検出された場合、10進データ例外が認識される。
【0051】
一実施形態において、ゾーン形式からの変換(Convert from Zoned)命令の各々は、同一の形式(RSL−b形式)を有し、その一例が
図5に示される。一実施形態に示されるように、ゾーン形式からの変換(Convert from Zoned)命令の形式400は、例えば、以下のフィールドを含む。
オペコード・フィールド402a、402b:オペコード・フィールドは、命令により実施される関数を示すオペコードを与える。例として、1つの定義されたオペコードは、関数を長形式のゾーン形式からの変換(long Convert from Zoned)命令として定義し、別の予め定義されたオペコードは、それが拡張形式のゾーン形式からの変換(extended Convert from Zoned)命令であることを示す。
長さフィールド(L
2)404:長さフィールド404は、第2オペランドの長さを指定する(例えば、バイトで)。例として、長さフィールドは、拡張形式のゾーン形式への変換(extended Convert to Zoned)命令に関しては0から33までの長さコードを含み、長形式のゾーン形式からの変換(long Convert from Zoned)命令に関しては0から15までの長さコードを含む。
基底レジスタ・フィールド(B
2)406:基底レジスタ・フィールドは汎用レジスタを指定し、その内容は、変位フィールドの内容に加算されて、第2オペランドのアドレスを形成する。
変位フィールド(D
2)408:変位フィールドは、第2オペランドのアドレスを形成するために、基底レジスタ・フィールドが指定する汎用レジスタの内容に加算される内容を含む。
レジスタ・フィールド(R
1)410:レジスタ・フィールドは、その内容が第1オペランドであるレジスタを指定する。第1オペランドを含むレジスタは、第1オペランド位置と呼ばれることもある。
マスク・フィールド(M
3)412:マスク・フィールドは、例えば、符号(S)制御(例えば、ビット)を含み、これは、一例においては、M
3フィールドのビット0である。このビットがゼロである場合、第2オペランドは符号フィールドを有さず、DFP第1オペランド結果の符号ビットは0に設定される。このビットが1である場合、第2オペランドは符号付きである。つまり、右端バイトの左端4ビットは符号である。符号フィールドが正の値を示す場合、DFP第1オペランド結果の符号ビットはゼロに設定され、符号フィールドが負の値を示す場合、1に設定される。一実施形態において、M
3フィールドのビット1から3までは無視される。
【0052】
ゾーン形式からの変換(Convert from Zoned)命令の演算中、ゾーン形式の第2オペランドは、DFP形式に変換され、結果は、第1オペランド位置に置かれる。一例において、量子(quantum)が1であり、渡される値(delivered value)が量子により表される。第1オペランド位置に置かれた結果は、正規形(canonical)であるである。
【0053】
一実施形態において、第2オペランドにおいて、無効な数字又は符号コードが検出された場合、10進オペランド・データ例外が認識される。例えば、以下の、CDZTに関して、L
2フィールドが16を上回るかこれに等しい、CXZTに関して、R
1フィールドが無効な浮動小数点レジスタ対を指定する、又はL
2フィールドが34を上回るか又はこれに等しい、のいずれかが真である場合、指定例外が認識され、演算は抑制される。
【0054】
一実施形態において、ASCII形式の第2オペランドが指定される場合、M
3フィールドのビット0は0であり、そうでなければ、10進オペランド・データ例外が認識される。つまり、2進数0011の符号値は有効な符号ではない。
【0055】
ゾーン形式からの変換(Convert from Zoned)命令の実行に関する更なる詳細が、
図6を参照して説明される。一例において、この論理を実行するゾーン形式からの変換(Convert from Zoned)命令を実行するのはプロセッサである。
【0056】
最初に、ゾーン形式からの変換(Convert from Zoned)命令のオペコードが、これが拡張形式であることを示すか又は長形式であることを示すかについての判断がなされる(問い合わせ500)。つまり、実行されている命令が、長形式のゾーン形式からの変換(long Convert from Zoned)命令であるか、又は拡張形式のゾーン形式からの変換(extended Convert from Zoned)命令であるかである。オペコードが、これが長形式のゾーン形式からの変換(long Convert from Zoned)命令であることを示す場合、命令内に与えられる長さフィールド(L
2)が15を上回る長さを指定するかどうかについての更なる判断がなされる(問い合わせ502)。長さフィールドが15を上回る長さを指定する場合、それが16桁(0−15)を上回ることを示す例外が与えられる(ステップ504)。
【0057】
問い合わせ502に戻ると、長さフィールドが15を上回る長さを指定しない場合、ソースのゾーン形式の桁(zoned digits)(第2オペランドの少なくとも一部)をメモリから読み出す(ステップ506)。その後、メモリから読み出されたソースのゾーン形式の桁を10進浮動小数点形式に変換する(ステップ508)。この例において、これは、ゼロ指数を有する倍精度DFPオペランドに変換される。
【0058】
付加的に、マスク・フィールド(M
3)において指定された符号制御(S)が1に設定されるかどうかについて判断がなされる(問い合わせ510)。符号制御が1に等しくない場合、DFP数の符号を強制的に正にし(ステップ512)、ターゲット浮動小数点レジスタを、強制された符号を含む変換値で更新する(ステップ514)。
【0059】
問い合わせ510に戻ると、符号制御が1に等しい場合、(第2オペランドの)ソース符号フィールドをメモリから読み出す(ステップ516)。その後、DFP数の符号をソースの符号に設定し(ステップ518)、ターゲット浮動小数点レジスタを、変換値及び符号(例えば、DFP形式のビット0)で更新する(ステップ514)。
【0060】
問い合わせ500に戻ると、オペコードが、これが拡張形式のゾーン形式からの変換(extended Convert from Zoned)命令であることを示す場合、命令の長さフィールドが33を上回る長さを指定するかどうかについての判断がなされる(問い合わせ530)。長さフィールドが33を上回る長さを指定する場合、34桁(0−33)を上回ることを示す例外が与えられる(ステップ532)。しかしながら、長さフィールドが33を上回る長さを指定しない場合、命令のR
1フィールドが無効な浮動小数点レジスタ対を指定するかどうかについての判断がなされる(問い合わせ534)。無効な浮動小数点レジスタ対が示される場合、例外が与えられる(ステップ536)。他の場合には、ソースのゾーン形式の桁(第2オペランドの少なくとも一部)をメモリから読み出す(ステップ538)。その後、メモリから読み出されたソースのゾーン形式の桁を10進浮動小数点形式に変換する(ステップ540)。この例において、桁(第2オペランドの少なくとも一部)は、ゼロ指数を有する拡張精度データの浮動小数点数演算に変換される。
【0061】
その後、命令のマスク・フィールド内の符号(S)制御が1に設定されるかどうかについての判断がなされる(問い合わせ542)。符号制御が1に等しくない場合、データ浮動小数点数の符号を強制的に正にする(ステップ544)。しかしながら、符号制御が1に等しい場合、(第2オペランドの)ソース符号フィールドをメモリから読み出し(ステップ546)、DFP数の符号をソースの符号に設定する(ステップ548)。ステップ544又はステップ548において符号を設定した後、ターゲット浮動小数点レジスタ対を、変換した10進浮動小数点形式及び符号で更新する(ステップ550)。
【0062】
上記で参照したのは、メモリから読み出されたソースのゾーン形式の桁を10進浮動小数点形式に変換する2つのステップである。特に、ステップ508は、ソースを、ゼロ指数を有する倍精度10進浮動小数点オペランドに変換し、ステップ540は、ソースを、ゼロ指数を有する拡張精度データの浮動小数点数演算に変換する。変換に関する更なる詳細は、下記において、並びに、上記で参照した非特許文献1において説明される。
【0063】
ゾーン形式の数からDFP形式に変換するプロセスの一実施形態は、以下の通りである。ソースの桁をメモリから読み出す。必要に応じて、ソース・データの各バイトの右4ビットにある2進化10進表現(Binary Coded Decimal、BCD)の桁は、ゼロを左にパディングされ、倍精度演算に関しては合計で16のBCD桁(BCD digits)が存在し、拡張精度演算に関しては34桁が存在するようにする。次いで、これらのBCD桁をBCDからDensely Packed Decimal(DPD)に変換し、BCD左端桁を除くBCD全桁に関して、ソース・データの右で始まる3つのBCD桁ごとに10ビットのDPDグループに変換されるようにする。従って、倍精度変換に関しては5つのDPDグループが存在し、拡張精度変換に関しては11個のDPDグループが存在する。これらのDPDグループは、倍精度結果のビット14−63を構成し、且つ、拡張精度結果のビット17−127を構成する。倍精度演算に関しては、ビット6−13は、倍精度結果の指数フィールドであり、ビット1−5におけるcombo(コンボ)フィールドからの2ビットを用いて、398の値に設定される。拡張精度演算に関しては、ビット6−17は、指数フィールド・ビットであり、comboフィールドからの2ビットを用いて、6176の値に設定される。
【0064】
BCD最上位桁が「8」又は「9」である場合、ビット1及び2が「1」に設定される。ビット3及び4は指数の最上位2ビットであり、従って、「01」に設定される。ビット5は、「8」の場合は「0」に設定され、又は「9」の場合は「1」に設定される。BCD最上位桁が「0」から「7」までである場合、ビット1及び2は指数の最上位値であり、従って、「01」に設定され、ビット3−5は、BCD最上位桁の右端3ビットに設定される。
【0065】
S=1である場合、ソース・データの右端バイトの左端4ビットは符号コードである。この場合、符号コードの値が「1011」又は「1101」である場合、結果の符号ビット(ビット0)が1に設定される。
【0066】
上記に詳細に説明されたのは、従来のストレージ間10進演算量(decimal workload)を著しく改善するための手段を提供する2つの命令である。従来のストレージ間10進演算量においては、最初に、EBCDIC又はASCIIオペランドをパック10進数形式(packed decimal format)に変換し、これにより、フィールド・コードを取り除き、2つのオペランドの数値桁(numeric digits)及び符号桁(sign digits)をストレージの別の部分に入れる。次いで、パックされたオペランドは、加算、減算、乗算、又は除算のような算術演算によって操作される。これらの算術演算は、パック・プロセスのストア(store)の完了を待ってから開始しなければならず、次いで、これらの演算はその結果をメモリに格納する。結果のストアが完了すると、次に、結果は、再びターゲット形式(EBCDIC又はASCII)にアンパックされる。演算からのメモリ依存性が性能を支配する。
【0067】
本発明の1つの態様によると、新しい命令(例えば、新しい命令がイネーブルにされた、コードの再コンパイル)を使用することにより、ターゲット形式に応じて、Pack又はPKA命令がCDZT又はCXZTに置き換えられる。次いで、数学演算をそのDFPの等価なもの(例えば、AD/XTR、SD/XTR、MD/XTR、DT/XTR)に置き換えることができ、その結果、いずれのオペランドのメモリへの格納又はメモリからの読み出しも待つ必要がなくなる。これらの命令は、加算(AP)、減算(SP)、乗算(MP)又は除算(DP)と同じような時間量で動作するが、メモリのオーバーヘッドがない。UNPK又はUNPKA操作を置換し、結果が、以下で説明されるCZDT又はCZXT命令を介して直接ターゲット形式に変換された場合、第2のメモリ依存性は回避される。
【0068】
従来のストレージ間パック10進演算(decimal pack operation)は、15桁及び符号を処理することができ、COBOLアプリケーションのようなアプリケーションに典型的に見出される31桁(及び符号)のオペランドの各々を処理するのに3つの重複するパック操作を必要とする。オペランドを重複がより少ない小オペランド(mini-operand)にしなければならないことは、コンパイラ及びコンパイルされたコードの複雑性を付加し、小オペランド間の繰り上がり/繰り下がりの処理といった所定のタスクを行うために実行される付加的な命令を必要とし、性能に影響を与える。CXZTは34桁及び符号をDFPオペランドに変換することができるので、コンパイラは、通例の31桁及び符号オペランド(例えば、COBOLオペランド)を単一のエンティティとして扱うことができ、コンパイルされたコードは簡略化され、性能は改善される。
【0069】
本明細書で説明されるように、CDZT及びCXZT命令は、データをメモリ内のEBCDIC又はASCII形式から直接レジスタ内のDFP形式に変換するための効率的な手段を提供する。これらのCDZT及びCXZT命令により、単一のステップで、データをEBCDIC又はASCII形式からDFP形式に変換することが可能になる。これまで、このプロセスは、データをパック10進数形式に変換するために、Pack又はPKA操作を用いることを必要とした。次いで、データを汎用レジスタ(GPR)にロードしなければならないが、現在、命令セット・アーキテクチャにおいて長さが制御されたロードは存在しないので、これには、多くの場合、ワード(word)、ハーフワード(half-word)及びバイト・ロード操作の混合を必要とする。次いで、他の命令、CDSTR又はCXSTRを用いて、GPR/GPR対内のパック10進数形式のデータをターゲットDFP形式に変換することができる。本発明の1つの態様によると、PACK/PKA及びCDSTR/CXSTRは、1つの命令、CDZT又はCXZTに置き換えられる。
【0070】
ゾーン形式から10進浮動小数点形式への変換(Convert from Zoned to decimal floating point)命令に加えて、本発明の更に別の態様によると、10進浮動小数点形式からゾーン形式への変換(Convert to Zoned from decimal floating point)命令が提供される。これらの命令は、データを、浮動小数点レジスタ又は浮動小数点数レジスタ対内に保持される10進浮動小数点形式からEBCDIC又はASCII形式のデータに変換し、それを直接メモリに格納する効率的な手段を提供する。
【0071】
例えば、
図7を参照すると、一例において、ソース・レジスタ又はソース・レジスタ対内のDFPオペランドをEBCDIC又はASCII形式のデータに変換する(ステップ600)。次いで、変換された結果をターゲット・メモリ位置に格納する(ステップ602)。これらの命令により、単一のステップで、データをDFP形式から直接EBCDIC又はASCII形式に変換することが可能になる。
【0072】
これらの命令の例は、長形式のゾーン形式への変換(long Convert to Zoned、CZDT)命令及び拡張形式のゾーン形式への変換(extended Convert to Zoned、CZXT)命令を含む。長形式のゾーン形式への変換(long Convert to Zoned命令、CZDT)命令は、指定されたFPRレジスタから倍精度DFPオペランド・データを読み出し、仮数(mantissa)をゾーン形式に変換し、それをターゲット・メモリ位置に書き込む。同様に、拡張形式のゾーン形式への変換(extended Convert to Zoned、CZXT)命令は、指定されたFPRレジスタ対から拡張精度DFPオペランド・データを読み出し、仮数をゾーン形式に変換し、それをターゲット・メモリ位置に書き込む。指定されたメモリ位置の長さがソース・オペランドの左端の非ゼロ桁の全てに収めるのに十分でない場合、10進オーバーフロー・マスクがイネーブルであれば、10進オーバーフロー例外が認識される。全桁が指定されたメモリ位置に収まらない場合には、特別な条件コード(例えば、3)が設定される。符号フィールドが設定される場合、DFPオペランドの符号をメモリ内の結果の符号ニブルにコピーする。用いられる正の符号の符号化は、以下で説明される命令テキストのPフィールドにより制御され、ゼロ・オペランドの結果は、同じく以下に説明される命令テキストのZフィールドにより、条件付きで強制的に正にすることができる。この種の符号操作は、一般的にコンパイラ・コードにおいて必要とされ、この関数を直接命令内に含めることは、性能の節約をもたらし、コンパイラ・コードを簡略化する。
【0073】
ゾーン形式への変換(Convert to Zoned)命令の形式(RSL−b)の一実施形態が、
図8を参照して説明される。一例において、ゾーン形式への変換(Convert to Zoned)命令の形式700は、以下のフィールドを含む。
オペコード・フィールド702a、702b:オペコード・フィールドは、命令により実施される関数を示すオペコードを与える。例として、1つの定義されたオペコードは、関数を長形式のゾーン形式への変換(long Convert to Zoned)命令として指定し、別の予め定義されたオペコードは、それが拡張形式のゾーン形式への変換(extended Convert to Zoned)命令であることを示す。
長さフィールド(L
2)704:長さフィールド704は、第2オペランドの長さを指定する(例えば、バイトで)。例として、長さフィールドは、拡張形式のゾーン形式への変換(extended Convert to Zoned)命令に関しては0から33までの長さコードを含み、長形式のゾーン形式への変換(long Convert to Zoned)命令に関しては0から15までの長さコードを含む。さらに、変換される第1オペランドの仮数の右端桁の数は、L
2によって指定される。
基底レジスタ・フィールド(B
2)706:基底レジスタ・フィールドは汎用レジスタを指定し、その内容は、変位フィールドの内容に加算されて、第2オペランドのアドレスを形成する。
変位フィールド(D
2)708:変位フィールドは、第2オペランドのアドレスを形成するために、基底レジスタ・フィールドにより指定される汎用レジスタの内容に加算される内容を含む。
レジスタ・フィールド(R
1)710:レジスタ・フィールドは、その内容が、第1オペランドであるレジスタを指定する。
マスク・フィールド(M
3)712:マスク・フィールドは、例えば、以下のものを含む。
符号制御(S):M
3フィールドのビット0は符号制御である。Sがゼロである場合、第2オペランドは符号フィールドを有さない。Sが1である場合、第2オペランドは符号フィールドを有する。つまり、右端バイトの左端4ビット位置が符号である。
ゾーン制御(Z):M
3フィールドのビット1はゾーン制御である。Zがゼロである場合、第2オペランドの各ゾーン・フィールドは、2進数1111として格納される。Zが1である場合、第2オペランドの各ゾーン・フィールドは、2進数0011として格納される。
正符号コード(plus-sign-code)制御(P):M
3フィールドのビット2は正符号コード制御である。Pがゼロである場合、正符号は、2進数1100として符号化される。Pが1である場合、正符号は、2進数1111として符号化される。Sビットがゼロである場合、Pビットは無視され、ゼロであると仮定される。
正・ゼロ強制(force-plus-zero)制御(F):M
3フィールドのビット3は正・ゼロ強制制御である。Fがゼロである場合、アクションはとられない。Fが1であり、第2オペランド位置に置かれた結果の絶対値がゼロである場合、結果の符号は、Pビットにより指定された符号コードを有する正の値を示すように設定される。Sビットがゼロである場合、Fビットは無視され、ゼロであると仮定される。
【0074】
演算において、DFPの第1オペランドの仮数の右端桁の指定数、及び第1オペランドの符号ビットが、ゾーン形式に変換され、結果が第2オペランド位置に置かれる。1の量子を有する第1オペランドの右単位表示が暗黙指定される。combinationフィールド内の指数は無視され、バイアスする前に、あたかもゼロの値を有するように扱われる。
【0075】
変換される第1オペランドの仮数の右端桁の数は、L
2によって指定される。CZXTに関しては、第2オペランドのバイト長さは、L
2の長さコード0−33に対応する1−34であり、1−34桁を意味する。CZDTに関しては、第2オペランドのバイト長さは、L
2の長さコード0−15までに対応する1−16であり、1−16桁を意味する。
【0076】
一実施形態において、演算は、IEEE例外を引き起こすことなく、無限大、QNaN、又はSNaNを含む、あらゆる第1オペランドに対して行われる。第1オペランドが無限大又はNaNである場合、ゼロ桁が、仮数の左端桁であると考えられ、仮数の右端桁の指定された数及び符号ビットがゾーン形式に変換され、結果が第2オペランド位置に置かれ、実行は特定の条件コード(例えば、3)で終了する。
【0077】
第2オペランド・フィールドが短すぎるために結果の左端の非ゼロ桁が失われる場合、オーバーフロー桁を無視することによって結果が取得され、指定された条件コード(例えば3の)が設定され、且つ、10進オーバーフロー・マスク・ビットが1である場合、10進オーバーフローのプログラム割り込みが発生する。オペランドの長さのみがオーバーフローを示すのではなく、演算中に非ゼロ桁は失われる。
【0078】
例えば、以下のいずれかが真である場合、指定例外が認識され、演算は抑制される。つまり、CZDTの場合、L
2フィールドが16を上回るか又はこれに等しい(これは17又はそれより多い桁を意味する)。CZXTの場合、R
1フィールドが無効な浮動小数点数レジスタ対を指定するか、又は、L
2フィールドが34を上回るか又はこれに等しい(これは、35又はそれより多い桁を意味する)。
【0079】
結果の条件コードの例は、
0 ソースはゼロである
1 ソースはゼロを下回る
2 ソースはゼロを上回る
3 無限大、QNan、SNaN、部分結果、
を含む。
【0080】
一実施形態において、Sビットが1である場合、ASCII形式のゾーン10進数オペランドは、符号付きとして格納することができる。これは、ASCII表現が通常符号なし且つ正であり、右端のゾーンを符号として使用するという概念がないので、プログラム次第である。さらに、特定の条件コード(例えば、0)での完了は、第1オペランドの絶対値がゼロであることを示す。
【0081】
M
3制御ビットに対する、第1オペランドのDFP符号及び結果の第2オペランドの絶対値がゼロであることの間の関係が、一例として与えられる以下の表に示される。
【表9】
【0082】
ゾーン形式への変換(Convert to Zoned)命令の論理に関する更なる詳細が、
図9を参照して説明される。一例において、この論理は、ゾーン形式への変換(Convert to Zoned)マシン命令を実行するプロセッサにより実施される。
【0083】
図9を参照すると、最初に、命令のオペコードにより示されるように、これが拡張形式のゾーン形式への変換(extended Convert to Zoned)命令であるか、又は長形式のゾーン形式への変換(long Convert to Zoned)命令であるかについての判断がなされる(問い合わせ800)。命令のオペコードにより示されるように、これが長形式のゾーン形式への変換(long Convert to Zoned)命令である場合、L
2フィールドが15を上回る長さを指定するかどうかについての更なる判断がなされる(問い合わせ802)。L
2フィールドが15を上回る長さを指定する場合、16桁(0−15)より多くがあるため、例外が与えられる(ステップ804)。
【0084】
問い合わせ802に戻ると、長さフィールドが15を上回る長さを指定しない場合、DFPオペランドが、変換命令内で(R
1を用いて)指定される浮動小数点数レジスタから読み出される(ステップ806)。次いで、読み出されたDFPオペランドのソースDFP桁をBCD桁に変換する(ステップ808)。
【0085】
変換の後、非ゼロ桁がL
2により指定された長さに収まるかどうかについての判断がなされる(問い合わせ810)。非ゼロ桁が収まらない場合、オーバーヘッド例外が示される(ステップ812)。他の場合には、マスク・フィールドのZビットが1に等しいかどうかについての更なる判断がなされる(問い合わせ814)。Zが1に等しい場合、ゾーン・フィールド及び符号コードが「0011」に設定される(ステップ816)。他の場合には、ゾーン・フィールド及び符号コードが「1111」に設定される(ステップ818)。
【0086】
ゾーン・フィールド及び符号コードを設定した後、マスク・フィールドのSビットが1に設定されるかどうかについての更なる判断がなされる(問い合わせ820)。Sビットが1に設定されない場合、BCD桁、符号フィールド、及びフィールド・コードを適切な形式でメモリに格納する(ステップ822)。ゾーン形式の一例は、以下の通りである。
【表10】
【0087】
この例においては、バイトの右端4ビットは数値ビット(N)と呼ばれ、通常、10進数字(桁)を表すコードを含む。バイトの左端4ビットは、10進数オペランドの右端バイトを除き、ゾーン・ビット(Z)と呼ばれ、これらのビットは、ゾーンおよび符号(S)のいずれかとして扱うことができる。
【0088】
問い合わせ820に戻ると、Sビットが1に等しい場合、マスク内のZビットが1に設定されるかどうかについての更なる判断がなされる(問い合わせ824)。Zが1に等しい場合、結果がゼロに等しいかどうかについての判断がなされる(ステップ826)。結果がゼロに等しい場合、結果の符号が正に設定される(ステップ828)。結果がゼロに等しくなるように設定されないか、又はZが1に等しくない場合、結果の符号がDFPの符号に設定される(ステップ830)。
【0089】
結果の符号が設定された後、結果の符号が正であるかどうかについての判断がなされる(問い合わせ832)。結果の符号が正でない場合、処理はステップ822を続行し、BCD桁、符号フィールド、及びフィールド・コードを適切な形式でメモリに格納する。しかしながら、結果の符号が正である場合(問い合わせ832)、マスク・フィールドのPビットが1に設定されるかどうかについての更なる判断がなされる(問い合わせ834)。Pビットが1に設定される場合、符号が1111に等しくなるように設定され、他の場合には、符号が1100に等しくなるように設定される(ステップ838)。符号を設定した後、処理はステップ822を続行する。
【0090】
問い合わせ800に戻ると、これが拡張形式のゾーン形式への変換(extended Convert to Zoned)命令である場合、長さフィールドが33を上回る長さを指定するかどうかについての判断がなされる(問い合わせ850)。長さフィールドが33を上回る長さを指定する場合、例外が指定され、34桁を上回ることを示す(ステップ852)。他の場合には、レジスタ・フィールド(R
1)が無効な浮動小数点数レジスタ対を指定するかどうかについての判断がなされる(問い合わせ854)。無効なものを指定しない場合、処理はステップ806を続行する。他の場合には、例外が与えられる(ステップ856)。これで、ゾーン形式への変換(Convert to Zoned)命令の実施形態の説明が終了する。
【0091】
上記に参照したのは、ソースDFP桁をBCD桁に変換するためのステップである。変換に関する更なる詳細は、下記、並びに、上記で参照された非特許文献1において説明される。以下の説明はまた、DFP形式からゾーン形式に変換するプロセスに関する詳細を提供する。
【0092】
一例において、倍精度形式の場合は、ゾーン形式に変換される仮数データの最上位桁は、ソース・データのビット1−5であるcomboフィールド内に収容される。ビット0は符号ビットであり、ビット0が「1」であることにより負の値が示される。ビット6−13は、exponent continuation(指数継続)フィールドであり、この演算により無視される。ビット14−63は、Encoded Trainling Significandフィールドであり、DPD(densely packed decimal)形式で符号化される10進数データの残りの15桁を収容する。
【0093】
拡張精度形式の場合は、一例において、ゾーン形式に変換される仮数データの最上位桁は、ソース・データのビット1−5であるcomboフィールド内に収容される。ビット0は符号ビットであり、ビット0が「1」であることにより負の値が示される。ビット6−17は、exponent continuationフィールドであり、この演算により無視される。ビット18−127は、Encoded Trainling Significandフィールドであり、DPD形式で符号化される10進数データの残りの33桁を収容する。
【0094】
倍精度形式及び拡張精度形式の両方に関して、DPD符号化された桁である仮数の末尾部の桁は、DPD形式からBCD(二進化10進数)形式に変換され、comboフィールド(ビット1−5)からの桁が、これらの桁の先頭に付加される。DPDからBCDへの変換には少数のゲートしか必要でなく、こうしたゲートを通じて、10ビットのDPDデータのブロックを12ビットのBCDデータのブロックに復元し、その結果、各BCDブロックは、3つの4ビットのBCD数を含むようになる。先頭のゼロに関して文字列数をチェックし、次いで、命令のL
2フィールドと比較して、オーバーフロー状況が発生するかどうかについて判断し、発生した場合、適切な最上位桁(これらは、ひとたびデータがゾーン10進数形式に拡張されると、指定されたメモリ長さ(L
2により指定される)内に収まらない桁である)をゼロに設定する。
【0095】
次に、4ビット・ゾーン・フィールドが各BCD桁の左に挿入され、その結果、今や各バイト(8ビット)が4ビット・ゾーン・フィールドと、それに続く4ビットのBCD桁とを含むようになる。各ゾーン・フィールドは、テキスト内のZビットが0であるか又は1であるかに応じて、「0011」又は「1111」である。次に、DFPソース・オペランドからの符号ビットを用いて、命令においてS=1である場合に符号コードを判断する。BCD桁が全て0であり且つF=1である場合、符号が無視され、正符号コードが生成される。他の場合には、生成される符号コードは、ビット0からのDFPソース・オペランドの符号であり、負の符号は「1101」として符号化され、正の符号は、P=0である場合には「1100」として、又は、P=1である場合には「1111」として符号化される。次いで、この符号コードは、BCD最下位桁の左までフィールド・コードを置き換える。(1つの実施形態において、符号はフィールド・コードと並行して処理され、フィールド・コードの代わりに、BCD最下位桁の左に挿入される。)次いで、この結果がメモリに書き込まれる。
【0096】
上記に詳細に説明されたのは、ソース浮動小数点レジスタ又はレジスタ対における10進浮動小数点オペランドをEBCDIC又はASCII形式のデータに変換し、それをターゲット・メモリ位置に格納する、2つのマシン命令CZDT及びCZXTである。これらの命令は、従来のストレージ間10進数演算量を著しく改善するための手段を提供する。従来のストレージ間アンパック10進演算(decimal unpack operation)は、15桁及び符号を処理することができ、COBOLアプリケーションのようなアプリケーションにおいて典型的に見出される31桁(及び符号)の結果を処理するために3つの重複するアンパック操作を必要とする。所定のタスクを実施するために付加的な命令の実行を必要とするため、結果をより重複がより少ない小結果(mini-result)にしなければならないことは、コンパイラの複雑性を付加し、性能に影響を与える。CZXTは、単一の命令において、最大34桁及び1つの符号コードを含むDFPオペランドを変換し、これをメモリに格納することができるので、コンパイラは、通例の31桁及び符号の結果(例えば、COBOL結果)を単一のエンティティとして扱い、コンパイルされたコードを簡略化し、性能を改善することができる。
【0097】
以前より、このプロセスは、GPRにおいて、データをDFP形式からパック10進数形式に変換するために、CSDTR又はCSXTRを使用することを必要とした。次いで、データをGPRから外のメモリに格納しなければならないが、現時点では命令セット・アーキテクチャ内に長さが制御されたストアは存在しないので、これにはワード、ハーフワード、及びバイト・ストア操作の混合が必要となることが多い。最後に、メモリ内のデータを再びEBCDIC又はASCII形式に変換するために、unpack又はUNPKA操作が必要とされる。これらの新しい命令により、単一のステップで、データをDFP形式から、直接EBCDIC又はASCII形式に変換することが可能になる。CZDT又はCZXT命令は、CSDTR/CSXTR命令及びUNPK/UNPKA命令の両方に取って代わる。
【0098】
当業者により認識されるように、本発明の1つ又は複数の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の1つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコード等を含む)、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の1つ又は複数の態様は、コンピュータ可読プログラム・コードが組み込まれた、1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【0099】
1つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例(非網羅的なリスト)として、以下のもの、即ち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能なプログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
【0100】
ここで
図10を参照すると、一例において、コンピュータ・プログラム製品900が、例えば、本発明の1つ又は複数の態様を提供し、容易にするように、コンピュータ可読プログラム・コード手段又は論理904をその上に格納するための1つ又は複数の非一時的(non-transitory)コンピュータ可読ストレージ媒体902を含む。
【0101】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、RF等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
【0102】
本発明の1つ又は複数の態様に関する演算を実行するためのコンピュータ・プログラム・コードは、Java(登録商標)、SmallTalk、C++等のようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある(例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて)。
【0103】
本発明の1つ又は複数の態様は、本発明の実施形態による方法、装置(システム)及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、本明細書で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ以上のブロックにおいて指定された機能/動作を実装するための手段を作り出すようにすることができる。
【0104】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実装する命令を含む製品を製造するようにすることもできる。
【0105】
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロックにおいて指定された機能/動作を実行するためのプロセスを提供するようにもすることもできる。
【0106】
図面内のフローチャート及びブロック図は、本発明の1つ又は複数の態様の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された2つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び/又はフローチャート図の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【0107】
上記に加えて、本発明の1つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、1つ又は複数の顧客に対して本発明の1つ又は複数の態様を実施するコンピュータ・コード及び/又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び/又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、1つ又は複数の第三者に対する広告コンテンツの販売から支払いを受けることができる。
【0108】
本発明の一態様において、本発明の1つ又は複数の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、本発明の1つ又は複数の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0109】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
【0110】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は本発明の1つ又は複数の態様を含む。コードは、コンピュータ・システムと協働して、本発明の1つ又は複数の態様を実施することができる。
【0111】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、本発明の1つ又は複数の態様を組み込み、用いることが可能である。さらに、特定のフィールド及び/又はビットが説明されるが、他のものを用いることもできる。さらに、フロー図の幾つかのステップを並行して又は異なる順序で実行することができる。本発明の範囲から逸脱することなく、多くの変更及び追加をなすことができる。
【0112】
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に結合された少なくとも2つのプロセッサを含む、プログラム・コードを格納及び/又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
【0113】
入力/出力即ちI/O装置(キーボード、ディスプレイ、ポインティング装置、DASD、テープ、CD、DVD、サムドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない)は、直接的に、又は介在するI/Oコントローラを通して、システムに結合することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又はリモート・プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット(登録商標)カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
【0114】
本発明の1つ又は複数の態様を組み込むことができるコンピューティング環境の他の例が以下に説明される。
【0115】
図11を参照すると、本発明の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が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード(ファームウェア)において、又はその両方の組み合わせによって実行することができる。
【0116】
既述のように、コンピュータ・システムは、ローカル(又は主)ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び1つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、(入力装置から)データ及びプログラムの両方は、主ストレージにロードされる。
【0117】
主ストレージは、キャッシュと呼ばれることもある、1つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、CPU又はI/Oプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
【0118】
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン(又は短縮してライン)と呼ばれる、整数境界(integral boundary)上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、PREFETCH DATA及びPREFETCH DATA RELATIVE LONG命令を提供することができる。
【0119】
ストレージは、長い水平方向のビットの文字列と考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、8ビット単位で分割される。8ビットの単位は1バイトと呼ばれ、全ての情報の形式の基本的な構成要素(building block)である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の0で始まり、左から右への順序で進む。アドレスは、符号なしの2進整数であり、24ビット、31ビット、又は64ビットである。
【0120】
情報は、ストレージと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バイトの倍数若しくは他の倍数)。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイトの記憶位置の内容のみが置き換えられる。
【0121】
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある2バイト、4バイト、8バイト、及び16バイトのフィールドには、特別な名称が与えられる。ハーフワードは、2バイト境界上にある2個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワードは、4バイト境界上にある4個の連続したバイトのグループである。ダブルワード(doubleword)は、8バイト境界上にある8個の連続したバイトのグループである。クワッドワード(quadword)は、16バイト境界上にある16個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの2進表現は、それぞれ、右端の1個、2個、3個、又は4個のビットが0になる。命令は、2バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ(boundary alignment)要件をもたない。
【0122】
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、ストアが、後にフェッチされる命令を変更するかどうかに関係なく、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、著しい遅延が生じることがある。
【0123】
一実施形態において、本発明は、ソフトウェア(ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の1つ又は複数の態様と整合性がある)により実施することができる。
図11を参照すると、本発明の1つ又は複数の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム5000のプロセッサ5001により、CD−ROMドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス5011からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ5002からユーザに分散させても、又は、こうした他のシステムのユーザが使用するために、ネットワーク5010上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0124】
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システム及び1つ又は複数のアプリケーション・プログラムを含む。プログラム・コードは、通常、ストレージ媒体デバイス5011から相対的により高速のコンピュータ・ストレージ5002にページングされ、そこでプロセッサ5001による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0125】
図12は、本発明の1つ又は複数の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。
図12のシステム5020は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム5021を含む。ベース・コンピュータ・システム5021は、1つ又は複数のプロセッサ5026と、周知の技術に従ってプロセッサ5026とシステム5021の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ5026を、メモリ5025及び、ハードドライブ(例えば、磁気媒体、CD、DVD、及びフラッシュメモリのいずれかを含む)又はテープドライブを含むことができる、長期ストレージ5027に接続する。システム5021はまた、バスを介して、マイクロプロセッサ5026を、キーボード5024、マウス5023、プリンタ/スキャナ5030、及び/又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、1つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、LCDスクリーン又はモニタなどのディスプレイ装置5022をマイクロプロセッサ5026にも接続する。
【0126】
システム5021は、ネットワーク5029と通信する5028ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット(登録商標)又はモデムである。或いは、システム5021は、CDPD(セルラー・デジタル・パケット・データ)カードのような無線インターフェースを用いて通信することもできる。システム5021は、ローカル・エリア・ネットワーク(LAN)若しくは広域ネットワーク(WAN)、又はシステム5021内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント/サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【0127】
図13は、本発明の1つ又は複数の態様を実施することができるデータ処理ネットワーク5040を示す。データ処理ネットワーク5040は、各々が複数の個々のワークステーション5041、5042、5043、5044を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、1つ又は複数のLANを含ませることができ、そこで、LANは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【0128】
さらに
図13を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ(クライアント・サーバ5046)、又はアプリケーション・サーバ(データ・リポジトリにアクセスすることができ、且つ、ワークステーション5045から直接アクセスすることもできる遠隔サーバ5048)のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ5046は、各々の個々のネットワークへの入口点として働く。ゲートウェイは、1つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ5046は、通信リンクによって別のネットワーク(例えば、インターネット5047)に結合できることが好ましい。ゲートウェイ5046はまた、通信リンクを用いて、1つ又は複数のワークステーション5041、5042、5043、5044に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なIBM eServer(商標)System z(登録商標)サーバを用いて実装することができる。
【0129】
図12及び
図13を同時に参照すると、本発明の1つ又は複数の態様を具体化することができるソフトウェア・プログラム・コードには、一般的に、CD−ROMドライブ又はハードドライブといった長期ストレージ媒体5027から、システム5020のプロセッサ5026によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はCD−ROMといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ5050、5051に分散させても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の1つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【0130】
或いは、プログラム・コードをメモリ5025内で具体化し、プロセッサ・バスを用いてプロセッサ5026によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システム及び1つ又は複数のアプリケーション・プログラム5032を含む。プログラム・コードは、通常、ストレージ媒体5027から高速メモリ5025にページングされ、そこでプロセッサ5026による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び/又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体(これらに限定されるものではないが、電子メモリ・モジュール(RAM)、フラッシュメモリ、コンパクトディスク(CD)、DVD、磁気テープなどを含む)に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【0131】
プロセッサが最も容易に利用できるキャッシュ(通常、プロセッサの他のキャッシュよりも高速で小さい)は、最下位(L1又はレベル1)のキャッシュであり、メインストア(主メモリ)は、最上位レベルのキャッシュ(3つのレベルがある場合にはL3)である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ(I−キャッシュ)と、データ・オペランドを保持するデータ・キャッシュ(D−キャッシュ)とに分割されることが多い。
【0132】
図14を参照すると、プロセッサ5026についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、1つ又は複数のレベルのキャッシュ5053が用いられる。キャッシュ5053は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、64バイト、128バイト、又は256バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス(メモリ及びキャッシュ内のラインのコピーの同期)は、多くの場合、当技術分野において周知の種々の「スヌープ(snoop)」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ5025は、キャッシュと呼ばれることが多い。4つのレベルのキャッシュ5053を有するプロセッサ・システムにおいて、主ストレージ5025は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ(DASD、テープ等)の一部だけを保持するので、レベル5(L5)のキャッシュと呼ばれることがある。主ストレージ5025は、オペレーティング・システムによって主ストレージ5025との間でページングされるデータのページを「キャッシュに入れる」。
【0133】
プログラム・カウンタ(命令カウンタ)5061は、実行される現行の命令のアドレスを常時監視している。z/Architecture(登録商標)プロセッサのプログラム・カウンタは64ビットであり、従来のアドレッシング制限をサポートするために、31ビット又は24ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのPSW(プログラム状況ワード)内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である(プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ)。プログラムのPSWは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの(PSW内の)プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。RISC(Reduced Instruction Set Computing、縮小命令セット・コンピューティング)命令は、典型的には固定長であり、CISC(Complex Instruction Set Computing、複合命令セット・コンピューティング)命令は、典型的には可変長である。IBM z/Architecture(登録商標)の命令は、2バイト、4バイト、又は6バイトの長さを有するCISC命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立(Branch taken)操作により、プログラム・カウンタ5061が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報(条件コードのような)と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ5061にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【0134】
典型的には、プロセッサ5026の代わりに命令をフェッチするために、命令フェッチ・ユニット5055が用いられる。フェッチ・ユニットは、「次の順次命令(next sequential instruction)」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む16バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【0135】
次いで、フェッチされた命令が、プロセッサ5026によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット5056に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット5057、5058、5060に転送する。実行ユニット5057は、典型的には、命令フェッチ・ユニット5055からデコードされた算術命令についての情報を受け取り、命令のオペコードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ5025、アーキテクチャ化レジスタ5059、又は実行される命令の即値フィールドのいずれかから、実行ユニット5057に与えられる。実行の結果は、格納された場合には、メモリ5025、レジスタ5059、又は他のマシン・ハードウェア(制御レジスタ、PSWレジスタなどのような)内に格納される。
【0136】
プロセッサ5026は、典型的には、命令の機能を実行するための1つ又は複数の実行ユニット5057、5058、5060を有する。
図15を参照すると、実行ユニット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が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【0137】
例えばADD命令は、算術及び論理機能を有する実行ユニット5057で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ADD命令は、命令のレジスタ・フィールドによって特定された2つのレジスタ5059内に見出されるオペランドに対して、実行ユニット5057により実行することができる。
【0138】
実行ユニット5057は、2つのオペランドに対して算術加算を実行し、結果を第3オペランドに格納し、ここで第3オペランドは、第3のレジスタであっても又は2つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット(ALU)5066を用いることが好ましい。スカラー演算のために設計されたALU5066もあり、浮動小数点のために設計されたものALU5066もある。データは、アーキテクチャに応じて、ビッグエンディアン(Big Endian)(最下位のバイトが最も高いバイト・アドレスである)、又はリトルエンディアン(Little Endian)(最下位のバイトが最も低いバイト・アドレスである)とすることができる。IBM z/Architecture(登録商標)は、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、1の補数、又は2の補数とすることができる。2の補数における負の値又は正の値は、ALU内で加法しか必要としないため、ALUが減算能力を設計する必要がないという点で、2の補数は有利である。数値は、通常、省略表現で記述され、12ビット・フィールドは、4,096バイトブロックのアドレスを定め、通常、例えば4Kバイト(キロバイト)ブロックのように記述される。
【0139】
図16を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット5058に送られ、この分岐ユニット5058は、多くの場合、分岐履歴テーブル5082のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット5058は、複数の入力レジスタ回路5075、5076、5077と、出力レジスタ回路5080とを有するALU5074を用いることができる。分岐ユニット5058は、例えば、汎用レジスタ5059、デコード・ディスパッチ・ユニット5056、又は他の回路5073と通信することができる。
【0140】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるI/O割り込み信号、或いは、(マルチスレッド環境における)複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタの内容とを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード(マイクロコード、ピココード、又はライセンス内部コード(LIC))単独で又はその組み合わせで実施することができる。
【0141】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ(例えば、浮動小数点レジスタ)のいずれかを明示的に指し示す1つ又は複数のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別される暗黙的に指定されたレジスタ(implied register)を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。z/Architecture(登録商標)の長変位ファシリティ(long displacement facility)により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、索引レジスタ、及び即値フィールド(変位フィールド)を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置(location)は、典型的には、特に断りのない限り、主メモリ(主ストレージ)内の記憶位置を意味する。
【0142】
図17を参照すると、プロセッサは、ロード/ストア・ユニット5060を用いて、ストレージにアクセスする。ロード/ストア・ユニット5060は、メモリ5053内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ5059又は別のメモリ5053の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ5053内のターゲット・オペランドのアドレスを取得し、レジスタ5059又は別のメモリ5053の記憶位置から取得したデータをメモリ5053内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード/ストア・ユニット5060は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持することになる。ロード/ストア・ユニット5060は、汎用レジスタ5059、デコード/ディスパッチ・ユニット5056、キャッシュ/メモリ・インターフェース5053、又は他の要素5083と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ALU5085、及び制御論理5090を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード/ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【0143】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス(effective address)」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、1つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換(DAT)技術の1つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。z/Architecture(登録商標)では、領域第1テーブル、領域第2テーブル、領域第3テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ(TLB)を用いることにより改善されることが多い。DATが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後続する仮想アドレスの使用では、低速の順次変換テーブル・アクセスではなく、高速のTLBのエントリを用いることが可能になる。TLBの内容は、LRU(Least Recently Used)を含む種々の置換アルゴリズムによって管理することができる。
【0144】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、I/O、キャッシュ、TLB、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか1つの状態にあるものとしてマーク付けすることができる。
【0145】
I/Oユニット5054(
図14)は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。I/Oユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。IBM(登録商標)によるSystem z(登録商標)のようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのI/Oユニットである。
【0146】
さらに、他のタイプのコンピューティング環境が、本発明の1つ又は複数の態様から利益を得ることができる。一例として、本明細書で述べられように、環境は、特定のアーキテクチャ(例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む)又はそのサブセットをエミュレートする(例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で)エミュレータ(例えば、ソフトウェア又は他のエミュレーション機構)を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの1つ又は複数のエミュレーション機能nにより、本発明の1つ又は複数の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
【0147】
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の1つ又は複数のサブルーチンとして実装される。
【0148】
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「C」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、z/Architecture(登録商標)のIBM(登録商標)サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のIBM(登録商標)メインフレーム・サーバにおいて、及び、IBM(登録商標)の他のマシン(例えば、Power Systemsサーバ及びSystem x(登録商標)サーバ)上で、エミュレートすることができる。これらの命令は、IBM(登録商標)、Intel(登録商標)、AMD(商標)などによって製造されたハードウェアを用いて種々のマシン上でLinux(登録商標)を実行しているマシンにおいて実行することができる。Z/Architecture(登録商標)下でそのハードウェア上で実行することに加えて、Linux(登録商標)を用いること、並びに、一般に実行がエミュレーション・モードにある、Hercules、又はFSI(Fundamental Software,Inc)によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【0149】
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に1つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その1つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻(Time of Day、TOD)クロック、及びI/Oサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
【0150】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ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、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能な対象のマシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
【0151】
図18において、ホスト・アーキテクチャのホスト・コンピュータ・システム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を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【0152】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「1つの(a)」、「1つの(an)」及び「その(the)」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む(comprise)」及び/又は「含んでいる(comprising)」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントの存在を指示するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【0153】
下記の特許請求の範囲におけるすべての機能付き手段(ミーンズ・プラス・ファンクション)又は機能付き工程(ステップ・プラス・ファンクション)の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲及び精神から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。