(57)【特許請求の範囲】
【請求項１】
コンピュータプロセッサ上で論理演算を実行する方法であり、
２以上のソースオペランドのそれぞれからデータを読み込む段階と、
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成する段階と、
前記即値から、前記指標値により識別される前記ビットのサブセットを読み込む段階と、
前記即値から読み込まれた前記ビットを宛先レジスタ内に格納し、前記命令の結果を生成する段階と
を備える、方法。
【請求項２】
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成する段階は、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、前記指標値を生成する段階を有し、
前記指標値は、前記即値内のビット位置を識別するためのものである、請求項１に記載の方法。
【請求項３】
前記指標値により識別された前記即値内の前記ビット位置からビットを読み込む段階と、
前記即値内から読み込まれたビットを宛先レジスタ内の所定のビット位置に格納する段階とをさらに備え、
前記所定のビット位置は、前記指標値を生成するために連結されたビットが存在した、各ソースオペランド内でのビット位置に対応するものである、
請求項２に記載の方法。
【請求項４】
前記ソースオペランドはＮビットのソースレジスタに格納されており、
前記宛先レジスタはＮビットの宛先レジスタであり、
前記ビットを連結し、前記指標値を生成する段階は、
それぞれの前記ソースオペランドからＮ個のビットの全てを読み込み、前記即値内のビット位置を識別する指標値をＮ個生成する段階を有し、
さらに、前記方法は、
前記Ｎ個の指標値を用い、前記即値内のＮ個のビット位置を識別して、識別したＮ個のビット位置からＮ個のビットを読み込む段階と、
前記即値から読み込んだＮ個のビットの全てを宛先レジスタに格納することにより、前記論理演算の前記結果を生成する段階と
をさらに有する、請求項２又は３に記載の方法。
【請求項５】
Ｎは６４に等しい、請求項４に記載の方法。
【請求項６】
前記ソースオペランドは３つあり、
前記即値は８ビットであり、
前記３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、前記指標値を生成する段階をさらに備え、
前記指標値は、８ビットの前記即値内のビット位置を識別するためのものである、請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記即値は、前記命令と共に送信された８ビットの値である、請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記８ビットの値はｉｍｍ８値である、請求項７に記載の方法。
【請求項９】
前記即値は、前記命令と共に送信された１６ビットの値である、請求項１から５のいずれか１項に記載の方法。
【請求項１０】
命令を処理する装置であり、
命令をデコードし、前記命令によって実行される論理演算を識別するデコーダユニットと、
動作を実行することにより、前記論理演算を実行する実行ユニットと
を備え、
前記動作は、
２以上のソースオペランドのそれぞれからデータを読み込むことと、
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することと、
前記即値から、前記指標値により識別される前記ビットのサブセットを読み込むことと、
前記即値から読み込まれた前記ビットを宛先レジスタ内に格納し、前記命令の結果を生成することと
を含む、装置。
【請求項１１】
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することは、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、前記指標値を生成することを含み、
前記指標値は、前記即値内のビット位置を識別するためのものである、請求項１０に記載の装置。
【請求項１２】
前記実行ユニットが実行する前記動作は、
前記指標値により識別された前記即値内の前記ビット位置から前記ビットを読み込むことと、
前記即値内から読み込まれたビットを前記宛先レジスタ内の所定のビット位置に格納することとをさらに含み、
前記所定のビット位置は、前記指標値を生成するために連結されたビットが存在した、各ソースオペランド内でのビット位置に対応するものである、
請求項１１に記載の装置。
【請求項１３】
前記ソースオペランドはＮビットのソースレジスタに格納されており、
前記宛先レジスタはＮビットの宛先レジスタであり、
前記ビットを連結し、前記指標値を生成することは、
それぞれの前記ソースオペランドからＮ個のビットの全てを読み込み、前記即値内のビット位置を識別する指標値をＮ個生成することを含み、
さらに、前記実行ユニットが実行する前記動作は、
前記Ｎ個の指標値を用い、前記即値内のＮ個のビット位置を識別して、識別したＮ個のビット位置からＮ個のビットを読み込むことと、
前記即値から読み込んだＮ個のビットの全てを宛先レジスタに格納することにより、前記論理演算の前記結果を生成することと
をさらに含む、請求項１１又は１２に記載の装置。
【請求項１４】
Ｎは６４に等しい、請求項１３に記載の装置。
【請求項１５】
前記ソースオペランドは３つあり、
前記即値は８ビットであり、
前記実行ユニットが実行する前記動作は、前記３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、前記指標値を生成することをさらに含み、
前記指標値は、８ビットの前記即値内のビット位置を識別するためのものである、請求項１０から１４のいずれか１項に記載の装置。
【請求項１６】
前記即値は、前記命令と共に送信された８ビットの値である、請求項１０から１５のいずれか１項に記載の装置。
【請求項１７】
前記８ビットの値はｉｍｍ８値である、請求項１６に記載の装置。
【請求項１８】
前記即値は、前記命令と共に送信された１６ビットの値である、請求項１０から１４のいずれか１項に記載の装置。
【請求項１９】
コンピュータシステムであり、
ディスプレイと、
命令を格納するメモリと、
前記命令を処理するプロセッサと
を備え、
前記プロセッサは、
命令をデコードし、前記命令によって実行される論理演算を識別するデコーダユニットと、
動作を実行することにより、前記論理演算を実行する実行ユニットと
を有し、
前記動作は、
２以上のソースオペランドのそれぞれからデータを読み込むことと、
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することと、
前記即値から、前記指標値により識別される前記ビットのサブセットを読み込むことと、
前記即値から読み込まれた前記ビットを宛先レジスタ内に格納し、前記命令の結果を生成することと、を含むコンピュータシステム。
【請求項２０】
前記ソースオペランドから読み込んだ前記データを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することは、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、前記指標値を生成することを含み、
前記指標値は、前記即値内のビット位置を識別するためのものである、請求項１９に記載のコンピュータシステム。
【請求項２１】
前記実行ユニットが実行する前記動作は、
前記指標値により識別された前記即値内の前記ビット位置から前記ビットを読み込むことと、
前記即値内から読み込まれたビットを前記宛先レジスタ内の所定のビット位置に格納することとをさらに含み、
前記所定のビット位置は、前記指標値を生成するために連結されたビットが存在した、各ソースオペランド内でのビット位置に対応するものである、
請求項２０に記載のコンピュータシステム。
【請求項２２】
前記ソースオペランドはＮビットのソースレジスタに格納されており、
前記宛先レジスタはＮビットの宛先レジスタであり、
前記ビットを連結し、前記指標値を生成することは、
それぞれの前記ソースオペランドからＮ個のビットの全てを読み込み、前記即値内のビット位置を識別する指標値をＮ個生成することを含み、
さらに、前記実行ユニットが実行する前記動作は、
前記Ｎ個の指標値を用い、前記即値内のＮ個のビット位置を識別して、識別したＮ個のビット位置からＮ個のビットを読み込むことと、
前記即値から読み込んだＮ個のビットの全てを宛先レジスタに格納することにより、前記論理演算の前記結果を生成することと
をさらに含む、請求項２０又は２１に記載のコンピュータシステム。
【請求項２３】
Ｎは６４に等しい、請求項２２に記載のコンピュータシステム。
【請求項２４】
前記ソースオペランドは３つあり、
前記即値は８ビットであり、
前記実行ユニットが実行する前記動作は、前記３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、前記指標値を生成することをさらに含み、
前記指標値は、８ビットの前記即値内のビット位置を識別するためのものである、請求項１９から２３のいずれか１項に記載のコンピュータシステム。
【請求項２５】
前記即値は、前記命令と共に送信された８ビットの値である、請求項１９から２４のいずれか１項に記載のコンピュータシステム。
【請求項２６】
前記８ビットの値はｉｍｍ８値である、請求項２５に記載のコンピュータシステム。
【請求項２７】
前記即値は、前記命令と共に送信された１６ビットの値である、請求項１９から２３のいずれか１項に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明は、一般的に、コンピュータプロセッサの分野に関する。より詳細には、本願発明は、コンピュータプロセッサ上での汎用論理演算に対応する装置および方法に関する。
【背景技術】
【０００２】
コンピュータプロセッサは、命令に従い数学演算および論理演算を実行する。数学演算には、例えば、それぞれ異なる正確性での浮動小数点加算および整数加算、減算、乗算および除算が含まれる。論理演算には、わずかながら例を挙げると、ＡＮＤ、ＯＲ、ＮＡＮＤ、ＮＯＲ、ＸＯＲ、左シフト、右シフト、スウィズル、選択および投票などの関数が含まれる。
【０００３】
（特に３つ以上のオペランドが関わる）特定の状況において、比較的単純な論理演算でも、多大な数の命令の実行を必要となり得る。例を挙げると、宛先レジスタ（ｄｅｓｔ）内の特定のビットが設定された場合、ソースレジスタ１（ｓｒｃ１）が選択されるべきか、若しくは、ソースレジスタ２（ｓｒｃ２）が選択されるべきかを特定するのに、ｄｅｓｔ  ＝（ｓｒｃ１  ＡＮＤ  ｄｅｓｔ）ＯＲ（ｓｒｃ２  ＡＮＤ（ＮＯＴ  ｄｅｓｔ））などの論理が必要とされる。従来技術に基づいてこの演算を実行するには、複数の異なる命令（２つのＡＮＤ演算、１つのＯＲ演算、１つのＮＯＴ演算）を実行する必要がある。従来技術を用いると、複数の命令シーケンスを用いて、多様な、他の比較的単純な関数を実行する必要がある。
【０００４】
したがって、より少ない数の命令の実行を必要とする、論理演算を実行する新たな技術があれば有益であろう。
【図面の簡単な説明】
【０００５】
次の図面と併せて以下の詳細な説明を読むことにより、本願発明のより良い理解が可能となるであろう。
【図１】図１は、即値の指標が３つのソースオペランドから生成される、本願発明の一実施形態を示す。
【図２】図２は、即値に指標付けし論理演算を実行する方法の一実施形態を示す。
【図３】図３は、即値に指標付けし論理演算を実行する方法の他の実施形態を示す。
【図４】図４は、本願発明の一実施形態で採用されるプロセッサアーキテクチャを示す。
【図５】図５は、本願発明の一実施形態で採用されるシステムアーキテクチャを示す。
【図６】図６は、本願発明の一実施形態に係る複数の処理要素を示す。
【発明を実施するための形態】
【０００６】
以下において、説明を目的とし、以下に説明される本願発明の実施形態がより良く理解されるように、様々な特定的な詳細が示される。しかし、当業者であれば、本願発明の実施形態が、それら特定的な詳細のうちいくつかがなくても実施されることを理解されよう。他の例においては、周知の構造およびデバイスが、本願発明の実施形態の基本的な原理を曖昧にすることを避けるべく、ブロック図の形態で示される。
【０００７】
「即値」とは、命令に関連付けられた（例えば、命令の一部として明示的に含まれている、若しくは命令と組み合わせられた）バイナリ値である。ｘ８６命令セットに関連付けられた即値で周知のものとしては、ｉｍｍ８の符号が与えられる８ビットの即値がある。命令の即値は、命令と共にコンパイル時に生成される。以下に説明する本願発明の実施形態ではｉｍｍ８またはｉｍｍ１６の即値を用いるが、本願発明の基本的な原理は、特定のタイプの即値に限定されない。実際、本願発明の基本的な原理は、命令に関連付けられたあらゆるタイプのバイナリコードを用いて実装することが出来る。
【０００８】
本願発明の一実施形態において、（例えば、ＡＮＤ、ＮＡＮＤ、ＸＯＲ、反転、選択、投票など）異なる論理演算を識別するのに異なる即値が用いられる。本実施形態において、命令のソースオペランドからの特定のビットが組み合わせられ、当該命令の即値内のビット位置を識別する指標値が生成される。識別されたビット位置から読み込まれるビットはその後、宛先レジスタにおいて組み合わせられ、論理演算の結果が得られる。言い換えると、即値は、各論理演算の結果を得るべく、ルックアップテーブルとして用いられる。
【０００９】
図１は、１つの特定的な例を示す。本例において、ソースレジスタ１（ｓｒｃ１）１０２、ソースレジスタ２（ｓｒｃ２）１０１および宛先レジスタ（ｄｅｓｔ）１００に格納される３つのオペランドからビットが読み込まれ、即値１１０内のビット位置を識別する指標１０５が生成される。識別されたビット位置にあるバイナリ値はその後、宛先レジスタ１００へとコピーされる。説明を目的としてこの特定的なレジスタ構成を用いているが、本願発明の基本的な原理は特定の組のレジスタに限定されない。例えば、ソースオペランドの格納に「宛先」レジスタを用いるのではなく、（例えば、「ソースレジスタ３」など）専用の第３のソースレジスタを用いてもよい。
【００１０】
図１に示す特定的な例において、宛先レジスタ１００およびソースレジスタ１０１、１０２の第１ビット位置からのビットを最初に読み込み、（実線矢印で示される）指標０１０を生成する。一実施形態において、指標は、３つのソース値のビット毎の連結により生成される。指標０１０は、即値１１０のビット位置２を識別する（つまり、バイナリ値０１０は、２に等しい）。示されるように、ビット位置２からのビットをその後、即値から読み込み（示される例においてはバイナリ値１）、宛先レジスタの第１ビット位置に格納する。全てのビットが読み込まれ、指標付きのビット値が即値から宛先レジスタへコピーされるまで、同じ処理が、各ソースオペランドのそれぞれのビットに関して実行される。例えば図１に示すように、１１０という指標値が宛先レジスタおよびソースレジスタの第２ビット位置からのビットを用いて生成され、この指標値を用いてビット位置６における即値の指標付けをする（つまり、バイナリ値１１０は６に等しい）。ビット位置６からのビットがその後、即値（バイナリ値０）から読み込まれ、宛先レジスタの第２ビット位置に格納される。
【００１１】
図２は、本願発明の一実施形態に係る方法を示す。２０１において、（例えば、ｄｅｓｔ、ｓｒｃ１、ｓｒｃ２などの）オペランドレジスタの指定されたビット位置から値が読み込まれる。複数の組の値を、同時に平行して複数の指標値から読み込んでよい。２０２において、それらの値を組み合わせて即値の指標を生成し、２０３において、その指標を用いて即値内のビット位置を識別する。上述したように、一実施形態において、ソースオペランドの対応するビット位置からのビットが連結され、即値の指標が生成される。２０４において、指標値によって識別されるビット位置における値を読み込み、２０５において、指標付けされたビット位置からの値を宛先レジスタへコピーする。
【００１２】
上記の技術を用いることにより、異なる即値を指定し、異なる論理演算を実行することが出来る。例としてであり、限定を意味するわけではないが、以下のようなタイプの演算を、以下の即値を用いて実行することが出来る。
【００１３】
１．全ての結果を１に設定
即値＝１１１１１１１１
本例において、即値から読み込んだ全てのビットが、宛先レジスタにおいてバイナリ値１となる。
【００１４】
２．コピーしつつ反転
即値＝０１０１０１０１
（例えば、現在のｘ８６命令セット内で実行される）現在のＮＯＴ命令が、オリジナルのデータを分解し、位置的に反転される。対照的に、上記の即値を用いる上述した技術は、異なるレジスタへのコピーを行う。この命令は、ｄｅｓｔ＝ＮＯＴ  ｓｒｃ１となる。
【００１５】
３．既存の論理演算に倣う
即値＝１０００１０００
この即値によって、ソースレジスタ１およびソースレジスタ２内の値のＡＮＤ演算となり、つまりｄｅｓｔ＝ｓｒｃ１  ＡＮＤ  ｓｒｃ２となる。ビット０−３およびビット７−４は同じなので、宛先レジスタ内の値（ｄｅｓｔ）は結果に影響を与えない。よって、一実施形態において、宛先レジスタは読み込まれず、電力消費量が減少する。
【００１６】
以下の表（表Ａ）は、既存のｘ８６論理演算と同等のｉｍｍ８値を示す。
【表１】
0005607832.tif 000002
【００１７】
４．既存の２つの論理演算を組み合わせる
即値＝０１１１１０００
この即値は、ソースレジスタ１およびソースレジスタ２のＡＮＤ演算となり、宛先レジスタ内の値のＸＯＲされた結果が得られる。命令は、ｄｅｓｔ＝（ｓｒｃ１  ＡＮＤ  ｓｒｃ２）ＸＯＲ  ｄｅｓｔとなる。上述したように、従来の技術ではこの演算を実行するには、複数の異なる命令を実行するしかなく、多大な時間および処理リソースを要した。対照的に、上記で特定した即値を用いることにより、本明細書で説明する他の演算と同じ時間内で結果を得ることが可能となる。
【００１８】
５．選択
即値＝１０１０１１００
この演算の目的は、宛先レジスタ内の対応するビットが設定される場合にソースレジスタ１を選択し、そうでなければソースレジスタ２を設定することにある。従来、この処理には多大な数の命令を要するｄｅｓｔ＝（ｓｒｃ１  ＡＮＤ  ｄｅｓｔ）ＯＲ（ｓｒｃ２  ＡＮＤ（ＮＯＴ  ｄｅｓｔ））などの論理が必要であった。対照的に、上記で特定した即値を用いることにより、本明細書で説明する他の即値演算と同程度の効率性で、結果を得ることが出来る。
【００１９】
６．投票
即値＝１１１０１０００
この演算を用い、３つの入力値のうち、最もポピュラーなものを選択する。例えば、宛先レジスタ内のビットが０であり、ソースレジスタ１内のビットが１であり、ソースレジスタ２内のビットが０であった場合、０が最もポピュラーな出力となる。よって、０が選択され、宛先レジスタ内に格納される。
【００２０】
なお、上述した演算は、単に例示を目的として示されている。本願発明の基本的な原理は、特定の組の演算に限定されない。本願発明の基本的な原理によると、異なる即値を用いて、実質的に無限の数の論理演算を実行することが出来る（ただし、８ビットの即値を用いた場合には、２５６の論理演算のみが可能である）。
【００２１】
以下の擬似コードは、６４ビットのオペランドを有し、ｉｍｍ８の即値を用いるプロセッサパイプラインにおいて実行される場合の、本願発明の一実施形態を表す。
ｆｏｒ  （ｉ  ＝  ０；  ｉ  ＜  ６４；  ｉ＋＋）  ｛
ｉｎｄｅｘ  ＝  （ｄｅｓｔ［ｉ］＜＜２）  ｜  （ｓｒｃ２［ｉ］＜＜１）  ｜  （ｓｒｃ１［ｉ］）；
ｄｅｓｔ［ｉ］  ＝  ｉｍｍ８［ｉｎｄｅｘ］；
｝
【００２２】
この実行例において、指標値は、宛先レジスタ（ｄｅｓｔ）、ソースレジスタ１（ｓｒｃ１）およびソースレジスタ２（ｓｒｃ２）の（０〜６３の間の）ビット位置ｉにおけるビット値のそれぞれを連結することにより計算される。＜＜２および＜＜１の演算では、ビットが左へそれぞれ２および１だけシフトされ、適切に指標が生成されるようビットがアラインされる。例えば、各オペランドからのビット値が１である場合、ｄｅｓｔ［ｉ］＜＜２の結果得られるのは１００であり、ｓｒｃ２［ｉ］＜＜１の結果得られるのは０１０であり、ｓｒｃ１［ｉ］の結果得られるのは００１である。その後、ビットごとのＯＲ演算が（演算子｜で示されるように）それら結果に対し実行される。最終的に、ｉｍｍ８内の特定のビットを識別する指標値が結果として得られる。なお、外側のｆｏｒ（）ループは、擬似コードを例示する目的で示しており、一実施形態において、６４の全ての演算が、並行して、ハードウェアの別個のコピーにおいて実行される。
【００２３】
以下の擬似コードは、本願発明の他の実施形態を表し、３２ビットの１６のパックデータ要素をそれぞれ格納する５１２ビットのレジスタおよびｉｍｍ８の即値を用いるプロセッサマイプラインにおいて実行される。
ｆｏｒ  （ｎ  ＝  ０；  ｎ  ＜  １６；  ｎ＋＋）  ｛
ｉｆ（ｍａｓｋ［ｎ］  ！＝  ０）  ｛
ｆｏｒ  （ｊ  ＝  ０；  ｊ  ＜  ３２；  ｊ＋＋）  ｛
ｉ  ＝  ３２＊ｎ  ＋  ｊ；
ｉｎｄｅｘ  ＝  （ｄｅｓｔ［ｉ］＜＜２）  ｜  （ｓｒｃ２［ｉ］＜＜１）  ｜  （ｓｒｃ１［ｉ］）；
ｄｅｓｔ［ｉ］  ＝  ｉｍｍ８［ｉｎｄｅｘ］；
｝
｝
｝
【００２４】
本実施形態において、３２ビットの１６のパックデータ要素のそれぞれと関連付けられたビットを格納するマスクレジスタを用いる。マスク［ｎ］！＝０テストは、データ要素に関連付けられたマスクビットが０に等しい場合、当該データ要素の宛先レジスタ（ｄｅｓｔ）内に格納される現在の値が変更されないままとなることを示す。しかし、マスクビットが０以外である場合、次のＦＯＲループが実行され、当該データ要素の指標値が（上述したように）計算されることとなる。ここでも、ｆｏｒ（）ループが示されているが、一実施形態においては、５１２の演算の全てが並行して実行される。
【００２５】
上述した本願発明の実施形態は、３つのソースオペランドを用いて実施されるが、本願発明の基本的な原理は、いかなる数のオペランドを用いても実施することが可能である。例えば、以下の擬似コードは、（３つのソースおよび１つの宛先である）４つのオペランドを用いて、１６ビットの即値（ｉｍｍ１６）の指標値を生成するかを示す。
ｆｏｒ  （ｎ  ＝  ０；  ｎ  ＜  １６；  ｎ＋＋）  ｛
ｆｏｒ  （ｊ  ＝  ０；  ｊ  ＜  ３２；  ｊ＋＋）  ｛
ｉ  ＝  ３２＊ｎ  ＋  ｊ；
ｉｎｄｅｘ  ＝  （ｄｅｓｔ［ｉ］＜＜３）  ｜  （ｓｒｃ３［ｉ］＜＜２）
｜  （ｓｒｃ２［ｉ］＜＜１）  ｜  （ｓｒｃ１［ｉ］）；
ｄｅｓｔ［ｉ］  ＝  ｉｍｍ１６［ｉｎｄｅｘ］；
｝
｝
【００２６】
上記のコードが示すように、本実施形態においてマスクレジスタには、第４オペランドが格納されている。（左へ３だけシフトされた）マスクレジスタ、（左へ２だけシフトされた）宛先レジスタ、（左へ１だけシフトされた）ソースレジスタ２、およびソースレジスタ１からの対応するビットに対し、ビット毎のＯＲ演算を実行することにより、指標値が生成される。得られる４ビットの値をその後、１６ビットの即値ｉｍｍ１６のルックアップとして用いる。
【００２７】
プロセッサアーキテクチャの例
図３は、例示的な処理コア３００を示し、本願発明の実施形態は、処理コア３００上で実施することが出来る。汎用処理コア３００は、Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ（ＣＩＳＣ）、Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ（ＲＩＳＣ）およびＶｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ  （ＶＬＩＷ）などの異なる多くのタイプの処理コアアーキテクチャを表し得る。図３の汎用処理コア３００は、１）（例えばキャッシュおよび／またはメモリから）命令をフェッチするフェッチユニット３０３、２）命令を復号化する復号ユニット３０４、３）実行ユニット３０６への命令の発行のタイミングおよび／または順序を決定する（任意選択的に含まれる）スケジューリングユニット３０５、４）命令を実行する実行ユニット３０６（典型的な命令実行ユニットは、分岐実行ユニット、（例えばＡＬＵなどの）整数演算実行ユニット、（例えばＦＰＵなどの）浮動小数点演算実行ユニット、メモリアクセス実行ユニットを含む）、および５）命令の実行成功を示すリタイヤユニット３０７を含む。なお、処理コア３００は、マイクロコード３０８を用いても、用いなくてもよい。マスクレジスタ３０２は、上述した本願発明の実施形態に従い用いてもよい。
【００２８】
コンピュータシステムの例
以下に示すのは、本明細書で説明する命令を実行するのに適したシステムの例である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、およびその他様々な電子デバイスなどの、当技術分野で公知の他のシステム設計および構成も適している。一般的に、本明細書で開示するプロセッサおよび／または他の実行論理を組み込むことの出来る、多様なシステムまたは電子デバイスが適している。
【００２９】
図４は、本願発明の実施形態に係る、システム４００のブロック図を示す。システム４００は、グラフィックメモリコントローラハブ（ＧＭＣＨ）４２０へ結合された１以上の処理要素４１０、４１５を含んでよい。追加的な処理要素４１５は任意選択的に用いられ、よって、それらは図４において破線で示されている。
【００３０】
処理要素のそれぞれは、単一のコアであるか、または代替的に複数のコアを含んでよい。処理要素は、任意選択的に、集積メモリコントローラおよび／または集積Ｉ／Ｏ制御論理など他のオンダイの要素を処理コアに加えて含んでよい。また、少なくとも一実施形態において、処理要素のコアは、マルチスレッドであり、１つのコアあたり１以上のハードウェアスレッドコンテクストを含んでよい。
【００３１】
図４は、ＧＭＣＨ４２０が、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などであってよいメモリ４３０に結合されてよいことを示す。ＤＲＡＭは、少なくとも一実施形態において、不揮発性キャッシュに関連付けられる。
【００３２】
ＧＭＣＨ４２０は、チップセットか、またはチップセットの一部であってよい。ＧＭＣＨ４２０は、プロセッサ４１０、４１５と通信を行い、プロセッサ４１０、４１５とメモリ４３０との間の相互作用を制御する。ＧＭＣＨ４２０は、プロセッサ４１０、４１５と、システム４００の他の要素とのアクセラレーテッドバスインタフェースとして機能してもよい。少なくとも一実施形態において、ＧＭＣＨ４２０は、フロントサイドバス（ＦＳＢ）４９５などのマルチドロップバスを介し、プロセッサ４１０、４１５と通信を行う。
【００３３】
さらに、ＧＭＣＨ４２０は、（フラットパネルディスプレイなどの）ディスプレイ４４０に結合される。ＧＭＣＨ４２０は、集積グラフィックアクセラレータを含んでよい。ＧＭＣＨ４２０はさらに、様々な周辺機器をシステム４００へ結合するのに用いられる入力／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）４５０へと結合される。図４の実施形態において例として示されるのは、ＩＣＨ４５０に結合された独立したグラフィックデバイスであってよい外部グラフィックデバイス４６０および他の周辺機器４７０である。
【００３４】
代替的に、追加的なまたは異なる処理要素をシステム４００に設けてもよい。例えば、追加的な処理要素４１５は、プロセッサ４１０と同様の追加的なプロセッサ、プロセッサ４１０とは異種または非対称の追加的なプロセッサ、（グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなどの）アクセラレータ、フィールドプログラム可能ゲートアレイ、または任意の他の処理要素を含んでよい。物理的リソース４１０、４１５の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費などの関する特徴を含む利点に関する一連の判断基準面で、多種多様な違いがあり得る。処理要素４１０、４１５の間のこれらの差は、非対称性および異種性として効果的に表れる。少なくとも一実施形態において、様々な処理要素４１０、４１５が、同じダイパッケージ内に存在してよい。
【００３５】
図５は、本願発明の実施形態に係る第２システム５００のブロック図を示す。図５に示すように、マルチプロセッサシステム５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続５５０で互いに結合された第１処理要素５７０および第２処理要素５８０を含む。図５に示すように処理要素５７０、５８０のそれぞれは、第１および第２プロセッサコア（つまり、プロセッサコア５７４ａ、５７４ｂ、およびプロセッサコア５８４ａ、５８４ｂ）を含んだマルチコアプロセッサであってよい。
【００３６】
代替的に、１以上の処理要素５７０、５８０は、アクセラレータまたはフィールドプログラム可能ゲートアレイなどの、プロセッサ以外の要素であってよい。
【００３７】
２つの処理要素５７０、５８０のみ示されているが、本願発明の態様は、それらを含む態様のみに限定されない。他の実施形態において、任意のプロセッサ内には、追加的な１以上の処理要素が存在してよい。
【００３８】
第１処理要素５７０はさらに、メモリコントローラハブ（ＭＣＨ）５７２、およびポイントツーポイント（Ｐ−Ｐ）インタフェース５７６、５７８を含んでよい。同様に、第２処理要素５８０は、ＭＣＨ５８２およびＰ−Ｐインタフェース５８６、５８８を含んでよい。プロセッサ５７０、５８０は、ＰｔＰインタフェース回路５７８、５８８を用いて、ポイントツーポイント（ＰｔＰ）インタフェース５５０を介してデータの交換を行ってよい。図５に示すように、ＭＣＨ５７２、５８２は、プロセッサを各メモリと結合する。それらメモリは、それぞれのプロセッサにローカルに取り付けられた主メモリの部分であってよい、メモリ５４２およびメモリ５４４である。
【００３９】
それぞれのプロセッサ５７０、５８０は、ポイントツーポイントインタフェース回路５７６、５９４、５８６、５９８を用いて個々のＰｔＰインタフェース５５２、５５４を介してチップセット５９０とデータの交換を行ってよい。チップセット５９０もまた、高性能グラフィックインタフェース５３９を介して高性能グラフィック回路５３８とデータの交換を行ってよい。本願発明の実施形態は、任意の数の処理コアを有するプロセッサ内に存在してもよく、または図５の各ＰｔＰバスエージェント内に存在してもよい。一実施形態において、プロセッサコアは、ローカルキャッシュメモリ（図示せず）を含むか、またはローカルキャッシュメモリと関連付けられてよい。さらに、共有キャッシュ（図示せず）が、両方のプロセッサの外側でいずれかのプロセッサに含まれていてよく、しかしながら、当該プロセッサへｐ２ｐ相互接続を介して接続される。この場合、いずれか、若しくは両方のプロセッサのローカルキャッシュ情報は、プロセッサが低消費電力モードになるとき、共有キャッシュに格納される。
【００４０】
第１処理要素５７０および第２処理要素５８０は、それぞれ、Ｐ−Ｐ相互接続５７６、５８６、５８４を介し、チップセット５９０へ結合される。図５に示すように、チップセット５９０はＰ−Ｐインタフェース５９４、５９８を含む。さらにチップセット５９０は、チップセット５９０を高性能グラフィックエンジン５４８と結合するインタフェース５９２を含む。一実施形態において、バス５４９を用いて、グラフィックエンジン５４８をチップセット５９０へと結合する。代替的に、ポイントツーポイント相互接続５４９がこれらのコンポーネントを結合する。
【００４１】
そしてチップセット５９０は、インタフェース５９６を介し、第１バス５１６に結合されてよい。一実施形態において、第１バス５１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであり、若しくは、ＰＣＩエクスプレスバスなどのバスまたは他の第３世代Ｉ／Ｏ相互接続バスである。しかし、本願発明の態様は、この態様に限定されない。
【００４２】
図５に示すように、第１バス５１６を第２バス５２０へ結合するバスブリッジ５１８とともに、様々なＩ／Ｏデバイス５１４が第１バス５１６に結合される。一実施形態において、第２バス５２０は、ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ（ＬＰＣ）バスである。一実施形態において、例えばキーボード／マウス５２２、通信デバイス５２７、並びに、コード５３０を含んでよいディスクドライブまたはその他の大容量記憶デバイスなどのデータ記憶ユニット５２８を含む、様々なデバイスが第２バス５２０に結合されてよい。さらに、オーディオＩ／Ｏ５２４が、第２バス５２０に結合されてよい。なお、他のアーキテクチャを採用することも可能である。例えば、図５のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス、または同様の他のアーキテクチャを実装してよい。
【００４３】
図６は、本願発明の実施形態に係る第３システム６００のブロック図を示す。図５および６の同様な要素には同様の符号が付されている。図６の特定の態様を曖昧にすることを避けるべく、図５のそれら以外の態様は図６において省略されている。
【００４４】
図６は、処理要素５７０、５８０が、それぞれ、集積メモリおよびＩ／Ｏ制御論理（「ＣＬ」）５７２、５８２を含んでよいことを示す。少なくとも一実施形態において、ＣＬ５７２、５８２は、図４および５に関連して上述したようなメモリコントローラハブ論理（ＭＣＨ）を含んでよい。さらに、ＣＬ５７２、５８２は、Ｉ／Ｏ制御論理も含んでよい。図６は、メモリ５４２、５４４がＣＬ５７２、５８２に結合されるだけでなく、Ｉ／Ｏデバイス６１４も制御論理５７２、５８２へ結合されることを示す。レガシーＩ／Ｏデバイス６１５は、チップセット５９０へ結合される。
【００４５】
本明細書で開示する機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそれら実施アプローチの組み合わせを用いて実施してよい。本願発明の実施形態は、少なくとも１つのプロセッサ、（揮発性および不揮発性のメモリおよび／または記憶要素を含む）データ記憶システム、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを含む、プログラム可能システム上で実行されるコンピュータプログラムまたはプログラムコードとして実施してよい。
【００４６】
図５に示すコード５３０のようなプログラムコードを入力データとして用い、本明細書で説明する機能を実行し、出力情報を生成してもよい。出力情報は、公知の方式で、１以上の出力デバイスへ提供される。この提供を行うべく、プロセシングシステムは、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００４７】
プログラムコードは、高レベルの手続き型プログラミング言語またはオブジェクト指向プログラム言語を用いて実施され、プロセシングシステムとの通信を行ってもよい。プログラムコードは、所望される場合、アセンブリ言語または機械言語を用いて実施してもよい。実際、本明細書で説明される機構の範囲は、特定のプログラム言語に限定されない。いずれの場合であっても、言語は、コンパイラ型言語かまたはインタープリタ型言語であってよい。
【００４８】
１以上の実施形態の１以上の態様は、プロセッサ内の様々な論理を表す機械可読媒体に格納されるデータによって実装されてもよい。それら表現するデータは機械によって読み込まれると、当該機械に対し、本明細書で説明される技術を実行するよう論理を作成させる。「ＩＰコア」としても知られるそのような表現は、有形の機械可読媒体に格納され、様々な消費者へ、若しくは当該論理またはプロセッサを実際に作成する製造機械へとそれら表現をロードする製造設備へと供給される。
【００４９】
そのような機械可読記憶媒体には、機械または装置により製造または形成される、粒子の非一時的かつ有形の構造が含まれ、またこれらに限定されない。その例としては、ハードディスク、他のタイプのディスク、半導体デバイス、磁気または光学カードおよび電子命令を格納するのに適した他のタイプの媒体などの記憶媒体が挙げられる。他のタイプのディスクの例としては、フロッピー（登録商標）ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、磁気光学ディスクなどが挙げられる。半導体デバイスの例としては、読み取り専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）およびスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電子的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ）などが挙げられる。
【００５０】
したがって、本願発明の実施形態は、本願発明の実施形態の演算の実行を指示する命令を含む、または本明細書で説明した構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義づけるＨＤＬなどの設計データを含む非一時的かつ有形の機械可読媒体も含む。それら実施形態は、プログラム製品とも呼ばれる。
【００５１】
本明細書で説明する命令の演算のいくつかは、ハードウェアコンポーネントによっても実行することができ、また、それら命令がプログラムされた回路または他のハードウェアコンポーネントにそれら演算を実行させる、または当該回路または他のハードウェアコンポーネントがそれら演算を実行することとなるよう用いられる機械可読命令によって実施してもよい。回路には、わずかながら例を挙げると、汎用または特定用途向けプロセッサまたは論理回路が含まれる。演算は、任意選択的に、ハードウェアとソフトウェアとの組み合わせによって実行することも出来る。実行論理および／またはプロセッサには、機械命令、または機械命令から導き出される１以上の制御信号に応じて、命令により指定された結果としてのオペランドを格納する、特定の回路およびその他の論理が含まれる。例えば、本明細書で開示する命令の実施形態は、図４、５および６に示す１以上のシステムで実行されてもよく、また、命令の実施形態は、それらのシステムで実行されるプログラムコードに格納されてもよい。さらに、これらの図に示す処理要素は、本明細書で詳述するパイプラインおよび／または（例えばインオーダーおよびアウトオブオーダーのアーキテクチャなどの）アーキテクチャの１つを用いてもよい。例えば、インオーダーアーキテクチャの復号ユニットは、命令を復号化し、復号化された命令をベクトルユニットまたはスカラーユニットへ送信してよい。
【００５２】
上記において、説明を目的とし、本願発明がより良く理解されるように、様々な特定的な詳細を示した。しかし、当業者であれば、本願発明が、それら特定的な詳細のうちいくつかがなくても実施されることを理解されよう。したがって、本願発明の態様および思想は、以下の項目により判断されるべきである。ここで、本願発明の実施形態の一例を項目として示す。
［項目１］
コンピュータプロセッサ上で論理演算を実行する方法であり、
２以上のソースオペランドのそれぞれからデータを読み込む段階と、
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成する段階と、
即値から、指標値により識別されるビットのサブセットを読み込む段階と、
即値から読み込まれたビットを宛先レジスタ内に格納し、命令の結果を生成する段階と
を備える、方法。
［項目２］
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成する段階は、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、指標値を生成する段階を有し、
指標値は、即値内のビット位置を識別する対応するビット位置からの連結されたビットの各セットからなる、項目１に記載の方法。
［項目３］
即値の識別されたビット位置からビットを読み込む段階と、
各ソースオペランドから読み込んだビットのビット位置に対応する宛先レジスタ内のビット位置に結果を格納する段階と
をさらに備える、項目２に記載の方法。
［項目４］
ソースオペランドはＮビットのソースレジスタに格納されており、
宛先レジスタはＮビットの宛先レジスタであり、
ビットを連結し、指標値を生成する段階は、
ソースオペランドから並行してＮ個のビットの全てを読み込み、即値のＮ個の指標を形成する段階と、
Ｎ個の指標を用い、即値内のＮ個のビット位置を識別する段階と、
即値から宛先レジスタへＮ個のインデックス付きのビットの全てを並行してコピーし、論理演算の結果を生成する段階と
をさらに有する、項目１から３のいずれか１項に記載の方法。
［項目５］
Ｎは６４に等しい、項目４に記載の方法。
［項目６］
ソースオペランドは３つあり、
即値は８ビットであり、
３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、指標値を生成する段階をさらに備え、
指標値は、８ビットの即値内のビット位置を識別する対応するビット位置からの３つの連結されたビットの各セットからなる、項目１から５のいずれか１項に記載の方法。
［項目７］
即値は、命令と共に送信された８ビットの値である、項目１から６のいずれか１項に記載の方法。
［項目８］
８ビットの値はｉｍｍ８値である、項目７に記載の方法。
［項目９］
即値は、命令と共に送信された１６ビットの値である、項目１から８のいずれか１項に記載の方法。
［項目１０］
命令を処理する装置であり、
命令をデコードし、命令によって実行される論理演算を識別するデコーダユニットと、
動作を実行することにより、論理演算を実行する実行ユニットと
を備え、
動作は、
２以上のソースオペランドのそれぞれからデータを読み込むことと、
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することと、
指標値により識別される即値からビットのサブセットを読み込むことと、
即値から読み込まれたビットを宛先レジスタ内に格納し、命令の結果を生成することと
を含む、装置。
［項目１１］
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することは、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、指標値を生成することを含み、
指標値は、即値内のビット位置を識別する対応するビット位置からの連結されたビットの各セットからなる、項目１０に記載の装置。
［項目１２］
実行ユニットが実行する動作は、
即値の識別されたビット位置からビットを読み込むことと、
各ソースオペランドから読み込んだビットのビット位置に対応する宛先レジスタ内のビット位置に結果を格納することと
をさらに含む、項目１１に記載の装置。
［項目１３］
ソースオペランドはＮビットのソースレジスタに格納されており、
宛先レジスタはＮビットの宛先レジスタであり、
ビットを連結し、指標値を生成することは、
ソースオペランドから並行してＮ個のビットの全てを読み込み、即値のＮ個の指標を形成することと、
Ｎ個の指標を用い、即値内のＮ個のビット位置を識別することと、
即値から宛先レジスタへＮ個のインデックス付きのビットの全てを並行してコピーし、論理演算の結果を生成することと
をさらに含む、項目１０から１２のいずれか１項に記載の装置。
［項目１４］
Ｎは６４に等しい、項目１３に記載の装置。
［項目１５］
ソースオペランドは３つあり、
即値は８ビットであり、
実行ユニットが実行する動作は、３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、指標値を生成することをさらに含み、
指標値は、８ビットの即値内のビット位置を識別する対応するビット位置からの３つの連結されたビットの各セットからなる、項目１０から１４のいずれか１項に記載の装置。
［項目１６］
即値は、命令と共に送信された８ビットの値である、項目１０から１５のいずれか１項に記載の装置。
［項目１７］
８ビットの値はｉｍｍ８値である、項目１６に記載の装置。
［項目１８］
即値は、命令と共に送信された１６ビットの値である、項目１０から１７のいずれか１項に記載の装置。
［項目１９］
コンピュータシステムであり、
ディスプレイと、
命令を格納するメモリと、
命令を処理するプロセッサと
を備え、
プロセッサは、
命令をデコードし、命令によって実行される論理演算を識別するデコーダユニットと、
動作を実行することにより、論理演算を実行する実行ユニットと
を有し、
動作は、
２以上のソースオペランドのそれぞれからデータを読み込むことと、
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することと、
指標値により識別される即値からビットのサブセットを読み込むことと、
即値から読み込まれたビットを宛先レジスタ内に格納し、命令の結果を生成することと、を含むコンピュータシステム。
［項目２０］
ソースオペランドから読み込んだデータを組み合わせ、命令と関連付けられた即値内のビットのサブセットを特定する指標値を生成することは、各ソースオペランドの対応するビット位置から読み込んだビットを連結し、指標値を生成することを含み、
指標値は、即値内のビット位置を識別する対応するビット位置からの連結されたビットの各セットからなる、項目１９に記載のコンピュータシステム。
［項目２１］
実行ユニットが実行する動作は、
即値の識別されたビット位置からビットを読み込むことと、
各ソースオペランドから読み込んだビットのビット位置に対応する宛先レジスタ内のビット位置に結果を格納することと
をさらに含む、項目２０に記載のコンピュータシステム。
［項目２２］
ソースオペランドはＮビットのソースレジスタに格納されており、
宛先レジスタはＮビットの宛先レジスタであり、
ビットを連結し、指標値を生成することは、
ソースオペランドから並行してＮ個のビットの全てを読み込み、即値のＮ個の指標を形成することと、
Ｎ個の指標を用い、即値内のＮ個のビット位置を識別することと、
即値から宛先レジスタへＮ個のインデックス付きのビットの全てを並行してコピーし、論理演算の結果を生成することと
をさらに含む、項目１９から２１のいずれか１項に記載のコンピュータシステム。
［項目２３］
Ｎは６４に等しい、項目２２に記載のコンピュータシステム。
［項目２４］
ソースオペランドは３つあり、
即値は８ビットであり、
実行ユニットが実行する動作は、３つのソースオペランドのうちそれぞれの対応するビット位置から読み込んだビットを連結し、指標値を生成することをさらに含み、
指標値は、８ビットの即値内のビット位置を識別する対応するビット位置からの３つの連結されたビットの各セットからなる、項目１９から２３のいずれか１項に記載のコンピュータシステム。
［項目２５］
即値は、命令と共に送信された８ビットの値である、項目１９から２４のいずれか１項に記載のコンピュータシステム。
［項目２６］
８ビットの値はｉｍｍ８値である、項目２５に記載のコンピュータシステム。
［項目２７］
即値は、命令と共に送信された１６ビットの値である、項目１９から２６のいずれか１項に記載のコンピュータシステム。
【図１】
0005607832.tif 000003
【図２】
0005607832.tif 000004
【図３】
0005607832.tif 000005
【図４】
0005607832.tif 000006
【図５】
0005607832.tif 000007
【図６】
0005607832.tif 000008