DynASM

LuaJIT見てたら、なんかDynASMというのを利用しているようで、そのDynASMが非常に素晴らしいような気がした。

サンプルを見れば、わかるか。
http://luajit.luaforge.net/dynasm_examples.html


よーするに、DynASMは、JIT用のアセンブラ、というわけ。

DynASMは、プリプロセッサになってて、

static void
jit_op_store_array( Dst_DECL )
{
	| pop ecx // array
	| pop ebx // index
	| mov eax, [esp] // value
	| mov [ecx + ebx*4], eax
}

こんなコードを書いて、DynASMにとおせば、こういう機械語を生成するプログラムが生成できる。


まだちょっと、ラベルまわりの使いかたがわからないんだけど、詳細は気が向いたら書く。
とりあえず、a24zを超試験的にJIT対応しといた。
http://morihyphen.hp.infoseek.co.jp/files/a24z-0.92.tar.gz

field fval: int

def start() -> void :
	fval = 9

こ、このぐらいなら…動く。(それは動いたとは言わない)


あと、http://d.hatena.ne.jp/shinichiro_h/20060317#1142573253 でstruct対応していただいたのも入れておきました。対応どうもありがとうございます。
あー、それと、そういえば、getHeightがアレなのは、ただ単にパス数ケチった結果だったような気がしてきた、ので、getHeightがややこしかったのは忘れてください。