JP2004030224A - プロセッサ、レジスタ退避方法およびレジスタ指定方法 - Google Patents

プロセッサ、レジスタ退避方法およびレジスタ指定方法 Download PDF

Info

Publication number
JP2004030224A
JP2004030224A JP2002185523A JP2002185523A JP2004030224A JP 2004030224 A JP2004030224 A JP 2004030224A JP 2002185523 A JP2002185523 A JP 2002185523A JP 2002185523 A JP2002185523 A JP 2002185523A JP 2004030224 A JP2004030224 A JP 2004030224A
Authority
JP
Japan
Prior art keywords
register
save
data
bit
procedure
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
JP2002185523A
Other languages
English (en)
Inventor
Koji Ozaki
尾崎 浩治
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP2002185523A priority Critical patent/JP2004030224A/ja
Publication of JP2004030224A publication Critical patent/JP2004030224A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

【課題】プロセッサにおいて、手続き呼び出し時の処理を効率化し、処理速度を向上させる。
【解決手段】2つの汎用レジスタ221aおよび221bの領域によってなるレジスタセットを設け、汎用レジスタ221aを通常状態として読み書きが行われる(A)の状態から、手続き呼び出しを行う直前に、退避許可情報に“1”をセットした(B)の状態に移行する。この状態では、汎用レジスタ221aの書き込みが禁止され、この後の手続きの処理による書き込みが発生した時点で、(C)のように書き込み先が汎用レジスタ221bに移行される。この状態では汎用レジスタ221aの読み書きが禁止されて退避状態とされ、汎用レジスタ221bが通常状態とされて手続きの処理による読み書きが行われる。
【選択図】    図3

Description

【0001】
【発明の属する技術分野】
本発明は、読み込んだ命令に従いレジスタを使用して動作するプロセッサと、このようなプロセッサにおけるレジスタ退避方法およびレジスタ指定方法に関する。
【0002】
【従来の技術】
現在、コンピュータや携帯端末はもとより、あらゆる電子機器においてマイクロプロセッサが用いられている。マイクロプロセッサは通常、演算処理に用いるデータやこのデータが格納されているアドレスの保持等に汎用的に使用される汎用レジスタと呼ばれるレジスタ領域を具備している。また、マイクロプロセッサを動作させる場合には、プログラムの長さを短くする等、効率のよい処理を行うために、プログラム中で関数やサブルーチン等の手続きを指定して呼び出し、実行させることが一般的に行われている。
【0003】
例えば、あるプログラムの実行中に手続き呼び出しを行った際には、この手続きを処理する間、呼び出し時点で呼び出し側が汎用レジスタに保持しているデータやアドレス等を後に使用可能とするために、汎用レジスタの内容をメモリ内のスタック領域に退避させておく必要がある。
【0004】
図7は、従来のプロセッサにおける手続き呼び出し時のレジスタの退避および復帰の処理例を示すフローチャートである。
ステップS701において、まず手続きの呼び出し側で使用しているレジスタの値を、スタックに退避させる。通常、手続き呼び出し時に退避させるレジスタはあらかじめ決められている。ステップS702において、手続きの呼び出しを行う。ステップS703において、被呼び出し側、すなわち呼び出された手続き側で保持しておくレジスタの値を、必要に応じてスタックに退避させる。ステップS704において、呼び出された手続きの処理を実行する。
【0005】
ステップS705において、手続きの処理が終了すると、被呼び出し側で退避しておいた値を、スタックから対応するレジスタに復帰させる。ステップS706において、手続きの処理から呼び出し側の処理へ復帰する処理を行う。ステップS707において、呼び出し側で退避しておいた値を、スタックから汎用レジスタに復帰させる。
【0006】
また、手続き呼び出しが行われた場合には、呼び出し側の処理と呼び出された手続きとの間で引数や戻り値が正しく受け渡される必要がある。図8は、従来のプロセッサにおける手続き呼び出し時の引数および戻り値の引き渡し処理について示す図である。
【0007】
図8では、手続き呼び出しが行われた際の演算結果や引数、戻り値に対して割り当てられるレジスタのアドレスを“r0”“r1”“r2”……と表している。
【0008】
ステップS801において、手続きの呼び出し側の処理による演算結果が、例えばアドレス“r3”“r5”“r8”のレジスタに格納される。しかし、被呼び出し側で引数を受け取るためのレジスタは通常あらかじめ決められており、ここではこれらのレジスタとしてアドレス“r0”“r1”“r2”が指定されているとする。このため、ステップS802において、被呼び出し側に引数を渡すために、アドレス“r3”“r5”“r8”上の値を、被呼び出し側で指定されているアドレス“r0”“r1”“r2”のレジスタにコピーする。
【0009】
ステップS803において、被呼び出し側は指定したアドレス“r0”“r1”“r2”のレジスタにアクセスして引数を受け取り、この引数を用いて手続きを実行する。
【0010】
その後、ステップS804において、手続きの処理によって呼び出し側に戻す演算結果が例えばアドレス“r3”に格納される。しかし、呼び出し側で戻り値を受け取るためのレジスタもあらかじめ決められており、ここでは例えばアドレス“r0”と決められているとする。このため、ステップS805において、アドレス“r3”上の値を呼び出し側で指定されているアドレス“r0”のレジスタにコピーする。この後、呼び出し側の復帰後に、ステップS806において、指定したアドレス“r0”にアクセスして戻り値を受け取る。これにより、呼び出し側では手続き実行による演算結果を受け取ることが可能となる。
【0011】
【発明が解決しようとする課題】
上記のように、従来のプロセッサでは、手続き呼び出し時におけるレジスタの使用方法があらかじめ決められており、この使用方法に従って動作が行われていた。しかし、このようなレジスタの固定的な使用方法により、処理手順に無駄が生じて処理速度の低下を招くことがあった。
【0012】
例えば、図7で説明した例のように、従来のプロセッサでは、手続き呼び出しが発生すると、決められたレジスタに保持された値がスタックに退避される。しかしこのとき、被呼び出し側で実際に使用するか否かにかかわらず、あらかじめ決められたレジスタの退避が行われるため、退避により使用可能となったすべてのレジスタが、被呼び出し側の処理の中で必ず使用されるとは限らない。従って、必要のないレジスタの退避が行われて、余分な処理時間が発生することが問題となっていた。
【0013】
また、図8の例で説明したように、手続き呼び出し時において引数や戻り値を格納するためのレジスタの位置が固定的に割り当てられているため、これらのレジスタが演算結果が得られたレジスタと異なる場合には、ステップS802およびS805の処理のようにコピーを行う必要があり、処理時間が長くなる原因となっていた。
【0014】
本発明はこのような課題に鑑みてなされたものであり、手続き呼び出し時の処理を効率化し、処理速度を向上させることが可能なプロセッサを提供することを目的とする。
【0015】
【課題を解決するための手段】
本発明では上記課題を解決するために、読み込んだ命令に従いレジスタを使用して動作するプロセッサにおいて、2つのレジスタ領域よりなるレジスタセットと、前記レジスタ領域に対する書き込み発生時に前記レジスタ領域に記憶されているデータを退避するか否かを示す退避許可情報を保持する退避許可情報保持手段と、手続きを呼び出して実行する手続き処理手段と、前記手続きの呼び出し以前に前記レジスタ領域のデータ退避を許可するように前記退避許可情報を設定する退避許可情報設定手段と、前記レジスタ領域に対する書き込みが発生すると、対応する前記退避許可情報に基づいて前記レジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じ前記レジスタセット内の他方の前記レジスタ領域に対して書き込みを行うレジスタ退避手段とを有することを特徴とするプロセッサが提供される。
【0016】
このようなプロセッサでは、退避許可情報により記憶データの退避の許可・不許可が管理されるレジスタ領域を2つ具備するレジスタセットが設けられる。退避許可情報は、各レジスタ領域に対する書き込み発生時に記憶データを退避するか否かを示す情報であり、退避許可情報保持手段により保持される。退避許可情報設定手段は、手続きの呼び出し以前のタイミングで、このレジスタ領域のデータ退避を許可するように退避許可情報を設定する。レジスタ退避手段は、レジスタ領域に対する書き込みが発生すると、対応する退避許可情報に基づいてレジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じレジスタセット内の他方のレジスタ領域に対して書き込みを行うことで、退避動作を実行する。これにより、手続きを呼び出す段階ではレジスタ領域のデータ退避が許可されるのみで、実際のデータ退避は呼び出された手続きの処理によるレジスタ領域への書き込みが発生する段階まで行われない。
【0017】
また、レジスタ退避手段は、例えば、退避状態となったレジスタ領域について退避許可情報設定手段により再びデータ退避が許可された場合に、退避状態となったレジスタ領域に記憶されたデータをスタックにプッシュした後、このレジスタ領域に新たな書き込みを行う。
【0018】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図1は、本発明の実施の形態であるプロセッサの構成例を示す図である。
【0019】
図1に示すプロセッサ1は、命令の取得と命令の発行とを行う制御部10と、命令に従って演算を実行するデータパス部20と、外部からのデータ等の読み込みや、演算結果の外部への出力を行うための外部バスI/F(インタフェース)30によって構成される。また、このプロセッサ1の外部には、外部バスI/F30からアドレスバス41およびデータバス42を介してメモリ2が接続されている。
【0020】
制御部10は、命令デコーダ11とアドレス生成器12によって構成される。命令デコーダ11は、外部バスインタフェース30を介して読み込んだ命令に対するデコード処理を行い、命令実行のための内部の制御信号を生成する。アドレス生成器12は、命令デコーダ11からの要求に応じて命令の読み出しアドレスを生成し、外部バスI/F30を通じてメモリ2に出力する。
【0021】
データパス部20は、演算器21と汎用レジスタ部22によって構成される。演算器21は、例えば加算や乗算等の複数の種類の演算が可能で、命令デコーダ11からの制御信号に従って、汎用レジスタ部22から読み出したデータに対して各種演算を行う。汎用レジスタ部22は、演算器21による演算中や終了後の演算結果を適宜格納する。
【0022】
外部バスI/F30は、プロセッサ1の内部の信号を外部のバス信号に変換し、外部(ここではメモリ2)とのデータの読み書きを行う。外部のメモリ2は、命令2aとデータ2bとを格納しており、外部バスI/F30がアドレスバス41を介して要求するアドレスの命令2aまたはデータ2bを、データバス42を介して供給する。なお、図示しないが、メモリ2の内部にはスタックとして使用される領域が確保されている。
【0023】
以上の構成を有するプロセッサ1における命令実行の流れを説明する。
まず、制御部10のアドレス生成器12が、命令を取得するためのアドレスを生成し、外部バスI/F30を通じてメモリ2に出力する。メモリ2からは、このアドレスに従って命令が読み出され、読み出された命令は外部バスI/F30を通じて命令デコーダ11に供給される。
【0024】
命令デコーダ11は、読み込んだ命令をデコードして内部の制御信号を生成し、データパス部20の演算器21に供給して演算動作を制御する。演算器21は、供給された制御信号に基づいて、汎用レジスタ部22から指定されたアドレスに格納された演算データを読み出し、読み出した演算データに対する各種の演算を行う。そして、演算結果を汎用レジスタ部22の指定されたアドレスに書き戻す。
【0025】
なお、このプロセッサ1では、“LOAD”命令や“STORE”命令が読み込まれることにより、汎用レジスタ部22とメモリ2との間で外部バスI/F30を通じてデータがやり取りされる。
【0026】
次に、上記のプロセッサ1において手続き呼び出しが行われた際の処理について説明する。
図2は、手続き呼び出し時における汎用レジスタ部22内のレジスタ構成を概念的に示す図である。
【0027】
手続き呼び出しが行われる場合、汎用レジスタ部22内には、図2に示すようなレジスタ領域が設定される。すなわち、汎用レジスタ部22には、演算中のデータ等を格納する2つずつの汎用レジスタ221aおよび221bを具備する複数のレジスタセット221と、各レジスタセット221に対する退避許可情報および退避情報がそれぞれ格納される退避許可レジスタ222および退避情報レジスタ223の各レジスタ領域が設定される。さらに、引数および戻り値を格納する複数の汎用レジスタ224と、各汎用レジスタ224におけるデータの有無を示すレジスタリスト225の各レジスタ領域が設定される。
【0028】
レジスタセット221内の汎用レジスタ221aおよび221bは、手続き呼び出しの発生時に各レジスタ内のデータの退避が行われるように決められたレジスタであり、各汎用レジスタ221aおよび221bは、書き込みおよび読み出しの許可・不許可が、退避許可レジスタ222および退避情報レジスタ223の保持する値に基づいて制御されるようになっている。
【0029】
退避許可レジスタ222および退避情報レジスタ223は、各レジスタセット221に対する退避許可情報および退避情報を保持する。退避許可情報は、各レジスタセット221内で汎用レジスタ221aおよび221bのどちらに対して、データ書き込み時の退避動作を許可されているかを示す情報である。退避情報は、各レジスタセット221内の各汎用レジスタ221aおよび221bにおいてデータの退避動作が行われるたびに更新される情報である。
【0030】
退避許可情報および退避情報は、例えばそれぞれ1ビットのフラグデータとして表され、退避許可レジスタ222および退避情報レジスタ223は、このような退避許可情報および退避情報を、ともに各レジスタセット221に対して1ビット分が割り当てられたビット列として保持する。すなわち、退避許可レジスタ222および退避情報レジスタ223の各ビットは、各レジスタセット221のアドレスに関連付けられて設定される。
【0031】
また、汎用レジスタ224は、メインプログラムによる処理や、このメインプログラムによって呼び出された関数やサブルーチン等の手続きの処理において、引数や戻り値となる値が格納されるレジスタである。レジスタリスト225は、各汎用レジスタ224内にデータが格納されているか否かを示すフラグデータを、各汎用レジスタ224に対して1ビット分が割り当てられたビット列として保持している。
【0032】
なお、図2では、各レジスタセット221内におけるデータ退避用の汎用レジスタ221aおよび221bと、引数および戻り値の格納用の汎用レジスタ224とが分離されているが、レジスタセット221内の汎用レジスタ211aおよび221bが引数および戻り値の格納用の汎用レジスタ224として機能できるようにしてもよい。
【0033】
次に、上記のレジスタセット221と退避許可レジスタ222および退避情報レジスタ223を用いた手続き呼び出し時の処理について説明する。
図3は、レジスタセット221内の各汎用レジスタ221aおよび221bの状態遷移を説明するための図である。
【0034】
図3では、例として1つのレジスタセット221内の各汎用レジスタ221aおよび221bにおけるアクセス状態と、これらのレジスタに対応する退避許可レジスタ222および退避情報レジスタ223内の退避許可情報および退避情報の推移の例について示している。
【0035】
手続き呼び出しが行われる場合、それ以前にレジスタに格納していたデータのうち、手続きの実行終了後に使用されるデータを退避させておく必要がある。本発明では、手続き呼び出しが発生した時点ではレジスタの退避は行わず、その後に呼び出された手続き内の処理によりレジスタに対する書き込みが実際に行われる段階で、レジスタの退避動作を行うことで、必要のない退避動作を実行しないようにする。
【0036】
図3(A)の状態は、退避許可情報および退避情報はともに“0”である状態である。このときレジスタセット221では、一方の例えば汎用レジスタ221aが書き込み・読み出しの双方が可能な状態(この状態を通常状態と呼称する)で、他方の汎用レジスタ221bが書き込み・読み出しをともに禁止した退避状態となっている。ここで、汎用レジスタ221aは、例えば手続きの呼び出し側であるメインプログラムの処理で使用されていたレジスタ領域であり、手続きの呼び出しに先立って、この汎用レジスタ221aの領域に対応する退避領域として、汎用レジスタ221bが確保される。
【0037】
この状態から図3(B)のように、退避許可情報に“1”をセットして、通常状態であった汎用レジスタ221aに対する退避動作を許可する。このとき、汎用レジスタ221aは、書き込みが禁止されて読み出しのみが許可された状態となるとともに、この後に汎用レジスタ221aに対する書き込みが発生した時点で退避動作に移行可能な状態となる。
【0038】
手続き呼び出しに際して、この図3(B)の状態への移行は、例えば手続きが呼び出される直前に行われる。このタイミングは、従来ではレジスタ内のデータについてスタックへの退避動作が行われていたが、本発明ではこの段階では実際の退避動作を行わず、この後に手続きが呼び出されても、この手続きの処理の中での元のデータの読み出しについては許可されている。また、この状態は次にデータの書き込みが発生するまで維持される。
【0039】
次に、図3(B)の状態から新たな書き込みが発生すると、書き込みが禁止されていた汎用レジスタ221aに対して退避動作が行われて、図3(C)の状態に移行する。ここでは、汎用レジスタ221aが書き込み・読み出しが禁止されるとともに、汎用レジスタ221bが通常状態に変わる。これにより、汎用レジスタ221aが退避状態となり、新たな書き込みが汎用レジスタ221bに対して行われる。また、退避情報に“1”がセットされて、汎用レジスタ221aについて退避動作が行われたことが表される。
【0040】
この例では、汎用レジスタ221aへの書き込み発生時において、退避許可情報が“1”となった場合にのみこの汎用レジスタ221aの退避動作が行われる。従って、手続き呼び出しの際に、まず退避許可情報により書き込み発生時の退避動作を許可しておき、手続きの処理により書き込みが発生した時点で実際の退避動作を行わせることができるので、必要なレジスタのみ退避動作が行われ、処理効率が高まる。
【0041】
なお、手続きからの復帰時における退避データの復帰動作は、以上の逆の手順で行えばよい。このとき、退避情報によってどのレジスタセット221内において退避動作が行われたかを知ることができるので、退避動作が行われたレジスタセット221内において退避データの復帰動作が行われる。
【0042】
図4は、以上のプロセッサ1における手続き呼び出しおよび復帰の際のデータ退避および復帰の処理手順を示すフローチャートである。
図4では、メインプログラムの処理から関数やサブルーチン等の手続きが最初に呼び出され、その後メインプログラムの処理に復帰するまでの処理手順について示している。
【0043】
ステップS401において、各レジスタセット221、退避許可レジスタ222および退避情報レジスタ223のレジスタ領域を確保する処理を行う。この処理では、手続きの呼び出し側で格納値を保存しておく必要のあるレジスタをレジスタセット221内の汎用レジスタ221aとして設定し、さらに各汎用レジスタ221aに対する退避領域となるレジスタを汎用レジスタ221bとして設定する。また、この汎用レジスタ221bと、退避許可レジスタ222および退避情報レジスタ223として確保したレジスタ領域のうち、それ以前に格納されていた値を保存しておく必要があるものについては、これらの値をスタックに退避させる。
【0044】
ステップS402において、退避情報レジスタ223内の退避情報をすべて“0”にクリアし、初期設定を行う。この後、ステップS403において、呼び出し側すなわちメインプログラム側で、格納されているデータの保存が必要なレジスタセット221に対応する退避許可情報に“1”を設定する。このステップS403の処理は、次のステップS404の手続き呼び出しの直前に行われることが望ましい。
【0045】
ステップS404において、手続きの呼び出しを行う。ステップS405において、呼び出した手続きを実行する。この手続きによる処理の中で、退避許可情報がセットされたレジスタセット221に対して書き込みが発生した場合には、これらのレジスタセット221に対して上記の図3で示したような退避動作と、これに伴う退避情報レジスタ223内の対応する退避情報の更新が行われる。これにより、手続きの呼び出し後、実際に書き込みが発生したレジスタセット221においてのみ退避動作が行われるため、処理効率が高められる。
【0046】
ステップS406において、この後のステップS407での手続き復帰処理に先立って、レジスタセット221における退避データの復帰動作を行う。このとき、各レジスタセット221では退避情報が参照され、この退避情報がセットされていたレジスタセット221でのみ復帰動作が行われる。レジスタセット221の退避動作は必要なものだけに行われていたため、必要最小限の復帰動作が行われる。
【0047】
ステップS407において、呼び出された手続きから元のプログラムへの復帰処理を行う。ステップS408において、ステップS401で確保したレジスタ領域の復帰処理を行う。具体的には、これらのレジスタ領域の確保時にスタックに退避しておいたデータを、スタックからプッシュして元のレジスタに格納する処理等が行われる。
【0048】
ところで、呼び出された手続きの処理の中で、さらに手続きの呼び出しが行われる場合がある。この場合は、すでに退避動作が行われた汎用レジスタ221aに格納された値をすべてスタックに退避させた後、この汎用レジスタ221aに対して新たなデータの書き込みを行う。
【0049】
例えば、図3(C)の段階で再び手続き呼び出しが行われ、このレジスタセット221内の汎用レジスタ221bに格納されたデータの保存が必要となったときは、すでに退避状態となっていた汎用レジスタ221aに格納されたデータを、スタックにプッシュした後、退避許可情報を“0”にセットして、汎用レジスタ221bに対する書き込みを禁止する。この後、新たに呼び出された手続きが実行されて、上記のレジスタセット221に対して書き込みが発生すると、汎用レジスタ221bが退避状態とされ、退避情報が更新される。また、汎用レジスタ221aが通常状態とされてデータの読み書きが行われる。この後、手続きから復帰する場合には、スタックに退避してあったデータが元の汎用レジスタ221bに格納される。
【0050】
この処理の中で、汎用レジスタ221aに格納されていたデータをスタックにプッシュする時点において、プッシュ動作が行われるレジスタセット221ではすべて退避情報が“1”にセットされていることから、退避情報レジスタ223の保持するビット列では、プッシュ動作を行う必要のあるレジスタの位置がすべて示されている。従ってこの時点では、退避情報レジスタ223の情報に基づいて、必要なレジスタセット221におけるスタック退避動作をまとめて行うことができる。
【0051】
また、必要なスタック退避動作が終わった直後に、さらにこのときの退避情報レジスタ223の保持するビット列をスタックにプッシュしておく。これにより、手続きの処理から復帰する際に、まずスタックから退避情報レジスタ223のビット列がポップされて、データの格納先のレジスタセット221が指定され、さらにスタックから退避データをポップして、これらの退避データを指定されたレジスタセット221に格納することが可能となる。
【0052】
このような退避情報レジスタ223の利用方法により、各レジスタセット221からスタックへプッシュした退避データについて、復帰時のそれらのポップ先のアドレスや、ポップすべき順番等の情報をプログラム側で管理する必要がなくなり、退避動作時および復帰動作時における処理効率を高め、処理を高速化することが可能となる。
【0053】
なお、以上の例では、退避許可レジスタ222および退避情報レジスタ223の各ビット列において、1ビットに対して1つのレジスタセット221が割り当てられていたが、1ビットに対して複数のレジスタセット221を割り当ててもよい。
【0054】
以上の手続き呼び出し時のレジスタ退避および復帰の処理では、呼び出された手続きによって書き込みが行われる時点で、そのレジスタセット221において退避動作が行われる。このため、被呼び出し側で実際に書き込み領域として使用されるレジスタセット221でのみ退避動作が行われ、必要のない無駄な退避動作が行われない。従って、レジスタ退避および復帰時の処理効率が高められ、処理を高速化することができる。
【0055】
また、各レジスタセット221は2つの汎用レジスタ221aおよび221bの領域を有しており、1度目の退避動作では一方の汎用レジスタ211aが書き込み・読み出しが不能な退避状態とされるだけで、スタックへの退避が行われない。このため、スタックへのプッシュおよびポップの動作回数が低減されて、処理時間が短縮化される。
【0056】
さらに、レジスタセット221内のデータがスタックにプッシュされる場合には、退避情報レジスタ223のビット列が利用されることにより、各レジスタセット221からスタックへプッシュした退避データのポップ先のアドレスや、ポップすべき順番等の情報をプログラム側で管理する必要がなくなり、退避動作時および復帰動作時における処理時間を短縮することができる。
【0057】
次に、上記の図2で示した汎用レジスタ224およびレジスタリスト225を用いた手続き呼び出し時の処理について説明する。
手続きの呼び出し時や復帰時には、上記の説明のようにデータの退避や復帰の処理が行われるとともに、呼び出し側と被呼び出し側の間で引数や戻り値の受け渡しが行われる。上述したように、各汎用レジスタ224は、手続きの呼び出し側と被呼び出し側との間で受け渡される引数や戻り値が格納されるレジスタである。また、レジスタリスト225は、各汎用レジスタ224においてデータが格納されているか否かについて、1ビットの1つの汎用レジスタ224を割り当てたビット列として管理している。
【0058】
従来、引数や戻り値を受け渡す場合は、これらを受け取るためのレジスタが受け取り側で指定されていたために、これらのレジスタに演算結果等をコピーする必要が生じる場合が多かった。本発明では、複数の汎用レジスタ224の中で引き渡し側がデータを格納する場所を固定せず、引き渡し側が設定したレジスタリスト225の値を受け取り側が参照して必要なデータの指定を可能とすることにより、データのコピーの発生回数を抑制して処理速度を向上させる。
【0059】
図5は、レジスタリスト225を用いたデータの指定方法を説明するための図である。
図5では、例として、レジスタリスト225が16ビットのビット列を保持する場合を示している。この場合、16個の汎用レジスタ224が設けられていることになる。
【0060】
図5(A)では、レジスタリスト225のビット列において、3桁目、4桁目、10桁目および14桁目に“1”が設定されている。これは、データの引き渡し側で演算結果が3番目、4番目、10番目および14番目に対応する汎用レジスタ224に格納されたことを示す。
【0061】
データの受け取り側は、このようなレジスタリスト225のビット列を引き渡し側から受け取るとともに、レジスタリスト225中の任意のレジスタを指定するための数値であるレジスタ指定情報を設定する。このレジスタ指定情報は、レジスタリスト225のビット列の中の特定のビットから一定方向にビットを進めたときに、データが格納されているビットが何番目に現れるかを指定する情報であり、これにより指定されたビットに対応する汎用レジスタ224を指定し、格納されたデータを受け取ることができる。
【0062】
ここで、例えばレジスタリスト225のビット列の最下位ビットからの順番でレジスタを指定するものとすると、図5(B)のようにレジスタ指定情報として“2”が設定された場合、ビット列の最下位ビットから2番目に“1”が現れるのは4桁目となる。従って、データの受け取り側は、4桁目に対応する汎用レジスタ224を指定することにより必要なデータを受け取ることができる。
【0063】
図6は、手続き呼び出しおよび復帰時における引数および戻り値のレジスタ指定処理の具体例を示す図である。
図6において、引数および戻り値を格納するための汎用レジスタ224のアドレスを、レジスタリスト225のビット列の下位から順に“r0”“r1”“r2”……と表している。また、レジスタリスト225のビット列を16進数として表している。
【0064】
ステップS601において、呼び出し側のプログラムの処理により、被呼び出し側に引数として引き渡す演算結果が例えばアドレス“r3”“r5”“r8”の各汎用レジスタ224に格納される。
【0065】
ステップS602において、引数を格納した汎用レジスタ224に応じて3桁目、5桁目、8桁目のビットを立てたレジスタリスト225のビット列(0x0124)が作成される。なお、以上のステップS601およびS602の処理は、図4のフローチャート中のステップS401の直前に行われる。
【0066】
ステップS603において、レジスタリスト225のビット列が呼び出し側から被呼び出し側に渡され、被呼び出し側がこのビット列を受け取る。また、レジスタ指定情報を設定する。ここではレジスタ指定情報として“1”“2”“3”が設定されている。
【0067】
ステップS604において、手続きによる処理に応じてレジスタリスト225のビット列を参照してレジスタ指定情報を順次適用し、該当するアドレス“r3”“r5”“r8”に格納された引数を受け取り、演算を行う。
【0068】
また、ステップS605において、手続きによる処理により呼び出し側に戻り値として引き渡す演算結果が例えばアドレス“r3”の汎用レジスタ224に格納される。なお、以上のステップS603〜S605の処理は、図4のフローチャート中のステップS405内の処理として行われる。
【0069】
ステップS606において、戻り値を格納した汎用レジスタ224に応じて3桁目のビットを立てたレジスタリスト225のビット列(0x0004)が作成される。なお、このステップS606の処理は、図4のフローチャート中のステップS406の直前に行われる。
【0070】
ステップS607において、レジスタリスト225のビット列が被呼び出し側から呼び出し側に渡され、呼び出し側はこのビット列を参照するとともに、レジスタ指定情報を設定する。ここではレジスタ指定情報として“1”が設定されている。
【0071】
ステップS608において、手続きによる処理に応じてレジスタリスト225のビット列を参照してレジスタ指定情報を適用し、該当するアドレス“r3”に格納された戻り値を受け取って、演算を行う。なお、以上のステップS607およびS608の処理は、図4のフローチャート中のステップS408の後に行われる。
【0072】
なお、以上の処理例では、引数と戻り値を格納する汎用レジスタ224の領域を同一としたが、これらが別々に設けられてもよい。
以上の処理によれば、引数や戻り値の引き渡し側は、これらの値を固定的に指定されたレジスタに格納する必要がなくなる。このため、レジスタの使用における柔軟性が増すとともに、データのコピーの発生回数が低減され、処理時間が短縮される。
【0073】
従って、このようなレジスタの指定処理と、上述したデータ退避および復帰の処理を併用することにより、手続き呼び出しおよび復帰時における処理効率を高め、処理速度を向上させることができる。
【0074】
なお、以上の実施の形態例で示したようなレジスタセットと退避許可レジスタ、退避情報レジスタを用いたレジスタ退避および復帰処理は、手続き呼び出しを行う場合に限らず、レジスタに格納されたデータを退避する必要が生じるあらゆる処理において適用することが可能である。同様に、上記のようなレジスタリストを使用したレジスタ指定処理も、手続き呼び出しを行う場合に限らず、データの受け渡しが生じるあらゆる処理において適用することが可能である。
【0075】
【発明の効果】
以上説明したように、本発明のプロセッサでは、退避許可情報設定手段により、手続きの呼び出し以前のタイミングでレジスタ領域のデータ退避を許可するように退避許可情報が設定され、レジスタ領域に対する書き込みが発生すると、レジスタ退避手段により、対応する退避許可情報に基づいてレジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じレジスタセット内の他方のレジスタ領域に対して書き込みを行う退避動作が実行される。従って、実際のデータ退避は呼び出された手続きの処理によるレジスタ領域への書き込みが発生する段階まで行われず、必要のないデータ退避が行われないので、手続き呼び出しおよび復帰時の処理効率が高まり、処理時間が短縮される。
【図面の簡単な説明】
【図1】本発明の実施の形態であるプロセッサの構成例を示す図である。
【図2】手続き呼び出し時のための汎用レジスタ部内のレジスタ構成を概念的に示す図である。
【図3】レジスタセット内の各汎用レジスタの状態遷移を説明するための図である。
【図4】本発明のプロセッサにおける手続き呼び出しおよび復帰の際のデータ退避および復帰の処理手順を示すフローチャートである。
【図5】レジスタリストを用いたデータの指定方法を説明するための図である。
【図6】手続き呼び出しおよび復帰時における引数および戻り値のレジスタ指定処理の具体例を示す図である。
【図7】従来のプロセッサにおける手続き呼び出し時のレジスタの退避および復帰の処理例を示すフローチャートである。
【図8】従来のプロセッサにおける手続き呼び出し時の引数および戻り値のレジスタ割り当ての様子を示す図である。
【符号の説明】
1……プロセッサ、2……メモリ、10……制御部、11……命令デコーダ、12……アドレス生成器、20……データパス部、21……演算器、22……汎用レジスタ部、30……外部バスI/F、41……アドレスバス、42……データバス、2a……命令、2b……データ、221……レジスタセット、221a、221b……汎用レジスタ、222……退避許可レジスタ、223……退避情報レジスタ、224……汎用レジスタ、225……レジスタリスト

Claims (15)

  1. 読み込んだ命令に従いレジスタを使用して動作するプロセッサにおいて、
    2つのレジスタ領域よりなるレジスタセットと、
    前記レジスタ領域に対する書き込み発生時に前記レジスタ領域に記憶されているデータを退避するか否かを示す退避許可情報を保持する退避許可情報保持手段と、
    手続きを呼び出して実行する手続き処理手段と、
    前記手続きの呼び出し以前に前記レジスタ領域のデータ退避を許可するように前記退避許可情報を設定する退避許可情報設定手段と、
    前記レジスタ領域に対する書き込みが発生すると、対応する前記退避許可情報に基づいて前記レジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じ前記レジスタセット内の他方の前記レジスタ領域に対して書き込みを行うレジスタ退避手段と、
    を有することを特徴とするプロセッサ。
  2. 前記レジスタ退避手段は、前記退避状態となった前記レジスタ領域について前記退避許可情報設定手段により再びデータ退避が許可された場合に、前記退避状態となった前記レジスタ領域に記憶されたデータをスタックにプッシュした後、前記レジスタ領域に新たな書き込みを行うことを特徴とする請求項1記載のプロセッサ。
  3. 前記レジスタセットに対して前記レジスタ退避手段による退避動作が行われたことを示す退避情報を保持する退避情報保持手段をさらに有することを特徴とする請求項2記載のプロセッサ。
  4. 前記退避情報に基づいて前記退避動作が行われたレジスタに対するデータの復帰動作を行うレジスタ復帰手段をさらに有することを特徴とする請求項3記載のプロセッサ。
  5. 前記レジスタセットが複数設けられた場合、前記退避情報保持手段は、前記複数のレジスタセットのうちの1つ以上を1ビットに対して割り当てたビット列として前記退避情報を保持する退避情報レジスタによってなることを特徴とする請求項3記載のプロセッサ。
  6. 前記レジスタ退避手段は、前記退避状態となった前記レジスタ領域について前記退避許可情報設定手段により再び前記データ退避が許可された場合に、前記退避状態となった前記レジスタ領域のデータをスタックにプッシュした後、前記退避情報レジスタの前記ビット列を前記スタックにさらにプッシュすることを特徴とする請求項5記載のプロセッサ。
  7. 前記スタックに格納された前記退避情報レジスタの前記ビット列に基づいて、前記スタックから対応する前記レジスタセットに対してデータをポップすることにより、前記退避動作が行われた前記レジスタセットに対するデータの復帰動作を行うレジスタ復帰手段をさらに有することを特徴とする請求項6記載のプロセッサ。
  8. 前記手続きが呼び出された時に前記手続きに対する引数が各レジスタに格納されているか否かを、1ビットを1つのレジスタに対応させたビット列として表した引数レジスタリストと、
    前記引数レジスタリスト中の特定ビットから一定方向にビットを進めたときにデータが格納されたことを示すビットが現れる順番により、前記引数を受け取るレジスタを指定する引数レジスタ指定手段と、
    をさらに有することを特徴とする請求項1記載のプロセッサ。
  9. 前記手続きの実行後に前記手続きから返される戻り値が各レジスタに格納されているか否かを、1ビットを1つのレジスタに対応させたビット列として表した戻り値レジスタリストと、
    前記戻り値レジスタリスト中の特定ビットから一定方向にビットを進めたときにデータが格納されたことを示すビットが現れる順番により、前記戻り値を受け取るレジスタを指定する戻り値レジスタ指定手段と、
    をさらに有することを特徴とする請求項1記載のプロセッサ。
  10. 読み込んだ命令に従いレジスタを使用して動作するプロセッサにおいて、
    2つのレジスタ領域よりなるレジスタセットと、
    前記レジスタ領域に対する書き込み発生時に前記レジスタ領域に記憶されているデータを退避するか否かを示す退避許可情報を保持する退避許可情報保持手段と、
    前記レジスタ領域に対する書き込みが発生すると、対応する前記退避許可情報に基づいて前記レジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じ前記レジスタセット内の他方の前記レジスタ領域に対して書き込みを行うレジスタ退避手段と、
    を有することを特徴とするプロセッサ。
  11. 前記レジスタ退避手段は、前記退避状態となった前記レジスタ領域について前記退避許可情報設定手段により再びデータ退避が許可された場合に、前記退避状態となった前記レジスタ領域に記憶されたデータをスタックにプッシュした後、前記レジスタ領域に新たな書き込みを行うことを特徴とする請求項10記載のプロセッサ。
  12. 読み込んだ命令に従いレジスタを使用して動作するプロセッサにおいて、
    複数のレジスタのそれぞれに対してデータが格納されているか否かを、1ビットを1つのレジスタに対応させたビット列として表したレジスタリストと、
    前記レジスタリスト中の特定ビットから一定方向にビットを進めたときにデータが格納されたことを示すビットが現れる順番により、格納されたデータを受け取るレジスタを指定するレジスタ指定手段と、
    を有することを特徴とするプロセッサ。
  13. プロセッサの動作中にレジスタに記憶されたデータを退避させるレジスタ退避方法において、
    2つのレジスタ領域よりなるレジスタセットを設け、
    前記レジスタ領域に対する書き込み発生時に前記レジスタ領域に記憶されているデータを退避するか否かを示す退避許可情報を保持し、
    前記レジスタ領域に対する書き込みが発生すると、対応する前記退避許可情報に基づいて前記レジスタ領域の書き込みおよび読み出しを禁止して退避状態とするとともに、同じ前記レジスタセット内の他方の前記レジスタ領域に対して書き込みを行う、
    ことを特徴とするレジスタ退避方法。
  14. 前記退避状態となった前記レジスタ領域について前記退避許可情報により再びデータ退避が許可された場合に、前記退避状態となった前記レジスタ領域に記憶されたデータをスタックにプッシュした後、前記レジスタ領域に新たな書き込みを行うことを特徴とする請求項13記載のレジスタ退避方法。
  15. プロセッサの動作中にデータの受け取り対象のレジスタを指定するレジスタ指定方法において、
    複数のレジスタのそれぞれに対してデータが格納されているか否かを、1ビットを1つのレジスタに対応させたビット列として表したレジスタリストを設定し、
    前記レジスタリスト中の特定ビットから一定方向にビットを進めたときにデータが格納されたことを示すビットが現れる順番により、格納されたデータを受け取るレジスタを指定する、
    ことを特徴とするレジスタ指定方法。
JP2002185523A 2002-06-26 2002-06-26 プロセッサ、レジスタ退避方法およびレジスタ指定方法 Pending JP2004030224A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002185523A JP2004030224A (ja) 2002-06-26 2002-06-26 プロセッサ、レジスタ退避方法およびレジスタ指定方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002185523A JP2004030224A (ja) 2002-06-26 2002-06-26 プロセッサ、レジスタ退避方法およびレジスタ指定方法

Publications (1)

Publication Number Publication Date
JP2004030224A true JP2004030224A (ja) 2004-01-29

Family

ID=31181126

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002185523A Pending JP2004030224A (ja) 2002-06-26 2002-06-26 プロセッサ、レジスタ退避方法およびレジスタ指定方法

Country Status (1)

Country Link
JP (1) JP2004030224A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011248574A (ja) * 2010-05-26 2011-12-08 Mitsubishi Electric Corp データ処理装置及びデータ処理方法及びプログラム
JP2017205646A (ja) * 2017-09-01 2017-11-24 京楽産業.株式会社 遊技機
JP2017205644A (ja) * 2017-09-01 2017-11-24 京楽産業.株式会社 遊技機
JP2020025760A (ja) * 2018-08-13 2020-02-20 株式会社ソフイア 遊技機
JP2020025761A (ja) * 2018-08-13 2020-02-20 株式会社ソフイア 遊技機
JP2020048778A (ja) * 2018-09-26 2020-04-02 株式会社ソフイア 遊技機
JP2020130376A (ja) * 2019-02-15 2020-08-31 株式会社ソフイア 遊技機
JP2020130377A (ja) * 2019-02-15 2020-08-31 株式会社ソフイア 遊技機

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011248574A (ja) * 2010-05-26 2011-12-08 Mitsubishi Electric Corp データ処理装置及びデータ処理方法及びプログラム
JP2017205646A (ja) * 2017-09-01 2017-11-24 京楽産業.株式会社 遊技機
JP2017205644A (ja) * 2017-09-01 2017-11-24 京楽産業.株式会社 遊技機
JP2020025760A (ja) * 2018-08-13 2020-02-20 株式会社ソフイア 遊技機
JP2020025761A (ja) * 2018-08-13 2020-02-20 株式会社ソフイア 遊技機
JP2020048778A (ja) * 2018-09-26 2020-04-02 株式会社ソフイア 遊技機
JP2020130376A (ja) * 2019-02-15 2020-08-31 株式会社ソフイア 遊技機
JP2020130377A (ja) * 2019-02-15 2020-08-31 株式会社ソフイア 遊技機
JP7197905B2 (ja) 2019-02-15 2022-12-28 株式会社ソフイア 遊技機
JP7276813B2 (ja) 2019-02-15 2023-05-18 株式会社ソフイア 遊技機

Similar Documents

Publication Publication Date Title
JP2745949B2 (ja) オペランド情報の静的および動的マスキングを同時かつ独立して行うデータ・プロセッサ
US4777588A (en) General-purpose register file optimized for intraprocedural register allocation, procedure calls, and multitasking performance
US7051137B2 (en) Event delivery
JP2776132B2 (ja) オペランド内の情報のスタティックおよびダイナミック・マスキングを兼ね備えるデータ処理システム
US7451298B2 (en) Processing exceptions from 64-bit application program executing in 64-bit processor with 32-bit OS kernel by switching to 32-bit processor mode
US9298472B2 (en) High-speed restart method, information processing device, and program
CN114064302B (zh) 一种进程间通信的方法及装置
JP4226085B2 (ja) マイクロプロセッサ及びマルチプロセッサシステム
TWI291098B (en) Method and system for data optimization and protection in DSP firmware
JP2004030224A (ja) プロセッサ、レジスタ退避方法およびレジスタ指定方法
US20020169900A1 (en) Direct memory access controller, and direct memory access control method
US7159078B2 (en) Computer system embedding sequential buffers therein for performing a digital signal processing data access operation and a method thereof
KR100534613B1 (ko) 플래쉬 메모리를 이용한 시스템 부팅 장치 및 그 방법
JP2021515308A (ja) デバイスをデバッグするときにメタデータにアクセスするための装置及び方法
WO2018052718A1 (en) Method and apparatus for masking and transmitting data
US10691457B1 (en) Register allocation using physical register file bypass
TW202119215A (zh) 共用代碼之系統與代碼共用方法
KR100658918B1 (ko) 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
US20020199080A1 (en) Combined logic function for address limit checking
JP2004287618A (ja) オペレーティングシステム起動制御方法、およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置
WO2023030173A1 (zh) 一种管理动态库的方法及相应装置
US6219757B1 (en) Cache flush operation for a stack-based microprocessor
US7213127B2 (en) System for producing addresses for a digital signal processor
EP1139214A1 (en) System for allowing a two word instruction to be executed in a single cycle and method therefor
JPH11134202A (ja) タスク切替え装置