足し算と関数呼び出し (らしきもの) ができるようになった。
~/c/cflat % uname -srm
Linux 2.6.8-11-amd64-k8 x86_64
~/c/cflat % cat test/add2.cb
int
main(int argc, char **argv)
{
printf("ret=%d\n", f(76));
return 0;
}
int
f(int i)
{
return i + 1;
}
~/c/cflat % ruby -I./lib ./bin/cbc test/add2.cb
~/c/cflat % file add2
add2: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked (uses shared libs), not stripped
~/c/cflat % ./add2
ret=77
Linux/AMD64 の calling convention を初めて真面目に調べたよ。 最初の 6 個が rdi, rsi, rdx, rcx, r8, r9 で残りがスタックらしい。 まだレジスタをちゃんと割り付けるロジックを書いてないので、 手で割り当てるのが非常にめんどくさかった。
(19:58)