JP2009163442A - 演算処理装置及び命令の拡張方法 - Google Patents

演算処理装置及び命令の拡張方法 Download PDF

Info

Publication number
JP2009163442A
JP2009163442A JP2007341387A JP2007341387A JP2009163442A JP 2009163442 A JP2009163442 A JP 2009163442A JP 2007341387 A JP2007341387 A JP 2007341387A JP 2007341387 A JP2007341387 A JP 2007341387A JP 2009163442 A JP2009163442 A JP 2009163442A
Authority
JP
Japan
Prior art keywords
instruction
register
extension
xar
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2007341387A
Other languages
English (en)
Other versions
JP5217431B2 (ja
Inventor
Toshio Yoshida
利雄 吉田
Mikio Hondo
幹雄 本藤
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 JP2007341387A priority Critical patent/JP5217431B2/ja
Priority to EP08171647.4A priority patent/EP2083352B1/en
Priority to US12/338,245 priority patent/US8281112B2/en
Priority to KR1020080133532A priority patent/KR101059906B1/ko
Priority to CN2008101850417A priority patent/CN101470599B/zh
Publication of JP2009163442A publication Critical patent/JP2009163442A/ja
Application granted granted Critical
Publication of JP5217431B2 publication Critical patent/JP5217431B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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
    • 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
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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, look ahead

Landscapes

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

Abstract

【課題】本発明は、固定長のまま命令を拡張する演算処理装置を提供することを課題とする。
【解決手段】命令拡張情報を格納するXARレジスタ1を設ける。実行演算器5は、XARレジスタ1に情報を設定する命令に続く命令を、XARレジスタ1内の命令拡張情報に基づいて命令拡張する。
【選択図】図1

Description

本発明は、演算処理装置に関し、更に詳しくは演算処理装置の命令の拡張に関する。
浮動小数点演算を扱う数値計算のプログラムでは、演算処理装置のレジスタ数を増やすことで、ループアンローリングやソフトウェアパイプライニングなどのコンパイラによる最適化が可能になり、性能を向上させることが可能である。
一方従来のRISC命令セットアーキテクチャ(例えばSPARC(登録商標)アーキテクチャ)による演算処理装置では、命令長を固定(例えば32ビット)するという制限があり、且つ1命令で1つの処理を指示するので、1つの命令が持つ情報が制限される。
このような制限の元、新たな命令やレジスタ数を増やす様々な提案がなされている。
例えば特許文献1及び特許文献2では、レジスタを指定するレジスタ指定情報を、2つの部分に分割する。そしてこの2つの部分を命令コードの基本単位上の別々の基本単位に配置し、一方の命令コードを省略可能とし、省略可能な命令コードを省略すると、所定レジスタ指定情報を暗黙的に想定してレジスタ選択動作を行うようにしている。
また特許文献3及び特許文献4では、既存のCPUとの互換性を維持しつつ、メモリ上のデータに対する直接的な演算を可能とするため、メモリ・レジスタ間の転送命令やレジスタ・レジスタ間の演算命令に対して、複数の命令コードを組合せて、命令の拡張を行っている。
更に特許文献5及び特許文献6では、プロセッサを容易に再設計できるようにして、ユーザがコマンドを加えられるようにしている。
特開2001−202243号公報 特開2006−313561号公報 特開2005−353105号公報 特開2006−284962号公報 特表2003−518280号公報 特開2007−250010号公報
オペコード長32ビットの命令であることを前提として、例えば処理を行う命令の論理アドレスを示すPC(Program Counter)とその次に実行される命令の論理アドレスNPC(Next Program Counter)は、PCの示す命令が分岐命令やトラップ命令でない限り、NPC=PC+4となるなどの論理仕様が規定されている。そのため、1つの命令長を64ビットに拡張するようなことをすると、既存のソフトウエアの動作ができなくなる。
このような制限の元では、例えば3ソースレジスタ、1ディスティネーションレジスタの合計4レジスタを指定する必要がある浮動小数点積和演算においては、8ビットのレジスタアドレスを指示すると8ビット×4=32ビット必要となってしまう。これでは32ビット命令中32ビットをレジスタ指定に費やすこととなるので、積和演算であるという命令種を示すオペコードの情報を一切持つことができない。したがって32ビット長の命令では、8ビットのレジスタアドレスとなる命令は実質定義不可能となってしまう。
32ビット長の制限の中で、レジスタを多数取り扱う従来の手段として、レジスタウィンドウ方式をとる命令セットアーキテクチャがある。
SPARCアーキテクチャを例にとると、CWP(Current Window Pointer)というポインタを別命令で設定し、その後の命令はそのCWPの指すウィンドウ内のレジスタ(例えば1つのウィンドウ内は1つのオペコードで指示できる5ビット32本)を参照する。
そして複数の命令を含む1つのサブルーチンに1つのレジスタウィンドウを割り当てる。他のウィンドウを参照、更新するときには、CWPを変更してから命令を実行する。
この方式だと、1つの命令では32本のレジスタ内の演算処理しか行えない。これでは同時に32本以上のレジスタを用いて演算処理が行えないので、コンパイラによるソフトウェアパイプライニングやループアンローリングなどの最適化ができず、性能向上が狙えない。
コンパイラの最適化による性能向上には、同時に例えば100本や200本のレジスタの任意のレジスタデータを入力として、1つの演算処理を行うことが可能になることが有効なのである。つまり従来のRISC命令セットアーキテクチャでは、オペコード長の制限により1つの演算処理で扱うレジスタ数を一定数以上増やすことができず、浮動小数点系のプログラムの性能向上ができないことが大きな課題となっている。
また、浮動小数点系の命令には、1つの命令で複数の処理を行うSIMD(Single Instruction Multiple Data)命令という種類の命令が有効である。
しかし、演算処理装置に加算、積算、積和演算、除算、平方根演算などのSIMD命令を新規に追加すると、命令オペコードを追加命令数分割り当てる必要がある。そのためには、既存の加算、積算、積和演算などで使用されていない空きオペコードを見つけて割り当てる。したがって、もともとSIMD命令などを前提にしていないオペコードの割り当てが行われている命令セットでは、空きフィールドがない場合があり、また空いている場合でも、たまたま空いているオペコードにSIMD命令を割り当てることになるので、SIMD命令のオペコードを論理的に整ったように割り当てることは難しい。
また、近年の高性能プロセサにおいては、プロセサチップ内、もしくはプロセサに近いところにキャッシュメモリを搭載する。これは、メモリとプロセサの処理速度の差が大きくなっているため、メモリ内のデータを高速アクセスが可能なキャッシュメモリに登録しておき、読み出し、書き込みをキャッシュメモリ上で行う制御を行う。
このキャッシュメモリは、セットアソシアティブ構造で、一般的にキャッシュ登録、吐き出しをLRU(Least−Recently−USED:最も使われていないWayのデータを吐き出す)で制御するため、登録されたデータをハードウェアが勝手にキャッシュから吐き出してしまうケースがある。この際、場合によっては再利用性が全くないデータがあるにも関わらず、再利用性のあるデータが再利用性のないデータの登録時にはきだされてしまい、性能劣化を起こすケースがある。
また上で述べた、1つの命令で複数のデータを扱うSIMD命令による演算処理に関して、例えば2つの倍精度浮動小数点データを扱うSIMD命令による演算処理は、一般的には一つのレジスタのデータ幅(ビット数)を2倍の128ビット長に拡張することで実現している。しかしすべてのプログラムでSIMD命令を実行できるわけではないので、その場合は拡張したデータ幅の資源はムダになってしまう。また128ビット中の前半、
後半のデータを別々に扱うこともできず、このことはソフトウエアのプログラミングの際に制約となってしまう。
上記問題を鑑み、本発明は、新規に拡張専用命令を定義することで、一定のオペコード長(例えば32ビット)でありながら、命令の拡張を可能とした演算処理装置及び命令の拡張方法を提供することを課題とする。
また、既存の命令に1つの拡張命令を組み合わせることで、拡張されたレジスタから1つの演算のための入力データを選択し、演算処理を行うことを可能にする演算処理装置及び命令の拡張方法を提供することを課題とする。
更に、新規に追加定義した1つの拡張専用命令を定義し、これと従来のすでに命令セットで定義されている加算、積算、積和演算などを組み合わせることで加算、積算、積和演算などのSIMD命令処理の命令の定義を可能とした演算処理装置及び命令の拡張方法を提供することを課題とする。
また、ロード命令、ストア命令、プリフェッチ命令などによりデータがキャッシュに登録される場合に、登録するキャッシュウェイの属性、例えばウェイ番号などをソフトウエアから命令ごとに指示することを可能とした演算処理装置を提供することを課題とする。
また、SIMD命令を用いないプログラムではすべてのレジスタを異なるアドレスとして有効に使用することが出来、またSIMD命令を用いるプログラムでも、レジスタ内の前半と後半のデータを独立に操作できるとすることが出来、プログラミングの可用性を向上させることが可能な演算処理装置及び命令の拡張方法を提供することを課題とする。
上記課題を解決するため本発明による演算処理装置は、拡張レジスタ及び演算部を備える。
拡張レジスタは、命令の拡張を示す命令拡張情報が設定可能なレジスタである。
演算部は、前記拡張レジスタに命令拡張情報が設定されているときに、前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する実行する。
これにより拡張レジスタに命令拡張情報を格納する命令を実行すると、その命令の後続の命令は、拡張レジスタ内の命令拡張情報によって拡張される。
また前記拡張レジスタには、設定された命令拡張情報が有効であるか否かを示す情報が設定され、前記演算部は、命令拡張情報が有効であることを示す情報が設定されているとき、前記後続の命令を前記拡張レジスタに設定された命令拡張情報により拡張する構成としても良い。
これにより、拡張レジスタ内の命令拡張情報の有効、無効を判別することが出来る。
更に拡張された前記後続の命令がコミットされたとき、前記拡張レジスタに設定された命令拡張情報を無効にすることを特徴とする。
これにより、拡張したい命令と拡張したくない命令が混在している場合でも、コード効率がよいコードによって、プログラミングを行なうことができる。
また前記拡張レジスタには、複数命令分の前記命令拡張情報が設定される構成とすることも出来る。
この構成により、一度拡張レジスタを書き換えると後続する複数の命令を拡張することが出来る。
更に前記拡張レジスタに前記命令拡張情報を書き込む命令の実行と、前記拡張命令によって拡張される命令の実行との間にトラップが生じるとき、前記拡張レジスタに設定された命令拡張情報を退避するトラップ用レジスタを備える構成としても良い。
この構成により、トラップが生じても正常に処理を行なうことができる。
また前記命令拡張情報は、レジスタアドレスを含み、前記命令拡張情報によって拡張される命令は、レジスタの拡張がなされる構成とすることが出来る。
この構成により、レジスタ数を拡張することが出来る。
更に前記命令拡張情報は、SIMD命令であるかどうかを示す情報を含み、命令拡張情報によって拡張される命令はSIMD処理を行なう構成とすることも出来る。
この構成により拡張された命令としてSIMD処理を行なうことができる。
また前記拡張レジスタに書き込む情報をオペコードの即値として持つ、前記拡張レジスタに書き込む命令が登録されている構成とすることが出来る。
この構成により、拡張レジスタに書き込む命令の解読時に、拡張する情報を得ることが出来る。
更に固定小数点レジスタを用いて前記拡張レジスタに書き込む情報を生成する、前記拡張レジスタに書き込む命令が登録されている構成とすることが出来る。
この構成により、拡張レジスタ内に自由に情報を書き込むことが出来る。
また本発明は演算処理装置のみだけでなく演算処理装置における命令の拡張方法もその範囲に含む。
本発明によれば、拡張レジスタに設定した命令拡張情報により、オペコード長の制限で不可能だったレジスタアドレス拡張が可能となる。
また新たなSIMD命令や、キャッシュ属性の番号指定などの定義に要するオペコードが、1つのオペコード追加だけで済ますことができる。
以下に図面を参照しながら本発明の一実施形態について説明する。
以下に説明する本実施形態の演算処理装置は、RISCアーキテクチャのSPARCアーキテクチャを元にした論理仕様 JPS1(SPARC Joint Programming Specification)をベースとするものを例として説明する。JPS1のレジスタ数は倍精度64ビットの浮動小数点レジスタが32本ある。また固定小数点レジスタは、レジスタウィンドウ方式であり、CWPによって切り替わるin、out、local レジスタそれぞれ8本ずつ、CWPによらないglobalレジスタ8本の合計32本となる。
なお本実施形態の演算処理装置は、SPARCアーキテクチャに限定されるものではなく、命令長が固定のRISCアーキテクチャのものであれば、本実施形態は全て適用可能である。
図1は、本実施形態の演算処理装置を示す図である。

本実施形態の演算処理装置100は、命令拡張を行うための専用のレジスタとして数値
演算拡張レジスタ(eXtended Arithmetic Register:以下XARレジスタという)1を設けてある。
XARレジスタ1には命令拡張情報が格納される。
本実施形態による演算処理装置100は、XARレジスタ1の内容で、XARレジスタ1にデータを格納する命令に続いて実行される既存命令の拡張を行う。既存命令の拡張では、上述したJPS1のレジスタ以外の拡張されたレジスタを用いることが出来たり、SIMD命令を実行することが出来る。
本実施形態の方法によれば、命令長は固定長(JSP1では32bit)のままなので、既存のソフトウエアやOSをそのまま用いることが出来る。
またXARレジスタ1に情報を書き込む命令と既存の命令を組み合わせるだけで、既存の命令を拡張することが出来るので、命令オペコードの制約がほとんど無い。
D_XARレジスタ2は、後述するXARレジスタ1の内容を書き換えるSXAR命令(SXAR;Set XAR)が実行されたとき、XARレジスタ1に書き込む値を一時的に保存する一時レジスタである。SXAR命令に続く命令が命令デコード4でデコードされる際、命令デコード4は、XARレジスタの内容として、このD_XARレジスタ2を参照する。これにより、SXAR命令と、SXAR命令に次に続く既存命令をほぼ同時にデコードすることが出来る。また登記実行失敗のときやWrite−XAR命令でXARレジスタ1が更新されたときは、XARレジスタ1内のデータがD_XARレジスタ2に書き込まれる。なおSXAR命令やWrite−XAR命令についての詳細は後述する。
XAR更新用バッファ3は、XARレジスタ1に書き込むデータを一時的に格納するバッファである。命令デコード4は、命令キャッシュ7から命令コードを読み出してデコードを行うものである。実行演算部5は、命令デコード4によるデコードの結果に基づいて命令を実行するものである。レジスタは、実行演算部がデータを読み書きするレジスタ群である。このレジスタ6については、後述する。命令キャッシュ7は、2次キャッシュから命令コードをキャッシュする1次キャッシュメモリである。データキャッシュ8は、2次キャッシュからデータコードをキャッシュする1次キャッシュメモリである。2次キャッシュ9は、メモリからデータをキャッシュする2次キャッシュメモリである。
次にレジスタ6の構成について説明する。
図2に、本実施形態の演算処理装置100の浮動小数点レジスタの構成を示す。
本実施形態の演算処理装置100のでは、64ビット長のデータの浮動小数点レジスタは、JPS1では%f0から%f62までの32本だったのが、%f0から%f510までの256本に拡張されており、図2では斜線部が拡張部分である。この図2のレジスタは、SIMD命令でない場合には256本のレジスタすべての間で演算が可能である。
なおJPS1では、倍精度浮動小数点レジスタのアドレスは、偶数番だけで指定する規則があるので、本実施形態においても拡張をしたレジスタもこれに従い、レジスタアドレスは0番から510番までの偶数番だけ使用して指定する。また偶数番だけを倍精度浮動小数点レジスタのレジスタアドレスに用いるので、レジスタアドレスの最下位bitは常に‘0’となる。従って8bitの拡張アドレスで0〜510までを指定することが出来る。なおこの図2に斜線で示された拡張レジスタは、XAR_VAL=1のときのみアクセス可能である。
また図3に、本実施形態の演算処理装置100の固定小数点レジスタの構成を示す。
本実施形態の演算処理装置100では、64ビット長のデータの固定小数点レジスタは
、従来のJPS1のレジスタは、globalレジスタ8本、CWPによるレジスタ24本の計32本である。またこのレジスタは、ウインドウの切り替えによってCWPからCWP+1若しくはCWP−1に切り替わる。こららに加えて、本実施形態の演算処理装置100の固定小数点レジスタは新たに、CWPによらないレジスタXG(eXtended Global)を32本追加し、合計64本に拡張されており、図3では斜線部が拡張部分である。この追加されたレジスタはウィンドウ形式ではない。
なお図2、図3の拡張部分のレジスタを用いるのには、XARレジスタのF_VALビット=1若しくはS_VAL=1とした状態で、JPS1で定義されている既存の命令、例えば倍精度浮動小数点積和演算FMADD、固定小数点加算ADD、倍精度浮動小数点ロードLDDFなどを実行することで行われる。このF_VALビット=1及びS_VAL=1についての詳細は後述する。
次にXARレジスタの構成について説明する。
図4は、XARレジスタの構成を示す図である。
同図においてXARレジスタは、大きく分けて従属命令F(First)部と従属命令S(Second)部に分かれる。そしてF部は、F_VAL、F_SIMD、F_RD、F_RS1、F_RS2及びF_RS3領域を持つ。またS部も同様にS_VAL、S_SIMD、S_RD、S_RS1、S_RS2及びS_RS3領域を持つ。F_VAL、S_VALは、1ビットの領域で、続く情報が有効かどうかを示す情報(バリッド)である。
F_VAL=1のときは、F部の命令拡張情報(F_SIMD、F_RD、F_RS1、F_RS2、F_RS3)で直後の1命令を拡張し、F_VAL=0、S_VAL=1のときは、S部の命令拡張情報(S_SIMD、S_RD、S_RS1、S_RS2及びS_RS3)で直後の1命令を拡張する。また、F_VAL=1かつS_VAL=1のときは、直後の連続する2命令を拡張し、Fの命令拡張情報で直後の1命令目を、Sの命令拡張情報でさらに2命令目を拡張する。そして拡張される命令がレジスタへの書き込み等を完了(コミット)すると、拡張される命令に対応する命令拡張情報とそのバリッドはリセットされる。なおF_VALは、F部の命令拡張情報が書き込まれると‘1’がセットされ、F部の命令拡張情報を用いて命令拡張が行われると‘0’にリセットされる。同様に、S_VALは、S部の命令拡張情報が書き込まれると‘1’がセットされ、S部の命令拡張情報を用いて命令拡張が行われると‘0’にリセットされる。
なお以下の説明では、F部の命令拡張情報(F_SIMD、F_RD、F_RS1、F_RS2、F_RS3)が格納されるXARレジスタの領域をF領域、S部の命令拡張情報(S_SIMD、S_RD、S_RS1、S_RS2、S_RS3)が格納されるXARレジスタの領域をS領域という。
またF_SIMDとS_SIMDは、拡張した命令がSIMD命令であるか否かを示す1ビットの領域で、1がセットされているとF部の命令拡張情報またはS部の命令拡張情報で拡張される命令はSIMD命令となる。本実施形態の演算処理装置によるSIMD命令については、後述する。
F_RD及びS_RDは、拡張される命令のディスティネーションレジスタを指定するアドレスの拡張分の3ビットを格納する領域である。またF_RS1〜F_RS3及びS_RS1〜S_RS3は、それぞれソースレジスタを指定するアドレスの拡張分の3ビットを格納するアドレス拡張領域である。
この3ビットは、浮動小数点レジスタを256本に拡張するために既存の命令で不足す
る上位3ビットとなるものである。なお固定小数点レジスタを指定する場合は、3ビットのうちの最下位1ビットのみを用いる。そして固定少数レジスタを指定してなお上位2ビットが‘1’になると、拡張される命令の実行時にXARによる拡張違反であることを示す新規例外illegal_actionトラップを起こす。この新規例外illegal_actionトラップは、加算命令や乗算命令等において第3のソースレジスタを指定した場合などにも発生する。
図5にXARレジスタによる命令拡張の例を示す。同図は浮動小数点演算の拡張の例である。
図5ではSXAR命令等で、XARレジスタにデータをセットした次の命令で、JPS1で定義されている倍精度浮動小数点積和演算命令(FMADD)を実行した場合を例としている。
FMADD命令は、図5にあるように3つのソースレジスタと1つのディスティネーションレジスタを指定しなければならない。この指定においてFMADD命令内のレジスタ指定アドレスは[4:0]の5ビットである。この5ビットにXARレジスタ内のアドレス拡張領域の[7:5]の3ビットを加え、計8ビットでレジスタを指定する。XARレジスタによって拡張されたFMADD命令は、ソースレジスタとディスティネーションレジスタとしてそれぞれ256本のレジスタを指定することが出来る。
なおFMADD命令では、3つのソースレジスタと1つのディスティネーションレジスタを指定する必要があったが、命令の種類によってはこのような数のレジスタを指定する必要が無い場合がある。例えばロード命令、ストア命令、プリフェッチ命令などのメモリアクセス(例えば倍精度浮動小数点ロード命令)では、ソースレジスタを3つ指定する必要は無く、このときのこのフィールドは、キャッシュにデータを登録するときにそのキャッシュウェイの属性を示すセクタ番号になる。
図6にXARレジスタにデータをセットした次の命令で倍精度浮動小数点ロード命令を実行した場合を例として示す。
図6は、XARレジスタにデータをセットした次の命令でJPS1で定義されている倍精度浮動小数点ロード(LDDF)命令を実行した場合を例として示している。
LDDF命令は、図6に示すように2つのソースレジスタと1つのディスティネーションレジスタを指定する必要があるのみなので、3つ目のソースレジスタを指定するF_RS3の領域11が空いている。
本実施形態では、このXARレジスタの空き領域11を用いて、キャッシュにデータを登録するときにそのキャッシュウェイの属性を示すセクタ番号としてキャッシュセクタ=1を指示している。
次にXARレジスタの値を書き換えるSXAR命令について、説明する。
本実施形態の演算処理装置では、SXAR命令は、XARレジスタの更新を行う命令の一つで、更新するデータを命令オペコード内に即値形式で有する命令として定義されている。これにより、ハードウェアは命令デコードの際にXARに書き込む内容が投機的に判断できるので、次にデコードされる命令の拡張を容易に可能にする。
SXAR命令では、図1においてXARレジスタ1に書き込む情報は、D_XARレジスタ2及びXAR更新用バッファ3を介してXARレジスタ1に書き込まれる。SXARに続く命令は、XARレジスタ1の内容をD_XARレジスタ2を参照することによって知ることが出来るので、SXAR命令とSXAR命令の次の命令は命令デコード4でほぼ
同時にデコードされる。
なおXARレジスタを書き換える命令としては、SXAR命令の他に、D_XARレジスタ2やXAR更新用バッファ3を介さずに直接XARレジスタ1に情報を書き込むWrite−XAR命令がある。Write−XAR命令の場合、XARレジスタ1に直接データを書き込むまで、拡張される次の命令は、Write−XAR命令が完了するまでデコードが完了しない。このWrite−XAR命令については、後に詳細に説明する。
またSXAR命令として、SXAR1命令とSXAR2命令の2つの命令が定義されている。
図7にSXAR1命令のフィールドを示す。
SXAR1命令は、SXAR1命令に続く1命令を拡張する命令である。
図7においてSXAR1命令は、命令の種類を示すOPCODE[4:0]領域にはSXAR命令であることを示す「OP[1:0]=0」「OP2[3:0]=7」が設定されており、またSXAR1命令かSXAR2命令かを示すCOMB領域にはSXAR1命令であることを示す‘0’が設定されており、それに続くoperand領域には、XARレジスタのF部の命令拡張情報に書き込まれる情報が設定されている。なおSXAR1命令では、operand領域に続く領域の値は不定となっている。また第3のソースレジスタを指定するF_RS3[7:5]の領域は、拡張される命令がメモリアクセスの命令であるとき、キャッシュメモリアクセス用の付加情報(セクタ番号等)を指定する領域となる。
図7のSXAR1命令を実行するとXARレジスタのF領域に、SXAR1命令のoperandの値が設定されると共に、F_VALに‘1’がセットされる。そして、SXAR1命令の直後に実行される命令は、XARレジスタのF領域の値に基づいて拡張される。なおSXAR1命令の次に実行される命令が完了すると、XARレジスタのF領域はクリアされ、F_VALは‘0’にリセットされる。
次にSXAR2命令について説明する。
SXAR2命令は、SXAR2命令に続く2命令をXARレジスタの設定値で拡張するものである。
図8に、SXAR2命令のフィールドを示す。
図8においてSXAR2命令は、命令の種類を示すOPCODE[4:0]領域には図7のSXAR1命令と同様、SXAR命令であることを示す「OP[1:0]=0」「OP2[3:0]=7」が設定されている。またSXAR1命令かSXAR2命令かを示すCOMB領域にはSXAR2命令であることを示す‘1’が設定されている。COMB領域に続くoperand領域には、従属命令F部と従属命令S部があり、従属命令F部内にはXARレジスタのF領域に、また従属命令S部内の情報はXARレジスタのS領域に書き込まれる情報が設定されている。なお第3のソースレジスタを指定するF_RS3[7:5]及びS_RS3[7:5]の領域は、拡張される命令がメモリアクセスの命令であるとき、キャッシュメモリアクセス用の付加情報(セクタ番号等)を指定する領域となる。
図8のSXAR2命令を実行すると、XARレジスタのF領域とS領域に値が設定されると共にF_VALとS_VALに‘1’がセットされる。そして、SXAR1命令と同様、SXAR2命令に続いて1番目に実行される命令は、XARレジスタのF領域の値に基づいて拡張される。そして1番目に実行される命令が完了すると、XARレジスタのF領域はクリアされ、F_VALは‘0’にリセットされる。そして1番目に実行される命
令の次に実行される、2番目に実行される命令は、XARレジスタのS領域の値に基づいて拡張される。そしてこの2番目に実行される命令が完了すると、XARレジスタのS領域はクリアされ、またS_VALは‘0’にリセットされる。
このようにSXAR2命令を用いることにより、SXAR2命令の直後に続く2命令を拡張することが出来る。したがって、SXAR2命令は、拡張命令が続くときは、SXAR1命令よりコード効率の良いプログラミングを実現できる。
図9にSXAR2命令を用いた推奨される命令生成の例を示す。
図9において、プログラム21はSXAR2命令を用いずにプログラムがコード生成したものである。それに対してプログラム22は、プログラム21とソフトウエア的には等価なプログラムを、SXAR2命令を用いてコード生成したものである。
両者を比較すると、SXAR2命令を用いたプログラムの方が命令数が少なくコード効率が良い。したがって命令数を減らすことが出来るプログラム22のコード生成の仕方がコンパイラには推奨される。
このように本実施形態の演算処理装置では、XARレジスタを備え、XARレジスタに命令拡張用の情報を格納することにより、命令拡張を行うことが出来る。
このような命令拡張を行うものとして従来から行われている方法に、モード切り替えを行う方法がある。
モード切り替えを行う方法では、拡張命令実行用のモードを切替えるレジスタを定義しておき、拡張命令を実行する場合には、モード切り替えレジスタを書き換えて拡張命令実行用のモードに切替える。
このような、モード切り替えを行う方法は、モードによる拡張命令が定常的に用いられる場合は良いが、拡張命令と拡張を受けない命令が混在しているときには、拡張命令実行用のモードに入ったり、拡張命令実行用のモードから通常モードに戻ったりを繰り返さなければならず、その度毎にモード切り替えレジスタを書き換える命令を実行しなければならない。
例えばアドレス空間を64ビットではなく特別に32ビットに制限する状態に切り替える際に、Processor State Registerなどのモードビットの方式で指定する論理仕様は存在した。このモードビットはセットする命令を実行した後、リセットする命令を実行する間ずっとその状態を保持する。
32ビットモードなどの場合は、プログラム全体が32ビットモードで記述されており、例えば1命令ごとに細かく64ビットへ切り替わる必要がないので、このようなモード指示でよかった。
しかし、本実施形態の演算処理装置のように、拡張レジスタアドレスの使用やSIMD命令などは、拡張したい命令と拡張したくない命令の混在が多く、命令ごとに細かく切り替わるプログラムを実行した場合、モード設定のようにセットする命令を実行に加えて、リセットする命令を実行する必要があると命令数をさらに増大させてしまう。そこで本実施形態の演算処理装置では、拡張情報をXARレジスタにセットした後、拡張される命令が実行されると同時に、その拡張情報をリセットするように定義する。これにより命令拡張をリセットする命令の挿入を必要としなくなる。
図10は、拡張命令を用いるのにモード切り替えを行う例を示す図である。
図10では、FMADD命令を被拡張命令として実行し、その後にLDDF命令を拡張を受けない命令として実行する処理の場合を示している。
図10では、FMADD命令を実行する前にモード切り替えレジスタ書き込み命令を実行し、LDDF命令を実行する前にモード切り替えレジスタリセット命令を実行して通常モードに戻っている。
したがって、拡張するFMADD命令と拡張しないLDDF命令を実行するのに計4命令必要となる。
それに対して、本実施形態の演算処理装置で行なわれている命令の拡張方法では、拡張命令が実行されると、XARレジスタ内の対応する情報が自動的にリセットされる。これにより、拡張する命令と拡張しない命令が混在した場合であってもXARレジスタをリセットする必要が無く、その分コード効率が良くなる。
図11は、図10と同じ処理を本実施形態の演算処理装置が実行した場合を示す図である。
図11では、被拡張命令であるFMADD命令の前に、SXAR1命令を実行してXARレジスタに命令拡張のための情報を書き込む。そしてFMADD命令を拡張命令として実行すると、XARレジスタ内の命令拡張のための情報はリセットされる。したがって次に実行されるLDDF命令は、XARレジスタ内に命令拡張のための情報が無いので命令を拡張しないで実行される。
このように、本実施形態の演算処理装置で拡張するFMADD命令と拡張しないLDDF命令を実行するのと3命令ですむ。したがって、このような場合、モード切り替えを行う演算処理装置より、コード効率の良いプログラムで同じ処理を実現することが出来る。
次にSXAR2命令時の動作の詳細について例を挙げて説明する。
図12はSXAR2命令時の動作例を示す図である。
図12においては、FMADD命令と、それに続くLDDF命令を拡張して実行する場合を示している。
この場合、プログラムは、SXAR2命令、FMADD命令、及びLDFF命令の3命令となる。
SXAR2命令が実行されると、XARレジスタのF領域とS領域に命令拡張に用いる拡張情報が書き込まれる。またF_VAL及びS_VALに1がセットされる。
次に1命令目の被拡張命令であるFMADD命令では、XARレジスタのF領域を参照して、拡張されたFMADD命令として実行される。そしてこのFMADD命令実行後、XARレジスタのF_VAL及びF領域はリセットされる。
次に2命令目の被拡張命令であるLDFF命令では、XARレジスタのF領域を参照して、拡張されたLDFF命令として実行される。そしてこのLDFF命令実行後、XARレジスタのS_VAL及びS領域はリセットされる。
このようにSXAR2命令においては、最初の被拡張命令を実行後、F領域及びF_VALがリセットされ、その後に2番目の被拡張命令が実行され、そしてS領域及びS_VALがリセットされる、2つの被拡張命令のうちの1つが実行されるごとにXARレジスタの対応領域がリセットされる。
このように各命令が終了される毎に、XARレジスタの対応領域がリセットされるので
、SXAR2命令で後続の2命令を拡張することが出来、また拡張したい命令と拡張したくない命令が混在してもコード効率は下がらない。
また各命令が終了される毎に、XARレジスタの対応領域がリセットされるので、後述する割り込みが一番目の命令と2番目の命令の実行の間に生じたとしても、問題が生じない。
次にSIMD命令について説明する。
本実施形態の演算処理装置では、1つの命令で複数の処理を行うSIMD命令が拡張命令として定義されている。
図4に示したXARレジスタの構成において、F_SIMDビットは、第1の命令をSIMD命令として拡張するか否かを指定するビットで、F_SIMD=1がセットされると第1の命令をSIMD命令として拡張する。また同様にS_SIMDビットは、第2の命令をSIMD命令として拡張するか否かを指定するビットで、S_SIMD=1がセットされると第2の命令をSIMD命令として拡張する。
このSIMD命令では、F領域若しくはS領域でソースレジスタ若しくはディスティネーションレジスタとして1つの浮動小数点レジスタを指定すると、2つの浮動小数点レジスタが指定される。
図2に示すように拡張されたSIMD命令では、レジスタアドレスが256離れたレジスタをペアとして扱う。SIMD処理を行うSIMD命令では、拡張レジスタアドレスの最上位ビットは‘0’で指定すると規定して、最上位ビットが‘0’である浮動小数点レジスタと、最上位ビットが‘1’である浮動小数点レジスタを一つの組として、2つのデータを並列に処理する。
例えばSIMD命令として、faddd %f0、%f100、%f200を実行すると、%f0+%f100=%f200の演算と同時に、%f256+%f356=%f456の演算も行う。
これにより、本実施形態の演算処理装置では、SIMD命令でない拡張命令では、全ての浮動小数点レジスタを異なるアドレスとして指定することができ、またSIMD処理が可能な場合はSIMD命令として拡張することにより、1命令で2倍のデータ処理が可能になる。
またXARレジスタ内にSIMD命令か否かの拡張ビットであるF_SIMDビットとS_SIMDビットを持つことにより、SIMD命令の拡張を行っているので、XARレジスタに書き込む命令と既存の命令を組み合わせるだけで、SIMD命令を拡張でき、命令オペコードの制限を非常に少なくすることが出来る。
図13に非SIMD命令とSIMD命令を実行する演算器のブロック図を示す。
図13(a)は非SIMD命令の場合、図13(b)はSIMD命令の場合の構成を示している。
図13(a)の非SIMD命令で%f200+%f300を実行した場合、1つの加算器を用いて、%f200レジスタ内のデータと%f300レジスタの加算処理のみが実行される。
それに対して図13(b)のSIMD命令で%f100+%f200を実行した場合、
2つの加算器を用いて、%f100レジスタ内のデータと%f200レジスタの加算処理に加え、f100と%f200に256を加えたアドレス(すなわち最上位ビットを0から1にしたアドレス)の、%f356レジスタ内のデータと%f456レジスタの加算処理が同時に行われる。
なおSIMD命令では、レジスタアドレス%f0〜%f254の128本のレジスタしか指定することが出来ないが、非SIMD命令ではソースレジスタ若しくはディスティネーションレジスタとしてレジスタアドレス%f0〜%f510のいずれのレジスタも指定できる。またSIMD命令実行後でも、各レジスタ内を独立に操作できるとすることが出来る。
次に本実施形態の演算処理装置における割り込み処理について説明する。
本実施形態では、XARレジスタに書き込む命令(SXAR1命令、SXAR2命令、Write−XAR命令)と、被拡張命令の2つに分けて実行することにより命令の拡張を行っている。
XARレジスタに拡張情報を書き込む命令(SXAR1命令、SXAR2命令、Write−XAR命令)と、これらの命令の直後の被拡張命令は別の命令なので、XARに拡張情報がセットされてから拡張される命令が実行されるまでの間に、例えば外部の割り込みによるトラップが発生する場合がある。その場合、トラップから復帰するととき、トラップに入る前の状態に戻してから処理を再開する必要がある。
そこで、本実施形態の演算処理装置では、トラップに入ったときにXARレジスタ内の情報を一時退避する専用のスタックTXARを設ける。このスタックTXARは高速にアクセスでき、トラップに入るときや復帰するときにXARレジスタの内容が高速に読み書きされる。
図14は、このスタックTXARの構成を示す図である。
スタックTXARは、SPARCアーキテクチャに定義されている他のトラップスタックと同様、各トラップレベル毎に用意される。
このスタックTXARの情報は、あくまでトラップに入るときのXARレジスタの値を保持するためのものであり、XARレジスタのように従来命令を拡張するという影響は与えない。
JPS1では、トラップは5段階までレベルがあるので、図14に示すように各トラップレベルに対してTXARを用意する。図14では、トラップレベル=0の状態からトラップが発生してXARレジスタの内容を退避するTXARをTXAR1、トラップレベル=1の状態からXARレジスタの内容を退避するTXARをTXAR2、・・・、トラップレベル=4の状態からXARレジスタの内容を退避するTXARをTXAR5と構成されている。
トラップが発生すると演算処理装置では、トラップ発生前のトラップレベルに対応するスタックTXARにXARレジスタの内容を退避する。またそれと同時に、トラップに入る前のXARレジスタ内の拡張情報が、トラップルーチンの命令を拡張してしまわないように、XARレジスタ内のデータをクリアする。またトラップルーチンが終了し、トラップから元の処理に復帰する(JPS1では、done命令、retry命令でトラップレベルを1つ下げる)ときには、そのトラップレベルに対応するスタックTXARからXARレジスタへ値をコピーする。
図15にトラップ時のスタックTXARとXARレジスタの関係を示す。
図15(a)は、trap命令でトラップが発生したときのスタックTXARとXARレジスタの動きを示している。トラップ発生前XARレジスタの内容が‘X’であったとき、トラップが発生してトラップレベルがnからn+1に上がるとスタックTXARn+1 にXARレジスタの内容‘X’が書き込まれ、またXARレジスタは‘0’にクリアされる。
また図15(b)は、done命令若しくはretry命令でトラップから復帰したときのTXARとXARレジスタの動きを示している。トラップから復帰する前、XARレジスタの内容が‘Y’、スタックTXARn+1 の内容が‘Z’であったとき、トラップから復帰してトラップレベルがn+1からnに下がると、XARレジスタにスタックTXARn+1 の内容‘Z’がコピーされ、またスタックTXARn+1 の内容は変化しない。
この構成により、トラップが発生したときも、トラップから復帰したときも本実施形態の演算処理装置では、正確な処理を行なうことができることを保障する。
現在のトラップレベルのスタックTXARに関しては、スタックTXAR内のデータを固定小数点レジスタに読み出すRD−TXAR命令や、ソースレジスタ1、ソースレジスタ2を固定小数点レジスタから読み出し、ソースレジスタ1とソースレジスタ2の排他的論理和(xor: exclusive or)を算出して、その結果をTXARに書き込むWr−TXAR命令を定義し、これらの命令を用いる。
図16は、SXAR2命令によって拡張された命令が実行されているときにトラップが発生したときのXARレジスタ及びスタックTXARの動きの例を示す図である。
図16の例では、トラップレベルTL=nで、SXAR2命令により続く命令Aと命令Bを拡張したプログラムにおいて、拡張命令Bを実行中にトラップが発生した場合のXARレジスタとスタックTXARの動きを示している。
まずSXAR2(A,B)が実行されるとXARレジスタのF領域には命令拡張情報Aが、またS領域には命令拡張情報Bが書き込まれる。
次に被拡張命令Aが実行されるとXARレジスタのF_VALとF領域は‘0’にクリアされ、S領域はそのまま命令拡張情報Bが格納されている。
この間スタックTXAR内には、初期状態または以前にトラップが発生したときに書き込まれたデータが格納されている。
次に被拡張命令Bが実行中にトラップが発生すると、XARレジスタ内の値はスタックTXARn に退避されると共に、XARレジスタはクリアされる。したがってスタックTXARn には、XARレジスタ内に格納されていた0,Bが書き込まれており、またXARレジスタの値は全て‘0’となる。
この状態でトラップルーチンの処理が行われる。このトラップルーチンの処理では、トラップ前の命令拡張情報の影響を受けない。またXARレジスタへは書き込み、スタックTXARに対しては読み書き可能である。
トラップルーチン処理が終わって、トラップから復帰すると、XARレジスタには、スタックTXARn に退避していたデータが書き込まれ、被拡張命令Bが再実行される。そしてこのXARレジスタのF領域には‘0’が、またS領域には命令拡張情報Bが書き込まれるので、再実行では被拡張命令Bはトラップに影響されずに拡張される。
以上により、本実施形態の演算処理装置では、トラップ中の処理でも、トラップから復帰したときの処理でも正確に処理を実行できることを保証する。
また本実施形態の演算処理装置におけるトラップには、誤った定義できない命令がデコードされたときに生じるトラップがある。
XARレジスタ内に格納されている拡張情報、例えばレジスタ拡張アドレスやSIMDビットなどは、直後の被拡張命令との組み合わせではじめて定義できない処理かどうかの判断が行われる。
例えば本実施例では、XARレジスタ内のレジスタ拡張アドレスフィールドはそれぞれ3ビット設けてあるが、固定小数点系レジスタが浮動小数点系レジスタに比べて少ないため、拡張される命令が固定小数点加算命令ADD等固定小数点レジスタを指定する命令のときに、拡張アドレスフィールドで256番目のレジスタを指定してしまうと拡張違反の命令を指定していることになる。
本実施形態の演算処理装置では、そのようなときは拡張例外(illegal_action)トラップを起こすように定義しておく。なおこのトラップの優先度(trap−priority)は、組み合わせずに1命令で誤った定義できない命令であることが分かる定義外命令(illegal_instruction)に対するトラップに比べて低い優先度として定義する。
図17は、拡張例外トラップ処理の概念を示す図である。
命令デコード4による命令デコードの結果から、拡張例外検出部31が誤った定義できない命令を検出すると、拡張例外検出部31がトラップ遷移制御部32に拡張例外トラップが発生したことを通知する。この通知を受けて、トラップ遷移制御部32は、XAR更新用バッファ3の内容でXARレジスタ1が書き換えられるのを止め、また実行演算部5がXARレジスタ1やレジスタ6にアクセスするのを止め、拡張例外トラップ処理ルーチンにプログラム処理を移す。
これにより誤った定義できない命令が実行されるのを防ぐことが出来る。
次に、XASRレジスタについて説明する。
OSのスケジューラの機能で、コンテキストスイッチで処理を行うプログラムを切り替える場合がある。
コンテキストスイッチでは、処理を行うプログラムが変わるので、切り替わる前のプロセサの状態、つまりレジスタの状態をメモリに退避する必要がある。数多くのレジスタを用意したプロセサでは、それだけ退避及び復帰処理を行なうレジスタの数も多くなり、コンテキストスイッチのペナルティが大きくなる。
本実施形態の演算処理装置では、少しでもこの処理を減らすために、256本の浮動小数点レジスタを32本ずつ、8つのグループに分ける。そして、グループ内のレジスタの更新が行われたか否かを示すビット(以下これをダーティビットという)をグループ毎に持ち、このグループ数分の8ビットを用意する。
この8つのダーティビットをXFD(Extended Fpr Dirty)[7:0]と呼ぶ。さらに固定小数点側で追加されたXGが更新された場合にこれを示すダーティビットxg dirtyを用意する。これら計9ビットは、新規レジスタXASR(eXtended Arithmetic Register Status Register)に保持する。
図18にこのXASRレジスタの構成を示す。
図18において、ビット0〜7がXFDとなっており、ビット0が%f0〜%f62の
ブロックに、ビット1が%f64〜%f126のブロックに、・・・、ビット7が%f448〜%f510のブロックに該当する。XFDの各ビットはデフォルトでは、‘0’が設定されており、各ブロックのレジスタの内容に変更があるとそのレジスタが所属しているブロックに対応するビットに‘1’が設定される。
またXASRレジスタのビット8には、固定小数点レジスタに対するダーティビットであるXGDとなっている。なおビット9〜31には‘0’が設定されている。
本実施形態の演算処理装置では、レジスタの復帰処理において、このXASRレジスタを参照し、ダーディビットに‘1’が設定されているブロックのレジスタのみに対して復旧処理を行なう。
これにより、全てのレジスタに対して復旧処理を行なった場合に対して、復旧処理の負荷が軽減される。
なおXASRレジスタ内のデータは、RD−XASR命令によって固定小数点レジスタへ読み出したり、またWR−XAR命令によって固定小数点レジスタのデータを書き込むことを可能とする。
XASRレジスタのダーティビットを見ることで、コンテキストスイッチの際のメモリへの退避が必要なレジスタを確認することが可能になる。
次に、Write−XAR命令について説明する。
本実施形態の演算処理装置では、XARレジスタに情報を書き込む命令として、上述したSXAR1命令及びSXAR2命令の外に、Write−XAR命令が定義されている。
SXAR1命令及びSXAR2命令は、命令オペコードに拡張情報を即値として持つものであったが、Write−XAR命令は、固定小数点レジスタのデータをXARレジスタに書き込む。
Write−XAR命令は、即値としてソースレジスタ1及びソースレジスタ2のアドレスを持ち、2つの固定小数点レジスタを指定する。そしてこの2つの固定小数点レジスタからデータを読み出して、これらの排他的論理和(XOR:eXclusive OR)を算出して、その結果をXARレジスタに書き込むものである。そしてWrite−XAR命令に続く1命令若しくは2命令は、Write−XAR命令によって書き込まれたXARレジスタ内の命令拡張情報に基づいて、SXAR命令のときと同様に命令拡張が成される。
このWrite−XAR命令は、固定小数点レジスタのデータから求めた値をXARレジスタに書き込むので、このWrite−XAR命令を用いることにより、例えば後述するTXAR(Trap XAR)レジスタの内容を読み出して、それに基づいた値をXARレジスタに書き込むなどの処理を可能にする。
また固定小数点演算器で加工したデータをXARレジスタに書き込むことができる。
次にSXAR命令やこのWrite−XAR命令による命令の拡張のタイミングについて説明する。
図19は、SXAR命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。同図では、命令実行のための概略ステージとその時行われる処理が横方向に時間軸を取って示してある。
SXAR命令(SXAR1命令、SXAR2命令)は、命令拡張情報を命令の即値として持っている。そのためSXAR命令は、命令オペコードをデコードする命令デコードステージで、命令拡張情報が分かる。したがってSXAR命令の次の命令は、SXAR命令のデコード直後に拡張することが可能となる。従ってSXAR命令と続く1番目の拡張命令はほぼ同時にデコードされる。
図19の例では、SXAR1命令と続く上述したようにFMADDがほぼ同時にデコードされ、2つの命令はほぼ同時に完了している。
図20は、Write−XAR命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。同図では、図19と同様、命令実行のための概略ステージとその時行われる処理が横方向に時間軸を取って示してある。
Write−XAR命令は、固定小数点レジスタを用いてXOR演算を行い、演算結果をXARレジスタに書き込む命令である。したがってWrite−XAR命令によるXOR演算が実行ステージで完了するまでは、命令拡張情報の値は定まらない。
よってWrite−XAR命令を用いて命令拡張を行う場合には、Write−XAR命令の実行ステージが完了してから命令拡張情報が定まるので、実行ステージが完了した直後に第1の拡張命令のデコードが開始される。
図20では、Write−XAR命令の実行ステージが完了するまで、次に続くFMADD命令の命令デコードがストールされ、Write−XAR命令の実行ステージが完了すると、FMADD命令は命令デコードステージに入っている。
次にWrite−XAR命令を用いる例として、本実施形態の演算処理装置をソフトウエアでエミュレーションした場合を例として示す。
図21は、このソフトウエアエミュレーションの定義外命令例外ルーチンの動作を示すフローチャートである。
図21の処理が開始されると、ステップS1として、エミュレーションソフトウエアは、定義外命令例外(illegal_instruction)を検出すると、定義外命令例外のトラップルーチンに入る。
このときプログラムカウンタPCの値はTPCに、XARレジスタの値はスタックTXARに退避する。
次にエミュレーションソフトウエアは、ステップS2としてTPC内のプログラムカウンタ値を読み出し、定義外命令(Illegal_instruction)例外となった命令をメモリからフェッチする。
そして次にエミュレーションソフトウエアは、ステップS3としてスタックTXARからXARレジスタから退避した値を読み出す。そして読み出した情報に、有効な拡張情報があった場合には(ステップS3、Y)、ステップS4としてスタックTXARの値をレジスタに読み込み、必要に応じてWrite−XAR命令でXARレジスタに書き戻す。
そしてこの状態で、ステップS5として、XARレジスタ内の拡張命令情報と他の命令を組み合わせて、エミュレーションを行う。このとき組み合わされる命令は拡張命令情報によって拡張される。
そして次に、ステップS6として、エミュレーションソフトウエアは、スタックTXARに格納されているエミュレーションした1命令分の拡張命令をクリアして、ステップS
8に処理を移す。
一方ステップS3において読み出した情報に有効な拡張情報が無かった場合には(ステップS3、N)、ステップS7としてXARレジスタ内の拡張命令情報と他の命令を組み合わせてエミュレーションを行い、ステップS8に処理を移す。このとき組み合わされる命令は、XARレジスタには有効な拡張命令情報が無いので拡張されない。
ステップS8においては、TNPCの指す命令に復帰する命令であるDone命令によって、トラップルーチンを終えて、TNPCの指すメインルーチンの次の命令を行う。このときTNPCの値はPCに、またスタックTXARの値はXARレジスタに復帰する。
このように、Write−XAR命令は、XARレジスタに好きな値を設定できるので、トラップルーチンやデバッグ時に用いることが出来る。
次に本実施形態の演算処理装置で実行されるデバッガについて説明する。
デバッガは、演算処理装置で実行されるソフトウエア開発時に用いられるプログラムで、デバッグするプログラムの任意の場所の命令をソフトウェアトラップ命令(JPS1ではTA:Trap Always)に置き換えて、トラップルーチン上で置き換えた命令をエミュレーションしながら、置き換わった命令を実行するときのレジスタ値などを確認することが出来る。
図22に一般的なデバッガによる処理を示す。
図22においてfaddd命令41の時点でデバッグトラップを行いたいとした場合、42のようにfaddd命令41をソフトウェアトラップ命令TAに置き換える。
これにより、TA命令が実行されるとデバッガが指示するトラップアドレスのデバッグルーチンに飛び、デバッグルーチンでは、デバッガの必要とするデータ、例えばレジスタの値等を採取する。そしてデバッグルーチンではfaddd命令をエミュレートした後TA命令を元のfaddd命令に置き換える。
このようにして、デバッグ処理は行われる。
ところで本実施形態の演算処理装置のXARレジスタによる命令拡張は、通常XARレジスタが有効な命令拡張情報を持っている場合は、直後の命令が常に拡張されてしまう仕様のため、XARレジスタの命令拡張情報で拡張されるはずだった命令をデバッガ機能でTA命令に置き換えてしまうと、TA命令がXARレジスタの命令拡張情報で拡張されようとしてしまう。またソフトウェアトラップ命令は、固定小数点レジスタをソースレジスタに用いるので、レジスタ拡張アドレスフィールドが、256番目を指している場合には、illegal_actionトラップを発生させてしまう場合もある。
つまり、TA命令が拡張されてしまうと、トラップアドレスの値が変わったり、あるいはillegal_actionを起こすなど、本来のデバッガ機能を果たせない場合が発生する。
よって、実施形態の演算処理装置では、ソフトウェアトラップ命令TAに関してだけは特別に、XARレジスタに有効な拡張情報があった場合にも、これにより拡張されない、つまりXAR拡張情報を無視して実行する命令として扱うように定義する。
また本実施形態の演算処理装置では、ソフトウェアトラップ命令でトラップしない場合は、無条件にXARレジスタをリセットする仕様とするが、デバッガではソフトウェアトラップ命令により必ずトラップに入るので、XARはTXARに格納され、ソフトウェア
トラップを起こしたあとに、TXARからRD−TXAR命令によってトラップに入るときのXARの値を読み出すことが可能である。
図23に本実施形態の演算処理装置で命令拡張が行われた命令に対するデバッガ処理を示す。
図23においては、SXAR1命令の直後のfaddd命令51が実行される時点でデバッグを行いたいものとする。この場合も同様に、デバッガは52のようにfaddd命令をTA命令に置き換える。
仮にTA命令のオペランドレジスタのアドレスがSXAR1命令によって拡張されると、TA命令実行時にデバッガの意図しないトラップアドレスに処理が飛んでしまう。よって、本実施形態ではTA命令はXARレジスタ内の命令拡張情報を無視して、実行するよう定義する。これによりTA命令実行時には、正しいトラップアドレスに処理が移る。
以上のように本実施形態の演算処理装置は、固定長命令のまま命令を拡張することが出来る。
なお上記例では、命令拡張はSXAR2命令による2命令が最大であったが、本実施形態の演算処理装置はこれに限定されるものではなく、例えば拡張するレジスタ数を減らしたり、SIMD命令の拡張をしないことにより3命令以上の命令を拡張するようにしても良い。
また上記例では、拡張された命令が実行されるとXARレジスタ内の対応する拡張命令情報がクリアされるが、このクリアは全ての情報をクリアするのではなく、F_VAL若しくはS_VALのみをクリアして対応する拡張命令情報を無効にする構成としても良い。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
命令の拡張を示す命令拡張情報が設定可能な拡張レジスタと、
前記拡張レジスタに命令拡張情報が設定されているときに、前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する演算部と、
を有する演算処理装置。
(付記2)
前記拡張レジスタには、設定された命令拡張情報が有効であるか否かを示す情報が設定され、前記演算部は、命令拡張情報が有効であることを示す情報が設定されているとき、前記後続の命令を前記拡張レジスタに設定された命令拡張情報により拡張することを特徴とする付記1に記載の演算処理装置。
(付記3)
拡張された前記後続の命令がコミットされたとき、前記拡張レジスタに設定された命令拡張情報を無効にすることを特徴とする付記1に記載の演算処理装置。
(付記4)
前記拡張レジスタには、複数命令分の前記命令拡張情報が設定されることを特徴とする付記1に記載の演算処理装置。
(付記5)
前記後続の命令が拡張されて実行がコミットされる毎に、複数命令分の前記命令拡張情
報のうち対応するものを無効とすることを特徴とする付記4に記載の演算処理装置。
(付記6)
前記拡張レジスタに前記命令拡張情報を書き込む命令の実行と、前記命令拡張情報によって拡張される命令の実行との間にトラップが生じるとき、前記拡張レジスタに設定された命令拡張情報を退避するトラップ用レジスタを更に備えることを特徴とする付記1に記載の演算処理装置。
(付記7)
前記トラップが生じて、トラップ処理に入ったとき、前記拡張レジスタ内の前記命令拡張情報を無効にすることを特徴とする付記6に記載の演算処理装置。
(付記8)
前記トラップ処理から戻ったとき、前記トラップ用レジスタ内の情報を前記拡張レジスタに書き戻すことを特徴とする付記6に記載の演算処理装置。
(付記9)
前記トラップ用レジスタに格納された情報の読み出し、書き込みを行う命令が定義されていることを特徴とする付記6に記載の演算処理装置。
(付記10)
前記命令拡張情報は、レジスタアドレスを含み、前記命令拡張情報によって拡張される命令は、レジスタの拡張がなされることを特徴とする付記1に記載の演算処理装置。)
(付記11)
拡張されたレジスタをいくつかのグループに分け、グループ内のレジスタの更新が行われた場合にこれを示すビットをグループごとに持ち、前記グループ数分のビットを保持するレジスタを備えることを特徴とする付記10に記載の演算処理装置。
(付記12)
前記命令拡張情報は、SIMD命令であるかどうかを示す情報を含み、命令拡張情報によって拡張される命令はSIMD処理を行なうことを特徴とする付記1に記載の演算処理装置。
(付記13)
前記SIMD処理は、レジスタアドレスの最上位ビットを‘0’にして指定されたレジスタを用いた演算と、最上位ビットを‘1’にして指定されたレジスタを用いた演算とを行うことを特徴とする付記12の演算処理装置。
(付記14)
前記後続の命令が、2つ以下のソースレジスタしか指定しない命令であるとき、前記命令拡張情報は、キャッシュメモリにデータを登録するときに当該データを登録するキャッシュウェイの属性を指定することを特徴とする付記1に記載の演算処理装置。
(付記15)
前記拡張レジスタに書き込む情報をオペコードの即値として持つ、前記拡張レジスタに書き込む命令が登録されていることを特徴とする付記1に記載の演算処理装置。
(付記16)
固定小数点レジスタを用いて前記拡張レジスタに書き込む情報を生成する、前記拡張レジスタに書き込む命令が登録されていることを特徴とする付記1に記載の演算処理装置。
(付記17)
前記命令拡張情報によって、前記後続の命令が命令の種類によって拡張できないときに、拡張できなかった命令の処理時に拡張違反例外トラップを起こすトラップ遷移制御部を更に備えることを特徴とする請求項1に記載の演算処理装置。
(付記18)
前記拡張違反例外トラップが、定義外命令実行時に生じるによるトラップよりもトラップの優先度が低いことを特徴とする付記17に記載の演算処理装置。
(付記19)
前記拡張レジスタに有効な前記命令拡張情報が格納されているときに、当該命令拡張情報によって拡張されない命令が定義されていることを特徴とする付記1に記載の演算処理装置(図23)
(付記20)
命令が固定長の演算処理装置における命令の拡張方法において
命令の拡張を示す命令拡張情報が設定可能な拡張レジスタに命令拡張情報が設定し、
前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する
ことを特徴とする命令の拡張方法。
本実施形態の演算処理装置を示す図である。 本実施形態の演算処理装置の浮動小数点レジスタの構成を示す図である。 本実施形態の演算処理装置の固定小数点レジスタの構成を示す図である。 XARレジスタの構成を示す図である。 XARレジスタによる命令拡張の例を示す図である。 XARレジスタにデータをセットした次の命令で倍精度浮動小数点ロード命令を実行した場合を例として示す図である。 SXAR1命令のフィールドを示す図である。 SXAR2命令のフィールドを示す図である。 SXAR2命令を用いた推奨される命令生成の例を示す図である。 拡張命令を用いるのにモード切り替えを行う例を示す図である。 図10と同じ処理を本実施形態の演算処理装置が実行した場合を示す図である。 SXAR2命令時の動作例を示す図である。 非SIMD命令とSIMD命令を実行する演算器のブロック図である。 TXARの構成を示す図である。 トラップ時のスタックTXARとXARレジスタの関係を示す。 SXAR2命令によって拡張された命令が実行されているときにトラップが発生したときのXARレジスタ及びスタックTXARの動きの例を示す図である。 拡張例外トラップ処理の概念を示す図である。 XASRレジスタの構成を示す図である。 SXAR命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。 Write−XAR命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。 ソフトウエアエミュレーションの定義外命令例外ルーチンの動作を示すフローチャートである。 一般的なデバッガによる処理を示す図である。 本実施形態の演算処理装置で命令拡張が行われた命令に対するデバッガ処理を示す図である。
符号の説明
1 XARレジスタ
2 D_XARレジスタ
3 XAR更新用バッファ
4 命令デコード
5 実行演算部
6 レジスタ
7 命令キャッシュ
8 データキャッシュ
9 2次キャッシュ
31 拡張例外検出部
32 トラップ遷移制御部
100 演算処理装置

Claims (10)

  1. 命令の拡張を示す命令拡張情報が設定可能な拡張レジスタと、
    前記拡張レジスタに命令拡張情報が設定されているときに、前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する実行する演算部と、
    を有する演算処理装置。
  2. 前記拡張レジスタには、設定された命令拡張情報が有効であるか否かを示す情報が設定され、前記演算部は、命令拡張情報が有効であることを示す情報が設定されているとき、前記後続の命令を前記拡張レジスタに設定された命令拡張情報により拡張することを特徴とする請求項1に記載の演算処理装置。
  3. 拡張された前記後続の命令がコミットされたとき、前記拡張レジスタに設定された命令拡張情報を無効にすることを特徴とする請求項1に記載の演算処理装置。
  4. 前記拡張レジスタには、複数命令分の前記命令拡張情報が設定されることを特徴とする請求項1に記載の演算処理装置。
  5. 前記拡張レジスタに前記命令拡張情報を書き込む命令の実行と、前記拡張命令によって拡張される命令の実行との間にトラップが生じるとき、前記拡張レジスタに設定された命令拡張情報を退避するトラップ用レジスタを更に備えることを特徴とする請求項1に記載の演算処理装置。
  6. 前記命令拡張情報は、レジスタアドレスを含み、前記命令拡張情報によって拡張される命令は、レジスタの拡張がなされることを特徴とする請求項1に記載の演算処理装置。
  7. 前記命令拡張情報は、SIMD命令であるかどうかを示す情報を含み、命令拡張情報によって拡張される命令はSIMD処理を行なうことを特徴とする請求項1に記載の演算処理装置
  8. 前記拡張レジスタに書き込む情報をオペコードの即値として持つ、前記拡張レジスタに書き込む命令が登録されていることを特徴とする請求項1に記載の演算処理装置。
  9. 固定小数点レジスタを用いて前記拡張レジスタに書き込む情報を生成する、前記拡張レジスタに書き込む命令が登録されていることを特徴とする請求項1に記載の演算処理装置。
  10. 命令が固定長の演算処理装置における命令の拡張方法において
    命令の拡張を示す命令拡張情報が設定可能な拡張レジスタに命令拡張情報が設定し、
    前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する
    ことを特徴とする命令の拡張方法。
JP2007341387A 2007-12-28 2007-12-28 演算処理装置及び演算処理装置の制御方法 Active JP5217431B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2007341387A JP5217431B2 (ja) 2007-12-28 2007-12-28 演算処理装置及び演算処理装置の制御方法
EP08171647.4A EP2083352B1 (en) 2007-12-28 2008-12-15 Processing unit
US12/338,245 US8281112B2 (en) 2007-12-28 2008-12-18 Processor decoding extension instruction to store plural address extension information in extension register for plural subsequent instructions
KR1020080133532A KR101059906B1 (ko) 2007-12-28 2008-12-24 연산 처리 장치 및 명령의 확장 방법
CN2008101850417A CN101470599B (zh) 2007-12-28 2008-12-26 处理单元

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007341387A JP5217431B2 (ja) 2007-12-28 2007-12-28 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2009163442A true JP2009163442A (ja) 2009-07-23
JP5217431B2 JP5217431B2 (ja) 2013-06-19

Family

ID=40750878

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007341387A Active JP5217431B2 (ja) 2007-12-28 2007-12-28 演算処理装置及び演算処理装置の制御方法

Country Status (5)

Country Link
US (1) US8281112B2 (ja)
EP (1) EP2083352B1 (ja)
JP (1) JP5217431B2 (ja)
KR (1) KR101059906B1 (ja)
CN (1) CN101470599B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011013865A (ja) * 2009-06-30 2011-01-20 Fujitsu Ltd 演算処理装置および制御方法
JP2013008243A (ja) * 2011-06-24 2013-01-10 Sony Computer Entertainment Inc 情報処理装置、情報処理方法、プログラム及び情報記憶媒体

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
US9632786B2 (en) * 2011-12-20 2017-04-25 International Business Machines Corporation Instruction set architecture with extended register addressing using one or more primary opcode bits
US9507599B2 (en) * 2013-07-22 2016-11-29 Globalfoundries Inc. Instruction set architecture with extensible register addressing
US9875107B2 (en) 2015-01-19 2018-01-23 International Business Machines Corporation Accelerated execution of execute instruction target
US10761849B2 (en) 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10877548B2 (en) * 2018-03-09 2020-12-29 Hewlett Packard Enterprise Development Lp Context switches with processor performance states

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04172533A (ja) * 1990-11-07 1992-06-19 Toshiba Corp 電子計算機
JP2000122864A (ja) * 1998-10-13 2000-04-28 Motorola Inc デ―タ処理システムおよび集合化を用いた命令システム
JP2004030015A (ja) * 2002-06-24 2004-01-29 Seiko Epson Corp 情報処理装置及び電子機器
JP2004038521A (ja) * 2002-07-03 2004-02-05 Renesas Technology Corp マイクロコンピュータ
JP2006313561A (ja) * 1999-04-30 2006-11-16 Renesas Technology Corp データ処理装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2555963C2 (de) * 1975-12-12 1982-10-28 Ibm Deutschland Gmbh, 7000 Stuttgart Einrichtung zur Funktionsmodifizierung
US4293907A (en) * 1978-12-29 1981-10-06 Bell Telephone Laboratories, Incorporated Data processing apparatus having op-code extension register
JP3711422B2 (ja) * 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
US6014739A (en) * 1997-10-27 2000-01-11 Advanced Micro Devices, Inc. Increasing general registers in X86 processors
KR100322277B1 (ko) * 1998-11-20 2002-03-08 권 기 홍 확장 명령어를 가진 중앙처리장치
WO2000046704A2 (en) 1999-02-05 2000-08-10 Tensilica, Inc. Automated processor generation system and method for designing a configurable processor
US6477683B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
JP4172533B2 (ja) 1999-02-18 2008-10-29 株式会社リコー 光走査装置及び画像出力装置
JP2001202243A (ja) * 1999-04-30 2001-07-27 Hitachi Ltd データ処理装置
JP3839835B2 (ja) 1999-04-30 2006-11-01 株式会社ルネサステクノロジ データ処理装置及びマイクロコンピュータ
US6651160B1 (en) * 2000-09-01 2003-11-18 Mips Technologies, Inc. Register set extension for compressed instruction set
US7373483B2 (en) * 2002-04-02 2008-05-13 Ip-First, Llc Mechanism for extending the number of registers in a microprocessor
FR2867874A1 (fr) * 2004-03-22 2005-09-23 St Microelectronics Sa Dispositif et procede de gestion d'un jeu d'instructions d'un microprocesseur
US7231509B2 (en) * 2005-01-13 2007-06-12 International Business Machines Corporation Extended register bank allocation based on status mask bits set by allocation instruction for respective code block
JP2006284962A (ja) 2005-03-31 2006-10-19 Sumitomo Osaka Cement Co Ltd 光学素子

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04172533A (ja) * 1990-11-07 1992-06-19 Toshiba Corp 電子計算機
JP2000122864A (ja) * 1998-10-13 2000-04-28 Motorola Inc デ―タ処理システムおよび集合化を用いた命令システム
JP2006313561A (ja) * 1999-04-30 2006-11-16 Renesas Technology Corp データ処理装置
JP2004030015A (ja) * 2002-06-24 2004-01-29 Seiko Epson Corp 情報処理装置及び電子機器
JP2004038521A (ja) * 2002-07-03 2004-02-05 Renesas Technology Corp マイクロコンピュータ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011013865A (ja) * 2009-06-30 2011-01-20 Fujitsu Ltd 演算処理装置および制御方法
JP2013008243A (ja) * 2011-06-24 2013-01-10 Sony Computer Entertainment Inc 情報処理装置、情報処理方法、プログラム及び情報記憶媒体

Also Published As

Publication number Publication date
JP5217431B2 (ja) 2013-06-19
EP2083352A2 (en) 2009-07-29
US20090172367A1 (en) 2009-07-02
EP2083352B1 (en) 2017-08-09
KR101059906B1 (ko) 2011-08-29
KR20090073008A (ko) 2009-07-02
CN101470599A (zh) 2009-07-01
US8281112B2 (en) 2012-10-02
CN101470599B (zh) 2013-01-02
EP2083352A3 (en) 2009-08-12

Similar Documents

Publication Publication Date Title
JP5217431B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP3675466B2 (ja) スーパースケーラマイクロプロセサ
JP5853303B2 (ja) レジスタ初期化動作の最適化
KR102629722B1 (ko) 이동 프리픽스 명령어
JP5808348B2 (ja) マシン状態に基づいた命令の分割
JP6942298B2 (ja) ベクトル演算命令の例外条件処理
US9081564B2 (en) Converting scalar operation to specific type of vector operation using modifier instruction
US20170277537A1 (en) Processing mixed-scalar-vector instructions
JPH11316680A (ja) デ―タ処理システムにおいてレジスタを保存し且つ回復するシステム及び方法
US20180300148A1 (en) Apparatus and method for determining a recovery point from which to resume instruction execution following handling of an unexpected change in instruction flow
JP3274103B2 (ja) 特殊ミリコード命令によって条件の設定およびテストを行う方法
JP2000137611A (ja) 特殊ミリコ―ド命令によって条件の設定およびテストを行う方法
JP2000137612A (ja) 特殊ミリコ―ド命令によって条件の設定およびテストを行う方法
US20190056933A1 (en) Processing vector instructions
WO2021087103A1 (en) Shadow latches in a shadow-latch configured register file for thread storage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100820

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120806

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130218

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160315

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5217431

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150