history

青木日記 RSS

<前の日 | この月 | 次の日>

2006-08-14

そうだコンパイラつくろう (2)

足し算と関数呼び出し (らしきもの) ができるようになった。

~/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)

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS