Home > スポンサー広告 > TempAR 0xC2 レジスタ退避?

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント: -

Home > スポンサー広告 > TempAR 0xC2 レジスタ退避?

Home > ゲームその他 > TempAR 0xC2 レジスタ退避?

TempAR 0xC2 レジスタ退避?


一つ前の記事で

「どうやらTempARのバグっぽい。
0xC2コードでアセンブラを直接走らせる場合、
レジスタのat v0-v1 a0-a3 t0-t9は安全みたいだが
s0-s7あたりに数値を入れようとすると毎回クラッシュする。」

と書いたのですが、
HARO先生のブログで「バグでは無くてレジスタ退避してないからでは?」と書かれてました。

TempARが0xC2コードをサポートした時に、
「$s-レジスタをルーチン内で使うときは、その内容をスタックに
一時的に退避させなければならない。
$t-レジスタはサブルーチンを呼び出すと内容が破壊されるので、
必要なら呼び出す側がセーブしておかなければならない。」
とMIPS/wikipediaに書かれているので、TempAR作者に
「どのレジスタも破壊しても大丈夫か?」と質問したら
「たぶん問題ない」との返事だったのと、最後に必ず「jr ra」で戻るということは
raを初めとする汎用レジスタの値をTempAR側でPUSH-POPしてくれているものと
勝手に想像していたのだが、違うのかもしれない。
呼出規約通りならat v0-v1 a0-a3 t0-t9 k0-k1レジスタだけTempAR側(もしくは
TempARが使っているAPI等)が退避しているのかな。
作者に直接確認したほうがいいか。

ただよく分からないのは、TH2DTの同じ場所でk0-k1 gp sp fp ra以外の
全レジスタ(s1-s2を含む)を破壊するプログラムを何度動かしてもクラッシュしないのに、
s1かs2レジスタだけを破壊するプログラムの場合は100%クラッシュする再現性があること。

ちょっと時間があるときにでももう一度確認してみます。


関連記事
スポンサーサイト

コメント: -

Home > ゲームその他 > TempAR 0xC2 レジスタ退避?

Return to page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。