OpenHSP with LLVM
val = 0 *main : if val >= 100000000 : goto *a val += 1 if val \ 100000 == 0 : mes val goto *main *a : mes val
ぐらいなら動くようになった。型は整数、制御構文はifとgotoのみって段階で比べてもしょうもないけどオフィシャルのHSPの50倍速ぐらいで。
LLVMのFunctionからC++側の関数を呼び出す方法が分からずmesの実装に一番時間がかかった。
ExecutionEngine::InstallLazyFunctionCreatorで関数名から関数ポインタを引き当てるコールバックを登録できるようだ。ある言語からLLVMのインストラクション経由でネイティブコード吐く例は結構あるんだけど、JITを直に組み込む例があんまり見つからない。