><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
(Delphiじゃなくbccだったかもしれない・・・><(よく覚えてない><;))
でも、生まれて初めてアセンブラで書き直して高速化に成功できたから一応うれしい><(DelphiでMMX使って数命令の短いインラインアセンブラなコードで速くした事なら前にあるけど、処理丸ごとアセンブラで書いて速く出来たのは初めて><)
やっとdllに出来たのでベンチマークしてみたけど、10000000回ループで、C# 版: 1477ms手書きMSIL版: 1458msって速くはなったけどものすごく微妙><; そしてSystem.Math: 3ms・・・・・・・・><
dllとしてアセンブルしてもなぜかVSのオブジェクトエクスプローラで中身が表示されない・・・><
ループの中身、C#バージョンではnop抜いて27命令だったのを、19命令に減らせたっぽい><
なんか頭の使い方がパズルっぽくて、普段のプログラミングよりもテラリアとかで計算機の回路作って遊んでる時に近くておもしろかった><
参考文献>< もっと見る
アルゴリズムの元ネタ(実質これの移植版><)http://www.avrfreaks.net/comment/474232#comment-474232
CIL(MSIL)関連http://www5b.biglobe.ne.jp/~yone-ken/VBNET/index.htmlhttp://www.atelier-blue.com/program/il/
gistに置いてみました><sqrt CIL https://gist.github.com/orange-in-space/5bc1fb65fa9bfa12ebd48c40e586d77d
!><
@orange_in_space gist
コメントの // F hoge, fuga みたいなのはスタックの状態のメモです><;
pastebin貼れたっぽい><sqrtを計算するやつCIL(MSIL)版><https://pastebin.com/mL2AxsQc(シンタックスハイライトがilは流石に無いっぽいのでC# に設定しました><;)
pastebinとかはどうなんだろう
どこかスペース消えずにテキスト貼れるところってないかな?><;
不等号が逆だったっぽくて直したけど6桁あってる・・・?><Sqrt(2)=1.41421294212341
done.ExitCode:0
ilで書けました!>< 実行!>< もっと見る
Sqrt(2)=2.99999928474426
・・・・?><;
ラベルの書き方間違えてた(/////
スタックの状態をメモしながらじゃないとこんがらがるけど楽しい><>< https://mstdn.nere9.help/media/3XQcE-daT9oGU-J7IO4
MSILでゼロから書いて見ることにした><
Mid=ってなってる所、アセンブラで書けばMidに書かないでそのままスタックに乗せておいて、次のMid*Midって所が複製(dup)して掛ける(mul)で済むのに><;(その後もこのままのコードならpopすればLeftとかRightにMid相当の数値を直接書ける><(積む順番を工夫すればそれすら不要><;))
思考の /dev/null