qemuのTCG

LLVMの代わりにqemuTCGが使えないだろうかとちょっと考える。TCGは0.10以降のqemuが使用している、リアルタイムコードジェネレータであり、既にx86PPC、ARM等それなりの数のアーキテクチャをサポートしている。

  • インターフェースは近い。つまりAPIを呼び出すことでBasic Blockを作って、その中に変数やフローを構築していく。
  • BSDL
  • 浮動小数点が無い(ということはまだqemuはFPU命令をインタプリタで実行してるんだろうか。。)
  • ついでに言うとベクタも無い
  • 実メモリに対する読み書きはqemu側の関数をcallbackする
  • NANDも有る(ぉ

LLVMに対する利点は、プロジェクトと一緒に配布できそうなところか。LLVMとインターフェースを揃えること自体はそれほど難しくないと思うので、両対応にするのが良いかも知れない。
LLVMには自前のGCアロケータや多倍長演算が有るが、TCGには相当する物はない。もっとも重大な欠点は浮動小数点が無いというあたりで、何か対策を考えないと現実には使えないだろう。。
TCGそのものは一切の最適化を行わないので、VMのオペレーションをただTCGに流し込んでもDirect-threaded codeと同じ物が出てくるだけだろう。型付けや脱出解析、Basic Blockへの変換等を行って初めてJITCとしての意味が出てくる。