(57)【特許請求の範囲】
【請求項１】
方法であって、
データを有する第１のソースオペランドと、第１範囲のビットの１以上の端部に対応する位置を示すメモリ又はレジスタ内の１以上の値を明示的に指定する第２のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信する段階と、
第１の端部が前記メモリ又はレジスタ内の前記１以上の値により明示的に指定され、各ビットの値が前記第１のソースオペランドの対応する位置にあるビットの値と等しい前記第１範囲のビットと、前記第１のソースオペランドの対応する位置にあるビットの値に関わらず全てが同じ値を持つ第２範囲のビットとを含む結果を、前記命令に呼応して前記デスティネーションオペランドに格納する段階と、
前記結果の前記第１範囲のビットの位置に関わらず、前記第１のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第１範囲を移動させることなく、前記命令の実行を完了させる段階と、
を備える方法。
【請求項２】
前記命令の実行を完了させる段階は、
前記第１範囲のビットが前記結果内の中間範囲にあるかないかに関わらずシフト処理を行うことなく前記命令の実行を完了させる段階を有し、
前記命令の実行を完了させる段階はメモリ内のテーブルルックアップを利用せずに行われる請求項１に記載の方法。
【請求項３】
前記命令を受信する段階は、
前記第１範囲のビットの第２の端部を暗示的に示す命令を受信する段階を有する請求項１または２に記載の方法。
【請求項４】
前記命令を受信する段階は、
前記第１範囲のビットの前記第２の端部を、最下位ビットおよび最上位ビットのいずれかとして暗示的に示す命令を受信する段階を有する請求項３に記載の方法。
【請求項５】
前記命令は、２つのソースオペランドのみの明示的な指定を許可するフォーマットを有する請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記命令を受信する段階は、
前記第２のソースオペランドを明示的に指定する命令を受信する段階を有する請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記第２のソースオペランドは、前記第１の端部に対応するビットの位置、および、前記第１の端部を端部として持つビット列のビット長のうちいずれかを表す値を持つ請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記命令を受信する段階は、
前記第２のソースオペランドによって前記第１範囲のビットの２つの端部を明示的に指定する命令を受信する段階を有する請求項１または２に記載の方法。
【請求項９】
前記結果を格納する段階は、
全ての値がゼロ（０）である第２範囲のビットを格納する段階を有する請求項１から８のいずれか１項に記載の方法。
【請求項１０】
前記第１のソースオペランドを前記デスティネーションオペランドにコピーする段階と、
マスクを生成する段階と、
前記マスクと前記デスティネーションオペランドとにＡＮＤ演算を行う段階とを備え、
前記マスクは、（ａ）各々が前記第１範囲のビットにおける対応する位置にあるビットに対応しており、各々が１の値を持つ第１セットのビットと、（ｂ）各々が前記第２範囲のビットにおける対応する位置にあるビットに対応しており、各々がゼロ（０）の値を持つ第２セットのビットとを含む請求項９に記載の方法。
【請求項１１】
前記方法は、複数のコアを含む汎用マイクロプロセッサにより実行され、
前記複数のコアのうち少なくとも１つのコアは前記命令に呼応する回路を有する請求項１から１０のいずれか１項に記載の方法。
【請求項１２】
データを有する第１のソースオペランドと、第１範囲のビットの１以上の端部に対応する位置を示すメモリ又はレジスタ内の１以上の値を明示的に指定する第２のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信する復号器と、
前記命令の結果、前記命令が示すデスティネーションオペランドに結果を格納する実行ユニットと
を備え、
前記結果は、前記第１範囲のビットと第２範囲のビットとを含み、
前記第１範囲のビットの第１の端部は、前記メモリ又はレジスタ内の前記１以上の値により明示的に指定され、前記第１範囲の各ビットの値は、前記命令が示す前記第１のソースオペランドの対応する位置にあるビットの値と等しく、
前記第２範囲のビットは全て、前記第１のソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を持ち、
前記実行ユニットは、前記結果の前記第１範囲のビットの位置に関わらず、前記第１のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第１範囲を移動させることなく、前記命令の実行を完了させる装置。
【請求項１３】
前記実行ユニットは、前記第１範囲のビットが前記結果内の中間範囲にあるかないかに関わらずシフト処理を行うことなく前記命令の実行を完了させ、
前記実行ユニットは、メモリ内のテーブルルックアップを行わずに前記結果を格納する請求項１２に記載の装置。
【請求項１４】
前記命令は、前記第１範囲のビットの第２の端部を暗示的に示す請求項１２または１３に記載の装置。
【請求項１５】
前記命令は、前記第２の端部を、最下位ビットおよび最上位ビットのいずれかとして暗示的に示す請求項１４に記載の装置。
【請求項１６】
前記命令は、２つのソースオペランドのみの明示的な指定を許可するフォーマットを有する請求項１２から１５のいずれか１項に記載の装置。
【請求項１７】
前記実行ユニットは、前記命令により明示的に指定された前記第２のソースオペランドから前記第１範囲のビットの前記第１の端部を決定する請求項１２から１６のいずれか１項に記載の装置。
【請求項１８】
前記第２のソースオペランドは、前記第１の端部に対応するビットの位置、および、前記第１の端部を端部として持つビット列のビット長のうちいずれかを表す値を持つ請求項１２から１７のいずれか１項に記載の装置。
【請求項１９】
前記命令は、前記命令により明示的に指定された前記第２のソースオペランドによって前記第１範囲のビットの２つの端部を明示的に指定する請求項１２または１３に記載の装置。
【請求項２０】
前記実行ユニットは、前記第２範囲のビット全ての値がゼロ（０）である結果を格納する請求項１２から１９のいずれか１項に記載の装置。
【請求項２１】
前記実行ユニットは、
前記第１のソースオペランドと前記デスティネーションオペランドとに連結されて前記第１のソースオペランドを前記デスティネーションオペランドにコピーするコピーロジックと、
前記デスティネーションオペランドに連結されて前記デスティネーションオペランドの前記第２範囲のビットをゼロにするゼロロジックと
を備え、
前記ゼロロジックは、
マスクを生成するマスク生成ロジックと、
前記マスクと前記デスティネーションオペランドとに連結されて前記マスクと前記デスティネーションオペランドのデータとにＡＮＤ演算を行うＡＮＤ演算ロジックとを有し、
前記マスクは、（ａ）各々が前記第１範囲のビットにおける対応する位置にあるビットに対応しており、各々が１の値を持つ第１セットのビットと、（ｂ）各々が前記第２範囲のビットにおける対応する位置にあるビットに対応しており、各々がゼロ（０）の値を持つ第２セットのビットとを含む請求項２０に記載の装置。
【請求項２２】
前記格納では、全てが１の値を持つ第２範囲のビットが格納される請求項１２から１９のいずれか１項に記載の装置。
【請求項２３】
前記命令は機械命令を含み、
前記実行ユニットは、前記機械命令に呼応する回路を有する請求項１２から２２のいずれか１項に記載の装置。
【請求項２４】
前記実行ユニットは、マルチコア汎用マイクロプロセッサのコアに含まれる請求項１２から２３のいずれか１項に記載の装置。
【請求項２５】
装置であって、
命令の結果、結果をデスティネーションオペランドに格納する実行ユニットを備え、
前記命令は、レジスタの第１のソースオペランドと、レジスタおよびメモリのうちいずれかの第２のソースオペランドとを示しており、
前記第１のソースオペランドは１６ビット、３２ビット、および６４ビットのうちいずれかであり、
前記第２のソースオペランドは３２ビットおよび６４ビットのうちいずれかであり、
前記結果は、第１範囲のビットと第２範囲のビットとを含み、
前記第１範囲のビットの第１の端部は、前記命令が暗示的に示す最下位ビットにあり、第２の端部は、前記第１のソースオペランドの最下位バイトで明示的に指定された値が示すビット位置より１ビット手前であり、
前記第１範囲の各ビットの値は、前記第２のソースオペランドの対応する位置にあるビットの値と等しく、
前記第２範囲のビットは、示された前記ビット位置から最上位ビットまでの範囲であり、前記第２範囲の全てのビットはゼロの値に等しく、
前記命令は、ソースオペランドとして、前記第１のソースオペランドと前記第２のソースオペランドを示す装置。
【請求項２６】
前記実行ユニットは前記命令の結果、シフト処理を行わない請求項２５に記載の装置。
【請求項２７】
インターコネクトと、
前記インターコネクトに連結され、データを有する第１のソースオペランドと、第１範囲のビットの１以上の端部に対応する位置を示すメモリ又はレジスタ内の１以上の値を明示的に指定する第２のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信するプロセッサと、
前記インターコネクトに連結されたＤＲＡＭとを備え、
前記プロセッサは、前記命令の結果、前記命令が示すデスティネーションオペランドに結果を格納し、
前記結果は、第１範囲のビットと第２範囲のビットとを含み、
前記第１範囲のビットの第１の端部は、前記メモリ又はレジスタ内の前記１以上の値により明示的に指定され、前記第１範囲の各ビットの値は、前記命令が示す前記第１のソースオペランドの対応する位置にあるビットの値と等しく、
前記第２範囲のビットは全て、前記第１のソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を持ち、
前記プロセッサは、前記結果の前記第１範囲のビットの位置に関わらず、前記第１のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第１範囲を移動させることなく、前記命令の実行を完了させるシステム。
【請求項２８】
前記命令は、前記第１範囲のビットの第２の端部を暗示的に示す請求項２７に記載のシステム。
【請求項２９】
コンピュータに、データを有する第１のソースオペランドと、第１範囲のビットの１以上の端部に対応する位置を示すメモリ又はレジスタ内の１以上の値を明示的に指定する第２のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を処理させて、前記コンピュータに、
第１の端部が前記メモリ又はレジスタ内の前記１以上の値により明示的に指定され、各ビットの値が前記第１のソースオペランドの対応する位置にあるビットの値と等しい前記第１範囲のビットと、前記第１のソースオペランドの対応する位置にあるビットの値に関わらず全てが同じ値を持つ第２範囲のビットとを含む結果を、前記デスティネーションオペランドに格納する段階と、
前記結果の前記第１範囲のビットの位置に関わらず、前記第１のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第１範囲を移動させることなく、前記命令の実行を完了させる段階と
を実行させるためのプログラム。
【請求項３０】
前記第１範囲のビットの第２の端部を暗示的に示す段階を実行させる請求項２９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
様々な別個の実施形態が、ビット操作命令、ビット操作命令の実行方法、ビット操作命令実行ユニット、または実行ユニットを含むデバイスに係る。特に、様々な別個の実施形態は、ビットの範囲を分離するビット範囲分離命令、ビット範囲分離命令の実行方法、ビット範囲分離命令の実行ユニット、または実行ユニットを含むデバイスに係る。
【背景技術】
【０００２】
汎用プロセッサ、専用プロセッサ、コントローラ、その他のデバイスが、ＩＳＡ（instruction set architecture）が指定する命令を実行する。デバイスはこの命令により様々に異なる種類の処理を実行することができる。よく知られた処理の１つに、ビット操作処理がある。
【０００３】
様々に異なるビット操作命令が知られている。そのうち１つがＥＸＴＲ−Ｅｘｔｒａｃｔ命令である。ＥＸＴＲ命令に関しては、インテル（登録商標）Ｉｔａｎｉｕｍ（登録商標）アーキテクチャソフトウェア開発者用マニュアル、第３巻：命令セットレファレンス、改訂版２．２、２００６年１月、書類番号：２４５３１９−００５を参照されたい。
【０００４】
ＥＸＴＲ命令は、２つの即値により指定される１つのビットフィールドを抽出し、この抽出されたビットフィールドを右シフトして、デスティネーションにおける、抽出されたビットフィールドの右寄せを行う。このように、ビットフィールドを抽出することと、抽出されたビットフィールドをシフトさせることとを１つの命令で行うと、データ処理の速度および／または効率性が概して制限される。他のビット操作命令のなかには、テーブルルックアップを利用するものもあり、これは長いレイテンシーを生じる場合がある。
【０００５】
データ処理においては速度および／または効率性が重要であることから、従来とは異なる新たな操作命令を設けると好適であると思われる。
【図面の簡単な説明】
【０００６】
本発明は、以下の記載を、本発明の実施形態を示す添付図面を参照しながら読むことで理解が深まる。
【図１】ビット範囲分離命令の一実施形態を処理する方法の一実施形態のブロックフロー図である。
【図２】命令処理装置の一実施形態のブロック図である。
【図３】ビット範囲分離命令の第１の実施形態によるビット範囲分離処理の第１の実施形態を示す。
【図４】ビット範囲分離命令の第２の実施形態によるビット範囲分離処理の第２の実施形態を示す。
【図５】ビット範囲分離命令の第３の実施形態によるビット範囲分離処理の第３の実施形態を示す。
【図６】ビット範囲分離命令の特定の実施形態を表すＢＺＨＩの記述である。
【図７】ビット範囲分離命令の特定の実施形態を表すＢＺＨＩ命令の疑似コード処理を示す。
【図８】ビット範囲分離ロジックの一実施形態を示すブロック図である。
【図９】適切な３２ビットの汎用レジスタセットの特定の実施形態を示す。
【図１０】適切な６４ビットの汎用レジスタセットの別の特定の実施形態を示す。
【図１１】フラグレジスタのステータスの適切な一実施形態を示すＥＦＬＡＧＳレジスタを示す。
【図１２】適切なコンピュータシステムの第１の実施形態のブロック図である。
【図１３】適切なコンピュータシステムの第２の実施形態のブロック図である。
【発明を実施するための形態】
【０００７】
以下の詳細な説明において、プロセッサの種類、命令実装の詳細、データの種類、レジスタの種類、レジスタの配置、システム構成等、多くの特定の詳細を述べる。しかし、実施形態はこれら特定の詳細なしに実施可能である。また、公知の回路、構造、および技術等に関して、詳細に説明しないことにより、本発明の実施形態の本質を曖昧にしないようにしている箇所もある。
【０００８】
レジスタあるいは他の格納位置に格納されるビットが、対象ビットのストリングまたは範囲を１つ、現在対象以外の、あるいは少なくとも対象範囲のビットの一部ではないビットのストリングまたは範囲を１以上とともに含むような、様々な場合がありうる。これらの場合を代表して、対象範囲のビットを、さらなる処理を行う数または値を表すようにすることもできる。現在対象外のビットは、不要なビットあるいはドントケアビットとみなすことができる。一以上の実施形態では、対象範囲のビットの分離は、ゼロとすることで、あるいは、不要なビットは破棄して対象範囲のビットの値は維持するようにすることで行うことができる。これにより、対象範囲のビットに対して後で処理をし易くなる。
【０００９】
実施形態は、新たな利用可能なビット範囲分離命令に係る。他の実施形態は、ビット範囲分離命令の実行ユニットに係る。さらに他の実施形態は、実行ユニットを有する、あるいは、命令を実行することのできる、汎用プロセッサ、専用プロセッサ、コントローラ、またはその他のロジックデバイスあるいは命令処理装置に係る。また別の実施形態は、ディスク、メモリ、または他の有形機械可読媒体に格納されるビット範囲分離命令に係る。
【００１０】
図１は、ビット範囲分離命令の一実施形態を処理する方法１００の一実施形態のブロックフロー図である。様々な実施形態において、方法は、汎用プロセッサ、専用プロセッサ（例えばグラフィックスプロセッサまたはデジタルシグナルプロセッサ（ＤＳＰ））、ハードウェアアクセラレータ（例えば暗号化アクセラレータ）、あるいは、別の種類のロジックデバイスまたは命令処理装置による実行中に行うことができる。
【００１１】
ビット範囲分離命令は、ブロック１０１でプロセッサまたは他の装置により受信されてよい。１以上の実施形態では、ビット範囲分離命令は、ソースオペランドおよびデスティネーションオペランドを示してよい。
【００１２】
ブロック１０２で、ビット範囲分離命令に呼応して結果をデスティネーションオペランドに格納してよい。その結果オペランドは、第１範囲のビットと第２範囲のビットとを有してよい。第１範囲のビットとは、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しいものであってよい。第２範囲のビットはその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有してよい。１以上の実施形態では、第２範囲のビットの全てがゼロであってよい。あるいは、第２範囲のビットの全てが１であってもよい。
【００１３】
ブロック１０３で、ビット範囲分離命令の実行は、結果の第１範囲を、ソースオペランドの対応する位置にある同じ値のビットに対してシフトあるいは移動することなく完了してよい。これは、結果における第１範囲のビットの位置に関わらない（例えば、第１範囲のビットが、たとえ結果における中間の範囲のビットであってもよい）。１以上の実施形態では、ビット範囲分離命令の実行にテーブルルックアップは利用されなくてよいが、この場合にはレイテンシーが長くなる傾向にある。
【００１４】
上述したようなシフトまたはビットの移動をビット範囲分離命令から省くことで、複数の利点が生じる可能性がある。１つには、シフト処理が必要な場合ばかりではないことである。さらにシフト処理によって命令実行時間が増加する傾向にあったり、および／または、ロジック領域／コストを増加させる傾向にあったりすることが多い。さらに殆どのＩＳＡが既に専用のシフト処理を有しており、これらがビット範囲分離命令とは別個に利用されていることがある。他の利点をさらに以下で説明する。
【００１５】
図２は、命令処理装置１１０の一実施形態のブロック図である。１以上の実施形態では、命令処理装置は汎用プロセッサであってよい。プロセッサは、様々なＣＩＳＣ（complex instruction set computing）プロセッサ、様々なＲＩＳＣ（reduced instruction set computing）プロセッサ、様々なＶＬＩＷ（very long instruction word）プロセッサ、これらの様々なハイブリッド、またはその他のプロセッサ全般のうちのいずれであってもよい。１以上の実施形態では、プロセッサは、カリフォルニア州サンタクララのインテルコーポレーション社製の汎用プロセッサであってよいが、これは必須要件ではない。インテルコーポレーション社製の汎用プロセッサの特定の例には、これらに限定はされないが、インテル（登録商標）コア（登録商標）ｉ７プロセッサ・エクストリームエディション、インテル（登録商標）コア（登録商標）ｉ７プロセッサ、インテル（登録商標）コア（登録商標）ｉ５プロセッサ、インテル（登録商標）コア（登録商標）２エクストリームプロセッサ、インテル（登録商標）コア（登録商標）２クアッドプロセッサ、インテル（登録商標）コア（登録商標）２デュオプロセッサ、インテル（登録商標）ペンティアム（登録商標）プロセッサ、およびインテル（登録商標）セルロン（登録商標）プロセッサが含まれる。
【００１６】
また、命令処理装置は専用プロセッサであってもよい。適切な専用プロセッサの代表的な例には、これらに限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、およびデジタルシグナルプロセッサ（ＤＳＰ）がほんの一例として含まれる。これらプロセッサもＣＩＳＣ、ＲＩＳＣ、ＶＬＩＷ、これらの様々なハイブリッド、またはその他のプロセッサ全般に基づいていてよい。
【００１７】
また他の実施形態では、命令処理装置はコントローラ（例えばマイクロコントローラ）、または、命令処理機能を有するその他の種類のロジック回路であってよい。
【００１８】
図２に戻ると、利用中に命令処理装置は、ビット範囲分離命令１１２の一実施形態を受信することができる。一例では、ビット範囲分離命令は、メモリからあるいはソフトウェアから受信されてよい。ビット範囲分離命令は、命令処理装置が認識している機械命令または制御信号を表してよい。ビット範囲分離命令には、オペコードまたは他の命令識別子が含まれてよい。命令処理装置は、ビット範囲分離命令に応じておよび／またはこれに指定された結果を格納する機能を有する専用の、または特別な回路、あるいは他のロジック（例えばハードウェアおよび／またはファームウェアと組み合わせられたソフトウェア）を有してよい。
【００１９】
示している命令処理装置の実施形態には、命令復号器１１４が含まれる。復号器は、ビット範囲分離命令を受信して復号することができる。復号器は、元のビット範囲分離命令を反映する、あるいは、これから導出される、１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、あるいはその他の制御信号を生成して出力することができる。復号器は、様々な異なるメカニズムを利用して実装することができる。適切なメカニズムの例には、これらに限定はされないが、マイクロコードＲＯＭ、ルックアップテーブル、ハードウェア実装、ＰＬＡ（programmable logic array）等が含まれる。
【００２０】
復号器は装置の必須のコンポーネントではない。１以上の他の実施形態では、装置はこの代わりに、命令エミュレータ、命令翻訳プログラム、命令モーファ、命令解釈プログラム、その他の命令変換ロジックを含むことができる。本技術分野では、様々な異なる種類の命令エミュレータ、命令モーファ、命令翻訳プログラム等が公知である。命令変換ロジックはビット範囲分離命令を受信して、ビット範囲分離命令をエミュレート、翻訳、変形、解釈したり、ビット範囲分離命令を変換したりして、元のビット範囲分離命令に対応する１以上の命令または制御信号を出力することができる。命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによる実装が可能である。場合によっては、命令変換ロジックの一部または全てが、命令処理装置の残りからオフダイの位置に設けられてもよい（例えば、別のダイとして、またはシステムメモリ内に設けられてもよい）。場合によっては、命令処理装置は復号器および命令変換ロジック両方を備えてもよい。
【００２１】
図２に戻ると、命令処理装置は実行ユニット１１６を含む。一例では、実行ユニットは、論理演算装置（arithmetic logic unit）、論理ユニット（logical unit）、ビット操作可能機能ユニット等を含むことができる。
【００２２】
示されている実施形態では、実行ユニットは、復号器の出力に連結されている、さもなくば、これと通信可能状態である。「連結（couple）」という用語は、２以上のエレメントとが直接的な電気接触または接続状態にあることを意味する場合がある。しかし「連結」という用語は、さらに、２以上のエレメントが直接的な接続状態にはないが、互いと協働、相互作用、あるいは通信することも意味する（例えば間にコンポーネントを介在させることで）。一例を挙げると、復号器および実行ユニットが、これらの間に介在するオプションのバッファその他の本技術分野で公知であるコンポーネント（１または複数）によって、互いと連結される場合がこれに相当する。
【００２３】
復号器がビット範囲分離命令を復号した結果、実行ユニットは、ビット範囲分離命令を反映する、またはこれから導出される１以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令あるいはその他の制御信号を受信して実行してよい。また実行ユニットは、上述した命令変換ロジックから命令または制御信号を受信して実行してよい。実行ユニットは、ビット範囲分離命令から導出した命令その他の制御信号を実行する機能を有する回路またはその他の実行ロジック（例えば、ハードウェア、ソフトウェア、および／または、ファームウェアの組み合わせ）を含んでよい。
【００２４】
実行ユニットは、ビット範囲分離命令の結果、ビット範囲分離命令が示すデスティネーションオペランドに結果を格納する機能を有してよい。結果は、第１範囲のビットと第２範囲のビットとを有してよい。１以上の実施形態では、第１範囲のビットとは、各ビットの値が、ソースオペランドの対応する位置にある、命令が示すビットの値と等しいものであってよい。第２範囲のビットはその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有してよい。１以上の実施形態では、実行ユニットは、ビット範囲分離命令の実行を、結果の第１範囲を、結果における第１範囲のビットの位置に関わらず（例えば、第１範囲のビットが、たとえ結果における中間の範囲のビットであったとしても）、ソースオペランドの対応する位置にある同じ値のビットに対して移動することなく完了してよい。ビット範囲分離命令の実行中の上述したようなシフトまたは第１範囲のビットの移動を省くことで、特定のデータ処理の速度および／または効率性を上げることができる。
【００２５】
ビット範囲分離命令は、少なくとも１つのソースオペランドおよびデスティネーションオペランドを暗示的に識別する、あるいは明示的に指定することができる。１以上の実施形態では、ビット範囲分離命令は、専用フィールドまたは１セットのビットを有することで、ソースオペランド、デスティネーションオペランド、あるいはこれらの両方を明示的に指定することができる。１以上の実施形態では、ビット範囲分離命令は、ソースオペランドの、デスティネーションオペランドの、あるいは両方の１以上の固定レジスタまたはその他の格納位置を暗示的にまたは暗に識別することができる。１以上の実施形態では、ソースオペランドに利用される格納位置は、デスティネーションオペランドとしてもオプションとして利用することができ、この場合、ソースデータを結果で上書きすることができる。
【００２６】
１以上の実施形態では、ソースオペランドおよびデスティネーションオペランドの一部または全てが、レジスタセット１１８のレジスタに格納されてよい。レジスタセットは、レジスタファイルの一部であってよく、および潜在的に他のレジスタ（例えば制御レジスタ、ステータスレジスタ、フラグレジスタ等）を含んでよい。レジスタは、データ格納に利用することのできる格納位置またはデバイスであってよい。レジスタセットは、物理的に実行ユニットと同じダイ上に設けられることが多い。レジスタは、プロセッサ外から、あるいはプログラマの視点から、可視であってよい。例えば、命令はレジスタに格納されるオペランドを指定することができる。本明細書で記載するデータを格納および提供する機能を有しさえすれば、様々な異なる種類のレジスタが適切であり利用可能である。レジスタにはリネームされてもされなくてもよい。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタのリネームを行って動的に割り当てられる物理レジスタ、専用物理レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が含まれる。またソースオペランドおよびデスティネーションオペランドのうち１以上は、レジスタ以外の格納位置（例えば不図示であるがシステムメモリのある位置）に格納されてもよい。
【００２７】
図２に戻ると、ビット範囲分離処理の一実施形態が示されている。ビット範囲分離命令は、この特定の場合にはレジスタセットの１以上のレジスタにあるソースオペランド（ＳＲＣ）を示している、あるいは指定している。図面を簡潔にする目的から、図面におけるソースオペランド（ＳＲＣ）は、ビットを８つだけ有しているが（つまり「１０１０１０１０」）、しばしばオペランドはこれ以上の数のビット（例えば１６ビット、３２ビット、６４ビット、１２８ビット、あるいはこれ以外の数のビット）を含む場合がある。
【００２８】
実行ユニットは、ソースオペランド（ＳＲＣ）を受信してよい。実行ユニットは、ビット範囲分離命令により、ソースオペランド（ＳＲＣ）上でビット範囲分離処理を実行して、該命令が示す、あるいは指定するデスティネーションオペランド（ＤＥＳＴ）に対応する結果を格納する。この特定の場合にはデスティネーションオペランドはレジスタセットの１以上のレジスタに格納される。
【００２９】
結果は、第１範囲のビット１２２および第２範囲のビット１２０を有してよい。この特定の例では、第１範囲のビット１２２は、３つの最下位（最右端）ビットであり、第２範囲のビット１２０は、５つの最上位（最左端）ビットであるが、これはあくまで例示にすぎない。
【００３０】
第１範囲のビット１２２では、各ビットの値が、ソースオペランド（ＳＲＣ）の対応する位置にあるビットの値と等しい。ソースオペランド（ＳＲＣ）の３つの最下位または最右端ビットのビット値は「０１０」であり、同様に、デスティネーションオペランド（ＤＥＳＴ）における第１範囲のビットの３つの最下位または最右端ビットも同一のビット値「０１０」を有する。
【００３１】
第２範囲のビット１２０はその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有していてよく、この特定の場合においては全てがゼロである。デスティネーションオペランド（ＤＥＳＴ）内の結果の５つの最上位ビットは、ソースオペランド（ＳＲＣ）の５つの最上位または最左端ビットのビット値が「１０１０１」であろうとも、ビット値「０００００」を有する。別の実施形態では、第２範囲のビット全てが１という同じ値を有することもできる（つまり、「１１１１１」）。この特定の場合では、第２範囲の３つのビット各々が、ソースオペランドの対応する位置にあるビットとは異なる値を有することになる。
【００３２】
説明を曖昧にしないようにする意図から、比較的簡単な命令処理装置を示し、説明している。しかし他の実施形態では複数の実行ユニットを利用することもできることは理解されたい。例えば、装置は、複数の異なる種類の実行ユニット（例えば演算装置、論理演算装置（ＡＬＵ）、整数ユニット（integer unit）等）を含んでよい。３つのユニットのうち少なくとも１つが、本明細書で開示するビット範囲分離命令の一実施形態に呼応することができる。また他の実施形態には、複数のコア、論理プロセッサ、または実行エンジンが含まれてよい。本明細書で開示するビット範囲分離命令を実行する機能を有する実行ユニットは、少なくとも１つ、少なくとも２つ、殆どあるいは全てのコア、論理プロセッサ、または実行エンジン内に含まれてよい。
【００３３】
命令処理装置はさらに、オプションとして１以上の公知の他のコンポーネントを含んでもよい。例えば、他の実施形態では、オプションとして命令フェッチロジック、プレデコードロジック、スケジュールロジック、リオーダ・バッファ、分岐予測ロジック、退避ロジック、レジスタ・リネームロジック、またはこれらの組み合わせを含んでよい。これらのコンポーネントは、従来の方法での実装、または、当業者であれば本開示に基づいて想到可能な微調整を加えることによる実装が可能である。本実施形態を理解する目的にはこれ以上これらのコンポーネントの詳述は不要であるが、これらコンポーネントの説明は刊行物にあるのでそれを参照されたい。当技術分野ではこれらコンポーネントの文字通り多くの異なる組み合わせおよび構成が公知である。本発明の範囲は、これら公知の組み合わせおよび構成のいずれにも限定はされない。実施形態は、これらオプションであるコンポーネントがあってもなくても実装可能である。
【００３４】
１以上の実施形態では、ビット範囲分離命令の一実施形態は、対象範囲のビットの第１の端部を分離することを暗示的にまたは暗に示している場合がある。暗示的にまたは暗に示された端部とは、明示的な値では「表現されない（unexpressed）」が「暗に示され（understood））」うる、という意味である。プロセッサその他の命令処理装置は、オペコードまたはその他の固有命令識別子によりビット範囲ゼロ命令を認識することができ、ビットの範囲の端部が内在していることを理解することができる。
【００３５】
図３は、対象範囲のビットの第１の端部を最下位ビット（ＬＳＢ）として暗示的にまたは暗に示すビット範囲分離命令の第１の実施形態におけるビット範囲分離処理の第１の実施形態を示す。本図の最下位ビットは、「０」で示される最右端ビットである。
【００３６】
ビット範囲分離命令は、ソースオペランド（ＳＲＣ）を暗示的に示す、あるいは明示的に指定する。本図の実施形態のソースオペランドは３２ビットである。しかしオペランドは１６ビット、６４ビット、１２８ビット、あるいはその他の数のビットであってもよい。この特定の図では３２ビットのソースオペランド（ＳＲＣ）が、「１０１００１１０１００１１０１１０１０１１００１１１０１０１１０」というようにビットを格納している。これら特定のビット値は例示を目的としたものであり、必須要件ではない。
【００３７】
ビット範囲分離命令はさらに、デスティネーションオペランド（ＤＥＳＴ）を暗示的に示す、あるいは、明示的に指定することもできる。デスティネーションオペランド（ＤＥＳＴ）は、ビット範囲分離命令に従ってソースオペランド（ＳＲＣ）に行われるビット範囲分離処理の一実施形態を表す結果を有する。この結果は、対象となる第１範囲のビット３２２と、第２範囲のクリアあるいは破棄されたビット３２０とを有する。
【００３８】
第１範囲のビット３２２においては、開始点が暗黙のＬＳＢの第１の端部であり、この特定の場合には、終了点が１９番目のビットに終了点である。この特定の場合、第２範囲のビットの開始点は２０番目のビットであり、終了点は最上位ビット（ＭＳＢ）である。第１範囲と第２範囲との間の境界は、他のいずれの場所であってもよい。
【００３９】
１以上の実施形態では、ビット範囲分離命令はさらに、ソースオペランドまたは定数または命令に関連付けられた即値などにより、対象の第１範囲のビットの終了点を示す値（数字を表すビット数）を明示的に指定することもできる。例えば明示的な値は、暗示的な、明示的な、あるいは理解される点（例えば暗示的な最下位ビットの端部、最上位ビット、または中央ビット等）から計測される端部に対応するビットの位置を表してよい。別の例においては、値は、暗示的な、明示的な、あるいは理解される点（例えば暗示的な最下位ビットの端部、最上位ビット、中央ビット、または対象範囲のビットの開始点）におけるビットの正または負の長さを表してもよい。
【００４０】
第１範囲のビット３２２では、各ビットの値が、ソースオペランド（ＳＲＣ）の対応する位置にあるビットの値と等しい。この特定の例では、ソースオペランド（ＳＲＣ）の１９個の最下位または最右端ビットのビット値は「１０１１０１０１１００１１１０１０１１０」であり、同様に、デスティネーションオペランド（ＤＥＳＴ）における第１範囲のビット３２２の１９個の最下位または最右端ビットも同一のビット値「１０１１０１０１１００１１１０１０１１０」を有する。
【００４１】
第２範囲のビット３２０はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。この特定の例では、ソースオペランド（ＳＲＣ）の１２個の最上位または最左端ビットのビット値は「１０１００１１０１００１」であり、デスティネーションオペランド（ＤＥＳＴ）における第２範囲の１２個の最上位または最左端ビットは全て「００００００００００００」を有する。第２範囲の全てのビットが同じ１の値である構成も可能である（例えば「１１１１１１１１１１１１」）。
【００４２】
つまり命令が示すビットは、第１範囲のビットに含めて保持するか、第２範囲のビットに含めてゼロにする、あるいは破棄することができる。命令ではいずれの変換を採用してもよい。
【００４３】
別のオプションとして１以上の実施形態では、ビット範囲分離命令は、最上位ビット（ＭＳＢ）として分離されるべき対象範囲のビットの第１の端部を暗示的にまたは暗に示すことができる。本図では最上位ビットが最左端ビットである。
【００４４】
図４は、対象範囲のビットの端部を最上位ビット（ＭＳＢ）として暗示的にまたは暗に示すビット範囲分離命令の第２の実施形態によるビット範囲分離処理の第２の実施形態を示す。本図では最上位ビット（ＭＳＢ）が「３１」で示される最左端ビットである。
【００４５】
第２の実施形態は、前述した第１の実施形態と幾らか類似している。説明を簡潔にするべく、以下では類似点を繰り返すのではなく、差異を中心に説明する。
【００４６】
前と同様に、ビット範囲分離命令は、ソースオペランド（ＳＲＣ）およびデスティネーションオペランド（ＤＥＳＴ）を示す、または指定する。デスティネーションオペランド（ＤＥＳＴ）は、対象となる第１範囲のビット４２２と、ゼロにされる、あるいは破棄される第２範囲のビット４２０とを含む結果を有する。
【００４７】
第１範囲のビット３２２においては、終了点が暗示的なＭＳＢであり、この特定の場合には開始点が１８番目のビットである。第２範囲のビットにおいては、開始点がＬＳＢであり、この特定の場合には終了点が１７番目のビットである。第１範囲と第２範囲との間の境界は、他のいずれの場所であってもよい。
【００４８】
１以上の実施形態では、ビット範囲分離命令は、第２のソースオペランドまたは命令の即値などにより、第１範囲のビットの開始点を示す値を明示的に指定することもできる。例えば、値は、第２の端部に対応するビットの位置、または、その長さの端部が第２の端部に対応するようなビット長を表すことができる。
【００４９】
第１範囲のビット４２２とは、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しいものであってよい。この特定の例においては、ソースオペランド（ＳＲＣ）の１５個の最上位または最左端ビットは「１０１００１１０１００１１０１」であり、同様に、デスティネーションオペランド（ＤＥＳＴ）における第１範囲のビット４２２の１５個の最上位または最左端ビットも同一のビット値「１０１００１１０１００１１０１」を有する。
【００５０】
第２範囲のビット４２０はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。この特定の例では、ソースオペランド（ＳＲＣ）の１７個の最下位または最右端ビットのビット値は「１０１０１１００１１１０１０１１０」であり、デスティネーションオペランド（ＤＥＳＴ）における第２範囲の１７個の最下位ビットは全て「０００００００００００００００００」を有する。第２範囲の全てのビットが同じ１の値である構成も可能である（例えば「１１１１１１１１１１１１１１１１１」）。
【００５１】
別のオプションとして１以上の実施形態では、ビット範囲分離命令が、例えば第２のソースオペランドおよび／または命令の即値により、対象範囲のビットの両端部をそれぞれ示す値を明示的に指定することもできる。
【００５２】
図５は、対象範囲のビットの両端部を示す、または指定するビット範囲分離命令の第３の実施形態によるビット範囲分離処理の第３の実施形態を示す。説明を簡潔にするべく、以下では前述した２つの実施形態との類似点を繰り返すのではなく、差異を中心に説明する。
【００５３】
前と同様に、ビット範囲分離命令は、ソースオペランド（ＳＲＣ）およびデスティネーションオペランド（ＤＥＳＴ）を示す、または指定する。デスティネーションオペランド（ＤＥＳＴ）は、対象となる第１範囲のビット５２２と、不要な第２範囲のビット５２０と、さらに、不要な第３範囲のビット５２１とを含む結果を有する。
【００５４】
第１範囲のビット５２２では、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しい。第２範囲のビット５２０はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。またはゼロの代わりに１であってもよい。
【００５５】
第３範囲のビット５２１も同様に、その全てが同じ値を有していてよく、この特定の場合においては全てがゼロである。あるいは、ビット範囲分離命令は、第２範囲の最上位ビットをゼロにする、あるいは破棄し、且つ、不要な第３範囲の最下位ビットはゼロにしない、あるいは破棄しないようにすることもできる。この不要な第３範囲の最下位ビットは、後続する右シフト命令などにより、適宜、後で破棄することもできる。
【００５６】
端部を指定する値の各々は、暗示的な、あるいは理解される点（例えば最下位ビット、最上位ビット、または中央ビット等）から計測されるビットの位置、あるいは、暗示的な、あるいは理解される点（例えば最下位ビット、最上位ビット、中央ビット、または対象範囲のビットの端部等）のビットの正または負の長さを表してもよい。この特定の実施形態では、第１の値が、対象の第１範囲のビットの開始点のビット位置を表し、第２の値が、第１の値が表すビットの開始点からのビット長を表してよい。
【００５７】
図３−図５では、ビット範囲分離命令の実行は、結果の第１範囲のビットを、結果の第１範囲のビットの位置に関わらず、ソースオペランドの対応する位置にある同じ値のビットに対してシフトあるいは移動することなく完了していた。つまり、相対的なビット位置を変更するシフト処理あるいはその他の処理が行われなかった。第１範囲のビットをシフトして、例えば第１範囲のビットを最下位ビットに対して位置調整させる、あるいは位置合わせさせることが望ましい場合には、後続する命令（例えば右シフト命令）により行うことができる。多くのＩＳＡが、この処理を行うのに適した右シフト命令を有している。
【００５８】
図３−図５は、適切なビット範囲分離命令の幾らかの例を示す。本開示を読んだ当業者であれば、異なる実施形態を複数想到するであろう。
【００５９】
特定の実施形態におけるビット範囲分離命令に、ＢＺＨＩ（Zero High Bits Starting with Specified Bit Position Instruction：指定されたビット位置から始まる上位ビットをゼロにする命令）がある。ＢＺＨＩ命令は、オプションとしてＲＥＸプレフィックスを有してよい標準的な３バイトｘ８６のオペコードを有して、より多くのレジスタおよびより広いデータ空間のアドレス指定が可能である。表１に、ＢＺＨＩ命令のオペランド符号を示す。
【００６０】
【表１】
0005456643.tif 000002
【００６１】
オペランド１は明示的に指定されており、３２ビットモードでは３２ビットの汎用レジスタ（reg）、または、６４ビットモードでは６４ビットの汎用レジスタであってよい。オペランド１に対しては読み出し（Ｒ）および書き込み（Ｗ）が許されている。
【００６２】
オペランド２は明示的に指定されており、３２ビットモードでは３２ビットの汎用レジスタ（ｒ）またはメモリ（ｍ）、または、６４ビットモードでは６４ビットの汎用レジスタであってよい。オペランド２に対しては読み出し（Ｒ））が許されている。
【００６３】
図６は、ビット範囲を分離する、またはゼロにする命令の特定の実施形態を表すＢＺＨＩの記述である。ＢＺＨＩ命令は、第２のオペランドのビットを、デスティネーションオペランドにコピーして、第１のオペランドの８個の下位ビットに含まれる数が指定するビット位置からオペランドサイズの最大値までの全ての上位ビットをゼロに設定する。ＢＺＨＩ命令に関しては、第１のオペランドがデスティネーションオペランドとしても利用され、結果が第１のオペランドを上書きする。
【００６４】
ゼロフラグ（ＺＦ）、キャリーフラグ（ＣＦ）、および符号フラグ（ＳＦ）は結果に応じて更新される。キャリーフラグ（ＣＦ）は、第１のオペランドの８個の下位ビットに含まれる数がオペランドサイズより大きい場合に設定される。ある側面においては、この場合のビット位置は、第１のオペランドの８個の下位ビットに含まれる数と、オペランドサイズとの間の差分として捉えることができる。オーバフローフラグ（ＯＦ）をクリアする。補助キャリーフラグ（ＡＦ）およびパリティフラグ（ＰＦ）は未定義である。これらフラグは図１１に示す。
【００６５】
デフォルトのオペランドサイズは３２ビットである。６４ビットのオペランドのサイズが符号化可能である。命令の前の６６Ｈのプレフィックスバイトにより＃ＵＤが生じる。
【００６６】
図７は、ビット範囲を分離する、またはゼロにする命令の特定の実施形態を表すＢＺＨＩ命令の疑似コード処理を示す。ＳＲＣは、データを有する、明示的に指定された第２のソースオペランドのことであり、ＤＥＳＴは、これも第１のソースオペランドとして利用され、ビット位置を格納する際に利用されるデスティネーションオペランドのことである。ＯｐｅｒａｎｄＳｉｚｅは３２ビットモードでは３２ビットであり、６４ビットモードでは６４ビットである。ＣＦとは、キャリーフラグのことである。
【００６７】
他の命令も考えることができる。例えば、ソースオペランドをデスティネーションオペランドで上書きすることは必須ではない。オペコード、符号化、ＲＥＸ，およびＶＥＸプレフィックスに関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル第２Ａ巻：命令セットレファレンス、Ａ−Ｍ、オーダ番号：２５３６６６−０３２ＵＳ，２００９年９月を参照されたい。
【００６８】
コンセプト例として、ＢＺＨＩがビットフィールドを抽出するときにユーティリティをいかに持つかを考える。ビットフィールドの抽出は、例えばハフマン、ライス、およびガンマ符号等の数多くのデータ伸張圧縮および復号アルゴリズムで有用である。通常は、対象範囲のビットの開始点および終了点、または開始点および長さを、復号アルゴリズムによるランタイム中に決定することができる。場合によっては、対象範囲のビットは、予め定義された固定長さを有してよい（例えば長さ１０：１０：１０：２）。他の場合には、対象範囲のビットは、例えばハフマン、ライス、およびガンマ符号等の場合同様の可変長を有することができる。いずれの場合においても、従来の方法を利用して、対象範囲のビットの開始点および終了点、または開始点および長さを決定することができる。
【００６９】
アルゴリズムのなかには、ＢＺＨＩを右シフト命令とともに利用することで、対象のビットフィールドを分離して、最下位ビットに対して右側の位置合わせ、または右寄せを行うことができるものがある。この一例としては、復号アルゴリズムで対象範囲のビットの開始点および終了点を計算する場合、ＢＺＨＩ命令を行うことで、終了点から始まるデータのビットをゼロにして、その結果を格納して、後に右シフト命令を実行して、ＢＺＨＩ命令の結果を開始点の量だけ右シフトして、内側にシフトされた最上位に位置するビットをゼロ拡張することができる。この処理を以下に示す。
【００７０】
ＲＥＳＵＬＴ１＝ＢＺＨＩ  ＤＡＴＡ，ＥＮＤ
ＲＥＳＵＬＴ２＝ＳＨＩＦＴ＿ＲＩＧＨＴ  ＲＥＳＵＬＴ１，ＳＴＡＲＴ
【００７１】
復号アルゴリズムで対象範囲のビットの開始点および長さを計算するときに、右シフト命令を実行して、データを右シフトして、内側にシフトされた最上位に位置するビットをゼロ拡張して、その結果を格納して、後でＢＺＨＩ命令を右シフト命令の結果に実行して、その長さよりも上位に位置する結果のビットをゼロにして、その結果を格納することができる。この処理を以下に示す。
【００７２】
ＲＥＳＵＬＴ１＝ＳＨＩＦＴ＿ＲＩＧＨＴ  ＤＡＴＡ，ＳＴＡＲＴ
ＲＥＳＵＬＴ２＝ＢＺＨＩ  ＲＥＳＵＬＴ１，ＬＥＮＧＴＨ
【００７３】
このような処理により、復号アルゴリズムが対象範囲のビットの開始点を提供する場合、長さを計算する必要がなくなることから、ビットフィールド抽出プロシージャ１つにつき１以上の命令をなくすことができるようになるので好適である。
【００７４】
対象範囲のビットの開始点および終了点、および開始点および長さをランタイムで決定するときには、これらの値をすぐに利用可能として、２つの命令のみによりビットフィールドを抽出することのできる機能があると好適である。ＩＳＡは２ソース命令セットのアーキテクチャであり、これによって、２つのオペランドのみを１つの命令に対して明示的に指定することができるようになる。可変の開始点および可変の終了点を有する普遍的なビットフィールド抽出命令は、３つの入力（つまり、開始データ、開始点、および終了点または長さの一方）が必要となる。場合によっては、あるビット範囲の可変の開始点および可変の終了点（または長さ）には、別の計算により計算される、および／または別の機会に知られていてもよい。２ソースＩＳＡでは、開始点と、終了点または長さの一方が、予め単一の入力として組み合わせられていてもよい。しかし場合によっては、これらの入力を予め組み合わせておくには、少なくとも２つのさらなる命令を追加する必要がある場合があり、これにより全体のレイテンシーが上がってしまう虞がある。可変の開始点および可変の終了点（または長さ）を指定する必要なく、ビット範囲をゼロにする処理を実行する命令により、性能上の利点が得られよう。従って、開始点をビット範囲分離命令で暗示的に指定すること、ビット範囲分離命令からシフト処理を省くことで、それぞれ性能上の利点が得られよう。
【００７５】
分離され抽出されたビットフィールドは、例えば抽出されたビットフィールドを機械のデータワードサイズとしてさらなる処理に備えさせたり、パラレル分散（parallel scatter）、ダンプ処理（deposit operation）その他の用途に利用されたり、といった様々な目的に利用することができる。実施形態の範囲は、この種類の処理のうち公知のものに限定されない。
【００７６】
図８は、ビット範囲分離ロジック８３０の一実施形態を示すブロック図である。ビット範囲分離ロジックは、実行ユニットに含められて、ビット範囲分離命令に呼応することができる。
【００７７】
図示されているビット範囲分離ロジックは３２ビットの処理用である。ロジックは、６４ビットまたはそれ以上の処理用の拡張が容易である。さらに、図示されているロジックは、最下位ビット（ＬＳＢ）における対象範囲のビットの暗示的な開始点を採用（assume）することができる。従って図示されているロジックは、図３に示す処理に非常によく似ている。
【００７８】
ビット範囲分離ロジックは、３２ビットのソースオペランド８３２と、対象ビットの範囲の他の端部のビット位置を表す８ビットの位置にある値８３４とを入力として受け取る。
【００７９】
ビット範囲分離ロジックは、マスク生成ロジック８３６を含む。マスク生成ロジックは４つの２：３の飽和復号器８３８Ａ−Ｄを含む。２：３の飽和復号器各々は、８ビットの位置にある値を受信するよう連結されている。飽和復号器８３８Ａ−Ｂの第１の対の出力は、第１の６：１６の飽和復号器Ｆ８４０Ａの入力に連結されている。飽和復号器８３８Ｃ−Ｄの第２の対の出力は、第２の６：１６の飽和復号器８４０Ｂの入力に連結されている。マスク生成ロジックは、８ビットの位置にある値に基づいてマスクを生成する機能を有する。一実施形態では、マスク生成ロジックは、（１）各々が対象範囲のビットに対応して、各々が１の値を有する第１範囲のビット、および、（２）各々が対応する位置にある対象外の不要な範囲のビットに対応し、各々がゼロの値を有する第２範囲のビットを有するようなマスクを生成することができる。例えばマスクは、対象範囲のビットの暗示的な最下位ビット（ＬＳＢ）に相当する開始点から８ビットの位置にある値が指定する対象範囲のビットの終了点まで１を有し、全てのそれより上位のビットにおいてゼロを有する。
【００８０】
３２ビットのマスクレジスタ８４２は、第１および第２の６：１６の飽和復号器の出力に連結されてマスクを受信する。例を挙げると、３２ビットのマスクは一時的なロジックのレジスタを含んでよい。
【００８１】
ビット範囲分離ロジックはさらに、ビットワイズ演算ロジック８４４を含む。１以上の実施形態では、ビットワイズ演算ロジックはＡＮＤロジックを含んでよい。あるいは、ビットワイズ演算ロジックはＯＲロジック、ＸＯＲロジック等を含むこともできる。ビットワイズ演算ロジックは、３２ビットのマスクレジスタから３２ビットのマスクを受け取るよう連結されてよい。ビットワイズ演算ロジックはさらに、３２ビットのソースオペランドを受け取るよう連結される。ビットワイズ演算ロジックは、３２ビットのソースオペランドおよび３２ビットのマスクに対してビットワイズ演算を行う機能を有する。
【００８２】
ＡＮＤ演算ロジックの場合、マスクの１でマスクされる３２ビットのソースオペランドのビットは、結果において同じように再生され、マスクの０でマスクされる３２ビットのソースオペランドのビットは全てクリアされる、あるいはゼロに設定される。このようなＡＮＤ演算ロジックを「ゼロロジック」とみなすことができる。
【００８３】
ＯＲ演算ロジックの場合、マスクの１でマスクされる３２ビットのソースオペランドのビットは、結果において同じように再生され、マスクの０でマスクされる３２ビットのソースオペランドのビットは全て１に設定される。一般的には不要なビットはＡＮＤ演算ロジックでゼロにクリアするほうが、ＯＲ演算ロジックにより１に設定するよりも有利であるが、ＯＲ演算ロジックの利用が有利である場合もある。
【００８４】
示されているビット範囲分離ロジック８３０に僅かな変更を加えることにより、暗示的な最下位ビット（ＬＳＢ）に相当する開始点の代わりに、明示的な開始位置を柔軟に得ることができるようになる。オプションとして、復号器８３８Ａ−Ｄおよび復号器８４０Ａ−Ｂを飽和復号器とせずに、明示的な開始位置を追加的な入力として不飽和復号器に加えることもできる。これにより、図５に示すものに非常によく似たビット範囲分離処理を得ることもできる。
【００８５】
１以上の実施形態では、汎用レジスタセット内のレジスタを利用して、１以上のソースおよび／またはデスティネーションオペランドを格納することができる。さらに幾らかのコンセプト例においては、様々なインテルアーキテクチャプロセッサで利用可能な適切な汎用レジスタの実施形態を挙げることができるが、これら特定のレジスタは必須ではない。
【００８６】
図９は、適切な３２ビットの汎用レジスタセット９５０の特定の実施形態を示す。３２ビットのレジスタセットは、８個の３２ビットまたはダブルワードの汎用レジスタを含む。これらレジスタは、ＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、およびＥＳＰと称される。これら３２ビットのレジスタはさらに、１６ビットおよび８ビットモードでアドレス指定可能である。ＥＡＸ、ＥＢＸ、ＥＣＸ、およびＥＤＸレジスタの下位の１６ビットは、ＡＸ、ＢＸ、ＣＸ、およびＤＸとそれぞれ称される。一例では、レジスタＢＸ、ＣＸ、およびＤＸにはそれぞれ１６ビットのワード符号なしの整数を格納することができる。レジスタＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、ＥＳＰ、Ｒ８Ｄ−Ｒ１５Ｄには、３２ビットのダブルワードの符号なし整数を格納することができる。
【００８７】
図１０は、適切な６４ビットの汎用レジスタセット１０５２の別の特定の実施形態を示す。６４ビットのレジスタセットは１６個の６４ビットまたはクワッドワードの汎用レジスタを含む。これらレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、ＲＳＰ、Ｒ８、Ｒ９、Ｒ１０、Ｒ１１、Ｒ１２、Ｒ１３、Ｒ１４、およびＲ１５と称される。これらレジスタは３２ビットモードで３２ビットオペランドに対して動作可能であり、６４ビットモードで６４ビットオペランドに対して動作可能である。ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、およびＲＳＰレジスタの下位３２ビットが、それぞれＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰ、およびＥＳＰレジスタに対応する。レジスタＲ８−Ｒ１５の下位３２ビットはさらに３２ビットモードでアドレス指定可能であり、Ｒ８Ｄ−Ｒ１５Ｄと称される。一例では、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＳＩ、ＲＤＩ、ＲＢＰ、ＲＳＰ、またはＲ８Ｄ−Ｒ１５Ｄレジスタには、６４ビットのクワッドワードの符号なし整数を格納することができる。
【００８８】
汎用レジスタのさらなる記述に関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル、第１巻：基本アーキテクチャ、オーダ番号：２５３６６５−０３２ＵＳ、２００９年９月を参照されたい。これら特定のレジスタはあくまで例示であり、必須ではない。
【００８９】
図１１は、フラグレジスタのステータスの適切な一実施形態を示すＥＦＬＡＧＳレジスタを示す。この特定のレジスタおよびこれらの特定のフラグは必須ではない。
【００９０】
ＥＦＬＡＧＳレジスタは３２ビットのレジスタであり、一群のステータスフラグ、制御フラグ、および一群のシステムフラグを含む。ステータスフラグには、キャリーフラグ（ＣＦ、ビット０）、パリティフラグ（ＰＦ、ビット２）、補助キャリーフラグ（ＡＦ、ビット４）、ゼロフラグ（ＺＦ、ビット６）、符号フラグ（ＳＦ、ビット７）、およびオーバフローフラグ（ＯＦ、ビット１１）が含まれる。
【００９１】
システムフラグには、トラップフラグ（ＴＦ、ビット８）、割り込みイネーブルフラグ（ＩＦ、ビット９）、Ｉ／Ｏ特権レベル（ＩＯＰＬ、ビット１２−１３）、ネストタスク（ＮＴ、ビット１４）、再開フラグ（ＲＦ、ビット１６）、仮想−８０８６モード（ＶＭ、ビット１７）、位置合わせチェック（ＡＣ、ビット１８）、仮想割り込みフラグ（ＶＩＦ、ビット１９）、仮想割り込み待ち状態（ＶＩＰ、ビット２０）、およびＩＤフラグ（ＩＤ、ビット２１）が含まれる。制御フラグには、方向フラグ（ＤＦ、ビット１０）が含まれる。ＥＦＬＡＧＳのビット２２−３１は保留される。
【００９２】
ＥＦＬＡＧＳレジスタは、前の１６ビットのＦＬＡＧＳレジスタを引き継いだものである。さらに６４ビットモードのプロセッサのＥＦＬＡＧＳレジスタは、ＲＦＬＡＧＳレジスタに引き継がれ、６４ビットに拡張されている。ＲＦＬＡＧＳの下位３２ビットはＥＦＬＡＧＳと同じである。ＦＬＡＧＳ各々において、ＥＦＬＡＧＳおよびＲＦＬＡＧＳレジスタ、キャリーフラグ（ＣＦ）がビット０である。ＥＦＬＡＧＳ／ＲＦＬＡＧＳレジスタ、およびキャリーフラグのさらなる記述に関しては、インテル（登録商標）６４およびＩＡ−３２アーキテクチャソフトウェア開発者用マニュアル、第１巻：基本アーキテクチャ、オーダ番号：２５３６６５−０３２ＵＳ、２００９年９月を参照されたい。
【００９３】
１以上の実施形態には、機械（例えば実行ユニット）により実行されると本明細書のいずれかの箇所に記載されているビット範囲分離処理を実行させるビット範囲分離命令を格納した、有形の機械アクセス可能な、および／または、機械により可読である媒体を含む製品が含まれる。有形の媒体には、１以上の固体材料が含まれてよい。媒体は、例えば機械アクセス可能な形態で情報を提供（例えば格納）するメカニズムを含むことができる。例えば、媒体はオプションとして記録可能媒体（例えばフロッピー（登録商標）ディスク、光格納媒体、光ディスク、ＣＤ−ＲＯＭ，磁気ディスク、光磁気ディスク、ＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ、およびこれらの組み合わせ）を含むことができる。
【００９４】
適切な機械には、これらに限られないが、ほんの数例を挙げると、実行ユニット、汎用プロセッサ、専用プロセッサ（例えばグラフィックスプロセッサおよび暗号化プロセッサ）、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、ＰＤＡ，携帯電話機、および、幅広い範囲の他の電子デバイスが１以上の実行ユニットとともに含まれる。
【００９５】
また別の実施形態は、実行ユニットを有する、および／またはここで開示する方法を実行するコンピュータシステム、エンベデッドシステム、その他の電子デバイスに係る。
【００９６】
図１２は、適切なコンピュータシステム１２０１の第１の実施形態のブロック図である。
【００９７】
コンピュータシステムはプロセッサ１２００を含む。プロセッサは、少なくとも１つのビット範囲分離命令１２０２を実行する機能を有する少なくとも１つの実行ユニット１２０６を含む。
【００９８】
プロセッサは、バス（例えばフロントサイドバス）または他のインターコネクト１２８０を介してチップセット１２８１に連結される。インターコネクトは、プロセッサと、システムの他のコンポーネントとの間におけるデータ信号のやりとりをチップセット経由で行うときに利用可能である。
【００９９】
チップセットは、メモリコントローラハブ（ＭＣＨ）１２８２として知られているシステムロジックチップを含む。ＭＣＨは、フロントサイドバスまたは他のインターコネクト１２８０に連結される。
【０１００】
メモリ１２８６はＭＣＨに連結される。様々な実施形態では、メモリは、ＲＡＭを含むことができる。ＤＲＡＭは、一部の（全てではない）コンピュータシステムで利用されるＲＡＭの一例である。図示されているように、メモリは、命令（例えば１以上のビット範囲分離命令）１２８７およびデータ１２８８を格納するために利用することができる。
【０１０１】
ＭＣＨにはコンポーネントインターコネクト１２８５も連結される。１以上の実施形態では、コンポーネントインターコネクトは、１以上のＰＣＩｅ（peripheral component interconnect express）インタフェースを含むことができる。コンポーネントインターコネクトは、他のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。これらコンポーネントの一例は、グラフィックチップあるいは他のグラフィックデバイスであるが、これはオプションであり必須ではない。
【０１０２】
チップセットも、Ｉ／Ｏ（入力／出力）コントローラハブ（ＩＣＨ）１２８４を含む。ＩＣＨは、ハブインタフェースバスその他のインターコネクト１２８３を介してＭＣＨに連結される。１以上の実施形態では、バスその他のインターコネクト１２８３はＤＭＩ（Direct Media Interface）を含むことができる。
【０１０３】
ＩＣＨにはデータ格納装置１２８９が連結される。様々な実施形態では、データ格納装置には、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭデバイス、フラッシュメモリデバイス等、またはこれらの組み合わせが含まれてよい。
【０１０４】
ＩＣＨにはさらに、第２のコンポーネントインターコネクト１２９０が連結される。１以上の実施形態では、第２のコンポーネントインターコネクトは、１以上のＰＣＩｅインタフェースを含むことができる。第２のコンポーネントインターコネクトは、様々な種類のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。
【０１０５】
ＩＣＨにはまたさらに、シリアル拡張ポート１２９１が連結される。１以上の実施形態では、シリアル拡張ポートは、１以上のＵＳＢ（universal serial bus）ポートを含むことができる。シリアル拡張ポートは、様々な他の種類の入力／出力デバイスを、システムの残りのコンポーネントにチップセット経由で連結することができる。
【０１０６】
ＩＣＨにオプションとして連結可能なこの他のコンポーネントの幾らかの例には、これらに限定はされないが、オーディオコントローラ、無線トランシーバ、およびユーザ入力デバイス（例えばキーボード、マウス）が含まれる。
【０１０７】
ＩＣＨにはさらにネットワークコントローラが連結される。ネットワークコントローラは、システムをネットワークに連結することができる。
【０１０８】
１以上の実施形態では、コンピュータシステムは、ワシントン州Ｒｅｄｍｏｎｄのマイクロソフトコーポレーション社から入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのバージョンを実行することができる。また他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、またはエンベデッドシステム）の利用も可能である。
【０１０９】
これは適切なコンピュータシステムの一例にすぎない。例えば、１以上の他の実施形態では、プロセッサがマルチコアを有してもよい。別の１以上の実施形態では、ＭＣＨ１２８２はプロセッサ１２００に物理的にオンダイに集積されていてよく、プロセッサを直接メモリ１２８６に、集積されたＭＣＨを介して連結することができる。また別の１以上の実施形態では、他のコンポーネントをプロセッサにオンダイに集積して、例えばシステムオンチップ（ＳｏＣ）デザインを提供することができる。さらに別の１以上の実施形態では、コンピュータシステムが複数のプロセッサを有することができる。
【０１１０】
図１３は、適切なコンピュータシステム１３０１の第２の実施形態のブロック図である。第２の実施形態は、前段で説明した第１のコンピュータシステム例にいくらか類似している。説明を簡潔にするべく、以下では類似点を全て繰り返すのではなく、差異を中心に説明する。
【０１１１】
上述した第１の実施形態と同様に、コンピュータシステムは、プロセッサ１３００と、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３８４を有するチップセット１３８１とを含む。さらに第１の実施形態と同様に、コンピュータシステムは、チップセットに連結された第１のコンポーネントインターコネクト１３８５、ＩＣＨに連結された第２のコンポーネントインターコネクト１３９０、ＩＣＨに連結されたシリアル拡張ポート１３９１、ＩＣＨに連結されたネットワークコントローラ１３９２、およびＩＣＨに連結されたデータ格納装置１３８９を含む。
【０１１２】
この第２の実施形態では、プロセッサ１３００はマルチコアプロセッサである。マルチコアプロセッサは、プロセッサコア１３９４−１から１３９４−Ｍを含み、ここでＭは２以上の整数であってよい（例えば、２、４、７、あるいはこれより大きい整数）。各コアは、ここに開示する命令の少なくとも１つの実施形態を実行する機能を有する少なくとも１つの実行ユニットを含むことができる。図示されているように、コア−１はキャッシュ１３９５（例えばＬ１キャッシュ）を含む。他のコア各々も同様に専用コアを含む。プロセッサコアは、単一の集積回路（ＩＣ）チップに実装されてよい。
【０１１３】
プロセッサはさらに少なくとも１つの共有キャッシュ１３９６を含む。共有キャッシュは、プロセッサの１以上のコンポーネント（例えばコア）が利用するデータ（例えば命令）を格納することができる。例えば、共有キャッシュは、メモリ１３８６にローカルにデータをキャッシュすることにより、プロセッサのコンポーネントからのアクセスをより迅速に行うことができる。１以上の実施形態では、共有キャッシュには１以上の中間レベルのキャッシュ（レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４））、あるいはその他のレベルのキャッシュ、最終のレベルのキャッシュ（ＬＬＣ）、および／または、これらの組み合わせが含まれてよい。
【０１１４】
プロセッサコアおよび共有キャッシュはそれぞれ、バスその他のインターコネクト１３９７と連結される。バスその他のインターコネクトは、コアおよび共有キャッシュを連結して通信を行う。
【０１１５】
プロセッサはさらにメモリコントローラハブ（ＭＣＨ）１３８２を含む。この実施形態に示すように、ＭＣＨはプロセッサ１３００に集積される。例えばＭＣＨはプロセッサコアとオンダイであってよい。プロセッサはＭＣＨ経由でメモリ１３８６に連結される。１以上の実施形態では、メモリはＤＲＡＭを含んでよいが、これは必須ではない。
【０１１６】
チップセットは入力／出力（Ｉ／Ｏ）ハブ１３９３を含む。Ｉ／Ｏハブは、バス（例えばＱＰＩ（QuickPath Interconnect））その他のインターコネクト１３８０を介してプロセッサに連結される。Ｉ／Ｏハブ１３９３には、第１のコンポーネントインターコネクト１３８５が連結される。
【０１１７】
これは適切なシステムの特定の一例にすぎない。ラップトップ、デスクトップ、ハンドヘルドＰＣ、ＰＤＡ，工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、ＤＳＰ、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話機、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子デバイスに関する、当技術分野で知られている他のシステム設計および構成の利用もまた適切である。概して、ここに開示されるプロセッサおよび／または実行ユニットを組み込むことのできる幅広い範囲のシステムまたは電子デバイスが概して適切である。
【０１１８】
上述に記載においては、説明をし易くする目的から、多くの特定の詳細を述べて実施形態の完全な理解を促すよう努めている。しかしながら当業者であれば、１以上の他の実施形態が、これら特定の詳細なしに実行可能であることを容易に理解する。ここに記載した特定の実施形態は、本発明の実施形態の範囲を限定する意図からではなく、例示する意図を有する。本発明の範囲は、上述した特定の例示からではなく、以下に示す請求項によってのみ決定されるべきものである。また、公知の回路、構造、デバイス、および処理に関してはブロック図の形式で示し、詳細には示さないことにより、記載の理解を曖昧にしないよう心がけている箇所もある。また適宜、参照番号または参照番号の末尾を図面にわたり繰り返すことで、オプションとして同様の特性を有する、対応または類似するエレメントであることを示している場合もある。
【０１１９】
処理のなかには、ハードウェアコンポーネントによる実行が可能なものもあり、機械実行可能な命令で具現化されるものもあり、処理を行う命令でプログラミングされた回路またはハードウェアとする、または少なくともそうするものがある。回路には、汎用または専用プロセッサ、論理回路が含まれてよいが、これら以外にも様々なものが含まれうる。処理はさらにオプションとしてハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行ユニットおよび／またはプロセッサは、機械命令または機械命令から導出される１以上の制御信号に呼応して、命令が特定する結果オペランドを格納する専用のあるいは特別の回路を含むことができる。
【０１２０】
本明細書の随所で利用されている「一実施形態（one embodiment）（an embodiment）」あるいは「１以上の実施形態（one or more embodiments）」といった言い回しは、特定の特徴が実施形態の実行において含まれてよいことを示している。同様に、ある実施形態、図面、その説明では様々な特徴を一まとめに説明して、開示を簡素化することで様々な発明の側面の理解を促す工夫がなされている場合があることに留意されたい。しかしこの開示に関する手法が、実施形態が各請求項に明示されているもの以上の特徴を必要とすることを反映しているものとして捉えられるべきではない。そうではなくて、以下の請求項から分かるように、発明の各側面は、開示する１つ１つの実施形態の特徴全て未満のなかに存在する。従って詳細な記載に続く請求項は、この詳細な記載に、各請求項をそれ自体が発明の別個の実施形態であるように組み込まれるべきであることをここに明記しておく。
【図１】
0005456643.tif 000003
【図２】
0005456643.tif 000004
【図３】
0005456643.tif 000005
【図４】
0005456643.tif 000006
【図５】
0005456643.tif 000007
【図６】
0005456643.tif 000008
【図７】
0005456643.tif 000009
【図８】
0005456643.tif 000010
【図９】
0005456643.tif 000011
【図１０】
0005456643.tif 000012
【図１１】
0005456643.tif 000013
【図１２】
0005456643.tif 000014
【図１３】
0005456643.tif 000015