JP2014510351A - マスクレジスタを用いてジャンプを行うシステム、装置、および方法 - Google Patents

マスクレジスタを用いてジャンプを行うシステム、装置、および方法 Download PDF

Info

Publication number
JP2014510351A
JP2014510351A JP2014502547A JP2014502547A JP2014510351A JP 2014510351 A JP2014510351 A JP 2014510351A JP 2014502547 A JP2014502547 A JP 2014502547A JP 2014502547 A JP2014502547 A JP 2014502547A JP 2014510351 A JP2014510351 A JP 2014510351A
Authority
JP
Japan
Prior art keywords
instruction
field
jkzd
write mask
pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014502547A
Other languages
English (en)
Other versions
JP2014510351A5 (ja
JP5947879B2 (ja
Inventor
エイドリアン、ジーザス コーベル サン
トール、ブレット
シー. バレンタイン、ロバート
バーブラオ ギルカル、ミリンド
トーマス フォーサイス、アンドリュー
ゼット. チリソス、ジョージ
トーマス グロチョフスキー、エドワード
ブラッドフォード、デニス
ケイ. ウー、リサ
ウルド−アハメド−ヴァル、エルムスタファ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2014510351A publication Critical patent/JP2014510351A/ja
Publication of JP2014510351A5 publication Critical patent/JP2014510351A5/ja
Application granted granted Critical
Publication of JP5947879B2 publication Critical patent/JP5947879B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】コンピュータプロセッサでジャンプ命令を実行するシステム、装置、および方法の実施形態を説明する。
【解決手段】いくつかの実施形態において、書き込みマスクの全てのビットがゼロの場合、ブレンド命令を実行することにより、当該命令の命令ポインタおよび相対オフセットを用いて計算される、ターゲット命令のアドレスへの条件付きジャンプが行われる。
【選択図】図1

Description

本願発明の分野は一般的にコンピュータプロセッサアーキテクチャに関し、より詳細には、実行されると特定の結果をもたらす命令に関する。
プログラムの実行中にプログラマが制御フローの変更を所望することは多い。従来は、分岐およびジャンプという、制御フローの変更を実行する2つのタイプの命令があった。分岐は通常、現在のプログラムカウンタに対する短い変更を表す。ジャンプは通常、現在のプログラムカウンタに直接関連しないプログラムカウンタの変更を表し(絶対メモリ位置へのジャンプ、または動的または静的テーブルを用いたジャンプなど)、現在のプログラムカウンタからの距離に関する制限がないことが多い。
添付の図面を用いて、本願発明を限定ではなく例示により説明する。図面において同様の参照符号は同様の要素を示す。
図1は、プロセッサでJKZD命令を実行する方法の実施形態を示す。 図2は、プロセッサでJKZD命令を実行する他の実施形態を示す。 図3は、プロセッサでJKNZD命令を実行する方法の実施形態を示す。 図4は、プロセッサでJKNZD命令を実行する他の実施形態を示す。 図5は、プロセッサでJKOD命令を実行する方法の実施形態を示す。 図6は、プロセッサでJKOD命令を実行する他の実施形態を示す。 図7は、プロセッサでJKNOD命令を実行する方法の実施形態を示す。 図8は、プロセッサでJKNOD命令を実行する他の実施形態を示す。 図9Aは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令形式、およびそのクラスAの命令テンプレートを示すブロック図である。 図9Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令形式、およびそのクラスB命令テンプレートを示すブロック図である。 図10Aは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令形式を示すブロック図である。 図10Bは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令形式を示すブロック図である。 図10Cは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令形式を示すブロック図である。 図11は、本願発明の一実施形態に係るレジスタアーキテクチャを示すブロック図である。 図12Aは、本願発明の実施形態に係る、シングルCPUコア、並びに、そのオンダイインターコネクトネットワークへの接続、およびそのレベル2(L2)キャッシュのローカルサブセットを示すブロック図である。 図12Bは、本願発明の実施形態に係る、図12AのCPUコアの一部の分解図である。 図13は、本願発明の実施形態に係る例示的なアウトオブオーダーアーキテクチャを示すブロック図である。 図14は、本願発明の一実施形態に係るシステムを示すブロック図である。 図15は、本願発明の実施形態に係る第2システムを示すブロック図である。 図16は、本願発明の実施形態に係る第3システムを示すブロック図である。 図17は、本願発明の実施形態に係るSoCを示すブロック図である。 図18は、本願発明の実施形態に係る、集積メモリコントローラおよび集積グラフィックを備えるシングルコアプロセッサ、並びにマルチコアプロセッサを示すブロック図である。 図19は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。
以下の説明において、様々な特定的な詳細が示される。しかし、本願発明の実施形態は、これら特定的な詳細を用いずとも実施できる。他の例においては、この説明の理解を曖昧にすることを避けるべく、周知の回路、構造、および技術が詳細には示されていない。
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」などについて言及した場合、説明される実施形態が特定の特徴、構造、または特定を含んでよいことを示し、全ての実施形態がそれら特定の特徴、構造、または特性を含んでいなければならないことを示すわけではない。さらに、そのような文言は、必ずしも同じ実施形態を指すとは限らない。さらに、ある実施形態に関連して特定の特徴、構造、または特性を説明する場合、明示的に説明されていようとされてなかろうと、当業者であれば他の実施形態に関連してそれらの特徴、構造、または特性を実施することが出来る。
ジャンプ命令
以下に、いくつかのジャンプ命令のいくつかの実施形態、並びに、ジャンプ命令を実行するのに用いられ得るシステム、アーキテクチャ、命令形式などの実施形態を説明する。これらジャンプ命令は、当該命令に含まれる書き込みマスクの値に基づいて、プログラムの制御フローの順序を条件付きで変更するのに用いられ得る。これら命令は、ベクトル化されたコードの制御フローを変更するのに「書き込みマスク」を用いる。当該マスクの各ビットは、制御フロー、つまりループの繰り返しにおける1つのSIMDフィールドのインスタンスに関連する。書き込みマスクの実施形態の詳細を以下に詳述する。
典型的には以下のジャンプ命令は、動的コンバージェンスを含むループからの早い段階でのエスケープ、全てのアクティブな要素がオフとなるまでの繰り返し(例えば、動き予測ダイアモンドサーチ、および有限差異アルゴリズム)、マスクがゼロの場合の偽のメモリフォルトの抑制、ギャザー/スキャッタ命令の向上した性能、およびスパースな(sparsely populated)述語付きコードに関する動作の節約(例えば、コンパイラがメモリ内で圧縮/拡張を行えない場合)などのために用いられ得る。
書き込みマスクに基づく制御フローの例の多くは、書き込みマスクが全てゼロの場合のジャンプか、マスクが全てゼロでない場合のジャンプのいずれかである。例示的な高水準言語擬似コードを示す表、および、その擬似アセンブリ言語を以下に示す。VCMPPS命令は、ソースレジスタZMM1およびZMM2のデータ要素を比較し、ZMM1のデータ要素がZMM2の対応するデータ要素より小さい場合、書き込みマスクk1に「マスク」ビットとしてデータ要素を格納する。当然、VCMPPSはそのようなシナリオに限定されず、等しい、以下である、順序付けられていない、等しくない、以上である、以上であるか等しい、順序付けられているなど他の条件に基づいて評価が行われてもよい。
Figure 2014510351
表1
このような順序のJNZのアプローチは比較的遅く、書き込みマスクが生成された後にループから出るようジャンプするためには、2つの命令が必要となる。
KORTEST k1,k1 //(OR(k1,k1)==0x0)=>ZF
JNZ target_addr
KORTEST命令は2つのマスクの「OR」演算を実行し、結果がゼロであれば、「条件コード」またはステータスレジスタ(FLAGSまたはEFLAGSなど)のゼロフラグが設定される。JNZ(jump if not zero)命令はそのフラグを確認し、ゼロフラグが設定されていればターゲットアドレスへジャンプする。よって、このソフトウェアの順序には、スループットおよび(長期的には)レイテンシを減らす余地がある。
JKZD−Jump near if the writemask is zero
最初に、jump near if the writemask is zero(JKZD)命令について説明する。プロセッサがこの命令を実行することにより、ソース書き込みマスクの全ての書き込みマスクビットが「0」に設定されているかどうか、当該ソース書き込みマスクの値が確認され、設定されていれば、プロセッサに、宛て先オペランドおよび現在の命令ポインタによって少なくとも部分的に特定されるターゲット命令へのジャンプを実行させる。書き込みマスクビットの全てが「0」ではない場合(よってジャンプ条件が満たされない場合)、ジャンプは実行されず、JKZD命令に続く命令の実行へと続く。
JKZDのターゲット命令のアドレスは典型的には、当該命令に含まれる相対オフセットオペランド(EIPレジスタの命令ポインタの現在の値と相対的な符号付きオフセット)によって特定される。相対オフセット(rel8、rel16、またはrel32)は一般的に、アセンブリコードのラベルとして特定されるが、機械コードレベルでは、命令ポインタへと加えられる、符号付きの8または32ビットの即値としてエンコードされ得る。典型的には、命令コーディングは−128から127のオフセットに関して最も効率的である。いくつかの実施形態において、オペランドサイズ(命令ポインタ)が16ビットである場合、ターゲット命令アドレスを生成するのにEIPレジスタの上位2バイトは用いられない(クリアされる)。いくつかの実施形態において、64ビットのオペランドサイズの64ビットのモードにおいて(RIPが命令ポインタを格納する)、ジャンプニアのターゲット命令アドレスは、RIP=RIP+64ビットに拡張された8ビットのオフセット符号として定義される。このモードにおいて、ジャンプニアのターゲットアドレスは、RIP=RIP+64ビットに拡張された32ビットのオフセットとして定義される。
この命令の例示的な形式は「JKZD k1,rel8/32」である。ここでk1は書き込みマスクオペランド(上記にて詳述したような16ビットレジスタなど)であり、rel8/32は8または32ビットの即値である。いくつかの実施形態において、書き込みマスクは異なるサイズを有する(8ビット、32ビットなど)。JKZDは命令のオペコードである。典型的には、各オペランドは命令において明示的に定義されている。他の実施形態において、即値は16ビットなど異なるサイズを有する。
図1は、プロセッサでJKZD命令を実行する方法の実施形態を示す。101において、書き込みマスクおよび相対オフセットを含むJKZD命令がフェッチされる。
103において、JKZD命令がデコードされ、105において、書き込みマスクなどのソースオペランド値が読み出される。
107において、デコードされたJKZD命令が実行される。書き込みマスクの全てのビットがゼロの場合、相対オフセットおよび現在の命令ポインタに基づいて生成されたアドレスの命令へと条件付きジャンプが行われ、または、書き込みマスクの少なくとも1つのビットが1であった場合、JKZD命令に続く命令のフェッチ、デコードなどが行われる。アドレスの生成は、この方法のデコード段階、読み出し段階、および実行段階の何れで行われてもよい。
図2Aおよび図2Bは、プロセッサでJKZD命令を実行する他の実施形態を示す。101〜105のいくつかがこの方法の開始される前に実行されていることが想定されており、手順の詳細を曖昧にすることを避けるべくそれらの工程は示されていない。201において、書き込みマスクに「1」の値があるかどうかの判断が行われる。
書き込みマスクに「1」がある場合(よって書き込みマスクがゼロでない場合)、ジャンプは実行されず、203において、プログラムのフローにおける順番の命令が実行される。書き込みマスクに「1」がない場合、205において、一時的命令ポインタが生成される。いくつかの実施形態において、この一時的命令ポインタは現在の命令ポインタに符号拡張相対オフセットを加えたものである。例えば、32ビットの命令ポインタの場合、一時的命令ポインタの値は、EIPに符号拡張相対オフセットを加えたものである。この一時的命令ポインタはレジスタに格納されてもよい。
207において、オペランドサイズ属性が16ビットであるかどうかの判断が行われる。例えば、命令ポインタが16、32、または64ビット値のいずれであるか。オペランドサイズ属性が16ビットである場合、209において、一時的命令ポインタの上位2バイトがクリアされる(ゼロに設定される)。クリアはいくつかの異なるやり方で行われてよいが、いくつかの実施形態において、一時的命令ポインタは、「0」を最も重要な2バイトとして有し、「1」を最も重要性の低い2バイトとして有する即値(例えば即値は、0x0000FFFFである)で論理積をとる。
オペランドサイズが16ビットでない場合、211において、一時的命令ポインタがコードセグメントリミット内であるかどうかの判断が行われる。
コードセグメントリミット内でない場合、213において、フォルトが生成され、ジャンプが実行されない。この判断は最も重要な2バイトがクリアされた一時的命令ポインタに関して行われてもよい。命令がファージャンプ(他のコードセグメントへのジャンプ)をサポートしないいくつかの実施形態において、条件付きジャンプのターゲットが異なるセグメントにある場合、JKZD命令に関してテストされた条件とは反対の条件が用いられ、ターゲットは、他のセグメントへの無条件のファージャンプ(JMP命令)によって到達される。ジャンプに制限がある実施形態において、プログラムがコードの遠い領域にジャンプしたい場合、writemask−on−jumpのセマンティックがネゲートされ、続くコードに、その特定のコードへの「ファー」ジャンプを行わせる。例えばこの条件はイリーガルであり得る。
JKZD FARLABEL このファージャンプを実行すべく、代わりに以下の2つの命令を用い得る。
JKNZD BEYOND;
JMP FARLABEL;
BEYOND:
一時的命令ポインタがコードセグメントリミット内である場合、213において、命令ポインタが一時的命令ポインタとして設定される。例えば、EIP値が一時的命令ポインタに設定される。215において、ジャンプが行われる。
最後に、いくつかの実施形態において、当該方法の上述した態様のうち1以上が実行されないか、または異なる順序で実行される。例えば、プロセッサが16ビットのオペランド(命令ポインタ)を有さない場合、対応する判断が行われない。
表2は、表1と同じ擬似コードを示すが、JKNZD命令が用いられ、KORTESTDの必要性がない。以下の命令に関しても同様の利点がある。
Figure 2014510351
表2
JKNZD−Jump near if the writemask is not zero
次に、jump near if the writemask is not zero(JKNZD)命令について説明する。プロセッサがこの命令を実行することにより、ソース書き込みマスクの全ての書き込みマスクビットが「0」に設定されているかどうか、当該ソース書き込みマスクの値が確認され、設定されていなければ、プロセッサに、宛て先オペランドおよび現在の命令ポインタによって少なくとも部分的に特定されるターゲット命令へのジャンプを実行させる。書き込みマスクビットの全てが「0」である場合(よってジャンプ条件が満たされない場合)、ジャンプは実行されず、JKNZD命令に続く命令の実行へと続く。
JKNZDのターゲット命令のアドレスは典型的には、当該命令に含まれる相対オフセットオペランド(EIPレジスタの命令ポインタの現在の値と相対的な符号付きオフセット)によって特定される。相対オフセット(rel8、rel16、またはrel32)は一般的に、アセンブリコードのラベルとして特定されるが、機械コードレベルでは、命令ポインタへと加えられる、符号付きの8または32ビットの即値としてエンコードされ得る。典型的には、命令コーディングは−128から127のオフセットに関して最も効率的である。いくつかの実施形態において、オペランドサイズ(命令ポインタ)が16ビットである場合、ターゲット命令アドレスを生成するのにEIPレジスタの上位2バイトは用いられない(クリアされる)。いくつかの実施形態において、64ビットのオペランドサイズの64ビットのモードにおいて(RIPが命令ポインタを格納する)、ジャンプニアのターゲット命令アドレスは、RIP=RIP+64ビットに拡張された8ビットのオフセット符号として定義される。このモードにおいて、ジャンプニアのターゲットアドレスは、RIP=RIP+64ビットに拡張された32ビットのオフセットとして定義される。
この命令の例示的な形式は「JKNZD k1,rel8/32」である。ここでk1は書き込みマスクオペランド(上記にて詳述したような16ビットレジスタなど)であり、rel8/32は8または32ビットの即値である。いくつかの実施形態において、書き込みマスクは異なるサイズを有する(8ビット、32ビットなど)。JKNZDは命令のオペコードである。典型的には、各オペランドは命令において明示的に定義されている。他の実施形態において、即値は16ビットなど異なるサイズを有する。
図3は、プロセッサでJKNZD命令を実行する方法の実施形態を示す。301において、書き込みマスクおよび相対オフセットを含むJKNZD命令がフェッチされる。
303において、JKNZD命令がデコードされ、305において、書き込みマスクなどのソースオペランド値が読み出される。
307において、デコードされたJKNZD命令が実行される。書き込みマスクの全てのビットがゼロの場合、相対オフセットおよび現在の命令ポインタに基づいて生成されたアドレスの命令へと条件付きジャンプが行われ、または、書き込みマスクの少なくとも1つのビットが1である場合、JKNZD命令に続く命令のフェッチ、デコードなどが行われる。アドレスの生成は、この方法のデコード段階、読み出し段階、および実行段階の何れで行われてもよい。
図4は、プロセッサでJKNZD命令を実行する他の実施形態を示す。401〜405のいくつかがこの方法の開始される前に実行されていることが想定されており、手順の詳細を曖昧にすることを避けるべくそれらの工程は示されていない。401において、書き込みマスクに「1」の値があるかどうかの判断が行われる。
書き込みマスクに「0」のみがある場合(よって書き込みマスクがゼロである場合)、ジャンプは実行されず、403において、プログラムのフローにおける順番の命令が実行される。書き込みマスクに「1」がある場合、405において、一時的命令ポインタが生成される。いくつかの実施形態において、この一時的命令ポインタは現在の命令ポインタに符号拡張相対オフセットを加えたものである。例えば、32ビットの命令ポインタの場合、一時的命令ポインタの値は、EIPに符号拡張相対オフセットを加えたものである。この一時的命令ポインタはレジスタに格納されてもよい。
407において、オペランドサイズ属性が16ビットであるかどうかの判断が行われる。例えば、命令ポインタが16、32、または64ビット値のいずれであるか。オペランドサイズ属性が16ビットである場合、409において、一時的命令ポインタの上位2バイトがクリアされる(ゼロに設定される)。クリアはいくつかの異なるやり方で行われてよいが、いくつかの実施形態において、一時的命令ポインタは、「0」を最も重要な2バイトとして有し、「1」を最も重要性の低い2バイトとして有する即値(例えば即値は、0x0000FFFFである)で論理積をとる。
オペランドサイズが16ビットでない場合、411において、一時的命令ポインタがコードセグメントリミット内であるかどうかの判断が行われる。コードセグメントリミット内でない場合、413において、フォルトが生成され、ジャンプが実行されない。この判断は最も重要な2バイトがクリアされた一時的命令ポインタに関して行われてもよい。命令がファージャンプ(他のコードセグメントへのジャンプ)をサポートしないいくつかの実施形態において、条件付きジャンプのターゲットが異なるセグメントにある場合、JKNZD命令に関してテストされた条件とは反対の条件が用いられ、ターゲットは、他のセグメントへの無条件のファージャンプ(JMP命令)によって到達される。例えばこの条件はイリーガルであり得る。
JKNZD FARLABEL
このファージャンプを実行すべく、代わりに以下の2つの命令を用い得る。
JKZD
BEYOND;
JMP FARLABEL;
BEYOND:
一時的命令ポインタがコードセグメントリミット内である場合、413において、命令ポインタが一時的命令ポインタとして設定される。例えば、EIP値が一時的命令ポインタに設定される。415において、ジャンプが行われる。
最後に、いくつかの実施形態において、当該方法の上述した態様のうち1以上が実行されないか、または異なる順序で実行される。例えば、プロセッサが16ビットのオペランド(命令ポインタ)を有さない場合、対応する判断が行われない。
JKOD−Jump near if the writemask is all ones
次に、jump near if the writemask is all ones(JKOD)命令について説明する。プロセッサがこの命令を実行することにより、ソース書き込みマスクの全ての書き込みマスクビットが「1」に設定されているかどうか、当該ソース書き込みマスクの値が確認され、設定されていれば、プロセッサに、宛て先オペランドおよび現在の命令ポインタによって少なくとも部分的に特定されるターゲット命令へのジャンプを実行させる。書き込みマスクビットの全てが「1」でない場合(よってジャンプ条件が満たされない場合)、ジャンプは実行されず、JKOD命令に続く命令の実行へと続く。
JKODのターゲット命令のアドレスは典型的には、当該命令に含まれる相対オフセットオペランド(EIPレジスタの命令ポインタの現在の値と相対的な符号付きオフセット)によって特定される。相対オフセット(rel8、rel16、またはrel32)は一般的に、アセンブリコードのラベルとして特定されるが、機械コードレベルでは、命令ポインタへと加えられる、符号付きの8または32ビットの即値としてエンコードされ得る。典型的には、命令コーディングは−128から127のオフセットに関して最も効率的である。いくつかの実施形態において、オペランドサイズ(命令ポインタ)が16ビットである場合、ターゲット命令アドレスを生成するのにEIPレジスタの上位2バイトは用いられない(クリアされる)。いくつかの実施形態において、64ビットのオペランドサイズの64ビットのモードにおいて(RIPが命令ポインタを格納する)、ジャンプニアのターゲット命令アドレスは、RIP=RIP+64ビットに拡張された8ビットのオフセット符号として定義される。このモードにおいて、ジャンプニアのターゲットアドレスは、RIP=RIP+64ビットに拡張された32ビットのオフセットとして定義される。
この命令の例示的な形式は「JKOD k1,rel8/32」である。ここでk1は書き込みマスクオペランド(上記にて詳述したような16ビットレジスタなど)であり、rel8/32は8または32ビットの即値である。いくつかの実施形態において、書き込みマスクは異なるサイズを有する(8ビット、32ビットなど)。JKODは命令のオペコードである。典型的には、各オペランドは命令において明示的に定義されている。他の実施形態において、即値は16ビットなど異なるサイズを有する。
図5は、プロセッサでJKOD命令を実行する方法の実施形態を示す。501において、書き込みマスクおよび相対オフセットを含むJKOD命令がフェッチされる。
503において、JKOD命令がデコードされ、505において、書き込みマスクなどのソースオペランド値が読み出される。
507において、デコードされたJKOD命令が実行される。書き込みマスクの全てのビットが1の場合、相対オフセットおよび現在の命令ポインタに基づいて生成されたアドレスの命令へと条件付きジャンプが行われ、または、書き込みマスクの少なくとも1つのビットが0である場合、JKOD命令に続く命令のフェッチ、デコードなどが行われる。アドレスの生成は、この方法のデコード段階、読み出し段階、および実行段階の何れで行われてもよい。
図6は、プロセッサでJKOD命令を実行する他の実施形態を示す。601〜605のいくつかがこの方法の開始される前に実行されていることが想定されており、手順の詳細を曖昧にすることを避けるべくそれらの工程は示されていない。601において、書き込みマスクに「0」の値があるかどうかの判断が行われる。
書き込みマスクに「0」がある場合(よって書き込みマスクの全てが1ではない場合)、ジャンプは実行されず、603において、プログラムのフローにおける順番の命令が実行される。書き込みマスクに「0」がない場合、605において、一時的命令ポインタが生成される。いくつかの実施形態において、この一時的命令ポインタは現在の命令ポインタに符号拡張相対オフセットを加えたものである。例えば、32ビットの命令ポインタの場合、一時的命令ポインタの値は、EIPに符号拡張相対オフセットを加えたものである。この一時的命令ポインタはレジスタに格納されてもよい。
607において、オペランドサイズ属性が16ビットであるかどうかの判断が行われる。例えば、命令ポインタが16、32、または64ビット値のいずれであるか。オペランドサイズ属性が16ビットである場合、609において、一時的命令ポインタの上位2バイトがクリアされる(ゼロに設定される)。クリアはいくつかの異なるやり方で行われてよいが、いくつかの実施形態において、一時的命令ポインタは、「0」を最も重要な2バイトとして有し、「1」を最も重要性の低い2バイトとして有する即値(例えば即値は、0x0000FFFFである)で論理積をとる。
オペランドサイズが16ビットでない場合、611において、一時的命令ポインタがコードセグメントリミット内であるかどうかの判断が行われる。コードセグメントリミット内でない場合、613において、フォルトが生成され、ジャンプが実行されない。この判断は最も重要な2バイトがクリアされた一時的命令ポインタに関して行われてもよい。
一時的命令ポインタがコードセグメントリミット内である場合、613において、命令ポインタが一時的命令ポインタとして設定される。例えば、EIP値が一時的命令ポインタに設定される。615において、ジャンプが行われる。
最後に、いくつかの実施形態において、当該方法の上述した態様のうち1以上が実行されないか、または異なる順序で実行される。例えば、プロセッサが16ビットのオペランド(命令ポインタ)を有さない場合、対応する判断が行われない。
JKNOD−Jump near if the writemask is not all ones
次に、jump near if the writemask is not all ones(JKNOD)命令について説明する。プロセッサがこの命令を実行することにより、ソース書き込みマスクの少なくとも1つの書き込みマスクビットが「0」に設定されているかどうか、当該ソース書き込みマスクの値が確認され、設定されていれば、プロセッサに、宛て先オペランドおよび現在の命令ポインタによって少なくとも部分的に特定されるターゲット命令へのジャンプを実行させる。書き込みマスクビットのうち1つも「0」でない場合(よってジャンプ条件が満たされない場合)、ジャンプは実行されず、JKNOD命令に続く命令の実行へと続く。
JKNODのターゲット命令のアドレスは典型的には、当該命令に含まれる相対オフセットオペランド(EIPレジスタの命令ポインタの現在の値と相対的な符号付きオフセット)によって特定される。相対オフセット(rel8、rel16、またはrel32)は一般的に、アセンブリコードのラベルとして特定されるが、機械コードレベルでは、命令ポインタへと加えられる、符号付きの8または32ビットの即値としてエンコードされ得る。典型的には、命令コーディングは−128から127のオフセットに関して最も効率的である。いくつかの実施形態において、オペランドサイズ(命令ポインタ)が16ビットである場合、ターゲット命令アドレスを生成するのにEIPレジスタの上位2バイトは用いられない(クリアされる)。いくつかの実施形態において、64ビットのオペランドサイズの64ビットのモードにおいて(RIPが命令ポインタを格納する)、ジャンプニアのターゲット命令アドレスは、RIP=RIP+64ビットに拡張された8ビットのオフセット符号として定義される。このモードにおいて、ジャンプニアのターゲットアドレスは、RIP=RIP+64ビットに拡張された32ビットのオフセットとして定義される。
この命令の例示的な形式は「JKNOD k1,rel8/32」である。ここでk1は書き込みマスクオペランド(上記にて詳述したような16ビットレジスタなど)であり、rel8/32は8または32ビットの即値である。いくつかの実施形態において、書き込みマスクは異なるサイズを有する(8ビット、32ビットなど)。JKNODは命令のオペコードである。典型的には、各オペランドは命令において明示的に定義されている。他の実施形態において、即値は16ビットなど異なるサイズを有する。
図7は、プロセッサでJKNOD命令を実行する方法の実施形態を示す。701において、書き込みマスクおよび相対オフセットを含むJKNOD命令がフェッチされる。
703において、JKNOD命令がデコードされ、705において書き込みマスクなどのソースオペランド値が読み出される。
707において、デコードされたJKNOD命令が実行される。書き込みマスクの少なくとも1つのビットが1でない場合、相対オフセットおよび現在の命令ポインタに基づいて生成されたアドレスの命令へと条件付きジャンプが行われ、または、書き込みマスクの全てのビットが1である場合、JKNZD命令に続く命令のフェッチ、デコードなどが行われる。アドレスの生成は、この方法のデコード段階、読み出し段階、および実行段階の何れで行われてもよい。
図8は、プロセッサでJKNOD命令を実行する他の実施形態を示す。801〜805のいくつかがこの方法の開始される前に実行されていることが想定されており、手順の詳細を曖昧にすることを避けるべくそれらの工程は示されていない。801において、書き込みマスクに「0」の値があるかどうかの判断が行われる。
書き込みマスクに「0」がない場合(よって書き込みマスクが全て1である場合)、ジャンプは実行されず、803において、プログラムのフローにおける順番の命令が実行される。書き込みマスクに「0」がある場合、805において、一時的命令ポインタが生成される。いくつかの実施形態において、この一時的命令ポインタは現在の命令ポインタに符号拡張相対オフセットを加えたものである。例えば、32ビットの命令ポインタの場合、一時的命令ポインタの値は、EIPに符号拡張相対オフセットを加えたものである。この一時的命令ポインタはレジスタに格納されてもよい。
807において、オペランドサイズ属性が16ビットであるかどうかの判断が行われる。例えば、命令ポインタが16、32、または64ビット値のいずれであるか。オペランドサイズ属性が16ビットである場合、809において、一時的命令ポインタの上位2バイトがクリアされる(ゼロに設定される)。クリアはいくつかの異なるやり方で行われてよいが、いくつかの実施形態において、一時的命令ポインタは、「0」を最も重要な2バイトとして有し、「1」を最も重要性の低い2バイトとして有する即値(例えば即値は、0x0000FFFFである)で論理積をとる。
オペランドサイズが16ビットでない場合、811において、一時的命令ポインタがコードセグメントリミット内であるかどうかの判断が行われる。コードセグメントリミット内でない場合、813において、フォルトが生成され、ジャンプが実行されない。この判断は最も重要な2バイトがクリアされた一時的命令ポインタに関して行われてもよい。
一時的命令ポインタがコードセグメントリミット内である場合、813において、命令ポインタが一時的命令ポインタとして設定される。例えば、EIP値が一時的命令ポインタに設定される。815において、ジャンプが行われる。
最後に、いくつかの実施形態において、当該方法の上述した態様のうち1以上が実行されないか、または異なる順序で実行される。例えば、プロセッサが16ビットのオペランド(命令ポインタ)を有さない場合、対応する判断が行われない。
上記にて詳述した命令の実施形態は、下記に詳述する「汎用のベクトルフレンドリーな命令形式」で実施することも可能である。他の実施形態において、そのような形式は用いられず、他の命令形式が用いられる。しかし、書き込みマスクレジスタ、様々なデータ変換(スウィズル、ブロードキャストなど)、アドレシングなどに関する以下の説明は一般的に、上述した命令の実施形態の説明に関して適用可能である。加えて、例示的なシステム、アーキテクチャ、およびパイプラインについて以下で詳述する。上述した命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプラインで実行することが出来るが、それら詳述されるものに限定されない。
ベクトルフレンドリーな命令形式は、ベクトル命令に適した命令形式(例えば、ベクトル動作に特定のいくつかのフィールドがある)である。ベクトルフレンドリーな命令形式によってベクトル演算およびスカラ演算の両方がサポートされる実施形態を説明するが、代替的な実施形態においては、ベクトルフレンドリーな命令形式のベクトル演算のみが用いられる。
例示的な汎用のベクトルフレンドリーな命令形式−図9Aおよび図9B
図9Aおよび図9Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令形式、および、その命令テンプレートを示すブロック図である。図9Aは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令形式、および、そのクラスAの命令テンプレートを示すブロック図である。図9Bは、本願発明の実施形態に係る、汎用のベクトルフレンドリーな命令形式、および、そのクラスB命令テンプレートを示すブロック図である。詳細には、汎用のベクトルフレンドリーな命令形式900には、それぞれが非メモリアクセス905命令テンプレートおよびメモリアクセス920命令テンプレートを含む、クラスAおよびクラスB命令テンプレートが定義されている。ベクトルフレンドリーな命令形式という表現において汎用という用語は、命令形式が何ら特定の命令セットに関連付けられていないことを意味する。ベクトルフレンドリーな命令形式の命令が、レジスタ(非メモリアクセス905命令テンプレート)およびレジスタ/メモリ(メモリアクセス920命令テンプレート)のうちいずれかをソースとするベクトルに対して動作する実施形態を説明するが、本願発明の代替的な実施形態においては、これらのうちいずれか一方だけをサポートしてもよい。また、ベクトル命令形式のロード命令および格納命令がある本願発明の実施形態を説明するが、代替的な実施形態においては、代わりに、或いは、加えて、レジスタへ、またはレジスタからベクトル(例えば、メモリからレジスタへ、レジスタからメモリへ、レジスタ間で、など)を移動させる異なる命令形式の命令が用いられる。さらに、2つのクラスの命令テンプレートをサポートする本願発明の実施形態を説明するが、代替的な実施形態においては、これらのうち一方のみ、または3つ以上がサポートされる。
ベクトルフレンドリーな命令形式が、32ビット(4バイト)、または、64ビット(8バイト)のデータ要素幅(またはサイズ)を有する64バイトベクトルオペランドの長さ(またはサイズ)(よって、64バイトのベクトルは、16倍長語サイズの要素、および8カッド語サイズの要素のいずれかからなる)、16ビット(2バイト)、または、8ビット(1バイト)のデータ要素幅(またはサイズ)を有する64バイトベクトルオペランドの長さ(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または、8ビット(1バイト)のデータ要素幅(またはサイズ)を有する32バイトベクトルオペランドの長さ(またはサイズ)、並びに、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または、8ビット(1バイト)のデータ要素幅(またはサイズ)を有する16バイトベクトルオペランドの長さ(またはサイズ)をサポートする実施形態について説明するが、代替的な実施形態においては、より大きな、より小さな、または異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有するより大きな、より小さな、および/または異なるベクトルオペランドサイズ(例えば956バイトのベクトルオペランド)がサポートされてもよい。
図9AのクラスAの命令テンプレートは、1)非メモリアクセス905命令テンプレート内に、非メモリアクセス完全丸め制御タイプ演算910命令テンプレート、および非メモリアクセスデータ変換タイプ演算915命令テンプレート、並びに2)メモリアクセス920命令テンプレート内に、メモリアクセス一時的925命令テンプレート、およびメモリアクセス非一時的930命令テンプレートを含む。図9BのクラスB命令テンプレートは、1)非メモリアクセス905命令テンプレート内に、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算912命令テンプレート、および非メモリアクセス書き込みマスク制御vsizeタイプ演算917命令テンプレート、並びに、2)メモリアクセス920命令テンプレート内に、メモリアクセス書き込みマスク制御927命令テンプレートを含む。
形式
汎用のベクトルフレンドリーな命令形式900は、図9Aおよび図9Bに示される順序で、以下に列挙するフィールドを含む。
形式フィールド940−このフィールド内の特定値(命令形式識別値)は一意的に、ベクトルフレンドリーな命令形式を識別し、よって、命令ストリーム内のベクトルフレンドリーな命令形式の命令の発生を識別する。よって、形式フィールド940のコンテンツは、第1命令形式の命令の発生を他の命令形式の命令の発生と区別し、これにより、ベクトルフレンドリーな命令形式を他の命令形式の命令セットへ導入することが可能となる。このため、このフィールドは、汎用のベクトルフレンドリーな命令形式のみを有する命令には必要でないので任意的なものである。
ベース動作フィールド942−このコンテンツは、複数の異なるベース動作を区別する。本明細書で以下に説明するように、ベース動作フィールド942は、オペコードフィールドを含む、および/または、その一部であってもよい。
レジスタインデックスフィールド944−このコンテンツは、直接的またはアドレス生成を介して、レジスタまたはメモリなどの、ソースおよび宛て先オペランドの位置を特定する。これらには、PxQ(例えば32x1112)レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Nは3つのソースおよび1つの宛て先レジスタであるが、代替的な実施形態においては、より多く、またはより少ない宛て先レジスタをサポートしてもよい(例えば最大2つのソースをサポートしてもよく、これらソースのうち1つは宛て先としても動作する。例えば最大3つのソースをサポートしてもよく、これらソースのうち1つは宛て先としても動作する。例えば2つのソースおよび1つの宛て先をサポートしてもよい)。一実施形態においてはP=32であるが、代替的な実施形態においては、より多く、またはより少ないレジスタ(例えば16の)をサポートしてもよい。一実施形態においてはQ=1112ビットであるが、代替的な実施形態においては、より多く、またはより少ないビット(例えば128、1024の)をサポートしてもよい。
修飾子フィールド946−このコンテンツは、メモリアクセスを特定する汎用ベクトル命令形式の命令の発生を、メモリアクセスを特定しない命令形式の命令の発生と区別する。つまり、非メモリアクセス905命令テンプレートとメモリアクセス920命令テンプレートとを区別する。メモリアクセス動作は、メモリ階層から読み出す、および/または、メモリ階層へ書き込む(場合によっては、レジスタ内の値を用いて、ソース、および/または宛て先アドレスを特定する。他方、メモリアクセス動作はこれらを特定しない(例えば、ソースおよび宛て先がレジスタである)。一実施形態においては、このフィールドはメモリアドレス計算を実行する3つの異なる方法からの選択も行うが、代替的な実施形態においては、メモリアドレス計算を実行するより多くの、より少ない、または複数の異なる方法をサポートする。
オーグメンテーション動作フィールド950−このコンテンツは、ベース動作に加えて、様々な複数の異なる動作のうち何れを実行するかを区別する。このフィールドはコンテキスト特有のものである。本願発明の一実施形態において、このフィールドは、クラスフィールド968、アルファフィールド952、および、ベータフィールド954に分けられる。オーグメンテーション動作フィールドは、複数の動作からなる共通のグループを、2、3、または4つの命令ではなく1つの命令で実行することを可能とする。以下に示すのは、必要な命令の数を減らすべくオーグメンテーションフィールド950を用いる命令(用いられる用語の意味は、本明細書において以下により詳細に説明する)のいくつかの例である。
Figure 2014510351
ここで、[rax]はアドレス生成に用いられるベースポインタであり、{}は、データ操作フィールド(本明細書で以下により詳細に説明する)で特定される変換動作を示す。
スケールフィールド960−このコンテンツは、メモリアドレスの生成のための(例えば、2スケール*インデックス+ベースを用いるアドレス生成のための)インデックスフィールドのコンテンツのスケーリングを可能とする。
変位フィールド962A−このコンテンツは、メモリアドレスの生成(例えば、2スケール*インデックス+ベース+変位を用いるアドレス生成)の一部として用いられる。
変位係数フィールド962B(いずれか一方のみが用いられるので、変位フィールド962Aは変位係数フィールド962Bの直接上に配置されている)−このコンテンツは、アドレス生成の一部として用いられる。このフィールドは、メモリアクセス(N)のサイズでスケーリングされる変位係数を特定する。ここでNは、メモリアクセス(例えば、2スケール*インデックス+ベース+スケーリングされた変位を用いるアドレス生成のための)のバイト数である。冗長下位ビットは無視され、よって、有効アドレスを計算するのに用いられる最終的な変位を生成すべく変位係数フィールドのコンテンツがメモリオペランドの合計サイズ(N)で乗算される。Nの値は、本明細書で以下に説明するようにフルオペコードフィールド974(本明細書で以下に説明する)およびデータ操作フィールド954Cに基づいて実行時にプロセッサハードウェアによって求められる。変位フィールド962Aおよび変位係数フィールド962Bは非メモリアクセス905命令テンプレートには用いられない、並びに/或いは、異なる実施形態においては、いずれか一方が用いられる、または両方とも用いられないので、任意的なものである。
データ要素幅フィールド964−このコンテンツは、複数のデータ要素幅のうち何れを用いるかを区別する(いくつかの実施形態においては全ての命令に関して。他の実施形態においては、命令のうちいくつかに関して)。1つだけのデータ要素幅がサポートされる場合、および/または、オペコードのいくつかの態様を用いて複数のデータ要素幅がサポートされる場合には必要ではないので、このフィールドは任意的なものである。
書き込みマスクフィールド970−このコンテンツは、データ要素の位置毎に、宛て先ベクトルオペランドのデータ要素の位置に、ベース動作およびオーグメンテーション動作の結果を反映させるかどうかを制御する。クラスA命令テンプレートはマージング−書き込みマスキングをサポートし、クラスB命令テンプレートは、マージング−書き込みマスキング、およびゼロ化−書き込みマスキングの両方をサポートする。マージングの際、ベクトルマスクにより、宛て先の複数の要素からなる何れのセットも、(ベース動作およびオーグメンテーション動作によって特定される)いかなる動作の実行の間であっても、更新から保護をすることが可能となる。他の一実施形態において、対応するマスクのビットが有する0を有する宛て先の各要素の古い値が維持される。対照的に、ベクトルマスクをゼロ化する際、(ベース動作およびオーグメンテーション動作によって特定される)いかなる動作の実行の間であっても、宛て先の複数の要素からなる何れのセットもゼロにされる。一実施形態において、対応するマスクのビットが0の値を有する宛て先の要素が0に設定される。この機能のサブセットは、実行されている動作のベクトル長さを制御する能力である(つまり、最初から最後までの、修飾されている要素のスパン)。しかし、修飾される要素が連続している必要はない。よって、書き込みマスクフィールド970は、ロード、格納、アリズマティック、ロジカルなどを含む部分的なベクトル動作を可能とする。また、このマスキングをフォルトの抑制に用いることも出来る(つまり、フォルトを引き起こし得る/引き起こす何らかの動作の結果の受信を避けるべく宛て先のデータ要素の位置をマスキングすることにより。例えば、メモリのベクトルがページの境界をクロスし、2番目のページではなく最初のページがページフォルトを引き起こすことを想定すると、最初のページにあるベクトルの全てのデータ要素が書き込みマスクによりマスキングされた場合、ページフォルトを無視することが出来る)。さらに、書き込みマスクは、特定のタイプの条件ステートメントを含む「ベクトル化ループ」を可能とする。書き込みマスクフィールド970のコンテンツが、用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうちの1つを選択する(よって、書き込みマスクフィールド970のコンテンツが、実行されるマスキングを間接的に識別する)本願発明の実施形態を説明したが、代替的な実施形態においては、代替的または追加的に、書き込みマスクフィールド970のコンテンツが、実行されるマスキングを直接的に特定することを可能とする。さらに、1)レジスタリネームパイプライン段階において宛て先は明示的なソースではないので、宛て先オペランドがソースでもない命令(ノンターナリ命令とも呼ばれる)に対してレジスタリネーミングが用いられる(動作の結果でない何れかデータ要素(何れのマスキングされたデータ要素)もゼロにされるので、現在の宛て先レジスタからのデータ要素の何れもリネームされた宛て先レジスタにコピーされる必要がなく、或いは、何らかの方法で動作を実行される必要がない)場合、および、2)ゼロが書き込まれているので、書き戻し段階の間、ゼロ化により性能の向上が可能となる。
即値フィールド972−このコンテンツは即値の特定を可能とする。即値をサポートしない汎用のベクトルフレンドリーな形式の実施では存在せず、即値を用いない命令では存在しないので、このフィールドは任意的なものである。
命令テンプレートクラス選択
クラスフィールド968−このコンテンツは複数の異なるクラスの命令を区別する。図2Aおよび図2Bを参照すると、このフィールドのコンテンツは、クラスAの命令およびクラスBの命令のうちから選択する。図9Aおよび図9Bにおいて、角が丸められた正方形は、特定値がフィールド内に存在することを示すのに用いられている(例えば、図9AのクラスA968A、および図9BのクラスB968B)。
クラスAの非メモリアクセス命令テンプレート
クラスAの非メモリアクセス905命令テンプレートの場合、アルファフィールド952は、含まれるコンテンツが複数の異なるオーグメンテーション動作タイプのうち何れが実行されるかを区別する(例えば、丸め952A.1およびデータ変換952A.2がそれぞれ、非メモリアクセス丸めタイプ演算910および非メモリアクセスデータ変換タイプ演算915命令テンプレートに関して特定される)RSフィールド952Aとして解釈され、ベータフィールド954は、特定されたタイプの動作のうち何れが実行されるかを区別する。図9Aおよび図9Bにおいて、角が丸められたブロックは、特定値が存在することを示すのに用いられている(例えば、修飾子フィールド946の非メモリアクセス946A、アルファフィールド952/RSフィールド952Aの丸め952A.1およびデータ変換952A.2)。非メモリアクセス905命令テンプレートにおいて、スケールフィールド960、変位フィールド962A、および変位スケールフィールド962Bは存在しない。
非メモリアクセス命令テンプレート−完全丸め制御タイプ演算
非メモリアクセス完全丸め制御タイプ演算910命令テンプレートにおいて、ベータフィールド954は、含まれるコンテンツが静的な丸めを提供する丸め制御フィールド954Aとして解釈される。本願発明の説明される実施形態においては、丸め制御フィールド954Aは全浮動小数点例外抑制(SAE)フィールド956、および、丸め演算制御フィールド958を含むが、代替的な実施形態においては、これらのコンセプトの両方を同じフィールドにエンコードする、または、これらのコンセプト/フィールドのうち一方、または他方のみを有する(例えば、丸め演算制御フィールド958のみを有する)。
SAEフィールド956−このコンテンツは、例外イベント報告を無効化するかどうかを区別する。抑制が有効であることをSAEフィールド956のコンテンツが示す場合、任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない。
丸め演算制御フィールド958−このコンテンツは、複数の丸め演算(例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め)からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド958は、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド950のコンテンツは、レジスタ値よりも優位である(そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である)。
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセスデータ変換タイプ演算915命令テンプレートにおいて、ベータフィールド954は、複数のデータ変換(例えば、データ変換、スウィズル、ブロードキャスト)のうち何れが実行されるかを含まれるコンテンツが区別するデータ変換フィールド954Bとして解釈される。
クラスAのメモリアクセス命令テンプレート
クラスAのメモリアクセス920命令テンプレートの場合、アルファフィールド952は、含まれるコンテンツが削除ヒントのうちいずれが用いられるかを区別する(図9Aにおいて、一時的952B.1および非一時的952B.2がそれぞれ、メモリアクセス一時的925命令テンプレートおよびメモリアクセス非一時的930命令テンプレートに関して特定される)削除ヒントフィールド952Bとして解釈され、ベータフィールド954は、含まれるコンテンツが複数のデータ操作動作(プリミティブとしても知られる)のうちいずれが実行されるか(例えば、操作なし、ブロードキャスト、ソースのアップコンバート、および宛て先のダウンコンバート)を区別するデータ操作フィールド954Cとして解釈される。メモリアクセス920命令テンプレートは、スケールフィールド960を含み、場合によっては、変位フィールド962Aまたは変位スケールフィールド962Bを含む。
ベクトルメモリ命令は、変換のサポートと共に、メモリからのベクトルロード、およびメモリへのベクトル格納を実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の点で、書き込みマスクとして選択されたベクトルマスクのコンテンツによって指示されて実際に転送される要素と共に、メモリから、またはメモリへデータを転送する。図9Aにおいて、角が丸められた正方形は、フィールド内に特定値が存在することを示すのに用いられている(例えば、修飾子フィールド946のメモリアクセス946B、アルファフィールド952/削除ヒントフィールド952Bの一時的952B.1、および非一時的952B.2)。
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシュするのが有利である程度に直ぐに再度用いられる可能性が高いデータである。しかし、これはヒントであり、複数の異なるプロセッサが、ヒントを全く無視するなど複数の異なるやり方で実行し得る。
メモリアクセス命令テンプレート−非一時的
非一時的データは、第1レベルキャッシュでキャッシュするのが有利ではない程度に直ぐには再度用いられる可能性が低く、削除の高い優先度を与えられるべきデータである。しかし、これはヒントであり、複数の異なるプロセッサが、ヒントを全く無視するなど複数の異なるやり方で実行し得る。
クラスB命令テンプレート
クラスB命令テンプレートの場合、アルファフィールド952は、書き込みマスクフィールド970により制御される書き込みマスキングがマージングであるかゼロ化であるかを含まれるコンテンツが区別する書き込みマスク制御(Z)フィールド952Cとして解釈される。
クラスBの非メモリアクセス命令テンプレート
クラスBの非メモリアクセス905命令テンプレートの場合、ベータフィールド954の一部は、含まれるコンテンツが複数の異なるオーグメンテーション動作タイプのうちいずれが実行されるのかを区別する(例えば、丸め957A.1およびベクトル長さ(VSIZE)957A.2がそれぞれ、非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算912命令テンプレート、および非メモリアクセス書き込みマスク制御VSIZEタイプ演算917命令テンプレートに関して特定される)RLフィールド957Aとして解釈され、ベータフィールド954の残りは、特定されたタイプの動作のうちいずれが実行されるのかを区別する。図9Aおよび9Bにおいて、角が丸められたブロックは、特定値(例えば、修飾子フィールド946の非メモリアクセス946A、RLフィールド957Aの丸め957A.1およびVSIZE957A.2)が存在することを示すのに用いられている。非メモリアクセス905命令テンプレートにおいて、スケールフィールド960、変位フィールド962A、および、変位スケールフィールド962Bは存在しない。
非メモリアクセス命令テンプレート−書き込みマスク制御部分的丸め制御タイプ演算
非メモリアクセス書き込みマスク制御部分的丸め制御タイプ演算910命令テンプレートにおいて、ベータフィールド954の残りは、丸め演算フィールド959Aとして解釈され、例外イベント報告が無効化される(任意の命令はあらゆるタイプの浮動小数点例外フラグを報告せず、浮動小数点例外ハンドラを立ち上げない)。
丸め演算制御フィールド959A−丸め演算制御フィールド958とちょうど同じようにこのコンテンツは、複数の丸め演算(例えば、端数切り上げ、端数切り捨て、ゼロに丸め、および最も近い値に丸め)からなるグループのうち何れを実行するかを区別する。よって、丸め演算制御フィールド959Aは、命令毎に丸めモードを変更することを可能とし、よって、このようなことが必要である場合に特に有用である。丸めモードを特定するための制御レジスタをプロセッサが含む本願発明の一実施形態において、丸め演算制御フィールド950のコンテンツは、レジスタ値よりも優位である(そのような制御レジスタに対し格納−変更−復元を実行する必要なく丸めモードを選択出来るということは有利である)。
非メモリアクセス命令テンプレート−書き込みマスク制御VSIZEタイプ演算
非メモリアクセス書き込みマスク制御VSIZEタイプ演算917命令テンプレートにおいて、ベータフィールド954の残りは、複数のデータベクトル長さ(例えば、128、956、または1112バイト)のうち何れで実行されるかを含まれるコンテンツが区別するベクトル長さフィールド959Bとして解釈される。
クラスBのメモリアクセス命令テンプレート
クラスAのメモリアクセス920命令テンプレートの場合、ベータフィールド954の一部は、ブロードキャストタイプデータ操作が実行されるかどうかを含まれるコンテンツが区別するブロードキャストフィールド957Bとして解釈され、ベータフィールド954の残りは、ベクトル長さフィールド959Bとして解釈される。メモリアクセス920命令テンプレートは、スケールフィールド960を含み、場合によっては、変位フィールド962Aまたは変位スケールフィールド962Bを含む。
フィールドについての追加の説明
汎用のベクトルフレンドリーな命令形式900に関し、フルオペコードフィールド974は、形式フィールド940、ベース動作フィールド942、およびデータ要素幅フィールド964を含むものとして示した。フルオペコードフィールド974がこれらのフィールド全てを含む一実施形態を示したが、これらのフィールド全てをサポートしない実施形態においては、フルオペコードフィールド974はこれらのフィールドの全ては含まない。フルオペコードフィールド974は演算コードを提供する。
オーグメンテーション動作フィールド950、データ要素幅フィールド964、および書き込みマスクフィールド970は、汎用のベクトルフレンドリーな命令形式で、命令毎にこれらの特徴全てを特定することを可能とする。
書き込マスクフィールドおよびデータ要素幅フィールドを組み合わせると、複数の異なるデータ要素幅に基づいたマスクの適用を可能とするタイプ化された命令が生成される。
当該命令形式は、他のフィールドのコンテンツに基づいて異なる目的のために異なるフィールドを再利用するので、必要なビット数が比較的少なくて済む。例えば、一つの見方としては、修飾子フィールドのコンテンツが、図9Aおよび図9Bの非メモリアクセス905命令テンプレートと、図9Aおよび図9Bのメモリアクセス9250命令テンプレートとの間で選択と行い、クラスフィールド968のコンテンツが、それら非メモリアクセス905命令テンプレートのうち、図9Aの命令テンプレート910/915、および、図9Bの命令テンプレート912/917から選択を行い、クラスフィールド968のコンテンツが、それらメモリアクセス920命令テンプレートのうち、図9Aの命令テンプレート925/930、および、図9Bの命令テンプレート927から選択を行う。他の見方では、クラスフィールド968のコンテンツが、図9Aおよび図9BのうちそれぞれのクラスAおよびクラスB命令テンプレートから選択を行い、修飾子フィールドのコンテンツが、それらクラスAの命令テンプレートのうち、図9Aの命令テンプレート905、920から選択を行い、修飾子フィールドのコンテンツが、それらクラスB命令テンプレートのうち、図9Bの命令テンプレート905、920から選択を行う。クラスフィールドのコンテンツがクラスAの命令テンプレートを示す場合、修飾子フィールド946のコンテンツが、アルファフィールド952(RSフィールド952AおよびEHフィールド952B)の解釈を選択する。同様に、修飾子フィールド946およびクラスフィールド968のコンテンツが、アルファフィールドがRSフィールド952A、EHフィールド952B、または書き込みマスク制御(Z)フィールド952Cとして解釈されるかの選択を行う。クラスフィールドおよび修飾子フィールドがクラスAのメモリアクセス動作を示す場合、オーグメンテーションフィールドのベータフィールドの解釈は、RSフィールドのコンテンツに基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBの非メモリアクセス動作を示す場合には、ベータフィールドの解釈は、RLフィールドのコンテンツに依存する。クラスフィールドおよび修飾子フィールドがクラスAのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドの解釈は、ベース動作フィールドのコンテンツに基づいて変化し、クラスフィールドおよび修飾子フィールドがクラスBのメモリアクセス動作を示す場合には、オーグメンテーションフィールドのベータフィールドのブロードキャストフィールド957Bの解釈は、ベース動作フィールドのコンテンツに基づいて変化する。よって、ベース動作フィールド、修飾子フィールド、および、オーグメンテーション動作フィールドの組み合わせにより、さらに幅広いタイプのオーグメンテーション動作を特定することが可能となる。
複数の異なる状況において、クラスAおよびクラスBに関し様々な命令テンプレートを用いるのが有益である。クラスAは、性能上の理由によりゼロ化−書き込みマスキング、または、より短いベクトル長さが所望される場合に有用である。例えば、ゼロ化により、人工的に宛て先とマージングを行う必要がなくリネームが用いられる場合に偽の依存性を避けることが可能となる。他の例として、ベクトル長さの制御は、ベクトルマスクを用いてより短いベクトルサイズをエミュレートする際に格納−ロード転送に関する課題を緩和する。クラスBは、1)浮動小数点の例外を可能とし(つまり、SAEフィールドのコンテンツがNoを示す)、同時に丸めモード制御を用いる、2)アップコンバート、スウィズル、スワップ、および/または、ダウンコンバートを用いることが出来る、並びに、3)グラフィックデータタイプで動作することが所望される場合に有用である。例えば、アップコンバート、スウィズル、スワップ、ダウンコンバート、およびグラフィックデータタイプは、異なる形式のソースを処理する際に必要となる命令の数を減らす。他の例としては、例外を可能とする性能により、指示される丸めモードでIEEEの規格に完全に準拠することが可能となる。
例示的な特定のベクトルフレンドリーな命令形式
図10A、図10B、および図10Cは、本願発明の実施形態に係る例示的な特定のベクトルフレンドリーな命令形式を示すブロック図である。図10A、図10B、および図10Cは、フィールドの場所、サイズ、解釈、および順序、並びに、これらのフィールドのうちいくつかの値を特定するという意味で特定的である、特定のベクトルフレンドリーな命令形式1000を示す。特定のベクトルフレンドリーな命令形式1000を用いて、x86命令の拡張を行ってもよく、よって、フィールのうちいくつかは、既存のx86命令のセット、およびその拡張(例えばAVX)に用いられるものと同様、または同じである。この形式は、拡張された既存のx86命令のセットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および、即値フィールドに対応したままである。図10A、図10B、および図10Cからのフィールドがマッピングされる図9Aおよび図9Bのフィールドが示されている。
なお、本願発明の実施形態は、例示を目的とし、汎用のベクトルフレンドリーな命令形式900の文脈で特定のベクトルフレンドリーな命令形式1000に関して説明するが、本願発明は、特に記される場合を除き、特定のベクトルフレンドリーな命令形式1000に限定されない。例えば、特定のベクトルフレンドリーな命令形式1000は特定のサイズのフィールドを有するものとして示されているが、汎用のベクトルフレンドリーな命令形式900に関しては様々なフィールドが様々なサイズを有し得る。特定の例として、データ要素幅フィールド964は特定のベクトルフレンドリーな命令形式1000において1ビットのフィールドとして示されているが、本願発明はそのように限定されない(つまり、汎用のベクトルフレンドリーな命令形式900のデータ要素幅フィールド964は他のサイズを有し得る)。
形式−図10A、図10B、および図10C
汎用のベクトルフレンドリーな命令形式900は、図10A、図10B、および図10Cで示される順序で以下に列挙するフィールドを含む。
EVEX Prefix(Bytes 0−3)EVEX Prefix1002−4バイト形式でエンコードされている。
形式フィールド940(EVEX Byte0,bits[7:0])−第1バイト(EVEX Byte 0)は、形式フィールド940であり、0x62(本願発明の一実施形態において、ベクトルフレンドリーな命令形式を区別するのに用いられる一意の値)を含む。
第2〜4バイト(EVEX Bytes 1−3)は特定の機能を提供する複数のビットフィールドを含む。
REXフィールド1005(EVEX Byte 1,bits[7−5])−EVEX.R bit field(EVEX Byte 1,bit[7]−R),EVEX.X bit field(EVEX byte1,bit[6]−X)、および957BEX byte 1,bit[5]−B)からなる。EVEX.R,EVEX.XおよびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同様の機能を提供し、1の補数形式を用いてエンコードされる。つまり、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。当分野で公知のように命令の他のフィールドは、レジスタインデックスの下位3ビット(rrr、xxx、およびbbb)をエンコードするので、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより、Rrrr、Xxxx、およびBbbbが形成され得る。
REX'フィールド1010−このフィールドは、REX'フィールド1010の最初の部分であり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEX Byte 1,bit[4]−R')である。本願発明の一実施形態において、以下に示す他のビットと共にこのビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードで)区別すべくビット反転形式で格納されるが、MODフィールドの11の値をMOD R/Mフィールド(以下に説明する)で受け入れない。代替的な実施形態においては、このビット、および以下に示された他のビットは反転形式で格納されない。1の値を用いて下位16のレジスタをエンコードする。言い換えると、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド1015(EVEX byte 1,bits[3:0]−mmmm)−このコンテンツは、示唆された先頭のオペコードバイト(0F、0F 38、または、0F 3)をエンコードする。
データ要素幅フィールド964(EVEX byte 2,bit[7]−W)−EVEX.Wと表記される。EVEX.Wは、データタイプの粒度(サイズ)を定義するのに用いられる(32ビットのデータ要素、または64ビットのデータ要素)。
EVEX.vvvv1020(EVEX Byte 2,bits[6:3]−vvvv)−EVEX.vvvvの役割には、以下のものが含まれ得る。1)EVEX.vvvvは、反転された(1の補数)形式で特定される第1ソースレジスタオペランドをエンコードし、2以上のソースオペランドの命令に有効である、2)EVEX.vvvvは、特定のベクトルシフトに関し、1の補数形式で特定される宛て先レジスタオペランドをエンコードする、3)EVEX.vvvvは、何れのオペランドもエンコードせず、当該フィールドは残しておかれ、1111bを含む。よって、EVEX.vvvvフィールド1020は、反転された(1の補数)形式で格納される第1ソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが、指定子のサイズを32レジスタに拡張するのに用いられる。
EVEX.U968クラスフィールド(EVEX byte 2,bit[2]−U)−EVEX.U=0の場合、クラスA、またはEVEX.U0を示し、EVEX.U=1の場合、クラスB、またはEVEX.U1を示す。
プレフィックスエンコードフィールド1025(EVEX byte 2,bits[1:0]−pp)−ベース動作フィールドに追加のビットを提供する。EVEXプレフィックス形式のレガシーSSE命令のサポートを提供するのに加え、このフィールドは、SIMDプレフィックスをコンパクト化するのに有用である(SIMDプレフィックスを表現するのに1バイトを必要とせず、EVEX Prefixは2ビットのみ必要とする)。一実施形態において、レガシー形式、およびEVEXプレフィックス形式の両方のSIMDプレフィックス(66H、F2H、F3H)を用いるレガシーSSE命令をサポートするべく、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドにエンコードされ、実行時には、デコーダのPLAに提供される前に、レガシーSIMDプレフィックスに拡張される(つまり、PLAは修正を加えることなくこれらのレガシー命令のレガシー形式およびEVEX形式を実行することが出来る)。より新しい命令はEVEXプレフィックスエンコードフィールドのコンテンツを直接的にオペコード拡張として用いることが出来るが、特定の実施形態においては、一貫性を保つべく同様のやり方で拡張が行われるが、これらのレガシーSIMDプレフィックスによる異なる意味の特定を可能とする。代替的な実施形態において、2ビットのSIMDプレフィックスエンコードをサポートするようPLAを再設計し、よって、拡張が必要とされない。
アルファフィールド952(EVEX byte 3,bit[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask controlおよびEVEX.Nとしても知られる。αを用いても示される−上述したように、このフィールドはコンテンツ特有のものである。追加の説明は本明細書において以下に示す。
ベータフィールド954(EVEX byte 3,bits[6:4]−SSS。EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βを用いても示される)−上述したように、このフィールドはコンテンツ特有のものである。追加の説明は本明細書において以下に示す。
REX'フィールド1010−このフィールドはREX'フィールドの残りであり、拡張された32レジスタセットの上位16および下位16のうちいずれかをエンコードするのに用いられ得るEVEX.V'ビットフィールド(EVEX Byte 3,bit[3]−V')である。このビットはビット反転形式で格納される。下位16のレジスタをエンコードするのに1の値が用いられる。言い換えると、EVEX.V'とEVEX.vvvvとを組み合わせてV'VVVVが形成される。
書き込みマスクフィールド970(EVEX byte 3,bits[2:0]−kkk)−このコンテンツは、上述したように書き込みマスクレジスタのレジスタのインデックスを特定する。本願発明の一実施形態において、特定値EVEX.kkk=000は特定の命令に対し書き込みマスクが用いられないことを示唆する特別な挙動を示す(このことは、全ての1にハードワイヤされた、またはマスキングハードウェアをバイパスするハードウェアにハードワイヤされた書き込みマスクを用いることを含む様々なやり方で実装することが出来る)。
リアルオペコードフィールド1030(Byte 4)このフィールドは、オペコードバイトとしても知られる。オペコードの一部はこのフィールドで特定される。
MOD R/Mフィールド1040(Byte 5)修飾子フィールド946(MODR/M.MOD,bits[7−6]−MODフィールド1042)−上述したように、MODフィールド1042のコンテンツは、メモリアクセス動作と非メモリアクセス動作とを区別する。このフィールドは本明細書において以下にさらに説明する。
MODR/M.regフィールド1044,bits[5−3]−ModR/M.regフィールドの役割は、2つの状況に要約することが出来る。ModR/M.regが、宛て先レジスタオペランド、およびソースレジスタオペランドのうちいずれかをエンコードする。または、ModR/M.regが、オペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられない。
MODR/M.r/mフィールド1046,bits[2−0]−ModR/M.r/mフィールドの役割には以下のものが含まれ得る。ModR/M.r/mが、メモリアドレスを参照する命令オペランドをエンコードする。または、ModR/M.r/mが、宛て先レジスタオペランド、およびソースレジスタオペランドのいずれかをエンコードする。
スケール、インデックス、ベース(SIB)バイト(Byte 6)スケールフィールド960(SIB.SS,bits[7−6]−上述したように、スケールフィールド960のコンテンツは、メモリアドレスの生成に用いられる。このフィールドは本明細書において以下にさらに説明する。
SIB.xxx1054(bits[5−3])、および、SIB.bbb1056(bits[2−0])−これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関連して上記にて参照した。
変位バイト(Byte 7、または、Bytes 7−10)変位フィールド962A(Bytes 7−10)−MODフィールド1042が10を含む場合、バイト7−10は変位フィールド962Aであり、レガシー32ビットの変位(disp32)と同じく動作し、バイト粒度で動作する。
変位係数フィールド962B(Byte 7)−MODフィールド1042が01を含む場合、バイト7は変位係数フィールド962Bである。このフィールドの場所は、バイト粒度で動作するレガシーx86命令セットの8ビット変位(disp8)の場所と同じである。disp8は符号が拡張されているので、−128〜127バイトのオフセットのみに対応出来る。64バイトのキャッシュに関しては、disp8は、−128、−64、0、および64の4つの実際に有用な値にのみ設定され得る8ビットを用いる。さらに大きな範囲が必要とされることが多いので、disp32が用いられる。しかし、disp32は4バイトを必要とする。disp8およびdisp32と対照的に、変位係数フィールド962Bはdisp8の再解釈である。変位係数フィールド962Bを用いる場合、実際の変位は、変位係数フィールドのコンテンツにメモリオペランドアクセスのサイズ(N)を乗算して決定される。このタイプの変位は、disp8*Nと示される。これにより、平均の命令長さが短くなる(変位に関して用いられるよりも1つのバイトがより大きな範囲に対して用いられる)。そのような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、よって、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという仮定に基づいている。言い換えると、変位係数フィールド962Bはレガシーx86命令セットの8ビット変位に置き換わる。よって、変位係数フィールド962Bは、x86命令セットの8ビット変位と同じやり方でエンコードされ(つまり、ModRM/SIBのエンコードルールには変更がない)、disp8がdisp8*Nにオーバーロードされる(overloaded)点だけが異なる。言い換えると、エンコードルールまたはエンコード長さには変化がないが、(バイトごとのアドレスオフセットを得るには、メモリオペランドのサイズで変位をスケーリングする必要がある)ハードウェアによる変位値の解釈にのみ変化がある。
即値
即値フィールド972は上述したように動作する。
例示的なレジスタアーキテクチャ−図11
図11は、本願発明の一実施形態に係るレジスタアーキテクチャ1100のブロック図である。レジスタアーキテクチャのレジスタファイルおよびレジスタを以下に列挙する。
ベクトルレジスタファイル1110
示される実施形態において、1112ビットの幅を有する32個のベクトルレジスタがある。これらのレジスタをzmm0〜zmm31と呼ぶ。最初の16個のレジスタの下位956ビットは、レジスタymm0〜16にオーバーレイされて(overlaid)いる。最初の16zmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされている。特定のベクトルフレンドリーな命令形式1000は以下の表に示すようにこれらオーバーレイされたレジスタファイルに対して動作する。
Figure 2014510351
言い換えると、ベクトル長さフィールド959Bは、最大長さおよび1以上の他のより短い長さのうちから選択を行う。ここでそのようなより短い長さのそれぞれは先行する長さの半分である。ベクトル長さフィールド959Bを有さない命令テンプレートは、最大ベクトル長さで動作する。さらに、一実施形態において、特定のベクトルフレンドリーな命令形式1000のクラスB命令テンプレートは、パックされた、またはスカラの単/倍精度浮動小数点データ、およびパックされた、またはスカラの整数データに対し動作する。スカラ演算は、zmm/ymm/xmmレジスタの下位のデータ要素の位置に対して行われる演算である。上位のデータ要素の位置は命令の前の位置と同じままである、または実施形態によってはゼロにされる。
書き込みマスクレジスタ1115−示される実施形態において、それぞれサイズが64ビットである8個の書き込みマスクレジスタ(k0〜k7)がある。上述したように、本願発明の一実施形態において、ベクトルマスクレジスタk0は書き込みマスクとして用いることが出来ない。エンコードの際には、このフィールドは通常k0が書き込みマスクに用いられることを示し、0xFFFFのハードワイヤされた書き込みマスクを選択し、効果的に当該命令の書き込みマスクを無効化する。
マルチメディア拡張制御ステータスレジスタ(MXCSR)1120−示される実施形態において、この32ビットレジスタは浮動小数点演算に用いられるステータスおよび制御ビットを提供する。
汎用レジスタ1125−示される実施形態において、メモリオペランドに対応する既存のx86アドレシングモードと用いられる16個の64ビット汎用レジスタがある。これらのレジスタはRAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、および、R8〜R15で示される。
拡張フラグ(EFLAGS)レジスタ1130−示される実施形態において、この32ビットのレジスタは、多くの命令の結果を記録するのに用いられる。
浮動小数点制御ワード(FCW)レジスタ1135、および、浮動小数点ステータスワード(FSW)レジスタ1140−示される実施形態において、これらのレジスタは、FCWの場合に丸めモード、例外マスク、およびフラグを設定し、FSWの場合に例外の記録をつけるべく、x87命令セット拡張によって用いられる。
MMXパックド整数フラットレジスタファイル1150がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1145−示される実施形態において、x87スタックは、x87命令セット拡張を用いる32/64/80ビット浮動小数点データに対するスカラ浮動小数点演算を実行するのに用いられる8個の要素のスタックであり、MMXレジスタは、64ビットのパックされた整数データに対する演算を実行し、MMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のオペランドを保持するのに用いられる。
セグメントレジスタ1155−示される実施形態において、セグメント化されたアドレス生成に用いられるデータを格納するのに用いられる6個の16ビットレジスタがある。
RIPレジスタ1165−示される実施形態において、この64ビットレジスタは、命令ポインタを格納する。
本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられる。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられる。
例示的なインオーダープロセッサアーキテクチャ−図12Aおよび図12B
図12Aおよび図12Bは、例示的なインオーダープロセッサアーキテクチャのブロック図を示す。これらの例示的な実施形態は、ワイドベクトルプロセッサ(VPU)で補強されたインオーダーCPUコアの複数のインスタンシエイションに基づいて設計されている。コアはe14tアプリケーションに応じて、何らかの所定の関数ロジック、メモリI/Oインタフェース、および、他の必要なI/Oロジックと高帯域幅インターコネクトネットワークを介して通信を行う。例えば、スタンドアローンGPUとしての本実施形態の実施は、典型的にはPCIeバスを含む。
図12Aは、本願発明の実施形態に係る、シングルCPUコア、当該シングルCPUコアのオンダイインターコネクトネットワーク1202との接続、およびレベル2(L2)キャッシュ1204のローカルサブセットを示すブロック図である。命令デコーダ1200は、特定のベクトル命令形式1000を含む拡張を有するx86命令セットをサポートする。本願発明の一実施形態においては、(設計を単純にするべく)スカラユニット1208およびベクトルユニット1210は別個のレジスタセットを用い(それぞれ、スカラレジスタ1212、およびベクトルレジスタ1214)、これらの間で転送されるデータはメモリへ書き込まれ、レベル1(L1)キャッシュ1206から読み出されるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられる(例えば、1つのレジスタセットが用いられる、または、書き込みおよび読み出しが行われることなく2つのレジスタファイル間でデータの転送を可能とする通信パスが含まれる)。
L1キャッシュ1206は、メモリのスカラユニットおよびベクトルユニットへのキャッシュのための低いレイテンシアクセスを可能とする。ベクトルフレンドリーな命令形式のロードオペランド命令と併せて、このことは、拡張されたレジスタファイルと幾分同じようにL1キャッシュ1206を扱えることを意味する。このことにより、多くのアルゴリズム、特に削除ヒントフィールド952Bのアルゴリズムに関して性能を向上させられる。
L2キャッシュ1204のローカルサブセットは、CPUコア毎に1つの、別個のローカルサブセットへ分割されるグローバルなL2キャッシュの一部である。各CPUは、L2キャッシュ1204の自身のローカルサブセットへの直接的なアクセスパスを有する。CPUコアによって読み出されたデータは、そのL2キャッシュサブセット1204に格納され、それぞれ自身のローカルL2キャッシュサブセットにアクセスする他のCPUと並行して迅速にアクセスすることが出来る。CPUコアによって書き込まれたデータは、自身のL2キャッシュサブセット1204に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークによって、共有されるデータの一貫性が確保される。
図12Bは、本願発明の実施形態に係る、図12AのCPUコアの一部を示す分解図である。図12BはL1キャッシュ1204のL1データキャッシュ1206A部分、並びに、ベクトルユニット1210およびベクトルレジスタ1214の詳細を示す。詳細には、ベクトルユニット1210は整数、単精度浮動小数点、および倍精度浮動小数点命令を実行する16ワイドベクトル処理ユニット(VPU)(16ワイドALU1228を参照)である。VPUは、スウィズルユニット1220のレジスタインプットのスウィズリング、数値変換ユニット1222A、1222Bの数値変換、およびメモリインプットの複製ユニット1224の複製をサポートする。書き込みマスクレジスタ1226により、結果として生じるベクトル書き込みの予測が可能となる。
レジスタデータは、例えば行列の乗算をサポートするなど、様々なやり方でスウィズリング出来る。メモリからのデータは、複数のVPUレーンに対して複製出来る。このことはグラフィックおよび非グラフィック両方の並列データ処理に共通の演算であり、キャッシュの効率性をはるかに向上させる。
リングネットワークは、CPUコア、L2キャッシュ、および他のロジックグロックなどのエージェントが互いにチップ内で通信を行えるよう双方向性である。各リングデータパスは、一方向あたり1112ビット幅である。
例示的なアウトオブオーダーアーキテクチャ−図13
図13は、本願発明の実施形態に係る例示的なアウトオブオーダーアーキテクチャを示すブロック図である。詳細には、図13は、ベクトルフレンドリーな命令形式およびその実行に対応するよう修正された周知の例示的なアウトオブオーダーアーキテクチャを示す。図13において、矢印は2以上のユニットの結合を示し、矢印の方向はそれらユニット間のデータフローの方向を示す。図13は、実行エンジンユニット1310およびメモリユニット1315に結合されたフロントエンドユニット1305を含む。実行エンジンユニット1310はさらに、メモリユニット1315に結合されている。
フロントエンドユニット1305は、レベル2(L2)分岐予測ユニット1322に結合されたレベル1(L1)分岐予測ユニット1320を含む。L1およびL2分岐予測ユニット1320、1322は、L1命令キャッシュユニット1324に結合されている。L1命令キャッシュユニット1324は、命令トランスレーションルックアサイドバッファ(TLB)1326に結合され、命令トランスレーションルックアサイドバッファ(TLB)1326はさらに、命令フェッチ/プリデコードユニット1328に結合されている。命令フェッチ/プリデコードユニット1328は、命令キューユニット1330に結合され、命令キューユニット1330はさらにデコードユニット1332に結合されている。デコードユニット1332は、1個の複雑なデコーダユニット1334、および3個の単純なデコーダユニット1336、1338、1340を備える。デコードユニット1332は、マイクロコードROMユニット1342を含む。デコードユニット1332は、デコード段階について述べたセクションで上述したように動作してもよい。L1命令キャッシュユニット1324はさらに、メモリユニット1315内のL2キャッシュユニット1348に結合されている。命令TLBユニット1326はさらに、メモリユニット1315内の第2レベルTLBユニット1346に結合されている。デコードユニット1332、マイクロコードROMユニット1342、およびループストリーム検出ユニット1344はそれぞれ、実行エンジンユニット1310内のリネーム/アロケータユニット1356に結合されている。
実行エンジンユニット1310は、リネーム/アロケータユニット1356を含み、リネーム/アロケータユニット1356は、リタイヤユニット1374および統合スケジューラユニット1358に結合されている。リタイヤユニット1374はさらに、実行ユニット1360に結合され、リオーダバッファユニット1378を含む。統合スケジューラユニット1358はさらに、物理レジスタファイルユニット1376に結合され、物理レジスタファイルユニット1376は実行ユニット1360に結合されている。物理レジスタファイルユニット1376は、ベクトルレジスタユニット1377A、書き込みマスクレジスタユニット1377B、および、スカラレジスタユニット1377Cを備える。これらのレジスタユニットは、ベクトルレジスタ1110、ベクトルマスクレジスタ1115、および、汎用レジスタ1125を提供してもよく、物理レジスタファイルユニット1376は、示されていない追加のレジスタファイルを含んでもよい(例えば、MMXパックド整数フラットレジスタファイル1150に対しエイリアスされたスカラ浮動小数点スタックレジスタファイル1145)。実行ユニット1360は3個のミックスされたスカラおよびベクトルユニット1362、1364、1372、ロードユニット1366、格納アドレスユニット1368、および、格納データユニット1370を含む。ロードユニット1366、格納アドレスユニット1368、および、格納データユニット1370はそれぞれさらに、メモリユニット1315内のデータTLBユニット1352に結合されている。
メモリユニット1315は、第2レベルTLBユニット1346を含み、第2レベルTLBユニット1346は、データTLBユニット1352に結合されている。データTLBユニット1352はL1データキャッシュユニット1354に結合されている。L1データキャッシュユニット1354はさらに、L2キャッシュユニット1348に結合されている。いくつかの実施形態において、L2キャッシュユニット1348はさらに、メモリユニット1315内、および/または外のL3およびさらに高いレベルのキャッシュユニット1350に結合されている。
例として、例示的なアウトオブオーダーアーキテクチャは、次のように処理パイプラインを実施する。1)命令フェッチ/プリデコードユニット1328がフェッチおよび長さデコード段階を実行する、2)デコードユニット1332がデコード段階を実行する、3)リネーム/アロケータユニット1356がアロケーションおよびリネーム段階を実行する、4)統合スケジューラユニット1358がスケジューリング段階を実行する、5)物理レジスタファイルユニット1376、リオーダバッファユニット1378、およびメモリユニット1315がレジスタ読み出し/メモリ読み出し段階を実行し、実行ユニット1360が実行/データ変換段階を実行する、6)メモリユニット1315およびリオーダバッファユニット1378が、書き戻し/メモリ書き込み段階を実行する、7)リタイヤユニット1374がROB読み出し段階を実行する、8)様々なユニットが例外取り扱い段階9164に関わってもよい、9)リタイヤユニット1374および物理レジスタファイルユニット1376がコミット段階を実行する。
例示的なシングルコアおよびマルチコアプロセッサ−図18
図18は、本願発明の実施形態に係る、集積メモリコントローラおよび集積グラフィックを備えたシングルコアプロセッサおよびマルチコアプロセッサ1800を示すブロック図である。図18において、実線の四角はシングルコア1802A、システムエージェント1810、および1以上のバスコントローラユニット1816からなるセットを含むプロセッサ1800を示し、破線の四角は、複数のコア1802A〜N、システムエージェントユニット1810内の1以上の集積メモリコントローラユニット1814からなるセット、および集積グラフィックロジック1808を含む代替的なプロセッサ1800を任意的な追加として示す。
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット1806からなるセット、複数の集積メモリコントローラユニット1814からなるセットに結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニット1806からなるセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュなど1以上の中間レベルのキャッシュ、最後のレベルのキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態においては、リングベースのインターコネクトユニット1812が集積グラフィックロジック1808、複数の共有キャッシュユニット1806からなるセット、および、システムエージェントユニット1810を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続する周知の技術をいくつか用いてもよい。
いくつかの実施形態において、1以上のコア1802A〜Nは、マルチスレッドに対応可能である。システムエージェント1810は、コア1802A〜Nの調整を行い動作させるコンポーネントを含む。システムエージェントユニット1810は、例えば、電力制御ユニット(PCU)、およびディスプレイユニットを含む。PCUは、コア1802A〜Nおよび集積グラフィックロジック1808の電力状況を制御するのに必要なロジックおよびコンポイーネントであるか、それらを含んでもよい。ディスプレイユニットが1以上の外部接続されたディスプレイを駆動する。
コア1802A〜Nは、アーキテクチャ、および/または命令セットに関して、同質、または異質のものであってもよい。例えば、コア1802A〜Nのうちいくつかはインオーダー(例えば、図12Aおよび図12Bで示すような)であり、他のコアは、アウトオブオーダー(例えば、図13に示すような)であってもよい。他の例として、コア1802A〜Nのうち2以上は、同じ命令セットを実行可能であり、他のコアは、その命令セットのサブセットのみ、または異なる命令セットを実行可能である。少なくとも1つのコアが、本明細書で説明するベクトルフレンドリーな命令形式を実行可能である。
プロセッサは、米国カリフォルニア州サンタクララのIntel Corporationにより販売されるCore(登録商標)i3、i5、i7、2 Duo、およびQuad、Xeon(登録商標)、またはItanium(登録商標)プロセッサなどの汎用プロセッサであってよい。代替的に、プロセッサは他の企業が販売するものであってもよい。プロセッサは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、コプロセッサ、埋め込み型プロセッサなどの特定用途プロセッサであってもよい。プロセッサは1以上のチップ上で実装されてもよい。プロセッサ1800は、BiCMOS、CMOS、またはNMOSなどの処理技術をいくつか用い、1以上の基板の一部である、および/または、それら基板上で実装されてもよい。
例示的なコンピュータシステムおよびプロセッサ−図14〜17
図14〜16は、プロセッサ1800を含めるのに適した例示的なシステムを示す。図17は、1以上のコア1802を含みうる例示的なシステムオンチップ(SoC)を示す。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関する当分野で公知の他のシステム設計および構成も適している。一般的に、本明細書で開示されるプロセッサ、および/または他の実行ロジックを組み込むことが可能な非常に幅広い種類のシステムまたは電子デバイスが適している。
図14は、本願発明の一実施形態に係るシステム1400を示すブロック図である。システム1400は、1以上のプロセッサ1410、1415を含み、1以上のプロセッサ1410、1415はグラフィックメモリコントローラハブ(GMCH)1420に結合されている。追加のプロセッサ1415は任意で用いられるので、図14において破線で示されている。
各プロセッサ1410、1415はプロセッサ1800の何らかのバージョンであってよい。しかし、集積グラフィックロジックおよび集積メモリ制御ユニットがプロセッサ1410、1415内に存在するということは考えられにくい。
図14は、GMCH1420が、例えばダイナミックランダムアクセスメモリ(DRAM)であってよいメモリ1440に結合されていてよいことを示す。DRAMは、少なくとも一実施形態において、非揮発性キャッシュに関連付けられている。
GMCH1420は、チップセットである、またはチップセット一部である。GMCH1420はプロセッサ1410、1415と通信を行い、プロセッサ1410、1415とメモリ1440との間の相互作用を制御してもよい。またGMCH1420は、プロセッサ1410、1415と、システム1400の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態において、GMCH1420は、フロントサイドバス(FSB)1495などのマルチドロップバスを介してプロセッサ1410、1415と通信を行う。
さらに、GMCH1420は、ディスプレイ1445(フラットパネルディスプレイなど)に結合されている。GMCH1420は、集積グラフィックアクセラレータを含んでもよい。GMCH1420はさらに、様々な周辺デバイスをシステム1400に結合するのに用いられ得る、入力/出力(I/O)コントローラハブ(ICH)1450に結合されている。図14の実施形態においては、他の周辺デバイス1470と併せて、ICH1450に結合されている独立したグラフィックデバイスであってよい外部グラフィックデバイス1460が例として示されている。
代替的に、追加的な、または異なるプロセッサもシステム1400に存在してもよい。例えば、追加のプロセッサ1415には、プロセッサ1410と同じ追加のプロセッサ、プロセッサ1410と異質の、または対称的な追加のプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータ、またはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または他の何らかのプロセッサが含まれてよい。アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などの面で、物理リソース1410、1415毎に様々な利点がある。これらの利点の差は、処理要素1410、1415間の対称性または異質性を利用し有効に活用される。少なくとも一実施形態において、様々な処理要素1410、1415が同じダイパッケージに存在してもよい。
図15は、本願発明の実施形態に係る第2システム1500を示すブロック図である。図15に示すようにマルチプロセッサシステム1500は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト1550で結合された第1プロセッサ1570および第2プロセッサ1580を含む。図15に示すように各プロセッサ1570、1580はプロセッサ1800の何らかのバージョンであってよい。
代替的に、1以上のプロセッサ1570、1580は、アクセラレータまたはフィールドプログラマブルゲートアレイなど、プロセッサ以外の要素であってよい。
2つのプロセッサ1570、1580のみが示されているが、本願発明の態様はこのことに限定されない。他の実施形態において、1以上の追加的な処理要素が任意のプロセッサに存在してもよい。
プロセッサ1570はさらに、集積メモリコントローラハブ(IMC)1572、およびポイントツーポイント(P−P)1576、1578を含んでもよい。同様に、第2プロセッサ1580は、IMC1582およびP−Pインタフェース1586、1588を含んでもよい。プロセッサ1570、1580は、PtPインタフェース回路1578、1588を用いてポイントツーポイント(PtP)インタフェース1550を介してデータを交換してもよい。図15に示すようにIMC1572、1582は各プロセッサを、対応するメモリ、つまり各プロセッサにローカルに取り付けられた主メモリの一部であってもよいメモリ1542およびメモリ1544に結合する。
プロセッサ1570、1580はそれぞれ、ポイントツーポイントインタフェース回路1576、1594、1586、1598を用いて個々のP−Pインタフェース1552、1554を介しチップセット1590とデータを交換してもよい。またチップセット1590は、高性能グラフィックインタフェース1539を介して高性能グラフィック回路1538とデータを交換してもよい。
プロセッサが低電力モードにされた場合、いずれか、または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されるように、共有キャッシュ(図示せず)は、両プロセッサ外でいずれかのプロセッサに含まれ、かつ、P−Pインターコネクトを介しプロセッサと接続されていてもよい。
チップセット1590は、インタフェース1596を介して第1バス1516に結合されていてもよい。一実施形態において、第1バス1516は、Peripheral Component Interconnect(PCI)バス、或いは、PCI Expressバスまたは他の第3世代I/Oインターコネクトバスなどのバスであってもよい。ただし、本願発明の態様はこのことに限定されない。
図15に示すように、第1バス1516を第2バス1520へ結合するバスブリッジ1518と併せて、様々なI/Oデバイス1514が第1バス1516に結合されていてもよい。一実施形態において、第2バス1520はlow pin count(LPC)バスであってもよい。一実施形態において、キーボード/マウス1522、通信デバイス1526、並びに、ディスクドライブまたは、コード1530を含んでよい他の大容量記憶装置などのデータ格納ユニット1528など様々なデバイスが第2バス1520に結合されていてもよい。さらに、オーディオI/O1524が第2バス1520に結合されていてもよい。なお他のアーキテクチャを用いることも可能である。例えば、図15のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してもよい。
図16は、本願発明の実施形態に係る第3システム1600を示すブロック図である。図15および図16において同様の要素は、同様の参照符号が付されており、図15の特定の態様は、図16の他の態様を曖昧にすることを避けるべく図16において省略されている。
図16は、処理要素1570、1580がそれぞれ集積メモリ−I/O制御ロジック(「CL」)1572、1582を含んでよいことを示す。少なくとも一実施形態において、CL1572、1582は図14および図15に関連して上述したようなメモリコントローラハブロジック(IMC)を含んでもよい。加えて、CL1572、1582はI/O制御ロジックも含んでよい。図16は、メモリ1542、1544のみがCL1572、1582に結合されているのではなく、I/Oデバイス1614も制御ロジック1572、1582に結合されていることを示す。レガシーI/Oデバイス1615がチップセット1590に結合されている。
図17は、本願発明の実施形態に係るSoC1700のブロック図を示す。同様の要素には同様の参照符号が付されている。また破線の四角はより高度なSoCの、任意で用いられる特徴を示す。図17において、インターコネクトユニット1702は、1以上のコア1802A〜Nからなるセットおよび共有キャッシュユニット1806を含むアプリケーションプロセッサ1710と、システムエージェントユニット1810と、バスコントローラユニット1816と、集積メモリコントローラユニット1814と、集積グラフィックロジック1808、スチールカメラ、および/またはビデオカメラ機能を提供するイメージプロセッサ1724、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ1726、および、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ1728を含みうる1以上のメディアプロセッサ1720からなるセットと、スタティックランダムアクセスメモリ(SRAM)ユニット1730と、ダイレクトメモリメモリアクセス(DMA)ユニット1732と、1以上の外部ディスプレイに結合されるディスプレイユニット1740とに結合されている。
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性、および非揮発性のメモリ、および/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
プログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力データに適用されてもよい。出力情報は、公知の方式で、1以上の出力デバイスに適用されてもよい。この適用の目的において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。「IPコア」とし知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。
そのような機械可読媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー(登録商標)ディスク、光学式ディスク(コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクなどを含む他の何らかのタイプのディスク、リードオンリーメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラム可能リードオンリーメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ(EEPROM)、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。
したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定めるベクトルフレンドリーな命令形式の命令を保持する、またはHardware Description Language(HDL)などの設計データを保持する非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される1以上の他の命令にトランスレートする(スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて)、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。
図19は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図19は、少なくとも1つのx86命令セットコアを備えるプロセッサ1916によりネイティブに実行され得るx86バイナリコード1906を生成するべくx86コンパイラ1904を用いてコンパイルされている高水準言語1902のプログラムを示す(コンパイルされた命令のうちいくつかがベクトルフレンドリーな命令形式であるものと想定されている)。少なくとも1つのx86命令セットコアを備えるプロセッサ1916は、(1)Intelx86命令セットコアの命令の実質的な部分、または、(2)少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るべく、少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。x86コンパイラ1904は、少なくとも1つのx86命令セットコアを備えるプロセッサ1916で追加のリンケージ処理あり、またはなしで実行され得るx86バイナリコード1906(例えばオブジェクトコード)を生成するべく動作可能なコンパイラを表す。同様に、図19は、少なくとも1つのx86命令セットコアを備えないプロセッサ1914(例えば、米国カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するコアを備えるプロセッサ、および/または米国カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを備えるプロセッサなど)によってネイティブに実行され得る代替的な命令セットバイナリコード1910を生成するべく、代替的な命令セットコンパイラ1908を用いてコンパイルされ得る高水準言語1902のプログラムを示す。命令コンバータ1912を用いて、x86命令セットコアを備えないプロセッサ1914によってネイティブに実行され得るコードへx86バイナリコード1906を変換する。この変換されたコードが、代替的な命令セットバイナリコード1910と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ1912は、エミュレーション、シミュレーション、または他の何らかの処理により、プロセッサ、或いは、x86命令セットプロセッサまたはコアを有さない他の電子デバイスがx86バイナリコード1906を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
本明細書で開示されるベクトルフレンドリーな命令形式の命令の特定の動作は、ハードウェアコンポーネントで実行されてもよく、当該命令をプログラムされた回路または他のハードウェアコンポーネントによるそれらの動作の実行を引き起こす、または少なくともそのような結果をもたらすのに用いられる機械可読命令として実施され得る。回路には、ほんの数例を上げると、汎用プロセッサ、特定用途プロセッサ、またはロジック回路が含まれる。また動作は、場合によっては、ハードウェアとソフトウェアとの組み合わせによって実施されてもよい。実行ロジック、および/またはプロセッサは、命令によって特定される結果オペランドを格納するよう指示する機械命令、または当該機械命令から抽出された1以上の制御信号に応答する特定的な、または特定の回路または他のロジックを含んでもよい。例えば、本明細書で開示される命令の実施形態は、図14〜17の1以上のシステムで実行されてもよく、ベクトルフレンドリーな命令形式の命令の実施形態は、システムによって実行されるプログラムコードに格納されてもよい。加えて、これら図面の処理要素は、本明細書で詳述されたパイプライン、および/またはアーキテクチャ(例えば、インオーダーアーキテクチャ、およびアウトオブオーダーアーキテクチャ)のうち1つを用いてもよい。例えば、インオーダーアーキテクチャのデコードユニットは、命令をデコードし、デコードされた命令をベクトルユニットまたはスカラユニットに渡すなどしてもよい。
上記の説明は、本願発明の好ましい実施形態を示すことを目的として提供された。上記の説明から、成長が早くさらなる進歩の予測が容易ではない当技術分野において特に、本願発明は構造に関して、また詳細部分において、当業者によって本願発明の原理から逸脱することなく、添付の請求項およびそれらの同等物の範囲内で本願発明に修正が加えられ得ることは明らかである。例えば、方法の1以上の動作は組み合わせられ得る、またはさらに分割され得る。
代替的な実施形態
ベクトルフレンドリーな命令形式がネイティブに実行される実施形態を説明してきたが、代替的な実施形態においては、異なる命令セットを実行する(例えば、米国カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するプロセッサ、米国カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するプロセッサなどの)プロセッサ上で実行されるエミュレーションレイヤーを介してベクトルフレンドリーな命令形式を実行してもよい。また、図中のフロー図は本願発明の特定の実施形態によって実行される動作の特定の順序を示すが、そのような順序は例示であることが理解されるべきである(例えば、代替的な実施形態においては、それらの動作を異なる順序で実行する、特定の動作を組み合わせる、または特定の動作を同時に行うなど)。
以上の説明において、説明を目的とし、本願発明の実施形態をよりよく理解いただけるように様々な特定の詳細を示してきた。しかし当業者であれば、それら特定の詳細のいくつかを用いずとも1以上の他の実施形態が実施可能であることを理解されよう。説明された特定の実施形態は、本願発明を限定するのではなく、本願発明の実施形態を例示するべく示されている。本願発明の態様は上記された特定の例によっては定められず、以下の請求項によってのみ定められる。

Claims (20)

  1. コンピュータプロセッサでjump near if the writemask is zero(JKZD)命令を実行する方法であり、
    書き込みマスクオペランドおよび相対オフセットを含む前記JKZD命令をフェッチする工程と、
    フェッチされた前記JKZD命令をデコードする工程と、
    前記書き込みマスクの全てのビットがゼロである場合に、前記フェッチされたJKZD命令を実行し、前記JKZD命令の命令ポインタおよび前記相対オフセットを用いて計算されるターゲット命令のアドレスへ条件付きでジャンプする工程と
    を備える方法。
  2. 前記書き込みマスクが16ビットレジスタである、請求項1に記載の方法。
  3. 前記相対オフセットが8ビットの即値である、請求項1または2に記載の方法。
  4. 前記相対オフセットが32ビットの即値である、請求項1または2に記載の方法。
  5. 前記JKZD命令の前記命令ポインタがEIPレジスタに格納される、請求項1から4のいずれか1項に記載の方法。
  6. 前記JKZD命令の前記命令ポインタがRIPレジスタに格納される、請求項1から4のいずれか1項に記載の方法。
  7. 前記JKZD命令を実行する工程がさらに、
    前記JKZD命令の前記命令ポインタに前記相対オフセットを加えた一時的命令ポインタを生成する工程と、
    前記一時的命令ポインタが前記JKZD命令を含むプログラムのコードセグメントリミット外でない場合、前記一時的命令ポインタを前記ターゲット命令の前記アドレスに設定する工程と、
    前記一時的命令ポインタが前記JKZD命令を含む前記プログラムの前記コードセグメントリミット外である場合、フォルトを生成する工程と
    を有する、請求項1から6のいずれか1項に記載の方法。
  8. 前記JKZD命令を実行する工程がさらに、前記一時的命令ポインタが前記JKZD命令を含む前記プログラムの前記コードセグメントリミット外でない場合、前記JKZD命令のオペランドサイズが16ビットであれば、前記一時的命令ポインタを前記ターゲット命令の前記アドレスに設定する工程の前に、前記一時的命令ポインタの上位2バイトをクリアする工程を有する、請求項7に記載の方法。
  9. コンピュータプロセッサでjump near if the writemask is not zero(JKNZD)命令を実行する方法であり、
    書き込みマスクオペランドおよび相対オフセットを含む前記JKNZD命令をフェッチする工程と、
    フェッチされた前記JKNZD命令をデコードする工程と、
    前記書き込みマスクの少なくとも1つのビットがゼロでない場合に、前記フェッチされたJKNZD命令を実行し、前記JKNZD命令の命令ポインタおよび前記相対オフセットを用いて計算されるターゲット命令のアドレスへ条件付きでジャンプする工程と
    を備える方法。
  10. 前記書き込みマスクが16ビットレジスタである、請求項9に記載の方法。
  11. 前記相対オフセットが8ビットの即値である、請求項9または10に記載の方法。
  12. 前記相対オフセットが32ビットの即値である、請求項9または10に記載の方法。
  13. 前記JKNZD命令の前記命令ポインタがEIPレジスタに格納される、請求項9から12のいずれか1項に記載の方法。
  14. 前記JKNZD命令の前記命令ポインタがRIPレジスタに格納される、請求項9から12のいずれか1項に記載の方法。
  15. 前記JKNZD命令を実行する工程がさらに、
    前記JKNZD命令の前記命令ポインタに前記相対オフセットを加えた一時的命令ポインタを生成する工程と、
    前記一時的命令ポインタが前記JKNZD命令を含むプログラムのコードセグメントリミット外でない場合、前記一時的命令ポインタを前記ターゲット命令の前記アドレスに設定する工程と、
    前記一時的命令ポインタが前記JKNZD命令を含む前記プログラムの前記コードセグメントリミット外である場合、フォルトを生成する工程と
    を有する、請求項9から14のいずれか1項に記載の方法。
  16. 前記実行する工程がさらに、前記一時的命令ポインタが前記JKNZD命令を含む前記プログラムの前記コードセグメントリミット外でない場合、前記JKNZD命令のオペランドサイズが16ビットであれば、前記一時的命令ポインタを前記ターゲット命令の前記アドレスに設定する工程の前に、前記一時的命令ポインタの上位2バイトをクリアする工程を有する、請求項15に記載の方法。
  17. 第1書き込みマスクオペランドおよび第1相対オフセットを含むjump near if the writemask is zero(JKZD)命令、並びに、第2書き込みマスクオペランドおよび第2相対オフセットを含むjump near if the writemask is not zero(JKNZD)命令をデコードするハードウェアデコーダと、
    デコードされた前記JKZD命令および前記JKNZD命令を実行する実行ロジックと
    を備え、
    前記デコードされたJKZD命令の実行は、前記第1書き込みマスクオペランドの全てのビットがゼロである場合に、前記JKZD命令の命令ポインタおよび前記第1相対オフセットを用いて計算される第1ターゲット命令のアドレスへの条件付きのジャンプを行い、
    前記デコードされたJKNZD命令の実行は、前記第2書き込みマスクオペランドの少なくとも1つのビットがゼロでない場合に、前記JKNZD命令の命令ポインタおよび前記第2相対オフセットを用いて計算される第2ターゲット命令のアドレスへの条件付きのジャンプを行う、装置。
  18. 前記実行ロジックは、ベクトル実行ロジックを有する、請求項17に記載の装置。
  19. 前記JKZD命令の前記第1書き込みマスクオペランドおよび前記JKNZD命令の前記第2書き込みマスクオペランドは、専用の16ビットレジスタである、請求項18に記載の装置。
  20. 前記JKZD命令および前記JKNZD命令の前記命令ポインタがEIPレジスタに格納される、請求項18または19に記載の装置。
JP2014502547A 2011-04-01 2011-12-12 マスクレジスタを用いてジャンプを行うシステム、装置、および方法 Active JP5947879B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,901 2011-04-01
US13/078,901 US20120254593A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for jumps using a mask register
PCT/US2011/064487 WO2012134561A1 (en) 2011-04-01 2011-12-12 Systems, apparatuses, and methods for jumps using a mask register

Publications (3)

Publication Number Publication Date
JP2014510351A true JP2014510351A (ja) 2014-04-24
JP2014510351A5 JP2014510351A5 (ja) 2015-05-21
JP5947879B2 JP5947879B2 (ja) 2016-07-06

Family

ID=46928903

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014502547A Active JP5947879B2 (ja) 2011-04-01 2011-12-12 マスクレジスタを用いてジャンプを行うシステム、装置、および方法

Country Status (8)

Country Link
US (1) US20120254593A1 (ja)
JP (1) JP5947879B2 (ja)
KR (1) KR101618669B1 (ja)
CN (1) CN103718157B (ja)
DE (1) DE112011105123T5 (ja)
GB (1) GB2502754B (ja)
TW (1) TWI467478B (ja)
WO (1) WO2012134561A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015158940A (ja) * 2011-04-01 2015-09-03 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
JP2022535982A (ja) * 2019-06-13 2022-08-10 フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド Gpuにおける明示的な個別マスクレジスタのマスク操作方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5976930B2 (ja) * 2012-08-08 2016-08-24 インテル コーポレイション バーチャルファンクションを無効にするコールのためのサポートを含むisaブリッジング
JP6187478B2 (ja) * 2013-01-11 2017-08-30 日本電気株式会社 インデックスキー生成装置及びインデックスキー生成方法並びに検索方法
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9411600B2 (en) * 2013-12-08 2016-08-09 Intel Corporation Instructions and logic to provide memory access key protection functionality
US9715432B2 (en) * 2014-12-23 2017-07-25 Intel Corporation Memory fault suppression via re-execution and hardware FSM
CN117591184B (zh) * 2023-12-08 2024-05-07 超睿科技(长沙)有限公司 Risc-v向量压缩乱序执行的实现方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57101938A (en) * 1980-12-18 1982-06-24 Fujitsu Ltd Operation controlling system by first read of mask
JPH05274143A (ja) * 1992-03-30 1993-10-22 Toshiba Corp 複合条件処理方式
US20110153990A1 (en) * 2009-12-23 2011-06-23 Ottoni Guilherme D System, apparatus, and method for supporting condition codes

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4084226A (en) * 1976-09-24 1978-04-11 Sperry Rand Corporation Virtual address translator
JPH0683858A (ja) * 1992-06-02 1994-03-25 Nec Corp ベクトル命令処理装置
JP3565314B2 (ja) * 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
US20100274988A1 (en) * 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
TWI244035B (en) * 2004-01-30 2005-11-21 Ip First Llc A mechanism and a microprocessor apparatus for performing an indirect near jump operation
US7409535B2 (en) * 2005-04-20 2008-08-05 International Business Machines Corporation Branch target prediction for multi-target branches by identifying a repeated pattern
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
TWI379230B (en) * 2008-11-14 2012-12-11 Realtek Semiconductor Corp Instruction mode identification apparatus and instruction mode identification method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57101938A (en) * 1980-12-18 1982-06-24 Fujitsu Ltd Operation controlling system by first read of mask
JPH05274143A (ja) * 1992-03-30 1993-10-22 Toshiba Corp 複合条件処理方式
US20110153990A1 (en) * 2009-12-23 2011-06-23 Ottoni Guilherme D System, apparatus, and method for supporting condition codes

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6014041372; インテル株式会社: インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・マニュアル 中巻 命令セット・リファレンス , 1997, 3-242頁〜3-244頁, CQ出版株式会社 *
JPN6014041374; 'インテル(R) エクステンデッド・メモリ64 テクノロジ・ソフトウェア・デベロッパーズ・ガイド 第1巻' [OnLine] , 2005, 1-5頁, インテル株式会社 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015158940A (ja) * 2011-04-01 2015-09-03 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US9513917B2 (en) 2011-04-01 2016-12-06 Intel Corporation Vector friendly instruction format and execution thereof
JP2017079078A (ja) * 2011-04-01 2017-04-27 インテル コーポレイション ベクトルフレンドリ命令フォーマット及びその実行
US10795680B2 (en) 2011-04-01 2020-10-06 Intel Corporation Vector friendly instruction format and execution thereof
US11210096B2 (en) 2011-04-01 2021-12-28 Intel Corporation Vector friendly instruction format and execution thereof
US11740904B2 (en) 2011-04-01 2023-08-29 Intel Corporation Vector friendly instruction format and execution thereof
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
JP2022535982A (ja) * 2019-06-13 2022-08-10 フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド Gpuにおける明示的な個別マスクレジスタのマスク操作方法
JP7410186B2 (ja) 2019-06-13 2024-01-09 フアシア ジェネラル プロセッサー テクノロジーズ インコーポレイテッド Gpuにおける明示的な個別マスクレジスタのマスク操作方法

Also Published As

Publication number Publication date
KR101618669B1 (ko) 2016-05-09
JP5947879B2 (ja) 2016-07-06
TWI467478B (zh) 2015-01-01
CN103718157A (zh) 2014-04-09
DE112011105123T5 (de) 2014-03-06
TW201250585A (en) 2012-12-16
CN103718157B (zh) 2017-05-24
GB201316934D0 (en) 2013-11-06
US20120254593A1 (en) 2012-10-04
GB2502754B (en) 2020-09-02
WO2012134561A1 (en) 2012-10-04
KR20130140143A (ko) 2013-12-23
GB2502754A (en) 2013-12-04

Similar Documents

Publication Publication Date Title
JP6274672B2 (ja) 装置および方法
JP6109910B2 (ja) メモリ・ソースを宛先レジスタに展開し、ソース・レジスタを宛先メモリ位置に圧縮するためのシステム、装置および方法
JP6408524B2 (ja) 書込マスクを用いて2つのソースオペランドを単一のデスティネーションに融合するシステム、装置及び方法
JP5764257B2 (ja) レジスタをアライメントするためのシステム、装置、および方法
JP6699845B2 (ja) 方法及びプロセッサ
KR101817034B1 (ko) 반복 종속 조건을 갖는 반복들의 벡터 루프들을 구현하기 위한 명령어
JP6456867B2 (ja) 密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサ及び方法
JP5947879B2 (ja) マスクレジスタを用いてジャンプを行うシステム、装置、および方法
KR101722346B1 (ko) 적분 이미지 계산 명령어를 위한 방법 및 장치
KR101776227B1 (ko) 슬라이딩 윈도 인코딩 알고리즘들을 위한 명령어들
TWI489381B (zh) 多暫存器散布指令
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
TWI697836B (zh) 處理包括高功率及標準指令之指令集的方法與處理器
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置
JP2018500665A (ja) マスク値を圧縮するための方法および装置
JP2018503162A (ja) スピンループジャンプを実行するための装置および方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140930

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20141226

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150130

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150227

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20150330

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150908

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20151208

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160108

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160308

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160405

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160502

R155 Notification before disposition of declining of application

Free format text: JAPANESE INTERMEDIATE CODE: R155

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160603

R150 Certificate of patent or registration of utility model

Ref document number: 5947879

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250