関数呼び出し規約(その2)

昨日の書き込みに対してうじのすけさんから質問がありました。

関数呼び出し規約ですが、例えばvoid func(char *c,...)といったような引数可変関数を使用しない限り大丈夫と認識していますが、この認識は正しいでしょうか?

これは、引数可変で無い場合でも必要です。コンパイラが生成する関数は、最初の3つの引数をレジスタで受け取りますが、場合によってはそれらをスタック上の引数領域に書き戻します。これは古い版のコンパイラ・マニュアルに書いてありました。デバッガ用にこれらの書き戻しをわざと行うこともあるとのことです。
私に理解できないのは、なぜ「引数の数に関わらず最低12バイト必要」なのかです。これが理解できないのですが、マニュアルにはそうしろと書いてありますので黙って従うことにしました。副作用は無いはずです。また、ざっと見たところコンパイラが生成する関数呼び出しコードもそうしていました。