(57)【特許請求の範囲】
【請求項１】
各々のエントリにデータが書き込まれるようになっているデータ・ファイルと、
各々のエントリに該データ・ファイルのエントリのアドレスが書き込まれるようになっている前進マッピング・ファイル及び完了マッピング・ファイルと、
各々のエントリに該前進マッピング・ファイルの状態変更の内容が書き込めるようになっている状態変更キューと、
それぞれ該状態変更キューの個々のエントリに対応して設けられたオペレーション群の実行状態を保持する状態保持手段群と、
発行済のオペレーションをout-of-orderで処理する手段を具備し、
該前進マッピング・ファイルの内容変更、その変更の内容の該状態変更キューへの書き込み、及び該前進マッピング・ファイルの該内容変更と組み合わさったオペレーション群の発行を各々１サイクルで行うようになっており、
発行済のオペレーションの各々はout-of-orderで実行され、正常終了すると、これに応じて該状態保持手段群の対応する部分が書き換えられるようになっており、
該状態変更キューの先頭のエントリの内容で示される該前進マッピング・ファイルの内容変更と組み合わさったオペレーション群に含まれるオペレーションが全て正常終了したことが対応する状態保持手段によって示された後に、該状態変更キューの該先頭のエントリの該内容に基づき該完了マッピング・ファイルの内容変更を行い、該状態変更キューから該先頭のエントリを除外するようになっている計算機システム。
【請求項２】
該前進マッピング・ファイル及び該完了マッピング・ファイルがスタックの内容を該スタックの先頭からエントリ・アドレス順に保持するようになっている請求項１記載の計算機システム。
【請求項３】
該前進／完了マッピング・ファイルをアクセスするのに、エントリ・アドレスを示すようになっている請求項１記載の計算機システム。
【発明の詳細な説明】
技術分野
本発明は、高度の命令レベル並列性を実現することにより高性能化の可能な新規な構成の計算機方式に関するものである。
背景技術
従来、汎用の計算機として実用化されてきた計算機方式は、スタック・マシンとレジスタ・ベースのマシンの２つに大きく分けることができる。スタック・マシンは、プログラムのコード・サイズが小さくてすみ、高速な割り込み処理やコンテキスト・スイッチングに優れているが、高速化が困難であった。他方、レジスタ・ベースのマシンは比較的高速化が容易であるが、その他の面ではスタック・マシンに劣る点が多い。
スタック・マシンとレジスタ・ベースのマシンは、互いにプログラムの互換性が無く、また上述のように、いずれかが絶対的に優れているというものではない。
本発明の目的は、スタック・マシンの命令形式ともレジスタ・ベースのマシンの命令形式とも親和性があり、かつ、高性能化の可能な計算機方式を実現することにある。
発明の開示
本発明による計算機方式は、基本的にout-of-order実行の可能なスーパースカラ・アーキテクチャと同様なものであるが、ビット長の長い命令フォーマットを採用し、その中にオペレーション群の内容及び仮想のオペランド・スタックあるいは論理レジスタ群の状態変更の内容を記述するようになっている。
本発明による計算機システムは、各々のエントリにデータが書き込まれるようになっているデータ・ファイルと、各々のエントリにデータ・ファイルのエントリのアドレスが書き込まれるようになっている前進マッピング・ファイル及び完了マッピング・ファイルと、各々のエントリに個々の命令によるマッピング・ファイルの状態変更の内容が書き込まれるようになっている状態変更キューと、それぞれ状態変更キューの個々のエントリに対応して設けられたオペレーション群の実行状態を保持する状態保持手段群と、発行済のオペレーションをout-of-orderで処理する手段とを具備する。上記発行済のオペレーションをout-of-orderで処理する手段は様々な構成のものが考えられるが、基本的には、発行済のオペレーションの内容を保持するバッファであるオペレーション・ウインドウ、オペレーションを実行する機能ユニット群等によって実現される。
本発明の計算機システムは、１サイクル当り１命令を発行して、前進マッピング・ファイルの内容変更、その変更の内容の状態変更キューへの書き込み、及びオペレーション群の発行（オペレーション・ウインドウへの書き込み）を行うようになっている。結果データを生ずるオペレーションの発行の場合、結果データを保持すべくデータ・ファイルのエントリが新たに割り付けられ、これがデスティネーション・レジスタとなる。また、発行される各オペレーションにおいて、ソース・レジスタとなるのは、アドレスが前進マッピング・ファイルをアクセスして得られるデータ・ファイルのエントリ、あるいは、同じ命令に含まれるオペレーションにおいてデスティネーション・レジスタとして割り付けられるデータ・ファイルのエントリである。
発行済のオペレーションは各々out-of-orderでいずれかの機能ユニットによって実行され、正常終了すると、これに応じて上記状態保持手段群の対応する部分が書き換えられるようになっている。
状態変更キューの先頭のエントリの内容と同じ命令の発行に基づくオペレーションが全て正常終了したことが対応する状態保持手段によって示された後に、状態変更キューの先頭のエントリの内容に基づき、その命令が発行された際の前進マッピング・ファイルの内容変更を再現すべく、完了マッピング・ファイルの内容変更を行い、状態変更キューから上記先頭のエントリを除外するようになっている。
本発明による計算機システムは、スタック・モードとレジスタ・モードの２つのモードで動作することができる。スタック・ベースのプロセッサの機械語で記述されたプログラムを本発明の計算機システムの命令形式に変換して実行する場合に、スタック・モードとなる。他方、RISCあるいはCISCのレジスタ・ベースのプロセッサの機械語で記述されたプログラムを本発明の計算機システムの命令形式に変換して実行する場合に、レジスタ・モードとなる。スタック・マシンあるいはレジスタ・マシンの複数の命令を、本発明の計算機システムにおける１つの命令に簡単に変換できるので、広範なプログラムを高速処理できる。
スタック・モードにおいては、マッピング・ファイルは、一種のスタックの内容を保持すべく用いられる。従来のスタックマシンにおいて、オペランド・スタックが...，word3, word2, word1（右端がスタックトップ）となっている状態は、本発明による計算機システムにおいて、マッピング・ファイルに保持される内容がエントリ・アドレス順にａ，ｂ，ｃ，...であれば、データ・ファイルにおいてエントリ・アドレスがａ，ｂ，ｃ，...である各エントリに、それぞれword1, word2, word3, ...が保持されている状態に対応する。
レジスタ・モードにおいては、マッピング・ファイルは、レジスタ・ベースのスーパースカラ・プロセッサにおけるレジスタ・マッピング・テーブルと同等なものとして用いられる。
本発明は、同様の趣旨に基づく出願（国際出願番号PCT/JP01/07442）において開示された発明に改良を加えたものである。その主な改良点は、▲１▼状態変更キューの個々のエントリに対応してオペレーション群の実行状態を保持する状態保持手段を設けたこと、及び▲２▼スタック・モードにおいてマッピング・ファイルがスタックの内容をその先頭からエントリ・アドレス順に保持するようにしたこと、である。
【図面の簡単な説明】
第１図は、本発明にかかる好ましい計算機システムの基本構成を示したブロック図である。
第２図は、本発明にかかる好ましい計算機システムの命令フォーマットを示した概念図である。
第３図は、スタック・モードにおける、前進マッピング・ファイル、完了マッピング・ファイル、及び後述する２つのボトム・ポインタの関係を示した説明図である。
第４図は、データ・ファイルのエントリの構成を示した説明図である。
第５図は、後述するオペレーション・キューのエントリの構成を示した説明図である。
第６図は、状態変更キューのエントリの構成を示した説明図である。
第７図は、フリー・リストの内部構成を示した説明図である。
第８図〜第１４図は、スタック・モードの一動作例における７時点の、前進マッピング・ファイル、完了マッピング・ファイル、状態変更キュー、オペレーション・キュー、データ・ファイル、及びフリー・リストの内容を具体的に示した説明図である。
第１５図〜第２１図は、レジスタ・モードの一動作例における７時点の、前進マッピング・ファイル、完了マッピング・ファイル、状態変更キュー、オペレーション・キュー、データ・ファイル、及びフリー・リストの内容を具体的に示した説明図である。
発明を実施するための最良の形態
以下に、本発明にかかる好ましい計算機システムについて説明する。
（１）基本構成
まず、本実施例の計算機システムの基本的な構成について説明する。
第１図は計算機システムのブロック図であって、１０は命令キャッシュ、１１はデータ・キャッシュ、１２はデータ・バッファ、２０は命令フェッチ・ユニット、２１は命令発行ユニット、３ａは前進マッピング・ファイル、３ｃは完了マッピング・ファイル、４は状態変更キュー、５はオペレーション・キュー、６はデータ・ファイル、７はフリー・リスト、８０及び８１は各々演算ユニット０及び１、８２は分岐ユニット、８３はロード／ストア・ユニットを表している。
本発明の計算機システムにおいて状態変更キューの個々のエントリに対応して設ける必要があるオペレーション群の実行状態を保持する状態保持手段は、本実施例においては、後述する４つのオペレーション・ステータス・フィールドによって実現している。
本発明の計算機システムは、発行済のオペレーションの内容を保持するバッファであるオペレーション・ウインドウを具備する必要がある。オペレーション・ウインドウを実現するには、基本的に集中型と分散型の２通りの方法があるが、本実施例の計算機システムは集中型のオペレーション・キューを備えるものとしている。
本発明による計算機システムは、スタック・モードとレジスタ・モードの２つのモードで動作することができる。スタック・ベースのプロセッサの機械語で記述されたプログラムを本発明の計算機システムの命令形式に変換して実行する場合に、スタック・モードとなる。他方、RISCあるいはCISCのレジスタ・ベースのプロセッサの機械語で記述されたプログラムを本発明の計算機システムの命令形式に変換して実行する場合に、レジスタ・モードとなる。
本発明の計算機システムの具備するマッピング・ファイルは、各々のエントリにデータ・ファイルのエントリのアドレスが書き込まれるような構成となっており、レジスタ・モードにおいては、レジスタ・ベースのout-of-order実行の可能なスーパースカラ・プロセッサにおけるレジスタ・マッピング・テーブルと同様に機能する。本発明において、マッピング・ファイルは、スタック・モードにおいても同等な機能を有するものである。
（２）命令形式
第２図は本発明実施例の計算機システムの命令フォーマットを示す概念図であって、スタック・モードにおいてもレジスタ・モードにおいても、個々の命令のフォーマットは、基本的に、フォーマット情報フィールド１０１、オペレーション・フィールド１０２及び状態変更フィールド１０３からなる。
フォーマット情報フィールド（FIフィールド）では、当該命令の長さや、その命令が含むオペレーションの数などに関する情報が示される。
オペレーション・フィールド（Opフィールド）には、算術論理演算や分岐、ロード／ストアなどからなるオペレーション群の内容が示される。本実施例においては、個々のオペレーションは、RISCプロセッサにおける命令と同様な形式で記述される。本実施例においては、１つの命令は最大４つまでのオペレーションを含むものとする（分岐オペレーションが含まれるような場合には、あえて１命令に４つのオペレーションを含める必要はない）。
状態変更フィールド（SMフィールド）では、マッピング・ファイルの内容の変更について示される。即ち、スタック・モードにおいては仮想のオペランド・スタック、レジスタ・モードにおいては仮想の論理レジスタ群の状態変更の内容が示される。後述するように、状態変更フィールド内部のフォーマットは、スタック・モードとレジスタ・モードで異なる。
結果データを生ずるオペレーションの発行の場合、結果データを保持すべくデータ・ファイルのエントリが割り付けられるが、そのエントリの論理的な位置づけは、SMフィールドの内容によって示されることになる。
本実施例の計算機システムは、１サイクル当たり上記の形式の１命令を発行できるものである。
（２−１）スタック・モードにおける命令形式
以下に、スタック・モードにおける命令形式について説明する。
本実施例の計算機システムにおけるデータ・ファイルの各エントリが、仮想のスタック・マシンのオペランド・スタックの１エントリの保持するデータを保持できるものとする。本実施例においては、マッピング・ファイルのアドレス0, 1, 2, ...のエントリの内容をそれぞれs0, s1, s2, ...とおくとき、エントリ・アドレスがs0, s1, s2, ...であるデータ・ファイルの各エントリにそれぞれ保持されるべきデータを順に並べることによって、仮想のスタック・マシンのオペランド・スタックの内容（s0がスタックトップに対応）が構成されるべきものとする。
例えば、A*X+B/Xを計算し、その結果を変数Yとしてメモリにストアするプログラムは、スタック・マシンにおいては、次のように書ける。
0003706384.tif 000002
ここで、変数A, B, X, Yの格納域を、それぞれローカル変数1, 2, 4, 5としている。
上記プログラムがどのように本実施例の計算機システムにおけるスタック・モードの命令に変換されるかを説明する。
上記プログラムを２つの命令群に分割して、個々の命令について、オペレーションの内容とマッピング・ファイルに加えられる変更の内容を分けて書くと、次のようになる。
0003706384.tif 000003
ここで、結果データを保持すべく新たに割り付けられるデータ・ファイルのエントリのアドレスを、各々の命令群において順にf1, f2, ...とおいている。本実施例においては、f1, f2, ...の各々は、各サイクルにおいてフリー・リストから取り出されるものに対応する。
また、マッピング・ファイルに加えられる変更に関しては、スタックが何エントリ分成長するかという量と、スタックトップ近傍に加えられる変更内容（右端がスタックトップに対応）を示している。
命令1aの意味は、ローカル変数<4>のデータをロードしf1に対応するデータ・ファイルのエントリに書き込み、その要素がマッピング・ファイルに保持されるスタックを１エントリ分成長させ、新たにスタックトップとなるエントリの内容をf1に対応するデータ・ファイルのエントリのアドレスとする、というものである。命令1bの意味は、f1に対応するデータ・ファイルのエントリのデータに０を加え、その結果データをf2に対応するデータ・ファイルのエントリに書き込み、その要素がマッピング・ファイルに保持されるスタックを１エントリ分成長させ、新たにスタックトップとなるエントリの内容をf2に対応するデータ・ファイルのエントリのアドレスとする、というものであるが、マッピング・ファイルに加えられる変更については、命令1aによる変更内容も含めて記述している。その他の命令も同様である。
２つの命令群の各々について、その内容をまとめて、オペレーションとマッピング・ファイルの内容の変更に分けて記述すれば次のようになる。
0003706384.tif 000004
これが、上記プログラムを本発明実施例の計算機システムのスタック・モードの命令形式に変換した場合の、２命令の各々の0pフィールドとSMフィールドの内容である。このように、スタック・モードの命令形式では、SMフィールドにおいて、スタックの成長量と共に、更新後のスタックトップ近傍の内容を表す符号の系列が示されるようになっている。
（２−２）レジスタ・モードにおける命令形式
次に、レジスタ・モードにおける命令形式について説明する。
本実施例の計算機システムにおけるデータ・ファイルの各エントリが、仮想のレジスタ・マシンの１レジスタの保持するデータを保持できるものとする。本実施例においては、マッピング・ファイルのアドレス0, 1, 2, ...のエントリの内容をそれぞれr0, r1, r2, ...とおくとき、エントリ・アドレスがr0, r1, r2, ...であるデータ・ファイルの各エントリに、それぞれ仮想のレジスタ・マシンのレジスタR0, R1, R2, ...のデータが保持されるべきものとする。
例えば、メモリから変数A, B, Xのデータをレジスタ群にロードして、(A*X+B/X)*2を計算し、その結果を変数Yとしてメモリにストアするプログラムは、レジスタ・マシンにおいては、次のように書ける。
0003706384.tif 000005
ここで、変数A, B, X, Yのメモリにおける格納域のアドレスを、R0の中身にそれぞれ100, 200, 400, 500を加えたものとしている。
上記プログラムがどのように本実施例の計算機システムにおけるレジスタ・モードの命令に変換されるかを説明する。
上記プログラムを４命令ずつから成るグループに分割して、個々の命令について、オペレーションの内容とマッピング・ファイルに加えられる変更の内容を分けて書くと、次のようになる。
0003706384.tif 000006
ここで、スタック・モードの場合と同様に、結果データを保持すべく新たに割り付けられるデータ・ファイルのエントリのアドレスを、各々の命令群において順にf1, f2, ...とおいている。
命令1aの意味は、（r0に対応するデータ・ファイルのエントリのデータ＋100）番地のデータをロードしf1に対応するデータ・ファイルのエントリに書き込み、マッピング・ファイルのアドレス１のエントリの内容をf1に対応するデータ・ファイルのエントリのアドレスに置き換える、というものである。命令1cの意味は、f1及びf2に各々対応するデータ・ファイルのエントリのデータを掛け合わせ、その結果データをf3に対応するデータ・ファイルのエントリに書き込み、マッピング・ファイルのアドレス５のエントリの内容をf3に対応するデータ・ファイルのエントリのアドレスに置き換える、というものである。その他の命令も同様である。
２つの命令群の各々について、４命令の内容をまとめて、オペレーションとマッピング・ファイルの内容の変更に分けて記述すれば次のようになる。
0003706384.tif 000007
これが、上記プログラムを本発明実施例の計算機システムのレジスタ・モードの命令形式に変換した場合の、２命令の各々の0pフィールドとSMフィールドの内容である。この２番目の命令に変換する際に、マッピング・ファイルのアドレス５のエントリの内容の置き換えが２つあるが、SMフィールドの内容としては最後のものだけが残されている。このように、レジスタ・モードの命令形式では、SMフィールドにおいて、内容を変更すべきマッピング・ファイルのエントリのアドレスと個々の変更内容を示す符号の組が列挙されるようになっている。
ＶＬＩＷ（very long instruction word）アーキテクチャに基づく個々の命令も、容易に本発明の計算機システムのレジスタ・モードの命令形式に変換することができる。
（３）スタック・モード
（３−１）スタック・モードにおける動作に必要な機能と構成
ここでは、本実施例の計算機システムの各構成要素ごとに、スタック・モードの動作において利用される機能と構成について説明する。これらは、一部を除き、レジスタ・モードにおいても必要とされる機能と構成である。
（Ａ）命令フェッチ・ユニット
命令フェッチ・ユニットは、図示してないプログラムカウンタを具備しており、命令キャッシュから命令をフェッチし、命令発行ユニットに渡すようになっている。分岐の予測や分岐の実行も担う。
（Ｂ）命令発行ユニット
命令発行ユニットは、命令フェッチ・ユニットから渡された命令の発行のために、その内容に基づき前進マッピング・ファイルやデータ・ファイルの操作、オペレーション・キューと状態変更キューへの書き込みを行うための各種信号を発生するようになっている。
（Ｃ）マッピング・ファイル
マッピング・ファイルは、各々のエントリにデータ・ファイルのエントリのアドレスが書き込まれるような構成となっている。
本発明実施例の計算機システムのスタック・モードにおいては、マッピング・ファイル及びデータ・ファイルによって、スタック・マシンに具備されるべきスタックの最上位の部分が仮想的に構成されるようになっている。即ち、スタック・モードにおいては、マッピング・ファイルは、一種のスタックの内容を保持すべく用いられる。従来のスタックマシンにおいて、オペランド・スタックが..., word3, word2, word1（右端がスタックトップ）となっている状態は、本発明による計算機システムにおいて、マッピング・ファイルのアドレス0, 1, 2, ...のエントリの内容がそれぞれａ，ｂ，ｃ，...であれば、データ・ファイルにおいてエントリ・アドレスがａ，ｂ，ｃ，...である各エントリに、それぞれword1, word2, word3, ...が保持されている状態に対応する。オペランド・スタックの規模が大きくなると、残りの部分はデータ・バッファさらにはデータ・キャッシュに格納されるようになっている。
本発明の計算機システムは、前進マッピング・ファイル（ＡＭＦ;Advanced Mapping File）と完了マッピング・ファイル（ＣＭＦ;Completed Mapping File）の２つの同形のマッピング・ファイルを具備する。
本発明の計算機システムにおいては、命令が発行されるごとに、その命令の内容に応じてＡＭＦの内容を変更する。すなわち、ＡＭＦは発行済みの全ての命令の内容を反映している。
他方、ＣＭＦは、プログラム上の順番で完了済みの全ての命令の内容を反映するものである。本発明の計算機システムは発行済みの命令に含まれるオペレーションのout-of-order実行を可能とするものであるが、ＣＭＦは、正確な例外処理を保証するため、in-orderで完了済の全ての命令に基づく状態を構成するために存在するものである。
各マッピング・ファイルごとにスタックの要素を保持する最下位のエントリを示すボトム・ポインタと呼ぶレジスタが存在する。初期状態あるいはマッピング・ファイルが空の場合には、ボトム・ポインタの値は−１であるものとする。
第３図は、本実施例の計算機システムにおける、２組のマッピング・ファイルとボトム・ポインタの関係を示す説明図である。２つのマッピング・ファイルＡＭＦ３ａ及びＣＭＦ３ｃは同数のエントリを有し、各マッピング・ファイルで各々のエントリに上から順に0, 1, 2, ...とアドレスが付けられている。斜線が施されていないＡＭＦ／ＣＭＦのエントリは、スタックの構成要素としてデータ・ファイルのエントリのアドレスを保持しているものとする。第３図に示すように、ＡＭＦ及びＣＭＦの各々に対して設けられたボトム・ポインタを、それぞれＢａ及びＢｃと名付けている。
（Ｄ）データ・ファイル（ＤＦ;Data File）
データ・ファイル（ＤＦ）は、各々のエントリに１語分のデータが書き込まれるような構成となっている。
本実施例においては、ＤＦのエントリにはp00, p01, p02, ...のようにアドレスが付けられているものとする。
第４図は、本実施例の計算機システムにおける、ＤＦ６の各々のエントリ６(i)の構成を示す説明図である。ここで、iはエントリのアドレスである。ＤＦ６の各々のエントリ６(i)はデータ・フィールド６１(i)、及び書込フラグ（ＷＦ;Write Flag）フィールド６２(i)から成っている。
実際のＤＦのハードウェア上の構成は、上述の各フィールド別に設けられたレジスタ・ファイルの集合体である。
ＤＦの各々のエントリのデータ・フィールドは、１語分のデータが書き込まれるようになっている。
ＤＦの各々のエントリにおいて、ＷＦフィールドは、データ・フィールドにデータの書き込みが完了していれば１、完了していなければ０が書き込まれているようになっている。
（Ｅ）オペレーション・キュー（ＯＱ:Operation Queue）
オペレーション・キュー（ＯＱ）は、未完了の発行済命令に含まれるオペレーションの内容を保持するバッファであり、循環型のＦＩＦＯキューの構成となっている。
第５図は、本実施例の計算機システムにおける、ＯＱ５の各々のエントリ５(i)の構成を示す説明図である。ここで、iはエントリのアドレスである。ＯＱ５の各々のエントリ５(i)はオペレーション・フィールド５０(i)、デスティネーション・フィールド５１(i)、オペランド・フィールド５２(i)、第１ソース・フィールド５３(i)、第１ソース書込フラグ（ＳＷＦ１）フィールド５４(i)、第２ソース・フィールド５５(i)、第２ソース書込フラグ（ＳＷＦ２）フィールド５６(i)、リポート・フィールド５７(i)、及びディスパッチ・フラグ・フィールド５８(i)から成っている。
ＯＱの各々のエントリのオペレーション・フィールドはオペレーション・コードが書き込まれるようになっている。
ＯＱの各々のエントリのデスティネーション・フィールドは、結果データを生ずるオペレーションの場合に、その結果データを保持すべく割り付けられるＤＦのエントリのアドレスが書き込まれるようになっている。
ＯＱの各々のエントリのオペランド・フィールドは、命令の0pフィールド中にオペランド値が示されるようなオペレーションの場合に、そのオペランド値が書き込まれるようになっている。
ＯＱの各々のエントリの第１、第２ソース・フィールドの各々は、オペレーションのソース・データを保持すべく割り付けられているＤＦのエントリのアドレスが書き込まれるようになっている。
ＯＱの各々のエントリにおいて、第１、第２の各ＳＷＦフィールドは各々第１、第２ソース・フィールドに対応して設けられている。ＳＷＦ１／２フィールドは第１／２ソース・フィールドに示されるＤＦのエントリにデータの書き込みが完了していれば１、完了していなければ０が書き込まれているようになっている。
ＯＱの各々のエントリのリポート・フィールドは、そのオペレーションを含む命令に対応する状態変更キューのエントリのアドレスと識別番号（A, B, C, Dのうちのいずれか）が書き込まれるようになっている。
ＯＱの各々のエントリにおいて、ディスパッチ・フラグ・フィールドは、オペレーションがまだディスパッチされていなければ０、ディスパッチされていれば１が書き込まれているようになっている。
（Ｆ）状態変更キュー（ＳＭＱ;State Modification Queue）
状態変更キュー（ＳＭＱ）は、未完了の発行済命令の各々によるマッピング・ファイルの状態変更の内容を保持するバッファであり、循環型のＦＩＦＯキューの構成となっている。本実施例においては、ＳＭＱの各々のエントリは１つの命令に対応するものとなっている。
第６図は、本実施例の計算機システムにおける、ＳＭＱ４の各々のエントリ４(i)の構成を示す説明図である。ここで、iはエントリのアドレスである。ＳＭＱ４の各々のエントリ４(i)は状態変更（ＳＭ）フィールド４０(i)、オペレーション・ステータスＡ（ＯＳ＿Ａ）フィールド４１(i)、オペレーション・ステータスＢ（ＯＳ＿Ｂ）フィールド４２(i)、オペレーション・ステータスＣ（ＯＳ＿Ｃ）フィールド４３(i)、及びオペレーション・ステータスＤ（ＯＳ＿Ｄ）フィールド４４(i)から成っている。
実際のＳＭＱのハードウェア上の構成は、上述の各フィールド別に設けられたレジスタ・ファイルの集合体である。
ＳＭＱの各々のエントリのＳＭフィールドは、対応する命令のＳＭフィールドに示されたマッピング・ファイルの変更内容が書き込まれるようになっている。
ＳＭＱの各々のエントリにおいて、ＯＳ＿Ａ、ＯＳ＿Ｂ、ＯＳ＿Ｃ、ＯＳ＿Ｄの各フィールドは、各々対応するオペレーションの実行状態に関する情報が書き込まれているようになっている。本実施例においては、簡単のため、対応するオペレーションが存在しないか正常終了していれば１、その他の場合には０が書き込まれているものとする。
（Ｇ）データ・バッファ
データ・バッファは、各々のエントリに１語のデータが書き込まれるようになっている循環型のバッファである。
（Ｈ）機能ユニット
本実施例の計算機システムは、第１図に示すように、演算ユニット０及び１、分岐ユニット及びロード／ストア・ユニット（ＬＳＵ;Load Store Unit）の４つの機能ユニットを具備するものとしている。これらは、各々パイプライン処理が可能で、互いに独立に並行して動作するものである。
スタック・モードにおいては、ＬＳＵはデータ・バッファ及びデータ・キャッシュにアクセスすることができるようになっている。
本発明実施例の計算機システムのスタック・モードにおいては、マッピング・ファイル及びデータ・ファイル（ＤＦ）によって、スタック・マシンに具備されるべきスタックの最上位の部分が仮想的に構成されるが、その下の部分がデータ・バッファ、さらにその下の部分がデータ・キャッシュに格納されるようになっている。ＬＳＵはデータ・バッファに高速にアクセスできるようになっており、アクセスすべき変数データがデータ・バッファに保持されている割合が大きいほど、より効率的な計算が可能となる。また、データ・バッファに適当な語数のデータを溜めておくようにすることによって、後述するＤＦ−データ・バッファ−データ・キャッシュの間のSpill/Fillの動作を効率的に行うことができる。
ＬＳＵは、最初のローカル変数へのポインタを保持する図示してないレジスタ（varsレジスタ）を具備する。本実施例の計算機システムにおいては、ローカル変数の格納域はデータ・バッファあるいはデータ・キャッシュにあるが、varsレジスタには、データ・キャッシュにおける相当するアドレス値が書き込まれているようになっている。つまり、全てあるいは一部のローカル変数のデータが実際にはデータ・バッファに保持されていても、各々のローカル変数に、全てのローカル変数をデータ・キャッシュにSpillしたと仮定した場合のデータ・キャッシュにおけるアドレス値を対応させることができる。ロード／ストア・オペレーションの処理において、ＬＳＵはvarsレジスタの値を用いてアドレス計算を行い、対象となるローカル変数の格納域がデータ・バッファかデータ・キャッシュかを判定し、その格納域にアクセスする。
ＬＳＵは、プログラム中に示されるロード／ストア・オペレーションを実行すると共に、オーバーフロー／アンダーフローの回避のため、ＡＭＦ／ＣＭＦ及びＤＦによって構成される仮想の部分スタックの最下位にあたるデータをデータ・バッファとの間で自動的にSpill/Fillするようになっている。
１語分のデータをＤＦからデータ・バッファにSpillするには、(a)ＡＭＦとＣＭＦで各々のボトム・ポインタ（Ｂａ、Ｂｃ）で示されるエントリの内容が一致している、(b)その一致する内容と同じＤＦのエントリのアドレスがいずれかのソース・フィールドに書き込まれたエントリがＯＱに保持されるキュー内に存在しない、という２つの条件が満たされていなくてはならない（そうでない場合は満たされるまで待つ）。条件(b)に関しては、命令に含まれるオペレーションのソース・レジスタとして用いられるＤＦのエントリのアドレスがマッピング・ファイル中に保持された状態で残るケースに一定の制約を設けることによって、常に満たされるようにすることもできる。命令体系にそのような制約を設けない場合には、計算機システムは、ＯＱにおいて各ソース・フィールドで上記一致する内容であるＤＦのエントリのアドレスを照合し、上記条件(b)に関するチェックを行うような機能を備えた構成としなければならない。上記２つの条件が満たされる場合、ＡＭＦ／ＣＭＦのボトム・ポインタＢａ／Ｂｃで示されるエントリの内容で示されるＤＦのエントリに書き込まれている１語分のデータをデータ・バッファにSpillすることができる。その際、Ｂａ及びＢｃの値から１を引き、上記ＤＦのエントリのアドレスをＦＬに登録する。
逆に、データ・バッファからＤＦに１語分のデータをFillするには、データ・バッファからFillすべき１語分のデータを取り出し、それにフリーなＤＦの１エントリを割り付け、そのデータ・フィールドに書き込む。ＷＣＦフィールドは１とする。さらに、ボトム・ポインタＢａ及びＢｃの値に１を加え、上記割り付けられるＤＦのエントリのアドレスを、ＡＭＦ及びＣＭＦの各々１を加えたボトム・ポインタ値で示されるエントリに各々書き込む。
データ・バッファとデータ・キャッシュの間でも、データ・バッファの空きに応じて適宜Spill/Fillの動作が行われるようになっている。
以上では，命令の発行／完了に伴うＡＭＦ／ＣＭＦの操作がないものとして、ＤＦとデータ・バッファの間のSpill/Fillの動作について説明したが、命令の発行／完了とSpill/Fillの動作を合成し、同時に行えるような構成は容易に実現できる。
また、本発明の計算機システムは、ＤＦとデータ・バッファの間及びデータ・バッファとデータ・キャッシュの間で、一度に複数語のデータをSpill/Fillできるような構成とすることも可能である
（Ｉ）フリー・リスト（ＦＬ;Free List）
フリー・リスト（ＦＬ）は、フリーな、即ち、割り付けられていないＤＦのエントリのアドレスを保持するもので、本実施例においては、第７図に示すように、命令完了用登録バッファ（ＥＢＩＣ;Entry Buffer for Instruction Completion）７１ａ、スタック・スピル用登録バッファ（ＥＢＳＳ;Entry Buffer for Stack Spill）７１ｂ、デスティネーション用割付キュー（ＡＱＤ;Allocation Queue for Destinations）７２ａ、及びスタック・フィル用割付キュー（ＡＱＳＦ;Allocation Queue for Stack Fill）７２ｂを備える。これらは各々適当な数のＤＦのエントリのアドレスを保持でき、ＡＱＤとＡＱＳＦは循環型のＦＩＦＯキューの構成となっている。
初期状態においては、ＤＦの各々のエントリのアドレスはＡＱＤとＡＱＳＦのどちらかに保持されている。新たにＤＦのエントリを割り付ける必要がある場合にＦＬからフリーなＤＦのエントリのアドレスが取り出されるが、命令の発行に伴いオペレーションの結果データを保持すべく割り付けるためにはＡＱＤから、また、その要素がマッピング・ファイルに保持されるスタックのFillのためにはＡＱＳＦから取り出されるようになっている。逆に、割り付けが解除されるＤＦの各々のエントリについてはそのアドレスがＦＬに登録されるようになっているが、命令の完了に伴い割り付けが解除されるものはＥＢＩＣに、また、その要素がマッピング・ファイルに保持されるスタックのSpillに伴い割り付けが解除されるものはＥＢＳＳに書き込まれるようになっている。ＥＢＩＣ／ＥＢＳＳに書き込まれた各々のＤＦのエントリのアドレスは、すぐに、ＡＱＤ及びＡＱＳＦの保持する内容量に応じて、そのいずれかに移されるようになっている。
（３−２）スタック・モードにおける動作
ついで、本発明実施例の計算機システムのスタック・モードにおける動作を説明する。
本実施例の計算機システムは、基本的に、命令を、▲１▼命令フェッチ、▲２▼命令発行、▲３▼オペレーション実行、▲４▼命令完了の４段階で処理する。以下に各段階ごとに動作内容を説明する。
▲１▼命令フェッチ
この段階では、命令フェッチ・ユニットが命令キャッシュから命令を取り出すと共に、次にフェッチする命令のアドレスを決定する。次に命令をフェッチするのは通常次アドレス値からであるが、フェッチした命令が無条件分岐オペレーションを含むか、条件分岐オペレーションを含み分岐すると予測した場合、分岐予測が外れた場合、あるいは例外が発生した場合には、フェッチするアドレス値を変更する。
▲２▼命令発行
この段階では、発行する命令の0pフィールドの内容に基づくオペレーション群の発行（オペレーション・キュー（ＯＱ）への書き込み）、SMフィールドの内容に基づく前進マッピング・ファイル（ＡＭＦ）及びそのボトム・ポインタＢａの内容変更、及びその変更の内容の状態変更キュー（ＳＭＱ）への書き込みが行われる。この際、命令中のs0, s1, s2, ...の各々は、スタックの最上位，２番目，３番目，...に対応するが、それぞれ変更前のＡＭＦのアドレス0, 1, 2, ...のエントリの内容に、f1, f2, ...の各々はそれぞれフリー・リスト（ＦＬ）から順に取り出されるＤＦのエントリのアドレスに、置き換えられる。
ＡＭＦ及びＢａの内容変更に関しては、次のように行われる。まず、命令のＳＭフィールドに示される各符号が上記の要領でそれぞれ適切なＤＦのエントリのアドレスに置き換えられ、それぞれ対応するＡＭＦのエントリに書き込まれる。ここで、ＡＭＦのアドレス０のエントリがスタックトップ即ち命令のＳＭフィールドにおいて右端に示される符号に対応し、以下アドレス順にＡＭＦのエントリとスタックの要素が対応する。命令のＳＭフィールドで変更内容が明示されない部分については、スタックの成長量だけエントリの内容がシフトすることになる。即ち、スタックの成長量をｇとおくと、ＡＭＦのアドレスｉの内容が命令発行によりＡＭＦのアドレス（ｉ+ｇ）に書き込まれることになる。また、ボトム・ポインタＢａの値にはスタックの成長量が加えられる。
発行される命令に含まれるオペレーションの内容が書き込まれるＯＱの各エントリにおいて、リポート・フィールドには、同じ命令に基づく書き込みが行われるＳＭＱのエントリのアドレスと識別番号（順にA, B, C, Dと機械的に付すものとする）が書き込まれる。ＯＱのエントリのディスパッチ・フラグ・フィールドには０が書き込まれる。
命令の発行に伴い（f1, f2, f3, ...に対応する）新たに割り付けられるＤＦのエントリにおいては、ＷＦフィールドに０が書き込まれる。
ストア・オペレーションの場合には、その内容が、ＯＱに書き込まれると共に、ＬＳＵに送られる。
ＯＱの書き込みが行われるソース・フィールドに対応するＳＷＦフィールドはまず０とされるが、s0, s1, s2, ...のいずれかから置き換えられたＤＦのエントリ・アドレスのソース・フィールドへの書き込みの各々に関しては、次サイクルにおいて、そのアドレスのＤＦのエントリのＷＦフィールドの内容が読み出され、これが１であれば、ＯＱの対応するＳＷＦフィールドが１に変更されるようになっている。
発行される命令に基づき書き込みが行われるＳＭＱのエントリにおいて、対応するオペレーションの存在するオペレーション・ステータス・フィールドには未実行を意味する０が書き込まれ、その他には１が書き込まれる。
▲３▼オペレーション実行
ＯＱに保持される未実行のオペレーションは、実行可能となったものから、適切な機能ユニットにディスパッチされ、処理されるようになっている。従って、オペレーションの実行順序はout-of-orderになる。
ＯＱにおいて、オペレーションに必要なソース・データが全てＤＦの該当するエントリに書き込み済であることが対応するＳＷＦフィールドの内容によって確認されるエントリがあれば、その保持するオペレーションの実行のため、そのエントリの内容がＤＦをアクセスして得られるソース・データと共に適切な機能ユニットに送られるようになっている。この際、そのＯＱのエントリのディスパッチ・フラグ・フィールドが１に変更される。
ロード・オペレーションや算術論理演算等の結果データを生じるオペレーションに関しては、結果データが正常に得られれば、デスティネーションであるＤＦのエントリのデータ・フィールドに結果データが書き込まれ、ＷＦフィールドが１に変更される。また、ＯＱにおいて各ソース・フィールドで上記デスティネーションであるＤＦのエントリのアドレスが照合され、一致するソース・フィールドに対応するＳＷＦフィールドが１に変更される。
ストア・オペレーションを書き込みの内容とするＯＱのエントリに関しては、同じ内容が命令発行段階においてＬＳＵに送られている。命令発行段階において確定しなかったアドレス計算に必要なソース・データは、本実施例においては、そのＤＦへの書き込みがＯＱにおいて確認された直後に、ＬＳＵに送られるようになっているものとする。
いずれのオペレーションも、その実行が正常に終了すれば、リポート・フィールドの内容に基づき、対応するＳＭＱのエントリのオペレーション・ステータス・フィールドが１に変更される。
ストア・オペレーションに関しては、アドレス計算はオペレーション実行段階においてout-of-orderで実行されるが、正確な例外処理を保証するために、ストアの実行は命令完了段階において行われる。従って、ストア・オペレーションの場合、ストア・データとストア・アドレスが共に確定すれば、対応するＳＭＱのエントリのオペレーション・ステータス・フィールドが１に変更されるようになっている。
あるオペレーションの処理において例外事象が発生した場合には、その情報が、対応するＳＭＱのエントリのオペレーション・ステータス・フィールドに書き込まれると共に、命令フェッチ・ユニットに通知される。
▲４▼命令完了
命令の完了はプログラム上の順番で行われる。
ＳＭＱのキューの先頭のエントリにおいて、全てのオペレーション・ステータス・フィールドの内容が１である、あるいはそうなると、対応する命令の完了が可能となる。命令の完了を実行するには、ＳＭＱの先頭のエントリの内容に基づきＣＭＦおよびＢｃの内容を変更し、ＳＭＱにおいて上記先頭のエントリをキューから除外する。ここで、命令の発行の際にＡＭＦに対して行われた内容変更がＣＭＦにおいて再現されている。
また、命令の完了に伴い、割り付けを解除すべきＤＦのエントリのアドレスがそれぞれＦＬに登録される。スタック・モードにおいては、割り付けを解除すべきＤＦのエントリ群のアドレスは次の２つのグループからなる。命令の完了に伴う内容変更によりＣＭＦにおいて保持されなくなるもの、及び、命令に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないもの、である。
ストア・オペレーションを含む命令を完了する場合には、ＬＳＵにストアの実行を依頼する。こうすれば、データがプログラム上の順番でストアされることが保証できる。
以上が、本発明実施例の計算機システムのスタック・モードにおける動作の概要である。
（３−３）スタック・モードにおける動作例
ついで、具体的な動作例について説明する。いま、本実施例の計算機システムで、前述のY=A*X+B/Xを計算する次の２命令からなるプログラムを実行するものとする。
0003706384.tif 000008
第８図〜第１４図は、本実施例の計算機システムにおいて、上記プログラムを処理する際の状態の変化を時系列に示した説明図であり、以下ではこの図をもとに詳細な動作を説明する。第８図〜第１４図において、ＤＦ６、ＯＱ５及びＳＭＱ４の各エントリの構成は、それぞれ第４図、第５図及び第６図のものと同じである。マッピング・ファイルのボトム・ポインタが示すエントリより下のエントリや、ＦＩＦＯキューの構成となっている構成要素のキューから外れるエントリなど、書込み内容が意味あるものとして保持されていないような部分には、斜線が施されている。p##が記入されている箇所は、ＤＦのいずれかのエントリのアドレスが書き込まれているが、本動作例の説明において留意する必要がないことを意味する。また、本動作例においては、説明を簡単にするため、ＤＦとデータ・バッファの間のSpill/Fillの動作は行わないものとする。
ＦＬの構成要素であるデスティネーション用割付キュー（ＡＱＤ）７２ａ及びＡＭＦ３ａの当初の内容が第８図に示されるようなものであるとしよう。ここで、循環型のＦＩＦＯキューの構成となっているＡＱＤ７２ａで、キューの先頭からの４エントリが次に発行される命令におけるf1, f2, f3, f4にそれぞれ対応することを示している。ＡＭＦ３ａ及びＣＭＦ３ｃでは、各々のエントリに上から順に0, 1, 2, ...とアドレスが付けられていて、それぞれs0, s1, s2, ...に対応するものとしている。
計算機システムが第８図に示される状態にあるときに、命令１の発行が行われるものとする。
命令１の0pフィールドの内容に基づき命令に含まれるオペレーションの内容がＯＱに書き込まれ、SMフィールドの内容に基づきＡＭＦ及びＢａの内容が変更され、その変更の内容がＳＭＱに書き込まれる。この際、命令中のf1, f2, f3, f4の各々はそれぞれフリー・リストから順に取り出されるp26, p34, p42, p51に、置き換えられる。ＡＭＦの内容の変更に関しては、アドレス0, 1のエントリには、それぞれf1, f4から置き換えられるp26, p52が書き込まれ、それ以下の部分では、スタックの成長量(2)だけエントリの内容がシフトする（第８図におけるＡＭＦのアドレス0, 1, ...の各エントリの内容がアドレス2, 3, ...の各エントリにそれぞれ書き込まれる）。第９図のＯＱで書き込み内容を示した４エントリにおいて、リポート・フィールドには、同じ命令１に基づく書き込みが行われるＳＭＱのエントリのアドレス１と識別番号（順にA, B, C, D）が書き込まれている。また、これらのＯＱの４エントリのディスパッチ・フラグ・フィールドには０が書き込まれている。
f1, f2, f3, f4にそれぞれ対応して新たに割り付けられるＤＦのアドレスp26, p34, p42, p51の各エントリにおいては、ＷＦフィールドを０とする。
ＳＭＱの書き込みが行われるエントリの各オペレーション・ステータス・フィールドには、いずれも対応するオペレーションが存在するので、０が書き込まれている。
こうして、計算機システムは第８図の状態から第９図に示されるような状態に至る。
次のサイクルでは、命令１に続いて命令２の発行が行われる。
命令１の場合と同様に、命令２の0pフィールドの内容に基づき命令に含まれるオペレーションの内容がＯＱに書き込まれ、SMフィールドの内容に基づきＡＭＦ及びＢａの内容が変更され、その変更の内容がＳＭＱに書き込まれる。この際、命令中のs0, s1は変更前（第９図）のＡＭＦのそれぞれアドレス0, 1のエントリの内容p26, p51に、f1, f2, f3の各々はそれぞれフリー・リストから順に取り出されるp16, p18, p57に、書き換えられる。SMフィールドに負のスタック成長量(-2)しか示されていないので、ＡＭＦに関しては、それだけエントリの内容がシフトする（第９図におけるＡＭＦのアドレス2, 3, ...の各エントリの内容がアドレス0, 1, ...の各エントリにそれぞれ書き込まれる）。
f1, f2, f3にそれぞれ対応して新たに割り付けられるＤＦのアドレスp16, p18, p57の各エントリにおいては、ＷＦフィールドを０とする。
さらに、命令２はストア・オペレーションを含むので、その内容が、ＯＱに書き込まれると共に、ＬＳＵに送られる。
こうして、計算機システムは第１０図に示されるような状態に至る。
ＯＱに保持される未実行のオペレーションは、実行可能となったものから、適切な機能ユニットにディスパッチされ、処理される。
第１１図は、数サイクルが経過して、命令１以前に発行された命令が全て完了し、命令１に含まれる４つのオペレーション全てが正常終了した時点の計算機システムの状態を示したものである。命令１に対応するＳＭＱのアドレス１のエントリにおいて、全てのオペレーション・ステータス・フィールドが１となっている。また、この時点のＣＭＦ及びＢｃの内容は、命令１の発行直前（第８図）のＡＭＦ及びＢａの内容と同じものとなっている（ＤＦとデータ・バッファの間のSpill/Fillの動作が行われれば、命令発行時のＢａの値と命令完了時のＢｃの値は一致しない）。この状態から命令１の完了が次のように実行される。
第１１図においてＳＭＱのアドレス１のエントリがその時点のキューの先頭であるので、その内容に基づきＣＭＦ及びＢｃの内容が変更される。すなわち、Ｂｃの値に２が加えられ、ＣＭＦのアドレス0, 1のエントリにはそれぞれp26, p51が書き込まれ、それ以下の部分では、スタックの成長量(2)だけエントリの内容がシフトする。さらにＳＭＱにおける上記先頭のエントリがキューから除外される。
また、命令１の完了に伴い割り付けを解除すべきＤＦのエントリのアドレスがＦＬに登録される。この場合、命令１に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないp34, p42がＦＬの構成要素である命令完了用登録バッファ（ＥＢＩＣ）７１ａに書き込まれる。（この場合、命令の完了に伴う内容変更によりＣＭＦにおいて保持されなくなるもの、はない。）こうして、計算機システムは第１２図に示されるような状態に至る。
第１３図は、さらに数サイクルが経過して、命令２に含まれる３つのオペレーションが正常終了し、最後のストア・オペレーションに関してはストア・データとストア・アドレスが共に確定済となった時点の計算機システムの状態を示したものである。ＥＢＩＣに書き込まれたp34, p42がＡＱＤに移されている。
第１３図の時点から１サイクルで、命令２の完了が命令１の場合と同様に行われる。この場合、命令２がストア・オペレーションを含むので、そのストアの実行がＬＳＵに依頼される。また、命令の完了に伴い割り付けを解除すべきＤＦのエントリのアドレスがＦＬに登録される。この場合、命令の完了に伴う内容変更によりＣＭＦにおいて保持されなくなるものであるp51, p26と、命令２に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないものであるp16, p18, p57がＥＢＩＣに書き込まれる。こうして、計算機システムは第１４図に示されるような状態に至る。
以上で、本実施例の計算機システムにおいてY=A*X+B/Xの計算が完了したことになる。
（４）レジスタ・モード
（４−１）レジスタ・モードにおける動作に必要な機能と構成
（３−１）で述べた機能と構成は、一部を除き、レジスタ・モードにおいても必要とされるものである。ここでは、スタック・モードの場合との相違点について説明する。
まず、マッピング・ファイルは、レジスタ・モードにおいては、レジスタ・ベースのスーパースカラ・プロセッサにおけるレジスタ・マッピング・テーブルと同等なものとして用いられる。
従って、マッピング・ファイルのボトム・ポインタ、データ・バッファ、ロード／ストア・ユニット（ＬＳＵ）のSpill/Fillに関する機能、フリー・リスト（ＦＬ）中のスタック・スピル用登録バッファ（ＥＢＳＳ）及びスタック・フィル用割付キュー（ＡＱＳＦ）などは、基本的に、必要ではない。
（４−２）レジスタ・モードにおける動作
ついで、本発明実施例の計算機システムのレジスタ・モードにおける動作を説明する。
本実施例の計算機システムは、レジスタ・モードにおいてもスタック・モードの場合と同様に、基本的に、命令を、▲１▼命令フェッチ、▲２▼命令発行、▲３▼オペレーション実行、▲４▼命令完了の４段階で処理する。以下に各段階ごとに動作内容を説明する。
▲１▼命令フェッチ
この段階では、命令フェッチ・ユニットが命令キャッシュから命令を取り出すと共に、次にフェッチする命令のアドレスを決定する。
▲２▼命令発行
この段階では、発行する命令の0pフィールドの内容に基づくオペレーション群の発行（オペレーション・キュー（ＯＱ）への書き込み）、SMフィールドの内容に基づく前進マッピング・ファイル（ＡＭＦ）の内容変更、及びその変更の内容の状態変更キュー（ＳＭＱ）への書き込みが行われる。この際、命令中のr0, r1, r2, ...の各々はそれぞれ変更前のＡＭＦのアドレス0, 1, 2, ...のエントリの内容に、f1, f2, ...の各々はそれぞれフリー・リスト（ＦＬ）から順に取り出されるＤＦのエントリのアドレスに、置き換えられる。
ＡＭＦの内容変更に関しては、次のように行われる。命令のＳＭフィールドに示されるＡＭＦのエントリ・アドレスと符号の組の各々について、符号が上記の要領でそれぞれ適切なＤＦのエントリ・アドレスに置き換えられ、アドレスが示されるＡＭＦのエントリに書き込まれる。
発行される命令に含まれるオペレーションの内容が書き込まれるＯＱの各エントリにおいて、リポート・フィールドには、同じ命令に基づく書き込みが行われるＳＭＱのエントリのアドレスと識別番号（順にA, B, C, Dと機械的に付すものとする）が書き込まれる。ＯＱのエントリのディスパッチ・フラグ・フィールドには０が書き込まれる。
命令の発行に伴い（f1, f2, f3, ...に対応する）新たに割り付けられるＤＦのエントリにおいては、ＷＦフィールドに０が書き込まれる。
ストア・オペレーションの場合には、その内容が、ＯＱに書き込まれると共に、ＬＳＵに送られる。
ＯＱの書き込みが行われるソース・フィールドに対応するＳＷＦフィールドはまず０とされるが、r0, r1, r2, ...のいずれかから置き換えられたＤＦのエントリ・アドレスのソース・フィールドへの書き込みの各々に関しては、次サイクルにおいて、そのアドレスのＤＦのエントリのＷＦフィールドの内容が読み出され、これが１であれば、ＯＱの対応するＳＷＦフィールドが１に変更されるようになっている。
発行される命令に基づき書き込みが行われるＳＭＱのエントリにおいて、対応するオペレーションの存在するオペレーション・ステータス・フィールドには未実行を意味する０が書き込まれ、その他には１が書き込まれる。
▲３▼オペレーション実行
ＯＱに保持される未実行のオペレーションは、スタック・モードの場合と同様に、実行可能となったものから、適切な機能ユニットにディスパッチされ、処理されるようになっている。
▲４▼命令完了
命令の完了は、以下の点を除き、スタック・モードの場合と同様に、プログラム上の順番で行われる。
まず、命令の発行の際にＡＭＦに対して行われた内容変更がＣＭＦにおいて再現されるが、それは、レジスタ・モードにおける命令のSMフィールド内部のフォーマット、即ち状態変更キュー（ＳＭＱ）の書き込みの形式に即して行われる。
また、命令の完了に伴い、割り付けを解除すべきＤＦのエントリのアドレスがそれぞれＦＬに登録される。レジスタ・モードにおいては、割り付けを解除すべきＤＦのエントリ群のアドレスは次の２つのグループからなる。命令の完了に伴い内容が書き換えられるＣＭＦの各エントリの変更前の内容を読み出したもの、及び、命令に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないもの、である。
以上が、本発明実施例の計算機システムのレジスタ・モードにおける動作の概要である。
（４−３）レジスタ・モードにおける動作例
ついで、具体的な動作例について説明する。いま、本実施例の計算機システムで、前述のY=(A*X+B/X)*2を計算する次の２命令からなるプログラムを実行するものとする。
0003706384.tif 000009
第１５図〜第２１図は、本実施例の計算機システムにおいて、上記プログラムを処理する際の状態の変化を時系列に示した説明図であり、以下ではこの図をもとに詳細な動作を説明する。第１５図〜第２１図において、ＤＦ６、ＯＱ５及びＳＭＱ４の各エントリの構成は、それぞれ第４図、第５図及び第６図のものと同じである。ＦＩＦＯキューの構成となっている構成要素のキューから外れるエントリなどの書込み内容が意味あるものとして保持されていないような部分には、斜線が施されている。p##が記入されている箇所は、ＤＦのいずれかのエントリのアドレスが書き込まれているが、本動作例の説明において留意する必要がないことを意味する。
ＦＬの構成要素であるデスティネーション用割付キュー（ＡＱＤ）７２ａ及びＡＭＦ３ａの当初の内容が第１５図に示されるようなものであるとしよう。ここで、循環型のＦＩＦＯキューの構成となっているＡＱＤ７２ａで、キューの先頭からの４エントリが次に発行される命令におけるf1, f2, f3, f4にそれぞれ対応することを示している。ＡＭＦ３ａ及びＣＭＦ３ｃでは、各々のエントリに上から順に0, 1, 2, ...とアドレスが付けられていて、それぞれr0, r1, r2, ...に対応するものとしている。
計算機システムが第１５図に示される状態にあるときに、命令１の発行が行われるものとする。
命令１の0pフィールドの内容に基づき命令に含まれるオペレーションの内容がＯＱに書き込まれ、SMフィールドの内容に基づきＡＭＦの内容が変更され、その変更の内容がＳＭＱに書き込まれる。この際、命令中のr0は変更前（第１５図）のＡＭＦのアドレス０のエントリの内容p12に、f1, f2, f3, f4の各々はそれぞれフリー・リストから順に取り出されるp26, p34, p42, p51に、置き換えられる。ＡＭＦの内容の変更に関しては、アドレス1, 2, 4, 5のエントリに、それぞれf1, f4, f2, f3から置き換えられるp26, p51, p34, p42が書き込まれる。第１６図のＯＱで書き込み内容を示した４エントリにおいて、リポート・フィールドには、同じ命令１に基づく書き込みが行われるＳＭＱのエントリのアドレス１と識別番号（順にA, B, C, D）が書き込まれている。また、これらのＯＱの４エントリのディスパッチ・フラグ・フィールドには０が書き込まれている。
f1, f2, f3, f4にそれぞれ対応して新たに割り付けられるＤＦのアドレスp26, p34, p42, p51の各エントリにおいては、ＷＦフィールドを０とする。（r0に対応するＤＦのアドレスp12のエントリでは、ＷＦフィールドが１でデータ“1000”がすでに書き込まれていたものとしている。）
ＳＭＱの書き込みが行われるエントリの各オペレーション・ステータス・フィールドには、いずれも対応するオペレーションが存在するので、０が書き込まれている。
こうして、計算機システムは第１５図の状態から第１６図に示されるような状態に至る。
次にサイクルでは、命令１に続いて命令２の発行が行われる。
命令１の場合と同様に、命令２の0pフィールドの内容に基づき命令に含まれるオペレーションの内容がＯＱに書き込まれ、SMフィールドの内容に基づきＡＭＦの内容が変更され、その変更の内容がＳＭＱに書き込まれる。
f1, f2, f3にそれぞれ対応して新たに割り付けられるＤＦのアドレスp16, p18, p57の各エントリにおいては、ＷＦフィールドを０とする。
さらに、命令２は１つのストア・オペレーションを含むので、その内容が、ＯＱに書き込まれると共に、ＬＳＵに送られる。
また、前サイクルの命令１の発行において、ＯＱのソース・フィールドにr0から置き換えられたp12が書き込まれているので、そのアドレスのＤＦのエントリのＷＦフィールドの内容が読み出され、これが１であるので、ＯＱにおいてp12が書き込まれているソース・フィールドに対応するＳＷＦフィールドが１に変更される。
こうして、計算機システムは第１７図に示されるような状態に至る。
ＯＱに保持される未実行のオペレーションは、実行可能となったものから、適切な機能ユニットにディスパッチされ、処理される。
第１８図は、数サイクルが経過して、命令１以前に発行された命令が全て完了し、命令１に含まれる４つのオペレーション全てが正常終了した時点の計算機システムの状態を示したものである。命令１に対応するＳＭＱのアドレス１のエントリにおいて、全てのオペレーション・ステータス・フィールドが１となっている。また、この時点のＣＭＦの内容は、命令１の発行直前（第１５図）のＡＭＦの内容と同じものとなっている。この状態から命令１の完了が次のように実行される。
第１８図においてＳＭＱのアドレス１のエントリがその時点のキューの先頭であるので、その内容に基づきＣＭＦの内容が変更される。すなわち、ＣＭＦのアドレス1, 2, 4, 5のエントリにそれぞれp26, p51, p34, p42が書き込まれる。さらにＳＭＱにおける上記先頭のエントリがキューから除外される。
また、命令１の完了に伴い割り付けを解除すべきＤＦのエントリのアドレスがＦＬに登録される。この場合、内容が書き換えられるＣＭＦのアドレス1, 2, 4, 5の各エントリの変更前の内容（p02, p10, p24, p60）が読み出され、これらがＦＬの構成要素である命令完了用登録バッファ（ＥＢＩＣ）７１ａに書き込まれる。（この場合、命令１に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないもの、はない。）こうして、計算機システムは第１９図に示されるような状態に至る。
第２０図は、さらに数サイクルが経過して、命令２に含まれる３つのオペレーションが正常終了し、最後のストア・オペレーションに関してはストア・データとストア・アドレスが共に確定済となった時点の計算機システムの状態を示したものである。ＥＢＩＣに書き込まれたp02, p10, p24, p60がＡＱＤに移されている。
第２０図の時点から１サイクルで、命令２の完了が命令１の場合と同様に行われる。この場合、命令２がストア・オペレーションを含むので、そのストアの実行がＬＳＵに依頼される。また、命令の完了に伴い割り付けを解除すべきＤＦのエントリのアドレスがＦＬに登録される。この場合、内容が書き換えられるＣＭＦの各エントリの変更前の内容を読み出したものであるp34, p42と、命令２に含まれるオペレーションを保持していたＯＱのエントリ群のデスティネーション・フィールドに書き込まれていてＣＭＦへの書き込みが行われないものであるp18がＥＢＩＣに書き込まれる。こうして、計算機システムは第２１図に示されるような状態に至る。
以上で、本実施例の計算機システムにおいてY=(A*X+B/X)*2の計算が完了したことになる。
（５）例外回復
ここでは、本発明の計算機システムにおける例外回復について説明する。
ある命令に含まれるオペレーションの実行において例外事象が発生した場合、その命令の発行時点の状態を回復する必要がある（但し、スタック・モードにおいては、すでに行われたデータ・ファイルＤＦとデータ・バッファの間のSpill/Fillの動作は取り消さない）。
そのためには、例外が発生した命令以降に発行された命令を全てキャンセルし、その時点の完了マッピング・ファイルＣＭＦ（及びそのボトム・ポインタＢｃ）の内容を前進マッピング・ファイルＡＭＦ（及びそのボトム・ポインタＢａ）にコピーし、さらに、状態変更キューＳＭＱのキューの先頭のエントリから上記例外が発生した命令に対応するエントリまでの各々の内容に基づきＡＭＦ（及びＢａ）の内容変更を行えばよい。
ある命令以降に発行された命令を全てキャンセルするには、オペレーション・キューＯＱ及びＳＭＱにおいてキャンセルされるべき命令群に対応する範囲のエントリを全てキューから除外し、キャンセルされるべきオペレーションのデスティネーション・レジスタとして割り付けられたＤＦのエントリのアドレスの各々をＦＬに戻せばよい。
キャンセルされるべきオペレーションのデスティネーション・レジスタとして割り付けられたＤＦのエントリのアドレスの各々をＦＬに戻すには基本的に２つの方法がある。即ち、まともに命令完了用登録バッファＥＢＩＣに順次書き込む方法と、デスティネーション用割付キューＡＱＤのキューの先頭を示すポインタを書き換えるというものである。後者の方法を採用する場合、ＡＱＤのキューの先頭を示すポインタ値として書き込まれる可能性がある値をどこかに保持しておく必要がある。それには、(a)ＳＭＱにそのためのフィールドを設け、命令の発行ごとに書き込む、(b)一種の履歴ファイルを設け、条件分岐オペレーションを含む命令の発行ごとに書き込む、というような方法が考えられる。
以上のように、本発明の計算機システムにおいては、例外が発生した命令が発行された時点のＡＭＦ（及びＢａ）の状態を、基本的に、回復することができるので、正確な例外処理が可能である。
（６）その他の実施例
本発明の計算機システムは、上述の実施例に限られるものではなく、細部の構成の異なる様々な実施例が存在する。たとえば、以下のようなものをあげることができる。
（６−１）実施例Ａ
本発明の計算機システムは、従来のスタック・ベースあるいはレジスタ・ベースのプロセッサの命令形式に基づくプログラムを命令キャッシュに蓄えておき、実行時に命令発行段階の前段において、（２）で規定した命令形式に準じるよう変換するような構成とすることもできる。
（６−２）実施例Ｂ
本発明の計算機システムは、個々の命令の発行の際に、その命令の完了時に割り付けの解除が必要になるＤＦのエントリのアドレス、あるいはそれを定めるための情報を、状態変更キューあるいは専用のキューにあらかじめ記入しておくような構成とすることもできる。
（６−３）実施例Ｃ
共にボトム・ポインタを備えるスタック型の前進マッピング・ファイル及び完了マッピング・ファイルと、レジスタ型の前進マッピング・ファイル及び完了マッピング・ファイルを具備する構成とし、命令の状態変更フィールドで、スタック型のマッピング・ファイルの内容変更とレジスタ型のマッピング・ファイルの内容変更を共に示すことのできるような計算機システムも実現可能である。
（６−４）実施例Ｄ
レジスタ・ベースのスーパースカラ・アーキテクチャにおいて考えられる様々な変形の多くが、本発明に基づく計算機システムにおいても適用できる。例えば、以下のようなものがあげられる。
▲１▼各機能ユニットの入力段にそれぞれリザベーション・ステーションを設けることによってオペレーション・ウインドウを実現したもの。
▲２▼オペレーション・キューの後段にスケジューラを設けたもの。
▲３▼整数データ用／浮動小数点データ用、あるいは汎用／マルチメディア用というようにデータ型別にデータ・ファイル、オペレーション・キュー、機能ユニット群、フリー・リストを設けたもの。
▲４▼複数組の前進マッピング・ファイル、完了マッピング・ファイル、オペレーション・キュー、状態変更キュー等を設け、複数のスレッドを並行して処理できる構成としたもの。
産業上の利用可能性
本発明によれば、高性能の計算機システムを実現することができる。また、従来のスタック・ベースあるいはレジスタ・ベースのプロセッサの機械語で記述されたプログラムは、本発明の計算機システムの命令形式に容易に変換できる。
【図１】
0003706384.tif 000010
【図２】
0003706384.tif 000011
【図３】
0003706384.tif 000012
【図４】
0003706384.tif 000013
【図５】
0003706384.tif 000014
【図６】
0003706384.tif 000015
【図７】
0003706384.tif 000016
【図８】
0003706384.tif 000017
【図９】
0003706384.tif 000018
【図１０】
0003706384.tif 000019
【図１１】
0003706384.tif 000020
【図１２】
0003706384.tif 000021
【図１３】
0003706384.tif 000022
【図１４】
0003706384.tif 000023
【図１５】
0003706384.tif 000024
【図１６】
0003706384.tif 000025
【図１７】
0003706384.tif 000026
【図１８】
0003706384.tif 000027
【図１９】
0003706384.tif 000028
【図２０】
0003706384.tif 000029
【図２１】
0003706384.tif 000030