Scheme Compiler の勉強 (7) - LLVM と PowerPC の返り値
- ちょっと整理。今のところ、コンパイラーといっても与えられた即値に対応する LLVM アセンブラを生成して、それをテスト用の runtime.c の main から呼び出しているだけ。primitive の定義も、手続きを定義するというより個々のに対応するアセンブラを出力するだけ。
- PowerPC では、 http://www.super-computing.org/~ysd/yuke/ppcStackFrame.html や実際のコンパイル結果を見ると r3 レジスタを返り値のために使っている。
- LLVM のアセンブラで関数を書くときは、普通に引数と型を指定できる様子。
- C で fxadd1 を書いて LLVM アセンブラにするとこんなのになってしまう。うーん。これだと "Compilers: Backend to Frontend and Back to Front Again" で想定しているのとだいぶ違うような。さてどうしよう。
define i32 @fxadd(i32 %x) nounwind { entry: %tmp2 = add i32 %x, 1 ; <i32> [#uses=1] ret i32 %tmp2 }