ABI を決めるには?…

by syoyo

rsl2llvm もそろそろ C/LLVM/SL との境界の ABI をデザインするフェーズに入ってきたのだけれど、いまいち ABI ってどうデザインすればよいのかわからない。

ここでの ABI って言っているのは、最下層のアセンブラレベルの関数呼出規約、
たとえばレジスタ $1 には戻り先のアドレスをいれて、
スタックポインタはどーのこーので、
というところまではいかなくて、
C、LLVM 中間言語, SL(シェーディング言語)間の
関数呼出のインターフェイスのデザインを
どうするか、という話。

ベクタ型は 4xfloat にするとか、
スカラは値渡しだけどベクタ型はポインタで渡すとか、
スタックベースでやるとか、
いやいや引数はすべて opaque pointer ひとつで隠してしまうとか。

たとえば SWIG で C と python の組合せでの
グルーコードを見てもらえればわかるけど、
インターフェイスをあわせるためにすげーめんどい処理しているのね。
そーゆーのは避けたいなぁと。

ポータブルでシンプルで、かつ LLVM(or compiler)にとって specialize や LTO
しやすい形にできるというのが理想。

で、そーゆーのを自分でうんうん考えたり、
海外のコンパイラ野郎らと discussion してというのでも
いいんだけど、なんか時間が無駄になりそうなんだよね。

(たぶんいるであろう)日本で ABI に詳しいひとが
身近にいるといろいろ手軽に相談できていいんだけど。

もしくはコンパイラ分野における、
「こいつに聞けばあいつがよく知っているからあいつに聞け」
とすぐに紹介してくれる、コミュニティを掌握しているひととか。
# ちなみにグラフィックス、特に大域照明だったら、私に聞いてくれれば
# 「〜したいんだけど」とお問い合わせがあればなんでもお答えできると思います。

コンパイラコミュニティは私にとってはまだまだアウェーなわけで、
正直(日本において)だれがプレイヤーなのかかよくわからない。

「オレ知っている」
「あいつに聞くといいよ」
「あなたのそのコンパイラの悩み、聞いて解決してあげます」
とかあったらぜひ御連絡ください。

Advertisements