特許第6569969号(P6569969)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許6569969プロセッサ、方法、プログラム、および機械可読記録媒体
<>
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000003
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000004
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000005
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000006
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000007
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000008
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000009
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000010
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000011
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000012
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000013
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000014
  • 特許6569969-プロセッサ、方法、プログラム、および機械可読記録媒体 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6569969
(24)【登録日】2019年8月16日
(45)【発行日】2019年9月4日
(54)【発明の名称】プロセッサ、方法、プログラム、および機械可読記録媒体
(51)【国際特許分類】
   G06F 9/305 20060101AFI20190826BHJP
   G06F 9/30 20180101ALI20190826BHJP
   G06F 7/57 20060101ALI20190826BHJP
【FI】
   G06F9/305 E
   G06F9/30 372
   G06F7/57 202
【請求項の数】11
【全頁数】28
(21)【出願番号】特願2018-138039(P2018-138039)
(22)【出願日】2018年7月23日
(62)【分割の表示】特願2015-219702(P2015-219702)の分割
【原出願日】2010年11月15日
(65)【公開番号】特開2018-160288(P2018-160288A)
(43)【公開日】2018年10月11日
【審査請求日】2018年8月22日
(31)【優先権主張番号】12/645,307
(32)【優先日】2009年12月22日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ロクツキン、マキシム
(72)【発明者】
【氏名】マフリン、エリック
(72)【発明者】
【氏名】トール、ブレット エル.
(72)【発明者】
【氏名】ディクソン、マーティン ジー.
(72)【発明者】
【氏名】マークス、シーン ピー.
(72)【発明者】
【氏名】クレイツァー、デイビット エル.
(72)【発明者】
【氏名】オウルド−アハムド−ヴァル、エル モウスタファ
(72)【発明者】
【氏名】ゴパル、ヴィノド
【審査官】 清木 泰
(56)【参考文献】
【文献】 特開2004−013185(JP,A)
【文献】 特公昭51−002771(JP,B1)
【文献】 特開昭61−103241(JP,A)
【文献】 特開平11−096000(JP,A)
【文献】 米国特許第04785393(US,A)
【文献】 特開昭61−088338(JP,A)
【文献】 特開平06−222918(JP,A)
【文献】 米国特許出願公開第2009/0006822(US,A1)
【文献】 米国特許第05930492(US,A)
【文献】 特開平05−150942(JP,A)
【文献】 特開2006−127460(JP,A)
【文献】 特開平05−100854(JP,A)
【文献】 特開平02−299082(JP,A)
【文献】 特開昭64−091228(JP,A)
【文献】 特開平06−131178(JP,A)
【文献】 インテル Itanium アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 第3巻:命令セット・リフ,Intel Corporation,2002年10月,Pages:3の48
【文献】 山口哲弘,x64で本格化する64ビットWindowsの時代 Part1 x64の威力,日経Windowsプロ,日本,日経BP社,2005年 1月,no:94,Pages:54〜73
【文献】 Yedidya Hilewitz, Ruby B. Lee,Performing Advanced Bit Manipulations Efficiently in General-Purpose Processors,Proceedings of the 18th IEEE Symposium on Computer Arthmetic(ARITH'07),IEEE,2007年 6月,Pages:251-260
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/355
G06F 5/01
G06F 7/38− 7/537
G06F 7/57− 7/575
G06F 7/74− 7/78
(57)【特許請求の範囲】
【請求項1】
プロセッサであって、
データを格納する複数のレジスタであって、前記複数のレジスタは、1のソースレジスタと、8ビットインデックス値を格納する第2のソースレジスタと、デスティネーションレジスタと、キャリーフラグ、ゼロフラグ、符号フラグ、およびオーバーフローフラグを含む複数のフラグ値を格納するフラグレジスタとを有する、前記複数のレジスタと、
ビット範囲分離命令を復号する命令復号回路と、
前記命令復号回路に結合された実行回路であって、前記実行回路は、前記ビット範囲分離命令に関連付けられたオペレーションを実行し、前記オペレーションは、システムメモリ位置にあるソース値または前記第1のソースレジスタにあるソース値における、前記8ビットインデックス値によって特定される第1のビット位置で始まる第1の範囲のビットを選択することと、前記デスティネーションレジスタにおける対応するビット位置に前記第1の範囲のビットを書き込むことと、前記第1のビット位置より上位のビット位置を有する前記デスティネーションレジスタの第2の範囲のビットにおける全てのビットにゼロを書き込むこととを有する、前記実行回路とを備え、
前記実行回路は、前記ビット範囲分離命令の実行に応じて前記オーバーフローフラグをクリアし、前記8ビットインデックス値が前記ソース値のオペランドサイズより大きい場合には前記キャリーフラグを設定する
プロセッサ。
【請求項2】
前記ソース値は、64ビットまたは32ビットのサイズを有する
請求項1に記載のプロセッサ。
【請求項3】
前記複数のフラグ値はさらに、パリティフラグ、補助キャリーフラグ、トラップフラグ、割り込みイネーブルフラグ、I/O特権レベルフラグ、ネストタスクフラグ、再開フラグ、仮想−8086モードフラグ、位置合わせチェックフラグ、仮想割り込みフラグ、仮想割り込み待ち状態フラグ、およびIDフラグを含む
請求項1または2に記載のプロセッサ。
【請求項4】
第2のソースレジスタに8ビットインデックス値を格納する段階と、
キャリーフラグ、ゼロフラグ、符号フラグ、およびオーバーフローフラグを含む複数のフラグ値をフラグレジスタに格納する段階と、
ビット範囲分離命令を復号する段階と、
前記ビット範囲分離命令に関連付けられたオペレーションを実行する段階であって、前記オペレーションは、システムメモリ位置にあるソース値または第1のソースレジスタにあるソース値における、前記8ビットインデックス値によって特定される第1のビット位置で始まる第1の範囲のビットを選択することと、デスティネーションレジスタにおける対応するビット位置に前記第1の範囲のビットを書き込むことと、前記第1のビット位置より上位のビット位置を有する前記デスティネーションレジスタの第2の範囲のビットにおける全てのビットにゼロを書き込むこととを有する、段階と、
前記ビット範囲分離命令の実行に応じて前記オーバーフローフラグをクリアし、前記8ビットインデックス値が前記ソース値のオペランドサイズより大きい場合には前記キャリーフラグを設定する段階と、を備える
方法。
【請求項5】
前記第1のソースレジスタに、64ビットまたは32ビットのサイズを有する前記ソース値を格納する段階を有する
請求項4に記載の方法。
【請求項6】
前記複数のフラグ値を格納する段階はさらに、パリティフラグ、補助キャリーフラグ、トラップフラグ、割り込みイネーブルフラグ、I/O特権レベルフラグ、ネストタスクフラグ、再開フラグ、仮想−8086モードフラグ、位置合わせチェックフラグ、仮想割り込みフラグ、仮想割り込み待ち状態フラグ、およびIDフラグを格納する段階を有する
請求項4または5に記載の方法。
【請求項7】
プログラムであって、
機械によって実行された場合に、
2のソースレジスタに8ビットインデックス値を格納する段階と、
キャリーフラグ、ゼロフラグ、符号フラグ、およびオーバーフローフラグを含む複数のフラグ値をフラグレジスタに格納する段階と、
ビット範囲分離命令を復号する段階と、
前記ビット範囲分離命令に関連付けられたオペレーションを実行する段階であって、前記オペレーションは、システムメモリ位置にあるソース値または第1のソースレジスタにあるソース値における、前記8ビットインデックス値によって特定される第1のビット位置で始まる第1の範囲のビットを選択することと、デスティネーションレジスタにおける対応するビット位置に前記第1の範囲のビットを書き込むことと、前記第1のビット位置より上位のビット位置を有する前記デスティネーションレジスタの第2の範囲のビットにおける全てのビットにゼロを書き込むこととを有する、段階と、
前記ビット範囲分離命令の実行に応じて前記オーバーフローフラグをクリアし、前記8ビットインデックス値が前記ソース値のオペランドサイズより大きい場合には前記キャリーフラグを設定する段階と、を前記機械に実行させるための
プログラム。
【請求項8】
前記第1のソースレジスタに格納される前記ソース値は、64ビットまたは32ビットのサイズを有し、
前記複数のフラグ値を格納する段階はさらに、パリティフラグ、補助キャリーフラグ、トラップフラグ、割り込みイネーブルフラグ、I/O特権レベルフラグ、ネストタスクフラグ、再開フラグ、仮想−8086モードフラグ、位置合わせチェックフラグ、仮想割り込みフラグ、仮想割り込み待ち状態フラグ、およびIDフラグを格納する段階を有する
請求項7に記載のプログラム。
【請求項9】
キャリーフラグ、ゼロフラグ、符号フラグ、およびオーバーフローフラグを含む複数のフラグ値を格納するためのフラグレジスタと、
1のソースレジスタと、
8ビットインデックス値を格納する第2のソースレジスタと、
デスティネーションレジスタと、
ビット範囲分離命令を復号する復号器と、
前記復号器に結合された実行ユニットであって、前記実行ユニットは、前記ビット範囲分離命令に関連付けられたオペレーションを実行し、前記オペレーションは、システムメモリ位置にあるソース値または前記第1のソースレジスタにあるソース値における、前記8ビットインデックス値によって特定される第1のビット位置で始まる第1の範囲のビットを選択することと、前記デスティネーションレジスタにおける対応するビット位置に前記第1の範囲のビットを書き込むことと、前記第1のビット位置より上位のビット位置を有する前記デスティネーションレジスタの第2の範囲のビットにおける全てのビットにゼロを書き込むこととを有する、前記実行ユニットと、を備え、
前記ソース値は、64ビットまたは32ビットのサイズを有し、前記実行ユニットは、前記ビット範囲分離命令の実行に応じて前記オーバーフローフラグをクリアし、前記8ビットインデックス値が前記ソース値のオペランドサイズより大きい場合には前記キャリーフラグを設定する
プロセッサ。
【請求項10】
前記複数のフラグ値はさらに、パリティフラグ、補助キャリーフラグ、トラップフラグ、割り込みイネーブルフラグ、I/O特権レベルフラグ、ネストタスクフラグ、再開フラグ、仮想−8086モードフラグ、位置合わせチェックフラグ、仮想割り込みフラグ、仮想割り込み待ち状態フラグ、およびIDフラグを含む
請求項9に記載のプロセッサ。
【請求項11】
請求項7または8に記載のプログラムを格納する機械可読記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
様々な別個の実施形態が、ビット操作命令、ビット操作命令の実行方法、ビット操作命令実行ユニット、または実行ユニットを含むデバイスに係る。特に、様々な別個の実施形態は、ビットの範囲を分離するビット範囲分離命令、ビット範囲分離命令の実行方法、ビット範囲分離命令の実行ユニット、または実行ユニットを含むデバイスに係る。
【背景技術】
【0002】
汎用プロセッサ、専用プロセッサ、コントローラ、その他のデバイスが、ISA(instruction set architecture)が指定する命令を実行する。デバイスはこの命令により様々に異なる種類の処理を実行することができる。よく知られた処理の1つに、ビット操作処理がある。
【0003】
様々に異なるビット操作命令が知られている。そのうち1つがEXTR−Extract命令である。EXTR命令に関しては、インテル(登録商標)Itanium(登録商標)アーキテクチャソフトウェア開発者用マニュアル、第3巻:命令セットレファレンス、改訂版2.2、2006年1月、書類番号:245319−005を参照されたい。
【0004】
EXTR命令は、2つの即値により指定される1つのビットフィールドを抽出し、この抽出されたビットフィールドを右シフトして、デスティネーションにおける、抽出されたビットフィールドの右寄せを行う。このように、ビットフィールドを抽出することと、抽出されたビットフィールドをシフトさせることとを1つの命令で行うと、データ処理の速度および/または効率性が概して制限される。他のビット操作命令のなかには、テーブルルックアップを利用するものもあり、これは長いレイテンシーを生じる場合がある。
【0005】
データ処理においては速度および/または効率性が重要であることから、従来とは異なる新たな操作命令を設けると好適であると思われる。
【図面の簡単な説明】
【0006】
本発明は、以下の記載を、本発明の実施形態を示す添付図面を参照しながら読むことで理解が深まる。
図1】ビット範囲分離命令の一実施形態を処理する方法の一実施形態のブロックフロー図である。
図2】命令処理装置の一実施形態のブロック図である。
図3】ビット範囲分離命令の第1の実施形態によるビット範囲分離処理の第1の実施形態を示す。
図4】ビット範囲分離命令の第2の実施形態によるビット範囲分離処理の第2の実施形態を示す。
図5】ビット範囲分離命令の第3の実施形態によるビット範囲分離処理の第3の実施形態を示す。
図6】ビット範囲分離命令の特定の実施形態を表すBZHIの記述である。
図7】ビット範囲分離命令の特定の実施形態を表すBZHI命令の疑似コード処理を示す。
図8】ビット範囲分離ロジックの一実施形態を示すブロック図である。
図9】適切な32ビットの汎用レジスタセットの特定の実施形態を示す。
図10】適切な64ビットの汎用レジスタセットの別の特定の実施形態を示す。
図11】フラグレジスタのステータスの適切な一実施形態を示すEFLAGSレジスタを示す。
図12】適切なコンピュータシステムの第1の実施形態のブロック図である。
図13】適切なコンピュータシステムの第2の実施形態のブロック図である。
【発明を実施するための形態】
【0007】
以下の詳細な説明において、プロセッサの種類、命令実装の詳細、データの種類、レジスタの種類、レジスタの配置、システム構成等、多くの特定の詳細を述べる。しかし、実施形態はこれら特定の詳細なしに実施可能である。また、公知の回路、構造、および技術等に関して、詳細に説明しないことにより、本発明の実施形態の本質を曖昧にしないようにしている箇所もある。
【0008】
レジスタあるいは他の格納位置に格納されるビットが、対象ビットのストリングまたは範囲を1つ、現在対象以外の、あるいは少なくとも対象範囲のビットの一部ではないビットのストリングまたは範囲を1以上とともに含むような、様々な場合がありうる。これらの場合を代表して、対象範囲のビットを、さらなる処理を行う数または値を表すようにすることもできる。現在対象外のビットは、不要なビットあるいはドントケアビットとみなすことができる。一以上の実施形態では、対象範囲のビットの分離は、ゼロとすることで、あるいは、不要なビットは破棄して対象範囲のビットの値は維持するようにすることで行うことができる。これにより、対象範囲のビットに対して後で処理をし易くなる。
【0009】
実施形態は、新たな利用可能なビット範囲分離命令に係る。他の実施形態は、ビット範囲分離命令の実行ユニットに係る。さらに他の実施形態は、実行ユニットを有する、あるいは、命令を実行することのできる、汎用プロセッサ、専用プロセッサ、コントローラ、またはその他のロジックデバイスあるいは命令処理装置に係る。また別の実施形態は、ディスク、メモリ、または他の有形機械可読媒体に格納されるビット範囲分離命令に係る。
【0010】
図1は、ビット範囲分離命令の一実施形態を処理する方法100の一実施形態のブロックフロー図である。様々な実施形態において、方法は、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサまたはデジタルシグナルプロセッサ(DSP))、ハードウェアアクセラレータ(例えば暗号化アクセラレータ)、あるいは、別の種類のロジックデバイスまたは命令処理装置による実行中に行うことができる。
【0011】
ビット範囲分離命令は、ブロック101でプロセッサまたは他の装置により受信されてよい。1以上の実施形態では、ビット範囲分離命令は、ソースオペランドおよびデスティネーションオペランドを示してよい。
【0012】
ブロック102で、ビット範囲分離命令に呼応して結果をデスティネーションオペランドに格納してよい。その結果オペランドは、第1範囲のビットと第2範囲のビットとを有してよい。第1範囲のビットとは、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しいものであってよい。第2範囲のビットはその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有してよい。1以上の実施形態では、第2範囲のビットの全てがゼロであってよい。あるいは、第2範囲のビットの全てが1であってもよい。
【0013】
ブロック103で、ビット範囲分離命令の実行は、結果の第1範囲を、ソースオペランドの対応する位置にある同じ値のビットに対してシフトあるいは移動することなく完了してよい。これは、結果における第1範囲のビットの位置に関わらない(例えば、第1範囲のビットが、たとえ結果における中間の範囲のビットであってもよい)。1以上の実施形態では、ビット範囲分離命令の実行にテーブルルックアップは利用されなくてよいが、この場合にはレイテンシーが長くなる傾向にある。
【0014】
上述したようなシフトまたはビットの移動をビット範囲分離命令から省くことで、複数の利点が生じる可能性がある。1つには、シフト処理が必要な場合ばかりではないことである。さらにシフト処理によって命令実行時間が増加する傾向にあったり、および/または、ロジック領域/コストを増加させる傾向にあったりすることが多い。さらに殆どのISAが既に専用のシフト処理を有しており、これらがビット範囲分離命令とは別個に利用されていることがある。他の利点をさらに以下で説明する。
【0015】
図2は、命令処理装置110の一実施形態のブロック図である。1以上の実施形態では、命令処理装置は汎用プロセッサであってよい。プロセッサは、様々なCISC(complex instruction set computing)プロセッサ、様々なRISC(reduced instruction set computing)プロセッサ、様々なVLIW(very long instruction word)プロセッサ、これらの様々なハイブリッド、またはその他のプロセッサ全般のうちのいずれであってもよい。1以上の実施形態では、プロセッサは、カリフォルニア州サンタクララのインテルコーポレーション社製の汎用プロセッサであってよいが、これは必須要件ではない。インテルコーポレーション社製の汎用プロセッサの特定の例には、これらに限定はされないが、インテル(登録商標)コア(登録商標)i7プロセッサ・エクストリームエディション、インテル(登録商標)コア(登録商標)i7プロセッサ、インテル(登録商標)コア(登録商標)i5プロセッサ、インテル(登録商標)コア(登録商標)2エクストリームプロセッサ、インテル(登録商標)コア(登録商標)2クアッドプロセッサ、インテル(登録商標)コア(登録商標)2デュオプロセッサ、インテル(登録商標)ペンティアム(登録商標)プロセッサ、およびインテル(登録商標)セルロン(登録商標)プロセッサが含まれる。
【0016】
また、命令処理装置は専用プロセッサであってもよい。適切な専用プロセッサの代表的な例には、これらに限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号化プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、およびデジタルシグナルプロセッサ(DSP)がほんの一例として含まれる。これらプロセッサもCISC、RISC、VLIW、これらの様々なハイブリッド、またはその他のプロセッサ全般に基づいていてよい。
【0017】
また他の実施形態では、命令処理装置はコントローラ(例えばマイクロコントローラ)、または、命令処理機能を有するその他の種類のロジック回路であってよい。
【0018】
図2に戻ると、利用中に命令処理装置は、ビット範囲分離命令112の一実施形態を受信することができる。一例では、ビット範囲分離命令は、メモリからあるいはソフトウェアから受信されてよい。ビット範囲分離命令は、命令処理装置が認識している機械命令または制御信号を表してよい。ビット範囲分離命令には、オペコードまたは他の命令識別子が含まれてよい。命令処理装置は、ビット範囲分離命令に応じておよび/またはこれに指定された結果を格納する機能を有する専用の、または特別な回路、あるいは他のロジック(例えばハードウェアおよび/またはファームウェアと組み合わせられたソフトウェア)を有してよい。
【0019】
示している命令処理装置の実施形態には、命令復号器114が含まれる。復号器は、ビット範囲分離命令を受信して復号することができる。復号器は、元のビット範囲分離命令を反映する、あるいは、これから導出される、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、あるいはその他の制御信号を生成して出力することができる。復号器は、様々な異なるメカニズムを利用して実装することができる。適切なメカニズムの例には、これらに限定はされないが、マイクロコードROM、ルックアップテーブル、ハードウェア実装、PLA(programmable logic array)等が含まれる。
【0020】
復号器は装置の必須のコンポーネントではない。1以上の他の実施形態では、装置はこの代わりに、命令エミュレータ、命令翻訳プログラム、命令モーファ、命令解釈プログラム、その他の命令変換ロジックを含むことができる。本技術分野では、様々な異なる種類の命令エミュレータ、命令モーファ、命令翻訳プログラム等が公知である。命令変換ロジックはビット範囲分離命令を受信して、ビット範囲分離命令をエミュレート、翻訳、変形、解釈したり、ビット範囲分離命令を変換したりして、元のビット範囲分離命令に対応する1以上の命令または制御信号を出力することができる。命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによる実装が可能である。場合によっては、命令変換ロジックの一部または全てが、命令処理装置の残りからオフダイの位置に設けられてもよい(例えば、別のダイとして、またはシステムメモリ内に設けられてもよい)。場合によっては、命令処理装置は復号器および命令変換ロジック両方を備えてもよい。
【0021】
図2に戻ると、命令処理装置は実行ユニット116を含む。一例では、実行ユニットは、論理演算装置(arithmetic logic unit)、論理ユニット(logical unit)、ビット操作可能機能ユニット等を含むことができる。
【0022】
示されている実施形態では、実行ユニットは、復号器の出力に連結されている、さもなくば、これと通信可能状態である。「連結(couple)」という用語は、2以上のエレメントとが直接的な電気接触または接続状態にあることを意味する場合がある。しかし「連結」という用語は、さらに、2以上のエレメントが直接的な接続状態にはないが、互いと協働、相互作用、あるいは通信することも意味する(例えば間にコンポーネントを介在させることで)。一例を挙げると、復号器および実行ユニットが、これらの間に介在するオプションのバッファその他の本技術分野で公知であるコンポーネント(1または複数)によって、互いと連結される場合がこれに相当する。
【0023】
復号器がビット範囲分離命令を復号した結果、実行ユニットは、ビット範囲分離命令を反映する、またはこれから導出される1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令あるいはその他の制御信号を受信して実行してよい。また実行ユニットは、上述した命令変換ロジックから命令または制御信号を受信して実行してよい。実行ユニットは、ビット範囲分離命令から導出した命令その他の制御信号を実行する機能を有する回路またはその他の実行ロジック(例えば、ハードウェア、ソフトウェア、および/または、ファームウェアの組み合わせ)を含んでよい。
【0024】
実行ユニットは、ビット範囲分離命令の結果、ビット範囲分離命令が示すデスティネーションオペランドに結果を格納する機能を有してよい。結果は、第1範囲のビットと第2範囲のビットとを有してよい。1以上の実施形態では、第1範囲のビットとは、各ビットの値が、ソースオペランドの対応する位置にある、命令が示すビットの値と等しいものであってよい。第2範囲のビットはその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有してよい。1以上の実施形態では、実行ユニットは、ビット範囲分離命令の実行を、結果の第1範囲を、結果における第1範囲のビットの位置に関わらず(例えば、第1範囲のビットが、たとえ結果における中間の範囲のビットであったとしても)、ソースオペランドの対応する位置にある同じ値のビットに対して移動することなく完了してよい。ビット範囲分離命令の実行中の上述したようなシフトまたは第1範囲のビットの移動を省くことで、特定のデータ処理の速度および/または効率性を上げることができる。
【0025】
ビット範囲分離命令は、少なくとも1つのソースオペランドおよびデスティネーションオペランドを暗示的に識別する、あるいは明示的に指定することができる。1以上の実施形態では、ビット範囲分離命令は、専用フィールドまたは1セットのビットを有することで、ソースオペランド、デスティネーションオペランド、あるいはこれらの両方を明示的に指定することができる。1以上の実施形態では、ビット範囲分離命令は、ソースオペランドの、デスティネーションオペランドの、あるいは両方の1以上の固定レジスタまたはその他の格納位置を暗示的にまたは暗に識別することができる。1以上の実施形態では、ソースオペランドに利用される格納位置は、デスティネーションオペランドとしてもオプションとして利用することができ、この場合、ソースデータを結果で上書きすることができる。
【0026】
1以上の実施形態では、ソースオペランドおよびデスティネーションオペランドの一部または全てが、レジスタセット118のレジスタに格納されてよい。レジスタセットは、レジスタファイルの一部であってよく、および潜在的に他のレジスタ(例えば制御レジスタ、ステータスレジスタ、フラグレジスタ等)を含んでよい。レジスタは、データ格納に利用することのできる格納位置またはデバイスであってよい。レジスタセットは、物理的に実行ユニットと同じダイ上に設けられることが多い。レジスタは、プロセッサ外から、あるいはプログラマの視点から、可視であってよい。例えば、命令はレジスタに格納されるオペランドを指定することができる。本明細書で記載するデータを格納および提供する機能を有しさえすれば、様々な異なる種類のレジスタが適切であり利用可能である。レジスタにはリネームされてもされなくてもよい。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタのリネームを行って動的に割り当てられる物理レジスタ、専用物理レジスタおよび動的に割り当てられる物理レジスタの組み合わせ等が含まれる。またソースオペランドおよびデスティネーションオペランドのうち1以上は、レジスタ以外の格納位置(例えば不図示であるがシステムメモリのある位置)に格納されてもよい。
【0027】
図2に戻ると、ビット範囲分離処理の一実施形態が示されている。ビット範囲分離命令は、この特定の場合にはレジスタセットの1以上のレジスタにあるソースオペランド(SRC)を示している、あるいは指定している。図面を簡潔にする目的から、図面におけるソースオペランド(SRC)は、ビットを8つだけ有しているが(つまり「10101010」)、しばしばオペランドはこれ以上の数のビット(例えば16ビット、32ビット、64ビット、128ビット、あるいはこれ以外の数のビット)を含む場合がある。
【0028】
実行ユニットは、ソースオペランド(SRC)を受信してよい。実行ユニットは、ビット範囲分離命令により、ソースオペランド(SRC)上でビット範囲分離処理を実行して、該命令が示す、あるいは指定するデスティネーションオペランド(DEST)に対応する結果を格納する。この特定の場合にはデスティネーションオペランドはレジスタセットの1以上のレジスタに格納される。
【0029】
結果は、第1範囲のビット122および第2範囲のビット120を有してよい。この特定の例では、第1範囲のビット122は、3つの最下位(最右端)ビットであり、第2範囲のビット120は、5つの最上位(最左端)ビットであるが、これはあくまで例示にすぎない。
【0030】
第1範囲のビット122では、各ビットの値が、ソースオペランド(SRC)の対応する位置にあるビットの値と等しい。ソースオペランド(SRC)の3つの最下位または最右端ビットのビット値は「010」であり、同様に、デスティネーションオペランド(DEST)における第1範囲のビットの3つの最下位または最右端ビットも同一のビット値「010」を有する。
【0031】
第2範囲のビット120はその全てが、ソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を有していてよく、この特定の場合においては全てがゼロである。デスティネーションオペランド(DEST)内の結果の5つの最上位ビットは、ソースオペランド(SRC)の5つの最上位または最左端ビットのビット値が「10101」であろうとも、ビット値「00000」を有する。別の実施形態では、第2範囲のビット全てが1という同じ値を有することもできる(つまり、「11111」)。この特定の場合では、第2範囲の3つのビット各々が、ソースオペランドの対応する位置にあるビットとは異なる値を有することになる。
【0032】
説明を曖昧にしないようにする意図から、比較的簡単な命令処理装置を示し、説明している。しかし他の実施形態では複数の実行ユニットを利用することもできることは理解されたい。例えば、装置は、複数の異なる種類の実行ユニット(例えば演算装置、論理演算装置(ALU)、整数ユニット(integer unit)等)を含んでよい。3つのユニットのうち少なくとも1つが、本明細書で開示するビット範囲分離命令の一実施形態に呼応することができる。また他の実施形態には、複数のコア、論理プロセッサ、または実行エンジンが含まれてよい。本明細書で開示するビット範囲分離命令を実行する機能を有する実行ユニットは、少なくとも1つ、少なくとも2つ、殆どあるいは全てのコア、論理プロセッサ、または実行エンジン内に含まれてよい。
【0033】
命令処理装置はさらに、オプションとして1以上の公知の他のコンポーネントを含んでもよい。例えば、他の実施形態では、オプションとして命令フェッチロジック、プレデコードロジック、スケジュールロジック、リオーダ・バッファ、分岐予測ロジック、退避ロジック、レジスタ・リネームロジック、またはこれらの組み合わせを含んでよい。これらのコンポーネントは、従来の方法での実装、または、当業者であれば本開示に基づいて想到可能な微調整を加えることによる実装が可能である。本実施形態を理解する目的にはこれ以上これらのコンポーネントの詳述は不要であるが、これらコンポーネントの説明は刊行物にあるのでそれを参照されたい。当技術分野ではこれらコンポーネントの文字通り多くの異なる組み合わせおよび構成が公知である。本発明の範囲は、これら公知の組み合わせおよび構成のいずれにも限定はされない。実施形態は、これらオプションであるコンポーネントがあってもなくても実装可能である。
【0034】
1以上の実施形態では、ビット範囲分離命令の一実施形態は、対象範囲のビットの第1の端部を分離することを暗示的にまたは暗に示している場合がある。暗示的にまたは暗に示された端部とは、明示的な値では「表現されない(unexpressed)」が「暗に示され(understood))」うる、という意味である。プロセッサその他の命令処理装置は、オペコードまたはその他の固有命令識別子によりビット範囲ゼロ命令を認識することができ、ビットの範囲の端部が内在していることを理解することができる。
【0035】
図3は、対象範囲のビットの第1の端部を最下位ビット(LSB)として暗示的にまたは暗に示すビット範囲分離命令の第1の実施形態におけるビット範囲分離処理の第1の実施形態を示す。本図の最下位ビットは、「0」で示される最右端ビットである。
【0036】
ビット範囲分離命令は、ソースオペランド(SRC)を暗示的に示す、あるいは明示的に指定する。本図の実施形態のソースオペランドは32ビットである。しかしオペランドは16ビット、64ビット、128ビット、あるいはその他の数のビットであってもよい。この特定の図では32ビットのソースオペランド(SRC)が、「10100110100110110101100111010110」というようにビットを格納している。これら特定のビット値は例示を目的としたものであり、必須要件ではない。
【0037】
ビット範囲分離命令はさらに、デスティネーションオペランド(DEST)を暗示的に示す、あるいは、明示的に指定することもできる。デスティネーションオペランド(DEST)は、ビット範囲分離命令に従ってソースオペランド(SRC)に行われるビット範囲分離処理の一実施形態を表す結果を有する。この結果は、対象となる第1範囲のビット322と、第2範囲のクリアあるいは破棄されたビット320とを有する。
【0038】
第1範囲のビット322においては、開始点が暗黙のLSBの第1の端部であり、この特定の場合には、終了点が19番目のビットに終了点である。この特定の場合、第2範囲のビットの開始点は20番目のビットであり、終了点は最上位ビット(MSB)である。第1範囲と第2範囲との間の境界は、他のいずれの場所であってもよい。
【0039】
1以上の実施形態では、ビット範囲分離命令はさらに、ソースオペランドまたは定数または命令に関連付けられた即値などにより、対象の第1範囲のビットの終了点を示す値(数字を表すビット数)を明示的に指定することもできる。例えば明示的な値は、暗示的な、明示的な、あるいは理解される点(例えば暗示的な最下位ビットの端部、最上位ビット、または中央ビット等)から計測される端部に対応するビットの位置を表してよい。別の例においては、値は、暗示的な、明示的な、あるいは理解される点(例えば暗示的な最下位ビットの端部、最上位ビット、中央ビット、または対象範囲のビットの開始点)におけるビットの正または負の長さを表してもよい。
【0040】
第1範囲のビット322では、各ビットの値が、ソースオペランド(SRC)の対応する位置にあるビットの値と等しい。この特定の例では、ソースオペランド(SRC)の19個の最下位または最右端ビットのビット値は「10110101100111010110」であり、同様に、デスティネーションオペランド(DEST)における第1範囲のビット322の19個の最下位または最右端ビットも同一のビット値「10110101100111010110」を有する。
【0041】
第2範囲のビット320はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。この特定の例では、ソースオペランド(SRC)の12個の最上位または最左端ビットのビット値は「101001101001」であり、デスティネーションオペランド(DEST)における第2範囲の12個の最上位または最左端ビットは全て「000000000000」を有する。第2範囲の全てのビットが同じ1の値である構成も可能である(例えば「111111111111」)。
【0042】
つまり命令が示すビットは、第1範囲のビットに含めて保持するか、第2範囲のビットに含めてゼロにする、あるいは破棄することができる。命令ではいずれの変換を採用してもよい。
【0043】
別のオプションとして1以上の実施形態では、ビット範囲分離命令は、最上位ビット(MSB)として分離されるべき対象範囲のビットの第1の端部を暗示的にまたは暗に示すことができる。本図では最上位ビットが最左端ビットである。
【0044】
図4は、対象範囲のビットの端部を最上位ビット(MSB)として暗示的にまたは暗に示すビット範囲分離命令の第2の実施形態によるビット範囲分離処理の第2の実施形態を示す。本図では最上位ビット(MSB)が「31」で示される最左端ビットである。
【0045】
第2の実施形態は、前述した第1の実施形態と幾らか類似している。説明を簡潔にするべく、以下では類似点を繰り返すのではなく、差異を中心に説明する。
【0046】
前と同様に、ビット範囲分離命令は、ソースオペランド(SRC)およびデスティネーションオペランド(DEST)を示す、または指定する。デスティネーションオペランド(DEST)は、対象となる第1範囲のビット422と、ゼロにされる、あるいは破棄される第2範囲のビット420とを含む結果を有する。
【0047】
第1範囲のビット322においては、終了点が暗示的なMSBであり、この特定の場合には開始点が18番目のビットである。第2範囲のビットにおいては、開始点がLSBであり、この特定の場合には終了点が17番目のビットである。第1範囲と第2範囲との間の境界は、他のいずれの場所であってもよい。
【0048】
1以上の実施形態では、ビット範囲分離命令は、第2のソースオペランドまたは命令の即値などにより、第1範囲のビットの開始点を示す値を明示的に指定することもできる。例えば、値は、第2の端部に対応するビットの位置、または、その長さの端部が第2の端部に対応するようなビット長を表すことができる。
【0049】
第1範囲のビット422とは、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しいものであってよい。この特定の例においては、ソースオペランド(SRC)の15個の最上位または最左端ビットは「101001101001101」であり、同様に、デスティネーションオペランド(DEST)における第1範囲のビット422の15個の最上位または最左端ビットも同一のビット値「101001101001101」を有する。
【0050】
第2範囲のビット420はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。この特定の例では、ソースオペランド(SRC)の17個の最下位または最右端ビットのビット値は「10101100111010110」であり、デスティネーションオペランド(DEST)における第2範囲の17個の最下位ビットは全て「00000000000000000」を有する。第2範囲の全てのビットが同じ1の値である構成も可能である(例えば「11111111111111111」)。
【0051】
別のオプションとして1以上の実施形態では、ビット範囲分離命令が、例えば第2のソースオペランドおよび/または命令の即値により、対象範囲のビットの両端部をそれぞれ示す値を明示的に指定することもできる。
【0052】
図5は、対象範囲のビットの両端部を示す、または指定するビット範囲分離命令の第3の実施形態によるビット範囲分離処理の第3の実施形態を示す。説明を簡潔にするべく、以下では前述した2つの実施形態との類似点を繰り返すのではなく、差異を中心に説明する。
【0053】
前と同様に、ビット範囲分離命令は、ソースオペランド(SRC)およびデスティネーションオペランド(DEST)を示す、または指定する。デスティネーションオペランド(DEST)は、対象となる第1範囲のビット522と、不要な第2範囲のビット520と、さらに、不要な第3範囲のビット521とを含む結果を有する。
【0054】
第1範囲のビット522では、各ビットの値が、ソースオペランドの対応する位置にあるビットの値と等しい。第2範囲のビット520はその全てが、同じ値を有していてよく、この特定の場合においては全てがゼロである。またはゼロの代わりに1であってもよい。
【0055】
第3範囲のビット521も同様に、その全てが同じ値を有していてよく、この特定の場合においては全てがゼロである。あるいは、ビット範囲分離命令は、第2範囲の最上位ビットをゼロにする、あるいは破棄し、且つ、不要な第3範囲の最下位ビットはゼロにしない、あるいは破棄しないようにすることもできる。この不要な第3範囲の最下位ビットは、後続する右シフト命令などにより、適宜、後で破棄することもできる。
【0056】
端部を指定する値の各々は、暗示的な、あるいは理解される点(例えば最下位ビット、最上位ビット、または中央ビット等)から計測されるビットの位置、あるいは、暗示的な、あるいは理解される点(例えば最下位ビット、最上位ビット、中央ビット、または対象範囲のビットの端部等)のビットの正または負の長さを表してもよい。この特定の実施形態では、第1の値が、対象の第1範囲のビットの開始点のビット位置を表し、第2の値が、第1の値が表すビットの開始点からのビット長を表してよい。
【0057】
図3図5では、ビット範囲分離命令の実行は、結果の第1範囲のビットを、結果の第1範囲のビットの位置に関わらず、ソースオペランドの対応する位置にある同じ値のビットに対してシフトあるいは移動することなく完了していた。つまり、相対的なビット位置を変更するシフト処理あるいはその他の処理が行われなかった。第1範囲のビットをシフトして、例えば第1範囲のビットを最下位ビットに対して位置調整させる、あるいは位置合わせさせることが望ましい場合には、後続する命令(例えば右シフト命令)により行うことができる。多くのISAが、この処理を行うのに適した右シフト命令を有している。
【0058】
図3図5は、適切なビット範囲分離命令の幾らかの例を示す。本開示を読んだ当業者であれば、異なる実施形態を複数想到するであろう。
【0059】
特定の実施形態におけるビット範囲分離命令に、BZHI(Zero High Bits Starting with Specified Bit Position Instruction:指定されたビット位置から始まる上位ビットをゼロにする命令)がある。BZHI命令は、オプションとしてREXプレフィックスを有してよい標準的な3バイトx86のオペコードを有して、より多くのレジスタおよびより広いデータ空間のアドレス指定が可能である。表1に、BZHI命令のオペランド符号を示す。
【0060】
【表1】
【0061】
オペランド1は明示的に指定されており、32ビットモードでは32ビットの汎用レジスタ(reg)、または、64ビットモードでは64ビットの汎用レジスタであってよい。オペランド1に対しては読み出し(R)および書き込み(W)が許されている。
【0062】
オペランド2は明示的に指定されており、32ビットモードでは32ビットの汎用レジスタ(r)またはメモリ(m)、または、64ビットモードでは64ビットの汎用レジスタであってよい。オペランド2に対しては読み出し(R))が許されている。
【0063】
図6は、ビット範囲を分離する、またはゼロにする命令の特定の実施形態を表すBZHIの記述である。BZHI命令は、第2のオペランドのビットを、デスティネーションオペランドにコピーして、第1のオペランドの8個の下位ビットに含まれる数が指定するビット位置からオペランドサイズの最大値までの全ての上位ビットをゼロに設定する。BZHI命令に関しては、第1のオペランドがデスティネーションオペランドとしても利用され、結果が第1のオペランドを上書きする。
【0064】
ゼロフラグ(ZF)、キャリーフラグ(CF)、および符号フラグ(SF)は結果に応じて更新される。キャリーフラグ(CF)は、第1のオペランドの8個の下位ビットに含まれる数がオペランドサイズより大きい場合に設定される。ある側面においては、この場合のビット位置は、第1のオペランドの8個の下位ビットに含まれる数と、オペランドサイズとの間の差分として捉えることができる。オーバフローフラグ(OF)をクリアする。補助キャリーフラグ(AF)およびパリティフラグ(PF)は未定義である。これらフラグは図11に示す。
【0065】
デフォルトのオペランドサイズは32ビットである。64ビットのオペランドのサイズが符号化可能である。命令の前の66Hのプレフィックスバイトにより#UDが生じる。
【0066】
図7は、ビット範囲を分離する、またはゼロにする命令の特定の実施形態を表すBZHI命令の疑似コード処理を示す。SRCは、データを有する、明示的に指定された第2のソースオペランドのことであり、DESTは、これも第1のソースオペランドとして利用され、ビット位置を格納する際に利用されるデスティネーションオペランドのことである。OperandSizeは32ビットモードでは32ビットであり、64ビットモードでは64ビットである。CFとは、キャリーフラグのことである。
【0067】
他の命令も考えることができる。例えば、ソースオペランドをデスティネーションオペランドで上書きすることは必須ではない。オペコード、符号化、REX,およびVEXプレフィックスに関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル第2A巻:命令セットレファレンス、A−M、オーダ番号:253666−032US,2009年9月を参照されたい。
【0068】
コンセプト例として、BZHIがビットフィールドを抽出するときにユーティリティをいかに持つかを考える。ビットフィールドの抽出は、例えばハフマン、ライス、およびガンマ符号等の数多くのデータ伸張圧縮および復号アルゴリズムで有用である。通常は、対象範囲のビットの開始点および終了点、または開始点および長さを、復号アルゴリズムによるランタイム中に決定することができる。場合によっては、対象範囲のビットは、予め定義された固定長さを有してよい(例えば長さ10:10:10:2)。他の場合には、対象範囲のビットは、例えばハフマン、ライス、およびガンマ符号等の場合同様の可変長を有することができる。いずれの場合においても、従来の方法を利用して、対象範囲のビットの開始点および終了点、または開始点および長さを決定することができる。
【0069】
アルゴリズムのなかには、BZHIを右シフト命令とともに利用することで、対象のビットフィールドを分離して、最下位ビットに対して右側の位置合わせ、または右寄せを行うことができるものがある。この一例としては、復号アルゴリズムで対象範囲のビットの開始点および終了点を計算する場合、BZHI命令を行うことで、終了点から始まるデータのビットをゼロにして、その結果を格納して、後に右シフト命令を実行して、BZHI命令の結果を開始点の量だけ右シフトして、内側にシフトされた最上位に位置するビットをゼロ拡張することができる。この処理を以下に示す。
【0070】
RESULT1=BZHI DATA,END
RESULT2=SHIFT_RIGHT RESULT1,START
【0071】
復号アルゴリズムで対象範囲のビットの開始点および長さを計算するときに、右シフト命令を実行して、データを右シフトして、内側にシフトされた最上位に位置するビットをゼロ拡張して、その結果を格納して、後でBZHI命令を右シフト命令の結果に実行して、その長さよりも上位に位置する結果のビットをゼロにして、その結果を格納することができる。この処理を以下に示す。
【0072】
RESULT1=SHIFT_RIGHT DATA,START
RESULT2=BZHI RESULT1,LENGTH
【0073】
このような処理により、復号アルゴリズムが対象範囲のビットの開始点を提供する場合、長さを計算する必要がなくなることから、ビットフィールド抽出プロシージャ1つにつき1以上の命令をなくすことができるようになるので好適である。
【0074】
対象範囲のビットの開始点および終了点、および開始点および長さをランタイムで決定するときには、これらの値をすぐに利用可能として、2つの命令のみによりビットフィールドを抽出することのできる機能があると好適である。ISAは2ソース命令セットのアーキテクチャであり、これによって、2つのオペランドのみを1つの命令に対して明示的に指定することができるようになる。可変の開始点および可変の終了点を有する普遍的なビットフィールド抽出命令は、3つの入力(つまり、開始データ、開始点、および終了点または長さの一方)が必要となる。場合によっては、あるビット範囲の可変の開始点および可変の終了点(または長さ)には、別の計算により計算される、および/または別の機会に知られていてもよい。2ソースISAでは、開始点と、終了点または長さの一方が、予め単一の入力として組み合わせられていてもよい。しかし場合によっては、これらの入力を予め組み合わせておくには、少なくとも2つのさらなる命令を追加する必要がある場合があり、これにより全体のレイテンシーが上がってしまう虞がある。可変の開始点および可変の終了点(または長さ)を指定する必要なく、ビット範囲をゼロにする処理を実行する命令により、性能上の利点が得られよう。従って、開始点をビット範囲分離命令で暗示的に指定すること、ビット範囲分離命令からシフト処理を省くことで、それぞれ性能上の利点が得られよう。
【0075】
分離され抽出されたビットフィールドは、例えば抽出されたビットフィールドを機械のデータワードサイズとしてさらなる処理に備えさせたり、パラレル分散(parallel scatter)、ダンプ処理(deposit operation)その他の用途に利用されたり、といった様々な目的に利用することができる。実施形態の範囲は、この種類の処理のうち公知のものに限定されない。
【0076】
図8は、ビット範囲分離ロジック830の一実施形態を示すブロック図である。ビット範囲分離ロジックは、実行ユニットに含められて、ビット範囲分離命令に呼応することができる。
【0077】
図示されているビット範囲分離ロジックは32ビットの処理用である。ロジックは、64ビットまたはそれ以上の処理用の拡張が容易である。さらに、図示されているロジックは、最下位ビット(LSB)における対象範囲のビットの暗示的な開始点を採用(assume)することができる。従って図示されているロジックは、図3に示す処理に非常によく似ている。
【0078】
ビット範囲分離ロジックは、32ビットのソースオペランド832と、対象ビットの範囲の他の端部のビット位置を表す8ビットの位置にある値834とを入力として受け取る。
【0079】
ビット範囲分離ロジックは、マスク生成ロジック836を含む。マスク生成ロジックは4つの2:3の飽和復号器838A−Dを含む。2:3の飽和復号器各々は、8ビットの位置にある値を受信するよう連結されている。飽和復号器838A−Bの第1の対の出力は、第1の6:16の飽和復号器F840Aの入力に連結されている。飽和復号器838C−Dの第2の対の出力は、第2の6:16の飽和復号器840Bの入力に連結されている。マスク生成ロジックは、8ビットの位置にある値に基づいてマスクを生成する機能を有する。一実施形態では、マスク生成ロジックは、(1)各々が対象範囲のビットに対応して、各々が1の値を有する第1範囲のビット、および、(2)各々が対応する位置にある対象外の不要な範囲のビットに対応し、各々がゼロの値を有する第2範囲のビットを有するようなマスクを生成することができる。例えばマスクは、対象範囲のビットの暗示的な最下位ビット(LSB)に相当する開始点から8ビットの位置にある値が指定する対象範囲のビットの終了点まで1を有し、全てのそれより上位のビットにおいてゼロを有する。
【0080】
32ビットのマスクレジスタ842は、第1および第2の6:16の飽和復号器の出力に連結されてマスクを受信する。例を挙げると、32ビットのマスクは一時的なロジックのレジスタを含んでよい。
【0081】
ビット範囲分離ロジックはさらに、ビットワイズ演算ロジック844を含む。1以上の実施形態では、ビットワイズ演算ロジックはANDロジックを含んでよい。あるいは、ビットワイズ演算ロジックはORロジック、XORロジック等を含むこともできる。ビットワイズ演算ロジックは、32ビットのマスクレジスタから32ビットのマスクを受け取るよう連結されてよい。ビットワイズ演算ロジックはさらに、32ビットのソースオペランドを受け取るよう連結される。ビットワイズ演算ロジックは、32ビットのソースオペランドおよび32ビットのマスクに対してビットワイズ演算を行う機能を有する。
【0082】
AND演算ロジックの場合、マスクの1でマスクされる32ビットのソースオペランドのビットは、結果において同じように再生され、マスクの0でマスクされる32ビットのソースオペランドのビットは全てクリアされる、あるいはゼロに設定される。このようなAND演算ロジックを「ゼロロジック」とみなすことができる。
【0083】
OR演算ロジックの場合、マスクの1でマスクされる32ビットのソースオペランドのビットは、結果において同じように再生され、マスクの0でマスクされる32ビットのソースオペランドのビットは全て1に設定される。一般的には不要なビットはAND演算ロジックでゼロにクリアするほうが、OR演算ロジックにより1に設定するよりも有利であるが、OR演算ロジックの利用が有利である場合もある。
【0084】
示されているビット範囲分離ロジック830に僅かな変更を加えることにより、暗示的な最下位ビット(LSB)に相当する開始点の代わりに、明示的な開始位置を柔軟に得ることができるようになる。オプションとして、復号器838A−Dおよび復号器840A−Bを飽和復号器とせずに、明示的な開始位置を追加的な入力として不飽和復号器に加えることもできる。これにより、図5に示すものに非常によく似たビット範囲分離処理を得ることもできる。
【0085】
1以上の実施形態では、汎用レジスタセット内のレジスタを利用して、1以上のソースおよび/またはデスティネーションオペランドを格納することができる。さらに幾らかのコンセプト例においては、様々なインテルアーキテクチャプロセッサで利用可能な適切な汎用レジスタの実施形態を挙げることができるが、これら特定のレジスタは必須ではない。
【0086】
図9は、適切な32ビットの汎用レジスタセット950の特定の実施形態を示す。32ビットのレジスタセットは、8個の32ビットまたはダブルワードの汎用レジスタを含む。これらレジスタは、EAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPと称される。これら32ビットのレジスタはさらに、16ビットおよび8ビットモードでアドレス指定可能である。EAX、EBX、ECX、およびEDXレジスタの下位の16ビットは、AX、BX、CX、およびDXとそれぞれ称される。一例では、レジスタBX、CX、およびDXにはそれぞれ16ビットのワード符号なしの整数を格納することができる。レジスタEAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、R8D−R15Dには、32ビットのダブルワードの符号なし整数を格納することができる。
【0087】
図10は、適切な64ビットの汎用レジスタセット1052の別の特定の実施形態を示す。64ビットのレジスタセットは16個の64ビットまたはクワッドワードの汎用レジスタを含む。これらレジスタは、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14、およびR15と称される。これらレジスタは32ビットモードで32ビットオペランドに対して動作可能であり、64ビットモードで64ビットオペランドに対して動作可能である。RAX、RBX、RCX、RDX、RSI、RDI、RBP、およびRSPレジスタの下位32ビットが、それぞれEAX、EBX、ECX、EDX、ESI、EDI、EBP、およびESPレジスタに対応する。レジスタR8−R15の下位32ビットはさらに32ビットモードでアドレス指定可能であり、R8D−R15Dと称される。一例では、RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、またはR8D−R15Dレジスタには、64ビットのクワッドワードの符号なし整数を格納することができる。
【0088】
汎用レジスタのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル、第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。これら特定のレジスタはあくまで例示であり、必須ではない。
【0089】
図11は、フラグレジスタのステータスの適切な一実施形態を示すEFLAGSレジスタを示す。この特定のレジスタおよびこれらの特定のフラグは必須ではない。
【0090】
EFLAGSレジスタは32ビットのレジスタであり、一群のステータスフラグ、制御フラグ、および一群のシステムフラグを含む。ステータスフラグには、キャリーフラグ(CF、ビット0)、パリティフラグ(PF、ビット2)、補助キャリーフラグ(AF、ビット4)、ゼロフラグ(ZF、ビット6)、符号フラグ(SF、ビット7)、およびオーバフローフラグ(OF、ビット11)が含まれる。
【0091】
システムフラグには、トラップフラグ(TF、ビット8)、割り込みイネーブルフラグ(IF、ビット9)、I/O特権レベル(IOPL、ビット12−13)、ネストタスク(NT、ビット14)、再開フラグ(RF、ビット16)、仮想−8086モード(VM、ビット17)、位置合わせチェック(AC、ビット18)、仮想割り込みフラグ(VIF、ビット19)、仮想割り込み待ち状態(VIP、ビット20)、およびIDフラグ(ID、ビット21)が含まれる。制御フラグには、方向フラグ(DF、ビット10)が含まれる。EFLAGSのビット22−31は保留される。
【0092】
EFLAGSレジスタは、前の16ビットのFLAGSレジスタを引き継いだものである。さらに64ビットモードのプロセッサのEFLAGSレジスタは、RFLAGSレジスタに引き継がれ、64ビットに拡張されている。RFLAGSの下位32ビットはEFLAGSと同じである。FLAGS各々において、EFLAGSおよびRFLAGSレジスタ、キャリーフラグ(CF)がビット0である。EFLAGS/RFLAGSレジスタ、およびキャリーフラグのさらなる記述に関しては、インテル(登録商標)64およびIA−32アーキテクチャソフトウェア開発者用マニュアル、第1巻:基本アーキテクチャ、オーダ番号:253665−032US、2009年9月を参照されたい。
【0093】
1以上の実施形態には、機械(例えば実行ユニット)により実行されると本明細書のいずれかの箇所に記載されているビット範囲分離処理を実行させるビット範囲分離命令を格納した、有形の機械アクセス可能な、および/または、機械により可読である媒体を含む製品が含まれる。有形の媒体には、1以上の固体材料が含まれてよい。媒体は、例えば機械アクセス可能な形態で情報を提供(例えば格納)するメカニズムを含むことができる。例えば、媒体はオプションとして記録可能媒体(例えばフロッピー(登録商標)ディスク、光格納媒体、光ディスク、CD−ROM,磁気ディスク、光磁気ディスク、ROM、PROM、EPROM、EEPROM、RAM、SRAM、DRAM、フラッシュメモリ、およびこれらの組み合わせ)を含むことができる。
【0094】
適切な機械には、これらに限られないが、ほんの数例を挙げると、実行ユニット、汎用プロセッサ、専用プロセッサ(例えばグラフィックスプロセッサおよび暗号化プロセッサ)、暗号化アクセラレータ、ネットワーク通信プロセッサ、コンピュータシステム、ネットワークデバイス、モデム、PDA,携帯電話機、および、幅広い範囲の他の電子デバイスが1以上の実行ユニットとともに含まれる。
【0095】
また別の実施形態は、実行ユニットを有する、および/またはここで開示する方法を実行するコンピュータシステム、エンベデッドシステム、その他の電子デバイスに係る。
【0096】
図12は、適切なコンピュータシステム1201の第1の実施形態のブロック図である。
【0097】
コンピュータシステムはプロセッサ1200を含む。プロセッサは、少なくとも1つのビット範囲分離命令1202を実行する機能を有する少なくとも1つの実行ユニット1206を含む。
【0098】
プロセッサは、バス(例えばフロントサイドバス)または他のインターコネクト1280を介してチップセット1281に連結される。インターコネクトは、プロセッサと、システムの他のコンポーネントとの間におけるデータ信号のやりとりをチップセット経由で行うときに利用可能である。
【0099】
チップセットは、メモリコントローラハブ(MCH)1282として知られているシステムロジックチップを含む。MCHは、フロントサイドバスまたは他のインターコネクト1280に連結される。
【0100】
メモリ1286はMCHに連結される。様々な実施形態では、メモリは、RAMを含むことができる。DRAMは、一部の(全てではない)コンピュータシステムで利用されるRAMの一例である。図示されているように、メモリは、命令(例えば1以上のビット範囲分離命令)1287およびデータ1288を格納するために利用することができる。
【0101】
MCHにはコンポーネントインターコネクト1285も連結される。1以上の実施形態では、コンポーネントインターコネクトは、1以上のPCIe(peripheral component interconnect express)インタフェースを含むことができる。コンポーネントインターコネクトは、他のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。これらコンポーネントの一例は、グラフィックチップあるいは他のグラフィックデバイスであるが、これはオプションであり必須ではない。
【0102】
チップセットも、I/O(入力/出力)コントローラハブ(ICH)1284を含む。ICHは、ハブインタフェースバスその他のインターコネクト1283を介してMCHに連結される。1以上の実施形態では、バスその他のインターコネクト1283はDMI(Direct Media Interface)を含むことができる。
【0103】
ICHにはデータ格納装置1289が連結される。様々な実施形態では、データ格納装置には、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス等、またはこれらの組み合わせが含まれてよい。
【0104】
ICHにはさらに、第2のコンポーネントインターコネクト1290が連結される。1以上の実施形態では、第2のコンポーネントインターコネクトは、1以上のPCIeインタフェースを含むことができる。第2のコンポーネントインターコネクトは、様々な種類のコンポーネントを、システムの残りのコンポーネントに、チップセット経由で連結することができる。
【0105】
ICHにはまたさらに、シリアル拡張ポート1291が連結される。1以上の実施形態では、シリアル拡張ポートは、1以上のUSB(universal serial bus)ポートを含むことができる。シリアル拡張ポートは、様々な他の種類の入力/出力デバイスを、システムの残りのコンポーネントにチップセット経由で連結することができる。
【0106】
ICHにオプションとして連結可能なこの他のコンポーネントの幾らかの例には、これらに限定はされないが、オーディオコントローラ、無線トランシーバ、およびユーザ入力デバイス(例えばキーボード、マウス)が含まれる。
【0107】
ICHにはさらにネットワークコントローラが連結される。ネットワークコントローラは、システムをネットワークに連結することができる。
【0108】
1以上の実施形態では、コンピュータシステムは、ワシントン州Redmondのマイクロソフトコーポレーション社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行することができる。また他のオペレーティングシステム(例えばUNIX(登録商標)、Linux(登録商標)、またはエンベデッドシステム)の利用も可能である。
【0109】
これは適切なコンピュータシステムの一例にすぎない。例えば、1以上の他の実施形態では、プロセッサがマルチコアを有してもよい。別の1以上の実施形態では、MCH1282はプロセッサ1200に物理的にオンダイに集積されていてよく、プロセッサを直接メモリ1286に、集積されたMCHを介して連結することができる。また別の1以上の実施形態では、他のコンポーネントをプロセッサにオンダイに集積して、例えばシステムオンチップ(SoC)デザインを提供することができる。さらに別の1以上の実施形態では、コンピュータシステムが複数のプロセッサを有することができる。
【0110】
図13は、適切なコンピュータシステム1301の第2の実施形態のブロック図である。第2の実施形態は、前段で説明した第1のコンピュータシステム例にいくらか類似している。説明を簡潔にするべく、以下では類似点を全て繰り返すのではなく、差異を中心に説明する。
【0111】
上述した第1の実施形態と同様に、コンピュータシステムは、プロセッサ1300と、I/Oコントローラハブ(ICH)1384を有するチップセット1381とを含む。さらに第1の実施形態と同様に、コンピュータシステムは、チップセットに連結された第1のコンポーネントインターコネクト1385、ICHに連結された第2のコンポーネントインターコネクト1390、ICHに連結されたシリアル拡張ポート1391、ICHに連結されたネットワークコントローラ1392、およびICHに連結されたデータ格納装置1389を含む。
【0112】
この第2の実施形態では、プロセッサ1300はマルチコアプロセッサである。マルチコアプロセッサは、プロセッサコア1394−1から1394−Mを含み、ここでMは2以上の整数であってよい(例えば、2、4、7、あるいはこれより大きい整数)。各コアは、ここに開示する命令の少なくとも1つの実施形態を実行する機能を有する少なくとも1つの実行ユニットを含むことができる。図示されているように、コア−1はキャッシュ1395(例えばL1キャッシュ)を含む。他のコア各々も同様に専用コアを含む。プロセッサコアは、単一の集積回路(IC)チップに実装されてよい。
【0113】
プロセッサはさらに少なくとも1つの共有キャッシュ1396を含む。共有キャッシュは、プロセッサの1以上のコンポーネント(例えばコア)が利用するデータ(例えば命令)を格納することができる。例えば、共有キャッシュは、メモリ1386にローカルにデータをキャッシュすることにより、プロセッサのコンポーネントからのアクセスをより迅速に行うことができる。1以上の実施形態では、共有キャッシュには1以上の中間レベルのキャッシュ(レベル2(L2)、レベル3(L3)、レベル4(L4))、あるいはその他のレベルのキャッシュ、最終のレベルのキャッシュ(LLC)、および/または、これらの組み合わせが含まれてよい。
【0114】
プロセッサコアおよび共有キャッシュはそれぞれ、バスその他のインターコネクト1397と連結される。バスその他のインターコネクトは、コアおよび共有キャッシュを連結して通信を行う。
【0115】
プロセッサはさらにメモリコントローラハブ(MCH)1382を含む。この実施形態に示すように、MCHはプロセッサ1300に集積される。例えばMCHはプロセッサコアとオンダイであってよい。プロセッサはMCH経由でメモリ1386に連結される。1以上の実施形態では、メモリはDRAMを含んでよいが、これは必須ではない。
【0116】
チップセットは入力/出力(I/O)ハブ1393を含む。I/Oハブは、バス(例えばQPI(QuickPath Interconnect))その他のインターコネクト1380を介してプロセッサに連結される。I/Oハブ1393には、第1のコンポーネントインターコネクト1385が連結される。
【0117】
これは適切なシステムの特定の一例にすぎない。ラップトップ、デスクトップ、ハンドヘルドPC、PDA,工学ワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、DSP、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話機、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々なその他の電子デバイスに関する、当技術分野で知られている他のシステム設計および構成の利用もまた適切である。概して、ここに開示されるプロセッサおよび/または実行ユニットを組み込むことのできる幅広い範囲のシステムまたは電子デバイスが概して適切である。
【0118】
上述に記載においては、説明をし易くする目的から、多くの特定の詳細を述べて実施形態の完全な理解を促すよう努めている。しかしながら当業者であれば、1以上の他の実施形態が、これら特定の詳細なしに実行可能であることを容易に理解する。ここに記載した特定の実施形態は、本発明の実施形態の範囲を限定する意図からではなく、例示する意図を有する。本発明の範囲は、上述した特定の例示からではなく、以下に示す請求項によってのみ決定されるべきものである。また、公知の回路、構造、デバイス、および処理に関してはブロック図の形式で示し、詳細には示さないことにより、記載の理解を曖昧にしないよう心がけている箇所もある。また適宜、参照番号または参照番号の末尾を図面にわたり繰り返すことで、オプションとして同様の特性を有する、対応または類似するエレメントであることを示している場合もある。
【0119】
処理のなかには、ハードウェアコンポーネントによる実行が可能なものもあり、機械実行可能な命令で具現化されるものもあり、処理を行う命令でプログラミングされた回路またはハードウェアとする、または少なくともそうするものがある。回路には、汎用または専用プロセッサ、論理回路が含まれてよいが、これら以外にも様々なものが含まれうる。処理はさらにオプションとしてハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。実行ユニットおよび/またはプロセッサは、機械命令または機械命令から導出される1以上の制御信号に呼応して、命令が特定する結果オペランドを格納する専用のあるいは特別の回路を含むことができる。
【0120】
本明細書の随所で利用されている「一実施形態(one embodiment)(an embodiment)」あるいは「1以上の実施形態(one or more embodiments)」といった言い回しは、特定の特徴が実施形態の実行において含まれてよいことを示している。同様に、ある実施形態、図面、その説明では様々な特徴を一まとめに説明して、開示を簡素化することで様々な発明の側面の理解を促す工夫がなされている場合があることに留意されたい。しかしこの開示に関する手法が、実施形態が各請求項に明示されているもの以上の特徴を必要とすることを反映しているものとして捉えられるべきではない。そうではなくて、以下の請求項から分かるように、発明の各側面は、開示する1つ1つの実施形態の特徴全て未満のなかに存在する。従って詳細な記載に続く請求項は、この詳細な記載に、各請求項をそれ自体が発明の別個の実施形態であるように組み込まれるべきであることをここに明記しておく。
本実施形態の例を下記の各項目として示す。
[項目1]
方法であって、
データを有する第1のソースオペランドと、第1範囲のビットの1以上の端部に対応する位置を示すメモリ又はレジスタ内の1以上の値を明示的に指定する第2のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信する段階と、
第1の端部が前記メモリ又はレジスタ内の前記1以上の値により明示的に指定され、各ビットの値が前記第1のソースオペランドの対応する位置にあるビットの値と等しい前記第1範囲のビットと、前記第1のソースオペランドの対応する位置にあるビットの値に関わらず全てが同じ値を持つ第2範囲のビットとを含む結果を、前記命令に呼応して前記デスティネーションオペランドに格納する段階と、
前記結果の前記第1範囲のビットの位置に関わらず、前記第1のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第1範囲を移動させることなく、前記命令の実行を完了させる段階と、
を備える方法。
[項目2]
前記命令の実行を完了させる段階は、
前記第1範囲のビットが前記結果内の中間範囲にあるかないかに関わらずシフト処理を行うことなく前記命令の実行を完了させる段階を有し、
前記命令の実行を完了させる段階はメモリ内のテーブルルックアップを利用せずに行われる項目1に記載の方法。
[項目3]
前記命令を受信する段階は、
前記第1範囲のビットの第2の端部を暗示的に示す命令を受信する段階を有する項目1または2に記載の方法。
[項目4]
前記命令を受信する段階は、
前記第1範囲のビットの前記第2の端部を、最下位ビットおよび最上位ビットのいずれかとして暗示的に示す命令を受信する段階を有する項目3に記載の方法。
[項目5]
前記命令は、2つのソースオペランドのみの明示的な指定を許可するフォーマットを有する項目1から4のいずれか1項に記載の方法。
[項目6]
前記命令を受信する段階は、
前記第2のソースオペランドを明示的に指定する命令を受信する段階を有する項目1から5のいずれか1項に記載の方法。
[項目7]
前記第2のソースオペランドは、前記第1の端部に対応するビットの位置、および、前記第1の端部を端部として持つビット列のビット長のうちいずれかを表す値を持つ項目1から6のいずれか1項に記載の方法。
[項目8]
前記命令を受信する段階は、
前記第2のソースオペランドによって前記第1範囲のビットの2つの端部を明示的に指定する命令を受信する段階を有する項目1または2に記載の方法。
[項目9]
前記結果を格納する段階は、
全ての値がゼロ(0)である第2範囲のビットを格納する段階を有する項目1から8のいずれか1項に記載の方法。
[項目10]
前記第1のソースオペランドを前記デスティネーションオペランドにコピーする段階と、
マスクを生成する段階と、
前記マスクと前記デスティネーションオペランドとにAND演算を行う段階とを備え、
前記マスクは、(a)各々が前記第1範囲のビットにおける対応する位置にあるビットに対応しており、各々が1の値を持つ第1セットのビットと、(b)各々が前記第2範囲のビットにおける対応する位置にあるビットに対応しており、各々がゼロ(0)の値を持つ第2セットのビットとを含む項目9に記載の方法。
[項目11]
前記方法は、複数のコアを含む汎用マイクロプロセッサにより実行され、
前記複数のコアのうち少なくとも1つのコアは前記命令に呼応する回路を有する項目1から10のいずれか1項に記載の方法。
[項目12]
データを有する第1のソースオペランドと、第1範囲のビットの1以上の端部に対応する位置を示すメモリ又はレジスタ内の1以上の値を明示的に指定する第2のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信する復号器と、
前記命令の結果、前記命令が示すデスティネーションオペランドに結果を格納する実行ユニットと
を備え、
前記結果は、前記第1範囲のビットと第2範囲のビットとを含み、
前記第1範囲のビットの第1の端部は、前記メモリ又はレジスタ内の前記1以上の値により明示的に指定され、前記第1範囲の各ビットの値は、前記命令が示す前記第1のソースオペランドの対応する位置にあるビットの値と等しく、
前記第2範囲のビットは全て、前記第1のソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を持ち、
前記実行ユニットは、前記結果の前記第1範囲のビットの位置に関わらず、前記第1のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第1範囲を移動させることなく、前記命令の実行を完了させる装置。
[項目13]
前記実行ユニットは、前記第1範囲のビットが前記結果内の中間範囲にあるかないかに関わらずシフト処理を行うことなく前記命令の実行を完了させ、
前記実行ユニットは、メモリ内のテーブルルックアップを行わずに前記結果を格納する項目12に記載の装置。
[項目14]
前記命令は、前記第1範囲のビットの第2の端部を暗示的に示す項目12または13に記載の装置。
[項目15]
前記命令は、前記第2の端部を、最下位ビットおよび最上位ビットのいずれかとして暗示的に示す項目14に記載の装置。
[項目16]
前記命令は、2つのソースオペランドのみの明示的な指定を許可するフォーマットを有する項目12から15のいずれか1項に記載の装置。
[項目17]
前記実行ユニットは、前記命令により明示的に指定された前記第2のソースオペランドから前記第1範囲のビットの前記第1の端部を決定する項目12から16のいずれか1項に記載の装置。
[項目18]
前記第2のソースオペランドは、前記第1の端部に対応するビットの位置、および、前記第1の端部を端部として持つビット列のビット長のうちいずれかを表す値を持つ項目12から17のいずれか1項に記載の装置。
[項目19]
前記命令は、前記命令により明示的に指定された前記第2のソースオペランドによって前記第1範囲のビットの2つの端部を明示的に指定する項目12または13に記載の装置。
[項目20]
前記実行ユニットは、前記第2範囲のビット全ての値がゼロ(0)である結果を格納する項目12から19のいずれか1項に記載の装置。
[項目21]
前記実行ユニットは、
前記第1のソースオペランドと前記デスティネーションオペランドとに連結されて前記第1のソースオペランドを前記デスティネーションオペランドにコピーするコピーロジックと、
前記デスティネーションオペランドに連結されて前記デスティネーションオペランドの前記第2範囲のビットをゼロにするゼロロジックと
を備え、
前記ゼロロジックは、
マスクを生成するマスク生成ロジックと、
前記マスクと前記デスティネーションオペランドとに連結されて前記マスクと前記デスティネーションオペランドのデータとにAND演算を行うAND演算ロジックとを有し、
前記マスクは、(a)各々が前記第1範囲のビットにおける対応する位置にあるビットに対応しており、各々が1の値を持つ第1セットのビットと、(b)各々が前記第2範囲のビットにおける対応する位置にあるビットに対応しており、各々がゼロ(0)の値を持つ第2セットのビットとを含む項目20に記載の装置。
[項目22]
前記格納では、全てが1の値を持つ第2範囲のビットが格納される項目12から19のいずれか1項に記載の装置。
[項目23]
前記命令は機械命令を含み、
前記実行ユニットは、前記機械命令に呼応する回路を有する項目12から22のいずれか1項に記載の装置。
[項目24]
前記実行ユニットは、マルチコア汎用マイクロプロセッサのコアに含まれる項目12から23のいずれか1項に記載の装置。
[項目25]
装置であって、
命令の結果、結果をデスティネーションオペランドに格納する実行ユニットを備え、
前記命令は、レジスタの第1のソースオペランドと、レジスタおよびメモリのうちいずれかの第2のソースオペランドとを示しており、
前記第1のソースオペランドは16ビット、32ビット、および64ビットのうちいずれかであり、
前記第2のソースオペランドは32ビットおよび64ビットのうちいずれかであり、
前記結果は、第1範囲のビットと第2範囲のビットとを含み、
前記第1範囲のビットの第1の端部は、前記命令が暗示的に示す最下位ビットにあり、第2の端部は、前記第1のソースオペランドの最下位バイトで明示的に指定された値が示すビット位置より1ビット手前であり、
前記第1範囲の各ビットの値は、前記第2のソースオペランドの対応する位置にあるビットの値と等しく、
前記第2範囲のビットは、示された前記ビット位置から最上位ビットまでの範囲であり、前記第2範囲の全てのビットはゼロの値に等しく、
前記命令は、ソースオペランドとして、前記第1のソースオペランドと前記第2のソースオペランドを示す装置。
[項目26]
前記実行ユニットは前記命令の結果、シフト処理を行わない項目25に記載の装置。
[項目27]
インターコネクトと、
前記インターコネクトに連結され、データを有する第1のソースオペランドと、第1範囲のビットの1以上の端部に対応する位置を示すメモリ又はレジスタ内の1以上の値を明示的に指定する第2のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を受信するプロセッサと、
前記インターコネクトに連結されたDRAMとを備え、
前記プロセッサは、前記命令の結果、前記命令が示すデスティネーションオペランドに結果を格納し、
前記結果は、第1範囲のビットと第2範囲のビットとを含み、
前記第1範囲のビットの第1の端部は、前記メモリ又はレジスタ内の前記1以上の値により明示的に指定され、前記第1範囲の各ビットの値は、前記命令が示す前記第1のソースオペランドの対応する位置にあるビットの値と等しく、
前記第2範囲のビットは全て、前記第1のソースオペランドの対応する位置にあるビットの値に関わらず、同じ値を持ち、
前記プロセッサは、前記結果の前記第1範囲のビットの位置に関わらず、前記第1のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第1範囲を移動させることなく、前記命令の実行を完了させるシステム。
[項目28]
前記命令は、前記第1範囲のビットの第2の端部を暗示的に示す項目27に記載のシステム。
[項目29]
コンピュータに、データを有する第1のソースオペランドと、第1範囲のビットの1以上の端部に対応する位置を示すメモリ又はレジスタ内の1以上の値を明示的に指定する第2のソースオペランドと、デスティネーションオペランドとを含むオペランドを示す命令を処理させて、前記コンピュータに、
第1の端部が前記メモリ又はレジスタ内の前記1以上の値により明示的に指定され、各ビットの値が前記第1のソースオペランドの対応する位置にあるビットの値と等しい前記第1範囲のビットと、前記第1のソースオペランドの対応する位置にあるビットの値に関わらず全てが同じ値を持つ第2範囲のビットとを含む結果を、前記デスティネーションオペランドに格納する段階と、
前記結果の前記第1範囲のビットの位置に関わらず、前記第1のソースオペランドの対応する位置にある同じ値のビットに対して前記結果の前記第1範囲を移動させることなく、前記命令の実行を完了させる段階と
を実行させるためのプログラム。
[項目30]
前記第1範囲のビットの第2の端部を暗示的に示す段階を実行させる項目29に記載のプログラム。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13