JPH05173788A - 計算機装置 - Google Patents

計算機装置

Info

Publication number
JPH05173788A
JPH05173788A JP15519892A JP15519892A JPH05173788A JP H05173788 A JPH05173788 A JP H05173788A JP 15519892 A JP15519892 A JP 15519892A JP 15519892 A JP15519892 A JP 15519892A JP H05173788 A JPH05173788 A JP H05173788A
Authority
JP
Japan
Prior art keywords
register
instruction
registers
program
use information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP15519892A
Other languages
English (en)
Inventor
Toru Imai
徹 今井
Ichiro Tomota
一郎 友田
Mitsuo Saito
光男 斎藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP15519892A priority Critical patent/JPH05173788A/ja
Publication of JPH05173788A publication Critical patent/JPH05173788A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【目的】 レジスタの効率の良い使用、値が未定義のレ
ジスタの不正参照を検出可能にし、レジスタ量等を増加
することなく、レジスタ量を見かけ上多くすることを可
能にした計算機装置を提供すること。 【構成】 プログラム中の命令を実行することによって
使用を開始するレジスタと使用を終了するレジスタ情報
とを抽出するレジスタ使用情報検出部3と、前記プログ
ラムの命令を実行するために値を保存する必要があるレ
ジスタの情報を保持するレジスタ使用情報保持部6と、
このレジスタ使用情報保持部6のレジスタ情報を参照す
るレジスタ使用情報参照部7と、この参照結果により所
望のレジスタに対して所定の処理を実行する命令実行部
4と、前記レジスタ使用情報検出部3と前記命令実行部
4との出力に応じて前記レジスタ使用情報保持部6に保
持されたレジスタの使用情報を更新するレジスタ使用情
報更新部5とを備えた。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、プログラムの実行によ
る割込み処理等においてレジスタの使用状況を認識する
ことにより、レジスタの有効利用を図ることができる計
算機装置に関する。
【0002】
【従来の技術】一般に、計算機装置では、プログラムを
実行する過程において次のような処理が行われる。例え
ば、手続呼出或いは割込処理によりプログラムが中断さ
れる場合にはレジスタの退避が行われ、逆に手続から戻
る場合或いは割込処理で中断していたプロクラムが続行
される場合にはレジスタの復帰が行われる。
【0003】しかし、従来の計算機は、上記のような手
続呼出或いは割込処理の実行時点において、プログラム
を正しく動作させるために値(values)を保存すべきレ
ジスタを認識する手段を有していない。
【0004】この結果、従来の計算機では、手続呼出や
割込処理時において、プログラム続行後に必要とされる
レジスタがいずれであるかがまったく分からない。従っ
て、従来の計算機は、本来退避を行なわなくてよいレジ
スタを含めてすべてのレジスタを退避させ、一方、レジ
スタの復帰に関しても全く同様に本来復帰しなくてよい
レジスタもすべて復帰させるように構成している。この
操作はプログラムの実行時間を低下させる大きな要因と
なっている。
【0005】手続呼出の場合、例えばある手続Aから新
たな手続Bを呼び出す場合を説明する。この場合、手続
Bから手続Aに復帰後に使用される可能性があり、かつ
手続Bで変更されるレジスタの値を退避しなければなら
ない。
【0006】レジスタ退避の方法には次の2つの方法あ
る。第1の方法は、手続を呼び出す側、すなわち手続A
でレジスタを退避する方法( caller saved convention
と呼ぶ)である。第2の方法は呼び出された側、すな
わち手続Bでレジスタを退避する方法( callee saved
convention と呼ぶ)である。
【0007】第1の方法は手続Aにおいて退避を行なう
ため、手続Bにてどのレジスタが変更され得るかが分か
らない。従って、手続Bからの復帰後に使用される可能
性のあるレジスタは、手続Bで変更されるか否かに拘ら
ずすべて退避しなければならない。逆に、第2の方法は
手続Bからの復帰後に手続Aにおいてどのレジスタを使
用するかが分からない。従って、手続Bにおいて変更す
るレジスタは、復帰後手続Aで使用されるか否かに拘ら
ずすべて退避しなければならない。従って、第1或いは
第2の方法のどちらの方法においても、本来退避を行な
わなくてよいレジスタまで退避する操作が行われてい
る。
【0008】割込処理の場合、例えば、トラップ、イン
タラプト等の割込み処理により現在実行されているプロ
グラムが中断されるような場合を説明する。この場合、
プログラムが続行できるように割込処理時に使用するレ
ジスタを退避する必要がある。しかし、どのレジスタが
続行後に必要であるかが分からないことから、通常すべ
てのレジスタを退避する操作、すなわち、本来退避を行
なわなくてよいレジスタを退避する操作が行われてい
る。
【0009】レジスタの復帰に関してもレジスタの退避
の場合と同様であり、手続呼出及び割込処理のいずれの
場合においても本来復帰しなくてよいレジスタを復帰す
る操作が行われている。
【0010】上記のように、従来の手続呼出又は割込処
理の実行時の各時点では、実行しているプログラムが正
しい動作をするために必要な値を保存する必要のあるレ
ジスタがどのレジスタであるかがわからない。上記のよ
うに、すべての手続又は割込処理時に、すべてのレジス
タの退避/復帰を行う。従って、レジスタの退避/復帰
が冗長となるので、プログラムの実行速度が低減させら
れている。
【0011】プログラムは通常いくつかの手続によって
構成される。レジスタの退避/復帰を最小限にするため
には、手続の呼び出しに関して、呼ぶ側と呼ばれる側と
で使用するレジスタが異なっていることが好ましい。こ
のようなケースについては、コンパイル時やリンク時に
手続の呼び出し関係を調べ、使用するレジスタが呼ぶ側
と呼ばれる側とが重ならないようにレジスタの割り当て
が試みられている。しかし、このようなレジスタの割り
当ては、着目する手続が一箇所だけから呼ばれる場合或
いはその呼び出しがプログラムの入力系列等に依存しな
い場合に限るといった極めて厳しい条件を成立する場合
のみに限られる。多くの場合、手続が呼ばれた時のレジ
スタの使用状況がわからないまま割り当てを行なわざる
を得ないわけであり、本割当手段は有効に使用しないこ
とが多い。
【0012】このように、従来の計算機では、ハードウ
ェア資源を十分に活かしたレジスタ割り当てができず、
空レジスタがあるにも拘らず、空レジスタを割り当てず
に使用中のレジスタを割り当てる場合がある。従って、
従来の計算機では、退避/復帰の必要のないレジスタの
退避/復帰を行なわなければならない。
【0013】手続の呼び出しの際に退避されるレジスタ
と退避されないレジスタとをそれぞれ固定的に区分けす
ることにより、手続の呼び出しで退避/復帰の対象とな
るレジスタを減らし、退避/復帰の負担を軽減する方法
が考えられている。しかし、本方法では、一方の種類の
レジスタが不足した場合、もう一方の種類のレジスタを
使用することができないために、レジスタの有効活用を
阻害する。
【0014】更に、計算機プログラムにあっては、レジ
スタの値を定義してからその値を参照すべきであるが、
プログラムに誤りがあると、レジスタの値を定義せずに
参照することもあり得る。このようなプログラムは、実
行前もしくは実行時に検出されるべきである。しかし、
従来は、プログラムの実行前にはソフトウェアで解析を
行っても、値の定義参照の関係が必ずしも検出できると
は限らない。更に、プログラムの実行時には解析する手
段を持たないため、未定義レジスタの参照をチェックす
ることが困難になる。本発明の関連技術には、USP
5,021,993及びUSP4,945,510があ
る。
【0015】
【発明が解決しようとする課題】上記のように、従来の
計算機装置では、手続呼出や割込処理時に、プログラム
続行後にどのレジスタが必要であるかが一般には分から
ない。従って、本来退避する必要のないレジスタを含め
てすべてのレジスタを退避させている。一方、レジスタ
の復帰に関しても全く同様であって、本来復帰しなくて
よいレジスタもすべて復帰させている。このことがプロ
グラムの実行時間を低下させる大きな要因になってい
る。
【0016】本発明は、上記の事情に基づいてなされた
もので、レジスタの不必要な退避/復帰を行なうことが
なく、しかもレジスタの効率の良い使用を可能にしてプ
ログラムの高速化を実現し、更に値の定義されていない
レジスタの不正参照を検出することも可能にし、加え
て、レジスタ量及びレジスタのフィールドを増加するこ
となく、レジスタ量を見かけ上多くすることを可能にし
た計算機装置を提供することにある。
【0017】
【課題を解決するための手段】本発明は、上記の課題を
解決するために次のような手段を講じた。
【0018】本発明の第1の計算機装置は、プログラム
を実行する過程において所定の処理によりレジスタの退
避/復帰を行う装置であって、実行プログラムに対しそ
の実行のために値を保存しておく必要のあるレジスタの
情報を保持するレジスタ使用情報保持手段を有し、前記
レジスタ使用情報保持手段のレジスタ情報を参照し、本
参照結果により退避/復帰レジスタを決定する。
【0019】本発明の第2の計算機装置は、プログラム
を実行する過程において所定の処理によりレジスタの退
避/復帰を行う装置であって、実行プログラムに対しそ
の実行のために値を保存しておく必要のあるレジスタの
情報を保持するレジスタ使用情報保持手段を有し、プロ
グラム中での指示に対して仮想的なレジスタの割り当て
を行い、プログラム実行時に前記レジスタ使用情報保持
手段を参照してレジスタの割り当てを行う。
【0020】本発明の第3の計算機装置は、各プログラ
ムについてそれぞれ所定のレジスタの不使用を検出する
と共に、本検出結果に基づいてオペレーティングシステ
ム上で動く各プロセスについて前記所定のレジスタを利
用しない旨の情報を記憶し、前記プロセスの実行に先立
って前記プロセスの前記情報を調べ利用されていないと
判定されたレジスタについて退避/復帰処理を省略す
る。
【0021】本発明の第4の計算機装置は、プログラム
を実行する過程における所定の処理が行われる毎に、レ
ジスタのポインタを増加すると共に、その実行時点のポ
インタをレジスタに格納し、所定の処理の終了時に当該
レジスタの内容をクリアすると共にレジスタポインタを
減少する。
【0022】
【作用】上記手段を講じた結果、次のような作用が生じ
る。
【0023】本発明の第1の計算機装置によれば、レジ
スタ使用状態保持手段の内容を参照することにより、手
続の呼び出しの割込処理等において、レジスタの退避が
必要なときに必要最小限のレジスタを決定することがで
き、前記必要最小限のレジスタのみを退避の対象とし、
復帰は退避したレジスタのみを対象とすることが可能で
ある。
【0024】本発明の第2の計算機装置によればプログ
ラム中で指示するレジスタの割り当ては仮想的なものと
考え、実行時にレジスタ使用情報保持手段の内容を参照
して使用されていないレジスタの割り当てを試み、成功
すれば該当レジスタを退避する必要がなくなり、失敗し
た時にのみ該当レジスタを退避してから使用するように
できるので、レジスタが空いているにもかかわらず、こ
れを利用しないような不都合がなくなり、しかもレジス
タをあらかじめ区分するような必要もないので、レジス
タの有効活用ができる。
【0025】本発明の第3の計算機装置によれば、オペ
レーティングシステム上で動く各プロセスの実行に先立
ってプロセス毎に記憶された所定のレジスタを利用しな
い旨の情報を調べるので、利用されていないと判定され
たレジスタの退避/復帰処理を省略することができ、不
必要なレジスタの退避/復帰を避けることができる。
【0026】本発明の第1から第3の計算機装置によれ
ば、手続の呼び出しや割込処理などによりレジスタの退
避/復帰を必要とする場合に、必要最小限のレジスタの
みを退避/復帰することができる。実行時に使用してい
ないレジスタを検索して割り当てることにより、レジス
タの有効活用を行うことができる。更に、レジスタの不
正参照を検出することもできる。これにより、より高速
で、かつ信頼性の高い計算機装置を提供できる。加え
て、例えば浮動小数点演算専用レジスタを持つ計算機上
で浮動小数点演算を行わないプログラムを実行する場合
のように、用途の異なる複数の種類のレジスタを持つ計
算機上で、ある種のレジスタを使用しないプログラムを
実行している際に発生する割込みの処理において、不必
要なレジスタを退避/復帰することなく省くことがで
き、処理の一層の効果を発揮できる。
【0027】本発明の第4の計算機装置によれば、所定
の処理の開始/終了に基づいてポインタを格納するレジ
スタの値を増減するので、レジスタフィールドを増加す
ることなくレジスタ量が見かけ上多くなると共に、所定
の処理開始前に格納されたデータが破壊されないので、
後の処理で所望のデータをアクセスすることができる。
【0028】
【実施例】以下、本発明の実施例を図面に従い説明す
る。図1は、本発明の第1実施例の概略構成を示すブロ
ック図である。
【0029】本発明の電子計算機は、命令入力部1と、
命令解読部2と、レジスタ使用情報検出部3と、命令実
行部4と、レジスタ使用情報更新部5と、レジスタ使用
情報保持部6と、レジスタ使用情報参照部7とからな
る。上記の構成において、本発明の電子計算機の動作を
説明する。命令入力部1に入力された計算機命令は命令
解読部2及びレジスタ使用情報検出部3に送られる。
【0030】命令解読部2は、命令入力部1に入力され
た前記計算機命令の命令列の解読を行なう。レジスタ使
用情報検出部3は、命令入力部1に入力された前記計算
機命令から、その命令を実行することにより使用を開始
するレジスタ及び使用を終了するレジスタのそれぞれの
情報を抽出する。命令解読部2で解読された命令は、命
令実行部4に送られる。命令実行部4は、命令解読部2
で解読された命令を実行する。
【0031】レジスタ使用情報検出部3及び命令実行部
4の出力はレジスタ使用情報更新部5に送られる。レジ
スタ使用情報更新部5はレジスタ使用情報検出部3及び
命令実行部4の出力に基づいてレジスタ使用状態保持部
6に保持された値を更新する。レジスタ使用状態保持部
6は、現在実行されているプログラムが現時点で使用し
ている値を有するレジスタのレジスタ使用情報を保持す
る。
【0032】レジスタ使用状態保持部6の出力は、レジ
スタ使用情報参照部7に送られる。レジスタ使用情報参
照部7は、レジスタ使用状態保持部6の値を参照する。
レジスタ使用情報参照部7の情報は命令実行部4に出力
される。図2は、手続の呼び出し時のレジスタの退避及
び復帰を説明するためのプログラムの一例を示す。図2
は、手続fより手続gを呼び出す場合を示している。
【0033】従来例として図2に示すプログラムに従っ
て、caller saved convention による方式でレジスタ退
避する命令列を図3を用いて説明する。この場合、手続
へ渡す引数にはレジスタp1、p2、… を、手続から
返す値にはレジスタrを、手続内部で使用する変数には
レジスタv1、v2、… をそれぞれ使用するものとす
る。図3の命令列は、それぞれ以下の命令を示す。
【0034】(1)は、変数pが割り当てられているレ
ジスタp1と、変数qが割り当てられているレジスタp
2の値の加算を行ない、その結果を変数iが割り当てら
れているレジスタv1に格納する命令である。(2)
は、p1とp2の値の乗算を行ない、その結果を変数j
が割り当てられているレジスタv2に格納する命令であ
る。(3)は、v1とv2の値の加算を行ない、第1引
数が割り当てられるべきレジスタp1にその結果を格納
する命令である。(4)は、v1とv2の値の減算を行
ない、その結果を第2引数が割り当てられるべきレジス
タp2に格納する命令である。(5)は、手続gから戻
った後で必要とされる変数jが割り当てられているレジ
スタv2を退避する命令である。(6)は、手続gを呼
び出す命令である。(7)は、退避した値をレジスタv
2に復帰する命令である。(8)は、戻り値を、前記戻
り値を格納すべきレジスタrに格納する命令である。
(9)は、手続fからそれを呼び出した手続に戻る命令
である。(10)は、第1引数rが割り当てられている
レジスタp1から1を引き、変数kが割り当てられてい
るレジスタv1に結果を格納する命令である。
【0035】(11)は、第2引数sが割り当てられて
いるレジスタp2と、配列aの先頭アドレスを加えるこ
とにより決定される、配列要素a[s]のアドレスにv
1の値を格納する命令である。(12)は、手続gから
それを呼び出した手続に戻る命令である。
【0036】上記のような命令列において、手続fから
手続gを呼び出す時に、或いは、手続gから戻った後
で、その値が必要とされる変数jが割り当てられている
レジスタv2は手続gを呼び出す前に手続fの中で退避
され、手続gから戻ると復帰される。しかし、図3にお
いて、手続gでは、レジスタv2は使用されないので、
手続fにおけるv2の退避及び復帰は必要がない。
【0037】次に、他の従来例として図2に示すプログ
ラムに従って、callee saved convention による方式で
レジスタ退避する命令列を図4を用いて説明する。この
場合も、手続へ渡す引数にはレジスタp1、p2、…
を、手続から返す値にはレジスタrを、手続内部で使用
する変数にはレジスタv1、v2、… をそれぞれ使用
するものとする。図4の命令列は、それぞれ以下の命令
を示す。(1)は、手続fで値を変更するレジスタv1
を退避する命令である。(2)は、手続fで値を変更す
るレジスタv2を退避する命令である。
【0038】(3)は、変数pが割り当てられているレ
ジスタp1と、変数qが割り当てられているレジスタp
2の値の加算を行ない、変数iが割り当てられているレ
ジスタv1に結果を格納する命令である。(4)は、p
1とp2の値の乗算を行ない、変数jが割り当てられて
いるレジスタv2に結果を格納する命令である。(5)
は、v1とv2の値の加算を行ない、第1引数が割り当
てられるべきレジスタp1に結果を格納する命令であ
る。(6)は、v1とv2の値の減算を行ない、第2引
数が割り当てられるべきレジスタp2に結果を格納する
命令である。(7)は、手続gを呼び出す命令である。
(8)は、戻り値を、戻り値を格納すべきレジスタrに
格納する命令である。(9)は、命令(2)で退避した
レジスタv2を復帰する命令である。(10)は、命令
(1)で退避したレジスタv1を復帰する命令である。
(11)は、手続fからそれを呼び出した手続に戻る命
令である。(12)は、手続gで値を変更するレジスタ
v1を退避する命令である。(13)は、第1引数rが
割り当てられているレジスタp1から1を引き、変数k
が割り当てられているレジスタv1に結果を格納する命
令である。
【0039】(14)は、第2引数sが割り当てられて
いるレジスタp2と、配列aの先頭アドレスを加えるこ
とにより決定される、配列要素a[s]のアドレスにv
1の値を格納する命令である。(15)は、命令(1
2)で退避したレジスタv1を復帰する命令である。
(16)は、手続gからそれを呼び出した手続に戻る命
令である。
【0040】上記のような命令列の場合、手続f、gの
各々の先頭で、自らが使用するレジスタを退避してから
使用し、手続の終りで復帰してから呼び出した手続に戻
る。従って、手続gでは、使用するレジスタv1を退避
しているが、これは手続fに戻ってから使用されないレ
ジスタであり、手続gにおいて退避及び復帰する必要が
ない。
【0041】上記のように、従来の装置の場合、手続の
呼び出しの際に caller saved convention 又は calle
e saved convention の方法を用いても、いずれも退避
すべき最小限のレジスタ、つまり、手続からの復帰後に
値が保存されていることが必要である。更に、呼び出し
先の手続で変更されるレジスタを知ることがコンパイル
時には一般に不可能なため、必要のないレジスタの退避
/復帰を行なわざるを得ない。図5は、本発明の第1実
施例として図2に示すプログラムに従ってレジスタを退
避する命令列を示している。
【0042】この場合も、手続へ渡す引数にはレジスタ
p1、p2、… を、手続から返す値にはレジスタr
を、手続内部で使用する変数にはレジスタv1、v2、
… をそれぞれ使用するものとする。図5の命令列は、
それぞれ以下の命令を示す。
【0043】(1)は、手続fで値を変更するレジスタ
は、v1とv2であるという命令である。v1とv2
が、本命令の実行時に、使用されているレジスタである
とレジスタ使用情報保持部6に記載されていれば退避さ
れる。
【0044】(2)は、変数pが割り当てられているレ
ジスタp1と、変数qが割り当てられているレジスタp
2の値の加算を行ない、変数iが割り当てられているレ
ジスタv1に結果を格納する命令である。(3)は、p
1とp2の値の乗算を行ない、変数jが割り当てられて
いるレジスタv2に結果を格納する命令である。(4)
は、v1とv2の値の加算を行ない、第1引数が割り当
てられるべきレジスタp1に結果を格納する命令であ
る。(5)は、v1とv2の値の減算を行ない、第2引
数が割り当てられるべきレジスタp2に結果を格納する
命令である。(6)は、手続gを呼び出す命令である。
(7)は、戻り値を、戻り値を格納すべきレジスタrに
格納する命令である。(8)は、命令(1)で退避した
レジスタがあれば、それを復帰する命令である。(9)
は、手続fからそれを呼び出した手続に戻る命令であ
る。
【0045】(10)は、手続gで値を変更するレジス
タは、v1であるという命令であり、v1が、本命令の
実行時に、使用されているレジスタであるとレジスタ使
用情報保持部に記載されていれば退避される。(11)
は、第1引数rが割り当てられているレジスタp1から
1を引き、変数kが割り当てられているレジスタv1に
結果を格納する命令である。
【0046】(12)は、第2引数sが割り当てられて
いるレジスタp2と、配列aの先頭アドレスを加えるこ
とにより決定される、配列要素a[s]のアドレスにv
1の値を格納する命令である。(13)は、命令(1
0)で退避したレジスタがあれば、それを復帰する命令
である。(14)は、手続gからそれを呼び出した手続
に戻る命令である。
【0047】上記の命令において、命令(5)のv1と
命令(12)のv1及び命令(7)のv2に付けられた
*は、命令の実行をもって該当レジスタの使用が終るこ
とを示す。
【0048】図6は、図3に示す命令(4)及び図4に
示す命令(6)に相当する機械命令の具体例を示す。図
7は、レジスタ使用情報更新指示部5での図5に示す命
令(5)に相当する機械命令の具体例を示す。
【0049】図6に示される命令は、基本的に、命令コ
ードを示すフィールド(sub ) として8ビット、dest
ination レジスタを示すフィールド(p2)として5ビ
ット、第1被演算子を示すフィールド(v1)として5
ビット、第2被演算子を示すフィールド(v2)として
5ビットを有している。
【0050】レジスタ使用情報更新指示部5は、命令の
実行により使用が開始されるレジスタ及び使用が終了さ
れるレジスタの情報を命令の中に記述する。この場合、
命令の実行により参照されるレジスタのうち、使用が終
了とされたレジスタは、以降の命令で参照されない。従
って、本発明は本命令で参照されるレジスタが以降の命
令で参照されるか否かを示すフィールドを命令中に持た
す構成にしている。
【0051】図7に示す第1実施例の命令では、図6に
示すフィールドに加え、命令により参照されるレジスタ
の値が後続の命令で参照されるか否かを示すフィールド
を2ビット分付加し、後続命令で参照されないならば、
該当ビットをセットする。図5の命令(5)では、v1
の使用が本命令をもって終ることが記されるので、v1
に相当するフィールドをセットし、v2に相当するフィ
ールドはセットしない。
【0052】一方、使用が開始されるレジスタは、命令
の実行により値が定義されるレジスタである。このレジ
スタは、destination レジスタ(命令の結果が格納され
るレジスタ)であるから、特に新たなフィールドを追加
することなく実現することができる。従って、この場
合、図7に示す命令にソースレジスタの使用が当該命令
を持って終るか否かを示すフィールドを持たすことによ
り対応できる。
【0053】この場合に、レジスタ使用情報更新指示部
5は destination レジスタのフィールドと source レ
ジスタと以降の命令で参照されるか否かを示すフィール
ドとの組を指示する。
【0054】レジスタの使用の開始又は終了の情報は、
高級言語で記述されたプログラムに対しては、コンパイ
ラがレジスタの生存区間の解析を行なうことにより抽出
する。アセンブリ言語で記述されたプログラムに対して
は、プログラム中に明示的に記述してもよいし、明示的
に記述されなかったプログラムからレジスタの生存区間
を解析する解析プログラムを作り、本解析プログラムに
より抽出するようにしてもよい。図8は、図7に示す命
令に対するレジスタ使用情報検出部3、レジスタ使用情
報更新部5、レジスタ使用情報保持部6の具体例を示
す。
【0055】レジスタ使用情報検出部3は、命令中に記
述される各レジスタフィールドよりレジスタ番号をそれ
ぞれ抽出する第1、第2及び第3レジスタセレクタ3
1、32及び33を有している。
【0056】第1レジスタセレクタ31は、命令の第2
3−19ビット目の第1フィールドからレジスタを抽出
する。第1フィールドは本命令の実行により使用が開始
されるレジスタの番号である。
【0057】第2レジスタセレクタ32は、命令の第1
8−14ビット目の第2フィールドからレジスタを抽出
する。第2フィールドは、第8ビット目がセットされて
いる時に、命令の実行により使用が終了されるレジスタ
の番号である。第2レジスタセレクタ32の後には、第
1ラッチ34が設けられ、第8ビットがセットされてい
る時のみレジスタ番号をレジスタ使用情報更新部5に送
る。
【0058】第3レジスタセレクタ33は、命令の第1
3−9ビット目の第3フィールドからレジスタを抽出す
る。第3フィールドは、第7ビット目がセットされてい
る時に、本命令の実行により使用が終了されるレジスタ
の番号である。第3レジスタセレクタ33の後には、第
2ラッチ35が設けられ、第7ビットがセットされてい
る時のみレジスタ番号をレジスタ使用情報更新部5に送
る。レジスタ使用情報保持部6は計算機が持つレジスタ
の番号が該当ビットに相当するようなビットの並び構成
をとっている。
【0059】レジスタ使用情報更新部5は、レジスタ使
用情報検出部3の出力に従い、レジスタの使用開始時に
レジスタ使用情報保持部6に対応するビットをセット
し、レジスタの使用終了時にレジスタ使用情報保持部6
に対応するビットをクリアする。本操作により、レジス
タ使用情報保持部6は現在実行されているプログラムが
その時点で必要としているレジスタに対応するビットを
セットする。第1実施例における手続の呼び出し時のレ
ジスタ退避は、図5の命令(1)及び(10)を用いて
行なわれる。
【0060】図9は、図5の命令(1)の具体例を示
す。図9において、命令の種類 saveを表すコードの他
に、手続で使用するために値を変えるおそれのあるレジ
スタに対応するv1、v2のビットがセットされ、それ
以外のレジスタに対応するビットがクリアされたフィー
ルドφを持っている。図10は図9の具体的なv1、v
2の例を示した図であり、v1がセットされ、v2がセ
ットされていない状態を示す。
【0061】本命令が命令実行部4で実行される時に
は、レジスタ使用情報参照部7がレジスタ使用情報保持
部6のビット列を読み出し、命令の中に示したビット列
との間で論理積をとり、その結果によりセットされてい
るビットに対応するレジスタを退避させる。この時、前
記論理積の結果も退避しておく。そして、退避されたレ
ジスタに対応するレジスタ使用情報保持部6の該当ビッ
トをクリアする。
【0062】レジスタ復帰は、図5の命令(8)及び
(13)を用いても行なわれる。退避されている論理積
の結果を呼びだすことにより、どのレジスタが退避され
ているかを知ることができるので、対応するレジスタ復
帰をすればよい。そして、復帰されたレジスタに対応す
るレジスタ使用情報保持部6の該当ビットをセットす
る。次に、図5に示す命令列の実行に伴う第1実施例の
動作を説明する。
【0063】命令(1)が実行されると、その時点での
レジスタ使用情報保持部6のビット列と、命令に格納さ
れているビット列との論理積がとられ、セットされたビ
ットに対応するレジスタ及び、その論理積の結果が退避
される。退避されたレジスタに相当するレジスタ使用情
報保持部6の該当ビットはクリアしておく。命令(2)
が実行されると、レジスタv1に値が定義されるため、
レジスタ使用情報保持部6の該当するビットがセットさ
れる。命令(3)が実行されると、レジスタv2に値が
定義されるため、レジスタ使用情報保持部6の該当する
ビットがセットされる。命令(5)が実行されると、レ
ジスタv1の使用が終了するため、レジスタ使用情報保
持部6の該当するビットがクリアされる。命令(7)が
実行されると、レジスタv2の使用が終了するため、レ
ジスタ使用情報部6の該当ビットがクリアされる。
【0064】命令(10)が実行されると、その時点で
のレジスタ使用情報保持部6のビット列と、命令に格納
されているビット列との論理積がとられ、v1及びv1
のみがセットされたビット列が退避される。この場合、
v1に相当するレジスタ使用情報保持部6の該当ビット
はクリアしておく。命令(12)が実行されると、レジ
スタv1の使用が終了するため、レジスタ使用情報保持
部6の該当するビットがクリアされる。
【0065】命令(13)が実行されると、退避されて
いるレジスタ退避の情報を読み出す。ここでは、v1の
みが退避されていることがわかるので、v1のみを復帰
する。v1に対応するレジスタ使用情報保持部6の該当
ビットはセットしておく。
【0066】命令(8)が実行されると、退避されてい
るレジスタ退避の情報を読み出す。この場合、退避され
ているレジスタがわかるので、退避されているレジスタ
のみを復帰する。この復帰したレジスタに対応するレジ
スタ使用情報保持部6の該当ビットはセットしておく。
【0067】上記のようにすれば手続の呼び出しにおい
て、退避する必要がある最小限のレジスタ、すなわち、
手続からの復帰後に値が保存されていることが必要であ
り、しかも呼び出し先の手続で変更されるようなレジス
タ、のみを退避/復帰することができる。割込処理によ
りプログラムの実行が中断される場合のレジスタ退避に
ついて述べる。
【0068】上述したような手続の呼び出しと同様な方
法をとれば、レジスタ使用情報保持部6を参照すること
により、割込処理による中断時点での必要なレジスタが
わかる。従って、割り込みによりレジスタを退避する場
合は、レジスタ使用情報保持部6の該当ビットがセット
されているレジスタのみを退避すればよい。この場合、
レジスタ使用情報保持部6を共に退避しておくことによ
り、退避されたレジスタがどのレジスタであるかがわか
るので、復帰時には、レジスタ使用情報保持部6に保持
された内容の基づいて退避されたレジスタのみを復帰す
ればよい。本発明の第2実施例としてレジスタの割当を
行なう場合を説明する。第2実施例においても、図2に
示すプログラムを用いた場合を取り上げる。
【0069】従来例の図3、図4にそれぞれに示す命令
列は、ともに手続f、gで同じレジスタを使用するよう
にコード生成を行なっているため、レジスタの退避の必
要が生じる。上述した図5の命令列でも、退避するレジ
スタは最小限であるにも拘らず退避は起こる。
【0070】上記のような従来のレジスタ割り当ては、
ソフトウェアで静的に行なわれるために、ある手続が呼
ばれる時にどのレジスタが使用されているかを解析する
ことが極めて困難であり、各手続単位で割当を行なわざ
るを得ない。このため、空いているレジスタがあるのに
も拘らず使用されているレジスタを割り当てることによ
り、レジスタの退避/復帰が必要とされることが多い。
【0071】図11は本発明の計算機装置の第2実施例
の概略構成を示すブロック図である。図11において、
図1と同一部分には同符号を付し、説明は省略する。図
11に示すように、レジスタ使用情報検出部3の後にレ
ジスタマッピング部8が接続されている。レジスタマッ
ピング部8は、プログラム中で指定されたレジスタ番号
を計算機装置のレジスタ番号に対応づける機能を有す
る。上記の構成により、ソフトウェアでは仮想的なレジ
スタ割当のみを行ない、実行時に空いているレジスタを
探してそれを割り当てることを可能にしている。
【0072】図12は図11のレジスタマッピング部8
の動作を示すフローチャートである。レジスタ使用情報
検出部3の機能は上述したと同様で、入力された命令の
レジスタ番号及び本レジスタ番号が本命令により値が定
義されるか参照されるか、参照される場合は、該当レジ
スタの使用は終了するか否かなどの情報を検出する。
【0073】レジスタマッピング部8は、プログラム中
に詳述されたレジスタ番号(以下、仮想レジスタ番号と
呼ぶ)に対応する、計算機装置が持つレジスタの番号
(以下、物理レジスタ番号と呼ぶ)が登録されているか
否かを調べる(ステップA1)。ステップA1におい
て、前記物理レジスタが登録されていればその物理レジ
スタ番号を命令実行部に出力する(ステップA2)。登
録されていなければ、そのレジスタの使用は定義である
か或いは参照であるかを調べる(ステップA3)。
【0074】ステップA3において、レジスタの使用が
参照であるならば、値を定義されていないレジスタが参
照され、正しい命令列でないことを意味するので、レジ
スタマッピング部8は例外処理要求を発する(ステップ
A4)。定義であるならば、レジスタ使用情報保持部6
が参照され、レジスタマッピング部8は使用していない
レジスタがあるか否かを調べる(ステップA5)。
【0075】ステップA5において、YESであれば、
使用していないレジスタの中の1つを選び、仮想レジス
タに対応する物理レジスタとして登録し、命令実行部4
に出力すると共に、レジスタ使用情報保持部6の該当ビ
ットをセットする(ステップA6)。NOならば、いず
れかのレジスタを退避することで、使用できるレジスタ
を得なければならないので、例外処理要求を発する(ス
テップA7)。
【0076】本例外処理要求が、オペレーティングシス
テムにより検知され、オペレーティングシステム、又
は、オペレーティングシステムから呼び出される別のプ
ログラムによりレジスタの退避及び退避されたレジスタ
に対応するレジスタ使用情報保持部6の該当ビットがク
リアされる。図13は、図2に示すプログラムに従って
レジスタ割り当てをする命令列の一例を示す図である。
【0077】図13において、手続へ渡す引数にはレジ
スタp1、p2、… を、手続から返す値にはレジスタ
rを、手続内部で使用する変数にはレジスタv1、v
2、…をそれぞれ使用するものとする。
【0078】(1)は、変数pが割り当てられているレ
ジスタp1と、変数qが割り当てられているレジスタp
2の値の加算を行ない、変数iが割り当てられているレ
ジスタv1に結果を格納する命令を示す。この場合、レ
ジスタマッピング部8は、仮想レジスタp1、p2に該
当する物理レジスタが登録されているか否かを調べ、物
理レジスタが登録されているならばその物理レジスタ番
号を命令実行部4に出力する。レジスタマッピング部8
は物理レジスタが登録されていなければ例外処理要求を
発する。更に、レジスタマッピング部8は仮想レジスタ
v1に該当する物理レジスタが登録されているか否かを
調べ、物理レジスタが登録されていればその物理レジス
タ番号を命令実行部4に出力する。レジスタマッピング
部8は物理レジスタが登録されていなければレジスタ使
用情報保持部6を参照し、使用していないレジスタがあ
るか否かを調べる。
【0079】レジスタマッピング部8は、使用していな
い物理レジスタがあれば、使用していない物理レジスタ
の1つを選び、仮想レジスタv1に対応する物理レジス
タとして前記物理レジスタを登録する。レジスタマッピ
ング部8は前記登録結果を命令実行部4に出力すると共
に、レジスタ使用情報保持部6の該当ビットをセットす
る。一方、使用していない物理レジスタがない場合に
は、レジスタマッピング部8は、この関数で使用しない
いずれかの物理レジスタを退避することにより、使用で
きる物理レジスタを得なければならないので、例外処理
要求を発する。
【0080】本例外処理要求は、オペレーティングシス
テムにより検知されオペレーティングシステム、又は、
オペレーティングシステムから呼び出される別のプログ
ラムによりレジスタを退避し、退避されたレジスタに対
応するレジスタ使用情報保持部6の該当ビットをクリア
させる。この後、v2に対応する物理レジスタが割り当
てられ、実行が再開される。(2)及び(3)は、
(1)と同等の作用が起こる。(4)のv1を処理する
時は、実行が終った後に該当する物理レジスタ番号のビ
ットがクリアされる。(6)の実行が終了すると、v2
に該当する物理レジスタ番号のビットがクリアされる。
【0081】(7)及び(11)は、例外処理要求が起
こって退避したレジスタを復帰する命令である。レジス
タは、例えば値と物理レジスタ番号との対としてスタッ
ク上に退避する。本命令の実行によりそれらをレジスタ
に復帰すれば良い。この場合、退避されたレジスタがな
ければ、復帰する必要はない。
【0082】上記のようにすれば、レジスタ退避の命令
は命令列中にはなく例外処理要求が起こった時のみに退
避されるので、使用していないレジスタがあるうちは手
続の呼び出しでのレジスタの退避/復帰が必要でなくな
る。従って、本発明により、高速にプログラムを実行す
ることが可能になる。更に、レジスタの退避を静的に指
示する必要がないので、手続の呼び出しによって退避す
るレジスタと退避しないレジスタとに分類する必要がな
いことにもなり、レジスタの有効活用が実現できる。第
2実施例の変形として次のような実施例も考えられる。
【0083】図12ステップA4で示す例外処理要求が
起こったとき、上記実施例では、未定義レジスタ参照と
して処理されるが、変形例では、オペレーティングシス
テム又はオペレーティングシステムから呼び出される別
のプログラムにより、その仮想レジスタに対応する物理
レジスタが退避されているか否かを調べ、退避されてい
るならば復帰させ、退避されていないならば、未定義レ
ジスタの参照として処理を行う。従って、たとえレジス
タの値が退避されていても、それが参照される時に復帰
されるわけであり、図13に示す命令列のうち、命令
(7)、(11)を実行する必要がない。また、仮想レ
ジスタの定義の時に使用していない物理レジスタがない
場合に、この関数で使用するか否かに関わらず、退避の
対象とすることができる。
【0084】第2実施例及びその変形を取り上げた実施
例では、レジスタの使用が終了することを示す命令が実
行されない場合、レジスタ使用情報保持部6に記録され
た該当ビットが、その生存区間に終了しているにも関わ
らず、クリアされない場合がある。図14は、関数fの
中に分岐条件があり、条件が成立するとfを呼んだ関数
に戻る。図15は、図14に対応するアセンブリプログ
ラムである。(3)は、レジスタp1の内容とφとを比
較する命令である。
【0085】(4)は、(3)の結果、p1がφよりも
小さければ、L1で示される命令(本実施例では命令
(11))に分岐する命令である。分岐が行われた場
合、命令(6)及び命令(8)は実行されないので、仮
想レジスタv1及びv2に対応する物理レジスタのレジ
スタ使用情報保持部6内の該当ビットがクリアされな
い。これを解決するために、レジスタ使用情報保持6内
の指定ビットをクリアする命令を定義する。命令(1
2)が該命令であり、仮想レジスタv1、v2に対応す
るレジスタ使用情報保持部6内の該当ビットをクリアす
る。本発明の第3実施例として未定義レジスタの不正参
照の検出について述べる。
【0086】図16は本発明の計算機装置の第3実施例
の概略構成を示すブロック図である。図16において、
図1と同一部分には同符号を付し、説明は省略する。図
16に示すように、本実施例装置は、図1の計算機装置
に加えレジスタ照合部9を有している。レジスタ照合部
9は、レジスタ使用情報検出部3で参照と検出されたレ
ジスタと、レジスタ使用情報参照部7の出力を照合す
る。そして、レジスタ照合部9はレジスタに対応するビ
ットがレジスタ使用情報保持部6にセットされていなけ
れば例外処理要求を発する。従って、本実施例によれ
ば、未定義レジスタの不正参照の検出を行うことができ
る。第4実施例を説明する。
【0087】例えば、整数演算用レジスタ、浮動小数演
算用レジスタのように、用途の異なるレジスタを有する
計算機においては、一方のレジスタを使用しないプログ
ラムについても、そのプログラムが一方のレジスタを使
用しないという情報がないため、割込処理の際には、双
方のレジスタをすべて退避/復帰することが行われてい
る。この場合も、退避/復帰処理が不必要であるレジス
タについて、これらの処理を省略するため次のように構
成している。ある計算機Mの上で動作する仮想的なマル
チタスクオペレーティングシステムOを考え、本システ
ムOのプロセス切換えの効率を向上させる場合を説明す
る。
【0088】計算機Mは、プロセッサPを中央演算処理
装置として動作させ、さらに浮動小数点演算コプロセッ
サFを搭載している。プロセッサPは幾つかの汎用レジ
スタを持ち、浮動小数点演算コプロセッサFは幾つかの
浮動小数点演算用レジスタを持っている。計算機Mは一
定時間間隔ごとにプロセッサPに割込みをかけるインタ
ーバルタイマ割込みの機能を持つものと仮定する。
【0089】この時、オペレーティングシステムOはマ
ルチタスキング機能を持つオペレーティングシステムで
あり、複数のユーザープロセスを時分割多重化して実行
する能力を持つ。プロセスの切り換えは、インターバル
タイマ割込みによって実行中のプロセスが中断し、シス
テムOの割込みハンドラが起動されて、その割込みハン
ドラにより実行中のプロセスの状態を退避し、別のプロ
セスの状態を復帰することによって行われる。本プロセ
スの状態の退避/復帰処理の中には、当然のことなが
ら、プロセッサP及び浮動小数点演算コプロセッサFの
レジスタの内容の退避/復帰が含まれる。
【0090】本実施例では、割込まれた側のプログラム
が使用しないレジスタを検出する不使用レジスタ検出手
段を実装する。以下に、浮動小数点演算コプロセッサF
のレジスタについて、このレジスタの不使用を検出する
場合を図17に従い説明する。
【0091】プログラム言語処理系において、言語プロ
セッサ12を用いてソースプログラム11からオペレー
ティングシステムO(18)のためのプログラムを生成
し、これらのプログラムのオブジェクトモジュール13
に浮動小数点演算コプロセッサFのレジスタの不使用フ
ラグfo(14)を設ける。このフラグfo(14)は
オブジェクトモジュール13に含まれる各プログラムが
浮動小数点演算コプロセッサFを利用しないことを示す
フラグである。
【0092】オペレーティングシステムO(18)のた
めのコンパイラ、アセンブラなどの言語プロセッサ12
には、フラグfo(14)に適切な値をセットする特別
な機能が設けられる。すなわち、オペレーティングシス
テムO(18)のための言語プロセッサ12には、オブ
ジェクトモジュール13を生成するにあたって、その中
に含まれる機械語命令を調べ、浮動小数点演算コプロセ
ッサFを利用する命令が含まれていない場合にフラグf
o(14)に1を、浮動小数点演算コプロセッサFを利
用する命令が含まれてる場合にフラグfo(14)に0
を代入する機能が設けられている。
【0093】ロードモジュール16に、オブジェクトモ
ジュール13と同様に、ロードモジュール16に含まれ
るプログラムが浮動小数点演算コプロセッサFを利用し
ないことを示すフラグf1(17)を設ける。この場
合、オペレーティングシステムO(18)のためのリン
カ15は、全てのオブジェクトモジュール13のフラグ
fo(14)に1が代入されている時に、ロードモジュ
ール16のフラグf1(17)に1を代入するような機
能を有している。
【0094】オペレーティングシステムO(18)の内
部に、オペレーティングシステムO(18)の上で動く
全てのユーザープロセスの一つ一つに対して、対応する
プロセスが浮動小数点演算コプロセッサFを利用しない
ことを示すフラグfp(19)が設けられる。
【0095】オペレーティングシステムO(18)は、
プロセスの実行開始に先立ってそのロードモジュール1
6のフラグf1(17)を調べ、フラグf1(17)に
1が代入されていたら対応するフラグfp(19)に1
を代入する。
【0096】以上のようにして、オペレーティングシス
テムO(18)自身とオペレーティングシステムO(1
8)のための言語プロセッサとに特別な機能を設けるこ
とにより、浮動小数点演算コプロセッサFを使用しない
プロセスについてはフラグfp(19)に1が代入さ
れ、本フラグfp(19)を調べることによって浮動小
数点演算コプロセッサFのレジスタの不使用を検出でき
る。
【0097】上記の動作により、不使用と判定されたレ
ジスタは退避/復帰処理が省略される。この場合、オペ
レーティングシステムO(18)のインターバルタイマ
割込みハンドラ内において、プログラムはフラグfp
(19)の値によって条件分岐するプログラムとして実
行される。すなわち、割込みハンドラ内でプロセス切り
換えのためにレジスタ退避を行う場合に、中断しようと
するプロセスのフラグfp(19)が参照され、もし0
が代入されていたら浮動小数点演算コプロセッサFのレ
ジスタについて退避が行われる。逆に、フラグfp(1
9)に1が代入されていたら浮動小数点演算コプロセッ
サFのレジスタについて退避が行われないような条件分
岐の処理が行われる。図18は上記の処理のうちの退避
処理を行うためのフローチャートを示す図である。
【0098】図18によれば、まず、プロセッサPのレ
ジスタが退避される(ステップB1)。次にフラグfp
の値が調べられ(ステップB2)、フラグfpの値が0
であれば、浮動小数点演算コプロセッサFのレジスタが
退避される。ステップB2において、フラグfpの値が
1であれば、浮動小数点演算コプロセッサFのレジスタ
は退避されない。上記のようにして、不必要なレジスタ
の退避を避けることができる。
【0099】一方、復帰処理についても退避処理と同様
であり、復帰させようとするプロセスのフラグfp(1
9)を参照し、もし該当レジスタfp(19)に0が代
入されていたら、浮動小数点演算コプロセッサFのレジ
スタについて復帰が行われ、逆に、フラグfpに1が代
入されていたら浮動小数点演算コプロセッサFのレジス
タについては復帰が行われないような条件分岐の処理が
行われる。
【0100】以上のように、浮動小数点演算コプロセッ
サFを使わないユーザープロセスはプロセス切り換えに
ともなう浮動小数点演算コプロセッサFのレジスタの退
避/復帰が省略できるので、オペレーティングシステム
Oのプロセス切り換えの効率を向上させることが可能に
なる。
【0101】第4実施例では、コンパイラ又はアセンブ
ラに特別な機能を持たせることにより、不使用レジスタ
を検出する例を示した。本機能をコンパイラ又はアセン
ブラとは独立した1つのプログラムとして実装すること
も可能である。ある計算機Mの上で動作する仮想的なオ
ペレーティングシステムOを考え、本システムOのキー
ボード入力割込処理の効率を向上させる場合を説明す
る。
【0102】計算機MはプロセッサPを中央演算処理装
置として動作する。プロセッサPは0から31の番号を
付けられた32個の汎用レジスタを持っている。プロセ
ッサPは複数のレジスタの内容をメモリに書込む機械語
命令 stregs と、逆にメモリの内容を複数のレジスタに
読み出す機械語命令 ldregs を持っている。 stregs命
令は2つのオペランドを有する。 stregs の第一オペラ
ンドは転送すべきレジスタを示す32bitのマスクで
あり、本マスクの1の立っているビットのビット番号と
同じレジスタ番号をもつレジスタの内容がメモリに転送
される。 stregs の第二オペランドはメモリ上の実効ア
ドレスであり、この実効アドレスから始まる連続したメ
モリ位置に、前記第1オペランドで指定されたレジスタ
の内容を転送する。 ldregs 命令も同様に2つのオペラ
ンドを有する。 ldregs の第一オペランドは stregs 命
令と同様の転送すべきレジスタを示すマスク、 ldregs
の第二オペランドは転送元の実効アドレスである。
【0103】この場合のオペレーティングシステムOは
キーボード入力割込み処理ハンドラを持つオペレーティ
ングシステムである。ユーザープロセスの実行中にキー
ボードからの割込みが発生すると、オペレーティングシ
ステムOはユーザープロセスの実効を中断して、キーボ
ード入力割込みハンドラを起動する。前記ハンドラ内
で、キーボードから入力された文字が読みとられ、それ
をオペレーティングシステムO内部に用意されたキーボ
ード入力キューに入力する。ここで、キーボード割込み
ハンドラのプログラム自身は、レジスタ番号0番から1
9番までの20の汎用レジスタを使用することがわかっ
ているものとする。従来は、割込まれたユーザープロセ
スの実行状態を破壊しないように、割込みハンドラの先
頭でハンドラの使用する20のレジスタの全てを退避
し、ハンドラの最後で退避した20のレジスタを復帰し
ている。これらの退避/復帰はそれぞれ stregs 命令及
び ldregs 命令を用いて、その第一引き数に16進数で
000FFFFF を指定することによって実現している。
【0104】第4実施例では、割込まれた側のプログラ
ムが使用しないレジスタを検出する不使用レジスタ検出
手段を実装するが、その本質的な機能は上述した場合と
同様である。
【0105】ここでは、プロセッサPの持つレジスタの
1つ1つについて、それがプログラムで使われるか否か
を検出するものと仮定する。従って、プロセッサPの持
つレジスタの1つ1つに対応してそれがプログラムで使
われないことを示すために、全部で32のフラグが必要
となる。ここでは、32のフラグの集合を1つの32b
it長のデータとして考えたものを不使用レジスタマス
クと呼ぶ。
【0106】オペレーティングシステムOのためのプロ
グラムを生成するプログラム言語処理系において、その
オブジェクトモジュールに32bit長のフィールドf
oを設ける。このフィールドfoは、オブジェクトモジ
ュールに含まれるプログラムが使用しないレジスタを示
す不使用レジスタマスクを保持するためのフィールドで
ある。フィールドfoは不使用レジスタマスク内の1の
立っているビットのビット番号と同じレジスタ番号を持
つレジスタがそのオブジェクトモジュールで使用されな
いことを示す。オペレーティングシステムOのためのコ
ンパイラ、アセンブラ等の言語プロセッサには、フィー
ルドfoに適切な値をセットする特別な機能が設けられ
る。前記言語プロセッサはオブジェクトモジュールに含
まれる機械語命令を調べ、0番から31番までの全ての
レジスタについて、オブジェクトモジュール内にレジス
タをアクセスする命令が含まれていない時に、オブジェ
クトモジュール内の該当するレジスタの番号と同じビッ
ト番号を持つフィールドfoのビットに1を代入する。
【0107】ロードモジュールにも言語プロセッサと同
様に、そのロードモジュールに含まれるプログラムが使
用しないレジスタを示す32bit長のフィールドf1
が設けられる。フィールドf1は、前記ロードモジュー
ルに含まれるプログラムが使用しないレジスタを示す不
使用レジスタマスクである。フィールドf1は、本マス
クの1つの立っているビットのビット番号と同じレジス
タ番号持つレジスタが前記ロードモジュールで使用され
ないことを示す。オペレーティングシステムOのための
リンカには、全てのオブジェクトモジュールのfoの各
ビットごとの論理積を計算してf1の対応するビットに
代入する機能が設けられる。
【0108】オペレーティングシステムOの内部に、オ
ペレーティングシステムOの上で動く全てのユーザープ
ロセスの一つ一つに対して、対応するプロセスが使用し
ないレジスタを示す32bit長のフィールドfpが設
けられる。オペレーティングシステムOに、プロセスの
実行開始に先立って、ロードモジュールのフィールドf
1の値をフィールドfpに代入する機能が設けられる。
【0109】上記のようにして、オペレーティングシス
テムO自身とオペレーティングシステムOのための言語
プロセッサとに特別な機能を設けることにより、プログ
ラムが使用しないレジスタを示すマスクがフィールドf
pに代入されて、不使用レジスタを検出することができ
る。
【0110】不使用と判定されたレジスタは退避/復帰
処理が省略される。従来のキーボード割込み処理ルーチ
ンでは、割込み処理ルーチンで使う20の汎用レジスタ
の全てが退避/復帰されている。しかし、実際に退避/
復帰する必要があるレジスタは割込まれた側のプログラ
ムで使用されており、かつ割込み処理ルーチンで使用さ
れるレジスタである。割込み処理ルーチンで使用される
レジスタであっても割込まれた側のプログラムで使用さ
れないレジスタは退避/復帰する必要はない。
【0111】上記のような不必要なレジスタの退避/復
帰を省略するためには、割込まれた側のプログラムで使
用するレジスタを示すマスクfpと割込み処理ルーチン
で使用するレジスタを示すマスク 000FFFFF との各ビッ
トごとの論理積を求め、その論理積がキーボード入力割
込みハンドラ内でレジスタ退避/復帰を行うための str
egs 及び ldregs 命令の第一引き数として与えられるこ
とによって実現される。
【0112】従って、上記のようにしても不必要なレジ
スタの退避/復帰を省略することができるので、オペレ
ーティングシステムOのキーボード割込み処理の効率を
向上させることができる。
【0113】本発明の第5実施例を説明する。基本的な
構成は第1実施例と同様であることから、構成図は省略
する。第1実施例と異なる点は、レジスタ使用情報更新
部5の機能を変えた点である。以下、第5実施例の動作
について第1実施例と異なる点を説明する。
【0114】レジスタ使用情報検出部3により抽出され
た使用を開始するレジスタ及び使用を終了するレジスタ
のそれぞれの情報は、レジスタ使用情報更新部5に出力
される。レジスタ使用情報更新部5は、前記情報により
レジスタの使用の開始及び使用の終了に対して、それぞ
れスタートビット及びエンドビットを命令に付加する機
能を有している。
【0115】上記のように構成された、本実施例の動作
を図19(a)〜図19(c)を参照して説明する。図
19(a)は、実行プログラム中にあるレジスタの使用
が終了する前にレジスタ参照が行われるプログラム例で
ある。図19(b)は同一レジスタが連続して使用開始
された場合のポインタの移動を示す図である。図19
(c)は実行プログラム中であるレジスタの使用が終了
する前にサブルーチンが呼ばれた場合に、サブルーチン
で同一レジスタの使用が開始された例を示す図である。
【0116】図19(a)は、あるレジスタ(r1とす
る)が使用されているときに、そのレジスタの使用が終
了する前に同じレジスタr1の使用が開始される例を示
す。図19(a)において、r1に対するスタートビッ
トをSB1、SB2とし、それらのエンドビットをそれ
ぞれEB1、EB2とする。また、前記各ビットの検出
は、SB1、BS2、EB1、EB2の順に行われるも
のと仮定する。
【0117】図19(b)に示すように、まず、SB1
が検出されると、レジスタr1に対するポインタが設け
られる。次に、SB2が検出されると、SB1の検出時
に設けられたポインタが1つ増加される。従って、SB
2の検出後、レジスタr1は1つ増加されたポインタの
値に従ってアサインされる。
【0118】EB2が検出されると、該当ポインタの値
はクリアされポインタを1つ減少する。従って、EB2
の検出後、レジスタr1はSB1の検出時に設定された
ポインタの値に従って、アサインされる。このことか
ら、連続したプログラム中で同じレジスタ番号が重複し
て参照された場合であっても、他のスタートビット(こ
の場合はSB1)によって設定されたレジスタポインタ
を破壊することがないので、EB2の検出後にSB1で
設定されたレジスタの使用が可能となる。次に、EB1
が検出されると、最初のr1に対応して設けられたポイ
ンタがクリアされる。
【0119】更に、図19(c)に示すように、サブル
ーチンにおいて、サブルーチンを呼び出す前に使用の終
了していないレジスタの使用を開始する場合も図19
(b)に示したようなポインタの移動により、図19
(a)の場合と同様に適用可能である。
【0120】上記のように第5実施例によれば、連続し
たプログラム中で同じレジスタ番号が重複して参照され
た場合であっても、他のスタートビット(SB1)によ
って設定されたレジスタポインタを破壊することがない
ので、後に設定されたレジスタの使用終了を示すエンド
ビット(EB2)の検出後に先のレジスタの使用開始を
示すスタートビット(SB1)で設定されたレジスタの
使用が可能となる。
【0121】更に、重複したレジスタの使用開始時点で
当該レジスタポインタを1つ増加し、終了時点で当該レ
ジスタポインタをクリアして、レジスタポインタを1つ
減少することから、レジスタ量が見かけ上大きくなるの
で、レジスタのフィールドが少ない状態で有効なレジス
タ利用が可能となる。従って、第5実施例によれば、レ
ジスタ+スタック型の融合した計算機(machin
e)とすることが可能である。本発明は、上記の実施例
に限定されない。本発明の要旨を変更しない範囲で種々
変更して実施できる。
【0122】
【発明の効果】本発明によれば次のような効果が得られ
る。
【0123】まず、レジスタ使用状態保持手段の内容を
参照することにより、手続の呼び出しの割込処理等にお
いて、レジスタの退避が必要なときに必要最小限のレジ
スタを決定することができ、前記必要最小限のレジスタ
のみを退避の対象とし、復帰は退避したレジスタのみを
対象とすることが可能である。
【0124】次に、プログラム中で指示するレジスタの
割り当ては仮想的なものと考え、実行時にレジスタ使用
情報保持手段の内容を参照して使用されていないレジス
タの割り当てを試み、成功すれば該当レジスタを退避す
る必要がなくなり、失敗した時にのみ該当レジスタを退
避してから使用するようにできるので、レジスタが空い
ているにもかかわらず、これを利用しないような不都合
がなくなり、しかもレジスタをあらかじめ区分するよう
な必要もないので、レジスタの有効活用ができる。
【0125】更に、オペレーティングシステム上で動く
各プロセスの実行に先立ってプロセス毎に記憶された所
定のレジスタを利用しない旨の情報を調べるので、利用
されていないと判定されたレジスタの退避/復帰処理を
省略することができ、不必要なレジスタの退避/復帰を
避けることができる。
【0126】加えて、手続の呼び出しや割込処理などに
よりレジスタの退避/復帰を必要とする場合に、必要最
小限のレジスタのみを退避/復帰することができる。実
行時に使用していないレジスタを検索して割り当てるこ
とにより、レジスタの有効活用を行うことができる。更
に、レジスタの不正参照を検出することもできる。これ
により、より高速で、かつ信頼性の高い計算機装置を提
供できる。加えて、例えば浮動小数点演算専用レジスタ
を持つ計算機上で浮動小数点演算を行わないプログラム
を実行する場合のように、用途の異なる複数の種類のレ
ジスタを持つ計算機上で、ある種のレジスタを使用しな
いプログラムを実行している際に発生する割込みの処理
において、不必要なレジスタを退避/復帰することなく
省くことができ、処理の一層の効果を発揮できる。
【0127】また、所定の処理の開始/終了に基づいて
ポインタを格納するレジスタの値を増減するので、レジ
スタフィールドを増加することなくレジスタ量が見かけ
上多くなると共に、所定の処理開始前に格納されたデー
タが破壊されないので、後の処理で所望のデータをアク
セスすることができる。
【図面の簡単な説明】
【図1】本発明の第1実施例の概略構成を示すブロック
図。
【図2】図1に示す実施例に用いられるプログラムの一
例を示す図。
【図3】図2に示すプログラムを実行する場合の、従来
の caller saved conventionによる命令列を示す図。
【図4】図2に示すプログラムを実行する場合の、従来
の callee saved conventionによる命令列を示す図。
【図5】図2に示すプログラムを実行する場合の命令列
を示す図。
【図6】従来の命令の形式の一例を示す図。
【図7】命令の形式の一例を示す図。
【図8】図1に示す実施例の一部を詳細に示した図。
【図9】図1の実施例のレジスタ退避命令の形式を示す
図。
【図10】図9の具体的な適用について示した図。
【図11】本発明の第2実施例の概略構成を示す図。
【図12】図11に示す実施例のレジスタマッピング部
の動作を説明するためのフローチャート。
【図13】図11に示す実施例を実行する場合の命令列
を示す図。
【図14】第2実施例の変形例に用いられるプログラム
の一例を示す図。
【図15】図14のプログラムを実行する場合の命令列
を示す図。
【図16】本発明の第3実施例の概略構成を示す図。
【図17】本発明の第4実施例の概略構成を示す図。
【図18】図17に示す実施例を説明するためのフロー
チャート。
【図19】本発明の第5実施例を説明するための図であ
って、(a)は実行プログラム中に重複して同一レジス
タが参照された例、(b)はポインタの移動例を示す
図、(c)は同一レジスタがサブルーチン内で参照され
た例、をそれぞれ示す図。
【符号の説明】
1…命令入力部、2…命令解読部、3…レジスタ使用情
報検出部、4…命令実行部、5…レジスタ使用情報更新
部、6…レジスタ使用状態保持部、7…レジスタ使用情
報参照部。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】プログラムの実行中の演算値を格納する複
    数のレジスタと、 前記プログラムの命令に対して、前記レジスタのうち使
    用を開始するレジスタと使用を終了するレジスタの使用
    情報とをそれぞれ抽出するレジスタ使用情報検出手段
    と、 前記命令を実行するために前記演算値の保存を要する前
    記抽出されたレジスタの使用情報を保持するレジスタ使
    用情報保持手段と、 前記レジスタ使用情報保持手段に保持された前記レジス
    タの前記使用情報に基づいて、前記複数のレジスタのう
    ちの所望のレジスタに対して所定の処理を実行する命令
    実行手段と、 前記レジスタ使用情報検出手段及び前記命令実行手段の
    出力に応じて、前記レジスタ使用情報保持手段に保持さ
    れた前記レジスタの前記使用情報を更新するレジスタ使
    用情報更新手段と、を具備することを特徴とする計算機
    装置。
  2. 【請求項2】プログラムの実行中の演算値を格納する複
    数のレジスタと、 前記各プログラムについて前記レジスタ中の所定のレジ
    スタの不使用を検出するレジスタ使用情報検出手段と、 前記検出結果に基づいてオペレーティングシステム上で
    動く各プロセスについて前記所定のレジスタを利用しな
    い旨の情報を保持するレジスタ使用情報保持手段と、 前記プロセスの実行に先立って前記プロセスの前記情報
    を調べ利用されていないと判定されたレジスタについて
    所望の処理を省略する命令実行手段と、 前記レジスタ使用情報検出手段及び前記命令実行手段か
    らの出力に応じて、前記レジスタ使用情報保持手段に保
    持された前記レジスタの前記使用情報を更新するレジス
    タ使用情報更新手段と、を具備することを特徴とする計
    算機装置
  3. 【請求項3】プログラムの実行中の演算値を格納する複
    数のレジスタと、 前記プログラム実行時に、前記プログラムの命令にレジ
    スタの使用開始命令に対してスタートビットを付加し、
    レジスタの使用終了命令に対してエンドビットを付加す
    る手段と、 前記スタートビットを検出した場合に、レジスタポイン
    タを設定する手段と、 前記スタートビットが付加された命令によって使用が開
    始され、エンドビットにより使用が終了する前に、同一
    のレジスタの使用を開始するスタートビットを検出した
    場合に、レジスタポインタをインクリメントする手段
    と、 エンドビットを検出する毎に対応するレジスタポインタ
    をクリアして、デクリメントする手段と、を具備するこ
    とを特徴とする計算機装置。
JP15519892A 1991-06-21 1992-06-15 計算機装置 Pending JPH05173788A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP15519892A JPH05173788A (ja) 1991-06-21 1992-06-15 計算機装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP15018991 1991-06-21
JP3-150189 1991-06-21
JP15519892A JPH05173788A (ja) 1991-06-21 1992-06-15 計算機装置

Publications (1)

Publication Number Publication Date
JPH05173788A true JPH05173788A (ja) 1993-07-13

Family

ID=26479870

Family Applications (1)

Application Number Title Priority Date Filing Date
JP15519892A Pending JPH05173788A (ja) 1991-06-21 1992-06-15 計算機装置

Country Status (1)

Country Link
JP (1) JPH05173788A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013050901A1 (en) * 2011-10-03 2013-04-11 International Business Machines Corporation Maintaining operand liveness information in a computer system
JP2014528603A (ja) * 2011-10-03 2014-10-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation レジスタの生存を示すコンパイルされたコードの生成

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013050901A1 (en) * 2011-10-03 2013-04-11 International Business Machines Corporation Maintaining operand liveness information in a computer system
JP2014528603A (ja) * 2011-10-03 2014-10-27 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation レジスタの生存を示すコンパイルされたコードの生成
JP2015501019A (ja) * 2011-10-03 2015-01-08 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation コンピュータ・システム内のオペランド活性情報の維持
US10061588B2 (en) 2011-10-03 2018-08-28 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information

Similar Documents

Publication Publication Date Title
JP3311462B2 (ja) コンパイル処理装置
Abraham et al. Predictability of load/store instruction latencies
Thistle et al. A processor architecture for Horizon
US6634023B1 (en) Compile method, exception handling method and computer
US6631460B1 (en) Advanced load address table entry invalidation based on register address wraparound
US7181730B2 (en) Methods and apparatus for indirect VLIW memory allocation
KR100940956B1 (ko) 다중 스레드 초장 명령어 프로세서 및 명령 처리 방법
KR20010095074A (ko) 다중 스레드 초장 명령어 프로세서, 명령어 처리 방법 및그 제품, 및 명령어 컴파일링 제품 및 컴파일러
KR940009095B1 (ko) 데이터 처리시스템
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
KR101059906B1 (ko) 연산 처리 장치 및 명령의 확장 방법
US5815701A (en) Computer method and apparatus which maintains context switching speed with a large number of registers and which improves interrupt processing time
KR20010095073A (ko) 다중 스레드 초장 명령어 프로세서, 명령어 처리 방법 및그 제품
JP3179536B2 (ja) ディジタルコンピュータの操作方法
EP0742517B1 (en) A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions
US5325494A (en) Computer
US5418919A (en) Apparatus and method for concurrently executing plural tasks in which identifiers specify steps in tasks
Rymarczyk Coding guidelines for pipelined processors
JP2005129001A (ja) プログラム実行装置、マイクロプロセッサ及びプログラム実行方法
JPH05173788A (ja) 計算機装置
US6606703B2 (en) Processor using less hardware and instruction conversion apparatus reducing the number of types of instructions
US7890740B2 (en) Processor comprising a first and a second mode of operation and method of operating the same
JP2002014868A (ja) メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法
CA1304823C (en) Apparatus and method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions
JP6882320B2 (ja) ベクトル命令の処理