FreePascalその4

…最適化あまり賢くないな…これ。
gcc系がレジスタの使い方が下手なのは無論として、register*1呼び出し規約の肝は、スタックフレームレスのコード生成だと勝手に思っているのですが、FreePascalのregister呼び出し規約は、しっかりスタックフレーム作りやがります。Delphiの最適化がダメダメなのは一部で有名みたいですが、レジスタの使い方が異様に上手いのと、必要が無ければスタックフレームを作らずその場合はebpも変数のほうに回るという、大きな特徴があるため、生成コードを意識して書けば出力をめっさ綺麗にできるという点も併記してあげてくださいませ。命令スケジューリングとか考えられて無さそうとかいうのはそれはそれで。私は-O3よりも-Osが好きなんですよっ。
最初dyayamlに続いてdyaregexpもとか考えてたのですが、これはNFAを再帰で辿っているdyaregexpにとっては明らかにダメージとなると思えますので、やっぱ、やめ、やめ。
少なくともC言語であれば各コンパイラに期待できますし…。つかgcc系のスタックやらレジスタの使い方の下手なのは、やはりx86に特化できないせいなのでしょうかね。4.0以降ですら短い関数でも同じ値をあっちこっちmovしてて酷いしなあ…。

*1:__fastcall