足し算と関数呼び出し (らしきもの) ができるようになった。
~/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)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.