(57)【特許請求の範囲】
【請求項１】
第１の値を指定しまたは格納する第１ソースオペランドと、シフト量を指定しまたは格納する第２ソースオペランドと、第２の値を指定しまたは格納する第３ソースオペランドを有するシフトおよびＸＯＲ命令を実行し、前記シフトおよびＸＯＲ命令に応じて、前記第１の値を前記シフト量だけシフトして、前記シフトされた値を前記第２の値でＸＯＲして前記シフトおよびＸＯＲ命令の結果を生成する論理と、
前記結果の先頭部または後端部において予め定めた数以上の個数の０が連続するかをチェックする論理と、
を備えるプロセッサ。
【請求項２】
前記第１の値は左シフトされ、前記チェックする論理は、前記結果の先頭部において前記予め定めた数以上の個数の０が連続するかをチェックする請求項１に記載のプロセッサ。
【請求項３】
前記第１の値は右シフトされ、前記チェックする論理は、前記結果の後端部において前記予め定めた数以上の個数の０が連続するかをチェックする請求項１に記載のプロセッサ。
【請求項４】
前記第１の値は論理シフトされる請求項１から３のいずれか一項に記載のプロセッサ。
【請求項５】
前記第１の値は算術シフトされる請求項１から３のいずれか一項に記載のプロセッサ。
【請求項６】
シフタとＸＯＲ回路とを備える請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記シフトおよびＸＯＲ命令は、定数配列の中の前記第２の値を指定する第１のフィールドを含む請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
前記第１の値は、パックデータである請求項１から７のいずれか一項に記載のプロセッサ。
【請求項９】
データの重複除外を実行するシステムであって、
シフトおよびＸＯＲ演算を実行させる第１の命令を格納する第１ストレージと、
定数テーブルを格納する第２ストレージと、
第１の値を指定しまたは格納する第１ソースオペランドと、シフト量を指定しまたは格納する第２ソースオペランドと、前記第２ストレージに格納された前記定数テーブルからの第２の値を指定する第３ソースオペランドを有する前記第１の命令を実行し、前記第１の命令に応じて、前記第１の値を前記シフト量だけシフトして、前記シフトされた値を前記第２の値でＸＯＲする前記シフトおよびＸＯＲ演算を実行して前記第１の命令の結果を生成するプロセッサと
を備えるシステム。
【請求項１０】
前記第１の値は左シフトされる請求項９に記載のシステム。
【請求項１１】
前記第１の値は右シフトされる請求項９に記載のシステム。
【請求項１２】
前記第１の値は論理シフトされる請求項９から１１のいずれか一項に記載のシステム。
【請求項１３】
前記第１の値は算術シフトされる請求項９から１１のいずれか一項に記載のシステム。
【請求項１４】
シフタとＸＯＲ回路とを備える請求項９から１３のいずれか一項に記載のシステム。
【請求項１５】
前記第１の命令は、前記第２の値を指定する第１のフィールドを含む請求項９から１４のいずれか一項に記載のシステム。
【請求項１６】
前記第１の値は、パックデータである請求項９から１５のいずれか一項に記載のシステム。
【請求項１７】
前記プロセッサは、前記結果の先頭部または後端部において予め定めた数以上の個数の０が連続するかをチェックする請求項９に記載のシステム。
【請求項１８】
第１の値を指定しまたは格納する第１ソースオペランドと、シフト量を指定しまたは格納する第２ソースオペランドと、第２の値を指定しまたは格納する第３ソースオペランドを有するシフトおよびＸＯＲ命令を実行し、前記シフトおよびＸＯＲ命令に応じて、前記第１の値を前記シフト量だけシフトして、前記シフトされた値を前記第２の値でＸＯＲして前記シフトおよびＸＯＲ命令の結果を生成する段階を備える方法。
【請求項１９】
前記第１の値は左シフトされる請求項１８に記載の方法。
【請求項２０】
前記第１の値は右シフトされる請求項１８に記載の方法。
【請求項２１】
前記第１の値は論理シフトされる請求項１８から２０のいずれか一項に記載の方法。
【請求項２２】
前記第１の値は算術シフトされる請求項１８から２０のいずれか一項に記載の方法。
【請求項２３】
当該方法を実行するプロセッサは、シフタとＸＯＲ回路とを備える請求項１８から２２のいずれか一項に記載の方法。
【請求項２４】
前記シフトおよびＸＯＲ命令は、前記第２の値を格納する第１のフィールドを含む請求項１８から２３のいずれか一項に記載の方法。
【請求項２５】
前記第１の値は、パックデータである請求項１８から２４のいずれか一項に記載の方法。
【請求項２６】
前記結果の先頭部または後端部において予め定めた数以上の個数の０が連続するかをチェックする段階を備える請求項１８に記載の方法。
【請求項２７】
第１の値を指定しまたは格納する第１ソースオペランドと、シフト量を指定しまたは格納する第２ソースオペランドと、第２の値を指定しまたは格納する第３ソースオペランドを有する命令を含むプログラムであって、
前記命令が機械によって実行されると、前記機械に、
前記第１の値を前記シフト量だけシフトする段階と、
前記シフトされた値を前記第２の値でＸＯＲして前記命令の結果を生成する段階と
を含む方法を実行させるためのプログラム。
【請求項２８】
前記第１の値は左シフトされる請求項２７に記載のプログラム。
【請求項２９】
前記第１の値は右シフトされる請求項２７に記載のプログラム。
【請求項３０】
前記第１の値は論理シフトされる請求項２７から２９のいずれか一項に記載のプログラム。
【請求項３１】
前記第１の値は算術シフトされる請求項２７から２９のいずれか一項に記載のプログラム。
【請求項３２】
前記機械は、シフタとＸＯＲ回路とを備える請求項２７から３１のいずれか一項に記載のプログラム。
【請求項３３】
前記命令は、前記第２の値を格納する第１のフィールドを含む請求項２７から３２のいずれか一項に記載のプログラム。
【請求項３４】
前記第１の値は、パックデータである請求項２７から３３のいずれか一項に記載のプログラム。
【請求項３５】
前記機械に、前記結果の先頭部または後端部において予め定めた数以上の個数の０が連続するかをチェックする段階を更に含む前記方法を実行させるための請求項２７に記載のプログラム。
【請求項３６】
プロセッサにより実行される方法であって、
シフトおよびＸＯＲ命令に応答して、第１の値を所与のシフト量だけシフトして第１のシフト値を生成し、前記第１のシフト値と第２の値との間で排他的論理和（ＸＯＲ）演算を実行して、実行結果を第１のレジスタに格納する段階と、
前記実行結果の先頭部または後端部において予め定めた数以上の個数の０が連続するかをチェックする段階と
を備える方法。
【請求項３７】
前記実行結果の先端部または後端部において予め定めた数以上の個数の０が連続する場合に、前記実行結果が第１のチャンクに対応していることを示す段階を備える請求項３６に記載の方法。
【請求項３８】
前記シフトおよびＸＯＲ命令に応答して、前記第１の値は、１ビットに相当する位置だけ左シフトされ、
前記チェックする段階は、前記実行結果の先頭部において予め定めた数以上の個数の０が連続するかをチェックする
請求項３６または３７に記載の方法。
【請求項３９】
前記シフトおよびＸＯＲ命令に応答して、前記第１の値は、１ビットに相当する位置だけ右シフトされ、
前記チェックする段階は、前記実行結果の後端部において予め定めた数以上の個数の０が連続するかをチェックする
請求項３６または３７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピュータ処理分野に係る。より詳しくは、実施形態は、シフトおよび論理和（ＸＯＲ）演算を実行する命令に係る。
【背景技術】
【０００２】
単一命令多重データ処理（ＳＩＭＤ）命令は、多くのデータエレメント（パックデータ）を並列に処理する様々なアプリケーションで利用価値がある。シフト演算または排他的論理和（ＸＯＲ）演算等の演算を直列で実行すると、性能が落ちる。
【０００３】
本発明は、添付図面に例示として、限定としてではなく示されている。
【図面の簡単な説明】
【０００４】
【図１Ａ】本発明の一実施形態におけるシフトおよびＸＯＲ演算命令を実行する実行部を含むプロセッサで構成されるコンピュータシステムのブロック図である。
【図１Ｂ】本発明の別の実施形態における別のコンピュータシステム例のブロック図である。
【図１Ｃ】本発明の別の実施形態における別のコンピュータシステム例のブロック図である。
【図２】本発明におけるシフトおよびＸＯＲ演算を行う論理回路を含む一実施形態のプロセッサのマイクロアーキテクチャのブロック図である。
【図３Ａ】本発明の一実施形態におけるマルチメディアレジスタ内の様々なパックデータタイプ表現である。
【図３Ｂ】別の実施形態刑におけるパックデータタイプを示す。
【図３Ｃ】本発明の一実施形態におけるマルチメディアレジスタの、様々な符号付き、および、符号なしのパックデータタイプ表現を示す。
【図３Ｄ】演算符号（オペコード）フォーマットの一実施形態を示す。
【図３Ｅ】別の演算符号（オペコード）フォーアットを示す。
【図３Ｆ】また別の演算符号フォーマットを示す。
【図４】本発明における命令を実行する論理の一実施形態のブロック図である。
【図５】一実施形態において実行される演算のフロー図である。
【発明を実施するための形態】
【０００５】
以下の記載は、処理装置、コンピュータシステム、またはソフトウェアプログラムでシフトまたはＸＯＲ演算を実行する技術の実施形態を記載している。以下の記載では、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、実施メカニズム（enablement mechanism）等の幾多の詳細を述べて、本発明のより完全な理解を促している。しかし、当業者には本発明の実施形態をこれら特定の詳細なしに実行できることが明らかである。さらに、公知の構造、回路等は詳述を避けて、本発明の実施形態を不当に曖昧にしないようにしている箇所もある。
【０００６】
以下の実施形態はプロセッサに関して記載されるが、他の種類の集積回路および論理デバイスには他の実施形態を適用可能である。本発明と同じ技術および教示は、パイプラインスループットおよび性能を上げることで利益がある他の種類の回路または半導体素子にも容易に適用できる。本発明の教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかし本発明の実施形態は、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビットのデータ処理を行うプロセッサまたは機械に限定されず、パックデータの操作が必要ないずれのプロセッサおよび機械にも適用可能である。
【０００７】
以下の例は、実行部および論理回路のコンテキストで命令処理および配信を記載しているが、本発明の他の実施形態は、有形媒体に格納されているソフトウェアにより実行可能である。一実施形態では、本発明の方法は、機械実行可能命令に具現化される。命令を利用して、命令をプログラミングされた汎用プロセッサまたは専用プロセッサに、本発明の各段階を実行させることができる。本発明の実施形態は、コンピュータ（その他の電子デバイス）に本発明のプロセスを実行させるようプログラミングするのに利用できる命令を格納する機械またはコンピュータ可読媒体を含みうるコンピュータプログラムプロダクトまたはソフトウェアとして提供可能である。または、本発明の各段階を、各段階を実行するハードワイヤ論理を含む特定用途のハードウェアコンポーネントにより、または、プログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより実行することもできる。これらのソフトウェアは、システムのメモリ内に格納可能である。同様に、コードは、他のコンピュータ可読媒体により、またはネットワーク経由で配信可能である。
【０００８】
機械可読媒体は、機械可読な形式で情報を格納または送信する任意のメカニズムを含んでよく、これらに限定はされないが、フロッピー（登録商標）ディスク、光ディスク、ＣＤ，ＣＤ−ＲＯＭ，および磁気光ディスク、ＲＯＭ，ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、光カードまたは磁気カード、フラッシュメモリ、インターネット経由の送信、電気、光、音響、その他の形態の伝播信号（例えば搬送波、赤外線信号、デジタル信号等）が含まれる。従って、コンピュータ可読媒体は、機械（コンピュータ）が可読な形式で電子命令または情報を格納または送信するのに適した任意の種類の媒体／機会か読媒体を含む。さらに本発明は、コンピュータプログラムプロダクトとしてダウンロードすることもできる。従って、プログラムは、遠隔コンピュータ（例えばサーバ）から要求を出しているコンピュータ（例えばクライアント）に転送されてよい。プログラムの転送は、搬送波または他の伝播媒体で、通信リンク（例えばモデム、ネットワーク接続等）を介して具現化される、電気、光、音響、または他の形式のデータ信号により行うことができる。
【０００９】
設計は、作成からシミュレーション、ひいては製造までの様々な段階を経て行うことができる。設計を表すデータは、複数の方法で設計を表していてよい。第一に、シミュレーションで好適であるが、ハードウェアを、ハードウェア記述言語その他の機能記述言語で表すことができる。さらに、論理および／またはトランジスタゲートを有する回路レベルモデルを、設計プロセスの幾つかの段階で製造することができる。さらに、殆どの設計では、ある段階で、ハードウェアモデルの様々なデバイスの物理的位置を表すデータレベルに到達する。通常の半導体製造技術を利用する場合には、ハードウェアモデルを表すデータは、集積回路の製造に利用されるマスク用の様々なマスク層上の様々な特徴の存在または不在を示すデータであってよい。設計のいずれの表現においても、データは、いずれかの形態の機械可読媒体に格納されてよい。変調されたり、この情報を送信するように生成されたりしている光波または電波、メモリ、またはディスク等の磁気光ストレージは、機械可読媒体である。これら媒体のいずれかは、設計またはソフトウェア情報を「搬送」または「指示」できてよい。コードまたは設計を指示する、または搬送する電気搬送波が送信されると、電気信号のコピー、バッファリング、または再送信の範囲では、新たなコピーが生成される。従って、通信プロバイダまたはネットワークプロバイダは、本発明の技術を具現化している物品（搬送波）のコピーを製造しうる。
【００１０】
現代のプロセッサでは、複数の異なる実行部を利用して、様々なコードおよび命令を処理および実行している。完了まで速いものもあれば、莫大な数のクロックサイクルを要するものもあり、全ての命令を同じように製造するわけではない。命令のスループットが速いと、プロセッサの全体性能は良くなる。従って、多くの命令がより高速に実行されると好適である。しかし、複雑度が高く、実行時間およびプロセッサリソースをより多く必要とする命令も存在する。例を挙げると、浮動小数点命令、ロード／格納処理、データ移動などである。
【００１１】
インターネットおよびマルチメディアアプリケーションで利用されるコンピュータシステム数が増えるにつれて、さらなるプロセッササポートを導入することが増えてきた。例えば、単一命令多重データ（ＳＩＭＤ）整数／浮動少数点命令、および、ストリーミングＳＩＭＤ拡張（ＳＳＥ）は、特定のプログラムタスクの実行に必要な命令の総数を減らす命令であり、消費電力も減らすことができる。この種類の命令は、複数のデータエレメントに並列処理を行うことにより、ソフトウェアのパフォーマンスを高速化することができる。この結果、ビデオ、音声、および画像／写真処理を含む幅広い範囲のアプリケーションで性能面の利得が得られる。ＳＩＭＤ命令をマイクロプロセッサおよび類似した種類の論理回路に実装するには、通常、多くの課題が存在する。さらに、ＳＩＭＤ演算は複雑なので、しばしば、正確にデータを処理、操作するためにはさらなる回路が必要となる。
【００１２】
現在のところＳＩＭＤによるシフトおよびＸＯＲ命令は実用化されていない。本発明の実施形態では、ＳＩＭＤシフトおよびＸＯＲ命令がないと、音声／ビデオ／グラフィック圧縮、処理、操作等のアプリケーションで同等の成果を達成するために、多数の命令およびデータレジスタが必要となることが想定される。従って、本発明の実施形態においては少なくとも１つのシフトおよびＸＯＲ命令を利用することで、コードのオーバヘッドおよびリソース要件を低減させることができる。本発明の実施形態は、シフトおよびＸＯＲ演算を、ＳＩＭＤ関連のハードウェアを利用するアルゴリズムとして実装する方法を提供する。現在のところ、ＳＩＭＤレジスタのデータに、シフトおよびＸＯＲ演算を行うことは困難であり時間がかかる（tedious）。またアルゴリズムのなかには、これら演算を実行するのにかかる実際の命令数よりも、算術演算データを配置するための命令数が多いようなものがある。本発明の実施形態におけるシフトおよびＸＯＲ演算を実装することで、シフトおよびＸＯＲ演算を行うために必要となる命令数を大幅に減らすことができるようになる。
【００１３】
本発明の実施形態は、シフトおよびＸＯＲ演算の実装命令に係る。一実施形態では、シフトおよびＸＯＲ演算は…。
【００１４】
データエレメントに実行される一実施形態におけるシフトおよびＸＯＲ演算は、概してＤＥＳＴ１←ＳＣＲ１「ＳＲＣ２」と表すことができる。
【００１５】
一実施形態では、ＳＲＣ１は、複数のデータエレメントを有する第１のオペランドを格納しており、ＳＲＣ２は、シフトおよびＸＯＲ命令でシフトされる値を表す値を含んでいる。他の実施形態では、シフトおよびＸＯＲ値のインジケータを、即値フィールドに格納してもよい。
【００１６】
上述したフローでは、「ＤＥＳＴ」および「ＳＲＣ」は、対応するデータまたは演算のソースおよび宛先を表す一般用語である。一部の実施形態では、これらを、レジスタ、メモリ、または記載されたものとは異なる名称または関数を有する他の格納領域に実装することができる。一実施形態では、例えば、ＤＥＳＴ１およびＤＥＳＴ２は、第１の時間格納領域および第２の時間格納領域（例えば「ＴＥＭＰ１」「ＴＥＭＰ２」レジスタ）であってよく、ＳＲＣ１およびＳＲＣ３は、第１および第２の宛先格納領域（例えば「ＤＥＳＴ１」および「ＤＥＳＴ２」レジスタ）等であってよい。他の実施形態では、２以上のＳＲＣおよびＤＥＳＴ格納領域が、同じ格納領域（例えばＳＩＭＤレジスタ）内の異なるデータ格納エレメントに対応していてもよい。
【００１７】
図１Ａは、本発明の一実施形態におけるシフトおよびＸＯＲ演算命令を実行する実行部を含むプロセッサで形成されるコンピュータシステムのブロック図である。システム１００は、例えばここに記載する実施形態におけるような、本発明における処理データのアルゴリズムを実行する論理を含む実行部を利用するプロセッサ１０２等のコンポーネントを含む。システム１００は、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、および／または、ＳｔｒｏｎｇＡＲＭ（登録商標）マイクロプロセッサを表しているが、他のシステム（他のマイクロプロセッサ、工学ワークステーション、セットトップボックス等を有するＰＣを含む）を利用することもできる。一実施形態では、サンプルシステム１００は、ワイントン州のＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムの一バージョンを実行することができるが、他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標））、埋め込みソフトウェア、および／またはグラフィックユーザインタフェースを利用することもできる。従って本発明の実施形態は、ハードウェア回路およびソフトウェアの特定の組み合わせに限定されない。
【００１８】
実施形態はコンピュータシステムに限定されない。ハンドヘルドデバイスおよび埋め込みアプリケーションといった他のデバイスには本発明の別の実施形態を利用することができる。ハンドヘルドデバイスの例には、携帯電話（cellular phone）、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末（ＰＤＡ）およびハンドヘルドＰＣが含まれる。埋め込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、またはシフトおよびＸＯＲ演算をオペランドに行うことのできる任意の他のシステムを含むことができる。さらに、マルチメディアアプリケーションの効率を高めるために、幾つかのデータに同時に命令を実行するために幾つかのアーキテクチャを実装することもできる。データの種類および量が増えると、コンピュータおよびそのプロセッサを向上させて、より効率的な方法でデータを操作する必要がでてくる。
【００１９】
図１Ａは、本発明の一実施形態において、幾つかのデータエレメントをシフトおよびＸＯＲ演算させるアルゴリズムを実行する１以上の実行部１０８を含むプロセッサ１０２で構成されるコンピュータシステム１００のブロック図である。一実施形態は、単一のプロセッサデスクトップまたはサーバシステムを想定した説明がなされるが、マルチプロセッサを想定する別の実施形態を含むこともできる。システム１００は、ハブアーキテクチャの一例である。コンピュータシステム１００は、データ信号を処理するプロセッサ１０２を含む。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピュータ（ＲＩＳＣ）マイクロプロセッサ、超長命令後（ＶＬＩＷ）マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス（例えばデジタル信号プロセッサ）であってよい。プロセッサ１０２は、プロセッサ１０２とシステム１００の他のプロセッサとの間でデータ信号を送信することのできるプロセッサバス１１０に連結されている。システム１００のエレメントは、当業者には公知である自身の通常の機能を実行する。
【００２０】
一実施形態では、プロセッサ１０２は、レベル１（Ｌ１）内部キャッシュメモリ１０４を含む。アーキテクチャによっては、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。また別の実施形態では、キャッシュメモリがプロセッサ１０２の外部に常駐していてもよい。また他の実施形態として、実装例および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせを含んでもよい。レジスタファイル１０６は、整数レジスタ、浮動少数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ等の様々なレジスタに様々な種類のデータを格納することができる。
【００２１】
実行ユニット１０８は、整数および浮動少数点演算を実行する論理を含み、これもプロセッサ１０２内に常駐している。プロセッサ１０２はさらに、一定のマクロ命令のマイクロコードを格納するマイクロコード（ｕコード）ＲＯＭを含む。この実施形態では、実行ユニット１０８は、パック命令セット１０９を処理する論理を含む。一実施形態では、パック命令セット１０９は、複数のオペランドにシフトおよびＸＯＲを行う、パックシフトおよびＸＯＲ命令を含む。パック命令セット１０９を汎用プロセッサ１０２の命令セットに含め、さらに、命令を実行する関連回路も含めることで、多くのマルチメディアアプリケーションが利用する処理を、汎用プロセッサ１０２の充填データを利用して行うことができる。従って多くのマルチメディアアプリケーションは、充填データを処理するためにプロセッサのデータバス全幅を利用することで、加速化してより効率的に実行することができる。これにより、１つの処理を一度に１つのデータエレメントに対して行う際に、プロセッサのデータバスに各小片のデータを転送する必要がなくなる。
【００２２】
さらにマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、ＤＳＰ、その他の論理回路では、実行部１０８の別の実施形態を利用することもできる。システム１００はメモリ１２０を含む。メモリ１２０は、ＤＲＡＭデバイス、ＳＲＡＭデバイス、フラッシュメモリデバイス、その他のメモリデバイスであってよい。メモリ１２０は、プロセッサ１０２が実行可能なデータ信号により表される命令および／またはデータを格納することができる。
【００２３】
プロセッサバス１１０およびメモリ１２０には、システム論理チップ１１６が連結される。例示されている実施形態におけるシステム論理チップ１１６は、メモリコントローラハブ（ＭＣＨ）である。プロセッサ１０２は、プロセッサバス１１０を介してＭＣＨ１１６と通信することができる。ＭＣＨ１１６は、命令およびデータを格納して、グラフィックコマンド、データおよびテクスチャを格納するために、高い帯域幅メモリ経路１１８をメモリ１２０に提供する。ＭＣＨ１１６は、プロセッサ１０２、メモリ１２０、およびシステム１００の他のコンポーネント間にデータ信号を送信して、プロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ１２２間でデータ信号をブリッジ（橋絡）する。一部の実施形態では、システム論理チップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供してよい。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結される。グラフィックカード１１２は、アクセラレーテッドグラフィックポート（ＡＧＰ）インターコネクト１１４経由でＭＣＨ１１６に連結される。
【００２４】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するために専用ハブインタフェースバス１２２を利用する。ＩＣＨ１３０は、一部のＩ／ＯデバイスへのローカルＩ／Ｏバスを介した直接接続を提供する。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセット、およびプロセッサ１０２に接続するための高速Ｉ／Ｏバスである。数例には、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線トランシーバ１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェームを含むレガシーＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、およびネットワークコントローラ１３４が含まれる。データ格納デバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス、その他の大容量格納デバイスを含んでよい。
【００２５】
システムの別の実施形態では、シフトおよびＸＯＲ命令を有するアルゴリズムを実行する実行部をシステムオンチップとともに利用することができる。システムオンチップの一実施形態には、プロセッサおよびメモリからなるものがある。このようなシステム用のメモリの一例はフラッシュメモリである。フラッシュメモリは、プロセッサおよびその他のシステムコンポーネントと同じダイに配置されてよい。加えて、他の論理ブロック（例えばメモリコントローラまたはグラフィックコントローラ等）を、システムオンチップに配置することもできる。
【００２６】
図１Ｂは、本発明の一実施形態の原理を実装するデータ処理システム１４０を示す。当業者であればここに記載する実施形態を、本発明の範囲を逸脱することなく別の処理システムに応用することもできることを理解する。
【００２７】
コンピュータシステム１４０は、シフトおよびＸＯＲ演算を含むＳＩＭＤ演算を実行する機能を有する処理コア１５９を含む。一実施形態では、処理コア１５９は、任意の種類のアーキテクチャの処理ユニットを表す（これらに限られないが、ＣＩＳＣ、ＲＩＳＣ，またはＶＬＩＷアーキテクチャ等）。処理コア１５９は、１以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、この製造を促すのに適したものであってもよい。
【００２８】
処理コア１５９は、実行部１４２、レジスタファイルセット１４５、およびデコーダ１４４を含む。処理コア１５９は、さらに、本発明の理解には不要な回路（不図示）も含んでいる。実行部１４２は、処理コア１５９が受信する命令を実行するのに利用される。通常のプロセッサ命令を認識することに加えて、実行部１４２は、パック令セット１４３の命令を認識して、パックデータフォーマットに演算を行うことができる。パック命令セット１４３は、シフトおよびＸＯＲ演算をサポートする命令を含み、さらには他のパック命令を含むこともできる。実行部１４２は、内部バスによりレジスタファイル１４５に連結される。レジスタファイル１４５は、データを含む情報を格納する処理コア１５９上の格納領域を表す。前述したように、パックデータを格納するために利用する格納領域は必須ではない。実行部１４２はデコーダ１４４に連結される。デコーダ１４４は、処理コア１５９が受信した命令を、制御信号および／またはマイクロコード・エントリポイントにデコードするために利用される。これらの制御信号および／またはマイクロコード・エントリポイントに呼応して、実行部１４２は適切な処理を行う。
【００２９】
処理コア１５９は、様々な他のシステムデバイスと通信するバス１４１に連結されており、これには、これらに限定はされないが、ＳＤＲＡＭコントロール１４６、ＳＲＡＭコントロール１４７、バーストフラッシュメモリインタフェース１４８、ＰＣＭＣＩＡ（personal computer memory card international association）／コンパクトフラッシュ（登録商標）（ＣＦ）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、直接メモリアクセス（ＤＭＡ）コントローラ１５１、および代用バスマスターインタフェース１５２が含まれる。一実施形態では、データ処理システム１４０はさらに、Ｉ／Ｏバス１５３経由で様々なＩ／Ｏデバイスと通信するＩ／Ｏブリッジ１５４を含んでよい。このＩ／Ｏデバイスは、これらに限定はされないが、ＵＡＲＴ（universal asynchronous receiver/transmitter）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７、およびＩ／Ｏ拡張インタフェース１５８をさらに含んでよい。
【００３０】
データ処理システム１４０の一実施形態は、モバイル、ネットワークおよび／または無線通信を提供し、シフトおよびＸＯＲ演算を含むＳＩＭＤ演算を実行する機能を有する処理コア１５９を提供する。処理コア１５９は、様々な音声、ビデオ、画像および通信アルゴリズム（例えば、ウォルシュ・アダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれらのそれぞれの逆変換、色空間等の変換圧縮／伸張技術、ビデオ符号化動き推定またはビデオ復号動き補償、およびパルス符号変調（ＰＣＭ）等の変復調（ＭＯＤＥＭ）機能）でプログラミングされてよい。本発明の一部の実施形態はさらに、グラフィックアプリケーション（三次元（「３Ｄ」）モデリング、描画、オブジェクト衝突検出、３Ｄオブジェクト変換および点灯（lighting）等）に利用することもできる。
【００３１】
図１Ｃは、ＳＩＭＤシフトおよびＸＯＲ演算を行う機能を有するデータ処理システムのまた別の実施形態を示す。別の実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入出力システム１６８を含んでよい。入出力システム１６８は、必須ではないが、無線インタフェース１６９に連結されてもよい。ＳＩＭＤコプロセッサ１６１は、シフトおよびＸＯＲ演算を含むＳＩＭＤ演算を行う機能を有する。処理コア１７０は、１以上のプロセス技術での製造に適したものであってもよいし、十分な詳細を機械可読媒体に表すことにより、処理コア１７０を含むデータ処理システム１６０の全てまたは一部の製造を促すのに適したものであってもよい。
【００３２】
一実施形態では、ＳＩＭＤコプロセッサ１６１は、実行部１６２とレジスタファイルセット１６４とを含む。メインプロセッサ１６５の一実施形態は、実行部１６２により実行されるＳＩＭＤシフトおよびＸＯＲ計算命令を含む、命令セット１６３の中の命令を認識するデコーダ１６５を含む。別の実施形態では、ＳＩＭＤコプロセッサ１６１はさらに、命令セット１６３内の命令をデコードするデコーダ１６５Ｂの少なくとも一部を含む。処理コア１７０はさらに、本発明の理解には不要な回路（不図示）も含んでいる。
【００３３】
動作において、メインプロセッサ１６６は、キャッシュメモリ１６７および入出力システム１６８との相互作用を含む一般的な種類のデータ処理を制御するデータ処理命令ストリームを実行する。データ処理命令ストリームにはＳＩＭＤコプロセッサ命令が埋め込まれている。メインプロセッサ１６６のデコーダ１６５は、これらＳＩＭＤコプロセッサ命令を、接続されているＳＩＭＤコプロセッサ１６１が実行すべき種類のものである認識する。従ってメインプロセッサ１６６は、コプロセッサバス１６６上にこれらのＳＩＭＤコプロセッサ命令（またはＳＩＭＤコプロセッサ命令を表す制御信号）を発行して、ここから任意の接続されているＳＩＭＤコプロセッサがこれら命令を受け取る。この場合、ＳＩＭＤコプロセッサ１６１は、これを宛先とする全ての受信されたＳＩＭＤコプロセッサ命令を受け付けて実行する。
【００３４】
データは無線インタフェース１６９経由で受信され、ＳＩＭＤコプロセッサ命令による処理に備えさせられる。一例としては、音声通信は、デジタル信号の形式で受け取られてよく、ＳＩＭＤコプロセッサ命令の処理を受けて、音声通信を表すデジタルオーディオサンプルが再生される。別の例では、圧縮された音声および／またはビデオがデジタルビットストリームの形式で受信されてよく、これがＳＩＭＤコプロセッサ命令により処理されることで、デジタルオーディオサンプルおよび／または動きビデオフレームが再生されてよい。処理コア１７０の一実施形態では、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、実行部１６２、レジスタファイルセット１６４、およびＳＩＭＤシフトおよびＸＯＲ命令を含む命令セット１６３の命令を認識するデコーダ１６５を含む単一の処理コア１７０に統合される。
【００３５】
図２は、本発明におけるシフトおよびＸＯＲ演算を行う論理回路を含む一実施形態のプロセッサ２００のマイクロアーキテクチャのブロック図である。シフトおよびＸＯＲ命令の一実施形態では、命令は、浮動少数点の仮数値を、指数が示す量だけ右にシフトさせて、シフトされた値を所与の値でＸＯＲして、最終結果を生成する。一実施形態では、正常のフロントエンド２０１は、実行するマクロ命令をフェッチしてきて、プロセッサパイプラインでの利用に備えさせるプロセッサ２００の一部である。フロントエンド２０１は、幾つかのユニットを含んでよい。一実施形態では、命令プリフェッチャ２２６が、メモリからマクロ命令をフェッチして、命令デコーダ２２８に供給して、命令デコーダ２２８がこれらを、機械が実行できるマイクロ命令またはマイクロオプレーションと称されるプリミティブ（マイクロオプまたはｕオプと称されることもある）にデコードする。一実施形態では、トレースキャッシュ２３０は、デコードされたｕオプをとり、これらを、ｕオプキュー２３４のプログラムが命ずる（program ordered）シーケンスまたはトレースに、実行用にアセンブルする。トレースキャッシュ２３０が複合マイクロ命令を発見すると、マイクロコードＲＯＭ２３２は、演算を完了させるのに必要なｕオプを提供する。
【００３６】
数多くのマクロ命令が、単一のマイクロオプに変換され、その他のマクロ命令は、演算全体を完了させるのに幾つかのマイクロオプを必要とする。一実施形態では、４つを超える数のマイクロオプがマクロ命令の完了に必要な場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスして、マクロ命令を実行する。一実施形態では、パックシフトおよびＸＯＲ命令を、少数のマイクロオプにデコードして、命令デコーダ２２８での処理に備えさせる。別の実施形態では、処理を実行するのに幾つかの数のマイクロオプが必要な場合に、パックシフトおよびＸＯＲアルゴリズムのための命令をマイクロコードＲＯＭ２３２内に格納することができる。トレースキャッシュ２３０は、エントリポイントのプログラマブルロジックアレイ（ＰＬＡ）を参照して、マイクロコードＲＯＭ２３２のシフトおよびＸＯＲアルゴリズムのためのマイクロコードシーケンスを読み出す正確なマイクロ命令ポインタを決定する。マイクロコードＲＯＭ２３２が現在のマクロ命令のマイクロオプの順序付けを終了すると、マシンのフロントエンド２０１が、トレースキャッシュ２３０からのマイクロオプのフェッチを再開する。
【００３７】
ＳＩＭＤその他のマルチメディアタイプの命令は、複合命令とみなされる。殆どの浮動少数点関連の命令も複合命令である。従って、命令デコーダ２２８が複合マクロ命令を発見すると、マイクロコードＲＯＭ２３２の適切な位置にアクセスして、そのマクロ命令のマイクロコードシーケンスを取得する。そのマクロ命令を実行するのに必要な様々なマイクロオプをアウトオブオーダ実行エンジン２０３に通信して、適切な整数および浮動少数点実行部での実行に備えさせる。
【００３８】
アウトオブオーダ実行エンジン２０３では、マイクロ命令を実行に備えさせる。アウトオブオーダ実行論理は、マイクロ命令のフローの平滑化および順序のつけ直しを行い、パイプラインを流れるときの性能を最適化して、実行に備えさせる。アロケータ論理は、各ｕオプが実行する際に必要とするマシンバッファおよびリソースを割り当てる。レジスタのリネーム論理は、論理レジスタをレジスタファイルのエントリへとリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ２０２、遅い／汎用の浮動少数点スケジューラ２０４、および簡易浮動少数点スケジューラ２０６の前に、各ｕオプのエントリを２つのｕオプキューのどちらかに対して、１つをメモリ処理に、１つを非メモリ処理に、という具合に割り当てる。ｕオプスケジューラ２０２、２０４、２０６は、従属入力レジスタオペランドソースが準備できているか、および、ｕオプが処理を完了するために必要な実行リソースの利用可能性に基づいて、ｕオプが準備できているかを判断する。本実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半分にスケジュールを行うが、他のスケジューラは、各メインプロセッサのクロックサイクルごとに一度しかスケジュールを行うことができない。スケジューラは、実行するｕオプをスケジュールするべく発送ポート間を調整する。
【００３９】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６、および、実行部２１２、２１４、２１６、２１８、２２０、２２２、２２４の間に存在している（実行ブロック２１１）。整数および浮動少数点演算のためにそれぞれ別個のレジスタファイル２０８、２１０が存在している。本実施形態の各レジスタファイル２０８、２１０は、さらに、今完成したばかりで、まだレジスタファイルに書き込まれていない結果を、新たな依存ｕオプにバイパスまたは転送することのできるバイパスネットワークを含む。整数レジスタファイル２０８および浮動少数点レジスタファイル２１０は、さらに互いに（with the other）データを通信する機能を有する。一実施形態では、整数レジスタファイル２０８は、２つの別個のレジスタファイル（一方のレジスタファイルが、下位３２ビットのデータ用であり、他方のレジスタファイルが、上位３２ビットのデータ用である）に分割される。浮動少数点命令は通常６４ビット幅から１２８ビット幅であるので、一実施形態の浮動少数点レジスタファイル２１０は、１２８ビット幅のエントリを有する。
【００４０】
実行ブロック２１１は、命令が実際に実行される実行部２１２、２１４、２１６、２１８、２２０、２２２、２２４を含む。このセクションは、マイクロ命令が実行する必要のある整数および浮動少数点データオペランドの値を格納するレジスタファイル２０８、２１０を含む。本実施形態のプロセッサ２００は、幾つかの実行ユニット（アドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、遅いＡＬＵ２２０、浮動少数点ＡＬＵ２２２、浮動少数点移動ユニット２２４）からなる。本実施形態では、浮動少数点実行ブロック２２２、２２４は、浮動少数点ＭＭＸ、ＳＩＭＤ、およびＳＳＥ演算を実行する。本実施形態の浮動少数点ＡＬＵ２２２は、マイクロオプの除算、平方根、および余りを求める、６４ビット×６４ビットの浮動少数点除算器を含む。本発明の実施形態では、浮動少数点の値に関する任意の処理は、浮動少数点ハードウェアで行われる。例えば、整数フォーマットと浮動少数点フォーマットとの間の変換には、浮動少数点レジスタファイルを利用する。同様に、浮動少数点の除算は、浮動少数点除算器で行う。他方で、非浮動少数点および整数のタイプは、整数ハードウェアリソースで処理する。この単純で、非常に頻繁に行われるＡＬＵ演算は、高速ＡＬＵ事項部２１６、２１８に送られる。本実施形態の高速ＡＬＵ２１６、２１８は、二分の一のクロックサイクルという実効レイテンシーで高速処理を行うことができる。一実施形態では、殆どの複雑な整数演算が遅いＡＬＵ２２０に送られるが、これは、遅いＡＬＵ２２０が、乗算、シフト、フラグ論理、および分岐処理といったレイテンシーの長いタイプの演算用の整数実行ハードウェアを含むからである。メモリロード／格納演算は、ＡＧＵ２１２、２１４で行われる。本実施形態では、整数ＡＬＵ２１６、２１８、２２０を、６４ビットのオペランドに対する整数演算を例にとって記載する。しかし別の実施形態では、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等の様々なデータビットをサポートするために実装することもできる。同様に、浮動少数点部２２２、２２４を、様々な幅のビットを有する一定の範囲のオペランドをサポートするために実装することもできる。一実施形態では、浮動少数点部２２２.２２４は、ＳＩＭＤおよびマルチメディア命令と協働して、１２８ビット幅のパックデータオペランドに演算を行うことができる。
【００４１】
「レジスタ」という用語は、ここでは、オペランドを特定するマクロ命令の一部として利用されるオンボードのプロセッサ格納位置を示すために利用される。つまり、ここで利用されるレジスタは、プロセッサ外から見ることができるもののことである（例えばプログラマから見えるもののことである）。しかし、一実施形態のレジスタの意味は、特定の種類の回路に限定されない。一実施形態におけるレジスタは、データの格納および提供が可能であり、且つ、ここで記載する機能を行うことができる、ということのみを要件としている。ここで記載するレジスタは、任意の数の様々な技術を利用してプロセッサ内の回路により実装可能である（例えば、専用物理レジスタ、レジスタリネーミング機能を利用して動的に割り当てられた物理レジスタ、専用レジスタと動的に割り当てられた物理レジスタの組み合わせ等）。一実施形態では、整数レジスタは３２ビットの整数データを格納する。一実施形態のレジスタファイルはさらに、１６個のＸＭＭおよび汎用レジスタを含み、８個のマルチメディア（例えば「ＥＭ６４Ｔ」個の追加）マルチメディアＳＩＭＤレジスタを、パックデータ用に含む。以下の説明では、レジスタは、カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＭＭＸ技術で可能となるマイクロプロセッサ内の６４ビット幅のＭＭＸ（登録商標）レジスタ（「ｍｍ」レジスタと称される場合もある）等の、パックデータを保持するよう設計されるデータレジスタとして理解される。これらＭＭＸレジスタは、整数および浮動少数点の形態で利用することができ、ＳＩＭＤおよびＳＳＥ命令に付随するパックデータエレメントで処理することができる。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはこれらを超える（一般的に「ＳＳＥｘ」と称される）技術に関する１２８ビット幅のＸＭＭレジスタも、これらパックデータオペランドを保持するために利用することができる。本実施形態では、パックデータおよび整数データを格納する際に、レジスタは、２つのデータタイプを区別する必要がない。一実施形態では、他のレジスタおよびレジスタの組み合わせを利用して、２５６ビット以上のデータを格納することもできる。
【００４２】
以下の図の例では、複数のデータオペランドが記載されている。図３Ａは、本発明の一実施形態におけるマルチメディアレジスタにおける様々なタイプのパックデータの表現を示す。図３Ａは、１２８ビット幅のオペランドについて、パックバイト３１０、パックワード３２０、および、パックダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックバイトのフォーマット３１０は、１２８ビットの長さを有し、１６個のパックバイトのデータエレメントを含む。１バイトは、８ビットのデータとして定義されている。各バイトデータエレメントの情報は、ビット７からビット０までをバイト０として、ビット１５からビット８までをバイト１として、ビット２３からビット１６までをバイト２として、最後にビット１２０からビット１２７までをバイト１５として、といった具合に格納される。このようにして全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。また、１６個のデータエレメントにアクセスするとき、１つの処理を１６個のデータエレメントに対して並列に実行することもできる。
【００４３】
一般的に、１データエレメントは、同じ長さの他のデータエレメントとともに単一のレジスタまたはメモリ位置に格納されている個々のデータのことである。ＳＳＥｘ技術に関するパックデータシーケンスでは、ＸＭＭレジスタに格納されているデータエレメント数は、１２８ビットを個々のデータエレメントのビット長で除算した値である。同様に、ＭＭＸおよびＳＳＥ技術に関するパックデータシーケンスでは、ＭＭＸレジスタに格納されているデータエレメントの数は、６４ビットを個々のデータエレメントのビット長で除算した値である。図３Ａに示されているデータのタイプは１２８ビット長であるが、本発明の実施形態は、６４ビット幅であっても、他のサイズのオペランドであっても処理することができる。この例のパックワードフォーマット３２０は１２８ビット長であり、８つのパックワードデータエレメントを含む。各パックワードは、１６ビットの情報を含む。図３Ａのパックダブルワードフォーマット３３０は、１２８ビット長であり、４つのパックダブルワードデータエレメントを含む。各パックダブルワードデータエレメントは、３２ビットの情報を含む。パッククワドワードは１２８ビット長であり、２つのパッククワドワードのデータエレメントを含む。
【００４４】
図３Ｂは、別のレジスタ内のデータ格納フォーマットを示す。各パックデータは、１を超える数の独立データエレメントを含んでよい。パック・ハーフ３４１、パック・シングル３４２、およびパック・ダブル３４３という、３つのパックデータエレメントが記載されている。パック・ハーフ３４１、パック・シングル３４２、およびパック・ダブル３４３の一実施形態は、固定少数点（fixed-point）データエレメントを含む。別の実施形態では、パック・ハーフ３４１、パック・シングル３４２、およびパック・ダブル３４３の１以上が、浮動少数点データエレメントを含む。パック・ハーフ３４１の別の実施形態は、１６ビットのデータエレメントを８つ含む１２８ビット長である。パック・シングル３４２の一実施形態は、１２８ビット長であり、３２ビットのデータエレメントを４つ含む。パック・ダブル３４３の一実施形態は、１２８ビット長であり、６４ビットのデータエレメントを２つ含む。これらパックデータフォーマットは、さらに、他のレジスタ長（例えば９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビット、あるいはそれ以上のビット）に拡張することもできる。
【００４５】
図３Ｃは、本発明の一実施形態におけるマルチメディアレジスタの、様々な符号付き、および、符号なしのタイプのパックデータ表現を示す。符号なしパックバイト表現３４４は、ＳＩＭＤレジスタに符号なしパックバイトが格納されていることを示している。各バイトデータエレメントの情報は、ビット７からビット０までをバイト０として、ビット１５からビット８までをバイト１として、ビット２３からビット１６までをバイト２として、最後に、ビット１２０からビット１２７までをバイト１５として、といった具合に格納される。このようにすることで、全ての利用可能なビットをレジスタで利用することができる。この格納構成によって、プロセッサの格納効率が上がる。さらにこの構成では、１６個のデータエレメントにアクセスするとき、１つの処理を１６個のデータエレメントに対して並列に実行することもできる。符号付きパックデータ表現３４５は、符号付パックバイトの格納状態を示している。各バイトデータエレメントの８つ目のビットは、符号インジケータである。符号なしパックデータ表現３４６は、ワード７からワード０までがどのようにＳＩＭＤレジスタに格納されているかを示している。符号付きパックワード表現３４７は、符号なしパックワードのレジスタ内の表現３４６に類似している。各ワードデータエレメントの１６個目のビットは、符号インジケータである。符号なしパックダブルワード表現３４８は、ダブルワードデータエレメントがどのようい格納されているかを示している。符号付きパックダブルワード表現３４９は、符号なしパックダブルワードのレジスタ内の表現３４８に類似している。必要な符号ビットは、各ダブルワードデータエレメントの３２個目のビットである。
【００４６】
図３Ｄは、演算符号（オペコード）フォーマット３６０の一実施形態を示しており、３２以上のビットを有し、レジスタ／メモリオペランドアドレスモードが「IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference」に記載されているオペコードフォーマットの種類に対応しており、この文献は、カリフォルニア州のサンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎが発行しており、www.intel. com/design/litcentr.から入手可能である。一実施形態では、シフトおよびＸＯＲ演算は、フィールド３６１および３６２の１以上で符号化されてよい。各命令について、２つまでのオペランド位置（２つのソースオペランド識別子３６４および３６５までを含む）を特定する。シフトおよびＸＯＲ命令の一実施形態では、宛先オペランド識別子３６６は、ソースオペランド識別子３６４と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、宛先オペランド識別子３６６は、ソースオペランド識別子３６５と等しいが、他の実施形態では異なっていてもよい。シフトおよびＸＯＲ命令の一実施形態では、ソースオペランド識別子３６４および３６５が特定するソースオペランドのいずれかを、シフトおよびＸＯＲオペランドの結果で上書きし、他の実施形態では、識別子３６４がソースレジスタエレメントに対応しており、識別子３６５が宛先レジスタエレメントに対応している。シフトおよびＸＯＲ命令の一実施形態では、オペランド識別子３６４および３６５を利用して、３２ビットまたは６４ビットのソースオペランドおよび宛先オペランドを特定する。
【００４７】
図３Ｅは、４０以上のビットを有する別の演算符号（オペコード）フォーマット３７０を示す。オペコードフォーマット３７０は、オペコードフォーマット３６０に対応しており、オプションのプレフィックスバイト３７８を含む。この種類のシフトおよびＸＯＲ演算は、フィールド３７８、３７１、および３７２の１以上で符号化されてよい。ソースオペランド識別子３７４および３７５により、および、プレフィックスバイト３７８により、各命令についてオペランド位置を２つまで特定することができる。シフトおよびＸＯＲ命令の一実施形態では、プレフィックスバイト３７８を利用して、３２ビットまたは６４ビットのソースオペランドおよび宛先オペランドを特定する。シフトおよびＸＯＲ命令の一実施形態では、宛先オペランド識別子３７６はソースオペランド識別子３７４と等しいが、他の実施形態では異なっていてもよい。別の実施形態では、宛先オペランド識別子３７６は、ソースオペランド識別子３７５と等しいが、他の実施形態では異なっていてもよい。シフトおよびＸＯＲ命令の一実施形態では、オペランド識別子３７４および３７５が特定するオペランドのいずれかを、オペランド識別子３７４および３７５が特定する別のオペランドに、シフトおよびＸＯＲを行い、これを、シフトおよびＸＯＲの結果で上書きするが、他の実施形態では、識別子３７４および３７５が特定するオペランドのシフトおよびＸＯＲは、別のレジスタの別のデータエレメントに書き込まれる。オペコードフォーマット３６０および３７０は、レジスタからレジスタへ、メモリからレジスタへ、メモリによりレジスタへ、レジスタによりレジスタへ、即値よりレジスタへ、レジスタから、ＭＯＤフィールド３６３および３７３により部分的に、およびオプションとしてスケールインデックスベースおよび変位バイトにより特定されるメモリアドレスへ、といった書き込みを許可する。
【００４８】
次に図３Ｆを参照すると、一部の別の実施形態では、６４ビットの単一命令多重データ（ＳＩＭＤ）算術演算を、コプロセッサデータ処理（ＣＤＰ）命令により行ってよい。演算符号（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有するこのようなＣＤＰ命令を示す。この種類のＣＤＰ命令は、シフトおよびＸＯＲ演算の別の実施形態では、フィールド３８３、３８４、３８７、および３８８の１以上により符号化されてよい。各命令について、２つまでのソースオペランド識別子３８５および３９０、並びに、１つの宛先オペランド識別子３８６を含む、３つまでのオペランド位置を特定する。コプロセッサの一実施形態は、８、１６、３２、および６４ビットの値に演算を行うことができる。一実施形態では、シフトおよびＸＯＲ演算を、浮動少数点データエレメントに行う。一部の実施形態では、シフトおよびＸＯＲ命令は、選択フィールド３８１を利用して条件付きで実行されてよい。幾つかのシフトおよびＸＯＲ命令では、ソースデータサイズはフィールド３８３により符号化されてよい。シフトおよびＸＯＲ命令の一部の実施形態では、ゼロ（Ｚ）、負（Ｎ）、繰上げ（carry）（Ｃ）、およびオーバフロー（Ｖ）検知をＳＩＭＤフィールドに対して行う。一部の命令では、飽和のタイプをフィールド３８４で符号化することもできる。
【００４９】
図４は、本発明におけるパックデータオペランドにシフトおよびＸＯＲ演算を行う論理の一実施形態のブロック図である。本発明の実施形態は、上述したもののような様々な種類のオペランドを有する関数に実装することができる。簡潔にいうと、以下の記載および例は、データエレメントを処理するシフトおよびＸＯＲ命令を例にとって説明される。一実施形態では、第１のオペランド４０１は、シフタ４１０により、入力４０５が特定する量だけシフトされる。一実施形態では、これは右シフトである。しかし他の実施形態では、シフタは左シフト演算を行う。一部の実施形態では、オペランドはスカラー値であるが、他の実施形態では、複数の異なる可能性のあるデータサイズおよびタイプを有するパックデータ値（例えば浮動少数点、整数）である。一実施形態では、シフトカウント４０５は、パック（あるいは「ベクトル」）値であり、その各エレメントは、対応するシフトカウントエレメントによりシフトされるパックオペランドのエレメントに対応している。他の実施形態では、シフトカウントは、第１のデータオペランドの全てのエレメントに適用される。さらに一部の実施形態では、シフトカウントは、命令の１フィールドで指定される（例えば即値、ｒ／ｍ、またはその他のフィールド）。他の実施形態では、シフトカウントは、命令が指定するレジスタにより指定される。
【００５０】
シフトされたオペランドは次に、論理４２０により値４３０でＸＯＲされ、ＸＯＲされた結果は、宛先格納位置（例えばレジスタ）４２５に格納される。一実施形態では、ＸＯＲ値４３０は、パック（あるいは「ベクトル」）値であり、その各エレメントは、対応するＸＯＲエレメントでＸＯＲされるパックオペランドのエレメントに対応している。他の実施形態では、ＸＯＲ値４３０は、第１のデータオペランドの全てのエレメントに適用される。さらに一部の実施形態では、ＸＯＲ値は、命令の１フィールドで指定される（例えば即値、ｒ／ｍ、またはその他のフィールド）。他の実施形態では、ＸＯＲ値は、命令が指定するレジスタにより指定される。
【００５１】
図５は、本発明の一実施形態におけるシフトおよびＸＯＲ命令の演算を示す。処理５０１で、シフトおよびＸＯＲ命令を受信すると、第１のオペランドを、処理５０５のシフトカウント分だけシフトする。一実施形態では、これは右シフトである。他の実施形態では、シフタは左シフトを行ってもよい。一部の実施形態では、オペランドはスカラー値であるが、他の実施形態では、複数の異なる可能性のあるデータサイズおよびタイプを有するパックデータ値（例えば浮動少数点、整数）である。一実施形態では、シフトカウント４０５は、パック（あるいは「ベクトル」）値であり、その各エレメントは、対応するシフトカウントエレメントによりシフトされるパックオペランドのエレメントに対応している。他の実施形態では、シフトカウントは、第１のデータオペランドの全てのエレメントに適用される。さらに一部の実施形態では、シフトカウントは、命令の１フィールドで指定される（例えば即値、ｒ／ｍ、またはその他のフィールド）。他の実施形態では、シフトカウントは、命令が指定するレジスタにより指定される。
【００５２】
処理５１０で、シフトされた値を、ＸＯＲ値でＸＯＲする。一実施形態では、ＸＯＲ値４３０は、パック（あるいは「ベクトル」）値であり、その各エレメントは、対応するＸＯＲエレメントでＸＯＲされるパックオペランドのエレメントに対応している。他の実施形態では、ＸＯＲ値４３０は、第１のデータオペランドの全てのエレメントに適用される。さらに一部の実施形態では、ＸＯＲ値は、命令の１フィールドで指定される（例えば即値、ｒ／ｍ、またはその他のフィールド）。他の実施形態では、ＸＯＲ値は、命令が指定するレジスタにより指定される。
【００５３】
処理５１５で、シフトされ、ＸＯＲされた値を、所与の位置に格納する。一実施形態では、この位置はスカラーレジスタである。別の実施形態では、この位置がパックデータレジスタである。別の実施形態では、宛先位置はさらにソース位置としても利用される（例えば命令が指定するパックデータレジスタ）。他の実施形態では、宛先位置は、最初のオペランドその他の値（例えばシフトカウントまたはＸＯＲ値）を格納するソース位置とは異なる位置である。
【００５４】
一実施形態では、シフトおよびＸＯＲ命令は、様々なコンピュータアプリケーションでデータの重複除外（de-duplication）を行う際に有用である。データの重複除外は、ファイル間で共通のデータブロックを見つけて、ディスクのストレージおよび／またはネットワーク帯域幅を最適化しようとする試みである。一実施形態では、シフトおよびＸＯＲ命令は、ローリングハッシュ、ハッシュダイジェスト（例えばＳＨＡ１またはＭＤ５）および固有のチャンクの圧縮（高速レンペル・ジブ（Ｌｅｍｐｅｌ−Ｚｉｖ）スキームを利用する）を利用して、チャンク境界を見つける等の処理を利用してデータの重複解除性能を向上させる用途に有用である。
【００５５】
例えば、あるデータの重複解除アルゴリズムは、以下の擬似コードで示すことができる。
【数１】
0005567668.tif 000002
【００５６】
上述したアルゴリズムでは、スクランブルテーブルは、ランダムな３２ビットの定数の２５６のエントリアレイであり、ｖは、過去の３２バイトのデータのハッシュ値を有するローリングハッシュである。チャンク境界が見つかると、アルゴリズムは、ｒｅｔ＝１として戻り、位置ｐは、チャンクの境界を示す。値ｚは、１２から１５といった、良好なチャンクを検知することができる値であり、用途に応じて決定されてよい。一実施形態では、シフトおよびＸＯＲ命令を利用することで、上述のアルゴリズムを、約２サイクル／バイトのレートで行うことができる。他の実施形態では、シフトおよびＸＯＲ命令は、用途によっては、これよりさらに速く、または遅くアルゴリズムを実行することもできる。
【００５７】
シフトおよびＸＯＲ命令を利用する少なくとも１つの実施形態を、以下の擬似コードで表すことができる。
【数２】
0005567668.tif 000003
【００５８】
上述したアルゴリズムでは、ｂｒｅｆ１＿ｓｃｒａｍｂｌｅアレイの各エントリが、元のスクランブルアレイの対応するエントリのビットを反映したバージョンを含む。一実施形態では、上述したアルゴリズムにより、右ではなくて左にｖをシフトして、ｖには、ローリングハッシュのビットが反映されたバージョンが含まれる。一実施形態では、チャンク境界のチェックを、先頭のゼロの最小数（minimum number of leading zeros）をチェックすることにより行う。
【００５９】
他の実施形態では、シフトおよびＸＯＲ命令を、他の有用なコンピュータ演算およびアルゴリズムで利用することもできる。さらに、実施形態によって、シフトおよびＸＯＲ演算を大規模に利用する数多くのプログラムの性能を向上させることができる。
【００６０】
このように、シフトおよびＸＯＲ命令を行う技術が開示された。一部の実施形態は、添付図面に示されているが、これら実施形態はあくまで例示を意図しており、広い範囲に及ぶ発明を制約する意図はなく、本発明が図示されたり説明されたりしている特定の構成および配置に限定されない点に留意されたい。本開示を読んだ当業者であれば、様々な他の変形例を想到する。当技術分野は成長著しく、将来の進歩を見通すことが難しいので、開示されている実施形態は、本開示の原理または添付請求項の範囲から逸脱しなければ、技術的進歩により、構成および詳細において容易に変更可能であることを理解されたい。
本実施形態によれば、以下の各構成もまた開示される。
（項目１）
第１の値を所与のシフト量だけシフトして、前記シフトされた値を第２の値でＸＯＲする、シフトおよびＸＯＲ命令を実行する論理を備えるプロセッサ。
（項目２）
前記第１の値は左シフトされる項目１に記載のプロセッサ。
（項目３）
前記第１の値は右シフトされる項目１に記載のプロセッサ。
（項目４）
前記第１の値は論理シフトされる項目１に記載のプロセッサ。
（項目５）
前記第１の値は算術シフトされる項目１に記載のプロセッサ。
（項目６）
シフタとＸＯＲ回路とを備える項目１に記載のプロセッサ。
（項目７）
前記シフトおよびＸＯＲ命令は、前記第２の値を格納する第１のフィールドを含む項目１に記載のプロセッサ。
（項目８）
前記第１の値は、パックデータタイプである項目１に記載のプロセッサ。
（項目９）
シフトおよびＸＯＲ演算を実行させる第１の命令を格納するストレージと、
第１の値を所与のシフト量だけシフトして、前記シフトされた値を第２の値でＸＯＲする、シフトおよびＸＯＲ命令を実行する論理を実行するプロセッサと
を備えるシステム。
（項目１０）
前記第１の値は左シフトされる項目９に記載のシステム。
（項目１１）
前記第１の値は右シフトされる項目９に記載のシステム。
（項目１２）
前記第１の値は論理シフトされる項目９に記載のシステム。
（項目１３）
前記第１の値は算術シフトされる項目９に記載のシステム。
（項目１４）
シフタとＸＯＲ回路とを備える項目９に記載のシステム。
（項目１５）
前記シフトおよびＸＯＲ命令は、前記第２の値を格納する第１のフィールドを含む項目９に記載のシステム。
（項目１６）
前記第１の値は、パックデータタイプである項目９に記載のシステム。
（項目１７）
第１の値を所与のシフト量だけシフトして、前記シフトされた値を第２の値でＸＯＲする、シフトおよびＸＯＲ命令を実行する段階を備える方法。
（項目１８）
前記第１の値は左シフトされる項目１７に記載の方法。
（項目１９）
前記第１の値は右シフトされる項目１７に記載の方法。
（項目２０）
前記第１の値は論理シフトされる項目１７に記載の方法。
（項目２１）
前記第１の値は算術シフトされる項目１７に記載の方法。
（項目２２）
シフタとＸＯＲ回路とを備える項目１７に記載の方法。
（項目２３）
前記シフトおよびＸＯＲ命令は、前記第２の値を格納する第１のフィールドを含む項目１７に記載の方法。
（項目２４）
前記第１の値は、パックデータタイプである項目１７に記載の方法。
（項目２５）
機械に、
第１の値を所与のシフト量だけシフトする段階と、
前記シフトされた値を第２の値でＸＯＲする段階と
を含む方法を実行させるためのプログラム。
（項目２６）
前記第１の値は左シフトされる項目２５に記載のプログラム。
（項目２７）
前記第１の値は右シフトされる項目２５に記載のプログラム。
（項目２８）
前記第１の値は論理シフトされる項目２５に記載のプログラム。
（項目２９）
前記第１の値は算術シフトされる項目２５に記載のプログラム。
（項目３０）
シフタとＸＯＲ回路とを備える項目２５に記載のプログラム。
（項目３１）
前記シフトおよびＸＯＲ命令は、前記第２の値を格納する第１のフィールドを含む項目２５に記載のプログラム。
（項目３２）
前記第１の値は、パックデータタイプである項目２５に記載のプログラム。
（項目３３）
第１のシフト値と第２のビット反映値との間で排他的論理和（ＸＯＲ）演算を実行して、実行結果を第１のレジスタに格納する段階と、
前記実行結果の先頭のゼロの最小数をチェックする段階と
を備える方法。
（項目３４）
先頭のゼロの最小数が前記実行結果にある場合に、前記実行結果が第１のチャンクに対応していることを示す項目３３に記載の方法。
（項目３５）
前記第１のシフト値は、１ビットに相当する位置だけ左シフトされる項目３４に記載の方法。
（項目３６）
前記第１のシフト値は、１ビットに相当する位置だけ右シフトされる項目３４に記載の方法。
【図１Ａ】
0005567668.tif 000004
【図１Ｂ】
0005567668.tif 000005
【図１Ｃ】
0005567668.tif 000006
【図２】
0005567668.tif 000007
【図３Ａ】
0005567668.tif 000008
【図３Ｂ】
0005567668.tif 000009
【図３Ｃ】
0005567668.tif 000010
【図３Ｄ】
0005567668.tif 000011
【図３Ｅ】
0005567668.tif 000012
【図３Ｆ】
0005567668.tif 000013
【図４】
0005567668.tif 000014
【図５】
0005567668.tif 000015