ABI 合わせ。Application Binary Interface ですね... 要するに、
関数の呼び出され方と、
関数の呼び出し方
の規約だ。だいたい、歴史的な理由で決まる。ということは、
その時、その時の事情で適当に決めた腐り切った規約
だってこと。まぁ、Cは、引数のアドレスを取れたり、コンパイラが中身を教えてもらえない可変長引数とかがあrので、ある程度汚いのは仕方がないのだが...
レジスタとそのセーブする場所、局所変数と関数呼び出しの呼び出され側(callee)の引数、呼出側(caller)の引数が、重ならないように配置するわけなんだけど、微妙に合わない。調整する部分が3-4箇所あり相互に依存しているので。
合わないと、まったく動かないわけではない。あたりが最低... このあたりを、線形制約で解くみたいな論文があったような気がするが...
C との互換性を捨ててしまえば、このあたりはさっぱり気にしなくて良くて、実際、自分で作った部分は、マシン依存性はほとんどない。その分、プログラマにしわ寄せがいくだけだがね。
No comments:
Post a Comment