(57)【要約】【課題】  中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・プログラム製品、方法及びシステムを提供する。【解決手段】  ＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータをメモリから読み出し、それを適切な１０進浮動小数点形式に変換して、ターゲット浮動小数点数レジスタ又は浮動小数点数レジスタ対に書き込む、本明細書で、長形式のゾーン形式からの変換（ＣＤＺＴ）命令及び拡張形式のゾーン形式からの変換（ＣＸＺＴ）命令と呼ばれるマシン命令が提供される。さらに、ソース浮動小数点レジスタ又は浮動小数点レジスタ対における１０進浮動小数点（ＤＦＰ）オペランドをＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータに変換し、それをターゲット・メモリ位置に格納する、本明細書で、長形式のゾーン形式への変換（ＣＺＤＴ）命令及び拡張形式のゾーン形式への変換（ＣＺＸＴ）命令と呼ばれるマシン命令が提供される。【選択図】      図６
2015507799.tif 000002
【特許請求の範囲】
【請求項１】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、
処理回路により読み出し可能であり、且つ、方法を実施するための、前記処理回路により実行される命令を格納するコンピュータ可読ストレージ媒体を含み、前記方法は、
プロセッサにより、コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得することと、
前記マシン命令を実行することと、
を含み、前記実行することは、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換することと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くことと、
を含む、コンピュータ・プログラム製品。
【請求項２】
前記オペコード・フィールドは、第１の値である場合、長形式の１０進浮動小数点形式のソース及びゾーン形式の結果を示す、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記オペコードは、第２の値である場合、拡張形式の１０進浮動小数点形式のソース及びゾーン形式の結果を示す、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記マスク・フィールドは、前記第２オペランドが符号フィールドを有するかどうかを示すのに用いられる符号制御を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記マスク・フィールドは、前記第２オペランドのゾーン・フィールドについての値を判断するのに用いられるゾーン制御を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
前記マスク・フィールドは、正符号を符号化するのに用いられる正符号コード制御を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記マスク・フィールドは、前記第２オペランド内に置かれる結果の符号を判断するのに用いられる正・ゼロ強制制御を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
前記マスク・フィールドは、ゾーン・フィールド及び符号フィールドを含み、前記方法は、前記ゾーン・フィールド及び前記符号フィールドの少なくとも１つを用いて、前記第２オペランド内に格納される前記結果の前記符号フィールド及びフィールド・コードの少なくとも１つについての値を判断することをさらに含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁の数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記実行することは、少なくとも１つの浮動小数点レジスタから前記第１オペランドの前記少なくとも一部分を読み出すことを含み、前記結果を含むための前記第２オペランドはメモリ内に存在する、請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサと、
を含み、前記コンピュータ・システムは方法を実行するように構成され、前記方法は、
コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得することと、
前記マシン命令を実行することと、
を含み、前記実行することは、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換することと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くことと、
を含む、コンピュータ・システム。
【請求項１２】
前記マスク・フィールドは、前記第２オペランドが符号フィールドを有するかどうかを示すのに用いられる符号制御を含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記マスク・フィールドは、前記第２オペランドのゾーン・フィールドについての値を判断するのに用いられるゾーン制御を含む、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記マスク・フィールドは、正符号を符号化するのに用いられる正符号コード制御を含む、請求項１１に記載のコンピュータ・システム。
【請求項１５】
前記マスク・フィールドは、前記第２オペランド内に置かれる結果の符号を判断するのに用いられる正・ゼロ強制制御を含む、請求項１１に記載のコンピュータ・システム。
【請求項１６】
前記マスク・フィールドは、ゾーン・フィールド及び符号フィールドを含み、前記方法は、前記ゾーン・フィールド及び前記符号フィールドの少なくとも１つを用いて、前記第２オペランド内に格納される前記結果の前記符号フィールド及びフィールド・コードの少なくとも１つについての値を判断することをさらに含む、請求項１１に記載のコンピュータ・システム。
【請求項１７】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁の数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１１に記載のコンピュータ・システム。
【請求項１８】
中央演算処理ユニットにおいてマシン命令を実行するための方法であって、
プロセッサにより、コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得することと、
前記マシン命令を実行することと、
を含み、前記実行することは、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換することと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くことと、
を含む方法。
【請求項１９】
前記マスク・フィールドは、前記第２オペランドが符号フィールドを有するかどうかを示すのに用いられる符号制御と、前記第２オペランドのゾーン・フィールドについての値を判断するのに用いられるゾーン制御と、正符号を符号化するのに用いられる正符号コード制御と、前記第２オペランド内に置かれる結果の符号を判断するのに用いられる正・ゼロ強制制御とを含む、請求項１８に記載の方法。
【請求項２０】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁の数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の態様は、一般に、コンピューティング環境内での処理に関し、特定的には、データを１つの形式から別の形式に変換することに関する。
【背景技術】
【０００２】
例えば、拡張２進化１０進コード（Extended Binary Coded Decimal Interchange、ＥＢＣＤＩＣ）、Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ（ＡＳＣＩＩ）及び１０進浮動小数点（decimal floating point）を含む種々の異なる形式で、データを、内部のコンピュータ・ストレージ又は外部ストレージ内に格納することができる。
【０００３】
異なるコンピュータ・アーキテクチャが異なるデータ形式をサポートし、特定の形式での演算の実施が望まれることがある。そうした場合、１つの形式のデータを所望の形式に変換する必要があることがある。
【０００４】
さらに、従来より、ＥＢＣＤＩＣ又はＡＳＣＩＩ形式でデータベース内に格納された１０進数値データを処理するために用いられる演算は、直接ストレージ上で動作する。ストレージ間１０進演算（storage-to-storage decimal operation）と呼ばれるこれらの演算及びこれらの演算の性能は、メモリ・インターフェースの待ち時間により制限される。先の演算からの結果に依存する各演算は、開始可能となる前に、結果がストレージに書き出されるまで待たなければならない。メモリ待ち時間とプロセッサ速度との間のギャップが増大し続けるにつれて、これらの演算の相対的性能は低下し続ける。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，５５１，０１３号明細書
【特許文献２】米国特許第６，００９，２６１号明細書
【特許文献３】米国特許第５，５７４，８７３号明細書
【特許文献４】米国特許第６，３０８，２５５号明細書
【特許文献５】米国特許第６，４６３，５８２号明細書
【特許文献６】米国特許第５，７９０，８２５号明細書
【０００６】
【非特許文献１】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」、ＩＢＭ（登録商標）出版番号ＳＡ２２−７８３２−０８、第９版、２０１０年８月
【非特許文献２】「Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  １」、Ｏｒｄｅｒ  Ｎｏ．２５３６６５−０２２ＵＳ、２００６年１１月
【非特許文献３】「Ｉｎｔｅｌ（登録商標）６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２Ａ」、Ｏｒｄｅｒ  Ｎｏ．２５３６６６−０２２ＵＳ、２００６年１１月
【非特許文献４】「Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  １」、Ｄｏｃ．Ｎｏ．２４５３１７−００５、２００６年１月
【非特許文献５】「Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２」、Ｄｏｃ．Ｎｏ．２４５３１８−００５、２００６年１月
【非特許文献６】「Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ３」、Ｄｏｃ．Ｎｏ．２４５３１９−００５、２００６年１月
【発明の概要】
【発明が解決しようとする課題】
【０００７】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・プログラム製品、方法及びシステムを提供する。
【課題を解決するための手段】
【０００８】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・プログラム製品を提供することにより、従来技術の欠陥が克服され、利点がもたらされる。このコンピュータ・プログラム製品は、処理回路により読み出し可能であり、且つ、方法を実施するための、処理回路により実行される命令を格納するコンピュータ可読ストレージ媒体を含む。この方法は、例えば、プロセッサにより、コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、１０進浮動小数点形式からゾーン形式への変換（ｃｏｎｖｅｒｔ  ｔｏ  ｚｏｎｅｄ  ｆｒｏｍ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドとを含む、実行のためのマシン命令を取得することと、マシン命令を実行することとを含み、この実行することは、１０進浮動小数点形式の第１オペランドの少なくとも一部分をゾーン形式に変換することと、変換の結果を第２オペランドのアドレスによって指定された位置に置くこととを含む。
【０００９】
本発明の１つ又は複数の態様に関連する方法及びシステムもまた、本明細書で説明され、特許請求される。さらに、本発明の１つ又は複数の態様に関連するサービスもまた、本明細書で説明され、特許請求され得る。
【００１０】
本発明の１つ又は複数の態様の技術を通して、付加的な特徴及び利点が実現される。本発明の他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部であると見なされる。
【００１１】
本発明の１つ又は複数の態様が、本明細書の最後にある特許請求の範囲において、例として具体的に示され、明確に特許請求されている。本発明の前述及び他の目的、特徴、並びに利点は、添付図面と関連して用いられる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１２】
【図１】本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態を示す。
【図２】本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の実施形態を示す。
【図３】本発明の１つの態様による、図２のメモリの更なる詳細を示す。
【図４】本発明の１つの態様による、ゾーン形式（zoned format）から１０進浮動小数点形式に変換するための論理の概要を示す。
【図５】本発明の１つの態様に従って用いられる、ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令の形式の一実施形態を示す。
【図６】本発明の１つの態様による、ゾーン形式から１０進浮動小数点形式に変換するための論理の更なる詳細を示す。
【図７】本発明の１つの態様による、１０進浮動小数点形式からゾーン形式に変換するための論理の概要を示す。
【図８】本発明の１つの態様に従って用いられる、１０進浮動小数点形式からゾーン形式への変換（Ｃｏｎｖｅｒ  ｔｏ  Ｚｏｎｅｄ  ｆｒｏｍ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）命令の一実施形態を示す。
【図９】本発明の１つの態様による、１０進浮動小数点形式からゾーン形式に変換するための論理の更なる詳細を示す。
【図１０】本発明の１つ又は複数の態様を組み込むコンピュータ・プログラム製品の一実施形態を示す。
【図１１】本発明の１つ又は複数の態様を組み込み、用いるためのホスト・コンピュータ・システムの一実施形態を示す。
【図１２】本発明の１つ又は複数の態様を組み込み、用いるためのコンピュータ・システムの更に別の例を示す。
【図１３】本発明の１つ又は複数の態様を組み込み、用いるためのコンピュータ・ネットワークを含むコンピュータ・システムの別の例を示す。
【図１４】本発明の１つ又は複数の態様を組み込み、用いるためのコンピュータ・システムの種々の要素の一実施形態を示す。
【図１５】本発明の１つ又は複数の態様を組み込み、用いるための、図１４のコンピュータ・システムの実行ユニットの一実施形態を示す。
【図１６】本発明の１つ又は複数の態様を組み込み、用いるための、図１４のコンピュータ・システムの分岐ユニットの一実施形態を示す。
【図１７】本発明の１つ又は複数の態様を組み込み、用いるための、図１４のコンピュータ・システムのロード／ストア・ユニットの一実施形態を示す。
【図１８】本発明の１つ又は複数の態様を組み込み、用いるためのエミュレートされたホスト・コンピュータ・システムの一実施形態を示す。
【発明を実施するための形態】
【００１３】
異なるコンピュータ・アーキテクチャが異なるデータ形式をサポートし、サポートされるデータ形式が、時間の経過と共に変化することがある。例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるマシンは、従来より、ＥＢＣＤＩＣ形式及びＡＳＣＩＩ形式をサポートしてきた。より最近のマシンは、ＩＥＥＥ標準（ＩＥＥＥ７５４−２００８）が存在する１０進浮動小数点（decimal floating point、ＤＦＰ）形式及び演算をサポートし始めた。しかしながら、ＤＦＰ演算を用いるためには、ＥＢＣＤＩＣ及びＡＳＣＩＩ形式のデータをＤＦＰ形式に変換しなければならない。
【００１４】
本発明の１つの態様によると、ＥＢＣＤＩＣ又はＡＳＣＩＩ形式と１０進浮動小数点形式との間で変換するための効率的な機構が提供される。一例において、この機構は、他の技術のメモリ・オーバーヘッドなしに、変換を実施する。
【００１５】
本発明の一態様において、メモリからＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータ（これはゾーン形式を有する。）を読み出し、それを適切な１０進浮動小数点形式に変換して、ターゲット浮動小数点レジスタ又は浮動小数点レジスタ対に書き込む、マシン命令が提供される。これらの命令は、本明細書では、長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＤＺＴ）命令及び拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＸＺＴ）命令と呼ばれる。
【００１６】
本発明の更に別の態様において、ソース浮動小数点レジスタ又は浮動小数点レジスタ対における１０進浮動小数点（ＤＦＰ）オペランドをＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータに変換し、それをターゲット・メモリ位置に格納する、マシン命令が提供される。これらの命令は、本明細書では、長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＤＴ）命令及び拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＸＴ）命令と呼ばれる。
【００１７】
本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の一実施形態が、図１を参照して説明される。コンピューティング環境１００が、例えば１つ又は複数のバス１０８及び／又は他の接続を介して互いに結合された、例えば、プロセッサ１０２（例えば中央演算処理ユニット）、メモリ１０４（例えばメイン・メモリ）、及び１つ又は複数の入力／出力（Ｉ／Ｏ）デバイス及び／又はインターフェース１０６を含む。
【００１８】
一例において、プロセッサ１０２は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーション（ＩＢＭ（登録商標））により提供されるＳｙｓｔｅｍ  ｚ（登録商標）サーバの一部であるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）プロセッサである。Ｓｙｓｔｅｍ  ｚ（登録商標）サーバは、コンピュータの論理構造及び機能操作を指定する、インターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）を実装する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）の一実施形態は、非特許文献１に記載されている。一例において、サーバは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供される、ｚ／ＯＳ（登録商標）などのオペレーティング・システムを実行する。ＩＢＭ（登録商標）、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）及びｚ／ＯＳ（登録商標）は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名であり得る。
【００１９】
本発明の１つ又は複数の態様を組み込み、用いるためのコンピューティング環境の別の実施形態が、図２を参照して説明される。この例では、コンピューティング環境２００は、例えば１つ又は複数のバス２０８及び／又は他の接続を介して互いに結合された、例えば、ネイティブ（native）中央演算処理ユニット２０２、メモリ２０４、及び１つ又は複数の入力／出力デバイス及び／又はインターフェース２０６を含む。例として、コンピューティング環境２００は、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションにより提供されるＰｏｗｅｒＰＣ（登録商標）プロセッサ、ｐＳｅｒｉｅｓ（登録商標）サーバ又はｘＳｅｒｉｅｓ（登録商標）サーバ、カリフォルニア州Ｐａｌｏ  Ａｌｔｏ所在のＨｅｗｌｅｔｔ  Ｐａｃｋａｒｄ  Ｃｏ．，により提供される、Ｉｎｔｅｌ  Ｉｔａｎｉｕｍ  ＩＩ（登録商標）プロセッサ搭載のＨＰ  Ｓｕｐｅｒｄｏｍｅ、及び／又は、ＩＢＭ（登録商標）、Ｈｅｗｌｅｔｔ  Ｐａｃｋａｒｄ、Ｉｎｔｅｌ、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ、又はその他により提供されるアーキテクチャに基づいた他のマシンを含むことができる。ＰｏｗｅｒＰＣ（登録商標）、ｐＳｅｒｉｅｓ（登録商標）及びｘＳｅｒｉｅｓ（登録商標）は、米国ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。Ｉｎｔｅｌ（登録商標）及びＩｔａｎｉｕｍ  ＩＩ（登録商標）は、カリフォルニア州Ｓａｎｔａ  Ｃｌａｒａ所在のＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎの登録商標である。
【００２０】
ネイティブ中央演算処理ユニット２０２は、環境内での処理の際に用いられる、１つ又は複数の汎用レジスタ及び／又は１つ又は複数の専用レジスタのような１つ又は複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【００２１】
さらに、ネイティブ中央演算処理ユニット２０２は、メモリ２０４内に格納された命令及びコードを実行する。１つの特定の例において、中央演算処理ユニットは、メモリ２０４内に格納されたエミュレータ・コード２１２を実行する。このコードにより、１つのアーキテクチャにおいて構成された処理環境が、別のアーキテクチャをエミュレートすることが可能になる。例えば、エミュレータ・コード２１２により、ＰｏｗｅｒＰＣ（登録商標）プロセッサ、ｐＳｅｒｉｅｓ（登録商標）サーバ、ｘＳｅｒｉｅｓ（登録商標）サーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバ又は他のもののような、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）以外のアーキテクチャに基づいたマシンが、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）をエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）に基づいて開発されたソフトウェア及び命令を実行することが可能になる。
【００２２】
エミュレータ・コード２１２に関する更なる詳細が、図３を参照して説明される。ゲスト命令２５０が、ネイティブＣＰＵ２０２のもの以外のアーキテクチャにおいて実行されるように開発されたソフトウェア命令（例えば、マシン命令）を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）プロセッサ１０２上で実行されるように設計されるが、代わりに、ネイティブＣＰＵ２０２（例えば、Ｉｎｔｅｌ（登録商標）Ｉｔａｎｉｕｍ  ＩＩ（登録商標）プロセッサとすることができる）上でエミュレートされることもある。一例において、エミュレータ・コード２１２は、メモリ２０４から１つ又は複数のゲスト命令２５０を取得し、取得された命令に対してローカル・バッファリングを随意的に提供するための命令フェッチ・ユニット２５２を含む。エミュレータ・コード２１２はまた、取得されたゲスト命令のタイプを判断し、ゲスト命令を１つ又は複数の対応するネイティブ命令２５６に変換するための命令変換ユニット２５４も含む。この変換は、例えば、ゲスト命令により実行される機能を識別することと、その機能を実行するためのネイティブ命令を選択することとを含む。
【００２３】
さらに、エミュレータ２１２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つ又は複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、こうした実行の最後に、次のゲスト命令又はゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに戻させることができる。ネイティブ命令２５０の実行は、メモリ２０４からレジスタにデータをロードすること、データをレジスタから再びメモリに格納すること、又は、変換ルーチンによって求められるような何らかのタイプの算術演算又は論理演算を実施することを含むことができる。
【００２４】
各ルーチンは、例えば、メモリ内に格納され、ネイティブ中央演算処理ユニット２０２によって実行される、ソフトウェアで実装される。他の例において、１つ又は複数のルーチン又は演算は、ファームウェア、ハードウェア、ソフトウェア、又はその幾つかの組み合わせで実装される。エミュレートされるプロセッサのレジスタは、ネイティブＣＰＵレジスタ２１０を使用して、又は、メモリ２０４内の位置を使用して、エミュレートすることができる。実施形態において、ゲスト命令２５０、ネイティブ命令２５６、及びエミュレータ・コード２１２は、同一のメモリ内に存在してもよく、又は、異なるメモリ・デバイスの間で分担されてもよい。
【００２５】
本明細書で用いられるファームウェアとは、例えば、プロセッサのマイクロコード、ミリコード、及び／又はマクロコードを含む。ファームウェアは、例えば、上位レベルのマシン・コードの実装に用いられるハードウェア・レベルの命令及び／又はデータ構造体を含む。一実施形態において、ファームウェアは、例えば、典型的には、信頼できるソフトウェアを含むマイクロコードとして供給される専用コード、又は基礎をなすハードウェアに特有のマイクロコードを含み、システム・ハードウェアへのオペレーティング・システムのアクセスを制御する。
【００２６】
一例においては、取得され、変換され、実行されるゲスト命令２５０が、本明細書で説明される命令の１つである。この例においては、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）命令であるこの命令は、メモリからフェッチされ、変換され、これらを実行するネイティブ命令２５６のシーケンス（例えば、ＰｏｗｅｒＰＣ（登録商標）、ｐＳｅｒｉｅｓ（登録商標）、ｘＳｅｒｉｅｓ（登録商標）、Ｉｎｔｅｌ（登録商標）など）として表される。
【００２７】
別の実施形態において、命令の１つ又は複数が、例えば、非特許文献２、非特許文献３、非特許文献４、非特許文献５、及び／又は非特許文献６に記載されるようなアーキテクチャを含む、別のアーキテクチャ環境において実行される。
【００２８】
本明細書で説明されるプロセッサ及び他のものは、例えば、ＥＢＣＤＩＣ又はＡＳＣＩＩ形式と１０進浮動小数点形式との間の変換などの特定の機能を実行するための命令を実行する。一例においては、ＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータはゾーン形式を有し、従って、例示的な命令は、例えば、本明細書に説明されるような、ゾーン形式から１０進浮動小数点形式への変換（ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ  ｔｏ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）命令、並びに、１０進浮動小数点形式からゾーン形式への変換（ｃｏｎｖｅｒｔ  ｔｏ  ｚｏｎｅｄ  ｆｒｏｍ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）命令を含む。
【００２９】
しかしながら、命令を説明する前に、本明細書で言及する種々のデータ形式を説明する。例えば、ゾーン形式においては、バイトの右端４ビットは、数値ビット（Ｎ）と呼ばれ、通常、１０進数字（桁）を表すコードを含む。バイトの左端４ビットは、１０進オペランドの右端バイトを除き、ゾーン・ビット（Ｚ）と呼ばれ、これらのビットはゾーンおよび符号（Ｓ）のうちのどちらかとして扱うことができる。
【００３０】
ゾーン形式における１０進数字は、英文字及び特殊文字も含むより大きい文字セットの一部となることもある。従って、ゾーン形式は、人間が読み取れる形式での数値データの入力、編集、及び出力に適している。一実施形態において、１０進演算命令は、ゾーン形式の１０進数を直接操作せず、このような数は、最初に、例えば１０進浮動小数点形式の１つに変換される。
【００３１】
１０進浮動小数点データは、短（ｓｈｏｒｔ）形式、長（ｌｏｎｇ）形式、又は拡張（ｅｘｔｅｎｄｅｄ）形式の３つのデータ形式のいずれかで表すことができる。各データ形式の内容は、符号化された情報を表す。有限数をＮａＮ（Not-a-Number、非数）及び無限大と区別するために、特殊コードが割り当てられる。
【００３２】
有限数に関しては、形式において、バイアス指数（biased exponent）が用いられる。形式ごとに、右単位表示（right-units-view、ＲＵＶ）指数の場合と左単位表示（left-units-view、ＬＵＶ）指数の場合とは、異なるバイアスが用いられる。バイアス指数は、符号なしの数である。バイアス指数は、ｃｏｍｂｉｎａｔｉｏｎ（コンビネーション）フィールドにおいて、仮数の左端桁（ＬＭＤ）とともに符号化される。仮数の残りの桁は、ｅｎｃｏｄｅｄ  ｔｒａｉｌｉｎｇ−ｓｉｇｎｉｆｉｃａｎｄ（符号化された仮数末尾部）フィールドにおいて符号化される。
【００３３】
これらのデータ形式の例は、以下の通りである。
ＤＦＰ短形式
【表１】
2015507799.tif 000003
ＤＦＰ短形式のオペランドが浮動小数点レジスタにロードされると、そのオペランドはレジスタの左半分を占め、右半分は変更されないままである。
ＤＦＰ長形式
【表２】
2015507799.tif 000004
ＤＦＰ長形式のオペランドが浮動小数点数レジスタにロードされると、そのオペランドはレジスタ全体を占める。
ＤＦＰ拡張形式
【表３】
2015507799.tif 000005
【００３４】
ＤＦＰ拡張形式のオペランドは、浮動小数点数レジスタ対を占める。左端６４ビットは、より低い番号のレジスタ対全体を占め、右端６４ビットはより高い番号のレジスタ全体を占める。
符号ビットは各形式のビット０にあり、例えば、正の場合はゼロであり、負の場合は１である。
【００３５】
有限数に関しては、ｃｏｍｂｉｎａｔｉｏｎフィールドは、バイアス指数、及び仮数の左端桁を含む。ＮａＮ及び無限大に関しては、このフィールドは、それらを識別するためのコードを含む。
【００３６】
形式のビット１−５が０００００−１１１０１の範囲内にある場合、オペランドは有限数である。バイアス指数の２つの左端ビット及び仮数の左端桁が、形式のビット１−５において符号化される。ビット６からｃｏｍｂｉｎａｔｉｏｎフィールドの終わりまでは、バイアス指数の残りを含む。
【００３７】
形式のフィールドのビット１−５が１１１１０である場合、オペランドは無限大である。形式のビット５の右までのｃｏｍｂｉｎａｔｉｏｎフィールドの全ビットが、無限大のための予約済みフィールド（reserved field）を構成する。予約済みフィールドの非ゼロ値は、ソースの無限大では受け入れられ、予約済みフィールドは、結果の無限大においてゼロに設定される。
【００３８】
形式のビット１−５が１１１１１である場合、オペランドはＮａＮであり、ＳＮａＮビットと呼ばれるビット６が、ＱＮａＮとＳＮａＮをさらに区別する。ビット６がゼロである場合、これはＱＮａＮであり、他の場合には、ＳＮａＮである。形式のビット６の右までのｃｏｍｂｉｎａｔｉｏｎフィールドの全ビットが、ＮａＮのための予約済みフィールドを構成する。予約済みフィールドの非ゼロ値は、ソースのＮａＮで受け入れられ、予約済みフィールドは、結果のＮａＮにおいて、ゼロに設定される。
【００３９】
以下の表は、ｃｏｍｂｉｎａｔｉｏｎフィールドの符号化及びレイアウトを要約する。表においては、有限数のバイアス指数は、２つの部分、即ち（１）形式のビット１−５から得られる２つの左端ビット、及び（２）ｃｏｍｂｉｎａｔｉｏｎフィールドの残りのビットの連結である。例えば、ＤＦＰ短形式のｃｏｍｂｉｎａｔｉｏｎフィールドが２進数１０１０１０１０１０１を含む場合、これは、２進数１００１０１０１のバイアス指数、及び５の仮数の左端桁を表す。
【表４】
2015507799.tif 000006
【表５】
2015507799.tif 000007
【００４０】
ｅｎｃｏｄｅｄ  Ｔｒａｉｌｉｎｇ  Ｓｉｇｎｉｆｉｃａｎｄフィールドは、仮数末尾部（trailing significand）における桁を表す符号化された１０進数を含む。仮数末尾部は、左端桁を除く、仮数の全桁を含む。無限大に関しては、仮数末尾部の非ゼロ桁は、ソースの無限大では受け入れられ、他に断りのない限り、結果の無限大における仮数末尾部の全桁は、ゼロに設定される。ＮａＮについては、このフィールドは、ペイロードと呼ばれる診断情報を含む。
【００４１】
ｅｎｃｏｄｅｄ  ｔｒａｉｌｉｎｇ  ｓｉｇｎｉｆｉｃａｎｄフィールドは、デクレット（declet）と呼ばれる１０ビット・ブロックの倍数である。デクレットの数は、形式によって決まる。各デクレットは、１０ビット値で３つの１０進数字を表す。
【００４２】
以下の表において、種々の形式における有限数の値が示される。
【表６】
2015507799.tif 000008
【００４３】
仮数という用語は、例えば、以下を意味するように用いられる。
１．有限数に関しては、仮数は、ｃｏｍｂｉｎａｔｉｏｎフィールドから得られた仮数の左端桁が左に詰められた仮数末尾部の全桁を含む。
２．無限大及びＮａＮに関しては、仮数は、ゼロ桁で左がパディングされた仮数末尾部の全桁を含む。
【００４４】
有限数に関しては、ＤＦＰ有効桁は、仮数の左端の非ゼロ桁で始まり、仮数の右端桁で終わる。
【００４５】
有限数に関しては、ＤＦＰ有効桁の数は、形式精度から先頭のゼロの数を減算した差である。先頭のゼロの数は、左端の非ゼロ桁の左までの仮数におけるゼロの数である。
【００４６】
上記に加えて、ｄｅｎｓｅｌｙ  ｐａｃｋｅｄ  ｄｅｃｉｍａｌ（ＤＰＤ）形式が存在する。３桁の１０進数（０００−９９９）の、デクレットと呼ばれる１０ビット値へのマッピングの例を以下の表に示す。ＤＰＤエントリは、１６進法で示される。１０進数の最初の２桁が、左端の列に示され、第３桁は上の行に沿って示される。
【表７】
2015507799.tif 000009
【００４７】
１０ビット・デクレットの、３桁の１０進数へのマッピングの例が、以下の表に示される。１０ビット・デクレット値は、どちらも１６進法で表される、左列に示される６ビット指標、及び上の行に沿って示される４ビット指標に分割される。
【表８】
2015507799.tif 000010
【００４８】
本発明の１つの態様によると、ゾーン形式から１０進浮動小数点形式に変換するための命令が提供される。一実施形態において、長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＤＺＴ）命令及び拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＸＺＴ）命令を含む、２つのタイプのゾーン形式から１０進浮動小数点形式への変換（ｃｏｎｖｅｒｔ  ｆｒｏｍ  ｚｏｎｅｄ  ｔｏ  Ｄｅｃｉｍａｌ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ）命令が存在し、その各々が以下に説明される。これらの命令は、データを、直接メモリ内のＥＢＣＤＩＣ又はＡＳＣＩＩ形式からレジスタ内の１０進浮動小数点形式に変換するための効率的な手段を提供する。
【００４９】
例えば、図４を参照すると、一実施形態において、各々のマシン命令が、メモリからＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータを読み出し（ステップ３００）、それを適切な１０進浮動小数点形式に変換し（ステップ３０２）、ターゲット浮動小数点レジスタ又は浮動小数点レジスタ対に書き込む（ステップ３０４）。
【００５０】
長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＤＺＴ）命令は、指定されたメモリ位置からオペランド・データを読み出し、それを、ゼロ指数を有する倍精度（double precision）ＤＦＰオペランドに変換して、指定されたターゲット浮動小数点レジスタに書き込む。拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ、ＣＸＺＴ）命令は、指定されたメモリ位置からオペランド・データを読み出し、それをゼロ指数を有する拡張精度（extended precision）ＤＦＰ演算に変換して、指定されたターゲット浮動小数点レジスタ対に書き込む。ソース・メモリ位置におけるバイト数は、命令内で指定されており、ＣＤＺＴについては１乃至１６バイト、又は、ＣＸＺＴについては１乃至３４バイトとすることができる。ソース・オペランドの桁が、有効な数字コードに関して全てチェックされる。命令内の符号フィールドは、ソース・オペランドの符号ニブルが処理されることを示す。符号フィールドが設定されている場合、符号が、有効な符号コードに関してチェックされる。それが有効であると仮定すると、ＤＦＰ結果の符号は、ソース・オペランドの符号ニブルが示すのと同じ符号に設定される。無効な数字又は符号コードが検出された場合、１０進データ例外が認識される。
【００５１】
一実施形態において、ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令の各々は、同一の形式（ＲＳＬ−ｂ形式）を有し、その一例が図５に示される。一実施形態に示されるように、ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令の形式４００は、例えば、以下のフィールドを含む。
オペコード・フィールド４０２ａ、４０２ｂ：オペコード・フィールドは、命令により実施される関数を示すオペコードを与える。例として、１つの定義されたオペコードは、関数を長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令として定義し、別の予め定義されたオペコードは、それが拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令であることを示す。
長さフィールド（Ｌ２）４０４：長さフィールド４０４は、第２オペランドの長さを指定する（例えば、バイトで）。例として、長さフィールドは、拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令に関しては０から３３までの長さコードを含み、長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令に関しては０から１５までの長さコードを含む。
基底レジスタ・フィールド（Ｂ２）４０６：基底レジスタ・フィールドは汎用レジスタを指定し、その内容は、変位フィールドの内容に加算されて、第２オペランドのアドレスを形成する。
変位フィールド（Ｄ２）４０８：変位フィールドは、第２オペランドのアドレスを形成するために、基底レジスタ・フィールドが指定する汎用レジスタの内容に加算される内容を含む。
レジスタ・フィールド（Ｒ１）４１０：レジスタ・フィールドは、その内容が第１オペランドであるレジスタを指定する。第１オペランドを含むレジスタは、第１オペランド位置と呼ばれることもある。
マスク・フィールド（Ｍ３）４１２：マスク・フィールドは、例えば、符号（Ｓ）制御（例えば、ビット）を含み、これは、一例においては、Ｍ３フィールドのビット０である。このビットがゼロである場合、第２オペランドは符号フィールドを有さず、ＤＦＰ第１オペランド結果の符号ビットは０に設定される。このビットが１である場合、第２オペランドは符号付きである。つまり、右端バイトの左端４ビットは符号である。符号フィールドが正の値を示す場合、ＤＦＰ第１オペランド結果の符号ビットはゼロに設定され、符号フィールドが負の値を示す場合、１に設定される。一実施形態において、Ｍ３フィールドのビット１から３までは無視される。
【００５２】
ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令の演算中、ゾーン形式の第２オペランドは、ＤＦＰ形式に変換され、結果は、第１オペランド位置に置かれる。一例において、量子（quantum）が１であり、渡される値（delivered value）が量子により表される。第１オペランド位置に置かれた結果は、正規形（canonical）であるである。
【００５３】
一実施形態において、第２オペランドにおいて、無効な数字又は符号コードが検出された場合、１０進オペランド・データ例外が認識される。例えば、以下の、ＣＤＺＴに関して、Ｌ２フィールドが１６を上回るかこれに等しい、ＣＸＺＴに関して、Ｒ１フィールドが無効な浮動小数点レジスタ対を指定する、又はＬ２フィールドが３４を上回るか又はこれに等しい、のいずれかが真である場合、指定例外が認識され、演算は抑制される。
【００５４】
一実施形態において、ＡＳＣＩＩ形式の第２オペランドが指定される場合、Ｍ３フィールドのビット０は０であり、そうでなければ、１０進オペランド・データ例外が認識される。つまり、２進数００１１の符号値は有効な符号ではない。
【００５５】
ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令の実行に関する更なる詳細が、図６を参照して説明される。一例において、この論理を実行するゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令を実行するのはプロセッサである。
【００５６】
最初に、ゾーン形式からの変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令のオペコードが、これが拡張形式であることを示すか又は長形式であることを示すかについての判断がなされる（問い合わせ５００）。つまり、実行されている命令が、長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令であるか、又は拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令であるかである。オペコードが、これが長形式のゾーン形式からの変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令であることを示す場合、命令内に与えられる長さフィールド（Ｌ２）が１５を上回る長さを指定するかどうかについての更なる判断がなされる（問い合わせ５０２）。長さフィールドが１５を上回る長さを指定する場合、それが１６桁（０−１５）を上回ることを示す例外が与えられる（ステップ５０４）。
【００５７】
問い合わせ５０２に戻ると、長さフィールドが１５を上回る長さを指定しない場合、ソースのゾーン形式の桁（source zoned digits）（第２オペランドの少なくとも一部）をメモリから読み出す（ステップ５０６）。その後、メモリから読み出されたソースのゾーン形式の桁を１０進浮動小数点形式に変換する（ステップ５０８）。この例において、これは、ゼロ指数を有する倍精度ＤＦＰオペランドに変換される。
【００５８】
付加的に、マスク・フィールド（Ｍ３）において指定された符号制御（Ｓ）が１に設定されるかどうかについて判断がなされる（問い合わせ５１０）。符号制御が１に等しくない場合、ＤＦＰ数の符号を強制的に正にし（ステップ５１２）、ターゲット浮動小数点レジスタを、強制された符号を含む変換値で更新する（ステップ５１４）。
【００５９】
問い合わせ５１０に戻ると、符号制御が１に等しい場合、（第２オペランドの）ソース符号フィールドをメモリから読み出す（ステップ５１６）。その後、ＤＦＰ数の符号をソースの符号に設定し（ステップ５１８）、ターゲット浮動小数点レジスタを、変換値及び符号（例えば、ＤＦＰ形式のビット０）で更新する（ステップ５１４）。
【００６０】
問い合わせ５００に戻ると、オペコードが、これが拡張形式のゾーン形式からの変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ）命令であることを示す場合、命令の長さフィールドが３３を上回る長さを指定するかどうかについての判断がなされる（問い合わせ５３０）。長さフィールドが３３を上回る長さを指定する場合、３４桁（０−３３）を上回ることを示す例外が与えられる（ステップ５３２）。しかしながら、長さフィールドが３３を上回る長さを指定しない場合、命令のＲ１フィールドが無効な浮動小数点レジスタ対を指定するかどうかについての判断がなされる（問い合わせ５３４）。無効な浮動小数点レジスタ対が示される場合、例外が与えられる（ステップ５３６）。他の場合には、ソースのゾーン形式の桁（第２オペランドの少なくとも一部）をメモリから読み出す（ステップ５３８）。その後、メモリから読み出されたソースのゾーン形式の桁を１０進浮動小数点形式に変換する（ステップ５４０）。この例において、桁（第２オペランドの少なくとも一部）は、ゼロ指数を有する拡張精度データの浮動小数点数演算に変換される。
【００６１】
その後、命令のマスク・フィールド内の符号（Ｓ）制御が１に設定されるかどうかについての判断がなされる（問い合わせ５４２）。符号制御が１に等しくない場合、データ浮動小数点数の符号を強制的に正にする（ステップ５４４）。しかしながら、符号制御が１に等しい場合、（第２オペランドの）ソース符号フィールドをメモリから読み出し（ステップ５４６）、ＤＦＰ数の符号をソースの符号に設定する（ステップ５４８）。ステップ５４４又はステップ５４８において符号を設定した後、ターゲット浮動小数点レジスタ対を、変換した１０進浮動小数点形式及び符号で更新する（ステップ５５０）。
【００６２】
上記で参照したのは、メモリから読み出されたソースのゾーン形式の桁を１０進浮動小数点形式に変換する２つのステップである。特に、ステップ５０８は、ソースを、ゼロ指数を有する倍精度１０進浮動小数点オペランドに変換し、ステップ５４０は、ソースを、ゼロ指数を有する拡張精度データの浮動小数点数演算に変換する。変換に関する更なる詳細は、下記において、並びに、上記で参照した非特許文献１において説明される。
【００６３】
ゾーン形式の数からＤＦＰ形式に変換するプロセスの一実施形態は、以下の通りである。ソースの桁をメモリから読み出す。必要に応じて、ソース・データの各バイトの右４ビットにある２進化１０進表現（Binary Coded Decimal、ＢＣＤ）の桁は、ゼロを左にパディングされ、倍精度演算に関しては合計で１６のＢＣＤ桁（BCD digits）が存在し、拡張精度演算に関しては３４桁が存在するようにする。次いで、これらのＢＣＤ桁をＢＣＤからＤｅｎｓｅｌｙ  Ｐａｃｋｅｄ  Ｄｅｃｉｍａｌ（ＤＰＤ）に変換し、ＢＣＤ左端桁を除くＢＣＤ全桁に関して、ソース・データの右から始まる３つのＢＣＤ桁ごとに１０ビットのＤＰＤグループに変換されるようにする。従って、倍精度変換に関しては５つのＤＰＤグループが存在し、拡張精度変換に関しては１１個のＤＰＤグループが存在する。これらのＤＰＤグループは、倍精度結果のビット１４−６３を構成し、且つ、拡張精度結果のビット１７−１２７を構成する。倍精度演算に関しては、ビット６−１３は、倍精度結果の指数フィールドであり、ビット１−５におけるｃｏｍｂｏ（コンボ）フィールドからの２ビットを用いて、３９８の値に設定される。拡張精度演算に関しては、ビット６−１７は、指数フィールド・ビットであり、ｃｏｍｂｏフィールドからの２ビットを用いて、６１７６の値に設定される。
【００６４】
ＢＣＤ最上位桁が「８」又は「９」である場合、ビット１及び２が「１」に設定される。ビット３及び４は指数の最上位２ビットであり、従って、「０１」に設定される。ビット５は、「８」の場合は「０」に設定され、又は「９」の場合は「１」に設定される。ＢＣＤ最上位桁が「０」から「７」までである場合、ビット１及び２は指数の最上位値であり、従って、「０１」に設定され、ビット３−５は、ＢＣＤ最上位桁の右端３ビットに設定される。
【００６５】
Ｓ＝１である場合、ソース・データの右端バイトの左端４ビットは符号コードである。この場合、符号コードの値が「１０１１」又は「１１０１」である場合、結果の符号ビット（ビット０）が１に設定される。
【００６６】
上記に詳細に説明されたのは、従来のストレージ間１０進演算量（decimal workload）を著しく改善するための手段を提供する２つの命令である。従来のストレージ間１０進演算量においては、最初に、ＥＢＣＤＩＣ又はＡＳＣＩＩオペランドをパック１０進数形式（packed decimal format）に変換し、これにより、フィールド・コードを取り除き、２つのオペランドの数値桁（numeric digits）及び符号桁（sign digits）をストレージの別の部分に入れる。次いで、パックされたオペランドは、加算、減算、乗算、又は除算のような算術演算によって操作される。これらの算術演算は、パック・プロセスのストア（store）の完了を待ってから開始しなければならず、次いで、これらの演算はその結果をメモリに格納する。結果のストアが完了すると、次に、結果は、再びターゲット形式（ＥＢＣＤＩＣ又はＡＳＣＩＩ）にアンパックされる。演算からのメモリ依存性が性能を支配する。
【００６７】
本発明の１つの態様によると、新しい命令（例えば、新しい命令がイネーブルにされた、コードの再コンパイル）を使用することにより、ターゲット形式に応じて、Ｐａｃｋ又はＰＫＡ命令がＣＤＺＴ又はＣＸＺＴに置き換えられる。次いで、数学演算をそのＤＦＰの等価なもの（例えば、ＡＤ／ＸＴＲ、ＳＤ／ＸＴＲ、ＭＤ／ＸＴＲ、ＤＴ／ＸＴＲ）に置き換えることができ、その結果、いずれのオペランドのメモリへの格納又はメモリからの読み出しも待つ必要がなくなる。これらの命令は、加算（ＡＰ）、減算（ＳＰ）、乗算（ＭＰ）又は除算（ＤＰ）と同じような時間量で動作するが、メモリのオーバーヘッドがない。ＵＮＰＫ又はＵＮＰＫＡ操作を置換し、結果が、以下で説明されるＣＺＤＴ又はＣＺＸＴ命令を介して直接ターゲット形式に変換された場合、第２のメモリ依存性は回避される。
【００６８】
従来のストレージ間パック１０進演算（decimal pack operation）は、１５桁及び符号を処理することができ、ＣＯＢＯＬアプリケーションのようなアプリケーションに典型的に見出される３１桁（及び符号）のオペランドの各々を処理するのに３つの重複するパック操作を必要とする。オペランドを重複がより少ない小オペランド（mini-operand）にしなければならないことは、コンパイラ及びコンパイルされたコードの複雑性を付加し、小オペランド間の繰り上がり／繰り下がりの処理といった所定のタスクを行うために実行される付加的な命令を必要とし、性能に影響を与える。ＣＸＺＴは３４桁及び符号をＤＦＰオペランドに変換することができるので、コンパイラは、通例の３１桁及び符号オペランド（例えば、ＣＯＢＯＬオペランド）を単一のエンティティとして扱うことができ、コンパイルされたコードは簡略化され、性能は改善される。
【００６９】
本明細書で説明されるように、ＣＤＺＴ及びＣＸＺＴ命令は、データをメモリ内のＥＢＣＤＩＣ又はＡＳＣＩＩ形式から直接レジスタ内のＤＦＰ形式に変換するための効率的な手段を提供する。これらのＣＤＺＴ及びＣＸＺＴ命令により、単一のステップで、データをＥＢＣＤＩＣ又はＡＳＣＩＩ形式からＤＦＰ形式に変換することが可能になる。これまで、このプロセスは、データをパック１０進数形式に変換するために、Ｐａｃｋ又はＰＫＡ操作を用いることを必要とした。次いで、データを汎用レジスタ（ＧＰＲ）にロードしなければならないが、現在、命令セット・アーキテクチャにおいて長さが制御されたロードは存在しないので、これには、多くの場合、ワード（word）、ハーフワード（half-word）及びバイト・ロード操作の混合を必要とする。次いで、他の命令、ＣＤＳＴＲ又はＣＸＳＴＲを用いて、ＧＰＲ／ＧＰＲ対内のパック１０進数形式のデータをターゲットＤＦＰ形式に変換することができる。本発明の１つの態様によると、ＰＡＣＫ／ＰＫＡ及びＣＤＳＴＲ／ＣＸＳＴＲは、１つの命令、ＣＤＺＴ又はＣＸＺＴに置き換えられる。
【００７０】
ゾーン形式から１０進浮動小数点形式への変換（Ｃｏｎｖｅｒｔ  ｆｒｏｍ  Ｚｏｎｅｄ  ｔｏ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）命令に加えて、本発明の更に別の態様によると、１０進浮動小数点形式からゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ  ｆｒｏｍ  ｄｅｃｉｍａｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）命令が提供される。これらの命令は、データを、浮動小数点レジスタ又は浮動小数点数レジスタ対内に保持される１０進浮動小数点形式からＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータに変換し、それを直接メモリに格納する効率的な手段を提供する。
【００７１】
例えば、図７を参照すると、一例において、ソース・レジスタ又はソース・レジスタ対内のＤＦＰオペランドをＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータに変換する（ステップ６００）。次いで、変換された結果をターゲット・メモリ位置に格納する（ステップ６０２）。これらの命令により、単一のステップで、データをＤＦＰ形式から直接ＥＢＣＤＩＣ又はＡＳＣＩＩ形式に変換することが可能になる。
【００７２】
これらの命令の例は、長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＤＴ）命令及び拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＸＴ）命令を含む。長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＤＴ）命令は、指定されたＦＰＲレジスタから倍精度ＤＦＰオペランド・データを読み出し、仮数（mantissa）をゾーン形式に変換し、それをターゲット・メモリ位置に書き込む。同様に、拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ、ＣＺＸＴ）命令は、指定されたＦＰＲレジスタ対から拡張精度ＤＦＰオペランド・データを読み出し、仮数をゾーン形式に変換し、それをターゲット・メモリ位置に書き込む。指定されたメモリ位置の長さがソース・オペランドの左端の非ゼロ桁の全てに収めるのに十分でない場合、１０進オーバーフロー・マスクがイネーブルであれば、１０進オーバーフロー例外が認識される。全桁が指定されたメモリ位置に収まらない場合には、特別な条件コード（例えば、３）が設定される。符号フィールドが設定される場合、ＤＦＰオペランドの符号をメモリ内の結果の符号ニブルにコピーする。用いられる正の符号の符号化は、以下で説明される命令テキストのＰフィールドにより制御され、ゼロ・オペランドの結果は、同じく以下に説明される命令テキストのＺフィールドにより、条件付きで強制的に正にすることができる。この種の符号操作は、一般的にコンパイラ・コードにおいて必要とされ、この関数を直接命令内に含めることは、性能の節約をもたらし、コンパイラ・コードを簡略化する。
【００７３】
ゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令の形式（ＲＳＬ−ｂ）の一実施形態が、図８を参照して説明される。一例において、ゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令の形式７００は、以下のフィールドを含む。
オペコード・フィールド７０２ａ、７０２ｂ：オペコード・フィールドは、命令により実施される関数を示すオペコードを与える。例として、１つの定義されたオペコードは、関数を長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令として指定し、別の予め定義されたオペコードは、それが拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令であることを示す。
長さフィールド（Ｌ２）７０４：長さフィールド７０４は、第２オペランドの長さを指定する（例えば、バイトで）。例として、長さフィールドは、拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令に関しては０から３３までの長さコードを含み、長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令に関しては０から１５までの長さコードを含む。さらに、変換される第１オペランドの仮数の右端桁の数は、Ｌ２によって指定される。
基底レジスタ・フィールド（Ｂ２）７０６：基底レジスタ・フィールドは汎用レジスタを指定し、その内容は、変位フィールドの内容に加算されて、第２オペランドのアドレスを形成する。
変位フィールド（Ｄ２）７０８：変位フィールドは、第２オペランドのアドレスを形成するために、基底レジスタ・フィールドにより指定される汎用レジスタの内容に加算される内容を含む。
レジスタ・フィールド（Ｒ１）７１０：レジスタ・フィールドは、その内容が、第１オペランドであるレジスタを指定する。
マスク・フィールド（Ｍ３）７１２：マスク・フィールドは、例えば、以下のものを含む。
符号制御（Ｓ）：Ｍ３フィールドのビット０は符号制御である。Ｓがゼロである場合、第２オペランドは符号フィールドを有さない。Ｓが１である場合、第２オペランドは符号フィールドを有する。つまり、右端バイトの左端４ビット位置が符号である。
ゾーン制御（Ｚ）：Ｍ３フィールドのビット１はゾーン制御である。Ｚがゼロである場合、第２オペランドの各ゾーン・フィールドは、２進数１１１１として格納される。Ｚが１である場合、第２オペランドの各ゾーン・フィールドは、２進数００１１として格納される。
正符号コード（plus-sign-code）制御（Ｐ）：Ｍ３フィールドのビット２は正符号コード制御である。Ｐがゼロである場合、正符号は、２進数１１００として符号化される。Ｐが１である場合、正符号は、２進数１１１１として符号化される。Ｓビットがゼロである場合、Ｐビットは無視され、ゼロであると仮定される。
正・ゼロ強制（force-plus-zero）制御（Ｆ）：Ｍ３フィールドのビット３は正・ゼロ強制制御である。Ｆがゼロである場合、アクションはとられない。Ｆが１であり、第２オペランド位置に置かれた結果の絶対値がゼロである場合、結果の符号は、Ｐビットにより指定された符号コードを有する正の値を示すように設定される。Ｓビットがゼロである場合、Ｆビットは無視され、ゼロであると仮定される。
【００７４】
演算において、ＤＦＰの第１オペランドの仮数の右端桁の指定数、及び第１オペランドの符号ビットが、ゾーン形式に変換され、結果が第２オペランド位置に置かれる。１の量子を有する第１オペランドの右単位表示が暗黙指定される。ｃｏｍｂｉｎａｔｉｏｎフィールド内の指数は無視され、バイアスする前に、あたかもゼロの値を有するように扱われる。
【００７５】
変換される第１オペランドの仮数の右端桁の数は、Ｌ２によって指定される。ＣＺＸＴに関しては、第２オペランドのバイト長さは、Ｌ２の長さコード０−３３に対応する１−３４であり、１−３４桁を意味する。ＣＺＤＴに関しては、第２オペランドのバイト長さは、Ｌ２の長さコード０−１５までに対応する１−１６であり、１−１６桁を意味する。
【００７６】
一実施形態において、演算は、ＩＥＥＥ例外を引き起こすことなく、無限大、ＱＮａＮ、又はＳＮａＮを含む、あらゆる第１オペランドに対して行われる。第１オペランドが無限大又はＮａＮである場合、ゼロ桁が、仮数の左端桁であると考えられ、仮数の右端桁の指定された数及び符号ビットがゾーン形式に変換され、結果が第２オペランド位置に置かれ、実行は特定の条件コード（例えば、３）で終了する。
【００７７】
第２オペランド・フィールドが短すぎるために結果の左端の非ゼロ桁が失われる場合、オーバーフロー桁を無視することによって結果が取得され、指定された条件コード（例えば３の）が設定され、且つ、１０進オーバーフロー・マスク・ビットが１である場合、１０進オーバーフローのプログラム割り込みが発生する。オペランドの長さのみがオーバーフローを示すのではなく、演算中に非ゼロ桁は失われる。
【００７８】
例えば、以下のいずれかが真である場合、指定例外が認識され、演算は抑制される：つまり、ＣＺＤＴの場合、Ｌ２フィールドが１６を上回るか又はこれに等しい（これは１７又はそれより多い桁を意味する）。ＣＺＸＴの場合、Ｒ１フィールドが無効な浮動小数点数レジスタ対を指定するか、又は、Ｌ２フィールドが３４を上回るか又はこれに等しい（これは３５又はそれより多い桁を意味する）。
【００７９】
結果の条件コードの例は、
０  ソースはゼロである
１  ソースはゼロを下回る
２  ソースはゼロを上回る
３  無限大、ＱＮａｎ、ＳＮａＮ、部分結果、
を含む。
【００８０】
一実施形態において、Ｓビットが１である場合、ＡＳＣＩＩ形式のゾーン１０進数オペランドは、符号付きとして格納することができる。これは、ＡＳＣＩＩ表現が通常符号なし且つ正であり、右端のゾーンを符号として使用するという概念がないので、プログラム次第である。さらに、特定の条件コード（例えば、０）での完了は、第１オペランドの絶対値がゼロであることを示す。
【００８１】
Ｍ３制御ビットに対する、第１オペランドのＤＦＰ符号及び結果の第２オペランドの絶対値がゼロであることの間の関係が、一例として与えられる以下の表に示される。
【表９】
2015507799.tif 000011
【００８２】
ゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令の論理に関する更なる詳細が、図９を参照して説明される。一例において、この論理は、ゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）マシン命令を実行するプロセッサにより実施される。
【００８３】
図９を参照すると、最初に、命令のオペコードにより示されるように、これが拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令であるか、又は長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令であるかについての判断がなされる（問い合わせ８００）。命令のオペコードにより示されるように、これが長形式のゾーン形式への変換（ｌｏｎｇ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令である場合、Ｌ２フィールドが１５を上回る長さを指定するかどうかについての更なる判断がなされる（問い合わせ８０２）。Ｌ２フィールドが１５を上回る長さを指定する場合、１６桁（０−１５）より多くがあるため、例外が与えられる（ステップ８０４）。
【００８４】
問い合わせ８０２に戻ると、長さフィールドが１５を上回る長さを指定しない場合、ＤＦＰオペランドが、変換命令内で（Ｒ１を用いて）指定される浮動小数点数レジスタから読み出される（ステップ８０６）。次いで、読み出されたＤＦＰオペランドのソースＤＦＰ桁をＢＣＤ桁に変換する（ステップ８０８）。
【００８５】
変換の後、非ゼロ桁がＬ２により指定された長さに収まるかどうかについての判断がなされる（問い合わせ８１０）。非ゼロ桁が収まらない場合、オーバーヘッド例外が示される（ステップ８１２）。他の場合には、マスク・フィールドのＺビットが１に等しいかどうかについての更なる判断がなされる（問い合わせ８１４）。Ｚが１に等しい場合、ゾーン・フィールド及び符号コードが「００１１」に設定される（ステップ８１６）。他の場合には、ゾーン・フィールド及び符号コードが「１１１１」に設定される（ステップ８１８）。
【００８６】
ゾーン・フィールド及び符号コードを設定した後、マスク・フィールドのＳビットが１に設定されるかどうかについての更なる判断がなされる（問い合わせ８２０）。Ｓビットが１に設定されない場合、ＢＣＤ桁、符号フィールド、及びフィールド・コードを適切な形式でメモリに格納する（ステップ８２２）。ゾーン形式の一例は、以下の通りである。
【表１０】
2015507799.tif 000012
【００８７】
この例においては、バイトの右端４ビットは数値ビット（Ｎ）と呼ばれ、通常、１０進数字（桁）を表すコードを含む。バイトの左端４ビットは、１０進数オペランドの右端バイトを除き、ゾーン・ビット（Ｚ）と呼ばれ、これらのビットは、ゾーンおよび符号（Ｓ）のいずれかとして扱うことができる。
【００８８】
問い合わせ８２０に戻ると、Ｓビットが１に等しい場合、マスク内のＺビットが１に設定されるかどうかについての更なる判断がなされる（問い合わせ８２４）。Ｚが１に等しい場合、結果がゼロに等しいかどうかについての判断がなされる（ステップ８２６）。結果がゼロに等しい場合、結果の符号が正に設定される（ステップ８２８）。結果がゼロに等しくなるように設定されないか、又はＺが１に等しくない場合、結果の符号がＤＦＰの符号に設定される（ステップ８３０）。
【００８９】
結果の符号が設定された後、結果の符号が正であるかどうかについての判断がなされる（問い合わせ８３２）。結果の符号が正でない場合、処理はステップ８２２を続行し、ＢＣＤ桁、符号フィールド、及びフィールド・コードを適切な形式でメモリに格納する。しかしながら、結果の符号が正である場合（問い合わせ８３２）、マスク・フィールドのＰビットが１に設定されるかどうかについての更なる判断がなされる（問い合わせ８３４）。Ｐビットが１に設定される場合、符号が１１１１に等しくなるように設定され、他の場合には、符号が１１００に等しくなるように設定される（ステップ８３８）。符号を設定した後、処理はステップ８２２を続行する。
【００９０】
問い合わせ８００に戻ると、これが拡張形式のゾーン形式への変換（ｅｘｔｅｎｄｅｄ  Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令である場合、長さフィールドが３３を上回る長さを指定するかどうかについての判断がなされる（問い合わせ８５０）。長さフィールドが３３を上回る長さを指定する場合、例外が指定され、３４桁を上回ることを示す（ステップ８５２）。他の場合には、レジスタ・フィールド（Ｒ１）が無効な浮動小数点数レジスタ対を指定するかどうかについての判断がなされる（問い合わせ８５４）。無効なものを指定しない場合、処理はステップ８０６を続行する。他の場合には、例外が与えられる（ステップ８５６）。これで、ゾーン形式への変換（Ｃｏｎｖｅｒｔ  ｔｏ  Ｚｏｎｅｄ）命令の実施形態の説明が終了する。
【００９１】
上記に参照したのは、ソースＤＦＰ桁をＢＣＤ桁に変換するためのステップである。変換に関する更なる詳細は、下記、並びに、上記で参照された非特許文献１において説明される。以下の説明はまた、ＤＦＰ形式からゾーン形式に変換するプロセスに関する詳細を提供する。
【００９２】
一例において、倍精度形式の場合は、ゾーン形式に変換される仮数データの最上位桁は、ソース・データのビット１−５であるｃｏｍｂｏフィールド内に収容される。ビット０は符号ビットであり、ビット０が「１」であることにより負の値が示される。ビット６−１３は、ｅｘｐｏｎｅｎｔ  ｃｏｎｔｉｎｕａｔｉｏｎ（指数継続）フィールドであり、この演算より無視される。ビット１４−６３は、Ｅｎｃｏｄｅｄ  Ｔｒａｉｎｌｉｎｇ  Ｓｉｇｎｉｆｉｃａｎｄフィールドであり、ＤＰＤ（ｄｅｎｓｅｌｙ  ｐａｃｋｅｄ  ｄｅｃｉｍａｌ）形式で符号化される１０進数データの残りの１５桁を収容する。
【００９３】
拡張精度形式の場合は、一例において、ゾーン形式に変換される仮数データの最上位桁は、ソース・データのビット１−５であるｃｏｍｂｏフィールド内に収容される。ビット０は符号ビットであり、ビット０が「１」であることにより負の値が示される。ビット６−１７は、ｅｘｐｏｎｅｎｔ  ｃｏｎｔｉｎｕａｔｉｏｎフィールドであり、この演算により無視される。ビット１８−１２７は、Ｅｎｃｏｄｅｄ  Ｔｒａｉｎｌｉｎｇ  Ｓｉｇｎｉｆｉｃａｎｄフィールドであり、ＤＰＤ形式で符号化される１０進数データの残りの３３桁を収容する。
【００９４】
倍精度形式及び拡張精度形式の両方に関して、ＤＰＤ符号化された桁である仮数の末尾部の桁は、ＤＰＤ形式からＢＣＤ（二進化１０進数）形式に変換され、ｃｏｍｂｏフィールド（ビット１−５）からの桁が、これらの桁の先頭に付加される。ＤＰＤからＢＣＤへの変換には少数のゲートしか必要でなく、こうしたゲートを通じて、１０ビットのＤＰＤデータのブロックを１２ビットのＢＣＤデータのブロックに復元し、その結果、各ＢＣＤブロックは、３つの４ビットのＢＣＤ数を含むようになる。先頭のゼロに関して文字列数をチェックし、次いで、命令のＬ２フィールドと比較して、オーバーフロー状況が発生するかどうかについて判断し、発生した場合、適切な最上位桁（これらは、ひとたびデータがゾーン１０進数形式に拡張されると、指定されたメモリ長さ（Ｌ２により指定される）内に収まらない桁である）をゼロに設定する。
【００９５】
次に、４ビット・ゾーン・フィールドが各ＢＣＤ桁の左に挿入され、その結果、今や各バイト（８ビット）が４ビット・ゾーン・フィールドと、それに続く４ビットのＢＣＤ桁とを含むようになる。各ゾーン・フィールドは、テキスト内のＺビットが０であるか又は１であるかに応じて、「００１１」又は「１１１１」である。次に、ＤＦＰソース・オペランドからの符号ビットを用いて、命令においてＳ＝１である場合に符号コードを判断する。ＢＣＤ桁が全て０であり且つＦ＝１である場合、符号が無視され、正符号コードが生成される。他の場合には、生成される符号コードは、ビット０からのＤＦＰソース・オペランドの符号であり、負の符号は「１１０１」として符号化され、正の符号は、Ｐ＝０である場合には「１１００」として、又は、Ｐ＝１である場合には「１１１１」として符号化される。次いで、この符号コードは、ＢＣＤ最下位桁の左までフィールド・コードを置き換える。（１つの実施形態において、符号はフィールド・コードと並行して処理され、フィールド・コードの代わりに、ＢＣＤ最下位桁の左に挿入される。）次いで、この結果がメモリに書き込まれる。
【００９６】
上記に詳細に説明されたのは、ソース浮動小数点レジスタ又はレジスタ対における１０進浮動小数点オペランドをＥＢＣＤＩＣ又はＡＳＣＩＩ形式のデータに変換し、それをターゲット・メモリ位置に格納する、２つのマシン命令ＣＺＤＴ及びＣＺＸＴである。これらの命令は、従来のストレージ間１０進数演算量を著しく改善するための手段を提供する。従来のストレージ間アンパック１０進演算（decimal unpack operation）は、１５桁及び符号を処理することができ、ＣＯＢＯＬアプリケーションのようなアプリケーションにおいて典型的に見出される３１桁（及び符号）の結果を処理するために３つの重複するアンパック操作を必要とする。所定のタスクを実施するために付加的な命令の実行を必要とするため、結果をより重複がより少ない小結果（mini-result）にしなければならないことは、コンパイラの複雑性を付加し、性能に影響を与える。ＣＺＸＴは、単一の命令において、最大３４桁及び１つの符号コードを含むＤＦＰオペランドを変換し、これをメモリに格納することができるので、コンパイラは、通例の３１桁及び符号の結果（例えば、ＣＯＢＯＬ結果）を単一のエンティティとして扱い、コンパイルされたコードを簡略化し、性能を改善することができる。
【００９７】
以前より、このプロセスは、ＧＰＲにおいて、データをＤＦＰ形式からパック１０進数形式に変換するために、ＣＳＤＴＲ又はＣＳＸＴＲを使用することを必要とした。次いで、データをＧＰＲから外のメモリに格納しなければならないが、現時点では命令セット・アーキテクチャ内に長さが制御されたストアは存在しないので、これにはワード、ハーフワード、及びバイト・ストア操作の混合が必要となることが多い。最後に、メモリ内のデータを再びＥＢＣＤＩＣ又はＡＳＣＩＩ形式に変換するために、ｕｎｐａｃｋ又はＵＮＰＫＡ操作が必要とされる。これらの新しい命令により、単一のステップで、データをＤＦＰ形式から、直接ＥＢＣＤＩＣ又はＡＳＣＩＩ形式に変換することが可能になる。ＣＺＤＴ又はＣＺＸＴ命令は、ＣＳＤＴＲ／ＣＳＸＴＲ命令及びＵＮＰＫ／ＵＮＰＫＡ命令の両方に取って代わる。
【００９８】
当業者により認識されるように、本発明の１つ又は複数の態様は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の１つ又は複数の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、これらは全て、本明細書において、一般的に「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明の１つ又は複数の態様は、コンピュータ可読プログラム・コードが組み込まれた、１つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
【００９９】
１つ又は複数のコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ可読媒体は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、これらに限定されるものではないが、例えば、電子、磁気、光学、電磁気、赤外線又は半導体のシステム、装置若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例（非網羅的なリスト）として、以下のもの、即ち、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能なプログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、又は上記のいずれかの適切な組み合わせが挙げられる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置若しくはデバイスによって用いるため、又はそれらと接続して用いるためにプログラムを収容又は格納することができるいずれかの有形媒体とすることができる。
【０１００】
ここで図１０を参照すると、一例において、コンピュータ・プログラム製品９００が、例えば、本発明の１つ又は複数の態様を提供し、容易にするように、コンピュータ可読プログラム・コード手段又は論理９０４をその上に格納するための１つ又は複数の非一時的（non-transitory）コンピュータ可読ストレージ媒体９０２を含む。
【０１０１】
コンピュータ可読媒体上に具体化されたプログラム・コードは、これらに限られるものではないが、無線、有線、光ファイバ・ケーブル、ＲＦ等、又は上記のいずれかの適切な組み合わせを含む、適切な媒体を用いて伝送することができる。
【０１０２】
本発明の１つ又は複数の態様に関する演算を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（登録商標）、ＳｍａｌｌＴａｌｋ、Ｃ＋＋等のようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語、アセンブラ、又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で実行される場合もあり、スタンドアロンのソフトウェア・パッケージとして、一部がユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいては、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネット・サービス・プロバイダを用いたインターネットを通じて）。
【０１０３】
本発明の１つ又は複数の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図及び／又はブロック図を参照して、本明細書で説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ・プログラム命令によって実装できることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ以上のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。
【０１０４】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令を含む製品を製造するようにすることもできる。
【０１０５】
コンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにもすることもできる。
【０１０６】
図面内のフローチャート及びブロック図は、本発明の１つ又は複数の態様の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含むモジュール、セグメント、又はコードの部分を表すことができる。幾つかの代替的な実装において、ブロック内に記載された機能は、図面内に記載された順序とは異なる順序で行われ得ることにも留意すべきである。例えば、連続して示された２つのブロックが、関与する機能に応じて、実際には、実質的に同時に実行されることもあり、ときにはブロックが逆順に実行されることもある。また、ブロック図及び／又はフローチャート図の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を行う専用ハードウェア・ベースのシステムによって、又は専用ハードウェアとコンピュータ命令との組み合わせによって実装できることにも留意されたい。
【０１０７】
上記に加えて、本発明の１つ又は複数の態様は、顧客環境の管理を提供するサービス・プロバイダにより、供与し、提供し、配置し、管理し、サービスを行うことなどができる。例えば、サービス・プロバイダは、１つ又は複数の顧客に対して本発明の１つ又は複数の態様を実施するコンピュータ・コード及び／又はコンピュータ・インフラストラクチャを作成し、保持し、サポートすることなどができる。見返りとして、サービス・プロバイダは、例として、予約申し込み及び／又は報酬契約の下で顧客から支払いを受けることができる。付加的に又は代替的に、サービス・プロバイダは、１つ又は複数の第三者に対する広告コンテンツの販売から支払いを受けることができる。
【０１０８】
本発明の一態様において、本発明の１つ又は複数の態様を実施するために、アプリケーションを配置することができる。一例として、アプリケーションの配置は、本発明の１つ又は複数の態様を実施するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１０９】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを配置することが可能であり、そこでは、コードは、コンピューティング・システムと協働して、本発明の１つ又は複数の態様を実施することができる。
【０１１０】
本発明の更に別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含む、コンピュータ・インフラストラクチャを統合するためのプロセスを提供することができる。コンピュータ・システムは、コンピュータ可読媒体を含み、ここで、コンピュータ媒体は本発明の１つ又は複数の態様を含む。コードは、コンピュータ・システムと協働して、本発明の１つ又は複数の態様を実施することができる。
【０１１１】
種々の実施形態が上述されたが、これらは例にすぎない。例えば、他のアーキテクチャのコンピューティング環境が、本発明の１つ又は複数の態様を組み込み、用いることが可能である。さらに、特定のフィールド及び／又はビットが説明されるが、他のものを用いることもできる。さらに、フロー図の幾つかのステップを並行して又は異なる順序で実行することができる。本発明の範囲から逸脱することなく、多くの変更及び追加をなすことができる。
【０１１２】
さらに、他のタイプのコンピューティング環境が、本発明の１つ又は複数の態様から利益を得ることができる。一例として、システム・バスを通してメモリ要素に直接的に又は間接的に結合された少なくとも２つのプロセッサを含む、プログラム・コードを格納及び／又は実行するのに適したデータ処理システムが使用可能である。メモリ要素は、例えば、プログラム・コードの実際の実行時に用いられるローカル・メモリと、大容量記憶装置と、実行時に大容量記憶装置からコードを取得しなければならない回数を減少させるために少なくとも幾つかのプログラム・コードの一時的なストレージを提供するキャッシュ・メモリとを含む。
【０１１３】
入力／出力即ちＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング装置、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サムドライブ、及び他のメモリ媒体等を含むが、これらに限定されるものではない）は、直接的に、又は介在するＩ／Ｏコントローラを通して、システムに結合することができる。データ処理システムが、介在するプライベート・ネットワーク又は公衆ネットワークを通して、他のデータ処理システム又はリモート・プリンタ若しくはストレージ装置に結合できるように、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム及びイーサネット（登録商標）カードは、利用可能なタイプのネットワーク・アダプタのほんの数例にすぎない。
【０１１４】
本発明の１つ又は複数の態様を組み込むことができるコンピューティング環境の他の例が以下に説明される。
【０１１５】
図１１を参照すると、本発明の１つ又は複数の態様を実装するためのホスト・コンピュータ・システム５０００の代表的なコンポーネントが描かれている。代表的なホスト・コンピュータ５０００は、コンピュータ・メモリ（即ち、中央ストレージ）５００２と通信状態にある１つ又は複数のＣＰＵ５００１に加えて、ストレージ媒体デバイス５０１１及び他のコンピュータ又はＳＡＮ等と通信するためのネットワーク５０１０へのＩ／Ｏインターフェースを含む。ＣＰＵ５００１は、アーキテクチャ化された（architected）命令セット及びアーキテクチャ化された機能を有するアーキテクチャに準拠している。ＣＰＵ５００１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための動的アドレス変換（Dynamic Address Translation、ＤＡＴ）５００３を有することができる。ＤＡＴは、一般的に、変換をキャッシュに入れるための変換ルックアサイド・バッファ（ＴＬＢ）５００７を含むので、コンピュータ・メモリ５００２のブロックへの後の方のアクセスでは、アドレス変換の遅延を必要としない。一般的に、コンピュータ・メモリ５００２とプロセッサ５００１との間に、キャッシュ５００９が用いられる。キャッシュ５００９は、１つより多いＣＰＵが利用可能な大容量のキャッシュと、大型のキャッシュと各ＣＰＵとの間のより小型でより高速な（下位レベルの）キャッシュとを有する階層とすることができる。幾つかの実装において、下位レベルのキャッシュは、命令のフェッチ及びデータ・アクセスのために別個の下位レベル・キャッシュを与えるように分割される。一実施形態においては、キャッシュ５００９を介して、命令フェッチ・ユニット５００４により、命令がメモリ５００２からフェッチされる。命令は、命令デコード・ユニット５００６でデコードされ、命令実行ユニット５００８にディスパッチされる（幾つかの実施形態においては他の命令と共に）。一般的には、例えば、算術演算実行ユニット、浮動小数点実行ユニット、及び分岐命令実行ユニットなどの幾つかの実行ユニット５００８が用いられる。命令は、実行ユニットにより実行され、必要に応じて命令が指定したレジスタ又はメモリからオペランドにアクセスする。メモリ５００２からオペランドにアクセスする（ロード又はストアする）場合、典型的には、ロード／ストア・ユニット５００５が、実行される命令の制御下でアクセスを処理する。命令は、ハードウェア回路又は内部のマイクロコード（ファームウェア）において、又はその両方の組み合わせによって実行することができる。
【０１１６】
既述のように、コンピュータ・システムは、ローカル（又は主）ストレージ内の情報、並びに、アドレッシング、保護、参照、及び変更の記録を含む。アドレッシングの幾つかの態様は、アドレスの形式、アドレス空間の概念、種々のタイプのアドレス、及び１つのタイプのアドレスを別のタイプのアドレスに変換する方法を含む。主ストレージの一部は、永続的に割り当てられた記憶位置を含む。主ストレージは、システムに、データの直接アドレス指定可能な高速アクセス・ストレージを与える。データ及びプログラムを処理できるようになる前に、（入力装置から）データ及びプログラムの両方は、主ストレージにロードされる。
【０１１７】
主ストレージは、キャッシュと呼ばれることもある、１つ又は複数のより小さくより高速アクセスのバッファ・ストレージを含むことができる。キャッシュは、典型的には、ＣＰＵ又はＩ／Ｏプロセッサと物理的に関連付けられる。物理的構成及び別個のストレージ媒体を使用することの影響は、性能に対するものを除き、通常、プログラムにより観察することはできない。
【０１１８】
命令及びデータ・オペランドについて、別個のキャッシュを保持することができる。キャッシュ内の情報は、キャッシュ・ブロック又はキャッシュ・ライン（又は短縮してライン）と呼ばれる、整数境界（integral boundary）上にある連続したバイト内に保持される。モデルは、キャッシュ・ラインのサイズをバイトで返す、ＥＸＴＲＡＣＴ  ＣＡＣＨＥ  ＡＴＴＲＩＢＵＴＥ命令を提供することができる。モデルはまた、データ若しくは命令キャッシュへのストレージのプリフェッチ、又は、キャッシュからのデータの解放に影響を与える、ＰＲＥＦＥＴＣＨ  ＤＡＴＡ及びＰＲＥＦＥＴＣＨ  ＤＡＴＡ  ＲＥＬＡＴＩＶＥ  ＬＯＮＧ命令を提供することができる。
【０１１９】
ストレージは、長い水平方向のビットの文字列と考えられる。大部分の操作において、ストレージへのアクセスは、左から右への順序で進む。ビットの文字列は、８ビット単位で分割される。８ビットの単位は１バイトと呼ばれ、全ての情報の形式の基本的な構成要素（building block）である。ストレージ内の各々のバイト位置は、負でない一意の整数により識別され、この整数がそのバイト位置のアドレスであり、即ち、簡単にバイト・アドレスである。隣接するバイト位置は、連続するアドレスを有し、左の０で始まり、左から右への順序で進む。アドレスは、符号なしの２進整数であり、２４ビット、３１ビット、又は６４ビットである。
【０１２０】
情報は、ストレージとＣＰＵ又はチャネル・サブシステムとの間で、一度に１バイトずつ、又は１バイト・グループずつ伝送される。特に断りのない限り、例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）においては、ストレージ内のバイト・グループは、グループの左端のバイトによりアドレス指定される。グループ内のバイト数は、実行される操作により暗黙に又は明示的に指定される。ＣＰＵ操作に用いられる場合、バイト・グループはフィールドと呼ばれる。例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）においては、バイト・グループの中の各々において、ビットは、左から右の順序で番号が付けられる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）においては、左端ビットは「上位（high-order）」ビットと呼ばれることがあり、右端ビットは「下位（low-order）」ビットと呼ばれることがある。しかしながら、ビット数は、ストレージ・アドレスではない。バイトだけを、アドレス指定することができる。ストレージ内の１つのバイトの個々のビットに対して操作を行うためには、そのバイト全体にアクセスされる。１バイトの中のビットには、左から右に０から７までの番号が付けられる（例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）において）。１つのアドレスの中のビットには、２４ビット・アドレスの場合は８−３１若しくは４０−６３の番号を付けることができ、又は、３１ビット・アドレスの場合は１−３１若しくは３３−６３の番号を付けることができ、６４ビット・アドレスの場合は０−６３の番号が付けられる。複数のバイトから成る他のいずれかの固定長形式の中では、その形式を構成するビットには、０から始まる連続番号が付けられる。エラー検出のため及び好ましくは訂正のために、各バイト又はバイト・グループと共に、１つ又は複数の検査ビットが伝送されることがある。このような検査ビットは、マシンにより自動的に生成されるものであり、プログラムが直接制御することはできない。記憶容量は、バイト数で表わされる。ストレージ・オペランド・フィールドの長さが命令のオペレーション・コードで暗黙的に指定される場合、そのフィールドは固定長を有すると言われ、固定長は、１バイト、２バイト、４バイト、８バイト、又は１６バイトとすることができる。一部の命令では、より長いフィールドが暗黙的に指定されることもある。ストレージ・オペランド・フィールドの長さが暗黙的に指定されず明示的に記述される場合は、そのフィールドは可変長を有すると言われる。可変長オペランドは、１バイトのインクリメントにより変化し得る（又は、一部の命令では、２バイトの倍数若しくは他の倍数）。情報がストレージ内に置かれるとき、ストレージへの物理パスの幅が格納されるフィールドの長さを上回り得るとしても、指定されたフィールド内に含まれるバイトの記憶位置の内容のみが置き換えられる。
【０１２１】
特定の情報単位は、ストレージ内の整数境界上にあることになる。そのストレージ・アドレスがバイトでの単位での長さの倍数であるとき、境界は、情報単位に関して整数のものであると言われる。整数境界上にある２バイト、４バイト、８バイト、及び１６バイトのフィールドには、特別な名称が与えられる。ハーフワードは、２バイト境界上にある２個の連続したバイトのグループであり、これは、命令の基本的な構成要素である。ワードは、４バイト境界上にある４個の連続したバイトのグループである。ダブルワード（doubleword）は、８バイト境界上にある８個の連続したバイトのグループである。クワッドワード（quadword）は、１６バイト境界上にある１６個の連続したバイトのグループである。ストレージ・アドレスが、ハーフワード、ワード、ダブルワード、及びクワッドワードを示す場合、そのアドレスの２進表現は、それぞれ、右端の１個、２個、３個、又は４個のビットが０になる。命令は、２バイトの整数境界上にあることになる。大部分の命令のストレージ・オペランドは、境界合わせ（boundary alignment）要件をもたない。
【０１２２】
命令及びデータ・オペランドに対して別個のキャッシュを実装するデバイスにおいては、ストアが、後にフェッチされる命令を変更するかどうかに関係なく、後に命令をフェッチするキャッシュ・ライン内にプログラムが格納される場合には、著しい遅延が生じることがある。
【０１２３】
一実施形態において、本発明は、ソフトウェア（ライセンス内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれる場合もあるが、そのいずれも本発明の１つ又は複数の態様と整合性がある）により実施することができる。図１１を参照すると、本発明の１つ又は複数の態様を具体化するソフトウェア・プログラム・コードには、ホスト・システム５０００のプロセッサ５００１により、ＣＤ−ＲＯＭドライブ、テープドライブ、又はハードドライブといった長期ストレージ媒体デバイス５０１１からアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、こうした媒体上に分散させても、又はコンピュータ・メモリ５００２からユーザに分散させても、又は、こうした他のシステムのユーザが使用するために、ネットワーク５０１０上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【０１２４】
ソフトウェア・プログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システム及び１つ又は複数のアプリケーション・プログラムを含む。プログラム・コードは、通常、ストレージ媒体デバイス５０１１から相対的により高速のコンピュータ・ストレージ５００２にページングされ、そこでプロセッサ５００１による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを分散させる技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュメモリ、コンパクトディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含む）上に作成され格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１２５】
図１２は、本発明の１つ又は複数の態様を実施することができる代表的なワークステーション又はサーバ・ハードウェア・システムを示す。図１２のシステム５０２０は、随意的な周辺機器を含む、パーソナル・コンピュータ、ワークステーション、又はサーバなどの代表的なベース・コンピュータ・システム５０２１を含む。ベース・コンピュータ・システム５０２１は、１つ又は複数のプロセッサ５０２６と、周知の技術に従ってプロセッサ５０２６とシステム５０２１の他のコンポーネントを接続し、これらの間の通信を可能にするために用いられるバスとを含む。バスは、プロセッサ５０２６を、メモリ５０２５及び、ハードドライブ（例えば、磁気媒体、ＣＤ、ＤＶＤ、及びフラッシュメモリのいずれかを含む）又はテープドライブを含むことができる長期ストレージ５０２７に接続する。システム５０２１はまた、バスを介して、マイクロプロセッサ５０２６を、キーボード５０２４、マウス５０２３、プリンタ／スキャナ５０３０、及び／又はタッチ・センシティブ・スクリーン、デジタル化された入力パッド等のいずれかのユーザ・インターフェース機器とすることができる他のインターフェース機器といった、１つ又は複数のインターフェース機器に接続する、ユーザ・インターフェース・アダプタを含むこともできる。バスはまた、ディスプレイ・アダプタを介して、ＬＣＤスクリーン又はモニタなどのディスプレイ装置５０２２をマイクロプロセッサ５０２６にも接続する。
【０１２６】
システム５０２１は、ネットワーク５０２９と通信する５０２８ことができるネットワーク・アダプタを介して、他のコンピュータ又はコンピュータ・ネットワークと通信することができる。例示的なネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット（登録商標）又はモデムである。或いは、システム５０２１は、ＣＤＰＤ（セルラー・デジタル・パケット・データ）カードのような無線インターフェースを用いて通信することもできる。システム５０２１は、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）、又はシステム５０２１内のこうした他のコンピュータと関連付けることができ、又は、別のコンピュータ等とのクライアント／サーバ構成におけるクライアントとすることができる。これらの構成の全て、並びに、適切な通信ハードウェア及びソフトウェアは、当技術分野において周知である。
【０１２７】
図１３は、本発明の１つ又は複数の態様を実施することができるデータ処理ネットワーク５０４０を示す。データ処理ネットワーク５０４０は、各々が複数の個々のワークステーション５０４１、５０４２、５０４３、５０４４を含むことができる、無線ネットワーク及び有線ネットワークのような複数の個々のネットワークを含むことができる。さらに、当業者であれば理解するように、１つ又は複数のＬＡＮを含ませることができ、そこで、ＬＡＮは、ホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを含むことができる。
【０１２８】
さらに図１３を参照すると、ネットワークはまた、ゲートウェイ・コンピュータ（クライアント・サーバ５０４６）、又はアプリケーション・サーバ（データ・リポジトリにアクセスすることができ、且つ、ワークステーション５０４５から直接アクセスすることもできる遠隔サーバ５０４８）のような、メインフレーム・コンピュータ又はサーバを含むこともできる。ゲートウェイ・コンピュータ５０４６は、各々の個々のネットワークへの入口点として働く。ゲートウェイは、１つのネットワーク・プロトコルを別のものに接続するときに必要とされる。ゲートウェイ５０４６は、通信リンクによって別のネットワーク（例えば、インターネット５０４７）に結合できることが好ましい。ゲートウェイ５０４６はまた、通信リンクを用いて、１つ又は複数のワークステーション５０４１、５０４２、５０４３、５０４４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＩＢＭ  ｅＳｅｒｖｅｒ（商標）Ｓｙｓｔｅｍ  ｚ（登録商標）サーバを用いて実装することができる。
【０１２９】
図１２及び図１３を同時に参照すると、本発明の１つ又は複数の態様を具体化することができるソフトウェア・プログラム・コードには、一般的に、ＣＤ−ＲＯＭドライブ又はハードドライブといった長期ストレージ媒体５０２７から、システム５０２０のプロセッサ５０２６によってアクセスすることができる。ソフトウェア・プログラム・コードは、ディスケット、ハードドライブ、又はＣＤ−ＲＯＭといった、データ処理システムと共に用いるための種々の周知の媒体のいずれかの上で具体化することができる。コードは、そのような媒体上で分散させても、又はメモリからユーザ５０５０、５０５１に分散させても、或いは、こうした他のシステムのユーザが用いるために、ネットワーク上の１つのコンピュータ・システムのストレージから他のコンピュータ・システムに分散させてもよい。
【０１３０】
或いは、プログラム・コードをメモリ５０２５内で具体化し、プロセッサ・バスを用いてプロセッサ５０２６によってプログラム・コードにアクセスすることができる。このようなプログラム・コードは、種々のコンピュータ・コンポーネントの機能及び相互作用を制御するオペレーティング・システム及び１つ又は複数のアプリケーション・プログラム５０３２を含む。プログラム・コードは、通常、ストレージ媒体５０２７から高速メモリ５０２５にページングされ、そこでプロセッサ５０２６による処理のために利用可能になる。ソフトウェア・プログラム・コードをメモリ内、物理的媒体上で具体化し、及び／又は、ネットワークを介してソフトウェア・コードを配布する技術及び方法は周知であり、ここではこれ以上論じない。プログラム・コードは、作成され、有形の媒体（これらに限定されるものではないが、電子メモリ・モジュール（ＲＡＭ）、フラッシュメモリ、コンパクトディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含む）に格納されたとき、「コンピュータ・プログラム製品」と呼ばれることが多い。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１３１】
プロセッサが最も容易に利用できるキャッシュ（通常、プロセッサの他のキャッシュよりも高速で小さい）は、最下位（Ｌ１又はレベル１）のキャッシュであり、メインストア（主メモリ）は、最上位レベルのキャッシュ（３つのレベルがある場合にはＬ３）である。最下位レベルのキャッシュは、実行されるマシン命令を保持する命令キャッシュ（Ｉ−キャッシュ）と、データ・オペランドを保持するデータ・キャッシュ（Ｄ−キャッシュ）とに分割されることが多い。
【０１３２】
図１４を参照すると、プロセッサ５０２６についての例示的なプロセッサの実施形態が示される。典型的には、メモリ・ブロックをバッファに入れてプロセッサ性能を向上させるために、１つ又は複数のレベルのキャッシュ５０５３が用いられる。キャッシュ５０５３は、用いられる可能性が高いメモリ・データのキャッシュ・ラインを保持する高速バッファである。典型的なキャッシュ・ラインは、６４バイト、１２８バイト、又は２５６バイトのメモリ・データである。データをキャッシュに入れるのではなく、命令をキャッシュに入れるために、別個のキャッシュが用いられることが多い。キャッシュ・コヒーレンス（メモリ及びキャッシュ内のラインのコピーの同期）は、多くの場合、当技術分野において周知の種々の「スヌープ（snoop）」アルゴリズムによって与えられる。プロセッサ・システムの主メモリ・ストレージ５０２５は、キャッシュと呼ばれることが多い。４つのレベルのキャッシュ５０５３を有するプロセッサ・システムにおいて、主ストレージ５０２５は、典型的にはより高速であり、且つ、コンピュータ・システムが利用できる不揮発性ストレージ（ＤＡＳＤ、テープ等）の一部だけを保持するので、レベル５（Ｌ５）のキャッシュと呼ばれることがある。主ストレージ５０２５は、オペレーティング・システムによって主ストレージ５０２５との間でページングされるデータのページを「キャッシュに入れる」。
【０１３３】
プログラム・カウンタ（命令カウンタ）５０６１は、実行される現行の命令のアドレスを常時監視している。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）プロセッサのプログラム・カウンタは６４ビットであり、従来のアドレッシング制限をサポートするために、３１ビット又は２４ビットに切り捨てることができる。プログラム・カウンタは、典型的には、コンテキスト・スイッチの際に持続するように、コンピュータのＰＳＷ（プログラム状況ワード）内で具体化される。従って、例えば、オペレーティング・システムにより、プログラム・カウンタ値を有する進行中のプログラムに割り込みをかけることが可能である（プログラム環境からオペレーティング・システム環境へのコンテキスト・スイッチ）。プログラムのＰＳＷは、プログラムがアクティブでない間、プログラム・カウンタ値を保持し、オペレーティング・システムが実行されている間、オペレーティング・システムの（ＰＳＷ内の）プログラム・カウンタが用いられる。典型的には、プログラム・カウンタは、現行の命令のバイト数に等しい量だけインクリメントされる。ＲＩＳＣ（Reduced Instruction Set Computing、縮小命令セット・コンピューティング）命令は、典型的には固定長であり、ＣＩＳＣ（Complex Instruction Set Computing、複合命令セット・コンピューティング）命令は、典型的には可変長である。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）の命令は、２バイト、４バイト、又は６バイトの長さを有するＣＩＳＣ命令である。例えば、コンテキスト・スイッチ操作又は分岐命令の分岐成立（Branch taken）操作により、プログラム・カウンタ５０６１が変更される。コンテキスト・スイッチ操作において、現行のプログラム・カウンタ値は、実行されるプログラムについての他の状態情報（条件コードのような）と共にプログラム状況ワード内に保存され、実行される新しいプログラム・モジュールの命令を指し示す新しいプログラム・カウンタ値がロードされる。分岐成立操作を行い、分岐命令の結果をプログラム・カウンタ５０６１にロードすることにより、プログラムが判断を下すこと又はプログラム内でループすることを可能にする。
【０１３４】
典型的には、プロセッサ５０２６の代わりに命令をフェッチするために、命令フェッチ・ユニット５０５５が用いられる。フェッチ・ユニットは、「次の順次命令（next sequential instruction）」、分岐成立命令のターゲット命令、又はコンテキスト・スイッチの後のプログラムの最初の命令のいずれかをフェッチする。今日の命令フェッチ・ユニットは、プリフェッチされた命令を用いることができる可能性に基づいて、命令を投機的にプリフェッチするプリフェッチ技術を用いることが多い。例えば、フェッチ・ユニットは、次の順次命令を含む１６バイトの命令と、付加的なバイトの更なる順次命令とをフェッチすることができる。
【０１３５】
次いで、フェッチされた命令が、プロセッサ５０２６によって実行される。一実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット５０５６に渡される。ディスパッチ・ユニットは命令をデコードし、デコードされた命令についての情報を適切なユニット５０５７、５０５８、５０６０に転送する。実行ユニット５０５７は、典型的には、命令フェッチ・ユニット５０５５からデコードされた算術命令についての情報を受け取り、命令のオペコードに従ってオペランドに関する算術演算を行う。オペランドは、好ましくは、メモリ５０２５、アーキテクチャ化レジスタ５０５９、又は実行される命令の即値フィールドのいずれかから、実行ユニット５０５７に与えられる。実行の結果は、格納された場合には、メモリ５０２５、レジスタ５０５９、又は他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタなどのような）内に格納される。
【０１３６】
プロセッサ５０２６は、典型的には、命令の機能を実行するための１つ又は複数の実行ユニット５０５７、５０５８、５０６０を有する。図１５を参照すると、実行ユニット５０５７は、インターフェース論理５０７１を介して、アーキテクチャ化された汎用レジスタ５０５９、デコード／ディスパッチ・ユニット５０５６、ロード・ストア・ユニット５０６０、及び他のプロセッサ・ユニット５０６５と通信することができる。実行ユニット５０５７は、幾つかのレジスタ回路５０６７、５０６８、５０６９を用いて、算術論理演算ユニット（ＡＬＵ）５０６６が動作する情報を保持することができる。ＡＬＵは、加算（ａｄｄ）、減算（ｓｕｂｔｒａｃｔ）、乗算（ｍｕｌｔｉｐｌｙ）、及び除算（ｄｉｖｉｄｅ）などの算術演算、並びに、論理積（ａｎｄ）、論理和（ｏｒ）、及び排他的論理和（ＸＯＲ）、ローテート（ｒｏｔａｔｅ）及びシフト（ｓｈｉｆｔ）のような論理関数を実行する。ＡＬＵは、設計に依存する専用の演算をサポートすることが好ましい。他の回路は、例えば条件コード及び回復サポート論理を含む、他のアーキテクチャ化ファシリティ５０７２を提供することができる。典型的には、ＡＬＵ演算の結果は、出力レジスタ回路５０７０に保持され、この出力レジスタ回路５０７０が、結果を種々の他の処理機能に転送することができる。多数のプロセッサ・ユニットの構成が存在し、本説明は、一実施形態の代表的な理解を与えることのみを意図している。
【０１３７】
例えばＡＤＤ命令は、算術及び論理機能を有する実行ユニット５０５７で実行され、一方、例えば浮動小数点命令は、特化された浮動小数点能力を有する浮動小数点実行部で実行される。実行ユニットは、オペランドに対してオペコードが定めた関数を行うことにより、命令が特定したオペランドに対して動作することが好ましい。例えば、ＡＤＤ命令は、命令のレジスタ・フィールドによって特定された２つのレジスタ５０５９内に見出されるオペランドに対して、実行ユニット５０５７により実行することができる。
【０１３８】
実行ユニット５０５７は、２つのオペランドに対して算術加算を実行し、結果を第３オペランドに格納し、ここで第３オペランドは、第３のレジスタであっても又は２つのソース・レジスタのいずれかであってもよい。実行ユニットは、シフト、ローテート、論理積、論理和、及び排他的論理和のような種々の論理関数、並びに、加算、減算、乗算、除法のいずれかを含む、種々の代数関数を実行することができる算術論理演算ユニット（ＡＬＵ）５０６６を用いることが好ましい。スカラー演算のために設計されたＡＬＵ５０６６もあり、浮動小数点のために設計されたものＡＬＵ５０６６もある。データは、アーキテクチャに応じて、ビッグエンディアン（Big Endian）（最下位のバイトが最も高いバイト・アドレスである）、又はリトルエンディアン（Little Endian）（最下位のバイトが最も低いバイト・アドレスである）とすることができる。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）は、ビッグエンディアンである。符号付きフィールドは、アーキテクチャに応じて、符号及び大きさ、１の補数、又は２の補数とすることができる。２の補数における負の値又は正の値は、ＡＬＵ内で加法しか必要としないため、ＡＬＵが減算能力を設計する必要がないという点で、２の補数は有利である。数値は、通常、省略表現で記述され、１２ビット・フィールドは、４，０９６バイトブロックのアドレスを定め、通常、例えば４Ｋバイト（キロバイト）ブロックのように記述される。
【０１３９】
図１６を参照すると、分岐命令を実行するための分岐命令情報が、典型的には、分岐ユニット５０５８に送られ、この分岐ユニット５０５８は、多くの場合、分岐履歴テーブル５０８２のような分岐予測アルゴリズムを用いて、他の条件付き演算が完了する前に分岐の結果を予測する。条件付き演算が完了する前に、現行の分岐命令のターゲットがフェッチされ、投機的に実行される。条件付き演算が完了すると、投機的に実行された分岐命令は、条件付き演算の条件及び投機された結果に基づいて、完了されるか又は破棄される。典型的な分岐命令は、条件コードを試験し、条件コードが分岐命令の分岐要件を満たす場合、ターゲット・アドレスに分岐することができ、ターゲット・アドレスは、例えば、命令のレジスタ・フィールド又は即値フィールド内に見出されるものを含む幾つかの数に基づいて計算することができる。分岐ユニット５０５８は、複数の入力レジスタ回路５０７５、５０７６、５０７７と、出力レジスタ回路５０８０とを有するＡＬＵ５０７４を用いることができる。分岐ユニット５０５８は、例えば、汎用レジスタ５０５９、デコード・ディスパッチ・ユニット５０５６、又は他の回路５０７３と通信することができる。
【０１４０】
例えば、オペレーティング・システムによって開始されるコンテキスト・スイッチ、コンテキスト・スイッチを発生させるプログラム例外又はエラー、コンテキスト・スイッチを発生させるＩ／Ｏ割り込み信号、或いは、（マルチスレッド環境における）複数のプログラムのマルチスレッド活動を含む様々な理由により、命令のグループの実行に割り込みがかけられることがある。コンテキスト・スイッチ動作は、現在実行中のプログラムについての状態情報を保存し、次いで、起動される別のプログラムについての状態情報をロードすることが好ましい。状態情報は、例えば、ハードウェア・レジスタ又はメモリ内に保存することができる。状態情報は、実行される次の命令を指し示すプログラム・カウンタ値と、条件コードと、メモリ変換情報と、アーキテクチャ化されたレジスタの内容とを含むことが好ましい。コンテキスト・スイッチの活動は、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、又はファームウェア・コード（マイクロコード、ピココード、又はライセンス内部コード（ＬＩＣ））単独で又はその組み合わせで実施することができる。
【０１４１】
プロセッサは、命令により定義された方法に従ってオペランドにアクセスする。命令は、命令の一部の値を用いて即値オペランドを与えることができ、汎用レジスタ又は専用レジスタ（例えば、浮動小数点レジスタ）のいずれかを明示的に指し示す１つ又は複数のレジスタ・フィールドを与えることができる。命令は、オペコード・フィールドによって、オペランドとして識別される暗黙的に指定されたレジスタ（implied register）を用いることができる。命令は、オペランドのためのメモリ位置を用いることができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）の長変位ファシリティ（long displacement facility）により例示されるように、オペランドのメモリ位置を、レジスタ、即値フィールド、又はレジスタと即値フィールドの組み合わせによって与えることができ、命令は、基底レジスタ、索引レジスタ、及び即値フィールド（変位フィールド）を定め、これらが、例えば互いに加算されてメモリ内のオペランドのアドレスをもたらす。ここでの位置（location）は、典型的には、特に断りのない限り、主メモリ（主ストレージ）内の記憶位置を意味する。
【０１４２】
図１７を参照すると、プロセッサは、ロード／ストア・ユニット５０６０を用いて、ストレージにアクセスする。ロード／ストア・ユニット５０６０は、メモリ５０５３内のターゲット・オペランドのアドレスを取得し、オペランドをレジスタ５０５９又は別のメモリ５０５３の記憶位置にロードすることによってロード操作を行うことができ、或いは、メモリ５０５３内のターゲット・オペランドのアドレスを取得し、レジスタ５０５９又は別のメモリ５０５３の記憶位置から取得したデータをメモリ５０５３内のターゲット・オペランドの記憶位置に格納することによって、ストア操作を行うことができる。ロード／ストア・ユニット５０６０は、投機的なものであってもよく、命令シーケンスに対してアウト・オブ・オーダー式の順序でメモリにアクセスすることができるが、プログラムに対して、命令がイン・オーダー式に実行されたという外観を維持することになる。ロード／ストア・ユニット５０６０は、汎用レジスタ５０５９、デコード／ディスパッチ・ユニット５０５６、キャッシュ／メモリ・インターフェース５０５３、又は他の要素５０８３と通信することができ、ストレージ・アドレスを計算し、且つ、パイプライン処理を順に行って操作をイン・オーダー式に保持するための、種々のレジスタ回路、ＡＬＵ５０８５、及び制御論理５０９０を含む。一部の動作は、アウト・オブ・オーダー式とすることができるが、ロード／ストア・ユニットは、アウト・オブ・オーダー式動作が、プログラムに対して、当技術分野において周知のようなイン・オーダー式に実行されたように見えるようにする機能を提供する。
【０１４３】
好ましくは、アプリケーション・プログラムが「見ている」アドレスは、仮想アドレスと呼ばれることが多い。仮想アドレスは、「論理アドレス」及び「実効アドレス（effective address）」と呼ばれることもある。これらの仮想アドレスは、これらに限定されるものではないが、単に仮想アドレスをオフセット値にプリフィックス付加すること、１つ又は複数の変換テーブルを介して仮想アドレスを変換することを含む、種々の動的アドレス変換（ＤＡＴ）技術の１つによって、物理的メモリ位置にリダイレクトされるという点で仮想のものであり、変換テーブルは、少なくともセグメント・テーブル及びページ・テーブルを単独で又は組み合わせて含むことが好ましく、セグメント・テーブルは、ページ・テーブルを指し示すエントリを有することが好ましい。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）では、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、及び随意的なページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、仮想アドレスを関連した物理的メモリ位置にマッピングするエントリを含む変換ルックアサイド・バッファ（ＴＬＢ）を用いることにより改善されることが多い。ＤＡＴが変換テーブルを用いて仮想アドレスを変換したときに、エントリが作成される。次いで、後続する仮想アドレスの使用では、低速の順次変換テーブル・アクセスではなく、高速のＴＬＢのエントリを用いることが可能になる。ＴＬＢの内容は、ＬＲＵ（Least Recently Used）を含む種々の置換アルゴリズムによって管理することができる。
【０１４４】
プロセッサがマルチプロセッサ・システムのプロセッサである場合には、各プロセッサは、コヒーレンシのために、Ｉ／Ｏ、キャッシュ、ＴＬＢ、及びメモリといった共有リソースをインターロック状態に保持する責任を負う。キャッシュ・コヒーレンシを保持する際に、一般的には「スヌープ」技術が用いられる。スヌープ環境においては、共有を容易にするために、各キャッシュ・ラインを、共有状態、排他的状態、変更状態、無効状態等のいずれか１つの状態にあるものとしてマーク付けすることができる。
【０１４５】
Ｉ／Ｏユニット５０５４（図１４）は、プロセッサに、例えば、テープ、ディスク、プリンタ、ディスプレイ、及びネットワークを含む周辺機器に取り付けるための手段を与える。Ｉ／Ｏユニットは、ソフトウェア・ドライバによってコンピュータ・プログラムに提示されることが多い。ＩＢＭ（登録商標）によるＳｙｓｔｅｍ  ｚ（登録商標）のようなメインフレームにおいては、チャネル・アダプタ及びオープン・システム・アダプタが、オペレーティング・システムと周辺機器との間に通信をもたらすメインフレームのＩ／Ｏユニットである。
【０１４６】
さらに、他のタイプのコンピューティング環境が、本発明の１つ又は複数の態様から利益を得ることができる。一例として、本明細書で述べられように、環境は、特定のアーキテクチャ（例えば、命令実行、アドレス変換などのアーキテクチャ化された機能、及びアーキテクチャ化されたレジスタを含む）又はそのサブセットをエミュレートする（例えば、プロセッサ及びメモリを有するネイティブ・コンピュータ・システム上で）エミュレータ（例えば、ソフトウェア又は他のエミュレーション機構）を含むことができる。このような環境においては、エミュレータを実行しているコンピュータが、エミュレートされる機能とは異なるアーキテクチャを有することができたとしても、エミュレータの１つ又は複数のエミュレーション機能nにより、本発明の１つ又は複数の態様が実施され得る。一例として、エミュレーション・モードにおいては、エミュレートされる特定の命令又は操作がデコードされ、適切なエミュレーション機能が構築され、個々の命令又は操作を実施する。
【０１４７】
エミュレーション環境においては、ホスト・コンピュータは、例えば、命令及びデータを格納するためのメモリと、メモリから命令をフェッチし、随意的に、フェッチされた命令のためのローカル・バッファリングを提供するための命令フェッチ・ユニットと、フェッチされた命令を受信し、フェッチされた命令のタイプを判断するための命令デコード・ユニットと、命令を実行するための命令実行ユニットとを含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタから再びメモリに格納すること、又はデコード・ユニットにより判断されるように、何らかのタイプの算術演算又は論理演算を実行することを含むことができる。一例においては、各ユニットは、ソフトウェアで実装される。例えば、ユニットが実行する演算は、エミュレータ・ソフトウェア内の１つ又は複数のサブルーチンとして実装される。
【０１４８】
より具体的には、メインフレームにおいて、アーキテクチャ化されたマシン命令は、通常、プログラマによって、多くの場合コンパイラ・アプリケーションを介して、今日では「Ｃ」プログラマによって用いられる。ストレージ媒体内に格納されたこれらの命令は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）のＩＢＭ（登録商標）サーバにおいて、又は代替的に他のアーキテクチャを実行するマシンにおいて、ネイティブに実行することができる。これらの命令は、既存の及び将来のＩＢＭ（登録商標）メインフレーム・サーバにおいて、及び、ＩＢＭ（登録商標）の他のマシン（例えば、Ｐｏｗｅｒ  Ｓｙｓｔｅｍｓサーバ及びＳｙｓｔｅｍ  ｘ（登録商標）サーバ）上で、エミュレートすることができる。これらの命令は、ＩＢＭ（登録商標）、Ｉｎｔｅｌ（登録商標）、ＡＭＤ（商標）などによって製造されたハードウェアを用いて種々のマシン上でＬｉｎｕｘ（登録商標）を実行しているマシンにおいて実行することができる。Ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（登録商標）下でそのハードウェア上で実行することに加えて、Ｌｉｎｕｘ（登録商標）を用いること、並びに、一般に実行がエミュレーション・モードにある、Ｈｅｒｃｕｌｅｓ、又はＦＳＩ（Ｆｕｎｄａｍｅｎｔａｌ  Ｓｏｆｔｗａｒｅ，Ｉｎｃ）によるエミュレーションを用いるマシンを用いることもできる。エミュレーション・モードにおいては、ネイティブ・プロセッサによって、エミュレーション・ソフトウェアが実行され、エミュレートされたプロセッサのアーキテクチャをエミュレートする。
【０１４９】
ネイティブ・プロセッサは、一般的に、エミュレートされたプロセッサのエミュレーションを実行するためにファームウェア又はネイティブ・オペレーティング・システムのいずれかを含むエミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令のフェッチと実行を担当する。エミュレーション・ソフトウェアは、エミュレートされたプログラム・カウンタを維持し、命令境界を常時監視している。エミュレーション・ソフトウェアは、一度に１つ又は複数のエミュレートされたマシン命令をフェッチし、ネイティブ・プロセッサにより実行するために、その１つ又は複数のエミュレートされたマシン命令を、対応するネイティブマシン命令のグループに変換することができる。これらの変換された命令は、より速い変換を達成できるようにキャッシュに入れることができる。それにも関わらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持して、オペレーティング・システム及びエミュレートされたプロセッサのために書かれたアプリケーションが正確に動作することを保証しなければならない。さらに、エミュレーション・ソフトウェアは、これらに限られるものではないが、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、例えばセグメント・テーブル及びページ・テーブルを含む動的アドレス変換機能、割り込み機構、コンテキスト・スイッチ機構、時刻（Time of Day、ＴＯＤ）クロック、及びＩ／Ｏサブシステムへのアーキテクチャ化インターフェースを含む、エミュレートされたプロセッサのアーキテクチャによって識別されるリソースを提供し、オペレーティング・システム又はエミュレートされたプロセッサ上で実行するように設計されたアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるようにしなければならない。
【０１５０】
エミュレートされた特定の命令がデコードされ、個々の命令の機能を実行するためのサブルーチンが呼び出される。エミュレートされたプロセッサ１の機能をエミュレートするエミュレーション・ソフトウェア機能は、例えば、「Ｃ」サブルーチン又はドライバにおいて、或いは好ましい実施形態の説明を理解した後で当業者の技術の範囲内にあるような特定のハードウェアのためにドライバを提供する他の何らかの方法で実装される。種々のソフトウェア及びハードウェア・エミュレーションの特許には、これらに限られるものではないが、Ｂｅａｕｓｏｌｅｉｌ他による「Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ｅｍｕｌａｔｉｏｎ」という名称の特許文献１、Ｓｃａｌｚｉ他による「Ｐｒｅｐｒｏｃｅｓｓｉｎｇ  ｏｆ  Ｓｔｏｒｅｄ  Ｔａｒｇｅｔ  Ｒｏｕｔｉｎｅｓ  ｆｏｒ  Ｅｍｕｌａｔｉｎｇ  Ｉｎｃｏｍｐａｔｉｂｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｏｎ  ａ  Ｔａｒｇｅｔ  Ｐｒｏｃｅｓｓｏｒ」という名称の特許文献２、Ｄａｖｉｄｉａｎ他による「Ｄｅｃｏｄｉｎｇ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｔｏ  Ｄｉｒｅｃｔｌｙ  Ａｃｃｅｓｓ  Ｅｍｕｌａｔｉｏｎ  Ｒｏｕｔｉｎｅｓ  ｔｈａｔ  Ｅｍｕｌａｔｅ  ｔｈｅ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の特許文献３、Ｇｏｒｉｓｈｅｋ他による「Ｓｙｍｍｅｔｒｉｃａｌ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  Ｂｕｓ  ａｎｄ  Ｃｈｉｐｓｅｔ  Ｕｓｅｄ  ｆｏｒ  Ｃｏｐｒｏｃｅｓｓｏｒ  Ｓｕｐｐｏｒｔ  Ａｌｌｏｗｉｎｇ  Ｎｏｎ−Ｎａｔｉｖｅ  Ｃｏｄｅ  ｔｏ  Ｒｕｎ  ｉｎ  ａ  Ｓｙｓｔｅｍ」という名称の特許文献４、Ｌｅｔｈｉｎ他による「Ｄｙｎａｍｉｃ  Ｏｐｔｉｍｉｚｉｎｇ  Ｏｂｊｅｃｔ  Ｃｏｄｅ  Ｔｒａｎｓｌａｔｏｒ  ｆｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｅｍｕｌａｔｉｏｎ  ａｎｄ  Ｄｙｎａｍｉｃ  Ｏｐｔｉｍｉｚｉｎｇ  Ｏｂｊｅｃｔ  Ｃｏｄｅ  Ｔｒａｎｓｌａｔｉｏｎ  Ｍｅｔｈｏｄ」という名称の特許文献５、Ｅｒｉｃ  Ｔｒａｕｔによる「Ｍｅｔｈｏｄ  ｆｏｒ  Ｅｍｕｌａｔｉｎｇ  Ｇｕｅｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  ｏｎ  ａ  Ｈｏｓｔ  Ｃｏｍｐｕｔｅｒ  Ｔｈｒｏｕｇｈ  Ｄｙｎａｍｉｃ  Ｒｅｃｏｍｐｉｌａｔｉｏｎ  ｏｆ  Ｈｏｓｔ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の特許文献６、及び他の多くが挙げられ、これらの参考文献は、当業者が利用可能な対象のマシンのための異なるマシン用に設計された命令形式のエミュレーションを達成する様々な既知の方法を示す。
【０１５１】
図１８において、ホスト・アーキテクチャのホスト・コンピュータ・システム５０００’をエミュレートする、エミュレートされたホスト・コンピュータ・システム５０９２の一例が提供される。エミュレートされたホスト・コンピュータ・システム５０９２では、ホスト・プロセッサ（ＣＰＵ）５０９１は、エミュレートされたホスト・プロセッサ（又は仮想ホスト・プロセッサ）であり、且つ、ホスト・コンピュータ５０００’のプロセッサ５０９１のものとは異なるネイティブな命令セット・アーキテクチャを有するエミュレーション・プロセッサ５０９３を含む。エミュレートされたホスト・コンピュータ・システム５０９２は、エミュレーション・プロセッサ５０９３がアクセス可能なメモリ５０９４を有する。例示的な実施形態において、メモリ５０９４は、ホスト・コンピュータ・メモリ５０９６の部分と、エミュレーション・ルーチン５０９７の部分とに区分化される。ホスト・コンピュータ・メモリ５０９６は、ホスト・コンピュータ・アーキテクチャに従い、エミュレートされたホスト・コンピュータ・システム５０９２のプログラムに利用可能である。エミュレーション・プロセッサ５０９３は、エミュレートされたプロセッサ５０９１のもの以外のアーキテクチャのアーキテクチャ化された命令セットのネイティブ命令を実行し、このネイティブ命令はエミュレーション・ルーチン・メモリ５０９７から取得されたものであり、且つ、エミュレーション・プロセッサ５０９３は、シーケンス及びアクセス／デコード・ルーチンにおいて取得される１つ又は複数の命令を用いることにより、ホスト・コンピュータ・メモリ５０９６の中のプログラム由来の実行のためのホスト命令にアクセスすることができ、このシーケンス及びアクセス／デコード・ルーチンは、アクセスされたホスト命令をデコードして、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを判断することができる。ホスト・コンピュータ・システム５０００’のアーキテクチャのために定められた、例えば、汎用レジスタ、制御レジスタ、動的アドレス変換、及びＩ／Ｏサブシステムのサポート、並びにプロセッサ・キャッシュといったファシリティを含む他のファシリティを、アーキテクチャ化ファシリティ・ルーチンによってエミュレートすることができる。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を高めるために、エミュレーション・プロセッサ５０９３において利用可能な（汎用レジスタ、及び仮想アドレスの動的変換といった）機能を利用することもできる。ホスト・コンピュータ５０００’の機能をエミュレートする際にプロセッサ５０９３を補助するために、専用のハードウェア及びオフ・ロード・エンジンを設けることもできる。
【０１５２】
本明細書で用いられる用語は、特定の実施形態を説明する目的のためのものにすぎず、本発明を限定することを意図したものではない。本明細書で用いられる場合、単数形「１つの（a）」、「１つの（an）」及び「その（the）」は、文脈が特に明示しない限り、複数形も同様に含むことを意図したものである。「含む（comprise）」及び／又は「含んでいる（comprising）」という用語は、本明細書で用いられる場合、記述された特徴、整数、ステップ、動作、要素、及び／又はコンポーネントの存在を指示するが、１つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び／又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【０１５３】
下記の特許請求の範囲におけるすべての機能付き手段（ミーンズ・プラス・ファンクション）又は機能付き工程（ステップ・プラス・ファンクション）の対応する構造、材料、動作、及び均等物は、もしあれば、その機能を、明確に請求されている他の特許請求された要素と組み合わせて実行するためのあらゆる構造、材料、又は動作を含むことが意図されている。本発明の説明は、例証及び説明のために提示されたものであり、網羅的であること又は本発明を開示された形態に限定することを意図したものではない。当業者には、本発明の範囲及び精神から逸脱しない多くの修正及び変形が明らかとなるであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明し、その他の当業者が企図される特定の使用に適した種々の修正を伴う種々の実施形態について本発明を理解できるように、選択され、説明された。
【符号の説明】
【０１５４】
１００、２００：コンピューティング環境
１０２：プロセッサ
１０４、２０４、５００２：メモリ
１０６、２０６：入力／出力デバイス
１０８、２０８：バス
２０２：ネイティブ中央演算処理ユニット
２１０：ネイティブ・レジスタ
２１２：エミュレータ・コード
２５０：ゲスト命令
２５２、５００４：命令フェッチ・ユニット
２５４：命令変換ユニット
２５６：ネイティブ命令
２６０：エミュレーション制御ルーチン
４００、７００：形式
４０２ａ、４０２ｂ、７０２ａ、７０２ｂ：オペコード・フィールド
４０４、７０４：長さフィールド
４０６、７０６：基底レジスタ・フィールド
４０８、７０８：変位フィールド
４１０、７１０：レジスタ・フィールド
４１２、７１２：マスク・フィールド
【図１】
2015507799.tif 000013
【図２】
2015507799.tif 000014
【図３】
2015507799.tif 000015
【図４】
2015507799.tif 000016
【図５】
2015507799.tif 000017
【図６】
2015507799.tif 000018
【図７】
2015507799.tif 000019
【図８】
2015507799.tif 000020
【図９】
2015507799.tif 000021
【図１０】
2015507799.tif 000022
【図１１】
2015507799.tif 000023
【図１２】
2015507799.tif 000024
【図１３】
2015507799.tif 000025
【図１４】
2015507799.tif 000026
【図１５】
2015507799.tif 000027
【図１６】
2015507799.tif 000028
【図１７】
2015507799.tif 000029
【図１８】
2015507799.tif 000030
【手続補正書】
【提出日】平成26年8月6日(2014.8.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、コンピュータに、
プロセッサにより、コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得することと、
前記マシン命令を実行することと、
を実行させるためのものであり、前記実行することは、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換することと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くことと、
を含む、コンピュータ・プログラム。
【請求項２】
前記オペコードは、第１の値である場合、長形式の１０進浮動小数点形式のソース及びゾーン形式の結果を示す、請求項１に記載のコンピュータ・プログラム。
【請求項３】
前記オペコードは、第２の値である場合、拡張形式の１０進浮動小数点形式のソース及びゾーン形式の結果を示す、請求項１または２に記載のコンピュータ・プログラム。
【請求項４】
前記マスク・フィールドは、前記第２オペランドが符号フィールドを有するかどうかを示すのに用いられる符号制御を含む、請求項１〜３のいずれか１項に記載のコンピュータ・プログラム。
【請求項５】
前記マスク・フィールドは、前記第２オペランドのゾーン・フィールドについての値を判断するのに用いられるゾーン制御を含む、請求項１〜４のいずれか１項に記載のコンピュータ・プログラム。
【請求項６】
前記マスク・フィールドは、正符号を符号化するのに用いられる正符号コード制御を含む、請求項１〜５のいずれか１項に記載のコンピュータ・プログラム。
【請求項７】
前記マスク・フィールドは、前記第２オペランド内に置かれる結果の符号を判断するのに用いられる正・ゼロ強制制御を含む、請求項１〜６のいずれか１項に記載のコンピュータ・プログラム。
【請求項８】
前記マスク・フィールドは、ゾーン・フィールド及び符号フィールドを含み、前記コンピュータ・プログラムは、前記コンピュータに、前記ゾーン・フィールド及び前記符号フィールドの少なくとも１つを用いて、前記第２オペランド内に格納される前記結果の前記符号フィールド及びフィールド・コードの少なくとも１つについての値を判断することをさらに実行させるためのものである、請求項１〜７のいずれか１項に記載のコンピュータ・プログラム。
【請求項９】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁の数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１〜８のいずれか１項に記載のコンピュータ・プログラム。
【請求項１０】
前記実行することは、少なくとも１つの浮動小数点レジスタから前記第１オペランドの前記少なくとも一部分を読み出すことを含み、前記結果を含むための前記第２オペランドはメモリ内に存在する、請求項１〜９のいずれか１項に記載のコンピュータ・プログラム。
【請求項１１】
中央演算処理ユニットにおいてマシン命令を実行するためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサと、
を含み、前記コンピュータ・システムは方法を実行するように構成され、前記方法は、
コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得することと、
前記マシン命令を実行することと、
を含み、前記実行することは、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換することと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くことと、
を含む、コンピュータ・システム。
【請求項１２】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
中央演算処理ユニットにおいてマシン命令を実行するための方法であって、コンピュータが、
プロセッサにより、コンピュータ・アーキテクチャに従ってコンピュータ実行のために定められ、且つ、
１０進浮動小数点形式からゾーン形式への変換関数を識別するオペコードを提供するための少なくとも１つのオペコード・フィールドと、
第１オペランドを含む第１のレジスタを指定する第１のレジスタ・フィールドと、
第２のレジスタ・フィールド及び変位フィールドであって、第２のレジスタ・フィールドによって指定される第２のレジスタの内容が変位フィールドの内容と組み合わせられて第２オペランドのアドレスを形成する、第２のレジスタ・フィールド及び変位フィールドと、
マシン命令の実行中に用いられる１又は複数の制御を含むマスク・フィールドと、
を含む、実行のためのマシン命令を取得するステップと、
前記マシン命令を実行するステップと、
を実行し、前記実行するステップでは、コンピュータが、
１０進浮動小数点形式の前記第１オペランドの少なくとも一部分をゾーン形式に変換するステップと、
前記変換の結果を前記第２オペランドの前記アドレスによって指定された位置に置くステップと、
を実行する、方法。
【請求項１４】
前記マスク・フィールドは、前記第２オペランドが符号フィールドを有するかどうかを示すのに用いられる符号制御と、前記第２オペランドのゾーン・フィールドについての値を判断するのに用いられるゾーン制御と、正符号を符号化するのに用いられる正符号コード制御と、前記第２オペランド内に置かれる結果の符号を判断するのに用いられる正・ゼロ強制制御とを含む、請求項１３に記載の方法。
【請求項１５】
前記マシン命令は、変換される前記第１オペランドの仮数の右端桁の数、及び前記第２オペランドの長さの少なくとも１つを指定する長さフィールドを含む、請求項１３または１４に記載の方法。
【国際調査報告】
2015507799.tif 000031