为什么Windows x64调用约定不使用XMM寄存器传递超过4个整数args?

Meh*_*dad 4 windows assembly sse x86-64 calling-convention

(Microsoft)x64调用约定规定:

参数在寄存器RCX,RDX,R8和R9中传递.如果参数是float/double,则它们在XMM0L,XMM1L,XMM2L和XMM3L中传递.

这很好,但为什么只是漂浮/双打?为什么不通过XMM寄存器传递整数(也可能是指针)?
似乎有点浪费可用空间,不是吗?

eld*_*rge 6

因为非FP值(即整数和地址)上的大多数操作都是为了使用通用寄存器而设计的.

存在整数SSE操作但它们仅是算术的.

因此,如果调用约定支持通过SSE寄存器传递整数和地址,则几乎总是需要将值复制到通用寄存器.