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