(57)【要約】【課題】  終端文字データ・セットの文字を、並列処理を使用し、保証されていない例外を発生させることなく、１つのメモリ位置から別のメモリ位置へコピーする。【解決手段】  コピーされる文字データは、１つまたは複数のベクトル・レジスタ内にロードされる。特に、一実施形態において、ベクトル・レジスタ内のデータを指定された境界に並列にロードし、ロードされた文字数を決定するための方法を提供する、命令（たとえば、Vector Load to Block Boundary命令）が使用される。ロードされた文字数（カウント）を決定するために、別の命令（たとえば、Load Count to Block Boundary命令）が使用される。さらに、第１の区切り文字のインデックス、すなわち文字データ内のゼロまたはヌル文字などの第１の終端文字を見つけるための、命令（たとえば、Vector Find Element Not Equal命令）が使用される。この命令は、複数バイトのデータを並列にチェックする。【選択図】  図４
2015518193.tif 000002
【特許請求の範囲】
【請求項１】
データのセットをコピーするための方法であって、
指定されたメモリのブロック内にあるデータをメモリからレジスタにロードすることであって、前記データはコピーされることになるデータ・セットの少なくとも一部である、ロードすること、
前記レジスタ内にロードされたデータ量のカウントを取得すること、
前記レジスタ内にロードされた前記データに関する終端値をプロセッサによって決定することであって、前記決定することは、前記レジスタが終端文字を含むかどうかを判別するために前記データをチェックすること、前記終端文字を含む前記レジスタに基づいて前記終端値を前記終端文字の位置に設定すること、および、前記終端文字を含まない前記レジスタに基づいて前記終端値を事前に指定された値に設定することを含む、決定すること、
前記レジスタ内にロードされた前記データを選択された位置でメモリ内に記憶すること、
前記カウントおよび前記終端値のうちの少なくとも１つに基づいて、コピーされることになる前記データ・セット内に追加のデータが存在するかどうかをチェックすること、および、
追加のデータがコピーされることを示す前記チェックに基づいて、前記追加のデータをコピーすること、
を含む、方法。
【請求項２】
前記チェックすることは、
前記終端文字が見つかったかどうかを判別すること、
前記終端文字が見つかったことを示す前記判別に基づいて、追加のデータがコピーされることになるかどうかを判別するために、前記カウントと前記終端値とを比較すること、および、
前記終端文字が見つからなかったことを示す前記判別に基づいて、追加のデータがコピーされること、
を含む、請求項１に記載の方法。
【請求項３】
前記カウントと前記終端値とを比較することは、前記終端値が前記カウント値よりも大きいことに基づいて追加のデータがコピーされることを示す、請求項２に記載の方法。
【請求項４】
前記カウントを取得することは、前記カウントを計算するために、前記メモリのブロック内の開始アドレスおよび前記メモリのブロックの境界を使用することを含む、前記請求項のいずれか一項に記載の方法。
【請求項５】
前記カウントを取得することは、Load to Count Block Boundary命令を使用することを含む、前記請求項のいずれか一項に記載の方法。
【請求項６】
前記レジスタにロードされることになる前記データは複数のデータの単位を含み、前記ロードすることは、前記複数のデータの単位を前記レジスタ内に並列にロードすることを含み、前記ロードすることは、前記メモリのブロックの境界を横切ることなく実行される、前記請求項のいずれか一項に記載の方法。
【請求項７】
前記ロードすることは、VectorLoad to Block Boundary命令によって実行され、前記メモリのブロックは、前記Vector Load to Block Boundary命令によって指定されるか、または前記Vector Load to Block Boundary命令を実行するプロセッサによって動的に決定されるかの、いずれか一方である、前記請求項のいずれか一項に記載の方法。
【請求項８】
前記終端値を決定することは、VectorFind Element Not Equal命令を使用することを含み、前記位置は前記レジスタ内のバイト・インデックスを含む、前記請求項のいずれか一項に記載の方法。
【請求項９】
前記終端文字はゼロまたはヌル文字を含む、前記請求項のいずれか一項に記載の方法。
【請求項１０】
前記命令は長さを決定するためにコンピュータ・コードを取得することをさらに含み、前記コンピュータ・コードは、前記ロードすることを実行するためのVector Load to Block Boundary命令、前記カウントを取得するためのLoad Count to Block Boundary命令、および前記終端値を決定するためのVector Find Element Not Equal命令を含む、請求項１に記載の方法。
【請求項１１】
データのセットをコピーするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信しているプロセッサと、
を備え、前記請求項のいずれか一項に記載の方法を実行するように構成された、コンピュータ・システム。
【請求項１２】
データのセットをコピーするためのコンピュータ・プログラムであって、
請求項１から１０のいずれか一項に記載の方法を実行するために、処理回路によって読み取り可能であり、前記処理回路によって実行するための命令を記憶する、コンピュータ読み取り可能記憶媒体、
を備える、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にテキスト処理に関し、具体的には文字データに関連付けられた処理に関する。
【背景技術】
【０００２】
テキスト処理は、しばしば、文字データ文字列の処理を含む、様々なタイプの文字データ処理を必要とする。いくつかのタイプの処理は、終端地点（たとえば文字列の終わり）の発見、文字データの長さの決定、特定文字の発見、文字データのコピーなどを含む。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許証第５５５１０１３号
【特許文献２】米国特許証第６００９２６１号
【特許文献３】米国特許証第５５７４８７３号
【特許文献４】米国特許証第６３０８２５５号
【特許文献５】米国特許証第６４６３５８２号
【特許文献６】米国特許証第５７９０８２５号
【非特許文献】
【０００４】
【非特許文献１】２０１０年８月ＩＢＭ（Ｒ）出版の「z/Architecture Principles ofOperation」と題するIBM(R)Publication No.SA22-7832-08、第９版
【非特許文献２】２０１０年７月２３日インターナショナル・ビジネス・マシーンズ・コーポレーションによる「Power ISA(TM)Version 2.06 RevisionB」
【非特許文献３】２０１１年１２月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, A-L」Order Number 253666-041US
【非特許文献４】２０１１年１２月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, M-Z」Order Number 253667-041US
【発明の概要】
【発明が解決しようとする課題】
【０００５】
これらのタイプの処理を実行するための現行の命令および／または技法は、非効率的な傾向がある。
【課題を解決するための手段】
【０００６】
データ・セットをコピーするためのコンピュータ・プログラム製品を提供することによって、従来技術の欠点が対処され、利点が与えられる。コンピュータ・プログラム製品は、処理回路によって読み取り可能であり、方法を実行するための処理回路による実行のための命令を記憶する、コンピュータ読み取り可能記憶媒体を含む。この方法は、たとえば、指定されたメモリのブロック内にあるデータをメモリからレジスタにロードすることであって、データはコピーされることになるデータ・セットの少なくとも一部である、ロードすることと、レジスタ内にロードされたデータ量のカウントを取得することと、レジスタ内にロードされたデータに関する終端値をプロセッサによって決定することであって、決定することは、レジスタが終端文字を含むかどうかを判別するためにデータをチェックすること、終端文字を含むレジスタに基づいて終端値を終端文字の位置に設定すること、および、終端文字を含まないレジスタに基づいて終端値を事前に指定された値に設定することを含む、決定することと、レジスタ内にロードされたデータを選択された位置でメモリ内に記憶することと、カウントおよび終端値のうちの少なくとも１つに基づいて、コピーされることになるデータ・セット内に追加のデータが存在するかどうかをチェックすることと、追加のデータがコピーされることを示すチェックに基づいて、追加のデータをコピーすることと、を含む。
【０００７】
本明細書では、本発明の１つまたは複数の態様に関する方法およびシステムも説明および請求している。さらに本明細書では、本発明の１つまたは複数の態様に関するサービスも説明し、請求することができる。
【０００８】
本発明の技法を通じて、追加の特徴および利点が実現される。本明細書では本発明の他の実施形態および態様を詳細に説明し、請求する本発明の一部とみなしている。
【０００９】
次に、本発明の実施形態について、添付の図面を参照しながら単なる例として説明する。
【図面の簡単な説明】
【００１０】
【図１】本発明の１つまたは複数の態様を組み込んで使用するための、コンピューティング環境の一例を示す図である。
【図２】本発明の１つまたは複数の態様を組み込んで使用するための、コンピューティング環境の別の例を示す図である。
【図３】本発明の態様に従った、図２のメモリをさらに詳細に示す図である。
【図４】本発明の態様に従った、区切り文字セットを一方のメモリ位置から他方のメモリ位置へコピーするための論理の一実施形態を示す図である。
【図５】本発明の態様に従った、そこからのデータがベクトル・レジスタにロードされる、主メモリの一例を示す図である。
【図６】本発明の態様に従った、図５の主メモリから文字データがロードされるベクトル・レジスタの一例を示す図である。
【図７】本発明の態様に従った、そこからのデータがベクトル・レジスタにロードされる、主メモリの別の例を示す図である。
【図８】本発明の態様に従った、図７の主メモリから文字データがロードされるベクトル・レジスタの例を示す図である。
【図９】本発明の態様に従った、図７の主メモリから文字データがロードされるベクトル・レジスタの例を示す図である。
【図１０】本発明の態様に従った、Vector Load to Block Boundary命令の形式の一実施形態を示す図である。
【図１１】本発明の態様に従った、Vector Load to Block Boundary命令に関連付けられた論理の一実施形態を示す図である。
【図１２】本発明の態様に従った、Vector Load to Block Boundary命令に関連付けられた論理の別の実施形態を示す図である。
【図１３】本発明の態様に従った、Vector Find Element Not Equal命令の形式の一実施形態を示す図である。
【図１４】本発明の態様に従った、Vector Find Element Not Equal命令に関連付けられた論理の一実施形態を示す図である。
【図１５】本発明の態様に従った、図１４の論理を実行するための様々な処理ブロックの一実施形態を示す図である。
【図１６】本発明の態様に従った、Load Count to Block Boundaryの形式の一実施形態を示す図である。
【図１７】本発明の態様に従った、Load Count to Block Boundary命令に関連付けられた論理の一実施形態を示す図である。
【図１８】本発明の態様に従った、レジスタ・ファイルの一例を示す図である。
【図１９】本発明の１つまたは複数の態様を組み込む、コンピュータ・プログラム製品の一実施形態を示す図である。
【図２０】本発明の１つまたは複数の態様を組み込んで使用するための、ホスト・コンピュータ・システムの一実施形態を示す図である。
【図２１】本発明の１つまたは複数の態様を組み込んで使用するための、コンピュータ・システムの他の例を示す図である。
【図２２】本発明の１つまたは複数の態様を組み込んで使用するための、コンピュータ・ネットワークを含むコンピュータ・システムの別の例を示す図である。
【図２３】本発明の１つまたは複数の態様を組み込んで使用するための、コンピュータ・システムの様々な要素の一実施形態を示す図である。
【図２４】本発明の１つまたは複数の態様を組み込んで使用するための、図２３のコンピュータ・システムの実行ユニットの一実施形態を示す図である。
【図２５】本発明の１つまたは複数の態様を組み込んで使用するための、図２３のコンピュータ・システムの分岐ユニットの一実施形態を示す図である。
【図２６】本発明の１つまたは複数の態様を組み込んで使用するための、図２３のコンピュータ・システムのロード／記憶ユニットの一実施形態を示す図である。
【図２７】本発明の１つまたは複数の態様を組み込んで使用するための、エミュレートされたホスト・コンピュータ・システムの一実施形態を示す図である。
【発明を実施するための形態】
【００１１】
本発明の態様によれば、任意の言語のアルファベット文字、数字、句読点、または他の記号、あるいはそれらすべてを含むが、それらに限定されない、文字データの処理を容易にするための機能が提供される。文字データは、データの文字列であるかまたはない場合がある。文字データに関連付けられる標準の例は、ＡＳＣＩＩ（American Standard Code forInformation Interchange）、ＵＴＦ（Unicode Transformation Format）８を含むがこれに限定されないユニコード、ＵＴＦ１６などを含むが、これらに限定されない。
【００１２】
一態様において、終端文字データ・セット（たとえば文字のヌル終端文字列）の文字を、並列処理を使用し、保証されていない例外を発生させることなく、１つのメモリ位置から別のメモリ位置へコピーするための技法が提供される。コピーされる文字データは、１つまたは複数のレジスタ内にロードされる。特に、一実施形態において、ベクトル・レジスタ内のデータを指定された境界に並列にロードし、ロードされた文字数を決定するための方法を提供する、命令（たとえば、Vector Load to Block Boundary命令）が使用される。一実施形態において、ロードされた文字数（カウント）を決定するために、別の命令（たとえば、Load Count to Block Boundary命令）が使用される。さらに、第１の区切り文字のインデックス、すなわち文字データ内のゼロまたはヌル文字などの第１の終端文字を見つけるための、命令（たとえば、Vector Find Element Not Equal命令）が使用される。この命令は、複数バイトのデータを並列にチェックする。これらの命令を使用することによって、文字データは最小数の分岐命令を使用してコピーされる。さらに、偽の例外を防ぎながら、文字データの高速並列コピーが提供される。
【００１３】
本明細書で説明するように、ベクトル・レジスタ（別名、ベクトル）の要素は、例として長さが１、２、または４バイトであり、ベクトル・オペランドは、たとえば複数の要素を有するＳＩＭＤ（単一命令複数データ）オペランドである。他の実施形態において、要素は他のサイズとすることが可能であり、ベクトル・オペランドはＳＩＭＤである必要がないか、または、１つの要素を含む可能性がある、あるいはその両方である。
【００１４】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態を、図１を参照しながら説明する。コンピューティング環境１００は、たとえば、たとえば１つまたは複数のバス１０８または他の接続あるいはその両方を介して互いに結合された、プロセッサ１０２（たとえば中央処理ユニット）、メモリ１０４（たとえば主メモリ）、および、１つまたは複数の入力／出力（Ｉ／Ｏ）デバイスまたはインターフェースあるいはその両方１０６を含む。
【００１５】
一例において、プロセッサ１０２は、インターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づき、同様にインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供され、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅを実装する、Ｓｙｓｔｅｍ  ｚサーバなどのサーバの一部である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、２０１０年８月ＩＢＭ（Ｒ）出版の「z/Architecture Principles of Operation」と題するIBM(R)Publication No.SA22-7832-08、第９版に記載されている。一例において、プロセッサは、同じくインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供される、ｚ／ＯＳなどのオペレーティング・システムを実行する。ＩＢＭ（Ｒ）、Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥ（Ｒ）、およびＺ／ＯＳ（Ｒ）は、米国ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。本明細書で使用される他の名前は、インターナショナル・ビジネス・マシーンズ・コーポレーションまたは他の会社の登録商標、商標、または製品名とすることができる。
【００１６】
他の実施形態において、プロセッサ１０２はインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるPower Architectureに基づいている。Power Architectureの一実施形態は、２０１０年７月２３日インターナショナル・ビジネス・マシーンズ・コーポレーションによる「Power ISA(TM)Version 2.06 RevisionB」に記載されている。POWER ARCHITECTURE（Ｒ）は、インターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。
【００１７】
さらに他の実施形態において、プロセッサ１０２は、Intel Corporationによって提供されるＩｎｔｅｌアーキテクチャに基づいている。Ｉｎｔｅｌアーキテクチャの一実施形態は、２０１１年１２月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, A-L」Order Number 253666-041US、および、２０１１年１２月、「Intel(R)64 and IA-32 ArchitecturesDeveloper‘s Manual:Vol.2B, Instructions Set Reference, M-Z」Order Number 253667-041USに記載されている。Ｉｎｔｅｌ（Ｒ）は、カリフォルニア州サンタクララのIntel Corporationの登録商標である。
【００１８】
本発明の１つまたは複数の態様を組み込んで使用するための、コンピューティング環境の別の実施形態を、図２を参照しながら説明する。この例において、コンピューティング環境２００は、たとえば、たとえば１つまたは複数のバスまたは他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理ユニット２０２、メモリ２０４、および、１つまたは複数の入力／出力デバイスまたはインターフェースあるいはその両方２０６を含む。例として、コンピューティング環境２００は、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーションによって提供されるＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、またはｘＳｅｒｉｅｓサーバ；カリフォルニア州パロアルトのＨｅｗｌｅｔｔ  Ｐａｃｋａｒｄ  Ｃｏ．，によって提供されるＩｎｔｅｌ  Ｉｔａｎｉｕｍ  ＩＩプロセッサを備えるＨＰ  Ｓｕｐｅｒｄｏｍｅ；または、インターナショナル・ビジネス・マシーンズ・コーポレーション、Ｈｅｗｌｅｔｔ  Ｐａｃｋａｒｄ、Ｉｎｔｅｌ、Ｏｒａｃｌｅ、またはその他によって提供されるアーキテクチャに基づく他のマシン、あるいはそれらすべてを、含むことができる。
【００１９】
ネイティブ中央処理ユニット２０２は、環境内の処理中に使用される、１つまたは複数の汎用レジスタ、または、１つまたは複数の特定用途向けレジスタ、あるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、任意の特定時点での環境の状態を表す情報を含む。
【００２０】
さらに、ネイティブ中央処理ユニット２０２は、メモリ２０４に記憶された命令およびコードを実行する。特定の一例において、中央処理ユニットは、メモリ２０４に記憶されたエミュレータ・コード２１２を実行する。このコードは、１つのアーキテクチャ内に構成された処理環境が、別のアーキテクチャをエミュレートできるようにするものである。たとえばエミュレータ・コード２１２は、ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ｘＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバ、またはその他などの、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づいて、マシンがｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートすること、ならびに、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行することを、可能にする。
【００２１】
エミュレータ・コード２１２に関する詳細を、図３を参照しながら説明する。ゲスト命令２５０は、ネイティブＣＰＵ２０２のそれ以外のアーキテクチャ内で実行されるように開発されたソフトウェア命令（たとえばマシン命令）を含む。たとえばゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１０２上で実行するように設計されることが可能であるが、その代わりに、たとえばＩｎｔｅｌ  Ｉｔａｎｉｕｍ  ＩＩプロセッサとすることが可能なネイティブＣＰＵ２０２上でエミュレートされている。一例において、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、およびオプションで、取得された命令のためにローカル・バッファリングを提供するための、命令フェッチ・ユニット２５２を含む。さらに、取得されたゲスト命令のタイプを決定するため、および、ゲスト命令を１つまたは複数の対応するネイティブ命令２５６に変換するための、命令変換ルーチン２５４も含む。この変換は、たとえばゲスト命令によって実行される機能を識別すること、および、その機能を実行するためのネイティブ命令を選択することを含む。
【００２２】
さらにエミュレータ２１２は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、以前に取得された１つまたは複数のゲスト命令をエミュレートし、こうした実行の終わりに、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために命令フェッチ・ルーチンに制御を戻す、ネイティブ命令のルーチンを、ネイティブＣＰＵ２０２に実行させることができる。ネイティブ命令２５６の実行は、メモリ２０４からレジスタ内へデータをロードすること、レジスタからメモリへデータを戻して記憶すること、あるいは、何らかのタイプの算術または論理演算を実行することを、含むことができる。
【００２３】
各ルーチンは、たとえばメモリに記憶され、ネイティブ中央処理ユニット２０２によって実行される、ソフトウェア内に実装される。他の例において、ルーチンまたは演算のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはそれらの何らかの組み合わせで実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートすることができる。実施形態において、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に常駐するか、または異なるメモリ・デバイス間に分配されることが可能である。
【００２４】
本明細書で使用される場合、ファームウェアは、たとえばプロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはそれらすべてを含む。これはたとえば、ハードウェアレベル命令、または、より高レベルのマシン・コードの実装で使用されるデータ構造、あるいはその両方を含む。一実施形態において、これはたとえば、典型的には、基礎をなすハードウェアに特有の信頼されるソフトウェアまたはマイクロコードを含み、オペレーティング・システムのシステム・ハードウェアへのアクセスを制御する、マイクロコードとして送達される、プロプライエタリ・コード（proprietary code）を含む。
【００２５】
一例において、取得、変換、および実行されるゲスト命令２５０は、本明細書で説明する命令のうちの１つまたは複数である。１つのアーキテクチャ（たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）の命令は、メモリからフェッチされ、別のアーキテクチャ（たとえばＰｏｗｅｒＰＣ、ｐＳｅｒｉｅｓ、ｘＳｅｒｉｅｓ、Ｉｎｔｅｌなど）のネイティブ命令２５６のシーケンスとして変換および表される。その後、これらのネイティブ命令は実行される。
【００２６】
一実施形態において、本明細書で説明される様々な命令は、本発明の態様に従って提供されるベクトル機構の一部である、ベクトル命令である。ベクトル機構は、たとえば、１から１６までの要素の固定サイズのベクトルを提供する。各ベクトルは、機構内に定義されたベクトル命令によってその上で動作されるデータを含む。一実施形態において、ベクトルが複数の要素で構成される場合、各要素は他の要素と共に並列に処理される。命令の完了は、すべての要素の処理が完了するまで発生しない。
【００２７】
本明細書で説明されるように、ベクトル命令は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ、Ｐｏｗｅｒ、Ｉｎｔｅｌなどを含むがこれらに限定されない、様々なアーキテクチャの一部として実装可能である。本明細書で説明される実施形態はｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに関するものであるが、ベクトル命令および本発明の１つまたは複数の態様は、多くの他のアーキテクチャに基づくものとすることができる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは単なる一例である。
【００２８】
ベクトル機構がベクトル・レジスタおよび命令を使用するためにｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの一部として実装される、一実施形態において、指定された制御レジスタ（たとえば制御レジスタ０）内のベクトル使用可能性制御およびレジスタ制御は、たとえば１に設定される。ベクトル機構がインストールされ、ベクトル命令が使用可能性制御設定なしで実行される場合、データ例外が認識される。ベクトル機構がインストールされず、ベクトル命令が実行された場合、演算例外が認識される。
【００２９】
ベクトル・データは、たとえば他のデータ形式と同じ左から右へのシーケンスで、ストレージ内に現れる。０〜７と番号付けされたデータ形式のビットは、ストレージ内の最も左の（最も低い番号が付けられた）バイト位置内にバイトを構成し、ビット８〜１５は、次の順次シーケンス内にバイトを形成する、と言う具合である。他の例において、ベクトル・データは、右から左などの別のシーケンスで、ストレージ内に現れることができる。
【００３０】
ベクトル機構が提供されたベクトル命令の多くは、指定されたビットのフィールドを有する。このフィールドはレジスタ拡張ビットまたはＲＸＢと呼ばれ、ベクトル・レジスタ指定オペランドのそれぞれについて、最上位ビットを含む。命令によって指定されていないレジスタ指定に関するビットは、予約され、ゼロに設定される。
【００３１】
一例において、ＲＸＢフィールドは４ビット（たとえばビット０〜３）を含み、ビットは以下のように定義される。
【００３２】
０−命令の第１のベクトル・レジスタ指定に関する最上位ビット。
１−あれば、命令の第２のベクトル・レジスタ指定に関する最上位ビット。
２−あれば、命令の第３のベクトル・レジスタ指定に関する最上位ビット。
３−あれば、命令の第４のベクトル・レジスタ指定に関する最上位ビット。
【００３３】
各ビットは、たとえばレジスタ数に応じて、アセンブラにより０または１に設定される。たとえばレジスタ０〜１５の場合、ビットは０に設定され、レジスタ１６〜３１の場合、ビットは１に設定される、などである。
【００３４】
一実施形態において、各ＲＸＢビットは、１つまたは複数のベクトル・レジスタを含む命令内の特定の位置に関する拡張ビットである。たとえば１つまたは複数のベクトル命令において、ＲＸＢのビット０は、たとえばＶ１に割り当てられた位置８〜１１に対する拡張ビットであり、ＲＸＢのビット１は、たとえばＶ２に割り当てられた位置１２〜１５に対する拡張ビットである、と言う具合である。
【００３５】
他の実施形態において、ＲＸＢフィールドは追加のビットを含み、複数のビットが各ベクトルまたは位置に関する拡張として使用される。
【００３６】
本明細書で説明されるように、終端文字列からのデータなどの文字データを１つのメモリ位置から別のメモリ位置にコピーするために、本発明の態様に従って、様々な命令が使用される。コピーに関連付けられた処理および使用される様々な命令について、以下でより詳細に説明する。
【００３７】
初めに図４を参照すると、一実施形態において、ヌル終端文字列などの終端文字データをコピーするために、ステップ３００で、たとえばVector Load to Block Boundary命令を使用して、コピーされる文字データ・セットの少なくとも一部がベクトル・レジスタにロードされる。この命令は、たとえば１６バイトまでのデータを、データのロード元である主メモリの指定された境界を横切ることなく、並列にロードする。この命令に関する詳細を、以下で説明する。
【００３８】
その後、以下で説明するように、ステップ３０２で、ロードされたデータのバイト数が、たとえばLoad Count to Block Boundary命令を使用して決定される。
【００３９】
次に、ステップ３０４で、文字データの終わり（たとえばヌルまたはゼロ）の検索が実行される。一例では、以下で説明する、Vector Find Element Not Equal命令を使用して、終端文字（たとえばヌル、ゼロ、または別の終端文字）について、ロードされたレジスタが検索される。この命令は、一例では、ゼロ要素（たとえば要素全体がゼロである）とも呼ばれるヌル要素について、ロードされたベクトル・レジスタを検索する。ヌルまたはゼロ要素とは、文字データの終端、たとえばデータの特定の文字列の終わりを示す。検索の結果は、本明細書では終端文字と呼ばれる、第１のヌル要素のインデックス（たとえばバイト・インデックス）、または、終端文字が見つからない場合、検索されているベクトルのサイズなどの事前に指定された値である。
【００４０】
その後、照会３０６で、終端文字が見つかったかどうかが判別される。Vector Find Element Not Equal命令によって終端文字が見つかった場合、照会３０８で、ロードされた文字数（たとえば、Load Count to Block Boundary命令から決定される）がベクトルのサイズ、たとえば１６未満であるかどうかがさらに判別される。ベクトルのサイズ未満でない場合、ステップ３１０で、ロードされた文字はメモリの指定位置に記憶される。さらに、ステップ３１２で、メモリ内でデータの記憶を続行するための位置を提供することになるインデックスが、ベクトル・サイズの分だけ増分される。すなわち、記憶される追加のデータが以前のデータに付け加えられることになる。たとえば、追加データに関する開始アドレスは、第１の文字が記憶された指定位置から１６バイト（またはベクトル・サイズに応じて他のサイズ）となる。ステップ３００で処理は続行する。
【００４１】
照会３０８に戻り、ロードされたバイト数がベクトル・サイズより大きいかまたは等しい場合、ステップ３１４で、境界までロードされたベクトルのバイトは、これが論理を介する初回であるかまたは後続の反復であるかに応じて、指定位置またはそこからのオフセットのいずれかで、メモリ内に記憶される。さらにステップ３１６で、（次の文字セットが、このデータが記憶された場所から次の順次メモリ位置で記憶されるように）境界に対してメモリ・アドレスが増分され、ステップ３００で処理は続行する。
【００４２】
照会３０６に戻り、ロードされたベクトル内に終端文字が見つかった場合、照会３１８で、（Vector Find Element Not Equal命令によって提供される）終端文字のインデックスが、（Load Count to Block Boundary命令から判別された）ロードされたバイト数より少ないかまたは等しいかどうかが、さらに判別される。少ないかまたは等しい場合、ステップ３２０で、ロードされたバイト数がメモリに記憶され、それ以上のデータは記憶されない。文字データのセットは、１つのメモリ位置から別のメモリ位置にコピーされている。そうでない場合、ステップ３１４で処理は続行する。
【００４３】
如何に、終端文字列をコピーするために使用される、例示の擬似コードを示す。
【００４４】
【表１】
2015518193.tif 000003
【００４５】
上記に示されるように、初期に、たとえばＲＸとＲＸとの間でＸＯＲを実行し、その結果をＲＸ内に配置することによって、レジスタＲＸはゼロに初期設定される。その後、１６バイトまでのデータがレジスタＶＳＴＲにロードされるループが開始する。次に、ＶＳＴＲ内で終端文字の検索が実行され、その結果が変数ＶＰＯＳ内に配置される。さらに、ＶＳＴＲ内にロードされたバイト数のカウントが決定され、変数ＧＬＥＮ内に配置される。
【００４６】
その後、終端文字のインデックスがＶＰＯＳから抽出され、ＧＰＯＳ内に配置される。終端文字が見つかった場合、文字列の終わり（ＥＯＳ）の処理に進む。見つからない場合、カウントがベクトル・サイズと比較され、ベクトル・サイズより小さい場合、ページの終わり（ＥＯＰ）の処理が実行される。小さくない場合、ロードされたベクトルのデータは別のメモリ位置に記憶され、インデックス・ポインタＲＸはベクトルのサイズ、たとえば１６だけ増分され、処理はループする。
【００４７】
ＥＯＰ処理で、データを記憶する場所の現行値を取得するために、基本レジスタにインデックスが追加され、その位置にデータが記憶される。その後、記憶されたバイト数によってインデックスが更新される。
【００４８】
ＥＯＳについて、終端インデックスがカウントより少ないかまたは等しいかどうかを判別するために、比較が行われる。少なくないかまたは等しくない場合、ページの終わりでロードされ、検出されたゼロは予測されていないデータにおけるゼロであるため、ページの終わりの処理にループする。少ないかまたは等しい場合、ポインタを増分し、終端文字までメモリにバイトを書き出す。これで処理は完了する。
【００４９】
他の実施形態において、カウントと１６との比較は実行されず、代わりに、ＬＣＢＢからの条件コードはカウントが１６未満であるかどうかを示す。
【００５０】
文字列のコピー元である主メモリ４００の一例が、図５に示されている。図に示されるように、この主メモリは「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」の文字データを含み、たとえばメモリ位置０Ｘ６ＦＦ３にある。コピーの一部として、主メモリからの文字データは１つまたは複数のベクトル・レジスタ内にロードされる。データのロード時に横切られない主メモリの境界は、縦の破線４０２で示されている。このデータはベクトル・レジスタ４２０内にロードされ、その例が図６に示されている。
【００５１】
データのコピー元であり、ベクトル・レジスタがロードされた、主メモリ４５０の別の例が、図７に示されている。図に示されるように、このメモリは「Ｈｅｌｌｏ  Ｗｏｒｌｄ！」の文字データを含み、たとえばメモリ位置０Ｘ６ＦＦ６にある。データのロード時に横切られないメモリの境界は縦の破線４５２で示されており、文字データの終わりよりも前である。したがって、その例が図８に示されるように、境界までの文字データが第１にベクトル・レジスタ４７０にロードされ、次に図９に示されるように、残りのデータがベクトル・レジスタ４９０にロードされる。
【００５２】
上記で示されるように、一実施形態において、ヌル終端文字列などの終端文字データを１つのメモリ位置から別のメモリ位置にコピーするために、様々な命令が使用される。これらの命令の例を、以下で詳細に説明する。
【００５３】
ベクトル・レジスタにロードするために使用される１つの命令が、Vector Load to Block Boundary（ＶＬＢＢ）命令であり、その例を、図１０を参照しながら説明する。一例において、Vector Load to Block Boundary命令５００は、Vector Load to Block Boundary動作を示す命令コード５０２ａ（たとえばビット０〜７）、５０２ｂ（たとえばビット４０〜４７）、ベクトル・レジスタ（Ｖ１）を指定するために使用されるベクトル・レジスタ・フィールド５０４（たとえばビット８〜１１）、インデックス・フィールド（Ｘ２）５０６（たとえばビット１２〜１５）、基本フィールド（Ｂ２）５０８（たとえばビット１６〜１９）、変位フィールド（Ｄ２）５１０（たとえばビット２０〜３１）、マスク・フィールド（Ｍ３）５１２（たとえばビット３２〜３５）、およびＲＸＢフィールド５１４（たとえばビット３６〜３９）を含む。一例において、フィールド５０４〜５１４はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【００５４】
一例において、命令コード・フィールド５０２ａによって指定される命令コードの選択されたビット（たとえば最初の２つのビット）は、命令の長さおよび形式を指定する。この特定の例において、長さは３つのハーフワードであり、形式は、拡張命令フィールドを伴うベクトル・レジスタおよびインデックス・ストレージ動作である。ベクトル（Ｖ）フィールドならびにＲＸＢによって指定されるその対応する拡張ビットは、ベクトル・レジスタを指定する。特にベクトル・レジスタの場合、オペランドを含むレジスタは、たとえば、最上位ビットとしてのレジスタ拡張ビット（ＲＸＢ）の追加を伴う、レジスタ・フィールドの４ビット・フィールドを使用して指定される。たとえば、４ビット・フィールドが０１１０であり、拡張ビットが０である場合、５ビット・フィールド００１１０はレジスタ数６を示す。
【００５５】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、Ｖ１に関連付けられた下付き数字１は第１のオペランドを示す、と言う具合である。レジスタ・オペランドは１レジスタ長さであり、これはたとえば１２８ビットである。
【００５６】
一例において、ベクトル・レジスタおよびインデックス・ストレージ動作命令内で、Ｘ２およびＢ２のフィールドによって指定される汎用レジスタのコンテンツは、第２のオペランド・アドレスを形成するために、Ｄ２フィールドのコンテンツに追加される。Vector Load to Block Boundary命令に関する変位Ｄ２は、一例において、１２ビットの符号なし整数として扱われる。
【００５７】
一実施形態において、Ｍ３フィールドは、ロードするためのブロック境界に関してＣＰＵに信号送信するために使用される、コードを指定する。予約値が指定された場合、指定例外が認識される。例示のコードおよび対応する値は、以下の通りである。
【００５８】
【表２】
2015518193.tif 000004
【００５９】
Vector Loadto Block Boundary（ＶＬＢＢ）命令の一実施形態の実行において、一実施形態中で左から右へと先行して（preceding）、（Ｖ１フィールドならびに拡張ビットによって指定されたレジスタ内で指定された）第１のオペランドには、ゼロとインデックス付けされたバイト要素から始まり、第２のオペランドからのバイトがロードされる。第２のオペランドは、第２のオペランド・アドレス（開始アドレスとも呼ばれる）によって指定されるメモリ位置である。ロードはそのメモリ位置から開始され、以下で説明するように命令（またはプロセッサ）によって計算された終了アドレスまで続行される。境界条件に遭遇した場合、第１オペランドの残りがどのように扱われるかはモデルに依存する。アクセス例外は、ロードされていないバイトでは認識されない。一例において、ロードされていないバイトは予測不可能である。
【００６０】
上記の例示の命令において、開始アドレスは、インデックス・レジスタ値（Ｘ２）＋基本レジスタ値（Ｂ２）＋変位（Ｄ２）によって決定されるが、他の実施形態においては、単にいくつかの例として、レジスタ値、命令アドレス＋命令テキスト指定オフセット、レジスタ値＋変位、またはレジスタ値＋インデックス・レジスタ値によって提供される。さらに一実施形態において、命令はＲＸＢフィールドを含まない。代わりに、拡張は使用されないか、あるいは、拡張は命令外部の制御からなどの別の様式で提供されるか、または命令の別のフィールドの一部として提供される。
【００６１】
Vector Loadto Block Boundary命令に関連付けられた処理の一実施形態の他の詳細を、図１１を参照しながら説明する。この例では、境界サイズは命令内に指定される。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【００６２】
一実施形態において、初期にステップ６００で境界マスク（ＢｄｙＭａｓｋ）が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ（ＢｄｙＳｉｚｅ）６０２の２の補数否定（２’ｓ  ｃｏｍｐｌｅｍｅｎｔ  ｎｅｇａｔｉｏｎ）が取られ、境界マスク６０４を作成する（たとえば、ＢｄｙＭａｓｋ＝０−ＢｄｙＳｉｚｅ）。一例では境界サイズは命令（たとえばＭ３フィールド）によって提供され、または別の例では、本明細書で説明するように、マシンによって決定される。
【００６３】
その後、ステップ６１０で、ロードが開始されるメモリ内の位置を示す開始アドレスが計算される。例として、開始アドレス６１２は、レジスタ値、命令アドレス＋命令テキスト指定オフセット、レジスタ値＋変位、レジスタ値＋インデックス・レジスタ値、またはレジスタ値＋インデックス・レジスタ値＋変位によって、提供することが可能である。本明細書で提供される命令において、開始アドレスは、Ｘ２フィールド、Ｂ２フィールド、およびＤ２フィールドによって提供される。すなわち、Ｘ２およびＢ２によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにＤ２によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【００６４】
次に、ステップ６２０で、ロードを停止する箇所を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ６０２、開始アドレス６１２、ベクトル・サイズ（ｖｅｃ＿ｓｉｚｅ）６１４（たとえばバイト単位で、たとえば１６）、および境界マスク６０４である。一例において、終了アドレス６２２は以下のように計算される。
【００６５】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【００６６】
その後、ステップ６３０で、インデックス付けされたバイト０から始まる第１のオペランド（すなわち指定されたベクトル・レジスタ）が、開始アドレスから始まり終了アドレスで終了するメモリからロードされる。これにより、指定されたメモリ境界を横切ることなく、可変数のバイトをメモリからベクトルにロードすることが可能である。たとえばメモリ境界が６４バイトにあり、開始アドレスが５８バイトである場合、バイト５８〜６４がベクトル・レジスタ内にロードされる。一例において、バイトは並列にロードされる。
【００６７】
Vector Loadto Block Boundary命令に関連付けられた処理の別の実施形態を、図１２を参照しながら説明する。この実施形態において、境界サイズは命令によって指定されないが、代わりに、境界サイズは命令を実行するプロセッサによって動的に決定される。
【００６８】
一実施形態において、初期にステップ６５０で、ロードが開始されるメモリ内の位置を示す開始アドレスが計算される。例のように、開始アドレス６５２は、レジスタ値、命令アドレス＋命令テキスト指定オフセット、レジスタ値＋変位、レジスタ値＋インデックス・レジスタ値、またはレジスタ値＋インデックス・レジスタ値＋変位によって提供可能である。本明細書で提供される命令において、開始アドレスは、Ｘ２フィールド、Ｂ２フィールド、およびＤ２フィールドによって提供される。すなわち、Ｘ２およびＢ２によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにＤ２によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【００６９】
その後、照会６５４で、境界が動的に決定されるかどうかが判別される。動的に決定されない場合、Ｍ３フィールド内に指定された値が境界サイズ（ＢｄｙＳｉｚｅ）として使用される。そうでない場合、プロセッサはステップ６５６で、境界サイズを動的に決定する。たとえばＭ３フィールドは、境界のタイプ（たとえばキャッシュ・ライン、ページなど）を指定し、このタイプおよびプロセッサの１つまたは複数の特徴（たとえばプロセッサに関するキャッシュ・ライン・サイズ、プロセッサに関するページ・サイズなど）に基づいて、プロセッサは境界を決定する。例として、タイプに基づいて、プロセッサは境界に固定サイズ（たとえば事前に定義されたプロセッサに関する固定キャッシュ・ラインまたはページ・サイズ）を使用するか、または、タイプに基づいてプロセッサは境界を決定する。たとえば、タイプがページ境界である場合、プロセッサは変換索引バッファ（ＴＬＢ）内で開始アドレスを探索し、そこからページ境界を決定する。他の例も存在する。
【００７０】
動的であるかまたは指定された命令によるかのいずれかでの境界サイズの決定に続き、ステップ６６０で、境界マスク（ＢｄｙＭａｓｋ）が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ（ＢｄｙＳｉｚｅ）６５８の２の補数否定が取られ、境界マスク６６２を作成する（たとえば、ＢｄｙＭａｓｋ＝０−ＢｄｙＳｉｚｅ）。
【００７１】
次に、ステップ６７０で、ロードを停止する箇所を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ６５８、開始アドレス６５２、ベクトル・サイズ（ｖｅｃ＿ｓｉｚｅ）６６４（たとえばバイト単位で、たとえば１６）、および境界マスク６６２である。一例において、終了アドレス６７２は以下のように計算される。
【００７２】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【００７３】
その後、ステップ６８０で、インデックス付けされたバイト０から始まる第１のオペランド（すなわち指定されたベクトル・レジスタ）が、開始アドレスから始まり終了アドレスで終了するメモリからロードされる。これにより、指定されたメモリ境界を横切ることなく、可変数のバイトをメモリからベクトルにロードすることが可能である。上記に示したように、たとえばメモリ境界が６４バイトにあり、開始アドレスが５８バイトである場合、バイト５８〜６４がベクトル・レジスタ内にロードされる。一例において、バイトは並列にロードされる。
【００７４】
Vector Loadto Block Boundary命令のいずれかの実施形態に従ってロードされるベクトル・レジスタの一例は、図６に示されている。図に示されるように、図５の縦の破線で指定された境界を超えてデータがロードされることはない。境界を超えた位置にはアクセス不可能であり、例外はない。特定の一実施形態において、ベクトルは左から右へロードされる。しかしながら他の実施形態では、右から左へロードすることが可能である。一実施形態において、左から右または右から左のベクトルの方向は、ランタイム時に提供される。たとえば命令は、例として、処理の方向が左から右または右から左のいずれかであることを示す、レジスタ、状況制御、または他のエンティティにアクセスする。一実施形態において、この方向制御は命令の一部としては符号化されないが、ランタイム時に命令に提供される。
【００７５】
一例において、VectorLoad to Block Boundary命令は、主メモリ（本明細書では主ストレージとも呼ばれる）のブロック内にある第２のオペランドの対応するバイトと共に、ベクトル・レジスタのバイト（第１のオペランド）のみをロードする。主メモリのブロックは、命令内に指定される（たとえば、サイズならびにロードが開始されるブロック内のアドレスは命令内に指定される）か、または、ブロック境界のタイプ（たとえばキャッシュ・ラインまたはページ）、および、キャッシュ・ラインまたはページ・サイズなどの、命令を実行するプロセッサの１つまたは複数の特徴によって動的に決定される。本明細書で使用される場合、主メモリのブロックは、指定されたサイズのメモリの任意のブロックである。指定されたサイズはブロックの境界とも呼ばれ、境界はブロックの終わりである。
【００７６】
ヌル・ターミネータなどの終端文字を見つけるために使用される１つの命令が、Vector Find Element Not Equal命令（ＶＦＢＮＥＺ）であり、その例が図１３に示されている。この命令は、一実施形態において、不等性について複数のベクトルのデータを比較すること、ならびに、ヌルまたはゼロ要素（たとえば要素全体がゼロである）などのターミネータに関して、選択されたベクトルを検索することが可能である。
【００７７】
一例において、VectorFind Element Not Equal命令７００は、Vector Find Element Not Equal動作を示す命令コード７０２ａ（たとえばビット０〜７）、７０２ｂ（たとえばビット４０〜４７）、第１のベクトル・レジスタ（Ｖ１）を指定するために使用される第１のベクトル・レジスタ・フィールド７０４（たとえばビット８〜１１）、第２のベクトル・レジスタ（Ｖ２）を指定するために使用される第２のベクトル・レジスタ・フィールド７０６（たとえばビット１２〜１５）、第３のベクトル・レジスタ（Ｖ３）を指定するために使用される第３のベクトル・レジスタ・フィールド７０８（たとえばビット１６〜１９）、第１のマスク・フィールド（Ｍ５）７１０（たとえばビット２４〜２７）、第２のマスク・フィールド（Ｍ４）７１２（たとえばビット３２〜３５）、およびＲＸＢフィールド７１４（たとえばビット３６〜３９）を含む。一例において、フィールド７０４〜７１４はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【００７８】
一例において、命令コード・フィールド７０２ａによって指定される命令コードの選択されたビット（たとえば最初の２つのビット）は、命令の長さおよび形式を指定する。この特定の例において、選択されたビットは、長さが３つのハーフワードであり、形式は拡張命令フィールドを伴うベクトル・レジスタおよびインデックス・ストレージ動作であることを示す。ベクトル（Ｖ）フィールドのそれぞれ、ならびにＲＸＢによって指定されるその対応する拡張ビットは、ベクトル・レジスタを指定する。特にベクトル・レジスタの場合、オペランドを含むレジスタは、たとえば、最上位ビットとしてのレジスタ拡張ビット（ＲＸＢ）の追加を伴う、レジスタ・フィールドの４ビット・フィールドを使用して指定される。たとえば、４ビット・フィールドが０１１０であり、拡張ビットが０である場合、５ビット・フィールド００１１０はレジスタ数６を示す。
【００７９】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、ベクトル・レジスタＶ１に関連付けられた下付き数字１は第１のオペランドを示す、と言う具合である。レジスタ・オペランドは１レジスタ長さであり、これはたとえば１２８ビットである。
【００８０】
たとえば０〜３の４ビットを有するＭ４フィールドは、たとえばビット１〜３内に要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタ・オペランド内に要素のサイズを指定する。一例において、要素サイズ制御はバイト、ハーフワード（たとえば２バイト）、またはワード（たとえば４バイト）を指定することができる。たとえば０はバイトを示し、１はハーフワードを示し、２はワード、別名フルワードを示す。予約値が指定された場合、指定例外が認識される。
【００８１】
Ｍ５フィールドは、たとえば以下を含む、たとえば４ビット・フィールドのビット０〜３である。
【００８２】
ゼロ検索フィールド（ＺＳ、ビット２）。１である場合、第２のオペランドの各要素もゼロと比較される。（他の例において、これは、ゼロと比較される第３のオペランドまたは別のオペランドの各要素である。）
【００８３】
条件コード設定フィールド（ＣＣ、ビット３）。ゼロである場合、条件コードは設定されず、未変更のままである。１である場合、条件コードは、例として以下に指定されたように設定される。
【００８４】
０−ゼロ検索ビットが設定されている場合、比較は、不等の比較よりも低いインデックス要素内の両方のオペランドでゼロ要素を検出した。
１−要素の不一致が検出され、Ｖ２内の要素はＶ３内の要素よりも小さい。
２−要素の不一致が検出され、Ｖ２内の要素はＶ３内の要素よりも大きい。
３−すべての要素が同等を比較し、ゼロ検索ビットが設定されている場合、第２のオペランド（または、別の実施形態では他のオペランド）内にゼロ要素は発見されなかった。
【００８５】
Vector FindElement Not Equal命令の一実施形態を実行する際、一実施形態において左から右へ進むと、（Ｖ２およびその拡張ビットによって指定されたベクトル・レジスタに含まれる）第２のオペランドの符号なし２進整数要素が、（Ｖ３およびその拡張ビットによって指定されたベクトル・レジスタに含まれる）第３のオペランドの対応する符号なし２進整数要素と比較される。２つの要素が等しくない場合、左端の不等要素のバイト・インデックスは（Ｖ１およびその拡張ビットによって指定されたレジスタ内に指定される）第１のオペランドの指定バイト（たとえばバイト７）内に配置され、第１のオペランドの他のすべてのバイトにゼロが記憶される。
【００８６】
一例において、戻された（たとえば指定バイト内に記憶された）要素のバイト・インデックスは、等しくない左端要素の第１のバイトのインデックスである。たとえば、要素サイズがバイトである場合、左端の不等要素のインデックスが戻される（たとえば、１６の要素、０〜１５が存在し、要素６が不等である場合、バイト・インデックス６が戻される）。同様に、要素サイズがハーフワードであり、８つの要素、０〜７が存在し、要素３のバイト６または７のいずれかが不等である場合、バイト・インデックス６が戻される。同様に、要素サイズがフルワードであり、４つの要素、０〜３が存在し、要素１のバイト４〜７のうちの１つが不等である場合、バイト・インデックス４が戻される。
【００８７】
Ｍ５フィールド内の条件コード設定ビットが、たとえば１に設定された場合、条件コードは、いずれのオペランドが大きかったかを、もしもあれば、示すように設定される。すなわち、たとえば第２のオペランド内の文字と同等の２進整数が、第３のオペランド内の不等文字と同等の２進整数と比較され、条件コードはこの比較に基づいて設定される。要素が等しかった場合、ベクトル・サイズに等しいバイト・インデックスが第１のオペランドの指定バイト（たとえばバイト７）内に配置され、すべての他のバイト位置にゼロが配置される。条件コード設定ビットが１である場合、選択された条件コード（たとえば条件コード３）が設定される。
【００８８】
Vector FindElement Not Equal命令が終端文字を見つけるためにのみ使用されているこの実施形態では、第２および第３の両方のオペランドが同じデータを含むため、比較によって不等文字が生じることはない。
【００８９】
Ｍ５フィールド内にゼロ検索ビットが設定された場合、第１のオペランド（または他の実施形態では、第３のオペランドまたは別のオペランド）内の各要素は、同等性に関してゼロ（ヌル、ターミネータ、終端文字、文字列の終わりなどとも呼ばれる）とも比較される。第２のオペランドの任意の他の要素が不等であることが見つかる前に、第２のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第１のバイトのバイト・インデックスは、第１のオペランドの指定バイト（たとえばバイト７）内に記憶される。ゼロはすべての他のバイト内に記憶され、選択された条件コード（たとえば条件コード、ゼロ）が設定される。
【００９０】
一実施形態において、要素の比較は並列に実行される。たとえば、比較されているベクトル・レジスタが１６バイト長さである場合、１６バイトは並列に比較される。他の実施形態において、データの単位はバイト以外であってよく、並列な比較数は単位サイズに対応する。さらに別の実施形態において、左から右または右から左のベクトルの方向は、ランタイム時に提供される。たとえば命令は、例として、処理方向が左から右または右から左のいずれかであることを示す、レジスタ、状況制御、または他のエンティティにアクセスする。一実施形態において、この方向制御は命令の一部としては符号化されないが、ランタイム時に命令に提供される。
【００９１】
他の実施形態において、命令はＲＸＢフィールドを含まない。代わりに、拡張は使用されないか、あるいは、拡張は命令外部の制御からなどの別の様式で提供されるか、または命令の別のフィールドの一部として提供される。
【００９２】
Vector FindElement Not Equal命令を処理する一実施形態に関する他の詳細を、図１４を参照しながら説明する。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【００９３】
初期に、照会８００で、ヌル（ゼロ要素、文字列の終わり、ターミネータなどと呼ばれる）の検索が実行されるかどうかが判別される。ヌルの検索が実行される場合、ステップ８０２でヌル文字に対する、すなわちゼロ要素に関する比較が実行され、その結果がｎｕｌｌｉｄｘ８０３に出力される。たとえばゼロ要素の左端バイトのインデックスがｎｕｌｌｉｄｘ内に配置される。たとえば、要素サイズがバイトであり、バイト５内にゼロ要素が見つかった場合、ゼロ要素が見つかったバイトのインデックス（たとえば５）がｎｕｌｌｉｄｘ内に配置される。同様に、要素サイズがハーフワードであり、８つの要素、０〜７が存在し、要素３（すなわちバイト６〜７）がゼロである場合、６（バイト・インデックス６の場合）がｎｕｌｌｉｄｘ内に配置される。同様に、要素サイズがフルワードであり、４つの要素、０〜３が存在し、要素１（すなわちバイト４〜７）がゼロである場合、４（バイト・インデックス４の場合）がｎｕｌｌｉｄｘ内に配置される。ヌル要素が見つからない場合、一例において、ベクトルのサイズ（たとえばバイト単位で、例えば１６）がｎｕｌｌｉｄｘ内に配置される。
【００９４】
加えて、またはヌル検索が実行されない場合、ステップ８０４で、比較動作に基づいてＡとＢを比較する複数の比較（たとえば１６）が並列に実行される。一例において、Ａは第２のオペランドのコンテンツであり、Ｂは第３のオペランドのコンテンツであって、比較動作は等しくない。
【００９５】
比較の結果は、左または右のいずれからの検索であるかに応じて、左インデックスｃｍｐｉｄｘｌ、または右インデックスｃｍｐｉｄｘｒのいずれかと呼ばれる、変数８０６内に記憶される。たとえば、比較が等しい比較でない場合、検索は左から右であり、比較の結果として１つまたは複数の不等性が生じ、最下位の不等要素の第１のバイトに関連付けられたインデックスがｃｍｐｉｄｘｌ内に配置される。一例として、要素サイズがバイトであり、ベクトル内に１６の要素（０〜１５）が存在し、要素６内に不等性が見つかった場合、６がｃｍｐｉｄｘｌ内に記憶される。同様に、要素サイズがハーフワードであり、ベクトル内に８つの要素（０〜７）が存在し、要素３内に（たとえばバイト６または７に）不等性が見つかった場合、要素の第１のバイトのインデックス（バイト６）が戻される。同様に、要素サイズがフルワードであり、４つの要素（０〜３）が存在し、要素１内に（たとえばバイト４〜７に）不等性が見つかった場合、要素の第１のバイトのインデックス（バイト４）が戻される。不等比較が存在しない場合、一実施形態では、比較の方向に応じて、ｃｍｐｉｄｘｌまたはｃｍｐｉｄｘｒがベクトルのサイズ（たとえばバイト単位で、たとえば１６）に等しく設定される。
【００９６】
その後、照会８０８で、検索が左からまたは右からのいずれであるかに関して判別される。検索が左からである場合、変数ｃｍｐｉｄｘはステップ８１０で、ｃｍｐｉｄｘｌに等しく設定され、そうでなければ、ｃｍｐｉｄｘはステップ８１２で、ｃｍｐｉｄｘｒに等しく設定される。
【００９７】
ｃｍｐｉｄｘの設定に続いて、照会８１４で、ヌル文字についての検索が実行されたかどうかが判別される。ヌル文字についての検索がなかった場合、ステップ８１６で、変数ｉｄｘは比較インデックスｃｍｐｉｄｘに設定される。ヌルが検索された場合、ステップ８１８で、ｉｄｘは最小の比較インデックスまたはヌル・インデックスｎｕｌｌｉｄｘに設定される。これで処理は終結する。
【００９８】
図１４の処理に関するブロック論理の例が、図１５に示されている。この例には、２つの入力ベクトルＢ９００およびベクトルＡ９０２が存在する。どちらの入力も、比較（たとえば不等）を並列に実行する、比較論理９０４への入力である。さらに一方の入力、ベクトルＡは、ヌル処理を実行するゼロ検出論理９０６への入力でもある。
【００９９】
比較論理の出力ｉｄｘＬまたはｉｄｘＲ９０８、ならびにゼロ検出論理の出力ｎｕｌｌｉｄｘ９１０は、結果決定論理９１２への入力である。結果決定論理は、以下の制御、すなわち検索の方向を示す右／左９１４、ヌル処理が実行されるかどうかを示すゼロ検出９１６、および各要素のサイズ（たとえばバイト、ハーフワード、ワード）を提供する要素サイズ９１８も、入力として採用し、出力ベクトル９２２（たとえばバイト７）に記憶される結果のインデックス９２０、ｒｅｓｕｌｔｉｄｘを生成する。
【０１００】
さらに、結果決定論理は、オプションで条件コード９２４を出力する、条件コード処理９２３を含む。
【０１０１】
比較論理９０４に関する擬似コードの例は、以下の通りである。
【０１０２】
【表３】
2015518193.tif 000005
【０１０３】
図に示されるように、方向に応じて、変数ｉｄｘＬまたはｉｄｘＲがベクトルのサイズ（たとえばバイト単位で、たとえば１６）に初期設定される。その後、ベクトルＡの各要素とベクトルＢの対応する要素とが比較される。一例において、比較はバイト比較であるため、比較は１６バイトのそれぞれ（ｉ）に対して行われる。この例では、比較動作は等しくなく、不等性が見つかった場合、不等バイトのインデックスは、左からの検索の場合はｉｄｘＬに、右からの検索の場合はｉｄｘＲに記憶される。
【０１０４】
ゼロ検出論理９０６に関する擬似コードの例は、以下の通りである。
【０１０５】
【表４】
2015518193.tif 000006
【０１０６】
図に示されるように、ゼロに等しいかどうかを見るためにベクトルの各要素（ｊ）がテストされる。要素がゼロに等しい場合、ｎｕｌｌｉｄｘは、その要素のインデックスに要素サイズを掛け合わせたものに等しく設定される。たとえば、要素サイズがハーフワード（２バイト）であり、ヌル文字が要素３内で検出された場合、３に２が掛け合わされ、ｎｕｌｌｉｄｘは６に設定され、これはバイト６を表す。同様に、要素サイズがフルワード（４バイト）であり、ヌル文字が要素３内で検出された場合、３に４が掛け合わされ、ｎｕｌｌｉｄｘは１２に設定される。
【０１０７】
同様に、結果決定論理９１２に関する擬似コードの例は、以下の通りである。
【０１０８】
【表５】
2015518193.tif 000007
【０１０９】
図に示されるように、左／右制御が左を示す場合、ｃｍｐｉｄｘはｉｄｘＬに等しく設定され、そうでなければｃｍｐｉｄｘはｉｄｘＲに等しく設定される。さらに、ゼロ検出インジケータがオンの場合、ｒｅｓｕｌｔｉｄｘは最小のｃｍｐｉｄｘまたはｎｕｌｌｉｄｘに等しく設定され、条件コード設定制御がオンであり、ｃｍｐｉｄｘがｎｕｌｌｉｄｘよりも大きい場合、条件コードはゼロに設定される。そうでない場合、ゼロ検出はオンでなく、ｒｅｓｕｌｔｉｄｘはｃｍｐｉｄｘに等しく設定される。
【０１１０】
さらに、要素サイズがバイトに等しい場合、要素サイズ・マスクは'１１１１１'に設定され、要素サイズが２バイトに等しい場合、マスクは'１１１１０'に設定され、要素サイズが４バイトに等しい場合、マスクは'１１１００'に設定される。
【０１１１】
その後、ｒｅｓｕｌｔｉｄｘは、要素サイズ・マスクとＡＮＤされたｒｅｓｕｌｔｉｄｘに等しく設定される。たとえば、要素サイズがハーフワードであり、バイト７がｒｅｓｕｌｔｉｄｘの場合、ｒｅｓｕｌｔｉｄｘ＝００１１１  ＡＮＤ  １１１１０となり、００１１０を提供するため、ｒｅｓｕｌｔｉｄｘは６（すなわち、２進数の００１１０）に等しく設定され、これは要素の第１のバイトである。
【０１１２】
加えて、条件コードがオプションで設定される。命令の設定条件コード制御がオンに設定された場合、条件コードが提供され、層でない場合、条件コードは設定されない。例として、制御がオンに設定された場合、ｒｅｓｕｌｔｉｄｘ＝１６であれば、条件コードは３に設定される。そうでない場合、ＡのｒｅｓｕｌｔｉｄｘがＢのｒｅｓｕｌｔｉｄｘよりも小さい場合、条件コードは１に設定され、さもなければ条件コードは２に設定される。
【０１１３】
１２８ビット・ベクトルの場合、比較論理は、たとえば２５６比較ではなく、たとえば１６バイト比較のみを実行する。これにより、より大きなベクトルに対するスケーリングが提供される。さらに、左／右制御がランタイム値として提供可能であり、命令内には符号化されない。さらにまた、結果として戻される値は要素インデックスではなくバイト位置である。さらに、４バイト比較ならびに１バイトおよび２バイト比較がサポートされる。
【０１１４】
他の実施形態において、ゼロ検索は条件でないが、代わりに、Vector Find Element Not Equal命令が実行される時に実行される。命令の実行に基づくかまたはこれに応答して、ゼロ検索が実行され、ゼロ要素の位置（たとえばバイト・インデックス）、または第１の不一致要素の位置（たとえばバイト・インデックス）、あるいはその両方が戻される。一実施形態において、実施形態に関係なく、Vector Find Element Not Equal命令に関して実行される比較の数は、ベクトルのバイト数に対応する。たとえば、検索または比較されているベクトルが１６バイトの場合、多くとも１６比較が、たとえば並列に実行される。他の実施形態において、不一致またはゼロ要素が見つかると、比較は終了する。
【０１１５】
Load Countto Block Boundary（ＬＣＢＢ）命令の一実施形態を、図１６を参照しながら説明する。この命令は、たとえば、メモリ内の指定されたアドレスから指定されたメモリ境界までのデータのバイト数のカウントを提供する（たとえば、メモリの指定された境界を横切ることなく、ベクトル・レジスタ内にロードされたバイト数を提供する）。
【０１１６】
一例において、LoadCount to Block Boundary命令１０００は、Load Count to Block Boundary動作を示す命令コード・フィールド１００２ａ（たとえばビット０〜７）、１００２ｂ（たとえばビット４０〜４７）、汎用レジスタ（Ｒ１）を指定するために使用されるレジスタ・フィールド１００４（たとえばビット８〜１１）、インデックス・フィールド（Ｘ２）１００６（たとえばビット１２〜１５）、ベース・フィールド（Ｂ２）１００８（たとえばビット１６〜１９）、変位フィールド（Ｄ２）１０１０（たとえばビット２０〜３１）、およびマスク・フィールド（Ｍ３）１０１２（たとえばビット３２〜３５）を含む。一例において、フィールド１００４〜１０１２はそれぞれ別々であり、命令コード・フィールドから独立している。さらに一実施形態において、それらは別々であり互いに独立しているが、他の実施形態において、複数のフィールドが組み合わせられ得る。これらのフィールドの使用に関する他の情報を以下で説明する。
【０１１７】
一実施形態において、命令コード・フィールド１００２ａによって指定される命令コードの選択されたビット（たとえば第１の２ビット）は、命令の長さおよび形式を指定する。この特定の例では、長さは３ハーフワードであり、形式は拡張命令コード・フィールドを伴うレジスタおよびインデックス・ストレージ動作である。
【０１１８】
命令のフィールドに関連付けられた下付き数字は、フィールドが適用されるオペランドを示す。たとえば、Ｒ１に関連付けられた下付き数字１は第１のオペランドを示す、と言う具合である。レジスタ・オペランドは１レジスタ長さであり、これはたとえば１２８ビットである。
【０１１９】
一例において、レジスタおよびインデックス・ストレージ動作命令では、第２のオペランド・アドレスを形成するために、Ｘ２およびＢ２フィールドによって指定された汎用レジスタのコンテンツが、Ｄ２フィールドのコンテンツに追加される。Load Count to Block Boundary命令に関する変位Ｄ２は、一例では、１２ビット符号なし整数として扱われる。第２のオペランド・アドレスは、主メモリ内の位置を示すために使用されるが、本実施形態では、データのアドレス指定には使用されない。
【０１２０】
一実施形態において、Ｍ３フィールドは、メモリ境界を横切ることなくロードすることが可能なバイト数を計算するために、ブロック境界サイズに関してＣＰＵに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。コードおよび対応する値の例は以下の通りである。
【０１２１】
【表６】
2015518193.tif 000008
【０１２２】
他の例において、境界サイズは命令に含められないが、代わりに、命令を実行するプロセッサによって動的に決定される。たとえば、Ｍ３フィールドは境界のタイプ（たとえば、キャッシュ・ライン、ページなど）を指定し、プロセッサは、プロセッサのタイプおよび１つまたは複数の特徴（たとえばプロセッサに関するキャッシュ・ライン・サイズ、プロセッサに関するページ・サイズなど）に基づいて境界を決定する。例として、プロセッサは、タイプに基づいて境界に対して固定サイズを使用する（たとえば、プロセッサに対する事前に定義された固定キャッシュ・ラインまたはページ・サイズ）か、または、タイプに基づいてプロセッサは境界を決定する。たとえば、タイプがページ境界である場合、プロセッサは変換索引バッファ（ＴＬＢ）内で開始アドレスを探索し、そこからページ境界を決定する。他の例も存在する。たとえばタイプは、命令の別のフィールドによって、または命令外部の制御から、提供可能である。
【０１２３】
Load Countto Block Boundary命令の一実施形態の実行において、指定されたブロック境界を横切ることなく、第２のオペランド位置からロードすることが可能なバイト数を含む符号なし２進整数（たとえば６４ビット）は、たとえばロードされることになるベクトル・レジスタのサイズ（たとえば１６）を上限として、第１のオペランド内に指定された汎用レジスタ内に配置される。
【０１２４】
命令の実行の結果、オプションの条件コードはたとえば以下のように設定される。
【０１２５】
０−オペランド１は１６である
１−
２−
３−オペランド１は１６未満である
【０１２６】
上記の例示の命令において、カウントが開始される開始アドレスは、インデックス・レジスタ値（Ｘ２）＋基本レジスタ値（Ｂ２）＋変位（Ｄ２）によって決定されるが、他の実施形態において、これは単なるいくつかの例として、レジスタ値、命令アドレス＋命令テキスト指定オフセット、レジスタ値＋変位、または、レジスタ値＋インデックス・レジスタ値によって提供される。
【０１２７】
Load Countto Block Boundary命令を処理する一実施形態の詳細を、図１７を参照しながら説明する。一例において、コンピューティング環境のプロセッサはこの論理を実行している。
【０１２８】
一実施形態において、初期にステップ１１００で境界マスク（ＢｄｙＭａｓｋ）が作成され、これを使用して指定された境界への近さが決定される。マスクを作成するために、一例では、境界サイズ（ＢｄｙＳｉｚｅ）１１０２の２の補数否定が取られ、境界マスク１１０４を作成する（たとえば、ＢｄｙＭａｓｋ＝０−ＢｄｙＳｉｚｅ）。一例では境界サイズは命令（たとえばＭ３フィールド）によって提供され、または別の例では、本明細書で説明するように、マシンによって決定される。
【０１２９】
その後、ステップ１１１０で、カウントが開始されるメモリ内の位置を示す開始アドレスが計算される。例として、開始アドレス１１１２は、レジスタ値、命令アドレス＋命令テキスト指定オフセット、レジスタ値＋変位、レジスタ値＋インデックス・レジスタ値、またはレジスタ値＋インデックス・レジスタ値＋変位によって、提供することが可能である。本明細書で提供される命令において、開始アドレスは、Ｘ２フィールド、Ｂ２フィールド、およびＤ２フィールドによって提供される。すなわち、Ｘ２およびＢ２によって指定されるレジスタのコンテンツは、開始アドレスを提供するためにＤ２によって示される変位に追加される。上記に示された開始アドレスを計算するための方法は単なる例であり、他の例も可能である。
【０１３０】
次に、ステップ１１２０で、カウントを停止する位置を示す終了アドレスが計算される。この計算への入力は、たとえば境界サイズ１１０２、開始アドレス１１１２、ベクトル・サイズ（ｖｅｃ＿ｓｉｚｅ）１１１４（たとえばバイト単位で、たとえば１６）、および境界マスク１１０４である。ベクトル・サイズはベクトル・レジスタまたは他のレジスタのサイズ（たとえばバイト単位で、たとえば１６）である。レジスタは、たとえば内部にデータがロードできるレジスタである。一例において、終了アドレス１１２２は以下のように計算される。
【０１３１】
EndAddress=min(StartAddress+(BdySize-(StartAddress& BdyMask)),StartAddress+vec_size)
【０１３２】
その後、ステップ１１３０でカウントが計算される。たとえば、カウント＝EndAddress 1122-StartAddress 1112である。他の例において、カウントは、終了アドレスを用いることなく開始アドレスから計算することができる。この例では、カウント＝ｍｉｎ（１６、ＢｄｙＳｉｚｅ−（StartAddress AND BdyMask））であり、この式で１６はベクトル・レジスタ（または他のレジスタ）のサイズである。他の例において、他のベクトル・サイズが使用可能である。
【０１３３】
一実施形態において、LoadCount to Block Boundary命令を使用して、ベクトル・レジスタなどのレジスタに何バイトがロードされたかが決定される。このカウントは、本明細書で説明されるように、終端文字列などの文字データ・セットの長さを決定する場合、または他の処理で有用である。
【０１３４】
図に示されるように、一実施形態において、１つのメモリ位置から別のメモリ位置にデータをコピーするために、ベクトル・レジスタが使用される。ベクトル機構の一例において、３２のベクトル・レジスタが存在し、他のタイプのレジスタをベクトル・レジスタの象限（quadrant）にマッピングすることができる。たとえば図１８に示されるように、３２ベクトル・レジスタ１２０２を含むレジスタ・ファイル１２００が存在し、各レジスタが１２８ビット長さである場合、６４ビット長さの１６の浮動小数点レジスタ１２０４がベクトル・レジスタにオーバレイ可能である。したがって、例として、浮動小数点レジスタ２が修正された場合、ベクトル・レジスタ２も修正される。他のタイプのレジスタに関する他のマッピングも可能である。
【０１３５】
上記で、終端文字データを、保証されていない例外を発生させることなく並列にコピーするための技法について、詳細に説明した。典型的には、文字を区切り文字列の一方から他方へ並列にコピーすることは、境界を横切るアクセスが望ましくないアクセス例外を発生させる可能性のある、選択された境界交差近くで、ソース文字列が終了するかどうかがわからないため、困難である。以前の技法は、１回に１文字のみをコピーするか、または文字列が境界近くにあるかどうかを知るためにチェックを追加した。１回に１文字のみの作業は、本質的に遅い。チェックを追加することで複雑さが与えられ、待ち時間が追加される。
【０１３６】
指定された境界にデータを並列にロードし、ロードされた文字の数を決定する方法を提供する命令、および、第１の区切り文字のインデックスを見つけるための（データを並列にチェックする）命令を使用することによって、最小数の分岐命令を用いて終端文字データ（たとえばヌル終端）をコピーするための技法が提供される。さらに、列文字の高速並列コピー、ならびに偽の例外の防止も提供される。
【０１３７】
上記の技法の１つまたは複数の態様を使用することで、実行時間の短縮を含む性能の向上がもたらされる。
【０１３８】
本明細書では、特に明示的にまたは文脈によって示されない限り、メモリ、主メモリ、ストレージ、および主ストレージは交換可能に用いられる。
【０１３９】
他の命令の例を含むベクトル機構に関する追加の細部を、本発明を実施するための形態の一部として以下でさらに説明する。
【０１４０】
当業者であれば理解されるように、本発明の１つまたは複数の態様は、システム、方法、またはコンピュータ・プログラム製品として具体化可能である。したがって本発明の１つまたは複数の態様は、完全にハードウェア実施形態、完全にソフトウェア実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、本明細書ではすべてが全体として「回路」、「モジュール」、または「システム」と呼ばれる場合のあるソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形を取ることができる。さらに本発明の１つまたは複数の態様は、その上に具体化されたコンピュータ読み取り可能プログラム・コードを有する１つまたは複数のコンピュータ読み取り可能媒体内に具体化された、コンピュータ・プログラム製品の形を取ることもできる。
【０１４１】
１つまたは複数のコンピュータ読み取り可能媒体の任意の組み合わせが利用可能である。コンピュータ読み取り可能媒体は、コンピュータ読み取り可能記憶媒体とすることができる。コンピュータ読み取り可能記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいはそれらの任意の好適な組み合わせとすることができるが、これらに限定されない。コンピュータ読み取り可能記憶媒体のより特定の例（非網羅的リスト）は、１本または複数本のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶デバイス、または、それらの任意の好適な組み合わせを含む。本明細書との関連において、コンピュータ読み取り可能記憶媒体は、命令実行システム、装置、またはデバイスによって、あるいはそれらに関連して使用するためのプログラムを含むかまたは記憶することが可能な、任意の有形媒体とすることができる。
【０１４２】
次に図１９を参照すると、一例において、コンピュータ・プログラム製品１３００は、たとえば、本発明の１つまたは複数の態様を提供および容易にするために、コンピュータ読み取り可能プログラム・コード手段または論理１３０４をその上に記憶するための、１つまたは複数の持続性コンピュータ読み取り可能記憶媒体１３０２を含む。
【０１４３】
コンピュータ読み取り可能媒体上に具体化されたプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、ＲＦなど、またはそれらの任意の好適な組み合わせを含むがそれらに限定されない、適切な媒体を使用して、伝送可能である。
【０１４４】
本発明の１つまたは複数の態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語、アセンブラ、または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、あるいは、完全にリモート・コンピュータまたはサーバ上で、実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続することができるか、あるいは、（たとえばインターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続することができる。
【０１４５】
本発明の１つまたは複数の態様を、本発明の実施形態に従った方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら、本明細書で説明する。流れ図またはブロック図あるいはその両方の各ブロック、および、流れ図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ・プログラム命令によって実装可能であることを理解されよう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するための手段を作成するように、マシンを生成するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供可能である。
【０１４６】
これらのコンピュータ・プログラム命令は、コンピュータ読み取り可能媒体内にも記憶可能であり、特定の様式で機能するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスに命じることが可能であるため、結果としてコンピュータ読み取り可能媒体に記憶された命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装する命令を含む製品を生成することになる。
【０１４７】
コンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル装置上で実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能／動作を実装するためのプロセスを提供するように、コンピュータ実装プロセスを生成するために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードすることも可能である。
【０１４８】
図面内の流れ図およびブロック図は、本発明の１つまたは複数の態様の様々な実施形態に従った、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、または動作を示す。この点で、流れ図またはブロック図内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、またはコードの一部を表すことができる。いくつかの代替実装において、ブロック内に示された機能は、図に示された順序以外で実行可能であることにも留意されたい。たとえば、連続して示された２つのブロックは、実際にはほぼ同時に実行可能であるか、またはブロックは、関連する機能に応じて、時には逆の順序で実行可能である。ブロック図または流れ図あるいはその両方の各ブロック、および、ブロック図または流れ図あるいはその両方内のブロックの組み合わせは、指定された機能または動作を実行する特定用途向けのハードウェアベース・システム、あるいは特定用途向けハードウェアおよびコンピュータ命令の組み合わせによって、実装可能であることにも留意されよう。
【０１４９】
上記に加え、本発明の１つまたは複数の態様は、顧客環境の管理を提供するサービス・プロバイダによって、提供、提示、展開、管理、サービス提供などが実行可能である。たとえばサービス・プロバイダは、１人または複数の顧客に対して本発明の１つまたは複数の態様を実行する、コンピュータ・コードまたはコンピュータ・インフラストラクチャ、あるいはその両方を、作成、維持、サポートすることなどが可能である。見返りに、サービス・プロバイダは、例として、加入または料金あるいはその両方の契約の下で、顧客から支払いを受けることができる。加えて、または別の方法として、サービス・プロバイダは、１人または複数の第三者への広告コンテンツの販売から、支払いを受けることができる。
【０１５０】
本発明の一態様において、本発明の１つまたは複数の態様を実行するためのアプリケーションを展開することができる。一例として、アプリケーションの展開は、本発明の１つまたは複数の態様を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１５１】
本発明の他の態様として、コードとコンピューティング・システムとの併用で本発明の１つまたは複数の態様を実行することが可能なコンピューティング・システムに、コンピュータ読み取り可能コードを組み込むことを含む、コンピューティング・インフラストラクチャが展開可能である。
【０１５２】
本発明の他の態様として、コンピュータ読み取り可能媒体コードをコンピュータ・システムに組み込むことを含む、コンピューティング・インフラストラクチャを組み込むためのプロセスが提供可能である。コンピュータ・システムは、コンピュータ媒体が本発明の１つまたは複数の態様を含む、コンピュータ読み取り可能媒体を備える。コードとコンピュータ・システムとの併用で、本発明の１つまたは複数の態様を実行することが可能である。
【０１５３】
上記で様々な実施形態を説明したが、これらは単なる例である。たとえば、他のアーキテクチャのコンピューティング環境は、本発明の１つまたは複数の態様を組み込んで使用することができる。さらに、本発明の趣旨を逸脱することなく、他のサイズのベクトルを使用することが可能であり、命令への変更を行うことが可能である。加えて、Vector Find Element Equal命令などであるがこれに限定されない命令の処理において、他の命令を使用することが可能である。さらに、ヌル終端文字データ以外のデータのコピーを、本発明の１つまたは複数の態様を使用して実行することができる。さらに、ベクトル・レジスタ以外のレジスタが使用可能であるか、または、データが、整数データまたは他のタイプのデータなどの文字データ以外であることが可能である、あるいはその両方である。
【０１５４】
さらに、他のタイプのコンピューティング環境が、本発明の１つまたは複数の態様から恩恵を受けることができる。例として、プログラム・コードの記憶または実行あるいはその両方に好適な、システム・バスを介してメモリ要素に直接または間接的に結合された少なくとも２つのプロセッサを含む、データ処理システムが使用可能である。メモリ要素は、たとえば、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量ストレージ、および、実行時に大容量ストレージからコードを取り出さなければならない回数を減らすために少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリを、含む。
【０１５５】
入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、および他のメモリ媒体などを含むがこれらに限定されない）を、直接、または介在するＩ／Ｏコントローラを介して、システムに結合することができる。データ処理システムを他のデータ処理システムあるいはリモートのプリンタまたは記憶デバイスに結合できるようにするために、介在する専用または公衆ネットワークを介して、ネットワーク・アダプタをシステムに結合することも可能である。モデム、ケーブル・モデム、およびイーサネット・カードは、ネットワーク・アダプタの使用可能なタイプのごく一部である。
【０１５６】
図２０を参照すると、本発明の１つまたは複数の態様を実装するためのホスト・コンピュータ・システム５０００の代表的な構成要素が描かれている。代表的なホスト・コンピュータ５０００は、コンピュータ・メモリ（すなわち中央ストレージ）５００２と通信している１つまたは複数のＣＰＵ５００１、ならびに、記憶媒体デバイス５０１１および他のコンピュータまたはＳＡＮなどと通信するためのネットワーク５０１０へのＩ／Ｏインターフェースを備える。ＣＰＵ５００１は、アーキテクチャ命令セットおよびアーキテクチャ機能を有する、アーキテクチャに準拠している。ＣＰＵ５００１は、プログラム・アドレス（仮想アドレス）をメモリの実アドレスに変換するための動的アドレス変換（ＤＡＴ）５００３を有することができる。ＤＡＴは、典型的には、コンピュータ・メモリ５００２のブロックへのその後のアクセスがアドレス変換の遅延を必要としないように、変換をキャッシュに入れるための、変換索引バッファ（ＴＬＢ）５００７を含む。典型的には、キャッシュ５００９は、コンピュータ・メモリ５００２とプロセッサ５００１との間で使用される。キャッシュ５００９は、複数のＣＰＵが使用可能な大型のキャッシュと、大型のキャッシュとそれぞれのＣＰＵとの間に小型で高速な（低レベル）キャッシュとを有する、階層型とすることができる。いくつかの実装において、低レベル・キャッシュは、命令フェッチおよびデータ・アクセスのために別々の低レベル・キャッシュを提供するように分割される。一実施形態において、命令は、キャッシュ５００９を介し、命令フェッチ・ユニット５００４によってメモリ５００２からフェッチされる。命令は、命令復号ユニット５００６内で復号され、（いくつかの実施形態では他の命令と共に）命令実行ユニット５００８にディスパッチされる。典型的には、いくつかの実行ユニット５００８、たとえば、算術実行ユニット、浮動小数点実行ユニット、および分岐命令実行ユニットが使用される。命令は、必要に応じて命令指定レジスタまたはメモリからオペランドにアクセスする、実行ユニットによって実行される。オペランドがメモリ５００２からアクセス（ロードまたは記憶）される場合、ロード／記憶ユニット５００５は、典型的には、実行されている命令の制御の下でアクセスを処理する。命令は、ハードウェア回路内または内部マイクロコード（ファームウェア）内で、あるいはそれらの組み合わせによって、実行可能である。
【０１５７】
上記のように、コンピュータ・システムは、ローカル（または主）ストレージ内に情報、ならびに、アドレス指定、保護、ならびに参照および変更記録を含む。アドレス指定のいくつかの態様は、アドレスの形式、アドレス・スペースの概念、様々なタイプのアドレス、および、１つのタイプのアドレスが別のタイプのアドレスに変換される様式を含む。いくつかの主ストレージは、永続的に割り当てられた記憶位置を含む。主ストレージは、直接アドレス指定可能なデータの高速アクセス・ストレージを、システムに提供する。データおよびプログラムは、どちらも、処理される前に（入力デバイスから）主ストレージにロードされることになる。
【０１５８】
主ストレージは、時にはキャッシュと呼ばれる、１つまたは複数の小型で高速アクセスのバッファ・ストレージを含むことができる。キャッシュとは、典型的には、ＣＰＵまたはＩ／Ｏプロセッサに物理的に関連付けられる。性能を除く、物理的構成および別個の記憶媒体の使用の効果は、一般に、プログラムが観察することはできない。
【０１５９】
命令およびデータ・オペランドに対して、別々のキャッシュを維持することはできない。キャッシュ内の情報は、キャッシュ・ブロックまたはキャッシュ・ライン（または略してライン）と呼ばれる、規定境界（integral boundary）上の連続バイト内で維持される。モデルは、キャッシュ・ラインのサイズをバイト単位で戻す、EXTRACT CACHE ATTRIBUTE命令を提供することができる。モデルは、データまたは命令キャッシュ内へのストレージのプリフェッチ、あるいは、キャッシュからのデータの解放を実行する、PREFETCH DATAおよびPREFETCH DATA RELATIVE LONG命令も提供することができる。
【０１６０】
ストレージは、ビットの長い水平文字列としてみなされる。ほとんどの動作の場合、ストレージへのアクセスは左から右への順に進行する。ビットの文字列は８ビット単位に細分される。８ビット単位はバイトと呼ばれ、すべての情報形式の基本構築ブロックである。ストレージ内の各バイト位置は、そのバイト位置のアドレス、または単にバイト・アドレスである、固有の負でない整数によって識別される。隣接するバイト位置は、左の０から始まり、左から右への順に進行する、連続アドレスを有する。アドレスは符号なし２進整数であり、２４、３１、または６４ビットである。
【０１６１】
情報は、ストレージとＣＰＵまたはチャネル・サブシステムとの間で、１回に１バイトまたはバイトのグループで伝送される。特に指定の無い限り、たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおいて、ストレージ内のバイトのグループは、グループの左端のバイトによってアドレス指定される。グループ内のバイト数は、実行されることになる動作によって、暗示または明示的に指定される。ＣＰＵ動作で使用される場合、バイトのグループはフィールドと呼ばれる。たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおいて、各バイトのグループ内のビットは、左から右への順に番号付けされる。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおいて、左端のビットは時には「上位」ビットと呼ばれ、右端のビットは「下位」ビットと呼ばれる。しかしながら、ビット番号はストレージ・アドレスではない。バイトのみがアドレス指定可能である。ストレージ内のバイトの個々のビット上で動作するために、バイト全体がアクセスされる。バイト内のビットは、（たとえばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅでは）左から右へ０から７の番号が付けられる。アドレス内のビットは、２４ビット・アドレスの場合８〜３１または４０〜６３、あるいは３１ビット・アドレスの場合１〜３１または３３〜６３と番号付けされ、６４ビット・アドレスの場合、０〜６３と番号付けされる。複数バイトの任意の他の固定長形式内では、形式を構成するビットには、０から始まる連続番号が付けられる。エラー検出のために、および好ましくは訂正のために、各バイトまたはバイトのグループと共に、１つまたは複数のチェック・ビットを伝送することができる。こうしたチェック・ビットはマシンによって自動的に生成され、プログラムによって直接制御することはできない。記憶容量はバイト数で表される。記憶オペランド・フィールドの長さが命令の命令コードによって暗示される場合、フィールドは固定長を有すると言われ、１、２、４、８、または１６バイトが可能である。いくつかの命令については、より大きなフィールドが暗示可能である。記憶オペランド・フィールドの長さが暗示されずに明示的に示される場合、フィールドは可変長を有すると言われる。可変長オペランドは、１バイトの増分によって（またはいくつかの命令を使用して、２バイトの倍数または他の倍数で）長さを変更することができる。情報がストレージ内に配置される場合、たとえストレージへの物理経路の幅が、記憶されているフィールドの長さよりも大きい可能性があっても、指定されたフィールドに含まれる、それらのバイト位置のみのコンテンツが置き換えられる。
【０１６２】
ある情報の単位が、ストレージ内の規定境界上にあるものとされる。境界は、そのストレージ・アドレスがバイト単位の長さの倍数である場合に、情報の単位に対して規定と呼ばれる。規定境界上の２、４、８、および１６バイトのフィールドに、特別な名前が与えられる。ハーフワードは、２バイト境界上の２つの連続するバイトのグループであり、命令の基本構築ブロックである。ワードは、４バイト境界上の４つの連続するバイトのグループである。ダブルワードは、８バイト境界上の８つの連続するバイトのグループである。クワドワード（quadword）は、１６バイト境界上の１６の連続するバイトのグループである。ストレージ・アドレスがハーフワード、ワード、ダブルワード、およびクワドワードを指定する場合、アドレスの２進数表現は、それぞれ１つ、２つ、３つ、または４つの右端ゼロ・ビットを含む。命令は２バイトの規定境界上にあるものとする。ほとんどの命令の記憶オペランドは、境界整合要件を有さない。
【０１６３】
命令およびデータ・オペランドに対して別々のキャッシュを実装するデバイス上では、記憶がその後フェッチされる命令を変更するか否かにかかわらず、その後命令がフェッチされるキャッシュ・ライン内にプログラムが記憶する場合、かなりの遅延を体験する可能性がある。
【０１６４】
一実施形態において、本発明は、ソフトウェア（時には、許可内部コード、ファームウェア、マイクロコード、ミリコード、ピココードなどと呼ばれ、そのうちのいずれかが本発明の１つまたは複数の態様に一致することになる）によって実施可能である。図２０を参照すると、本発明の１つまたは複数の態様を具体化するソフトウェア・プログラム・コードに、ＣＤ−ＲＯＭドライブ、テープ・ドライブ、またはハード・ドライブなどの長期記憶媒体デバイス５０１１から、ホスト・システム５０００のプロセッサ５００１によってアクセス可能である。ソフトウェア・プログラム・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムと共に使用するための様々な知られた媒体のいずれかの上に、具体化することができる。コードは、こうした媒体上で配布するか、あるいは、１つのコンピュータ・システムのコンピュータ・メモリ５００２またはストレージから、ネットワーク５０１０を介して他のコンピュータ・システムへと、こうした他のシステムのユーザが使用するために、ユーザに配布することができる。
【０１６５】
ソフトウェア・プログラム・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラムの機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体デバイス５０１１から、プロセッサ５００１による処理に使用可能な相対的に高速のコンピュータ・ストレージ５００２へとページングされる。メモリ内、物理媒体上で、ソフトウェア・プログラム・コードを具体化するため、または、ネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むが、これらに限定されない）上で作成および記憶された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１６６】
図２１は、内部で本発明の１つまたは複数の態様が実施可能な、代表的なワークステーションまたはサーバ・ハードウェア・システムを示す。図２１のシステム５０２０は、オプションの周辺デバイスを含む、パーソナル・コンピュータ、ワークステーション、またはサーバなどの、代表的な基本コンピュータ・システム５０２１を備える。基本コンピュータ・システム５０２１は、既知の技法に従って、１つまたは複数のプロセッサ５０２６と、プロセッサ５０２６とシステム５０２１の他の構成要素との間を接続し、その通信を実行可能にするために使用される、バスとを含む。バスは、プロセッサ５０２６をメモリ５０２５と、たとえばハード・ドライブ（たとえば磁気媒体、ＣＤ、ＤＶＤ、およびフラッシュ・メモリのいずれかを含む）またはテープ・ドライブを含むことが可能な、長期記憶５０２７とに、接続する。システム５０２１は、バスを介してマイクロプロセッサ５０２６を、キーボード５０２４、マウス５０２３、プリンタ／スキャナ５０３０、または、タッチセンサ式スクリーン、デジタル入力パッドなどの任意のユーザ・インターフェース・デバイスとすることが可能な他のインターフェース・デバイス、あるいはそれらすべてなどの、１つまたは複数のインターフェース・デバイスに接続する、ユーザ・インターフェース・アダプタも含むことができる。バスは、ＬＣＤスクリーンまたはモニタなどのディスプレイ・デバイス５０２２を、ディスプレイ・アダプタを介してマイクロプロセッサ５０２６にも接続する。
【０１６７】
システム５０２１は、ネットワーク５０２９との通信５０２８が可能なネットワーク・アダプタを用いて、他のコンピュータまたはコンピュータのネットワークと通信することができる。例示のネットワーク・アダプタは、通信チャネル、トークン・リング、イーサネット、またはモデムである。別の方法として、システム５０２１は、ＣＤＰＤ（セルラ・デジタル・パケット・データ）カードなどの、ワイヤレス・インターフェースを使用して通信することができる。システム５０２１は、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）内のこうした他のコンピュータに関連付けることが可能であるか、あるいは、システム５０２１は、別のコンピュータなどを伴うクライアント／サーバ配置構成内のクライアントとすることができる。これらの構成ならびに適切な通信ハードウェアおよびソフトウェアはすべて、当分野で知られている。
【０１６８】
図２２は、内部で本発明の１つまたは複数の態様が実施可能なデータ処理ネットワーク５０４０を示す。データ処理ネットワーク５０４０は、ワイヤレス・ネットワークおよびワイヤード・ネットワークなどの複数の個別ネットワークを含むことが可能であり、そのそれぞれが複数の個別のワークステーション５０４１、５０４２、５０４３、５０４４を含むことが可能である。加えて、当業者であれば理解されるように、１つまたは複数のＬＡＮを含むことが可能であり、ＬＡＮはホスト・プロセッサに結合された複数のインテリジェント・ワークステーションを備えることができる。
【０１６９】
さらに図２２を参照すると、ネットワークは、ゲートウェイ・コンピュータ（クライアント・サーバ５０４６）またはアプリケーション・サーバ（データ・リポジトリにアクセス可能であり、ワークステーション５０４５から直接アクセスすることも可能な、リモート・サーバ５０４８）などの、メインフレーム・コンピュータまたはサーバも含むことができる。ゲートウェイ・コンピュータ５０４６は、各個別のネットワークへの入口ポイントとして働く。ゲートウェイは、ネットワーキング・プロトコル間を接続する際に必要とされる。ゲートウェイ５０４６は、好ましくは、通信リンクを用いて別のネットワーク（たとえばインターネット５０４７）に結合することができる。ゲートウェイ５０４６は、通信リンクを使用して１つまたは複数のワークステーション５０４１、５０４２、５０４３、５０４４に直接結合することもできる。ゲートウェイ・コンピュータは、インターナショナル・ビジネス・マシーンズ・コーポレーションから入手可能なＩＢＭ  ｅＳｅｒｖｅｒ（ＴＭ）  Ｓｙｓｔｅｍ  ｚサーバを利用して実装可能である。
【０１７０】
図２１および図２２を同時に参照すると、本発明の１つまたは複数の態様を具体化可能なソフトウェア・プログラミング・コードには、ＣＤ−ＲＯＭドライブまたはハード・ドライブなどの長期記憶媒体５０２７から、システム５０２０のプロセッサ５０２６によってアクセス可能である。ソフトウェア・プログラミング・コードは、ディスケット、ハード・ドライブ、またはＣＤ−ＲＯＭなどの、データ処理システムと共に使用するための様々な既知の媒体のいずれか上で、具体化することができる。コードは、こうした媒体上で配布可能であるか、または、１つのコンピュータ・システムのメモリまたはストレージから、ネットワークを介して他のコンピュータ・システムへと、こうした他のシステムのユーザが使用するために、ユーザ５０５０、５０５１に配布可能である。
【０１７１】
別の方法として、プログラミング・コードはメモリ５０２５内に具体化可能であり、プロセッサ・バスを使用してプロセッサ５０２６によってアクセス可能である。こうしたプログラミング・コードは、様々なコンピュータ構成要素および１つまたは複数のアプリケーション・プログラム５０３２の機能および対話を制御する、オペレーティング・システムを含む。プログラム・コードは、通常、記憶媒体５０２７から、プロセッサ５０２６による処理に使用可能な高速メモリ５０２５へとページングされる。メモリ内、物理媒体上で、ソフトウェア・プログラミング・コードを具体化するため、または、ネットワークを介してソフトウェア・コードを配布するため、あるいはその両方のための技法および方法は良く知られているため、本明細書ではこれ以上考察しない。プログラム・コードは、有形媒体（電子メモリ・モジュール（ＲＡＭ）、フラッシュ・メモリ、コンパクト・ディスク（ＣＤ）、ＤＶＤ、磁気テープなどを含むが、これらに限定されない）上で作成および記憶された場合、しばしば「コンピュータ・プログラム製品」と呼ばれる。コンピュータ・プログラム製品媒体は、典型的には、処理回路による実行のために、好ましくはコンピュータ・システム内の処理回路によって読み取り可能である。
【０１７２】
プロセッサが最も容易に使用可能な（通常、プロセッサの他のキャッシュよりも高速で小型の）キャッシュは最下位（Ｌ１またはレベル１）キャッシュであり、主記憶（主メモリ）は最高位キャッシュ（３レベル存在する場合はＬ３）である。最下位キャッシュはしばしば、実行されることになるマシン命令を保持している命令キャッシュ（Ｉ−Ｃａｃｈｅ）と、データ・オペランドを保持しているデータ・キャッシュ（Ｄ−Ｃａｃｈｅ）とに分割される。
【０１７３】
図２３を参照すると、プロセッサ５０２６に関する例示のプロセッサ実施形態が示されている。典型的には、プロセッサ性能を向上させるために、メモリ・ブロックをバッファリングするためにキャッシュ５０５３の１つまたは複数のレベルが使用される。キャッシュ５０５３は、使用される可能性が高いメモリ・データのキャッシュ・ラインを保持している高速バッファである。典型的なキャッシュ・ラインは、メモリ・データの６４、１２８、または２５６バイトである。データをキャッシュするためよりも、命令をキャッシュするために、別々のキャッシュがしばしば使用される。キャッシュ・コヒーレンス（メモリおよびキャッシュ内のラインのコピーの同期化）が、当分野で周知の様々な「スヌープ」アルゴリズムによってしばしば提供される。プロセッサ・システムの主メモリ・ストレージ５０２５は、しばしばキャッシュと呼ばれる。４レベルのキャッシュ５０５３を有するプロセッサ・システムにおいて、主ストレージ５０２５は、典型的にはより高速であり、コンピュータ・システムが使用可能な不揮発性ストレージ（ＤＡＳＤ、テープなど）の一部のみを保持するため、時には、レベル５（Ｌ５）キャッシュと呼ばれる。主ストレージ５０２５は、オペレーティング・システムによって主ストレージ５０２５の内部および外部でページングされたデータのページを「キャッシュ」する。
【０１７４】
プログラム・カウンタ（命令カウンタ）５０６１は、実行されることになる現行命令のアドレスを追跡する。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ内のプログラム・カウンタは６４ビットであり、前のアドレス指定制限をサポートするために、３１または２４ビットに切り詰めることができる。プログラム・カウンタは、典型的には、コンテキスト切り替え時に持続するように、コンピュータのＰＳＷ（プログラム状況ワード）内で具体化される。したがって、プログラム・カウンタ値を有する進行中のプログラムは、たとえばオペレーティング・システム（プログラム環境からオペレーティング・システム環境へのコンテキスト切り替え）によって中断され得る。プログラムがアクティブでない間、プログラムのＰＳＷがプログラム・カウンタを維持し、オペレーティング・システムが実行している間、オペレーティング・システムのプログラム・カウンタ（ＰＳＷ内）が使用される。典型的には、プログラム・カウンタは、現行命令のバイト数に等しい量だけ増分される。ＲＩＳＣ（縮小命令セット・コンピューティング）命令は、典型的には固定長であるが、ＣＩＳＣ（複数命令セット・コンピューティング）命令は、典型的には可変長である。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの命令は、長さ２、４、または６バイトを有するＣＩＳＣ命令である。プログラム・カウンタ５０６１は、たとえばコンテキスト切り替え動作または分岐命令の分岐実行動作（branch taken operation）のいずれかによって修正される。コンテキスト切り替え動作の場合、現行プログラムのカウンタ値は、実行されているプログラムに関する他の状態情報（条件コードなど）と共に、プログラム状況ワード内に保存され、実行されることになる新しいプログラム・モジュールの命令を指示する新しいプログラムのカウンタ値がロードされる。分岐実行動作は、分岐命令の結果をプログラム・カウンタ５０６１内にロードすることによって、プログラムが決定するかまたはプログラム内でループすることを許可するために実行される。
【０１７５】
典型的には、命令フェッチ・ユニット５０５５は、プロセッサ５０２６の代わりに命令をフェッチするために使用される。フェッチ・ユニットは、「次の順次命令」、分岐実行命令のターゲット命令、またはコンテキスト切り替え後のプログラムの第１の命令の、いずれかをフェッチする。最新命令フェッチ・ユニットは、プリフェッチされた命令が使用される確率に基づいて命令を投機的にプリフェッチするために、プリフェッチ技法を使用する。たとえば、フェッチ・ユニットは、次の順次命令を含む命令の１６バイトおよび他の順次命令の追加バイトを、フェッチすることができる。
【０１７６】
フェッチされた命令は、その後、プロセッサ５０２６によって実行される。実施形態において、フェッチされた命令は、フェッチ・ユニットのディスパッチ・ユニット５０５６に渡される。ディスパッチ・ユニットは命令を復号し、複合された命令に関する情報を適切なユニット５０５７、５０５８、５０６０に転送する。実行ユニット５０５７は、典型的には、復号された算術命令に関する情報を命令フェッチ・ユニット５０５５から受信し、命令の命令コードに従ってオペランド上で算術演算を実行することになる。オペランドは、好ましくはメモリ５０２５、アーキテクチャ・レジスタ５０５９、または、実行されている命令の即値フィールド（immediate field）から、実行ユニット５０５７に提供される。実行の結果は、記憶される場合、メモリ５０２５、レジスタ５０５９、または他のマシン・ハードウェア（制御レジスタ、ＰＳＷレジスタ、その他など）に記憶される。
【０１７７】
プロセッサ５０２６は、典型的には、命令の機能を実行するための１つまたは複数のユニット５０５７、５０５８、５０６０を有する。図２４を参照すると、実行ユニット５０５７は、アーキテクチャ汎用レジスタ５０５９、復号／ディスパッチ・ユニット５０５６、ロード記憶ユニット５０６０、およびその他５０６５プロセッサ・ユニットと、インターフェース論理５０７１を用いて通信することができる。実行ユニット５０５７は、算術論理ユニット（ＡＬＵ）５０６６が動作することになる情報を保持するために、いくつかのレジスタ回路５０６７、５０６８、５０６９を使用することができる。ＡＬＵは、加算、減算、乗算、および除算などの算術演算、ならびに、ＡＮＤ、ＯＲおよび排他的ＯＲ（ＸＯＲ）、回転、またはシフトなどの、論理関数を実行する。好ましくは、ＡＬＵは、設計に依存する特殊演算をサポートする。他の回路は、たとえば条件コードおよび回復サポート論理を含む他のアーキテクチャ機構５０７２を提供する。典型的には、ＡＬＵ演算の結果は、結果を様々な他の処理機能に転送することが可能な、出力レジスタ回路５０７０内に保持される。プロセッサ・ユニットの多くの配置構成が存在し、本説明は一実施形態の代表的な理解を提供することのみが意図されている。
【０１７８】
たとえばＡＤＤ命令は、算術および論理機能を有する実行ユニット５０５７内で実行されるが、たとえば浮動小数点命令は、特殊な浮動小数点機能を有する浮動小数点実行内で実行される。好ましくは、実行ユニットは、オペランド上で命令コード定義機能を実行することにより、命令によって識別されたオペランド上で動作する。たとえばＡＤＤ命令は、命令のレジスタ・フィールドによって識別された２つのレジスタ５０５９内で見つけられたオペランドで、実行ユニット５０５７によって実行可能である。
【０１７９】
実行ユニット５０５７は、２つのオペランドで算術加算を実行し、その結果を第３のオペランドに記憶し、ここで第３のオペランドは、第３のレジスタまたは２つのソース・レジスタのうちの１つとすることができる。実行ユニットは、好ましくは、Ｓｈｉｆｔ、Ｒｏｔａｔｅ、Ａｎｄ、Ｏｒ、およびＸＯＲなどの様々な論理機能、ならびに、加算、減算、乗算、除算のいずれかを含む様々な代数関数が実行可能な算術論理ユニット（ＡＬＵ）を使用する。いくつかのＡＬＵ５０６６はスカラー演算用に設計され、いくつかは浮動小数点用である。データは、アーキテクチャに応じて、ビッグ・エンディアン（最下位バイトが最上位バイト・アドレスにある）またはリトル・エンディアン（最下位バイトが最下位バイト・アドレスにある）とすることができる。ＩＢＭ  ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅはビッグ・エンディアンである。符号付きフィールドは、符号と、アーキテクチャに応じて１の補数または２の補数である絶対値とすることができる。２の補数は、２の補数における負の値または正の値のいずれかがＡＬＵにおいて加算のみを必要とするため、ＡＬＵが減算機能を設計する必要がないという点で有利である。数字は一般に簡略して記述され、１２ビット・フィールドが４０９６バイト・ブロックのアドレスを定義し、たとえば一般に４Ｋバイト（キロバイト）ブロックとして記述される。
【０１８０】
図２５を参照すると、分岐命令を実行するための分岐命令情報は、典型的には、他の条件付き演算が完了する前に分岐の結果を予測するための分岐履歴テーブル５０８２などの分岐予測アルゴリズムをしばしば使用する、分岐ユニット５０５８に送信される。現行分岐命令のターゲットがフェッチされ、条件付き演算が完了する前に投機的に実行されることになる。典型的な分岐命令は、条件コードをテストし、条件コードが分岐命令の分岐要件に合致する場合、ターゲット・アドレスに分岐することが可能であり、ターゲット・アドレスは、たとえばレジスタ・フィールドまたは即値フィールド内に見られる数値を含むいくつかの数値に基づいて計算可能である。分岐ユニット５０５８は、複数の入力レジスタ回路５０７５、５０７６、５０７７および出力レジスタ回路５０８０を有する、ＡＬＵ５０７４を使用することができる。分岐ユニット５０５８は、たとえば汎用レジスタ５０５９、復号ディスパッチ・ユニット５０５６、または他の回路５０７３と通信することができる。
【０１８１】
命令のグループの実行は、たとえば、オペレーティング・システムによって示されるコンテキスト切り替え、コンテキスト切り替えを発生させるプログラムの例外またはエラー、（マルチスレッド環境において）複数のプログラムのコンテキスト切り替えまたはマルチスレッド・アクティビティを発生させるＩ／Ｏ中断信号を含む、様々な理由で中断される可能性がある。好ましくは、コンテキスト切り替えアクションは、現在実行中のプログラムに関する状態情報を保存し、その後、呼び出されている別のプログラムに関する状態情報をロードする。状態情報は、たとえばハードウェア・レジスタまたはメモリ内に保存することができる。状態情報は、好ましくは、実行されることになる次の命令を指示するプログラム・カウンタ値、条件コード、メモリ変換情報、およびアーキテクチャ・レジスタ・コンテンツを含む。コンテキスト切り替えアクティビティは、ハードウェア回路、アプリケーション・プログラム、オペレーティング・システム・プログラム、またはファームウェア・コード（マイクロコード、ピココード、または許可内部コード（ＬＩＣ））が単独で、あるいは組み合わせで、働かせることができる。
【０１８２】
プロセッサは、命令定義方法に従ってオペランドにアクセスする。命令は、命令の一部の値を使用して即値オペランドを提供することが可能であり、汎用レジスタまたは特定用途向けレジスタ（たとえば浮動小数点レジスタ）のいずれかを明示的に指示する、１つまたは複数のレジスタ・フィールドを提供することが可能である。この命令は、命令コード・フィールドによってオペランドとして識別された暗黙レジスタを使用することができる。命令は、オペランド用のメモリ位置を使用することができる。オペランドのメモリ位置は、z/Architecture long displacementfacilityによって例示されるように、レジスタ、即値フィールド、またはレジスタと即値フィールドの組み合わせによって、提供可能であり、ここでは命令が、たとえばメモリ内のオペランドのアドレスを提供するためにまとめて追加される、基本レジスタ、インデックス・レジスタ、および即値フィールド（変位フィールド）を定義する。本明細書では、特に指定の無い限り、位置は、典型的には主メモリ（主ストレージ）内の位置を示唆する。
【０１８３】
図２６を参照すると、プロセッサは、ロード／記憶ユニット５０６０を使用してストレージにアクセスする。ロード／記憶ユニット５０６０は、メモリ５０５３内のターゲット・オペランドのアドレスを取得すること、および、レジスタ５０５９または別のメモリ５０５３位置にオペランドをロードすることによって、ロード動作を実行することができるか、または、メモリ５０５３内のターゲット・オペランドのアドレスを取得すること、および、レジスタ５０５９または別のメモリ５０５３位置から取得したデータをメモリ５０５３内のターゲット・オペランド位置に記憶することによって、記憶動作を実行することができる。ロード／記憶ユニット５０６０は投機的とすることが可能であり、命令順とから外れた順序でメモリにアクセスすることができるが、ロード／記憶ユニット５０６０は、命令が順番通りに実行されたような外観をプログラムに対して維持することになる。ロード／記憶ユニット５０６０は、汎用レジスタ５０５９、復号／ディスパッチ・ユニット５０５６、キャッシュ／メモリ・インターフェース５０５３、または他の要素５０８３と通信可能であり、ストレージ・アドレスを計算するため、および動作を順序通りに維持するようにパイプライン順序付けを提供するための、様々なレジスタ回路、ＡＬＵ５０８５、および制御論理５０９０を備える。いくつかの動作は順序外れの場合があるが、当分野で周知のように、ロード／記憶ユニットは、順序外れ動作を順序通りに実行されたようにプログラムに対して見せるための機能を提供する。
【０１８４】
好ましくは、アプリケーション・プログラムが「見る」アドレスは、しばしば仮想アドレスと呼ばれる。仮想アドレスは、時に、「論理アドレス」および「実効アドレス」と呼ばれる。これらの仮想アドレスは、単に仮想アドレスにオフセット値をプレフィックスすること、１つまたは複数の変換テーブルを介して仮想アドレスを変換すること、変換テーブルが好ましくは少なくともセグメント・テーブルおよびページ・テーブルを単独または組み合わせで含むこと、セグメント・テーブルがページ・テーブルを指示するエントリを有することを含むが、これらに限定されない、様々な動的アドレス変換（ＤＡＴ）技術のうちの１つによって、物理メモリ位置にリダイレクトされるという点で、仮想的である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅでは、領域第１テーブル、領域第２テーブル、領域第３テーブル、セグメント・テーブル、およびオプション・ページ・テーブルを含む、変換の階層が提供される。アドレス変換の性能は、しばしば、仮想アドレスを関連付けられた物理メモリ位置にマッピングするエントリを備える、変換索引バッファ（ＴＬＢ）を使用することによって向上する。エントリは、ＤＡＴが変換テーブルを使用して仮想アドレスを変換する場合に作成される。後続の仮想アドレスの使用では、低速順次変換テーブル・アクセスではなく高速ＴＬＢのエントリを使用することができる。ＴＬＢコンテンツは、ＬＲＵ（最長時間未使用）を含む様々な置換アルゴリズムによって管理することができる。
【０１８５】
プロセッサがマルチプロセッサ・システムのプロセッサである場合、各プロセッサは、コヒーレンスのために連結されたＩ／Ｏ、キャッシュ、ＴＬＢ、およびメモリなどの共有リソースを維持するための責務を負う。典型的には、キャッシュ・コヒーレンスを維持する際には、「スヌープ」技術が使用されることになる。スヌープ環境において、各キャッシュ・ラインは、共有を容易にするために、共有状態、排他的状態、変更状態、無効状態などのうちのいずれか１つであるものとしてマーク付けすることが可能である。
【０１８６】
Ｉ／Ｏユニット５０５４（図２３）は、たとえばテープ、ディスク、プリンタ、ディスプレイ、およびネットワークを含む周辺デバイスに接続するための手段を、プロセッサに提供する。Ｉ／Ｏユニットは、しばしば、ソフトウェア・ドライバによってコンピュータ・プログラムに提示される。ＩＢＭ（Ｒ）からのＳｙｓｔｅｍ  ｚなどのメインフレームでは、チャネル・アダプタおよびオープン・システム・アダプタは、オペレーティング・システムと周辺デバイスとの間に通信を提供する、メインフレームのＩ／Ｏユニットである。
【０１８７】
さらに、他のタイプのコンピューティング環境は、本発明の１つまたは複数の態様から恩恵を受けることができる。例として、環境は、特定のアーキテクチャ（たとえば、命令実行、アドレス変換などのアーキテクチャ機能、およびアーキテクチャ・レジスタを含む）、またはそのサブセットが（たとえばプロセッサおよびメモリを有するネイティブ・コンピュータ・システム上で）エミュレートされる、エミュレータ（たとえばソフトウェアまたは他のエミュレーション機構）を含むことができる。こうした環境において、エミュレータの１つまたは複数のエミュレーション機能は、たとえエミュレータを実行しているコンピュータが、エミュレートされている機能とは異なるアーキテクチャを有する可能性があっても、本発明の１つまたは複数の態様を実装することができる。一例として、エミュレーション・モードでは、エミュレートされている特定の命令または動作が復号され、個別の命令または動作を実装するために適切なエミュレーション機能が構築される。
【０１８８】
エミュレーション環境において、ホスト・コンピュータは、たとえば、命令およびデータを記憶するためのメモリと、メモリから命令をフェッチするため、およびオプションで、フェッチされた命令にローカル・バッファリングを提供するための、命令フェッチ・ユニットと、フェッチされた命令を受信するため、およびフェッチされた命令のタイプを決定するための、命令復号ユニットと、命令を実行するための命令実行ユニットと、を含む。実行は、データをメモリからレジスタ内にロードすること、データをレジスタからメモリに戻して記憶すること、または、復号ユニットによって決定されたように何らかのタイプの算術または論理演算を実行することを、含むことができる。一例において、各ユニットはソフトウェア内に実装される。たとえばユニットによって実行されている演算は、エミュレータ・ソフトウェア内の１つまたは複数のサブルーチンとして実装される。
【０１８９】
より具体的に言えば、メインフレーム内で、アーキテクチャ・マシン命令は、しばしばコンパイラ・アプリケーションを介して、プログラマ、通常は現在の「Ｃ」プログラマによって使用される。記憶媒体内に記憶されたこれらの命令は、本来、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  ＩＢＭ（Ｒ）サーバ内で、あるいは他のアーキテクチャを実行しているマシン内で実行可能である。それらは、既存および将来のＩＢＭ（Ｒ）メインフレーム・サーバ内で、ならびにＩＢＭ（Ｒ）の他のマシン（たとえば、Ｐｏｗｅｒ  ＳｙｓｔｅｍｓサーバおよびＳｙｓｔｅｍ  ｘ（Ｒ）サーバ）上で、エミュレート可能である。それらは、ＩＢＭ（Ｒ）、Ｉｎｔｅｌ（Ｒ）、ＡＭＤ（ＴＭ）、その他によって製造されたハードウェアを使用する多種多様なマシン上でＬｉｎｕｘを実行しているマシン内で実行可能である。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの下でのそのハードウェア上での実行に加えて、Ｌｉｎｕｘ、ならびにＨｅｒｃｕｌｅｓ、ＵＭＸ、またはＦＳＩ（Fundamental Software,Inc）によるエミュレーションを使用するマシンが使用可能であり、一般に、実行はエミュレーション・モードである。エミュレーション・モードの場合、エミュレーション・ソフトウェアは、エミュレートされたプロセッサのアーキテクチャをエミュレートするために、ネイティブ・プロセッサによって実行される。
【０１９０】
ネイティブ・プロセッサは、典型的には、エミュレートされたプロセッサのエミュレーションを実行するために、ファームウェアまたはネイティブ・オペレーティング・システムのいずれかを含む、エミュレーション・ソフトウェアを実行する。エミュレーション・ソフトウェアは、エミュレートされたプロセッサ・アーキテクチャの命令をフェッチおよび実行する責務を負う。エミュレーション・ソフトウェアは、命令境界を追跡するために、エミュレートされたプログラム・カウンタを維持する。エミュレーション・ソフトウェアは、１回に１つまたは複数のエミュレートされたマシン命令をフェッチし、その１つまたは複数のエミュレートされたマシン命令を、ネイティブ・プロセッサによる実行のために、ネイティブ・マシン命令の対応するグループに変換する。これらの変換された命令は、より高速の変換が達成できるようにキャッシュに入れることができる。それにもかかわらず、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ用に作成されたオペレーティング・システムおよびアプリケーションが正しく動作することを保証するように、エミュレートされたプロセッサ・アーキテクチャのアーキテクチャ規則を維持するものである。さらに、エミュレーション・ソフトウェアは、エミュレートされたプロセッサ上で実行するように設計されたオペレーティング・システムまたはアプリケーション・プログラムが、エミュレーション・ソフトウェアを有するネイティブ・プロセッサ上で実行できるように、制御レジスタ、汎用レジスタ、浮動小数点レジスタ、たとえばセグメント・テーブルおよびページ・テーブルを含む動的アドレス変換機能、中断機構、コンテキスト切り替え機構、時刻機構（ＴＯＤ）、およびＩ／Ｏサブシステムへのアーキテクチャ・インターフェースを含むがこれらに限定されない、エミュレートされたプロセッサ・アーキテクチャによって識別されたリソースを提供するものである。
【０１９１】
エミュレートされている特定の命令が復号され、個別の命令の機能を実行するために、サブルーチンが呼び出される。エミュレートされたプロセッサの機能をエミュレートするエミュレーション・ソフトウェア機能は、たとえば「Ｃ」サブルーチンまたはドライバ内で、あるいは、好ましい実施形態の説明を理解すれば当分野の範囲内であるような、特定のハードウェアにドライバを提供する何らかの他の方法で、実装される。Beausoleil等による「Multiprocessor for Hardware Emulation」という名称の米国特許証第５５５１０１３号と、Scalzi等による「Preprocessing of Stored Target Routines forEmulating Incompatible Instructions on a Target Processor」という名称の米国特許証第６００９２６１号と、Davidian等による「Decoding Guest Instruction to Directly AccessEmulation Routines that Emulate the Guest Instructions」という名称の米国特許証第５５７４８７３号と、Gorishek等による「Symmetrical Multiprocessing Bus and ChipsetUsed for Coprocessor Support Allowing Non-Native Code to Run in a System」という名称の米国特許証第６３０８２５５号と、Lethin等による「Dynamic Optimizing Object Code Translator forArchitecture Emulation and Dynamic Optimizing Object Code Translation Method」という名称の米国特許証第６４６３５８２号と、Eric Trautによる「Method for Emulating Guest Instructions on aHost Computer Through Dynamic Recompilation of Host Instructions」という名称の米国特許証第５７９０８２５号と、多くのその他とを含むがこれらに限定されない、様々なソフトウェアおよびハードウェア・エミュレーション特許は、当業者が使用可能なターゲット・マシンに対して異なるマシン用にアーキテクチャされた命令形式のエミュレーションを達成する、様々な既知の方法を示す。
【０１９２】
図２７では、ホスト・アーキテクチャのホスト・コンピュータ・システム５０００’をエミュレートする、エミュレートされたホスト・コンピュータ・システム５０９２の例が示されている。エミュレートされたホスト・コンピュータ・システム５０９２では、ホスト・プロセッサ（ＣＰＵ）５０９１はエミュレートされたホスト・プロセッサ（または仮想ホスト・プロセッサ）であり、ホスト・コンピュータ５０００’のプロセッサ５０９１のそれとは異なるネイティブ命令セット・アーキテクチャを有するエミュレーション・プロセッサ５０９３を備える。エミュレートされたホスト・コンピュータ・システム５０９２は、エミュレーション・プロセッサ５０９３がアクセス可能なメモリ５０９４を有する。例示の実施形態において、メモリ５０９４は、ホスト・コンピュータ・メモリ５０９６部分およびエミュレーション・ルーチン５０９７部分に区分される。ホスト・コンピュータ・メモリ５０９６は、ホスト・コンピュータ・アーキテクチャに従ってエミュレートされたホスト・コンピュータ５０９２のプログラムが使用可能である。エミュレーション・プロセッサ５０９３は、エミュレートされたプロセッサ５０９１のそれとは異なるアーキテクチャのアーキテクチャ命令セットのネイティブ命令を実行し、そのネイティブ命令はエミュレーション・ルーチン・メモリ５０９７から取得され、アクセスされたホスト命令の機能をエミュレートするためのネイティブ命令実行ルーチンを決定するために、アクセスされたホスト命令を復号することが可能な、あるシーケンスおよびアクセス／復号ルーチンで取得された１つまたは複数の命令を使用することによって、ホスト・コンピュータ・メモリ５０９６内のプログラムから実行のためにホスト命令にアクセスすることが可能である。ホスト・コンピュータ・システム５０００’アーキテクチャ用に定義された他の機構は、たとえば汎用レジスタ、制御レジスタ、動的アドレス変換およびＩ／Ｏサブシステム・サポート、ならびにプロセッサ・キャッシュなどの機構を含む、アーキテクチャ機構ルーチンによってエミュレート可能である。エミュレーション・ルーチンは、エミュレーション・ルーチンの性能を向上させるために、（汎用レジスタおよび仮想アドレスの動的変換などの）エミュレーション・プロセッサ５０９３内で使用可能な機能も利用することができる。ホスト・コンピュータ５０００’の機能をエミュレートする際にプロセッサ５０９３を支援するために、特別なハードウェアおよびオフロード・エンジンも提供可能である。
【０１９３】
本明細書で使用される用語は、特定の実施形態を説明する為のみのものであり、本発明を制限することは意図されていない。本明細書で使用される場合、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈によって特に明白に示されていない限り、複数形も同様に含むことが意図される。用語「含む」または「含んでいる」あるいはその両方は、本明細書で使用される場合、示された特徴、整数、ステップ、動作、要素、または構成要素、あるいはそれらすべての存在を指定するが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらのグループ、あるいはそれらすべての存在または追加を除外するものではないことをさらに理解されよう。
【０１９４】
以下の特許請求の範囲内のすべての手段またはステップ、ならびに機能要素の対応する構造、材料、動作、および等価物は、もしもあれば、具体的に請求された他の請求要素と組み合わせて機能を実行するための、任意の構造、材料、または動作を含むことが意図される。本発明の１つまたは複数の態様の説明は、例示および説明の目的で提示されたものであり、開示された形の本発明を網羅するかまたはそれに限定されることは意図されていない。当業者であれば、本発明の範囲を逸脱することなく、多くの修正および変形が明らかとなろう。実施形態は、本発明の原理および実際の適用例を最も良く説明するため、ならびに、他の当業者が、企図された特定の用途に適切な様々な修正を伴う様々な実施形態に関して本発明を理解できるようにするために、選択および説明されたものである。
【０１９５】
ベクトル文字列機構
命令
特に指定の無い限り、すべてのオペランドはベクトル・レジスタ・オペランドである。アセンブラ構文内の「Ｖ」はベクトル・オペランドを指定する。
【表７】
2015518193.tif 000009
【表８】
2015518193.tif 000010
【０１９６】
左から右へと進み、第２のオペランドのあらゆる符号なし２進整数要素は、第３のオペランドの各符号なし２進整数要素との、およびオプションでＭ５フィールドにＺｅｒｏ  Ｓｅａｒｃｈフラグが設定された場合はゼロとの、同等性について比較される。
【０１９７】
Ｍ５フィールド内のＲｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）フラグがゼロである場合、第３のオペランド内の任意の要素に、またはオプションでゼロに一致する、第２のオペランド内の各要素について、第１のオペランド内の対応する要素のビット位置は１に設定され、そうでない場合はゼロに設定される。
【０１９８】
Ｍ５フィールド内のＲｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）フラグが１である場合、第３のオペランド内の要素またはゼロに一致する第２のオペランド内の左端要素のバイト・インデックスは、第１のオペランドのバイト７に記憶される。
【０１９９】
各命令は、推奨される拡張簡略記号およびそれらの対応するマシン・アセンブラ構文を記述する、Ｅｘｔｅｎｄｅｄ  Ｍｎｅｍｏｎｉｃセクションを有する。
【０２００】
プログラミング留意点：オプションで条件コードを設定するすべての命令について、条件コードが設定された場合、性能は低下する可能性がある。
【０２０１】
Ｍ５フィールド内のＲｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）フラグが１であり、等しいバイトが見つからないか、またはゼロ検索フラグが設定された場合に、ゼロである場合、ベクトル内のバイト数に等しいインデックスは第１のオペランドのバイト７に記憶される。
【０２０２】
Ｍ４フィールドは、要素サイズ制御（ＥＳ）を指定する。ＥＳ制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
０−バイト
１−ハーフワード
２−ワード
３〜１５−予約済み
Ｍ５フィールドは以下の形式を有する。
【０２０３】
【表９】
2015518193.tif 000011
【０２０４】
Ｍ５フィールドのビットは以下のように定義される。
・Ｒｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）：ゼロの場合、各結果要素はその要素上のすべての領域比較のマスクである。１の場合、バイト・インデックスは第１のオペランドのバイト７に記憶され、ゼロはすべての他の要素内に記憶される。
・Ｚｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）：１の場合、第２のオペランドの各要素もゼロと比較される。
・Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）：ゼロの場合、条件コードは設定されず、未変更のままである。１の場合、条件コードは以下のセクションで指定されるように設定される。
【０２０５】
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
１．Ｍ４フィールドが３〜１５の値を含む。
２．Ｍ５フィールドのビット０がゼロでない。
結果として生じる条件コード：
ＣＣフラグがゼロの場合、コードは未変更のままである。
ＣＣフラグが１の場合、コードは以下のように設定される。
０    ＺＳビットが設定された場合、第２のオペランド内のゼロより下位のインデックス付けされた要素に一致がなかった。
１    第２のオペランドのいくつかの要素が、第３のオペランド内の少なくとも１つの要素と一致している。
２    第２のオペランドのすべての要素が、第３のオペランド内の少なくとも１つの要素と一致した。
３    第２のオペランド内のいずれの要素も、第３のオペランド内のいずれの要素と一致していない。
プログラム例外：
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたＥＳ値）
・トランザクション制約
拡張簡略記号：
【表１０】
2015518193.tif 000012
【表１１】
2015518193.tif 000013
【０２０６】
左から右へと進み、第２のオペランドの符号なし２進整数要素は、第３のオペランドの対応する符号なし２進整数要素と比較される。２つの要素が等しい場合、左端の等しい要素の第１のバイトのバイト・インデックスは、第１のオペランドのバイト７に配置される。ゼロは第１のオペランドの残りのバイト内に記憶される。等しいバイトが、またはゼロ比較が設定された場合はゼロが、見つからない場合、ベクトル内のバイト数に等しいインデックスが、第１のオペランドのバイト７に記憶される。ゼロは残りのバイト内に記憶される。
【０２０７】
Ｍ５フィールド内にＺｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）ビットが設定された場合、第２のオペランド内の各要素は、ゼロとの同等性も比較される。第２および第３のオペランドの任意の他の要素が等しいことが見つかる前に、第２のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第１のバイトのバイト・インデックスは第１のオペランドのバイト７に記憶され、ゼロはすべての他のバイト位置に記憶される。Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）フラグが１の場合、条件コードはゼロに設定される。
【０２０８】
Ｍ４フィールドは要素サイズ制御（ＥＳ）を指定する。ＥＳ制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
０−バイト
１−ハーフワード
２−ワード
３〜１５−予約済み
【０２０９】
Ｍ５フィールドは以下の形式を有する。
【表１２】
2015518193.tif 000014
【０２１０】
Ｍ５フィールドのビットは以下のように定義される。
・予約済み：ビット０〜１は予約され、ゼロでなければならない。そうでない場合、指定例外が認識される。
・Ｚｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）：１の場合、第２のオペランドの各要素もゼロと比較される。
・Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）：ゼロの場合、条件コードは未変更のままである。１の場合、条件コードは以下のセクションに指定されたように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
１．Ｍ４フィールドが３〜１５の値を含む。
２．Ｍ５フィールドのビット０〜１がゼロでない。
結果として生じる条件コード：
Ｍ５フィールドのビット３が１に設定された場合、コードは以下のように設定される。
０  ゼロ比較ビットが設定される場合、比較は、任意の同等比較よりも小さいインデックスを備える要素内の第２のオペランド内にゼロ要素を検出した。
１  比較は、何らかの要素内の第２と第３のオペランド間に一致を検出した。ゼロ比較ビットが設定される場合、この一致は、ゼロ比較要素よりも小さいかまたは等しいインデックスを備える要素内で発生した。
２  ――
３  いかなる要素も同等を比較しなかった。
Ｍ５フィールドのビット３がゼロの場合、コードは未変更のままである。
プログラム例外：
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたＥＳ値）
・トランザクション制約
拡張簡略記号：
【表１３】
2015518193.tif 000015
【０２１１】
プログラミング留意点：
１．バイト・インデックスが、任意の要素サイズに関する第１のオペランド内に常に記憶される。たとえば、要素サイズがハーフワードに設定され、第２のインデックス付けされたハーフワードが等しく比較された場合、４のバイト・インデックスが記憶されたことになる。
２．第３のオペランドはゼロの値を伴う要素を含まないはずである。第３のオペランドがゼロを含み、これが、任意の他の同等比較の前に、第２のオペランド内のゼロ要素と一致する場合、ゼロ比較ビット設定にかかわらず、条件コード１が設定される。
【表１４】
2015518193.tif 000016
【０２１２】
左から右へと進み、第２のオペランドの符号なし２進整数要素は、第３のオペランドの対応する符号なし２進整数要素と比較される。２つの要素が等しくない場合、左端の等しくない要素のバイト・インデックスは、第１のオペランドのバイト７に配置され、ゼロはすべての他のバイトに記憶される。Ｍ５フィールド内のＣｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）ビットが１に設定された場合、条件コードは、いずれのオペランドが大きかったかを示すように設定される。すべての要素が等しかった場合、ベクトル・サイズに等しいバイト・インデックスは第１のオペランドのバイト７に配置され、ゼロはすべての他のバイト位置に配置される。ＣＣビットが１の場合、条件コード３が設定される。
【０２１３】
Ｍ５フィールド内にＺｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）ビットが設定された場合、第２のオペランド内の各要素は、ゼロとの同等性も比較される。第２のオペランドの任意の他の要素が等しくないことが見つかる前に、第２のオペランド内にゼロ要素が見つかった場合、ゼロであることが見つかった要素の第１のバイトのバイト・インデックスは、第１のオペランドのバイト７に記憶される。ゼロはすべての他のバイトに記憶され、条件コード０が設定される。
【０２１４】
Ｍ４フィールドは要素サイズ制御（ＥＳ）を指定する。ＥＳ制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
０−バイト
１−ハーフワード
２−ワード
３〜１５−予約済み
Ｍ５フィールドは以下の形式を有する。
【表１５】
2015518193.tif 000017
【０２１５】
Ｍ５フィールドのビットは以下のように定義される。
・Ｚｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）：１の場合、第２のオペランドの各要素もゼロと比較される。
・Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）：ゼロの場合、条件コードは設定されず、未変更のままである。１の場合、条件コードは以下のセクションに指定されたように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
１．Ｍ４フィールドが３〜１５の値を含む。
２．Ｍ５フィールドのビット０〜１がゼロでない。
結果として生じる条件コード：
Ｍ５フィールドのビット３が１に設定された場合、コードは以下のように設定される。
０  ゼロ、比較ビットが設定される場合、比較は、任意の不等比較よりも下位のインデックス付けされた要素内の両方のオペランド内にゼロ要素を検出した。
１  要素不一致が検出され、ＶＲ２内の要素はＶＲ３内の要素よりも小さい。
２  要素不一致が検出され、ＶＲ２内の要素はＶＲ３内の要素よりも大きい。
３  すべての要素が同等を比較し、ゼロ比較ビットが設定された場合、第２のオペランド内にゼロ要素は見つからなかった。
Ｍ５フィールドのビット３がゼロの場合、コードは未変更のままである。
プログラム例外：
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたＥＳ値）
・トランザクション制約
拡張簡略記号：
【表１６】
2015518193.tif 000018
【表１７】
2015518193.tif 000019
【０２１６】
左から右へと進み、第２のオペランド内の符号なし２進整数要素は、第３および第４のオペランド内の要素の偶数奇数ペアによって定義された値の範囲と比較される。第４のオペランドからの制御値との組み合わせは、実行されることになる比較の範囲を定義する。要素が、第３および第４のオペランドによって指定された範囲のいずれかと一致する場合、これは一致であるとみなされる。
【０２１７】
Ｍ６フィールド内のＲｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）フラグがゼロの場合、第２のオペランド内で比較されている要素に対応する第１のオペランド内の要素のビット位置は、要素が範囲のいずれかに一致する場合、１に設定され、そうでない場合はゼロに設定される。
【０２１８】
Ｍ６フィールド内のＲｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）フラグが１に設定された場合、第３および第４のオペランドによって、またはＺＳフラグが１に設定された場合はゼロ比較によって、指定された範囲のいずれかと一致する、第２のオペランド内の第１の要素のバイト・インデックスは第１のオペランドのバイト７に配置され、ゼロは残りのバイト内に記憶される。要素が一致しない場合、ベクトル内のバイト数に等しいインデックスが第１のオペランドのバイト７に配置され、ゼロは残りのバイトに記憶される。
【０２１９】
Ｍ６フィールド内のＺｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）フラグは、１に設定された場合、第２のオペランド要素のゼロと第３および第４のオペランドによって提供された範囲との比較を追加することになる。任意の他のｔｒｕｅ比較よりも下位のインデックス付けされた要素におけるゼロ比較の場合、条件コードはゼロに設定される。
【０２２０】
オペランドは、Ｍ５フィールド内の要素サイズ制御によって指定された要素を含む。第４のオペランド要素は以下の形を有する。
【表１８】
2015518193.tif 000020
【０２２１】
第４のオペランド要素内のビットは、以下のように定義される。
・Ｅｑｕａｌ（ＥＱ）：１の場合、同等に関する比較が実行される。
・Ｇｒｅａｔｅｒ  Ｔｈａｎ（ＧＴ）：１の場合、大なり比較（ｇｒｅａｔｅｒ  ｔｈａｎ  ｃｏｍｐａｒｉｓｏｎ）が実行される。
・Ｌｅｓｓ  Ｔｈａｎ（ＬＴ）：１の場合、小なり比較が実行される。
・すべての他のビットは予約され、今後の互換性を保証するためにゼロのはずである。
【０２２２】
制御ビットは任意の組み合わせで使用可能である。ビットがいずれも設定されない場合、比較は常にｆａｌｓｅ結果を生成する。ビットのすべてが設定された場合、比較は常にｔｒｕｅ結果を生成する。
【０２２３】
Ｍ５フィールドは、要素サイズ制御（ＥＳ）を指定する。ＥＳ制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
０−バイト
１−ハーフワード
２−ワード
３〜１５−予約済み
【０２２４】
Ｍ６フィールドは以下の形式を有する。
【表１９】
2015518193.tif 000021
【０２２５】
Ｍ６フィールドのビットは以下のように定義される。
・Ｉｎｖｅｒｔ  Ｒｅｓｕｌｔ（ＩＮ）：ゼロの場合、比較は制御ベクトル内の値のペアを用いて進行する。１の場合、範囲内の比較のペアの結果は逆転される。
・Ｒｅｓｕｌｔ  Ｔｙｐｅ（ＲＴ）：ゼロの場合、各結果要素はその要素上のすべての領域比較のマスクである。１の場合、インデックスは第１のオペランドのバイト７に記憶される。ゼロは残りのバイト内に記憶される。
・Ｚｅｒｏ  Ｓｅａｒｃｈ（ＺＳ）：１の場合、第２のオペランドの各要素もゼロと比較される。
・Ｃｏｎｄｉｔｉｏｎ  Ｃｏｄｅ  Ｓｅｔ（ＣＣ）：ゼロの場合、条件コードは設定されず、未変更のままである。１の場合、条件コードは以下のセクションで指定されるように設定される。
特別条件
以下のいずれも発生しない場合は、特別例外が認識され、他の処置は取られない。
１．Ｍ４フィールドが３〜１５の値を含む。
結果として生じる条件コード：
０  ＺＳ＝１および、任意の比較より下位のインデックス付けされた要素内にゼロが見つかった場合
１  比較が見つかった
２  −−
３  比較は見つからず
プログラム例外
・  ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたＥＳ値）
・トランザクション制約
拡張簡略記号：
【表２０】
2015518193.tif 000022
【表２１】
2015518193.tif 000023
【表２２】
2015518193.tif 000024
【０２２６】
指定されたブロック境界を横切ることなく、第２のオペランド位置からロードすることが可能なバイト数を含む３２ビットの符号なし２進整数は、上限１６として、第１のオペランド内に配置される。
【０２２７】
変位は、１２ビットの符号なし整数として扱われる。
【０２２８】
第２のオペランド・アドレスは、データのアドレス指定に使用されない。
【０２２９】
Ｍ３フィールドは、ロードされる可能なバイト数を計算するために、ブロック境界に関してＣＰＵに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。
【表２３】
2015518193.tif 000025
結果として生じる条件コード：
０    オペランド１は１６
１    −−
２    −−
３    オペランド１は１６未満
結果として生じる条件コード：
プログラム例外：
・ベクトル拡張機構がインストールされていない場合の演算
・指定
プログラミング留意点：LOADCOUNT TO BLOCK BOUNDARYは、ロードされたバイト数を決定するために、VECTOR LOAD TO BLOCK BOUNDARYと共に使用されることになるものと予測される。
【表２４】
2015518193.tif 000026
【０２３０】
Ｍ４フィールド内のＥＳ値によって指定されたサイズの第３のオペランドの、第２のオペランド・アドレスによってインデックス付けされた要素は、第１のオペランド位置に配置される。第３のオペランドはベクトル・レジスタである。第１のオペランドは汎用レジスタである。第２のオペランド・アドレスによって指定されたインデックスが、指定された要素サイズの、第３のオペランド内で最高の数が付けられた要素よりも大きい場合、第１のオペランド内のデータは予測不可能である。
ベクトル・レジスタ要素がダブルワードよりも小さい場合、要素は６４ビット汎用レジスタ内で右揃えされ、ゼロが残りのビットを満たす。
第２のオペランド・アドレスはデータのアドレス指定に使用されず、代わりに、アドレスの右端１２ビットが、第２のオペランド内の要素のインデックスを指定するために使用される。
Ｍ４フィールドは要素サイズ制御（ＥＳ）を指定する。ＥＳ制御は、ベクトル・レジスタ・オペランド内の要素のサイズを指定する。予約値が指定された場合、指定例外が認識される。
０−バイト
１−ハーフワード
２−ワード
３−ダブルワード
４〜１５−予約済み未変更
結果として生じる条件コード：コードは未変更である。
プログラム例外：
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたＥＳ値）
・トランザクション制約
拡張簡略記号：
【表２５】
2015518193.tif 000027
【表２６】
2015518193.tif 000028
第１のオペランドは、ゼロ・インデックス付けされたバイト要素から始まり、第２のオペランドからのバイトでロードされる。境界条件に遭遇した場合、第１のオペランドの残りは予測不可能である。アクセス例外は、ロードされていないバイトでは認識されない。
ＶＬＢＢに関する変位は、１２ビットの符号なし整数として扱われる。
Ｍ３フィールドは、ロードするためのブロック境界サイズに関して、ＣＰＵに信号送信するために使用されるコードを指定する。予約値が指定された場合、指定例外が認識される。
【表２７】
2015518193.tif 000029
結果として生じる条件コード：コードは未変更のままである。
プログラム例外：
・アクセス（フェッチ、オペランド２）
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・指定（予約されたブロック境界コード）
・トランザクション制約
プログラミング留意点：
１．ある環境において、データはブロック境界を超えてロードすることができる。しかしながらこれは、そのデータに関してアクセス例外がない場合にのみ発生することになる。
【表２８】
2015518193.tif 000030
第１のオペランド内の１２８ビット値は、第２のオペランドによって指定された記憶位置に記憶される。ＶＳＴに関する変位は、１２ビットの符号なし整数として扱われる。
結果として生じる条件コード：コードは未変更のままである。
プログラム例外：
・アクセス（記憶、オペランド２）
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・トランザクション制約
【表２９】
2015518193.tif 000031
左から右へと進み、第１のオペランドからのバイトは第２のオペランド位置に記憶される。第３のオペランドを指定した汎用レジスタは、最高位のインデックス付けされたバイトを記憶することを表す値を含む３２ビットの符号なし整数を含む。第３のオペランドがベクトルの最高位ビット・インデックスより大きいかまたは等しい値を含む場合、第１のオペランドのすべてのバイトが記憶される。
アクセス例外は、記憶されたバイトに関してのみ認識される。
ＶＥＣＴＯＲ  ＳＴＯＲＥ  ＷＩＴＨ  ＬＥＮＧＴＨに関する変位は、１２ビットの符号なし整数として扱われる。
結果として生じる条件コード：条件コードは未変更のままである。
プログラム例外：
・アクセス（記憶、オペランド２）
・ＤＸＣ  ＦＥを伴うデータ、ベクトル・レジスタ
・ベクトル拡張機構がインストールされていない場合の演算
・トランザクション制約
【０２３１】
ＲＸＢの説明
すべてのベクトル命令は、ＲＸＢとラベル表示された命令のビット３６〜４０にフィールドを有する。このフィールドは、すべてのベクトル・レジスタ指定オペランドに関する最上位ビットを含む。命令によって指定されないレジスタ指定に関するビットは予約され、ゼロに設定されるはずであるが、そうでない場合、プログラムは将来互換的に動作しない可能性がある。最上位ビットは５ビットのベクトル・レジスタ指定を作成するために、４ビットのレジスタ指定の左側に切り詰められる。
ビットは以下のように定義される。
０．  命令のビット８〜１１内のベクトル・レジスタ指定に関する最上位ビット。
１．  命令のビット１２〜１５内のベクトル・レジスタ指定に関する最上位ビット。
２．  命令のビット１６〜１９内のベクトル・レジスタ指定に関する最上位ビット。
３．  命令のビット３２〜３５内のベクトル・レジスタ指定に関する最上位ビット。
ベクトル実行可能化制御
ベクトル・レジスタおよび命令は、制御レジスタ・ゼロ内のベクトル実行可能化制御（ビット４６）およびＡＦＰレジスタ制御（ビット４５）の両方が１に設定された場合にのみ、使用可能である。ベクトル機構がインストールされ、実行可能化ビットが設定されずにベクトル命令が実行される場合、ＤＸＣ  ＦＥ  １６進数を伴うデータ例外が認識される。ベクトル機構がインストールされていない場合、演算例外が認識される。
【図１】
2015518193.tif 000032
【図２】
2015518193.tif 000033
【図３】
2015518193.tif 000034
【図４】
2015518193.tif 000035
【図５】
2015518193.tif 000036
【図６】
2015518193.tif 000037
【図７】
2015518193.tif 000038
【図８】
2015518193.tif 000039
【図９】
2015518193.tif 000040
【図１０】
2015518193.tif 000041
【図１１】
2015518193.tif 000042
【図１２】
2015518193.tif 000043
【図１３】
2015518193.tif 000044
【図１４】
2015518193.tif 000045
【図１５】
2015518193.tif 000046
【図１６】
2015518193.tif 000047
【図１７】
2015518193.tif 000048
【図１８】
2015518193.tif 000049
【図１９】
2015518193.tif 000050
【図２０】
2015518193.tif 000051
【図２１】
2015518193.tif 000052
【図２２】
2015518193.tif 000053
【図２３】
2015518193.tif 000054
【図２４】
2015518193.tif 000055
【図２５】
2015518193.tif 000056
【図２６】
2015518193.tif 000057
【図２７】
2015518193.tif 000058
【手続補正書】
【提出日】平成26年10月28日(2014.10.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データのセットをコピーするための方法であって、
指定されたメモリのブロック内にあるデータをメモリからレジスタにロードするステップであって、前記データはコピーされることになるデータ・セットの少なくとも一部である、ロードするステップ、
前記レジスタ内にロードされたデータ量のカウントを取得するステップ、
前記レジスタ内にロードされた前記データに関する終端値をプロセッサによって決定するステップであって、前記決定するステップは、前記レジスタが終端文字を含むかどうかを判別するために前記データをチェックすること、前記終端文字を含む前記レジスタに基づいて前記終端値を前記終端文字の位置に設定すること、および、前記終端文字を含まない前記レジスタに基づいて前記終端値を事前に指定された値に設定することを含む、決定するステップ、
前記レジスタ内にロードされた前記データを選択された位置でメモリ内に記憶するステップ、
前記カウントおよび前記終端値のうちの少なくとも１つに基づいて、コピーされることになる前記データ・セット内に追加のデータが存在するかどうかをチェックするステップ、および、
追加のデータがコピーされることを示す前記チェックに基づいて、前記追加のデータをコピーするステップ、
を含む、方法。
【請求項２】
前記チェックするステップは、
前記終端文字が見つかったかどうかを判別するステップ、
前記終端文字が見つかったことを示す前記判別に基づいて、追加のデータがコピーされることになるかどうかを判別するために、前記カウントと前記終端値とを比較するステップ、および、
前記終端文字が見つからなかったことを示す前記判別に基づいて、追加のデータがコピーされるステップ、
を含む、請求項１に記載の方法。
【請求項３】
前記カウントと前記終端値とを比較するステップは、前記終端値が前記カウントの値よりも大きいことに基づいて追加のデータがコピーされることを示す、請求項２に記載の方法。
【請求項４】
前記カウントを取得するステップは、前記カウントを計算するために、前記メモリのブロック内の開始アドレスおよび前記メモリのブロックの境界を使用するステップを含む、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記カウントを取得するステップは、Load to Count Block Boundary命令を使用するステップを含む、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記レジスタにロードされることになる前記データは複数のデータの単位を含み、前記ロードするステップは、前記複数のデータの単位を前記レジスタ内に並列にロードするステップを含み、前記ロードするステップは、前記メモリのブロックの境界を横切ることなく実行される、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
前記ロードするステップは、Vector Load to Block Boundary命令によって実行され、前記メモリのブロックは、前記Vector Load to Block Boundary命令によって指定されるか、または前記Vector Load to Block Boundary命令を実行するプロセッサによって動的に決定されるかの、いずれか一方である、請求項１〜６のいずれか一項に記載の方法。
【請求項８】
前記終端値を決定するステップは、Vector Find Element Not Equal命令を使用するステップを含み、前記位置は前記レジスタ内のバイト・インデックスを含む、請求項１〜７のいずれか一項に記載の方法。
【請求項９】
前記終端文字はゼロまたはヌル文字を含む、請求項１〜８のいずれか一項に記載の方法。
【請求項１０】
命令の長さを決定するためにコンピュータ・コードを取得するステップをさらに含み、前記コンピュータ・コードは、前記ロードするステップを実行するためのVector Load to Block Boundary命令、前記カウントを取得するためのLoad Count to Block Boundary命令、および前記終端値を決定するためのVector Find Element Not Equal命令を含む、請求項１に記載の方法。
【請求項１１】
データのセットをコピーするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信しているプロセッサと、
を備え、請求項１〜１０のいずれか一項に記載の方法の各ステップを実行するように構成された、コンピュータ・システム。
【請求項１２】
データのセットをコピーするためのコンピュータ・プログラムであって、前記プログラムがコンピュータに、
請求項１〜１０のいずれか一項に記載の方法の各ステップを実行させる、コンピュータ・プログラム。
【国際調査報告】
2015518193.tif 000059
2015518193.tif 000060