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