(57)【要約】【課題】インラインのデコードベースのマイクロオペレーション展開による文字列比較処理を提供する。【解決手段】文字列比較動作を実行するための命令がデコードされる。このデコードすることは、文字列比較動作を実行するための一連の動作を提供する。この一連の動作は、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含む。データの第１セットおよびデータの第２セットは、文字列比較動作の一部として読み込まれる。【選択図】図３
2020509493.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
デコードされる命令を取得することであって、前記命令が文字列比較動作を実行する、前記取得することと、
前記命令をデコードすることであって、前記デコードすることが、前記文字列比較動作を実行するための一連の動作を提供し、前記一連の動作が、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含み、前記データの第１セットおよび前記データの第２セットが、前記文字列比較動作の一部として読み込まれる、前記デコードすることとを含んでいる、コンピュータ実装方法。
【請求項２】
前記一連の動作が、前記文字列比較動作を実行するための複数の動作を含んでおり、前記データの第１セットおよび前記データの第２セットが、同時に比較される１つまたは複数の文字を含んでおり、メモリの１つまたは複数の指定された境界を横断していない前記１つまたは複数の文字がメモリから読み込まれる、請求項１に記載の方法。
【請求項３】
前記一連の動作のうちの選択された動作が、前記選択された動作の設計されたバージョンから変更される、請求項１または２に記載の方法。
【請求項４】
前記選択された動作の前記設計されたバージョンが条件コードを設定し、前記選択された動作が、前記条件コードの設定を回避するように変更される、請求項３に記載の方法。
【請求項５】
複数回反復して前記データの第１セットおよび前記データの第２セットを比較するループ命令になるように前記命令が定義され、前記デコードすることが、前記ループ命令を前記一連の動作に展開することを含んでおり、前記一連の動作が、前記データの第１セットおよび前記データの第２セットを比較するための非ループ・シーケンスである、請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記一連の動作が、前記データの第１セットおよび前記データの第２セットのうちの少なくとも１つの内部で終端部を検出するために使用される終端部検出動作をさらに含んでいる、請求項１ないし５のいずれかに記載の方法。
【請求項７】
前記一連の動作が、前記データの第１セットおよび前記データの第２セットのうちの少なくとも１つに読み込まれたデータの量の決定に使用される少なくとも１つのカウント動作をさらに含んでいる、請求項６に記載の方法。
【請求項８】
前記一連の動作が、前記データの第１セットに読み込まれたデータの量、前記データの第２セットに読み込まれたデータの量、または前記終端部の位置のうちの最小値の決定に使用される少なくとも１つの最小値動作をさらに含んでいる、請求項７に記載の方法。
【請求項９】
前記少なくとも１つの最小値動作のうちの１つの最小値動作が、前記最小値を計算することに基づいて条件コードを更新するように構成される、請求項８に記載の方法。
【請求項１０】
前記一連の動作が、処理される最小の数のデータ単位のカウントを１つまたは複数の位置に加算するために使用される１つまたは複数の加算動作をさらに含んでいる、請求項９に記載の方法。
【請求項１１】
前記一連の動作が、マイクロコードの処理に移行せずに実行される、請求項１ないし１０のいずれかに記載の方法。
【請求項１２】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、前記コンピュータ・システムが、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
デコードされる命令を取得することであって、前記命令が文字列比較動作を実行する、前記取得することと、
前記命令をデコードすることであって、前記デコードすることが、前記文字列比較動作を実行するための一連の動作を提供し、前記一連の動作が、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含み、前記データの第１セットおよび前記データの第２セットが、前記文字列比較動作の一部として読み込まれる、前記デコードすることとを含んでいる、コンピュータ・システム。
【請求項１３】
前記一連の動作が、前記文字列比較動作を実行するための複数の動作を含んでおり、前記データの第１セットおよび前記データの第２セットが、同時に比較される１つまたは複数の文字を含んでおり、メモリの１つまたは複数の指定された境界を横断していない前記１つまたは複数の文字がメモリから読み込まれる、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記一連の動作のうちの選択された動作が、前記選択された動作の設計されたバージョンから変更される、請求項１２または１３のいずれかに記載のコンピュータ・システム。
【請求項１５】
前記選択された動作の前記設計されたバージョンが条件コードを設定し、前記選択された動作が、前記条件コードの設定を回避するように変更される、請求項１４に記載のコンピュータ・システム。
【請求項１６】
複数回反復して前記データの第１セットおよび前記データの第２セットを比較するループ命令になるように前記命令が定義され、前記デコードすることが、前記ループ命令を前記一連の動作に展開することを含んでおり、前記一連の動作が、前記データの第１セットおよび前記データの第２セットを比較するための非ループ・シーケンスである、請求項１２ないし１５のいずれかに記載のコンピュータ・システム。
【請求項１７】
前記一連の動作が、前記データの第１セットおよび前記データの第２セットのうちの少なくとも１つの内部で終端部を検出するために使用される終端部検出動作をさらに含んでいる、請求項１２ないし１６のいずれかに記載のコンピュータ・システム。
【請求項１８】
前記一連の動作が、前記データの第１セットおよび前記データの第２セットのうちの少なくとも１つに読み込まれたデータの量の決定に使用される少なくとも１つのカウント動作をさらに含んでいる、請求項１７に記載のコンピュータ・システム。
【請求項１９】
前記一連の動作が、前記データの第１セットに読み込まれたデータの量、前記データの第２セットに読み込まれたデータの量、または前記終端部の位置のうちの最小値の決定に使用される少なくとも１つの最小値動作をさらに含んでいる、請求項１８に記載のコンピュータ・システム。
【請求項２０】
前記少なくとも１つの最小値動作のうちの１つの最小値動作が、前記最小値を計算することに基づいて条件コードを更新するように構成される、請求項１９に記載のコンピュータ・システム。
【請求項２１】
前記一連の動作が、処理される最小の数のデータ単位のカウントを１つまたは複数の位置に加算するために使用される１つまたは複数の加算動作をさらに含んでいる、請求項２０に記載のコンピュータ・システム。
【請求項２２】
前記一連の動作が、マイクロコードの処理に移行せずに実行される、請求項１２ないし２１のいずれかに記載のコンピュータ・システム。
【請求項２３】
コンピューティング環境内の処理を容易にするコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、請求項１ないし１１のいずれかに記載の前記方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えている、コンピュータ・プログラム製品。
【請求項２４】
コンピュータ可読媒体に格納された、デジタル・コンピュータの内部メモリに読み込み可能なコンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行された場合に請求項１ないし１１のいずれかに記載の前記方法を実行するためのソフトウェア・コード部分を含んでいる、コンピュータ・プログラム。
【請求項２５】
コンピュータ可読媒体に格納されて、請求項１２ないし２２のいずれかに記載の前記システムの内部メモリに読み込まれるコンピュータ・プログラムであって、前記プログラムが前記システム上で実行された場合に請求項１ないし１１のいずれかに記載の前記方法を実行するためのソフトウェア・コード部分を含んでいる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関しており、特に、そのような処理を容易にすることに関している。
【背景技術】
【０００２】
Ｃの文字列操作などのさまざまな文字列操作は、選択されたオペレーティング・システムに関わらず、可変長の終端の意味（termination semantics）を含んでいる。したがって、既知の文字列長を期待する従来の文字列操作は、そのような文字列操作を実装するのに適していない。
【０００３】
文字列およびその他のシーケンスの処理を高速化するために、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＩＢＭ（Ｒ）ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）は、定義された終端部（terminator）を含む命令を導入した。そのような命令は、例えば、文字列移動（ＭＶＳＴ：Move String）命令および論理的文字列比較（ＣＬＳＴ：Compare Logical String）命令を含む。それらの命令は、ハードウェアまたはマイクロコードにおいて実装される。ＩＢＭおよびｚ／Ａｒｃｈｉｔｅｃｔｕｒｅは、世界中の多くの管轄区域で登録されている、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの商標である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】"z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March 2015
【非特許文献２】"Power ISA(TM) Version2.07B," International Business Machines Corporation, April 9, 2015
【発明の概要】
【発明が解決しようとする課題】
【０００５】
インラインのデコードベースのマイクロオペレーション展開による文字列比較処理を提供する。
【課題を解決するための手段】
【０００６】
第１の態様から見ると、本発明は、コンピューティング環境内の処理を容易にするための方法を提供し、方法は、デコードされる命令を取得することであって、それらの命令が文字列比較動作を実行するためである、取得することと、命令をデコードすることであって、このデコードすることが、文字列比較動作を実行するための一連の動作を提供し、この一連の動作が、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作（load to boundary operation）およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含んでおり、データの第１セットおよびデータの第２セットが、文字列比較動作の一部として読み込まれる、デコードすることとを含んでいる。
【０００７】
さらに別の態様から見ると、本発明は、コンピューティング環境内の処理を容易にするためのシステムを提供し、このコンピュータ・システムは、メモリと、このメモリと通信するプロセッサとを備えており、このコンピュータ・システムは、方法を実行するように構成されており、前述の方法は、デコードされる命令を取得することであって、その命令が文字列比較動作を実行するためである、取得することと、命令をデコードすることであって、このデコードすることが、文字列比較動作を実行するための一連の動作を提供し、この一連の動作が、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含んでおり、データの第１セットおよびデータの第２セットが文字列比較動作の一部として読み込まれる、デコードすることとを含んでいる。
【０００８】
さらに別の態様から見ると、本発明は、コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品を提供し、このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、本発明のステップを実行するための方法を実行するためにこの処理回路によって実行される命令を格納している、コンピュータ可読記憶媒体を備えている。
【０００９】
さらに別の態様から見ると、本発明は、コンピュータ可読媒体に格納された、デジタル・コンピュータの内部メモリに読み込み可能なコンピュータ・プログラムを提供し、このコンピュータ・プログラムは、前記プログラムがコンピュータ上で実行された場合に本発明のステップを実行するためのソフトウェア・コード部分を含んでいる。
【００１０】
さらに別の態様から見ると、本発明は、コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品を提供し、このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、本発明のシステムによって本発明のステップを実行するための方法を実行するために、この処理回路によって実行される命令を格納している、コンピュータ可読記憶媒体を備えている。
【００１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するための命令を格納しているストレージ媒体を備える。この方法は、例えば、デコードされる命令を取得することを含んでおり、この命令は、文字列比較動作を実行するためである。この命令がデコードされ、このデコードすることが、文字列比較動作を実行するための一連の動作を提供する。この一連の動作は、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含む。データの第１セットおよびデータの第２セットは、文字列比較動作の一部として読み込まれる。これによって、マイクロコードの処理がなくても、文字列比較動作を有利に実行できるようにし、それによって、待ち時間を短縮し、システム性能を改善する。この一連の動作を使用することによって、ループ命令が非ループ命令に縮小され、それによって、システム性能を改善する。
【００１２】
この一連の動作は、例えば、文字列比較動作を実行するための複数の動作を含み、データの第１セットおよびデータの第２セットは、同時に比較される１つまたは複数の文字を含む。メモリの１つまたは複数の指定された境界を横断していない１つまたは複数の文字が、メモリから読み込まれる。指定されたメモリ境界を横断しないことによって、境界および関連する処理のチェックが除去され、それによって、システム性能を改善する。
【００１３】
一例として、一連の動作のうちの選択された動作が、選択された動作の設計されたバージョンから変更される。一例として、選択された動作の設計されたバージョンが条件コードを設定し、選択された動作が、条件コードの設定を回避するように変更される。
【００１４】
さらに、１つの例では、複数回反復してデータの第１セットおよびデータの第２セットを比較するループ命令になるように命令が定義され、デコードすることが、ループ命令を一連の動作に展開することを含んでいる。この一連の動作は、データの第１セットおよびデータの第２セットを比較するための非ループ・シーケンスである。ループが有利に除去される。
【００１５】
一実施形態では、この一連の動作は、データの第１セットおよびデータの第２セットのうちの少なくとも１つの内部で終端部を検出するために使用される終端部検出動作、データの第１セットおよびデータの第２セットのうちの少なくとも１つに読み込まれたデータの量の決定に使用される少なくとも１つのカウント動作、データの第１セットに読み込まれたデータの量、データの第２セットに読み込まれたデータの量、または終端部の位置のうちの最小値の決定に使用される少なくとも１つの最小値動作、または処理される最小の数のデータ単位のカウントを１つもしくは複数の位置に加算するために使用される１つもしくは複数の加算動作、あるいはその組み合わせのうちの１つまたは複数を含む。１つの例では、少なくとも１つの最小値動作のうちの１つの最小値動作が、最小値を計算することに基づいて条件コードを更新するように構成される。
【００１６】
１つの例では、一連の動作が、マイクロコードの処理に移行せずに実行される。これにより、マイクロコードの処理に移行することおよびマイクロコードの処理を終了することに関連する処理を除去することによって、システム性能を改善する。
【００１７】
１つまたは複数の態様に関連する方法およびシステムも本明細書に記載され、請求される。さらに、１つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【００１８】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１９】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに１つまたは複数の態様の目的、特徴、および長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００２０】
【図１】従来技術に従って、本発明の好ましい実施形態が実装されてよいコンピューティング環境の一例を示す図である。
【図２】従来技術に従って、本発明の好ましい実施形態が実装されてよい、図１のプロセッサの詳細をさらに示す図である。
【図３】本発明の１つまたは複数の態様に従って使用される命令実行パイプラインの一例の詳細をさらに示す図である。
【図４】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図５】図４のメモリの詳細をさらに示す図である。
【図６】本発明の態様に従って使用される文字列移動命令の一例を示す図である。
【図７】図６の文字列移動命令の１つの実装を示す図である。
【図８】本発明の態様に従って図６の文字列移動命令の別の実装を示す図である。
【図９】本発明の態様に従って図６の文字列移動命令の別の実装を示す図である。
【図１０】本発明の態様に従って使用されるブロック境界までのベクトル読み込み命令（Vector Load to Block Boundary instruction）の一例を示す図である。
【図１１】本発明の態様に従って使用されるベクトル不等要素検出命令（Vector Find Element Not Equal instruction）の一例を示す図である。
【図１２】本発明の態様に従って使用されるベクトル同一要素検出命令（Vector Find Element Equal instruction）の一例を示す図である。
【図１３】本発明の態様に従って使用されるブロック境界までの読み込みカウント命令（Load Count To Block Boundary instruction）の一例を示す図である。
【図１４】本発明の態様に従って使用される長さによるベクトル格納命令（Vector Store With Length instruction）の一例を示す図である。
【図１５】本発明の態様に従って使用される論理的文字列比較命令の一例を示す図である。
【図１６】図１５の論理的文字列比較命令の１つの実装を示す図である。
【図１７】本発明の態様に従って図１５の論理的文字列比較命令の別の実装を示す図である。
【図１８】本発明の態様に従って図１５の論理的文字列比較命令の別の実装を示す図である。
【図１９】本発明の態様に従って文字列移動命令または論理的文字列比較命令の別の実装を示す図である。
【図２０】本発明の態様に従って文字列移動命令または論理的文字列比較命令のさらに別の実装を示す図である。
【図２１】本発明の態様に従って文字列移動命令または論理的文字列比較命令のさらに別の実装を示す図である。
【図２２】本発明の態様に従って文字列移動命令または論理的文字列比較命令のさらに別の実装を示す図である。
【図２３】本発明の態様に従って文字列移動命令または論理的文字列比較命令の別の実装を示す図である。
【図２４】本発明の態様に従って使用される文字列検索命令の一例を示す図である。
【図２５】本発明の態様に従って図２４の文字列検索命令の実装を示す図である。
【図２６】本発明の態様に従って図２４の文字列検索命令の実装を示す図である。
【図２７】本発明の態様に従って図２４の文字列検索命令の実装を示す図である。
【図２８】本発明の態様に従って図２４の文字列検索命令の実装を示す図である。
【図２９】本発明の態様に従って図２４の文字列検索命令の実装を示す図である。
【図３０】本発明の態様に従って、コンピューティング環境内の処理を容易にする態様の一例を示す図である。
【図３１】本発明の態様に従って、コンピューティング環境内の処理を容易にする態様の一例を示す図である。
【図３２】クラウド・コンピューティング環境の一実施形態を示す図である。
【図３３】抽象モデル・レイヤの一例を示す図である。
【発明を実施するための形態】
【００２１】
１つまたは複数の態様に従って、柔軟性を提供して性能を改善する１つまたは複数の文字列操作を実装することによって、文字列処理が容易になる。例えば、文字列操作をハードウェアまたはマイクロコード（ミリコードまたはその他のそのようなハードウェア・レベルのコードを含む）において実装する代わりに、文字列操作が、命令分解を使用して直線的コードにおいてインラインで実装され、命令分解では、命令の文字列操作を実行するために、一連の内部動作が使用される。この一連の動作は、定義された数の文字を処理するためのループが存在せずに、定義された数の文字に対して文字列操作を同時に（例えば、並列に）実行する。
【００２２】
本発明の態様に従って実装される命令の例としては、文字列移動（ＭＶＳＴ）命令、論理的文字列比較（ＣＬＳＴ）命令、および文字列検索（ＳＲＳＴ：Search String）命令が挙げられ、これらの命令が、それぞれ下で説明される。他の命令が、本発明の１つまたは複数の態様に従って実装されてもよい。
【００２３】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、"z/Architecture Principles of Operation," IBM Publication No. SA22-7832-10, March 2015に記載されている。
【００２４】
別の例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）の一実施形態は、"Power ISA(TM) Version 2.07B," International Business Machines Corporation, April 9, 2015に記載されている。
【００２５】
コンピューティング環境は、Ｉｎｔｅｌ（Ｒ）ｘ８６アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。Ｉｎｔｅｌは、米国およびその他の国における、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎまたはその子会社の商標または登録商標である。
【００２６】
図１に示されているように、コンピューティング環境１００は、例えば、汎用コンピューティング・デバイスの形態などで示されるコンピュータ・システム１０２を含んでいる。コンピュータ・システム１０２は、１つもしくは複数のバスまたはその他の接続１１０あるいはその両方を介して互いに結合された、１つまたは複数のプロセッサまたはプロセッシング・ユニット１０４（例えば、中央処理装置（ＣＰＵ：central processing units））、メモリ１０６（例として、メイン・メモリまたはストレージと呼ばれる）、および１つまたは複数の入出力（Ｉ／Ｏ：input/output）インターフェイス１０８を含んでよいが、これらに限定されない。
【００２７】
バス１１０は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、任意の複数の種類のバス構造のうちの１つまたは複数を表す。例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）、ＭＣＡ（Micro Channel Architecture）、ＥＩＳＡ（Enhanced ISA）、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnect）を含むが、これらに限定されない。
【００２８】
メモリ１０６は、例えば、プロセッサ１０４のローカル・キャッシュ１２２に結合されてよい、共有キャッシュなどのキャッシュ１２０を含んでよい。さらに、メモリ１０６は、１つまたは複数のプログラムまたはアプリケーション１３０、オペレーティング・システム１３２、および１つまたは複数のコンピュータ可読プログラム命令１３４を含んでよい。コンピュータ可読プログラム命令１３４は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００２９】
コンピュータ・システム１０２は、例えばＩ／Ｏインターフェイス１０８を介して、１つまたは複数の外部デバイス１４０、１つまたは複数のネットワーク・インターフェイス１４２、または１つまたは複数のデータ・ストレージ・デバイス１４４、あるいはその組み合わせと通信してもよい。例示的な外部デバイスとしては、ユーザ端末、テープ・ドライブ、ポインティング・デバイス、ディスプレイなどが挙げられる。ネットワーク・インターフェイス１４２は、コンピュータ・システム１０２が、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと通信できるようにし、他のコンピューティング・デバイスまたはシステムとの通信を実現する。
【００３０】
データ・ストレージ・デバイス１４４は、１つまたは複数のプログラム１４６、１つまたは複数のコンピュータ可読プログラム命令１４８、またはデータ、あるいはその組み合わせなどを格納してよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてよい。
【００３１】
コンピュータ・システム１０２は、取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体を含むか、またはそのようなコンピュータ・システム・ストレージ媒体に結合されるか、あるいはその両方であってよい。例えば、コンピュータ・システム１０２は、取り外し不可、不揮発性の磁気媒体（通常は、「ハード・ドライブ」と呼ばれる）、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、またはＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、もしくはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りもしくは書き込みを行うための光ディスク・ドライブ、あるいはその組み合わせを含むか、またはこれらに結合されるか、あるいはその両方であってよい。その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム１０２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３２】
コンピュータ・システム１０２は、他の多数の汎用または専用のコンピューティング・システム環境または構成で運用可能にされてよい。コンピュータ・システム１０２での使用に適した周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ（ＰＣ：personal computer）システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークＰＣ、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
【００３３】
さらに、プロセッサ１０４の一例に関する詳細が、図２を参照してさらに説明される。プロセッサ１０４は、命令を実行するために使用される複数の機能コンポーネントを含む。これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１５０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１５２と、デコードされた命令を実行するための命令実行コンポーネント１５４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１５６と、実行された命令の結果を提供するための書き戻しコンポーネント１６０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の態様に従って、下でさらに説明されている文字列移動命令、文字列比較命令、または文字列検索命令１６６、あるいはその組み合わせを含むが、これらに限定されない、１つもしくは複数の文字列操作または命令あるいはその両方を実行するために使用されてよい。
【００３４】
プロセッサ１０４は、一実施形態では、機能コンポーネントのうちの１つまたは複数によって使用される１つまたは複数のレジスタ１６８も含む。プロセッサ１０４は、本明細書で提供されている例よりも多いコンポーネント、少ないコンポーネント、またはその他のコンポーネント、あるいはその組み合わせを含んでよい。
【００３５】
プロセッサ１０４の実行パイプラインに関する詳細が、図３を参照してさらに説明される。本明細書では、パイプラインのさまざまな処理段階が図に示されて説明されているが、本発明の範囲を逸脱することなく、追加の段階、より少ない段階、またはその他の段階、あるいはその組み合わせが使用されてよいということが理解されるであろう。
【００３６】
図３を参照すると、一実施形態では、命令キューから命令がフェッチされる（１７０）。分岐予測１７２または命令のデコード１７４、あるいはその両方が実行されてよい。デコードされた命令が、一緒に処理される命令のグループ１７６に追加されてよい。デコード中に、本発明の態様に従って、命令分解が実行されてよい。命令分解中に、命令が、フェッチされた命令（例えば命令セット・アーキテクチャ（ＩＳＡ：Instruction Set Architecture）において定義されている設計された命令など）の動作を実行するために使用される、複数の内部マイクロオペレーションなどの一連の動作にデコードされる。一実施形態では、一連の動作は、ループしないで複数の単位（例えば、バイト）のデータに対して同時に動作するように構成されるため、したがって非ループ・シーケンスと呼ばれ、一方、設計された命令は、複数の単位のデータに対してループして動作するように構成される。一例として、１つのレジスタを読み込んでインデックス・レジスタをインクリメントするために使用される設計された読み込みおよび更新命令が、読み込み動作および個別の加算動作に分解されてよい。分解が実行される場合、可能であれば、内部動作が一緒にグループ化される。
【００３７】
グループ化された命令がマッパー１７８に提供され、マッパー１７８が、任意の依存関係を決定し、リソースを割り当て、命令／動作のグループを適切な発行キューにディスパッチする。例えば分岐、読み込み／格納、浮動小数点、固定小数点、ベクトルなどを含む、異なる種類の実行ユニットに対して、１つまたは複数の発行キューが存在する。発行段階１８０の間に、命令／動作が適切な実行ユニットに発行される。いずれかのレジスタが読み取られて（１８２）、そのソースを取り出し、実行段階１８４の間に命令／動作が実行される。示されているように、この実行は、分岐の場合、例えば、読み込み（ＬＤ）または格納（ＳＴ）、固定小数点演算（ＦＸ）、浮動小数点演算（ＦＰ）、またはベクトル演算（ＶＸ）であってよい。書き戻し段階１８６の間に、いずれかの結果が適切なレジスタに書き込まれる。その後、命令が完了する（１８８）。割り込みまたはフラッシュ１９０が存在する場合、処理が命令フェッチ１７０に戻ってよい。
【００３８】
１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、図４を参照して説明される。この例では、コンピューティング環境２００は、例えば、１つもしくは複数のバス２０８またはその他の接続あるいはその両方を介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ）２０２、メモリ２０４、および１つもしくは複数の入出力デバイスまたはインターフェイス２０６あるいはその両方を含む。例として、コンピューティング環境２００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣ（Ｒ）プロセッサまたはｐＳｅｒｉｅｓ（Ｒ）サーバ、あるいはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、Ｉｎｔｅｌ、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。ＩＢＭ、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、およびＰｏｗｅｒＰＣは、世界中の多くの管轄区域で登録されている、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの商標である。
【００３９】
ネイティブ中央処理装置２０２は、環境内で処理中に使用される１つもしくは複数の汎用レジスタまたは１つもしくは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【００４０】
さらに、ネイティブ中央処理装置２０２は、メモリ２０４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２０４に格納されたエミュレータ・コード２１２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード２１２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣ（Ｒ）プロセッサ、ｐＳｅｒｉｅｓ（Ｒ）サーバ、あるいはその他のサーバまたはプロセッサなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）をエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【００４１】
エミュレータ・コード２１２に関連する詳細が、図５を参照してさらに説明される。メモリ２０４に格納されたゲスト命令２５０は、ネイティブＣＰＵ２０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）プロセッサ上で実行するように設計されてよいが、代わりに、例えばインテル・プロセッサであってよい、ネイティブＣＰＵ２０２上でエミュレートされる。１つの例では、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、および取得された命令のローカル・バッファリングを任意選択的に提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【００４２】
さらに、エミュレータ・コード２１２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【００４３】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２０２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【００４４】
本明細書において使用されているように、ファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【００４５】
取得され、変換されて実行されるゲスト命令２５０は、例えば、文字列移動命令、文字列比較命令、または文字列検索命令であり、本明細書では、それらの命令の例が説明される。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ））の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ（Ｒ）、ｐＳｅｒｉｅｓ（Ｒ）、Ｉｎｔｅｌなど）のネイティブ命令２５６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【００４６】
上で示されたように、本発明の態様に従って実装される１つの命令は、文字列移動（ＭＶＳＴ）命令であり、この命令の例がｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）において定義されている。文字列移動命令は、汎用レジスタＲ２によって指定された第２のオペランドを、汎用レジスタＲ１によって指定された第１のオペランドの位置に移動するために使用される。この移動は、汎用レジスタ０で指定された終了文字が移動されるか、またはＣＰＵによって決定された数のバイトが移動されるまで、左から右に行われる。終了文字が移動された場合は、条件コードが１に設定され、またはＣＰＵによって決定された数のバイトが移動された場合は、条件コードが３に設定される。
【００４７】
図６を参照すると、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に従って定義された文字列移動命令３００の一例が表されている。この命令の設計されたバージョンは、例えば、文字列移動動作を指定するためのオペコードを含んでいるオペレーション・コード（オペコード）フィールド３０２、第１のレジスタ・フィールド（Ｒ１）３０４、および第２のレジスタ・フィールド（Ｒ２）３０６を含んでいる。一実施形態では、この命令のフィールドは、互いに分離し、独立している。しかし、別の実施形態では、２つ以上のフィールドが結合されてよい。さらに、命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、下付きの１を有するすべてのフィールドは第１のオペランドに関連付けられ、下付きの２を有するすべてのフィールドは第２のオペランドに関連付けられる。
【００４８】
文字列移動命令の１つの例では、第２のオペランドの全部または一部が、第１のオペランドの位置に配置される。動作は、第２のオペランドの末尾に達するか、またはＣＰＵによって決定された数のバイトが移動されるかのいずれかが最初に発生するまで、継続する。ＣＰＵによって決定された数は、１つの例では、少なくとも１である。結果は、条件コードで示される。
【００４９】
第１のオペランおよび第２のオペランドの左端のバイトの位置は、汎用レジスタＲ１およびＲ２の内容によってそれぞれ指定される。
【００５０】
汎用レジスタＲ１およびＲ２内のアドレスの処理は、アドレス指定モードによって決まる。２４ビット・アドレス指定モードでは、汎用レジスタＲ１およびＲ２のビット位置４０〜６３の内容はアドレスを構成し、ビット位置０〜３９の内容は無視される。３１ビット・アドレス指定モードでは、レジスタのビット位置３３〜６３の内容はアドレスを構成し、ビット位置０〜３２の内容は無視される。６４ビット・アドレス指定モードでは、ビット位置０〜６３の内容はアドレスを構成する。
【００５１】
第２のオペランドの末尾は、オペランドの最後のバイト位置にある終了文字によって示される。第２のオペランドの末尾の決定に使用される終了文字は、汎用レジスタ０のビット位置５６〜６３で指定される。汎用レジスタ０のビット位置３２〜５５は、可能性のある追加の拡張のための予備であり、０を含むことになっており、そうでない場合、１つの例では、指定例外が認識される。
【００５２】
動作は、左から右に進み、第２のオペランドの終了文字が移動されたか、またはＣＰＵによって決定された数の第２のオペランドのバイトが移動されたかのいずれかが最初に発生すると、すぐに終了する。ＣＰＵによって決定された数は、１つの例では、少なくとも１である。終了文字が第２のオペランドの１番目のバイト位置にある場合、終了文字のみが移動される。終了文字が移動されたときに、条件コード１が設定される。終了文字を含んでいないＣＰＵによって決定された数の第２のオペランドのバイトが移動されたときに、条件コード３が設定される。破壊的な重複は認識されない。第２のオペランドが、行き先として使用された後にソースとして使用された場合、結果は予測不可能になる。
【００５３】
条件コード１が設定された場合、第２のオペランド全体が移動されたことを示し、第１のオペランド内の終了文字のアドレスが汎用レジスタＲ１に配置され、汎用レジスタＲ２の内容は変化しない。条件コード３が設定された場合、ＣＰＵによって決定された数のバイトが移動されたことを示し、第１および第２のオペランド内の次に処理されるバイトのアドレスが、汎用レジスタＲ１およびＲ２にそれぞれ配置される。アドレスが汎用レジスタに配置されるときに常に、２４ビット・アドレス指定モードでは、レジスタのビット３２〜３９が０に設定され、または３１ビット・アドレス指定モードでは、レジスタのビット３２が０に設定される。２４ビット・モードまたは３１ビット・モードでは、Ｒ１レジスタおよびＲ２レジスタのビット０〜３１は変化しない。
【００５４】
条件コード３の設定をもたらす処理の量は、システム性能の改善に基づいてＣＰＵによって決定され、この量は、命令が実行されるたびに異なる量になってよい。
【００５５】
第１および第２のオペランドに関して（例えば、動作において必ず使用されるオペランドの一部に関して）、アクセス例外が認識される。
【００５６】
文字列移動命令の１つの実装は、マイクロコードを使用し、高価なマイクロコードの処理への移行およびマイクロコードの処理の終了を含む。この実装が図７に示されている。図７では、例えば下で説明される初期化ステップ（例えば、ステップ４００）および完了チェック（例えば、照会４１０）を含んでいる、命令の実装を取り囲む追加処理も示されている。
【００５７】
図７に示されているように、１つの実装では、終端部（例えば、終端文字）が初期化される（ステップ４００）。例えば、移動されている文字列内に０が現れたときに、処理されている文字列の末尾を示すように、０が終端文字として設定されてよい。他の実装では、その他の値が使用されてもよい。
【００５８】
命令が処理を開始し、マイクロコードの処理に移行する（ステップ４０２）。この処理は、例えば、移行動作を実行すること、内部レジスタを設定すること、またはレジスタの設定に関連する何らかのブックキーピングを実行すること、あるいはその組み合わせなどを含む。ＭＶＳＴのコピー・ループが開始する（ステップ４０４）。このループはマイクロコード内で実行され、前述したように、文字列内の各文字をコピーすることを含む。例えば、各文字は、左から右にコピーされる。各文字がコピーされた後に、文字列のすべての文字がコピーされたかどうか、またはＣＰＵによって決定された数の文字がコピーされたかどうかに関する判定が行われる（照会４０６）。コピーが継続する場合は、処理がステップ４０４を続行する。そうでない場合は、マイクロコードの処理が終了し（ステップ４０８）、命令の実行を終了する。やはりこの処理は、例えば、終了動作を実行すること、１つまたは複数のレジスタを管理すること、またはさまざまなブックキーピング・タスクを実行すること、あるいはその組み合わせを含む。したがって、マイクロコードの移行処理および終了処理に関連するコストが存在する。
【００５９】
その後、チェック・ループ（ＭＶＳＴ処理から分離している）が開始し、このチェック・ループでは、文字列全体がコピーされたかどうか、または追加の文字がコピーされるかどうかに関する判定が行われる（照会４１０）。コピーが継続する場合は、再びマイクロコードに移行し（ステップ４０２）、コピーが続行する（ステップ４０４）。コピーが完了した場合、チェック・ループが終了する（ステップ４１２）。
【００６０】
本発明の態様に従って、ＭＶＳＴの別の実装では、マイクロコードの移行処理および終了処理が回避され、前述した処理のＭＶＳＴのループ（すなわち、移動動作を実行する、構成されたマイクロコードのコピー・ループ）が除去される。代わりに、ＭＶＳＴのコピー・ループが、分解されたか、または展開された一連の動作に置き換えられ、この一連の動作は、ループせずに（本明細書では、「同時に」と呼ばれる）、事前に定義された数のバイト（例えば、１６バイト）などの既定のデータ量までコピーする。したがって、このＭＶＳＴの実装は、本明細書では非ループ構成（または、便宜上、非ループ）と呼ばれる。ＭＶＳＴ処理のこの非ループのバージョンが、ＭＶＳＴ処理に関連付けられた追加の初期化および完了チェックと共に、図８を参照してさらに説明される。
【００６１】
１つの例では、展開された一連の動作が、命令デコード・ユニットによって提供され（例えば、生成され）、１つまたは複数の実行ユニットによって実行される。一実施形態では、この展開は、ＭＶＳＴのコピー・ループに対応する直線的（すなわち、非ループ）コードにすることであり、この直線的コードは、例えば展開されたＭＶＳＴにつき１６バイトなどの、既定のデータ量（例えば、定義された数の単位）まで処理する。設計されたＭＶＳＴの定義と一致して、展開された一連の命令の実行後に、条件コードのチェックが行われ、その後、文字列のすべてのバイトが処理され、文字列の終端部が検出されるまで、ループ（例えば、チェック・ループに対応するループ）が実行されてよい。しかし、設計されたバージョンとは異なり、ＭＶＳＴのコピー・ループは実行されない。さらに、本発明の態様に従って、この一連の動作は、指定されたメモリ境界（例えば、ページ境界またはキャッシュ・ライン境界など）を超えて読み込まない。これが、指定された境界のチェックおよびそれに関連する処理を除去することによって、処理を容易にし、システム性能を改善する。これについて、下で詳細に説明する。
【００６２】
図８を参照すると、一実施形態では、終端部が初期化される（ステップ４５０）。さらに、ＭＶＳＴ命令に対応する一連の動作が、命令デコード・ユニットによって提供され、１つまたは複数の実行ユニットを介して実行されて、コピーを実行する（ステップ４５２）。このコピーは、マイクロコードの処理に移行することも、マイクロコードの処理を終了することもなく、実行される。この一連の動作は、コピー・ループ内でループすることなく、既定のデータ量（例えば、事前に定義された数のバイト（例えば、１６バイト））までコピーする。例えば、１つの実装では、最大１６バイトまで同時にコピーするために、ベクトル・ユニットが使用される。既定のデータ量の例としては、文字列が定義されたバイト数（例えば、１６）未満であることを仮定した、終端文字まで（終端文字を含む）の文字列のバイト、定義されたバイト数（例えば、１６）、または指定されたメモリ境界（ページ境界またはキャッシュ・ライン境界など）まで、などが挙げられる。
【００６３】
非ループの一連の動作の実行後に、コピーが完了したかどうか（すなわち、コピーする必要のある、データの定義された数（例えば、１６）を超える数のバイトが存在するかどうか）に関する判定が行われる（照会４５４）。コピーが完了していない場合、チェック・ループに移行し、処理が続行する（ステップ４５２）。コピーが完了している場合、処理が終了する（ステップ４５６）。
【００６４】
さらに別の例では、文字列が選択された終端文字（０など）を含んでいる場合、文字列移動命令の変更された非ループの実装が使用され、そうでない場合、設計されたマイクロコードの実装が使用される。これが、図９を参照して詳細に説明される。
【００６５】
図９に示されているように、終端部が初期化され（ステップ４７０）、終端部が特定の値（０など）であるかどうかに関する判定が行われる（照会４７２）。初期化された終端部が、選択された終端部の値（例えば、０）でない場合、一実施形態では、マイクロコードの実装が使用される（ステップ４７４）。例えば、０以外の終端部の場合（または、終端部が選択されていない場合）を扱うために、マイクロコードへの内部トラップが実行される。この内部トラップは、例えば、下で説明されているＣＧＩＴ  ＜Ｒ０＞，０，ＮＥ命令を使用して実行される。そうでない場合、初期化された終端部が、選択された終端部の値である場合、マイクロコードに移行する／マイクロコードを終了する代わりに、一連の内部動作を使用する変更された非ループの実装が使用される。例えば、一連の動作が、デコード・ユニットを使用して提供され、１つまたは複数の実行ユニットによって実行されて、コピーを実行する（ステップ４７６）。このコピーは、マイクロコードの処理に移行することなく実行される。この一連の動作は、コピー・ループ内でループすることなく、既定のデータ量（例えば、事前に定義された数のバイト（例えば、１６バイト））までコピーする。既定のデータ量の例としては、文字列が定義されたバイト数（例えば、１６）未満であることを仮定した、終端文字まで（終端文字を含む）の文字列のバイト、定義されたバイト数（例えば、１６）、または指定された境界（ページ境界またはキャッシュ・ライン境界など）まで、などが挙げられる。
【００６６】
非ループの一連の動作またはマイクロコードの実行後に、コピーが完了したかどうか（すなわち、コピーする必要のある、データの定義された数（例えば、１６）を超える数のバイトが存在するかどうか）に関する判定が行われる（照会４７８）。コピーが完了していない場合、チェック・ループに移行し、処理が続行する（ステップ４７２）。コピーが完了している場合、処理が終了する（ステップ４８０）。
【００６７】
上で示したように、１つの例では、マイクロコードに切り替えるために、ＣＧＩＴ（内部トラップ比較および生成：Compare and Generate Internal Trap）内部動作（ｉｏｐ：internal operation）が使用される。ＣＧＩＴは、汎用レジスタ０が値（例えば、０）に対応しているかどうかをテストし、「内部トラップ」をマイクロコードに引き上げる。１つの定義に従って、内部トラップが、パイプラインからのＣＧＩＴの後に、以降のすべての内部動作および命令をフラッシュし、ラベルによって決定された時点、または実行されているＣＧＩＴに対応する命令オペコードに応答して論理によって計算された時点のいずれかで、実行を開始する。１つまたは複数の実施形態では、ＣＧＩＴ  ｉｏｐは、比較されるオペランドを指定するオペランドおよび比較条件を受け取る。他の実施形態では、ｉｏｐは、それらのオペランドの暗黙的な値を含む。さらに他の実施形態では、このテストは、明示的なオペコードの代わりに、補助的な論理によって実行される。一実施形態では、ｉｏｐおよび補助的な論理は、シーケンス４７６に対応するｉｏｐに対して、およびＭＶＳＴ命令を囲んでいる命令に対して並列に、不規則な順序で、有利に実行され得る。
【００６８】
ＭＶＳＴのコピーの実行に使用されてよい一連の内部動作の１つの例が、下で説明される。ＭＶＳＴ命令の非ループのバージョンが実行されるときに、デコード・ユニットが、この一連の動作を生成するか、または選択する。下の内部動作では、＜Ｒ０＞、＜Ｒ１＞、および＜Ｒ２＞が、設計されたレジスタｒ０、ｒ１、ｒ２を指しているか、またはそれらの名前が変更された物理的変形ｅＲ１、ｅＲ２が、展開されたコード・シーケンスによって使用される非ループの内部汎用レジスタ（または、それらの物理的対応部分）を指しており、ｅＶＲ１、ｅＶＲ２が、展開されたコード・シーケンスによって使用される非ループの内部ベクトル・レジスタ（または、それらの物理的対応部分）を指している。接尾辞ｍｏｄｉｆｉｅｄｃｃは、この接尾辞が付加された動作の条件コードの取り扱いが、設計されたバージョン（設計された命令に対応する、設計されたバージョンの動作）の条件コードの処理方法とは異なるということを示している。接尾辞ｎｏｃｃは、条件コードがないことを表しており、この接尾辞が付加された動作に関しては、設計されたバージョン（設計された命令に対応する設計されたバージョンの動作）において定義されている条件コードが、設定されない。接尾辞ｎｏｃｃ＿ｃｏｎｄは、この接尾辞に関連付けられた動作が、特定の条件の場合に実行されること、および条件コードが設定されないことを示しており、条件コードが設定されないことは、やはり、この動作に関連する設計されたバージョンの命令とは異なっている。
【００６９】
ＭＶＳＴの一連の動作の一例として、次が挙げられる。
ＶＬＢＢ  ＜ｅＶＲ１＞，＜Ｒ１＞，＜境界＞
ある数のバイト（例えば、１６バイト）を選択された境界（例えば、ページ境界またはキャッシュ・ライン境界）までｅＶＲ１に読み込む
ＶＦＥＮＥ＿ｍｏｄｉｆｉｅｄｃｃ  ＜ｅＶＲ２＞，＜ｅＶＲ１＞，＜ｅＶＲ１＞
終端部の条件＼（逆斜線）０を検出する
ＬＣＢＢ＿ｎｏｃｃ  ＜ｅＲ１＞，＜Ｒ１＞，＜境界＞
ＶＬＢＢによって読み込まれたバイトの数を計算する
ＭＩＮ＿ｎｏｃｃ  ＜ｅＲ２＞，＜ｅＲ１＞，＜ｅＶＲ２＞
【００７０】
読み込まれたバイト（ｅＲ１）または終端文字の位置（ｅＶＲ２）のうちの最小値を決定し、転送するバイトの総数（ｅＲ２）を決定する。
ＶＳＴＬ＿ｎｏｃｃ  ＜ｅＶＲ１＞，＜Ｒ２＞，Ｌ＝＜ｅＲ２＞
ｅＶＲ１から、Ｒ２によって指定されたアドレスまでの、計算された数のバイト（すなわち、それらのバイトの内容）を、ｅＲ２に格納する。
Ａ＿ｎｏｃｃ  ＜Ｒ１＞，＜ｅＲ２＞
格納されたバイト（ｅＲ２）の数（すなわち、カウント）を、レジスタＲ１に加算する。
Ａ＿ｎｏｃｃ＿ｃｏｎｄ  ＜Ｒ２＞，＜ｅＲ２＞
【００７１】
ｃｃフラグの値が３である場合、格納されたバイト（ｅＲ２）の数（すなわち、カウント）を、レジスタＲ２に加算する。この命令は、条件コードが３である場合に、第２のオペランドのレジスタを第１のオペランドのレジスタに加算する。したがって、加算動作を使用することによって、条件コード３が設定されているときに、第１および第２のオペランド内の次に処理されるバイトのアドレスが、汎用レジスタＲ１およびＲ２にそれぞれ配置される（例えば、予測された命令を使用すること、一時的レジスタへの無条件の加算の条件付き移動など、その他の実施形態および条件コードの処理が可能である）。
【００７２】
１つまたは複数の他の実施形態では、異なる内部動作が使用されてよく、または内部動作の順序が変更されてよく、あるいはその両方が実施されてもよい。１つまたは複数の実施形態では、複数の内部動作が結合されてよく、例えば、境界までの読み込みカウント動作およびその後の最小値動作が、単一の内部動作として実装されてよい。その他の可能性も存在する。
【００７３】
例えば、非ループの一連の動作のうちの動作が、それらに対応する設計された命令とは異なるオペコードを含んでよく、または同じオペコードを含んでよいが、非ループのバージョンが処理されることを示すフラグが設定される。その他の例も可能である。
【００７４】
前述した動作のうちの少なくとも一部は、ベクトル機能の一部であるベクトル演算である。ベクトル機能は、例えば、１〜１６個の要素を含む固定サイズのベクトルを提供する。各ベクトルは、ベクトル演算／命令によって処理されるデータを含む。一実施形態では、複数の要素のベクトルが作成された場合、各要素は、他の要素と並列に処理される。すべての要素の処理が完了するまで、命令の完了は発生しない。
【００７５】
例えば、ストレージ内で、他のデータ形式と同じ左から右への順序でベクトル・データが現れる。０〜７の番号が付けられたデータ形式のビットが、ストレージ内の左端の（最小の番号が付けられた）バイト位置でバイトを構成し、ビット８〜１５が、次の連続的位置でバイトを形成する、などとなる。さらに別の例では、ストレージ内で、右から左へのなどの別の順序でベクトル・データが現れることがある。
【００７６】
以下では、さまざまなベクトル演算に関する詳細がさらに説明される。最初に、例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）において定義されているような、動作に対応する命令の設計された定義が説明される。次に、本発明の１つまたは複数の態様に関する非ループの一連の動作によって実装された、設計された定義に対する変更が、もしあれば、説明される。
【００７７】
本明細書に記載され、ベクトル機能と共に提供される、設計されたベクトル命令の少なくとも一部は、指定されたビットのフィールドを含む。このフィールドは、レジスタ拡張ビットまたはＲＸＢと呼ばれ、ベクトル・レジスタによって指定されたオペランドごとに、最上位ビットを含む。命令によって指定されないレジスタ指定のビットは、予備になり、０に設定されることになる。
【００７８】
１つの例では、ＲＸＢフィールドが４つのビット（例えば、ビット０〜３）を含んでおり、各ビットが次のように定義される。
０  −  命令の第１のベクトル・レジスタ指定の最上位ビット。
１  −  命令の第２のベクトル・レジスタ指定の最上位ビット（もしあれば）。
２  −  命令の第３のベクトル・レジスタ指定の最上位ビット（もしあれば）。
３  −  命令の第４のベクトル・レジスタ指定の最上位ビット（もしあれば）。
【００７９】
各ビットは、レジスタ番号に応じて、例えばアセンブラによって、０または１に設定される。例えば、レジスタ０〜１５の場合、ビットは０に設定され、レジスタ１６〜３１の場合、ビットは１に設定される、などとなる。
【００８０】
一実施形態では、各ＲＸＢビットは、１つまたは複数のベクトル・レジスタを含んでいる命令内の特定の位置の拡張ビットである。例えば、１つまたは複数のベクトル命令では、ＲＸＢのビット０は、例えばＶ１に割り当てられる位置８〜１１の拡張ビットであり、ＲＸＢのビット１は、例えばＶ２に割り当てられる位置１２〜１５の拡張ビットである、などとなる。
【００８１】
さらに別の実施形態では、ＲＸＢフィールドが追加ビットを含み、ベクトルまたは位置ごとに、２つ以上のビットが拡張として使用される。
【００８２】
ここで、上記の動作のそれぞれが説明される。最初に、設計された命令が説明され、次に、対応する動作に対する任意の変更が説明される。
【００８３】
ブロック境界までのベクトル読み込み（ＶＬＢＢ）命令の一例が、図１０を参照して説明される。１つの例では、設計されたバージョンのブロック境界までのベクトル読み込み命令５００は、ブロック境界までのベクトル読み込み動作を示すオペレーション・コード（オペコード）フィールド５０２ａ（例えば、ビット０〜７）、５０２ｂ（例えば、ビット４０〜４７）、ベクトル・レジスタ（Ｖ１）を指定するために使用されるベクトル・レジスタ・フィールド５０４（例えば、ビット８〜１１）、インデックス・フィールド（Ｘ２）５０６（例えば、ビット１２〜１５）、ベース・フィールド（Ｂ２）５０８（例えば、ビット１６〜１９）、変位フィールド（Ｄ２）５１０（例えば、ビット２０〜３１）、マスク・フィールド（Ｍ３）５１２（例えば、ビット３２〜３５）、およびＲＸＢフィールド５１４（例えば、ビット３６〜３９）を含む。各フィールド５０４〜５１４は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド５０４〜５１４は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。これらのフィールドの使用に関する詳細が、以下で説明される。
【００８４】
１つの例では、ベクトル（Ｖ１）フィールドが、それに対応する、ＲＸＢによって指定された拡張ビットと共に、ベクトル・レジスタを指定する。具体的には、ベクトル・レジスタの場合、オペランドを含んでいるレジスタは、例えば、レジスタ拡張ビット（ＲＸＢ）を最上位ビットとして追加して、レジスタ・フィールドの４ビットのフィールドを使用して、指定される。例えば、４ビットのフィールドが０１１０であり、拡張ビットが０である場合、５ビットのフィールド００１１０がレジスタ番号６を示す。
【００８５】
１つの例では、Ｘ２フィールドおよびＢ２フィールドによって指定された汎用レジスタの内容が、Ｄ２フィールドの内容に加算されて、第２のオペランド・アドレスを形成する。ブロック境界までのベクトル読み込み命令の変位Ｄ２は、１つの例では、１２ビットの符号なし整数として扱われる。
【００８６】
一実施形態では、Ｍ３フィールドは、読み込みの終点になるブロック境界に関してＣＰＵに信号で伝えるために使用されるコードを指定する。予備の値が指定された場合、指定例外が認識される。例示的なコードおよび対応する値は次のとおりである。
コード    境界
０    ６４バイト
１    １２８バイト
２    ２５６バイト
３    ５１２バイト
４    １キロバイト
５    ２キロバイト
６    ４キロバイト
【００８７】
ブロック境界までのベクトル読み込み命令の一実施形態の実行において、０でインデックス付けされたバイト要素から開始して、一実施形態では左から右に進み、第１のオペランド（拡張ビットを加えたＶ１フィールドによって指定されたレジスタで指定される）が、第２のオペランドからのバイトと共に、読み込まれる。第２のオペランドは、第２のオペランド・アドレス（開始アドレスとも呼ばれる）によって指定されたメモリ位置である。読み込みは、このメモリ位置から開始し、命令（またはプロセッサ）によって計算された終了アドレスまで継続する。境界条件が発生した場合、第１のオペランドの残りの部分がどのように扱われるかは、モデルに依存する。読み込まれないバイトに関して、アクセス例外は認識されない。１つの例では、読み込まれないバイトは予測不可能になる。
【００８８】
設計された命令の一実施形態では、開始アドレスが、インデックス・レジスタの値（Ｘ２）にベース・レジスタの値（Ｂ２）を加え、さらに変位（Ｄ２）を加えた値によって決定されるが、他の実施形態では、開始アドレスは、単にいくつかの例として、レジスタ値、命令アドレスに、命令テキストによって指定されたオフセットを加えた値、レジスタ値に変位を加えた値、またはレジスタ値にインデックス・レジスタの値を加えた値によって提供される。さらに、一実施形態では、命令がＲＸＢフィールドを含まない。代わりに、拡張が使用されないか、または拡張が、命令の外部の制御からなど、別の方法で提供されるか、あるいは命令の別のフィールドの一部として提供される。
【００８９】
ＶＬＢＢ動作（すなわち、非ループ構成のバージョンの設計された命令）の一実施形態では、開始アドレスが、Ｘ２、Ｂ２、Ｄ２の代わりに、Ｒ１によって提供され、Ｖ１の代わりにＶＲ１が、読み込まれるレジスタを示す。さらに、Ｍ３が＜境界＞に置き換えられる。この動作は、Ｒ１内のアドレスから開始して、終端文字（例えば、０）が読み込まれたとき、ＣＰＵによって決定された数のバイトが読み込まれたとき、または本発明の態様に従って、指定された境界（例えば、ページ境界またはキャッシュ・ライン境界）に達したときに終了し、ある数のバイトをｅＶＲ１に読み込む。
【００９０】
１つの例では、ＶＬＢＢは、終端部が指定された開始アドレスとページ境界の間に存在するが、最大ベクトル長（例えば、１６バイト）が次のページに伸びており、通常の読み込みを満たすには、次のそのアクセスできないページから読み込む必要があり、ＭＶＳＴまたはその他のそのような命令の仕様に一致しないアドレス変換例外の発生を引き起こす場合に、任意の例外を回避するように、ベクトル全体を読み込むか、または多くても指定された（例えば、ページ）境界（変換境界）まで読み込む。
【００９１】
別の例では、例えばキャッシュ・ラインまたはキャッシュ・ブロック（サブライン）などの、ページ境界未満の境界を横断することは、多くの場合、性能上の不利に関連するため、境界が、そのようなページ境界未満に設定されてよい。したがって、最初の実行が、その時点まで読み込み、その後の実行が、読み込み元オペランドのアクセスに対してアライメントされ、その結果、性能が向上する（このことは、その後のアライメントされたアクセスの利益が、開始時により短いアクセスを実行するという効率の低下を小さくする、長い文字列の場合に特に当てはまる）。
【００９２】
少なくとも１つの実施形態に従って、境界が、例えば、選択された境界予測器（boundary predictor）に基づいて動的に選択され、この境界予測器は、例えば、特定の文字列操作の観察されたオペランド長（ローカル予測器）またはシステム内で通常使用される文字列長（グローバル予測器）、あるいは読み込み元オペランドの特定の境界に対してアライメントされたアクセスの実行対アライメントされていないアクセスの実行から観察された性能上の利益（この場合も、ローカル予測器またはグローバル予測器のいずれかを使用する）を含むが、これらに限定されない、これらのことに基づいて、境界が、ページ境界、キャッシュ・ライン、サブライン、またはその他の境界として指定されるべきかどうかを判定する能力を備えている。境界を動的に選択するためのその他の例も可能である。
【００９３】
上で示された別の動作は、ヌルの終端部（例えば、０）などの終端文字を検出するために使用されるＶＦＥＮＥ（ベクトル不等要素検出）である。設計されたバージョンのＶＦＥＮＥの一例が、図１１を参照して説明される。一実施形態では、この設計された命令は、複数のベクトルのデータを、等しくないことに関して比較することができ、ヌルまたは０の要素（例えば、要素全体が０である）などの、選択されたベクトルの終端部を検索することもできる。
【００９４】
１つの例では、ベクトル不等要素検出命令６００は、ベクトル不等要素検出動作を示すオペコード・フィールド６０２ａ（例えば、ビット０〜７）、６０２ｂ（例えば、ビット４０〜４７）、第１のベクトル・レジスタ（Ｖ１）を指定するために使用される第１のベクトル・レジスタ・フィールド６０４（例えば、ビット８〜１１）、第２のベクトル・レジスタ（Ｖ２）を指定するために使用される第２のベクトル・レジスタ・フィールド６０６（例えば、ビット１２〜１５）、第３のベクトル・レジスタ（Ｖ３）を指定するために使用される第３のベクトル・レジスタ・フィールド６０８（例えば、ビット１６〜１９）、第１のマスク・フィールド（Ｍ５）６１０（例えば、ビット２４〜２７）、第２のマスク・フィールド（Ｍ４）６１２（例えば、ビット３２〜３５）、およびＲＸＢフィールド６１４（例えば、ビット３６〜３９）を含む。各フィールド６０４〜６１４は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド６０４〜６１４は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。これらのフィールドの使用に関する詳細が、以下で説明される。
【００９５】
例えば４つのビット０〜３を含んでいるＭ４フィールドは、例えばビット１〜３で、要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタのオペランド内の要素のサイズを指定する。１つの例では、要素サイズ制御は、バイト、ハーフワード（例えば、２バイト）、またはワード（例えば、４バイト）を指定できる。例えば、０はバイトを示し、１はハーフワードを示し、２はワード（フルワードとも呼ばれる）を示す。予備の値が指定された場合、指定例外が認識される。
【００９６】
Ｍ５フィールドは、例えば４ビットのフィールド（ビット０〜３）であり、例えば次を含む。
ゼロ検索フィールド（ＺＳ、ビット２）。このフィールドが１である場合、第２のオペランドの各要素が、０と等しいことに関しても、比較される（さらに別の例では、第３のオペランドまたは別のオペランドの各要素が０と比較される）。および、
条件コード設定フィールド（ＣＳ、ビット３）。このフィールドが０である場合、条件コードが設定されず、変化しない。このフィールドが１である場合、条件コードが、一例として、以下で指定されているように設定される。
０  −  ゼロ検索ビットが１である場合、比較が、両方のオペランド内で、いずれかの等しくない比較よりも低いインデックスが付けられた要素において、０の要素を検出した。
１  −  要素の不一致が検出されており、第２のオペランド内の要素が、第３のオペランド内の要素より小さい。
２  −  要素の不一致が検出されており、第２のオペランド内の要素が、第３のオペランド内の要素より大きい。
３  −  比較されたすべての要素が等しく、ゼロ検索ビットが１である場合、第２のオペランド（または、別の実施形態では、他のオペランド）内で、０の要素が検出されなかった。
【００９７】
設計されたベクトル不等要素検出命令の一実施形態の実行において、一実施形態では左から右に進んで、第２のオペランド（Ｖ２およびその拡張ビットによって指定されたベクトル・レジスタに含まれている）の要素が、第３のオペランド（Ｖ３フィールドおよびその拡張ビットによって指定されたベクトル・レジスタに含まれている）の対応する要素と比較され、任意選択的に０と比較される。２つの要素が等しくない場合、最も左の等しくない要素のバイト・インデックスが、第１のオペランド（Ｖ１およびその拡張ビットによって指定されたレジスタで指定される）の指定されたバイト（例えば、バイト７）に配置され、０が、第１のオペランドの他のすべてのバイトに格納される。
【００９８】
１つの例では、返される（例えば、指定されたバイトに格納される）要素のバイト・インデックスは、等しくない最も左の要素の１番目のバイトのインデックスである。例えば、要素のサイズがバイトである場合、最も左の等しくない要素のインデックスが返される（例えば、１６個の要素（０〜１５）が存在し、要素６が等しくない場合、バイト・インデックス６が返される）。同様に、要素のサイズがハーフワードであり、８つの要素（０〜７）が存在し、要素３のバイト６または７のいずれかが等しくない場合、バイト・インデックス６が返される。同様に、要素のサイズがフルワードであり、４つの要素（０〜３）が存在し、要素１のバイト４〜７のうちの１つが等しくない場合、バイト・インデックス４が返される。
【００９９】
Ｍ５フィールド内の条件コード設定ビットが、例えば１に設定された場合、条件コードは、どのオペランドがより大きいかを（もしあれば）示すように設定される。すなわち、例えば、第２のオペランド内の文字と同等の例えば２進整数が、第３のオペランド内の等しくない文字と同等の２進整数と比較され、この比較に基づいて条件コードが設定される。各要素が等しかった場合、ベクトルのサイズ（バイト数、例えば１６）に等しいバイト・インデックスが、第１のオペランドの指定されたバイト（例えば、バイト７）に配置され、０が、他のすべてのバイト位置に配置される。条件コード設定ビットが１である場合、選択された条件コード（例えば、条件コード３）が設定される。
【０１００】
Ｍ５フィールド内のゼロ検索ビットが１である場合、第２のオペランド（または他の実施形態では、第３のオペランドまたは別のオペランド）内の各要素が、０（ヌルの終端部、文字列の末尾などとも呼ばれる）と等しいことに関しても、比較される。第２のオペランドのいずれかの他の要素が等しくないということが検出される前に、第２のオペランド内で０の要素が検出された場合、０であることが検出された要素の１番目のバイトのバイト・インデックスが、（例えば、設計されたバージョンのＶ１内の）第１のオペランドの指定されたバイト（例えば、バイト７）に格納される。０が、他のすべてのバイトに格納され、選択された条件コード（例えば、条件コード０）が設定される。
【０１０１】
一実施形態では、要素の比較が並列に実行される。例えば、比較されているレジスタの長さが１６バイトである場合、１６バイトが並列に比較される。他の実施形態では、データの単位がバイト以外であってよく、並列な比較の数が、単位のサイズに対応する。さらに、別の実施形態では、ベクトルの方向（左から右へ、または右から左へ）が実行時に提供される。例えば、命令は、処理の方向を左から右へ、または右から左へのいずれかとして示す、例えばレジスタ、状態制御、またはその他の実体にアクセスする。一実施形態では、この方向制御は、命令の一部としてエンコードされず、実行時に命令に提供される。
【０１０２】
さらに別の実施形態では、命令がＲＸＢフィールドを含まない。代わりに、拡張が使用されないか、または拡張が、命令の外部の制御からなど、別の方法で提供されるか、あるいは命令の別のフィールドの一部として提供される。
【０１０３】
本発明の態様に従って、非ループのＭＶＳＴおよびその他の命令に使用される、設計されたＶＦＥＮＥ命令のバージョンは、ＶＦＥＮＥ＿ｍｏｄｉｆｉｅｄｃｃと呼ばれる変更されたバージョンであり、このバージョンでは、下で説明されているように、条件コード（ｃｃ：condition code）の挙動が変更される。変更されたバージョンのＶＦＥＮＥでは、終端文字（例えば、０）のみが検索され、等しくない文字は検索されない。したがって、第２のオペランド（例えば、ｅＶＲ１）および第３のオペランド（例えば、ｅＶＲ１）は両方とも同じデータを含んでおり、比較は等しくない文字を生み出さない。さらに、ＲＸＢ、Ｍ４、およびＭ５が提供されず、終端文字（例えば、＼（逆斜線）０）が現れた場合、ｃｃが１に設定され、そうでない場合、ｃｃが３に設定される。
【０１０４】
別の実装では、ＶＦＥＮＥは、２つの加算命令の処理を含むように実装されてよい。ＶＦＥＮＥ＿ｍｏｄｉｆｉｅｄｃｃ＿ｕｐｄａｔｅｄは、ＶＲ１、ＶＲ２、Ｒ１、Ｒ２のアドレスを指定する。
【０１０５】
上で示された別の動作は、ＬＣＢＢ（ブロック境界までの読み込みカウント）である。設計されたバージョンのブロック境界までの読み込みカウント命令の一実施形態が、図１３を参照して説明される。この命令は、例えば、メモリ内の指定されたアドレスから指定されたメモリ境界までのデータのバイト数のカウントを提供する（例えば、指定されたメモリ境界を横断せずにレジスタに読み込まれるバイト数を提供する）。
【０１０６】
１つの例では、ブロック境界までの読み込みカウント命令７００は、ブロック境界までの読み込みカウント動作を示すオペコード・フィールド７０２ａ（例えば、ビット０〜７）、７０２ｂ（例えば、ビット４０〜４７）、汎用レジスタ（Ｒ１）を指定するために使用されるレジスタ・フィールド７０４（例えば、ビット８〜１１）、インデックス・フィールド（Ｘ２）７０６（例えば、ビット１２〜１５）、ベース・フィールド（Ｂ２）７０８（例えば、ビット１６〜１９）、変位フィールド（Ｄ２）７１０（例えば、ビット２０〜３１）、およびマスク・フィールド（Ｍ３）１０１２（例えば、ビット３２〜３５）を含む。各フィールド７０４〜７１２は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド７０４〜７１２は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。これらのフィールドの使用に関する詳細が、以下で説明される。
【０１０７】
１つの例では、Ｘ２フィールドおよびＢ２フィールドによって指定された汎用レジスタの内容が、Ｄ２フィールドの内容に加算されて、第２のオペランド・アドレスを形成する。ブロック境界までの読み込みカウント命令の変位Ｄ２は、１つの例では、１２ビットの符号なし整数として扱われる。第２のオペランド・アドレスは、メイン・メモリ内の位置を示すために使用されるが、この実施形態では、データのアドレスを指定するためには使用されない。
【０１０８】
一実施形態では、Ｍ３フィールドは、メモリ境界を横断せずに読み込む可能性のあるバイト数を計算するためのブロック境界サイズに関してＣＰＵに信号で伝えるために使用されるコードを指定する。予備の値が指定された場合、１つの例では、指定例外が認識される。例示的なコードおよび対応する値は次のとおりである。
コード    境界
０    ６４バイト
１    １２８バイト
２    ２５６バイト
３    ５１２バイト
４    １キロバイト
５    ２キロバイト
６    ４キロバイト
【０１０９】
さらに別の例では、境界サイズは、命令に含められず、代わりに、命令を実行するプロセッサによって動的に決定される。例えば、Ｍ３フィールドは、境界の種類（例えば、キャッシュ・ライン、ページなど）を指定し、プロセッサの種類および１つまたは複数の特性（例えば、プロセッサのキャッシュ・ライン・サイズ、プロセッサのページ・サイズなど）に基づいて、プロセッサが境界を決定する。例えば、種類に基づいて、プロセッサは固定サイズを境界に使用し（例えば、プロセッサの事前に定義された固定キャッシュ・ライン・サイズまたは固定ページ・サイズ）、または種類に基づいて、プロセッサは境界を決定する。例えば、種類がページ境界である場合、プロセッサはトランスレーション・ルックアサイド・バッファ（ＴＬＢ：Translation Look-aside Buffer）内の開始アドレスを検索し、この開始アドレスからページ境界を決定する。その他の例も存在する。例えば、種類は、命令の別のフィールドによって、または命令の外部の制御から提供されてよい。
【０１１０】
ブロック境界までの読み込みカウント命令の一実施形態の実行において、指定されたブロック境界を横断することなく第２のオペランドの位置から読み込むことができるバイト数を含んでいる、例えば読み込まれるレジスタのサイズ（例えば、１６）に制限された、符号なし２進整数（例えば、６４ビット）が、第１のオペランドで指定された汎用レジスタに配置される。
【０１１１】
命令の実行から生じる任意選択的な条件コードが、例えば次のように設定される。
０  −  オペランド１は１６である
１  −
２  −
３  −  オペランド１は１６未満である
【０１１２】
上記の例示的な命令では、カウントが開始される開始アドレスが、インデックス・レジスタの値（Ｘ２）にベース・レジスタの値（Ｂ２）を加え、さらに変位（Ｄ２）を加えた値によって決定されるが、他の実施形態では、開始アドレスは、単にいくつかの例として、レジスタ値、命令アドレスに、命令テキストによって指定されたオフセットを加えた値、レジスタ値に変位を加えた値、またはレジスタ値にインデックス・レジスタの値を加えた値によって提供される。
【０１１３】
本発明の態様に従って、非ループのＭＶＳＴおよびその他の命令に使用される、設計されたＬＣＢＢ命令のバージョンは、ＬＣＢＢ＿ｎｏｃｃと呼ばれる変更されたバージョンであり、このバージョンでは、設計されたバージョンのＬＣＢＢとは異なり、条件コードが設定されない。変更されたバージョンでは、Ｘ２、Ｂ２、およびＤ２がＲ１に置き換えられ、Ｖ１がＲ１に置き換えられ、Ｍ３フィールドが＜境界＞に置き換えられ、条件コードが設定されない。この動作は、例えば、ＶＬＢＢによって読み込まれるバイトの数を計算する。
【０１１４】
ＭＶＳＴ（およびその他）の非ループのバージョンで使用される別の動作は、長さによるベクトル格納動作である。したがって、設計されたバージョンの長さによるベクトル格納（ＶＳＴＬ）命令の一例が、図１４を参照して説明される。１つの例では、長さによるベクトル格納命令８００は、長さによるベクトル格納動作を示すオペコード・フィールド８０２ａ（例えば、ビット０〜７）、８０２ｂ（例えば、ビット４０〜４７）、ベクトル・レジスタ（Ｖ１）を指定するために使用されるレジスタ・フィールド８０４（例えば、ビット８〜１１）、レジスタ・フィールド（Ｒ３）８０６（例えば、ビット１２〜１５）、ベース・フィールド（Ｂ２）８０８（例えば、ビット１６〜１９）、変位フィールド（Ｄ２）８１０（例えば、ビット２０〜３１）、およびＲＸＢフィールド８１２（例えば、ビット３２〜３５）を含む。各フィールド８０４〜８１２は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド８０４〜８１２は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。これらのフィールドの使用に関する詳細が、以下で説明される。
【０１１５】
ベース・レジスタの内容が変位に加算されて、値を作成する。長さによるベクトル格納命令の変位は、１２ビットの符号なし整数として扱われる。
【０１１６】
動作中に、設計されたバージョンの一実施形態では、左から右に進んで、第１のオペランドからのバイトが第２のオペランドの位置に格納される。第３のオペランドによって指定された汎用レジスタは、格納する最高のインデックスが付けられたバイトを表す値を含んでいる３２ビットの符号なし整数を格納する。第３のオペランドが、ベクトルの最高のバイト・インデックス以上である値を含んでいる場合、第１のオペランドのすべてのバイトが格納される。
【０１１７】
格納されるバイトに関して、アクセス例外のみが認識される。
【０１１８】
本発明の態様に従って、非ループのＭＶＳＴおよびその他の命令に使用される、設計されたＶＳＴＬ命令のバージョンは、ＶＳＴＬ＿ｎｏｃｃと呼ばれる変更されたバージョンであり、このバージョンでは、条件コードが設定されない。一実施形態では、非ループのシーケンスにおいて使用される、条件コードが抑制されたＶＳＴＬのパラメータは、Ｂ２がＲ２に対応し、Ｄ２が０に対応するように設定され、Ｖ１がｅＶＲ１に設定され、Ｒ３がｅＲ２に設定される。別の実施形態では、ＶＳＴＬの非ループのバージョンのオペランドが明示的に指定されず、変更されたバージョンの１つまたは複数のオペランドが次のように設定される。Ｂ２およびＤ２がＲ２に置き換えられ、Ｖ１がｅＶＲ１に置き換えられ、Ｒ３がＬ＝＜ｅＲ２＞に置き換えられる。
【０１１９】
上記の動作に加えて、設計されたＭＩＮ命令に対応する最小値動作、および設計された加算命令に対応する加算動作などの、その他の動作が提供される。上で示されたように、非ループの一連の動作の最小値動作および第１の加算動作は、それらに対応する設計された動作から変更されており、条件コードを設定しない。さらに、少なくとも１つの実施形態では、非ループのシーケンスにおいて使用される最小値動作は、整数レジスタの代わりにベクトル・レジスタから少なくとも１つの入力オペランドを受信する能力を備えている（別の実施形態では、最初にベクトル・レジスタが整数レジスタに転送され、変更された最小値動作が２つの整数レジスタの入力オペランドを受信する）。同様に、非ループのシーケンスの第２の加算動作は、それに対応する設計された動作から変更されており、ＶＦＥＮＥの条件コードが例えば３である場合にのみ、加算を実行し、条件コードを設定しない。
【０１２０】
本明細書に記載されているように、一実施形態では、高コストのマイクロコードの開始または終了あるいはその両方を回避する文字列移動命令の実装が提供され、二重ループに関連するコストを削減し、１つの例では、高性能の文字列のＳＩＭＤ（単一命令複数データ：single instruction, multiple data）機能（例えば、ベクトル機能）を利用する。この実装は、非ループ構成の一連の動作を使用して、設計されたＭＶＳＴ命令のコピー・ループ動作を実行する。１つの例では、この実装は、多くの適用空間において頻度が高い短い文字列に対して、特に効率的である。
【０１２１】
本発明の態様に従って、実装されてよい別の命令は、論理的文字列比較（ＣＬＳＴ）命令である。論理的文字列比較命令は、汎用レジスタＲ２によって指定された第２のオペランドを、汎用レジスタＲ１によって指定された第１のオペランドの位置と比較するために使用される。この比較は、等しくないバイトが比較されるか、汎用レジスタ０で指定された終了文字がいずれかのオペランドに現れるか、またはＣＰＵによって決定された数のバイトが比較されるまで、例えば左から右に、バイトごとに行われる。条件コードは、２つのオペランドが等しい場合、０に設定され、第１のオペランドが低い場合、１に設定され、第２のオペランドが低い場合、２に設定され、ＣＰＵによって決定された数のバイトが比較された場合、３に設定される。両方のオペランドで同時に終了文字が検出された場合、それらのオペランドは等しい。１つのオペランドのみで終了文字が検出された場合、そのオペランドが低い。
【０１２２】
例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）のアーキテクチャで定義されているような、論理的文字列比較命令の１つの例が、図１５を参照して説明される。１つの例では、論理的文字列比較命令９００は、論理的文字列比較動作を指定するためのオペコードを含んでいるオペレーション・コード（オペコード）フィールド９０２（例えば、ビット０〜１５）、第１のレジスタ・フィールド（Ｒ１）９０４（例えば、ビット２４〜２７）、および第２のレジスタ・フィールド（Ｒ２）９０６（例えば、ビット２８〜３１）を含んでいる。一実施形態では、この命令のフィールドは、別々であり、互いに独立している。しかし、別の実施形態では、２つ以上のフィールドが結合されてよい。さらに、命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、下付きの１を有するすべてのフィールドは第１のオペランドに関連付けられ、下付きの２を有するすべてのフィールドは第２のオペランドに関連付けられる。
【０１２３】
設計された論理的文字列比較命令の一実施形態の動作では、等しくないバイトが比較されるか、いずれかのオペランドの末尾に達するか、またはＣＰＵによって決定された数のバイトが比較されるかのいずれかが最初に発生するまで、第１のオペランドが第２のオペランドと比較される。ＣＰＵによって決定された数は、１つの例では、少なくとも２５６である。結果は、条件コードで示される。
【０１２４】
第１のオペランおよび第２のオペランドの左端のバイトの位置は、汎用レジスタＲ１およびＲ２の内容によってそれぞれ指定される。
【０１２５】
汎用レジスタＲ１およびＲ２内のアドレスの処理は、アドレス指定モードによって決まる。２４ビット・アドレス指定モードでは、汎用レジスタＲ１およびＲ２のビット位置４０〜６３の内容はアドレスを構成し、ビット位置０〜３９の内容は無視される。３１ビット・アドレス指定モードでは、レジスタのビット位置３３〜６３の内容はアドレスを構成し、ビット位置０〜３２の内容は無視される。６４ビット・アドレス指定モードでは、ビット位置０〜６３の内容はアドレスを構成する。
【０１２６】
第１および第２のオペランドの長さは、同じであるか、または異なっていてよい。オペランドの末尾は、オペランドの最後のバイト位置にある終了文字によって示される。オペランドの末尾の決定に使用される終了文字は、汎用レジスタ０のビット位置５６〜６３で指定される。汎用レジスタ０のビット位置３２〜５５は、可能性のある将来の拡張のための予備であり、０を含むことになっており、そうでない場合、１つの例では、指定例外が認識される。
【０１２７】
この動作は、バイトごとに左から右に進み、終了文字がいずれかのオペランドまたは両方のオペランドに現れるか、終了文字を含んでいない等しくないバイトが比較されるか、またはＣＰＵによって決定された数のバイトが比較されるかのいずれかが最初に発生するとすぐに、終了する。ＣＰＵによって決定された数は、１つの例では、少なくとも２５６である。終了文字が、オペランドの１番目のバイト位置にあることを含めて、両方のオペランドに同時に現れた場合、それらのオペランドは、長さが同じであり、等しいと見なされ、条件コード０が設定される。終了文字が１つのオペランドのみに現れた場合、そのより短いオペランドは、低いと見なされ、条件コード１または２が設定される。第１のオペランドが低い場合、条件コード１が設定され、または第２のオペランドが低い場合、条件コード２が設定される。同様に、終了文字を含んでいない等しくないバイトが比較されたときに、より低いバイトが第１のオペランドに存在する場合、条件コード１が設定され、またはより低いバイトが第２のオペランドに存在する場合、条件コード２が設定される。ＣＰＵによって決定された数のバイトが比較されたときに、条件コード３が設定される。
【０１２８】
条件コード１または２が設定された場合、第１および第２のオペランド内の最後に処理されたバイトのアドレスが、汎用レジスタＲ１およびＲ２にそれぞれ配置される。すなわち、条件コード１が設定された場合、第１のオペランドが低く、終了文字または最初の等しくないバイトのいずれかが第１のオペランドに現れており、そのアドレスが汎用レジスタＲ１に配置され、第１のオペランドのバイトの位置に対応する第２のオペランドのバイトのアドレスが汎用レジスタＲ２に配置される。条件コード２が設定された場合、第１のオペランドが高く、終了文字または最初の等しくないバイトのいずれかが第２のオペランドに現れており、そのアドレスが汎用レジスタＲ２に配置され、第２のオペランドのバイトの位置に対応する第１のオペランドのバイトのアドレスが汎用レジスタＲ１に配置される。条件コード３が設定された場合、ＣＰＵによって決定された数のバイトが等しく、第１および第２のオペランド内の次に処理されるバイトのアドレスが、汎用レジスタＲ１およびＲ２にそれぞれ配置される。アドレスが汎用レジスタに配置されるときに常に、２４ビット・アドレス指定モードでは、レジスタのビット３２〜３９が０に設定され、または３１ビット・アドレス指定モードでは、レジスタのビット３２が０に設定される。２４ビット・モードまたは３１ビット・モードでは、Ｒ１レジスタおよびＲ２レジスタのビット０〜３１は変化しない。
【０１２９】
条件コード０が設定された場合、オペランド全体が等しく、汎用レジスタＲ１およびＲ２の内容は変化しない。
【０１３０】
条件コード３の設定をもたらす処理の量は、性能の改善に基づいてＣＰＵによって決定され、この量は、命令が実行されるたびに異なる量になってよい。
【０１３１】
第１および第２のオペランドに関して、動作において必ず調べられるオペランドの一部で、アクセス例外が認識される。
【０１３２】
論理的文字列比較命令の１つの実装は、マイクロコードを使用し、高価なマイクロコードの処理への移行およびマイクロコードの処理の終了を含む。この実装が図１６に示されている。図１６では、例えば下で説明される初期化ステップ（例えば、ステップ１０００）および完了チェック（例えば、照会１０１０）を含んでいる、命令の実装を取り囲む追加処理も示されている。
【０１３３】
図１６に示されているように、１つの実装では、終端部が初期化される（ステップ１０００）。例えば、０が現れたときに、処理されている文字列の末尾を示すように、０が終端文字として設定されてよい。次に、命令が処理を開始して、マイクロコードの処理に移行し（ステップ１００２）、ＣＬＳＴの比較ループが開始する（ステップ１００４）。このループはマイクロコード内で実行され、前述したように、文字列の各文字を比較することを含む。例えば、各文字は、左から右に比較される。文字の対が比較された後に、文字列のすべての文字が比較されたかどうか、またはＣＰＵによって決定された数の文字列の文字が比較されたかどうかに関する判定が行われる（照会１００６）。比較が継続する場合は、処理がステップ１００４を続行する。そうでない場合は、マイクロコードの処理が終了し（ステップ１００８）、命令の実行を終了する。
【０１３４】
その後、チェック・ループ（ＣＬＳＴ処理から分離している）が開始し、このチェック・ループでは、文字列のすべての文字が比較されたかどうか、または追加の文字が比較されるかどうかに関する判定が行われる（照会１０１０）。比較が継続する場合は、マイクロコードに再び移行し（ステップ１００２）、比較が続行する（ステップ１００４）。比較が完了した場合、チェック・ループが終了する（ステップ１０１２）。
【０１３５】
本発明の態様に従って、本明細書において非ループのバージョンと呼ばれるＣＬＳＴの別の実装では、前述した処理のＣＬＳＴの比較ループだけでなく、マイクロコードの移行処理および終了処理も回避される。代わりに、ＣＬＳＴの比較ループの比較が、分解されたか、または展開された一連の動作を提供することによって実行され、この一連の動作は、ループせずに（本明細書では、「同時に」と呼ばれる）、事前に定義された数のバイト（例えば、１６バイト）などの既定のデータ量まで比較する。ＣＬＳＴ処理のこの非ループのバージョンが、図１７を参照してさらに説明される。
【０１３６】
１つの例では、展開された一連の動作が、命令デコード・ユニットによって提供され（例えば、生成され）、１つまたは複数の実行ユニットによって実行される。一実施形態では、この展開は、ＣＬＳＴの比較ループに対応する直線的（すなわち、非ループ）コードにすることであり、この直線的コードは、例えば展開されたＣＬＳＴにつき１６バイトなどの、既定のデータ量（例えば、定義された数の単位）まで処理する。設計されたＣＬＳＴの定義と一致して、展開された一連の命令の実行後に、条件コードのチェックが行われ、その後、文字列のすべてのバイトが処理され、文字列の終端部が検出されるまで、ループ（例えば、チェック・ループに対応するループ）が実行されてよい。しかし、設計されたバージョンとは異なり、ＣＬＳＴの比較ループは実行されず、本発明の態様に従って、この一連の動作は、指定された境界（例えば、ページ境界またはキャッシュ・ライン境界など）を超えて読み込まない。これが、指定された境界のチェックおよびそれに関連する処理を除去することによって、処理を容易にし、システム性能を改善する。これについて、下で詳細に説明する。
【０１３７】
図１７を参照すると、一実施形態では、終端部が初期化される（ステップ１０５０）。さらに、ＣＬＳＴ命令に対応する一連の動作が、命令デコード・ユニットによって提供され、１つまたは複数の実行ユニットを介して実行されて、比較を実行する（ステップ１０５２）。この比較は、マイクロコードの処理に移行することも、マイクロコードの処理を終了することもなく、実行される。この一連の動作は、ＣＬＳＴの比較ループ内でループすることなく、既定のデータ量（例えば、事前に定義された数のバイト（例えば、１６バイト））まで比較する。例えば、１つの実装では、１６バイトを同時に比較するために、ベクトル・ユニットが使用される。既定のデータ量の例としては、文字列が定義されたバイト数（例えば、１６）未満であることを仮定した、終端文字まで（終端文字を含む）の文字列のバイト、定義されたバイト数（例えば、１６）、または指定された境界（ページ境界またはキャッシュ・ライン境界など）まで、などが挙げられる。
【０１３８】
非ループの一連の動作の実行後に、比較が完了したかどうか（すなわち、比較する必要のある、データの定義された数（例えば、１６）を超える数のバイトが存在するかどうか）に関する判定が行われる（照会１０５４）。比較が完了していない場合、チェック・ループに移行し、処理が続行する（ステップ１０５２）。比較が完了している場合、処理が終了する（ステップ１０５６）。
【０１３９】
さらに別の例では、文字列が選択された終端文字（０など）を含んでいる場合、論理的文字列比較命令の変更された非ループの実装が使用され、そうでない場合、設計されたマイクロコードの実装が使用される。これが、図１８を参照して詳細に説明される。
【０１４０】
図１８に示されているように、終端部が初期化され（ステップ１０７０）、終端部が特定の値（０など）であるかどうかに関する判定が行われる（照会１０７２）。初期化された終端部が、選択された終端部の値（例えば、０）でない場合、一実施形態では、（例えば、ＣＧＩＴを使用する内部トラップを介して）マイクロコードの実装が使用される（ステップ１０７４）。初期化された終端部が、選択された終端部の値である場合、マイクロコードに移行する／マイクロコードを終了する代わりに、一連の内部動作を使用する変更された非ループの実装が使用される。例えば、一連の動作が、デコード・ユニットを使用して提供され、１つまたは複数の実行ユニットによって実行されて、比較を実行する（ステップ１０７６）。この比較は、マイクロコードの処理に移行することなく実行される。この一連の動作は、比較ループ内でループすることなく、既定のデータ量（例えば、事前に定義された数のバイト（例えば、１６バイト））まで比較する。既定のデータ量の例としては、文字列が定義されたバイト数（例えば、１６）未満であることを仮定した、終端文字まで（終端文字を含む）の文字列のバイト、定義されたバイト数（例えば、１６）、または指定された境界（ページ境界またはキャッシュ・ライン境界など）まで、などが挙げられる。
【０１４１】
非ループの一連の動作またはマイクロコードの実行後に、比較が完了したかどうか（すなわち、比較する必要のある、データの定義された数（例えば、１６）を超える数のバイトが存在するかどうか）に関する判定が行われる（照会１０７８）。比較が完了していない場合、チェック・ループに移行し、処理が続行する（ステップ１０７２）。比較が完了している場合、処理が終了する（ステップ１０８０）。
【０１４２】
ＣＬＳＴの比較の実行に使用されてよい一連の内部動作の１つの例が、下で説明される。ＣＬＳＴ命令の非ループのバージョンが実行されるときに、デコード・ユニットが、この一連の動作を生成するか、または選択する。下の内部動作では、＜Ｒ０＞、＜Ｒ１＞、および＜Ｒ２＞が、設計されたレジスタｒ０、ｒ１、ｒ２を指しているか、またはそれらの名前が変更された物理的変形ｅＲ１、ｅＲ２が、展開されたコード・シーケンスによって使用される非ループの内部汎用レジスタ（または、それらの物理的対応部分）を指しており、ｅＶＲ１、ｅＶＲ２が、展開されたコード・シーケンスによって使用される非ループの内部ベクトル・レジスタ（または、それらの物理的対応部分）を指している。接尾辞ｍｏｄｉｆｉｅｄｃｃは、この接尾辞が付加された動作の条件コードの取り扱いが、設計されたバージョン（設計された命令に対応する、設計されたバージョン）の条件コードの処理方法とは異なるということを示している。接尾辞ｎｏｃｃは、条件コードがないことを表しており、この接尾辞が付加された動作に関しては、設計されたバージョンにおいて定義されている条件コードが、設定されない。接尾辞ｎｏｃｃ＿ｃｏｎｄは、この接尾辞に関連付けられた動作が、特定の条件の場合に実行されること、および条件コードが設定されないことを示しており、条件コードが設定されないことは、やはり、この動作に関連する設計されたバージョンの命令とは異なっている。
【０１４３】
ＣＬＳＴの一連の動作の一例が、以下で説明される。これらの動作の実施形態は、上で説明されている。
ＶＬＢＢ  ＜ｅＶＲ１＞，＜Ｒ１＞，＜境界＞
ある数のバイト（例えば、１６）を選択された境界（例えば、ページ境界またはキャッシュ・ライン境界）までｅＶＲ１に読み込む
ＶＬＢＢ  ＜ｅＶＲ２＞，＜Ｒ２＞，＜境界＞
ある数のバイト（例えば、１６）を選択された境界（例えば、ページ境界またはキャッシュ・ライン境界）までｅＶＲ２に読み込む。２つのレジスタを比較のために読み込む
ＶＦＥＮＥ＿ｍｏｄｉｆｉｅｄｃｃ  ＜ｅＶＲ２＞，＜ｅＶＲ１＞，＜ｅＶＲ２＞
終端部の条件＼（逆斜線）０を検出する
ＬＣＢＢ＿ｎｏｃｃ  ＜ｅＲ１＞，＜Ｒ１＞，＜境界＞
ＶＬＢＢによって読み込まれた第１のオペランドのバイトの数を計算する
ＬＣＢＢ＿ｎｏｃｃ  ＜ｅＲ２＞，＜Ｒ２＞，＜境界＞
ＶＬＢＢによって読み込まれた第２のオペランドのバイトの数を計算する
ＭＩＮ＿ｎｏｃｃ  ＜ｅＲ１＞，＜ｅＲ２＞
読み込まれたオペランドのバイトの最小カウントを決定する
ＭＩＮ＿ｃｌｓｔｃｃ  ＜ｅＲ１＞，＜ｅＶＲ２＞
読み込まれたオペランドのバイトの最小カウントおよび不一致または終端部を決定し、不一致も終端部も検出されない場合、条件コードを３に設定する
Ａ＿ｎｏｃｃ  ＜Ｒ１＞，＜ｅＲ１＞
処理されたバイト（ｅＲ１）の数を、レジスタＲ１に加算する
Ａ＿ｎｏｃｃ＿ｃｏｎｄ  ＜Ｒ２＞，＜ｅＲ１＞
【０１４４】
ｃｃフラグの値が１、２、または３である場合、処理されたバイト（ｅＲ１）の数を、レジスタＲ２に加算する。この命令は、条件コードが１、２、または３である場合に、第２のオペランドのレジスタを第１のオペランドのレジスタに加算する（例えば、予測された命令を使用すること、一時的レジスタへの無条件の加算の条件付き移動など、その他の実施形態および条件コードの処理が可能である）。
【０１４５】
本発明のこの態様では、非ループのＣＬＳＴの場合、設計されたＶＦＥＮＥ命令が変更され、この変更された命令において、次の条件コードが設定される。０  −  オペランド全体が等しく、レジスタｅＶＲ１およびｅＶＲ２は変化しない。１  −  第１のオペランドが低く、汎用レジスタｅＶＲ１およびｅＶＲ２が、処理された最後のバイトのアドレスで更新される。２  −  第１のオペランドが高く、汎用レジスタｅＶＲ１およびｅＶＲ２が、処理された最後のバイトのアドレスで更新される。
【０１４６】
さらに、ＭＩＮ＿ｃｌｓｔｃｃは、２つの入力オペランドのうちの小さいほうを選択する、変更された最小値命令である。ＭＩＮ＿ｃｌｓｔｃｃは、第１の入力オペランドが第２のオペランドより小さい場合、条件コードを変更せず、第２のオペランドが小さい場合、条件コードを３に設定する。
【０１４７】
別の実施形態では、最小値命令が一連の命令に置き換えられる。さらに別の実施形態では、＜ｅＲ１＞、＜ｅＲ２＞、および＜ｅＶＲ２＞のうちの最小値を計算し、第３のオペランド＜ｅＶＲ２＞が選択された場合に条件コードを３に設定する、単一の最小値命令が提供される。その他の変形が可能である。
【０１４８】
１つまたは複数の他の実施形態では、異なる内部動作が使用されてよく、または内部動作の順序が変更されてよく、あるいはその両方を行ってもよい。１つまたは複数の実施形態では、複数の内部動作が結合されてよく、例えば、境界までの読み込みカウント動作およびその後の最小値動作が、単一の内部動作として実装されてよい。その他の可能性が存在する。
【０１４９】
例えば、非ループの一連の動作のうちの動作が、それらに対応する設計された命令とは異なるオペコードを含んでよく、または同じオペコードを含んでよいが、非ループのバージョンが処理されることを示すフラグが設定される。その他の例も可能である。
【０１５０】
本明細書に記載されているように、一実施形態では、高コストのマイクロコードの開始または終了あるいはその両方を回避する論理的文字列比較命令の実装が提供され、二重ループに関連するコストを削減し、１つの例では、高性能の文字列のＳＩＭＤ機能を利用する。この実装は、非ループ構成の一連の動作を使用して、設計されたＣＬＳＴ命令の比較ループ動作を実行する。１つの例では、この実装は、多くの適用空間において頻度が高い短い文字列に対して、特に効率的である。
【０１５１】
上記の命令（すなわち、ＭＶＳＴおよびＣＬＳＴ）およびその他の文字列命令のそれぞれの１つまたは複数の実装では、終端文字が０である。しかし、１つまたは複数の他の実施形態では、任意の終端文字が使用されてよい。この文字は、０または任意のその他の定義された文字を含む、任意の選択された文字であってよい。任意の文字の使用をサポートするために、終端文字がベクトル・ユニット（または別の実施形態では、その他のユニット）に転送され、複製されてよい。
【０１５２】
例えば、図１９に示されているように、一実施形態では、終端部が選択された値に初期化され（ステップ１１００）、ベクトル・ユニットに転送されて複製される（ステップ１１０２）。１つの例では、レジスタＲ０内の終端文字を、例えばｅＶＲ０のすべての位置に複製するために、ベクトル複製命令（例えば、ＶＲＥＰ  ＜ｅＶＲ０＞，＜Ｒ０＞）が使用される。次に、この複製された終端文字が、ＭＶＳＴ、ＣＬＳＴ、またはその他の文字列命令、あるいはその組み合わせの非ループ構成のバージョンによって使用されてよい。
【０１５３】
一例として、一連の内部動作が、命令デコード・ユニットによって提供され（例えば、生成され）、１つまたは複数の実行ユニットによって実行され、適切な動作（例えば、ＭＶＳＴのコピー、ＣＬＳＴの比較など）を実行する（ステップ１１０４）。この動作は、マイクロコードの処理に移行することも、マイクロコードの処理を終了することもなく、実行される。この内部動作は、前述したように、コピー／比較ループを実行せずに、指定された動作を既定の量までのデータ（例えば、事前に定義された数のバイト（例えば、１６バイト））に対して実行する。一連の動作の実行後に、動作が完了したかどうか（すなわち、処理する必要のある、既定の量（例えば、１６バイト）を超えるデータが存在するかどうか）に関する判定が行われる（照会１１０６）。動作が完了していない場合、チェック・ループ処理に移行し、動作が続行する（ステップ１１０２）。動作が完了している場合、処理が終了する（ステップ１１０８）。
【０１５４】
一連の動作に初期複製動作を加えた１つの例は、以下を含む。
ＶＲＥＰ  ＜ｅＶＲ０＞，＜Ｒ０＞
ＶＬＢＢ  ＜ｅＶＲ１＞，＜Ｒ１＞，＜境界＞
ＶＦＥＥ＿ｍｏｄｉｆｉｅｄｃｃ  ＜ｅＶＲ２＞，＜ｅＶＲ１＞，＜ｅＶＲ０＞
ＬＣＢＢ＿ｎｏｃｃ  ＜ｅＲ１＞，＜Ｒ１＞，＜境界＞
ＭＩＮ＿ｎｏｃｃ  ＜ｅＲ２＞，＜ｅＲ１＞，＜ｅＶＲ２＞
ＶＳＴＬ＿ｎｏｃｃ  ＜ｅＶＲ１＞，＜Ｒ２＞，Ｌ＝＜ｅＲ２＞
Ａ＿ｎｏｃｃ  ＜Ｒ１＞，＜ｅＲ２＞
Ａ＿ｎｏｃｃ＿ｃｏｎｄ  ＜Ｒ２＞，＜ｅＲ２＞
【０１５５】
ＶＦＥＥを除く各動作は前述されており、ＶＦＥＥが以下で説明される。
【０１５６】
１つの例では、図１２を参照すると、ベクトル同一要素検出（ＶＦＥＥ）命令６５０は、ベクトル同一要素検出動作を示すオペコード・フィールド６５２ａ（例えば、ビット０〜７）、６５２ｂ（例えば、ビット４０〜４７）、第１のベクトル・レジスタ（Ｖ１）を指定するために使用される第１のベクトル・レジスタ・フィールド６５４（例えば、ビット８〜１１）、第２のベクトル・レジスタ（Ｖ２）を指定するために使用される第２のベクトル・レジスタ・フィールド６５６（例えば、ビット１２〜１５）、第３のベクトル・レジスタ（Ｖ３）を指定するために使用される第３のベクトル・レジスタ・フィールド６５８（例えば、ビット１６〜１９）、第１のマスク・フィールド（Ｍ５）６６０（例えば、ビット２４〜２７）、第２のマスク・フィールド（Ｍ４）６６２（例えば、ビット３２〜３５）、およびＲＸＢフィールド６６４（例えば、ビット３６〜３９）を含む。各フィールド６５４〜６６４は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド６５４〜６６４は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。これらのフィールドの使用に関する詳細が、以下で説明される。
【０１５７】
例えば４つのビット０〜３を含んでいるＭ４フィールドは、例えばビット１〜３で、要素サイズ制御を指定する。要素サイズ制御は、ベクトル・レジスタのオペランド内の要素のサイズを指定する。１つの例では、要素サイズ制御は、バイト、ハーフワード（例えば、２バイト）、またはワード（例えば、４バイト）を指定できる。例えば、０はバイトを示し、１はハーフワードを示し、２はワード（フルワードとも呼ばれる）を示す。予備の値が指定された場合、指定例外が認識される。
【０１５８】
Ｍ５フィールドは、例えば４ビットのフィールド（ビット０〜３）であり、例えば次を含む。
ゼロ検索フィールド（ＺＳ、ビット２）。このフィールドが１である場合、第２のオペランドの各要素が、０と等しいことに関しても、比較される（さらに別の例では、０と比較されるのは、第３のオペランドまたは別のオペランドの各要素である）。および、
条件コード設定フィールド（ＣＳ、ビット３）。このフィールドが０である場合、条件コードが設定されず、変化しない。このフィールドが１である場合、条件コードが、一例として、以下で指定されているように設定される。
０  −  ゼロ検索ビットが１である場合、第２のオペランド内の、０の内容を含む要素より小さいインデックスを持つ要素に、等しい比較が存在しなかった。
１  −  比較が、ある要素で、第２のオペランドと第３のオペランドの間の一致を検出した。ＺＳビットが１である場合、第２のオペランドには０の比較が存在しなかった。
２  −  ＺＳビットが１である場合、第２のオペランドと第３のオペランドの間に、第２のオペランド内の０との一致より低いインデックスを持つ一致が存在した。
３  −  等しい要素が比較されなかった。さらに、ＺＳビットが１である場合、０を含んでいる要素がなかった。
【０１５９】
設計されたベクトル同一要素検出命令の一実施形態の実行において、一実施形態では左から右に進んで、第２のオペランド（Ｖ２およびその拡張ビットによって指定されたベクトル・レジスタに含まれている）の要素が、第３のオペランド（Ｖ３フィールドおよびその拡張ビットによって指定されたベクトル・レジスタに含まれている）の対応する要素と比較され、任意選択的に０と比較される。２つの要素が等しい場合、最も左の等しい要素の１番目のバイトのバイト・インデックスが、第１のオペランド（Ｖ１およびその拡張ビットによって指定されたレジスタで指定される）の指定されたバイト（例えば、バイト７）に配置され、０が、第１のオペランドの残りのバイトに格納される。等しいバイトが検出されない場合、またはゼロ検索（ＺＳ：zero search）ビットが１であるときに、０に等しいバイトが検出されない場合、ベクトル内のバイトの数に等しいインデックスが、第１のオペランドのバイト７に格納される。０が、残りのバイトに格納される。
【０１６０】
１つの例では、返される（例えば、指定されたバイトに格納される）要素のバイト・インデックスは、等しい最も左の要素の１番目のバイトのインデックスである。例えば、要素のサイズがバイトである場合、最も左の等しい要素のインデックスが返される（例えば、１６個の要素（０〜１５）が存在し、要素６が等しい場合、バイト・インデックス６が返される）。同様に、要素のサイズがハーフワードであり、８つの要素（０〜７）が存在し、要素３のバイト６または７のいずれかが等しい場合、バイト・インデックス６が返される。同様に、要素のサイズがフルワードであり、４つの要素（０〜３）が存在し、要素１のバイト４〜７のうちの１つが等しい場合、バイト・インデックス４が返される。
【０１６１】
Ｍ５フィールド内のゼロ検索ビットが設定されている場合、第２のオペランド（または他の実施形態では、第３のオペランドまたは別のオペランド）内の各要素が、０（ヌルの終端部、文字列の末尾などとも呼ばれる）と等しいことに関しても、比較される。第２のオペランドおよび第３のオペランドのいずれかの他の要素が等しいということが検出される前に、第２のオペランド内で０の要素が検出された場合、０であることが検出された要素の１番目のバイトのバイト・インデックスが、（例えば、設計されたバージョンのＶ１内の）第１のオペランドの指定されたバイト（例えば、バイト７）に格納される。０が、他のすべてのバイトに格納され、条件コード設定フラグが１である場合、選択された条件コード（例えば、条件コード０）が設定される。
【０１６２】
一実施形態では、要素の比較が並列に実行される。例えば、比較されているレジスタの長さが１６バイトである場合、１６バイトが並列に比較される。他の実施形態では、データの単位がバイト以外であってよく、並列な比較の数が、単位のサイズに対応する。さらに、別の実施形態では、ベクトルの方向（左から右へ、または右から左へ）が実行時に提供される。例えば、命令は、処理の方向を左から右へ、または右から左へのいずれかとして示す、例えばレジスタ、状態制御、またはその他の実体にアクセスする。一実施形態では、この方向制御は、命令の一部としてエンコードされず、実行時に命令に提供される。
【０１６３】
さらに別の実施形態では、命令がＲＸＢフィールドを含まない。代わりに、拡張が使用されないか、または拡張が、命令の外部の制御からなど、別の方法で提供されるか、あるいは命令の別のフィールドの一部として提供される。
【０１６４】
本発明の態様に従って、非ループの命令に使用される、設計されたＶＦＥＥ命令のバージョンは、ＶＦＥＥ＿ｍｏｄｉｆｉｅｄｃｃと呼ばれる変更されたバージョンであり、このバージョンでは、条件コード（ｃｃ）の挙動が変更される。変更されたバージョンでは、ＲＸＢ、Ｍ４、およびＭ５が提供されず、終端文字（例えば、＼（逆斜線）０）が現れた場合、ｃｃが１に設定され、そうでない場合、ｃｃが３に設定される。
【０１６５】
さらに別の実施形態では、図２０を参照すると、ｅＶＲ０を設定する待ち時間が回避される。代わりに、最新の終端部の値が、選択された位置（例えば、ベクトル・レジスタなどのレジスタ）にキャッシュされる。最初に、終端部が初期化され（ステップ１１１０）、キャッシュされたベクトルの終端部が初期化された終端部に一致するかどうかに関する判定が行われる（照会１１１２）。終端部が一致しない場合、前述したように、終端文字がベクトル・ユニットに転送されて、複製される（ステップ１１１４）。１つの例では、ベクトルをスカラーと比較する命令が、終端文字を比較し、必要に応じてＶＲＥＰ命令に分岐して終端部を複製するために使用される（例えば、ＣＶＳＪ  ＜Ｒ０＞，＜ｅＶＲ０＞，ＥＱ，ｃａｃｈｅｄ＿ｏｋは、ベクトルをスカラーと比較して複製し、ベクトル・レジスタが、指定された複製されたスカラーである場合、そのベクトル・レジスタの初期化をジャンプ（スキップ）する。ｃａｃｈｅｄ＿ｏｋは、一連の動作においてＶＬＢＢにある）。その後、またはキャッシュされたベクトルの終端部が一致する場合、処理は、前述したように、設計されたバージョンのコピー・ループ／比較ループを実行せず、選択された動作（例えば、コピー、比較、またはその他の動作）を実行するために使用される一連の内部動作を継続する（ステップ１１１６）。コピー／比較（またはその他の）動作が完了したかどうかに関する判定が行われる（照会１１１８）。完了した場合、処理が終了し（ステップ１１１９）、完了していない場合、チェック・ループ処理に移行して、処理が照会１１１２を継続する。
【０１６６】
さらに別の実施形態では、図２１を参照すると、終端部が初期化され（ステップ１１２０）、キャッシュされたベクトルの終端部が初期化された終端部に一致するかどうかに関する判定が行われる（照会１１２２）。一致しない場合、マイクロコードが、コピー動作または比較動作（またはその他の動作）を実行するために使用される（ステップ１１２４）。しかし、キャッシュされたベクトルの終端部が初期化された終端部に一致する場合、一連の内部動作が、前述したように、設計されたバージョンのコピー・ループ／比較ループを実行せず、選択された動作（例えば、コピー、比較、またはその他の動作）を実行するために使用される（ステップ１１２６）。
【０１６７】
一連の動作またはマイクロコードの実行後に、コピー／比較（またはその他の）動作が完了したかどうかに関する判定が行われる（照会１１２８）。完了した場合、処理が終了し（ステップ１１３０）、完了していない場合、チェック・ループ処理に移行して、処理が照会１１２２を継続する。
【０１６８】
さらに別の実施形態では、図２２を参照すると、終端部が初期化され（ステップ１１４０）、キャッシュされた終端部が初期化された終端部に等しいかどうかに関する判定が行われる（照会１１４２）。このテストは、ステップ１１４８の内部動作に対して並列に、または不規則な順序で、あるいはその両方で実行されてよい。キャッシュされた終端部が正しくない場合、ステップ１１４８に対応するデコードされた内部動作シーケンスが、マイクロプロセッサのパイプラインからフラッシュされ、文字列命令（例えば、ＭＶＳＴ、ＣＬＳＴ、またはその他の命令）が、マイクロコードに転送するシーケンスに再デコードされ（ステップ１１４４）、マイクロコードを使用して命令（例えば、ＭＶＳＴ、ＣＬＳＴ、またはその他の命令）が実行される（ステップ１１４６）。しかし、キャッシュされた終端文字が正しい場合、一連の内部動作が、前述したように、設計されたバージョンのコピー・ループ／比較ループを実行せず、選択された動作（例えば、コピー、比較、またはその他の動作）を実行するために使用される（ステップ１１４８）。その後、またはマイクロコードの処理の後に、選択された動作が完了したかどうかに関する判定が行われる（照会１１５０）。完了した場合、処理が終了し（ステップ１１５２）、完了していない場合、チェック・ループ処理に移行して、処理が照会１１４２を継続する。
【０１６９】
さらに別の実施形態では、図２３を参照すると、投機的デコードが実行される。最初に、終端部が初期化され（ステップ１１６０）、キャッシュされたバージョンの終端部が初期化された終端部と同じかどうかに関する判定が行われる（照会１１６２）。このテストは、ステップ１１６８の内部動作に対して並列に、または不規則な順序で、あるいはその両方で実行されてよい。キャッシュされたバージョンが正しくない場合、ステップ１１６８に対応するデコードされた内部動作シーケンスがフラッシュされ、文字列命令（例えば、ＭＶＳＴ、ＣＬＳＴ、またはその他の命令）が、例示的なレジスタ（例えば、ｅＶＲ０）内のキャッシュされた終端部を更新する代替の形態で再デコードされる（ステップ１１６４）。終端部をキャッシュするために使用されるレジスタまたはその他の位置の終端文字が、汎用レジスタ０の値に再び初期化される（ステップ１１６６）。１つの例では、終端文字を複製するために、ＶＲＥＰ命令が使用される。終端部を再び初期化した後、または投機的にデコードされてキャッシュされたバージョンが正しい場合、一連の内部動作が、選択された動作（例えば、コピー、比較、またはその他の動作）を実行するために使用される（ステップ１１６８）。その後、選択された動作が完了したかどうかに関する判定が行われる（照会１１７０）。完了した場合、処理が終了し（ステップ１１７２）、完了していない場合、チェック・ループ処理に移行して、処理が照会１１６２を継続する。
【０１７０】
上記に加えて、内部動作のインライン展開が、ポインタで終端された文字検索（pointer terminated character searches）を含むが、これに限定されない、その他の動作の実装に使用されてよい。例えば、文字列検索（ＳＲＳＴ）命令が、指定された文字（検索文字と呼ばれる）を検索ループ（前述したコピー・ループ／比較ループに類似する）内で検索するために使用される。本発明の態様に従って、この命令（および同様の命令）は、高コストのマイクロコードの使用が回避され、二重ループに関連するコストが削減されるように、マイクロコードへの移行／マイクロコードの終了を伴わずに、非ループ構成で検索を実行するために、一連の動作を使用して実装される。本発明の１つまたは複数の態様は、高性能の文字列のＳＩＭＤ機能を利用する。
【０１７１】
ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ（Ｒ）に従って定義された文字列検索命令の１つの例が、図２４を参照して説明される。１つの例では、設計された文字列検索命令１２００は、文字列検索動作を指定するオペレーション・コード（オペコード）を含んでいるオペレーション・コード・フィールド１２０２（例えば、ビット０〜１５）、第１のレジスタ・フィールド（Ｒ１）１２０４（例えば、ビット２４〜２７）、および第２のレジスタ・フィールド（Ｒ２）１２０６（例えば、ビット２８〜３１）を含んでいる。一実施形態では、この命令のフィールドは、別々であり、互いに独立している。しかし、別の実施形態では、２つ以上のフィールドが結合されてよい。さらに、命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、下付きの１を有するすべてのフィールドは第１のオペランドに関連付けられ、下付きの２を有するすべてのフィールドは第２のオペランドに関連付けられる。
【０１７２】
設計された文字列検索命令の動作では、指定された文字が検出されるか、Ｒ１によって指定された第２のオペランドの末尾に達するか、またはＣＰＵによって決定された数のバイトが検索されるかのいずれかが最初に発生するまで、第２のオペランドが検索される。ＣＰＵによって決定された数は、例えば、少なくとも２５６である。結果は、条件コードで示される。
【０１７３】
第２のオペランドの第１のバイトの位置は、汎用レジスタＲ２の内容によって指定される。第２のオペランドの後の第１のバイトの位置は、汎用レジスタＲ１の内容によって指定される。
【０１７４】
汎用レジスタＲ１およびＲ２内のアドレスの処理は、アドレス指定モードによって決まる。２４ビット・アドレス指定モードでは、汎用レジスタＲ１およびＲ２のビット位置４０〜６３の内容はアドレスを構成し、ビット位置０〜３９の内容は無視される。３１ビット・アドレス指定モードでは、レジスタのビット位置３３〜６３の内容はアドレスを構成し、ビット位置０〜３２の内容は無視される。６４ビット・アドレス指定モードでは、ビット位置０〜６３の内容はアドレスを構成する。
【０１７５】
アクセス・レジスタ・モードでは、第２のオペランドを含んでいるアドレス空間が、アクセス・レジスタＲ２を用いて指定される。アクセス・レジスタＲ１の内容は無視される。
【０１７６】
検索の対象になる文字は、例えば、汎用レジスタ０のビット位置５６〜６３で指定される。１つの例では、汎用レジスタ０のビット位置３２〜５５は、可能性のある将来の拡張のための予備であり、０を含むことになっており、そうでない場合、指定例外が認識される。
【０１７７】
この動作は、例えば右から左に進み、指定された文字が第２のオペランド内で検出されたか、次に調べられる第２のオペランドのバイトのアドレスが、汎用レジスタＲ１内のアドレスに等しいか、またはＣＰＵによって決定された数の第２のオペランドのバイトが調べられたかのいずれかが最初に発生するとすぐに、終了する。ＣＰＵによって決定された数は、例えば、少なくとも２５６である。指定された文字が検出された場合、条件コード１が設定される。次に調べられる第２のオペランドのバイトのアドレスが、汎用レジスタＲ１内のアドレスに等しい場合、条件コード２が設定される。ＣＰＵによって決定された数の第２のオペランドのバイトが調べられた場合、条件コード３が設定される。ＣＰＵによって決定された数の第２のオペランドのバイトが調べられ、次の第２のオペランドのバイトのアドレスが汎用レジスタＲ１内に存在する場合、条件コード２または３のいずれが設定されるかは、予測不可能である。
【０１７８】
条件コード１が設定された場合、第２のオペランド内で検出された指定された文字のアドレスが汎用レジスタＲ１に配置され、汎用レジスタＲ２の内容は変化しない。条件コード３が設定された場合、第２のオペランド内の次に処理されるバイトのアドレスが汎用レジスタＲ２に配置され、汎用レジスタＲ１の内容は変化しない。条件コード２が設定された場合、汎用レジスタＲ１およびＲ２の内容は変化しない。アドレスが汎用レジスタに配置されるときに常に、２４ビット・アドレス指定モードでは、レジスタのビット３２〜３９が０に設定され、または３１ビット・アドレス指定モードでは、レジスタのビット３２が０に設定される。２４ビット・モードまたは３１ビット・モードでは、Ｒ１レジスタおよびＲ２レジスタのビット０〜３１は変化しない。
【０１７９】
汎用レジスタＲ１内のアドレスが汎用レジスタＲ２内のアドレスに等しい場合、条件コード２が直ちに設定され、アクセス例外が認識されない。オペランドがストレージの最上位から位置０に戻る場合、汎用レジスタＲ１内のアドレスが汎用レジスタＲ２内のアドレスより小さいときに、条件コード２が設定されることがある。
【０１８０】
条件コード３の設定をもたらす処理の量は、システム性能の改善に基づいてＣＰＵによって決定され、この量は、命令が実行されるたびに異なる量になってよい。
【０１８１】
第２のオペランドに関して、必ず調べられるオペランドの一部のみで、アクセス例外が認識される。
【０１８２】
本発明の態様に従って、１つの実装では、図２５に示されているように、マイクロコードおよび検索ループの代わりに、一連の非ループの動作が使用される。
【０１８３】
例えば、図２５に示されているように、一実施形態では、検索文字が選択された値に初期化され（ステップ１３００）、ベクトル・ユニットに転送されて複製される（ステップ１３０２）。１つの例では、レジスタＲ０内の検索文字を、例えばｅＶＲ０のすべての位置に複製するために、ベクトル複製命令（例えば、ＶＲＥＰ  ＜ｅＶＲ０＞，＜Ｒ０＞）が使用される。次に、この複製された検索文字が、ＳＲＳＴまたはその他の文字列命令あるいはその両方の非ループ構成のバージョンによって使用されてよい。
【０１８４】
一連の内部動作が、命令デコード・ユニットによって提供され（例えば、生成され）、１つまたは複数の実行ユニットによって実行され、適切な動作（例えば、ＳＲＳＴの検索など）を実行する（ステップ１３０４）。この動作は、マイクロコードの処理に移行することも、マイクロコードの処理を終了することもなく、実行される。この内部動作は、本明細書で説明されているように、検索ループを実行せずに、指定された動作を既定の量までのデータ（例えば、事前に定義された数のバイト（例えば、１６バイト））に対して実行する。一連の動作の実行後に、動作が完了したかどうか（すなわち、処理する必要のある、既定の量（例えば、１６バイト）を超えるデータが存在するかどうか）に関する判定が行われる（照会１３０６）。動作が完了していない場合、チェック・ループ処理に移行し、動作が続行する（ステップ１３０２）。動作が完了している場合、処理が終了する（ステップ１３０８）。
【０１８５】
ＳＲＳＴを実行するための一連の動作に初期複製動作を加えた１つの例は、以下を含む。
ＶＲＥＰ  ＜ｅＶＲ１＞，＜Ｒ０＞
検索される文字
＋−ＶＬＢＢ  ＜ｅＶＲ２＞，＜Ｒ２＞，＜境界＞
ある数のバイト（例えば、１６）を選択された境界（例えば、ページ境界またはキャッシュ・ライン境界）までｅＶＲ２に読み込む
ＶＦＥＥ＿ｍｏｄｉｆｉｅｄｃｃ  ＜ｅＶＲ１＞，＜ｅＶＲ１＞，＜ｅＶＲ２＞
検索文字を検索する
ＬＣＢＢ＿ｎｏｃｃ  ＜ｅＲ２＞，＜Ｒ２＞，＜境界＞
ＶＬＢＢによって読み込まれたバイトの数を計算する
ＭＩＮ＿ｎｏｃｃ  ＜ｅＲ１＞，＜ｅＲ２＞，＜ｅＶＲ１＞
読み込まれたバイト（ｅＲ１）または検索の終端文字の位置（ｅＶＲ１）のうちの最小値を決定し、バイトの総数（ｅＲ１）を決定する
Ａ＿ｎｏｃｃ  ＜ｅＲ１＞，＜Ｒ２＞，＜ｅＲ１＞
処理されたバイトの数を、＜Ｒ２＞に加算する
ＵＰＤＡＴＥ＿ｓｒｓｔｃｃ  ＜Ｒ２＞，＜ｅＲ１＞，＜Ｒ１＞
＜ｅＲ１＞が＜Ｒ１＞より小さい場合、＜ｅＲ１＞の値で＜Ｒ２＞を更新し、そうでない場合、条件コードを２に設定する
【０１８６】
さらに別の実施形態では、図２６を参照すると、ｅＶＲ０を設定する待ち時間が回避される。代わりに、最新の検索文字の値が、選択された位置（例えば、ベクトル・レジスタなどのレジスタ）にキャッシュされる。最初に、検索文字が初期化され（ステップ１３１０）、キャッシュされたベクトルの検索文字が初期化された検索文字に一致するかどうかに関する判定が行われる（照会１３１２）。検索文字が一致しない場合、前述したように、検索文字がベクトル・ユニットに転送されて、複製される（ステップ１３１４）。１つの例では、ベクトルをスカラーと比較する命令が、検索文字を比較し、必要に応じてＶＲＥＰ命令に分岐して検索文字を複製するために使用される（例えば、ＣＶＳＪ  ＜Ｒ０＞，＜ｅＶＲ０＞，ＥＱ，ｃａｃｈｅｄ＿ｏｋは、ベクトルをスカラーと比較して複製し、ベクトル・レジスタが、指定された複製されたスカラーである場合、そのベクトル・レジスタの初期化をジャンプ（スキップ）する。ｃａｃｈｅｄ＿ｏｋは、一連の動作においてＶＬＢＢにある）。その後、またはキャッシュされたベクトルの検索文字が一致する場合、処理は、前述したように、設計されたバージョンの検索ループを実行せず、選択された動作（例えば、検索またはその他の動作）を実行するために使用される一連の内部動作を継続する（ステップ１３１６）。検索（またはその他の）動作が完了したかどうかに関する判定が行われる（照会１３１８）。完了した場合、処理が終了し（ステップ１３１９）、完了していない場合、チェック・ループ処理に移行して、処理が照会１３１２を継続する。
【０１８７】
さらに別の実施形態では、図２７を参照すると、検索文字が初期化され（ステップ１３２０）、キャッシュされたベクトルの検索文字が初期化された検索文字に一致するかどうかに関する判定が行われる（照会１３２２）。一致しない場合、マイクロコードが、検索動作（またはその他の動作）を実行するために使用される（ステップ１３２４）。しかし、キャッシュされたベクトルの検索文字が初期化された検索文字に一致する場合、一連の内部動作が、前述したように、設計されたバージョンの検索ループを実行せず、選択された動作（例えば、検索またはその他の動作）を実行するために使用される（ステップ１３２６）。
【０１８８】
一連の動作またはマイクロコードの実行後に、検索（またはその他の）動作が完了したかどうかに関する判定が行われる（照会１３２８）。完了した場合、処理が終了し（ステップ１３３０）、完了していない場合、チェック・ループ処理に移行して、処理が照会１３２２を継続する。
【０１８９】
さらに別の実施形態では、図２８を参照すると、検索文字が初期化され（ステップ１３４０）、キャッシュされた検索文字が初期化された検索文字に等しいかどうかに関する判定が行われる（照会１３４２）。このテストは、ステップ１３４８の内部動作に対して並列に、または不規則な順序で、あるいはその両方で実行されてよい。キャッシュされた検索文字が正しくない場合、ステップ１３４８に対応するデコードの内部動作シーケンスが、マイクロプロセッサのパイプラインからフラッシュされ、文字列命令（例えば、ＳＲＳＴまたはその他の命令）が、マイクロコードに転送するシーケンスに再デコードされ（ステップ１３４４）、マイクロコードを使用して命令（例えば、ＳＲＳＴまたはその他の命令）が実行される（ステップ１３４６）。しかし、キャッシュされた検索文字が正しい場合、一連の内部動作が、前述したように、設計されたバージョンの検索ループを実行せず、選択された動作（例えば、検索またはその他の動作）を実行するために使用される（ステップ１３４８）。その後、またはマイクロコードの処理の後に、選択された動作が完了したかどうかに関する判定が行われる（照会１３５０）。完了した場合、処理が終了し（ステップ１３５２）、完了していない場合、チェック・ループ処理に移行して、処理が照会１３４２を継続する。
【０１９０】
さらに別の実施形態では、図２９を参照すると、投機的デコードが実行される。最初に、検索文字が初期化され（ステップ１３６０）、キャッシュされたバージョンの検索文字が初期化された検索文字と同じかどうかに関する判定が行われる（照会１３６２）。このテストは、ステップ１３６８の内部動作に対して並列に、または不規則な順序で、あるいはその両方で実行されてよい。キャッシュされたバージョンが正しくない場合、ステップ１３６８に対応するデコードの内部動作シーケンスがフラッシュされ、文字列命令（例えば、ＳＲＳＴまたはその他の命令）が、例示的なレジスタ（例えば、ｅＶＲ０）内のキャッシュされた検索文字を更新する代替の形態で再デコードされる（ステップ１３６４）。検索文字をキャッシュするために使用されるレジスタまたはその他の位置の検索文字が、汎用レジスタ０の値に再び初期化される（ステップ１３６６）。１つの例では、検索文字を複製するために、ＶＲＥＰ命令が使用される。検索文字を再び初期化した後、または投機的にデコードされてキャッシュされたバージョンが正しい場合、一連の内部動作が、選択された動作（例えば、検索またはその他の動作）を実行するために使用される（ステップ１３６８）。その後、選択された動作が完了したかどうかに関する判定が行われる（照会１３７０）。完了した場合、処理が終了し（ステップ１３７２）、完了していない場合、チェック・ループ処理に移行して、処理が照会１３６２を継続する。
【０１９１】
別の実施形態では、選択された文字に関するテストおよび投機的回復（例えば、フラッシュおよび再デコード）を実行する代わりに、ＳＲＳＴ命令の最後の発行以来、Ｒ０が変更されたかどうかを指定するインジケータが提供される。その他の実施形態も可能である。
【０１９２】
さらに、この実施形態に従って、キャッシュされた文字が選択された文字に対応しなくなるように、汎用レジスタ０が変更された場合に、インジケータが更新される。別の実施形態では、汎用レジスタ０が更新された場合、キャッシュされたバージョンの選択された文字が汎用レジスタ０に対応するかどうかを示すために、汎用レジスタ０の更新された値の比較が実行される。これらの態様はＳＲＳＴを参照して説明されたが、これらの態様は、例えば、可能性のある終端文字の管理に関するＭＶＳＴ命令およびＣＬＳＴ命令を含むが、これらに限定されない、その他の命令と共に実践されてもよい。
【０１９３】
さまざまな実施形態が上で説明されたが、本発明の範囲を逸脱することなく変更が行われてよい。例えば、条件コードが特定の値に設定されているが、他の実施形態では、それらの条件コードは他の値に設定されてよい。その他の変形も可能である。
【０１９４】
さらに、前述した命令において、ＣＰＵによって決定された量として実行される処理の量は、システム性能を改善することに基づいて、ＣＰＵによって決定された。一実施形態では、この量は、例えば、処理を並列に実行できるベクトル・レジスタなどのレジスタの長さに対応する、動作中に効率的に操作できるバイトの数である。別の実施形態では、この量は、ループなしで効率的に操作できるバイトの数である。その他の例も存在する。
【０１９５】
別の実施形態では、ベクトル・ユニット以外の別のプロセッシング・ユニットが、本発明の態様に従って一連の動作を実装するために使用される。
【０１９６】
上では、一連の非ループの動作を使用して、マイクロコードなしで実装できる設計された命令の例が説明された。例えば、設計されたループ命令は、変更された定義において、コピー／比較／検索ループを除去し、終端チェック（例えば、終端文字）を主要なループ構造（チェック・ループ）として使用して、非ループ・シーケンスに展開される。さまざまな例において、複製された終端文字もしくは検索文字がベクトル・レジスタに格納されるか、または複製された終端文字もしくは検索文字が、命令の複数回の呼び出しにわたって、隠された（アーキテクチャ的に見えない）ベクトル・レジスタに格納されるか、あるいはその両方が行われる。さらに、一例として、テストは投機的テストであってよく、展開されたシーケンスは、推測された終端文字または検索文字を検証することをさらに含む。テストは、例えば、不規則な順序での実行によって、または個別の並列なデータ経路によって、処理に対して並列に実行されてよい。さらに、回復が順序正しいチェックポイントへのフラッシュを含んでいる別の例では、回復が、展開された動作シーケンスまたはマイクロコードのいずれかにおいて実行されてよい。さらに別の例では、隠されたベクトル・レジスタがＲ０の複製されたコピーにすでに設定されているときに、設計されたレジスタＲ０が命令（例えば、ＭＶＳＴ、ＣＬＳＴ、ＳＲＳＴ）の最後の呼び出し以来変更されたかどうかを判定するためのインジケータをテストすることによって、終端文字またはテストする文字が検証される。多くのその他の変形が可能である。
【０１９７】
本発明の１つまたは複数の態様は、コンピュータ技術に密接に関係しており、コンピュータ内の処理を容易にし、その性能を改善する。コンピューティング環境内の処理が、本発明の１つまたは複数の態様に関連しているとき、それらを容易にする一実施形態の詳細が、図３０〜３１を参照してさらに説明される。
【０１９８】
図３０を参照すると、最初に、デコードされる命令が取得される（１４００）。この命令は、文字列比較動作を実行するためである（１４０２）。この命令がデコードされ（１４０４）、このデコードすることが、文字列比較動作を実行するための一連の動作を提供する（１４０６）。この一連の動作は、メモリの指定された境界までデータの第１セットを読み込むための第１の境界までの読み込み動作およびデータの第２セットを読み込むための第２の境界までの読み込み動作を含み（１４０８）、データの第１セットおよびデータの第２セットが、文字列比較動作の一部として読み込まれる（１４１０）。
【０１９９】
この一連の動作は、文字列比較動作を実行するための複数の動作を含み、データの第１セットおよびデータの第２セットは、同時に比較される１つまたは複数の文字を含む（１４１２）。メモリの１つまたは複数の指定された境界を横断していないことを使用して、１つまたは複数の文字がメモリから読み込まれる（１４１４）。
【０２００】
１つの例では、一連の動作のうちの選択された動作が、選択された動作の設計されたバージョンから変更される（１４１６）。１つの例では、選択された動作の設計されたバージョンが条件コードを設定し、選択された動作が、条件コードの設定を回避するように変更される（１４１８）。
【０２０１】
図３１を参照すると、一実施形態では、複数回反復してデータの第１セットおよびデータの第２セットを比較するループ命令になるように命令が定義され（１４２０）、デコードすることが、ループ命令を一連の動作に展開することを含んでいる（１４２２）。この一連の動作は、データの第１セットおよびデータの第２セットを比較するための非ループ・シーケンスである（１４２４）。
【０２０２】
１つの例では、この一連の動作は、データの第１セットおよびデータの第２セットのうちの少なくとも１つの内部で終端部を検出するために使用される終端部検出動作をさらに含む（１４２６）。
【０２０３】
さらに、１つの例では、この一連の動作は、例えば、データの第１セットおよびデータの第２セットのうちの少なくとも１つに読み込まれたデータの量の決定に使用される少なくとも１つのカウント動作を含む（１４２８）。
【０２０４】
この一連の動作は、例えば、データの第１セットに読み込まれたデータの量、データの第２セットに読み込まれたデータの量、または終端部の位置のうちの最小値の決定に使用される少なくとも１つの最小値動作をさらに含む（１４３０）。
【０２０５】
１つの例では、少なくとも１つの最小値動作のうちの１つの最小値動作が、最小値を計算することに基づいて条件コードを更新するように構成される（１４３２）。
【０２０６】
さらに、１つの例では、この一連の動作は、処理される最小の数のデータ単位のカウントを１つまたは複数の位置に加算するために使用される１つまたは複数の加算動作を含む（１４３４）。
【０２０７】
この一連の動作は、例えば、マイクロコードの処理に移行せずに実行される（１４３６）。
【０２０８】
本発明の範囲を逸脱することなく、多くの変形が可能である。本明細書では多数の態様および特徴が説明されており、特に矛盾がない限り、各態様または特徴が任意の他の態様または特徴と組み合わせられてよいということに、注意するべきである。
【０２０９】
１つまたは複数の態様がクラウド・コンピューティングに関連してよい。
【０２１０】
本開示にはクラウド・コンピューティングの詳細な説明が含まれているが、本明細書において示された教示の実装は、クラウド・コンピューティング環境に限定されないということが、あらかじめ理解される。本発明の実施形態は、現在既知であるか、または今後開発される任意のその他の種類のコンピューティング環境と組み合わせて実装できる。
【０２１１】
クラウド・コンピューティングは、構成可能な計算リソース（例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス）の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも５つの特徴、少なくとも３つのサービス・モデル、および少なくとも４つのデプロイメント・モデルを含むことができる。
【０２１２】
特徴は、次のとおりである。
オンデマンドのセルフ・サービス：クラウドの利用者は、サーバの時間、ネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に応じて自動的にプロビジョニングすることができる。
幅広いネットワーク・アクセス：能力は、ネットワークを経由して利用可能であり、異種のシン・クライアントまたはシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、およびＰＤＡ）による利用を促進する標準的なメカニズムを使用してアクセスされる。
リソース・プール：プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象レベルでは、場所（例えば、国、州、またはデータセンター）を指定できる場合がある。
迅速な順応性：能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、無制限に見え、任意の量をいつでも購入できる。
測定されるサービス：クラウド・システムは、計測機能を活用することによって、サービスの種類（例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント）に適した抽象の何らかのレベルで、リソースの使用を自動的に制御および最適化する。リソースの使用量は監視、制御、および報告することができ、利用されるサービスのプロバイダと利用者の両方に透明性が提供される。
【０２１３】
サービス・モデルは、次のとおりである。
ＳａａＳ（Software as a Service）：利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Ｗｅｂブラウザ（例えば、Ｗｅｂベースの電子メール）などのシン・クライアント・インターフェイスを介して、さまざまなクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、またはさらには個々のアプリケーション機能を含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理または制御することはない。
ＰａａＳ（Platform as a Service）：利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理または制御することはないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御する。
ＩａａＳ（Infrastructure as a Service）：利用者に提供される能力は、処理、ストレージ、ネットワーク、およびその他の基本的な計算リソースのプロビジョニングであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理または制御することはないが、オペレーティング・システム、ストレージ、およびデプロイされたアプリケーションを制御し、場合によっては、選択されたネットワーキング・コンポーネント（例えば、ホスト・ファイアウォール）を限定的に制御する。
【０２１４】
デプロイメント・モデルは、次のとおりである。
プライベート・クラウド：このクラウド・インフラストラクチャは、ある組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
コミュニティ・クラウド：このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事（例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項）を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
パブリック・クラウド：このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術（例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト）によって固有の実体を残したまま互いに結合された２つ以上のクラウド（プライベート、コミュニティ、またはパブリック）の複合である。
【０２１５】
クラウド・コンピューティング環境は、ステートレス、疎結合、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを備えるインフラストラクチャである。
【０２１６】
ここで図３２を参照すると、例示的なクラウド・コンピューティング環境５０が示されている。図示されているように、クラウド・コンピューティング環境５０は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス（例えば、ＰＤＡ（Personal Digital Assistant）または携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、または自動車コンピュータ・システム５４Ｎ、あるいはその組み合わせなど）が通信できる１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は、互いに通信することができる。ノード１０は、１つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組み合わせなどに、物理的または仮想的にグループ化されてよい（図示されていない）。これによって、クラウド・コンピューティング環境５０は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはＳａａＳ、あるいはその組み合わせを提供できる。図３２に示されたコンピューティング・デバイス５４Ａ〜Ｎの種類は、例示のみが意図されており、コンピューティング・ノード１０およびクラウド・コンピューティング環境５０は、任意の種類のネットワークまたはネットワーク・アドレス指定可能な接続（例えば、Ｗｅｂブラウザを使用した接続）あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【０２１７】
ここで図３３を参照すると、クラウド・コンピューティング環境５０（図３２）によって提供される機能的抽象レイヤのセットが示されている。図３３に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェア・レイヤ６０は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム６１、ＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャベースのサーバ６２、サーバ６３、ブレード・サーバ６４、ストレージ・デバイス６５、ならびにネットワークおよびネットワーキング・コンポーネント６６が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
仮想化レイヤ７０は、仮想サーバ７１、仮想ストレージ７２、仮想プライベート・ネットワークを含む仮想ネットワーク７３、仮想アプリケーションおよびオペレーティング・システム７４、ならびに仮想クライアント７５などの仮想的実体を提供できる抽象レイヤを提供する。
【０２１８】
１つの例では、管理レイヤ８０は、以下で説明される機能を提供することができる。リソース・プロビジョニング８１は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよびその他のリソースの動的調達を行う。計測および価格設定８２は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書の作成と送付を行う。１つの例では、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウドの利用者およびタスクのＩＤ検証を行うとともに、データおよびその他のリソースの保護を行う。ユーザ・ポータル８３は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理８４は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意（ＳＬＡ：Service Level Agreement）計画および実行８５は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、ＳＬＡに従って行う。
【０２１９】
ワークロード・レイヤ９０は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されてよいワークロードおよび機能の例としては、マッピングおよびナビゲーション９１、ソフトウェア開発およびライフサイクル管理９２、仮想クラスルーム教育の配信９３、データ分析処理９４、トランザクション処理９５、および命令処理９６が挙げられる。
【０２２０】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０２２１】
コンピュータ可読記憶媒体は、命令実行デバイスで使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasableprogrammable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【０２２２】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０２２３】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上で部分的におよびリモート・コンピュータ上で部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０２２４】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０２２５】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０２２６】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【０２２７】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、またはそれらのブロックは、場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、あるいは専用ハードウェアとコンピュータ命令との組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０２２８】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、提示されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０２２９】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するように動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０２３０】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・インフラストラクチャでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０２３１】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０２３２】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【０２３３】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０２３４】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラのいずれかを通じて、システムに結合できる。また、ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、使用可能な種類のネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０２３５】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０２３６】
下の特許請求の範囲内のすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が可能であるということは、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
2020509493.tif 000003
【図２】
2020509493.tif 000004
【図３】
2020509493.tif 000005
【図４】
2020509493.tif 000006
【図５】
2020509493.tif 000007
【図６】
2020509493.tif 000008
【図７】
2020509493.tif 000009
【図８】
2020509493.tif 000010
【図９】
2020509493.tif 000011
【図１０】
2020509493.tif 000012
【図１１】
2020509493.tif 000013
【図１２】
2020509493.tif 000014
【図１３】
2020509493.tif 000015
【図１４】
2020509493.tif 000016
【図１５】
2020509493.tif 000017
【図１６】
2020509493.tif 000018
【図１７】
2020509493.tif 000019
【図１８】
2020509493.tif 000020
【図１９】
2020509493.tif 000021
【図２０】
2020509493.tif 000022
【図２１】
2020509493.tif 000023
【図２２】
2020509493.tif 000024
【図２３】
2020509493.tif 000025
【図２４】
2020509493.tif 000026
【図２５】
2020509493.tif 000027
【図２６】
2020509493.tif 000028
【図２７】
2020509493.tif 000029
【図２８】
2020509493.tif 000030
【図２９】
2020509493.tif 000031
【図３０】
2020509493.tif 000032
【図３１】
2020509493.tif 000033
【図３２】
2020509493.tif 000034
【図３３】
2020509493.tif 000035
【国際調査報告】
2020509493.tif 000036
2020509493.tif 000037