(57)【特許請求の範囲】
【請求項１】
複数の作業用レジスタをもつストアドプログラム方式のデー  タ処理装置であって、命令操作コードと、前記作業用レジスタのうちの１つを明示的に指定するための標準ビット数のレジスタ番号と、標準ビット数よりも少ないビット数からなるレジスタ指定コードとを含む命令語を取り込む命令フェッチ手段と、前記レジスタ指定コードを標準ビット数のレジスタ番号に変換するレジスタ指定コード変換手段とを、備えることを特徴とするデータ処理装置。
【請求項２】
前記レジスタ指定コード変換手段は、前記データ処理装置の状態によらず固定的なコード変換を行なうことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記レジスタ指定コード変換手段は、変換テーブルを備え、前記データ処理装置の命令実行時に変換テーブルの内容の一部あるいは全部を更新する変換テーブル更新手段を備えることを特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記変換テーブル更新手段は、命令操作コードを識別し、変換テーブルを更新するための特殊な命令の実行時に前記変換テーブルを更新することを特徴とする請求項３記載のデータ処理装置。
【請求項５】
前記変換テーブル更新手段は、命令操作コードを識別し、通常の演算命令の実行時に、前記演算命令に含まれるレジスタ指定コードの値を用いて、変換テーブルを更新することを特徴とする請求項３記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、複数の作業用レジスタを持つデータ処理装置に関する。
【０００２】
【従来の技術】
汎用レジスタと呼ばれる複数の作業用レジスタを持つデータ処理装置は、１つの命令で指定できるレジスタオペランドの数によって特徴付けることが出来る。
例えば、従来のＲＩＳＣと呼ばれるアーキテクチャでは、典型的な演算命令において３つのレジスタを指定することが出来る。この３つのレジスタは加算命令においては、加算のための２つの値を獲得する２つのソースレジスタと結果を格納するためのディスティネーションレジスタとして用いられる。この方式を３レジスタオペランド方式と呼ぶこととする。
【０００３】
具体的には、Ｄａｖｉｄ  Ａ．  Ｐａｔｔｅｒｓｏｎ，  Ｊｏｈｎ  Ｌ．Ｈｅｎｎｅｓｓｙ「コンピュータアーキテ  クチャ−設計・実現・評価の定量的アプローチ」（日経ＢＰ社、１９９２年１２月発行）に記載されているＭＩＰＳアーキテクチャのレジスタ間演算命令の命令フォーマットを図２に示す。ＭＩＰＳアーキテクチャにおいては命令語は３２ビット固定長で、レジスタ間演算命令を構成する各フィールドは、ＭＳＢ側から、命令の種類を示す命令操作コード（２０１）、演算で用いる第１のソースオペランド  となるレジスタを示す第１ソースレジスタ番号（２０２）、演算で用いる第２のソー  スオペランドとなるレジスタを示す第２ソースレジスタ番号（２０３）、演算結果の  格納先となるレジスタを示すディスティネーションレジスタ番号（２０４）、一部の  命令で必要となる小さな定数を示す短定数（２０５）、一部の命令で必要となる命令  操作コードの拡張である拡張命令操作コード（２０６）である。なお、図中で各フィ  ールドの名称の後に括弧つきで示した数値はそのフィールドのビット数である。
【０００４】
別の従来例として、近年のＣｏｌｄ    ＲＩＳＣと呼ばれるアーキテクチャではコードサイズを削減し、プログラム領域の圧縮を計るために短い命令長の命令を基本とするアーキテクチャが採用されている。例えば、日立シングルチップＲＩＳＣマイコンＳＨ７０００シリーズのアーキテクチャのレジスタ間演算命令の命令フォーマットを図３に示す。ＳＨ７０００アーキテクチャでは、命令語は１６ビット固定長で、レジスタ間演算命令を構成する各フィールドはＭＳＢ側から、命令の種類を示すための第１命令操作コード（３０１）、演算で用いる第２のソース  オペランドとなるレジスタを示すソースレジスタ番号（３０２）、演算結果の格納先  であり、かつ、演算で用いる第１のソースオペランドともなるレジスタを示すディスティネーションレジスタ番号（３０３）、第１命令操作コードと併せて命令の種  類を示す第２命令操作コード（３０４）である。ここで、２項演算で必要なソースオ  ペランドの一方はディスティネーションレジスタから取り出される点が前記ＭＩＰＳアーキテクチャに類するアーキテクチャと大きく異なる点である。このような方式を２レジスタオペランド方式と呼ぶこととする。
【０００５】
近年の、命令をパイプライン的にオーバーラップして処理する方式を用いたプロセッサは、例えば図５のような構成をとることができる。
図５において、命令フェッチ機構（４０１）は、次に実行すべき命令を命令キャッ  シュ（４０６）から受けとり、得られた命令語を命令デコード機構（４０２）に渡す。この命令は次のような手順で処理される。
【０００６】
まず、命令デコード機構では命令語を命令の種類にしたがってフィールドに分割し、処理すべき演算の種類を示す命令操作コード（４１１）、命令語内に埋め込ま  れた定数オペランドである即値（４１２）、第１ソースレジスタ番号（４１３）、第２ソースレジスタ番号（４１４）、ディスティネーションレジスタ番号（４１５）を抽出する。
次にレジスタファイル（４０３）から第１ソースレジスタ番号及び第２ソースレジ  スタ番号で指定されたレジスタの内容が読み出される。
【０００７】
命令操作コードが加減算などの演算命令を示していれば、読み出されたソースレジスタの内容と、命令操作コードとに従って、演算実行機構（４０４）で演算が行  なわれ、演算結果（４１８）はディスティネーションレジスタ番号で指定されたレジ  スタに格納される。
また、命令操作コードがメモリへのストア命令を示している場合には、演算実行機構によってデータメモリアドレス（４１６）が計算される。このデータメモリア  ドレスと書き込みデータ（４１７）を用いてデータキャッシュ（４０７）にデータが書き込まれる。
【０００８】
また、オペレーションがメモリからのロード命令を示している場合には、演算実行機構によって生成されるデータメモリアドレスを用いてデータキャッシュから内容を読み出し、読み出しデータ（４１９）がディスティネーションレジスタ番号  で指定されたレジスタに書き込まれる。
また、命令キャッシュあるいはデータキャッシュに目的とする命令語あるいはデータが存在しない場合は、外部メモリインターフェイス（４０８）を介して外部メ  モリとキャッシュとの間で命令語あるいはデータの転送が行なわれる。
【０００９】
【発明が解決しようとする課題】
３レジスタオペランド方式は、２レジスタオペランド方式に比べて同一の処理を行なうための実行命令数を小さくできるという特徴がある。これは２レジスタオペランド方式がソースオペランドが格納されているレジスタの１つを演算結果によって必ず上書きしてしまうことに起因する。レジスタに格納されている値が複数の命令によって必要とされる場合、一旦別のレジスタにその内容をコピーした上で演算を実行しなければならない場合が発生する。例えば、一般に、レジスタｒｓ１とレジスタｒｓ２の値を用いて２項演算ｏｐを実行し、その結果をレジスタｒｄに格納する機能を実現する場合を考える。３レジスタオペランド方式では１命令で上記機能を処理することができるのに対し、２レジスタオペランド方式ではこれを１命令で処理することはできない。２レジスタオペランド方式でこの機能を実現するためには、１．レジスタｒｓ１の値をレジスタｒｄにコピーする命令、２．レジスタｒｄの値とレジスタｒｓ２の値を用いて２項演算ｏｐを実行し、その結果をレジスタｒｄに格納する命令、の２命令を必要とする。
【００１０】
このように３レジスタオペランド方式は、命令数すなわちプログラムの実行サイクル数の削減に効果的である。しかし、従来の方式では個々の命令の命令語長が長くなってしまうため、プログラムサイズの削減という観点からは問題が多い。
特にＣｏｌｄ    ＲＩＳＣと呼ばれるアーキテクチャにおいては、例えばプログラムサイズの削減を計るために１６ビットの命令長を基本命令として採用した場合に１６ビット命令１命令で３つのレジスタをそのままオペランドとして指定するのは困難であった。すなわち、例えば１６本の汎用レジスタを持つ場合、３つのレジスタをオペランドとして指定するためには１２ｂｉｔのフィールドが必要であり、残り４ｂｉｔのフィールドに命令の種類や演算の種類を符号化して格納することは非常に困難である。
【００１１】
本発明の目的は、上述の問題点を解決することにあり、短い命令長で多くのレジスタオペランドを柔軟に指定することを可能にする命令構成方式及びレジスタ指定方式を提供することである。
【００１２】
【課題を解決するための手段】
前記目的を達成するために、本発明は、作業用レジスタのうちの１つのレジスタを明示的に指定するためのレジスタ指定フィールドを複数もつ命令において、そのうちの少なくとも１つのレジスタ指定フィールドが他のレジスタ指定フィールドよりもサイズの点で小さく構成される。即ち、本発明のデータ処理装置は、２のｎ乗個のレジスタを備え、ｎビット幅のレジスタ指定フィールドと、ｎビットよりも小さい幅であるｍビット幅のレジスタ指定フィールドを備える命令を実行する。ｍビット幅のレジスタ指定フィールドに格納されているレジスタ指定コードによって直接選択することのできるレジスタの個数は高々２のｍ乗個であり、２のｎ乗個のレジスタの部分集合となる。このため、本発明のデータ処理装置は前記ｍビット幅のレジスタ指定コードをビット幅のレジスタ番号に拡張する機能を持つレジスタ指定コード変換手段を備える。
【００１３】
また、本発明のデータ処理装置においては、前記コード変換手段が、同じ入力に対しては常に同じ出力を生成するような固定的なコード変換を行なう。
また、本発明のデータ処理装置は、前記ｎビット長レジスタ指定コードを２のｍ乗個記憶する変換テーブルを備え、これら２のｍ乗個の値のうちの１つを前記ｍビット長のレジスタ指定コードに従って選択して出力するようにコード変換手段が構成される。さらに、データ処理装置の命令の実行によって前記変換テーブルの内容の一部あるいは全部が更新されるように前記変換テーブルが構成される。
【００１４】
また、本発明のデータ処理装置は、前記変換テーブルの内容を明示的に更新するための特殊な命令を実行するための機構を備える。
また、本発明のデータ処理装置においては、通常の演算命令の実行と同時に、暗黙のうちに前記変換テーブルの内容が更新される。
【００１５】
【発明の実施の形態】
本発明に特徴的であるのは、レジスタオペランドを指定するための命令フィールドのうち、少なくとも１つのフィールドは２のｎ乗個の汎用レジスタを指定することが出来るｎビット幅を持ち、また、少なくとも１つのフィールドはｎより小さいｍについて、２のｍ乗個のレジスタを指定することの出来るｍビット幅を持つことにある。
【００１６】
図４に本発明の一実施例であるデータ処理装置が実行するレジスタ間演算命令の命令フォーマットを示す。この例では、データ処理装置は１６個の汎用レジスタをもつ。レジスタ間演算命令を構成する各フィールドはＭＳＢ側から、命令操作コード（１０１）、第１のソースオペランドとなるレジスタを指定する２ｂｉｔ幅  の第１ソースレジスタ指定コード（１０２）、第２のソースオペランドとなるレジス  タを指定する４ｂｉｔ幅の第２ソースレジスタ番号（１０３）、演算結果の格納先と  なるレジスタを指定する４ｂｉｔ幅のディスティネーションレジスタ番号（１０４）である。
【００１７】
そこで、データ処理装置が命令実行時にｎ個あるレジスタのうちｍ個を選択する段を備えていれば前記の命令フォーマットにしたがった命令により、ｍ個のレジスタのうちから１つを選択することができるため、レジスタを一意に指定することが出来る。この、ｎ個あるレジスタのうちのｍ個をどのように選択するかの方式として次の４つの方式がある。
【００１８】
第１の方式は、静的に第１ソースレジスタとして指定できるレジスタの集合を固定してしまう方式である。すなわち、１６個のレジスタをｒ０からｒ１５とするとき、ｒ０からｒ３のみを第１ソースレジスタオペランドとして指定可能にするという方式である。
第２の方式は、動的にソース１レジスタとして指定できるレジスタの集合を管理する方式である。どのレジスタがソース１レジスタとして指定できるレジスタとして選択されているかを管理するための手段を設け、その選択状態を更新するための特殊な命令を命令セットに付加する方式である。具体的には、例えば、
２ｂｉｔの第１ソースレジスタ指定コード（ｒｓ１）によって指定される４通りの  レジスタ指定コードに対応するレジスタ番号を特定（ｓｅｔ）するために、ｓｅｔｒｓ１−０１命令及びｓｅｔｒｓ１−２３命令を用意する方式である。このデータ処理装置において、次のような命令列を実行すると、
【００１９】
【数１】
0003630804.tif 000002
【００２０】
次のｓｅｔｒｓ１−０１命令およびｓｅｔｒｓ１−２３命令の実行まで、第１ソースレジスタ指定コードが０のときはｒ１、１のときはｒ３、２のときはｒ８、３のときはｒ１５と設定される。
第３の方式は、第２の方式と同様に、動的に第１ソースレジスタとして指定できるレジスタの集合を管理する方式であるが、レジスタの選択状態を更新するための命令を設けるのでなく、通常の演算命令を実行すると自動的にこの状態が更新される方式である。これは、一旦命令で用いられたレジスタは、近傍の後の命令で再び用いられる可能性が高いという経験則に基づいている。どのように部分集合を更新するかについてはまた、種々の方式がある。
【００２１】
１つの方式は、仮にｍを２とするとき、４通りの第１ソースレジスタ指定コードの識別子としてＣＤ、ＰＤ、ＰＳ１、ＰＳ２を用いる方式である。ＣＤが「現在の命令で指定されているディスティネーションレジスタ（Ｃｕｒｒｅｎｔ  Ｄｅｓｔｉｎａｔｉｏｎ）」、ＰＤが「直前に実行された演算命令で指定されたディスティネーションレ  ジスタ（Ｐｒｅｖｉｏｕｓ  Ｄｅｓｔｉｎａｔｉｏｎ）」、ＰＳ１が「直前に実行された演算命令で指定された第１ソースレジスタ  （Ｐｒｅｖｉｏｕｓ  Ｓｏｕｒｃｅ  １）」、ＰＳ２が「直前に実行された演算命令で指定された第２ソースレジスタ（Ｐｒｅｖｉｏｕｓ  Ｓｏｕｒｃｅ  ２）」をそれぞれ  意味する。すなわち、命令列
【００２２】
【数２】
0003630804.tif 000003
【００２３】
を考える時、これは、３レジスタオペランド指定方式のアーキテクチャにおける命令列
【００２４】
【数３】
0003630804.tif 000004
【００２５】
と等価となる。ここで、前記命令の表記においては、オペランドの並びは、順にディスティネーション、ソース１、ソース２を示すものとする。
前記方式ではｍを２としたが、ｍが１の場合、例えばＣＤ及びＰＤの２通りに限定して同様の方式を用いることが出来る。また、ｍが３の場合、前記のレジスタ集合に加え、「現在の命令で指定されている第２ソースレジスタ」、「２つ前に実行した演算命令で指定されたディスティネーションレジスタ」、「２つ前に実行した演算命令で指定された第１ソースレジスタ」、「２つ前に実行した演算命令で指定された第２ソースレジスタ」、を指定できるように拡張することで同様の方式を用いることが出来る。
【００２６】
動的にレジスタ選択状態を管理する別の方式は、最近使用されたレジスタの集合をＬＲＵ方式で更新する方式である。これは、概念的には、長さ２のｍ乗のレジスタ指定コードのリストを管理し、最近使用されたレジスタを記憶しておく方法である。例えばｍ＝２として次のような命令列を考える。’；’以降に各命令終了直後の概念的なレジスタリストの内容を付記する。また、第１ソースレジスタ指定コードの識別子としてＬ１からＬ４を用い、リストの何番目のレジスタを指定するかを表すことにする。
【００２７】
【数４】
0003630804.tif 000005
【００２８】
上の命令列はは３レジスタオペランド指定方式におけるつぎの命令列と等価である。
【００２９】
【数５】
0003630804.tif 000006
【００３０】
この例では具体的な説明のためｍを２としたが、異なるｍの値について同様の方式を用いることが出来ることは明らかであろう。
次に、以上のような命令セットアーキテクチャを実際にハードウェアでどのように実現するかについて述べる。
これまでの説明によって明らかなように、本発明の特徴は短いビット長ｍで符号化された短縮レジスタ指定フィールドの値をｎビット長に静的あるいは動的に変換することにあり、この変換の方式に応じてハードウェアの構成が変化する。図１に本発明の各方式を実現するための命令デコーダの構成図の一例を示す。この図の例はｍ＝２、ｎ＝４を前提として構成されており、図４の命令フォーマットに対応したデコーダの構成となっている。
【００３１】
まず命令フェッチ機構から出力される命令語から第１段階命令デコード機構（５０１）によって命令操作コード（５１１）、第１ソースレジスタ指定コード（５１２）、第  二ソースレジスタ番号（５１３）、ディステネーションレジスタ番号（５１４）が抽出される。２ビットの第１ソースレジスタ指定コードは、本発明の指定コード変換手段として機能する前記第１ソースデコーダ（５０２）によって４ビットの第１ソースレ  ジスタ番号（５１５）に変換される。
【００３２】
図６には前記第１の方式を実現するための第１ソースデコーダの詳細な構成図を示す。命令コードから抽出されたデコード前の第１ソースレジスタ指定コードに従って、定数生成手段（６０１）から生成される４種類の定数のうちの１つを選択  する選択手段（６０２）を備え、その結果を第１ソースレジスタ番号とするものであ  る。
【００３３】
図７には前記第２の方式を実現するための第１ソースデコーダの詳細な構成図を示す。本構成では、４つのレジスタ番号記憶手段（７０１、７０２、７０３、７０４）と、第１ソースレジスタ指定コードに従って、これら４つのレジスタ番号記憶手段の内容のうち１つを選択するための選択手段（７０５）から構成される変換テーブルを備  える。さらに、命令操作コードに従ってｓｅｔｒｓ１−０１命令及びｓｅｔｒｓ１−２３命令の実行を制御するためのｓｅｔｒｓ１命令検出機構（７０６）を備える  。このうち第１・第２レジスタ番号記憶手段（７０１、７０２）については命令語のうちの第２ソースレジスタ番号フィールド及びディスティネーションレジスタ番号フィールドの値、及び、ｓｅｔｒｓ１−０１命令の実行時にアサートされる制御信号が入力されており、ｓｅｔｒｓ１−０１命令によってその内容が書き換えられる。第３・第４レジスタ番号記憶手段（７０３，７０４）については、ｓｅｔｒｓ１−２  ３命令の実行時にアサートされる制御信号が入力されており、ｓｅｔｒｓ１−２３命令によりその内容が書き換えられる。
【００３４】
図８には前記第３の方式を実現するための第１ソースデコーダの詳細な構成図を示す。本構成では３つのレジスタ番号記憶手段を備える。このうちの１つは、直前に実行した演算命令の第１ソースレジスタ番号を記憶しておくＰＳ１レジスタ番号記憶手段（８０１）であり、１つは直前に実行した演算命令の第２ソースレジ  スタ番号を記憶しておくＰＳ２レジスタ番号記憶手段（８０２）であり、１つは直前  に実行した演算命令のディスティネーションレジスタ番号を記憶しておくＰＤレジスタ番号記憶手段（８０３）である。また、前記３つのレジスタ指定コード記憶手  段の値と、現在実行中の命令語中のディスティネーションレジスタ番号（ＣＤ）とからなる４種類の値をデコード前のソース１レジスタ指定コードに従って選択する選択手段（８０４）を備える。ここで選択された値はレジスタファイルに送られると  ともにＰＳ１レジスタ番号記憶手段（８０１）に入力され、次の演算命令の第１レジ  スタ指定コードのデコードのために用いられる。さらに、３つのレジスタ指定コード記憶手段には、命令操作コードに従って演算命令の実行を検出する演算命令検出機構（８０５）より書き込み制御信号が入力されており、演算命令実行時にのみ  値が更新される。この値の更新は、選択手段を通して第１ソースレジスタ番号がレジスタファイルに送出された後に行なわれる。
【００３５】
【発明の効果】
以上の説明によって明らかなように、本発明は高機能命令をコンパクトな命令長で表現することを可能にしており、これによってプログラムサイズを圧縮できるという効果がある。さらに、プログラム実行時の命令転送レートを低減させることが出来るため、プログラムの実行速度を高速化するという効果も併せ持つ。
【図面の簡単な説明】
【図１】本発明のデータ処理装置の命令デコード機構の構成図の一例である。
【図２】従来のデータ処理装置であるＭＩＰＳアーキテクチャにおける、レジスタ間演算命令の命令フォーマットである。
【図３】従来のデータ処理装置であるＳＨアーキテクチャにおける、レジスタ間演算命令の命令フォーマットである。
【図４】本発明のデータ処理装置における、レジスタ間演算命令の命令フォーマットである。
【図５】本発明のデータ処理装置の全体構成図である。
【図６】図１の第１ソースデコーダの詳細な構成図である。
【図７】図１の第１ソースデコーダの詳細な構成図である。
【図８】図１の第１ソースデコーダの詳細な構成図である。
【符号の説明】
４０１    命令フェッチ機構
５０２    第１ソースデコーダ
１０２    第１レジスタ指定コード
【図１】
0003630804.tif 000007
【図２】
0003630804.tif 000008
【図３】
0003630804.tif 000009
【図４】
0003630804.tif 000010
【図５】
0003630804.tif 000011
【図６】
0003630804.tif 000012
【図７】
0003630804.tif 000013
【図８】
0003630804.tif 000014