Skip to content

Instantly share code, notes, and snippets.

@akihiroy
Created February 2, 2011 06:55
Show Gist options
  • Save akihiroy/807343 to your computer and use it in GitHub Desktop.
Save akihiroy/807343 to your computer and use it in GitHub Desktop.
jitasm sample
// レジスタ割り当てを行うサンプル
struct func_compiler : jitasm::function_cdecl<int, func_compiler, int, int *, double, POINT>
{
Result main(Reg32 a, Reg b, XmmReg c, Addr d)
{
Reg32 v;
mov(v, a); // aをレジスタとしてmov
add(v, dword_ptr[b]);
movsd(xmm0, c); // Arg<double>はXmmRegとして使える
//fld(real8_ptr[c]); // cをスタックからloadしたい場合はXmmReg cをAddr cに変える
Reg32 x, y;
mov(x, dword_ptr[d]);
mov(y, dword_ptr[d + 4]);
Reg p;
lea(p, dword_ptr[d]);
mov(x, dword_ptr[p]);
mov(y, dword_ptr[p + 4]);
Addr addr = local_alloc(8);
mov(dword_ptr[addr], x);
mov(dword_ptr[addr + 4], x);
return v;
}
};
// レジスタ割り当てが行われないサンプル
struct func_asm : jitasm::function_cdecl<int, func_asm, int, int *, int, POINT>
{
Result main(Addr a, Addr b, Addr c, Addr d)
{
mov(eax, dword_ptr[a]);
mov(zsi, zword_ptr[b]);
add(eax, dword_ptr[zsi]);
add(eax, dword_ptr[c]);
mov(ebx, dword_ptr[d]);
mov(ecx, dword_ptr[d + 4]);
lea(zsi, dword_ptr[d]);
mov(ebx, dword_ptr[zsi]);
mov(ecx, dword_ptr[zsi + 4]);
Addr addr = local_alloc(8);
mov(dword_ptr[addr], ebx);
mov(dword_ptr[addr + 4], ecx);
return eax;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment