今のところコリジョンチェックは総当りでやっていて、敵弾120発と自機、 自機弾16発と敵10体をそれぞれ総当りしても、まあなんとかなってるんだ けど、いや実は、なんとかなってないので(全方位弾を撃つと処理落ちが 一瞬だけ発生する)なんとかする。なんかガクガクして見えるのは精神的 によくない。 というわけで手っ取り早くなんとかする方法として、判定関数をARM化した のだが…… THUMBからARMの判定関数を呼び出し、そこから更にTHUMBの関数を呼び出そ うとしたら止まってしまった。ASM吐かせてみたらblでブランチしてるのな。 longcall属性をつけなきゃいけないようだ。なんか、以前にも似たような ことを書いた気がする。学習能力無いな俺。
結構前々からの疑問なのですが、
除算のような比較的ランダムに呼びだされる関数以外での
ARM 化でもやっぱり速くなるものなのでしょうか?
ある程度、呼ばれるところが確定している関数については
インライン展開してしまってシーケンシャルアクセスで
持ってくるので十分なのではないかと思っているのですが。
(ARM 化すると呼び出しのオーバーヘッドもかかりますし)。 (2006/06/03 01:37:09)
コードをIWRAMに置くのが目的なのでARM化しています。
IWRAMに置くのにARMステートの方が都合がいいので。
ループがネストしているような、bxのオーバーヘッドが無視できる程度に
長い時間実行される箇所は効果がよく出るんじゃないかな。 (2006/06/03 03:09:02)