新しいものを表示

(Delphiじゃなくbccだったかもしれない・・・><(よく覚えてない><;))

でも、生まれて初めてアセンブラで書き直して高速化に成功できたから一応うれしい><(DelphiでMMX使って数命令の短いインラインアセンブラなコードで速くした事なら前にあるけど、処理丸ごとアセンブラで書いて速く出来たのは初めて><)

やっとdllに出来たのでベンチマークしてみたけど、10000000回ループで、
C# 版: 1477ms
手書きMSIL版: 1458ms
って速くはなったけどものすごく微妙><; そして
System.Math: 3ms
・・・・・・・・><

dllとしてアセンブルしてもなぜかVSのオブジェクトエクスプローラで中身が表示されない・・・><

ループの中身、C#バージョンではnop抜いて27命令だったのを、19命令に減らせたっぽい><

なんか頭の使い方がパズルっぽくて、普段のプログラミングよりもテラリアとかで計算機の回路作って遊んでる時に近くておもしろかった><

orange さんがブースト

コメントの // F hoge, fuga みたいなのはスタックの状態のメモです><;

pastebin貼れたっぽい><
sqrtを計算するやつCIL(MSIL)版><
pastebin.com/mL2AxsQc
(シンタックスハイライトがilは流石に無いっぽいのでC# に設定しました><;)

orange さんがブースト

どこかスペース消えずにテキスト貼れるところってないかな?><;

不等号が逆だったっぽくて直したけど6桁あってる・・・?><
Sqrt(2)=1.41421294212341

done.
ExitCode:0

ilで書けました!>< 実行!>< 

Sqrt(2)=2.99999928474426

done.
ExitCode:0

・・・・?><;

ラベルの書き方間違えてた(/////

スタックの状態をメモしながらじゃないとこんがらがるけど楽しい><>< mstdn.nere9.help/media/3XQcE-d

MSILでゼロから書いて見ることにした><

Mid=ってなってる所、アセンブラで書けばMidに書かないでそのままスタックに乗せておいて、次のMid*Midって所が複製(dup)して掛ける(mul)で済むのに><;(その後もこのままのコードならpopすればLeftとかRightにMid相当の数値を直接書ける><(積む順番を工夫すればそれすら不要><;))

古いものを表示
:realtek:

思考の /dev/null