こんにちは、廣田です。
最近SH2のプログラムを書いていて、ふと思ったことが。
SHのPRってなんの目的で設置されているのだろうか?と。
pr=プロシージャレジスタは
jsr @rm
nop
を実行したら、戻り先アドレスを記憶するレジスタですが、この有効性が
解らないのです。
jsrを実行した後、戻り先をスタックに積むより処理が速くなると言っても
飛び先のサブルーチンがさらにjsrをネスティングするためには結局、PRを
どこかに保存しなければなりません。
mov.l #procidure,r0
jsr @r0
nop
:
:
procidure:
sts pr,@-sp
:
jsr --
:
lds @sp+,pr
:
rts
おそらく、Cコンパイラも、ある関数を汎用的に作ろうとするなら、結局prを
スタック上に積んだり、戻したりする処理をつけるでしょう。
そしたら結局余計なprをプッシュ、ポップする手数が掛かり、全体のパフォーマンスが
低下するのでは? と思ってしまいます。
なんで、jsr命令は初めから戻り先をスタックに積むような(H8のような)処理系にしなかっ
たのだろうかと思う次第です。
どなたか、理由を教えてください。
--
// Name "Hirota Masataka"
// Address mhirota@xxxxxxxxxxxxx
// Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/