(57)【要約】      （修正有）【課題】パックド・データおよびアンパックド・データに基づく論理比較および分岐のための命令を提供する。【解決手段】プロセッサは、メモリに格納された第１および第２のデータの論理比較を実行する。論理比較は、第１および第２のデータの各ビットに実行されてもよく、または特定のビットだけに実行されてもよい。第１のデータはパックド・データエレメントを含む。論理比較はパックド・データエレメントの最上位ビットに実行される。論理比較は、第１および第２のデータの対応するビットの比較を含み。更に、第１のデータのビットと第２のデータの対応するビットの補数との論理比較を含む。これらの比較に基づいて、分岐サポートが実行される。かかる分岐サポートは１つ以上のフラグの設定を含む。そして、それは分岐ユニットによって次々に利用されてもよい。あるいは、分岐サポートは、示された目的コード位置への分岐を含んでもよい。【選択図】図８ｂ
2020091908.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
第１のシーケンスの命令をデコードするデコーダであって、前記第１のシーケンスの命令は、比較動作及び前記比較動作の結果が条件とされるジャンプ動作の双方を実行するための単一の融合された比較−ジャンプ命令を含む、デコーダと、
第１のソース値を格納する第１のソースレジスタと、
第２のソース値を格納する第２のソースレジスタと、
前記デコードされた単一の融合された比較−ジャンプ命令を実行する実行回路と、を含み、
前記実行回路は、前記第１のシーケンスの命令に含まれる前記単一の融合された比較−ジャンプ命令に応じて、前記第１のソース値と前記第２のソース値とを比較し、前記比較の第１の結果に応じて、第２のシーケンスの命令の目標アドレスへとジャンプする、プロセッサ。
【請求項２】
前記実行回路は、前記比較の第２の結果に応じて、前記第１のシーケンスの命令を継続して実行する、請求項１に記載のプロセッサ。
【請求項３】
前記融合された比較−ジャンプ命令は、前記目標アドレスの指標を含む、請求項１に記載のプロセッサ。
【請求項４】
前記第１の結果は、前記第１のソース値及び前記第２のソース値が等しいという指標を含み、前記第２の結果は、前記第１のソース値及び前記第２のソース値が等しくないという指標を含む、請求項２に記載のプロセッサ。
【請求項５】
前記第１のソース値及び前記第２のソース値は、３２ビット値である、請求項１に記載のプロセッサ。
【請求項６】
前記第１のシーケンス又は前記第２のシーケンスの中の１つ又は複数の命令は、ＳＩＭＤ命令を含み、前記実行回路は、
前記ＳＩＭＤ命令を実行するベクター実行回路と、
前記ＳＩＭＤ命令のオペランドを格納するのに使用される５１２ビットベクターレジスタのセットを含むベクターレジスタファイルと、を含む、請求項１に記載のプロセッサ。
【請求項７】
前記実行回路は、前記第１のシーケンスの命令又は前記第２のシーケンスの命令の中の１つ又は複数のスカラー命令を実行するスカラー実行回路をさらに含み、前記スカラー実行回路は、スカラーオペランドを格納するスカラーレジスタのセットを含む、請求項６に記載のプロセッサ。
【請求項８】
当該プロセッサの実行状態に関連付けられているデータを保持する複数のステータスレジスタをさらに含む、請求項１に記載のプロセッサ。
【請求項９】
システムであって、
命令及びデータを格納するシステムメモリと、
前記システムメモリに結合されるプロセッサと、を含み、
前記プロセッサは、
第１のシーケンスの命令をデコードするデコーダであって、前記第１のシーケンスの命令は、比較動作及び前記比較動作の結果が条件とされるジャンプ動作の双方を実行するための単一の融合された比較−ジャンプ命令を含む、デコーダと、
第１のソース値を格納する第１のソースレジスタと、
第２のソース値を格納する第２のソースレジスタと、
前記デコードされた単一の融合された比較−ジャンプ命令を実行する実行回路と、を含み、
前記実行回路は、前記第１のシーケンスの命令に含まれる前記単一の融合された比較−ジャンプ命令に応じて、前記第１のソース値と前記第２のソース値とを比較し、前記比較の第１の結果に応じて、第２のシーケンスの命令の目標アドレスへとジャンプする、システム。
【請求項１０】
前記プロセッサに結合されて、命令及びデータを格納する記憶デバイスをさらに含む、請求項９に記載のシステム。
【請求項１１】
前記プロセッサを１つ又は複数の入力／出力（Ｉ／Ｏ）デバイスに結合する入力／出力（Ｉ／Ｏ）相互接続をさらに含む、請求項９に記載のシステム。
【請求項１２】
前記システムメモリは、ダイナミックランダムアクセス（ＤＲＡＭ）メモリを含む、請求項９に記載のシステム。
【請求項１３】
前記プロセッサに結合されて、グラフィックス処理動作を実行するグラフィックスプロセッサをさらに含む、請求項９に記載のシステム。
【請求項１４】
前記プロセッサに結合されるネットワークプロセッサをさらに含む、請求項９に記載のシステム。
【請求項１５】
前記プロセッサに結合されるオーディオ入力／出力デバイスをさらに含む、請求項９に記載のシステム。
【請求項１６】
前記実行回路は、前記比較の第２の結果に応じて、前記第１のシーケンスの命令を継続して実行する、請求項９に記載のシステム。
【請求項１７】
前記融合された比較−ジャンプ命令は、前記目標アドレスの指標を含む、請求項９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、一般にプロセッサの分野に関する。特に、開示は、データの複数のビットの複数の論理比較動作を実行するための単一の制御信号を使用することに関する。
【背景技術】
【０００２】
典型的なコンピュータシステムにおいて、プロセッサは、１つの結果を出力する命令を使用して、多数のビット（例えば、６４）によって表現される値を操作する。例えば、加算命令の実行は、第１の６４ビット値および第２の６４ビット値を合計し、第３の６４ビット値として結果を格納する。マルチメディア・アプリケーションは、多数のデータの操作を必要とする。その例としては、２Ｄ／３Ｄ図形処理、画像処理、ビデオ圧縮／伸長、認識アルゴリズム、音声操作、あるいはマルチメディア・データ操作を有する統合化された電子会議のような、コンピュータにサポートされた協力のためのアプリケーション（ＣＳＣ：ｃｏｍｐｕｔｅｒ  ｓｕｐｐｏｒｔｅｄ  ｃｏｏｐｅｒａｔｉｏｎ）が挙げられる。データは、単一の大きな値（例えば、６４ビットまたは１２８ビット）によって表されてもよく、あるいは、その代わりに少ないビット（例えば、８または１６または３２ビット）によって表されてもよい。例えば、グラフィックデータは８または１６ビットによって表される。音声データは８または１６ビットによって表されてもよい。また、整数データは８、１６または３２ビットで表されてもよい。そして、浮動小数点データは３２または６４ビットで表されてもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
プロセッサは、マルチメディア・アプリケーションの効率を改善するために、（同じ特徴を有するほかのアプリケーションと同様に）パックド・データフォーマットを提供してもよい。パックド・データフォーマットとは、単一の値を表すために使用されるビットがいくつかの固定サイズのデータエレメントに分割されたフォーマットである。それぞれの要素は、別々の値を表す。例えば、１２８ビット・レジスタは４つの３２ビット・エレメントに分けられてもよい。そして、それぞれは別々の３２ビット値を表す。このようにして、これらのプロセッサは、マルチメディア・アプリケーションをより効率的に処理できる。
【０００４】
本発明については、添付の図面を参照しながら説明するが、図面の内容に限定されない。
【課題を解決するための手段】
【０００５】
本願明細書は、データの複数のビットの論理的比較動作を、単一の制御信号に応答して実行するプロセッサ命令を含む、方法、システムおよび回路の実施例を開示する。論理的比較動作に関係するデータは、パックドかアンパックド・データでもよい。少なくとも１つの実施例において、プロセッサは、メモリに接続される。メモリは、第１のデータおよび第２のデータを格納している。プロセッサは、命令の受信に応答して、第１のデータおよび第２のデータのデータエレメントの論理的比較動作を実行する。論理的比較動作は、１および２番目のデータのデータエレメントのビット毎の論理積、および、第２のデータのデータエレメントと第１のデータのデータエレメントの補数のビット毎の論理積を行ってもよい。プロセッサの少なくとも２つのステータスフラグは、論理的比較動作の結果に基づいて修正される。これらの２つのステータスフラグは、ゼロフラグおよびキャリーフラグを含んでもよい。これらのフラグは、アプリケーションプログラムに構造上見えてもよい。そして、より多数のフラグ値（例えば構造上可視拡張フラグ（ＥＦＬＡＧＳ）レジスタ）の一部でもよい。
【０００６】
本発明のこれらの、および他の実施例は以下の説明に従って理解されるであろう。そして、以下の説明において、さまざまな変更態様と改変が、より広い本発明の精神と範囲を逸脱しない範囲でなされてもよいことは勿論である。明細書および図面は、したがって、これに限定されず、例示の意味で用いられる。そして、本発明は請求項のみによって定義される。
［定義］
【０００７】
発明の実施例の説明を理解するための基礎として、用語を以下のように定義する。
ビット  ＸからビットＹ：２進数のサブフィールドを定義する。例えば、バイト００１１１０１０２（基数２）のビット６からビットゼロは、サブフィールド１１１０１０２を表す。ここで、二進数の後についている「２」は、数字が２を基数とすることを意味する。したがって、１０００２は８１０と等しい。また、Ｆ１６は、１５１０と等しい。
Ｒｘ：レジスタを表す。レジスタは、データを格納し、かつ提供することができるいかなるデバイスでもよい。レジスタの更なる機能については後述する。レジスタが必ずしも同じダイ、あるいは、プロセッサと同じパッケージに含まれていなくてもよい。
ＳＲＣおよびＤＥＳＴ：記憶領域（例えば、メモリーアドレス、レジスタ、その他）を表す。
Ｓｏｕｒｃｅ１―ｉおよびＲｅｓｕｌｔ１―ｉおよびＤｅｓｔｉｎ：データを表す。
【図面の簡単な説明】
【０００８】
【図１ａ】本発明の実施例に係るコンピュータシステムを示す図である。
【図１ｂ】本発明の実施例に係るコンピュータシステムを示す図である。
【図１ｃ】本発明の実施例に係るコンピュータシステムを示す図である。
【０００９】
【図２ａ】本発明の実施例に係るプロセッサのレジスタファイルを示す図である。
【図２ｂ】本発明の実施例に係るプロセッサのレジスタファイルを示す図である。
【００１０】
【図３】データを操作するためにプロセッサによって実行されるプロセスの少なくとも１つの実施例に係るフローチャートを示す図である。
【００１１】
【図４】本発明の別の実施例に係るパックド・データ型を示す図である。
【００１２】
【図５】少なくとも本発明の一実施例におけるレジスタのパックド・バイトおよびレジスタのパックド・ワードデータ表現を示す図である。
【００１３】
【図６】本発明の少なくとも１つの実施例に係るレジスタのパックド・ダブルワードおよびレジスタのパックド・クワッドワードデータ表現を示す図である。
【００１４】
【図７ａ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行する方法の実施形態に係るフローチャートである。
【図７ｂ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行する方法の実施形態に係るフローチャートである。
【図７ｃ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行する方法の実施形態に係るフローチャートである。
【図７ｄ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行する方法の実施形態に係るフローチャートである。
【００１５】
【図８ａ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行するための回路の別の実施例を示す図である。
【図８ｂ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行するための回路の別の実施例を示す図である。
【図８ｃ】論理比較（ゼロおよびキャリーフラグ・オペレーションの設定）を実行するための回路の別の実施例を示す図である。
【００１６】
【図９】プロセッサ命令のためのオペレーションコード・フォーマットのブロック図を示す各種実施形態を示す図である。
【発明を実施するための形態】
【００１７】
［概要］
本願は、パックドまたはアンパックド・データの論理的比較動作のためのプロセッサ命令を含む方法、装置およびシステムの実施例が記載されている。より詳細には、命令は、論理的にデータを比較し、そして、その比較に基づいて、ゼロおよびキャリーフラグをセットしてもよい。少なくとも１つの実施例において、２つの論理的比較動作は、以下の表１ａおよび表１ｂに示すように、単一の命令を使用して実行される。比較動作は、以下の処理を含む。すなわち、デスティネーションとソースオペランドとのビット毎の論理積と、および、デスティネーションの補数とソースオペランドとのビット毎の論理積を含む。表１ａは開示された論理的比較動作の一実施例の簡略化された代表例を示す。一方、表１ｂは開示された論理的比較命令の実施例のビットレベルの例を示す。例示として、値を付記している。表１ａおよび１ｂにおいて例示される実施例は、パックド・データを例示しているが、ソースおよびデスティネーションオペランドのデータはいかなるデータ表現でもよい、すなわち、必ずしもパックド・データでなければならないわけではない。ソースおよび／またはデスティネーションオペランドのデータが１２８ビットの単一のエントリーである。このため「パックド」データとして捉えられない。このため、本願明細書では、「アンパックド」データと呼ぶこととする。このことは、必ずしも単にデータがコンポーネント表現に再分割されていなくてもよく、単一のデータ値として捉えてもよいことを意味する。説明を簡単にするため、表１ａのデータは３２ビット値として表される。当業者は表１ａおよび表１ｂにおいて例示されているコンセプトは、いかなる長さのデータにも適用されることを理解するであろう。たとえば、もっと短いデータ長（例えば、４ビット、８ビット、および１６ビットの長さ）および、もっと長いデータ長（例えば、６４ビットおよび１２８ビットの長さ）である。
【表１】
2020091908.tif 000003
【表２】
2020091908.tif 000004
【実施例】
【００１８】
少なくとも１つの実施例において、ソースおよびデスティネーションオペランドのデータ値は、パックド・データを表してもよい。かかる実施例において、ソースおよびデスティネーションオペランドのパックド・コンポーネントの各々は、任意のデータの型であってもよい。
【００１９】
表２ａおよび表２ｂにおいて、コンポーネントＡ１からＡ４およびＢ１からＢ４は、各々３２ビット単精度浮動小数点数の２進数表現を表す。しかしながら、かかる具体例は、限定するためのものではない。当業者はコンポーネントの各々がいかなるデータを表してもよいと認識する。すなわち、整数、浮動小数点データフォーマット、および文字列形式または他のタイプのいかなるデータフォーマットも含まれる。
【表３】
2020091908.tif 000005
【表４】
2020091908.tif 000006
【００２０】
例えば、表２ａおよび表２ｂに示しているパックドの例のように、各パックド・エレメントの特定のビットだけが比較動作の間、操作される別の実施例が使用されてもよい。例えば、少なくとも、このような別の実施例は、図７ｃ、図７ｄ、図８ｂ、および図８ｃに付随して後述する。
【００２１】
表１ａおよび表２ａの「Ｉｎｔ．Ｒｅｓｕｌｔ１」および「Ｉｎｔ．Ｒｅｓｕｌｔ２」および、表１ｂおよび表２ｂの３行および４行に、中間の値が示されているのが、当業者には認識されるであろう。これらは、理解を容易にするためのものである。表１ａから表２ｂにおける記載は、中間の値がプロセッサ内に格納されることを意味するためのものではない。もっとも、少なくとも１つの実施例においては、そのように格納されてもよい。その他、少なくとも１つの他の実施例においては、かかる中間の値は、記憶領域に格納されず、回路を通じて利用される。
【００２２】
表１ａ、表１ｂ、表２ａおよび表２ｂは、論理的比較を実行する（ＬＣＳＺＣ：  ｌｏｇｉｃａｌ  ｃｏｍｐａｒｅ，  ｓｅｔ  ｚｅｒｏ  ａｎｄ  ｃａｒｒｙ  ｆｌａｇｓ）命令の実施例を示している。ＬＣＳＺＣ命令は、１２８ビットのソースおよびデスティネーションオペランドの各々のビット毎の論理積演算を実行し、１２８のビットのソースオペランドの各々とデスティネーションオペランドの値の補数の１２８ビットのビット毎の論理積演算を実行し、かつ論理積演算の結果に従ってゼロおよびキャリーフラグを設定する。
【００２３】
ゼロおよびキャリーフラグの設定は、論理比較に基づいて分岐動作をサポートする。少なくとも１つの実施例において、ＬＣＳＺＣ命令の後に、フラグの一方または両方の値に基づいて、プロセッサによって実行される所望の分枝操作を示す別の分岐命令が続いてもよい（例えば、表４の擬似コードを参照）。当業者は、ステータスフラグの設定が、比較結果を利用した分枝操作を実行する唯一のハードウェアメカニズムではないことを認識するであろう。比較の結果に基づいて分岐をサポートするために他のメカニズムが実装されてもよい。以下に記載されている具体的実施例は、ゼロおよびキャリーフラグを論理比較の結果として設定しているが、分岐をサポートするかかるフラグの設定が、すべての実施例において必要とされるというわけではない。したがって、本明細書で用いられるＬＣＳＺＣという用語は制限するものとして理解してはならない。ゼロおよびキャリーフラグの設定がすべての実施例において必要であるというわけではない。
【００２４】
１つの別の実施例において、例えば、分岐動作は、１つのＬＣＳＺＣ命令の変形命令の直接的な結果として実行されてもよい。すなわち、融合されたテストアンドブランチ命令のように、比較および分岐を融合させた命令がこれに該当する。融合されたテストアンドブランチ命令の少なくとも１つの実施例において、実行される論理比較の結果として、ステータスフラグは設定されない。
【００２５】
別の実施例では、データエレメントおよび中間結果のビットの数を変化させてもよい。また、別の実施例では、それぞれのソースおよびデスティネーションの値の一部のビットを比較してもよい。加えて、別の実施例は、使用するデータエレメントの数および生成される中間結果の数を変化させてもよい。例えば、別の実施例は、以下を含む（なおこれらに限定されるわけではない）：符号無しソースおよび符号付きデスティネーションのためのＬＣＳＺＣ命令；符号付きソースおよび符号無しデスティネーションのためのＬＣＳＺＣ命令；符号無しソースおよび符号無しデスティネーションのためのＬＣＳＺＣ命令；および、符号付きソースおよび符号付きデスティネーションのためのＬＣＳＺＣ命令。実施例の各々において、前記ソースおよびデスティネーションは、８ビット、１６ビット、３２ビット、または６４ビット・コンポーネントのパックド・データを各々含んでもよい。あるいは、前記ソースおよびデスティネーションデータは、パックドでなく、その代わりに１２８ビット・データエレメントである。ソースおよびデスティネーションのパックドの形式は対称である必要はない。そして、両者がパックドである場合、ソースおよびデスティネーションのデータのサイズが必ずしも同じである必要はない。
［コンピュータシステム］
【００２６】
図１ａは、本発明の一実施例におけるコンピュータシステム１００を示している。コンピュータシステム１００は、情報を通信するための相互接続１０１を含む。相互接続１０１は、分岐のバス、１つ以上のポイントツーポイント相互接続、またはこれら２つのいかなる組合せ、あるいは、その他の通信ハードウェアおよび／またはソフトウェアを含んでもよい。
【００２７】
図１ａは、相互接続１０１に接続する処理情報のためのプロセッサ１０９を示している。プロセッサ１０９は任意型のアーキテクチャのＣＰＵを表す。たとえば、ＣＩＳＣまたはＲＩＳＣタイプ・アーキテクチャを含む。
【００２８】
コンピュータシステム１００は、ランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置デバイス（メインメモリ１０４）を更に含む。これらは相互接続１０１に接続され、プロセッサ１０９によって実行される命令および情報を格納する。メインメモリ１０４は、プロセッサ１０９による命令の実行中に、一時変数または他の中間的情報を格納するために用いられてもよい。
【００２９】
コンピュータシステム１００はさらに、読取り専用メモリ（ＲＯＭ）１０６、および／または他の静的記憶装置デバイスを有し、これらは、プロセッサ１０９のための静的情報および命令を格納するために相互接続１０１に接続される。データ記憶デバイス１０７は、情報および命令を格納するため、相互接続１０１に接続される。
【００３０】
図１ａにおいて、プロセッサ１０９は、実行ユニット１３０、レジスタファイル１５０、キャッシュ１６０、デコーダ１６５、および、インターナルバス１７０を更に含む。もちろん、プロセッサ１０９は、本発明を理解することに必要でない追加回路を含む。
【００３１】
デコーダ１６５はプロセッサ１０９によって受信される命令の復号化のためのものである。そして、実行ユニット１３０はプロセッサ１０９によって受信される命令を実行するためのものである。通常はメインプロセッサにおいて行う命令を認識することに加えて、デコーダ１６５および実行ユニット１３０は、本願明細書において記載されている（ＬＣＳＺＣ：ｌｏｇｉｃａｌ−ｃｏｍｐａｒｅ−ａｎｄ−ｓｅｔ−ｚｅｒｏ−ａｎｄ−ｃａｒｒｙ−ｆｌａｇｓ）オペレーションを実行するための命令を認識する。デコーダ１６５および実行ユニット１３０は、パックドおよびアンパックド・データの両者のＬＣＳＺＣオペレーションを実行するための命令を認識する。
【００３２】
実行ユニット１３０は、インターナルバス１７０によってレジスタファイル１５０に接続される。また、インターナルバス１７０は、必ずしも分岐のバスである必要があるというわけではない。別の実施例において、ポイントツーポイント相互接続または他のタイプの通信経路でもよい。
【００３３】
レジスタファイル１５０は、データを含む情報を格納するプロセッサ１０９のための記憶領域である。パックドまたはアンパックド・データのＬＣＳＺＣオペレーションを実行する本発明の一態様が、記載されている。本発明の態様によれば、データを格納するために使用する記憶領域は、限定されているわけではない。なお、レジスタファイル１５０の実施例は、図２ａ〜図２ｂに関連して後述する。
【００３４】
実行ユニット１３０は、キャッシュ１６０およびデコーダ１６５に接続される。キャッシュ１６０は、たとえばメインメモリ１０４からのデータおよび／または制御信号をキャッシュするのに用いられる。デコーダ１６５は、プロセッサ１０９によって受信されるインストラクションの復号化に用いられる。インストラクションの復号化は、制御信号および／またはマイクロコード・エントリポイントに変換する。これらの制御信号またはマイクロコード・エントリポイントは、デコーダ１６５から実行ユニット１３０に転送されてもよい。
【００３５】
これらの制御信号および／またはマイクロコード・エントリポイントに応答して、実行ユニット１３０は、適切なオペレーションを実行する。例えば、ＬＣＳＺＣ命令が受信された場合、デコーダ１６５は実行ユニット１３０に必要な比較ロジックを実行させる。少なくとも幾つかの実施例（例えば、融合した「テストアンドブランチ」オペレーションをインプリメントしていない実施例）のために、実行ユニット１３０は、ゼロおよびキャリーフラグをセットしてもよい（例えば論理比較回路１４５を参照）。かかる実施例において、プロセッサ１０９の分岐ユニット（図示せず）は、目的コード位置を示す次の分岐命令の実行中に、フラグを利用してもよい。
【００３６】
あるいは、実行ユニット１３０自体は、論理比較に基づいて分岐を遂行する分岐回路（図示せず）を含んでもよい。かかる実施例において、ＬＣＳＺＣ命令で提供される「分岐サポート」は、（コントロールフラグをセットするのではなく）指定された目的コード位置に対するコントロールジャンプである。少なくとも１つの実施例において、ジャンプまたは「分岐」を実行する分岐回路は、論理比較回路１４５の部分であってもよい。
【００３７】
デコーダ１６５は、各種の異なるメカニズムを使用してもよい。例えば、ルック・アップ・テーブル、ハードウェア・インプリメンテーション、ＰＬＡ、その他である。デコーダ１６５および実行ユニット１３０によるさまざまな命令の実行が、一連のｉｆ／ｔｈｅｎ構文で表されてもよい。このｉｆ／ｔｈｅｎ構文の命令の実行は、これらの逐次処理を必要としないものと理解される。むしろ、このｉｆ／ｔｈｅｎ処理を論理的に実行するいかなる過程も、本発明の範囲内であると認識される。
【００３８】
加えて、図１ａは、データ記憶デバイス１０７（例えば、磁気ディスク、光ディスクおよび／または他の機械読み取り可読な媒体）がコンピュータシステム１００に接続されてもよいことを示す。加えて、データ記憶デバイス１０７は、プロセッサ１０９による実行のためのコード１９５を含むことを示す。コード１９５は、ＬＣＳＺＣ命令１４２の１つ以上の実施例を含んでいる。かつ、プロセッサ１０９に種々の目的（例えば、動画ビデオ圧縮／伸長、画像フィルタリング、音声信号圧縮、フィルタリングまたは合成、変調／復調、その他）のためのＬＣＳＺＣ命令１４２を有するビット・テストを実行させるために記述される。
【００３９】
コンピュータシステム１００は、コンピュータユーザに情報を表示するための表示装置１２１に、相互接続１０１を経由して接続されてもよい。表示装置１２１は、フレームバッファ、専用グラフィクス・レンダリングデバイス、液晶ディスプレイ（ＬＣＤ）および／またはフラットパネルディスプレイを有してもよい。
【００４０】
入力装置１２２は、英数字、かつ他のキーを含み、プロセッサ１０９に情報およびコマンド選択を通信するため、相互接続１０１に接続されてもよい。他の種類のユーザ入力デバイスとしては、プロセッサ１０９に対する通信方向情報およびコマンド選択のための、およびディスプレイ装置１２１のカーソル移動制御のためのカーソル制御１２３（例えばマウス、トラックボール、ペン、タッチスクリーンまたはカーソル方向キー）がある。この入力装置は通常は２本の軸、第一軸（例えば、ｘ）および第二軸（例えば、ｙ）に対する２つの自由度を有する。そして、これによって、デバイスが平面の位置を特定することができる。しかしながら、本発明は、２つの自由度だけを有する入力装置に限られてはならない。
【００４１】
相互接続１０１に接続できる他のデバイスとしては、命令、データまたは他の情報を媒体（例えば紙、フィルムまたは同様のタイプの媒体）に印刷するために用いられるハードコピーデバイス１２４がある。加えて、コンピュータシステム１００には、録音再生デバイス１２５（例えば情報記録のためのマイクロホンに接続したオーディオデジタイザ）を接続してもよい。更に、デバイス１２５は、デジタル化された音を再生するための、スピーカに接続されたデジタル／アナログ変換（Ｄ／Ａ）コンバータを含んでもよい。
【００４２】
コンピュータシステム１００は、コンピュータ・ネットワーク（例えば、ＬＡＮ）の端末でもよい。コンピュータシステム１００は、コンピュータ・ネットワークのコンピュータ・サブシステムとなる。コンピュータシステム１００は、任意に、ビデオデジタル化デバイス１２６および／または通信装置１９０（例えば、外部デバイスまたはネットワークとの通信を提供するシリアル通信チップ、無線インタフェース、イーサネット（登録商標）チップまたはモデム）を含む。ビデオデジタル化デバイス１２６は、コンピュータ・ネットワークの他に発信できるビデオ画像を取り込むために用いてもよい。
【００４３】
少なくとも１つの実施例において、プロセッサ１０９は、既存のプロセッサと互換性を持つ命令セットをサポートする。既存のプロセッサとしては、例えば、サンタクララ（カリフォルニア）のインテル社によって製造されるＩｎｔｅｌ（Ｒ）Ｐｅｎｔｉｕｍ（登録商標）Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｐｅｎｔｉｕｍ（登録商標）Ｐｒｏ  Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｐｅｎｔｉｕｍ（登録商標）ＩＩ  Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｐｅｎｔｉｕｍ（登録商標）ＩＩＩ  Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｐｅｎｔｉｕｍ（登録商標）４  Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｉｔａｎｉｕｍ（Ｒ）Ｐｒｏｃｅｓｓｏｒ、Ｉｎｔｅｌ（Ｒ）Ｉｔａｎｉｕｍ（Ｒ）２  ＰｒｏｃｅｓｓｏｒまたはＩｎｔｅｌ（Ｒ）Ｃｏｒｅ（ＴＭ）Ｄｕｏ  Ｐｒｏｃｅｓｓｏｒがある。その結果、プロセッサ１０９は、本発明のオペレーションに加えて、既存のプロセッサ・オペレーションをサポートしてもよい。プロセッサ１０９は、１つ以上のプロセス技術の製造に適していてもよい。かつ、機械読み取り可読な媒体において充分詳細に記述され、容易にかつ適切に製造される。本発明がｘ８６ベースの命令セットに組み込まれるとして以下に記載するが、別の実施例は本発明を他の命令セットに組み込むことができる。例えば、本発明は、ｘ８６命令セットベース以外の命令セットを使用した６４ビット・プロセッサに組み込むことができる。
【００４４】
図１ｂは、本発明の原理を実装するデータ処理システム１０２の別の実施例を例示している。データ処理システム１０２の一実施例は、Ｉｎｔｅｌ  ＸＳｃａｌｅ（ＴＭ）技術を有する応用プロセッサである。本願明細書において記載されている実施例は、本発明の範囲から逸脱しない限り、当業者によって、他の処理システムにおいても利用されるものと解される。
【００４５】
コンピュータシステム１０２には、ＬＣＳＺＣオペレーションを実行することができる処理コア１１０を含んでいる。ある１つの実施例において、処理コア１１０は、任意のアーキテクチャの処理ユニットを表す。たとえば、ＣＩＳＣ、ＲＩＳＣまたはＶＬＩＷタイプ・アーキテクチャが挙げられるが、これに限定されるものではない。処理コア１１０は、１つ以上のプロセス技術の製造に適していてもよい。加えて、機械読み取り可読な媒体によって、充分詳細に記述され、容易にかつ適切に製造できる。
【００４６】
処理コア１１０には、実行ユニット１３０、一組のレジスタファイル１５０およびデコーダ１６５が含まれる。処理コア１１０は、本発明の理解に必要でない付加的な回路（図示せず）を含む。
【００４７】
実行ユニット１３０が、処理コア１１０によって受信される命令を実行するために用いられる。典型的なプロセッサ命令を認識することに加えて、実行ユニット１３０は、パックド、およびアンパックド・データフォーマットのＬＣＳＺＣオペレーションを実行するための命令を認識する。デコーダ１６５および実行ユニット１３０によって認識される命令セットは、ＬＣＳＺＣオペレーションのための１つ以上の命令を含んでもよい。加えて、他のパックド命令を含んでもよい。
【００４８】
実行ユニット１３０は、内部バスによって、レジスタファイル１５０に接続される（これは、上述したように、分岐のバス、ポイントツーポイント相互接続、その他を含む任意の通信経路でもよい）。レジスタファイル１５０は、処理コア１１０の情報を格納するためのデータを含む記憶領域を表す。前述のように、データを格納するために使用する記憶領域が限定的でないものと理解されたい。実行ユニット１３０は、デコーダ１６５に接続される。デコーダ１６５は、処理コア１１０によって受信される命令を制御信号および／またはマイクロコード・エントリポイントに復号化するために用いられる。これらの制御信号および／またはマイクロコード・エントリポイントに応答して、これらの制御信号またはマイクロコード・エントリポイントは、実行ユニット１３０に転送されてもよい。制御信号および／またはマイクロコード・エントリポイントに応答して、実行ユニット１３０は、適切なオペレーションを実行する。少なくとも１つの実施例において、例えば、実行ユニット１３０は、本願明細書において記載されている論理比較を実行してもよい。加えて、本願明細書において述べられるステータスフラグをセットし、および／または指定されたコード位置に分岐してもよい。
【００４９】
処理コア１１０は、さまざまな他のシステム機器によって通信するためにバス２１４に接続されている。例えば、同期型ランダムアクセスメモリ（ＳＤＲＡＭ）制御手段２７１、スタティックランダムアクセスメモリ（ＳＲＡＭ）制御手段２７２、バーストフラッシュ・メモリインタフェース２７３、ＰＣＭＣＩＡ／コンパクト・フラッシュ（ＣＦ）カード制御手段２７４、液晶ディスプレイ（ＬＣＤ）制御手段２７５、ダイレクトメモリアクセス（ＤＭＡ）コントローラ２７６および代替バスマスタ・インタフェース２７７を含むが、これに限定されるものではない。
【００５０】
少なくとも１つの実施例において、データ処理システム１０２は、Ｉ／Ｏバス２９５を介してさまざまな入出力デバイスと通信するためのＩ／Ｏブリッジ２９０を有する。例えば、このような入出力デバイスとしては、汎用非同期受信器／送信器（ＵＡＲＴ）２９１、ユニバーサルシリアルバス（ＵＳＢ）２９２、ブルートゥース(登録商標)無線ＵＡＲＴ２９３およびＩ／Ｏ拡張インタフェース２９４を含むが、これに限定されるものではない。上記の他のバスと同様に、Ｉ／Ｏバス２９５は、分岐のバス、ポイントツーポイント相互接続等の、任意の通信経路でもよい。
【００５１】
少なくとも１つのデータ処理システム１０２の実施例は、携帯ネットワークおよび／またはワイヤレス通信、パックドおよびアンパックド・データのＬＣＳＺＣオペレーションを実行することができる処理コア１１０を提供する。処理コア１１０は、オーディオ、ビデオ、および通信アルゴリズムにより動作してもよい。すなわち、個別の変換システム、フィルタまたは畳み込み積分、圧縮／伸長技術、たとえば色空間変換、動き予測ビデオデコードまたは動き補償ビデオエンコード、変調／復調（ＭＯＤＥＭ）機能（例えばパルス符号変調（ＰＣＭ））である。
【００５２】
図１ｃは、パックド、およびアンパックド・データのＬＣＳＺＣオペレーションを実行するデータ処理システム１０３の別の実施例を例示している。１つの別の実施例において、データ処理システム１０３は、メインプロセッサ２２４を含むチップパッケージ３１０および１つ以上のコプロセッサ２２６を有する。追加コプロセッサ２２６は、任意であり、図１ｃにおいて破線で示されている。コプロセッサ２２６の１つ以上は、例えば、ＳＩＭＤ命令を実行することができるグラフィクス・コプロセッサでもよい。
【００５３】
図１ｃにおいて、データプロセッサ・システム１０３は、キャッシュメモリ２７８および入出力システム２６５を含んでもよい（両方ともチップパッケージ３１０に接続される）。入出力システム２９５は、無線インタフェース２９６に任意に接続されてもよい。
【００５４】
コプロセッサ２２６は、一般の計算の処理を実行することができ、ＳＩＭＤオペレーションを実行することも可能である。少なくとも１つの実施例において、コプロセッサ２２６は、パックド、およびアンパックド・データのＬＣＳＺＣオペレーションを実行することができる。
【００５５】
少なくとも１つの実施例において、コプロセッサ２２６は、実行ユニット１３０およびレジスタファイル２０９を有する。少なくとも１つの実施例において、メインプロセッサ２２４は、実行ユニット１３０により実行されるためのＬＣＳＺＣ命令を含む命令セットの命令を認識しデコードするデコーダ１６５を有する。別の実施例において、コプロセッサ２２６は、ＬＣＳＺＣ命令を含む命令セットの命令をデコードするデコーダ１６６の少なくとも一部分を有する。データ処理システム１０３も、本発明の理解に必要でない付加的な回路（図示せず）を含む。
【００５６】
処理において、メインプロセッサ２２４は、キャッシュメモリ２７８および入出力システム２９５でのインタラクションを含む一般のタイプのデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。コプロセッサ命令は、データ処理命令のストリームの内に埋め込まれる。メインプロセッサ２２４のデコーダ１６５は、これらのコプロセッサ命令を付加されたコプロセッサ２２６によって実行されなければならないタイプのものであると認識する。したがって、メインプロセッサ２２４は、コプロセッサの命令（またはコプロセッサ命令を表している制御信号）を相互接続２３６に送出する。コプロセッサは相互接続２３６から命令を取得する。図１ｃに図示される１つのコプロセッサの実施例において、コプロセッサ２２６は、それを目的とする受信されたいかなるコプロセッサ命令をも受け取り、かつ実行する。コプロセッサ相互接続は、分岐のバス、ポイントツーポイント相互接続等の、任意の通信経路でもよい。
【００５７】
データは、コプロセッサ命令による処理のため、無線インタフェース２９６を介して受信されてもよい。１つの実施例において、音声通信はデジタル信号の形で受信されてもよい。このデジタル信号は、音声通信のデジタルオーディオ・サンプル値を再生するためにコプロセッサ命令によって処理されてもよい。他の実施例において、圧縮オーディオまたはビデオはデジタルビットストリームの形で受信されてもよい。それはデジタルオーディオ・サンプルおよび／または動画ビデオ・フレームを再生させるためにコプロセッサ命令によって処理されてもよい。
【００５８】
少なくとも１つの別の実施例において、メインプロセッサ２２４およびコプロセッサ２２６は、実行ユニット１３０、レジスタファイル２０９およびデコーダ１６５を有する単一の処理コアに集積化されてもよい。実行ユニット１３０は、ＬＣＳＺＣ命令を含む命令セットの命令を認識し実行する。
【００５９】
図２ａは、本発明の一実施例におけるプロセッサのレジスタファイルを例示している。レジスタファイル１５０は、情報を格納するために用いられてもよい。情報としては、制御手段／ステータス情報、整数データ、浮動小数点データおよびパックド・データが含まれる。情報およびデータの前述の例示のリストが全てではないことは、当業者にとって明らかである。
【００６０】
図２ａの図示した実施例において、レジスタファイル１５０は、整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８およびインストラクションポインタ・レジスタ２１１を含む。ステータスレジスタ２０８は、プロセッサ１０９のステータスを示し、かつさまざまなステータスレジスタ（例えばゼロフラグおよびキャリーフラグ）を含んでもよい。インストラクションポインタ・レジスタ２１１は、実行する次の命令のアドレスを格納する。整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８およびインストラクションポインタ・レジスタ２１１の全ては、インターナルバス１７０に接続される。追加レジスタは、インターナルバス１７０に接続されてもよい。インターナルバス１７０は、分岐のバスでもよいが、必ずしもそうである必要はない。インターナルバス１７０は、ポイントツーポイント相互接続を含む、任意の通信経路でもよい。
【００６１】
一実施形態において、レジスタ２０９は、パックド・データおよび浮動小数点データのために用いられてもよい。この実施例において、プロセッサ１０９は、いつでも、レジスタ２０９をスタック参照される浮動小数点レジスタとして、またはスタック参照されない、パックド・データ・レジスタとして取り扱ってもよい。本実施例において、プロセッサ１０９が、レジスタ２０９をスタック参照される浮動小数点レジスタとして、またはスタック参照されない、パックド・データ・レジスタとして取り扱い、処理を行うか切り替えるメカニズムを有している。別の実施例において、プロセッサ１０９は、レジスタ２０９を、同時にスタック参照されない浮動小数点およびパックド・データ・レジスタとして、用いてもよい。もう１つの実施例では、これらの同じレジスタが、整数データを格納するために用いられてもよい。
【００６２】
もちろん、別の実施例では、より多くのレジスタあるいは、より少ないレジスタを実装してもよい。例えば、別の実施例は、浮動小数点データを格納するための別個の浮動小数点レジスタのセットを有していてもよい。別の実施例では、それぞれ、制御手段／ステータス情報を格納する第１のセットのレジスタと、整数、浮動小数点およびパックド・データを格納する第２のセットレジスタを含んでいる。より明確に説明すると、実施例のレジスタは、特定の回路のタイプで、その意味が制限されてはならない。むしろ、実施例のレジスタはデータを格納し、かつ提供するだけである、そして、実行する機能は本願明細書において記載される。
【００６３】
レジスタのさまざまなセット（例えば、整数レジスタ２０１、レジスタ２０９）は、異なる数および／または異なるサイズのレジスタを含んで実装されてもよい。例えば、実施例において、整数レジスタ２０１は、３２ビットを格納するために実装される。レジスタ２０９は、８０ビットを格納するために実装される（全８０ビットが、格納浮動小数点データのために使われ、パックド・データのためには、６４ビットが用いられる）。加えて、レジスタ２０９は、８つのレジスタ（Ｒ０２１２ａからＲ７２１２ｈ、Ｒ１２１２ｂ、Ｒ２２１２ｃおよびＲ３２１２ｄは、レジスタ２０９の個々のレジスタの例である）を含んでもよい。レジスタ２０９の３２ビットのレジスタは、整数レジスタ２０１の整数レジスタに移動させてもよい。同様に、整数レジスタの値は、レジスタ２０９の３２ビットのレジスタに移動させてもよい。他の実施形態では、整数レジスタ２０１は各々６４ビットを含む。そして、６４ビットのデータは整数レジスタ２０１とレジスタ２０９の間で移動してもよい。他の代替実施例では、レジスタ２０９は、各々、６４のビットを有し、レジスタ２０９は１６個のレジスタを含む。さらにもう１つの別の実施例において、レジスタ２０９は３２個のレジスタを含む。
【００６４】
図２ｂは、１つの本発明の別の実施例におけるプロセッサのレジスタファイルを例示している。レジスタファイル１５０が情報を格納するために用いられてもよい。情報としては、制御手段／ステータス情報、整数データ、浮動小数点データおよびパックド・データを含む。図２ｂに示す実施例では、レジスタファイル１５０は、整数レジスタ２０１、レジスタ２０９、ステータスレジスタ２０８、拡張レジスタ２１０およびインストラクションポインタ・レジスタ２１１を含む。ステータスレジスタ２０８、インストラクションポインタ・レジスタ２１１、整数レジスタ２０１、レジスタ２０９は、全てインターナルバス１７０に接続される。加えて、拡張レジスタ２１０は、インターナルバス１７０にも接続される。インターナルバス１７０は、分岐のバスでもよいが、必ずしもそうである必要はない。インターナルバス１７０は、ポイントツーポイント相互接続を含む、任意の通信経路でもよい。
【００６５】
少なくとも１つの実施例において、拡張レジスタ２１０が、パックド整数データおよびパックド浮動小数点データのために用いられる。別の実施例において、拡張レジスタ２１０が、スカラー・データ、パックド・ブールデータ、パックド整数データおよび／またはパックド浮動小数点データのために用いられてもよい。もちろん、本発明の広い範囲を逸脱しない限り、別の実施例は、より多くのレジスタ、またはより少ないレジスタを有してもよく、各セットにより多くのレジスタ、またはより少ないレジスタを有してもよく、各レジスタに、より多くのまたはより少ない格納ビットを有してもよい。
【００６６】
少なくとも１つの実施例において、整数レジスタ２０１が３２ビットを格納するために実装され、レジスタ２０９は８０ビットを格納するため実装される（全８０ビットが浮動小数点データを格納するためにつかわれ、６４ビットがパックド・データのために用いられる）。そして、拡張レジスタ２１０は１２８ビットを格納するために実装される。加えて、拡張レジスタ２１０は、８つのレジスタを含んでもよい（ＸＲ０２１３ａからＸＲ７２１３ｈ、ＸＲ０２１３ａ、ＸＲ１２１３ｂおよびＸＲ２２１３ｃは、レジスタ２１０の個々のレジスタの例である）。他の実施例において、整数レジスタ２０１は各々６４ビットを含む。拡張レジスタ２１０は各々６４ビットを含む。拡張レジスタ２１０は１６個のレジスタを有する。実施例において、拡張レジスタ２１０の２つのレジスタは、一対として実装されてもよい。さらにもう１つの別の実施例において、拡張レジスタ２１０は、３２個のレジスタを含んでもよい。
【００６７】
図３は、本発明の一実施例におけるデータを操作するための処理３００のフローチャートを例示している。図３は、例えば、プロセッサ１０９（例えば図１ａを参照）の処理を例示している。すなわち、パックド・データのＬＣＳＺＣオペレーションを実行して、アンパックド・データのＬＣＳＺＣオペレーションを実行すると共に、または若干の他のオペレーションを実行する。処理３００および本願明細書において開示された他のプロセスは、汎用マシンによって、または、特殊目的のマシンまたは、両方の組合せによって専用のハードウェアまたはソフトウェアまたは実行可能なファームウェア・オペレーションコードを有する処理ブロックによって実行される。
【００６８】
図３において、方法のための処理は、「スタート」から始まり、処理ブロック３０１へ進むことを示している。処理ブロック３０１で、デコーダ１６５（例えば図１ａを参照）は、キャッシュ１６０（例えば図１ａを参照）または相互接続１０１（例えば図１ａを参照）から制御信号を受信する。ブロック３０１で受信される制御信号は、少なくとも１つの実施例において、一般にソフトウェア「命令」と呼ばれる一種の制御信号でもよい。デコーダ１６５は、実行されるオペレーションを決定するために、制御信号を復号化する。処理は、処理ブロック３０１から処理ブロック３０２へ進む。
【００６９】
処理ブロック３０２で、デコーダ１６５は、レジスタファイル１５０（図１ａ）またはメモリ（例えば図１ａのメインメモリ１０４またはキャッシュメモリ１６０を参照）の位置にアクセスする。レジスタファイル１５０のレジスタまたはメモリのメモリーロケーションは、制御信号で指定されているレジスタアドレスに応じてアクセスされる。例えば、オペレーションのための制御信号は、ＳＲＣ１、ＳＲＣ２およびＤＥＳＴレジスタアドレスを含んでもよい。ＳＲＣ１は、第１のソースのレジスタのアドレスである。ＳＲＣ２は、第２のソースのレジスタのアドレスである。場合によっては、すべてのオペレーションが２つのソース・アドレスを必要とするというわけではないため、ＳＲＣ２アドレスは任意である。ＳＲＣ２アドレスがオペレーションのために必要とされない場合、ＳＲＣ１アドレスだけが使われる。ＤＥＳＴは、結果データが格納される宛先レジスタのアドレスである。少なくとも１つの実施例において、ＳＲＣ１またはＳＲＣ２は、デコーダ１６５によって認識される制御信号のうちの少なくとも１つのＤＥＳＴとして使われてもよい。
【００７０】
対応するレジスタに格納されるデータはそれぞれＳｏｕｒｃｅ１、Ｓｏｕｒｃｅ２およびＲｅｓｕｌｔと呼ばれる。実施例において、これらのデータの各々は、６４ビット長である。別の実施例において、これらのデータの１つ以上は、他の長さ（例えば長さ１２８ビット）でもよい。
【００７１】
他の実施例において、ＳＲＣ１、ＳＲＣ２およびＤＥＳＴは、プロセッサ１０９（図１ａ）または処理コア１１０（図１ｂ）のアドレス可能メモリ空間のメモリーロケーションを定めてもよい。例えば、ＳＲＣ１はメインメモリ１０４のメモリーロケーションを識別してもよい。その一方で、ＳＲＣ２は整数レジスタ２０１の第１のレジスタを識別する。そして、ＤＥＳＴはレジスタ２０９の第２のレジスタを識別する。説明を簡単にするため本願明細書において、本発明は、レジスタファイル１５０にアクセスするとして説明する。しかしながら、当業者は、これらの記載されているアクセスがその代わりにメモリになされてもよいと認識するはずである。
【００７２】
処理は、ブロック３０２から、処理ブロック３０３へ進む。処理ブロック３０３で、実行ユニット１３０（例えば図１ａを参照）は、アクセスされたデータのオペレーションを実行する。
【００７３】
処理は、処理ブロック３０３から処理ブロック３０４へ進む。処理ブロック３０４で、結果は、制御信号の条件に従って、レジスタファイル１５０またはメモリに格納される。処理は、「停止」のところで終わる。
［データ記憶フォーマット］
【００７４】
図４は、本発明の一実施例におけるパックド・データ型を示している。４つのパックドおよび１つのアンパックド・データフォーマットが例示されている。すなわち、パックド・バイト４２１、パックド・ハーフ４２２、パックド・シングル４２３、パックド・ダブル４２４およびアンパックド・ダブル・クワッドワード４１２を含む。
【００７５】
パックド・バイト形式４２１は、少なくとも１つの実施例において、１６のデータエレメント（Ｂ０−Ｂ１５）を含み長さは１２８ビットである。各データエレメント（Ｂ０−Ｂ１５）は、長さ１バイト（例えば、８ビット）である。
【００７６】
パックド・ハーフ・フォーマット４２２は、少なくとも１つの実施例において、８つのデータエレメント（ＨａＩｆ０からＨａｌｆ７）を含み長さは１２８ビットである。データエレメント（ＨａＩｆ０からＨａｌｆ７）の各々は、１６ビットの情報を保持してもよい。これらの１６ビット・データエレメントの各々は、「ハーフワード」または「ショートワード」または単に「語」と呼ぶことがある。
【００７７】
パックド・シングル・フォーマット４２３は、少なくとも１つの実施例において、長さ１２８ビットでもよい。かつ４つの４２３のデータエレメント（Ｓｉｎｇｌｅ０〜Ｓｉｎｇｌｅ３）を保持してもよい。データエレメント（Ｓｉｎｇｌｅ０〜Ｓｉｎｇｌｅ３）の各々は、３２ビットの情報を保持してもよい。３２ビット・データエレメントの各々は、「ｄｗｏｒｄ」または「ダブルワード」と呼ばれてもよい。データエレメント（Ｓｉｎｇｌｅ０〜Ｓｉｎｇｌｅ３）の各々は、例えば、３２ビット単精度浮動小数点値を保持する。それゆえに、「パックド・シングル」フォーマットとも呼ばれる。
【００７８】
パックド・ダブル・フォーマット４２４は、少なくとも１つの実施例において、長さ１２８ビットでもよい。かつ２つのデータエレメントを保持してもよい。パックド・ダブル・フォーマット４２４の各データエレメント（Ｄｏｕｂｌｅ０、Ｄｏｕｂｌｅ１）は、６４ビット長の情報を保持してもよい。６４ビット・データエレメントの各々は、「ｑｗｏｒｄ」または「クワッドワード」と呼ばれてもよい。データエレメント（Ｄｏｕｂｌｅ０、Ｄｏｕｂｌｅ１）の各々は、例えば、６４ビット倍精度浮動小数点値を表す。それゆえに、「パックド・ダブル」フォーマットとも呼ばれる。
【００７９】
アンパックド・ダブル・クワッドワード・フォーマット４１２は、最高１２８ビットのデータを保持してもよい。データは、必ずしもパックド・データである必要はない。少なくとも１つの実施例において、例えば、アンパックド・ダブル・クワッドワード・フォーマット４１２の情報の１２８のビットは、単一のスカラー・データ（例えば文字、整数、浮動小数点値または２進数ビット・マスク値）を表してもよい。あるいは、アンパックド・ダブル・クワッドワード・フォーマット４１２の１２８のビットは、無関係なビット（例えば、ビットの各ビットまたは一組が異なるフラグを表すステータスレジスタ値）、等の集約を表してもよい。
【００８０】
少なくとも本発明の一実施例において、パックド・シングル４２３およびパックド・ダブル４２４のフォーマットのデータエレメントは、上記のようにパックド浮動小数点データエレメントでもよい。本発明の他の実施態様では、パックド・シングル４２３およびパックド・ダブル４２４のフォーマットのデータエレメントはパックド整数、ブール変数、パックド浮動小数点データエレメントであってもよい。他の本発明の別の実施例において、パックド・バイト４２１、パックド・ハーフ４２２、パックド・シングル４２３およびパックド・ダブル４２４のフォーマットのデータエレメントは、パックド整数またはパックド・ブール・データエレメントでもよい。本発明の別の実施例において、パックド・バイト４２１、パックド・ハーフ４２２、パックド・シングル４２３およびパックド・ダブル４２４のデータフォーマットの全てが、必ずしも許されなくてもよく、またサポートされなくてもよい。
【００８１】
図５および６は、少なくとも本発明の一実施例におけるレジスタのパックド・データ記憶表現を例示している。
【００８２】
図５に、それぞれ、符号無し、符号付きパックド・バイト・レジスタのフォーマット５１０および５１１を示す。符号無しパックド・バイト・レジスタ表現５１０は、符号無しパックド・バイト・データの記憶を示している、例えば、２８ビット長拡張レジスタのＸＲ０２１３ａからＸＲ７２１３ｈ（例えば図２ｂを参照）である。１６バイト・データの各々のエレメントに、情報が以下のように格納される。バイト０としてビット７からビット０、バイト１としてビット１５からビット８、バイト２としてビット２３からビット１５、バイト３としてビット３１からビット２４、バイト４としてビット３９からビット３２、バイト５としてビット４７からビット４０、バイト６としてビット５５からビット４８、バイト７としてビット６３からビット５６、バイト８としてビット７１からビット６４、バイト９としてビット７９からビット７２、バイト１０としてビット８７からビット８０、バイト１１としてビット９５からビット８８、バイト１２としてビット１０３からビット９６、バイト１３としてビット１１１からビット１０４、バイト１４としてビット１１９からビット１１２、バイト１５としてビット１２７からビット１２０、となる。
【００８３】
このように、すべての利用できるビットが、レジスタにおいて使われる。この記憶装置の利用方法は、プロセッサの記憶領域の利用を効率化する。また、１６のデータエレメントにアクセスして、１つのオペレーションが、同時に１６のデータエレメントに実行されてもよい。
【００８４】
符号付きパックド・バイト・レジスタ表現５１１は、符号付きパックド・バイトの記憶を示している。あらゆるバイト・データエレメントの第８の（ＭＳＢ）ビットが符号インジケータ（ｓ）であることに注意されたい。
【００８５】
図５は、それぞれ、符号無し、符号付きパックド・ワード・レジスタの表現５１２および５１３を示している。
【００８６】
符号無しパックド・ワード・レジスタ表現５１２は、拡張レジスタ２１０がどのように８つのワード（それぞれ１６ビット）データエレメントを保存するかを示している。ワード０は、レジスタのビット０からビット１５に保存される。ワード１は、レジスタのビット３０からビット１６に保存される。ワード２は、レジスタのビット３２からビット４７に保存される。ワード３は、レジスタのビット４８からビット６３に保存される。ワード４は、レジスタのビット６０からビット７９に保存される。ワード５は、レジスタのビット９０からビット８０に保存される。ワード６は、レジスタのビット９６からビット１１１に保存される。ワード７は、レジスタのビット１１２からビット１２７に保存される。
【００８７】
符号付きパックド・ワード・レジスタ表現５１１は、符号無しパックド・ワード・レジスタ表現５１２に似ている符号ビット（ｓ）が各語データエレメントの第１６のビット（ＭＳＢ）に格納されることに注意されたい。
【００８８】
図６は、それぞれ、符号無し、かつ符号付きパックド・ダブルワード・レジスタのフォーマット５１４および５１５を示している。符号無しパックド・ダブルワード・レジスタ表現５１４は、拡張レジスタ２１０がどのように４つのダブルワード（それぞれ３２ビット）データエレメントを保存するかについて示している。ダブルワード０は、レジスタのビット３１からビット０に格納される。ダブルワード１は、レジスタのビット３０からビット６３に格納される。ダブルワード２は、レジスタのビット９０からビット６０に格納される。ダブルワード３は、レジスタのビット９６からビット１２７に格納される。
【００８９】
符号付きパックド・ダブルワード・レジスタ表現５１５は、符号無しパックド・クワッドワード・レジスタ表現５１６と同様である。符号ビット（ｓ）が各ダブルワード・データエレメントの第３２のビット（ＭＳＢ）であることに注意されたい。
【００９０】
図６は、それぞれ、符号無し、符号付きパックド・クワッドワードのレジスタ内フォーマット５１６および５１７を示している。符号無しパックド・クワッドワード・レジスタ表現５１６は、拡張レジスタ２１０がどのように２つのクワッドワード（それぞれ６４ビット）データエレメントを保存するかについて示す。クワッドワード０は、レジスタのビット６３からビット０に保存される。クワッドワード１は、レジスタのビット６０からビット１２７に格納される。
【００９１】
符号付きパックド・クワッドワード・レジスタ表現５１７は、符号無しパックド・クワッドワード・レジスタ表現５１６と同様である。符号ビット（ｓ）が各クワッドワード・データエレメントの第６４のビット（ＭＳＢ）であることに注意されたい。
［論理的比較、ゼロおよびキャリーフラグ設定オペレーション］
【００９２】
少なくとも１つの実施例において、ＳＲＣ１レジスタは、パックド・データまたはアンパックド・ダブル・クワッドワード・データ（Ｓｏｕｒｃｅ１）を保持し、ＤＥＳＴレジスタも同様に、パックド・データまたはアンパックド・ダブル・クワッドワード・データ（Ｄｅｓｔ）を保持する。ＤＥＳＴレジスタのＤｅｓｔおよびＳＲＣ１レジスタのＳｏｕｒｃｅ１の値は、少なくとも１つの実施例において、アンパックドのダブル・クワッドワード・データのビットマスク値を保持してもよい。
【００９３】
通常、ＬＣＳＺＣ命令の第１のステップで、２つの比較動作が、実行される。第１の中間結果は、Ｓｏｕｒｃｅ１の各ビットと対応するＤｅｓｔの各ビット独立論理比較（ビットごとの論理積演算）を実行することによって生成される。第２の中間結果は、Ｄｅｓｔの各ビットの補数と対応するＳｏｕｒｃｅ１の各ビットの独立論理比較（ビットごとの論理積演算）を実行することによって生成される。これらの中間結果は、一時記憶位置（例えば、レジスタ）に格納されてもよいし、または何らプロセッサによって保存されなくてもよい。
【００９４】
図７ａは、少なくとも本発明の一実施例におけるＬＣＳＺＣオペレーションを実行する一般の方法７００のフローチャートである。処理７００および本願明細書に開示されている他のプロセスは、汎用マシンによって、または、特殊目的マシンによって、または、両方の組合せによって専用のハードウェアまたはソフトウェアまたは実行可能ファームウェア・オペレーションコードを含む処理ブロックによって実行される。図７ａから図７ｄについては、図７ａを参照しながら以下説明する。
【００９５】
図７ａは、処理７００が、まず「スタート」から開始され、処理ブロック７０１へ進むことを示す。処理ブロック７０１で、デコーダ１６５は、プロセッサ１０９によって受信される制御信号を復号する。このようにして、デコーダ１６５は、ＬＣＳＺＣ命令のオペレーションコードを復号する。処理は、それから処理ブロック７０１から処理ブロック７０２へ進む。
【００９６】
処理ブロック７０２で、内部バス１７０を介して、デコーダ１６５は、コード化された命令の、ＳＲＣ１およびＤＥＳＴアドレスを与えられたレジスタファイル１５０内のレジスタ２０９にアクセスする。少なくとも１つの実施例において、コード化された各々命令のアドレスは、拡張レジスタを示す（例えば図２ｂの拡張レジスタ２１０を参照）。かかる実施例において、ブロック７０２においては、ＳＲＣ１レジスタ（ソース１）に格納されたデータ、およびＤＥＳＴに格納されたデータ（Ｄｅｓｔ）を、実行ユニット１３０に提供するために、示された拡張レジスタ２１０がアクセスされる。少なくとも１つの実施例において、拡張レジスタ２１０は、内部バス１７０を介して実行ユニット１３０にデータを伝える。
【００９７】
処理は、処理ブロック７０２から、処理ブロック７０３へ進む。処理ブロック７０３で、デコーダ１６５は、実行ユニット１３０がインストラクションを実行することを可能にする。少なくとも１つの実施例において、かかる処理７０３で、所望のオペレーション（ＬＣＺＣＳ）を示すために実行ユニットに対する１つ以上の制御信号が送信される。処理は、ブロック７０３から、処理ブロック７１４および７１５へ進む。ブロック７１４および７１５が並列に示されているが、それらが同じサイクルかまたはサイクルのセット中において実行される限りにおいて、かかるオペレーションが正確に同時に実行される必要がある。あるいは、少なくとも１つの別の実施例において、ブロック７１４および７１５の処理が直列的に実行されてもよいと、当業者は認識するであろう。異なる実施例では、このように並列のブロック７１４および７１５を、並列に、直列に、または、並列および直列したオペレーションの部分的組合せによって処理してもよい。
【００９８】
処理ブロック７１４では、以下の処理が実行される。Ｓｏｕｒｃｅ１の全てまたはいくつかのビットが、Ｄｅｓｔの値の同じく対応するそれぞれのビットと論理積演算が実行される。同様に、処理ブロック７１５で、Ｓｏｕｒｃｅ１の全てまたはいくつかのビットが、Ｄｅｓｔ値の同じく対応するそれぞれのビットの補数と論理積演算が実行される。
【００９９】
処理は、ブロック７１４から、ブロック７２０へ進む。また、処理は、ブロック７１５から、ブロック７２１へ進む。
【０１００】
処理ブロック７２０で、プロセッサの状態は、処理ブロック７１４で実行される比較の結果に基づいて修正される。同様に、処理ブロック７２１で、プロセッサの状態は、処理ブロック７１５で実行される比較の結果に基づいて修正される。当業者は、図７ａに図示される処理７００が、ノンデストラクティブであるということに留意されたい。すなわち、Ｓｏｕｒｃｅ１およびＤｅｓｔオペランド値はＬＣＳＺＣオペレーションの結果として、変更されない。その代わりに、ゼロフラグがブロック７２０で修正される、そして、キャリーフラグがブロック７２１で修正される。
【０１０１】
処理ブロック７２０で、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１のすべてのビットがゼロ（例えば、論理的にｌｏｗの値）に等しい場合、ゼロフラグの値は、真値（例えば、論理値Ｈｉｇｈ）にセットされる。しかしながら、ブロック７２０において、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１の少なくとも１つのビットが論理Ｈｉｇｈの値の場合、ゼロフラグの値は、偽値（例えば、論理値Ｌｏｗ）にセットされる。
【０１０２】
処理ブロック７２１において、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のすべてのビットがゼロ（例えば、論理値Ｌｏｗ）に等しい場合、キャリーフラグの値は真値（例えば、論理値Ｈｉｇｈ）にセットされる。しかしながら、ブロック７２１において、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のすくなくとも１つのビットが論理値Ｈｉｇｈの値の場合、キャリーフラグは、偽値（例えば、論理値Ｌｏｗ）にセットされる。
【０１０３】
処理ブロック７１４および７２０だけ実装し処理ブロック７１５および７２１は実装しなくてもよい。あるいは、処理ブロック７１５および７２１だけ実装し処理ブロック７１４および７２０は実装しなくてもよい。また、処理７００の他の実施例においては、ＬＣＳＺＣ命令の付加的なバリエーションをサポートするために付加された処理ブロックを実装してもよい。
【０１０４】
ブロック７２０および７２１から、処理は、任意にブロック７２２へ進んでもよい。ブロック７２２で、プロセッサ内の他の状態ビットが、修正されてもよい。少なくとも１つの実施例において、これらの状態ビットは、例えば、１つ以上の他の設計上認識できるステータスフラグ値を含んでもよい。これらのフラグは、１または２ビット値でもよい。これらの例としては、parity  (PF),  auxiliary  carry  (AF),  sign  (SF),  trap  (TF),  interrupt  enable/disable  (IF),  direction  (DF),  overflow  (OF),  I/O  privilege  level  (IOPL),  nested  task  (NT),  resume  (RF),  virtual  8086  mode  (VM),  alignment  check  (AC),  virtual  interrupt  (VIF),  virtual  interrupt  pending  (FIP),  and  CPU  identifier  (ID)等である。もちろん、特定のフラグの前述のリストは、例示を目的としている。他の実施例は、より少ない、あるいは、より多くの、異なるフラグを含んでもよい。
【０１０５】
ブロック７２２の次は、「終了」となる。処理は、オプションのブロック７２２を含まない実施例においては、ブロック７２０および７２１の処理の後「終了」となる。
【０１０６】
図７ｂは、図７ａに図示される一般の処理７００の少なくとも１つの特定実施例７００ｂのためのフローチャートを示している。図７ｂに図示される特定実施例７００ｂにおいて、ＬＣＳＺＣオペレーションは、１２８ビット長のＳｏｕｒｃｅ１およびＤｅｓｔデータ値に対して実行される。これは、パックド・データあるいはアンパックド・データのいずれでもよい。（もちろん、当業者は図７ｂに図示されるオペレーションが他の長さのデータ値で実行されてもよいと認識するであろう。すなわち、１２８ビットより短いか、あるいはより長いものを含む）
【０１０７】
方法７００ｂの処理ブロック７０１ｂから７０３ｂによる処理は、基本的に図７ａに図示した方法７００に関連して記載されている処理ブロック７０１から７０３と同じ操作である。デコーダ１６５が実行ユニット１３０に対して、ブロック７０３ｃのインストラクションを実行することを可能にするときに、ＬＣＳＺＣ命令は、Ｓｏｕｒｃｅ１およびＤｅｓｔ値のそれぞれのビットの論理積比較を実行する。（図６に図示される符号付きパックド・ダブルワード・レジスタ表現５１５参照）かかる命令は、アプリケーションプログラマによって命令簡略記憶記号、例えば「ＰＴＥＳＴ」、として使われる。処理は、ブロック７０３ｃから、ブロック７１４ｃおよび７１５ｃへ進む。また、処理７１４ｃおよび７１５ｃは、並列に実行されてもよいが、必ずしもそのように実行される必要があるというわけではない。
【０１０８】
処理は、処理ブロック７０３ｂから、処理ブロック７１４ｂおよび７１５ｂへ進む。図７ａの処理ブロック７１４および７１５に示されるように、処理７１４ｂおよび７１５ｂが並列に実行されるとして図７ｂに図示されるが、本発明がこの点に関しては制限されない点に留意する必要がある。その代わりに、異なる実施例は、並列なブロック７１４ｂおよび７１５ｂが、直列に、または、並列および直列したオペレーションの部分的な組合せの処理を実行してもよい。
【０１０９】
処理ブロック７１４ｂで、次の部分が実行される。Ｓｏｕｒｃｅ１の全てのビットは、同じ対応するＤｅｓｔ値のそれぞれのビットと論理積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１のビット［１２７：０］には、Ｄｅｓｔ［１２７：０］とＳｏｕｒｃｅ１［１２７：０］のそれぞれのビットのビットごとの論理積演算の結果が割り当てられる。
【０１１０】
同様に、処理ブロック７１５ｂで、Ｓｏｕｒｃｅ１ビットの全ては、Ｄｅｓｔ値の同じく対応するビットの補数と論理積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のビット［１２７：０］は、Ｄｅｓｔ［１２７：０］のそれぞれの補数のビットとＳｏｕｒｃｅ１［１２７：０］のビットのビットごとの論理積演算の結果を保持する。
【０１１１】
処理は、ブロック７１４ｂから、ブロック７２０ｂへ進む。そして処理は、ブロック７１５ｂから、ブロック７２１ｂへ進む。
【０１１２】
処理ブロック７２０ｂで、プロセッサの状態は、処理ブロック７１４ｂで実行される比較の結果に基づいて修正される。同様に、処理ブロック７２１ｂで、プロセッサの状態は、処理ブロック７１５ｂでなされる比較の結果に基づいて修正される。当業者は、図７ｂに図示される処理７００ｂが、ノンデストラクティブであるということに留意されたい。すなわち、Ｓｏｕｒｃｅ１およびＤｅｓｔオペランド値はＬＣＳＺＣオペレーションの結果として、変更されない。その代わりに、ゼロフラグがブロック７２０ｂで修正される、そして、キャリーフラグがブロック７２１ｂで修正される。
【０１１３】
処理ブロック７２０ｂで、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１（例えば、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１のビット［１２７：０］）のすべてのビットがゼロ（例えば、論理値Ｌｏｗ）に等しい場合、ゼロフラグの値は真値（例えば、論理値Ｈｉｇｈ）がセットされる。しかしながら、ブロック７２０ｂにおいてＩｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１の１ビットでも論理値Ｈｉｇｈである場合、ゼロフラグは偽値（例えば、論理値Ｌｏｗ）にセットされる。
【０１１４】
処理ブロック７２１ｂで、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２（例えば、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のビット［１２７：０］）のすべてのビットがゼロ（例えば、論理値Ｌｏｗ）に等しい場合、キャリーフラグの値は真値（例えば、論理値Ｈｉｇｈ）にセットされる。しかしながら、ブロック７２１ｂにおいて、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２の１ビットでも論理値Ｈｉｇｈである場合、キャリーフラグは偽値（例えば、論理値Ｌｏｗ）に対セットされる。
【０１１５】
方法７００ｂの別の実施例では、処理ブロック７１４ｂおよび７２０ｂだけを実装し、処理ブロック７１５ｂおよび７２１ｂを実装しなくてもよい。あるいは、処理ブロック７１５ｂおよび７２１ｂだけで、処理ブロック７１４ｂおよび７２０ｂを実装しなくてもよい。方法７００ｂの別の実施例がＬＣＳＺＣ命令の付加的なバリエーションをサポートするために付加された処理ブロックを実装してもよい。
【０１１６】
ブロック７２０ｂおよび７２１ｂから、処理は、ブロック７２２ｂへ任意に進んでもよい。ブロック７２２ｂで、プロセッサ内の他の状態ビットが、修正されてもよい。図７ｂに図示される実施例において、ＡＦ（補助キャリー）、ＯＦ（オーバーフロー）、ＰＦ（パリティ）およびＳＦ（サイン）フラグは、ブロック７２２ｂで論理値Ｌｏｗに割り当てられる。
【０１１７】
処理は、オプションのブロック７２２ｂで「終了」する。オプションのブロック７２２ｂを含まない実施例において、処理は、ブロック７２０ｂおよび７２１ｂでの処理の後「終了」する。
【０１１８】
両実施例の処理ブロック７１４、７１４ｂ、７１５または７１５ｂは、符号付き、あるいは符号無しデータエレメント、または、両方の組合せの論理的比較演算を実行してもよいことはいうまでもない。
【０１１９】
図７ｃは、図７ａに図示される一般の方法７００の少なくとも１つの他の特定実施例７００ｃのフローチャートを示している。図７ｃに図示される特定実施例７００ｃにおいて、ＬＣＳＺＣオペレーションは、長さ１２８ビットであるＳｏｕｒｃｅ１およびＤｅｓｔデータ値に対して実行される。ソースオペランド、またはデスティネーションオペランド、あるいは、両方ともパックドでもよい。すなわち、ソースオペランドが、１２８ビット・データ値が４つのパックド３２ビット（「ダブルワード」）データエレメントを表すことになる。例えば、データエレメントが、各々３２ビット符号付きの単精度浮動小数点であってもよい。
【０１２０】
もちろん、当業者は、図７ｃに図示されるオペレーションが他の長さのデータ値のために実行されてもよいと認識するであろう。たとえば、１２８ビットより長い、あるいは短いデータエレメント、あるいはバイト（８ビット）および／またはショートワード（１６ビット）をも含む。
【０１２１】
方法７００ｃの処理ブロック７０１ｃから７０３ｃの処理は、図７ａに図示される方法７００に記載されている処理ブロック７０１〜７０３と基本的に同じ操作を行う。前述の説明に関する例外は、処理ブロック７０３ｃにおいて、デコーダ１６５が、実行ユニット１３０にインストラクションを実行することを指示するときに、命令がＳｏｕｒｃｅ１およびＤｅｓｔｉｎａｔｉｏｎ値の各３２ビット・ダブルワードのＭＳＢの論理積比較を実行するためのＬＣＳＺＣ命令であるということである。（図６に図示される符号付きパックド・ダブルワード・レジスタ表現５１５参照）かかる命令は、プログラマによって使われる命令簡略記憶記号、例えば「ＴＥＳＴＰＳ」、と呼ばれる。ここで「ＰＳ」は、パックド・シングル（Ｐａｃｋｅｄ  Ｓｉｎｇｌｅ）単精度データエレメントを示す。
【０１２２】
処理は、ブロック７０３ｃから、ブロック７１４ｃおよび７１５ｃへ進む。また、処理７１４ｃおよび７１５ｃは、並列に実行されてもよいが、必ずしもそのように実行される必要はない。
【０１２３】
処理ブロック７１４ｃで、次の内容が実行される。Ｓｏｕｒｃｅ１のビットの全ては、同じく対応するＤｅｓｔ値のビットと論理積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１のビット［１２７：０］は、Ｄｅｓｔ［１２７：０］とＳｏｕｒｃｅ１［１２７：０］のそれぞれのビットのビットごとの論理積演算の結果が割り当てられる。
【０１２４】
同様に、処理ブロック７１５ｃにおいて、Ｓｏｕｒｃｅ１ビットの全ては、同じく対応するＤｅｓｔ値のビットの補数と論理的積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のビット［１２７：０］は、Ｄｅｓｔ［１２７：０］のそれぞれのビットの補数とＳｏｕｒｃｅ１［１２７：０］のビットのビットごとの論理積演算の結果が割り当てられる。
【０１２５】
処理は、ブロック７１４ｃから、ブロック７２０ｃへ進む。また、処理は、ブロック７１５ｃから、ブロック７２１ｃへ進む。
【０１２６】
ブロック７２０ｃで、第１の中間の値（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ１）の各３２ビット・ダブルワードのＭＳＢが判断される。ブロック７２０ｃにおいて、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ１のビット１２７、９５、６３および３１がゼロに等しい場合、ゼロフラグは論理値Ｈｉｇｈにセットされる。ブロック７２０ｃにおいてそれ以外のときは、ゼロフラグは、論理値Ｌｏｗにセットされる。
【０１２７】
同様に、ブロック７２１ｃで、第２の中間の値（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ２）の各３２ビット・ダブルワードのＭＳＢが判断される。ブロック７２１ｃにおいて、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ２のビット１２７、９５、６３および３１がゼロに等しい場合、キャリーフラグは、論理値Ｈｉｇｈにセットされる。ブロック７２１ｃにおいてそれ以外のときは、キャリーフラグは、論理値Ｌｏｗにセットされる。ソースレジスタ（ＳＲＣ１）のオリジナル値（Ｓｏｕｒｃｅ１）、およびデスティネーション・レジスタ（ＤＥＳＴ）のオリジナル値（Ｄｅｓｔ）は、方法７００ｃの処理の結果によって修正されない。
【０１２８】
処理は、ブロック７２０ｃおよび７２１ｃで「終了」するか、または、オプショナルの処理ブロック７２２ｃに進行する。ブロック７２２ｃで、プロセッサの内の他の状態ビットが、修正されてもよい。図７ｃに図示される実施例において、ブロック７２２ｃで、ＡＦ（補助キャリー）、ＯＦ（オーバーフロー）、ＰＦ（パリティ）およびＳＦ（サイン）フラグは、論理値Ｌｏｗに割り当てられる。
【０１２９】
オプショナルのブロック７２２ｃを含まない実施例において、処理は、ブロック７２０ｃおよび７２１ｃでの処理の後「終了」する。オプショナルのブロック７２２ｃを含む実施例において、処理は、処理ブロック７２２ｃの完了の後に終わる。
【０１３０】
図７ｄは、図７ａに図示される一般の方法７００の少なくとも１つの他の特定実施例７００ｄのためのフローチャートを示している。図７ｄに図示される特定実施例７００ｄにおいて、ＬＣＳＺＣオペレーションは、１２８ビット長のＳｏｕｒｃｅ１およびＤｅｓｔデータ値に実行される。ソースまたはデスティネーションオペランドあるいは、両方ともパックドでもよい。すなわち１２８ビット・データ値のソースオペランドが２つのパックド６４ビット・データエレメントを表す。データエレメントは、例えば、６４ビット符号付き倍精度浮動小数点値を各々表してもよい。
【０１３１】
もちろん、当業者は、図７ｄに図示されるオペレーションが他の長さのデータ値のために実行されてもよいと認識するであろう。上記は、１２８ビットより長いか、短いデータエレメントの他のサイズを含む。バイト（８ビット）および／またはショートワード（１６ビット）をも含む。
【０１３２】
方法７００ｃの７０１ｄから７０３ｄによるオペレーションは、図７ａに図示された方法７００に関連して記載されている処理ブロック７０１から処理ブロック７０３と基本的に同様の操作をする。前述の記述に関する例外は、処理ブロック７０３ｄにおいて、デコーダ１６５が実行ユニット１３０にインストラクションを実行させるときに、命令がＳｏｕｒｃｅ１およびＤｅｓｔｉｎａｔｉｏｎ値の各６４ビット・ダブルワードのＭＳＢの論理積比較を実行するためのＬＣＳＺＣ命令であるということである。（図６に図示される符号付きパックド・クワッドワード・レジスタ表現５１７参照）。かかる命令は、プログラマによって使われる命令簡略記憶記号、例えば「ＴＥＳＴＰＤ」と呼ばれる。ここで、「ＰＤ」は、パックド・ダブル（Ｐａｃｋｅｄ  Ｄｏｕｂｌｅ）倍精度データエレメントを示す。
【０１３３】
処理は、ブロック７０３ｄから、ブロック７１４ｄおよび７１５ｄへ進む。また、ブロック７１４ｄおよび７１５ｄは、並列に実行されてもよいが、必ずしもそのように実行される必要はない。
【０１３４】
処理ブロック７１４ｄで、次の処理が、実行される。Ｓｏｕｒｃｅ１のビットの全ては、同じく対応するＤｅｓｔ値のビットと論理積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ１のビット［１２７：０］は、Ｄｅｓｔ［１２７：０］とＳｏｕｒｃｅ１［１２７：０］とのそれぞれのビットのビットごとの論理積演算の結果を割り当てられる。
【０１３５】
同様に、処理ブロック７１５ｄにおいて、Ｓｏｕｒｃｅ１ビットの全ては、同じく対応するＤｅｓｔ値のビットの補数と論理積演算される。すなわち、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ２のビット［１２７：０］は、Ｄｅｓｔ［１２７：０］のそれぞれの補数のビットとＳｏｕｒｃｅ１［１２７：０］のビットのビットごとの論理積演算の結果を割り当てられる。
【０１３６】
処理は、ブロック７１４ｄから、ブロック７２０ｄへ進む。また。処理は、ブロック７１５ｄから、７４１ｄへ進む。
【０１３７】
ブロック７２０ｄで、第１の中間の値（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ１）の各６４ビットクワッドワードのＭＳＢが判断される。ブロック７２０ｄにおいて、Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ１のビット１２７および６３がゼロに等しい場合、ゼロフラグは論理値Ｈｉｇｈにセットされる。ブロック７２０ｄにおいて、それ以外の場合は、ゼロフラグは、論理値Ｌｏｗにセットされる。
【０１３８】
同様に、ブロック７２１ｄで、第２の中間の値（Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ２）の各６４ビットクワッドワードのＭＳＢが判断される。ブロック７２１ｄにおいてＩｎｔｅｒｍｅｄｉａｔｅ  Ｖａｌｕｅ２のビット１２７および６３がゼロに等しい場合、キャリーフラグは論理値Ｈｉｇｈにセットされる。ブロック７２１ｄにおいて、それ以外の場合には、キャリーフラグは、論理値Ｌｏｗにセットされる。ソースレジスタ（ＳＲＣ１）のオリジナル値（ソース１）、およびデスティネーション・レジスタ（ＤＥＳＴ）のオリジナル値（Ｄｅｓｔ）は、方法７００ｄの処理の結果として、修正されない。
【０１３９】
ブロック７２０ｄおよび７２１ｄで処理は「終了」するか、または、オプションの処理ブロック７２２ｄに進行する。ブロック７２２ｄで、プロセッサ内の他の状態ビットが、修正されてもよい。図７ｄに図示される実施例において、ＡＦ（補助キャリー）、ＯＦ（オーバーフロー）、ＰＦ（パリティ）およびＳＦ（サイン）フラグは、ブロック７２２ｄで論理値Ｌｏｗに割り当てられる。
【０１４０】
任意のブロック７２２ｄを含まない実施例において、処理は、ブロック７２０ｄおよび７２１ｄの処理の後「終了」する。オプションのブロック７２２ｃを含む実施例において、処理は、処理ブロック７２２ｃの完了の後終わる。
［論理的比較、ゼロおよびキャリーフラグ設定回路］
【０１４１】
少なくとも幾つかの実施例において、パックド・データに対する、多様なＬＣＳＺＣ命令（上記のＴＥＳＴＰＳおよびＴＥＳＴＰＤ）は、同数のクロックサイクルで、同様に、複数のデータエレメントに対しアンパックド・データに対する比較動作として実行できる。同数のクロックサイクルにおいて実行を行うために、パラレリズムが、利用されてもよい。すなわち、プロセッサ（例えばレジスタおよび実行ユニット）のエレメントは、同時に、データエレメントのＬＣＳＺＣオペレーションを実行するように指示されてもよい。この並行オペレーションについては、以下、更に詳細に述べる。図８ａおよび８ｂに関して、図１ａを参照しながら説明する。
【０１４２】
図８ａは、少なくとも本発明の一実施例におけるパックド・データのＬＣＳＺＣオペレーションを実行するための回路８０１を示している。回路８０１は、少なくとも１つの実施例において、図１ａに図示される論理比較回路１４５の全部または一部でもよい。
【０１４３】
図８ａは、ソースオペランドＳｏｕｒｃｅ１［１２７：０］８３１およびデスティネーションオペランドＤｅｓｔ［１２７：０］８３３を表す。少なくとも１つの実施例において、ソースおよびデスティネーションは、Ｎ―ビット長ＳＩＭＤレジスタである。たとえば、１２８ビットＩｎｔｅｌ（Ｒ）ＳＳＥ２  ＸＭＭレジスタ（例えば、図２ｂの拡張レジスタ２１０参照）に保存される。
【０１４４】
図８ａに図示される特定の実施例は、ＬＣＳＺＣ命令のダブル・クワッドワード（１２８ビット）実施例を示す。ここで、１２８ビット・ソースの各ビットと、デスティネーションオペランドのそれぞれのビットとが比較される。かかる実施例において、各ビットが比較されるので、オペレーションはソースおよびデスティネーションオペランドの１２８ビットのいかなる性質にも機能的に関知しない。ソースおよびデスティネーションオペランドは、どちらかまたは両方とも、パックド・データ、アンパックド・スカラー・データ、符号付きデータまたは符号無しデータであってもよい。特定の具体例において、パックド・データ・ソース８３１およびデスティネーション８３３は、１２８ビットを有するが、本願明細書において開示される原理は、他の既存の長さ、例えば８０ビット、１２８ビットまたは２５６ビットまで広げられてもよいことはいうまでもない。
【０１４５】
オペレーション制御手段８００は、回路８０１によって実行されるオペレーションを制御するために、イネーブル８８０上に信号を出力する。オペレーション制御手段８００の一実施例は、例えば、デコーダ１６５およびインストラクションポインタ・レジスタ２１１を有してもよい。もちろん、オペレーション制御手段８００は、本発明を理解することに必要でない追加回路を有してもよい。ＬＣＳＺＣ回路８０１は、２セットのＡＮＤゲート（８２５、８２７）を含む。各セットは、ソースオペランドの各ビットに対して１つのＡＮＤゲートを含む。このように、ソースおよびデスティネーションが１２８ビットを有する実施例においては、第１のセット８２５は１２８のＡＮＤゲート８１９を含み、そして、第２のセット８２７は１２８のＡＮＤゲート８２０を含む。ソースおよびデスティネーションオペランド（例えば図８ａのビット値８５４を参照）の１２８ビット値の各々は、第１のセット８２５のＡＮＤゲート８１９のうちの１つへの入力であり、第２のセット８２７のＡＮＤゲート８２０のうちの１つへの入力でもある。第２のセットＡＮＤゲート８２７は、デスティネーションオペランド８３３が反転されて補数となった後に、入力を受信する点に留意する必要がある（インバータ論理８４４を参照）。
【０１４６】
第１のセット８２５のＡＮＤゲート８１９の各々の出力は、ＮＡＮＤゲート８５４へ入力される。ＮＡＮＤゲート８５４の少なくとも１つの目的は、ソースとデスティネーションの論理積の結果でビットがすべてのゼロ（論理値Ｌｏｗ）であるかを判断することにある。もし、そうであれば、論理値Ｈｉｇｈをゼロフラグ８５８にセットする。
【０１４７】
第２のセット８２７のＡＮＤゲート８２０の各々の出力は、ＮＡＮＤゲート８５６へ入力される。ＮＡＮＤゲート８５６の少なくとも１つの目的は、ソース８３１のビットとデスティネーションのビット８３３の補数の論理積の結果でビットが全てゼロ（論理値Ｌｏｗ）であるかを判断することである。もし、そうであれば、論理値Ｈｉｇｈをキャリーフラグ８６０にセットする。
【０１４８】
ダブル・クワッドワードＬＣＳＺＣ命令の別の実施例は、ソースおよびデスティネーションの符号無しダブル・クワッドワード値のためのオペレーション、およびソースおよびデスティネーションの符号付きダブル・クワッドワード値のためのオペレーションを含んでもよい。なお、上記に限定されるものではない。ＬＣＳＺＣ命令の他の別の実施例は、他のサイズの符号付きまたは符号無しデータエレメントのオペレーションを含んでもよい。（例えば、符号付きダブルワード実施例のための図８ｂおよび符号付きクワッドワード実施例のための図８ｃを参照）
【０１４９】
図８ｂは、１つの本発明の別の実施例におけるパックド・データのＬＣＳＺＣオペレーションを実行するための回路８０１ｂの少なくとも１つの例を示している。オペレーション制御手段８００は、パックドＬＣＳＺＣ命令のための制御信号を処理する。かかるパックドＬＣＳＺＣ命令は、実施例において、ＬＣＳＺＣオペレーションが４つのパックド３２ビット値に実行されることを指示する「ＴＥＳＴＰＳ」命令でもよい。パックド３２ビット値の各々は、例えば、単精度浮動小数点値を表してもよい。かかる実施例において、オペランド（例えば、ソース８３１またはデスティネーション８３３）のうちの１つのみがパックド単精度浮動小数点値を含むことを理解すべきである。他のオペランドは、例えば、ビットマスクを含んでもよい。
【０１５０】
図８ａは、ＬＣＳＺＣ回路８０１ｂを制御するために、オペレーション制御手段８００が、イネーブル８８０上に、信号を出力する。［当業者は、図８ｂに図示されるＬＣＳＺＣ回路８０１ｂが図８ａに図示されるＬＣＳＺＣ回路８０１の論理素子のサブセットを活性化することにより実現してもよいことを認識するであろう］
【０１５１】
ＬＣＳＺＣ回路８０１ｂは、２つのセットのＡＮＤゲートを含む、ここで、各セットは、デスティネーションオペランドの対応するビットとソースオペランドの各ビットとを比較するための１つのＡＮＤゲートを含む。図８ｂに図示される実施例において、４つの３２ビット（「ダブルワード」）データエレメントの各々のための最上位ビットが、比較される。このように、ＡＮＤゲートの第１のセットは、８１９１から８１９４によるゲートを含み、ＡＮＤゲート第２のセットは８２０１から８２０４によるゲートを含む。
【０１５２】
図８ｂは、ソースオペランド８３１の４つの３２ビット・データエレメントの各々およびデスティネーションオペランド８３３の４つの３２ビット・データエレメントの各々のＭＳＢの値が第１のセットのＡＮＤゲート８１９のうちの１つへ入力されることを示す。より詳細には、図８ｂは、ソースオペランド８３１およびデスティネーションオペランド８３３のビット１２７がゲート８１９１に対する両入力である。ソースオペランド８３１およびデスティネーションオペランド８３３のビット９３がゲート８１９２に対する両入力である。ソースオペランド８３１およびデスティネーションオペランド８３３のビット６３がゲート８１９３に対する両入力である。そして、ソースオペランド８３１およびデスティネーションオペランド８３３のビット３１がゲート８１９４に対する両入力であることを示す。
【０１５３】
図８ｂは、ソースオペランド８３１の４つの３２ビット・データエレメントの各々およびデスティネーションオペランド８３３の４つの３２ビット・データエレメントの各々のＭＳＢの値が８２０で２番目のセットＡＮＤゲートの１つに入力されることを更に示す。第２のセットのＡＮＤゲート８２０１から８２０４は、デスティネーションオペランド８３３の各ダブルワードのＭＳＢが、反転され補数が計算されてから、入力を受信する点に留意する必要がある（インバータ８４４ａ−８４４ｄを参照）。
【０１５４】
より詳細には、図８ｂは、ソースオペランド８３１のビット１２７およびデスティネーションオペランド８３３のビット１２７の補数がゲート８２０１に対する両入力である。ソースオペランド８３１のビット９３およびデスティネーションオペランド８３３の補数のビット９３がゲート８２０２に対する両入力である。ソースオペランド８３１のビット６３およびデスティネーションオペランド８３３のビット６３の補数がゲート８２０３に対する両入力である。そして、ソースオペランド８３１のビット３１およびデスティネーションオペランド８３３のビット３１の補数がゲート８２０４に対する両入力であることを示す。
【０１５５】
ＡＮＤゲート８１９１から８１９４の出力の各々は、ＮＡＮＤゲート８５５への入力である。ＮＡＮＤゲート８５５の少なくとも１つの目的は、ソースおよびデスティネーションの最も上位のビットの論理積の結果が各々の４つのダブルワードすべてでゼロ（論理値Ｌｏｗ）であるかを判断することである。もし、そうである場合、ゼロフラグ８５８に論理値Ｈｉｇｈを入力する。
【０１５６】
ＡＮＤゲート８２０４から８２０１の各々の出力は、ＮＡＮＤゲート８５９へ入力される。ＮＡＮＤゲート８５９の少なくとも１つの目的は、ソースおよびデスティネーションの補数論理積の結果が各々の４つのダブルワードすべてでゼロ（論理値Ｌｏｗ）であるかを判断することである。もし、そうである場合、キャリーフラグ８６０に論理値Ｈｉｇｈを入力する。
【０１５７】
４つのダブルワードの各々のためのＭＳＢを比較するパックドＬＣＳＺＣ命令の別の実施例は、１つのオペランドのパックド符号付きダブルワード値および他のオペランドのビットマスクのためのオペレーション、ソースおよびデスティネーションの符号無しダブルワード値、およびソースおよびデスティネーションの符号付きダブルワード値、または、これらの組合せのためのオペレーションを包含し得る。なお、上記に限定されるものではない。ＬＣＳＺＣ命令の他の別の実施例は、符号付きか符号無しデータエレメントの他のサイズにあてはまるオペレーションを含んでもよい。
【０１５８】
図８ｃは、別の実施例におけるパックド・データのＬＣＳＺＣオペレーションを実行するための回路８１０ｃの少なくとも１つの例を示している。オペレーション制御手段８００は、パックドＬＣＳＺＣ命令のための制御信号を処理する。かかるパックドＬＣＳＺＣ命令は、実施例において、ＬＣＳＺＣオペレーションが評価する２つのパックド倍精度（６４ビット）浮動小数点の値に実行されることを表す「ＴＥＳＴＰＤ」命令でもよい。オペレーション制御手段８００は、ＬＣＳＺＣ回路８０１ｃを制御するために、イネーブル８８０上に信号を出力する。［当業者は、図８ｃに図示されるＬＣＳＺＣ回路８０１ｃが図８ａに図示されるＬＣＳＺＣ回路８０１の論理素子のサブセットを活性化することによって実装されてもよいと認識するであろう］
【０１５９】
図８ｂにおいて説明したように、回路８０１ｂと同様に、ＬＣＳＺＣ回路８０１ｃは、２つのセットのＡＮＤゲートを含む。ここで、各セットは、ソースオペランドの各ビットと対応するデスティネーションオペランドのビットと比較するための１つのＡＮＤゲートを含む。図８ｃに図示される実施例において、２つの６４ビット（「クワッドワード」）データエレメントの各々のための最上位ビットが、比較される。このように、ＡＮＤゲートの第１のセットはゲート８１９１から８１９３を含む。そして、ＡＮＤゲートの第２のセットはゲート８２０１から８２０３を含む。
【０１６０】
図８ｃは、ソースオペランド８３１の２つの６４ビット・データエレメントの各々、および、デスティネーションオペランド８３３の２つの６４ビット・データエレメントの各々のＭＳＢの値が第１のセットのＡＮＤゲート（８１９１および８１９３）に入力されていることを示している。図８ｃにおいて、より詳細には、ソースオペランド８３１およびデスティネーションオペランド８３３のビット１２７がゲート８１９１への入力である、そして、ソースオペランド８３１およびデスティネーションオペランド８３３のビット６３がゲート８１９３に対する入力であることを示す。
【０１６１】
図８ｃは、ソースオペランド８３１の２つの６４ビット・データエレメントの各々、および、デスティネーションオペランド８３３の２つの６４ビット・データエレメントの各々のＭＳＢの値が第2のセットのＡＮＤゲート（８２０１および８２０３）に入力されることを更に示す。第２のセットのＡＮＤゲート（８２０１および８２０３）は、デスティネーションオペランド８３３の各クワッドワードのＭＳＢが反転され補数が求まった後に、その値が入力される点に留意する必要がある。
【０１６２】
より詳細には、図８ｃは、ソースオペランド８３１のそのビット１２７およびデスティネーションオペランド８３３のビット１２７の補数がゲート８２０１に対する両入力である。そして、ソースオペランド８３１のビット６３およびデスティネーションオペランド８３３のビット６３の補数がゲート８２０３に対する両入力であることを示す。
【０１６３】
ＡＮＤゲート８１９１および８１９３の各々の出力は、ＮＡＮＤゲート８５３へ入力される。ＮＡＮＤゲート８５３の少なくとも１つの目的は、ソースおよびデスティネーションの２つのクワッドワードの各々の最上位ビットの論理積の結果が両方ともゼロ（論理値Ｌｏｗ）であるか否かを判断することである。もし、そうである場合、論理値Ｈｉｇｈがゼロフラグ８５８に入力される。
【０１６４】
ＡＮＤゲート８２０１および８２０３の各々の出力は、ＮＡＮＤゲート８５７へ入力される。ＮＡＮＤゲート８５７の少なくとも１つの目的は、ソースおよびデスティネーションの２つのクワッドワードの各々の最上位ビットの論理積の結果が両方ともゼロ論理値Ｌｏｗ）であるか否かを判断することである。もし、そうである場合、論理値Ｈｉｇｈがキャリーフラグ８６０に入力される。
【０１６５】
２つのクワッドワードの各々のためのＭＳＢを比較するパックドＬＣＳＺＣ命令の別の実施例は、ソースおよびデスティネーションの符号無しクワッドワード値のオペレーション、ソースおよびデスティネーションの符号付きクワッドワード値のためのオペレーション、または、両者の組合せのためのオペレーションを包含し得る。なお、これに限定されるものではない。ＬＣＳＺＣ命令の他の別の実施例は、符号付き、または符号無しデータエレメントの他のサイズにあてはまるオペレーションを含んでもよい。
【０１６６】
上述したように、デコーダ１６５はプロセッサ１０９によって受信される制御信号を認識し、かつ復号してもよい。そして、その制御信号はＬＣＳＺＣ命令のためのオペレーションコードでもよい。このように、デコーダ１６５は、ＬＣＳＺＣ命令のためのオペレーションコードを復号する。
【０１６７】
図９を参照すると、ＬＣＳＺＣ命令のための制御信号（オペレーションコード）をコード化するために利用されるオペレーションコードの各種実施形態が示されている。図９は、本発明の一実施例における命令９００のフォーマットを示している。命令フォーマット９００は、さまざまなフィールドを含む。オペランド指定子フィールドは、任意である。すなわち、ｍｏｄＲ／Ｍ，  ｓｃａｌｅ−ｉｎｄｅｘ−ｂａｓｅ９４０，ｄｉｓｐｌａｃｅｍｅｎｔ９５０，ｉｍｍｅｄｉａｔｅ９６０である。
【０１６８】
図９に記載されるフォーマット９００が例示的である当業者は認めるであろう。そして、命令コード内のデータのその他の構成は開示された実施例によって利用されてもよい。例えば、フィールド９１０、９２０、９３０、９４０、９５０、９６０は、示された順序である必要はない。各々は、他の位置に再編成されてもよい。かつ、隣接する必要がない。また、本願明細書において述べられるフィールド長は、制限するものと捉えてはならない。バイトの特定の部分であるとして説明されたフィールドは、別の実施例において、より長い、あるいはより短いフィールドとして実装してもよい。用語「バイト」は、本願明細書において８ビット・グループ化を指すために使われるが、他の実施例において４ビット１６ビットおよび３２ビットを含む他のいかなるサイズのグループ化も含まれる。
【０１６９】
特定の例のために本願明細書で使用しているように、所望のオペレーションを示すための命令（例えばＬＣＳＺＣ命令）のオペコードは、特定の値を命令フォーマット２００のフィールドに含んでもよい。かかる命令は、しばしば「実効命令」として例示される。実効命令のためのビット値は、しばしば「命令コード」として集合的に本願明細書において示される。
【０１７０】
命令コードごとに、対応する復号された命令コードは、一意にオペレーションが命令コードに応答する実行ユニットを特定する（例えば、図１ａの１３０）。復号化された命令コードは、１つ以上のマイクロオペレーションを含んでもよい。
【０１７１】
オペコード・フィールド９２０の内容は、オペレーションを特定する。少なくとも１つの実施例において、本願明細書において述べられるＬＣＳＺＣ命令の実施例のためのオペコード・フィールド９２０は、長さ３バイトである。オペコード・フィールド９２０は、１、２または３バイトの情報を含んでもよい。少なくとも１つの実施例において、ＬＣＳＺＣオペレーションを特定するために、３バイトエスケープオペコード値、オペコード・フィールド９２０の２バイトエスケープフィールド１１８ｃは、３バイト目の９２５のオペコード・フィールド９２０と結合される。３バイト目の９２５は、命令に特有のオペコードとして本願明細書において参照される。
【０１７２】
図９は、ＬＣＳＺＣ命令のための命令フォーマットの第２実施例９２８を示す。オペコード・フィールド９２０の２バイトフィールド１１８ｃ内の３バイトエスケープオペコード値は、プレフィクスフィールド９１０の内容、およびＬＣＳＺＣオペレーションを特定するためにオペコード・フィールド９２０の命令に特有のオペコード・フィールド９２５の内容と結合されることを示す。
【０１７３】
少なくとも１つの実施例において、プレフィクス値０ｘ６６が、プレフィクスフィールド９１０に置かれる。かつ所望のオペレーションを定めるために、命令オペコードの一部として使われる。すなわち、プレフィクス９１０フィールドの値は、単にオペコードが次に続くことを示すのではなく、オペコードの一部として復号された。少なくとも１つの実施例において、例えば、プレフィクス値０ｘ６６は、ＬＣＳＺＣ命令のデスティネーションおよびソースオペランドが１２８ビットＩｎｔｅｌ（Ｒ）ＳＳＥ２  ＸＭＭレジスタにあることを示すために利用される。他のプレフィクスが、同じように使われてもよい。しかしながら、少なくともＬＣＳＺＣ命令の一部の実施例において、プレフィクスは、その代わりに、オペコードを強化するかまたは一定のオペレーションの状態の下でオペコードに資格を与える従来の役割として使われてもよい。
【０１７４】
第１の実施例９２６および命令フォーマットの第２実施例９２８は、両者とも、３バイトエスケープオペコードフィールド１１８ｃおよび命令に特有のオペコード・フィールド９２５を含んでいる。３バイトエスケープオペコードフィールド１１８ｃは、少なくとも１つの実施例において、長さ２バイトである。命令フォーマット９２６は４つの特別なエスケープオペコードのうちの１つを使用する。これは、３バイトエスケープオペコードと呼ばれている。３バイトエスケープオペコードは長さ２バイトである。これは、命令がオペコード・フィールド９２０の３番目のバイトを利用して命令を定義することをデコーダ・ハードウェアに知らせる。３バイトエスケープオペコードフィールド１１８ｃは、命令オペコードの中でどこにでも位置してもよい、かつ、必ずしも命令の範囲内の最上位の順序または最下位の順序のフィールドに存在しなければならないという必要もない。
【０１７５】
少なくとも１つの実施例において、少なくとも４つの３バイトエスケープオペコード値が次のように定義される：０ｘ０Ｆ３ｙ
ここでｙは、０ｘ８、０ｘ９、０ｘＡまたは０ｘＢである。３バイトエスケープオペコード値として値「０ｘ０Ｆ３８」を含むＬＣＳＺＣ命令オペコードの特定の実施例が本願明細書において開示される。なお、かかる開示は制限するものとして解釈されてはならない。他の実施例は、他のエスケープオペコード値を利用してもよい。
【０１７６】
下記の表３はプレフィクスおよび３バイトエスケープオペコードを使用しているＬＣＳＺＣ命令コードの例を記載している。
【表５】
2020091908.tif 000007
【０１７７】
少なくとも１つの実施例において、ソースまたはデスティネーションオペランドの値は、マスクとして利用されてもよい。マスク値としてソースかデスティネーションオペランドのいずれを使用するべきかどうかに関するプログラマの選択は、少なくとも１つには、所望の動作に基づいて決定されてもよい。例えばマスク値としての第２オペランド（ソース）を使用して、結果として生じる動作は、次のようになる。
“マスクの下のすべてが「０」である場合、ＺＦをセットせよ；マスクの下のすべてが「１」である場合、ＣＦをセットせよ”
一方、マスク値として第１の引数（デスティネーション）を使用するときに、結果として生じる動作は次のようになる。
“マスクの下のすべてが「１」である場合、ＺＦをセットせよ；マスクの下のすべてが「０」である場合、ＣＦをセットせよ”
【０１７８】
図７ｃ、７ｄ、８ｂおよび８ｃに関連して少なくとも上記のパックドＬＣＳＺＣ命令の一部の実施例を実行するために、追加命令が必要である。これはオペレーションにマシンサイクル待ち時間を追加する。例えば、表４に記載される擬似コードセットは、ＰＴＥＳＴ命令を使用した命令セットが、ＰＴＥＳＴ命令を含まない命令セットより、命令数を節約できることを示している。
【表６】
2020091908.tif 000008
【０１７９】
表４に記載される擬似コードは、ＬＣＳＺＣ命令の記載されている実施例がソフトウェアコードの性能を改良するために用いることができることを示している。その結果、ＬＣＳＺＣ命令は、従来技術の命令よりも、多くのアルゴリズムのパフォーマンスを向上させるために、一般的なプロセッサに利用することができる。
［別の実施例］
【０１８０】
上述の実施例は、３２ビット・データエレメントのためのＭＳＢおよびＬＣＳＺＣ命令のパックド実施例のための６４ビット・データエレメントの比較を行っている。別の実施例は、異なるサイズの入力、異なるサイズのデータエレメントおよび／または異なるビット（例えば、データエレメントのＬＳＢ）を使用してもよい。加えて、上述の実施例においては、Ｓｏｕｒｃｅ１およびＤｅｓｔが各々１２８ビットのデータを含む。別の実施例は、より多くの、あるいは、より少ないデータを有するパックド・データを取り扱うことができる。例えば、１つの別の実施例は、６４ビットのデータを有するパックド・データを取り扱う。また、ＬＣＳＺＣ命令によって比較されるビットは、パックド・データエレメントの各々同じビット位置である必要はない。
【０１８１】
本発明を、いくつかの実施例によって記載したが、当業者は、本発明が記載されている実施例に限られていないことを認識するであろう。本発明の方法と装置は、添付の請求項の範囲内で、種々の態様の変更が可能である。明細書は、このように、本発明を制限するのではなく、例示するものと捉えるべきである。
【０１８２】
前記説明は、本発明の好ましい実施例を示すことを目的とする。上記の考察からも明らかなように、特に、本技術分野は、急速に発展している。そして、更なる技術の向上は、容易に予知できない。本発明は、添付の請求の範囲の範囲内において、本発明の原理を逸脱しない範囲で、当業者によって構成およびその詳細が修正されてもよい。
【図１ａ】
2020091908.tif 000009
【図１ｂ】
2020091908.tif 000010
【図１ｃ】
2020091908.tif 000011
【図２ａ】
2020091908.tif 000012
【図２ｂ】
2020091908.tif 000013
【図３】
2020091908.tif 000014
【図４】
2020091908.tif 000015
【図５】
2020091908.tif 000016
【図６】
2020091908.tif 000017
【図７ａ】
2020091908.tif 000018
【図７ｂ】
2020091908.tif 000019
【図７ｃ】
2020091908.tif 000020
【図７ｄ】
2020091908.tif 000021
【図８ａ】
2020091908.tif 000022
【図８ｂ】
2020091908.tif 000023
【図８ｃ】
2020091908.tif 000024
【図９】
2020091908.tif 000025