qemuのTCG
LLVMの代わりにqemuのTCGが使えないだろうかとちょっと考える。TCGは0.10以降のqemuが使用している、リアルタイムコードジェネレータであり、既にx86やPPC、ARM等それなりの数のアーキテクチャをサポートしている。
- インターフェースは近い。つまりAPIを呼び出すことでBasic Blockを作って、その中に変数やフローを構築していく。
- BSDL
- 浮動小数点が無い(ということはまだqemuはFPU命令をインタプリタで実行してるんだろうか。。)
- ついでに言うとベクタも無い
- 実メモリに対する読み書きはqemu側の関数をcallbackする
- NANDも有る(ぉ
LLVMに対する利点は、プロジェクトと一緒に配布できそうなところか。LLVMとインターフェースを揃えること自体はそれほど難しくないと思うので、両対応にするのが良いかも知れない。
LLVMには自前のGCアロケータや多倍長演算が有るが、TCGには相当する物はない。もっとも重大な欠点は浮動小数点が無いというあたりで、何か対策を考えないと現実には使えないだろう。。
TCGそのものは一切の最適化を行わないので、VMのオペレーションをただTCGに流し込んでもDirect-threaded codeと同じ物が出てくるだけだろう。型付けや脱出解析、Basic Blockへの変換等を行って初めてJITCとしての意味が出てくる。