JP6491655B2 - 即値ハンドリング及びフラグハンドリングのためのプロセッサ及び方法 - Google Patents

即値ハンドリング及びフラグハンドリングのためのプロセッサ及び方法 Download PDF

Info

Publication number
JP6491655B2
JP6491655B2 JP2016525922A JP2016525922A JP6491655B2 JP 6491655 B2 JP6491655 B2 JP 6491655B2 JP 2016525922 A JP2016525922 A JP 2016525922A JP 2016525922 A JP2016525922 A JP 2016525922A JP 6491655 B2 JP6491655 B2 JP 6491655B2
Authority
JP
Japan
Prior art keywords
flag
order
mapping table
bit
instruction
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.)
Active
Application number
JP2016525922A
Other languages
English (en)
Other versions
JP2016534430A5 (ja
JP2016534430A (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2016534430A publication Critical patent/JP2016534430A/ja
Publication of JP2016534430A5 publication Critical patent/JP2016534430A5/ja
Application granted granted Critical
Publication of JP6491655B2 publication Critical patent/JP6491655B2/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/30094Condition code generation, e.g. Carry, Zero flag
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/30098Register arrangements
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

(関連出願の相互参照)
本願は、2013年10月25日に出願された米国仮特許出願第61/895,715号の利益を主張し、その内容は、引用により本明細書に組み込まれる。
本開示の実施形態は、概して電子回路を対象とする。
プロセッサ(例えば、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)等)は、より高速な処理速度を達成するために、複数のコア及びパイプラインアーキテクチャを使用する。より高速な実行スループットを容易にするために、プロセッサコアのデコーダ及び実行ユニット内での操作の「パイプライン」実行を使用する。しかしながら、プロセッサのより高速で効率的なスループットに対する継続的な需要がある。
本明細書に記載されるのは、命令の依存性を解消するためにグループにおいてフラグをリネームするための方法及びプロセッサのいくつかの実施形態である。プロセッサのデコーダ及び実行ユニットは、グループにフラグをリネームするように構成されてもよく、各グループを適切に別々に処理することを可能にする。このフラグのリネームは、命令に関するフラグ依存性を解消する。これは、マージ依存性を生成する必要がなく、命令に対して正確に命令が望むフラグを書き込むことを可能にする。
本明細書に記載されるのは、命令に埋め込まれた即値(immediate)を扱うための方法及びプロセッサのいくつかの実施形態である。1つの実施形態において、命令に埋め込まれた即値のハンドリングは、プロセッサのデコード及び実行ユニット間のインタフェースに16ビット即値バス及び4ビット符号化/制御バスを加えることで達成され得る。符号化空間は、16ビット即値バス上へ符号化情報をオーバーロードすることで最小化されるため、デコード及び実行ユニットから情報を転送しながらストレージ及びルートリソースを効率的に使用する。8又は12ビット即値の場合、即値バスの上位4ビットは符号化ビットを含むことができ、符号化/制御バスはISAタイプを示すことができる。16ビット即値の場合、符号化/制御バスは、符号化ビットを含む。符号化/制御バスは、即値バスの上位4ビットをいつ参照すべきか、及び、データが全体として使用されるときの情報を含む。このようにして、全体的な符号化空間は、インタフェースに追加のビットを必要とせずに増大される。
より詳細な理解は、添付の図面と併せて実施例として与えられる以下の説明から得ることが可能である。
1つ以上の開示された実施形態が実施され得る例示的なデバイスのブロック図である。 いくつかの実施形態によるプロセッサ用の例示的な命令パイプラインである。 いくつかの実施形態によるフラグハンドリング用の例示的なブロック図である。 データ及びフラグ依存性の例示的な図である。 図5における実施例の例示的な実行パターンである。 単一のエンティティのフラグの組み合わせを使用したときのフラグ依存性の例示的な図である。 図7における実施例の例示的な実行パターンである。 いくつかの実施形態による真のデータフラグ依存性の例示的な図である。 いくつかの実施形態による真のデータフラグ依存性を用いる通常操作の実施例である。 いくつかの実施形態による真のデータフラグ依存性を用いるフラッシュ操作の実施例である。 いくつかの実施形態による真のデータフラグ依存性を用いるポイズン生成の実施例である。 いくつかの実施形態による真のデータフラグ依存性を用いるポイズン操作の実施例である。 いくつかの実施形態による即値及び定数を含む命令の実施例である。 いくつかの実施形態による即値及び定数を含む命令の実施例である。 いくつかの実施形態による即値及び定数を含む別の命令の実施例である。 いくつかの実施形態による即値及び定数を含む別の命令の実施例である。 いくつかの実施形態による即値及び定数を含む命令の実施例である。 いくつかの実施形態による即値ハンドリングの例示的なブロック図である。
簡潔にするために、集積回路設計、キャッシング、メモリ操作、メモリコントローラ、及びシステムの他の機能的な態様(及びシステムの個々の操作コンポーネント)に関する従来の技術は、本明細書において詳細に記載されていない。また、本明細書に含まれる様々な図に示された接続線は、様々な要素間の例示的で機能的な関係及び/又は物理的な結合を表すことを意図している。多くの代替又は追加の機能的な関係又は物理的接続が、主題の実施形態に存在し得ることに留意すべきである。さらに、特定の専門用語は、参照目的のみのために以下の説明で使用されることができるため、限定していることを意図せず、構造について言及する用語や、「第1」、「第2」及び他のかかる数値用語は、その文脈により明確に示されない限り、順番又は順序を意味するものではない。
以下の説明は、互いに「接続される」若しくは「結合される」、要素、ノード又は機能を言及する。本明細書で使用されるように、他に明記されない限り、「接続される」は、1つの要素/ノード/機能が別の要素/ノード/機能に直接接合され(又はこれと直接通信し)、必ずしも機械的でないことを意味する。同様に、他で明記されない限り、「結合される」は、1つの要素/ノード/機能が別の要素/ノード/機能に直接又は間接接合され(又はこれと直接若しくは間接通信し)、必ずしも機械的でないことを意味する。このようにして、図が要素の1つの例示的な配列を描写することができるが、追加の介在する要素、デバイス、機能又はコンポーネントは、描写された主題の実施形態に存在し得る。
少なくとも1つの例示的な実施形態は、以下の説明に存在しながら、膨大な数の変形した形態が存在することを理解するべきである。本明細書に記載された例示的な1つの実施形態又は複数の実施形態は、いかなる方法でも特許請求された発明の範囲、適用性又は構成を限定することを意図しないことを理解するであろう。むしろ、前述の詳細な説明は、記載された1つの実施形態又は複数の実施形態を実施するための指針を当業者に提供するであろう。様々な変更が特許請求の範囲により定義された範囲から逸脱することなく、要素の機能及び配列で行われ得ることを理解するであろう。
図1は、1つ以上の開示された実施形態が実施され得る例示的なデバイス100のブロック図である。このデバイス100は、たとえば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力ドライバ112及び出力ドライバ114を任意に含み得る。デバイス100が、図1で示されない追加のコンポーネントを含み得ることが理解できるであろう。
プロセッサ102は、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、同じダイ上に設置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含んでもよい。各プロセッサコアは、CPU又はGPUであってもよい。メモリ104は、プロセッサ102として同じダイ上に設置されてもよいし、プロセッサ102とは別個に設置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM又はキャッシュ等の揮発性又は不揮発性メモリを含み得る。
ストレージ106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定又はリムーバブルストレージを含み得る。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、ディテクタ、マイクロフォン、加速度センサ、ジャイロスコープ、生体スキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含み得る。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含むことができる。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110へ出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114が任意のコンポーネントであること、並びに、入力ドライバ112及び出力ドライバ114が存在しない場合にはデバイス100が同じ方式で動作することに留意する。
命令セットアーキテクチャ(ISA)は、プロセッサにより復号されて実行されることのできる少なくとも1つの命令セットを定義する。限定されないが、インテルのx86 ISA及びARMの標準ARM ISA、並びに、Thumb ISAを含む複数のISAが存在する。本明細書に記載された実施形態では、例示的な実施例としてARM又はThumb ISAを引用するが、方法及び装置は、他のISA、関連システム及びプロセッサアーキテクチャにも同様に適用可能である。
プロセッサは、従来、オペレーション(Op)コード(OpCode)又は命令コードにより典型的に識別されるオペレーション又は命令を処理するように設計されている。命令は、実行される実際の作業を表し、暗黙的(例えば加算)又は明示的(例えば除算)機能ユニットへオペランドの発行を示す。命令は、スケジューラキューにより周囲に移動できる。オペランドは、命令に対する引数であり、式、レジスタ又は定数を含み得る。
図2は、少なくとも1つのフェッチユニット205と、デコーダユニット210と、実行ユニット215と、を含むプロセッサ用の例示的な命令パイプライン200を説明する図である。フェッチユニット205は、メモリ(図示せず)からの命令をフェッチし、デコーダユニット210へ命令を送信する。この命令は、例えば、固定長のARM命令であって、32バイト及び16バイトの何れかであってもよい。デコーダユニット210は、フェッチされた命令のレジスタ、コンテンツ及びコンテキストを復号し、1つ以上の実行ユニット又は実行/スケジューリングユニット215へ、固定長内部命令(マイクロオペレーション又はマイクロ命令(μop))をディスパッチし得る。実行ユニット215は、復号された命令を実行する。この命令は、一般に、μopと関連した入力データの位置を識別するソースと、データレジスタデスティネーションを用いてμopと関連した出力/結果データの位置を識別するデスティネーションと、を含む。各命令は、一般に、1つ、2つ又はそれ以上のμopに翻訳される、すなわち、復号されることが可能である。プロセッサのデコードユニット210及び実行ユニット215は、例えば、フラグハンドリング及び即値ハンドリングのための方法及び装置を含み得る。
例えばARM ISA等の殆どのISAは、条件付き命令実行用の様々なフラグを利用する。ARM ISAフラグは、符号条件用のN、ゼロ条件用のZ、キャリー条件用のC、オーバーフロー条件用のV、飽和条件用のQ、及び、バイト特定のキャリー条件であるGE、ビット3:0を含み得る。
一般的に、特定のタイプのARM命令は、フラグの特定の組み合わせを生成し、又は書き込む。例えば、NZ(符号及びゼロ)フラグの組み合わせは、多くのAArch32命令(AArch32は、32ビット汎用レジスタ及び32ビットプログラムカウンタ(PC)、スタックポインタ(SP)及びリンクレジスタ(LR)を使用し、2つの命令セット、即ちA32及びT32の選択肢を提供する、ARM v8 32ビット実行状態である)により書き込まれ得る。これらは、例えば、2つのフラグのみ書き込む、乗算(MUL)と乗算+加算(MLA)とを含み得る。また、いくつかの種類の移動(MOV)命令及び論理命令は、これら2つのフラグのみ書き込む。NZC(符号、ゼロ及びキャリー)フラグの組み合わせは、AArch32 AND、論理左シフト(LSL)、右ローテートレジスタ(ROR)、MOV等の、MOV及び論理命令のいくつかの特性により書き込まれる。NZCV(符号、ゼロ、キャリー及びオーバーフロー)フラグの組み合わせは、AArch32 ADD、SUB等の算術命令により、及び、フラグを書き込む全てのAArch64 opにより、全て書き込まれる。Qフラグは、信号飽和(SSAT)、飽和加算(QADD)、飽和減算(QSUB)等の算術命令を飽和させることによってのみ書き込まれる。GEフラグ(4つのフラグのグループである)は、実行ユニットの汎用レジスタで実行されたシングルインストラクションマルチプルデータ(SIMD)命令により書き込まれ、ADD16、SUB16等の命令を含む。64ビットARM命令(AArch64)において、フラグQ及びGEは、書き込まれることが不可能であり、常に0である。
殆どのARM命令が1つ又は2つのグループのフラグを読み出すことに留意する。全ての条件コードは、2つのグループのみを必要とする。この2つの例外は、プレディケーション(predication)及びフラグコピーである。プレディケーションに関して、プレディケーション用の条件コードは、2つのグループのみから生成されることが可能である。フラグを書き込むプレディケートされた命令のために、古いフラグ値は、プレディケートが偽である場合にコピーされなければならない。条件コードで使用されたフラグと、コピーされる必要があるものとの間で、これらの命令は、3つのフラグソースまでを必要とすることが可能である。フラグコピーに関して、いくつかの命令は、全てのフラグをコピーすることが可能である。
AArch64 ISA命令が同じ時間に(NZCV)全ての条件フラグのみを書き込むことが可能であり、追加の依存性がフラグを書き込む異なる命令間で生成されないため、単一のフラググループが提供され得ることに留意する。
本明細書に記載されるのは、命令の依存性を解消するためにグループにおいてフラグをリネームするための方法及びプロセッサの実施形態である。依存性の解消は、性能及びアウトオブオーダスケジューリングを改良する。一般に、プロセッサのデコーダ及び実行ユニットは、グループにフラグをリネームするように構成されることが可能であり、各グループを適切に別々に処理することを可能にする。このフラグのリネームは、命令に関するフラグ依存性を解消する。例えば、ARM ISAフラグは、5つのグループ、すなわち、NZ、C、V、Q及びGEにリネームされ得る。これは、任意の32ビットARM命令(AArch32)に対してこの命令を欲するフラグを正確に書き込むことを可能にし、マージ依存性を生成する必要がない。
一般的に、フラグハンドリングの目的のために、N、Z、C、V、Q及びGEフラグは、単一のエンティティ又は組み合わせとして扱われる。これは、フラグを部分的に書き込む命令間のマージ依存性の多くを引き起こす。例えば、フラグZのみを書き込む命令がある場合には、フラグNは依存性(結果で変化せずにソース及びコピーされた)として搬送される必要がある。ARM及びThumb32 ISAのために、コンパイラは、どのインストラクションがフラグを生成する必要があるかを決定する(したがって、余分なソース依存性を得る)ことが可能であるので、効果は幾らか限定される。Thumb16 ISAのために、フラグデスティネーションは、暗黙的であるので、ペナルティを制限する方法がない。
図3は、1つの実施形態によるフラグハンドリングのためのプロセッサ300の実施形態を示す図である。プロセッサ300は、整数デコードユニット305と、実行ユニット310と、を含む。デコーダユニット305は、フェッチユニット(図示せず)から、命令、INSTR1、INSTR2、INSTR3及びINSTR4を受信する。各命令は、フラグデスティネーション(Flag Dest1、Flag Dest2、Flag Dest3及びFlag Dest4)、オペランドA、オペランドB、オペランドC、フラグソースA及びフラグソースBを含み得る(殆どのARM命令が1つ又は2つのグループのフラグを読み出し、全ての条件コードが2つのグループのみを要求することに注意する)。これらの命令は、ディスパッチサイクル350の間に実行ユニット310へ適切にディスパッチされる。
実行ユニット310は、リネームサイクル360の間に、リネーム回路315を使用して、各デスティネーションフラグにフリーフラグレジスタ番号(FRN)を割り当てることによって、Flag Dest1、Flag Dest2、Flag Dest3及びFlag Dest4にフラグをリネームし、アウトオブオーダフラグマッピングテーブル320へ新規のリネームされたフラグを書き込み、アウトオブオーダフラグマッピングテーブルに現在書き込まれているこのフラググループのみに影響を与え、その他のフラググループを元のままに保つ。図示目的のために、フラグのリネームは、4つのフラググループ、すなわち、NZ、C、V及びGEを使用することができる。他のフラググループを使用してもよい。同様に、INSTR1、INSTR2、INSTR3及びINSTR4からの各フラグソースA及びBは、フラググループに基づきそれらの対応するFRNへリネームされる。命令又は操作と関連したフラグは、それぞれのエントリがFRNに割り当てられる、フラグレジスタファイル325のエントリとして追跡される。実行ユニット310は、本明細書に記載されるようにフラグが別々のグループで扱われるので、真のデータ依存性に基づき、フラグ読み出しサイクル370の間にフラグレジスタファイル325からフラグ値を読み出し、アウトオブオーダの命令を(実行サイクル380の間に)実行する(330)。この実行ユニット310は、廃棄サイクル390の間に、フラグレジスタファイル325と、インオーダフラグマッピングテーブル335とに戻って、得られたフラグを書き込む。図3の操作態様は、図9〜12に関して本明細書に記載される。
図3〜8を参照する例示的な実施例において、表1に示されたコードスニペットを検討する。
Figure 0006491655
図4は、ソースレジスタ及びデスティネーションレジスタ間の真のデータ依存性を説明する図である。例えば、ADC命令は、ソースレジスタとしてレジスタr1を使用するが、r1の値はOR命令の実行に依存する。また、図4は、フラグ依存性を説明する。例えば、ADC命令は、ソースフラグとしてCフラグを含む。しかしながら、Cフラグは、NZCフラグの組み合わせを生成するLSL命令に関して何が起こるかに依存する。したがって、ADC命令は、LSL命令の実行に依存する。よって、ADC命令は、最終的に、OR及びLSL命令に依存する。結果として、ADC命令は、OR及びLSL命令が実行されるまで待機しなければならない。これは、図5で説明されるように、真のデータ依存性にのみ基づく、可能な限り最高の実行順序をもたらす。全ての命令が、例えば、12個の実行ユニットがあってもよい、最大数の実行ユニットを使用して1回のサイクルで完了することが最良の状況であることに留意する。最悪の状況は、データ及びフラグ依存性のため、コードスニペットを完了させるために12サイクルを要することである。
図6は、例えば、NZCV等の単一のエンティティフラグの組み合わせとしてフラグがリネームされる実施例を説明する。レジスタ依存性は、図4と同様である。この状況において、命令又は操作が、NZCVエンティティの2つのフラグのみを生成又は書き込むことを実行する場合に、実行ユニットは、フラグレジスタから他の2つのフラグの前の値を読み出さなければならず、NZCV結果にそれらをマージしなければならない。例えば、論理命令OR(#5,#7,#11)及びAND(#9)は、NZフラグの組み合わせのみを生成する。このため、これらの命令は、CVフラグ条件を取得し、NZCV単一エンティティを完了させるために実行するADC命令(#4)を待機しなければならない。これらの依存性は、図7で説明する実行順序をもたらす。図5及び図7の比較は、単一エンティティフラグの組み合わせが、最適解よりさらに2サイクル又はさらに1/2回を要求することを示す。
図8は、リネームするフラグコンベンション(convention)が真のデータ依存性に従う実施形態を説明する図である。この実施例において、フラグNZ、C及びVは、それぞれグループ0、1及び2として独立して書き込まれることが可能である。3つのフラグ群(NZ、C、V)にフラグをリネームすることによって、例えば、各命令は、その他のマッピングを変わらないままに残して、全体のフラググループ(又はそれらのうち複数)を書き込む。このように、任意の不要な依存性を生成する必要がない。これは、効果的に任意の偽の依存性を削除する。
本明細書に記載されるのは、ゼロによるシフト(SBZ)を扱うための方法及び装置である。一般的に、通常シフト/ローテート命令は、Vフラグを修正されないままに残し、NZCフラグを書き込む。Nフラグは、符号ビット(結果のビット31)をコピーし、Zフラグは、この結果がすべてゼロである場合に設定され、Cフラグは、操作によりシフトされた最後のビットをコピーする。シフト量がゼロである場合に、Cフラグは修正されないままである。この同じ挙動は、シフトされた第2オペランドを許可する多くの命令へ持ち越され、Cフラグはこのシフトから生成される。一般的な実施例は、AND、ORR、BIC等の論理命令である。これらの命令は、論理演算結果に基づきN及びZフラグを設定するが、それらは、任意の第2ソースシフト結果に基づきCフラグを設定する。シフト量がゼロでない場合に、これらの命令は、新しいCフラグを生成する。シフト量がゼロである場合に、これらの命令は、先のCフラグを保持しなければならない。反例は、ADD、SUB等の算術命令である。これらの命令は、シフトされた第2オペランドを許可するが、それらはシフト結果に基づきCフラグを設定しない。Cフラグは、ALU結果(計算のビット33)に基づき設定される。
AArch32 ISAは、これらの命令の各々へ複数の符号化を提供する。いくつかの場合において、シフト量は、命令符号化に埋め込まれた即値から生じる。他の場合において、シフト量はレジスタから生じる。
シフト量が命令において明示的に符号化される場合に、デコーダユニットは、リネームする前に命令が何をする必要があるかを決定することが可能である。例えば、シフト量がゼロである場合に、命令は明示的なシフト操作なしで復号し、命令はNZのみを書き込む。シフト量が1、2又は3である場合に、命令は、明示的なシフトopなしで復号するが、命令はNZCを書き込む。実行ユニットは、3ビットまでオペランドをシフトする能力を有し、また、これらの場合にCフラグを選択する。シフト量が3より大きい場合には、イ命令は明示的なシフト操作で復号する。このシフト操作は、デスティネーションとしてCフラグを得る一方で、論理演算(シフトされたデータを使用する)はNZのみを書き込む。
シフト量が汎用レジスタ(GPR)から得られる場合に、デコーダユニットは、量がゼロであるか否かを先行して決定することが不可能である。例えば、命令AND r0,r1,r2は、NZのみを書き込む単一μopとして復号され得る。別の実施例において、命令AND r0,r1,r2 LSL#1は、NZ及びCを書き込む単一μopとして復号され得る。別の実施例において、命令AND r0,r1,r2 LSL#5は、ダブルμop(ANDがLSLに続く)として復号され得る。LSL命令は、Cフラグを書き込む一方で、AND命令は、NZフラグの組み合わせを書き込む。別の実施例において、命令AND r0,r1,r2 LSL r3は、ダブルμop(ANDがLSLに続く)として復号され得る。LSL命令は、Cフラグを書き込み、SBZ挙動を有することが可能である一方で、AND命令は、NZフラグの組み合わせを書き込む。
シフト量が復号中に判定されることが不可能である場合のために、フラグポイズンソリューションは、図3及び図9〜12に関して、本明細書の以下に記載されるように実装され得る。図において、アウトオブオーダテーブルの網掛けボックスは、現在の命令又は操作が更新しているフラググループを参照する。全てのその他のフラググループは、そのまま残され、前の値を保持する。インオーダテーブルの網掛けボックスは、現在のアーキテクチャ状態のために有効なフラググループを参照する。全てのフラグN、Z、C、V及びGEのための最新値は、これらの有効なグループのみから導かれる。インオーダテーブルの網掛けでないボックスのコンテンツは関係がない。グループが有効であるか否かの状態は、インオーダテーブルの有効なビットを使用して維持される。
図9は、フラグの正常又は通常操作の例示的な図である。この実施例において、実行時間に、デスティネーションフラグは、フリーFRNの1つへリネームされる。これは、命令又は操作がプログラム順序で実行されないので、アウトオブオーダで行われる。アウトオブオーダテーブルは、ソースフラググループによりインデックス化される。これは、より後の操作にソースを割り当てることを簡便にする。次の命令は、より古い操作により前に書き込まれたフラグの1つをソースする場合に、そのソースレジスタとしてより古い操作のデスティネーションレジスタを得る。例えば、ADC命令は、Cフラグをソースする。Cフラグへの最後の書き込みはLSL命令によるもので、LSL命令のCフラグは、レジスタF8へマッピングされている。このようにして、ADC命令は、レジスタF8をソースし、Cフラグの値を得る。操作は、順に(すなわち、古い順に)廃棄する。インオーダテーブルは、廃棄した操作へFRNへのフラグのマッピングを追跡する。このテーブルは、デスティネーションフラググループによりインデックス化される。例えば、ADC命令は、NZCVフラグへ書き込む。インオーダテーブルは、F7が全てのフラグへの値を有するので、唯一の有効なグループとしてレジスタF7をマークする。次のOR命令が廃棄すると、NZフラグは、レジスタF11へマッピングされる。このようにして、レジスタF7及びF11は、両方とも有効である。レジスタF11は、NZフラグ用の値を有し、レジスタF7は、CVフラグ用の値を有する。BSL命令は、ZCフラグをソースする。ADC命令は、Cフラグを書き込む最後の操作であるため、BSL命令は、Cフラグ用に、レジスタF7(ADCのデスティネーションFRN)をソースする。同様に、Zフラグは、OR命令のデスティネーションFRNであるレジスタF11からソースされる。
図10を参照すると、フラッシュ上で、アウトオブオーダテーブルは、インオーダテーブルから復元される。フラッシュ操作は、複数の理由で発生する可能性があり、全てのこれらの場合において、機械の推測状態、すなわち、この場合ではアウトオブオーダテーブルは、ロールバックされなければならない。これは、上述したように操作廃棄へ同様に実装される。フラッシュ操作の実施例において、レジスタF6及びF8は、LSL命令が廃棄した後に有効である。NZCフラググループマッピングが有効であるので、NZ及びCフラグ用のアウトオブオーダテーブルのマッピングは、レジスタF8に更新される。NZCVフラグとともに有効であるNZCフラグは、レジスタF6(NZCVへマッピングされた)は、Vフラグだけのための値を含む。
図11は、フラグ操作及びポイズンフラグ操作用のフラッシュの例示的な図である。この実施例において、第1LSL命令がSBZプロデューサである(すなわち、ゼロによるシフトが実行される)場合に、LSL命令デスティネーションFRN,F1は、ポイズンされたものとしてマークされる。アウトオブオーダテーブルは、実行が完了する前に更新されるので、Cフラグは、レジスタF1(今、ポイズンされた)へマッピングされる。このような場合において、アーキテクチャの予想は、Cフラグが、その前回のFRN(この場合、F6である)へまだマッピングされる必要があることである。LSL命令が廃棄するとき、Cフラグがポイズンされると知り、LSL命令ンのDestフラグは、NZCからNZへ変更される。したがって、インオーダテーブルは、NZのみのためにカラムを更新し、有効としてそれをマークする。レジスタF1は、インオーダテーブルのポイズンフラグへ常にマッピングされる。レジスタF6(NZCV用の)及びレジスタF1(NZ用の)は、両方とも有効であるため、Cフラグ用にマッピングするインオーダテーブルは、レジスタF6であり、アーキテクチャ上、正しいマッピングである。
上述したように、殆どのSBZの場合において、有効なCフラグは、ポイズンされたCフラグをソースする機会がある前に上書きされる。これは、よい結果である。この実施例において、まさにその次の命令及びLSL命令は、有効なCフラグを書き込む。第2LSL命令がゼロによるシフトの場合ではないため、Cフラグは、もはやポイズンされていない。そのため、第2LSL命令が廃棄するときに、LSL命令はインオーダテーブルでマッピングするNZCを更新し、また、インオーダテーブルからのポイズンフラグを無効にする。したがって、ADC命令がCフラグをソースするときに、ADC命令は、Cフラグ用のソースレジスタとしてレジスタF8を得て、正常に廃棄する。
図12を参照して、第2LSL命令がSBZであるなら、ADC命令は、ポイズンされる(本明細書の上記で説明されるように)Cフラグ用のレジスタF8をソースすることで終了する。これは、アーキテクチャ上正しくない。ADC命令は、SBZ LSL命令の前にCフラグのマッピングを含むレジスタF1をソースしている必要がある。したがって、ADC命令は、再同期されフラッシュする必要がある、すなわち、ADC命令は、再度ディスパッチされて再度実行される必要がある。したがって、ADC命令は、再びディスパッチされ、アウトオブオーダテーブルは、補正される必要がある。これは、インオーダテーブルからアウトオブオーダテーブルを生成するためにフラッシュ復元機構を使用することで完成することができる。フラッシュが完了すると、Cフラグは、そのときにレジスタF1(第1LSL命令のデスティネーション)へ正確にマッピングされ、NZは、レジスタF8(第2LSL命令のデスティネーション)へ正確にマッピングされる。
ポイズンされたフラグインジケータは、ゼロに等しいシフト量でシフト/ローテート、インストラクション/操作により生成されたフラグ用に1のみに設定される。全ての他の操作は、ポイズンされたフラグインジケータをゼロとして書き込む。また、インオーダテーブルは、フリーFRNリストへ保持された前回のFRNを戻す原因となる。すなわち、FRNは、リネーム回路315で使用するために再循環される。例えば、フラグNZCVを生成する操作が廃棄するときに、NZCVフラグにより保持されたFRNは、フリーFRNリストへ戻され、廃棄された操作のFRNは、廃棄操作用の新規のFRNへ更新される。フラッシュ復元は、インオーダテーブルに依存し、再同期を引き起こした操作の前の操作のそれにアウトオブオーダテーブルを復元する(340)。
この機構は、ゼロによるシフトが低頻度であるという事実に依存し、シフトにより作成されたフラグは、一般にソースされない。したがって、再同期する必要が非常に低頻度で起こり、性能上に最小限の影響をもたらす。また、「レジスタによるシフト」第2オペランドを使用する任意の論理命令は、通常の論理演算がその後に続くシフト操作で復号することができる。このシフト操作は、シフト/ローテート命令から生じるシフト/ローテート操作として同じSBZ挙動を有する。
別の実施形態において、フラグをポイズンする代替案は、フラグを書き込む(シフト量がレジスタから生じるときに)全てのシフト操作にCフラグ及びシフト量がゼロであることが判明する場合に出力フラグへのMUXをソースすることである。これは、新規のデータ依存性を導入し、これらのケースが普通である場合に大幅に性能を削減する可能性がある。
本明細書に記載されるのは、いくつかの実施形態による、命令に埋め込まれた即値を扱う方法及び装置である。例えばARM及びThumb ISA等のいくつかのISAにおいて、インストラクション自体から幾つかのフィールドに基づく即値修正が必要な幾つかの命令がある。即値定数及び符号化の両方は、命令から生じるビットフィールドである。例えば、命令ADD Rd,Ra,Imm32のために、Imm32用の値は命令の8ビットフィールド及び符号化ビットから導かれる。図13Aは、ビット0〜7が即値定数値1305の16進数表現であり、ビット8〜11が符号化ビット1310である、ARM命令1300で修正された即値定数の符号化の実施例を説明する。図13Bは、abcdefghを符号化ビット1310へ関連付ける場合のバイナリ形式で即値定数値1305を説明する。
図14Aは、ビット0〜7が即値定数値1405の16進数表現であり、下位ワードのビット7及び12〜14並びに上位ワードのビット10が符号化ビット1410である、Thumbインストラクション1400で修正された即値定数の符号化を説明する図である。図14Bは、abcdefghを符号化ビット1410に関連付ける場合のバイナリ形式で即値定数値1405を説明する図である。アセンブリ構文において、即値は、通常方式(デフォルトによる10進数)で指定される。
図13A、13B、14A及び14Bは、ARM ISAでサポートされた修正形態の幾つかを説明する図である。また、例えばADD又はSUB等の命令を実行する前に修正を要求する、例えば「デコードビットマスク」、「左シフト」、「符号拡張」及び「ゼロ拡張」等の命令に埋め込まれる他の符号化がある。
実行ユニットに回覧される必要がある多くの符号化がある。OpCode空間でそれらを符号化し、そのとき実行時間にこの修正を行うことは困難である。さらに、余分なサイクルが即値修正を行うために必要とされる。拡張がデコードユニットで行われる場合に、そのときの配線数は、実行及びデコードユニットに亘って大幅に増加するであろう。これは、電力及びエリア要件を増し、また、限られたルートリソースがある場合にはタイミング問題につながる。
1つの実施形態において、命令に埋め込まれた即値のハンドリングは、デコード及び実行ユニット間のインタフェースに、16ビット即値バス及び4ビット符号化/制御バス(図15でSrcBCtlとして示される)を加えることで達成され得る。この命令は、典型的に、即値データの8〜16ビットを必要とし、そして32又は64ビットに変換されて得られる。符号化空間は、16ビット即値バス上へ符号化情報をオーバーロードすることで最小化されるため、デコード及び実行ユニットからの情報を転送しながらストレージ及びルートリソースを効率的に使用する。
図15は、16ビット即値バス及び4ビット符号化/制御バスを使用する即値ケースのサンプリングを提供する図である。第1カラムは、必要な修正の性質を詳述し、第2カラムは、4符号化ビットであり(SrcBCtl〈3:0〉である)、第3及び第4カラムは、16ビット即値バスである。図15において、略語は、LSLが論理左シフト(データ、〈シフト量〉)であり、ZeroExtendがデータサイズに基づき上位48/16ビットをゼロにするであり、SignExtendがデータサイズに基づき上位48/16ビット上で15番目のビットをコピーするである。図15で示すように、即値は、8、12又は16ビットを必要とする可能性がある。8又は12ビット即値の場合に、即値バスの上位4ビットは、符号化ビットを含むことができ、符号化/制御バスは、ISAタイプを示すことができる。16ビット即値の場合に、符号化/制御バスは、符号化ビットを含む。SrcBCtl〈3:0〉は、即値バスの上位4ビットをいつ参照するか、及び、データが全体としていつ使用されるべきかの情報を含む。このようにして、全体的な符号化空間は、インタフェースに追加のビットを必要とせずに増大される。
一般に、プロセッサは、少なくとも1つのデコードユニット及び実行ユニットを含む。デコードユニットは、フェッチユニットから命令を受信する。各命令は、少なくとも1つのオペランドA、オペランドB、オペランドC及び他のビットを含む。16ビット即値バス及び4ビット符号化/制御バスは、命令に埋め込まれた幾つかの即値を扱うためにデコードユニットから実行ユニットへ加えられる。実際には、即値バス及び符号化/制御バスは、データビットを拡張して消費される最終即値データを生成する方法について知らせる。即値データは、シフト及びアライメント後、すなわち、修正及び/又は拡張後にアレイに直接記憶される。例えば、回路(少なくとも16ビット即値バス及び4ビット符号化/制御バスを含む)は、μopが複数のソースを参照するのに対して、拡張された即値、例えば、64ビットに拡張された修正された即値が特定の1つのソースへのみ行くことが可能であるように構成されることが可能である。
図16は、命令に埋め込まれた即値を扱うための実施形態の例示的なブロック図である。プロセッサ1600は、少なくとも1つの整数デコードユニット1605と、実行ユニット1610と、を含む。デコードユニット1605は、例えば、ARM ISA命令1615及び/又はThumb ISA命令1617を受信することが可能である。命令1615及び1617は、デコードサイクル1690の間に復号され、本明細書で上述したように、制御ビット1618は、マルチプレクサ1620を対象とする。制御ビット1618は、処理され、転送サイクル1694の間に即値制御バス1630を使用して実行ユニット1610へ渡される。データビット1619は、データ処理サイクル1692の間にディスパッチされて処理され、転送サイクル1894の間に即値データバス1632を使用して実行ユニット1610へ渡される。
本明細書で上述したように、即値の性質に依存して、すなわち、それが8、12又は16ビット即値であるか否か、適切な制御又は符号化ビット(すなわち、即値Ctrl[3:0]及び/又は即値データ[15:12])は、拡張サイクルの間に処理の性質を決定する。例えば、制御又は符号化ビットは、Thumb拡張1650、シフタ1652、ゼロ拡張1654、符号拡張1656、デコードビットマスク1658、ローテータ1660及び/又はバイトコピー1662を要求する可能性がある。これらの操作1650〜1662の出力及び適切な制御又は符号化ビットは、マルチプレクサ1670を対象とされ、これは選択サイクル1698の間に即値ストレージ1680に順に格納される。拡張サイクルは、余分な実行サイクルではないが、実際の命令又は操作の処理とほぼ同時に及び/又は並行して実行される。結果として、即値定数値は、実際の命令による使用及び実行のために即値ストレージ1680で利用可能である。
本明細書に記載されるのは、修正された即値からのキャリーフラグを扱う方法及び装置である。デコードユニットからのディスパッチ時間に行われる即値のローテーションに基づきキャリーフラグを書き出す幾つかの命令がある。それらの殆どは、論理命令である。ARM ISA v7用に、このカテゴリにある、おおよそ8つの命令、例えば、AND、EOR、TST、TEQ、ORR、MOV、BIC、MVNがある。通常の論理命令の殆どはキャリーフラグを更新しないので、即値ローテーションにより生成されたキャリーフラグは、実行ユニットへ簡単に転送されることができ、実行時間にFRF(フラグレジスタファイル)に書き込まれることが可能である。修正された即値により生成されたこのキャリーフラグを記憶するために即値ストレージのストレージの余分なビットは、回路が常に右ローテートするように構成されており、データサイズが32であることが必要とされない可能性がある。その理由は、即値ストレージ読み出しデータのビット31が、その特定のμop用に更新される必要のある最終キャリーフラグであることを保証するからである。
これが適用できない唯一の場合は、本明細書で上述したようなゼロによるシフトの場合である。ローテーション量が操作コードから生じているので、ゼロによるシフトは、早期に検出されることが可能であり、Cフラグへ有効なDestフラグを無効にすることは、実行されることが可能であるので、FRFに書き込まれているものは重要ではなく、次の操作は、以前に生成された適切なキャリーでソースされる。しかしながら、ARM v8の場合、「0」としてキャリーフラグを更新するAND及びBIC命令がある。このような場合のために、2つの操作、AND v8及びBIC v8は、Cフラグを書き込むもの、及び、即値の実際のローテーションにより生成されたキャリーフラグを書き込むARM v7内のものを区別するために提供され得る。
概して、フラグハンドリング方法は、ディスパッチされた命令から少なくとも1つのデスティネーションフラグを決定すること、及び、少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも1つのデスティネーションフラグをリネームすることを備え、フラググループは、独立したフラグに対応する。この方法は、リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルへ書き込むことを備えてもよく、少なくとも1つのデスティネーションフラグに対応しないフラググループは、影響を受けない。方法は、データ依存性に基づきアウトオブオーダのディスパッチされた命令を実行することを備えてもよい。方法は、廃棄サイクルの間にインオーダフラグマッピングテーブルへのアウトオブオーダ実行に起因するフラグを書き込むことを備え、インオーダテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する。インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持してもよい。アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化されてもよい。インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元してもよい。インオーダフラグマッピングテーブルは、ゼロによるシフト条件用のポイズンビットを維持してもよい。方法は、ゼロによるシフトが発生する条件でポイズンビットを設定し、ゼロによる第2シフトが発生する条件でポイズンビットを消費し、ポイズンビットが消費される条件でアウトオブオーダフラグマッピングテーブルをフラッシュし、ポイズンビットの消費をもたらすインストラクションを再度ディスパッチして再度実行することを備えてもよい。
概して、プロセッサは、ディスパッチされた命令から少なくとも1つのデスティネーションフラグを決定するように構成された実行ユニットと、少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも1つのデスティネーションフラグをリネームするように構成されたリネーム回路と、を含み、フラググループは、独立したフラグに対応する。このプロセッサは、アウトオブオーダフラグマッピングテーブルを含んでもよく、実行ユニットは、リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルへ書き込むようにさらに構成されてもよく、少なくとも1つのデスティネーションフラグに対応しないフラググループは、影響を受けない。実行ユニットは、データ依存性に基づきアウトオブオーダのディスパッチされた命令を実行するようにさらに構成されてもよい。プロセッサは、インオーダフラグマッピングテーブルをさらに含んでもよく、実行ユニットは、廃棄サイクルの間にインオーダフラグマッピングテーブルへアウトオブオーダ実行に起因するフラグを書き込むようにさらに構成されてもよく、インオーダフラグマッピングテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する。インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持することができる。アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化されてもよい。インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元してもよい。インオーダフラグマッピングテーブルは、ゼロによるシフト条件用のポイズンビットを維持してもよい。実行ユニットは、ゼロによるシフトが発生する条件でポイズンビットを設定し、ゼロによる第2シフトが発生する条件でポイズンビットを消費し、ポイズンビットが消費される条件でアウトオブオーダフラグマッピングテーブルをフラッシュし、ポイズンビットの消費をもたらす命令を再度ディスパッチして再度実行するように構成されてもよい。プロセッサは、デコードユニットと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された16ビット即値バスと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された4ビット制御バスと、を含んでもよく、16ビット即値バス及び4ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成され、16ビット即値バスは、即値定数を搬送するように構成される。
プロセッサでフラグハンドリングを実行するために汎用コンピュータによる実行用の1セットの命令を記憶する非一時的なコンピュータ可読記憶媒体は、ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定するための判定コードセグメントと、少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、少なくとも1つのデスティネーションフラグをリネームするためのリネームコードセグメントと、を含み、フラググループは、独立したフラグに対応する。この命令は、デバイスの製造のために使用されるハードウェア記述言語(HDL)命令である。
概して、プロセッサは、デコードユニットと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された16ビット即値バスと、デコードユニット及び実行ユニット間をインタフェースで接続するように構成された4ビット制御バスと、を含み、16ビット即値バス及び4ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、16ビット即値バスは、即値定数を搬送するように構成されている。即値定数を含む命令用の符号化情報は、マルチプレクサを使用して16ビット即値バス及び4ビット制御バスの組み合わせに圧縮される。16ビット即値バスの上位4ビットは、特定の命令用の符号化情報を搬送するために使用され得る。この符号化情報は、Thumb拡張、シフト、ゼロ拡張、符号拡張、デコードビットマスク、回転及びバイトコピー操作/拡張のうち少なくとも1つを実行することを決定する。操作/拡張及び符号化情報の出力は、命令による可用性のために即値ストレージに多重送信されて記憶される。操作/拡張中に生成されたキャリーフラグは、フラグレジスタファイルへ転送される。
(実施形態)
(実施形態1)
ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定することを備える、フラグハンドリング方法。
(実施形態2)
前記少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームすることであって、フラググループは独立したフラグに対応する、こと、をさらに備える、実施形態1の方法。
(実施形態3)
リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込むことであって、前記少なくとも1つのデスティネーションフラグに対応しないフラググループは影響を受けない、こと、をさらに備える、上記実施形態の何れかの方法。
(実施形態4)
データ依存性に基づきアウトオブオーダの前記ディスパッチされた命令を実行することをさらに備える、上記実施形態の何れかの方法。
(実施形態5)
廃棄サイクルの間にインオーダフラグマッピングテーブルへ前記アウトオブオーダ実行に起因するフラグを書き込むことであって、前記インオーダテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する、こと、をさらに備える、上記実施形態の何れかの方法。
(実施形態6)
前記インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持する、上記実施形態の何れかの方法。
(実施形態7)
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、上記実施形態の何れかの方法。
(実施形態8)
前記インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元する、上記実施形態の何れかの方法。
(実施形態9)
前記インオーダフラグマッピングテーブルは、ゼロによるシフト条件のためのポイズンビットを維持する、上記実施形態の何れかの方法。
(実施形態10)
ゼロによるシフトが発生する条件でポイズンビットを設定することをさらに備える、上記実施形態の何れかの方法。
(実施形態11)
ゼロによる第2シフトが発生する条件で前記ポイズンビットを消費することをさらに備える、上記実施形態の何れかの方法。
(実施形態12)
前記ポイズンビットが消費される条件で前記アウトオブオーダフラグマッピングテーブルをフラッシュすることをさらに備える、上記実施形態の何れかの方法。
(実施形態13)
前記ポイズンビットの前記消費をもたらす命令を再度ディスパッチして再度実行することをさらに備える、上記実施形態の何れかの方法。
(実施形態14)
ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定するように構成された実行ユニットを備える、プロセッサ。
(実施形態15)
前記少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームするように構成されたリネーム回路をさらに備え、フラググループは独立したフラグに対応する、実施形態14のプロセッサ。
(実施形態16)
アウトオブオーダフラグマッピングテーブルをさらに備え、前記実行ユニットは、リネームされたフラグの各々を前記アウトオブオーダフラグマッピング・テーブルに書き込むようにさらに構成されており、前記少なくとも1つのデスティネーションフラグに対応しないフラググループは、影響を受けない、実施形態14又は15のプロセッサ。
(実施形態17)
前記実行部は、データ依存性に基づきアウトオブオーダの前記ディスパッチされた命令を実行するようにさらに構成されている、実施形態14〜16の何れかのプロセッサ。
(実施形態18)
インオーダフラグマッピングテーブルをさらに備え、前記実行ユニットは、廃棄サイクルの間に前記インオーダフラグマッピングテーブルへ前記アウトオブオーダ実行に起因するフラグを書き込むようにさらに構成されており、前記インオーダフラグマッピングテーブルは、廃棄された、ディスパッチされた命令へのフラグのマッピングを追跡する、実施形態14〜17の何れかのプロセッサ。
(実施形態19)
前記インオーダフラグマッピングテーブルは、特定のフラググループが有効であるか否かを維持する、実施形態14〜18の何れかのプロセッサ。
(実施形態20)
前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、実施形態14〜19の何れかのプロセッサ。
(実施形態21)
前記インオーダフラグマッピングテーブルは、フラッシュされたアウトオブオーダテーブルを復元する、実施形態14〜20の何れかのプロセッサ。
(実施形態22)
前記インオーダフラグマッピングテーブルは、ゼロによるシフト条件のためにポイズンビットを維持する、実施形態14〜21の何れかのプロセッサ。
(実施形態23)
前記実行ユニットは、ゼロによるシフトが発生する条件でポイズンビットを設定するように構成されている、実施形態14〜22の何れかのプロセッサ。
(実施形態24)
前記実行ユニットは、ゼロによる第2シフトが発生する条件で前記ポイズンビットを消費するように構成されている、実施形態14〜23の何れかのプロセッサ。
(実施形態25)
前記実行ユニットは、前記ポイズンビットが消費される条件で前記アウトオブオーダフラグマッピングテーブルをフラッシュするように構成されている、実施形態14〜24の何れかのプロセッサ。
(実施形態26)
前記実行ユニットは、前記ポイズンビットの前記消費をもたらすディスパッチされた命令を再度ディスパッチして再度実行するように構成されている、実施形態14〜25の何れかのプロセッサ。
(実施形態27)
デコードユニットをさらに備える、実施形態14〜26の何れかのプロセッサ。
(実施形態28)
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された16ビット即値バスをさらに備える、実施形態14〜27の何れかのプロセッサ。
(実施形態29)
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された4ビット制御バスをさらに備える、実施形態14〜28の何れかのプロセッサ。
(実施形態30)
前記16ビット即値バスは、前記即値定数を搬送するように構成されており、前記16ビット即値バス及び前記4ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記16ビット即値バスは、非16ビット即値定数の場合に前記符号化情報のいくつかのオーバーロードを搬送する、実施形態14〜29の何れかのプロセッサ。
(実施形態31)
プロセッサがフラグハンドリングを実行するために、汎用コンピュータによって実行される1セットの命令を記憶する非一時的なコンピュータ可読記憶媒体であって、ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定するための判定コードセグメントを備える、コンピュータ可読記憶媒体。
(実施形態32)
前記少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームするためのリネームコードセグメントをさらに備え、フラググループは、独立したフラグに対応する、実施形態31のコンピュータ可読記憶媒体。
(実施形態33)
前記命令は、デバイスの製造に使用されるハードウェア記述言語(HDL)命令である、実施形態31又は32のコンピュータ可読記憶媒体。
(実施形態34)
デコードユニットを含むプロセッサ。
(実施形態35)
前記デコードユニット及び実行ユニット間をインタフェースで接続するように構成された16ビット即値バスをさらに備える、実施形態34のプロセッサ。
(実施形態36)
前記デコードユニット及び前記実行ユニット間をインタフェースで接続するように構成された4ビット制御バスをさらに備える、実施形態34又は35のプロセッサ。
(実施形態37)
前記16ビット即値バス及び前記4ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記16ビット即値バスは、前記即値定数を搬送するように構成されている、実施形態34〜36の何れかのプロセッサ。
(実施形態38)
即値定数を含む命令用の前記符号化情報は、マルチプレクサを使用して前記16ビット即値バス及び前記4ビット制御バスの前記組み合わせ内に圧縮される、実施形態34〜37の何れかのプロセッサ。
(実施形態39)
前記16ビット即値バスの前記上位4ビットは、特定の命令用の前記符号化情報を搬送するために使用され得る、実施形態34〜38の何れかのプロセッサ。
(実施形態40)
前記符号化情報は、Thumb拡張、シフト、ゼロ拡張、符号拡張、デコードビットマスク、ローテーション及びバイトコピー操作/拡張のうち少なくとも1つが実行されることを判定する、実施形態34〜39の何れかのプロセッサ。
(実施形態41)
前記操作/拡張及び前記符号化情報の前記出力は、前記命令による可用性のために即値ストレージに多重送信されて格納される、実施形態34〜40の何れかのプロセッサ。
(実施形態42)
操作/拡張中に生成されたキャリーフラグは、フラグレジスタファイルに転送される、実施形態34〜41の何れかのプロセッサ。
多くの変形形態が本明細書の本開示に基づき可能であることを理解するべきである。機能及び要素を特定の組み合わせで上述したが、各機能又は要素は、その他の機能及び要素なしに単独で、又は、他の機能及び要素を有し若しくは有していない、様々な組み合わせで使用され得る。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアに実装され得る。適切なプロセッサは、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他の種類の集積回路(IC)、及び/又は、ステートマシンを含む。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(コンピュータ可読媒体上に記憶可能な命令)の結果を使用して製造工程を構成することによって、製造され得る。このような処理の結果は、本実施形態の態様を実装するプロセッサを製造する半導体製造工程で使用されるマスクワークであってよい。
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行用の非一時的なコンピュータ可読記憶媒体に組み込まれた、コンピュータプログラム、ソフトウェア又はファームウェアに実装され得る。非一時的なコンピュータ可読記憶媒体の例は、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、並びに、CD−ROMディスク及びデジタル多目的ディスク(DVD)等の光媒体を含む。

Claims (15)

  1. フラグハンドリングの方法であって、
    ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定することと、
    前記少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームすることであって、前記フラググループが独立したフラグに対応する、ことと、
    リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込むことと、
    書き込みフラグをインオーダフラグマッピングテーブルに書き込むことであって、前記書き込みフラグは、前記ディスパッチされた命令のアウトオブオーダ実行によって生成される、ことと、
    前記書き込みフラグに基づいてフラッシュ操作を選択的に実行することであって、前記フラッシュ操作は、前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元する、ことと、を備える、
    方法。
  2. 前記少なくとも1つのデスティネーションフラグに対応しないフラググループは、前記リネームされたフラグの各々を書き込むことにおいて影響を受けない、請求項1の方法。
  3. 前記ディスパッチされた命令のアウトオブオーダ実行は、データ依存性に基づいている、請求項2の方法。
  4. 前記書き込みフラグは、廃棄サイクルの間に前記インオーダフラグマッピングテーブルに書き込まれる、請求項3の方法。
  5. 前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、請求項1の方法。
  6. ロシフトの発生という条件に応じてポイズンビットを設定することと、
    ロシフトの2回目の発生という条件に応じて前記ポイズンビットをクリアすることと、
    前記ポイズンビットがクリアされることをもたらす命令を再度ディスパッチして再度実行することと、をさらに備え、
    前記フラッシュ操作は、前記ポイズンビットがクリアされるときに実行される、請求項4の方法。
  7. アウトオブオーダフラグマッピングテーブルと、
    インオーダフラグマッピングテーブルと、
    前記アウトオブオーダフラグマッピングテーブル及び前記インオーダフラグマッピングテーブルと通信可能に接続された実行ユニットと、
    少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームするように構成されたリネーム回路と、を備え、
    前記フラググループが独立したフラグに対応しており、
    前記実行ユニットは、
    ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定し、
    リネームされたフラグの各々を前記アウトオブオーダフラグマッピングテーブルに書き込み、
    前記ディスパッチされた命令のアウトオブオーダ実行によって生成された書き込みフラグを前記インオーダフラグマッピングテーブルに書き込み、
    前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元するフラッシュ操作を、前記書き込みフラグに基づいて選択的に実行する、
    プロセッサ。
  8. 前記少なくとも1つのデスティネーションフラグに対応しないフラググループは、リネームされたフラグの各々を前記実行ユニットが書き込むときに影響を受けない、請求項7のプロセッサ。
  9. 前記ディスパッチされた命令のアウトオブオーダ実行は、データ依存性に基づいている、請求項7のプロセッサ。
  10. 前記実行ユニットは、前記書き込みフラグを、廃棄サイクルの間に前記インオーダフラグマッピングテーブルに書き込む、請求項8のプロセッサ。
  11. 前記アウトオブオーダフラグマッピングテーブルは、ソースフラググループによりインデックス化される、請求項7のプロセッサ。
  12. 前記実行ユニットは、
    ロシフトの発生という条件に応じてポイズンビットを設定し、
    ロシフトの2回目の発生という条件に応じて前記ポイズンビットをクリアし、
    前記ポイズンビットがクリアされることをもたらす命令を再度ディスパッチして再度実行し、
    前記フラッシュ操作は、前記ポイズンビットがクリアされるときに実行される、請求項10のプロセッサ。
  13. デコードユニットと、
    前記デコードユニットと前記実行ユニットとの間をインタフェースで接続するように構成された16ビット即値バスと、
    前記デコードユニットと前記実行ユニットとの間をインタフェースで接続するように構成された4ビット制御バスと、をさらに備え、
    前記16ビット即値バスは、即値定数を搬送するように構成されており、前記16ビット即値バス及び前記4ビット制御バスの組み合わせは、即値定数を含む命令用の符号化情報を搬送するように構成されており、前記16ビット即値バスは、非16ビット即値定数の場合に前記符号化情報のいくつかのオーバーロードを搬送する、請求項7のプロセッサ。
  14. プロセッサがフラグハンドリングを実行するために、汎用コンピュータによって実行される1セットの命令を記憶するコンピュータ可読記憶媒体であって、
    ディスパッチされた命令から少なくとも1つのデスティネーションフラグを判定するための判定コードセグメントと、
    前記少なくとも1つのデスティネーションフラグに対応する少なくとも1つのフラググループに関連するフリーフラグレジスタ番号を割り当てることによって、前記少なくとも1つのデスティネーションフラグをリネームするためのリネームコードセグメントと、
    リネームされたフラグの各々をアウトオブオーダフラグマッピングテーブルに書き込み、前記ディスパッチされた命令のアウトオブオーダ実行によって生成された書き込みフラグをインオーダフラグマッピングテーブルに書き込むための書き込みコードセグメントと、
    前記書き込みフラグに基づいてフラッシュ操作が要求されていると判定したときに、前記インオーダフラグマッピングテーブルに基づいて前記アウトオブオーダフラグマッピングテーブルを復元するためのフラッシュコードセグメントと、を備え、
    前記フラググループが独立したフラグに対応する、
    コンピュータ可読記憶媒体。
  15. 前記命令は、デバイスの製造に使用されるハードウェア記述言語(HDL)命令である、請求項14のコンピュータ可読記憶媒体。
JP2016525922A 2013-10-25 2014-10-24 即値ハンドリング及びフラグハンドリングのためのプロセッサ及び方法 Active JP6491655B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361895715P 2013-10-25 2013-10-25
US61/895,715 2013-10-25
PCT/US2014/062180 WO2015061687A1 (en) 2013-10-25 2014-10-24 Processor and methods for immediate handling and flag handling

Publications (3)

Publication Number Publication Date
JP2016534430A JP2016534430A (ja) 2016-11-04
JP2016534430A5 JP2016534430A5 (ja) 2017-11-30
JP6491655B2 true JP6491655B2 (ja) 2019-03-27

Family

ID=52993620

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016525922A Active JP6491655B2 (ja) 2013-10-25 2014-10-24 即値ハンドリング及びフラグハンドリングのためのプロセッサ及び方法

Country Status (6)

Country Link
US (1) US20150121041A1 (ja)
EP (1) EP3060979B1 (ja)
JP (1) JP6491655B2 (ja)
KR (1) KR102161682B1 (ja)
CN (1) CN105765522B (ja)
WO (1) WO2015061687A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798593B1 (en) 2016-07-06 2017-10-24 Workday, Inc. Synchronization of code execution
US10761849B2 (en) * 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10713213B2 (en) * 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing
US10481910B2 (en) * 2017-09-29 2019-11-19 Intel Corporation Apparatus and method for shifting quadwords and extracting packed words
CN112114874B (zh) * 2020-08-20 2021-10-15 北京百度网讯科技有限公司 数据处理方法、装置、电子设备和存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6047369A (en) * 1994-02-28 2000-04-04 Intel Corporation Flag renaming and flag masks within register alias table
US5649225A (en) * 1994-06-01 1997-07-15 Advanced Micro Devices, Inc. Resynchronization of a superscalar processor
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5933618A (en) * 1995-10-30 1999-08-03 Advanced Micro Devices, Inc. Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction
US6338132B1 (en) * 1998-12-30 2002-01-08 Intel Corporation System and method for storing immediate data
US20050071518A1 (en) * 2003-09-30 2005-03-31 Intel Corporation Flag value renaming
US7568088B1 (en) * 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US7421529B2 (en) * 2005-10-20 2008-09-02 Qualcomm Incorporated Method and apparatus to clear semaphore reservation for exclusive access to shared memory
US7822948B2 (en) * 2008-01-03 2010-10-26 International Business Machines Corporation Apparatus, system, and method for discontiguous multiple issue of instructions
US8250346B2 (en) * 2009-06-04 2012-08-21 Arm Limited Register renaming of a partially updated data granule
US9088594B2 (en) * 2011-02-07 2015-07-21 International Business Machines Corporation Providing to a parser and processors in a network processor access to an external coprocessor
US8924695B2 (en) * 2011-04-07 2014-12-30 Via Technologies, Inc. Conditional ALU instruction condition satisfaction propagation between microinstructions in read-port limited register file microprocessor
EP2508980B1 (en) * 2011-04-07 2018-02-28 VIA Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US8972701B2 (en) * 2011-12-06 2015-03-03 Arm Limited Setting zero bits in architectural register for storing destination operand of smaller size based on corresponding zero flag attached to renamed physical register
US9189236B2 (en) * 2012-12-21 2015-11-17 Intel Corporation Speculative non-faulting loads and gathers

Also Published As

Publication number Publication date
KR20160075639A (ko) 2016-06-29
EP3060979B1 (en) 2020-08-05
WO2015061687A1 (en) 2015-04-30
US20150121041A1 (en) 2015-04-30
CN105765522A (zh) 2016-07-13
KR102161682B1 (ko) 2020-10-05
CN105765522B (zh) 2020-05-19
EP3060979A4 (en) 2017-07-05
EP3060979A1 (en) 2016-08-31
JP2016534430A (ja) 2016-11-04

Similar Documents

Publication Publication Date Title
JP6491655B2 (ja) 即値ハンドリング及びフラグハンドリングのためのプロセッサ及び方法
JP6761565B2 (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
US9092215B2 (en) Mapping between registers used by multiple instruction sets
US9934031B2 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
JP6143872B2 (ja) 装置、方法、およびシステム
EP3555742B1 (en) Floating point instruction format with embedded rounding rule
CN106648843B (zh) 用于改善连续的事务性存储器区的吞吐量的系统、方法和装置
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
US20170090922A1 (en) Efficient Instruction Pair for Central Processing Unit (CPU) Instruction Design
US20150121047A1 (en) Reading a register pair by writing a wide register
JP2021504788A (ja) ストアフュージョンのためのシステム及び方法
JP2017534114A (ja) Z順序曲線において次のポイントの座標を計算するためのベクトル命令
JP6835436B2 (ja) マスクをマスク値のベクトルに拡張するための方法および装置
JP2021174513A (ja) データ依存脆弱分岐の機会主義的再誘導のための命令セットアーキテクチャベース自動負荷追跡
US20150106600A1 (en) Execution of condition-based instructions
KR20170001578A (ko) 상태 의존 계산들의 성능을 개선하기 위한 시스템들, 방법들, 및 장치들
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
US9710389B2 (en) Method and apparatus for memory aliasing detection in an out-of-order instruction execution platform
KR101635856B1 (ko) 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160816

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171018

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171018

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190111

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: 20190205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190301

R150 Certificate of patent or registration of utility model

Ref document number: 6491655

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