Gauche > Archives > 2011/12/19

2011/12/19 15:12:06 UTCshiro
#
C言語でfoo(int x)をfoo(int x, ...)に変えるのってABI上位互換になるんだったっけ? x86_64だと前者は引数がレジスタ渡しになるけど、後者はva_initする必要上スタック渡しになったりするんかな?
2011/12/19 20:12:13 UTCokuoku
#
x86_64だとalが消費されるので互換じゃなくなるみたいですね>vararg
#
For calls that may call functions that use varargs or stdargs (prototype-less
calls or calls to functions containing ellipsis (. . . ) in the declaration) %al is used
as hidden argument to specify the number of vector registers used.
#
http://www.x86-64.org/documentation/abi-0.99.pdf
#
逆にalさえ消費すれば(1引数余計に積めば)、libffiとかmoshでもvarargな関数をamd64で呼べるんだろうか。。
#
(今でもlibffiにvarargが無いのかは知らないけど)