В x86_64 аргументы передаются в регистрах, а не в стеке (стек используется только в том случае, если размер аргументов слишком велик, чтобы поместиться в регистрах). Все подробности 1 выложены в SYSV ABI для x86_64
Основой этого является то, что первые 6 аргументов целого числа / указателя передаются в RDI / RSI / RDX / RCX / R8 / R9, в то время как первые 8 аргументов с плавающей запятой / двойной передачей передаются в XMM0..XMM7. Кроме того, вам необходимо указать число регистров XMM, используемых для аргументов в AL 2 . Итак, в вашем случае вам нужен формат в RDI, двойное значение в XMM0 и 1 в AL
На странице википедии также есть много хорошей (краткой) информации об этом.
1 Для систем, не принадлежащих Microsoft - MS, являясь MS, делают что-то несовместимым образом
2 На самом деле вам нужно установить это только для функций varargs, которые используют хотя бы один регистр XMM. Для функций без varargs это будет игнорироваться, и если оно будет установлено слишком большим для функции varargs, результатом будет несколько потерянных циклов (сохранение ненужных регистров XMM), но на самом деле ничего не сломается.