IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-22
(45)【発行日】2024-01-30
(54)【発明の名称】論理比較動作を実行するための装置
(51)【国際特許分類】
   G06F 9/308 20180101AFI20240123BHJP
   G06F 9/318 20180101ALI20240123BHJP
   G06F 9/34 20180101ALI20240123BHJP
【FI】
G06F9/308 C
G06F9/318 A
G06F9/34 320A
【請求項の数】 6
(21)【出願番号】P 2022019581
(22)【出願日】2022-02-10
(62)【分割の表示】P 2020036849の分割
【原出願日】2007-09-21
(65)【公開番号】P2022062223
(43)【公開日】2022-04-19
【審査請求日】2022-02-10
(31)【優先権主張番号】11/525,706
(32)【優先日】2006-09-21
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】カプール,ラジヴ
(72)【発明者】
【氏名】ゾハール,ローネン
(72)【発明者】
【氏名】バクストン,マーク
(72)【発明者】
【氏名】ゴットリーブ,コビー
(72)【発明者】
【氏名】スペルバー,ゼーヴ
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開平10-116268(JP,A)
【文献】特開2001-229135(JP,A)
【文献】影山裕昭,x86アセンブラ講座 MMX命令を使ってみよう,Oh!X,日本,ソフトバンクパブリッシング株式会社,1999年05月14日,1999春号 ,252~258ページ
【文献】ジョン・L・へネシー,外1名,コンピュータの構成と設計 第2版 [上],日経BP社,2003年06月05日,pp.96-99,105-108,119,340,356-357
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/308
G06F 9/318
G06F 9/34
(57)【特許請求の範囲】
【請求項1】
第1のフィールドおよび第2のフィールドを有する命令フォーマットの命令コードを含むプログラムであって、
前記第1のフィールドはマルチビットの第1のオペランドを示し、前記第2のフィールドはマルチビットの第2のオペランドを示し、前記命令コードは、機械によって実行された場合、前記機械に対して、
前記第1のオペランドの1つ以上のビット位置の各々の値と、前記第2のオペランドの同じそれぞれのビット位置の値の補数とをビット毎に論理積演算した第1の中間結果が零であるとの判断に応答して、第1のステータスフラグを第1の値に修正させ、
前記第1の中間結果が零でないとの判断に応答して、前記第1のステータスフラグを第2の値に修正させ、
前記機械によって実行された場合、前記機械に対して、
命令コードに応答して、前記第1のステータスフラグに基づいて分岐動作を実行させる命令コードを更に含む、プログラム。
【請求項2】
前記第1のオペランドは、データエレメントとして少なくともA1およびA2を含み、各々Nビットの長さを有する第1の複数のデータエレメントを更に含み、
前記第2のオペランドは、少なくともB1およびB2を含み、各々Nビットの長さを有する第2の複数のデータエレメントを更に含む、請求項1に記載のプログラム。
【請求項3】
マルチビットの前記第1のオペランドおよびマルチビットの前記第2のオペランドの前記分岐動作および比較単一のオペレーションコードに融合されたものである、請求項1に記載のプログラム。
【請求項4】
前記第1のオペランドは、第1の複数のデータエレメントを更に含み、
前記第2のオペランドは、第2の複数のデータエレメントを更に含み、
前記第1および第2の複数のデータエレメントは、各々バイトの長さである、請求項1に記載のプログラム。
【請求項5】
前記第1のオペランドは、第1の複数のデータエレメントを更に含み、
前記第2のオペランドは、第2の複数のデータエレメントを更に含み、
前記第1および第2の複数のデータエレメントは、各々ワードの長さである、請求項1に記載のプログラム。
【請求項6】
請求項1乃至5のうちいずれか1項に記載のプログラムを記憶した機械読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は、一般にプロセッサの分野に関する。特に、開示は、データの複数のビットの複数の論理比較動作を実行するための単一の制御信号を使用することに関する。
【背景技術】
【0002】
典型的なコンピュータシステムにおいて、プロセッサは、1つの結果を出力する命令を使用して、多数のビット(例えば、64)によって表現される値を操作する。例えば、加算命令の実行は、第1の64ビット値および第2の64ビット値を合計し、第3の64ビット値として結果を格納する。マルチメディア・アプリケーションは、多数のデータの操作を必要とする。その例としては、2D/3D図形処理、画像処理、ビデオ圧縮/伸長、認識アルゴリズム、音声操作、あるいはマルチメディア・データ操作を有する統合化された電子会議のような、コンピュータにサポートされた協力のためのアプリケーション(CSC:computer supported cooperation)が挙げられる。データは、単一の大きな値(例えば、64ビットまたは128ビット)によって表されてもよく、あるいは、その代わりに少ないビット(例えば、8または16または32ビット)によって表されてもよい。例えば、グラフィックデータは8または16ビットによって表される。音声データは8または16ビットによって表されてもよい。また、整数データは8、16または32ビットで表されてもよい。そして、浮動小数点データは32または64ビットで表されてもよい。
【発明の概要】
【発明が解決しようとする課題】
【0003】
プロセッサは、マルチメディア・アプリケーションの効率を改善するために、(同じ特徴を有するほかのアプリケーションと同様に)パックド・データフォーマットを提供してもよい。パックド・データフォーマットとは、単一の値を表すために使用されるビットがいくつかの固定サイズのデータエレメントに分割されたフォーマットである。それぞれの要素は、別々の値を表す。例えば、128ビット・レジスタは4つの32ビット・エレメントに分けられてもよい。そして、それぞれは別々の32ビット値を表す。このようにして、これらのプロセッサは、マルチメディア・アプリケーションをより効率的に処理できる。
【0004】
本発明については、添付の図面を参照しながら説明するが、図面の内容に限定されない。
【課題を解決するための手段】
【0005】
本願明細書は、データの複数のビットの論理的比較動作を、単一の制御信号に応答して実行するプロセッサ命令を含む、方法、システムおよび回路の実施例を開示する。論理的比較動作に関係するデータは、パックドかアンパックド・データでもよい。少なくとも1つの実施例において、プロセッサは、メモリに接続される。メモリは、第1のデータおよび第2のデータを格納している。プロセッサは、命令の受信に応答して、第1のデータおよび第2のデータのデータエレメントの論理的比較動作を実行する。論理的比較動作は、1および2番目のデータのデータエレメントのビット毎の論理積、および、第2のデータのデータエレメントと第1のデータのデータエレメントの補数のビット毎の論理積を行ってもよい。プロセッサの少なくとも2つのステータスフラグは、論理的比較動作の結果に基づいて修正される。これらの2つのステータスフラグは、ゼロフラグおよびキャリーフラグを含んでもよい。これらのフラグは、アプリケーションプログラムに構造上見えてもよい。そして、より多数のフラグ値(例えば構造上可視拡張フラグ(EFLAGS)レジスタ)の一部でもよい。
【0006】
本発明のこれらの、および他の実施例は以下の説明に従って理解されるであろう。そして、以下の説明において、さまざまな変更態様と改変が、より広い本発明の精神と範囲を逸脱しない範囲でなされてもよいことは勿論である。明細書および図面は、したがって、これに限定されず、例示の意味で用いられる。そして、本発明は請求項のみによって定義される。
[定義]
【0007】
発明の実施例の説明を理解するための基礎として、用語を以下のように定義する。
ビット XからビットY:2進数のサブフィールドを定義する。例えば、バイト00111010(基数2)のビット6からビットゼロは、サブフィールド111010を表す。ここで、二進数の後についている「2」は、数字が2を基数とすることを意味する。したがって、1000は810と等しい。また、F16は、1510と等しい。
:レジスタを表す。レジスタは、データを格納し、かつ提供することができるいかなるデバイスでもよい。レジスタの更なる機能については後述する。レジスタが必ずしも同じダイ、あるいは、プロセッサと同じパッケージに含まれていなくてもよい。
SRCおよびDEST:記憶領域(例えば、メモリーアドレス、レジスタ、その他)を表す。
Source1―iおよびResult1―iおよびDestin:データを表す。
【図面の簡単な説明】
【0008】
図1a】本発明の実施例に係るコンピュータシステムを示す図である。
図1b】本発明の実施例に係るコンピュータシステムを示す図である。
図1c】本発明の実施例に係るコンピュータシステムを示す図である。
【0009】
図2a】本発明の実施例に係るプロセッサのレジスタファイルを示す図である。
図2b】本発明の実施例に係るプロセッサのレジスタファイルを示す図である。
【0010】
図3】データを操作するためにプロセッサによって実行されるプロセスの少なくとも1つの実施例に係るフローチャートを示す図である。
【0011】
図4】本発明の別の実施例に係るパックド・データ型を示す図である。
【0012】
図5】少なくとも本発明の一実施例におけるレジスタのパックド・バイトおよびレジスタのパックド・ワードデータ表現を示す図である。
【0013】
図6】本発明の少なくとも1つの実施例に係るレジスタのパックド・ダブルワードおよびレジスタのパックド・クワッドワードデータ表現を示す図である。
【0014】
図7a】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行する方法の実施形態に係るフローチャートである。
図7b】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行する方法の実施形態に係るフローチャートである。
図7c】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行する方法の実施形態に係るフローチャートである。
図7d】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行する方法の実施形態に係るフローチャートである。
【0015】
図8a】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行するための回路の別の実施例を示す図である。
図8b】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行するための回路の別の実施例を示す図である。
図8c】論理比較(ゼロおよびキャリーフラグ・オペレーションの設定)を実行するための回路の別の実施例を示す図である。
【0016】
図9】プロセッサ命令のためのオペレーションコード・フォーマットのブロック図を示す各種実施形態を示す図である。
【発明を実施するための形態】
【0017】
[概要]
本願は、パックドまたはアンパックド・データの論理的比較動作のためのプロセッサ命令を含む方法、装置およびシステムの実施例が記載されている。より詳細には、命令は、論理的にデータを比較し、そして、その比較に基づいて、ゼロおよびキャリーフラグをセットしてもよい。少なくとも1つの実施例において、2つの論理的比較動作は、以下の表1aおよび表1bに示すように、単一の命令を使用して実行される。比較動作は、以下の処理を含む。すなわち、デスティネーションとソースオペランドとのビット毎の論理積と、および、デスティネーションの補数とソースオペランドとのビット毎の論理積を含む。表1aは開示された論理的比較動作の一実施例の簡略化された代表例を示す。一方、表1bは開示された論理的比較命令の実施例のビットレベルの例を示す。例示として、値を付記している。表1aおよび1bにおいて例示される実施例は、パックド・データを例示しているが、ソースおよびデスティネーションオペランドのデータはいかなるデータ表現でもよい、すなわち、必ずしもパックド・データでなければならないわけではない。ソースおよび/またはデスティネーションオペランドのデータが128ビットの単一のエントリーである。このため「パックド」データとして捉えられない。このため、本願明細書では、「アンパックド」データと呼ぶこととする。このことは、必ずしも単にデータがコンポーネント表現に再分割されていなくてもよく、単一のデータ値として捉えてもよいことを意味する。説明を簡単にするため、表1aのデータは32ビット値として表される。当業者は表1aおよび表1bにおいて例示されているコンセプトは、いかなる長さのデータにも適用されることを理解するであろう。たとえば、もっと短いデータ長(例えば、4ビット、8ビット、および16ビットの長さ)および、もっと長いデータ長(例えば、64ビットおよび128ビットの長さ)である。
【表1】
【表2】
【実施例
【0018】
少なくとも1つの実施例において、ソースおよびデスティネーションオペランドのデータ値は、パックド・データを表してもよい。かかる実施例において、ソースおよびデスティネーションオペランドのパックド・コンポーネントの各々は、任意のデータの型であってもよい。
【0019】
表2aおよび表2bにおいて、コンポーネントA1からA4およびB1からB4は、各々32ビット単精度浮動小数点数の2進数表現を表す。しかしながら、かかる具体例は、限定するためのものではない。当業者はコンポーネントの各々がいかなるデータを表してもよいと認識する。すなわち、整数、浮動小数点データフォーマット、および文字列形式または他のタイプのいかなるデータフォーマットも含まれる。
【表3】
【表4】
【0020】
例えば、表2aおよび表2bに示しているパックドの例のように、各パックド・エレメントの特定のビットだけが比較動作の間、操作される別の実施例が使用されてもよい。例えば、少なくとも、このような別の実施例は、図7c、図7d、図8b、および図8cに付随して後述する。
【0021】
表1aおよび表2aの「Int.Result1」および「Int.Result2」および、表1bおよび表2bの3行および4行に、中間の値が示されているのが、当業者には認識されるであろう。これらは、理解を容易にするためのものである。表1aから表2bにおける記載は、中間の値がプロセッサ内に格納されることを意味するためのものではない。もっとも、少なくとも1つの実施例においては、そのように格納されてもよい。その他、少なくとも1つの他の実施例においては、かかる中間の値は、記憶領域に格納されず、回路を通じて利用される。
【0022】
表1a、表1b、表2aおよび表2bは、論理的比較を実行する(LCSZC: logical compare, set zero and carry flags)命令の実施例を示している。LCSZC命令は、128ビットのソースおよびデスティネーションオペランドの各々のビット毎の論理積演算を実行し、128のビットのソースオペランドの各々とデスティネーションオペランドの値の補数の128ビットのビット毎の論理積演算を実行し、かつ論理積演算の結果に従ってゼロおよびキャリーフラグを設定する。
【0023】
ゼロおよびキャリーフラグの設定は、論理比較に基づいて分岐動作をサポートする。少なくとも1つの実施例において、LCSZC命令の後に、フラグの一方または両方の値に基づいて、プロセッサによって実行される所望の分枝操作を示す別の分岐命令が続いてもよい(例えば、表4の擬似コードを参照)。当業者は、ステータスフラグの設定が、比較結果を利用した分枝操作を実行する唯一のハードウェアメカニズムではないことを認識するであろう。比較の結果に基づいて分岐をサポートするために他のメカニズムが実装されてもよい。以下に記載されている具体的実施例は、ゼロおよびキャリーフラグを論理比較の結果として設定しているが、分岐をサポートするかかるフラグの設定が、すべての実施例において必要とされるというわけではない。したがって、本明細書で用いられるLCSZCという用語は制限するものとして理解してはならない。ゼロおよびキャリーフラグの設定がすべての実施例において必要であるというわけではない。
【0024】
1つの別の実施例において、例えば、分岐動作は、1つのLCSZC命令の変形命令の直接的な結果として実行されてもよい。すなわち、融合されたテストアンドブランチ命令のように、比較および分岐を融合させた命令がこれに該当する。融合されたテストアンドブランチ命令の少なくとも1つの実施例において、実行される論理比較の結果として、ステータスフラグは設定されない。
【0025】
別の実施例では、データエレメントおよび中間結果のビットの数を変化させてもよい。また、別の実施例では、それぞれのソースおよびデスティネーションの値の一部のビットを比較してもよい。加えて、別の実施例は、使用するデータエレメントの数および生成される中間結果の数を変化させてもよい。例えば、別の実施例は、以下を含む(なおこれらに限定されるわけではない):符号無しソースおよび符号付きデスティネーションのためのLCSZC命令;符号付きソースおよび符号無しデスティネーションのためのLCSZC命令;符号無しソースおよび符号無しデスティネーションのためのLCSZC命令;および、符号付きソースおよび符号付きデスティネーションのためのLCSZC命令。実施例の各々において、前記ソースおよびデスティネーションは、8ビット、16ビット、32ビット、または64ビット・コンポーネントのパックド・データを各々含んでもよい。あるいは、前記ソースおよびデスティネーションデータは、パックドでなく、その代わりに128ビット・データエレメントである。ソースおよびデスティネーションのパックドの形式は対称である必要はない。そして、両者がパックドである場合、ソースおよびデスティネーションのデータのサイズが必ずしも同じである必要はない。
[コンピュータシステム]
【0026】
図1aは、本発明の一実施例におけるコンピュータシステム100を示している。コンピュータシステム100は、情報を通信するための相互接続101を含む。相互接続101は、分岐のバス、1つ以上のポイントツーポイント相互接続、またはこれら2つのいかなる組合せ、あるいは、その他の通信ハードウェアおよび/またはソフトウェアを含んでもよい。
【0027】
図1aは、相互接続101に接続する処理情報のためのプロセッサ109を示している。プロセッサ109は任意型のアーキテクチャのCPUを表す。たとえば、CISCまたはRISCタイプ・アーキテクチャを含む。
【0028】
コンピュータシステム100は、ランダムアクセスメモリ(RAM)または他の動的記憶装置デバイス(メインメモリ104)を更に含む。これらは相互接続101に接続され、プロセッサ109によって実行される命令および情報を格納する。メインメモリ104は、プロセッサ109による命令の実行中に、一時変数または他の中間的情報を格納するために用いられてもよい。
【0029】
コンピュータシステム100はさらに、読取り専用メモリ(ROM)106、および/または他の静的記憶装置デバイスを有し、これらは、プロセッサ109のための静的情報および命令を格納するために相互接続101に接続される。データ記憶デバイス107は、情報および命令を格納するため、相互接続101に接続される。
【0030】
図1aにおいて、プロセッサ109は、実行ユニット130、レジスタファイル150、キャッシュ160、デコーダ165、および、インターナルバス170を更に含む。もちろん、プロセッサ109は、本発明を理解することに必要でない追加回路を含む。
【0031】
デコーダ165はプロセッサ109によって受信される命令の復号化のためのものである。そして、実行ユニット130はプロセッサ109によって受信される命令を実行するためのものである。通常はメインプロセッサにおいて行う命令を認識することに加えて、デコーダ165および実行ユニット130は、本願明細書において記載されている(LCSZC:logical-compare-and-set-zero-and-carry-flags)オペレーションを実行するための命令を認識する。デコーダ165および実行ユニット130は、パックドおよびアンパックド・データの両者のLCSZCオペレーションを実行するための命令を認識する。
【0032】
実行ユニット130は、インターナルバス170によってレジスタファイル150に接続される。また、インターナルバス170は、必ずしも分岐のバスである必要があるというわけではない。別の実施例において、ポイントツーポイント相互接続または他のタイプの通信経路でもよい。
【0033】
レジスタファイル150は、データを含む情報を格納するプロセッサ109のための記憶領域である。パックドまたはアンパックド・データのLCSZCオペレーションを実行する本発明の一態様が、記載されている。本発明の態様によれば、データを格納するために使用する記憶領域は、限定されているわけではない。なお、レジスタファイル150の実施例は、図2a~図2bに関連して後述する。
【0034】
実行ユニット130は、キャッシュ160およびデコーダ165に接続される。キャッシュ160は、たとえばメインメモリ104からのデータおよび/または制御信号をキャッシュするのに用いられる。デコーダ165は、プロセッサ109によって受信されるインストラクションの復号化に用いられる。インストラクションの復号化は、制御信号および/またはマイクロコード・エントリポイントに変換する。これらの制御信号またはマイクロコード・エントリポイントは、デコーダ165から実行ユニット130に転送されてもよい。
【0035】
これらの制御信号および/またはマイクロコード・エントリポイントに応答して、実行ユニット130は、適切なオペレーションを実行する。例えば、LCSZC命令が受信された場合、デコーダ165は実行ユニット130に必要な比較ロジックを実行させる。少なくとも幾つかの実施例(例えば、融合した「テストアンドブランチ」オペレーションをインプリメントしていない実施例)のために、実行ユニット130は、ゼロおよびキャリーフラグをセットしてもよい(例えば論理比較回路145を参照)。かかる実施例において、プロセッサ109の分岐ユニット(図示せず)は、目的コード位置を示す次の分岐命令の実行中に、フラグを利用してもよい。
【0036】
あるいは、実行ユニット130自体は、論理比較に基づいて分岐を遂行する分岐回路(図示せず)を含んでもよい。かかる実施例において、LCSZC命令で提供される「分岐サポート」は、(コントロールフラグをセットするのではなく)指定された目的コード位置に対するコントロールジャンプである。少なくとも1つの実施例において、ジャンプまたは「分岐」を実行する分岐回路は、論理比較回路145の部分であってもよい。
【0037】
デコーダ165は、各種の異なるメカニズムを使用してもよい。例えば、ルック・アップ・テーブル、ハードウェア・インプリメンテーション、PLA、その他である。デコーダ165および実行ユニット130によるさまざまな命令の実行が、一連のif/then構文で表されてもよい。このif/then構文の命令の実行は、これらの逐次処理を必要としないものと理解される。むしろ、このif/then処理を論理的に実行するいかなる過程も、本発明の範囲内であると認識される。
【0038】
加えて、図1aは、データ記憶デバイス107(例えば、磁気ディスク、光ディスクおよび/または他の機械読み取り可読な媒体)がコンピュータシステム100に接続されてもよいことを示す。加えて、データ記憶デバイス107は、プロセッサ109による実行のためのコード195を含むことを示す。コード195は、LCSZC命令142の1つ以上の実施例を含んでいる。かつ、プロセッサ109に種々の目的(例えば、動画ビデオ圧縮/伸長、画像フィルタリング、音声信号圧縮、フィルタリングまたは合成、変調/復調、その他)のためのLCSZC命令142を有するビット・テストを実行させるために記述される。
【0039】
コンピュータシステム100は、コンピュータユーザに情報を表示するための表示装置121に、相互接続101を経由して接続されてもよい。表示装置121は、フレームバッファ、専用グラフィクス・レンダリングデバイス、液晶ディスプレイ(LCD)および/またはフラットパネルディスプレイを有してもよい。
【0040】
入力装置122は、英数字、かつ他のキーを含み、プロセッサ109に情報およびコマンド選択を通信するため、相互接続101に接続されてもよい。他の種類のユーザ入力デバイスとしては、プロセッサ109に対する通信方向情報およびコマンド選択のための、およびディスプレイ装置121のカーソル移動制御のためのカーソル制御123(例えばマウス、トラックボール、ペン、タッチスクリーンまたはカーソル方向キー)がある。この入力装置は通常は2本の軸、第一軸(例えば、x)および第二軸(例えば、y)に対する2つの自由度を有する。そして、これによって、デバイスが平面の位置を特定することができる。しかしながら、本発明は、2つの自由度だけを有する入力装置に限られてはならない。
【0041】
相互接続101に接続できる他のデバイスとしては、命令、データまたは他の情報を媒体(例えば紙、フィルムまたは同様のタイプの媒体)に印刷するために用いられるハードコピーデバイス124がある。加えて、コンピュータシステム100には、録音再生デバイス125(例えば情報記録のためのマイクロホンに接続したオーディオデジタイザ)を接続してもよい。更に、デバイス125は、デジタル化された音を再生するための、スピーカに接続されたデジタル/アナログ変換(D/A)コンバータを含んでもよい。
【0042】
コンピュータシステム100は、コンピュータ・ネットワーク(例えば、LAN)の端末でもよい。コンピュータシステム100は、コンピュータ・ネットワークのコンピュータ・サブシステムとなる。コンピュータシステム100は、任意に、ビデオデジタル化デバイス126および/または通信装置190(例えば、外部デバイスまたはネットワークとの通信を提供するシリアル通信チップ、無線インタフェース、イーサネット(登録商標)チップまたはモデム)を含む。ビデオデジタル化デバイス126は、コンピュータ・ネットワークの他に発信できるビデオ画像を取り込むために用いてもよい。
【0043】
少なくとも1つの実施例において、プロセッサ109は、既存のプロセッサと互換性を持つ命令セットをサポートする。既存のプロセッサとしては、例えば、サンタクララ(カリフォルニア)のインテル社によって製造されるIntel(R)Pentium(登録商標)Processor、Intel(R)Pentium(登録商標)Pro Processor、Intel(R)Pentium(登録商標)II Processor、Intel(R)Pentium(登録商標)III Processor、Intel(R)Pentium(登録商標)4 Processor、Intel(R)Itanium(R)Processor、Intel(R)Itanium(R)2 ProcessorまたはIntel(R)Core(TM)Duo Processorがある。その結果、プロセッサ109は、本発明のオペレーションに加えて、既存のプロセッサ・オペレーションをサポートしてもよい。プロセッサ109は、1つ以上のプロセス技術の製造に適していてもよい。かつ、機械読み取り可読な媒体において充分詳細に記述され、容易にかつ適切に製造される。本発明がx86ベースの命令セットに組み込まれるとして以下に記載するが、別の実施例は本発明を他の命令セットに組み込むことができる。例えば、本発明は、x86命令セットベース以外の命令セットを使用した64ビット・プロセッサに組み込むことができる。
【0044】
図1bは、本発明の原理を実装するデータ処理システム102の別の実施例を例示している。データ処理システム102の一実施例は、Intel XScale(TM)技術を有する応用プロセッサである。本願明細書において記載されている実施例は、本発明の範囲から逸脱しない限り、当業者によって、他の処理システムにおいても利用されるものと解される。
【0045】
コンピュータシステム102には、LCSZCオペレーションを実行することができる処理コア110を含んでいる。ある1つの実施例において、処理コア110は、任意のアーキテクチャの処理ユニットを表す。たとえば、CISC、RISCまたはVLIWタイプ・アーキテクチャが挙げられるが、これに限定されるものではない。処理コア110は、1つ以上のプロセス技術の製造に適していてもよい。加えて、機械読み取り可読な媒体によって、充分詳細に記述され、容易にかつ適切に製造できる。
【0046】
処理コア110には、実行ユニット130、一組のレジスタファイル150およびデコーダ165が含まれる。処理コア110は、本発明の理解に必要でない付加的な回路(図示せず)を含む。
【0047】
実行ユニット130が、処理コア110によって受信される命令を実行するために用いられる。典型的なプロセッサ命令を認識することに加えて、実行ユニット130は、パックド、およびアンパックド・データフォーマットのLCSZCオペレーションを実行するための命令を認識する。デコーダ165および実行ユニット130によって認識される命令セットは、LCSZCオペレーションのための1つ以上の命令を含んでもよい。加えて、他のパックド命令を含んでもよい。
【0048】
実行ユニット130は、内部バスによって、レジスタファイル150に接続される(これは、上述したように、分岐のバス、ポイントツーポイント相互接続、その他を含む任意の通信経路でもよい)。レジスタファイル150は、処理コア110の情報を格納するためのデータを含む記憶領域を表す。前述のように、データを格納するために使用する記憶領域が限定的でないものと理解されたい。実行ユニット130は、デコーダ165に接続される。デコーダ165は、処理コア110によって受信される命令を制御信号および/またはマイクロコード・エントリポイントに復号化するために用いられる。これらの制御信号および/またはマイクロコード・エントリポイントに応答して、これらの制御信号またはマイクロコード・エントリポイントは、実行ユニット130に転送されてもよい。制御信号および/またはマイクロコード・エントリポイントに応答して、実行ユニット130は、適切なオペレーションを実行する。少なくとも1つの実施例において、例えば、実行ユニット130は、本願明細書において記載されている論理比較を実行してもよい。加えて、本願明細書において述べられるステータスフラグをセットし、および/または指定されたコード位置に分岐してもよい。
【0049】
処理コア110は、さまざまな他のシステム機器によって通信するためにバス214に接続されている。例えば、同期型ランダムアクセスメモリ(SDRAM)制御手段271、スタティックランダムアクセスメモリ(SRAM)制御手段272、バーストフラッシュ・メモリインタフェース273、PCMCIA/コンパクト・フラッシュ(CF)カード制御手段274、液晶ディスプレイ(LCD)制御手段275、ダイレクトメモリアクセス(DMA)コントローラ276および代替バスマスタ・インタフェース277を含むが、これに限定されるものではない。
【0050】
少なくとも1つの実施例において、データ処理システム102は、I/Oバス295を介してさまざまな入出力デバイスと通信するためのI/Oブリッジ290を有する。例えば、このような入出力デバイスとしては、汎用非同期受信器/送信器(UART)291、ユニバーサルシリアルバス(USB)292、ブルートゥース(登録商標)無線UART293およびI/O拡張インタフェース294を含むが、これに限定されるものではない。上記の他のバスと同様に、I/Oバス295は、分岐のバス、ポイントツーポイント相互接続等の、任意の通信経路でもよい。
【0051】
少なくとも1つのデータ処理システム102の実施例は、携帯ネットワークおよび/またはワイヤレス通信、パックドおよびアンパックド・データのLCSZCオペレーションを実行することができる処理コア110を提供する。処理コア110は、オーディオ、ビデオ、および通信アルゴリズムにより動作してもよい。すなわち、個別の変換システム、フィルタまたは畳み込み積分、圧縮/伸長技術、たとえば色空間変換、動き予測ビデオデコードまたは動き補償ビデオエンコード、変調/復調(MODEM)機能(例えばパルス符号変調(PCM))である。
【0052】
図1cは、パックド、およびアンパックド・データのLCSZCオペレーションを実行するデータ処理システム103の別の実施例を例示している。1つの別の実施例において、データ処理システム103は、メインプロセッサ224を含むチップパッケージ310および1つ以上のコプロセッサ226を有する。追加コプロセッサ226は、任意であり、図1cにおいて破線で示されている。コプロセッサ226の1つ以上は、例えば、SIMD命令を実行することができるグラフィクス・コプロセッサでもよい。
【0053】
図1cにおいて、データプロセッサ・システム103は、キャッシュメモリ278および入出力システム265を含んでもよい(両方ともチップパッケージ310に接続される)。入出力システム295は、無線インタフェース296に任意に接続されてもよい。
【0054】
コプロセッサ226は、一般の計算の処理を実行することができ、SIMDオペレーションを実行することも可能である。少なくとも1つの実施例において、コプロセッサ226は、パックド、およびアンパックド・データのLCSZCオペレーションを実行することができる。
【0055】
少なくとも1つの実施例において、コプロセッサ226は、実行ユニット130およびレジスタファイル209を有する。少なくとも1つの実施例において、メインプロセッサ224は、実行ユニット130により実行されるためのLCSZC命令を含む命令セットの命令を認識しデコードするデコーダ165を有する。別の実施例において、コプロセッサ226は、LCSZC命令を含む命令セットの命令をデコードするデコーダ166の少なくとも一部分を有する。データ処理システム103も、本発明の理解に必要でない付加的な回路(図示せず)を含む。
【0056】
処理において、メインプロセッサ224は、キャッシュメモリ278および入出力システム295でのインタラクションを含む一般のタイプのデータ処理オペレーションを制御するデータ処理命令のストリームを実行する。コプロセッサ命令は、データ処理命令のストリームの内に埋め込まれる。メインプロセッサ224のデコーダ165は、これらのコプロセッサ命令を付加されたコプロセッサ226によって実行されなければならないタイプのものであると認識する。したがって、メインプロセッサ224は、コプロセッサの命令(またはコプロセッサ命令を表している制御信号)を相互接続236に送出する。コプロセッサは相互接続236から命令を取得する。図1cに図示される1つのコプロセッサの実施例において、コプロセッサ226は、それを目的とする受信されたいかなるコプロセッサ命令をも受け取り、かつ実行する。コプロセッサ相互接続は、分岐のバス、ポイントツーポイント相互接続等の、任意の通信経路でもよい。
【0057】
データは、コプロセッサ命令による処理のため、無線インタフェース296を介して受信されてもよい。1つの実施例において、音声通信はデジタル信号の形で受信されてもよい。このデジタル信号は、音声通信のデジタルオーディオ・サンプル値を再生するためにコプロセッサ命令によって処理されてもよい。他の実施例において、圧縮オーディオまたはビデオはデジタルビットストリームの形で受信されてもよい。それはデジタルオーディオ・サンプルおよび/または動画ビデオ・フレームを再生させるためにコプロセッサ命令によって処理されてもよい。
【0058】
少なくとも1つの別の実施例において、メインプロセッサ224およびコプロセッサ226は、実行ユニット130、レジスタファイル209およびデコーダ165を有する単一の処理コアに集積化されてもよい。実行ユニット130は、LCSZC命令を含む命令セットの命令を認識し実行する。
【0059】
図2aは、本発明の一実施例におけるプロセッサのレジスタファイルを例示している。レジスタファイル150は、情報を格納するために用いられてもよい。情報としては、制御手段/ステータス情報、整数データ、浮動小数点データおよびパックド・データが含まれる。情報およびデータの前述の例示のリストが全てではないことは、当業者にとって明らかである。
【0060】
図2aの図示した実施例において、レジスタファイル150は、整数レジスタ201、レジスタ209、ステータスレジスタ208およびインストラクションポインタ・レジスタ211を含む。ステータスレジスタ208は、プロセッサ109のステータスを示し、かつさまざまなステータスレジスタ(例えばゼロフラグおよびキャリーフラグ)を含んでもよい。インストラクションポインタ・レジスタ211は、実行する次の命令のアドレスを格納する。整数レジスタ201、レジスタ209、ステータスレジスタ208およびインストラクションポインタ・レジスタ211の全ては、インターナルバス170に接続される。追加レジスタは、インターナルバス170に接続されてもよい。インターナルバス170は、分岐のバスでもよいが、必ずしもそうである必要はない。インターナルバス170は、ポイントツーポイント相互接続を含む、任意の通信経路でもよい。
【0061】
一実施形態において、レジスタ209は、パックド・データおよび浮動小数点データのために用いられてもよい。この実施例において、プロセッサ109は、いつでも、レジスタ209をスタック参照される浮動小数点レジスタとして、またはスタック参照されない、パックド・データ・レジスタとして取り扱ってもよい。本実施例において、プロセッサ109が、レジスタ209をスタック参照される浮動小数点レジスタとして、またはスタック参照されない、パックド・データ・レジスタとして取り扱い、処理を行うか切り替えるメカニズムを有している。別の実施例において、プロセッサ109は、レジスタ209を、同時にスタック参照されない浮動小数点およびパックド・データ・レジスタとして、用いてもよい。もう1つの実施例では、これらの同じレジスタが、整数データを格納するために用いられてもよい。
【0062】
もちろん、別の実施例では、より多くのレジスタあるいは、より少ないレジスタを実装してもよい。例えば、別の実施例は、浮動小数点データを格納するための別個の浮動小数点レジスタのセットを有していてもよい。別の実施例では、それぞれ、制御手段/ステータス情報を格納する第1のセットのレジスタと、整数、浮動小数点およびパックド・データを格納する第2のセットレジスタを含んでいる。より明確に説明すると、実施例のレジスタは、特定の回路のタイプで、その意味が制限されてはならない。むしろ、実施例のレジスタはデータを格納し、かつ提供するだけである、そして、実行する機能は本願明細書において記載される。
【0063】
レジスタのさまざまなセット(例えば、整数レジスタ201、レジスタ209)は、異なる数および/または異なるサイズのレジスタを含んで実装されてもよい。例えば、実施例において、整数レジスタ201は、32ビットを格納するために実装される。レジスタ209は、80ビットを格納するために実装される(全80ビットが、格納浮動小数点データのために使われ、パックド・データのためには、64ビットが用いられる)。加えて、レジスタ209は、8つのレジスタ(R212aからR212h、R212b、R212cおよびR212dは、レジスタ209の個々のレジスタの例である)を含んでもよい。レジスタ209の32ビットのレジスタは、整数レジスタ201の整数レジスタに移動させてもよい。同様に、整数レジスタの値は、レジスタ209の32ビットのレジスタに移動させてもよい。他の実施形態では、整数レジスタ201は各々64ビットを含む。そして、64ビットのデータは整数レジスタ201とレジスタ209の間で移動してもよい。他の代替実施例では、レジスタ209は、各々、64のビットを有し、レジスタ209は16個のレジスタを含む。さらにもう1つの別の実施例において、レジスタ209は32個のレジスタを含む。
【0064】
図2bは、1つの本発明の別の実施例におけるプロセッサのレジスタファイルを例示している。レジスタファイル150が情報を格納するために用いられてもよい。情報としては、制御手段/ステータス情報、整数データ、浮動小数点データおよびパックド・データを含む。図2bに示す実施例では、レジスタファイル150は、整数レジスタ201、レジスタ209、ステータスレジスタ208、拡張レジスタ210およびインストラクションポインタ・レジスタ211を含む。ステータスレジスタ208、インストラクションポインタ・レジスタ211、整数レジスタ201、レジスタ209は、全てインターナルバス170に接続される。加えて、拡張レジスタ210は、インターナルバス170にも接続される。インターナルバス170は、分岐のバスでもよいが、必ずしもそうである必要はない。インターナルバス170は、ポイントツーポイント相互接続を含む、任意の通信経路でもよい。
【0065】
少なくとも1つの実施例において、拡張レジスタ210が、パックド整数データおよびパックド浮動小数点データのために用いられる。別の実施例において、拡張レジスタ210が、スカラー・データ、パックド・ブールデータ、パックド整数データおよび/またはパックド浮動小数点データのために用いられてもよい。もちろん、本発明の広い範囲を逸脱しない限り、別の実施例は、より多くのレジスタ、またはより少ないレジスタを有してもよく、各セットにより多くのレジスタ、またはより少ないレジスタを有してもよく、各レジスタに、より多くのまたはより少ない格納ビットを有してもよい。
【0066】
少なくとも1つの実施例において、整数レジスタ201が32ビットを格納するために実装され、レジスタ209は80ビットを格納するため実装される(全80ビットが浮動小数点データを格納するためにつかわれ、64ビットがパックド・データのために用いられる)。そして、拡張レジスタ210は128ビットを格納するために実装される。加えて、拡張レジスタ210は、8つのレジスタを含んでもよい(XR213aからXR213h、XR213a、XR213bおよびXR213cは、レジスタ210の個々のレジスタの例である)。他の実施例において、整数レジスタ201は各々64ビットを含む。拡張レジスタ210は各々64ビットを含む。拡張レジスタ210は16個のレジスタを有する。実施例において、拡張レジスタ210の2つのレジスタは、一対として実装されてもよい。さらにもう1つの別の実施例において、拡張レジスタ210は、32個のレジスタを含んでもよい。
【0067】
図3は、本発明の一実施例におけるデータを操作するための処理300のフローチャートを例示している。図3は、例えば、プロセッサ109(例えば図1aを参照)の処理を例示している。すなわち、パックド・データのLCSZCオペレーションを実行して、アンパックド・データのLCSZCオペレーションを実行すると共に、または若干の他のオペレーションを実行する。処理300および本願明細書において開示された他のプロセスは、汎用マシンによって、または、特殊目的のマシンまたは、両方の組合せによって専用のハードウェアまたはソフトウェアまたは実行可能なファームウェア・オペレーションコードを有する処理ブロックによって実行される。
【0068】
図3において、方法のための処理は、「スタート」から始まり、処理ブロック301へ進むことを示している。処理ブロック301で、デコーダ165(例えば図1aを参照)は、キャッシュ160(例えば図1aを参照)または相互接続101(例えば図1aを参照)から制御信号を受信する。ブロック301で受信される制御信号は、少なくとも1つの実施例において、一般にソフトウェア「命令」と呼ばれる一種の制御信号でもよい。デコーダ165は、実行されるオペレーションを決定するために、制御信号を復号化する。処理は、処理ブロック301から処理ブロック302へ進む。
【0069】
処理ブロック302で、デコーダ165は、レジスタファイル150(図1a)またはメモリ(例えば図1aのメインメモリ104またはキャッシュメモリ160を参照)の位置にアクセスする。レジスタファイル150のレジスタまたはメモリのメモリーロケーションは、制御信号で指定されているレジスタアドレスに応じてアクセスされる。例えば、オペレーションのための制御信号は、SRC1、SRC2およびDESTレジスタアドレスを含んでもよい。SRC1は、第1のソースのレジスタのアドレスである。SRC2は、第2のソースのレジスタのアドレスである。場合によっては、すべてのオペレーションが2つのソース・アドレスを必要とするというわけではないため、SRC2アドレスは任意である。SRC2アドレスがオペレーションのために必要とされない場合、SRC1アドレスだけが使われる。DESTは、結果データが格納される宛先レジスタのアドレスである。少なくとも1つの実施例において、SRC1またはSRC2は、デコーダ165によって認識される制御信号のうちの少なくとも1つのDESTとして使われてもよい。
【0070】
対応するレジスタに格納されるデータはそれぞれSource1、Source2およびResultと呼ばれる。実施例において、これらのデータの各々は、64ビット長である。別の実施例において、これらのデータの1つ以上は、他の長さ(例えば長さ128ビット)でもよい。
【0071】
他の実施例において、SRC1、SRC2およびDESTは、プロセッサ109(図1a)または処理コア110(図1b)のアドレス可能メモリ空間のメモリーロケーションを定めてもよい。例えば、SRC1はメインメモリ104のメモリーロケーションを識別してもよい。その一方で、SRC2は整数レジスタ201の第1のレジスタを識別する。そして、DESTはレジスタ209の第2のレジスタを識別する。説明を簡単にするため本願明細書において、本発明は、レジスタファイル150にアクセスするとして説明する。しかしながら、当業者は、これらの記載されているアクセスがその代わりにメモリになされてもよいと認識するはずである。
【0072】
処理は、ブロック302から、処理ブロック303へ進む。処理ブロック303で、実行ユニット130(例えば図1aを参照)は、アクセスされたデータのオペレーションを実行する。
【0073】
処理は、処理ブロック303から処理ブロック304へ進む。処理ブロック304で、結果は、制御信号の条件に従って、レジスタファイル150またはメモリに格納される。処理は、「停止」のところで終わる。
[データ記憶フォーマット]
【0074】
図4は、本発明の一実施例におけるパックド・データ型を示している。4つのパックドおよび1つのアンパックド・データフォーマットが例示されている。すなわち、パックド・バイト421、パックド・ハーフ422、パックド・シングル423、パックド・ダブル424およびアンパックド・ダブル・クワッドワード412を含む。
【0075】
パックド・バイト形式421は、少なくとも1つの実施例において、16のデータエレメント(B0-B15)を含み長さは128ビットである。各データエレメント(B0-B15)は、長さ1バイト(例えば、8ビット)である。
【0076】
パックド・ハーフ・フォーマット422は、少なくとも1つの実施例において、8つのデータエレメント(HaIf0からHalf7)を含み長さは128ビットである。データエレメント(HaIf0からHalf7)の各々は、16ビットの情報を保持してもよい。これらの16ビット・データエレメントの各々は、「ハーフワード」または「ショートワード」または単に「語」と呼ぶことがある。
【0077】
パックド・シングル・フォーマット423は、少なくとも1つの実施例において、長さ128ビットでもよい。かつ4つの423のデータエレメント(Single0~Single3)を保持してもよい。データエレメント(Single0~Single3)の各々は、32ビットの情報を保持してもよい。32ビット・データエレメントの各々は、「dword」または「ダブルワード」と呼ばれてもよい。データエレメント(Single0~Single3)の各々は、例えば、32ビット単精度浮動小数点値を保持する。それゆえに、「パックド・シングル」フォーマットとも呼ばれる。
【0078】
パックド・ダブル・フォーマット424は、少なくとも1つの実施例において、長さ128ビットでもよい。かつ2つのデータエレメントを保持してもよい。パックド・ダブル・フォーマット424の各データエレメント(Double0、Double1)は、64ビット長の情報を保持してもよい。64ビット・データエレメントの各々は、「qword」または「クワッドワード」と呼ばれてもよい。データエレメント(Double0、Double1)の各々は、例えば、64ビット倍精度浮動小数点値を表す。それゆえに、「パックド・ダブル」フォーマットとも呼ばれる。
【0079】
アンパックド・ダブル・クワッドワード・フォーマット412は、最高128ビットのデータを保持してもよい。データは、必ずしもパックド・データである必要はない。少なくとも1つの実施例において、例えば、アンパックド・ダブル・クワッドワード・フォーマット412の情報の128のビットは、単一のスカラー・データ(例えば文字、整数、浮動小数点値または2進数ビット・マスク値)を表してもよい。あるいは、アンパックド・ダブル・クワッドワード・フォーマット412の128のビットは、無関係なビット(例えば、ビットの各ビットまたは一組が異なるフラグを表すステータスレジスタ値)、等の集約を表してもよい。
【0080】
少なくとも本発明の一実施例において、パックド・シングル423およびパックド・ダブル424のフォーマットのデータエレメントは、上記のようにパックド浮動小数点データエレメントでもよい。本発明の他の実施態様では、パックド・シングル423およびパックド・ダブル424のフォーマットのデータエレメントはパックド整数、ブール変数、パックド浮動小数点データエレメントであってもよい。他の本発明の別の実施例において、パックド・バイト421、パックド・ハーフ422、パックド・シングル423およびパックド・ダブル424のフォーマットのデータエレメントは、パックド整数またはパックド・ブール・データエレメントでもよい。本発明の別の実施例において、パックド・バイト421、パックド・ハーフ422、パックド・シングル423およびパックド・ダブル424のデータフォーマットの全てが、必ずしも許されなくてもよく、またサポートされなくてもよい。
【0081】
図5および6は、少なくとも本発明の一実施例におけるレジスタのパックド・データ記憶表現を例示している。
【0082】
図5に、それぞれ、符号無し、符号付きパックド・バイト・レジスタのフォーマット510および511を示す。符号無しパックド・バイト・レジスタ表現510は、符号無しパックド・バイト・データの記憶を示している、例えば、28ビット長拡張レジスタのXR213aからXR213h(例えば図2bを参照)である。16バイト・データの各々のエレメントに、情報が以下のように格納される。バイト0としてビット7からビット0、バイト1としてビット15からビット8、バイト2としてビット23からビット15、バイト3としてビット31からビット24、バイト4としてビット39からビット32、バイト5としてビット47からビット40、バイト6としてビット55からビット48、バイト7としてビット63からビット56、バイト8としてビット71からビット64、バイト9としてビット79からビット72、バイト10としてビット87からビット80、バイト11としてビット95からビット88、バイト12としてビット103からビット96、バイト13としてビット111からビット104、バイト14としてビット119からビット112、バイト15としてビット127からビット120、となる。
【0083】
このように、すべての利用できるビットが、レジスタにおいて使われる。この記憶装置の利用方法は、プロセッサの記憶領域の利用を効率化する。また、16のデータエレメントにアクセスして、1つのオペレーションが、同時に16のデータエレメントに実行されてもよい。
【0084】
符号付きパックド・バイト・レジスタ表現511は、符号付きパックド・バイトの記憶を示している。あらゆるバイト・データエレメントの第8の(MSB)ビットが符号インジケータ(s)であることに注意されたい。
【0085】
図5は、それぞれ、符号無し、符号付きパックド・ワード・レジスタの表現512および513を示している。
【0086】
符号無しパックド・ワード・レジスタ表現512は、拡張レジスタ210がどのように8つのワード(それぞれ16ビット)データエレメントを保存するかを示している。ワード0は、レジスタのビット0からビット15に保存される。ワード1は、レジスタのビット30からビット16に保存される。ワード2は、レジスタのビット32からビット47に保存される。ワード3は、レジスタのビット48からビット63に保存される。ワード4は、レジスタのビット60からビット79に保存される。ワード5は、レジスタのビット90からビット80に保存される。ワード6は、レジスタのビット96からビット111に保存される。ワード7は、レジスタのビット112からビット127に保存される。
【0087】
符号付きパックド・ワード・レジスタ表現511は、符号無しパックド・ワード・レジスタ表現512に似ている符号ビット(s)が各語データエレメントの第16のビット(MSB)に格納されることに注意されたい。
【0088】
図6は、それぞれ、符号無し、かつ符号付きパックド・ダブルワード・レジスタのフォーマット514および515を示している。符号無しパックド・ダブルワード・レジスタ表現514は、拡張レジスタ210がどのように4つのダブルワード(それぞれ32ビット)データエレメントを保存するかについて示している。ダブルワード0は、レジスタのビット31からビット0に格納される。ダブルワード1は、レジスタのビット30からビット63に格納される。ダブルワード2は、レジスタのビット90からビット60に格納される。ダブルワード3は、レジスタのビット96からビット127に格納される。
【0089】
符号付きパックド・ダブルワード・レジスタ表現515は、符号無しパックド・クワッドワード・レジスタ表現516と同様である。符号ビット(s)が各ダブルワード・データエレメントの第32のビット(MSB)であることに注意されたい。
【0090】
図6は、それぞれ、符号無し、符号付きパックド・クワッドワードのレジスタ内フォーマット516および517を示している。符号無しパックド・クワッドワード・レジスタ表現516は、拡張レジスタ210がどのように2つのクワッドワード(それぞれ64ビット)データエレメントを保存するかについて示す。クワッドワード0は、レジスタのビット63からビット0に保存される。クワッドワード1は、レジスタのビット60からビット127に格納される。
【0091】
符号付きパックド・クワッドワード・レジスタ表現517は、符号無しパックド・クワッドワード・レジスタ表現516と同様である。符号ビット(s)が各クワッドワード・データエレメントの第64のビット(MSB)であることに注意されたい。
[論理的比較、ゼロおよびキャリーフラグ設定オペレーション]
【0092】
少なくとも1つの実施例において、SRC1レジスタは、パックド・データまたはアンパックド・ダブル・クワッドワード・データ(Source1)を保持し、DESTレジスタも同様に、パックド・データまたはアンパックド・ダブル・クワッドワード・データ(Dest)を保持する。DESTレジスタのDestおよびSRC1レジスタのSource1の値は、少なくとも1つの実施例において、アンパックドのダブル・クワッドワード・データのビットマスク値を保持してもよい。
【0093】
通常、LCSZC命令の第1のステップで、2つの比較動作が、実行される。第1の中間結果は、Source1の各ビットと対応するDestの各ビット独立論理比較(ビットごとの論理積演算)を実行することによって生成される。第2の中間結果は、Destの各ビットの補数と対応するSource1の各ビットの独立論理比較(ビットごとの論理積演算)を実行することによって生成される。これらの中間結果は、一時記憶位置(例えば、レジスタ)に格納されてもよいし、または何らプロセッサによって保存されなくてもよい。
【0094】
図7aは、少なくとも本発明の一実施例におけるLCSZCオペレーションを実行する一般の方法700のフローチャートである。処理700および本願明細書に開示されている他のプロセスは、汎用マシンによって、または、特殊目的マシンによって、または、両方の組合せによって専用のハードウェアまたはソフトウェアまたは実行可能ファームウェア・オペレーションコードを含む処理ブロックによって実行される。図7aから図7dについては、図7aを参照しながら以下説明する。
【0095】
図7aは、処理700が、まず「スタート」から開始され、処理ブロック701へ進むことを示す。処理ブロック701で、デコーダ165は、プロセッサ109によって受信される制御信号を復号する。このようにして、デコーダ165は、LCSZC命令のオペレーションコードを復号する。処理は、それから処理ブロック701から処理ブロック702へ進む。
【0096】
処理ブロック702で、内部バス170を介して、デコーダ165は、コード化された命令の、SRC1およびDESTアドレスを与えられたレジスタファイル150内のレジスタ209にアクセスする。少なくとも1つの実施例において、コード化された各々命令のアドレスは、拡張レジスタを示す(例えば図2bの拡張レジスタ210を参照)。かかる実施例において、ブロック702においては、SRC1レジスタ(ソース1)に格納されたデータ、およびDESTに格納されたデータ(Dest)を、実行ユニット130に提供するために、示された拡張レジスタ210がアクセスされる。少なくとも1つの実施例において、拡張レジスタ210は、内部バス170を介して実行ユニット130にデータを伝える。
【0097】
処理は、処理ブロック702から、処理ブロック703へ進む。処理ブロック703で、デコーダ165は、実行ユニット130がインストラクションを実行することを可能にする。少なくとも1つの実施例において、かかる処理703で、所望のオペレーション(LCZCS)を示すために実行ユニットに対する1つ以上の制御信号が送信される。処理は、ブロック703から、処理ブロック714および715へ進む。ブロック714および715が並列に示されているが、それらが同じサイクルかまたはサイクルのセット中において実行される限りにおいて、かかるオペレーションが正確に同時に実行される必要がある。あるいは、少なくとも1つの別の実施例において、ブロック714および715の処理が直列的に実行されてもよいと、当業者は認識するであろう。異なる実施例では、このように並列のブロック714および715を、並列に、直列に、または、並列および直列したオペレーションの部分的組合せによって処理してもよい。
【0098】
処理ブロック714では、以下の処理が実行される。Source1の全てまたはいくつかのビットが、Destの値の同じく対応するそれぞれのビットと論理積演算が実行される。同様に、処理ブロック715で、Source1の全てまたはいくつかのビットが、Dest値の同じく対応するそれぞれのビットの補数と論理積演算が実行される。
【0099】
処理は、ブロック714から、ブロック720へ進む。また、処理は、ブロック715から、ブロック721へ進む。
【0100】
処理ブロック720で、プロセッサの状態は、処理ブロック714で実行される比較の結果に基づいて修正される。同様に、処理ブロック721で、プロセッサの状態は、処理ブロック715で実行される比較の結果に基づいて修正される。当業者は、図7aに図示される処理700が、ノンデストラクティブであるということに留意されたい。すなわち、Source1およびDestオペランド値はLCSZCオペレーションの結果として、変更されない。その代わりに、ゼロフラグがブロック720で修正される、そして、キャリーフラグがブロック721で修正される。
【0101】
処理ブロック720で、Intermediate Result1のすべてのビットがゼロ(例えば、論理的にlowの値)に等しい場合、ゼロフラグの値は、真値(例えば、論理値High)にセットされる。しかしながら、ブロック720において、Intermediate Result1の少なくとも1つのビットが論理Highの値の場合、ゼロフラグの値は、偽値(例えば、論理値Low)にセットされる。
【0102】
処理ブロック721において、Intermediate Result2のすべてのビットがゼロ(例えば、論理値Low)に等しい場合、キャリーフラグの値は真値(例えば、論理値High)にセットされる。しかしながら、ブロック721において、Intermediate Result2のすくなくとも1つのビットが論理値Highの値の場合、キャリーフラグは、偽値(例えば、論理値Low)にセットされる。
【0103】
処理ブロック714および720だけ実装し処理ブロック715および721は実装しなくてもよい。あるいは、処理ブロック715および721だけ実装し処理ブロック714および720は実装しなくてもよい。また、処理700の他の実施例においては、LCSZC命令の付加的なバリエーションをサポートするために付加された処理ブロックを実装してもよい。
【0104】
ブロック720および721から、処理は、任意にブロック722へ進んでもよい。ブロック722で、プロセッサ内の他の状態ビットが、修正されてもよい。少なくとも1つの実施例において、これらの状態ビットは、例えば、1つ以上の他の設計上認識できるステータスフラグ値を含んでもよい。これらのフラグは、1または2ビット値でもよい。これらの例としては、parity (PF), auxiliary carry (AF), sign (SF), trap (TF), interrupt enable/disable (IF), direction (DF), overflow (OF), I/O privilege level (IOPL), nested task (NT), resume (RF), virtual 8086 mode (VM), alignment check (AC), virtual interrupt (VIF), virtual interrupt pending (FIP), and CPU identifier (ID)等である。もちろん、特定のフラグの前述のリストは、例示を目的としている。他の実施例は、より少ない、あるいは、より多くの、異なるフラグを含んでもよい。
【0105】
ブロック722の次は、「終了」となる。処理は、オプションのブロック722を含まない実施例においては、ブロック720および721の処理の後「終了」となる。
【0106】
図7bは、図7aに図示される一般の処理700の少なくとも1つの特定実施例700bのためのフローチャートを示している。図7bに図示される特定実施例700bにおいて、LCSZCオペレーションは、128ビット長のSource1およびDestデータ値に対して実行される。これは、パックド・データあるいはアンパックド・データのいずれでもよい。(もちろん、当業者は図7bに図示されるオペレーションが他の長さのデータ値で実行されてもよいと認識するであろう。すなわち、128ビットより短いか、あるいはより長いものを含む)
【0107】
方法700bの処理ブロック701bから703bによる処理は、基本的に図7aに図示した方法700に関連して記載されている処理ブロック701から703と同じ操作である。デコーダ165が実行ユニット130に対して、ブロック703cのインストラクションを実行することを可能にするときに、LCSZC命令は、Source1およびDest値のそれぞれのビットの論理積比較を実行する。(図6に図示される符号付きパックド・ダブルワード・レジスタ表現515参照)かかる命令は、アプリケーションプログラマによって命令簡略記憶記号、例えば「PTEST」、として使われる。処理は、ブロック703cから、ブロック714cおよび715cへ進む。また、処理714cおよび715cは、並列に実行されてもよいが、必ずしもそのように実行される必要があるというわけではない。
【0108】
処理は、処理ブロック703bから、処理ブロック714bおよび715bへ進む。図7aの処理ブロック714および715に示されるように、処理714bおよび715bが並列に実行されるとして図7bに図示されるが、本発明がこの点に関しては制限されない点に留意する必要がある。その代わりに、異なる実施例は、並列なブロック714bおよび715bが、直列に、または、並列および直列したオペレーションの部分的な組合せの処理を実行してもよい。
【0109】
処理ブロック714bで、次の部分が実行される。Source1の全てのビットは、同じ対応するDest値のそれぞれのビットと論理積演算される。すなわち、Intermediate Result1のビット[127:0]には、Dest[127:0]とSource1[127:0]のそれぞれのビットのビットごとの論理積演算の結果が割り当てられる。
【0110】
同様に、処理ブロック715bで、Source1ビットの全ては、Dest値の同じく対応するビットの補数と論理積演算される。すなわち、Intermediate Result2のビット[127:0]は、Dest[127:0]のそれぞれの補数のビットとSource1[127:0]のビットのビットごとの論理積演算の結果を保持する。
【0111】
処理は、ブロック714bから、ブロック720bへ進む。そして処理は、ブロック715bから、ブロック721bへ進む。
【0112】
処理ブロック720bで、プロセッサの状態は、処理ブロック714bで実行される比較の結果に基づいて修正される。同様に、処理ブロック721bで、プロセッサの状態は、処理ブロック715bでなされる比較の結果に基づいて修正される。当業者は、図7bに図示される処理700bが、ノンデストラクティブであるということに留意されたい。すなわち、Source1およびDestオペランド値はLCSZCオペレーションの結果として、変更されない。その代わりに、ゼロフラグがブロック720bで修正される、そして、キャリーフラグがブロック721bで修正される。
【0113】
処理ブロック720bで、Intermediate Result1(例えば、Intermediate Result1のビット[127:0])のすべてのビットがゼロ(例えば、論理値Low)に等しい場合、ゼロフラグの値は真値(例えば、論理値High)がセットされる。しかしながら、ブロック720bにおいてIntermediate Result1の1ビットでも論理値Highである場合、ゼロフラグは偽値(例えば、論理値Low)にセットされる。
【0114】
処理ブロック721bで、Intermediate Result2(例えば、Intermediate Result2のビット[127:0])のすべてのビットがゼロ(例えば、論理値Low)に等しい場合、キャリーフラグの値は真値(例えば、論理値High)にセットされる。しかしながら、ブロック721bにおいて、Intermediate Result2の1ビットでも論理値Highである場合、キャリーフラグは偽値(例えば、論理値Low)に対セットされる。
【0115】
方法700bの別の実施例では、処理ブロック714bおよび720bだけを実装し、処理ブロック715bおよび721bを実装しなくてもよい。あるいは、処理ブロック715bおよび721bだけで、処理ブロック714bおよび720bを実装しなくてもよい。方法700bの別の実施例がLCSZC命令の付加的なバリエーションをサポートするために付加された処理ブロックを実装してもよい。
【0116】
ブロック720bおよび721bから、処理は、ブロック722bへ任意に進んでもよい。ブロック722bで、プロセッサ内の他の状態ビットが、修正されてもよい。図7bに図示される実施例において、AF(補助キャリー)、OF(オーバーフロー)、PF(パリティ)およびSF(サイン)フラグは、ブロック722bで論理値Lowに割り当てられる。
【0117】
処理は、オプションのブロック722bで「終了」する。オプションのブロック722bを含まない実施例において、処理は、ブロック720bおよび721bでの処理の後「終了」する。
【0118】
両実施例の処理ブロック714、714b、715または715bは、符号付き、あるいは符号無しデータエレメント、または、両方の組合せの論理的比較演算を実行してもよいことはいうまでもない。
【0119】
図7cは、図7aに図示される一般の方法700の少なくとも1つの他の特定実施例700cのフローチャートを示している。図7cに図示される特定実施例700cにおいて、LCSZCオペレーションは、長さ128ビットであるSource1およびDestデータ値に対して実行される。ソースオペランド、またはデスティネーションオペランド、あるいは、両方ともパックドでもよい。すなわち、ソースオペランドが、128ビット・データ値が4つのパックド32ビット(「ダブルワード」)データエレメントを表すことになる。例えば、データエレメントが、各々32ビット符号付きの単精度浮動小数点であってもよい。
【0120】
もちろん、当業者は、図7cに図示されるオペレーションが他の長さのデータ値のために実行されてもよいと認識するであろう。たとえば、128ビットより長い、あるいは短いデータエレメント、あるいはバイト(8ビット)および/またはショートワード(16ビット)をも含む。
【0121】
方法700cの処理ブロック701cから703cの処理は、図7aに図示される方法700に記載されている処理ブロック701~703と基本的に同じ操作を行う。前述の説明に関する例外は、処理ブロック703cにおいて、デコーダ165が、実行ユニット130にインストラクションを実行することを指示するときに、命令がSource1およびDestination値の各32ビット・ダブルワードのMSBの論理積比較を実行するためのLCSZC命令であるということである。(図6に図示される符号付きパックド・ダブルワード・レジスタ表現515参照)かかる命令は、プログラマによって使われる命令簡略記憶記号、例えば「TESTPS」、と呼ばれる。ここで「PS」は、パックド・シングル(Packed Single)単精度データエレメントを示す。
【0122】
処理は、ブロック703cから、ブロック714cおよび715cへ進む。また、処理714cおよび715cは、並列に実行されてもよいが、必ずしもそのように実行される必要はない。
【0123】
処理ブロック714cで、次の内容が実行される。Source1のビットの全ては、同じく対応するDest値のビットと論理積演算される。すなわち、Intermediate Result1のビット[127:0]は、Dest[127:0]とSource1[127:0]のそれぞれのビットのビットごとの論理積演算の結果が割り当てられる。
【0124】
同様に、処理ブロック715cにおいて、Source1ビットの全ては、同じく対応するDest値のビットの補数と論理的積演算される。すなわち、Intermediate Result2のビット[127:0]は、Dest[127:0]のそれぞれのビットの補数とSource1[127:0]のビットのビットごとの論理積演算の結果が割り当てられる。
【0125】
処理は、ブロック714cから、ブロック720cへ進む。また、処理は、ブロック715cから、ブロック721cへ進む。
【0126】
ブロック720cで、第1の中間の値(Intermediate Value1)の各32ビット・ダブルワードのMSBが判断される。ブロック720cにおいて、Intermediate Value1のビット127、95、63および31がゼロに等しい場合、ゼロフラグは論理値Highにセットされる。ブロック720cにおいてそれ以外のときは、ゼロフラグは、論理値Lowにセットされる。
【0127】
同様に、ブロック721cで、第2の中間の値(Intermediate Value2)の各32ビット・ダブルワードのMSBが判断される。ブロック721cにおいて、Intermediate Value2のビット127、95、63および31がゼロに等しい場合、キャリーフラグは、論理値Highにセットされる。ブロック721cにおいてそれ以外のときは、キャリーフラグは、論理値Lowにセットされる。ソースレジスタ(SRC1)のオリジナル値(Source1)、およびデスティネーション・レジスタ(DEST)のオリジナル値(Dest)は、方法700cの処理の結果によって修正されない。
【0128】
処理は、ブロック720cおよび721cで「終了」するか、または、オプショナルの処理ブロック722cに進行する。ブロック722cで、プロセッサの内の他の状態ビットが、修正されてもよい。図7cに図示される実施例において、ブロック722cで、AF(補助キャリー)、OF(オーバーフロー)、PF(パリティ)およびSF(サイン)フラグは、論理値Lowに割り当てられる。
【0129】
オプショナルのブロック722cを含まない実施例において、処理は、ブロック720cおよび721cでの処理の後「終了」する。オプショナルのブロック722cを含む実施例において、処理は、処理ブロック722cの完了の後に終わる。
【0130】
図7dは、図7aに図示される一般の方法700の少なくとも1つの他の特定実施例700dのためのフローチャートを示している。図7dに図示される特定実施例700dにおいて、LCSZCオペレーションは、128ビット長のSource1およびDestデータ値に実行される。ソースまたはデスティネーションオペランドあるいは、両方ともパックドでもよい。すなわち128ビット・データ値のソースオペランドが2つのパックド64ビット・データエレメントを表す。データエレメントは、例えば、64ビット符号付き倍精度浮動小数点値を各々表してもよい。
【0131】
もちろん、当業者は、図7dに図示されるオペレーションが他の長さのデータ値のために実行されてもよいと認識するであろう。上記は、128ビットより長いか、短いデータエレメントの他のサイズを含む。バイト(8ビット)および/またはショートワード(16ビット)をも含む。
【0132】
方法700cの701dから703dによるオペレーションは、図7aに図示された方法700に関連して記載されている処理ブロック701から処理ブロック703と基本的に同様の操作をする。前述の記述に関する例外は、処理ブロック703dにおいて、デコーダ165が実行ユニット130にインストラクションを実行させるときに、命令がSource1およびDestination値の各64ビット・ダブルワードのMSBの論理積比較を実行するためのLCSZC命令であるということである。(図6に図示される符号付きパックド・クワッドワード・レジスタ表現517参照)。かかる命令は、プログラマによって使われる命令簡略記憶記号、例えば「TESTPD」と呼ばれる。ここで、「PD」は、パックド・ダブル(Packed Double)倍精度データエレメントを示す。
【0133】
処理は、ブロック703dから、ブロック714dおよび715dへ進む。また、ブロック714dおよび715dは、並列に実行されてもよいが、必ずしもそのように実行される必要はない。
【0134】
処理ブロック714dで、次の処理が、実行される。Source1のビットの全ては、同じく対応するDest値のビットと論理積演算される。すなわち、Intermediate Result1のビット[127:0]は、Dest[127:0]とSource1[127:0]とのそれぞれのビットのビットごとの論理積演算の結果を割り当てられる。
【0135】
同様に、処理ブロック715dにおいて、Source1ビットの全ては、同じく対応するDest値のビットの補数と論理積演算される。すなわち、Intermediate Result2のビット[127:0]は、Dest[127:0]のそれぞれの補数のビットとSource1[127:0]のビットのビットごとの論理積演算の結果を割り当てられる。
【0136】
処理は、ブロック714dから、ブロック720dへ進む。また。処理は、ブロック715dから、741dへ進む。
【0137】
ブロック720dで、第1の中間の値(Intermediate Value1)の各64ビットクワッドワードのMSBが判断される。ブロック720dにおいて、Intermediate Value1のビット127および63がゼロに等しい場合、ゼロフラグは論理値Highにセットされる。ブロック720dにおいて、それ以外の場合は、ゼロフラグは、論理値Lowにセットされる。
【0138】
同様に、ブロック721dで、第2の中間の値(Intermediate Value2)の各64ビットクワッドワードのMSBが判断される。ブロック721dにおいてIntermediate Value2のビット127および63がゼロに等しい場合、キャリーフラグは論理値Highにセットされる。ブロック721dにおいて、それ以外の場合には、キャリーフラグは、論理値Lowにセットされる。ソースレジスタ(SRC1)のオリジナル値(ソース1)、およびデスティネーション・レジスタ(DEST)のオリジナル値(Dest)は、方法700dの処理の結果として、修正されない。
【0139】
ブロック720dおよび721dで処理は「終了」するか、または、オプションの処理ブロック722dに進行する。ブロック722dで、プロセッサ内の他の状態ビットが、修正されてもよい。図7dに図示される実施例において、AF(補助キャリー)、OF(オーバーフロー)、PF(パリティ)およびSF(サイン)フラグは、ブロック722dで論理値Lowに割り当てられる。
【0140】
任意のブロック722dを含まない実施例において、処理は、ブロック720dおよび721dの処理の後「終了」する。オプションのブロック722cを含む実施例において、処理は、処理ブロック722cの完了の後終わる。
[論理的比較、ゼロおよびキャリーフラグ設定回路]
【0141】
少なくとも幾つかの実施例において、パックド・データに対する、多様なLCSZC命令(上記のTESTPSおよびTESTPD)は、同数のクロックサイクルで、同様に、複数のデータエレメントに対しアンパックド・データに対する比較動作として実行できる。同数のクロックサイクルにおいて実行を行うために、パラレリズムが、利用されてもよい。すなわち、プロセッサ(例えばレジスタおよび実行ユニット)のエレメントは、同時に、データエレメントのLCSZCオペレーションを実行するように指示されてもよい。この並行オペレーションについては、以下、更に詳細に述べる。図8aおよび8bに関して、図1aを参照しながら説明する。
【0142】
図8aは、少なくとも本発明の一実施例におけるパックド・データのLCSZCオペレーションを実行するための回路801を示している。回路801は、少なくとも1つの実施例において、図1aに図示される論理比較回路145の全部または一部でもよい。
【0143】
図8aは、ソースオペランドSource1[127:0]831およびデスティネーションオペランドDest[127:0]833を表す。少なくとも1つの実施例において、ソースおよびデスティネーションは、N―ビット長SIMDレジスタである。たとえば、128ビットIntel(R)SSE2 XMMレジスタ(例えば、図2bの拡張レジスタ210参照)に保存される。
【0144】
図8aに図示される特定の実施例は、LCSZC命令のダブル・クワッドワード(128ビット)実施例を示す。ここで、128ビット・ソースの各ビットと、デスティネーションオペランドのそれぞれのビットとが比較される。かかる実施例において、各ビットが比較されるので、オペレーションはソースおよびデスティネーションオペランドの128ビットのいかなる性質にも機能的に関知しない。ソースおよびデスティネーションオペランドは、どちらかまたは両方とも、パックド・データ、アンパックド・スカラー・データ、符号付きデータまたは符号無しデータであってもよい。特定の具体例において、パックド・データ・ソース831およびデスティネーション833は、128ビットを有するが、本願明細書において開示される原理は、他の既存の長さ、例えば80ビット、128ビットまたは256ビットまで広げられてもよいことはいうまでもない。
【0145】
オペレーション制御手段800は、回路801によって実行されるオペレーションを制御するために、イネーブル880上に信号を出力する。オペレーション制御手段800の一実施例は、例えば、デコーダ165およびインストラクションポインタ・レジスタ211を有してもよい。もちろん、オペレーション制御手段800は、本発明を理解することに必要でない追加回路を有してもよい。LCSZC回路801は、2セットのANDゲート(825、827)を含む。各セットは、ソースオペランドの各ビットに対して1つのANDゲートを含む。このように、ソースおよびデスティネーションが128ビットを有する実施例においては、第1のセット825は128のANDゲート819を含み、そして、第2のセット827は128のANDゲート820を含む。ソースおよびデスティネーションオペランド(例えば図8aのビット値854を参照)の128ビット値の各々は、第1のセット825のANDゲート819のうちの1つへの入力であり、第2のセット827のANDゲート820のうちの1つへの入力でもある。第2のセットANDゲート827は、デスティネーションオペランド833が反転されて補数となった後に、入力を受信する点に留意する必要がある(インバータ論理844を参照)。
【0146】
第1のセット825のANDゲート819の各々の出力は、NANDゲート854へ入力される。NANDゲート854の少なくとも1つの目的は、ソースとデスティネーションの論理積の結果でビットがすべてのゼロ(論理値Low)であるかを判断することにある。もし、そうであれば、論理値Highをゼロフラグ858にセットする。
【0147】
第2のセット827のANDゲート820の各々の出力は、NANDゲート856へ入力される。NANDゲート856の少なくとも1つの目的は、ソース831のビットとデスティネーションのビット833の補数の論理積の結果でビットが全てゼロ(論理値Low)であるかを判断することである。もし、そうであれば、論理値Highをキャリーフラグ860にセットする。
【0148】
ダブル・クワッドワードLCSZC命令の別の実施例は、ソースおよびデスティネーションの符号無しダブル・クワッドワード値のためのオペレーション、およびソースおよびデスティネーションの符号付きダブル・クワッドワード値のためのオペレーションを含んでもよい。なお、上記に限定されるものではない。LCSZC命令の他の別の実施例は、他のサイズの符号付きまたは符号無しデータエレメントのオペレーションを含んでもよい。(例えば、符号付きダブルワード実施例のための図8bおよび符号付きクワッドワード実施例のための図8cを参照)
【0149】
図8bは、1つの本発明の別の実施例におけるパックド・データのLCSZCオペレーションを実行するための回路801bの少なくとも1つの例を示している。オペレーション制御手段800は、パックドLCSZC命令のための制御信号を処理する。かかるパックドLCSZC命令は、実施例において、LCSZCオペレーションが4つのパックド32ビット値に実行されることを指示する「TESTPS」命令でもよい。パックド32ビット値の各々は、例えば、単精度浮動小数点値を表してもよい。かかる実施例において、オペランド(例えば、ソース831またはデスティネーション833)のうちの1つのみがパックド単精度浮動小数点値を含むことを理解すべきである。他のオペランドは、例えば、ビットマスクを含んでもよい。
【0150】
図8aは、LCSZC回路801bを制御するために、オペレーション制御手段800が、イネーブル880上に、信号を出力する。[当業者は、図8bに図示されるLCSZC回路801bが図8aに図示されるLCSZC回路801の論理素子のサブセットを活性化することにより実現してもよいことを認識するであろう]
【0151】
LCSZC回路801bは、2つのセットのANDゲートを含む、ここで、各セットは、デスティネーションオペランドの対応するビットとソースオペランドの各ビットとを比較するための1つのANDゲートを含む。図8bに図示される実施例において、4つの32ビット(「ダブルワード」)データエレメントの各々のための最上位ビットが、比較される。このように、ANDゲートの第1のセットは、819から819によるゲートを含み、ANDゲート第2のセットは820から820によるゲートを含む。
【0152】
図8bは、ソースオペランド831の4つの32ビット・データエレメントの各々およびデスティネーションオペランド833の4つの32ビット・データエレメントの各々のMSBの値が第1のセットのANDゲート819のうちの1つへ入力されることを示す。より詳細には、図8bは、ソースオペランド831およびデスティネーションオペランド833のビット127がゲート819に対する両入力である。ソースオペランド831およびデスティネーションオペランド833のビット93がゲート819に対する両入力である。ソースオペランド831およびデスティネーションオペランド833のビット63がゲート819に対する両入力である。そして、ソースオペランド831およびデスティネーションオペランド833のビット31がゲート819に対する両入力であることを示す。
【0153】
図8bは、ソースオペランド831の4つの32ビット・データエレメントの各々およびデスティネーションオペランド833の4つの32ビット・データエレメントの各々のMSBの値が820で2番目のセットANDゲートの1つに入力されることを更に示す。第2のセットのANDゲート820から820は、デスティネーションオペランド833の各ダブルワードのMSBが、反転され補数が計算されてから、入力を受信する点に留意する必要がある(インバータ844-844を参照)。
【0154】
より詳細には、図8bは、ソースオペランド831のビット127およびデスティネーションオペランド833のビット127の補数がゲート820に対する両入力である。ソースオペランド831のビット93およびデスティネーションオペランド833の補数のビット93がゲート8202に対する両入力である。ソースオペランド831のビット63およびデスティネーションオペランド833のビット63の補数がゲート8203に対する両入力である。そして、ソースオペランド831のビット31およびデスティネーションオペランド833のビット31の補数がゲート8204に対する両入力であることを示す。
【0155】
ANDゲート819から819の出力の各々は、NANDゲート855への入力である。NANDゲート855の少なくとも1つの目的は、ソースおよびデスティネーションの最も上位のビットの論理積の結果が各々の4つのダブルワードすべてでゼロ(論理値Low)であるかを判断することである。もし、そうである場合、ゼロフラグ858に論理値Highを入力する。
【0156】
ANDゲート820から820の各々の出力は、NANDゲート859へ入力される。NANDゲート859の少なくとも1つの目的は、ソースおよびデスティネーションの補数論理積の結果が各々の4つのダブルワードすべてでゼロ(論理値Low)であるかを判断することである。もし、そうである場合、キャリーフラグ860に論理値Highを入力する。
【0157】
4つのダブルワードの各々のためのMSBを比較するパックドLCSZC命令の別の実施例は、1つのオペランドのパックド符号付きダブルワード値および他のオペランドのビットマスクのためのオペレーション、ソースおよびデスティネーションの符号無しダブルワード値、およびソースおよびデスティネーションの符号付きダブルワード値、または、これらの組合せのためのオペレーションを包含し得る。なお、上記に限定されるものではない。LCSZC命令の他の別の実施例は、符号付きか符号無しデータエレメントの他のサイズにあてはまるオペレーションを含んでもよい。
【0158】
図8cは、別の実施例におけるパックド・データのLCSZCオペレーションを実行するための回路810cの少なくとも1つの例を示している。オペレーション制御手段800は、パックドLCSZC命令のための制御信号を処理する。かかるパックドLCSZC命令は、実施例において、LCSZCオペレーションが評価する2つのパックド倍精度(64ビット)浮動小数点の値に実行されることを表す「TESTPD」命令でもよい。オペレーション制御手段800は、LCSZC回路801cを制御するために、イネーブル880上に信号を出力する。[当業者は、図8cに図示されるLCSZC回路801cが図8aに図示されるLCSZC回路801の論理素子のサブセットを活性化することによって実装されてもよいと認識するであろう]
【0159】
図8bにおいて説明したように、回路801bと同様に、LCSZC回路801cは、2つのセットのANDゲートを含む。ここで、各セットは、ソースオペランドの各ビットと対応するデスティネーションオペランドのビットと比較するための1つのANDゲートを含む。図8cに図示される実施例において、2つの64ビット(「クワッドワード」)データエレメントの各々のための最上位ビットが、比較される。このように、ANDゲートの第1のセットはゲート819から819を含む。そして、ANDゲートの第2のセットはゲート820から820を含む。
【0160】
図8cは、ソースオペランド831の2つの64ビット・データエレメントの各々、および、デスティネーションオペランド833の2つの64ビット・データエレメントの各々のMSBの値が第1のセットのANDゲート(819および819)に入力されていることを示している。図8cにおいて、より詳細には、ソースオペランド831およびデスティネーションオペランド833のビット127がゲート819への入力である、そして、ソースオペランド831およびデスティネーションオペランド833のビット63がゲート819に対する入力であることを示す。
【0161】
図8cは、ソースオペランド831の2つの64ビット・データエレメントの各々、および、デスティネーションオペランド833の2つの64ビット・データエレメントの各々のMSBの値が第2のセットのANDゲート(820および820)に入力されることを更に示す。第2のセットのANDゲート(820および820)は、デスティネーションオペランド833の各クワッドワードのMSBが反転され補数が求まった後に、その値が入力される点に留意する必要がある。
【0162】
より詳細には、図8cは、ソースオペランド831のそのビット127およびデスティネーションオペランド833のビット127の補数がゲート820に対する両入力である。そして、ソースオペランド831のビット63およびデスティネーションオペランド833のビット63の補数がゲート820に対する両入力であることを示す。
【0163】
ANDゲート819および819の各々の出力は、NANDゲート853へ入力される。NANDゲート853の少なくとも1つの目的は、ソースおよびデスティネーションの2つのクワッドワードの各々の最上位ビットの論理積の結果が両方ともゼロ(論理値Low)であるか否かを判断することである。もし、そうである場合、論理値Highがゼロフラグ858に入力される。
【0164】
ANDゲート820および820の各々の出力は、NANDゲート857へ入力される。NANDゲート857の少なくとも1つの目的は、ソースおよびデスティネーションの2つのクワッドワードの各々の最上位ビットの論理積の結果が両方ともゼロ論理値Low)であるか否かを判断することである。もし、そうである場合、論理値Highがキャリーフラグ860に入力される。
【0165】
2つのクワッドワードの各々のためのMSBを比較するパックドLCSZC命令の別の実施例は、ソースおよびデスティネーションの符号無しクワッドワード値のオペレーション、ソースおよびデスティネーションの符号付きクワッドワード値のためのオペレーション、または、両者の組合せのためのオペレーションを包含し得る。なお、これに限定されるものではない。LCSZC命令の他の別の実施例は、符号付き、または符号無しデータエレメントの他のサイズにあてはまるオペレーションを含んでもよい。
【0166】
上述したように、デコーダ165はプロセッサ109によって受信される制御信号を認識し、かつ復号してもよい。そして、その制御信号はLCSZC命令のためのオペレーションコードでもよい。このように、デコーダ165は、LCSZC命令のためのオペレーションコードを復号する。
【0167】
図9を参照すると、LCSZC命令のための制御信号(オペレーションコード)をコード化するために利用されるオペレーションコードの各種実施形態が示されている。図9は、本発明の一実施例における命令900のフォーマットを示している。命令フォーマット900は、さまざまなフィールドを含む。オペランド指定子フィールドは、任意である。すなわち、modR/M, scale-index-base940,displacement950,immediate960である。
【0168】
図9に記載されるフォーマット900が例示的である当業者は認めるであろう。そして、命令コード内のデータのその他の構成は開示された実施例によって利用されてもよい。例えば、フィールド910、920、930、940、950、960は、示された順序である必要はない。各々は、他の位置に再編成されてもよい。かつ、隣接する必要がない。また、本願明細書において述べられるフィールド長は、制限するものと捉えてはならない。バイトの特定の部分であるとして説明されたフィールドは、別の実施例において、より長い、あるいはより短いフィールドとして実装してもよい。用語「バイト」は、本願明細書において8ビット・グループ化を指すために使われるが、他の実施例において4ビット16ビットおよび32ビットを含む他のいかなるサイズのグループ化も含まれる。
【0169】
特定の例のために本願明細書で使用しているように、所望のオペレーションを示すための命令(例えばLCSZC命令)のオペコードは、特定の値を命令フォーマット200のフィールドに含んでもよい。かかる命令は、しばしば「実効命令」として例示される。実効命令のためのビット値は、しばしば「命令コード」として集合的に本願明細書において示される。
【0170】
命令コードごとに、対応する復号された命令コードは、一意にオペレーションが命令コードに応答する実行ユニットを特定する(例えば、図1aの130)。復号化された命令コードは、1つ以上のマイクロオペレーションを含んでもよい。
【0171】
オペコード・フィールド920の内容は、オペレーションを特定する。少なくとも1つの実施例において、本願明細書において述べられるLCSZC命令の実施例のためのオペコード・フィールド920は、長さ3バイトである。オペコード・フィールド920は、1、2または3バイトの情報を含んでもよい。少なくとも1つの実施例において、LCSZCオペレーションを特定するために、3バイトエスケープオペコード値、オペコード・フィールド920の2バイトエスケープフィールド118cは、3バイト目の925のオペコード・フィールド920と結合される。3バイト目の925は、命令に特有のオペコードとして本願明細書において参照される。
【0172】
図9は、LCSZC命令のための命令フォーマットの第2実施例928を示す。オペコード・フィールド920の2バイトフィールド118c内の3バイトエスケープオペコード値は、プレフィクスフィールド910の内容、およびLCSZCオペレーションを特定するためにオペコード・フィールド920の命令に特有のオペコード・フィールド925の内容と結合されることを示す。
【0173】
少なくとも1つの実施例において、プレフィクス値0x66が、プレフィクスフィールド910に置かれる。かつ所望のオペレーションを定めるために、命令オペコードの一部として使われる。すなわち、プレフィクス910フィールドの値は、単にオペコードが次に続くことを示すのではなく、オペコードの一部として復号された。少なくとも1つの実施例において、例えば、プレフィクス値0x66は、LCSZC命令のデスティネーションおよびソースオペランドが128ビットIntel(R)SSE2 XMMレジスタにあることを示すために利用される。他のプレフィクスが、同じように使われてもよい。しかしながら、少なくともLCSZC命令の一部の実施例において、プレフィクスは、その代わりに、オペコードを強化するかまたは一定のオペレーションの状態の下でオペコードに資格を与える従来の役割として使われてもよい。
【0174】
第1の実施例926および命令フォーマットの第2実施例928は、両者とも、3バイトエスケープオペコードフィールド118cおよび命令に特有のオペコード・フィールド925を含んでいる。3バイトエスケープオペコードフィールド118cは、少なくとも1つの実施例において、長さ2バイトである。命令フォーマット926は4つの特別なエスケープオペコードのうちの1つを使用する。これは、3バイトエスケープオペコードと呼ばれている。3バイトエスケープオペコードは長さ2バイトである。これは、命令がオペコード・フィールド920の3番目のバイトを利用して命令を定義することをデコーダ・ハードウェアに知らせる。3バイトエスケープオペコードフィールド118cは、命令オペコードの中でどこにでも位置してもよい、かつ、必ずしも命令の範囲内の最上位の順序または最下位の順序のフィールドに存在しなければならないという必要もない。
【0175】
少なくとも1つの実施例において、少なくとも4つの3バイトエスケープオペコード値が次のように定義される:0x0F3y
ここでyは、0x8、0x9、0xAまたは0xBである。3バイトエスケープオペコード値として値「0x0F38」を含むLCSZC命令オペコードの特定の実施例が本願明細書において開示される。なお、かかる開示は制限するものとして解釈されてはならない。他の実施例は、他のエスケープオペコード値を利用してもよい。
【0176】
下記の表3はプレフィクスおよび3バイトエスケープオペコードを使用しているLCSZC命令コードの例を記載している。
【表5】
【0177】
少なくとも1つの実施例において、ソースまたはデスティネーションオペランドの値は、マスクとして利用されてもよい。マスク値としてソースかデスティネーションオペランドのいずれを使用するべきかどうかに関するプログラマの選択は、少なくとも1つには、所望の動作に基づいて決定されてもよい。例えばマスク値としての第2オペランド(ソース)を使用して、結果として生じる動作は、次のようになる。
“マスクの下のすべてが「0」である場合、ZFをセットせよ;マスクの下のすべてが「1」である場合、CFをセットせよ”
一方、マスク値として第1の引数(デスティネーション)を使用するときに、結果として生じる動作は次のようになる。
“マスクの下のすべてが「1」である場合、ZFをセットせよ;マスクの下のすべてが「0」である場合、CFをセットせよ”
【0178】
図7c、7d、8bおよび8cに関連して少なくとも上記のパックドLCSZC命令の一部の実施例を実行するために、追加命令が必要である。これはオペレーションにマシンサイクル待ち時間を追加する。例えば、表4に記載される擬似コードセットは、PTEST命令を使用した命令セットが、PTEST命令を含まない命令セットより、命令数を節約できることを示している。
【表6】
【0179】
表4に記載される擬似コードは、LCSZC命令の記載されている実施例がソフトウェアコードの性能を改良するために用いることができることを示している。その結果、LCSZC命令は、従来技術の命令よりも、多くのアルゴリズムのパフォーマンスを向上させるために、一般的なプロセッサに利用することができる。
[別の実施例]
【0180】
上述の実施例は、32ビット・データエレメントのためのMSBおよびLCSZC命令のパックド実施例のための64ビット・データエレメントの比較を行っている。別の実施例は、異なるサイズの入力、異なるサイズのデータエレメントおよび/または異なるビット(例えば、データエレメントのLSB)を使用してもよい。加えて、上述の実施例においては、Source1およびDestが各々128ビットのデータを含む。別の実施例は、より多くの、あるいは、より少ないデータを有するパックド・データを取り扱うことができる。例えば、1つの別の実施例は、64ビットのデータを有するパックド・データを取り扱う。また、LCSZC命令によって比較されるビットは、パックド・データエレメントの各々同じビット位置である必要はない。
【0181】
本発明を、いくつかの実施例によって記載したが、当業者は、本発明が記載されている実施例に限られていないことを認識するであろう。本発明の方法と装置は、添付の請求項の範囲内で、種々の態様の変更が可能である。明細書は、このように、本発明を制限するのではなく、例示するものと捉えるべきである。
【0182】
前記説明は、本発明の好ましい実施例を示すことを目的とする。上記の考察からも明らかなように、特に、本技術分野は、急速に発展している。そして、更なる技術の向上は、容易に予知できない。本発明は、添付の請求の範囲の範囲内において、本発明の原理を逸脱しない範囲で、当業者によって構成およびその詳細が修正されてもよい。
図1a
図1b
図1c
図2a
図2b
図3
図4
図5
図6
図7a
図7b
図7c
図7d
図8a
図8b
図8c
図9