JP6345623B2 - 条件付き非ブランチング命令の非実行を予測するための方法および機器 - Google Patents

条件付き非ブランチング命令の非実行を予測するための方法および機器 Download PDF

Info

Publication number
JP6345623B2
JP6345623B2 JP2015083212A JP2015083212A JP6345623B2 JP 6345623 B2 JP6345623 B2 JP 6345623B2 JP 2015083212 A JP2015083212 A JP 2015083212A JP 2015083212 A JP2015083212 A JP 2015083212A JP 6345623 B2 JP6345623 B2 JP 6345623B2
Authority
JP
Japan
Prior art keywords
instruction
ecnb
prediction
execution
ecnb 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
JP2015083212A
Other languages
English (en)
Other versions
JP2015130206A (ja
Inventor
ブライアン・エム・ステンペル
ジェームズ・エヌ・ディフェンダファ
トーマス・エー・サートリアス
ディヴィッド・ジェー・マンザック
ロドニー・ダブリュー・スミス
Original Assignee
クアルコム,インコーポレイテッド
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 クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2015130206A publication Critical patent/JP2015130206A/ja
Application granted granted Critical
Publication of JP6345623B2 publication Critical patent/JP6345623B2/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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

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)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示は概して、プロセッサの分野に関し、詳細には、条件付き非ブランチング命令をサポートするプロセッサに関する。
多くの可搬型製品、たとえばセル電話、ラップトップコンピュータ、個人情報端末(PDA)などは、通信およびマルチメディアプログラムなどのプログラムを実行する処理システムを使用する。このような製品用の処理システムは、複数のプロセッサと、命令およびデータを格納する複合メモリシステムと、コントローラと、通信インタフェースなどの周辺装置と、たとえば、単一チップ上に構成された固定機能論理ブロックとを含みうる。同時に、可搬型製品は、処理システムによる高性能演算をサポートするのにしばしば必要とされる、バッテリの形の限られたエネルギーソースをもつ。バッテリ寿命を増大させるために、こうした演算を、可能な限り効率的に実施することが所望される。多くのパーソナルコンピュータも、全体的エネルギー消費を削減させて動作するための効率的設計により開発されている。
プロセッサは、条件付きブランチング命令を概して含む命令セットをもつパイプライン式アーキテクチャを利用する。プログラムは、条件付きブランチング命令を使って、プログラム動作の流れを制御することができる。ただし、条件付き分岐命令の実行は、概してプロセッサのパイプラインに深く入るまで判断されない関連分岐条件を解決している間、パイプライン中にバブルを引き起こす場合がある。多くのプロセッサは、条件付き分岐命令を実施しにくくさせるプロパティを解消するのを助けるために、条件付き非ブランチング命令も含む。非ブランチング命令の条件付き実行により、プログラマは、以前生成されたマシン状態に基づいて、命令が実行されることになるか、それとも実行されないことになるかを指定することができる。条件付き非分岐命令の使用により、条件付き分岐命令の必要性が低下し、それにより性能が向上する。
条件付き命令に関連づけられた条件が評価され、命令が実行されるべきでないことを示すとき、条件付き命令に関連づけられた資源は、既に消費されている場合がある。たとえば、条件付き非分岐命令が実行されるのに必要とされるレジスタオペランドが、既に取り出されている場合がある。また、条件付き非分岐命令は、プロセッサパイプライン中でパイプライン依存を不必要にもたらしている場合がある。たとえば、条件付き命令は、その条件が解決するのを待つ間、パイプライン中で停止している場合があり、それにより、条件付き命令の実行に依存するすべての命令に停止を波及させる。さらに、条件付き命令は、ソフトウェアループ中に存在する場合もあり、こうした命令の条件解決性が、あらゆるループ反復に対して同様に起こり、大幅な性能低下を引き起こしうる。
本開示では、そのいくつかの態様の中でも、条件付き非分岐命令の非実行を予測する、より効率的な方法および機器を提供することにより、プロセッサシステムにおいて性能を向上させ、パワー要件を削減することができると認識している。このような目的のために、本発明の実施形態は、発行された条件付き非分岐命令を実行しない方法を対象とする。条件付き非分岐命令は、ある予測に適格であると識別されるが、この予測は、適格な条件付き非分岐(ECNB)命令が実行されないことを示すものである。ECNB命令が実行されないという予測に応じて、ECNB命令は、無演算(NOP)命令として実行される。
別の実施形態は、条件付き非分岐命令が実行されないことを予測する機器を対象とする。この機器は、条件付き非分岐命令を、予測に適格であると識別する第1の回路を有する。この機器は、適格な条件付き非分岐(ECNB)命令が、評価基準を満たすことに応じて実行されないかどうかを予測する第2の回路を有する。
別の実施形態は、条件付き非分岐命令が実行されないことを予測する方法を対象とする。実行されるか、それとも実行されないかの予測に適格である条件付き非分岐命令が識別される。適格な条件付き非分岐(ECNB)命令は、評価基準を満たすことに応じて実行されないことが予測される。
本発明の他の実施形態が、本発明の様々な実施形態が例として示され記載されている以下の詳細な説明から、当業者には容易に明らかになることが理解されよう。了解されるように、本発明は、他の実施形態および様々な実施形態が可能であり、そのいくつかの詳細は、本発明の精神および範囲からすべて逸脱することなく、他の様々な点において修正が可能である。したがって、図面および詳細な説明は、制限ではなく、本質的に例示と見なされるべきである。
本発明の様々な態様を、限定ではなく例として、添付の図面に示す。
無線通信システムを示す図である。 条件付き非分岐命令を実行するか、それとも実行しないかを予測する例示的なプロセッサシステムを示す図である。 例示的な適格な条件付き非分岐(ECNB)命令予測回路を示す図である。 ECNB命令の実行を予測する第1のプロセスを示す図である。 ECNB命令の実行を予測する第2のプロセスを示す図である。 ECNB命令の実行を予測する第3のプロセスを示す図である。 ECNB命令の実行を予測する第4のプロセスを示す図である。
添付の図面に関連して以下で述べる詳細な説明は、本発明の様々な例示的実施形態の記載を意図しており、本発明が実施されうる実施形態のみを表すことは意図していない。詳細な説明は、本発明を完全に理解してもらう目的で、具体的な詳細を含んでいる。ただし、本発明は、こうした具体的な詳細なしでも実施されうることが当業者には明らかであろう。一部の事例では、公知の構造および構成要素を、本発明の概念を分かりにくくするのを避けるために、ブロック図の形で示してある。
図1は、本発明の実施形態が有利に利用されうる例示的な無線通信システム100を示す。説明のために、図1は、3つの遠隔ユニット120、130、150および2つの基地局140を示す。一般的な無線通信システムは、これより多くの遠隔ユニットおよび基地局を有しうることが理解されよう。構成要素125A、125C、125B、125Dでそれぞれ表されるハードウェア構成要素、ソフトウェア構成要素、またはその両方を含む遠隔ユニット120、130、150、および基地局140は、さらに後で論じるように、本発明を実施するように適合されている。図1は、基地局140から遠隔ユニット120、130、150への順方向リンク信号180および遠隔ユニット120、130、150から基地局140への逆方向リンク信号190を示している。
図1では、無線ローカルループシステムにおいて、遠隔ユニット120は移動電話として示され、遠隔ユニット130は可搬型コンピュータとして示され、遠隔ユニット150は定位置遠隔ユニットとして示されている。例として、遠隔ユニットは代替的には、セル電話、ページャ、ウォーキートーキー、ハンドヘルド個人通信システム(PCS)ユニット、個人情報端末などの可搬型データユニット、またはメータ読取り機器などの定位置データユニットでもよい。図1は、本開示の教示による遠隔ユニットを示しているが、本開示は、図示しているこうした例示的ユニットに限定されない。本発明の実施形態は、条件付き非ブランチング命令をもつプロセッサにおいて適切に利用することができる。
図2は、条件付き非分岐命令を実行するか、それとも実行しないかを予測する例示的なプロセッサシステム200を示す。プロセッサシステム200は、プロセッサ210、キャッシュシステム212、システムメモリ214、および入出力(I/O)システム216を含む。プロセッサ210は、たとえば、命令パイプライン220および条件付き非分岐予測論理回路222を備える。キャッシュシステム212は、たとえば、命令キャッシュ(Icache)224、メモリコントローラ226、およびデータキャッシュ(Dcache)228を備える。システムメモリ214は、Icache224でもDcache228でも見つからない命令およびデータに対するアクセスを与える。キャッシュシステム212は、プロセッサ210と統合することができ、階層編成された複数のキャッシュレベルをさらに含みうることに留意されたい。I/Oシステム216は、プロセッサ210とインタフェースをとる複数のI/O装置、たとえばI/O装置240、242を備える。
命令パイプライン220は、取出しステージ230、解読ステージ231、発行ステージ232、実行ステージ233、および完了ステージ234など、一連のステージからなる。命令パイプライン220中の各ステージ230〜234は、たとえば、各ステージにおいて要求されるプロセッサの演算頻度および演算の複雑さに応じて、いくつかの追加パイプラインステージを備えうることが当業者には理解されよう。また、実行ステージは、加算器、乗算器、論理演算、シフトおよび回転演算などのような、1つまたは複数の命令実行ステージ回路からなりうる。このような命令実行ステージ回路は、条件付き非分岐命令に関連づけられうる。パイプラインステージはそれぞれ、本明細書に記載する条件付き予測方法および機器から逸脱することなく、変形実装形態を有しうる。
取出しステージ230は、条件付き分岐命令および条件付き非ブランチング命令を含みうるコンピュータプログラムフローに従って、命令キャッシュ(Icache)224から、実行するための命令を取り出す。概して、取り出された条件付き分岐命令は、条件付き分岐がとられるかどうかを予測するのに、分岐予測論理を用いる。条件付き非分岐命令ではない、取り出された非分岐命令は、解読ステージ231に進んで解読され、実行のために発行ステージ232で発行され、実行ステージ233で実行され、完了ステージ234で撤収される。取り出された条件付き非分岐命令は、命令が実行されるべきでないかどうか判断するのに、本明細書に記載する条件付き非分岐予測論理回路222を使用する。実行されない条件付き非分岐命令は、プロセッサ状態を、条件付き非分岐命令を発見する前のまま変化させない。
条件付き非分岐予測論理回路222は、検出論理回路246と、フィルタ250および条件履歴テーブル252を有する監視論理回路248と、予測および修正論理回路254とを備える。一実施形態では、条件付き非分岐命令の大多数は概して、その条件を、ソフトウェアループのほとんどの反復に関して同じ値に解決していると仮定される。
検出論理回路246は、一実施形態では、ソフトウェアループ内で使われる条件付き分岐命令の動的特性に基づいて動作するソフトウェアループ検出装置として作用する。単一入口および単一出口を有するソフトウェアループにおいて、ループ終了分岐は概して、ソフトウェアループを出る最終反復を除いて、ループのすべての反復に関してソフトウェアループの先頭に戻り分岐する条件付き分岐命令である。検出論理回路246は、以降で、およびその全体が本明細書に組み込まれている、本出願の譲受人に譲渡された、「Suppressing Update of a Branch History Register by Loop-Ending Branches」という名称の米国特許出願第11/066,508号に、より詳しく説明されているソフトウェアループの検出のための複数の実施形態を有しうる。
一実施形態によると、分岐目標アドレスが条件付き分岐命令アドレスより小さく、したがって後方分岐と見なされるあらゆる条件付き分岐命令は、ループ終了分岐命令であると仮定される。本実施形態では、分岐目標アドレスが判断されたときにアドレス比較を必要とする。すべての後方分岐がループ終了分岐であるわけではないので、解消される必要がある、ある程度の不正確さがある。
別の実施形態では、ループ終了分岐は、同じ分岐命令の繰返し実行を認識することによって、単純ループ中で検出されうる。最終後方分岐命令に関するプログラムカウンタ値を特殊目的レジスタに格納し、この格納された値を次の後方分岐命令の命令アドレスと比較することによって、2つの命令アドレスが一致したときにループ終了分岐を認識することができる。コードは、条件付き分岐命令をソフトウェアループ中に含みうるので、ループ終了分岐命令の判断は、より複雑になりうる。このような状況では、複数の特殊目的レジスタを、各条件付き分岐命令の命令アドレスを格納するようにハードウェアでインスタンス化すればよい。格納された値すべてと比較することによって、ループ終了分岐に対して一致を判断することができる。
ループ終了分岐は、コンパイラまたはアセンブラによって静的にマーキングすることもできる。たとえば、一実施形態では、コンパイラが、一意のオペコードの使用により、またはループ終了分岐に対してのみ使われる特殊形式ビットフィールドをセットすることによって、特定のタイプの分岐命令を生成する。特定の分岐命令を解読すると、ループ終了分岐が判断される。
監視論理回路248は、フィルタ250、条件履歴テーブル(CHT)252、および関連づけられた監視論理を備える。一実施形態では、監視プロセスは、予測に適格な条件付き非分岐命令を有するソフトウェアループの1つまたは複数の先行実行において起きた可能性がある、予め指定された条件イベントの状態情報を保存する。一実施形態では、条件付き非分岐命令のすべてが予測に適格なわけではない場合がある。たとえば、実装が複雑なためにマイクロコードで実装される条件付き非分岐命令は、予測された実行動作に適格でない場合がある。また、条件付き分岐命令は、条件付き非分岐命令予測に適格にならない。というのは、こうした分岐命令は概して、本明細書に記載する予測技法とは異なるように動作する独自の予測ハードウェアおよび方法を有するからである。
適格な条件付き非分岐(ECNB)命令が実行されないときを予測するのに、履歴情報が使われる。後でより詳しく説明するように、ECNB命令が実行されるか、それとも実行されないかを、高い信頼度で判断するための手法が用いられる。信頼度の高い予測方法を判断するための手法が有利である。というのは、ECNB命令を、実行されるべきときに実行されないと予測することによる不利益は、ECNB命令を、実行されるべきでないときに実行されると予測するよりも重大だからである。たとえば、実行されないと予測されるECNB命令は、ECNB命令に関連づけられたパイプライン演算を、ECNB命令が実行されないと予測されるときに必要とされない選択ECNB演算を実施しないことによって、パワーを最小限にし、かつ/または性能を向上させるように変えることになる。たとえば、条件付きロード命令によって指定されるメモリオペランドは、条件付きロード命令が実行されないと予測された場合は取り出される必要がない。実行されないと予測されたこのようなECNB命令に対して、パイプラインは、パワーを削減し性能を向上させるために、たとえば、適切なパイプラインステージで、命令の実行に必要とされるどのレジスタまたはメモリオペランドも取り出さないように変えられることになる。ただし、予測されたECNB命令によって指定される条件が、正しくない予測を示す場合、パイプラインは、少なくとも、正しくない予測による影響が訂正されうる、取り出されたコード中のポイントまでフラッシュされなければならない。実行されるべきでないときに実行されると予測されるECNB命令は、パイプラインフラッシュを必要とせず、代わりに、正しくない予測のケースでは、プロセッサ状態が影響を受けないように命令を終了する。
条件評価プロセスは、予め指定された条件イベントの保存された状態情報を評価し、予め指定された評価基準が満たされると、現在の適格な条件付き非分岐(ECNB)命令の予測を、ループ中での命令の次の実行に対して有効にする。たとえば、予め指定された条件イベントは、ソフトウェアループが実行されるべき予め指定された回数および関連づけられた条件の状態に基づく、以前の1つまたは複数のECNB命令が実行されたか、それとも実行されなかったかを含みうる。たとえば、予め指定された評価基準は、ソフトウェアループの設定反復回数を満たすこと、およびループ反復の以前の設定回数において発見された、以前のECNB命令を実行しなかったという先行状況を有することを含みうる。たとえば、予め指定された評価基準は、ソフトウェアループの以前の2回の実行において発見された以前のECNB命令を実行しなかったことを要求しうる。このようなケースにおいて、現在のECNB命令は、次のソフトウェアループ反復において実行されないと予測される。
このような監視論理回路248をサポートした上で、フィルタ250は、取り出された条件付き非分岐命令が、予測された実行に適格かどうか判断する。取り出された命令が、予測された実行に適格でない場合、取り出された命令は、予測情報の助けなしで、プロセッサのアーキテクチャによって指定されたように実行される。取り出された命令が、予測された実行に適格な場合、CHT・252が有効にされる。ECNB命令に関連づけられたCHT・252中のエントリが選択されて、予測および修正論理回路254の一部である予測論理に予測情報を提供する。このような予測情報は、たとえば、ECNB命令がパイプライン中を移動するときにパイプラインステージ232〜234によって追跡される。
CHT・252エントリは、予測された実行に適格な、取り出された命令に関する実行の履歴を記録する。たとえば、各CHTエントリは、実行状況カウンタからのカウント値と、予測論理への入力である状況ビットとの組合せを含みうる。CHT・252は、取り出されたECNB命令を、取り出されたECNB命令に関連づけられたCHT・252中のエントリに索引づけさせるための索引論理も備えうる。というのは、ソフトウェアループには複数のECNB命令が存在しうるからである。たとえば、ソフトウェアループの先頭からECNB命令の数をカウントすることによって、カウントは、CHT・252への索引として使うことができる。監視論理回路248は、ソフトウェアループの反復をカウントし、実行状況カウンタが、たとえば、強非実行状況を表す、指定されたカウント値で飽和する機会があったことを保証するループカウンタを含む。実行状況カウンタが飽和した場合、予測論理が有効にされて、ループの次の反復では、関連づけられた、取り出された条件付き非分岐命令を実行しないという予測を行う。
予測および修正論理254は、レジスタ発行追跡(TrI)262、レジスタ実行追跡(TrE)263、およびレジスタ完了追跡(TrC)264における発行ステージ232、実行ステージ233、および完了ステージ234で追跡される予測情報を生成する。たとえば、ECNB命令の非実行を予測する際、ECNB命令は、たとえば、パイプラインステージ232〜234では事実上、無演算(NOP)命令として扱われる。ECNB命令をNOPとして扱うことによって、ECNB命令が実行されるときに必要とされる場合、汎用レジスタ(GPR)は、予測されたNOP命令の実行に必要とされないので読み込まれない。ECNB命令がロードまたは格納メモリアクセス命令だった場合、メモリアクセス動作は、予測されたNOP命令としては開始されない。たとえば、実行ステージ233で動作するオペランド取出し回路235は、実行されないという予測に応じて、ECNB命令が実行されるのに必要とされるオペランドを取り出さない。GPRも読み込まずメモリにもアクセスしないことによって、プロセッサ210内でパワーを削減することができる。また、GPRを読み込まず、メモリにアクセスせず、ECNB命令がNOPとして予測されるときに必要とされないオペランドを不必要に待たないことによって、プロセッサ性能が向上しうる。
実行ステージ233に達すると、ECNB命令用に指定された実行条件が、その予測に対して反対の評価をしている場合、予測されたNOP命令のパイプライン実行は訂正される。たとえば、パイプラインへの訂正は、予測が行われたステージで始まる、パイプライン中の命令のフラッシングを含みうる。代替実施形態では、パイプラインは、ECNB命令が最初に取り出された開始取出しステージからフラッシュすることができる。また、適切なCHTエントリも、正しくない予測の後で訂正することができる。
図3は、例示的な適格な条件付き非分岐(ECNB)命令予測回路300を示す。ECNB予測回路300は、回路および回路の間の制御信号パスを示す。より具体的には、ECNB命令予測回路300は、検出回路304と、モニタ回路306と、予測および修正回路308とを含む。モニタ回路306は、フィルタ回路310および条件履歴テーブル(CHT)回路312を備える。予測および修正回路308は、予測回路314、追跡回路316、および訂正回路318を備える。
検出回路304は、ループ検出装置として作用するが、検出論理回路246に関して上述したようにループ終了分岐を検出するように動作する。たとえば、ループ終了分岐は概して、ループを出る最終反復を除く、ループのすべての反復に対して、ループの開始に戻り分岐する条件付き分岐命令である。各識別ループに関する情報は、フィルタ回路310に渡される。
一実施形態では、フィルタ回路は、たとえば、ある特定のループの3回の反復など、設定反復回数のソフトウェアループが起きたという指示を与えるループカウンタである。各ループ反復ごとに、フィルタは、条件付き非分岐命令が予測に適格かどうか判断する。適格な条件付き非分岐(ECNB)命令がループ中にある場合、そのECNB命令を実行するという状況が、条件履歴テーブル(CHT)回路312に記録される。たとえば、実行状況カウンタを使って、ECNB命令の以前の試行済み実行の実行履歴を記録すればよい。実行状況カウンタは、ECNB命令が条件付きで実行されたことを示すように一方向に、また、ECNB命令が条件付きで実行されなかったことを示すように反対方向に更新することができる。たとえば、非実行状況によりカウンタが減分され、実行状況によりカウンタが増分されるように、2ビットの実行状況カウンタを使えばよい。実行状況カウンタの出力状態は、たとえば、以前のECNB命令が実行されていると強指示されることを示すための「11」出力、以前のECNB命令が実行されていると弱指示されることを示すための「10」出力、以前のECNB命令が実行されていないと弱指示されることを示すための「01」出力、および以前のECNB命令が実行されていないと強指示されることを示す「00」出力を割り当てられる。実行状況カウンタの「11」出力および「00」出力は、飽和した出力値となる。実行状況カウンタは、検出されたソフトウェアループ中の各ECNB命令に関連づけられ、または命令に関する状況を与えることになる。ただし、ある特定の実装形態では、実装形態において使われる実行状況カウンタの数を制限し、したがって予測されうるECNB命令の数を制限する場合がある。検出回路304は概して、ソフトウェアループへの最初のエントリを見つけると、実行状況カウンタをリセットする。
あるいは、無効予測フラグは、実行状況カウンタよりも、予測されるべき各ECNB命令に関連づけられうる。無効予測フラグは、関連づけられたECNB命令が実行済みであると以前に判断されたことがある場合、予測を無効にするようにアクティブにセットされる。実行済みの以前のECNB命令があるということは、ECNB命令に関して実行されないという状況を予測する際の信頼度レベルが、許容可能でありうるよりも低いことを含意する。
索引カウンタは、CHT・312とともに、どのECNB命令がソフトウェアループ中でカウントされ、または評価されている最中であるか判断するのに使うこともできる。たとえば、5つ以上のECNB命令をもつループ中で、第1のECNB命令は、「000」の索引をもつことができ、第4の適格な非分岐命令は、「011」の索引をもつことができる。索引は、対応するECNB命令に関する、格納された実行状況カウンタ値にアクセスするための、CHT・312中でのアドレスを表す。
予測回路314は、実行状況カウンタ出力値など、ECNB命令に関する予測情報を受け取り、図2の解読ステージ231中に、たとえば、ECNB命令が実行されないと予測する。代替実装形態では、予測回路314は、ECNB命令によって指定された条件が、非実行状態に値すると予測しうる。予測回路314は、予測決定を追跡回路316に渡すが、この決定は、予測される関連ECNB命令と、対応するCHTエントリ内容とを含みうる。ECNB命令が予測されない場合、予測情報は正常実行を示していた。ECNB命令が、NOP命令として実行されないと予測された場合、情報を追跡することにより、実行の状況および関連づけられた条件評価に関して訂正回路318に知らせて、正しくない予測が行われたかどうか判断する。正しくない予測が行われた場合、訂正回路318は、パイプラインをフラッシュし、CHT・312中の適切な実行状況カウンタを更新し、一実施形態では、関連づけられたCHTエントリを、この特定のECNB命令はこのポイントから先では予測されるべきでないことを示すようにマーキングする。別の実施形態では、訂正回路318は、ECNB命令の予測がはずれたと判断すると、予め指定された評価基準を、たとえば、このポイントから先では予測基準をより保守的にするように変えてもよい。
ループ中の適格な条件付き非分岐(ECNB)命令のシーケンスは、各命令が同じ条件解決に依存するようにコーディングされうることが認識されよう。このようなケースにおいて、ECNB命令シーケンスは、条件履歴テーブル(CHT)中で、単一入口をもつグループとして扱われうる。このようなケースにおいて、予測が非実行を示すとき、ECNB命令シーケンスは、無演算(NOP)命令のシーケンスとして扱われる。たとえば、ECNB命令のグループは、2つの条件付きロードオペランド命令と、その後に続く、ロードされた2つのオペランドに対する演算を指定する条件付き算術命令とを含みうる。さらに、こうした3つのECNB命令は、同じ条件解決に依存する。パイプラインプロセッサ内で、こうした3つの命令は、同じ条件解決を有する条件付きグループとして、パイプライン中で早期に識別されうる。一実施形態では、パイプライン中のグループの最初の条件付きロード命令が、予測評価をトリガし、CHT中のエントリは、このECNB命令グループに関連づけられたものとしてマーキングされうる。このようにして、ECNB命令グループは、ECNBグループのすべての命令が同じ索引に値するように、CHTでの単一の索引に関連づけられる。
適格な条件付き非分岐(ECNB)命令は、ループの外でも認識することができ、有利には実行されないと予測することもできることが認識されよう。検出回路304は、アドレス範囲検出回路として作用するのだが、ECNB命令予測が評価されるべきであるアドレス範囲を検出する。このアドレス範囲に入るコードが取り出されると常に、ECNB命令予測回路300は有効にされ、アドレス範囲内のECNB命令が監視され評価される。評価基準が満たされるとき、ECNB命令は、上で記載したのと同様に動作する追跡および訂正により、実行される、または実行されないと予測される。
すべてのループまたはアドレス範囲が、同様の特性をもつわけではないことを、さらに認識されたい。ある特定のループまたはアドレス範囲が、不十分な予測結果を与える場合、そのループまたはアドレス範囲は、予測を無効にするようにマーキングされうる。同様にして、ある特定のループまたはアドレス範囲が、1組の動作シナリオの下では良好な予測で動作する場合があり、異なる1組の動作シナリオの下では不十分な予測で動作する場合がある。このようなケースにおいて、動作シナリオの認識により、予測は有効にされ、無効にされ、または動作シナリオに適した異なる評価基準で有効にされる。
図4Aは、ECNB命令の実行を予測する第1のプロセス400を示す。ブロック402で、ソフトウェアループを求めてプロセッサコード実行が監視される。決定ブロック404で、ソフトウェアループが検出された、コード中のポイントに達したかどうか判断が行われる。ソフトウェアループは、たとえば、上述したように、ループの開始への後方分岐を識別することによって判断することができる。どのソフトウェアループも識別されなかった場合、第1のプロセス400はブロック402に戻る。ソフトウェアループが識別された場合、コード中のこのポイントにおいて、ソフトウェアループの第1のサイクルは既に実行されており、ソフトウェアループの次のサイクルが、開始する準備ができている。
ソフトウェアループの次のサイクルにおいて、決定ブロック406で、ECNB命令が、たとえば、図2の解読ステージ231などのパイプライン解読ステージ中で検出されているかどうか判断が行われる。どのECNB命令も検出されていない場合、プロセス400は決定ブロック408に進む。決定ブロック408で、ソフトウェアループを介した受渡しが完了しているかどうか判断が行われる。ソフトウェアループを介した第1の受渡しは、たとえば、決定ブロック404でソフトウェアループを識別した後方分岐に達することによって判断することができる。ソフトウェアループを介した受渡しが完了していない場合、第1のプロセス400は決定ブロック406に戻って、ECNB命令の検査を続ける。決定ブロック406で、ECNB命令が検出されている場合、第1のプロセス400は決定ブロック410に進む。決定ブロック410で、たとえば、プロセッサ解読ステージ231中に、このECNB命令に関する予め指定された評価基準が満たされているかどうか判断が行われる。予め指定された評価基準は、たとえば、ループ反復カウントが、予め指定された値、たとえば3以上かどうかでよい。予め指定された評価基準が満たされていない場合、第1のプロセス400はブロック412に進む。ブロック412で、このECNB命令が実行され、このECNB命令に関して実行状況が更新される。たとえば、ECNB命令が条件付きで実行された場合は無効予測フラグがセットされる。無効予測フラグは、一度セットされると、たとえば、ソフトウェアループが完了するまでリセットすることができない。
決定ブロック408で、ソフトウェアループを介した受渡しが完了しているかどうか判断が行われる。ソフトウェアループを介した受渡しが完了している場合、第1のプロセス400は決定ブロック414に進む。決定ブロック414で、ソフトウェアループが終わったかどうか判断が行われる。ソフトウェアループが終了していない場合、第1のプロセス400はブロック416に進む。ブロック416で、ループ反復がカウントされ、第1のプロセス400は、決定ブロック406に戻って、ECNB命令を検査し続ける。ソフトウェアループが終了した場合、第1のプロセス400はブロック418に進む。ブロック418で、第1のプロセス400において使われた予測回路がリセットされる。このようなリセットにより、ソフトウェアループに入る度に、予測評価が、再初期化回路を用いて開始する。あるいは、リセットは、新たなソフトウェアループが検出されると常に起こりうる。第1のプロセス400は次いで、ブロック402に戻って、次のソフトウェアループを求めて探索を始める。
決定ブロック410に戻り、予め指定された基準が満たされている場合、第1のプロセス400は決定ブロック420に進む。決定ブロック420で、このECNB命令に対する実行条件が満足されるかどうかに関して判断が行われる。たとえば、実行条件は、このECNB命令に対する無効予測フラグの形をとりうる。無効予測フラグは概して、ECNB命令のインスタンスが条件付きで実行されるときは常にセットされる。このような無効予測フラグは、一度セットされると、たとえば、ソフトウェアループが完了するまでリセットすることができない。決定ブロック420に戻り、無効予測フラグが、ECNB命令が以前実行されたことがあることを示す無効予測状態にある場合、第1のプロセス400はブロック412に戻る。無効予測フラグが、ECNB命令が以前実行されたことがないことを示す有効予測状態にある場合、第1のプロセス400はブロック421に進む。ブロック421で、このECNB命令は、NOP命令として実行されると予測される。ブロック422で、この予測が、プロセッサパイプライン中で追跡される。決定ブロック424で、このECNB命令に関連づけられた条件が判断されたパイプラインステージで、ブロック420の予測が正しかったかどうか判断が行われる。予測が正しかった場合、それ以上のECNB命令はソフトウェアループ中で評価される必要がないので、プロセス400はブロック408に戻る。予測が正しくなかった場合、第1のプロセス400はブロック426に進む。ブロック426で、正しくない予測をされたECNB命令と、予測された動作によって影響を受けた可能性がある、パイプライン中のあらゆる命令とを削除するために、プロセッサパイプラインのフラッシュが開始される。ブロック426で、パイプラインは、このECNB命令を検出したポイントまで訂正される。プロセス400は次いで、ブロック412に戻り、ここでこのECNB命令は次いで、実行することができ、この命令に関連づけられた実行状況が更新される。
図4Bは、ECNB命令の実行を予測する第2のプロセス450を示す。ブロック452で、ECNB命令を求めてプロセッサコード実行が監視される。決定ブロック454で、ECNB命令が、たとえば、図2の解読ステージ231などのパイプライン解読ステージ中に検出されているかどうか判断が行われる。どのECNB命令も検出されていない場合、第2のプロセス450はブロック452に戻る。ECNB命令が検出されている場合、第2のプロセス450は決定ブロック456に進む。決定ブロック456で、プロセッサ解読ステージ231中に、たとえば、このECNB命令に関する予め指定された評価基準が満たされているかどうか判断が行われる。予め指定された評価基準は、たとえば、ECNB命令に関連づけられたループ反復カウントが、予め指定された値、たとえば3以上かどうかでよい。予め指定された評価基準が満たされていない場合、第2のプロセス450はブロック458に進む。ブロック458で、このECNB命令が実行され、このECNB命令に関して実行状況カウンタが更新される。
決定ブロック460で、ソフトウェアループが検出されているかどうか判断が行われる。ソフトウェアループは、たとえば、上述したように、コード中の後方分岐を識別することによって判断することができる。ソフトウェアループが検出されなかった場合、第2のプロセス450はブロック452に戻って、別のECNB命令を検査する。ソフトウェアループが検出された場合、第2のプロセス450はブロック462に進む。ブロック462で、第2のプロセス450では、ソフトウェアループ中のECNB命令のみが予測されるので、検出されたループの一部ではないECNB命令用の実行状況カウンタが初期化される。図4Bは、ループの外に他のECNB命令をもつコードシーケンス中でループが検出されるという、予期されるケースをカバーする。ループの外にある他のECNB命令は、CHT容量に影響し、検出されたループ中で評価されるECNB命令の数を制限する場合もある。したがって、ループの外にある、発見されたECNB命令の実行状況カウンタは、初期化し直され、CHT論理は、後でさらに詳しく記載するように調整される。
検出されたソフトウェアループの一部ではないECNB命令は、ECNB命令のアドレスおよびソフトウェアループのアドレス範囲から判断することができる。条件履歴テーブル(CHT)の開始エントリは、ソフトウェアループ中で検出されたECNB命令を表すように調整される。検出されたループの一部ではないECNB命令用の実行状況カウンタは、ソフトウェアループ内部のECNB命令用のCHTの容量を増やすために、CHTに割当てし直されうることにも留意されたい。決定ブロック464で、ソフトウェアループが終わったかどうか判断が行われる。ソフトウェアループが終了していない場合、第2のプロセス450はブロック466に進む。ブロック466で、ループ反復がカウントされ、プロセスはブロック452に戻る。ソフトウェアループが終了した場合、第2のプロセス450はブロック468に進む。ブロック468で、第2のプロセス450で使われた予測回路がリセットされる。このようなリセットにより、ソフトウェアループに入る度に、予測評価が再初期化回路を用いて開始する。あるいは、リセットは、新たなソフトウェアループが検出されると常に起こりうる。
決定ブロック456に戻り、予め指定された基準が満たされている場合、第2のプロセス450は決定ブロック470に進む。決定ブロック470で、このECNB命令を無演算(NOP)命令として実行するかどうか判断が行われる。たとえば、このECNB命令は、ECNB命令によって指定される関数を実行すると予測されうる。このようなケースにおいて、第2のプロセス450はブロック458に進む。あるいは、このECNB命令は、NOP命令として実行されると予測されうる。ブロック472で、この予測は、プロセッサパイプライン中で追跡される。決定ブロック474で、このECNB命令に関連づけられた条件が判断されたパイプラインステージにおいて、ブロック470の予測が正しかったかどうか判断が行われる。予測が正しかった場合、第2のプロセス450はブロック460に戻る。予測が正しくなかった場合、第2のプロセス450はブロック476に進む。ブロック476で、正しくない予測をされたECNB命令と、予測された動作によって影響を受けた可能性がある、パイプライン中のあらゆる命令とを削除するために、プロセッサパイプラインのフラッシュが開始される。ブロック478で、評価されているソフトウェアループ中で正しくない予測を見つけたことにより、第2のプロセス450で使われた予測回路がリセットされる。第2のプロセス450は次いで、ブロック452に戻る。あるいは、正しくない予測を反映するように、ECNB命令状況カウンタに対して訂正を行ってもよく、プロセスが継続してよい。
図5は、ECNB命令の実行を予測する第3のプロセス500を示す。ブロック502で、プロセッサコード実行が監視されて、予め指定されたアドレス範囲から取り出されたコードをプロセッサが実行中であるかどうか判断する。たとえば、コンパイラまたは他のソフトウェアツールが、コードのセクション中でECNB命令を識別し、識別されたECNB命令のアドレスを使って、予め指定されたアドレス範囲を一般化することができる。決定ブロック504で、予め指定されたアドレス範囲が、たとえば、図2の取出しステージ230などのパイプライン取出しステージ中に検出されているかどうか判断が行われる。予め指定されたアドレス範囲が検出されていない場合、第3のプロセス500はブロック502に戻る。予め指定されたアドレス範囲が検出されている場合、第3のプロセス500はブロック506に進む。ブロック506で、アドレス範囲カウンタが、ある特定のアドレス範囲に入った回数を示すように更新される。ブロック508で、プロセッサコードが、ECNB命令を求めて監視される。決定ブロック510で、ECNB命令が、たとえば、図2の解読ステージ231などのパイプライン解読ステージ中に検出されているかどうか判断が行われる。どのECNB命令も検出されていない場合、第3のプロセス500は決定ブロック512に進む。決定ブロック512で、プロセッサが、予め指定されたアドレス範囲内で依然としてコードを実行中であるかどうか判断が行われる。プロセッサが、予め指定されたアドレス範囲内でコードを実行中でない場合、第3のプロセス500はブロック502に進む。プロセッサが、予め指定されたアドレス範囲内でコードを実行中である場合、第3のプロセス500はブロック508に進む。
決定ブロック510に戻り、ECNB命令が検出されている場合、第3のプロセス500は決定ブロック514に進む。決定ブロック514で、図2のプロセッサ解読ステージ231中に、たとえば、このECNB命令に関する予め指定された評価基準が満たされているかどうか判断が行われる。予め指定された評価基準は、ECNB命令がNOPとして実行されることを高レベルの信頼度で予測するように選ばれる。たとえば、一実施形態では、予め指定された評価基準は、ECNB命令の、以前の少なくとも2回の試行済み実行が、強非実行状況を有することを要求するように設定されうる。予め指定された評価基準が満たされていない場合、第3のプロセス500はブロック516に進む。ブロック516で、このECNB命令が実行され、このECNB命令に関して実行状況カウンタが更新される。第3のプロセス500は次いで、決定ブロック512に戻って、予め指定されたアドレス範囲内のコードをプロセッサが依然として実行中であるかどうか判断し、判断が肯定の場合はブロック508に戻り、そうでない場合はブロック502に戻る。
決定ブロック514に戻り、予め指定された評価基準が満たされている場合、第3のプロセス500はブロック520に進む。ブロック520で、このECNB命令の実行は、NOP命令として実行されると予測される。ブロック522で、この予測は、プロセッサパイプライン中で追跡される。決定ブロック524で、このECNB命令に関連づけられた条件が判断されたパイプラインステージにおいて、ブロック520の予測が正しかったかどうか判断が行われる。予測が正しかった場合、第3のプロセス500は、決定ブロック512に戻って、予め指定されたアドレス範囲内でコードをプロセッサが依然として実行中であるかどうか判断し、判断が肯定の場合はブロック508に戻り、そうでない場合はブロック502に戻る。
決定ブロック524に戻り、予測が正しくなかった場合、第3のプロセス500はブロック528に進む。ブロック528で、正しくない予測をされたECNB命令と、予測された動作によって影響を受けた可能性があるパイプライン中のあらゆる命令とを削除するために、プロセッサパイプラインのフラッシュが開始される。ブロック530で、このECNB命令用の予測回路が更新される。プロセス500は次いで、ブロック508に戻る。
図6は、ECNB命令の実行を予測する第4のプロセス600を示す。第4のプロセス600は、ECNB命令が、同じECNB命令の識別の間で、比較的短いまたは比較的長い期間のプロセッササイクルをもつものとして繰り返し識別されるかどうか評価する。比較的短い期間のプロセッササイクルは、ECNB命令がソフトウェアループ中に置かれていることを示しうる。比較的長い期間のプロセッササイクルは、主として、ユーザが映像を表示のためにダウンロードするときなどに呼び出されたルーチンにより実行することができるアドレス範囲内にECNB命令が置かれていることを示しうる。このようなケースでは、ECNB命令をもつMPEGデコードルーチンを呼び出すことができる。
ブロック602で、ECNB命令を求めてプロセッサコード実行が監視される。決定ブロック604で、たとえば、図2の解読ステージ231などのパイプライン解読ステージ中に、ECNB命令が検出されているかどうか判断が行われる。どのECNB命令も検出されていない場合、第4のプロセス600はブロック602に戻る。ECNB命令が検出されている場合、第4のプロセス600は決定ブロック606に進む。決定ブロック606で、このECNB命令が以前識別されたことがあるかどうか判断が行われる。このECNB命令が識別されたのは今回が初めてである場合、第4のプロセス600はブロック608に進む。ブロック608で、このECNB命令のアドレスが記録される。ブロック610で、「ヒット」カウンタが、たとえば、カウント1に初期化される。ブロック612で、経過サイクルカウンタがスタートされて、このECNB命令の発見の間の経過サイクルの数をカウントする。カウントされるサイクルの数は、意図された目的のために、中断ルーチンおよびダイレクトメモリアクセス動作を、こうした他の動作に関連づけられたサイクルがカウントの正確さに影響する程度まで考慮するためにフィルタリングされなければならない場合があることに留意されたい。ブロック614で、このECNB命令が実行され、実行状況カウンタが更新される。第4のプロセス600は次いで、ブロック602に戻る。
決定ブロック606に戻り、このECNB命令が以前識別されたことがある場合、第4のプロセス600はブロック618に進む。ブロック618で、このECNB命令が発見された回数と、発見の間の経過サイクルの数とが評価される。ブロック619で、「ヒット」カウンタが更新され、現在の経過サイクルカウントが格納され、経過サイクルカウンタがリスタートされて、発見の間の次の期間中に経過するサイクルの数をカウントする。決定ブロック620で、予め指定された評価基準が評価されるかどうか判断が行われる。一実施形態では、予め指定された評価基準は、2つの発見の間のプロセッササイクルがX個未満である実行状況カウンタ中で、以前の少なくとも2回の試行済み実行が、強非実行状況をもつことを要求するように設定されうる。別の実施形態では、予め指定された評価基準は、以前の少なくとも3回の試行済み実行を要求するように設定されてよく、こうした実行はそれぞれ、実行状況カウンタ中で強非実行状況をもち、3つの発見それぞれの間のプロセッササイクルは少なくともY個であり、YはXより大きい。予め指定された評価基準が満たされない場合、第4のプロセス600はブロック614に戻り、ここで、このECNB命令が実行され、実行状況カウンタが更新される。プロセスは次いで、ブロック602に逆進する。
決定ブロック620に戻り、予め指定された評価基準が満たされる場合、第4のプロセス600はブロック624に進む。ブロック624で、このECNB命令の実行が予測される。たとえば、このECNB命令は、NOP命令として実行されると予測される。ブロック626で、この予測は、プロセッサパイプライン中で追跡される。決定ブロック628で、このECNB命令に関連づけられた条件が判断されたパイプラインステージにおいて、ブロック624の予測が正しかったかどうか判断が行われる。予測が正しかった場合、第4のプロセス600はブロック602に戻る。予測が正しくなかった場合、第4のプロセス600はブロック632に進む。ブロック632で、正しくない予測をされたECNB命令と、予測された動作によって影響を受けた可能性がある、パイプライン中のあらゆる命令とを削除するために、プロセッサパイプラインのフラッシュが開始される。ブロック634で、このECNB命令に使われた予測回路がリセットされる。プロセス600は次いで、ブロック602に戻る。
本明細書で開示した実施形態に関連して記載した様々な例示的論理ブロック、モジュール、回路、要素、または構成要素は、本明細書に記載した機能を実施するように設計された汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理構成要素、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、またはそのどの組合せでも実装し、または実施することができる。汎用プロセッサは、マイクロプロセッサでよいが、別の方法では、プロセッサは、従来のどのプロセッサ、コントローラ、マイクロコントローラ、または状態マシンでもよい。プロセッサは、コンピューティング構成要素の組合せ、たとえば、DSPと1つのマイクロプロセッサ、複数のマイクロプロセッサ、1つまたは複数のマイクロプロセッサとの組合せとして、DSPコア、または所望の応用分野に適した他のこのような任意の構成とともに実装することもできる。
本明細書で開示した実施形態に関連して記載した方法は、直接ハードウェアで、プロセッサによって実行されるソフトウェアモジュールで、またはこの2つの組合せで実施することができる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、取外し可能ディスク、CD-ROM、または当該分野において公知である他のどの形の記憶媒体に存在してもよい。記憶媒体は、プロセッサが記憶媒体から情報を読み取り、情報を書き込むことができるようにプロセッサに結合されうる。別の方法では、記憶媒体は、プロセッサと一体でよい。
たとえば、プロセッサ210は、たとえば、I/O装置240または242の1つなど、命令キャッシュを通して利用可能またはI/O装置を介してアクセス可能な、プロセッサとローカルに直接関連づけられたコンピュータ可読記憶媒体に格納されたプログラムの制御下で、条件付き非分岐命令を含む命令を実行するように構成されうる。I/O装置は、Dcache228など、プロセッサとローカルに直接関連づけられ、または別のプロセッサのメモリからアクセス可能なメモリデバイスにあるデータにアクセスすることもできる。コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、動的ランダムアクセスメモリ(DRAM)、同期動的ランダムアクセスメモリ(SDRAM)、フラッシュメモリ、読出し専用メモリ(ROM)、プログラマブル読出し専用メモリ(PROM)、消去可能プログラマブル読出し専用メモリ(EPROM)、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、他のタイプの取外し可能ディスク、または他の適切などの記憶媒体も含みうる。
本発明を、プロセッサシステムにおいて使用するための例示的な実施形態のコンテキストにおいて開示したが、上記考察および後に続く請求項と一致する非常に様々な実装形態が当業者によって利用されうることが理解されよう。たとえば、固定機能実装形態でも、本発明の様々な実施形態を使用することができる。
100 無線通信システム
120、130、150 遠隔ユニット
140 基地局
180、190 リンク信号
200 プロセッサシステム
210 プロセッサ
212 キャッシュシステム
214 システムメモリ
216 入出力(I/O)システム
220 命令パイプライン
222 条件付き非分岐予測論理回路
224 命令キャッシュ(Icache)
226 メモリコントローラ
228 データキャッシュ(Dcache)
230 取出しステージ
231 解読ステージ
232 発行ステージ
233 実行ステージ
234 完了ステージ
235 オペランド取出し回路
240、242 I/O装置
246 検出論理回路
248 監視論理回路
250 フィルタ
252 条件履歴テーブル(CHT)
254 予測および修正論理回路
262 レジスタ発行追跡(TrI)
263 レジスタ実行追跡(TrE)
264 レジスタ完了追跡(TrC)
300 適格な条件付き非分岐(ECNB)命令予測回路
304 検出回路
306 モニタ回路
308 予測および修正回路
310 フィルタ回路
312 条件履歴テーブル(CHT)回路
314 予測回路
316 追跡回路
318 訂正回路

Claims (23)

  1. 無演算(NOP)命令を実行するための方法であって、前記方法は、
    プロセッサコードの実行の監視中、プロセッササイクル数を判断するステップであって、前記プロセッササイクル数は、適格な条件付き非分岐(ECNB)命令の第1の発見と前記ECNB命令の第2の発見の間に発生するプロセッササイクル数に対応する、ステップと、
    前記プロセッササイクル数がしきい値未満であるときに、前記ECNB命令がソフトウェアループ中に置かれていると判断した後、前記NOP命令を実行するとの予測を生成するステップであって、前記予測が前記ECNB命令の実行の履歴に基づく、ステップと、
    前記予測に応じて、前記NOP命令を実行するステップと
    を含む方法。
  2. 前記ECNB命令の特定の発見の実行の代わりに、前記NOP命令を実行するとの予測を生成するステップをさらに含み、
    前記履歴は、前記ECNB命令に対応付けられる実行状況カウンタの値を含み、
    前記実行状況カウンタの値は、前記ECNB命令の第1組の発見の条件付き実行により一方向に更新される一方で、前記ECNB命令の第2組の発見の条件付き非実行により反対方向に更新されるものであり、
    前記予測を生成するステップは、前記実行状況カウンタの値が、前記反対方向に飽和する値となったときに、前記NOP命令を実行するとの予測を生成するステップである、請求項1に記載の方法。
  3. 前記プロセッサコードのループ中でECNB命令のシーケンスを識別するステップであって、ECNB命令の前記シーケンスの各ECNB命令がECNB命令の前記シーケンスの別のECNB命令の条件の評価に依存する、ステップと、
    条件履歴テーブル(CHT)から、ECNB命令の前記シーケンスの少なくとも1つのECNB命令の実行の第2の履歴を読み出すステップと、
    第2のNOP命令を実行するとの第2の予測に基づいて前記第2のNOP命令を実行するステップであって、前記第2の予測が前記第2の履歴に基づき、前記第2のNOP命令を実行するステップが、前記プロセッサコードの実行中にプロセッサの消費パワーを削減する、ステップとを含む、請求項1に記載の方法。
  4. 前記ECNB命令の1つまたは複数の発見の条件付き非実行を示すために、実行状況カウンタの値を条件履歴テーブル(CHT)中に記録するステップをさらに含み
    前記予測を生成するステップは、前記実行状況カウンタの値が、前記ECNB命令の発見の条件付き非実行による方向に飽和する値となったときに、前記NOP命令を実行するとの予測を生成するステップである、請求項1に記載の方法。
  5. 前記方法が前記ECNB命令のアドレスを記録するステップをさらに含む請求項1に記載の方法。
  6. 条件付き実行が、前記ECNB命令の前記第1組の発見の条件を評価することと、該条件を評価することによって生成された第1の結果に基づいて前記ECNB命令を実行することとに関連付けられ、前記条件付き非実行が、前記ECNB命令の前記第2組の発見の条件を評価することと、該条件を評価することによって生成された第2の結果に基づいて前記ECNB命令を実行しないこととに関連付けられる請求項2に記載の方法。
  7. 前記ECNB命令の実行の履歴を生成するステップをさらに含み、前記履歴を生成するステップは、
    前記ECNB命令の条件付き実行のインスタンス毎にカウンタを増分するステップと
    前記ECNB命令の条件付き非実行のインスタンス毎に前記カウンタを減分するステップと
    を含む請求項1に記載の方法。
  8. 前記方法が、
    前記予測が正しくないかどうかを判断するステップと、
    前記予測が正しくないことに応じて、
    命令パイプラインをフラッシュするステップと、
    前記予測が正しくないことを考慮して予測基準を更新するステップと
    をさらに含む請求項1に記載の方法。
  9. プロセッサのプロセッササイクル数を判断するように構成された第1の回路であって、前記プロセッササイクル数は、適格な条件付き非分岐(ECNB)命令の第1の発見と前記ECNB命令の第2の発見の間に発生するプロセッササイクル数に対応する、第1の回路と、
    前記プロセッササイクル数がしきい値未満であるときに、前記ECNB命令がソフトウェアループ中に置かれていると判断した後、無演算(NOP)命令を実行するとの予測を生成するように構成された第2の回路であって、前記予測が前記ECNB命令の実行の履歴に基づく、第2の回路と
    を備える装置。
  10. 前記ソフトウェアループに対応する命令を実行するように構成されたプロセッサをさらに備える、請求項9に記載の装置。
  11. 命令パイプラインをさらに備え、前記命令パイプラインは、
    前記ECNB命令を含む命令を取り出すように構成された取出しステージと、
    解読ステージであって、前記第1の回路が前記解読ステージ中、ECNB命令として命令を識別するように構成される、解読ステージとを含む、請求項9に記載の装置。
  12. 前記第1の回路が、条件履歴テーブル(CHT)を格納するようにさらに構成され、前記CHTが、索引アドレス指定可能なエントリを含み、前記装置が、前記ECNB命令の第2の発見の条件付き実行の第2の予測に応じて、前記ECNB命令の前記第2の発見の条件付き実行に必要であるオペランドを取り出すように構成されたオペランド取出し回路をさらに備える請求項9に記載の装置。
  13. 前記CHTの各エントリが、前記ECNB命令の発見に対する条件付き非実行を示すか、または条件付き実行を示す、対応する値を含む請求項12に記載の装置。
  14. 予測情報を格納するように構成された複数のレジスタをさらに備え、前記第2の回路は前記予測を追跡するための予測情報を生成するようにさらに構成される請求項9に記載の装置。
  15. 無演算(NOP)命令を実行すると予測するための方法であって、前記方法が、
    予め指定されたアドレス範囲から取り出されたコードを識別するためにプロセッサコードの実行を監視するステップと、
    前記予め指定されたアドレス範囲から取り出された前記コード内の適格な条件付き非分岐(ECNB)命令を識別するステップと、
    前記ECNB命令の少なくとも2つのインスタンスの条件付き非実行を識別するステップであって、前記ECNB命令の第1のインスタンスの前記条件付き非実行が前記ECNB命令の前記第1のインスタンスの第1の条件が満たされないことに対応し、前記ECNB命令の第2のインスタンスの前記条件付き非実行が前記ECNB命令の前記第2のインスタンスの第2の条件が満たされないことに対応する、ステップと、
    前記ECNB命令の前記少なくとも2つのインスタンスの前記条件付き非実行を識別した後に、前記ECNB命令が前記予め指定されたアドレス範囲に関連する評価基準を満たすとの判断に応じて前記NOP命令を実行すると予測するステップと
    を含む方法。
  16. 前記NOP命令を実行すると予測するステップの後に、前記ECNB命令の第3のインスタンスに関連付けられた第3の条件を評価して値を生成するステップと、
    前記値に基づいて、前記NOP命令を実行するとの予測が正しい予測であるかどうかを判断するステップと、
    前記予測が正しいことに応じて、第2のECNB命令を取り出すステップと
    をさらに含む請求項15に記載の方法。
  17. 前記第2のECNB命令を取り出すステップの後に、前記第2のECNB命令の少なくとも2つのインスタンスの条件付き非実行を判断するステップと、
    前記第2のECNB命令に対応する第2のNOP命令を実行すると予測するステップと、
    前記第2のECNB命令に関連付けられた第4の条件を評価して、前記第2のNOP命令を実行するとの予測が正しいかどうかを判断するステップと
    をさらに含む請求項16に記載の方法。
  18. 前記NOP命令を実行するステップをさらに含む請求項15に記載の方法。
  19. 正しくない予測に応じて、前記第2の回路が、エントリに関連付けられた前記ECNB命令が将来の予測に適格でないことを示すように、前記CHTのエントリをマーキングするようにさらに構成される請求項12に記載の装置。
  20. 前記プロセッササイクル数を判断するステップの前に、前記プロセッサコードに関連付けられたECNB命令を識別するステップをさらに含む請求項1に記載の方法。
  21. 前記プロセッササイクル数を判断するステップの後に、前記ECNB命令の第2の発見と前記ECNB命令の第3の発見の間の第2のプロセッササイクル数を判断するステップをさらに含み
    前記予測を生成するステップは、前記プロセッササイクル数がしきい値未満であるときに、前記ECNB命令がソフトウェアループ中に置かれていると判断することに代えて、前記プロセッササイクル数および前記第2のプロセッササイクル数がしきい値未満であるときに、前記ECNB命令がソフトウェアループ中に置かれていると判断した後に、前記予測を生成するステップである、
    請求項1に記載の方法。
  22. マイクロコードで実装された取り出された条件付き非分岐命令が条件付き非分岐予測実行に適格でないことを判断するステップをさらに含む請求項1に記載の方法。
  23. 前記予測を生成するステップが基地局中で実行される請求項1に記載の方法。
JP2015083212A 2009-08-19 2015-04-15 条件付き非ブランチング命令の非実行を予測するための方法および機器 Active JP6345623B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/543,847 2009-08-19
US12/543,847 US20110047357A1 (en) 2009-08-19 2009-08-19 Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2012525670A Division JP5734980B2 (ja) 2009-08-19 2010-08-18 条件付き非ブランチング命令の非実行を予測するための方法および機器

Publications (2)

Publication Number Publication Date
JP2015130206A JP2015130206A (ja) 2015-07-16
JP6345623B2 true JP6345623B2 (ja) 2018-06-20

Family

ID=42835737

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2012525670A Active JP5734980B2 (ja) 2009-08-19 2010-08-18 条件付き非ブランチング命令の非実行を予測するための方法および機器
JP2015083212A Active JP6345623B2 (ja) 2009-08-19 2015-04-15 条件付き非ブランチング命令の非実行を予測するための方法および機器

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2012525670A Active JP5734980B2 (ja) 2009-08-19 2010-08-18 条件付き非ブランチング命令の非実行を予測するための方法および機器

Country Status (9)

Country Link
US (1) US20110047357A1 (ja)
EP (1) EP2467776B1 (ja)
JP (2) JP5734980B2 (ja)
KR (1) KR101513953B1 (ja)
CN (1) CN102483696B (ja)
ES (1) ES2741998T3 (ja)
HU (1) HUE044310T2 (ja)
TW (1) TWI436273B (ja)
WO (1) WO2011022493A1 (ja)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8880857B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Conditional ALU instruction pre-shift-generated carry flag propagation between microinstructions in read-port limited register file microprocessor
US9176733B2 (en) 2011-04-07 2015-11-03 Via Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9146742B2 (en) 2011-04-07 2015-09-29 Via Technologies, Inc. Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
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
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9043580B2 (en) 2011-04-07 2015-05-26 Via Technologies, Inc. Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA)
US9032189B2 (en) 2011-04-07 2015-05-12 Via Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US9128701B2 (en) 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
US9336180B2 (en) 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
CN107832083B (zh) * 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
EP2631787A3 (en) * 2011-04-07 2016-04-06 VIA Technologies, Inc. Load multiple and store multiple instructions in a microprocessor that emulates banked registers
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9292470B2 (en) 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9141389B2 (en) 2011-04-07 2015-09-22 Via Technologies, Inc. Heterogeneous ISA microprocessor with shared hardware ISA registers
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US20120311308A1 (en) * 2011-06-01 2012-12-06 Polychronis Xekalakis Branch Predictor with Jump Ahead Logic to Jump Over Portions of Program Code Lacking Branches
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9891922B2 (en) * 2012-06-15 2018-02-13 International Business Machines Corporation Selectively blocking branch prediction for a predetermined number of instructions
US9317293B2 (en) * 2012-11-28 2016-04-19 Qualcomm Incorporated Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media
US9348599B2 (en) * 2013-01-15 2016-05-24 International Business Machines Corporation Confidence threshold-based opposing branch path execution for branch prediction
US20140258635A1 (en) * 2013-03-08 2014-09-11 Oracle International Corporation Invalidating entries in a non-coherent cache
US10509725B2 (en) 2013-03-08 2019-12-17 Oracle International Corporation Flushing by copying entries in a non-coherent cache to main memory
US20140281391A1 (en) * 2013-03-14 2014-09-18 Qualcomm Incorporated Method and apparatus for forwarding literal generated data to dependent instructions more efficiently using a constant cache
KR20140134421A (ko) * 2013-05-14 2014-11-24 한국전자통신연구원 이중 명령어 페치 장치 및 방법
GB2528676B (en) * 2014-07-25 2016-10-26 Imagination Tech Ltd Conditional Branch Prediction Using A Long History
CN107179935B (zh) * 2016-03-11 2021-01-29 华为技术有限公司 一种指令执行方法及虚拟机
CN108334337B (zh) * 2018-01-30 2022-02-01 江苏华存电子科技有限公司 含自动管理功能的低延迟指令调度器及过滤猜测访问方法
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
US11099852B2 (en) * 2018-10-25 2021-08-24 Arm Limitied Apparatus and method for maintaining prediction performance metrics for prediction components for each of a plurality of execution regions and implementing a prediction adjustment action based thereon
CN112540796B (zh) * 2019-09-23 2024-05-07 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法
US11243766B2 (en) * 2019-09-25 2022-02-08 Intel Corporation Flexible instruction set disabling

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01205340A (ja) * 1988-02-12 1989-08-17 Nec Corp データ処理装置
JPH01258031A (ja) * 1988-04-06 1989-10-16 Mitsubishi Electric Corp データ処理装置
CA2060555A1 (en) * 1991-04-24 1992-10-25 Robert J. Bullions, Iii System and method for draining an instruction pipeline
JPH0675769A (ja) * 1992-05-26 1994-03-18 Nec Corp 分岐予測機構
JP3683968B2 (ja) * 1996-02-09 2005-08-17 富士通株式会社 情報処理装置
US5860017A (en) * 1996-06-28 1999-01-12 Intel Corporation Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
JPH1185515A (ja) * 1997-09-10 1999-03-30 Ricoh Co Ltd マイクロプロセッサ
US6353883B1 (en) * 1998-08-04 2002-03-05 Intel Corporation Method and apparatus for performing predicate prediction
US6367004B1 (en) * 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
JP2000305795A (ja) * 1999-04-20 2000-11-02 Nec Corp 並列処理装置
JP2000322257A (ja) * 1999-05-10 2000-11-24 Nec Corp 条件分岐命令の投機的実行制御方法
US6442679B1 (en) * 1999-08-17 2002-08-27 Compaq Computer Technologies Group, L.P. Apparatus and method for guard outcome prediction
US6513109B1 (en) * 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6629238B1 (en) * 1999-12-29 2003-09-30 Intel Corporation Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration
US6804770B2 (en) * 2001-03-22 2004-10-12 International Business Machines Corporation Method and apparatus for using past history to avoid flush conditions in a microprocessor
US7114059B2 (en) * 2001-11-05 2006-09-26 Intel Corporation System and method to bypass execution of instructions involving unreliable data during speculative execution
TW503997U (en) 2001-12-14 2002-09-21 Hon Hai Prec Ind Co Ltd Optical switch device
US20040230781A1 (en) * 2003-05-16 2004-11-18 Via-Cyrix, Inc. Method and system for predicting the execution of conditional instructions in a processor
US20040255103A1 (en) * 2003-06-11 2004-12-16 Via-Cyrix, Inc. Method and system for terminating unnecessary processing of a conditional instruction in a processor
US20050015578A1 (en) * 2003-07-14 2005-01-20 Kimming So Two-bit branch prediction scheme using reduced memory size
US7587580B2 (en) * 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US7263577B2 (en) * 2005-03-03 2007-08-28 Qualcomm Incorporated Power saving methods and apparatus to selectively enable comparators in a CAM renaming register file based on known processor state
US20060200654A1 (en) * 2005-03-04 2006-09-07 Dieffenderfer James N Stop waiting for source operand when conditional instruction will not execute
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
WO2008029450A1 (fr) * 2006-09-05 2008-03-13 Fujitsu Limited Dispositif de traitement d'informations comprenant un mécanisme de correction d'erreur de prédiction d'embranchement
US7925868B2 (en) * 2007-01-24 2011-04-12 Arm Limited Suppressing register renaming for conditional instructions predicted as not executed
US9946550B2 (en) * 2007-09-17 2018-04-17 International Business Machines Corporation Techniques for predicated execution in an out-of-order processor
US8078852B2 (en) * 2009-05-28 2011-12-13 International Business Machines Corporation Predictors with adaptive prediction threshold
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
US9274795B2 (en) * 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction

Also Published As

Publication number Publication date
US20110047357A1 (en) 2011-02-24
KR101513953B1 (ko) 2015-04-21
EP2467776B1 (en) 2019-05-15
JP2013502657A (ja) 2013-01-24
CN102483696B (zh) 2016-10-26
HUE044310T2 (hu) 2019-10-28
WO2011022493A1 (en) 2011-02-24
EP2467776A1 (en) 2012-06-27
TWI436273B (zh) 2014-05-01
JP2015130206A (ja) 2015-07-16
KR20120058555A (ko) 2012-06-07
ES2741998T3 (es) 2020-02-12
TW201118726A (en) 2011-06-01
JP5734980B2 (ja) 2015-06-17
CN102483696A (zh) 2012-05-30

Similar Documents

Publication Publication Date Title
JP6345623B2 (ja) 条件付き非ブランチング命令の非実行を予測するための方法および機器
KR101788683B1 (ko) 루프에 대한 데이터 프리페치 요청들을 취소하기 위한 방법들 및 장치
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
EP1889152B1 (en) A method and apparatus for predicting branch instructions
RU2375745C2 (ru) Энергоэффективный механизм упреждающей выборки инструкций
US6263427B1 (en) Branch prediction mechanism
US20070130450A1 (en) Unnecessary dynamic branch prediction elimination method for low-power
WO2019005458A1 (en) BRANCH PREDICTION FOR FIXED STEERING BRANCH INSTRUCTIONS
EP3646172A1 (en) Multi-tagged branch prediction table
US9489204B2 (en) Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150415

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160408

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160912

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161212

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20170522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170922

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20171002

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180213

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180523

R150 Certificate of patent or registration of utility model

Ref document number: 6345623

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