Mosh x86-64 の FFI でも double の引数/戻り値に対応

呼び出し規約の

  • 引数 8 個 までは xmm0 〜 xmm7 レジスタ
  • 9個目以降はスタック
  • 戻り値は xmm0

というのを理解すれば良い。


最初勘違いをしていて xmm7 まで到達したら次は rdi, rsi と続くのかと思い、うまく行かずにはまった。
rdi, rsi ... は整数引数のレジスタだった。


テストも引数 10 個とかにしてみないと正しく動いているか分からないので、以下のような非現実的な関数を作った。

double hoge(double x1, double x2, double x3, double x4, double x5, double x6, double x7, double x8, double x9, double x10)
{
  return x1 - x2 + x3 - x4 + x5 - x6 + x7 - x8 + x9 - x10;
}


というわけで revision 1113 から利用可能です。