JPH10283188A - プロセッサにおけるレジスタ保護方法 - Google Patents

プロセッサにおけるレジスタ保護方法

Info

Publication number
JPH10283188A
JPH10283188A JP8496897A JP8496897A JPH10283188A JP H10283188 A JPH10283188 A JP H10283188A JP 8496897 A JP8496897 A JP 8496897A JP 8496897 A JP8496897 A JP 8496897A JP H10283188 A JPH10283188 A JP H10283188A
Authority
JP
Japan
Prior art keywords
registers
register
information
protected
subroutine
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
JP8496897A
Other languages
English (en)
Inventor
Takehito Heiji
岳人 瓶子
Tetsuya Tanaka
哲也 田中
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP8496897A priority Critical patent/JPH10283188A/ja
Publication of JPH10283188A publication Critical patent/JPH10283188A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 命令を実行するプロセッサにおいて、階層的
なサブルーチンのコールを伴うソフトウェアの実行にあ
たって、サブルーチンコール・リターンの際のレジスタ
内容のメモリへの退避・メモリからの復帰を低減する。 【解決手段】 上の階層のルーチンで使用されているた
め内容を破壊してはいけないレジスタの集合、すなわち
保護すべきレジスタの集合の情報を、現在のルーチンに
伝搬し、サブルーチンがコールされた際に、保護すべき
レジスタの集合の情報と現在のルーチンで使用されるレ
ジスタの集合の情報をもとに、内容をメモリに退避すべ
きレジスタの集合を決定する(ステップ1)。また、保
護すべきレジスタの集合の情報を更新(ステップ2)・
退避しながら、あらゆる階層のサブルーチンに継承・伝
搬していくことが可能である。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、命令を実行するプ
ロセッサにおけるレジスタ保護方法に関する。
【0002】
【従来の技術】近年の電子技術の発展により、マイクロ
プロセッサをはじめとする情報処理装置が普及し、様々
な分野で用いられている。
【0003】一般的なノイマン型プロセッサは通常デー
タメモリよりも高速に読み書きを行うことができるレジ
スタを何本か備えており、メモリへの書き込み(sto
re)・メモリからの読み出し(load)を行う命令
以外では、レジスタ間で操作を行う命令しか用意されて
いない。そして、レジスタの資源が不足した際にレジス
タの内容を保存しておくためのスタックをメモリ内に持
っている。
【0004】このようなプロセッサでは、レジスタの本
数が許す限りレジスタ内に値を保持しておき、できるだ
けデータメモリへの内容の保存を行わない方が処理が高
速になる。また、メモリへのアクセス回数を減らすこと
は低消費電力化につながる。そのため、このプロセッサ
上でソフトウェアの開発を行う際、それぞれの処理の時
点で現在使用されているレジスタを把握することができ
ていれば、それをもとにデータを効率的にレジスタに割
り当てていき、割り当てが可能なレジスタが存在しない
ときにのみ、いずれかのレジスタのデータをメモリに退
避する、という方法が有効である。
【0005】しかし、このようなプロセッサ上で構造化
されたプログラム、すなわち階層的なサブルーチンのコ
ールを伴うプログラムを開発する際、あるサブルーチン
がどのルーチンからコールされるのかを特定しておくこ
とができない。そのため、それぞれのサブルーチンで独
自に任意のレジスタを割り当てて処理を行ってしまう
と、そのルーチンをコールしたルーチンや、更に上の階
層のルーチンで使用していたレジスタの有効な内容を破
壊してしまう可能性がある。これを避けるため、サブル
ーチンでの処理はそのサブルーチン内で完結していなけ
ればならないことになる。そこで、サブルーチンをコー
ルする際には、内容が破壊されてはいけないレジスタを
保護する必要がある。
【0006】ここで用語の定義をしておく。一般的なプ
ロセッサにおいて、レジスタはサブルーチンコールに際
して内容が破壊されても構わないレジスタと、それ以外
のレジスタに区別されている。ここでは、前者を破壊レ
ジスタ、後者のうち特別な用途を持つレジスタを除いた
ものを保護レジスタと呼ぶことにする。
【0007】従来の方法では、あるサブルーチンがコー
ルされた時点でどのレジスタの内容を破壊してはいけな
いか、という情報を得ることができないため、サブルー
チンをコールする前もしくはサブルーチンがコールされ
てから実際の処理の前に、サブルーチン単位で保護レジ
スタの内容をメモリに退避することによって、有効なレ
ジスタ内容の破壊を回避している。これには大きく分け
て次の2つの方法がある。
【0008】従来の第1の方法として図10に示す方法
がある。図10中、SR1からSR4まではそれぞれサ
ブルーチン名を表しており、各ルーチンの破線より上に
記述してあるR0などの記号はそのルーチン内で使用さ
れる保護レジスタ名を表している。また、store
R0という記述はレジスタR0の内容をメモリに退避す
ることを表しており、call SR2という記述はサ
ブルーチンSR2をコールすることを表している。処理
1から処理7までの記述は、そこで任意の処理が実行さ
れることを表している。図10では、例えばサブルーチ
ンSR1においてサブルーチンSR2をコールする前
に、現在のルーチンSR1で使用される保護レジスタR
0の内容をメモリに退避する。このように、この方法で
は各ルーチンでサブルーチンをコールする寸前にそのル
ーチンで使用される全ての保護レジスタの内容をメモリ
に退避しておくことにより、それらのレジスタの内容が
下の階層のサブルーチンで破壊されてしまうことを回避
している、つまりそれらのレジスタを保護しているので
ある。
【0009】従来の第2の方法として図11に示す方法
がある。図11中の表記は図10のものと同様であり、
各ルーチンで使用される保護レジスタの組み合わせも図
10の例と同様である。図11では、例えばサブルーチ
ンSR2がサブルーチンSR1からコールされた時点
で、現在のルーチンSR2で使用される保護レジスタR
0の内容をメモリに退避する。このように、この方法で
は各サブルーチンの処理を開始する前にそのサブルーチ
ンで使用される全ての保護レジスタの内容をメモリに退
避することにより、上の階層のルーチンにおいても使用
されているそれらのレジスタの内容を破壊してしまうの
を回避している、つまりそれらのレジスタを保護してい
るのである。
【0010】
【発明が解決しようとする課題】図10、図11の例に
おいて、R1からR5までのレジスタは、サブルーチン
SR3のみでしか使用されていない。それにもかかわら
ず、従来のレジスタの保護方法では、前記の2つの手法
のいずれの方法を用いてもR1からR5までのレジスタ
の内容の退避を実施することになる。
【0011】ここで、例えば図12のように処理を行う
ことを考えてみる。図12中の表記、各ルーチンで使用
される保護レジスタの組み合わせは、図10や図11の
場合と同様である。図12では、図11に示した処理の
うちサブルーチンSR3でのR1からR5までのレジス
タの内容の退避を省略している。図12のように処理を
行ったとしても、他のサブルーチンではR1からR5ま
でのレジスタが使用されていないので、有効なレジスタ
の内容が破壊されることはない。つまり、図11の処理
におけるR1からR5までのレジスタの内容の退避は結
果的に必要で無かったといえる。このことは図10の処
理についても同様である。
【0012】レジスタを備えたプロセッサにおいては、
レジスタからメモリへのデータの退避の回数が減少すれ
ば減少するほど、処理が高速になりまた低消費電力化に
つながる。
【0013】しかしながら従来のレジスタの保護方法で
は、サブルーチンにおいて上の階層のルーチンで使用さ
れているレジスタの集合の情報を保持していないため、
必要以上にレジスタからメモリへのデータの退避を行っ
てしまうことがある。
【0014】本発明はかかる問題点に鑑みその目的は、
階層的なサブルーチンコールに伴うレジスタの内容のメ
モリへの退避を減少するプロセッサにおけるレジスタ保
護方法を提供することにある。
【0015】
【課題を解決するための手段】請求項1記載の本発明の
方法は、命令を実行するプロセッサにおいて、階層的な
サブルーチンのコールを伴う構造化されたソフトウェア
の実行に際して、サブルーチンのコールに伴って、内容
をメモリに退避すべきレジスタの集合を求める方法であ
る。具体的な手段として上の階層のルーチンで使用され
ているため内容を破壊してはいけないレジスタの集合、
すなわち保護すべきレジスタの集合の情報を現在のルー
チンに伝搬し、サブルーチンがコールされた際に、保護
すべきレジスタの集合の情報と現在のルーチンで使用さ
れるレジスタの集合の情報をもとに、内容をメモリに退
避すべきレジスタの集合を決定する、という方法をと
る。
【0016】これにより、サブルーチンのコールの際
に、実際に上の階層のルーチンでも使用されておりメモ
リへの退避が必要なレジスタの内容のみをメモリに退避
することができ、無駄なメモリアクセス、つまりレジス
タ内容のメモリへの退避を減らすことができる。
【0017】請求項2記載の本発明の方法は、命令を実
行するプロセッサにおいて、階層的なサブルーチンのコ
ールを伴う構造化されたソフトウェアの実行に際して、
階層的なサブルーチンのコールに伴って、上の階層のル
ーチンで使用されているため内容を破壊してはいけない
レジスタの集合、すなわち保護すべきレジスタの集合の
情報を、下の階層のサブルーチンに順次継承・伝搬して
いき、その情報を利用することにより退避すべきレジス
タの集合を決定していく方法である。具体的な手段とし
て、サブルーチンがコールされた際には、請求項1記載
の方法で退避すべきレジスタを決定し、次にそれらのレ
ジスタの内容をメモリに退避する。そして、現在の保護
すべきレジスタの集合の情報と現在のルーチンで使用さ
れるレジスタの集合の情報をもとに、保護すべきレジス
タの集合の情報を更新する。
【0018】これにより、保護すべきレジスタの情報を
更新しながら下の階層のルーチンに伝搬していくことが
できるので、どんなに深い階層のルーチンにおいても現
在の保護すべきレジスタの集合の情報を用いてメモリへ
の退避が必要なレジスタを求めることができ、無駄なメ
モリアクセスを減らすことができる。
【0019】請求項3記載の本発明の方法は、命令を実
行するプロセッサにおいて、階層的なサブルーチンのコ
ールを伴う構造化されたソフトウェアの実行に際して、
下の階層のサブルーチンからのリターンに伴って、上の
階層のルーチンでの保護するべきレジスタの集合の情報
を復元していき、その情報を利用することによりサブル
ーチンコールの時点で退避されていたレジスタの集合を
特定し、それらのレジスタの内容をメモリから復帰する
方法である。具体的な手段として、まずサブルーチンを
コールする際には、保護すべきレジスタの集合の情報を
メモリに退避しておく。サブルーチンからリターンする
際には、退避されていたコール側のルーチンでの保護す
べきレジスタの集合の情報を復元する。そして、その情
報と現在のルーチンで使用されるレジスタの集合の情報
をもとに、現在のルーチンで内容を退避されていたレジ
スタの集合を求め、それらのレジスタの内容をメモリか
ら復帰する。
【0020】これにより、階層的なサブルーチンのコー
ル、リターンを伴う場合でも、そのそれぞれのルーチン
において保護すべきレジスタの集合の情報を保持してお
くことができるので、その情報を用いることにより退避
されていたレジスタを求めることができ、上の階層のル
ーチンに処理を移すことができる。さらに、あらゆるル
ーチンで現在の保護すべきレジスタの集合の情報を保持
しておくことができるので、各ルーチンでメモリへの退
避が必要なレジスタを求めることができ、無駄な退避を
減らすことができる。
【0021】請求項1乃至請求項3の方法において、保
護すべきレジスタの集合の情報を専用レジスタや、汎用
レジスタの一つや、ステータスレジスタの一部など、レ
ジスタやレジスタの一部に保持することによって行うこ
とができる。
【0022】専用レジスタに保持すると、レジスタの内
容を退避・復帰する命令の引数として指定する必要がな
くなる、というメリットがある。また、ステータスレジ
スタの一部として保持すると、コンテキストスイッチの
場合に値の退避がステータスレジスタの退避と同時に行
われるため、オーバーヘッドを低減することができる、
というメリットがある。
【0023】請求項1乃至請求項3の方法において、現
在のルーチンで使用されるレジスタの集合の指定は、即
値で表すことにより行うことができる。
【0024】これにより、この情報がコンテキストにな
らない、すなわちタスクを切り替える時に保存の必要が
ない、というメリットがある。
【0025】また、現在のルーチンで使用されるレジス
タの集合の指定は、専用レジスタや、汎用レジスタの一
つや、ステータスレジスタの一部など、レジスタやレジ
スタの一部を用いることにより行うことができる。専用
レジスタに保持すると、レジスタの内容を退避・復帰す
る命令の引数として指定する必要がなくなる、というメ
リットがある。また、ステータスレジスタの一部として
保持すると、コンテキストスイッチの場合に値の退避が
ステータスレジスタの退避と同時に行われるため、オー
バーヘッドを低減することができる、というメリットが
ある。
【0026】請求項1または請求項2または請求項3の
方法において、退避の対象となるレジスタの集合を得る
ための方法として、保護すべきレジスタの集合と現在の
ルーチンで使用される保護レジスタの集合との間で論理
積演算を用いることができる。
【0027】これにより、無駄のない退避の必要なレジ
スタの集合を容易に求めることができる。
【0028】請求項2の方法において、保護すべきレジ
スタの集合の情報の更新に際して、新しい保護すべきレ
ジスタの集合を得るための方法として、現在の保護すべ
きレジスタの集合と現在のルーチンで使用される保護レ
ジスタの集合との間で論理和演算を用いることができ
る。
【0029】これにより、現在の階層までの保護すべき
レジスタの集合の和集合を容易に求めることができる。
【0030】本発明の方法では、サブルーチンがコール
された時点で、そのルーチンより上の階層のルーチンで
使用しており内容を破壊してはいけないレジスタの集
合、すなわちそのサブルーチンで保護すべきレジスタの
集合の情報を保持しているため、メモリへの退避が必要
なレジスタについてのみ退避を行うようにすることがで
きる。
【0031】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて説明する。
【0032】図6は、本発明の実施の形態におけるプロ
セッサ101の構成を示している。図6において、10
2は命令メモリ、103はデータメモリ、104はプロ
グラムカウンタ、105はプログラムカウンタを更新す
る装置、106は命令メモリから読み出した命令を解読
する命令解読装置、107はレジスタファイル、108
は演算器である。
【0033】プロセッサ101の動作は、まず命令メモ
リ102中のプログラムカウンタ104で示されるアド
レスから命令コードを読み出し、命令解読装置106で
解読する。その解読内容によって、演算の種類やデータ
のメモリ空間でのアドレスやレジスタ名などが示され
る。それにしたがってデータメモリ103にアクセスし
たり、レジスタファイル107にアクセスして演算器1
08で演算を行ったりする。そして、必要であれば結果
をレジスタファイル107に書き出す。また、プログラ
ムカウンタ104を変更する種類の命令であった場合、
プログラムカウンタを更新する装置105で更新する。
そうでなかった場合は、現在のプログラムカウンタに命
令のバイト長である4を加える処理をする。プロセッサ
101は以上の動作を繰り返し実行する。すなわち、次
には更新されたプログラムカウンタで示されるアドレス
から命令コードの読み出しを行うことになる。
【0034】レジスタファイル107には、32ビット
の汎用レジスタが16本と、32ビットの専用レジスタ
が数本用意されている。なお、メモリの有効アドレス空
間は24ビットである。図7には汎用レジスタ16本の
構成が示されている。16本の汎用レジスタのうち、R
0からR7までの8本が前に定義した保護レジスタ、す
なわち保護の対象となるレジスタであり、G0からG5
までの6本が破壊レジスタである。そして、1本はリン
クレジスタ(LR)である。リンクレジスタ(LR)
は、サブルーチンコールの際に戻りアドレスを保持して
おくために用いられる。また、汎用レジスタの1本を保
護すべきレジスタの集合の情報を保持しておくレジスタ
(SL)として用いる。保護の対象となるレジスタは8
本であるため、SLは8ビットの情報を保持する能力が
あればよい。なお、リンクレジスタ(LR)の上位8ビ
ットは保護すべきレジスタの集合の情報の格納に利用さ
れる。保護すべきレジスタの集合の情報をリンクレジス
タ(LR)の一部に格納するという手段をとらなくて
も、本発明の方法を実現することは可能である。
【0035】保護すべきレジスタの集合の情報を保持す
るために専用レジスタを用いることもできる。こうする
ことにより、サブルーチンコールの前にレジスタ内容を
メモリに退避する命令(save命令)や、サブルーチ
ンをコールする命令(call命令)の引数としてこの
情報を指定する必要がなくなる、というメリットがあ
る。また、保護すべきレジスタの集合の情報を保持する
ためにステータスレジスタを用いることもできる。ステ
ータスレジスタは専用レジスタの一つで、フラグ情報や
割り込み等のイネーブル情報を保持するために用いられ
ている。この場合、保護すべきレジスタの集合の情報を
ステータスレジスタの一部として持たせるのである。こ
うすることにより、コンテキストスイッチの場合に値の
退避がステータスレジスタの退避と同時に行われるた
め、オーバーヘッドを低減することができる、というメ
リットがある。
【0036】図8は、レジスタの集合の情報の保持方法
を示している。この方法ではビットフィールドを用いて
レジスタ識別子のビット位置にフラグを立てることによ
りレジスタの集合を表現している。例えば、全体集合が
R0からR7までの8本のレジスタ集合であるとする
と、図8はレジスタ集合{R1,R2,R5,R7}を
表していることになる。本実施の形態においては、保護
すべきレジスタの集合の情報や、現在のルーチンで使用
されるレジスタの集合の情報や、退避の対象となるレジ
スタの集合の情報の保持にこの方法を用いている。
【0037】図5は、階層的なサブルーチンコールを伴
うプログラムにおいて本発明の方法を適用した場合の、
あるサブルーチンでの処理の流れを示す図である。図5
においてステップ12とステップ14は任意の処理を表
している。
【0038】あるサブルーチンがコールされた際には、
まずステップ11のsave命令を実行することにより
退避すべきレジスタ、すなわち上の階層のルーチンで使
用されておりかつこのルーチンで使用される保護レジス
タの内容を退避する。
【0039】下の階層のサブルーチンをコールする際に
はステップ13のcall命令を実行することによって
下の階層のサブルーチンに処理を移す。
【0040】上の階層のルーチンにリターンする際に
は、まずステップ15のrestore命令を実行する
ことにより現在のルーチンでsave命令によって内容
を退避されていたレジスタの内容を復帰し、それからス
テップ16のret命令を実行することによって上の階
層のルーチンに処理を移す。
【0041】以下、ステップ11のsave命令、ステ
ップ13のcall命令、ステップ15のrestor
e命令、ステップ16のret命令について、それぞれ
の実際の処理内容を説明していく。
【0042】図1は、プロセッサ101がsave命令
を実行する手順を示す図である。save命令は、sa
ve SL,Immという形式をとり、引数として保護
すべきレジスタの集合の情報(SL)と現在のルーチン
で使用される保護レジスタの集合の情報である即値(I
mm)が与えられる。以下、save命令の動作につい
てステップごとに説明する。
【0043】ステップ1:引数として与えられた保護す
べきレジスタの集合の情報(SL)と引数として与えら
れた現在のルーチンで使用される保護レジスタの集合の
情報(Imm)との間でビット論理積演算を行うことに
より、上の階層のルーチンで使用されており、かつ現在
のルーチンで使用されるレジスタの集合を求める。求め
られたレジスタの集合が内容を退避すべきレジスタの集
合になるので、それらのレジスタの内容をメモリに退避
する。
【0044】ステップ2:現在の保護すべきレジスタの
集合の情報(SL)と現在のルーチンで使用される保護
レジスタの集合の情報(Imm)との間でビット論理和
演算を行うことにより、現在の階層までのルーチンで使
用されているレジスタの集合の和集合、すなわち下の階
層のルーチンで保護すべきレジスタの集合を求める。そ
の結果で保護すべきレジスタの集合の情報(SL)を更
新する。
【0045】ただし、最も下の階層のルーチンにおいて
は、ステップ2の保護すべきレジスタの集合の情報を更
新するステップは省略することができる。
【0046】このように上の階層のルーチンで使用され
ているレジスタの情報を用いてメモリに内容を退避する
レジスタを決定することにより、メモリへの無駄な退避
を減らすことができる。
【0047】ここで、現在のルーチンで使用される保護
レジスタの集合の指定は、即値での表現(Imm)によ
って行われる。こうすることには、この情報がコンテキ
ストにならない、すなわちタスクを切り替える時に保存
の必要がない、というメリットがある。ユーザやコンパ
イラは現在のルーチンで使用される保護レジスタを把握
しているため、このように即値で指定することが可能で
ある。
【0048】現在のルーチンで使用される保護レジスタ
の集合の指定は、専用レジスタを介して行うこともでき
る。こうすることにより、save命令や、サブルーチ
ンからリターンする際に退避されていたレジスタを復帰
する命令(restore命令)の引数としてこの情報
を指定する必要がなくなる、というメリットがある。
【0049】現在のルーチンで使用されるレジスタの集
合の指定は、ステータスレジスタを介して行うこともで
きる。つまり、現在のルーチンで使用される保護レジス
タの集合の情報をステータスレジスタの一部として持た
せるのである。こうすることにより、コンテキストスイ
ッチの場合に値の退避がステータスレジスタの退避と同
時に行われるため、オーバーヘッドを低減することがで
きる、というメリットがある。
【0050】図2は、プロセッサ101がcall命令
を実行する手順を示す図である。call命令は、ca
ll TA,SLという形式をとり、引数としてコール
するサブルーチンのターゲットアドレス(TA)と保護
すべきレジスタの集合の情報(SL)が与えられる。以
下、call命令の動作についてステップごとに説明す
る。
【0051】ステップ3:引数として与えられた保護す
べきレジスタの集合の情報(SL)をリンクレジスタ
(LR)の上位8ビットに格納する。
【0052】ステップ4:サブルーチンからの戻りアド
レスをリンクレジスタ(LR)の下位24ビットに格納
する。
【0053】ステップ5:リンクレジスタ(LR)をメ
モリに退避する。 ステップ6:プログラムカウンタ(PC)に引数として
与えられたサブルーチンのターゲットアドレスをセット
することにより、下の階層のサブルーチンに処理を移
す。
【0054】前に述べたsave命令で保護すべきレジ
スタの集合の情報を更新し、その情報をサブルーチンコ
ールに伴って継承していくことにより、どれだけ深い階
層のサブルーチンにも保護すべきレジスタの集合の情報
を伝搬していくことができる。
【0055】図3は、プロセッサ101がrestor
e命令を実行する手順を示す図である。restore
命令は、restore Immという形式をとり、引
数として現在のルーチンで使用される保護レジスタの集
合の情報である即値(Imm)が与えられる。以下、r
estore命令の動作についてステップごとに説明す
る。
【0056】ステップ7:リンクレジスタ(LR)の内
容をメモリから復帰する。 ステップ8:保護すべきレジスタの集合の情報(SL)
にリンクレジスタ(LR)の上位8ビットをセットし、
サブルーチンが呼ばれる前のSLに戻す。
【0057】ステップ9:保護すべきレジスタの集合の
情報(SL)と引数として与えられた現在のルーチンで
使用される保護レジスタの集合の情報(Imm)との間
でビット論理積演算を行うことにより、現在のルーチン
でsave命令によって内容を退避されていたレジスタ
の集合を求め、それらのレジスタの内容をメモリから復
帰する。
【0058】前に述べたcall命令で退避されていた
保護すべきレジスタの集合の情報をrestore命令
で復帰することにより、サブルーチンコール時にsav
e命令で退避されていたレジスタの集合を特定すること
ができ、それらのレジスタ内容を復帰することができ
る。
【0059】図4は、プロセッサ101がret命令を
実行する手順を示す図である。ret命令は、retと
いう形式をとり、引数はとらない。ret命令では、プ
ログラムカウンタ(PC)に戻りアドレスであるリンク
レジスタ(LR)の下位24ビットをセットすることに
より、上の階層のルーチンに処理を移す。
【0060】本発明の実施の形態を図9にて説明する。
図9において、SR1からSR3まではそれぞれサブル
ーチン名を表しており、処理1から処理5までは任意の
処理を表している。また、各サブルーチンの破線より上
に記述してあるR0などの記号は、そのルーチンで使用
される保護レジスタ名を表している。
【0061】全体の処理の流れは、まずサブルーチンS
R1にて必要なレジスタの退避を行った後、処理1を実
行する。そしてサブルーチンSR2がコールされ、レジ
スタの退避を行った後、処理3が実行される。さらにサ
ブルーチンSR3がコールされ、レジスタの退避を行っ
た後、処理5を実行する。次に、このルーチンSR3で
退避されていたレジスタを復帰してからサブルーチンS
R2にリターンする。そして、処理4を実行し、このル
ーチンSR2で退避されていたレジスタを復帰してから
サブルーチンSR1にリターンする。最後に処理2を実
行する。
【0062】以下、図9の各命令の右側に記された
(a)から(i)までの各ステップについて、実行され
る順に処理内容を詳細に説明する。なお、save命令
とrestore命令の引数の即値(Imm)は、その
ルーチンで使用されるレジスタの集合の情報が2進数値
で表されている。つまり、Immの値はサブルーチン固
有の値ということになる。図9での表記のように以後2
進数の表記には頭に0bを付する。
【0063】ステップ(a):図1のsave命令の手
順にしたがって実行される。初期状態では、保護すべき
レジスタの集合は空集合なのでSLの値は0になってい
る。まず、SLと引数として与えられた現在のルーチン
で使用されるレジスタの集合の情報(Imm)0b11
100000とで論理積演算を行う。結果は0b000
00000になるので、退避の対象となるレジスタは存
在しない。次に、SLとImmとで論理和演算を行い、
その結果0b11100000でSLを更新する。
【0064】ステップ(b):図2のcall命令の手
順にしたがって実行される。まず、SLの下位8ビット
0b11100000をリンクレジスタ(LR)の上位
8ビットに格納する。次に、サブルーチンからの戻りア
ドレスとして、現在のアドレスにこの命令のバイト長4
を加えた値をリンクレジスタ(LR)の下位24ビット
に格納する。そして、リンクレジスタ(LR)をメモリ
に退避する。最後に、プログラムカウンタ(PC)に引
数として与えられたサブルーチンSR2のアドレスをセ
ットする。
【0065】ステップ(c):図1のsave命令の手
順にしたがって実行される。引数として与えられたSL
(0b11100000)と引数として与えられたIm
m(0b00111000)とで論理積演算を行う。そ
の結果0b00100000より、レジスタR2の内容
をメモリに退避する。次に、SLとImmとで論理和演
算を行い、その結果0b11111000でSLを更新
する。
【0066】ステップ(d):図2のcall命令の手
順にしたがって実行される。まず、SLの下位8ビット
0b11111000をリンクレジスタ(LR)の上位
8ビットに格納する。次に、サブルーチンからの戻りア
ドレスとして、現在のアドレスにこの命令のバイト長4
を加えた値をリンクレジスタ(LR)の下位24ビット
に格納する。そして、リンクレジスタ(LR)をメモリ
に退避する。最後に、プログラムカウンタ(PC)に引
数として与えられたサブルーチンSR3のアドレスをセ
ットする。
【0067】ステップ(g):図1のsave命令の手
順にしたがって実行される。引数として与えられたSL
(0b11111000)と引数として与えられたIm
m(0b10001100)とで論理積演算を行う。そ
の結果0b10001000より、レジスタR0とR4
の内容をメモリに退避する。次に、次にSLとImmと
で論理和演算を行い、その結果0b11111100で
SLを更新する。なお、サブルーチンSR3は最も下の
階層のルーチンなので、SLの更新は省略することがで
きる。
【0068】ステップ(h):図3のrestore命
令の手順にしたがって実行される。まず、リンクレジス
タ(LR)をメモリから復帰する。保護すべきレジスタ
の集合の情報(SL)に復帰したLRの上位8ビット0
b11111000をセットする。SLと、引数として
与えられた現在のルーチンで使用されるレジスタの集合
の情報(Imm)0b10001100とで論理積演算
を行う。その結果である0b10001000から、レ
ジスタR0とR4がこのルーチンでメモリに退避されて
いたことがわかるので、R0とR4の内容をメモリから
復帰する。
【0069】ステップ(i):図4のret命令の手順
にしたがって実行される。復帰したリンクレジスタ(L
R)の下位24ビットに、ルーチンSR2の戻り先アド
レスが格納されているので、プログラムカウンタ(P
C)にその値をセットする。
【0070】ステップ(e):図3のrestore命
令の手順にしたがって実行される。まず、リンクレジス
タ(LR)をメモリから復帰する。保護すべきレジスタ
の集合の情報(SL)に復帰したLRの上位8ビット0
b11100000をセットする。SLと、引数として
与えられた現在のルーチンで使用されるレジスタの集合
の情報(Imm)0b00111000とで論理積演算
を行う。その結果である0b00100000から、レ
ジスタR2がこのルーチンでメモリに退避されていたこ
とがわかるので、R2の内容をメモリから復帰する。
【0071】ステップ(f):図4のret命令の手順
にしたがって実行される。復帰したリンクレジスタ(L
R)の下位24ビットに、ルーチンSR1の戻り先アド
レスが格納されているので、プログラムカウンタ(P
C)にその値をセットする。
【0072】以上に示したように、本発明の方法を用い
ることにより、全てのサブルーチンにおいてコールされ
た時点での保護すべきレジスタの必要十分な集合を把握
することができるようになり、メモリへの無駄な退避を
減らすことができる。
【0073】
【発明の効果】以上のように本発明によれば、レジスタ
の内容のメモリへの保存およびメモリからレジスタへの
復帰に無駄がなくなり、従来よりメモリアクセスの回数
を減らすことができる。この結果、低消費電力化という
有利な効果が得られる。
【0074】また、無駄なレジスタ保存命令および復帰
命令を除去することができるため、プログラムの実行サ
イクル数を減少させることができ、動作の高速化という
有利な効果が得られる。
【0075】また、無駄なレジスタの退避を行うことが
なくなるため、退避領域を有効に活用でき、また容量を
削減することができるという有利な効果が得られる。
【0076】これらの有利な効果を得るため本発明の手
法を実現するにあたって、複雑なハードウェアを追加す
る必要がない、というメリットもある。
【図面の簡単な説明】
【図1】プロセッサ101がsave命令を実行する手
順を示す図
【図2】プロセッサ101がcall命令を実行する手
順を示す図
【図3】プロセッサ101がrestore命令を実行
する手順を示す図
【図4】プロセッサ101がret命令を実行する手順
を示す図
【図5】階層的なサブルーチンコールに伴うあるサブル
ーチンでの処理フロー図
【図6】本発明の実施の形態におけるプロセッサの構成
【図7】レジスタファイル107の汎用レジスタの構成
【図8】レジスタの集合の情報の保持方法を示す図
【図9】本発明の実施の形態に係るサブルーチンコール
に伴うレジスタの保護の方法を示す図
【図10】従来のサブルーチンコールに伴うレジスタの
保護の方法の第1の方法を示す図
【図11】従来のサブルーチンコールに伴うレジスタの
保護の方法の第2の方法を示す図
【図12】従来のサブルーチンコールに伴うレジスタの
保護の方法の第2の方法の、不必要な退避を抹消した方
法を示す図
【符号の説明】
1 プロセッサ101の処理save命令のステップ 2 プロセッサ101の処理save命令のステップ 3 プロセッサ101の処理call命令のステップ 4 プロセッサ101の処理call命令のステップ 5 プロセッサ101の処理call命令のステップ 6 プロセッサ101の処理call命令のステップ 7 プロセッサ101の処理restore命令のステ
ップ 8 プロセッサ101の処理restore命令のステ
ップ 9 プロセッサ101の処理restore命令のステ
ップ 10 プロセッサ101の処理ret命令のステップ 11〜16 階層的なサブルーチンコールに伴うあるサ
ブルーチンでの処理ステップ 101 プロセッサ 102 命令メモリ 103 データメモリ 104 プログラムカウンタ 105 プログラムカウンタを更新する装置 106 命令解読装置 107 レジスタファイル 108 演算器

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 命令を実行するプロセッサにおいて、階
    層的なサブルーチンのコールを伴うソフトウェアの実行
    にあたって、サブルーチンのコールに伴って、内容をメ
    モリに退避すべきレジスタの集合を求める方法であっ
    て、 上の階層のルーチンで使用されているため内容を破壊し
    てはいけない保護すべきレジスタの集合の情報を現在の
    ルーチンで保持し、サブルーチンがコールされた際に、
    保護すべきレジスタの集合の情報と現在のルーチンで使
    用されるレジスタの集合の情報をもとに、内容をメモリ
    に退避すべきレジスタの集合を決定するステップを有す
    ることを特徴とするレジスタ保護方法。
  2. 【請求項2】 命令を実行するプロセッサにおいて、階
    層的なサブルーチンのコールを伴うソフトウェアの実行
    にあたって、 請求項1記載のレジスタの集合決定ステップと、 サブルーチンがコールされた際に、前記レジスタ集合決
    定ステップで決定された退避すべきレジスタの内容をメ
    モリに退避するステップと、 サブルーチンがコールされた際に、上の階層のルーチン
    で使用されているため内容を破壊してはいけない保護す
    べきレジスタの集合の情報と、現在のルーチンで使用さ
    れるレジスタの集合の情報をもとに、保護すべきレジス
    タの集合の情報を更新するステップとを有することを特
    徴とするレジスタ保護方法。
  3. 【請求項3】 命令を実行するプロセッサにおいて、階
    層的なサブルーチンのコールを伴うソフトウェアの実行
    にあたって、 サブルーチンをコールする際に、上の階層のルーチンで
    使用されているため内容を破壊してはいけない保護すべ
    きレジスタの集合の情報を退避しておくステップと、 サブルーチンからリターンする際に、前記レジスタの集
    合の情報退避ステップで退避されていた保護すべきレジ
    スタの集合の情報を復元するステップと、 サブルーチンからリターンする際に、前記レジスタの集
    合の情報復元ステップで復元された保護すべきレジスタ
    の集合の情報と、現在のルーチンで使用されるレジスタ
    の集合の情報をもとに、内容を退避されていたレジスタ
    の集合を特定するステップと、 サブルーチンからリターンする際に、前記レジスタの集
    合特定ステップで求めた退避されていたレジスタの内容
    をメモリから復帰するステップとを有することを特徴と
    するレジスタ保護方法。
  4. 【請求項4】 保護すべきレジスタの集合の情報を専用
    レジスタや、汎用レジスタの一つや、ステータスレジス
    タの一部など、レジスタやレジスタの一部に保持するこ
    とによって行われる請求項1乃至請求項3に記載のレジ
    スタ保護方法。
  5. 【請求項5】 現在のルーチンで使用されるレジスタの
    集合の指定が、即値で表すことにより行われる請求項1
    乃至請求項3に記載のレジスタ保護方法。
  6. 【請求項6】 現在のルーチンで使用されるレジスタの
    集合の指定が、専用レジスタや、汎用レジスタの一つ
    や、ステータスレジスタの一部など、レジスタやレジス
    タの一部を用いることにより行われる請求項1乃至請求
    項3に記載のレジスタ保護方法。
  7. 【請求項7】 退避の対象となるレジスタの集合を得る
    演算が、保護すべきレジスタの集合と、現在のルーチン
    で使用される保護の対象となるレジスタの集合との論理
    積演算であることを特徴とする請求項1乃至請求項3に
    記載のレジスタ保護方法。
  8. 【請求項8】 新しい保護すべきレジスタの集合を得る
    演算が、現在の保護すべきレジスタの集合と、現在のル
    ーチンで使用される保護の対象となるレジスタの集合と
    の論理和演算であることを特徴とする請求項2に記載の
    レジスタ保護方法。
JP8496897A 1997-04-03 1997-04-03 プロセッサにおけるレジスタ保護方法 Pending JPH10283188A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8496897A JPH10283188A (ja) 1997-04-03 1997-04-03 プロセッサにおけるレジスタ保護方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8496897A JPH10283188A (ja) 1997-04-03 1997-04-03 プロセッサにおけるレジスタ保護方法

Publications (1)

Publication Number Publication Date
JPH10283188A true JPH10283188A (ja) 1998-10-23

Family

ID=13845435

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8496897A Pending JPH10283188A (ja) 1997-04-03 1997-04-03 プロセッサにおけるレジスタ保護方法

Country Status (1)

Country Link
JP (1) JPH10283188A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7237092B2 (en) 2001-01-18 2007-06-26 Infineon Technologies Ag Microprocessor circuit for portable data carriers and method for operating the circuit
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 (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7237092B2 (en) 2001-01-18 2007-06-26 Infineon Technologies Ag Microprocessor circuit for portable data carriers and method for operating the circuit
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
JP3649470B2 (ja) データ処理装置
RU2137183C1 (ru) Устройство и способ обработки данных с использованием наборов команд
JP3204323B2 (ja) キャッシュメモリ内蔵マイクロプロセッサ
JP4817189B2 (ja) メッセージ・ダイジェスト化命令を実行するための方法、システムおよびコンピュータ・プログラム
US5446849A (en) Electronic computer which executes squash branching
JPH1115673A (ja) 異なるランタイム環境において実行するための実行可能プログラムにおけるコードシーケンスを機能的に類似したコードシーケンスと条件付きで置き換えるローダ
JPH0682320B2 (ja) データ処理装置
JP4088418B2 (ja) ソフトウェア・エミュレーションを改善するために異なるデータ・タイプの複数の結果を生成するコンピュータ命令
JP2850808B2 (ja) データ処理装置およびデータ処理方法
JPH10283188A (ja) プロセッサにおけるレジスタ保護方法
US4499535A (en) Digital computer system having descriptors for variable length addressing for a plurality of instruction dialects
JP4159586B2 (ja) 情報処理装置および情報処理の高速化方法
EP0570646A1 (en) Method for processor simulation
JP2943772B2 (ja) 分岐予測方式
JPH01291327A (ja) 処理モード先取り制御方式
JP2000029690A (ja) デ―タ処理の方法および装置
JP3490191B2 (ja) 計算機
US10817288B2 (en) Combined instruction for addition and checking of terminals
JPH11134202A (ja) タスク切替え装置
JPH07295802A (ja) プログラムカード及びこれを用いた計算機
JP2853647B2 (ja) デバッガ付きインタプリタへの機能付加方式
JP3931646B2 (ja) 情報処理装置
JP2004157751A (ja) データ保護システム、データ保護プログラム及びデータ保護方法
JPH05250156A (ja) Riscプロセッサ
EP0557077A1 (en) Method for switching between memory management modes