JPH0713770A - ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法 - Google Patents

ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法

Info

Publication number
JPH0713770A
JPH0713770A JP5144097A JP14409793A JPH0713770A JP H0713770 A JPH0713770 A JP H0713770A JP 5144097 A JP5144097 A JP 5144097A JP 14409793 A JP14409793 A JP 14409793A JP H0713770 A JPH0713770 A JP H0713770A
Authority
JP
Japan
Prior art keywords
register
spill
instruction
assigned
main memory
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.)
Granted
Application number
JP5144097A
Other languages
English (en)
Other versions
JP3296027B2 (ja
Inventor
Motoyuki Kawaba
基行 河場
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP14409793A priority Critical patent/JP3296027B2/ja
Publication of JPH0713770A publication Critical patent/JPH0713770A/ja
Application granted granted Critical
Publication of JP3296027B2 publication Critical patent/JP3296027B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 本発明は、プロセッサが備えているマシン命
令では指示できない付加的レジスタを有効に利用するた
めのマシン命令,及び、コンパイル方法に関し、ソース
プログラムをコンパイルするときに、プロセッサが備え
ている上記の付加的レジスタの数に関係なく、有効に利
用する。 【構成】 マシン命令では指し示すことができない複数
個のスピルレジスタを備えたロードストア型プロセッ
サに、該スピルレジスタに配置された変数,又は、主
記憶上に割り当てられている変数に対するロード命令
aと,ストア命令bと,マシン命令で指し示すレジス
タに割り当てられなかった変数を、主記憶上に割り当て
る際の先頭番地等を所定のレジスタにセットするセット
命令cと,スピルレジスタ他の内容を主記憶 2上の
所定の領域に退避する退避命令dと,主記憶 2上の所
定の領域に退避されているスピルレジスタ他の内容を
元のレジスタに復帰する復帰命令eとを設けて、コン
パイルする。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、マシン命令では指し示
すことができない複数個の付加的レジスタを備えたロー
ドストア型プロセッサにおいて、上記付加的レジスタの
一部をスピルレジスタとして利用する際のコンパイル
に必要なマシン命令,及び、コンパイル方法に関する。
【0002】通常、プロセッサが実行するマシン命令が
主記憶をアクセスする場合、該プロセッサが備えている
汎用レジスタへのアクセスに比較して、随分遅い。この
ことは、プログラムの動作速度を低下させる要因の一つ
となっている。そこで、ソースプログラムをコンパイル
とき、コンパイラは、できるだけ汎用レジスタを使用す
る命令コードを出力し、プロセッサのハードウェアは、
できるだけ多くのレジスタを利用することが可能なよう
になっていることが必要となる。
【0003】又、上記の問題から、最近においては、主
記憶に対するアクセスをロード,ストア命令に限定し
て、加算命令等のその他の命令ではレジスタ間演算とす
る、所謂ロード・ストア型のRISCプロセッサとか、
スーパースカラプロセッサが構築されている。
【0004】このようなRISCプロセッサとか、スー
パースカラプロセッサにおいては、最近のデータ処理の
多様化に伴って、レジスタを、より多く利用するプログ
ラムが多くなっている。
【0005】又、プログラムの各マシン命令間にレジス
タ干渉があると、各マシン命令の前後関係を補償してや
る必要があるが、例えば、命令1:D←A+E,命令
2:A←B+Cのように、2つの命令1と,命令2との
間に順序関係がある場合、後の命令におけるレジスタA
を、例えば、別のレジスタFにリネーミングしておくこ
とで、上記命令1と命令2との並列処理が可能になり、
上記スーパースカラプロセッサ等においては、有用な手
段となる。
【0006】又、同様に、命令1:A←B+C,命令
2:G←A+F,命令3:A←D+Eなる命令列がある
場合、命令1と命令2との間には順序関係が必要である
が、命令3のレジスタAを、例えば、レジスタHにリネ
ーミングしておくことにより、命令1と命令3との並列
処理が可能になる。
【0007】又、シリアルに構成された命令列(命令
1,命令2,〜,命令k,〜命令n)において、命令K
と命令K+1との間には順序性を守る必要があるが、命
令1,〜と、命令Kとの間に順序を守る必要がないと
き、該命令Kを命令1と並列に実行することができる。
そうすると、命令Kで使用される、例えば、汎用レジス
タ(R0)の保持期間が長くなってしまう問題が発生し、こ
の汎用レジスタ(R0)の使用効率が低下する。そこで、該
汎用レジスタ(R0)を、例えば、該汎用レジスタ(R0)〜と
は別に、付加的に設けられているレジスタ群のレジスタ
Mにリネーミングしておくことで、汎用レジスタ(R0)の
使用効率を低下させることなく、且つ、命令1と命令K
との並列処理が可能になる。
【0008】従って、スーパースカラプロセッサ等にお
いては、レジスタの数が多いと、効率の良い並列処理が
可能になる。そこで、前述のように、付加的なレジスタ
を備えたプロセッサが必要とされることになるが、マシ
ン命令で、上記付加的なレジスタを指定しようとする
と、一般には、所定のレジスタ指定フィールドを設ける
とか、汎用レジスタ指定フィールドのビット幅を増加さ
せる必要があり、プロセッサの種別に対応して、命令の
フォーマットを変える必要が生じ、オブジェクトプログ
ラムの互換性がなくなる等の問題が発生する。
【0009】このような事情から、プロセッサに付加的
なレジスタを備えて、且つ、プロセッサによって、該付
加的なレジスタの数が変化しても、コンパイルされたオ
ブジェクトの互換性を保持しながら、且つ、該付加的な
レジスタの利用効率を低下させることのないコンパイル
方法が必要とされる。
【0010】
【従来の技術】図14は、従来の付加的レジスタに対す
るアクセス方法を説明する図である。最近のハードウェ
アの進歩により、プロセッサ内に、通常の命令のレジス
タ指定フィールドで指し示すことができる汎用レジスタ
(GR) 10 の他に、付加的なレジスタ (前述のスピルレジ
スタとして使用できるレジスタ群を含む) を備えること
ができるようになっている。
【0011】然しながら、プロセッサで実行され、レジ
スタの多用するオブジェクトプログラムをコンパイラ等
で生成する場合、ソースプログラム中の変数で、該汎用
レジスタ(GR) 10 に割り当てることが望ましい変数から
順次、該汎用レジスタ(GR) 10 に割り当て、該汎用レジ
スタ(GR) 10 に配置できなかった変数を、主記憶(MS)2
に割り当てることが行われる。
【0012】
【発明が解決しようとする課題】前述のように、主記憶
へのアクセスは、レジスタへのアクセスに比較すると、
格段にアクセス速度が遅い。このことは、プログラムの
実行速度を低下される要因の一つとなる。
【0013】一方、前述のように、最近のハードウェア
技術の進歩に伴って、より多くのレジスタを、ハードウ
ェア内に用意することができるようになっている。然
し、それだけでは、これらのレジスタを利用することは
できない。
【0014】従って、一般には、マシン命令中に、より
多くのレジスタを指し示すのに十分なレジスタ指定フィ
ールドが用意されている必要がある。このことは、命令
の語長を増やすことと同じである。
【0015】ハードウェアにインプリメントできるレジ
スタの数が変化するに伴って、命令語長が変わるのは、
マシンコードの互換性を損ねてしまう問題がある。又、
前述のように、プログラム中の各マシン命令が使用して
いるレジスタの間に、出力依存関係, 或いは、逆依存関
係がある場合、別のレジスタ、即ち、上記ハードウェア
で用意されている付加的レジスタにリネーミングするこ
とにより、例えば、スーパースカラプロセッサでの並列
処理が容易となる。
【0016】更に、上記ハードウェアで用意されている
付加的レジスタの利用効率を高めるためには、上記コン
パイラが主記憶に割り当てた変数を、上記付加的レジス
タに再割り当てることができることが必要となるが、こ
のとき、付加的なレジスタの数が変化しても、命令語長
が変化しないことが重要となる。
【0017】然しながら、現状のコンパイラでは、ハー
ドウェア内に上記付加的なレジスタが用意されていて
も、利用することができないという問題があった。本発
明は上記従来の欠点に鑑み、ソースプログラムをコンパ
イルするときに、プロセッサが備えているマシン命令で
は指示できない付加的レジスタを、マシン命令の語長を
変更することなく、効率良く利用する方法を提供するこ
とを目的とするものである。
【0018】
【課題を解決するための手段】図1は、本発明の原理説
明図である。上記の問題点は下記の如くに構成されたロ
ードストア型プロセッサの付加的レジスタを利用する際
のコンパイル方法によって解決される。
【0019】(1) マシン命令では指し示すことができな
い複数個の付加的レジスタ 11 を備え、上記付加的レジ
スタ 11 の一部をスピルレジスタとして設定している
ロードストア型プロセッサ 1で実行されるオブジェクト
プログラムを生成するコンパイラにおいて、上記マシン
命令で指し示すレジスタ 10 に割り当てられなかった変
数を、主記憶 2上に割り当て、上記プロセッサ 1によ
り、上記主記憶 2上に割り当てられている変数の一部を
上記スピルレジスタに割り当てられたとき、上記スピ
ルレジスタに割り当てられている変数と、上記スピル
レジスタに割り当てられないで、主記憶 2上に残って
いる変数に対するロード命令aと,ストア命令b
と,上記マシン命令で指し示すレジスタ 10 に割り当て
られなかった変数を、主記憶 2上に割り当てる際の先頭
番地(B) と、各プログラムで必要とする上記スピルレジ
スタの数を、所定のレジスタ 13,12にセットするセッ
ト命令cと、上記スピルレジスタ他の内容を主記憶
2上の所定の領域に退避する退避命令dと,上記主記
憶 2上の所定の領域に退避されているスピルレジスタ
他の内容を元のレジスタに復帰する復帰命令eを設け
ると共に、上記セット命令cに基づいて、上記各プロ
グラムで必要とする上記スピルレジスタの総数を格納
するスピル総数レジスタ 12 と, 上記主記憶 2に割り当
てられる変数の先頭番地(B) を格納する先頭番地レジス
タ 13 と, 上記ロード命令a, ストア命令cの実行
時に、上記主記憶 2に割り当てられる変数の主記憶2上
のレジスタ番号(s0)と、上記各プログラムで必要とする
スピルレジスタの総数を格納するレジスタ 12 の内容
とを比較して、上記スピルレジスタに割り当てられて
いる変数と、主記憶 2に残っている変数とを、選択的に
認識する比較手段 14 とを設けて、コンパイラが、上記
ロードストア型プロセッサ 1の直接アクセスできるレジ
スタ 10 に割り当てることが望ましい変数の一部を、上
記直接アクセスできるレジスタ 10 に配置できなかった
ことを検出したとき、上記スピルレジスタに割り当て
られた変数と,上記主記憶 2上に割り当てられたままの
変数に対するアクセスを、上記セット命令cと、ロー
ド命令a, ストア命令bとで、選択的に行うように
コンパイルする。
【0020】(2) 上記コンパイル時に、ソースプログラ
ムの主プログラムから、サブルーチンに移った時、該コ
ンパイルされたオブジェクトプログラムの実行時に、上
記退避命令dで、上記オブジェクトプログラムの主プ
ログラムで使用していたスピルレジスタの内容と、上
記スピルレジスタの総数を格納するスピル総数レジス
タ 12 と、上記マシン命令が指し示すレジスタ 10 に割
り当てられなかった変数を主記憶 2上に割り当てる際の
先頭番地(B) を格納する先頭番地レジスタ 13 の内容と
を、上記主記憶 2上の所定の領域に退避するようにコン
パイルし、上記コンパイルされたオブジェクトプログラ
ムの実行時に、上記サブルーチンで必要とする上記スピ
ルレジスタの数を所定のレジスタ(R1)にセットし、上
記スピルレジスタの内容が主記憶 2に割り当てられる
領域の先頭番地 (べース番地) を所定のレジスタ(R0)に
セットした後、上記セット命令cを実行したとき、上
記レジスタ(R0)の内容を、上記先頭番地レジスタ 13 に
セットした後、当該プロセッサが備えているスピルレジ
スタの数が設定されている上記スピル総数レジスタ 1
2 の内容と、当該サブルーチンで必要とするスピルレジ
スタの数が設定されている上記レジスタ(R1) 10 の内
容とを、上記比較手段 14 で比較して、当該サブルーチ
ンで必要とするスピルレジスタの数を確保できるよう
にコンパイルし、該オブジェクトプログラム中のサブル
ーチンの実行が終了した後、上記オブジェクトプログラ
ムのサブルーチン中の復帰命令eで、上記主記憶 2上
に退避しておいた、上記主ルートプログラムで使用して
いたスピルレジスタと、上記スピルレジスタの総数
を格納するスピル総数レジスタ 12 と、上記マシン命令
が指し示すレジスタ 10 に割り当てられなかった変数を
主記憶 2上に割り当てる際の先頭番地を格納する先頭番
地レジスタ 13 との内容を、それぞれ、元のレジスタ 1
1,12,13 に復帰するようにコンパイルするように構成す
る。
【0021】
【作用】先ず、本発明においては、コンパイラが、通常
は、汎用レジスタ(GR)に割り当てるべきであるにも関わ
らず、主記憶上に割り当てた変数を、ハードウェアによ
って、該ハードウェアが備えている付加的レジスタの一
部に割り当てられたとき、このレジスタをスピルレジス
タと呼ぶ。又、上記、ハードウェアが用意している付
加的レジスタの数をMAX-EXTRA-REG と定義し、上記スピ
ルレジスタの最大数をMAX-SP-REGと定義して、コンパ
イラによって割り当てるスピルレジスタの数は、この
値を越えないように制御される。
【0022】又、本発明においては、ハードウェアとし
て、次のレジスタを設ける。 SP-TOP-REG:主記憶 2に割り当てられる変数のベース番
地 (先頭番地で、主プログラム, サブルーチン毎に異な
る) B が格納されるレジスタ。 SP-USED-REG :あるサブルーチン等で必要とするスピル
レジスタの総数を格納するレジスタで、上記MAX-SP-R
EGによって制限される。 (主プログラム, サブルーチン
毎に異なる) SP-REG(i) :付加的なレジスタ 11 の一部であるスピル
レジスタ(i) で、その総数が上記MAX-SP-REGによって
制限される。
【0023】又、本発明においては、本来プロセッサが
備えている命令セットに、以下の5つの命令を設けて、
該命令セットを変更する。但し、RO,R1,S0,S1,SP-TOP-R
EG,SP-USED-REGはレジスタ名であり、r0,r1,s0,s1,sp-t
op-reg,sp-used-regは、上記各レジスタに格納される値
を示すものとする。
【0024】図2〜図9は、本発明のコンパイラで生成
されるマシン命令を説明する図であって、図2〜図4
は、本発明の追加命令の動作を流れ図で示した図であ
り、図5〜図8は、本発明の追加命令に関連するハード
ウェアの構成図である。
【0025】以下、各図を参照しながら、追加命令の作
用動作を説明する。先ず、図2によって、セット命令
cの動作を説明する。 sp-set r0,r1:あるサブルーチンで使用される変数が割
り当てられる主記憶 2上の先頭アドレス (ベースアドレ
ス:B)(r0) が、所定のレジスタ(R0)に設定され、当該
サブルーチン等で必要とされるスピルレジスタの総数(s
0)が、所定のレジスタ(R1)に設定される。
【0026】本命令 sp-set r0,r1 が、コンパイルされ
たオブジェクトプログラム上で実行されると、上記先頭
アドレス (ベースアドレス:B)(r0) が、上記SP-TOP-REG
13に転送される。又、レジスタ(R1)の値である"r1"
が、上記定義されているMAX-SP-REGと比較され、値が小
さい方のが、上記SP-USED-REG 12に転送される。つま
り、この命令によって、あるサブルーチンをコンパイル
するとき、該サブルーチンで必要とするスピルレジスタ
が確保され、前述のリネーミングなどの他の用途に使
用されないようにする。{図2(a) の処理ステップ 100
〜104 参照}つまり、レジスタ(R1)の値(r1)が、上記MA
X-SP-REGで定義されている付加的レジスタ 11aの数より
小さいと、該付加的レジスタ 11aの一部をスピルレジス
タとして確保し、レジスタ(R1)の値(r1)が、上記MAX-
SP-REGで定義されている付加的レジスタ 11aの数より大
きいときは、上記MAX-SP-REGで定義されている付加的レ
ジスタ 11aの全てをスピルレジスタとして使用するこ
とを意味する。勿論、MAX-EXTRA-REG と MAX-SP-REG が
等しければ、付加的レジスタ 11 を、全てスピルレジス
タとして使用することが可能である。
【0027】次に、図3(a),図5,図6により、ロード
命令aの動作を説明する。 sp-ld s0,r0 :あるサブルーチンで使用される、ある変
数が割り当てられる主記憶 2上の先頭アドレス(B) から
の変位 s0 {上記SP-TOP-REG 13 に設定されている値(r
0)+4s0、但し、主記憶 2の1語が4バイトバウンダリ
の場合}が、所定のレジスタ(S0)に設定される。{図2
(b) 参照}本命令 sp-ld s0,r0が、コンパイルされたオ
ブジェクトプログラム上で実行されると、上記SP USED
REG 12の内容(sp-used-reg) {つまり、スピルレジスタ
の総数}と、該サブルーチンで使用される変数の主記
憶 2上のアドレス (番地)(s0) とが比較され、0 ≦s0<
SP-USED-REG 12の内容(sp-used-reg) が検出されたとき
には、スピルレジスタに、該変数が割り当てられてい
ることになるので、SP-REG(SO)の内容を、レジスタ(RO)
に転送 (ロード動作がレジスタ間転送動作となる) す
る。{図5, 図3(a) の処理ステップ 200,201参照}然
し、s0≧SP-USED-REG 12の内容(sp-used-reg) が検出さ
れたときには、該変数は、スピルレジスタに割り当て
られなかったことを意味しているので、主記憶 2上の、
上記 sp-top-reg+4s0 番地の値を、レジスタ(RO)にロー
ドする。{図6, 図3(a) の処理ステップ 200,202参
照}次に、図3(b),図7,図8によって、ストア命令
bの動作を説明する。本命令 sp-st r0,s0が、コンパイ
ルされたオブジェクトプログラム上で実行されると、上
記SP USED REG 12の内容(sp-used-reg) {つまり、スピ
ルレジスタの総数}と、該サブルーチンで使用される
変数の主記憶 2上のアドレス (番地)(s0) とが比較さ
れ、0 <s0<SP-USED-REG 12の内容(sp-used-reg) が検
出されたときには、スピルレジスタに、該変数が割り
当てられていることになるので、レジスタ(RO)の内容
を、SP-REG(SO)に転送 (ストア動作がレジスタ間転送動
作となる) する。{図7, 図3(b) の処理ステップ 30
0,301参照}然し、s0≧SP-USED-REG 12の内容(sp-used-
reg) が検出されたときには、該変数は、スピルレジス
タに割り当てられなかったことを意味しているので、
レジスタ(RO)の内容を、主記憶 2上の、上記 sp-top-re
g+4s0 番地にストアする。{図8, 図3(b) の処理ステ
ップ 300,302参照}次に、図4によって、退避命令
d,復帰命令eの動作を説明する。退避命令 sp-save
(r0) :コンパイルされたオブジェクトプログラムの実
行途上において、主プログラムからサブルーチンに遷移
するとき、該サブルーチンの入口で実行される命令で、
前述の sp-set r0,s0 の前に実行されなくてはならな
い。
【0028】この命令が実行されると、r0個のスピルレ
ジスタが、主記憶 2上の所定の退避領域に退避され
る。このとき、スピルレジスタ SP-REG(i)の内容は、
主記憶2上のsp-top-reg+i×4(レジスタのバイト数) 番
地に退避される。又、SP-TOP-REG 13,SP-USED-REG 12の
内容は、例えば、スタックに積むなどの操作によって、
主記憶 2上の所定の領域に退避する。{図4(a) の処理
ステップ 400,401参照}復帰命令 sp-restore (r0):コ
ンパイルされたオブジェクトプログラムの実行途上にお
いて、主プログラムから遷移したサブルーチンでの処理
が終了して、該サブルーチンから主プログラムに復帰す
るときに実行される命令である。
【0029】この命令が実行されると、上記 sp-save
(r0) によって、主記憶 2上の所定の領域のスタックに
積まれていた、SP-TOP-REG 13,SP-USED-REG 12の内容
が、それぞれ、元の SP-TOP-REG 13,SP-USED-REG 12 に
復帰 (ロード) されると共に、主記憶 2上の所定の退避
領域に退避されていたスピルレジスタ SP-REG(i)の内
容が、sp-top-reg+i×4(レジスタのバイト数) 番地か
ら、それぞれ、対応するスピルレジスタに復帰 (リス
トア) される。{図4(b) の処理ステップ 500,501参
照} 本発明のために用意されたセット命令, ロード命
令, ストア命令, 退避命令, 復帰命令は、上記のように
動作するので、ソースプログラムをコンパイルすると
き、コンパイラは、先ず、従来方法と同じようにして、
レジスタ、例えば、通常のプロセッサに設けられている
汎用レジスタ(GR) 10 に割り当てることが望ましい変数
から順に、該汎用レジスタ(GR) 10 に割り当て、該汎用
レジスタ(GR)10 に割り当てることができなかった変数
を主記憶の所定の領域に割り当てる。
【0030】このとき、主プログラム, サブルーチン内
において、それぞれ、連続した領域に割り当てるように
する。そのため、主プログラム, 各サブルーチンに対応
して、前述の先頭アドレス(sp-top-addr) を定義し、上
記主記憶上に割り当てる変数は、sp-top-addr+α{レジ
スタのバイト数、例えば、前述の4バイトで割り切れる
番地で、前述のように、レジスタのバイト数が4バイト
であると、4×s0番地}に割り当てる。
【0031】そして、コンパイラは、該主記憶上に割り
当てられた変数へのアクセスに対して、上記ロード命令
(sp-ld s0,r0),又は、ストア命令(sp-st r0,s0) を生成
する。
【0032】このとき、上記 s0 {即ち、各サブルーチ
ンで使用される変数の主記憶上のアドレスで、上記sp-t
op-addr+αで表される}の値は、コンパイル時に決定さ
れる。
【0033】従って、該コンパイルされたオブジェクト
プログラムが、該プロセッサ上で実施され、上記生成さ
れたロード命令(sp-ld s0,r0),又は、ストア命令(sp-st
r0,s0) が実行されると、スピルレジスタに割り当て
られている変数であるか、否かが、前述の比較手段 14
{図1参照}で比較され、スピルレジスタに割り当て
られている変数へのアクセスについては、該スピルレジ
スタとの間の転送命令として動作し、該スピルレジス
タに割り当てられなかった変数に対しては、主記憶上
に割り当てられている番地との間で、ロード,ストア動
作が実行される。
【0034】このとき、該スピルレジスタへのアクセ
ス命令は、専用命令であり、前述のように、各プロセッ
サに備えられているスピルレジスタの総数(MAX-SP-RE
G)と、各サブルーチン等で使用される変数{レジスタ(R
1)の内容}の数によって、動的に、オペランドである s
0,r0が生成されるので、ソースプログラムを変更するこ
となく、任意の数のスピルレジスタを備えたプロセッ
サ 1で実行されるオブジェクトプログラムのコンパイル
が可能となる。
【0035】又、退避命令d, 復帰命令eは、主プ
ログラムからサブルーチンに遷移するとき、主プログラ
ムで使用されていたスピルレジスタ等の内容が破壊さ
れる恐れがあるので、主記憶上の所定の領域に退避し、
該サブルーチンの実行が終了して元の主プログラムに戻
るとき、上記退避しておいたスピルレジスタ等の内容
を元の、対応するレジスタに復帰させるためのものであ
る。
【0036】上記のように作用するので、本発明によれ
ば、ロードストア型プロセッサが備えている付加的レジ
スタの使用効率を向上させることができる。特に、使用
できるスピルレジスタの数を考慮にいれて、マシン命
令を生成するプロセッサ、及び、そのプロセッサで実行
するオブジェクトプログラムを生成する為のコンパイラ
の性能の向上に寄与することが大きい。
【0037】
【実施例】以下本発明の実施例を図面によって詳述す
る。前述の図1は、本発明の原理説明図であり、図2〜
図8は、本発明のコンパイラで生成するマシン命令を説
明する図であり、図9〜13は、本発明の一実施例を模
式的にに示した図であり、図9〜図11は、サブルーチ
ンの実行開始時の動作を示し、図12,図13は、サブ
ルーチンの実行終了時の動作を示している。
【0038】本発明においては、マシン命令では指し示
すことができない複数個の付加的レジスタ 11 を備え、
上記付加的レジスタ 11 の一部をスピルレジスタとし
て設定しているロードストア型プロセッサ 1で実行され
るオブジェクトプログラムを生成するコンパイラにおい
て、上記マシン命令で指し示すレジスタ 10 に割り当て
られなかった変数を、主記憶 2上に割り当て、上記プロ
セッサ 1により、上記主記憶 2上に割り当てられている
変数の一部を上記スピルレジスタに割り当てられたと
き、上記スピルレジスタに割り当てられている変数
と、上記スピルレジスタに割り当てられないで、主記
憶 2上に残っている変数に対するロード命令aと,ス
トア命令bと,上記マシン命令で指し示すレジスタ 1
0 に割り当てられなかった変数を、主記憶 2上に割り当
てる際の先頭番地(B) と、各プログラムで必要とする上
記スピルレジスタの数を、所定のレジスタ 13,12にセ
ットするセット命令cと、上記スピルレジスタ他の
内容を主記憶 2上の所定の領域に退避する退避命令d
と,上記主記憶 2上の所定の領域に退避されているスピ
ルレジスタ他の内容を元のレジスタに復帰する復帰命
令eを設けると共に、上記セット命令cに基づい
て、上記各プログラムで必要とする上記スピルレジスタ
の総数を格納するレジスタ(SP-USED-REG) 12と, 上記
主記憶 2に割り当てられる変数の先頭番地(B) を格納す
るレジスタ(SP-TOP-REG) 13 と, 上記ロード命令a,
ストア命令cの実行時に、上記主記憶 2に割り当てら
れる変数の主記憶 2上のレジスタ番号(s0)と、上記各プ
ログラムで必要とするスピルレジスタの総数を格納す
るレジスタ(SP-USED-REG) 12の内容とを比較する比較手
段 14 とを設けて、コンパイラが、上記ロードストア型
プロセッサ 1の直接アクセスできるレジスタ 10 に割り
当てることが望ましい変数の一部を、上記直接アクセス
できるレジスタ 10 に配置できなかったことを検出した
とき、上記スピルレジスタに割り当てられた変数と,
上記主記憶 2上に割り当てられたままの変数に対するア
クセスを、上記ロード命令a, ストア命令bで、選
択的に行うようにコンパイルする手段が、本発明を実施
するのに必要な手段である。尚、全図を通して同じ符号
は同じ対象物を示している。
【0039】以下、図1〜図8を参照しながら、図9〜
図13によって、本発明のロードストア型プロセッサの
付加的レジスタを利用する際のコンパイル方法を説明す
る。先ず、コンパイラは、ソースプログラムの主プログ
ラム,サブルーチンで使用される変数の依存関係を調
べ、通常のプロセッサ 1が備えている、例えば、汎用レ
ジスタ(GR) 10 に割り当てることが望ましいにも関わら
ず、該汎用レジスタ(GR) 10 に割り当てることができな
かった変数を、主記憶 2上の所定の領域に割り当てる。
但し、これらの変数が、主プログラム, 或いは、サブル
ーチン内では、連続した主記憶 2の領域に割り当てられ
るようにする。このとき、各々の変数は、レジスタのバ
イト数(mとする)で割り切れる番地に割り当てるが、
その領域の先頭番地は、主プログラム,或いは、各サブ
ルーチンで定められている固定されるアドレス(sp-top-
addr) となる。
【0040】つまり、主記憶 2上に割り当てられる変数
は、前述のレジスタ(SP-TOP-REG) 13 に、コンパイラに
よって、予め、設定されているアドレス(sp-top-addr)
+α(0mod m:レジスタのバイト数mで割り切れる番
地)に割り当てられる。
【0041】そして、上記主記憶 2上の{(sp-top-add
r) +α}番地に割り当てられた変数に対して、コンパ
イラは、スピルレジスタ配置の優先順位をつけて、優先
順位の高いものから順に、sp-top-addr+0,sp-top-addr+
1,─に割り当て、自己の備えているスピルレジスタの
総数(MAX-SP-REG)を認識しているハードウェアが、この
優先順位に従って配置する。
【0042】コンパイラは、該スピルレジスタに配置
された変数に対するアクセスに対して、本発明の上記ロ
ード命令(sp-ld s0,r0),ストア命令(sp-st r0,s0) を生
成する。
【0043】従って、コンパイルされたオブジェクトプ
ログラムを実行し、上記主記憶 2上の{(sp-top-addr)
+α}番地に割り当てられた変数を、レジスタ(RO)にロ
ードするとき、上記本発明のロード命令(sp-ld s0,r0)
が実行される。
【0044】上記ロード命令(sp-ld s0,r0) のオペラン
ドを構成している s0,r0は、前述のようにコンパイル時
に決定されているので、s0 (即ち、サブルーチン等で使
用されるレジスタ番号) が、前述のセット命令(sp-set
r0,r1)により、前述の(MAX-SP-REG)に基づいて設定され
ているレジスタ(SP-USED-REG) 12の値より小さいとき
は、該変数が、スピルレジスタに配置されていると認
識して、該スピルレジスタ{SP-REG(s0)}の内容をレジ
スタ(R0)に転送 (ロード) することで、上記ロード命令
がレジスタ間転送命令として動作し、高速ロードが行わ
れ、該 s0 がレジスタ(SP-USED-REG) 12より大きいとき
は、該変数はスピルレジスタに配置されていないと認
識して、主記憶 2上の{(sp-top-addr) +α}番地に割
り当てられている変数をレジスタ(RO)にロードする。ス
トア命令(sp-st r0,s0) を実行する場合についても、同
様の動作が行われる。{図5〜図8参照}次に、ソース
プログラムの主プログラムからサブルーチンに遷移する
ときの処理方法を、以下に説明する。
【0045】主プログラムからサブルーチンに遷移した
とき、主プログラムで使用していたスピルレジスタの
内容が破壊される恐れがある、本発明におけるコンパイ
ル時においては、サブルーチンの入口で、先ず、該スピ
ルレジスタと、上記セット命令(sp-set r0,r1)cに
よって設定されているSP-USED-REG 12,SP-TOP-REG 13の
内容とを、本発明の退避命令(sp-save r0)dによっ
て、図9, 図10に示したように、主記憶 2の所定の領
域 (図12,図13の黒の三角印で示す) に退避するよ
うにコンパイルする。
【0046】その後、前述の sp-top-addr Bを、レジス
タ(R0)に設定し、当該サブルーチンで必要とするスピル
レジスタの総数をレジスタ(R1)に設定して、本発明の前
述のセット命令(sp-set r0,r1)を実行するようにコンパ
イルする。この結果、コンパイルされたオブジェクトプ
ログラムの実行時において、上記SP-TOP-REG 13,及び、
SP-USED-REG 12に、それぞれ、当該サブルーチンで使用
される変数が割り当てられる主記憶 2上の先頭アドレス
と、当該サブルーチンで使用されるスピルレジスタの
総数が設定され、前述のロード命令(sp-ld s0,r0),或い
は、ストア命令(sp-st r0,s0) が実行されるときに参照
されることになる。{図11参照}このようにして、該
サブルーチンの実行が終了したとき、そのサブルーチン
の出口で、上記主記憶 2の所定の領域 (図12,図13
の黒の三角印で示す) に退避されていた、上記SP-USED-
REG 12,SP-TOP-REG 13の内容と、主プログラムで使用し
ていたスピルレジスタの内容が、前述の本発明で設け
られている復帰命令(sp-restore)eが実行されたと
き、図12,図13に示されているように、それぞれ、
対応するレジスタに復帰するようにコンパイルする。こ
のように、本発明においては、マシン命令では指し示す
ことができない複数個のスピルレジスタを備えたロー
ドストア型プロセッサに、該スピルレジスタに配置さ
れた変数,又は、主記憶上に割り当てられている変数に
対するロード命令aと,ストア命令bと,マシン命
令で指し示すレジスタに割り当てられなかった変数を、
主記憶上に割り当てる際の先頭番地B等をセットするセ
ット命令cと,スピルレジスタ他の内容を主記憶 2
上の所定の領域に退避する退避命令dと,主記憶 2上
の所定の領域に退避されているスピルレジスタ他の内
容を元のレジスタに復帰する復帰命令eとを設けて、
コンパイラが、ソースプログラムのコンパイル時に、汎
用レジスタに割り当てることが望ましい変数を、汎用レ
ジスタに配置(ハードウェアによる配置)できなかった
ことを検出したとき、上記スピルレジスタに配置さら
れている変数,又は、主記憶上の変数に対するアクセス
を、上記各プロセッサが備えているスピルレジスタの
数に関係なく、ロード命令a,ストア命令bで選択
的に行うようにコンパイルする。又、サブルーチンのコ
ンパイル時には、主プログラムで使用されているスピル
レジスタ等が破壊されないように、該スピルレジスタ
等の内容を主記憶上に退避し、該サブルーチンの実行
の終了時において、元のレジスタに復帰することができ
るようにコンパイルするようにした所に特徴がある。
【0047】
【発明の効果】以上、詳細に説明したように、本発明の
ロードストア型プロセッサの付加的レジスタを利用する
際のコンパイル方法によれば、コンパイラは、レジスタ
に割り当てることができたにも関わらず、ハードウェア
資源の制約のために主記憶に割り当てざるを得なかった
変数を認識しているので、それらの変数にスピルレジス
タ配置の優先度をつけて、優先度の高いものを、スピル
レジスタの上位{sp-top-addr +α(4s0) 番地で、優
先度の高いものほどαは小さい)番地に割り当てること
ができ、動作速度の向上を図ることができる。又、スピ
ルレジスタに割り当てることができる変数へのアクセ
スを、本発明の上記 sp-set 命令と、sp-ld 命令と,sp-
st命令を用いることによって、ハードウェアの提供した
付加的レジスタの数が変化しても、上記sp-set命令が参
照する MAX-EXTRA-REGや,MAX-SP-REG に対するインプリ
メントを変更するだけで、オブジェクトの互換性が保て
る。つまり、sp-set命令によって、ハードウェアにあっ
た付加的レジスタの数の変化を吸収することができる。
【0048】従って、本発明によれば、ロードストア型
プロセッサが備えている付加的レジスタの使用効率を向
上させることができる。特に、使用できるスピルレジス
タの数を考慮にいれて、マシン命令を生成するプロセ
ッサ、及び、そのプロセッサで実行するオブジェクトプ
ログラムを生成する為のコンパイラの性能の向上に寄与
することが大きい。
【図面の簡単な説明】
【図1】本発明の原理説明図
【図2】本発明のコンパイラで生成するマシン命令を説
明する図(その1)
【図3】本発明のコンパイラで生成するマシン命令を説
明する図(その2)
【図4】本発明のコンパイラで生成するマシン命令を説
明する図(その3)
【図5】本発明のコンパイラで生成するマシン命令を説
明する図(その4)
【図6】本発明のコンパイラで生成するマシン命令を説
明する図(その5)
【図7】本発明のコンパイラで生成するマシン命令を説
明する図(その6)
【図8】本発明のコンパイラで生成するマシン命令を説
明する図(その7)
【図9】本発明の一実施例を模式的に示した図(その
1)
【図10】本発明の一実施例を模式的に示した図(その
2)
【図11】本発明の一実施例を模式的に示した図(その
3)
【図12】本発明の一実施例を模式的に示した図(その
4)
【図13】本発明の一実施例を模式的に示した図(その
5)
【図14】従来の付加的レジスタに対するアクセス方法
を説明する図
【符号の説明】
1 プロセッサ 10 直接アクセスできるレジスタ, 汎用レジスタ(GR) 11 直接アクセスできない付加的レジスタ 12 必要とするスピルレジスタの数を格納するスピ
ル総数レジスタ(SP-USED-REG) 13 変数を主記憶上に割り当てるときの先頭番地レジ
スタ(SP-TOP-REG) 14 比較手段 (比較器) 2 主記憶 100 〜104,200 〜202,300 〜302,400,401,500,501
処理ステップ スピルレジスタ{SP-REG(i) } a ロード命令(sp-ld s0,r0) b ストア命令(sp-st r0,s0) c セット命令(sp-set r0,r1) d 退避命令(sp-save r0) e 復帰命令(sp-restore r0) MAX-SP-REG スピルレジスタの総数 MAX-EXTRA-REG 外部的レジスタの総数 r0 変数を主記憶上に割り当てるときの先頭番地 (ベ
ースアドレス) r1 必要とするスピルレジスタの数 s0 主記憶上に割り当てられた変数の番号,変数の変

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】マシン命令では指し示すことができない複
    数個の付加的レジスタ(11)を備え、上記付加的レジスタ
    (11)の一部をスピルレジスタ () として設定している
    ロードストア型プロセッサ(1) で実行されるオブジェク
    トプログラムを生成するコンパイラにおいて、 上記マシン命令で指し示すレジスタ(10)に割り当てられ
    なかった変数を、主記憶(2) 上に割り当て、上記プロセ
    ッサ(1) により、上記主記憶(2) 上に割り当てられてい
    る変数の一部を上記スピルレジスタ () に割り当てら
    れたとき、上記スピルレジスタ () に割り当てられて
    いる変数と、上記スピルレジスタ ()に割り当てられ
    ないで、主記憶(2) 上に残っている変数に対するロード
    命令 (a)と,ストア命令(b)と,上記マシン命
    令で指し示すレジスタ(10)に割り当てられなかった変数
    を、主記憶(2) 上に割り当てる際の先頭番地(B) と、各
    プログラムで必要とする上記スピルレジスタ () の数
    を、所定のレジスタ(13,12) にセットするセット命令
    (c)と、上記スピルレジスタ () 他の内容を主記
    憶(2) 上の所定の領域に退避する退避命令 (d) と,
    上記主記憶(2) 上の所定の領域に退避されているスピル
    レジスタ () 他の内容を元のレジスタに復帰する復帰
    命令(e)を設けると共に、 上記セット命令 (c)に基づいて、上記各プログラム
    で必要とする上記スピルレジスタ () の総数を格納す
    るスピル総数レジスタ(12)と, 上記主記憶(2)に割り当
    てられる変数の先頭番地(B) を格納する先頭番地レジス
    タ(13)と, 上記ロード命令 (a),ストア命令(
    c)の実行時に、上記主記憶(2) に割り当てられる変数
    の主記憶(2) 上のレジスタ番号(s0)と、上記各プログラ
    ムで必要とするスピルレジスタ () の総数を格納する
    スピル総数レジスタ(12)の内容とを比較して、上記スピ
    ルレジスタ()に割り当てられている変数と、主記憶
    (2)上に残っている変数とを、選択的に認識する比較手
    段(14)とを設けて、 コンパイラが、上記ロードストア型プロセッサ(1) の直
    接アクセスできるレジスタ(10)に割り当てることが望ま
    しい変数の一部を、上記直接アクセスできるレジスタ(1
    0)に配置できなかったことを検出したとき、上記スピル
    レジスタ ()に割り当てられた変数と,上記主記憶(2)
    上に割り当てられたままの変数に対するアクセスを、
    上記セット命令(c)と、ロード命令 (a),スト
    ア命令(b)とで、選択的に行うようにコンパイルす
    ることを特徴とするロードストア型プロセッサの付加的
    レジスタを利用する際のコンパイル方法。
  2. 【請求項2】上記コンパイル時に、ソースプログラムの
    主プログラムから、サブルーチンに移った時、該コンパ
    イルされたオブジェクトプログラムの実行時に、上記退
    避命令(d)で、上記オブジェクトプログラムの主プ
    ログラムで使用していたスピルレジスタ() の内容
    と、上記スピルレジスタ () の総数を格納するスピル
    総数レジスタ(12)と、上記マシン命令が指し示すレジス
    タ(10)に割り当てられなかった変数を主記憶(2) 上に割
    り当てる際の先頭番地(B) を格納する先頭番地レジスタ
    (13)の内容とを、上記主記憶(2) 上の所定の領域に退避
    するようにコンパイルし、 上記コンパイルされたオブジェクトプログラムの実行時
    に、上記サブルーチンで必要とする上記スピルレジスタ
    () の数を所定のレジスタ(R1)にセットし、上記スピ
    ルレジスタ()の内容が主記憶(2) に割り当てられる
    領域の先頭番地(べース番地) を所定のレジスタ(R0)に
    セットした後、上記セット命令 (c)を実行したと
    き、上記レジスタ(R0)の内容を、上記先頭番地レジスタ
    (13)にセットした後、当該プロセッサが備えているスピ
    ルレジスタ () の数が設定されている上記スピル総数
    レジスタ(12)の内容と、当該サブルーチンで必要とする
    スピルレジスタの数が設定されているレジスタ(R1) 10
    の内容とを、上記比較手段(14)で比較して、当該サブル
    ーチンで必要とするスピルレジスタ () の数を確保で
    きるようにコンパイルし、 該オブジェクトプログラム中のサブルーチンの実行が終
    了した後、上記オブジェクトプログラムのサブルーチン
    中の復帰命令 (e)で、上記主記憶(2) 上に退避して
    おいた、上記主ルートプログラムで使用していたスピル
    レジスタ()と、上記スピルレジスタ () の総数を
    格納するスピル総数レジスタ(12)と、上記マシン命令が
    指し示すレジスタ(10)に割り当てられなかった変数を主
    記憶(2)上に割り当てる際の先頭番地を格納する先頭番
    地レジスタ(13)との内容を、それぞれ、元のレジスタ(1
    1,12,13)に復帰するようにコンパイルすることを特徴と
    するロードストア型プロセッサの付加的レジスタを利用
    する際のコンパイル方法。
JP14409793A 1993-06-16 1993-06-16 ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法 Expired - Fee Related JP3296027B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP14409793A JP3296027B2 (ja) 1993-06-16 1993-06-16 ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP14409793A JP3296027B2 (ja) 1993-06-16 1993-06-16 ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法

Publications (2)

Publication Number Publication Date
JPH0713770A true JPH0713770A (ja) 1995-01-17
JP3296027B2 JP3296027B2 (ja) 2002-06-24

Family

ID=15354136

Family Applications (1)

Application Number Title Priority Date Filing Date
JP14409793A Expired - Fee Related JP3296027B2 (ja) 1993-06-16 1993-06-16 ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法

Country Status (1)

Country Link
JP (1) JP3296027B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000065435A1 (fr) * 1999-04-22 2000-11-02 Seki, Hajime Systeme informatique
JP2009187120A (ja) * 2008-02-04 2009-08-20 Fujitsu Ltd プロセッサ、レジスタアクセス方法およびレジスタアクセスプログラム

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009157608A (ja) 2007-12-26 2009-07-16 Nec Corp キャッシュメモリシステムおよびキャッシュメモリ制御方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000065435A1 (fr) * 1999-04-22 2000-11-02 Seki, Hajime Systeme informatique
JP2009187120A (ja) * 2008-02-04 2009-08-20 Fujitsu Ltd プロセッサ、レジスタアクセス方法およびレジスタアクセスプログラム

Also Published As

Publication number Publication date
JP3296027B2 (ja) 2002-06-24

Similar Documents

Publication Publication Date Title
US6826677B2 (en) Renaming registers to values produced by instructions according to assigned produce sequence number
US5634046A (en) General purpose use of a stack pointer register
US5303357A (en) Loop optimization system
EP1313011B1 (en) Intermediate code execution system, intermediate code execution method, and computer program product for executing intermediate code
JPH113269A (ja) スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法
US6701520B1 (en) Preventing garbage collection of objects in object oriented computer programming languages
EP1461698A2 (en) Method of scheduling in a reconfigurable hardware architecture with multiple hardware configurations
AU773940B2 (en) Method and apparatus for allocating stack slots
JP2001147819A (ja) 最適化装置および記録媒体
JP2003167737A (ja) スタック使用方法
KR100725393B1 (ko) 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
JPH0713770A (ja) ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法
JP2005129001A (ja) プログラム実行装置、マイクロプロセッサ及びプログラム実行方法
US6275985B1 (en) Method and apparatus for developing an application that implements garbage collection efficiently by combining proxy objects with compiler support
EP1481320B1 (en) Two tier clusters for representation of objects in java programming environments
JP3896238B2 (ja) コンピュータシステム及びプログラムの実行時表現方法
JP3019317B2 (ja) プロセススケジューリング方法
US6421825B2 (en) Register control apparatus and method thereof for allocating memory based on a count value
Quammen et al. Register window management for a real-time multitasking RISC
JP2003330730A (ja) オペレーティングシステム配置装置
US6173443B1 (en) Method of compiling a loop
JP2001356916A (ja) メモリブロック化コンパイラ及びプログラム実行方法
US5579495A (en) Information processing in which a simulation of parallelism is achieved
JP2004287618A (ja) オペレーティングシステム起動制御方法、およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置
JP2004021344A (ja) コンパイラおよびループ内変数へのレジスタ割り当て方法

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20020312

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080412

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090412

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090412

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100412

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110412

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees