(57)【要約】【課題】機械命令を実行してデータをパック１０進数形式から１０進浮動小数点形式に変換するための方法を提供する。【解決手段】方法は、パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取る。方法は、パック１０進数形式のデータを１０進浮動小数点形式に変換する。方法は、１０進浮動小数点形式に変換されたデータを、プロセッサの１つまたは複数のターゲットのレジスタに書き込む。【選択図】図３
2017531860.tif 000002
【特許請求の範囲】
【請求項１】
機械命令を実行することによってデータをある形式から別の形式に変換する方法であって、
パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取ることと、
前記プロセッサによって、前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、前記プロセッサの１つまたは複数のターゲットのレジスタに書き込むことと
を含む、方法。
【請求項２】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１に記載の方法。
【請求項３】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項１に記載の方法。
【請求項４】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、前記機械命令が実行される、請求項３に記載の方法。
【請求項５】
前記機械命令に従って前記読み取り、前記変換、および前記書き込みが実行される、請求項１に記載の方法。
【請求項６】
前記機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項５に記載の方法。
【請求項７】
前記機械命令が制御ビットを備え、前記変換することが、制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項５に記載の方法。
【請求項８】
データをある形式から別の形式に変換するためのコンピュータ・プログラム製品であって、
機械命令が具現化されているコンピュータ可読記憶媒体を備え、前記機械命令が、プロセッサに方法を実行させるように、前記プロセッサによって読み取り可能であり、
パック１０進数形式のデータを、通信可能に前記プロセッサに結合されたメモリから読み取ることと、
前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、前記プロセッサの１つまたは複数のターゲットのレジスタに書き込むことと
を含む、コンピュータ・プログラム製品。
【請求項９】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項８に記載のコンピュータ・プログラム製品。
【請求項１１】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、前記機械命令が実行される、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１２】
特定の機械命令に従って前記読み取り、前記変換、および前記書き込みが実行される、請求項８に記載のコンピュータ・プログラム製品。
【請求項１３】
前記特定の機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記特定の機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記特定の機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１４】
前記特定の機械命令が制御ビットを備え、前記変換することが、前記制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１２に記載のコンピュータ・プログラム製品。
【請求項１５】
データをある形式から別の形式に変換するためのコンピュータ・システムであって、
パック１０進数形式のデータを含んでいるメモリと、
機械命令を実行して方法を実行するように構成されたプロセッサとを備え、前記方法が、
パック１０進数形式のデータを、通信可能に前記プロセッサに結合された前記メモリから読み取ることと、
前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、１つまたは複数のターゲットのレジスタに書き込むこととを含む、コンピュータ・システム。
【請求項１６】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項１５に記載のコンピュータ・システム。
【請求項１８】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、前記機械命令が実行される、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項１５に記載のコンピュータ・システム。
【請求項２０】
前記機械命令が制御ビットを備え、前記変換することが、前記制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１５に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本出願は、同時に出願された米国特許出願第１４／５０２０８２号「MACHINE INSTRUCTIONS FOR CONVERTING FROM DECIMAL FLOATING POINTFORMAT TO PACKED DECIMAL FORMAT」に関する。
【０００２】
本発明は、一般に、データをある形式から別の形式に変換することに関し、さらに詳細には、機械命令を実行することによってデータをパック１０進数形式と１０進浮動小数点形式の間で変換することに関する。
【背景技術】
【０００３】
従来、パック１０進数形式でデータベースに格納された１０進数（すなわち、１０を底とする）データの処理に使用される演算は、ストレージに対して直接実行される。このような演算は、ストレージ間１０進演算と呼ばれる。ストレージ間演算の性能は、メモリ・インターフェイスの待ち時間によって制限される。これは、前の演算の結果に依存する各演算が、開始する前に、前の演算の結果がメモリに書き込まれるまで待機しなければならないためである。メモリ待ち時間とプロセッサの速度の間のギャップが増え続けているため、これらの演算の相対的性能は低下し続けている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願第１４／５０２０８２号
【非特許文献】
【０００５】
【非特許文献１】z/ArchitecturePrinciples of Operation、ＳＡ２２-７８３２-０９（第１０版、２０１２年９月）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
機械命令を実行してデータをパック１０進数形式から１０進浮動小数点形式に変換するための方法を提供する。
【課題を解決するための手段】
【０００７】
本発明の態様は、機械命令を実行するためのコンピュータ・プログラム製品、方法、およびシステムを含む。本発明の１つの態様によれば、機械命令を実行することによってデータをある形式から別の形式に変換する方法が提供される。方法は、パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取る。方法は、パック１０進数形式のデータを１０進浮動小数点形式に変換する。方法は、１０進浮動小数点形式に変換されたデータを、プロセッサの１つまたは複数のターゲットのレジスタに書き込む。
【０００８】
本発明の別の態様によれば、データをある形式から別の形式に変換するためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、機械命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み取ることができる機械命令は、処理回路で方法を実行する。方法は、パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取る。方法は、パック１０進数形式のデータを１０進浮動小数点形式に変換する。方法は、１０進浮動小数点形式に変換されたデータを、プロセッサの１つまたは複数のターゲットのレジスタに書き込む。
【０００９】
本発明のさらに別の態様によれば、ある形式のデータを別の形式に変換するためのコンピュータ・システムが提供される。このコンピュータ・システムは、パック１０進数形式のデータを含んでいるメモリを備える。このコンピュータ・システムは、機械命令を実行して方法を実行するように構成されたプロセッサをさらに備える。方法は、パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取る。方法は、パック１０進数形式のデータを１０進浮動小数点形式に変換する。方法は、１０進浮動小数点形式に変換されたデータを、プロセッサの１つまたは複数のターゲットのレジスタに書き込む。
【００１０】
ここで、添付の図面を例として参照し、本発明の実施形態について説明する。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態に記載されたコンピュータ・システムのブロック図を示す図である。
【図２】本発明の実施形態に記載された機械命令の形式を示す図である。
【図３】本発明の実施形態に記載されたデータを変換するための処理フローを示す図である。
【図４】本発明の実施形態に記載された機械命令の形式を示す図である。
【図５】本発明の実施形態に記載されたデータを変換するための処理フローを示す図である。
【発明を実施するための形態】
【００１２】
浮動小数点数に関するＩＥＥＥ規格（ＩＥＥＥ  ７５４−２００８）には、１０進浮動小数点演算および数値形式に関する規格が含まれている。この規格は、従来のコンピューティング・システムによってサポートされている。しかし、それらの従来のコンピューティング・システムでは、浮動小数点演算は、パック１０進数形式のデータをあまり適切に処理しない。これは、パック１０進数形式のデータを処理するためのソフトウェア・ルーチンが、手動で開発される必要があるため、それらのシステムで容易に使用することができないからであり、また、データをパック１０進数形式から１０進浮動小数点形式に変換するための効率的な方法がなかったからである。
【００１３】
本発明の実施形態は、ストレージ間演算に関連するメモリ・オーバーヘッドを発生させることなく、データをパック１０進数形式と１０進浮動小数点形式の間で効率的に変換する。具体的には、本発明の実施形態は、データをパック１０進数形式から１０進浮動小数点形式に変換するための２つの機械命令の例を提供する。これら２つの命令の例は、本明細書ではパック形式から長形式への変換命令（long Convert from Packed instruction）（ＣＤＰＴ）およびパック形式から拡張形式への変換命令（extended Convert from Packed instruction）（ＣＸＰＴ）と呼ばれる。ＣＤＰＴでは、パック１０進数形式のデータ（例えば、最大１６桁）をメモリから読み取り、ゼロ指数を使用してデータを適切な１０進浮動小数点形式に変換し、１０進浮動小数点形式のデータをターゲットの浮動小数点レジスタに書き込む。ＣＸＰＴでは、パック１０進数形式のデータ（例えば、最大３４桁）をメモリから読み取り、ゼロ指数を使用してデータを適切な１０進浮動小数点形式に変換し、１０進浮動小数点形式のデータをターゲットの浮動小数点レジスタ・ペアに書き込む。 
【００１４】
本発明の実施形態は、データを１０進浮動小数点形式からパック１０進数形式に変換するための命令に関して、他の２つの機械命令の例をさらに提供する。これら２つの命令の例は、本明細書では長形式からパック形式への変換命令（long Convert to Packed instruction）（ＣＰＤＴ）および拡張形式からパック形式への変換命令（extended Convert to Packed instruction）（ＣＰＸＴ）と呼ばれる。ＣＰＤＴでは、１０進浮動小数点形式のデータを指定された浮動小数点レジスタから読み取り、指定された浮動小数点レジスタのデータの仮数をパック１０進数形式に変換し、データをターゲットのメモリ位置に書き込む。ＣＰＸＴでは、浮動小数点レジスタ・ペア内の拡張精度１０進浮動小数点データをパック１０進数形式に変換し、データをターゲットのメモリ位置に格納する。
【００１５】
従来技術で知られているように、パック１０進数形式では、数値は一連の８ビット・バイトで表される。そのすべてのバイトの４ビットが１つの１０進数に割り当てられ、各バイトが２つの１０進数を表すことができる。４ビット・パターンの１つは符号（正または負）に割り当てられる。パック１０進数は、固定された位置での暗黙の小数点を仮定して、適用される言語によって課される上限までの指定された長さを持つことができる。
【００１６】
従来技術で知られているように、１０進浮動小数点形式は、パック１０進数形式とは異なる用途を対象にしている。１０進数は、よりコンパクトな別の１０進浮動小数点形式の表現を使用してエンコードされる。１０進浮動小数点データは、３つのデータ形式（短形式、長形式、拡張形式）のいずれかで表すことができる。３つの各データ形式の内容は、エンコードされた情報を表す。有限数をＮａＮ（Ｎｏｔ−ａ−Ｎｕｍｂｅｒ）および無限大から区別するために、特殊コードが割り当てられる。有限数では、形式においてバイアス指数が使用される。３つの形式ごとに、右単位表示指数（right-units-view exponent）には、左単位表示指数のバイアスとは異なるバイアスが使用される。バイアス指数は符号なし数値である。バイアス指数は、組合せフィールド内の仮数の左端の桁を使用してエンコードされる。仮数の残りの桁は、エンコードされる後続の仮数フィールド内でエンコードされる。
【００１７】
１０進浮動小数点短形式のオペランド（すなわち、データ）が浮動小数点レジスタに読み込まれた場合、そのオペランドはレジスタの左半分を占め、右半分は変更されない。１０進浮動小数点倍精度形式（すなわち、１０進浮動小数点長形式）のオペランドが浮動小数点レジスタに読み込まれた場合、そのオペランドはレジスタ全体を占める。１０進浮動小数点拡張形式のオペランドは、浮動小数点レジスタ・ペアを占める。左側の６４ビットは、ペアのうちの下位番号が付けられたレジスタ全体を占め、右側の６４ビットは、上位番号が付けられたレジスタ全体を占める。符号ビットは、各形式のビット０にあり、例えば正数の場合に０になり、負数の場合に１になる。
【００１８】
有限数の場合、組合せフィールドには、バイアス指数および仮数の左端の桁が含まれる。ＮａＮおよび無限大の場合、組合せフィールドには、ＮａＮおよび無限大を識別するコードが含まれる。形式のビット１〜５が０００００〜１１１０１の範囲内にある場合、オペランドは有限数である。バイアス指数の左端の２ビットおよび仮数の左端の桁は、形式のビット１〜５内でエンコードされる。組合せフィールドのビット６から末尾までには、バイアス指数の残りの部分が含まれる。形式フィールドのビット１〜５が１１１１０である場合、オペランドは無限大である。形式のビット５の右側にある組合せフィールド内のすべてのビットは、無限大のための予備フィールドを構成する。ソースの無限大では、予備フィールド内の非ゼロ値が許容される。結果の無限大では、予備フィールドは０に設定される。形式のビット１〜５が１１１１１である場合、オペランドはＮａＮであり、ビット６（ＳＮａＮビットと呼ばれる）は、ＱＮａＮ（ｑｕｉｅｔ  ＮａＮ）をＳＮａＮ（ｓｉｇｎａｌｉｎｇ  ＮａＮ）からさらに区別する。ビット６が０である場合、このビットはＱＮａＮであり、そうでない場合、このビットはＳＮａＮである。形式のビット６の右側にある組合せフィールドのすべてのビットは、ＮａＮのための予備フィールドを構成する。ソースのＮａＮでは、予備フィールド内の非ゼロ値が許容される。結果のＮａＮでは、予備フィールドは０に設定される。
【００１９】
図１に、本発明の一部の実施形態に従ってパック１０進数形式と１０進浮動小数点形式の間でデータを効率的に変換するためのシステム１００を示す。具体的には、この図は、システム１００がプロセッサ１０５、メモリ１１０、および入出力（Ｉ／Ｏ）インターフェイス１１５を含むことを示しており、図と説明を簡単にするために、それ以外のコンポーネント（例えば、ネットワーク・インターフェイス）は示されていない。それらのその他のコンポーネントは、本発明のさまざまな実施形態を理解するために不要であると理解されるべきである。プロセッサ１０５、メモリ１１０、およびＩ／Ｏインターフェイス１１５は、１つまたは複数のバス１２０を介して互いに結合される。
【００２０】
従来技術で知られているように、プロセッサまたはプロセッサ・ファミリ（８０８０およびｘ８６ファミリ、またはＩＢＭ  Ｓｙｓｔｅｍ  ｚサーバ・ファミリなど）は、機械命令の独自のセットを備えている。例えば、ＩＢＭ  Ｓｙｓｔｅｍ  ｚサーバ・ファミリの命令セット（ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ命令セットと呼ばれる）は、参照によりその全体が本明細書に組み込まれるＩＢＭの公開文献「z/Architecture Principles of Operation」、ＳＡ２２-７８３２-０９（第１０版、２０１２年９月）で規定されている。機械命令はビットのパターンであり、設計ごとに、機械に対する異なるコマンドに対応している。ほとんどの場合、命令セットは、同じアーキテクチャを使用するプロセッサのクラスに固有である。機械命令セットは、命令の長さがすべて同じであることもあれば、可変長の命令を含むこともある。ほとんどの命令は、基本命令タイプ（算術、論理、ジャンプなど）と実際の演算（加算または比較など）を指定する１つまたは複数のオペコード・フィールド、およびオペランドのタイプ、アドレス指定モード、アドレス指定オフセットまたはインデックス、あるいは実際の値自体を提供できるその他のフィールドを含んでいる。つまり、各機械命令は、読み込み、ジャンプ、あるいはレジスタまたはメモリ内のデータの単位に対する算術論理演算装置（ＡＬＵ）の演算など、極めて具体的なタスクを実行するためのものである。
【００２１】
プロセッサ１０５は、ＣＤＰＴ、ＣＸＰＴ、ＣＰＤＴ、およびＣＰＸＴ（図１には示されていない）を含んでいる機械命令を実行するように構成されたプロセッサである。つまり、プロセッサ１０５は、ＣＤＰＴまたはＣＸＰＴを実行する場合、パック１０進数形式のデータをメモリ１１０から読み取り、そのデータを適切な１０進浮動小数点形式に変換し、１０進浮動小数点形式のデータをレジスタ１２５のターゲットの浮動小数点レジスタまたはターゲットの浮動小数点レジスタ・ペアに書き込む。プロセッサ１０５は、ＣＰＤＴおよびＣＰＸＴを実行する場合、レジスタ１２５のソースの浮動小数点レジスタまたは浮動小数点レジスタ・ペア内の１０進浮動小数点形式のデータを読み取り、１０進浮動小数点形式のデータをパック１０進数形式に変換し、そのデータをメモリ１１０内のターゲットのメモリ位置に格納する。プロセッサ１０５のレジスタ１２５は、１つまたは複数の汎用レジスタまたは１つまたは複数の専用レジスタ（浮動小数点レジスタを含む）あるいはその両方を含んでいる。
【００２２】
Ｉ／Ｏインターフェイス１１５は、システム１００へのＩ／Ｏデバイスの接続をサポートする。Ｉ／Ｏインターフェイス１１５を介してシステム１００に接続できるＩ／Ｏデバイスは、キーボードおよびディスプレイ、ならびにディスク、直接アクセス・ストレージ・デバイス、コンパクト・ディスク、およびその他のメモリ媒体を含む。一部の実施形態では、プロセッサ１０５は、Ｉ／Ｏインターフェイス１１５を介して、システム１００の外部にあるメモリ（図に示されていない）内のパック１０進数形式のデータの格納および取り出しを行う。
【００２３】
図２は、ＣＤＰＴおよびＣＸＰＴの場合の形式例２００を示している。形式２００は、オペコード・フィールド２０５、長さフィールド（Ｌ２）２１０、ベース・レジスタ・フィールド（Ｂ２）２１５、置換フィールド（Ｄ２）２２０、レジスタ・フィールド（Ｒ１）２２５、マスク・フィールド（Ｍ３）２３０、およびオペコード・フィールド２３５を含んでいる。オペコード・フィールド２３５は、より長いオペコード（例えば、２バイトのオペコード）を保持するためのオペコード・フィールド２０５の拡張である。形式２００の下に示された数字は、ビット・インデックスである。図に示されているように、一部の実施形態の形式２００は、４８ビットの長さを持つ。
【００２４】
オペコード・フィールド２０５は、実行される演算を指定するオペコード（例えば、１６進数の値）を保持する。事前に定義されたオペコード（例えば、ＥＤＡＥｈｅｘ）は、形式２００によって表された機械命令がＣＤＰＴであることを指定する。事前に定義された別のオペコード（例えば、ＥＤＡＦｈｅｘ）は、機械命令がＣＸＰＴであることを指定する。ＣＤＰＴまたはＣＸＰＴがプロセッサによって実行された場合、プロセッサはパック１０進数形式の第２のオペランドを１０進浮動小数点形式に変換する。この変換の結果は、第１のオペランドの位置（すなわち、レジスタまたはレジスタ・ペア）に配置される。
【００２５】
長さフィールド２１０は、第２のオペランド（すなわち、パック１０進数形式のデータ）の長さ（例えば、バイト単位）を指定する。一部の実施形態では、長さフィールド２１０は、ＣＤＰＴの場合は０〜８の長さ（すなわち、１〜９バイトの長さ）のコード、ＣＸＰＴの場合は０〜１７の長さ（すなわち、１〜１８バイトの長さ）のコードを含む。つまり、長さフィールド２１０が示すバイト数は、パック１０進数形式のデータが含んでいる桁数に対応する。
【００２６】
ベース・レジスタ・フィールド２１５は、汎用レジスタを指定する。ベース・レジスタ・フィールド２１５によって指定された汎用レジスタの内容は、置換フィールド２２０の内容に加算される。置換フィールド２２０は、第２のオペランドのアドレスを形成するために、ベース・レジスタ・フィールド２１５によって指定された汎用レジスタの内容に加算される内容を含んでいる。
【００２７】
レジスタ・フィールド２２５は、浮動小数点レジスタを指定する。指定されたレジスタの内容は、第１のオペランド（すなわち、１０進浮動小数点形式に変換されたデータ）である。第１のオペランドを含んでいるレジスタは、第１のオペランドの位置と見なされる。
【００２８】
マスク・フィールド２３０は、４ビット（例えば、ビット０〜ビット３）を含んでいる。一部の実施形態では、マスク・フィールド２３０は符号制御（例えば、ビット）を含んでいる。マスク・フィールド２３０のビット０は、符号制御の一例である。符号制御がオフの場合（例えば、符号制御ビットが０に設定されている場合）、第２のオペランドには符号桁が含まれず、１０進浮動小数点の第１のオペランドの結果の符号ビットは、正符号を示す値（例えば、０）に設定される。符号制御がオンの場合（例えば、符号制御ビットが１に設定されている場合）、第２のオペランドは符号桁を含む。第２のオペランドの右端のバイトの右側４ビットの位置が、符号である。第２のオペランドの符号桁が正の値を示す場合、１０進浮動小数点の第１のオペランドの結果の符号ビットは、正符号を示す値（例えば、０）に設定される。第２のオペランドの符号フィールドが負の値を示す場合、１０進浮動小数点の第１のオペランドの結果の符号ビットは、負符号を示す値（例えば、１）に設定される。
【００２９】
一部の実施形態では、マスク・フィールド２３０は符号桁無視制御（ignore-sign-digit control）（例えば、ビット）を含んでいる。マスク・フィールド２３０のビット３が、符号桁無視制御の一例である。この符号桁無視制御は、符号制御がオンの場合にのみ使用される。符号制御がオフの場合、符号桁無視制御は無視される。符号桁無視制御がオフの場合（例えば、符号桁無視が０に設定された場合）、アクションは実行されない。符号桁無視制御がオンの場合（例えば、符号桁無視が１に設定された場合）、第２のオペランドの符号桁は無視される。つまり、第２のオペランドの符号桁の無効性はチェックされず、１０進浮動小数点の第１のオペランドの結果の符号ビットは、正符号を示す０に設定される。
【００３０】
第２のオペランド内で無効な桁または符号コードが検出された場合、または未使用の桁が非ゼロである場合、例外が認識される。符号制御および符号桁無視制御が１である場合、符号桁に対して符号コード・チェックは実行されない。
【００３１】
例外が検出された場合、オペコード・フィールド２０５によって指定された機械命令は実行されない。ＣＤＰＴの場合、長さフィールド２１０が８を超えると、プロセッサは機械命令の実行を停止して例外を返す。ＣＸＰＴの場合、長さフィールド２１０が１７を超えるか、またはレジスタ・フィールド２２５が無効な浮動小数点レジスタ・ペアを指定すると、プロセッサは機械命令の実行を停止して例外を返す。
【００３２】
図３は、本発明の一部の実施形態に従って機械命令を実行するための処理フローを示す。一部の実施形態では、システム１００（具体的には図１のプロセッサ１０５）は、図３に示された処理フローを実行する。
【００３３】
ブロック３１０で、プロセッサ１０５は、受信された機械命令を検証し、例外を返して機械命令の実行を停止するかどうかを決定する。具体的には、プロセッサ１０５は、受信された機械命令が例外の条件を満たすかどうかを決定する。例えば、オペコード・フィールド２０５が、受信された機械命令がＣＤＰＴであることを示している場合、プロセッサ１０５は、長さフィールド２１０が８を超えているかどうかを決定する。長さフィールド２１０が８を超えている場合、プロセッサ１０５は、例外条件が満たされていることを決定する。さらに、オペコード・フィールド２０５が、受信された機械命令がＣＸＰＴであることを示している場合、プロセッサ１０５は、長さフィールド２１０が１７を超えているかどうかを決定する。長さフィールド２１０が１７を超えている場合、プロセッサ１０５は、例外条件が満たされていることを決定する。さらに、オペコード・フィールド２０５が、受信された機械命令がＣＰＸＴであることを示している場合、プロセッサ１０５は、レジスタ・フィールド２２５が無効な浮動小数点レジスタ・ペアを指定しているかどうかも決定する。レジスタ・フィールド２２５が無効な浮動小数点レジスタ・ペアを指定している場合、プロセッサ１０５は、例外条件が満たされていることを決定する。
【００３４】
プロセッサ１０５が、ブロック３１０で例外条件が満たされていないことを決定した場合、プロセッサ１０５は、下でさらに説明されるブロック３２０に進む。プロセッサ１０５が、ブロック３１０で例外条件が満たされていることを決定した場合、プロセッサ１０５は、ブロック３８０で機械命令の実行を停止し、例外を返す。つまり、プロセッサ１０５は、受信された機械命令のオペコード・フィールド２０５によって指定された演算を実行しない。
【００３５】
ブロック３２０で、プロセッサ１０５は、形式２００のフィールドによって指定されたパック１０進数形式のデータをメモリ１１０から読み取る。ブロック３３０で、プロセッサ１０５は、パック１０進数形式の１０進数の有効性をチェックする。１０進数が無効である場合、プロセッサ１０５はブロック３８０に進んで機械命令の実行を停止し、例外を返す。ブロック３４０で、プロセッサ１０５は、パック１０進数形式の符号の有効性をチェックする。符号が無効である場合、プロセッサ１０５はブロック３８０に進んで機械命令の実行を停止し、例外を返す。
【００３６】
パック１０進数形式の１０進数および符号が有効である場合、プロセッサ１０５はブロック３５０に進んでデータ内の各桁を１０進浮動小数点形式に変換する。具体的には、機械命令がＣＤＰＴである場合、プロセッサ１０５は各桁を１０進浮動小数点倍精度形式（すなわち、１０進浮動小数点長形式）に変換する。機械命令がＣＸＰＴである場合、プロセッサ１０５は各桁を１０進浮動小数点拡張形式に変換する。
【００３７】
ブロック３６０で、プロセッサ１０５は変換された数値の符号を設定する。具体的には、一部の実施形態において、プロセッサ１０５は形式２００の符号制御ビットをチェックする。符号制御がオフの場合、パック１０進数形式のデータは符号フィールドを含まず、プロセッサ１０５は、１０進浮動小数点データの符号ビットを、正符号を示す値（例えば、０）に設定する。符号制御がオンの場合、パック１０進数形式のデータは符号桁を含む。この符号桁が正の値を示している場合、プロセッサ１０５は、１０進浮動小数点データ内のデータの符号ビットを、正符号を示す値（例えば、０）に設定する。この符号桁が負の値を示している場合、プロセッサ１０５は、１０進浮動小数点データ内のデータの符号ビットを、負符号を示す値（例えば、１）に設定する。
【００３８】
ブロック３６０で、符号制御がオンの場合に、プロセッサ１０５は符号桁無視制御もチェックする。つまり、符号制御がオフの場合、プロセッサ１０５は符号桁無視制御を使用しない。符号桁無視制御がオフの場合、プロセッサ１０５はアクションを実行しない。符号桁無視制御がオンの場合、パック１０進数形式のデータの符号桁は無視される。つまり、プロセッサ１０５は、パック１０進数形式のデータの符号桁の無効性をチェックせず、１０進浮動小数点形式のデータの符号ビットを、正符号を示す値（例えば、０）に設定する。
【００３９】
ブロック３７０で、プロセッサ１０５は、データと符号を１０進浮動小数点形式レジスタに書き込む。具体的には、機械命令がＣＤＰＴである場合、プロセッサ１０５はデータをターゲットの１０進浮動小数点レジスタに書き込む。機械命令がＣＸＰＴである場合、プロセッサ１０５は、データをプロセッサ１０５のターゲットの１０進浮動小数点レジスタのペアに書き込む。
【００４０】
上記では、ストレージ間１０進演算を大幅に改善する手段を提供する２つの命令ＣＤＰＴおよびＣＸＰＴについて詳細に説明した。パック１０進数形式のデータは、加算（ＡＰ）、減算（ＳＰ）、乗算（ＭＰ）、または除算（ＤＰ）などの算術演算によって処理される。それらの算術演算は、開始可能になる前に、前の演算の格納が完了するのを待機しなければならず、その後、それらの算術演算が結果をメモリに格納する。演算におけるメモリの依存関係は、性能を左右する。比較、シフト、および符号操作などのその他の演算も、ストレージ間演算ではなくレジスタベース演算として実行され、それによって性能を向上させる。
【００４１】
新しい命令ＣＤＰＴおよびＣＸＰＴを採用する（例えば、ＣＤＰＴおよびＣＸＰＴを有効にしてプログラムのソース・コードを再コンパイルする）ことで、パック１０進数形式の算術演算は、等価な１０進浮動小数点形式の算術演算（例えば、ＡＤ／ＸＴＲ、ＳＤ／ＸＴＲ、ＭＤ／ＸＴＲ、ＤＴ／ＸＴＲ）に置き換えられ、それによって、オペランド（すなわち、データ）がメモリに格納されたり、メモリから読み取られたりするのを待機することがなくなる。ＡＤ／ＸＴＲ、ＳＤ／ＸＴＲ、ＭＤ／ＸＴＲ、およびＤＴ／ＸＴＲは、ＡＰ、ＳＰ、ＭＰ、またはＤＰと同様の長さの時間で動作するが、メモリ・オーバーヘッドがない。
【００４２】
ＣＤＰＴ命令およびＣＸＰＴ命令は、データをメモリ内のパック１０進数形式からレジスタ内の１０進浮動小数点形式に直接変換するための効率的な手段を提供する。ＣＤＰＴおよびＣＸＰＴを使用して、１ステップで、データをパック１０進数形式から１０進浮動小数点形式に変換することができる。従来、パック１０進数形式のデータは、汎用レジスタに読み込まなければならない。しかし、従来の命令セット・アーキテクチャでは、現在、長さが制御された読み込みが存在しないため、多くの場合、ワード、ハーフワード、およびバイトの読み込み演算が混在する必要がある。その後、他の機械命令を使用して、汎用レジスタ／汎用レジスタ・ペア内のパック１０進数形式のデータを、ターゲットの１０進浮動小数点形式に変換することができる。一方、ＣＤＰＴまたはＣＸＰＴを使用すると、データをメモリ内のパック１０進数形式からターゲットのレジスタ内の１０進浮動小数点形式に、１ステップで変換することができる。
【００４３】
ディスクまたはテープに格納されたパック１０進数形式のデータは、信頼できる符号を含むことができない場合がある。したがって、ＣＤＰＴ命令およびＣＸＰＴ命令の使用が有効化されていない従来のコンパイラは、符号桁を強制的にＦｈｅｘにするために、オペランドごとにＯＲ  ＩＭＭＥＤＩＡＴＥ（ＯＩ）命令を挿入する。この入力オペランドの追加クリーンアップによって、余分なメモリ待ち時間が発生する。これに対して、ＣＤＰＴおよびＣＸＰＴを採用することで、代わりに符号桁無視ビットを設定し、パック１０進数形式から１０進浮動小数点形式への形式変換の一部として正の値を強制的に生成することによって、これらのＯＩ命令をなくすことができる。
【００４４】
パック１０進数から１０進浮動小数点への変換命令（ＣＤＰＴおよびＣＸＰＴ）に加えて、ＣＰＤＴ命令およびＣＰＸＴ命令が提供される。ＣＰＤＴおよびＣＰＸＴは、データを浮動小数点レジスタまたは浮動小数点レジスタ・ペアに保持された１０進浮動小数点形式からパック１０進数形式へ変換し、変換されたデータをメモリに直接格納する効率的な手段を提供する。
【００４５】
図４は、ＣＰＤＴおよびＣＰＸＴの場合の形式４００の例を示している。形式４００は、オペコード・フィールド４０５、長さフィールド（Ｌ２）４１０、ベース・レジスタ・フィールド（Ｂ２）４１５、置換フィールド（Ｄ２）４２０、レジスタ・フィールド（Ｒ１）４２５、マスク・フィールド（Ｍ３）４３０、およびオペコード・フィールド４３５を含む。形式４００の下に示された数字は、ビット・インデックスである。図に示されているように、一部の実施形態の形式４００は、４８ビットの長さを持つ。
【００４６】
オペコード・フィールド４０５は、実行される演算を指定するオペコード（例えば、１６進数の値）を保持する。事前に定義されたオペコード（例えば、ＥＤＡＣｈｅｘ）は、形式４００によって表された機械命令がＣＰＤＴであることを指定する。事前に定義された別のオペコード（例えば、ＥＤＡＤｈｅｘ）は、機械命令がＣＰＸＴであることを指定する。ＣＰＤＴまたはＣＰＸＴがプロセッサによって実行された場合、プロセッサは、第１のオペランド（すなわち、１０進浮動小数点形式のデータ）の仮数桁および第１のオペランドの符号ビットをパック１０進数形式に変換する。プロセッサは、バイアスを掛ける前に、組合せフィールド内の指数を無視し、指数の値が０であるかのように扱う。
【００４７】
長さフィールド４１０は、第１のオペランドの右端の仮数桁を含んでいるバイトの数を指定する。一部の実施形態では、長さフィールド４１０は、ＣＰＤＴの場合は０〜８の長さコード（すなわち、１〜９バイトの長さ）、ＣＰＸＴの場合は０〜１７の長さコード（すなわち、１〜１８バイトの長さ）を含む。また、長さフィールド４１０が示すバイト数は、パック１０進数形式に変換されたデータが持つ桁数に対応する。ＣＰＤＴまたはＣＰＸＴがプロセッサによって実行された場合、プロセッサは、長さフィールド４１０によって示された数のバイトを第２のオペランドの位置に配置する。パック１０進数形式に変換されたデータのすべてのバイトを埋めるだけの十分な仮数桁が存在しない場合、プロセッサは０の桁を左端の桁として仮数に追加する。
【００４８】
ベース・レジスタ・フィールド４１５は、汎用レジスタを指定する。ベース・レジスタ・フィールド４１５によって指定された汎用レジスタの内容は、置換フィールド４２０の内容に加算される。置換フィールド４２０は、第２のオペランドのアドレスを形成するために、ベース・レジスタ・フィールド４１５によって指定された汎用レジスタの内容に加算される内容を含んでいる。
【００４９】
レジスタ・フィールド４２５は、レジスタを指定する。指定されたレジスタの内容は、第１のオペランド（すなわち、１０進浮動小数点形式のソース・データ）である。第１のオペランドを含んでいるレジスタは、第１のオペランドの位置と見なされる。
【００５０】
マスク・フィールド４３０は、４ビット（例えば、ビット０〜ビット３）を含んでいる。一部の実施形態では、マスク・フィールド４３０は符号制御（例えば、ビット）を含んでいる。マスク・フィールド４３０のビット０は、符号制御の一例である。符号制御がオンの場合（例えば、符号制御ビットが１に設定されている場合）、第２のオペランドは符号桁を含むことになる。第２のオペランドの右端のバイトの右側４ビットの位置が、符号を含むことになる。符号制御がオフの場合（例えば、符号制御ビットが０に設定された場合）、第２のオペランドは符号桁を含まない。
【００５１】
一部の実施形態では、マスク・フィールド４３０は正符号コード制御（plus-sign-code control）（例えば、ビット）を含んでいる。マスク・フィールド４３０のビット２が、正符号コード制御の一例である。正符号コード制御は、符号制御がオンの場合にのみ使用される。符号制御がオフの場合、正符号コード制御は無視される。正符号コード制御がオフの場合（例えば、正符号コード制御が０に設定された場合）、正符号は、正符号を示す値（例えば、１１００２またはＣｈｅｘ）としてエンコードされる。正符号コード制御がオンの場合（例えば、正符号コード制御が１に設定された場合）、正符号は、符号なし数値を示す値（例えば、１１１１２またはＦｈｅｘ）としてエンコードされる。
【００５２】
一部の実施形態では、マスク・フィールド４３０は正ゼロ強制制御（force-plus-zero control）（例えば、ビット）を含んでいる。マスク・フィールド４３０のビット３が、正ゼロ強制制御の一例である。正ゼロ強制制御は、符号制御がオンの場合にのみ使用される。符号制御がオフの場合、正ゼロ強制制御は無視される。正ゼロ強制制御がオフであり（例えば、正ゼロ強制制御が０に設定され）、負ゼロの符号付き値が得られた場合、アクションは実行されない。正ゼロ強制制御がオンであり（例えば、正ゼロ強制制御が１に設定され）、第２のオペランドの位置に配置される変換結果の絶対値が０である場合、変換結果の符号桁は、正符号コード制御によって指定された符号コードを使用して正ゼロを示すように設定される。
【００５３】
ＣＰＤＴまたはＣＰＸＴは、無限大、ＱＮａＮ、またはＳＮａＮを含む、第１のオペランドの任意のタイプに対して、例外を発生することなく実行される。第１のオペランドが特殊（すなわち、無限大、ＱＮａＮ、またはＳＮａＮ）である場合、０の桁が仮数の左端の桁として追加され、それによって、変換される有効な仮数を概念的に形成する。指定された数の右端の有効な仮数桁および符号ビットは、パック１０進数形式に変換される。変換結果が第２のオペランドの位置に配置され、ＣＰＤＴまたはＣＰＸＴの実行は、適切な条件コードと共に完了する。条件コードの例には、ソース・データが１０進浮動小数点形式の０であることを示すための０、ソース・データが特殊ではなく、０未満であることを示すための１、ソース・データが特殊ではなく、０よりも大きいことを示すための２、およびソースが特殊（無限大、ＱＮａＮ、ＳＮａＮ、または部分的結果）である場合の３などがある。
【００５４】
無限大およびＮａＮを含む、第１のオペランドの任意のタイプでは、第２のオペランド・フィールドが短すぎるために、仮数の左端の１つまたは複数の非ゼロの桁が失われる場合、変換結果は、オーバーフローの桁を無視することによって得られる。その後、条件コード３が設定される。１０進オーバーフロー・マスク・ビット（decimal overflow mask bit）が１である場合、１０進オーバーフローに対してプログラム割り込みが発生する。オペランド長単独では、オーバーフローを示さない。演算中に非０の桁が失われていなければならない。
【００５５】
図５は、本発明の一部の実施形態に従って機械命令を実行するための処理フローを示す。一部の実施形態では、システム１００（具体的には図１のプロセッサ１０５）は、図５に示された処理フローを実行する。
【００５６】
ブロック５１０で、プロセッサ１０５は、受信された機械命令を検証し、例外を返して機械命令の実行を停止するかどうかを決定する。具体的には、プロセッサ１０５は、受信された機械命令が例外の条件を満たすかどうかを決定する。例えば、オペコード・フィールド４０５が、受信された機械命令がＣＰＤＴであることを示している場合、プロセッサ１０５は、長さフィールド４１０が８を超えているかどうかを決定する。長さフィールド４１０が８を超えている場合、プロセッサ１０５は、例外条件が満たされていることを決定する。さらに、オペコード・フィールド４０５が、受信された機械命令がＣＰＸＴであることを示している場合、プロセッサ１０５は、長さフィールド４１０が１７を超えているかどうかを決定する。長さフィールド４１０が１７を超えている場合、プロセッサ１０５は、例外条件が満たされていることを決定する。
【００５７】
プロセッサ１０５が、ブロック５１０で例外条件が満たされていないことを決定した場合、プロセッサ１０５は、下でさらに説明されるブロック５２０に進む。プロセッサ１０５が、ブロック５１０で例外条件が満たされていることを決定した場合、プロセッサ１０５は、ブロック５６０で機械命令の実行を停止し、例外を返す。つまり、プロセッサ１０５は、受信された機械命令のオペコード・フィールド４０５によって指定された演算を実行しない。
【００５８】
ブロック５２０で、プロセッサ１０５は、１０進浮動小数点形式のデータを、形式４００のフィールドによって指定された１０進浮動小数点レジスタまたは１０進浮動小数点レジスタ・ペアから読み取る。ブロック５３０で、プロセッサ１０５は、１０進浮動小数点形式のデータ内の各桁をパック１０進数形式に変換する。具体的には、１０進浮動小数点形式のデータが特殊（すなわち、無限大、ＱＮａＮ、またはＳＮａＮ）である場合、プロセッサ１０５は、０の桁を仮数の左端の桁として追加する。プロセッサ１０５は、指定された数の右端の有効な仮数桁および符号ビットもパック１０進数形式に変換する。
【００５９】
ブロック５４０で、プロセッサ１０５は変換された数値の符号を設定する。具体的には、一部の実施形態において、プロセッサ１０５は形式４００の符号制御ビットをチェックする。符号制御がオンである場合、プロセッサ１０５は、パック１０進数形式の変換済みデータの符号桁を設定する。プロセッサ１０５は、パック１０進数形式のデータの右端のバイトの右側４ビットの位置で符号を設定する。符号制御がオフである場合、プロセッサ１０５は、パック１０進数形式の変換済みデータの符号桁を設定しない。
【００６０】
ブロック５４０で、符号制御がオンの場合に、プロセッサ１０５は正符号コード制御もチェックする。つまり、符号制御がオフの場合、プロセッサ１０５は正符号コード制御を無視する。正符号コード制御がオフの場合（例えば、正符号コード制御が０に設定された場合）、プロセッサ１０５は、正符号を、正符号を示す値（例えば、１１００２またはＣｈｅｘ）としてエンコードする。正符号コード制御がオンの場合（例えば、正符号コード制御が１に設定された場合）、プロセッサ１０５は、正符号を、符号なし数値を示す値（例えば、１１１１２またはＦｈｅｘ）としてエンコードする。
【００６１】
ブロック５４０で、符号制御がオンの場合に、プロセッサ１０５は正ゼロ強制制御をチェックする。符号制御がオフの場合、プロセッサ１０５は正ゼロ強制制御を無視する。正ゼロ強制制御がオフであり、負ゼロの符号付き値が得られた場合、プロセッサ１０５はアクションを実行しない。正ゼロ強制制御がオンであり、パック１０進数形式に変換されたデータの絶対値が０である場合、プロセッサ１０５は、データの符号桁を、正符号コード制御によって指定された符号コードを使用して正ゼロを示すように設定する。
【００６２】
ブロック５５０で、プロセッサ１０５は、パック１０進数形式のデータをターゲットのメモリ位置に書き込む。一部の実施形態では、プロセッサ１０５は、適切な条件コードも返す。
【００６３】
ＣＰＤＴ命令およびＣＰＸＴ命令は、データを浮動小数点レジスタまたは浮動小数点レジスタ・ペアに保持された１０進浮動小数点形式からパック１０進数形式へ変換し、変換されたデータをメモリに直接格納するための効率的な手段を提供する。従来、１０進浮動小数点形式のデータは、汎用レジスタ内のパック１０進数形式に変換されなければならない。その後、パック１０進数形式に変換されたデータは、汎用レジスタからメモリに格納されなければならない。しかし、従来の命令セット・アーキテクチャには、現在、長さが制御された読み込みが存在しないため、多くの場合、ワード、ハーフワード、およびバイトの読み込み演算が混在する必要がある。一方、ＣＤＺＴまたはＣＸＺＴを使用すると、データをレジスタ内の１０進浮動小数点形式からメモリ内のパック１０進数形式に、１ステップで変換することができる。したがって、コンピュータ自体の機能を改善することができる。
【００６４】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-onlymemory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmableread-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されているコンピュータ可読記憶媒体は、本質的に、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【００６５】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはこれらの組合せ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを備えてもよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【００６６】
本発明の処理を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードにすることができる。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide areanetwork）を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続を、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行うことができる。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate array）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic array）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行できる。
【００６７】
本発明の態様は、本明細書において、本発明の実施形態に記載された方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せは、コンピュータ可読プログラム命令によって実装できると理解されるであろう。
【００６８】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて規定された機能／動作を実装するための手段を構築するように、汎用コンピュータ、専用コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて規定された機能／動作の態様を実装する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラマブル・データ処理装置、またはその他のデバイスあるいはこれらの組合せに特定の方法で機能するよう指示するものであってもよい。
【００６９】
コンピュータ可読プログラム命令は、コンピュータ、その他のプログラマブル装置、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて規定された機能／動作を実装するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスにロードされ、コンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【００７０】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に記載されているシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および処理を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表すことができる。一部の代替実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生させることができる。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組合せとして動作するまたはこの組合せを実行する専用ハードウェアベースのシステムによって実装できるということにも注意する。
【００７１】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に限定されない。説明された実施形態の範囲および主旨を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかである。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
【図１】
2017531860.tif 000003
【図２】
2017531860.tif 000004
【図３】
2017531860.tif 000005
【図４】
2017531860.tif 000006
【図５】
2017531860.tif 000007
【手続補正書】
【提出日】平成29年6月6日(2017.6.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
機械命令を実行することによってデータをある形式から別の形式に変換する方法であって、
パック１０進数形式のデータを、通信可能にプロセッサに結合されたメモリから読み取ることと、
前記プロセッサによって、前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、前記プロセッサの１つまたは複数のターゲットのレジスタに書き込むことと
を含む、方法。
【請求項２】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１に記載の方法。
【請求項３】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項１に記載の方法。
【請求項４】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、前記機械命令が実行される、請求項３に記載の方法。
【請求項５】
前記機械命令に従って前記読み取り、前記変換、および前記書き込みが実行される、請求項１に記載の方法。
【請求項６】
前記機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項５に記載の方法。
【請求項７】
前記機械命令が制御ビットを備え、前記変換することが、前記制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項５に記載の方法。
【請求項８】
データをある形式から別の形式に変換するためのコンピュータ・プログラムであって、
プロセッサに、
パック１０進数形式のデータを、通信可能に前記プロセッサに結合されたメモリから読み取ることと、
前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、前記プロセッサの１つまたは複数のターゲットのレジスタに書き込むことと
を実行させる、コンピュータ・プログラム。
【請求項９】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項８に記載のコンピュータ・プログラム。
【請求項１０】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項８に記載のコンピュータ・プログラム。
【請求項１１】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、機械命令が実行される、請求項１０に記載のコンピュータ・プログラム。
【請求項１２】
特定の機械命令に従って前記読み取り、前記変換、および前記書き込みが実行される、請求項８に記載のコンピュータ・プログラム。
【請求項１３】
前記特定の機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記特定の機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記特定の機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項１２に記載のコンピュータ・プログラム。
【請求項１４】
前記特定の機械命令が制御ビットを備え、前記変換することが、前記制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１２に記載のコンピュータ・プログラム。
【請求項１５】
データをある形式から別の形式に変換するためのコンピュータ・システムであって、
パック１０進数形式のデータを含んでいるメモリと、
機械命令を実行して方法を実行するように構成されたプロセッサとを備え、前記方法が、
パック１０進数形式のデータを、通信可能に前記プロセッサに結合された前記メモリから読み取ることと、
前記パック１０進数形式の前記データを１０進浮動小数点形式に変換することと、
前記１０進浮動小数点形式に変換された前記データを、１つまたは複数のターゲットのレジスタに書き込むこととを含む、コンピュータ・システム。
【請求項１６】
前記変換することが、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１５に記載のコンピュータ・システム。
【請求項１７】
前記１つまたは複数のターゲットのレジスタが、汎用レジスタとは異なる専用レジスタである、請求項１５に記載のコンピュータ・システム。
【請求項１８】
前記パック１０進数形式の前記データを前記メモリから読み取った後に、どの汎用レジスタにも書き込まずに、前記機械命令が実行される、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記機械命令が、オペコードを提供するためのオペコード・フィールドを備え、前記オペコードが、前記パック１０進数形式から前記１０進浮動小数点形式への変換が実行するべきタスクであることを指定し、
前記オペコードが第１の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点倍精度形式に変換するためのものであり、
前記オペコードが第２の値である場合、前記機械命令が、前記パック１０進数形式のデータを１０進浮動小数点拡張形式に変換するためのものである、請求項１５に記載のコンピュータ・システム。
【請求項２０】
前記機械命令が制御ビットを備え、前記変換することが、前記制御がオンであることを示す値に前記制御ビットが設定された場合に、
前記パック１０進数形式の前記データの符号桁を無視することと、
前記１０進浮動小数点形式に変換された前記データの正符号を強制することとを含む、請求項１５に記載のコンピュータ・システム。
【国際調査報告】
2017531860.tif 000008
2017531860.tif 000009