JP5471082B2 - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP5471082B2
JP5471082B2 JP2009156374A JP2009156374A JP5471082B2 JP 5471082 B2 JP5471082 B2 JP 5471082B2 JP 2009156374 A JP2009156374 A JP 2009156374A JP 2009156374 A JP2009156374 A JP 2009156374A JP 5471082 B2 JP5471082 B2 JP 5471082B2
Authority
JP
Japan
Prior art keywords
instruction
unit
instructions
prefix
register
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.)
Expired - Fee Related
Application number
JP2009156374A
Other languages
English (en)
Other versions
JP2011013865A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009156374A priority Critical patent/JP5471082B2/ja
Priority to EP10167832.4A priority patent/EP2270650B1/en
Priority to US12/827,238 priority patent/US8601239B2/en
Publication of JP2011013865A publication Critical patent/JP2011013865A/ja
Application granted granted Critical
Publication of JP5471082B2 publication Critical patent/JP5471082B2/ja
Expired - Fee Related 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • G06F9/30101Special purpose 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Description

本発明は、演算処理装置および制御方法に関する。
従来より、CPU(Central Processing Unit:中央演算処理装置)などのプロセッサでは、命令長を可変長にすることで命令を拡張する技術が一般的に利用されている。プロセッサには、命令の実行に使用される命令情報などを格納する複数エントリを有する実行キューがあり、1命令ごとに実行キューのエントリを割り当てる。
実行キューに格納できる命令数を増やす場合、実行キューが有する複数エントリから命令を選択する回路を直列に接続する必要がある。そうすると、実行キューの複数エントリから命令を選択する選択回路を多段に接続する必要があり、このように選択回路を多段に接続する場合には、プロセッサの動作周波数の1サイクルの期間内に、多段の選択回路による選択が完了しない場合がある。これはつまり、プロセッサ全体の動作周波数の低下を引き起こし、言い換えれば、プロセッサの処理性能の低下に繋がる。
これに対して、上記した可変長命令長を用いる手法では、プログラム全体の命令サイズが増えるが、プログラム全体の命令数自体は増えない。つまり、実行キューに格納できる命令の数を増やす必要がなく、実行キューのエントリ数は増えない。すなわち、実行キューのエントリ内に格納される命令の情報量は増えるが、選択対象となるエントリ数は増えないため、実行キューから命令を選択する回路は、並列には増えるものの、直列には増えないこととなる。従って、プロセッサの動作周波数に大きな影響を与えない。また、上記した可変長命令長を用いる手法では、命令デコーダが命令オペコードをデコードした後は、命令オペコードを使用しないため、命令オペコード自体を保持しておく必要がない。
特開2000−284962号公報 特開2006−92158号公報 特開2001−296999号公報
可変長命令を用いる手法では、命令長が固定長である命令セットアーキテクチャには直接適用することができず、プロセッサの処理性能を向上させることができないという課題があった。
具体的には、CISC(Complex Instruction Set Computer)などの命令長が可変である命令セットアーキテクチャ(Instruction Set Architecture)に上記した可変長命令の手法を適用した場合は、実行キューに格納する命令数を増やすことなく、1命令の命令長を拡げることができる。したがって、命令オペコードに含まれる情報を増加させることにより、1命令当たりの処理量を増やすことができ、プロセッサの処理性能を向上させることができる。これに対して、RISC(Reduced Instruction Set Computer)などの命令長が固定長である命令セットアーキテクチャに上記した可変長命令の手法を適用すると、主記憶装置又はキャッシュメモリから命令をフェッチして実行を完了するまでの内で互換性を保つことができない。
開示の技術は、上記に鑑みてなされたものであって、命令長が固定長である命令セットアーキテクチャにおいても、命令の拡張を行うことが可能である演算処理装置および制御方法を提供することを目的とする。
本願の開示する演算処理装置は、一つの態様において、命令を拡張する拡張情報を記憶する第一フィールドと第二フィールドとを有する命令拡張情報レジスタと、当該命令の直後の命令の拡張情報を前記第一フィールドに拡張情報を書き込む1命令分の拡張情報を保持する第一前置命令と、当該命令の直後の命令の拡張情報を前記第一フィールドに書き込み、当該命令の直後2命令目の命令の拡張情報を前記第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令とを有し、前記命令を記憶する記憶部から読み出した命令が、前記第一前置命令または前記第二前置命令である場合に、前記第一前置命令または前記第二前置命令と、前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を生成する命令結合部と、前記命令結合部によって生成された結合済み命令をデコードし、1命令として実行する命令実行部と、前記命令実行部によって実行された結合済み命令に対するコミットを行う場合に、プログラムカウンタを2命令分更新するレジスタ更新部と、を有する。
本願に開示する演算処理装置および制御方法の一つの態様によれば、命令長が固定長である命令セットアーキテクチャにおいても、命令の拡張を行うことが可能となるという効果を奏する。
図1は、実施例1に係る演算処理装置の構成を示すブロック図である。 図2は、浮動小数点レジスタの例を示す図である。 図3は、命令拡張情報レジスタ13の例を示す図である。 図4は、前置命令SXAR1の例を示す図である。 図5は、SXAR1による命令拡張を説明する図である。 図6は、前置命令SXAR2の例を示す図である。 図7は、SXAR2による命令拡張を説明する図である。 図8は、割り込み発生後にSXAR1による拡張済み命令を実行する例を示す図である。 図9は、割り込み発生後にSXAR2による拡張済み命令を実行する例を示す図である。 図10は、SPARC JPS1のFMA命令フォーマットの一例を示す図である。 図11は、実施例2に係る演算処理装置の構成を示すブロック図である。 図12は、前置命令SXARの結合を説明する図である。 図13は、前置命令SXARによる命令の拡張と直後の命令との結合およびスロット数を説明する図である。 図14は、命令が拡張されて、且つSXAR命令と結合された命令がコミットされるまでの遷移を示す図である。 図15は、命令プリゼンテーション数の調整例を示す図である。 図16は、実施例2に係る演算処理装置における処理の流れを示すフローチャートである。 図17は、結合処理後にトラップ処理が発生した場合に実行する再命令フェッチ、命令プリデコード、命令デコードを説明する図である。 図18は、結合処理後にトラップ処理が発生した場合の処理の流れを示すフローチャートである。 図19は、SXAR1命令と結合された命令の処理の流れを示す図である。 図20は、SXAR1命令と結合されなかった命令の処理の流れを示す図である。 図21は、SXAR2命令による2命令の拡張かつ直後の命令と結合された命令の処理の流れを示す図である。 図22は、SXAR2命令による2命令の拡張かつ直後の命令と結合されなかった命令の処理の流れを示す図である。 図23は、推奨されるコミットスタットエントリ(バッファ34)の構成を示す図である。 図24は、テンポラリXAR_S更新用バッファを説明する図である。 図25は、中間状態レジスタを説明する図である。 図26は、SXAR1とSXAR2との関係を示す図である。
以下に、本願の開示する演算処理装置および制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
開示する演算処理装置は、CPU(Central Processing Unit)などであり、特に、命令長が固定長である命令セットアーキテクチャにおいても、命令の拡張を行うことが可能である。また、開示する演算処理装置は、命令や拡張命令の実行に用いられる資源(領域)を効率的に利用することができる。そこで、実施例1では、開示する演算処理装置の構成について説明する。なお、ここで開示する前置命令には2種類あり、上記の第一前置命令をSXAR1、上記の第二前置命令をSXAR2とする。これらを特別に区別する必要が無い場合は、単に「SXAR」と記載する。
図1は、実施例1に係る演算処理装置の構成を示すブロック図である。図1に示すように、演算処理装置10は、メモリ11と、レジスタ12と、命令拡張情報レジスタ13と、命令結合部14と、命令実行部15と、レジスタ更新部16とを有する。ここで、実施例1に係る演算処理装置10は、SPARC(Scalable Processor ARChitecture)等のRISCアーキテクチャであり、固定長命令を採用したCPUである。また、演算処理装置10は、図2に示すように、例えば64ビット幅×256個の浮動小数点レジスタなどを有する。なお、図2は、浮動小数点レジスタの例を示す図である。
メモリ11は、例えば、データやプログラムなどを記憶する主記憶装置(メインメモリ)であり、CPUなどの演算処理装置が直接読み書きできるRAM(Random Access Memory)やROM(Read Only Member)などの半導体記憶装置である。なお、ここでは主記憶装置を例にして説明したが、これに限定されるものではなく、例えば、1次キャッシュや2次キャッシュなどのキャッシュメモリであってもよい。レジスタ12は、次に実行するべき命令が格納されているメモリ11上のアドレスを指し示すプログラムカウンタ(Program Counter)や固定小数点レジスタや浮動小数点レジスタなどである。
命令拡張情報レジスタ13は、複数の命令拡張情報を記憶する数値演算拡張レジスタ(eXtended Arithmetic Register:XARレジスタ)である。例えば、命令拡張情報レジスタ13は、図3に示すように、1命令目の拡張情報フィールドであるXAR_Fと、2命令目の拡張情報フィールドであるXAR_Sを有する2命令分の命令拡張情報を格納する例えば28ビット幅のレジスタである。命令拡張情報レジスタ13が有する拡張情報フィールドは、27ビット目に1命令目の拡張情報(データ)XAR_F部が有効であるか否かを示す「F_VAL」を有する。また、命令拡張情報レジスタ13が有する拡張情報フィールドは、26ビット目にSIMD(Single Instruction Multiple Data)による動作を指定する「F_SIMD」フィールドを有する。「F_SIMD」フィールドは、例えば、その値が1の場合に、SIMD動作を行う。さらに、FMA(Fused Multiply Add)命令で演算対象となる3つのソースオペランドとFMA命令のディスティネーション(演算結果)を格納するレジスタ指定の拡張分を有する。具体的には、FMA演算の演算結果を格納するディスティネーションレジスタを指定する25〜23ビット目の「F_RD<7:5>」、ソース1レジスタを指定する22〜20ビット目の「F_RS1<7:5>」、ソース2レジスタを指定する19〜17ビット目の「F_RS2<7:5>」、ソース3レジスタを指定する16〜14ビット目の「F_RS3<7:5>」を有する。また命令拡張情報レジスタ13が有する拡張情報フィールドの、13ビット目に2命令目の拡張情報(データ)XAR_S部が有効であるか否かを示す「S_VAL」と、12ビット目にSIMDによる動作を指定する「S_SIMD」フィールドとを有する。さらに、FMA命令で演算対象となる3つのソースオペランドとFMA命令のディスティネーション(演算結果)を格納するレジスタ指定の拡張分を有する。具体的には、FMA演算の演算結果を格納するディスティネーションレジスタを指定する11〜9ビット目の「S_RD<7:5>」、ソース1レジスタを指定する8〜6ビット目の「S_RS1<7:5>」、ソース2レジスタを指定する5〜3ビット目の「S_RS2<7:5>」、ソース3レジスタを指定する2〜0ビット目の「S_RS3<7:5>」を有する。なお、XAR_FおよびXAR_Sは、それぞれの拡張命令のコミットに伴ってリセットされる。また、図3は、命令拡張情報レジスタ13の例を示す図である。また、SIMDとは、複数のデータに対する複数の演算を1つの命令で処理を行う方式をいい、Intel社のMMX命令等が知られている。そして、FMA命令とは、例えば3つのオペランドa、b及びcに対してa×b+cの演算を行う積和演算命令である。実施例における詳細なFMA命令の命令フォーマットについては後述する。
命令結合部14は、命令を記憶するメモリ11から読み出した命令が、命令拡張情報レジスタ13に命令拡張情報を書き込む前置命令である場合に、前置命令とその前置命令の直後にデコードされる命令とを結合(パック)する。具体的には、まず最初に、レジスタ(プログラムカウンタ)12により指定されたアドレスによって特定される命令をメモリ11から読み出す。そして、命令結合部14は、読み出した命令が命令拡張情報レジスタ13に命令拡張情報を書き込む前置命令(SXAR)である場合に、前置命令と前置命令の直後にデコードされる命令とを結合し、結合した命令を後述する命令実行部15に出力する。
ここで、前置命令(SXAR)について説明する。前置命令SXARは、XARを更新する命令である。XARが2命令までの値を保持できることに対応して、1命令分指定できる前置命令SXAR1と、2命令分指定できる前置命令SXAR2がある。前置命令SXAR1は、図4に示すように、他の命令と同じ32bit命令長であり、1命令分の拡張情報を持つフィールドと空きフィールドとを有する。
具体的には、31〜27ビット目がSXAR命令のデコードに用いられる5ビット幅のオペコードを表す「OPCODE[5:0]」フィールドであり、SXAR命令の場合は、OPCODE[5:0]=5’b00111が指定される。26ビット目がSXAR1命令とSXAR2命令との切り分けを行う「COMB」フィールドであり、SXAR1命令の場合は、COMB=1’b0が指定される。25ビット目がSXAR1命令の直後の命令のSIMD動作を指定する「F_SIMD」フィールドである。24〜22ビット目はSXAR1命令の直後の命令の演算結果を格納するディスティネーションレジスタを指定する「F_RD<7:5>」フィールドである。21〜19ビット目はSXAR1命令の直後の命令の演算対象であるソースオペランド1を格納するオペランドレジスタ1を指定する「F_RS1<7:5>」フィールドである。18〜16ビット目はSXAR1命令の直後の命令の演算対象であるソースオペランド2を格納するオペランドレジスタ2を指定する「F_RS2<7:5>」フィールドである。15〜13ビット目は例えばSXAR1命令の直後の命令が例えば3オペランド命令FMA命令の演算対象である場合のソースオペランド3を格納するオペランドレジスタ3を指定する「F_RS3<7:5>」フィールドである。12〜0ビット目は、不定値(Don‘t Care値)が読み出されるフィールドである。
このSXAR1は、後続の1命令と組み合わせて拡張命令、つまり、図5に示すように、固定長の2つの命令で1つの拡張命令を実行することができる。具体的には、SXAR1命令が実行された場合、後続の固定小数点の加算命令であるADD命令は、SXAR1命令によって命令拡張情報レジスタ13に格納されたF_SIMDフィールド等の拡張情報(拡張ビット)を用いて加算が実行される。例えば、F_SIMD=1’b1の場合、直後のADD命令はSIMDのADD命令として実行される。
また、前置命令SXAR2は、図6に示すように、SXAR1命令と同じ32bit命令長であり、2命令分の拡張情報を持つフィールドを有する。具体的には、31〜27ビット目がSXAR命令のデコードに用いられる5ビット幅のオペコードを表す「OPCODE[5:0]」フィールドであり、SXAR命令の場合は、OPCODE[5:0]=5’b00111が指定される。26ビット目がSXAR1命令とSXAR2命令との切り分けを行う「COMB」フィールドであり、SXAR2命令の場合は、COMB=1’b1が指定される。25ビット目がSXAR2命令の直後の命令のSIMD動作を指定する「F_SIMD」フィールドである。24〜22ビット目はSXAR2命令の直後の命令の演算結果を格納するディスティネーションレジスタを指定する「F_RD<7:5>」フィールドである。21〜19ビット目はSXAR2命令の直後の命令の演算対象であるソースオペランド1を格納するオペランドレジスタ1を指定する「F_RS1<7:5>」フィールドである。18〜16ビット目はSXAR2命令の直後の命令の演算対象であるソースオペランド2を格納するオペランドレジスタ2を指定する「F_RS2<7:5>」フィールドである。15〜13ビット目は例えばSXAR2命令の直後の命令が3オペランド命令FMA命令の演算対象である場合のソースオペランド3を格納するオペランドレジスタ3を指定する「F_RS3<7:5>」フィールドである。
12ビット目がSXAR2命令の2命令後の命令のSIMD動作を指定する「S_SIMD」フィールドである。11〜9ビット目はSXAR2命令の2命令後の命令の演算結果を格納するディスティネーションレジスタを指定する「S_RD<7:5>」フィールドである。8〜6ビット目はSXAR2命令の2命令後の命令の演算対象であるソースオペランド1を格納するオペランドレジスタ1を指定する「S_RS1<7:5>」フィールドである。5〜3ビット目はSXAR2命令の2命令後の命令の演算対象であるソースオペランド2を格納するオペランドレジスタ2を指定する「S_RS2<7:5>」フィールドである。2〜0ビット目は、例えばSXAR2命令の2命令後の命令が例えば3オペランド命令FMA命令の演算対象である場合のソースオペランド3を格納するオペランドレジスタ3を指定する「S_RS3<7:5>」フィールドである。
このSXAR2は、SXAR2命令の直後の命令と2命令後の命令の2命令と共に組み合わせて2つの拡張命令、つまり、図7に示すように、固定長の3つの命令で2つの拡張命令を実行することができる。具体的には、SXAR2命令が実行された場合、SXAR2命令の直後の固定小数点の加算命令であるADD命令は、SXAR2命令によって命令拡張情報レジスタ13に格納されたF_SIMDフィールド等の拡張情報(拡張ビット)を用いて加算が実行される。そして、SXAR2命令の2命令後の固定小数点のロード命令であるLOAD命令は、SXAR2命令によって命令拡張情報レジスタ13に格納されたS_SIMDフィールド等の拡張情報(拡張ビット)を用いてロードが実行される。すなわち、S_SIMD=1’b1の場合、2命令後のLOAD命令はSIMDのLOAD命令として実行される。
以上より、前置命令(SXAR)により指定された命令拡張情報は、命令拡張情報レジスタ13のXAR_F部とXAR_S部に格納され、XAR_Fの情報で直後の命令を拡張し、XAR_Sの情報で直後2命令目を拡張することができる。このように定義することで、前置命令(SXAR)と直後の命令の間に仮に割り込みが入ったとしても、XARレジスタ13内の情報を用いて命令の拡張が可能になる。
例えば、図8に示すように、演算処理装置10は、前置命令SXAR1を実行およびコミットすると、命令拡張情報レジスタ13のXAR_F部に拡張情報を格納する。その後、演算処理装置10は、前置命令SXAR1直後の被拡張命令を実行する前に割り込み処理が発生した場合、命令拡張情報レジスタ13の情報を、一旦割り込み時用の退避レジスタに格納し、同時に命令拡張情報レジスタ13をリセットする。この退避レジスタはその後の命令実行に対し、命令拡張などの影響を与えない。その後、割り込み処理が終了して、元の処理に戻ったときに、割り込み時用の退避レジスタに格納された情報を、命令拡張情報レジスタ13に書き戻す。したがって、演算処理装置10は、割り込み処理が終了して戻ってきた後、前置命令SXAR1の拡張情報が命令拡張情報レジスタ13のXAR_F部の拡張情報から参照することができるので、前置命令SXAR1直後の被拡張命令を正しく拡張することができる。そして、演算処理装置10は、拡張済み命令の実行をコミットすると、命令拡張情報レジスタ13のXAR_F部をリセットする。なお、図8は、割り込み発生後にSXAR1による拡張済み命令を実行する例を示す図である。
また、例えば、図9に示すように、演算処理装置10は、前置命令SXAR2を実行およびコミットすると、命令拡張情報レジスタ13のXAR_F部およびXAR_S部に拡張情報を格納する。その後、演算処理装置10は、前置命令SXAR2直後の被拡張命令を実行する場合、命令拡張情報レジスタ13のXAR_F部の拡張情報を用いて拡張した拡張命令1を実行する。そして、演算処理装置10は、拡張済み命令1の実行をコミットすると、命令拡張情報レジスタ13のXAR_F部をリセットする。その後、演算処理装置10は、前置命令SXAR2直後の2命令目の被拡張命令を実行する前に、割り込み処理が発生した場合、命令拡張情報レジスタ13の情報を、一旦割り込み時用の退避レジスタに格納し、同時に命令拡張情報レジスタ13をリセットする。この退避レジスタはその後の命令実行に対し、命令拡張などの影響を与えない。その後、割り込み処理が終了して元の処理に戻ったときに、割り込み時用の退避レジスタに格納された情報を、命令拡張情報レジスタ13に書き戻す。したがって、演算処理装置10は、割り込み処理が終了して戻ってきた後、前置命令SXAR2の拡張情報が命令拡張情報レジスタ13のXAR_S部の拡張情報から参照することができる。よって、演算処理装置10は、前置命令SXAR2の直後2命令目、被拡張命令2を正しく拡張することができる。そして、演算処理装置10は、拡張済み命令2の実行をコミットすると、命令拡張情報レジスタ13のXAR_S部をリセットする。図9は、割り込み発生後にSXAR2による拡張済み命令を実行する例を示す図である。なお、割り込み処理から戻ったとき、XAR_Fのバリッドが1の場合はXAR_F部の拡張情報で命令の拡張を行い、XAR_Fのバリッドが0の場合且つXAR_Sのバリッドが1の場合はXAR_S部の拡張情報で命令の拡張を行う。またXAR_F、XAR_Sのバリッドが両方とも0である場合は、命令の拡張は行わない。
そして、命令結合部14は、読み出した命令が上述した前置命令(SXAR)である場合に、読み出した前置命令とその読み出した前置命令の直後にデコードされる命令とを結合し、前置命令と直後の命令を1命令にして命令実行部15に出力する。また、命令結合部14は、読み出した命令が上述した前置命令ではない通常の命令の場合、命令を結合することなく、読み出した命令を命令実行部15に出力する。
具体的には、命令結合部14は、SXAR1と直後の命令を結合して、1命令にしながら、SXAR1の13ビット目から25ビット目と、SXAR1の直後にデコードされる命令の32ビットによって45ビット幅の命令である結合拡張済み命令を作成する。例えば、SXAR1の直後にデコードされる命令が、図10に示したSPARC Joint Programming Specification(JPS1)のFMA命令である場合について説明する。この場合、命令結合部14は、図4に示したSXAR1命令の13〜25ビット目と、図10に示した32ビット幅の命令によって、45ビット幅の結合拡張済み命令を作成する。つまり、命令結合部14は、「F_RS3<7:5>」、「F_RS2<7:5>」、「F_RS1<7:5>」、「F_RD<7:5>」、「F_SIMD」と、32ビット幅の命令によって、45ビット幅の結合拡張済み命令を作成する。さらに、命令結合部14は、作成した45ビット幅の結合拡張済み命令に、当該命令がSXAR1命令と直後の命令が1命令に結合した結合済み命令であることを示す1ビット幅の「パックビット」を付加する。パックビットは、例えば、1の場合に、結合済み命令であること示すとすると、ここで付加されるパックビットの値は1である。
図10に示した命令フォーマットは、SPARC JPS1におけるFMA命令フォーマットの一例であり、31〜30ビット目と24〜19ビット目は、命令のデコードに用いられるオペコードである。このオペコードは、命令種別に対応した固定値であり、この例では、31〜30ビット目に10、24〜19ビット目に11011が格納されている。29〜25ビット目は、命令の演算結果を格納するディスティネーションレジスタを指定する5ビット幅の「RD」フィールドである。18〜14ビット目は、命令の演算対象であるソースオペランド1を格納するオペランドレジスタ1を指定する5ビット幅の「RS1」フィールドである。13〜9ビット目は命令が3オペランド命令FMA命令の演算対象である場合のソースオペランド3を格納するオペランドレジスタ3を指定する5ビット幅の「RS3」フィールドである。4〜0ビット目は演算対象であるソースオペランド2を格納するオペランドレジスタ2を指定する5ビット幅の「RS2」フィールドである。また、8〜7ビット目の2ビット幅の「var」と6〜5ビット目の2ビット幅の「size」は、上述した「RS1」、「RS2」、「RS3」を用いた演算方法を指定するフィールドであり、計4ビットのフィールドによって、16種類の演算方法を指定可能だが、SPARC JPS1においては8種類の演算方法を指定する。例えば、「var=00、size=01」の場合には、RD=RS1×RS2+RS3と演算し、「var=10、size=01」の場合には、RD=―(RS1×RS2―RS3)と演算する。
同様に、図10に示したSPARC JPS1を用いて、SXAR2を用いた結合例について説明する。命令結合部14は、SXAR2と直後の命令を結合して、1命令にしなが、SXAR2の13〜25ビット目と、SXAR2の直後にデコードされる命令の32ビットによって、45ビット幅の結合拡張済み命令を作成する。例えば、命令実行部15は、図4に示した「F_RS3<7:5>」、「F_RS2<7:5>」、「F_RS1<7:5>」、「F_RD<7:5>」、「F_SIMD」と、図10の32ビット幅の命令によって、45ビット幅の結合拡張済み命令を作成する。さらに、命令結合部14は、作成した45ビット幅の命令に、当該命令がSXAR命令と直後の命令が1命令に結合した結合拡張済み命令であることを示す1ビット幅の「パックビット」を付加する。パックビットは、例えば、1の場合に、結合済み命令であること示すとすると、ここで付加されるパックビットの値は1である。
また、命令結合部14は、SXAR2の0〜12ビット目と、SXAR2の直後2命令目にデコードされる32ビット幅の命令によって45ビット幅に拡張する。ところが、命令結合部14は、SXAR2の直後ではないので、SXAR2とは結合されていない非結合拡張済み命令を作成する。例えば、命令結合部14は、図4に示した「S_RS3<7:5>」、「S_RS2<7:5>」、「S_RS1<7:5>」、「S_RD<7:5>」、「S_SIMD」と、図10の32ビット幅の命令によって、45ビット幅の非結合拡張済み命令を作成する。さらに、命令結合部14は、作成した45ビット幅の命令に、当該命令がSXAR命令と直後の命令が結合されていない命令であることを示すために、結合拡張済み命令であることを示す1ビット幅の「パックビット」の値を0とする。
命令結合部14は、命令拡張情報レジスタ13に記憶される命令拡張情報に従って、命令拡張情報を用いて命令を拡張し、さらにはSXARの直後の命令に関しては、SXARと直後の命令が1命令に結合された結合済み命令を命令実行部15に送る。命令実行部15はこれをデコードし、1命令として実行し、結果をレジスタ更新部16に出力する。また、命令実行部15は、結合されていない命令の場合には、通常通りデコードして実行し、その結果をレジスタ更新部16に出力する。
例えば、命令実行部15は、SXAR1と直後の32ビット幅の命令Aが結合されて、1命令となっている結合拡張済み命令Aが実行対象の場合には、パックビットが1であることから、当該命令を1命令として実行する。この場合、命令実行部15は、SXAR1によって指定される3ビット幅の各レジスタ指定フィールドと、5ビット幅の各レジスタ指定フィールド(「RS3」、「RS2」、「RS1」、「F_RD」)との8ビット幅で指定される各オペランドを用いた演算を実行する。例えば、命令実行部15は、図4に示した「F_RS3」、「F_RS2」、「F_RS1」)と、図10に示した「RS3」、「RS2」、「RS1」とで指定される各オペランドを用いた演算を実行する。
そして、命令のコミットの際は、レジスタ更新部16は、8ビット幅で指定されたレジスタ領域に演算結果を格納する。具体的には、レジスタ更新部16は、SXAR1によって指定される3ビット幅のレジスタ(「F_RD」)と、図10に示したような命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。この際、レジスタ更新部16は、直後の拡張される命令までがコミットするので、命令拡張情報レジスタ13のXAR_F部すべてのビットをリセットする。さらに、レジスタ更新部16は、パックビットが1であることから、2命令分実行したことをレジスタ(プログラムカウンタ)12に出力する。
また、命令実行部15は、SXAR2と直後の32ビット幅の命令Aが結合されて、1命令となっている結合拡張済み命令Aが実行対象の場合には、パックビットが1であることから、上述した場合と同様、当該命令を1命令として実行する。この命令がコミットされた際、レジスタ更新部16は、SXAR2によって指定される3ビット幅のレジスタ(「F_RD」)と、図10に示した命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。またレジスタ更新部16は、直後の拡張される命令までがコミットされるので、命令拡張情報レジスタ13のXAR_F部ですべてのビットをリセットする。また命令拡張情報レジスタ13のXAR_S部に関しては「S_VAL」を「1」にして、SXAR2により指定される拡張情報である12〜0ビット目をXAR_S部に格納する。例えば、レジスタ更新部16は、図4に示した「S_SIMD」、「S_RS3」、「S_RS2」、「S_RS1」、「S_RD」をXAR_S部に格納する。さらに、レジスタ更新部16は、パックビットが1であることから、2命令分実行したことをレジスタ(プログラムカウンタ)12に出力する。
また、命令実行部15は、SXAR2とその直後2命令目の32ビット幅の命令Bについては、パックビットが0であり、拡張はされるがSXAR2とは1命令に結合されていない非結合拡張済み命令Bが実行対象となる。この場合、命令実行部15は、SXAR2によって指定される3ビット幅の各レジスタ指定フィールドと、図10に示したような命令によって指定される5ビット幅の各レジスタ指定フィールドとの8ビット幅で指定される各オペランドを用いた演算を実行する。例えば、命令実行部15は、図4に示した「S_RS3」、「S_RS2」、「S_RS1」と、図10に示した「RS3」、「RS2」、「RS1」との8ビット幅で指定される各オペランドを用いた演算を実行する。
そして、命令のコミットの際は、レジスタ更新部16は、8ビット幅で指定されたレジスタ領域に演算結果を格納する。具体的には、レジスタ更新部16は、SXAR2によって指定される3ビット幅のレジスタ(「S_RD」)と、図10に示した命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。この際、レジスタ更新部16は、直後の拡張される命令までがコミットされるので、命令拡張情報レジスタ13のXAR_S部すべてのビットをリセットする。また、レジスタ更新部16は、パックフラグが0であることから、1命令分実行したことをプログラムカウンタ12に出力する。
レジスタ更新部16は、命令結合部14でSXARと直後の命令の2つが1つに結合された結合済み命令を命令実行部15が実行し、実行した命令の完了であるコミットを行う場合に、プログラムカウンタを2命令分更新する。具体的には、レジスタ更新部16は、命令実行部15から結合済み命令が実行されたことが通知されると、1命令として実行したにも関わらず、レジスタ(プログラムカウンタ)12を2命令分更新する。すなわち、現在の命令を指定するプログラムカウンタの値をPCとした場合、1命令分としてPC+4ではなく、2命令分としてPC+8にプログラムカウンタの値を更新する。また、レジスタ更新部16は、命令実行部15からSXARと直後の命令の2つが1つに結合されたものではない命令が実行されたことが通知されると、レジスタ(プログラムカウンタ)12を1命令分更新する。
このように、命令実行部15やレジスタ更新部16は、SXARと直後の命令の2つが1つに結合された結合命令に対しても、2命令分の実行スロット、実行回路、一時領域などの実行資源を用いることがない。つまり、命令実行部15やレジスタ更新部16は、結合されていない命令と同様に、1命令分の実行資源のみを用いて実行する。
このように、実施例1によれば、命令長が固定長である命令セットアーキテクチャにおいても、命令の拡張を行うことが可能である。具体的には、一般的な命令フォーマットに含まれる各レジスタを指定する5ビット幅以外に、当該各レジスタの指定を3ビット拡張するフィールドを有する命令拡張情報レジスタ13を設けて各レジスタについて8ビットの指定を可能とすることで、256個のレジスタ指定を可能としている。
例えば、図10に示した命令フォーマットでは、5ビット幅の各レジスタ指定フィールドである「RS3」、「RS2」、「RS1」、「RD」によって、32個のレジスタを指定している。これに対して、開示する演算処理装置では、上記5ビット幅の各レジスタ指定フィールドに加え、SXARの3ビット幅の各レジスタ指定フィールドを用いることで、8ビット幅の各レジスタフィールドを利用できる。したがって、開示する演算処理装置では、256個のレジスタ指定を可能としている。なお、SXARの3ビット幅の各レジスタ指定フィールドとは、「F_RS3」、「F_RS2」、「F_RS1」、「S_RD」、「S_RS3」、「S_RS2」、「S_RS1」、「S_RD」のことである。また、実施例1によれば、上述した拡張手法を用いた場合でも、前置命令と拡張命令を結合し、1命令分の資源で実行することができる。その結果、命令や拡張命令の実行に用いられる資源(領域)を効率的に利用することもできる。
ところで、開示する演算処理装置は、実施例1で説明した構成以外の他の様々な機能部を有していてもよい。そこで、実施例2では、実施例1で説明した構成以外の他の様々な機能部を有する演算処理装置について説明する。なお、SXAR1とSXAR2とを特別に区別する必要が無い場合は、単にSXARと記載する。
[演算処理装置の構成]
まず、図11を用いて、実施例2に係る演算処理装置の構成について説明する。図11は、実施例2に係る演算処理装置の構成を示すブロック図である。
図11に示すように、演算処理装置20は、メモリ21と、2次キャッシュ22と、命令キャッシュ23と、データキャッシュ24と、レジスタ25と、XAR26とを有する。さらに、演算処理装置20は、命令バッファ部30と、命令プリデコード部31と、命令レコード部32と、実行処理部33と、バッファ34と、命令コミット判定部35とを有する。
メモリ21は、データやプログラムなどを記憶する主記憶装置であり、CPUなどの演算処理装置が直接読み書きできるRAMやROMなどの半導体記憶装置(メインメモリ)である。2次キャッシュ22は、メモリ21に記憶される比較的利用頻度の高いデータや命令を記憶するキャッシュメモリであって、メモリ21より高速なアクセスを可能とするキャッシュメモリである。
命令キャッシュ23は、メモリ21に記憶される比較的利用頻度の高いデータのうち、特に命令を記憶するキャッシュメモリであって、メモリ21よりも2次キャッシュ22よりも高速なアクセスを可能とするキャッシュメモリである。
データキャッシュ24は、メモリ21に記憶される比較的利用頻度の高いデータのうち、特に命令以外のデータを記憶するキャッシュメモリであって、メモリ21よりも2次キャッシュ22よりも高速なアクセスを可能とするキャッシュメモリである。レジスタ25は、次に実行するべき命令が格納されているメモリ11上のアドレスを指し示すプログラムカウンタや、固定小数点レジスタや浮動小数点レジスタなどからなる。
XAR26は、複数の命令拡張情報を記憶する数値演算拡張レジスタである。具体的には、XAR26は、1命令目の拡張情報フィールドであるXAR_Fと、2命令目の拡張情報フィールドであるXAR_Sとのフィールドを有する2命令分の命令拡張情報を格納することができるレジスタである。
XAR26は、例えば、図3に示すように、1命令目の拡張情報フィールドであるXAR_Fと、2命令目の拡張情報フィールドであるXAR_Sを有する2命令分の命令拡張情報を格納する例えば28ビット幅のレジスタである。命令拡張情報レジスタ13が有する拡張情報フィールドは、27ビット目に1命令目の拡張情報(データ)XAR_F部が有効であるか否かを示す「F_VAL」と、26ビット目にSIMDによる動作を指定する「F_SIMD」フィールドとを有する。「F_SIMD」フィールドは、例えば、その値が1の場合に、SIMD動作を行う。さらに、FMA命令で演算対象となる3つのソースオペランドとFMA命令のディスティネーション(演算結果)を格納するレジスタ指定の拡張分を有する。具体的には、FMA演算の演算結果を格納するディスティネーションレジスタを指定する25〜23ビット目の「F_RD<7:5>」、ソース1レジスタを指定する22〜20ビット目の「F_RS1<7:5>」、ソース2レジスタを指定する19〜17ビット目の「F_RS2<7:5>」、ソース3レジスタを指定する16〜14ビット目の「F_RS3<7:5>」を有する。なお、XAR_FおよびXAR_Sは、それぞれの拡張命令のコミットに伴ってリセットされる。また、命令拡張情報レジスタ13が有する拡張情報フィールドの、13ビット目に2命令目の拡張情報(データ)XAR_S部が有効であるか否かを示す「S_VAL」と、12ビット目にSIMDによる動作を指定する「S_SIMD」フィールドとを有する。さらに、FMA命令で演算対象となる3つのソースオペランドとFMA命令のディスティネーション(演算結果)を格納するレジスタ指定の拡張分を有する。具体的には、FMA演算の演算結果を格納するディスティネーションレジスタを指定する11〜9ビット目の「S_RD<7:5>」を有する。さらに、ソース1レジスタを指定する8〜6ビット目の「S_RS1<7:5>」、ソース2レジスタを指定する5〜3ビット目の「S_RS2<7:5>」、ソース3レジスタを指定する2〜0ビット目の「S_RS3<7:5>」を有する。
命令バッファ部30は、一時領域であるバッファを有し、命令キャッシュ23などの記憶部から読み出した命令を実行するまで一旦格納する処理部である。具体的には、命令バッファ部30は、レジスタ25に含まれるプログラムカウンタにより指定された命令を命令キャッシュ23から読み出して格納する。また、命令バッファ部30は、レジスタ25により指定された命令が命令キャッシュ23でキャッシュヒットしなかった場合には、2次キャッシュ22から読み出して格納する。また、命令バッファ部30は、レジスタ25により指定された命令が2次キャッシュ22でキャッシュヒットしなかった場合には、メモリ21から読み出して格納する。
命令プリデコード部31は、命令キャッシュ23などの記憶部から読み出された命令が、XAR26に命令拡張情報を書き込む前置命令である場合に、前置命令と前置命令の直後にデコードされる命令とを1命令に結合する。具体的に、SXAR1の直後にデコードされる命令がSPARC JPS1のFMA命令である場合について説明する。命令プリデコード部31は、SXAR1命令の13〜25ビット目の拡張情報と、後続の32ビット幅の命令によって、45ビット幅の結合拡張済み命令を作成する。例えば、命令プリデコード部31は、図4に示した「F_RS3<7:5>」、「F_RS2<7:5>」、「F_RS1<7:5>」、「F_RD<7:5>」、「F_SIMD」と、図10のFMA命令によって45ビット幅の結合拡張済み命令を作成する。さらに、命令プリデコード部31は、作成した45ビット幅の結合拡張済み命令に、当該命令がSXARと直後の命令が1命令に結合された命令あることを示す1ビット幅の「パックビット=1」を付加する。
次にSXAR2の場合について説明する。命令プリデコード部31は、SXAR2と直後の命令を結合して、1つの命令にしながら、SXAR2命令の13〜25ビット目の拡張情報と、後続の32ビット幅の命令によって、45ビット幅の結合拡張済み命令を作成する。例えば、命令プリデコード部31は、図4に示した「F_RS3<7:5>」、「F_RS2<7:5>」、「F_RS1<7:5>」、「F_RD<7:5>」、「F_SIMD」と、図10の命令とを結合した45ビット幅の結合拡張済み命令を作成する。さらに、命令プリデコード部31は、作成した45ビット幅の結合拡張済み命令に、当該命令がSXAR命令と直後の命令が1命令に結合された命令あることを示す1ビット幅の「パックビット=1」を付加する。
また、命令プリデコード部31は、SXAR2命令の0〜12ビット目の拡張情報と、後続2命令目の32ビット幅の命令によって、45ビット幅の非結合拡張済み命令を作成する。例えば、命令プリデコード部31は、図4に示した「S_RS3<7:5>」、「S_RS2<7:5>」、「S_RS1<7:5>」、「S_RD<7:5>」、「S_SIMD」と、図10の命令とを結合した45ビット幅の非結合拡張済み命令を作成する。さらに、命令プリデコード部31は、作成した45ビット幅の非結合拡張済み命令に、当該命令がSXAR命令と直後の命令が結合されていない命令であることを示すために、1ビット幅の「パックビット」の値を0とする。
そして、命令プリデコード部31は、前置命令(SXAR1やSXAR2)や拡張される命令などの固定命令長の命令オペコードを格納できる命令プリデコードスロットを有する。命令デコード部31とそれ以降のステージは、結合された実効的な命令に対して、実行資源を割り当てる。したがって、図12に示すように、命令プリデコードステージまでは、前置命令SXARが単独で存在することになるが、命令デコード以降のステージでは、前置命令SXARは結合されているため、単独では存在しない。そのため、前置命令は、コミットスタックエントリや同時命令コミット数を消費しないようになり、命令実行資源の増加を抑えることができる。また、命令プリデコード部31は、結合させた命令に対しては、結合したことを示すパックフラグを生成し、命令デコード部32のスロットに結合したことを示すフラグを通知、これをコミットスタックエントリにも格納する。なお、図12は、前置命令SXARの結合を説明する図である。
命令デコード部32は、命令プリデコード部31によってSXARと結合された結合済み命令を1命令としてデコードする。具体的には、命令デコード部32は、命令プリデコード部31から受け付けた結合拡張済み命令「45ビット+(パックフラグ=1)」をデコードし、実行処理部33やコミックスタックエントリ34bなどに出力する。命令デコード部32は、命令プリデコード部31から受け付けた結合されていない拡張される非結合拡張済み命令「45ビット+(パックフラグ=0)」をデコードし、実行処理部33やコミックスタックエントリ34bなどに出力する。
また、命令デコード部32の命令スロット数は、SXAR命令が直後の命令と結合されていることから、命令プリデコード部のスロット数よりも少なくてよい。ここで、最大2命令分の拡張が可能なSXAR2命令をコンパイラが使用することを前提にして説明する。この場合、命令デコード部32の実効的な数(前置命令SXARを0としたときの数)をNとした場合、Nが偶数であれば、命令プリデコード部31の命令スロット数は(N/2)追加して、合計(3N/2)であり、Nが奇数であれば(N/2+0.5)追加して、合計(3N/2+0.5)を用意すればよい。例えば、図10に示すように、N=4の場合、命令デコード部32のスロット4つに対して、命令プリデコード部31のスロットは6つとなる。なお、図13は、前置命令SXARによる命令の拡張と直後の命令との結合およびスロット数を説明する図である。
実行処理部33は、命令デコード部32によってデコードされた命令を実行する。具体的には、実行処理部33は、デコードされた命令が結合拡張済み命令「45ビット+(パックフラグ=1)」である場合には、結合された1命令として命令を実行してデータキャッシュ24やレジスタ25を参照し、その結果を接続される他の機能部に出力する。また、実行処理部33は、デコードされた命令が結合されていない通常の命令の場合には、通常通り実行してデータキャッシュ24やレジスタ25を参照し、その結果を接続される他の機能部に出力する。
例えば、実行処理部33は、SXAR1によって指定される3ビット幅の各レジスタ指定フィールドと、後続の命令の5ビット幅の各レジスタ指定フィールドとの8ビット幅で指定される各オペランドを用いた演算を実行する。例えば、実行処理部33は、図4に示した「F_RS3」、「F_RS2」、「F_RS1」)と、図10に示した「RS3」、「RS2」、「RS1」との8ビット幅で指定される各オペランドを用いた演算を実行する。そして、命令コミットの際に、命令コミット判定部35は、8ビット幅で指定されたレジスタ領域に演算結果を格納する。具体的には、命令コミット判定部35は、SXAR1によって指定される3ビット幅のレジスタ(「F_RD」)と、図10に示したような命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。この際、実行処理部33は、2つの命令が1つの命令として結合された結合拡張済み命令に対して、2命令分の実行資源を用いることなく、結合されていない命令と同様に、1命令分の実行資源のみを用いて実行する。また、命令コミットの際に、命令コミット判定部35は、拡張命令をコミットするので、XAR26のXAR_F部すべてのビットをリセットする。さらに、命令コミット判定部35は、パックビットが1であることから、2命令分実行したことをレジスタ25に出力する。
また、実行処理部33は、SXAR2によって指定される3ビット幅の各レジスタ指定フィールドと、後続の命令の5ビット幅の各レジスタ指定フィールドとの8ビット幅で指定される各オペランドを用いた演算を実行する。例えば、実行処理部33は、図4に示した「F_RS3」、「F_RS2」、「F_RS1」と、図10に示した「RS3」、「RS2」、「RS1」との8ビット幅で指定される各オペランドを用いた演算を実行する。そして、命令コミットの際に、命令コミット判定部35は、8ビット幅で指定されたレジスタ領域に演算結果を格納する。具体的には、命令コミット判定部35は、SXAR2によって指定される3ビット幅のレジスタ(「F_RD」)と、図10に示したような命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。また、命令コミットの際に、命令コミット判定部35は、拡張命令をコミットするので、XAR26のXAR_F部すべてのビットをリセットする。また、XAR26のXAR_S部に関しては、「S_VAL」を「1」にして、SXAR2により指定される拡張情報である12〜0ビット目が格納される。さらに、命令コミット判定部35は、パックビットが1であることから、2命令分実行したことをレジスタ25に出力する。
また、実行処理部33は、SXAR2によって指定される3ビット幅の各レジスタ指定フィールドと、後続2命令目の命令によって指定される5ビット幅の各レジスタ指定フィールドとの8ビット幅で指定される各オペランドを用いた演算を実行する。例えば、実行処理部33は、図4に示した「S_RS3」、「S_RS2」、「S_RS1」と、図10に示した「RS3」、「RS2」、「RS1」との8ビット幅で指定される各オペランドを用いた演算を実行する。そして、命令コミットの際に、命令コミット判定部35は、8ビット幅で指定されたレジスタ領域に演算結果を格納する。具体的には、命令コミット判定部35は、SXAR2によって指定される3ビット幅のレジスタ(「S_RD」)と、図10に示したような命令によって指定される5ビット幅のレジスタ(RD)との計8ビット幅で指定されたレジスタ領域に演算結果を格納する。また、命令コミットの際に,命令コミット判定部35は、拡張命令をコミットするので、XAR26のXAR_S部すべてのビットをリセットする。
バッファ34は、XAR更新用バッファ34aとコミットスタックエントリ34bとを有し、XAR26を更新する情報や実行された命令のコミット(完了)に用いられる情報を一時的に保持する。なお、ここでは、XAR更新用バッファ34aとコミットスタックエントリ34bとが別の領域として図示しているが、これに限定されるものではなく、フィールドを設けることで一つの領域(バッファ)として構成することもできる。
XAR更新用バッファ34aは、前置命令SXAR1が実行された場合に、XAR26の更新に用いられる情報を保持する。具体的には、前置命令SXARは、拡張される後続の命令との間に割り込み等が入った場合、割り込み処理終了後には前置命令の情報(拡張情報)をXAR26に格納し、これを参照することで、命令を正しく拡張することができる。そこで、XAR更新用バッファ34aは、前置命令がデコードされ、コミットされるまでXAR26に書き込む情報(SXARの拡張情報)を保持するのに用いられる。
コミットスタックエントリ34bは、命令コミットに必要な情報を一時的に保持する。具体的には、コミットスタックエントリ34bは、実行結果などの情報を一時的に保持する。つまり、コミットスタックエントリ34bは、コミット処理が実行されて、XAR26やレジスタ25が更新されるまでの間、実行結果や拡張情報等を一時的に保持する。
命令コミット判定部35は、コミットスタックエントリ34b内の先頭の命令からコミット可能か否かを判定してコミット処理を実行する。具体的には、命令コミット判定部35は、コミットスタックエントリ34bからコミット候補の命令を選択し、コミット可能かを判定する。例えば、命令コミット判定部35は、SXAR命令によるXAR26やデータキャッシュ24の更新、拡張された命令の資源更新を行う。この際、コミット候補のパックビットが1の場合、命令コミット判定部35は、現在の命令を指定するレジスタ25の値をPCとした場合、1命令分としてPC+4ではなく、2命令分としてPC+8にレジスタ25の値を更新する。コミット候補のパックビットが0の場合、命令コミット判定部35は、現在の命令を指定するレジスタ25の値をPCとした場合、1命令分のPC+4にレジスタ25の値に更新する。
ここで、命令プリデコード部31〜命令デコード部32〜コミットスタックエントリ34b〜命令コミット判定部35までの結合拡張済み命令Aの遷移について説明する。図14に示すように、命令プリデコード部31は、SXAR(A)と命令Aとを結合して、1つの命令として命令デコード部32に出力する。命令デコード部32では、入力された命令が結合された結合拡張済み命令Aである場合に、結合されたことを示す情報として、例えば「パックビット=1」を、コミットスタックエントリ34bや実行処理部35に出力する。その後、コミットスタックエントリ34bでは、実行処理部35に実行に伴って、結合拡張済み命令Aのコミットに必要な情報と拡張されたことを示すパックビットとを対応付けて保持する。命令コミット判定部35では、結合拡張済み命令のコミットに伴って、2命令分としてPC+8にレジスタ25の値を更新する。なお、図14は、命令が拡張されて、且つSXAR命令と結合された命令がコミットされるまでの遷移を示す図である。
ところで、命令プリデコード部31では、次の命令デコード部32よりも命令スロット数が多いため、命令プリデコード部31から次の命令デコード部32遷移できない命令が一部残ってしまうことも考えられる。そのため、命令プリデコード部31では、スロットの命令の残り状況を見ながら、次の命令プリゼンテーションを行う必要がある。また、プリゼンテーションできる空きスロットの位置なども制御する必要が発生し、複雑化してしまう。これを避けるために、命令プリデコード部31では、次の命令デコード部32にすべて同時遷移できる制御を行う。
具体的には、命令プリデコード部31は、そのステージにおける命令拡張に用いられるSXAR命令がいくつ含まれるかを見て、命令プリゼンテーション数を調整する。命令プリデコード部31は、命令バッファ30から選ばれた先頭からN命令の中にSXAR命令が1つ以上含まれている場合に、(N+1)番目の命令も命令デコード部32に送る。そして、命令プリデコード部31は、先頭から(N+1)命令の中にSXAR命令が2つ以上含まれている場合に、(N+2)番目の命令も命令デコード部32に送る。このようにすることで、もし仮にSXAR命令が上記範囲に含まれていなければ、命令プリデコード部31のスロットをすべて埋めることなく命令プリゼンテーションが行われる。命令プリデコード部31では、命令プリゼンテーションされた命令を常にN個以内の実効命令にパック(結合)しながら、必ずすべての命令を同時に次の命令デコード部32に遷移させることが可能になる。
例えば、N=4である場合の例を図15に示す。図15では、命令プリデコード部31は、SXAR命令(SXAR1およびSXAR2)が命令バッファ部30から選ばれた先頭から4命令の中に1つ以上含まれている場合に、5番目の命令も命令デコード部32に送る。また、命令プリデコード部31は、先頭から5命令の中にSXAR命令が2つ以上含まれている場合に、6番目の命令も命令デコード部32に送る。このようにすることで、もし仮にSXAR命令が上記範囲に含まれていなければ、命令プリデコード部32のスロットがすべて埋めることなく命令プリゼンテーションが行われる。命令プリデコード部31では、命令プリゼンテーションされた命令を常に4個以内の実効命令にパックしながら、必ずすべての命令を同時に次の命令デコード部32に遷移させることが可能になる。ただし前提として、コンパイラは、連続する2命令の命令拡張を行う際には、SXAR2を使用することが推奨される。なお、図15は、命令プリゼンテーション数の調整例を示す図である。
[演算処理装置による処理]
次に、実施例2に係る演算処理装置の処理の流れを説明する。図16は、実施例2に係る演算処理装置における処理の流れを示すフローチャートである。なお、SXAR1とSXAR2とを特別に区別する必要が無い場合は、単に「SXAR」と記載する。
図16に示すように、演算処理装置20の命令バッファ部30は、レジスタ25により指定された命令を命令キャッシュ23から読み出して格納する(ステップS101YES)。そして、命令プリデコード部31は、読み出された命令が前置命令SXARであるか否かを判定する(ステップS102)。
命令プリデコード部31は、読み出された命令が前置命令SXARである場合(ステップS102YES)、SXARと後続の命令とを結合して、1つの命令とした結合拡張済み命令を生成する(ステップS103)。続いて、命令デコード部32は、結合された結合拡張済み命令をデコードするとともに、結合拡張済み命令あることを示すフラグを付加した後、実行処理部33が結合拡張済み命令を1命令として実行する(ステップS104)。
その後、命令コミット判定部35は、実行された結合拡張済み命令をコミット可能と判定すると、XAR26をリセットするとともに、2命令としてレジスタ25を更新する(ステップS105)。
ステップS102に戻り、命令プリデコード部31は、読み出された命令がSXAR命令でない命令の場合(ステップS102NO)、2つの命令の結合などを行うことなく、命令デコード部32に出力する。命令デコード部32は、入力された命令をデコードし、実行処理部33は、デコードされた命令を実行する(ステップS106)。その後、命令コミット判定部35は、実行された通常命令をコミット可能と判定すると、1命令としてレジスタ25を更新する(ステップS107)。
そして、演算処理装置20は、処理やプログラムが続く場合には(ステップS108NO)、ステップS101に戻って、以降の処理を繰り返して実行し、続かない場合には(ステップS108YES)、処理を終了する。
[実施例2による効果]
このように、実施例2によれば、命令長が固定長である命令セットアーキテクチャにおいても、命令の拡張を行うことが可能である。また、実施例2によれば、上述した拡張手法を用いた場合でも、前置命令と拡張命令を結合し、1命令分の資源で実行することができる。その結果、命令や拡張命令の実行に用いられる資源(領域)を効率的に利用することもできる。
ところで、命令プリデコード部31でパック処理(結合処理)をしたものの、SXAR命令とパックした直後の命令が起因で例外などのトラップ処理を必要とする場合がある。つまり、ソフトウェアとしては、SXAR命令まではコミットした状態で、直後の命令はコミットせずにトラップ処理に遷移することを期待する場合である。
開示する演算処理装置は、このよう場合であっても、問題なくトラップ処理(割り込み処理)を実行し、トラップ処理実行後も問題なく結合した命令を実行することができる。そこで、実施例3では、結合処理後にトラップ処理が発生した場合の処理について説明する。
具体的には、トラップ処理に遷移する必要がある場合、命令コミットを判定する命令コミット判定部35が、パックした命令がパックしたことを示すパックビットを確認する。そして、命令コミット判定部35は、パックビットが1である場合、その命令のトラップ処理への遷移は行わず、パイプラインをすべてキャンセルして、命令フェッチから再度やり直す。
例えば、命令コミット判定部35がやり直し処理であることを示す制御信号アンパックリランを発信した場合、図17に示すように、これを受け取った命令プリデコード部31は、5命令以上の命令プリゼンテーションを行わないように制御する。さらに、命令プリデコード部31は、前置命令SXARと直後の命令の結合(パック)処理を行わないようにする。このアンパックリランモードによる再実行では、パック処理を行わないので、前置命令SXARと直後の命令が別々のコミットスタックエントリ34bを使用する。この結果、直後の命令起因の例外の場合は、SXAR命令がコミットした後に、直後の命令でトラップに遷移することが可能になる。図17は、結合処理後にトラップ処理が発生した場合に実行する再命令フェッチを説明する図である。
上述した処理の流れ、つまり、結合処理後にトラップ処理が発生した場合の処理の流れについて説明する。図18は、結合処理後にトラップ処理が発生した場合の処理の流れを示すフローチャートである。
図18に示すように、命令コミット判定部35は、トラップ処理を検出した場合(ステップS201)、現在実行されている命令のパックビットが「1」であるか否かを判定する(ステップS202)。
そして、命令コミット判定部35は、現在実行されている命令のパックビットが「1」である場合(ステップS202YES)、やり直し処理であることを示す制御信号アンパックリランを各制御部等に発信しパイプラインをキャンセルする(ステップS203)。
続いて、命令プリデコード部31は、パック禁止モードで命令を再実行し(ステップS204)、前置命令SXARと直後の命令を結合せずに、命令デコード部32に出力する。そして、命令デコード部32は、前置命令SXARと直後の命令を別々にデコードする(ステップS205)。実行処理部33および命令コミット判定部35は、前置命令SXARを単独で実行およびコミットする(ステップS206)。
その後、実行処理部33や命令コミット判定部35は、実行したSXARの直後の命令でトラップを検出し(ステップS207)、当該命令のパックビットを「0」であることを確認して(ステップS208)、トラップ処理を実行する(ステップS209)。
一方、ステップS202に戻り、命令コミット判定部35は、現在実行されている命令のパックビットが「1」でない場合(ステップS202NO)、そのままトラップ処理を実行する(ステップS209)。
このように、実施例3によれば、前置命令SXARまではコミットした状態で、直後の命令はコミットせずにトラップ処理に遷移する必要がある場合でも、問題なくトラップ処理を実行し、トラップ処理実行後も問題なく結合した命令を実行することができる。
次に、前置命令SXARのXAR26更新の制御、構成について説明する。上述したように、開示する演算処理装置は、直後1命令のみを拡張するSXAR1命令と直後の2命令分を拡張するSXAR2命令を結合制御するものである。また、XAR26(命令拡張レジスタ)のXAR_F、XAR_Sに拡張情報をセットした後、その拡張情報は、拡張対象の命令がコミットする際にリセットされる。
ここでは、そのセット及びリセットに必要な制御やバッファの構成について説明する。なお、ここでは、コミットスタックエントリ34bの構成ついて説明するが、必ずしもコミットスタックエントリ34bに適用する必要はない。例えば、XAR更新用バッファ34aとコミットスタックエントリ34bとを統合した一つのバッファ34に適用することもできる。
最初に、XAR26のXAR_F部に対してのセットおよびリセット制御について説明する。SXAR1命令、SXAR2命令ともにXAR_Fをセットし、XAR_Fによって拡張された命令のコミット時にリセットされる。まず、SXAR1命令に関して説明する。
図19に示すように、命令プリデコード部31は、SXAR1と直後の命令が結合して、1つの命令となった結合拡張済み命令Aを作成し、命令デコード部32は、結合拡張済み命令Aをデコードする。そして、実行処理部33は、結合拡張済み命令Aを実行し、さらに、実行処理部33は、例えば、結合拡張済み命令Aのオペコードなどの情報をコミットスタックエントリ34bに格納する。その後、命令コミット判定部35は、結合拡張済み命令Aをコミットすると、XAR26のXAR_Fに格納される拡張情報をゼロにリセットする。そのため、SXAR1が結合された場合には、書き込むデータを特別に持つ必要がなく、コミットスタックエントリ34bにSXAR1の情報を保持しておく必要もない。
一方、命令SXAR1が、前述したアンパックリランモードのときなどで、後続の命令と結合せずに命令デコードが行われる場合がある。この場合は、図20に示すように、命令プリコード部31は、SXAR1と直後の命令を結合して処理しないので、命令デコード部32は、先にSXAR1(A)単独でデコードする。そして、SXAR1(A)の情報をコミットスタックエントリ34bに格納する。その後、命令コミット判定部35は、SXAR1(A)をコミットすると、XAR26のXAR_FにSXAR1(A)(「F_SIMD」、「F_RS3」、「F_RS2」、「F_RS1」、「F_RD」)の拡張情報を格納する。
次に、命令デコード部32は、SXAR1の後続命令である命令AがXAR26のXAR_Fに格納されるSXAR1(A)の拡張情報を用いて、SXAR1の後続命令である命令Aが拡張された非結合拡張済み命令Aをデコードする。そして、実行処理部33は、デコードされた非結合拡張済み命令Aを実行する。命令コミット判定部35は、SXAR1の後続の命令Aをコミットした場合には、XAR26のXAR_Fの値をゼロにリセットする。なお、SXARが結合されなかった場合、命令コミットに必要な情報は通常の書く込むレジスタ番号など不要である。したがって、別の命令では、別の用途に用いられているフィールドをSXARの命令拡張レジスタに書き込む情報に割り当てることで必要な資源増加を抑えることができる。
また、命令コミット判定部35は、命令SXAR2に関しては、SXAR2と直後の命令が結合して1つの命令として処理された場合、その拡張命令をコミットするとXAR26のXAR_F部の値をゼロにリセットする。したがって、SXAR2命令に含まれるXAR_F用の拡張情報は持たず、ただリセットだけをする。
具体的には、図21に示すように、命令プリコード部31によってSXAR2と直後の命令Aが結合して1つの命令として処理された場合、命令デコード部32によって結合拡張済み命令Aがデコードされ、実行処理部33によって実行される。さらに、実行処理部33は、例えば、結合拡張済み命令Aのオペコードなどの拡張情報をコミットスタックエントリ34bに格納する。その後、命令コミット判定部35は、SXAR2と命令Aが結合することで拡張された結合拡張済み命令Aをコミットすると、XAR26のXAR_Fの拡張情報をゼロにリセットする。さらに、結合拡張済み命令Aをコミットした命令コミット判定部35は、次の命令Bを拡張するSXAR2により指定される12〜0ビット目の(「S_SIMD」、「S_RS3」、「S_RS2」、「S_RS1」、「S_RD」)をXAR_Sに格納する。
SXAR2の直後2命令目の命令Bに関しては、命令デコード部32は、XAR_Sに格納されるSXAR2命令の拡張情報を用いて、SXAR2の直後2命令目の命令Bが拡張された非結合拡張済み命令Bをデコードする。そして、実行処理部33は、デコードされた非結合拡張済み命令Bを実行する。この場合、命令コミット判定部35は、非結合拡張済み命令Bをコミットすると、XAR26のXAR_Sに格納される命令B用の拡張情報をゼロにリセットする。
つまり、SXAR2が直後の命令Aが結合され、結合拡張済み命令Aとしてコミットされた場合、XAR26のXAR_Fの値はゼロにリセットされるので、命令Aの拡張情報を保持する必要はない。ところが、次の非結合拡張済み命令Bを実行する前に、トラップ処理などが発生した場合であっても、拡張済み命令Bを正確に実行する必要がある。そのため、結合拡張済み命令Aが実行/コミットされてもリセットされないフィールドである「XAR_S更新用情報フィールド」にSXAR2の命令Bの拡張情報を保持しておく必要がある。そして、非結合拡張済み命令Bが実行後、コミットされた場合、XAR26のXAR_Sの値がゼロにリセットされる。
一方、前述したアンパックリランモードのときなどで、SXAR2と直後の命令が結合されなかった場合、XAR_Fに対応する拡張情報をSXAR1の結合されなかった場合と同様、通常の命令が使用するフィールドをなるべく利用しながら格納して、XAR_Fを更新する。
具体的には、図22に示すように、命令プリコード部31は、SXAR2と直後の命令を結合して処理しないので、命令デコード部32は、先にSXAR2単独でデコードする。そして、コミットスタックエントリ34bにSXAR2の情報を格納する。そして、命令コミット判定部35は、SXAR2をコミットすると、後続する命令AとBを拡張する情報がXAR26のXAR_FとXAR_Sとのそれぞれに格納する。例えば、命令コミット判定部35は、XAR26のXAR_Fの「F_VAL」を「1」にして、SXAR2により指定される25〜13ビット目の(「F_SIMD」、「F_RS3」、「F_RS2」、「F_RS1」、「F_RD」)をXAR_F部に格納する。また、命令コミット判定部35は、SXAR2により指定される12〜0ビット目の(「S_SIMD」、「S_RS3」、「S_RS2」、「S_RS1」、「S_RD」)をXAR_Sに格納する。
その後、命令デコード部32は、XAR_Fに格納されるSXAR2命令内の拡張情報を用いて、SXAR2の直後の命令Aが拡張された非結合拡張済み命令Aをデコードする。そして、実行処理部33は、命令デコード部32によってデコードされた非結合拡張済み命令Aを実行する。続いて、命令コミット判定部35は、非結合拡張済み命令Aをコミットすると、XAR26のXAR_Fに格納される命令A用の拡張情報をゼロにリセットする。
さらにその後、命令デコード部32は、XAR_Sに格納されるSXAR2命令内の拡張情報を用いて、SXAR2の直後2命令目の命令Bが拡張された非結合拡張済み命令Bをデコードする。そして、実行処理部33は、命令デコード部32によってデコードされた非結合拡張済み命令Bを実行する。続いて、命令コミット判定部35は、非結合拡張済み命令Bをコミットすると、XAR26のXAR_Sに格納される命令B用の拡張情報をゼロにリセットする。
上述した図19〜図22の例で検討すると、XAR26のXAR_Sには、SXAR2命令が結合されるか否かに関わらず、直後2命令目の拡張情報を書き込む必要がある。しかし、コミットスタックエントリのフィールドを増やしていくことは、回路の増大につながり、できるだけ避けたい。また、XAR26による拡張は、SXAR命令の拡張を行うことはない。このような命令列が出た場合には、ハードウェアは例外トラップに入る。また、SXAR2は、直後の命令と結合された場合でも、コミットスタックエントリにおいて連続して格納する必要はない。よって、SXAR2命令用にXAR_S情報を更新するのに必要なコミットスタックエントリの格納部は、2個のエントリに対して1つ持つような構成をとることで十分である。
以上を考慮すると、バッファ34の構成は、図23のような構成にすることが好ましい。具体的には、XAR_Sをセットするか否かを示す1ビットフィールドと、XAR_Sをリセットするか否かを示す1ビットフィールドとは、すべてのコミットスタックエントリごとに有する。XAR_Sをセットするフラグが立っている場合には(例えば、1の場合)、そのコミットスタックエントリに対応するXAR_S更新用フィールドのデータを命令コミットした場合に、XAR_Sへ書き込む。また、XAR_Sをリセットするフラグは、XAR_Sで拡張される命令をコミットスタックエントリに登録する際に、フラグが立つ。こうすることで、コミットステージでフラグが確認されて、フラグが立っている場合は、XAR_Sフィールドがリセットされる。
(テンポラリXAR_S更新用バッファ)
また、例えば、コミットスタックエントリ34b又はバッファ34の使用数が1つを残して使用中となった状態について検討する。この場合、図24に示すように、SXAR2命令のXAR_S更新用データに必要なフィールドが2個のエントリで共有しているため、SXAR2をデコードして新たにコミットスタックエントリを割り当てると、コミットスタックエントリの先頭の命令のXAR_S更新用データを上書きしてしまう可能性がある。
これを解消するために、コミットスタックエントリの使用可能数が1つの状態で、SXAR2命令をデコードした場合、一時的にXAR_S更新用の拡張情報を格納しておくバッファ(テンポラリXAR_S更新用バッファ)を備えさすようにすることもできる(図25)。このテンポラリXAR_S更新用バッファには、SXAR2命令をデコードした場合、一時的にXAR_S更新用の拡張情報を格納しておき、その後、1つ以上命令がコミットしたら、それを契機に命令が該当するXAR_S更新用データフィールドにデータを移すようにする。
このような構成のコミットスタットエントリ(バッファ34)を用いることで、命令や拡張命令を実行する資源をより効率的に利用することができる。
なお、図19は、SXAR1命令と結合された命令の処理の流れを示す図であり、図20は、SXAR1命令と結合されなかった命令の処理の流れを示す図である。図21は、SXAR2命令による2命令の拡張かつ直後の命令と結合された命令の処理の流れを示す図である。また、図22は、SXAR2命令による2命令の拡張かつ直後の命令と結合されなかった命令の処理の流れを示す図であり、図23は、推奨されるコミットスタットエントリ(バッファ34)の構成を示す図である。図24は、テンポラリXAR_S更新用バッファを説明する図である。
さて、これまで開示する演算処理装置の実施例について説明したが、開示する演算処理装置は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に示すように、異なる実施例を説明する。
(中間状態レジスタ)
例えば、図25に示すように、SXARと、それによって拡張される命令が同時に命令プリデコード部31のスロットに入らなかった場合が考えられる。図25では、SXAR2(D、E)に後続するはずの命令Eが、命令Dと同じタイミングで、命令プリデコード部31のスロットに入っていないことが示されている。この場合、次のサイクル以降に命令プリデコードされる命令Eに拡張情報を付加する必要がある。そのため、拡張対象の命令が命令プリデコードされるまでの間、SXARの情報を保持する中間状態レジスタ「PD_XARレジスタ」を有するようにすることもできる。
このPD_XARレジスタは、命令プリデコード部31及び命令デコード部32に近い場所に備えさすことが有効である。また、SXARとSXARによって拡張される命令が同時に命令プリデコード部31のスロットに入らなかった場合のほかに、分岐予測ミスやトラップ処理に遷移するなどの理由でパイプラインフラッシュを行った場合にも有効である。具体的には、マスターであるXARレジスタの値をPD_XARにコピーして、それ以降の命令拡張情報付加を行うようにすればよい。図25は、中間状態レジスタを説明する図である。
(前置命令)
上述した実施例では、基本的に前置命令SXAR2を用いた例について説明したが、SXAR1を用いても同様に処理することができる。図26に示すように、SXAR1とSXAR2とは、ソフト的に等価であるので、コンパイラではSXAR2でコード生成することが好ましい。例えば、図15で説明したスロット数について説明する。拡張したい連続する2つの命令に対して、SXAR2と被拡張命令2つではなく、SXAR1命令と被拡張命令1つ、SXAR1命令と被拡張命令1つというようにすることもできる。この場合、図15とは異なり、実効命令デコード数を3つにすることで無駄な領域を抑止して処理を実行することができる。図26は、SXAR1とSXAR2との関係を示す図である。
(システム構成等)
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)命令を拡張する拡張情報を記憶する第一フィールドと第二フィールドとを有する命令拡張情報レジスタと、
当該命令の直後の命令の拡張情報を前記第一フィールドに拡張情報を書き込む1命令分の拡張情報を保持する第一前置命令と、当該命令の直後の命令の拡張情報を前記第一フィールドに書き込み、当該命令の直後2命令目の命令の拡張情報を前記第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令とを有し、
前記命令を記憶する記憶部から読み出した命令が、前記第一前置命令または前記第二前置命令である場合に、前記第一前置命令または前記第二前置命令と、前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を生成する命令結合部と、
前記命令結合部によって生成された結合済み命令をデコードし、1命令として実行する命令実行部と、
前記命令実行部によって実行された結合済み命令に対するコミットを行う場合に、プログラムカウンタを2命令分更新するレジスタ更新部と、
を有することを特徴とする演算処理装置。
(付記2)前記命令実行部は、複数の命令を同時にデコードして処理するパイプライン処理を行うものであって、
前記命令結合部は、前記命令実行部が同時に実行できる命令数が偶数の場合には、前記命令数の半分の命令数を前記記憶部から読み出して格納するスロットを追加して構成し、前記命令実行部が同時に実行できる命令数が奇数の場合には、前記命令数の半分に0.5を加算した命令数を前記記憶部から読み出して格納するスロットを追加して構成することを特徴とする付記1に記載の演算処理装置。
(付記3)前記命令結合部は、前記記憶部から読み出した複数の命令の先頭から所定命令数までに一つ以上の前記前置命令が含まれている場合には、前記所定命令数の次の命令まで前記命令実行部に出力し、前記記憶部から読み出した複数の命令の先頭から前記所定命令数の次の命令までに、二つ以上の前記第一前置命令または前記第二前置命令が含まれている場合には、前記所定命令数の二つ次の命令まで前記命令実行部に出力することを特徴とする付記2に記載の演算処理装置。
(付記4)前記命令結合部によって生成された結合済み命令のうち、前記第一前置命令または前記第二前置命令の直後の命令が起因でトラップ処理が発生した場合、または、前記第二前置命令の直後2命令目の命令が起因でトラップ処理が発生した場合、前記第一前置命令または前記第二前置命令をコミットせずに前記パイプラインをフラッシュさせるコミット判定部をさらに有し、
前記命令結合部は、前記コミット判定部によってパイプラインがフラッシュされた場合には、前記トラップ処理が発生した結合済み命令に含まれる前記第一前置命令または前記第二前置命令と直後の命令とを結合することなく、別々に前記命令実行部に出力し、
前記命令実行部は、前記命令結合部から受け付けた前記第一前置命令または前記第二前置命令と直後の命令とをそれぞれで別々に実行し、
前記レジスタ更新部は、前記命令実行部によって実行された命令数分のプログラムカウンタを更新することを特徴とする付記1に記載の演算処理装置。
(付記5)前記レジスタ更新部は、前記結合済み命令が前記命令実行部によって実行された場合、前記プログラムカウンタを2命令分更新するとともに、前記命令拡張情報レジスタの第一フィールドに記憶されている情報をリセットすることを特徴とする付記1に記載の演算処理装置。
(付記6)前記レジスタ更新部は、前記第一前置命令が先に実行され、続いて、前記第一前置命令が保持する拡張情報によって拡張される命令が前記命令実行部によって実行された場合、前記プログラムカウンタを1命令分ずつ更新するとともに、前記第一前置命令が実行された後に、前記命令拡張情報レジスタの第一フィールドに前記拡張情報を格納し、前記第一前置命令の直後の命令が前記第一フィールドの拡張情報を用いて実行された後に、前記命令拡張情報レジスタの第一フィールドに記憶されている情報をリセットすることを特徴とする付記1に記載の演算処理装置。
(付記7)前記レジスタ更新部は、前記結合済み命令が前記命令実行部によって実行された場合、前記プログラムカウンタを2命令分更新するとともに、前記命令拡張情報レジスタの第一フィールドに記憶される情報をリセットし、前記第二前置命令が保持する直後2命令目の命令の拡張情報を前記第二フィールドに格納することを特徴とする付記1に記載の演算処理装置。
(付記8)前記レジスタ更新部は、前記第二前置命令が先に実行され、続いて、前記第二前置命令が保持する拡張情報によって拡張される後続の2命令が前記命令実行部によって実行された場合、前記プログラムカウンタを1命令分ずつ更新するとともに、前記第二前置命令が実行された後に、前記第二前置命令の直後の命令の拡張情報を前記命令拡張情報レジスタの第一フィールドに格納するとともに、前記第二前置命令の直後2命令目の命令の拡張情報を前記命令拡張情報レジスタの第二フィールドに格納し、前記第二前置命令の直後の命令が前記第一フィールドの拡張情報を用いて実行された後に前記第一フィールドをリセットし、前記第二前置命令の直後2命令目の命令が前記第二フィールドの拡張情報を用いて実行された後に前記第二フィールドをリセットすることを特徴とする付記1に記載の演算処理装置。
(付記9)前記命令実行部によって命令が実行されてコミットされるまでの間、前記命令実行部によって格納された情報であって、少なくとも当該実行された命令のオペコードを含む情報を保持するコミット領域をさらに有し、
前記コミット領域は、前記第一フィールドを更新する情報を保持する第一領域と、前記第二フィールドを更新する第二領域とを有し、前記第二領域は、連続する二つの第一領域に対して一つ有することを特徴とする付記1に記載の演算処理装置。
(付記10)前記コミット領域は、前記第一領域および第二領域とは別の領域であるテンポラリ領域をさらに有し、
前記命令実行部は、前記コミット領域の前記第一領域の空きが一つであり、前記第二前置命令もしくは前記結合済み命令を実行した場合に、前記第二前置命令の直後2命令目の拡張情報を前記テンポラリ領域に格納することを特徴とする付記9に記載の演算処理装置。
(付記11)命令を記憶する記憶部から読み出した命令が、前記命令の直後の命令の拡張情報を命令拡張情報レジスタの第一フィールドに拡張情報を書き込む1命令分の拡張情報を保持する第一前置命令であるか、または、当該命令の直後の命令の拡張情報を前記第一フィールドに書き込み、当該命令の直後2命令目の命令の拡張情報を命令拡張情報レジスタの第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令である場合に、前記第一前置命令または前記第二前置命令と前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を生成する命令結合ステップと、
前記命令結合ステップによって生成された結合済み命令をデコードし、1命令として実行する命令実行ステップと、
前記命令実行ステップによって実行された結合済み命令に対するコミットを行う場合に、プログラムカウンタを2命令分更新するレジスタ更新ステップと、
を含んだことを特徴とする制御方法。
(付記12)命令を拡張する拡張情報を記憶する第一フィールドと第二フィールドとを有する命令拡張情報レジスタと、
当該命令の直後の命令の拡張情報を前記第一フィールドに拡張情報を書き込む1命令分の拡張情報を保持する第一前置命令と、当該命令の直後の命令の拡張情報を前記第一フィールドに書き込み、当該命令の直後2命令目の命令の拡張情報を前記第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令とを有し、
前記命令を記憶する記憶部から読み出した命令が、前記第一前置命令または前記第二前置命令である場合に、前記第一前置命令または前記第二前置命令と前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を生成する命令結合部と、
前記命令結合部によって生成された結合済み命令をデコードし、1命令として実行する命令実行部と、
前記命令実行部によって実行された結合済み命令に対するコミットを行う場合に、プログラムカウンタを2命令分更新するレジスタ更新部と、
を有することを特徴とする演算回路。
10 演算処理装置
11 メモリ
12 レジスタ
13 命令拡張情報レジスタ
14 命令結合部
15 命令実行部
16 レジスタ更新部
20 演算処理装置
21 メモリ
22 2次キャッシュ
23 命令キャッシュ
24 データキャッシュ
25 レジスタ
26 XAR
30 命令バッファ部
31 命令プリデコード部
32 命令デコード部
33 実行処理部
34 バッファ
34a XAR更新用バッファ
34b コミットスタックエントリ
35 命令コミット判定部

Claims (9)

  1. 命令を記憶する記憶部と、
    完了した命令を計数するプログラムカウンタと、
    命令を拡張する拡張情報を記憶する第一フィールドと第二フィールドとを有する命令拡張情報レジスタと、
    前記命令の直後の命令の拡張情報を前記第一フィールドに書き込む1命令分の拡張情報を保持する第一前置命令と、前記命令の直後の命令の拡張情報を前記第一フィールドに書き込み、前記命令の直後2命令目の命令の拡張情報を前記第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令とをデコードするデコード部と、
    前記記憶部から読み出した命令が、前記第一前置命令または前記第二前置命令である場合、前記第一前置命令または前記第二前置命令と、前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を生成するとともに、前記記憶部から読み出した複数の命令の先頭から所定命令数までに一つ以上の前記第一前置命令または前記第二前置命令が含まれている場合、前記所定命令数の次の命令まで命令実行部に出力し、前記記憶部から読み出した複数の命令の先頭から前記所定命令数の次の命令までに二つ以上の前記第一前置命令または前記第二前置命令が含まれている場合、前記所定命令数の二つ次の命令まで前記命令実行部に出力する命令結合部と、
    前記命令結合部が出力した命令を実行するとともに、前記命令結合部が生成した結合済み命令をデコードして1命令として実行し、前記命令の直後2命令目の命令は他の命令と結合せずに1命令として実行する命令実行部と、
    前記命令実行部が実行した結合済み命令を完了する場合、前記プログラムカウンタを2命令分更新するとともに、前記命令の直後2命令目の命令を完了した場合、前記プログラムカウンタを1命令分更新する更新部と、
    を有することを特徴とする演算処理装置。
  2. 前記命令結合部はさらに、
    前記命令実行部が同時に実行できる命令数が偶数の場合、前記命令数の半分の命令数を前記記憶部から読み出して格納するスロットを追加して構成し、前記命令実行部が同時に実行できる命令数が奇数の場合、前記命令数の半分に0.5を加算した命令数を前記記憶部から読み出して格納するスロットを追加して構成することを特徴とする請求項1記載の演算処理装置。
  3. 前記命令実行部は、
    複数の命令を同時にデコードして処理するパイプライン処理を行い、
    前記演算処理装置はさらに、
    前記命令結合部が生成した結合済み命令のうち、前記第一前置命令または前記第二前置命令の直後の命令を起因としてトラップ処理が発生した場合、または、前記第二前置命令の直後2命令目の命令を起因としてトラップ処理が発生した場合、前記第一前置命令または前記第二前置命令をコミットせずに前記パイプラインをフラッシュする判定部を有し、
    前記命令結合部は、
    前記判定部が前記パイプラインをフラッシュした場合、前記トラップ処理が発生した結合済み命令に含まれる前記第一前置命令または前記第二前置命令と直後の命令とを結合することなく、別々に前記命令実行部に出力し、
    前記命令実行部は、
    前記命令結合部から受け付けた前記第一前置命令または前記第二前置命令と直後の命令とを別々にそれぞれ実行し、
    前記更新部は、
    前記プログラムカウンタを、前記命令実行部が実行した命令数分更新することを特徴とする請求項1記載の演算処理装置。
  4. 前記更新部は、
    前記結合済み命令が前記命令実行部によって実行された場合、前記プログラムカウンタを2命令分更新するとともに、前記命令拡張情報レジスタの第一フィールドに記憶されている情報を初期化することを特徴とする請求項1記載の演算処理装置。
  5. 前記更新部は、
    前記第一前置命令が先に実行され、続いて、前記第一前置命令が保持する拡張情報に基づき拡張される命令が前記命令実行部により実行された場合、前記プログラムカウンタを1命令分ずつ更新するとともに、前記第一前置命令が実行された後に、前記命令拡張情報レジスタの第一フィールドに前記拡張情報を格納し、前記第一前置命令の直後の命令が前記第一フィールドの拡張情報を用いて実行された後に、前記命令拡張情報レジスタの第一フィールドに記憶されている情報を初期化することを特徴とする請求項1記載の演算処理装置。
  6. 前記更新部は、
    前記命令実行部が前記結合済み命令を実行した場合、前記プログラムカウンタを2命令分更新するとともに、前記命令拡張情報レジスタの第一フィールドに記憶された情報を初期化し、前記第二前置命令が保持する直後2命令目の命令の拡張情報を前記第二フィールドに格納することを特徴とする請求項1記載の演算処理装置。
  7. 前記更新部は、
    前記第二前置命令が先に実行され、続いて、前記第二前置命令が保持する拡張情報に基づき拡張される後続の2命令が前記命令実行部により実行された場合、前記プログラムカウンタを1命令分ずつ更新するとともに、前記第二前置命令が実行された後に、前記第二前置命令の直後の命令の拡張情報を前記命令拡張情報レジスタの第一フィールドに格納するとともに、前記第二前置命令の直後2命令目の命令の拡張情報を前記命令拡張情報レジスタの第二フィールドに格納し、前記第二前置命令の直後の命令が前記第一フィールドの拡張情報を用いて実行された後に前記第一フィールドを初期化し、前記第二前置命令の直後2命令目の命令が前記第二フィールドの拡張情報を用いて実行された後に前記第二フィールドを初期化することを特徴とする請求項1記載の演算処理装置。
  8. 前記演算処理装置はさらに、
    前記命令実行部によって命令が実行されてコミットされるまでの間、前記命令実行部によって格納された情報であって、少なくとも前記実行された命令のオペコードを含む情報を保持するコミット領域を有し、
    前記コミット領域は、
    前記第一フィールドを更新する情報を保持する第一領域と、前記第二フィールドを更新する第二領域とを有し、前記第二領域は、連続する二つの第一領域に対して一つ有することを特徴とする請求項1記載の演算処理装置。
  9. 命令を記憶する記憶部と、完了した命令を計数するプログラムカウンタと、命令を拡張する拡張情報を記憶する第一フィールドと第二フィールドとを有する命令拡張情報レジスタとを有する演算処理装置の制御方法において、
    前記命令の直後の命令の拡張情報を前記第一フィールドに書き込む1命令分の拡張情報を保持する第一前置命令と、前記命令の直後の命令の拡張情報を前記第一フィールドに書き込み、前記命令の直後2命令目の命令の拡張情報を前記第二フィールドに書き込む2命令分の拡張情報を保持する第二前置命令とを、前記演算処理装置が有するデコード部がデコードし、
    前記記憶部から読み出した命令が、前記第一前置命令または前記第二前置命令である場合、前記第一前置命令または前記第二前置命令と、前記第一前置命令または前記第二前置命令の直後にデコードされる命令とを結合した結合済み命令を、前記演算処理装置が有する命令結合部が生成するとともに、前記記憶部から読み出した複数の命令の先頭から所定命令数までに一つ以上の前記第一前置命令または前記第二前置命令が含まれている場合、前記命令結合部が、前記所定命令数の次の命令まで命令実行部に出力し、前記記憶部から読み出した複数の命令の先頭から前記所定命令数の次の命令までに二つ以上の前記第一前置命令または前記第二前置命令が含まれている場合、前記命令結合部が、前記所定命令数の二つ次の命令まで前記命令実行部に出力し、
    前記演算処理装置が有する命令実行部が、前記命令結合部が出力した命令を実行するとともに、前記命令結合部が生成した結合済み命令をデコードして1命令として実行し、前記命令の直後2命令目の命令は他の命令と結合せずに1命令として実行し、
    前記演算処理装置が有する更新部が、前記命令実行部が実行した結合済み命令を完了する場合、前記プログラムカウンタを2命令分更新するとともに、前記命令の直後2命令目の命令を完了した場合、前記プログラムカウンタを1命令分更新することを特徴とする演算処理装置の制御方法。
JP2009156374A 2009-06-30 2009-06-30 演算処理装置および演算処理装置の制御方法 Expired - Fee Related JP5471082B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009156374A JP5471082B2 (ja) 2009-06-30 2009-06-30 演算処理装置および演算処理装置の制御方法
EP10167832.4A EP2270650B1 (en) 2009-06-30 2010-06-30 Processor and control method for processor
US12/827,238 US8601239B2 (en) 2009-06-30 2010-06-30 Extended register addressing using prefix instruction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009156374A JP5471082B2 (ja) 2009-06-30 2009-06-30 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2011013865A JP2011013865A (ja) 2011-01-20
JP5471082B2 true JP5471082B2 (ja) 2014-04-16

Family

ID=42711143

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009156374A Expired - Fee Related JP5471082B2 (ja) 2009-06-30 2009-06-30 演算処理装置および演算処理装置の制御方法

Country Status (3)

Country Link
US (1) US8601239B2 (ja)
EP (1) EP2270650B1 (ja)
JP (1) JP5471082B2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120284488A1 (en) * 2011-05-03 2012-11-08 Qualcomm Incorporated Methods and Apparatus for Constant Extension in a Processor
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9690583B2 (en) 2011-10-03 2017-06-27 International Business Machines Corporation Exploiting an architected list-use operand indication in a computer system operand resource pool
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US9697002B2 (en) 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
CN103959239B (zh) * 2011-11-30 2017-12-29 英特尔公司 对使用前缀的isa指令的条件执行支持
US9268566B2 (en) 2012-03-15 2016-02-23 International Business Machines Corporation Character data match determination by loading registers at most up to memory block boundary and comparing
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9710266B2 (en) 2012-03-15 2017-07-18 International Business Machines Corporation Instruction to compute the distance to a specified memory boundary
US9715383B2 (en) 2012-03-15 2017-07-25 International Business Machines Corporation Vector find element equal instruction
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9459867B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9459864B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Vector string range compare
US9588762B2 (en) 2012-03-15 2017-03-07 International Business Machines Corporation Vector find element not equal instruction
US9454367B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Finding the length of a set of character data having a termination character
US9280347B2 (en) 2012-03-15 2016-03-08 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
GB2521019B (en) 2014-05-27 2016-05-25 Imagination Tech Ltd Decoding instructions that are modified by one or more other instructions
US9870305B2 (en) 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10877759B2 (en) * 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US20170090922A1 (en) * 2015-09-30 2017-03-30 Futurewei Technologies, Inc. Efficient Instruction Pair for Central Processing Unit (CPU) Instruction Design
US10061580B2 (en) 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US10572259B2 (en) * 2018-01-22 2020-02-25 Arm Limited Hints in a data processing apparatus
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
US11269631B2 (en) * 2020-07-29 2022-03-08 Ghost Locomotion Inc. Extending fused multiply-add instructions

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56147246A (en) * 1980-04-15 1981-11-16 Nec Corp Program control device
JPH04172533A (ja) * 1990-11-07 1992-06-19 Toshiba Corp 電子計算機
JP3711422B2 (ja) * 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
JP3570287B2 (ja) 1999-03-31 2004-09-29 セイコーエプソン株式会社 マイクロコンピュータ
JP2006313561A (ja) * 1999-04-30 2006-11-16 Renesas Technology Corp データ処理装置
JP3957948B2 (ja) 2000-04-12 2007-08-15 富士通株式会社 演算処理装置
JP3627725B2 (ja) * 2002-06-24 2005-03-09 セイコーエプソン株式会社 情報処理装置及び電子機器
JP3816845B2 (ja) * 2002-07-05 2006-08-30 富士通株式会社 プロセッサ及び命令制御方法
JP3856737B2 (ja) * 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
FR2867874A1 (fr) * 2004-03-22 2005-09-23 St Microelectronics Sa Dispositif et procede de gestion d'un jeu d'instructions d'un microprocesseur
JP2006092158A (ja) 2004-09-22 2006-04-06 Toshiba Corp デジタル信号処理回路
JP2008299790A (ja) * 2007-06-04 2008-12-11 Digital Electronics Corp マイクロプロセッサ
JP5217431B2 (ja) * 2007-12-28 2013-06-19 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
US8601239B2 (en) 2013-12-03
US20100332803A1 (en) 2010-12-30
EP2270650B1 (en) 2014-04-16
JP2011013865A (ja) 2011-01-20
EP2270650A1 (en) 2011-01-05

Similar Documents

Publication Publication Date Title
JP5471082B2 (ja) 演算処理装置および演算処理装置の制御方法
EP2104033B1 (en) Single-precision floating-point data storing method and processor
JP4856100B2 (ja) 非アラインドメモリアクセス予測
JP5853303B2 (ja) レジスタ初期化動作の最適化
JP4610593B2 (ja) デュアルスレッドプロセッサ
KR100227276B1 (ko) 단일 사이클 마이크로 명령을 이용한 명령 스케줄링 방법 및 프로세서
US8918623B2 (en) Implementing instruction set architectures with non-contiguous register file specifiers
JP5808348B2 (ja) マシン状態に基づいた命令の分割
JP4476636B2 (ja) 命令語数に実行周期回数を加重値として用いてスレッドをフェッチする同時多重スレッドプロセッサ及びその方法
US9977674B2 (en) Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US9329868B2 (en) Reducing register read ports for register pairs
KR102256188B1 (ko) 데이터 처리장치 및 벡터 오퍼랜드를 처리하는 방법
US20090282220A1 (en) Microprocessor with Compact Instruction Set Architecture
KR102161682B1 (ko) 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법
JP2009163442A (ja) 演算処理装置及び命令の拡張方法
JP2009508180A (ja) マイクロプロセッサにおける効率的なサブプログラムリターン
JP5326314B2 (ja) プロセサおよび情報処理装置
EP2461246B1 (en) Early conditional selection of an operand
JP2006517322A (ja) パイプライン化ディジタルプロセッサにおけるハザード検出および管理のための方法および装置
US7707389B2 (en) Multi-ISA instruction fetch unit for a processor, and applications thereof
US9323532B2 (en) Predicting register pairs
JP7409208B2 (ja) 演算処理装置
JP2005149297A (ja) プロセッサおよびそのアセンブラ
JP2000347858A (ja) マイクロプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130815

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130820

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131210

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140120

R150 Certificate of patent or registration of utility model

Ref document number: 5471082

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees