x64 вызывая вопрос Конвенции


(Microsoft) x64 соглашение о вызовах гласит:

Аргументы передаются в регистрах RCX, RDX, R8 и R9. Если аргументы float / double, они передаются в XMM0L, XMM1L, XMM2L и XMM3L.

Это здорово, но почему просто плавает/удваивается? Почему целые числа (и, возможно, указатели) также не передаются через регистры XMM?
Похоже на пустую трату свободного пространства, не так ли?

1 2

1 ответ:

Потому что большинство операций над не-FP значениями (т. е. целыми числами и адресами) предназначены для использования регистров общего назначения.

Существуют целочисленные операции SSE, но они являются только арифметическими.

Таким образом, если бы соглашение о вызове поддерживало передачу целых чисел и адресов через регистры SSE, почти всегда было бы необходимо скопировать значение в регистры общего назначения.