(57)【特許請求の範囲】
【請求項１】
拡張情報レジスタと、
第１の拡張情報と第２の拡張情報を前記拡張情報レジスタに設定する拡張情報設定命令を実行した場合、前記拡張情報設定命令に後続する第１の被拡張命令を前記第１の拡張情報により拡張して実行するとともに、前記第１の被拡張命令に後続する第２の被拡張命令を前記第２の拡張情報により拡張して実行する演算部を有することを特徴とする演算処理装置。
【請求項２】
前記拡張情報レジスタはさらに、
前記拡張情報設定命令を実行した場合、前記拡張情報レジスタに保持した前記第１の拡張情報が有効であるかを示す有効情報が設定され、
前記演算部はさらに、
前記第１の被拡張命令を、前記有効情報と前記第１の拡張情報に基づいて実行することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記演算処理装置において、
前記演算部が、前記第１の拡張情報により拡張された前記第１の被拡張命令の実行を完了した場合、前記拡張情報レジスタに保持された第１の拡張情報を初期化することを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記演算処理装置はさらに、
前記演算部による前記拡張情報設定命令の実行と、前記演算部による前記第１の被拡張命令の実行の間に例外が発生した場合、前記拡張情報レジスタが保持した第１の拡張情報を退避する退避レジスタを有することを特徴とする請求項１記載の演算処理装置。
【請求項５】
前記第１の拡張情報は、
レジスタの指定を拡張するレジスタ指定拡張情報を含み、
前記第１の被拡張命令は、
前記レジスタ指定拡張情報によりレジスタを指定できる範囲が拡張されることを特徴とする請求項１記載の演算処理装置。
【請求項６】
前記第１の拡張情報は、
前記第１の被拡張命令が、複数の被演算数を用いて演算を行う複数被演算数命令であるかを示す被演算数拡張情報を含み、
前記演算部はさらに、
前記第１の被拡張命令を、前記被演算数拡張情報に基づいて、前記第１の被拡張命令に含まれるレジスタを指定するレジスタ指定アドレスにより指定される第１のレジスタに保持された第１の被演算数と、前記レジスタ指定アドレスから所定アドレス離れた第２のレジスタに保持された第２の被演算数に保持された第２の被演算数を用いて実行することを特徴とする請求項１記載の演算処理装置。
【請求項７】
前記演算部は、
前記拡張情報設定命令を実行した場合、実行した前記拡張情報設定命令に埋め込まれた第１の拡張情報を、前記拡張情報レジスタに設定することを特徴とする請求項１記載の演算処理装置。
【請求項８】
前記演算処理装置はさらに、
固定小数点レジスタを有し、
前記演算部は、
前記拡張情報設定命令を実行した場合、前記固定小数点レジスタに保持された第１の拡張情報を、前記拡張情報レジスタに設定することを特徴とする請求項１記載の演算処理装置。
【請求項９】
拡張情報レジスタを有する演算処理装置の制御方法において、
前記演算処理装置が有する演算部が、拡張情報設定命令を実行して、第１の拡張情報と第２の拡張情報を前記拡張情報レジスタに設定し、
前記演算部が、前記拡張情報設定命令に後続する第１の被拡張命令を前記第１の拡張情報により拡張して実行し、
前記演算部が、前記第１の被拡張命令に後続する第２の被拡張命令を前記第２の拡張情報により拡張して実行することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関し、更に詳しくは演算処理装置の命令の拡張に関する。
【背景技術】
【０００２】
浮動小数点演算を扱う数値計算のプログラムでは、演算処理装置のレジスタ数を増やすことで、ループアンローリングやソフトウェアパイプライニングなどのコンパイラによる最適化が可能になり、性能を向上させることが可能である。
【０００３】
一方従来のＲＩＳＣ命令セットアーキテクチャ（例えばＳＰＡＲＣ（登録商標）アーキテクチャ）による演算処理装置では、命令長を固定（例えば３２ビット）するという制限があり、且つ１命令で１つの処理を指示するので、１つの命令が持つ情報が制限される。
【０００４】
このような制限の元、新たな命令やレジスタ数を増やす様々な提案がなされている。
例えば特許文献１及び特許文献２では、レジスタを指定するレジスタ指定情報を、２つの部分に分割する。そしてこの２つの部分を命令コードの基本単位上の別々の基本単位に配置し、一方の命令コードを省略可能とし、省略可能な命令コードを省略すると、所定レジスタ指定情報を暗黙的に想定してレジスタ選択動作を行うようにしている。
【０００５】
また特許文献３及び特許文献４では、既存のＣＰＵとの互換性を維持しつつ、メモリ上のデータに対する直接的な演算を可能とするため、メモリ・レジスタ間の転送命令やレジスタ・レジスタ間の演算命令に対して、複数の命令コードを組合せて、命令の拡張を行っている。
【０００６】
更に特許文献５及び特許文献６では、プロセッサを容易に再設計できるようにして、ユーザがコマンドを加えられるようにしている。
【特許文献１】特開２００１−２０２２４３号公報
【特許文献２】特開２００６−３１３５６１号公報
【特許文献３】特開２００５−３５３１０５号公報
【特許文献４】特開２００６−２８４９６２号公報
【特許文献５】特表２００３−５１８２８０号公報
【特許文献６】特開２００７−２５００１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
オペコード長３２ビットの命令であることを前提として、例えば処理を行う命令の論理アドレスを示すＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）とその次に実行される命令の論理アドレスＮＰＣ（Ｎｅｘｔ  Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）は、ＰＣの示す命令が分岐命令やトラップ命令でない限り、ＮＰＣ＝ＰＣ＋４となるなどの論理仕様が規定されている。そのため、１つの命令長を６４ビットに拡張するようなことをすると、既存のソフトウエアの動作ができなくなる。
【０００８】
このような制限の元では、例えば３ソースレジスタ、１ディスティネーションレジスタの合計４レジスタを指定する必要がある浮動小数点積和演算においては、８ビットのレジスタアドレスを指示すると８ビット×４＝３２ビット必要となってしまう。これでは３２ビット命令中３２ビットをレジスタ指定に費やすこととなるので、積和演算であるという命令種を示すオペコードの情報を一切持つことができない。したがって３２ビット長の命令では、８ビットのレジスタアドレスとなる命令は実質定義不可能となってしまう。
【０００９】
３２ビット長の制限の中で、レジスタを多数取り扱う従来の手段として、レジスタウィンドウ方式をとる命令セットアーキテクチャがある。
ＳＰＡＲＣアーキテクチャを例にとると、ＣＷＰ（Ｃｕｒｒｅｎｔ  Ｗｉｎｄｏｗ  Ｐｏｉｎｔｅｒ）というポインタを別命令で設定し、その後の命令はそのＣＷＰの指すウィンドウ内のレジスタ（例えば１つのウィンドウ内は１つのオペコードで指示できる５ビット３２本）を参照する。
【００１０】
そして複数の命令を含む１つのサブルーチンに１つのレジスタウィンドウを割り当てる。他のウィンドウを参照、更新するときには、ＣＷＰを変更してから命令を実行する。
この方式だと、１つの命令では３２本のレジスタ内の演算処理しか行えない。これでは同時に３２本以上のレジスタを用いて演算処理が行えないので、コンパイラによるソフトウェアパイプライニングやループアンローリングなどの最適化ができず、性能向上が狙えない。
【００１１】
コンパイラの最適化による性能向上には、同時に例えば１００本や２００本のレジスタの任意のレジスタデータを入力として、１つの演算処理を行うことが可能になることが有効なのである。つまり従来のＲＩＳＣ命令セットアーキテクチャでは、オペコード長の制限により１つの演算処理で扱うレジスタ数を一定数以上増やすことができず、浮動小数点系のプログラムの性能向上ができないことが大きな課題となっている。
【００１２】
また、浮動小数点系の命令には、１つの命令で複数の処理を行うＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）命令という種類の命令が有効である。
【００１３】
しかし、演算処理装置に加算、積算、積和演算、除算、平方根演算などのＳＩＭＤ命令を新規に追加すると、命令オペコードを追加命令数分割り当てる必要がある。そのためには、既存の加算、積算、積和演算などで使用されていない空きオペコードを見つけて割り当てる。したがって、もともとＳＩＭＤ命令などを前提にしていないオペコードの割り当てが行われている命令セットでは、空きフィールドがない場合があり、また空いている場合でも、たまたま空いているオペコードにＳＩＭＤ命令を割り当てることになるので、ＳＩＭＤ命令のオペコードを論理的に整ったように割り当てることは難しい。
【００１４】
また、近年の高性能プロセサにおいては、プロセサチップ内、もしくはプロセサに近いところにキャッシュメモリを搭載する。これは、メモリとプロセサの処理速度の差が大きくなっているため、メモリ内のデータを高速アクセスが可能なキャッシュメモリに登録しておき、読み出し、書き込みをキャッシュメモリ上で行う制御を行う。
【００１５】
このキャッシュメモリは、セットアソシアティブ構造で、一般的にキャッシュ登録、吐き出しをＬＲＵ（Ｌｅａｓｔ−Ｒｅｃｅｎｔｌｙ−ＵＳＥＤ：最も使われていないＷａｙのデータを吐き出す）で制御するため、登録されたデータをハードウェアが勝手にキャッシュから吐き出してしまうケースがある。この際、場合によっては再利用性が全くないデータがあるにも関わらず、再利用性のあるデータが再利用性のないデータの登録時にはきだされてしまい、性能劣化を起こすケースがある。
【００１６】
また上で述べた、１つの命令で複数のデータを扱うＳＩＭＤ命令による演算処理に関して、例えば２つの倍精度浮動小数点データを扱うＳＩＭＤ命令による演算処理は、一般的には一つのレジスタのデータ幅（ビット数）を２倍の１２８ビット長に拡張することで実現している。しかしすべてのプログラムでＳＩＭＤ命令を実行できるわけではないので、その場合は拡張したデータ幅の資源はムダになってしまう。また１２８ビット中の前半、
後半のデータを別々に扱うこともできず、このことはソフトウエアのプログラミングの際に制約となってしまう。
【００１７】
上記問題を鑑み、本発明は、新規に拡張専用命令を定義することで、一定のオペコード長（例えば３２ビット）でありながら、命令の拡張を可能とした演算処理装置及び命令の拡張方法を提供することを課題とする。
【００１８】
また、既存の命令に１つの拡張命令を組み合わせることで、拡張されたレジスタから１つの演算のための入力データを選択し、演算処理を行うことを可能にする演算処理装置及び命令の拡張方法を提供することを課題とする。
【００１９】
更に、新規に追加定義した１つの拡張専用命令を定義し、これと従来のすでに命令セットで定義されている加算、積算、積和演算などを組み合わせることで加算、積算、積和演算などのＳＩＭＤ命令処理の命令の定義を可能とした演算処理装置及び命令の拡張方法を提供することを課題とする。
【００２０】
また、ロード命令、ストア命令、プリフェッチ命令などによりデータがキャッシュに登録される場合に、登録するキャッシュウェイの属性、例えばウェイ番号などをソフトウエアから命令ごとに指示することを可能とした演算処理装置を提供することを課題とする。
【００２１】
また、ＳＩＭＤ命令を用いないプログラムではすべてのレジスタを異なるアドレスとして有効に使用することが出来、またＳＩＭＤ命令を用いるプログラムでも、レジスタ内の前半と後半のデータを独立に操作できるとすることが出来、プログラミングの可用性を向上させることが可能な演算処理装置及び命令の拡張方法を提供することを課題とする。
【課題を解決するための手段】
【００２２】
上記課題を解決するため本発明による演算処理装置は、拡張レジスタ及び演算部を備える。
拡張レジスタは、命令の拡張を示す命令拡張情報が設定可能なレジスタである。
【００２３】
演算部は、前記拡張レジスタに命令拡張情報が設定されているときに、前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する実行する。
【００２４】
これにより拡張レジスタに命令拡張情報を格納する命令を実行すると、その命令の後続の命令は、拡張レジスタ内の命令拡張情報によって拡張される。
また前記拡張レジスタには、設定された命令拡張情報が有効であるか否かを示す情報が設定され、前記演算部は、命令拡張情報が有効であることを示す情報が設定されているとき、前記後続の命令を前記拡張レジスタに設定された命令拡張情報により拡張する構成としても良い。
【００２５】
これにより、拡張レジスタ内の命令拡張情報の有効、無効を判別することが出来る。
更に拡張された前記後続の命令がコミットされたとき、前記拡張レジスタに設定された命令拡張情報を無効にすることを特徴とする。
【００２６】
これにより、拡張したい命令と拡張したくない命令が混在している場合でも、コード効率がよいコードによって、プログラミングを行なうことができる。
また前記拡張レジスタには、複数命令分の前記命令拡張情報が設定される構成とすることも出来る。
【００２７】
この構成により、一度拡張レジスタを書き換えると後続する複数の命令を拡張することが出来る。
更に前記拡張レジスタに前記命令拡張情報を書き込む命令の実行と、前記拡張命令によって拡張される命令の実行との間にトラップが生じるとき、前記拡張レジスタに設定された命令拡張情報を退避するトラップ用レジスタを備える構成としても良い。
【００２８】
この構成により、トラップが生じても正常に処理を行なうことができる。
また前記命令拡張情報は、レジスタアドレスを含み、前記命令拡張情報によって拡張される命令は、レジスタの拡張がなされる構成とすることが出来る。
【００２９】
この構成により、レジスタ数を拡張することが出来る。
更に前記命令拡張情報は、ＳＩＭＤ命令であるかどうかを示す情報を含み、命令拡張情報によって拡張される命令はＳＩＭＤ処理を行なう構成とすることも出来る。
【００３０】
この構成により拡張された命令としてＳＩＭＤ処理を行なうことができる。
また前記拡張レジスタに書き込む情報をオペコードの即値として持つ、前記拡張レジスタに書き込む命令が登録されている構成とすることが出来る。
【００３１】
この構成により、拡張レジスタに書き込む命令の解読時に、拡張する情報を得ることが出来る。
更に固定小数点レジスタを用いて前記拡張レジスタに書き込む情報を生成する、前記拡張レジスタに書き込む命令が登録されている構成とすることが出来る。
【００３２】
この構成により、拡張レジスタ内に自由に情報を書き込むことが出来る。
また本発明は演算処理装置のみだけでなく演算処理装置における命令の拡張方法もその範囲に含む。
【発明の効果】
【００３３】
本発明によれば、拡張レジスタに設定した命令拡張情報により、オペコード長の制限で不可能だったレジスタアドレス拡張が可能となる。
また新たなＳＩＭＤ命令や、キャッシュ属性の番号指定などの定義に要するオペコードが、１つのオペコード追加だけで済ますことができる。
【発明を実施するための最良の形態】
【００３４】
以下に図面を参照しながら本発明の一実施形態について説明する。
以下に説明する本実施形態の演算処理装置は、ＲＩＳＣアーキテクチャのＳＰＡＲＣアーキテクチャを元にした論理仕様  ＪＰＳ１（ＳＰＡＲＣ  Ｊｏｉｎｔ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）をベースとするものを例として説明する。ＪＰＳ１のレジスタ数は倍精度６４ビットの浮動小数点レジスタが３２本ある。また固定小数点レジスタは、レジスタウィンドウ方式であり、ＣＷＰによって切り替わるｉｎ、ｏｕｔ、ｌｏｃａｌ  レジスタそれぞれ８本ずつ、ＣＷＰによらないｇｌｏｂａｌレジスタ８本の合計３２本となる。
【００３５】
なお本実施形態の演算処理装置は、ＳＰＡＲＣアーキテクチャに限定されるものではなく、命令長が固定のＲＩＳＣアーキテクチャのものであれば、本実施形態は全て適用可能である。
【００３６】
図１は、本実施形態の演算処理装置を示す図である。
本実施形態の演算処理装置１００は、命令拡張を行うための専用のレジスタとして数値
演算拡張レジスタ（ｅＸｔｅｎｄｅｄ  Ａｒｉｔｈｍｅｔｉｃ  Ｒｅｇｉｓｔｅｒ：以下ＸＡＲレジスタという）１を設けてある。
【００３７】
ＸＡＲレジスタ１には命令拡張情報が格納される。
本実施形態による演算処理装置１００は、ＸＡＲレジスタ１の内容で、ＸＡＲレジスタ１にデータを格納する命令に続いて実行される既存命令の拡張を行う。既存命令の拡張では、上述したＪＰＳ１のレジスタ以外の拡張されたレジスタを用いることが出来たり、ＳＩＭＤ命令を実行することが出来る。
【００３８】
本実施形態の方法によれば、命令長は固定長（ＪＳＰ１では３２ｂｉｔ）のままなので、既存のソフトウエアやＯＳをそのまま用いることが出来る。
またＸＡＲレジスタ１に情報を書き込む命令と既存の命令を組み合わせるだけで、既存の命令を拡張することが出来るので、命令オペコードの制約がほとんど無い。
【００３９】
Ｄ＿ＸＡＲレジスタ２は、後述するＸＡＲレジスタ１の内容を書き換えるＳＸＡＲ命令（ＳＸＡＲ；Ｓｅｔ  ＸＡＲ）が実行されたとき、ＸＡＲレジスタ１に書き込む値を一時的に保存する一時レジスタである。ＳＸＡＲ命令に続く命令が命令デコード４でデコードされる際、命令デコード４は、ＸＡＲレジスタの内容として、このＤ＿ＸＡＲレジスタ２を参照する。これにより、ＳＸＡＲ命令と、ＳＸＡＲ命令に次に続く既存命令をほぼ同時にデコードすることが出来る。また登記実行失敗のときやＷｒｉｔｅ−ＸＡＲ命令でＸＡＲレジスタ１が更新されたときは、ＸＡＲレジスタ１内のデータがＤ＿ＸＡＲレジスタ２に書き込まれる。なおＳＸＡＲ命令やＷｒｉｔｅ−ＸＡＲ命令についての詳細は後述する。
【００４０】
ＸＡＲ更新用バッファ３は、ＸＡＲレジスタ１に書き込むデータを一時的に格納するバッファである。命令デコード４は、命令キャッシュ７から命令コードを読み出してデコードを行うものである。実行演算部５は、命令デコード４によるデコードの結果に基づいて命令を実行するものである。レジスタは、実行演算部がデータを読み書きするレジスタ群である。このレジスタ６については、後述する。命令キャッシュ７は、２次キャッシュから命令コードをキャッシュする１次キャッシュメモリである。データキャッシュ８は、２次キャッシュからデータコードをキャッシュする１次キャッシュメモリである。２次キャッシュ９は、メモリからデータをキャッシュする２次キャッシュメモリである。
【００４１】
次にレジスタ６の構成について説明する。
図２に、本実施形態の演算処理装置１００の浮動小数点レジスタの構成を示す。
本実施形態の演算処理装置１００のでは、６４ビット長のデータの浮動小数点レジスタは、ＪＰＳ１では％ｆ０から％ｆ６２までの３２本だったのが、％ｆ０から％ｆ５１０までの２５６本に拡張されており、図２では斜線部が拡張部分である。この図２のレジスタは、ＳＩＭＤ命令でない場合には２５６本のレジスタすべての間で演算が可能である。
【００４２】
なおＪＰＳ１では、倍精度浮動小数点レジスタのアドレスは、偶数番だけで指定する規則があるので、本実施形態においても拡張をしたレジスタもこれに従い、レジスタアドレスは０番から５１０番までの偶数番だけ使用して指定する。また偶数番だけを倍精度浮動小数点レジスタのレジスタアドレスに用いるので、レジスタアドレスの最下位ｂｉｔは常に‘０’となる。従って８ｂｉｔの拡張アドレスで０〜５１０までを指定することが出来る。なおこの図２に斜線で示された拡張レジスタは、ＸＡＲ＿ＶＡＬ＝１のときのみアクセス可能である。  
【００４３】
また図３に、本実施形態の演算処理装置１００の固定小数点レジスタの構成を示す。
本実施形態の演算処理装置１００では、６４ビット長のデータの固定小数点レジスタは
、従来のＪＰＳ１のレジスタは、ｇｌｏｂａｌレジスタ８本、ＣＷＰによるレジスタ２４本の計３２本である。またこのレジスタは、ウインドウの切り替えによってＣＷＰからＣＷＰ＋１若しくはＣＷＰ−１に切り替わる。こららに加えて、本実施形態の演算処理装置１００の固定小数点レジスタは新たに、ＣＷＰによらないレジスタＸＧ（ｅＸｔｅｎｄｅｄ  Ｇｌｏｂａｌ）を３２本追加し、合計６４本に拡張されており、図３では斜線部が拡張部分である。この追加されたレジスタはウィンドウ形式ではない。
【００４４】
なお図２、図３の拡張部分のレジスタを用いるのには、ＸＡＲレジスタのＦ＿ＶＡＬビット＝１若しくはＳ＿ＶＡＬ＝１とした状態で、ＪＰＳ１で定義されている既存の命令、例えば倍精度浮動小数点積和演算ＦＭＡＤＤ、固定小数点加算ＡＤＤ、倍精度浮動小数点ロードＬＤＤＦなどを実行することで行われる。このＦ＿ＶＡＬビット＝１及びＳ＿ＶＡＬ＝１についての詳細は後述する。
【００４５】
次にＸＡＲレジスタの構成について説明する。
図４は、ＸＡＲレジスタの構成を示す図である。
同図においてＸＡＲレジスタは、大きく分けて従属命令Ｆ（Ｆｉｒｓｔ）部と従属命令Ｓ（Ｓｅｃｏｎｄ）部に分かれる。そしてＦ部は、Ｆ＿ＶＡＬ、Ｆ＿ＳＩＭＤ、Ｆ＿ＲＤ、Ｆ＿ＲＳ１、Ｆ＿ＲＳ２及びＦ＿ＲＳ３領域を持つ。またＳ部も同様にＳ＿ＶＡＬ、Ｓ＿ＳＩＭＤ、Ｓ＿ＲＤ、Ｓ＿ＲＳ１、Ｓ＿ＲＳ２及びＳ＿ＲＳ３領域を持つ。Ｆ＿ＶＡＬ、Ｓ＿ＶＡＬは、１ビットの領域で、続く情報が有効かどうかを示す情報（バリッド）である。
【００４６】
Ｆ＿ＶＡＬ＝１のときは、Ｆ部の命令拡張情報（Ｆ＿ＳＩＭＤ、Ｆ＿ＲＤ、Ｆ＿ＲＳ１、Ｆ＿ＲＳ２、Ｆ＿ＲＳ３）で直後の１命令を拡張し、Ｆ＿ＶＡＬ＝０、Ｓ＿ＶＡＬ＝１のときは、Ｓ部の命令拡張情報（Ｓ＿ＳＩＭＤ、Ｓ＿ＲＤ、Ｓ＿ＲＳ１、Ｓ＿ＲＳ２及びＳ＿ＲＳ３）で直後の１命令を拡張する。また、Ｆ＿ＶＡＬ＝１かつＳ＿ＶＡＬ＝１のときは、直後の連続する２命令を拡張し、Ｆの命令拡張情報で直後の１命令目を、Ｓの命令拡張情報でさらに２命令目を拡張する。そして拡張される命令がレジスタへの書き込み等を完了（コミット）すると、拡張される命令に対応する命令拡張情報とそのバリッドはリセットされる。なおＦ＿ＶＡＬは、Ｆ部の命令拡張情報が書き込まれると‘１’がセットされ、Ｆ部の命令拡張情報を用いて命令拡張が行われると‘０’にリセットされる。同様に、Ｓ＿ＶＡＬは、Ｓ部の命令拡張情報が書き込まれると‘１’がセットされ、Ｓ部の命令拡張情報を用いて命令拡張が行われると‘０’にリセットされる。
【００４７】
なお以下の説明では、Ｆ部の命令拡張情報（Ｆ＿ＳＩＭＤ、Ｆ＿ＲＤ、Ｆ＿ＲＳ１、Ｆ＿ＲＳ２、Ｆ＿ＲＳ３）が格納されるＸＡＲレジスタの領域をＦ領域、Ｓ部の命令拡張情報（Ｓ＿ＳＩＭＤ、Ｓ＿ＲＤ、Ｓ＿ＲＳ１、Ｓ＿ＲＳ２、Ｓ＿ＲＳ３）が格納されるＸＡＲレジスタの領域をＳ領域という。
【００４８】
またＦ＿ＳＩＭＤとＳ＿ＳＩＭＤは、拡張した命令がＳＩＭＤ命令であるか否かを示す１ビットの領域で、１がセットされているとＦ部の命令拡張情報またはＳ部の命令拡張情報で拡張される命令はＳＩＭＤ命令となる。本実施形態の演算処理装置によるＳＩＭＤ命令については、後述する。
【００４９】
Ｆ＿ＲＤ及びＳ＿ＲＤは、拡張される命令のディスティネーションレジスタを指定するアドレスの拡張分の３ビットを格納する領域である。またＦ＿ＲＳ１〜Ｆ＿ＲＳ３及びＳ＿ＲＳ１〜Ｓ＿ＲＳ３は、それぞれソースレジスタを指定するアドレスの拡張分の３ビットを格納するアドレス拡張領域である。
【００５０】
この３ビットは、浮動小数点レジスタを２５６本に拡張するために既存の命令で不足す
る上位３ビットとなるものである。なお固定小数点レジスタを指定する場合は、３ビットのうちの最下位１ビットのみを用いる。そして固定少数レジスタを指定してなお上位２ビットが‘１’になると、拡張される命令の実行時にＸＡＲによる拡張違反であることを示す新規例外ｉｌｌｅｇａｌ＿ａｃｔｉｏｎトラップを起こす。この新規例外ｉｌｌｅｇａｌ＿ａｃｔｉｏｎトラップは、加算命令や乗算命令等において第３のソースレジスタを指定した場合などにも発生する。
【００５１】
図５にＸＡＲレジスタによる命令拡張の例を示す。同図は浮動小数点演算の拡張の例である。
図５ではＳＸＡＲ命令等で、ＸＡＲレジスタにデータをセットした次の命令で、ＪＰＳ１で定義されている倍精度浮動小数点積和演算命令（ＦＭＡＤＤ）を実行した場合を例としている。
【００５２】
ＦＭＡＤＤ命令は、図５にあるように３つのソースレジスタと１つのディスティネーションレジスタを指定しなければならない。この指定においてＦＭＡＤＤ命令内のレジスタ指定アドレスは［４：０］の５ビットである。この５ビットにＸＡＲレジスタ内のアドレス拡張領域の［７：５］の３ビットを加え、計８ビットでレジスタを指定する。ＸＡＲレジスタによって拡張されたＦＭＡＤＤ命令は、ソースレジスタとディスティネーションレジスタとしてそれぞれ２５６本のレジスタを指定することが出来る。
【００５３】
なおＦＭＡＤＤ命令では、３つのソースレジスタと１つのディスティネーションレジスタを指定する必要があったが、命令の種類によってはこのような数のレジスタを指定する必要が無い場合がある。例えばロード命令、ストア命令、プリフェッチ命令などのメモリアクセス（例えば倍精度浮動小数点ロード命令）では、ソースレジスタを３つ指定する必要は無く、このときのこのフィールドは、キャッシュにデータを登録するときにそのキャッシュウェイの属性を示すセクタ番号になる。
【００５４】
図６にＸＡＲレジスタにデータをセットした次の命令で倍精度浮動小数点ロード命令を実行した場合を例として示す。
図６は、ＸＡＲレジスタにデータをセットした次の命令でＪＰＳ１で定義されている倍精度浮動小数点ロード（ＬＤＤＦ）命令を実行した場合を例として示している。
【００５５】
ＬＤＤＦ命令は、図６に示すように２つのソースレジスタと１つのディスティネーションレジスタを指定する必要があるのみなので、３つ目のソースレジスタを指定するＦ＿ＲＳ３の領域１１が空いている。
【００５６】
本実施形態では、このＸＡＲレジスタの空き領域１１を用いて、キャッシュにデータを登録するときにそのキャッシュウェイの属性を示すセクタ番号としてキャッシュセクタ＝１を指示している。
【００５７】
次にＸＡＲレジスタの値を書き換えるＳＸＡＲ命令について、説明する。
本実施形態の演算処理装置では、ＳＸＡＲ命令は、ＸＡＲレジスタの更新を行う命令の一つで、更新するデータを命令オペコード内に即値形式で有する命令として定義されている。これにより、ハードウェアは命令デコードの際にＸＡＲに書き込む内容が投機的に判断できるので、次にデコードされる命令の拡張を容易に可能にする。
【００５８】
ＳＸＡＲ命令では、図１においてＸＡＲレジスタ１に書き込む情報は、Ｄ＿ＸＡＲレジスタ２及びＸＡＲ更新用バッファ３を介してＸＡＲレジスタ１に書き込まれる。ＳＸＡＲに続く命令は、ＸＡＲレジスタ１の内容をＤ＿ＸＡＲレジスタ２を参照することによって知ることが出来るので、ＳＸＡＲ命令とＳＸＡＲ命令の次の命令は命令デコード４でほぼ
同時にデコードされる。
【００５９】
なおＸＡＲレジスタを書き換える命令としては、ＳＸＡＲ命令の他に、Ｄ＿ＸＡＲレジスタ２やＸＡＲ更新用バッファ３を介さずに直接ＸＡＲレジスタ１に情報を書き込むＷｒｉｔｅ−ＸＡＲ命令がある。Ｗｒｉｔｅ−ＸＡＲ命令の場合、ＸＡＲレジスタ１に直接データを書き込むまで、拡張される次の命令は、Ｗｒｉｔｅ−ＸＡＲ命令が完了するまでデコードが完了しない。このＷｒｉｔｅ−ＸＡＲ命令については、後に詳細に説明する。
【００６０】
またＳＸＡＲ命令として、ＳＸＡＲ１命令とＳＸＡＲ２命令の２つの命令が定義されている。
図７にＳＸＡＲ１命令のフィールドを示す。
【００６１】
ＳＸＡＲ１命令は、ＳＸＡＲ１命令に続く１命令を拡張する命令である。
図７においてＳＸＡＲ１命令は、命令の種類を示すＯＰＣＯＤＥ［４：０］領域にはＳＸＡＲ命令であることを示す「ＯＰ［１：０］＝０」「ＯＰ２［３：０］＝７」が設定されており、またＳＸＡＲ１命令かＳＸＡＲ２命令かを示すＣＯＭＢ領域にはＳＸＡＲ１命令であることを示す‘０’が設定されており、それに続くｏｐｅｒａｎｄ領域には、ＸＡＲレジスタのＦ部の命令拡張情報に書き込まれる情報が設定されている。なおＳＸＡＲ１命令では、ｏｐｅｒａｎｄ領域に続く領域の値は不定となっている。また第３のソースレジスタを指定するＦ＿ＲＳ３［７：５］の領域は、拡張される命令がメモリアクセスの命令であるとき、キャッシュメモリアクセス用の付加情報（セクタ番号等）を指定する領域となる。
【００６２】
図７のＳＸＡＲ１命令を実行するとＸＡＲレジスタのＦ領域に、ＳＸＡＲ１命令のｏｐｅｒａｎｄの値が設定されると共に、Ｆ＿ＶＡＬに‘１’がセットされる。そして、ＳＸＡＲ１命令の直後に実行される命令は、ＸＡＲレジスタのＦ領域の値に基づいて拡張される。なおＳＸＡＲ１命令の次に実行される命令が完了すると、ＸＡＲレジスタのＦ領域はクリアされ、Ｆ＿ＶＡＬは‘０’にリセットされる。
【００６３】
次にＳＸＡＲ２命令について説明する。
ＳＸＡＲ２命令は、ＳＸＡＲ２命令に続く２命令をＸＡＲレジスタの設定値で拡張するものである。
【００６４】
図８に、ＳＸＡＲ２命令のフィールドを示す。
図８においてＳＸＡＲ２命令は、命令の種類を示すＯＰＣＯＤＥ［４：０］領域には図７のＳＸＡＲ１命令と同様、ＳＸＡＲ命令であることを示す「ＯＰ［１：０］＝０」「ＯＰ２［３：０］＝７」が設定されている。またＳＸＡＲ１命令かＳＸＡＲ２命令かを示すＣＯＭＢ領域にはＳＸＡＲ２命令であることを示す‘１’が設定されている。ＣＯＭＢ領域に続くｏｐｅｒａｎｄ領域には、従属命令Ｆ部と従属命令Ｓ部があり、従属命令Ｆ部内にはＸＡＲレジスタのＦ領域に、また従属命令Ｓ部内の情報はＸＡＲレジスタのＳ領域に書き込まれる情報が設定されている。なお第３のソースレジスタを指定するＦ＿ＲＳ３［７：５］及びＳ＿ＲＳ３［７：５］の領域は、拡張される命令がメモリアクセスの命令であるとき、キャッシュメモリアクセス用の付加情報（セクタ番号等）を指定する領域となる。
【００６５】
図８のＳＸＡＲ２命令を実行すると、ＸＡＲレジスタのＦ領域とＳ領域に値が設定されると共にＦ＿ＶＡＬとＳ＿ＶＡＬに‘１’がセットされる。そして、ＳＸＡＲ１命令と同様、ＳＸＡＲ２命令に続いて１番目に実行される命令は、ＸＡＲレジスタのＦ領域の値に基づいて拡張される。そして１番目に実行される命令が完了すると、ＸＡＲレジスタのＦ領域はクリアされ、Ｆ＿ＶＡＬは‘０’にリセットされる。そして１番目に実行される命
令の次に実行される、２番目に実行される命令は、ＸＡＲレジスタのＳ領域の値に基づいて拡張される。そしてこの２番目に実行される命令が完了すると、ＸＡＲレジスタのＳ領域はクリアされ、またＳ＿ＶＡＬは‘０’にリセットされる。
【００６６】
このようにＳＸＡＲ２命令を用いることにより、ＳＸＡＲ２命令の直後に続く２命令を拡張することが出来る。したがって、ＳＸＡＲ２命令は、拡張命令が続くときは、ＳＸＡＲ１命令よりコード効率の良いプログラミングを実現できる。
【００６７】
図９にＳＸＡＲ２命令を用いた推奨される命令生成の例を示す。
図９において、プログラム２１はＳＸＡＲ２命令を用いずにプログラムがコード生成したものである。それに対してプログラム２２は、プログラム２１とソフトウエア的には等価なプログラムを、ＳＸＡＲ２命令を用いてコード生成したものである。
【００６８】
両者を比較すると、ＳＸＡＲ２命令を用いたプログラムの方が命令数が少なくコード効率が良い。したがって命令数を減らすことが出来るプログラム２２のコード生成の仕方がコンパイラには推奨される。
【００６９】
このように本実施形態の演算処理装置では、ＸＡＲレジスタを備え、ＸＡＲレジスタに命令拡張用の情報を格納することにより、命令拡張を行うことが出来る。
このような命令拡張を行うものとして従来から行われている方法に、モード切り替えを行う方法がある。
【００７０】
モード切り替えを行う方法では、拡張命令実行用のモードを切替えるレジスタを定義しておき、拡張命令を実行する場合には、モード切り替えレジスタを書き換えて拡張命令実行用のモードに切替える。
【００７１】
このような、モード切り替えを行う方法は、モードによる拡張命令が定常的に用いられる場合は良いが、拡張命令と拡張を受けない命令が混在しているときには、拡張命令実行用のモードに入ったり、拡張命令実行用のモードから通常モードに戻ったりを繰り返さなければならず、その度毎にモード切り替えレジスタを書き換える命令を実行しなければならない。
【００７２】
例えばアドレス空間を６４ビットではなく特別に３２ビットに制限する状態に切り替える際に、Ｐｒｏｃｅｓｓｏｒ  Ｓｔａｔｅ  Ｒｅｇｉｓｔｅｒなどのモードビットの方式で指定する論理仕様は存在した。このモードビットはセットする命令を実行した後、リセットする命令を実行する間ずっとその状態を保持する。
【００７３】
３２ビットモードなどの場合は、プログラム全体が３２ビットモードで記述されており、例えば１命令ごとに細かく６４ビットへ切り替わる必要がないので、このようなモード指示でよかった。
【００７４】
しかし、本実施形態の演算処理装置のように、拡張レジスタアドレスの使用やＳＩＭＤ命令などは、拡張したい命令と拡張したくない命令の混在が多く、命令ごとに細かく切り替わるプログラムを実行した場合、モード設定のようにセットする命令を実行に加えて、リセットする命令を実行する必要があると命令数をさらに増大させてしまう。そこで本実施形態の演算処理装置では、拡張情報をＸＡＲレジスタにセットした後、拡張される命令が実行されると同時に、その拡張情報をリセットするように定義する。これにより命令拡張をリセットする命令の挿入を必要としなくなる。
【００７５】
図１０は、拡張命令を用いるのにモード切り替えを行う例を示す図である。
図１０では、ＦＭＡＤＤ命令を被拡張命令として実行し、その後にＬＤＤＦ命令を拡張を受けない命令として実行する処理の場合を示している。
【００７６】
図１０では、ＦＭＡＤＤ命令を実行する前にモード切り替えレジスタ書き込み命令を実行し、ＬＤＤＦ命令を実行する前にモード切り替えレジスタリセット命令を実行して通常モードに戻っている。
【００７７】
したがって、拡張するＦＭＡＤＤ命令と拡張しないＬＤＤＦ命令を実行するのに計４命令必要となる。
それに対して、本実施形態の演算処理装置で行なわれている命令の拡張方法では、拡張命令が実行されると、ＸＡＲレジスタ内の対応する情報が自動的にリセットされる。これにより、拡張する命令と拡張しない命令が混在した場合であってもＸＡＲレジスタをリセットする必要が無く、その分コード効率が良くなる。
【００７８】
図１１は、図１０と同じ処理を本実施形態の演算処理装置が実行した場合を示す図である。
図１１では、被拡張命令であるＦＭＡＤＤ命令の前に、ＳＸＡＲ１命令を実行してＸＡＲレジスタに命令拡張のための情報を書き込む。そしてＦＭＡＤＤ命令を拡張命令として実行すると、ＸＡＲレジスタ内の命令拡張のための情報はリセットされる。したがって次に実行されるＬＤＤＦ命令は、ＸＡＲレジスタ内に命令拡張のための情報が無いので命令を拡張しないで実行される。
【００７９】
このように、本実施形態の演算処理装置で拡張するＦＭＡＤＤ命令と拡張しないＬＤＤＦ命令を実行するのと３命令ですむ。したがって、このような場合、モード切り替えを行う演算処理装置より、コード効率の良いプログラムで同じ処理を実現することが出来る。
【００８０】
次にＳＸＡＲ２命令時の動作の詳細について例を挙げて説明する。
図１２はＳＸＡＲ２命令時の動作例を示す図である。
図１２においては、ＦＭＡＤＤ命令と、それに続くＬＤＤＦ命令を拡張して実行する場合を示している。
【００８１】
この場合、プログラムは、ＳＸＡＲ２命令、ＦＭＡＤＤ命令、及びＬＤＦＦ命令の３命令となる。
ＳＸＡＲ２命令が実行されると、ＸＡＲレジスタのＦ領域とＳ領域に命令拡張に用いる拡張情報が書き込まれる。またＦ＿ＶＡＬ及びＳ＿ＶＡＬに１がセットされる。
【００８２】
次に１命令目の被拡張命令であるＦＭＡＤＤ命令では、ＸＡＲレジスタのＦ領域を参照して、拡張されたＦＭＡＤＤ命令として実行される。そしてこのＦＭＡＤＤ命令実行後、ＸＡＲレジスタのＦ＿ＶＡＬ及びＦ領域はリセットされる。
【００８３】
次に２命令目の被拡張命令であるＬＤＦＦ命令では、ＸＡＲレジスタのＦ領域を参照して、拡張されたＬＤＦＦ命令として実行される。そしてこのＬＤＦＦ命令実行後、ＸＡＲレジスタのＳ＿ＶＡＬ及びＳ領域はリセットされる。
【００８４】
このようにＳＸＡＲ２命令においては、最初の被拡張命令を実行後、Ｆ領域及びＦ＿ＶＡＬがリセットされ、その後に２番目の被拡張命令が実行され、そしてＳ領域及びＳ＿ＶＡＬがリセットされる、２つの被拡張命令のうちの１つが実行されるごとにＸＡＲレジスタの対応領域がリセットされる。
【００８５】
このように各命令が終了される毎に、ＸＡＲレジスタの対応領域がリセットされるので
、ＳＸＡＲ２命令で後続の２命令を拡張することが出来、また拡張したい命令と拡張したくない命令が混在してもコード効率は下がらない。
【００８６】
また各命令が終了される毎に、ＸＡＲレジスタの対応領域がリセットされるので、後述する割り込みが一番目の命令と２番目の命令の実行の間に生じたとしても、問題が生じない。
【００８７】
次にＳＩＭＤ命令について説明する。
本実施形態の演算処理装置では、１つの命令で複数の処理を行うＳＩＭＤ命令が拡張命令として定義されている。
【００８８】
図４に示したＸＡＲレジスタの構成において、Ｆ＿ＳＩＭＤビットは、第１の命令をＳＩＭＤ命令として拡張するか否かを指定するビットで、Ｆ＿ＳＩＭＤ＝１がセットされると第１の命令をＳＩＭＤ命令として拡張する。また同様にＳ＿ＳＩＭＤビットは、第２の命令をＳＩＭＤ命令として拡張するか否かを指定するビットで、Ｓ＿ＳＩＭＤ＝１がセットされると第２の命令をＳＩＭＤ命令として拡張する。
【００８９】
このＳＩＭＤ命令では、Ｆ領域若しくはＳ領域でソースレジスタ若しくはディスティネーションレジスタとして１つの浮動小数点レジスタを指定すると、２つの浮動小数点レジスタが指定される。
【００９０】
図２に示すように拡張されたＳＩＭＤ命令では、レジスタアドレスが２５６離れたレジスタをペアとして扱う。ＳＩＭＤ処理を行うＳＩＭＤ命令では、拡張レジスタアドレスの最上位ビットは‘０’で指定すると規定して、最上位ビットが‘０’である浮動小数点レジスタと、最上位ビットが‘１’である浮動小数点レジスタを一つの組として、２つのデータを並列に処理する。
【００９１】
例えばＳＩＭＤ命令として、ｆａｄｄｄ  ％ｆ０、％ｆ１００、％ｆ２００を実行すると、％ｆ０＋％ｆ１００＝％ｆ２００の演算と同時に、％ｆ２５６＋％ｆ３５６＝％ｆ４５６の演算も行う。
【００９２】
これにより、本実施形態の演算処理装置では、ＳＩＭＤ命令でない拡張命令では、全ての浮動小数点レジスタを異なるアドレスとして指定することができ、またＳＩＭＤ処理が可能な場合はＳＩＭＤ命令として拡張することにより、１命令で２倍のデータ処理が可能になる。
【００９３】
またＸＡＲレジスタ内にＳＩＭＤ命令か否かの拡張ビットであるＦ＿ＳＩＭＤビットとＳ＿ＳＩＭＤビットを持つことにより、ＳＩＭＤ命令の拡張を行っているので、ＸＡＲレジスタに書き込む命令と既存の命令を組み合わせるだけで、ＳＩＭＤ命令を拡張でき、命令オペコードの制限を非常に少なくすることが出来る。
【００９４】
図１３に非ＳＩＭＤ命令とＳＩＭＤ命令を実行する演算器のブロック図を示す。
図１３（ａ）は非ＳＩＭＤ命令の場合、図１３（ｂ）はＳＩＭＤ命令の場合の構成を示している。
【００９５】
図１３（ａ）の非ＳＩＭＤ命令で％ｆ２００＋％ｆ３００を実行した場合、１つの加算器を用いて、％ｆ２００レジスタ内のデータと％ｆ３００レジスタの加算処理のみが実行される。
【００９６】
それに対して図１３（ｂ）のＳＩＭＤ命令で％ｆ１００＋％ｆ２００を実行した場合、
２つの加算器を用いて、％ｆ１００レジスタ内のデータと％ｆ２００レジスタの加算処理に加え、ｆ１００と％ｆ２００に２５６を加えたアドレス（すなわち最上位ビットを０から１にしたアドレス）の、％ｆ３５６レジスタ内のデータと％ｆ４５６レジスタの加算処理が同時に行われる。
【００９７】
なおＳＩＭＤ命令では、レジスタアドレス％ｆ０〜％ｆ２５４の１２８本のレジスタしか指定することが出来ないが、非ＳＩＭＤ命令ではソースレジスタ若しくはディスティネーションレジスタとしてレジスタアドレス％ｆ０〜％ｆ５１０のいずれのレジスタも指定できる。またＳＩＭＤ命令実行後でも、各レジスタ内を独立に操作できるとすることが出来る。
【００９８】
次に本実施形態の演算処理装置における割り込み処理について説明する。
本実施形態では、ＸＡＲレジスタに書き込む命令（ＳＸＡＲ１命令、ＳＸＡＲ２命令、Ｗｒｉｔｅ−ＸＡＲ命令）と、被拡張命令の２つに分けて実行することにより命令の拡張を行っている。
【００９９】
ＸＡＲレジスタに拡張情報を書き込む命令（ＳＸＡＲ１命令、ＳＸＡＲ２命令、Ｗｒｉｔｅ−ＸＡＲ命令）と、これらの命令の直後の被拡張命令は別の命令なので、ＸＡＲに拡張情報がセットされてから拡張される命令が実行されるまでの間に、例えば外部の割り込みによるトラップが発生する場合がある。その場合、トラップから復帰するととき、トラップに入る前の状態に戻してから処理を再開する必要がある。
【０１００】
そこで、本実施形態の演算処理装置では、トラップに入ったときにＸＡＲレジスタ内の情報を一時退避する専用のスタックＴＸＡＲを設ける。このスタックＴＸＡＲは高速にアクセスでき、トラップに入るときや復帰するときにＸＡＲレジスタの内容が高速に読み書きされる。
【０１０１】
図１４は、このスタックＴＸＡＲの構成を示す図である。
スタックＴＸＡＲは、ＳＰＡＲＣアーキテクチャに定義されている他のトラップスタックと同様、各トラップレベル毎に用意される。
【０１０２】
このスタックＴＸＡＲの情報は、あくまでトラップに入るときのＸＡＲレジスタの値を保持するためのものであり、ＸＡＲレジスタのように従来命令を拡張するという影響は与えない。
【０１０３】
ＪＰＳ１では、トラップは５段階までレベルがあるので、図１４に示すように各トラップレベルに対してＴＸＡＲを用意する。図１４では、トラップレベル＝０の状態からトラップが発生してＸＡＲレジスタの内容を退避するＴＸＡＲをＴＸＡＲ１、トラップレベル＝１の状態からＸＡＲレジスタの内容を退避するＴＸＡＲをＴＸＡＲ２、・・・、トラップレベル＝４の状態からＸＡＲレジスタの内容を退避するＴＸＡＲをＴＸＡＲ５と構成されている。
【０１０４】
トラップが発生すると演算処理装置では、トラップ発生前のトラップレベルに対応するスタックＴＸＡＲにＸＡＲレジスタの内容を退避する。またそれと同時に、トラップに入る前のＸＡＲレジスタ内の拡張情報が、トラップルーチンの命令を拡張してしまわないように、ＸＡＲレジスタ内のデータをクリアする。またトラップルーチンが終了し、トラップから元の処理に復帰する（ＪＰＳ１では、ｄｏｎｅ命令、ｒｅｔｒｙ命令でトラップレベルを１つ下げる）ときには、そのトラップレベルに対応するスタックＴＸＡＲからＸＡＲレジスタへ値をコピーする。
【０１０５】
図１５にトラップ時のスタックＴＸＡＲとＸＡＲレジスタの関係を示す。
図１５（ａ）は、ｔｒａｐ命令でトラップが発生したときのスタックＴＸＡＲとＸＡＲレジスタの動きを示している。トラップ発生前ＸＡＲレジスタの内容が‘Ｘ’であったとき、トラップが発生してトラップレベルがｎからｎ＋１に上がるとスタックＴＸＡＲn+1 にＸＡＲレジスタの内容‘Ｘ’が書き込まれ、またＸＡＲレジスタは‘０’にクリアされる。
【０１０６】
また図１５（ｂ）は、ｄｏｎｅ命令若しくはｒｅｔｒｙ命令でトラップから復帰したときのＴＸＡＲとＸＡＲレジスタの動きを示している。トラップから復帰する前、ＸＡＲレジスタの内容が‘Ｙ’、スタックＴＸＡＲn+1 の内容が‘Ｚ’であったとき、トラップから復帰してトラップレベルがｎ＋１からｎに下がると、ＸＡＲレジスタにスタックＴＸＡＲn+1 の内容‘Ｚ’がコピーされ、またスタックＴＸＡＲn+1 の内容は変化しない。
【０１０７】
この構成により、トラップが発生したときも、トラップから復帰したときも本実施形態の演算処理装置では、正確な処理を行なうことができることを保障する。
現在のトラップレベルのスタックＴＸＡＲに関しては、スタックＴＸＡＲ内のデータを固定小数点レジスタに読み出すＲＤ−ＴＸＡＲ命令や、ソースレジスタ１、ソースレジスタ２を固定小数点レジスタから読み出し、ソースレジスタ１とソースレジスタ２の排他的論理和（ｘｏｒ：  ｅｘｃｌｕｓｉｖｅ  ｏｒ）を算出して、その結果をＴＸＡＲに書き込むＷｒ−ＴＸＡＲ命令を定義し、これらの命令を用いる。
【０１０８】
図１６は、ＳＸＡＲ２命令によって拡張された命令が実行されているときにトラップが発生したときのＸＡＲレジスタ及びスタックＴＸＡＲの動きの例を示す図である。
図１６の例では、トラップレベルＴＬ＝ｎで、ＳＸＡＲ２命令により続く命令Ａと命令Ｂを拡張したプログラムにおいて、拡張命令Ｂを実行中にトラップが発生した場合のＸＡＲレジスタとスタックＴＸＡＲの動きを示している。
【０１０９】
まずＳＸＡＲ２（Ａ，Ｂ）が実行されるとＸＡＲレジスタのＦ領域には命令拡張情報Ａが、またＳ領域には命令拡張情報Ｂが書き込まれる。
次に被拡張命令Ａが実行されるとＸＡＲレジスタのＦ＿ＶＡＬとＦ領域は‘０’にクリアされ、Ｓ領域はそのまま命令拡張情報Ｂが格納されている。
【０１１０】
この間スタックＴＸＡＲ内には、初期状態または以前にトラップが発生したときに書き込まれたデータが格納されている。
次に被拡張命令Ｂが実行中にトラップが発生すると、ＸＡＲレジスタ内の値はスタックＴＸＡＲn に退避されると共に、ＸＡＲレジスタはクリアされる。したがってスタックＴＸＡＲn には、ＸＡＲレジスタ内に格納されていた０，Ｂが書き込まれており、またＸＡＲレジスタの値は全て‘０’となる。
【０１１１】
この状態でトラップルーチンの処理が行われる。このトラップルーチンの処理では、トラップ前の命令拡張情報の影響を受けない。またＸＡＲレジスタへは書き込み、スタックＴＸＡＲに対しては読み書き可能である。
【０１１２】
トラップルーチン処理が終わって、トラップから復帰すると、ＸＡＲレジスタには、スタックＴＸＡＲn に退避していたデータが書き込まれ、被拡張命令Ｂが再実行される。そしてこのＸＡＲレジスタのＦ領域には‘０’が、またＳ領域には命令拡張情報Ｂが書き込まれるので、再実行では被拡張命令Ｂはトラップに影響されずに拡張される。
【０１１３】
以上により、本実施形態の演算処理装置では、トラップ中の処理でも、トラップから復帰したときの処理でも正確に処理を実行できることを保証する。
また本実施形態の演算処理装置におけるトラップには、誤った定義できない命令がデコードされたときに生じるトラップがある。
【０１１４】
ＸＡＲレジスタ内に格納されている拡張情報、例えばレジスタ拡張アドレスやＳＩＭＤビットなどは、直後の被拡張命令との組み合わせではじめて定義できない処理かどうかの判断が行われる。
【０１１５】
例えば本実施例では、ＸＡＲレジスタ内のレジスタ拡張アドレスフィールドはそれぞれ３ビット設けてあるが、固定小数点系レジスタが浮動小数点系レジスタに比べて少ないため、拡張される命令が固定小数点加算命令ＡＤＤ等固定小数点レジスタを指定する命令のときに、拡張アドレスフィールドで２５６番目のレジスタを指定してしまうと拡張違反の命令を指定していることになる。
【０１１６】
本実施形態の演算処理装置では、そのようなときは拡張例外（ｉｌｌｅｇａｌ＿ａｃｔｉｏｎ）トラップを起こすように定義しておく。なおこのトラップの優先度（ｔｒａｐ−ｐｒｉｏｒｉｔｙ）は、組み合わせずに１命令で誤った定義できない命令であることが分かる定義外命令（ｉｌｌｅｇａｌ＿ｉｎｓｔｒｕｃｔｉｏｎ）に対するトラップに比べて低い優先度として定義する。
【０１１７】
図１７は、拡張例外トラップ処理の概念を示す図である。
命令デコード４による命令デコードの結果から、拡張例外検出部３１が誤った定義できない命令を検出すると、拡張例外検出部３１がトラップ遷移制御部３２に拡張例外トラップが発生したことを通知する。この通知を受けて、トラップ遷移制御部３２は、ＸＡＲ更新用バッファ３の内容でＸＡＲレジスタ１が書き換えられるのを止め、また実行演算部５がＸＡＲレジスタ１やレジスタ６にアクセスするのを止め、拡張例外トラップ処理ルーチンにプログラム処理を移す。
【０１１８】
これにより誤った定義できない命令が実行されるのを防ぐことが出来る。
次に、ＸＡＳＲレジスタについて説明する。
ＯＳのスケジューラの機能で、コンテキストスイッチで処理を行うプログラムを切り替える場合がある。
【０１１９】
コンテキストスイッチでは、処理を行うプログラムが変わるので、切り替わる前のプロセサの状態、つまりレジスタの状態をメモリに退避する必要がある。数多くのレジスタを用意したプロセサでは、それだけ退避及び復帰処理を行なうレジスタの数も多くなり、コンテキストスイッチのペナルティが大きくなる。
【０１２０】
本実施形態の演算処理装置では、少しでもこの処理を減らすために、２５６本の浮動小数点レジスタを３２本ずつ、８つのグループに分ける。そして、グループ内のレジスタの更新が行われたか否かを示すビット（以下これをダーティビットという）をグループ毎に持ち、このグループ数分の８ビットを用意する。
【０１２１】
この８つのダーティビットをＸＦＤ（Ｅｘｔｅｎｄｅｄ  Ｆｐｒ  Ｄｉｒｔｙ）［７：０］と呼ぶ。さらに固定小数点側で追加されたＸＧが更新された場合にこれを示すダーティビットｘｇ  ｄｉｒｔｙを用意する。これら計９ビットは、新規レジスタＸＡＳＲ（ｅＸｔｅｎｄｅｄ  Ａｒｉｔｈｍｅｔｉｃ  Ｒｅｇｉｓｔｅｒ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ）に保持する。
【０１２２】
図１８にこのＸＡＳＲレジスタの構成を示す。
図１８において、ビット０〜７がＸＦＤとなっており、ビット０が％ｆ０〜％ｆ６２の
ブロックに、ビット１が％ｆ６４〜％ｆ１２６のブロックに、・・・、ビット７が％ｆ４４８〜％ｆ５１０のブロックに該当する。ＸＦＤの各ビットはデフォルトでは、‘０’が設定されており、各ブロックのレジスタの内容に変更があるとそのレジスタが所属しているブロックに対応するビットに‘１’が設定される。
【０１２３】
またＸＡＳＲレジスタのビット８には、固定小数点レジスタに対するダーティビットであるＸＧＤとなっている。なおビット９〜３１には‘０’が設定されている。
本実施形態の演算処理装置では、レジスタの復帰処理において、このＸＡＳＲレジスタを参照し、ダーディビットに‘１’が設定されているブロックのレジスタのみに対して復旧処理を行なう。
【０１２４】
これにより、全てのレジスタに対して復旧処理を行なった場合に対して、復旧処理の負荷が軽減される。
なおＸＡＳＲレジスタ内のデータは、ＲＤ−ＸＡＳＲ命令によって固定小数点レジスタへ読み出したり、またＷＲ−ＸＡＲ命令によって固定小数点レジスタのデータを書き込むことを可能とする。
【０１２５】
ＸＡＳＲレジスタのダーティビットを見ることで、コンテキストスイッチの際のメモリへの退避が必要なレジスタを確認することが可能になる。
次に、Ｗｒｉｔｅ−ＸＡＲ命令について説明する。
【０１２６】
本実施形態の演算処理装置では、ＸＡＲレジスタに情報を書き込む命令として、上述したＳＸＡＲ１命令及びＳＸＡＲ２命令の外に、Ｗｒｉｔｅ−ＸＡＲ命令が定義されている。
【０１２７】
ＳＸＡＲ１命令及びＳＸＡＲ２命令は、命令オペコードに拡張情報を即値として持つものであったが、Ｗｒｉｔｅ−ＸＡＲ命令は、固定小数点レジスタのデータをＸＡＲレジスタに書き込む。
【０１２８】
Ｗｒｉｔｅ−ＸＡＲ命令は、即値としてソースレジスタ１及びソースレジスタ２のアドレスを持ち、２つの固定小数点レジスタを指定する。そしてこの２つの固定小数点レジスタからデータを読み出して、これらの排他的論理和（ＸＯＲ：ｅＸｃｌｕｓｉｖｅ  ＯＲ）を算出して、その結果をＸＡＲレジスタに書き込むものである。そしてＷｒｉｔｅ−ＸＡＲ命令に続く１命令若しくは２命令は、Ｗｒｉｔｅ−ＸＡＲ命令によって書き込まれたＸＡＲレジスタ内の命令拡張情報に基づいて、ＳＸＡＲ命令のときと同様に命令拡張が成される。
【０１２９】
このＷｒｉｔｅ−ＸＡＲ命令は、固定小数点レジスタのデータから求めた値をＸＡＲレジスタに書き込むので、このＷｒｉｔｅ−ＸＡＲ命令を用いることにより、例えば後述するＴＸＡＲ（Ｔｒａｐ  ＸＡＲ）レジスタの内容を読み出して、それに基づいた値をＸＡＲレジスタに書き込むなどの処理を可能にする。
【０１３０】
また固定小数点演算器で加工したデータをＸＡＲレジスタに書き込むことができる。
次にＳＸＡＲ命令やこのＷｒｉｔｅ−ＸＡＲ命令による命令の拡張のタイミングについて説明する。
【０１３１】
図１９は、ＳＸＡＲ命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。同図では、命令実行のための概略ステージとその時行われる処理が横方向に時間軸を取って示してある。
【０１３２】
ＳＸＡＲ命令（ＳＸＡＲ１命令、ＳＸＡＲ２命令）は、命令拡張情報を命令の即値として持っている。そのためＳＸＡＲ命令は、命令オペコードをデコードする命令デコードステージで、命令拡張情報が分かる。したがってＳＸＡＲ命令の次の命令は、ＳＸＡＲ命令のデコード直後に拡張することが可能となる。従ってＳＸＡＲ命令と続く１番目の拡張命令はほぼ同時にデコードされる。
【０１３３】
図１９の例では、ＳＸＡＲ１命令と続く上述したようにＦＭＡＤＤがほぼ同時にデコードされ、２つの命令はほぼ同時に完了している。
図２０は、Ｗｒｉｔｅ−ＸＡＲ命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。同図では、図１９と同様、命令実行のための概略ステージとその時行われる処理が横方向に時間軸を取って示してある。
【０１３４】
Ｗｒｉｔｅ−ＸＡＲ命令は、固定小数点レジスタを用いてＸＯＲ演算を行い、演算結果をＸＡＲレジスタに書き込む命令である。したがってＷｒｉｔｅ−ＸＡＲ命令によるＸＯＲ演算が実行ステージで完了するまでは、命令拡張情報の値は定まらない。
【０１３５】
よってＷｒｉｔｅ−ＸＡＲ命令を用いて命令拡張を行う場合には、Ｗｒｉｔｅ−ＸＡＲ命令の実行ステージが完了してから命令拡張情報が定まるので、実行ステージが完了した直後に第１の拡張命令のデコードが開始される。
【０１３６】
図２０では、Ｗｒｉｔｅ−ＸＡＲ命令の実行ステージが完了するまで、次に続くＦＭＡＤＤ命令の命令デコードがストールされ、Ｗｒｉｔｅ−ＸＡＲ命令の実行ステージが完了すると、ＦＭＡＤＤ命令は命令デコードステージに入っている。
【０１３７】
次にＷｒｉｔｅ−ＸＡＲ命令を用いる例として、本実施形態の演算処理装置をソフトウエアでエミュレーションした場合を例として示す。
図２１は、このソフトウエアエミュレーションの定義外命令例外ルーチンの動作を示すフローチャートである。
【０１３８】
図２１の処理が開始されると、ステップＳ１として、エミュレーションソフトウエアは、定義外命令例外（ｉｌｌｅｇａｌ＿ｉｎｓｔｒｕｃｔｉｏｎ）を検出すると、定義外命令例外のトラップルーチンに入る。
【０１３９】
このときプログラムカウンタＰＣの値はＴＰＣに、ＸＡＲレジスタの値はスタックＴＸＡＲに退避する。
次にエミュレーションソフトウエアは、ステップＳ２としてＴＰＣ内のプログラムカウンタ値を読み出し、定義外命令（Ｉｌｌｅｇａｌ＿ｉｎｓｔｒｕｃｔｉｏｎ）例外となった命令をメモリからフェッチする。
【０１４０】
そして次にエミュレーションソフトウエアは、ステップＳ３としてスタックＴＸＡＲからＸＡＲレジスタから退避した値を読み出す。そして読み出した情報に、有効な拡張情報があった場合には（ステップＳ３、Ｙ）、ステップＳ４としてスタックＴＸＡＲの値をレジスタに読み込み、必要に応じてＷｒｉｔｅ−ＸＡＲ命令でＸＡＲレジスタに書き戻す。
【０１４１】
そしてこの状態で、ステップＳ５として、ＸＡＲレジスタ内の拡張命令情報と他の命令を組み合わせて、エミュレーションを行う。このとき組み合わされる命令は拡張命令情報によって拡張される。
【０１４２】
そして次に、ステップＳ６として、エミュレーションソフトウエアは、スタックＴＸＡＲに格納されているエミュレーションした１命令分の拡張命令をクリアして、ステップＳ
８に処理を移す。
【０１４３】
一方ステップＳ３において読み出した情報に有効な拡張情報が無かった場合には（ステップＳ３、Ｎ）、ステップＳ７としてＸＡＲレジスタ内の拡張命令情報と他の命令を組み合わせてエミュレーションを行い、ステップＳ８に処理を移す。このとき組み合わされる命令は、ＸＡＲレジスタには有効な拡張命令情報が無いので拡張されない。
【０１４４】
ステップＳ８においては、ＴＮＰＣの指す命令に復帰する命令であるＤｏｎｅ命令によって、トラップルーチンを終えて、ＴＮＰＣの指すメインルーチンの次の命令を行う。このときＴＮＰＣの値はＰＣに、またスタックＴＸＡＲの値はＸＡＲレジスタに復帰する。
【０１４５】
このように、Ｗｒｉｔｅ−ＸＡＲ命令は、ＸＡＲレジスタに好きな値を設定できるので、トラップルーチンやデバッグ時に用いることが出来る。
次に本実施形態の演算処理装置で実行されるデバッガについて説明する。
【０１４６】
デバッガは、演算処理装置で実行されるソフトウエア開発時に用いられるプログラムで、デバッグするプログラムの任意の場所の命令をソフトウェアトラップ命令（ＪＰＳ１ではＴＡ：Ｔｒａｐ  Ａｌｗａｙｓ）に置き換えて、トラップルーチン上で置き換えた命令をエミュレーションしながら、置き換わった命令を実行するときのレジスタ値などを確認することが出来る。
【０１４７】
図２２に一般的なデバッガによる処理を示す。
図２２においてｆａｄｄｄ命令４１の時点でデバッグトラップを行いたいとした場合、４２のようにｆａｄｄｄ命令４１をソフトウェアトラップ命令ＴＡに置き換える。
【０１４８】
これにより、ＴＡ命令が実行されるとデバッガが指示するトラップアドレスのデバッグルーチンに飛び、デバッグルーチンでは、デバッガの必要とするデータ、例えばレジスタの値等を採取する。そしてデバッグルーチンではｆａｄｄｄ命令をエミュレートした後ＴＡ命令を元のｆａｄｄｄ命令に置き換える。
【０１４９】
このようにして、デバッグ処理は行われる。
ところで本実施形態の演算処理装置のＸＡＲレジスタによる命令拡張は、通常ＸＡＲレジスタが有効な命令拡張情報を持っている場合は、直後の命令が常に拡張されてしまう仕様のため、ＸＡＲレジスタの命令拡張情報で拡張されるはずだった命令をデバッガ機能でＴＡ命令に置き換えてしまうと、ＴＡ命令がＸＡＲレジスタの命令拡張情報で拡張されようとしてしまう。またソフトウェアトラップ命令は、固定小数点レジスタをソースレジスタに用いるので、レジスタ拡張アドレスフィールドが、２５６番目を指している場合には、ｉｌｌｅｇａｌ＿ａｃｔｉｏｎトラップを発生させてしまう場合もある。
【０１５０】
つまり、ＴＡ命令が拡張されてしまうと、トラップアドレスの値が変わったり、あるいはｉｌｌｅｇａｌ＿ａｃｔｉｏｎを起こすなど、本来のデバッガ機能を果たせない場合が発生する。
【０１５１】
よって、実施形態の演算処理装置では、ソフトウェアトラップ命令ＴＡに関してだけは特別に、ＸＡＲレジスタに有効な拡張情報があった場合にも、これにより拡張されない、つまりＸＡＲ拡張情報を無視して実行する命令として扱うように定義する。
【０１５２】
また本実施形態の演算処理装置では、ソフトウェアトラップ命令でトラップしない場合は、無条件にＸＡＲレジスタをリセットする仕様とするが、デバッガではソフトウェアトラップ命令により必ずトラップに入るので、ＸＡＲはＴＸＡＲに格納され、ソフトウェア
トラップを起こしたあとに、ＴＸＡＲからＲＤ−ＴＸＡＲ命令によってトラップに入るときのＸＡＲの値を読み出すことが可能である。
【０１５３】
図２３に本実施形態の演算処理装置で命令拡張が行われた命令に対するデバッガ処理を示す。
図２３においては、ＳＸＡＲ１命令の直後のｆａｄｄｄ命令５１が実行される時点でデバッグを行いたいものとする。この場合も同様に、デバッガは５２のようにｆａｄｄｄ命令をＴＡ命令に置き換える。
【０１５４】
仮にＴＡ命令のオペランドレジスタのアドレスがＳＸＡＲ１命令によって拡張されると、ＴＡ命令実行時にデバッガの意図しないトラップアドレスに処理が飛んでしまう。よって、本実施形態ではＴＡ命令はＸＡＲレジスタ内の命令拡張情報を無視して、実行するよう定義する。これによりＴＡ命令実行時には、正しいトラップアドレスに処理が移る。
【０１５５】
以上のように本実施形態の演算処理装置は、固定長命令のまま命令を拡張することが出来る。
なお上記例では、命令拡張はＳＸＡＲ２命令による２命令が最大であったが、本実施形態の演算処理装置はこれに限定されるものではなく、例えば拡張するレジスタ数を減らしたり、ＳＩＭＤ命令の拡張をしないことにより３命令以上の命令を拡張するようにしても良い。
【０１５６】
また上記例では、拡張された命令が実行されるとＸＡＲレジスタ内の対応する拡張命令情報がクリアされるが、このクリアは全ての情報をクリアするのではなく、Ｆ＿ＶＡＬ若しくはＳ＿ＶＡＬのみをクリアして対応する拡張命令情報を無効にする構成としても良い。
【０１５７】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
命令の拡張を示す命令拡張情報が設定可能な拡張レジスタと、
前記拡張レジスタに命令拡張情報が設定されているときに、前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する演算部と、
を有する演算処理装置。
【０１５８】
（付記２）
前記拡張レジスタには、設定された命令拡張情報が有効であるか否かを示す情報が設定され、前記演算部は、命令拡張情報が有効であることを示す情報が設定されているとき、前記後続の命令を前記拡張レジスタに設定された命令拡張情報により拡張することを特徴とする付記１に記載の演算処理装置。
【０１５９】
（付記３）
拡張された前記後続の命令がコミットされたとき、前記拡張レジスタに設定された命令拡張情報を無効にすることを特徴とする付記１に記載の演算処理装置。
【０１６０】
（付記４）
前記拡張レジスタには、複数命令分の前記命令拡張情報が設定されることを特徴とする付記１に記載の演算処理装置。
【０１６１】
（付記５）
前記後続の命令が拡張されて実行がコミットされる毎に、複数命令分の前記命令拡張情
報のうち対応するものを無効とすることを特徴とする付記４に記載の演算処理装置。
【０１６２】
（付記６）
前記拡張レジスタに前記命令拡張情報を書き込む命令の実行と、前記命令拡張情報によって拡張される命令の実行との間にトラップが生じるとき、前記拡張レジスタに設定された命令拡張情報を退避するトラップ用レジスタを更に備えることを特徴とする付記１に記載の演算処理装置。
【０１６３】
（付記７）
前記トラップが生じて、トラップ処理に入ったとき、前記拡張レジスタ内の前記命令拡張情報を無効にすることを特徴とする付記６に記載の演算処理装置。
【０１６４】
（付記８）
前記トラップ処理から戻ったとき、前記トラップ用レジスタ内の情報を前記拡張レジスタに書き戻すことを特徴とする付記６に記載の演算処理装置。
【０１６５】
（付記９）
前記トラップ用レジスタに格納された情報の読み出し、書き込みを行う命令が定義されていることを特徴とする付記６に記載の演算処理装置。
【０１６６】
（付記１０）
前記命令拡張情報は、レジスタアドレスを含み、前記命令拡張情報によって拡張される命令は、レジスタの拡張がなされることを特徴とする付記１に記載の演算処理装置。）
（付記１１）
拡張されたレジスタをいくつかのグループに分け、グループ内のレジスタの更新が行われた場合にこれを示すビットをグループごとに持ち、前記グループ数分のビットを保持するレジスタを備えることを特徴とする付記１０に記載の演算処理装置。
【０１６７】
（付記１２）
前記命令拡張情報は、ＳＩＭＤ命令であるかどうかを示す情報を含み、命令拡張情報によって拡張される命令はＳＩＭＤ処理を行なうことを特徴とする付記１に記載の演算処理装置。
【０１６８】
（付記１３）
前記ＳＩＭＤ処理は、レジスタアドレスの最上位ビットを‘０’にして指定されたレジスタを用いた演算と、最上位ビットを‘１’にして指定されたレジスタを用いた演算とを行うことを特徴とする付記１２の演算処理装置。
【０１６９】
（付記１４）
前記後続の命令が、２つ以下のソースレジスタしか指定しない命令であるとき、前記命令拡張情報は、キャッシュメモリにデータを登録するときに当該データを登録するキャッシュウェイの属性を指定することを特徴とする付記１に記載の演算処理装置。
【０１７０】
（付記１５）
前記拡張レジスタに書き込む情報をオペコードの即値として持つ、前記拡張レジスタに書き込む命令が登録されていることを特徴とする付記１に記載の演算処理装置。
【０１７１】
（付記１６）
固定小数点レジスタを用いて前記拡張レジスタに書き込む情報を生成する、前記拡張レジスタに書き込む命令が登録されていることを特徴とする付記１に記載の演算処理装置。
【０１７２】
（付記１７）
前記命令拡張情報によって、前記後続の命令が命令の種類によって拡張できないときに、拡張できなかった命令の処理時に拡張違反例外トラップを起こすトラップ遷移制御部を更に備えることを特徴とする請求項１に記載の演算処理装置。
【０１７３】
（付記１８）
前記拡張違反例外トラップが、定義外命令実行時に生じるによるトラップよりもトラップの優先度が低いことを特徴とする付記１７に記載の演算処理装置。
【０１７４】
（付記１９）
前記拡張レジスタに有効な前記命令拡張情報が格納されているときに、当該命令拡張情報によって拡張されない命令が定義されていることを特徴とする付記１に記載の演算処理装置（図２３）
（付記２０）
命令が固定長の演算処理装置における命令の拡張方法において
命令の拡張を示す命令拡張情報が設定可能な拡張レジスタに命令拡張情報が設定し、
前記拡張レジスタに前記命令拡張情報を書き込む命令の後続の命令を前記命令拡張情報により拡張して実行する
ことを特徴とする命令の拡張方法。
【図面の簡単な説明】
【０１７５】
【図１】本実施形態の演算処理装置を示す図である。
【図２】本実施形態の演算処理装置の浮動小数点レジスタの構成を示す図である。
【図３】本実施形態の演算処理装置の固定小数点レジスタの構成を示す図である。
【図４】ＸＡＲレジスタの構成を示す図である。
【図５】ＸＡＲレジスタによる命令拡張の例を示す図である。
【図６】ＸＡＲレジスタにデータをセットした次の命令で倍精度浮動小数点ロード命令を実行した場合を例として示す図である。
【図７】ＳＸＡＲ１命令のフィールドを示す図である。
【図８】ＳＸＡＲ２命令のフィールドを示す図である。
【図９】ＳＸＡＲ２命令を用いた推奨される命令生成の例を示す図である。
【図１０】拡張命令を用いるのにモード切り替えを行う例を示す図である。
【図１１】図１０と同じ処理を本実施形態の演算処理装置が実行した場合を示す図である。
【図１２】ＳＸＡＲ２命令時の動作例を示す図である。
【図１３】非ＳＩＭＤ命令とＳＩＭＤ命令を実行する演算器のブロック図である。
【図１４】ＴＸＡＲの構成を示す図である。
【図１５】トラップ時のスタックＴＸＡＲとＸＡＲレジスタの関係を示す。
【図１６】ＳＸＡＲ２命令によって拡張された命令が実行されているときにトラップが発生したときのＸＡＲレジスタ及びスタックＴＸＡＲの動きの例を示す図である。
【図１７】拡張例外トラップ処理の概念を示す図である。
【図１８】ＸＡＳＲレジスタの構成を示す図である。
【図１９】ＳＸＡＲ命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。
【図２０】Ｗｒｉｔｅ−ＸＡＲ命令によって命令拡張を行う場合の命令拡張のタイミングを示す図である。
【図２１】ソフトウエアエミュレーションの定義外命令例外ルーチンの動作を示すフローチャートである。
【図２２】一般的なデバッガによる処理を示す図である。
【図２３】本実施形態の演算処理装置で命令拡張が行われた命令に対するデバッガ処理を示す図である。
【符号の説明】
【０１７６】
１      ＸＡＲレジスタ
２      Ｄ＿ＸＡＲレジスタ
３      ＸＡＲ更新用バッファ
４      命令デコード
５      実行演算部
６      レジスタ
７      命令キャッシュ
８      データキャッシュ
９      ２次キャッシュ
３１      拡張例外検出部
３２      トラップ遷移制御部
１００    演算処理装置
【図１】
0005217431.tif 000002
【図４】
0005217431.tif 000003
【図５】
0005217431.tif 000004
【図６】
0005217431.tif 000005
【図７】
0005217431.tif 000006
【図８】
0005217431.tif 000007
【図９】
0005217431.tif 000008
【図１０】
0005217431.tif 000009
【図１１】
0005217431.tif 000010
【図１２】
0005217431.tif 000011
【図１３】
0005217431.tif 000012
【図１４】
0005217431.tif 000013
【図１５】
0005217431.tif 000014
【図１６】
0005217431.tif 000015
【図１７】
0005217431.tif 000016
【図１８】
0005217431.tif 000017
【図１９】
0005217431.tif 000018
【図２０】
0005217431.tif 000019
【図２１】
0005217431.tif 000020
【図２２】
0005217431.tif 000021
【図２３】
0005217431.tif 000022
【図２】
0005217431.tif 000023
【図３】
0005217431.tif 000024