只包含一个定义列表,用于稍后讨论用于传递函数参数的算法。
特别地,SSE类中一个新的矢量寄存器总是传递,第一个可用的%xmm0-%xmm7
。
请注意,这些名称是指寄存器的低128位部分,但更好的方法是使用可变大小的向量寄存器%v0-%v7
。
该SSEUP类传递在下一个可用的64位(八字节)的最后矢量寄存器使用。然后
__m256
通过,在支持AVX处理器,利用单个%ymm
寄存器:低64位得到SSE类 - 并且因此新%v0
寄存器 - 而其他三个64比特的块得到SSEUP从而重新使用%v0
寄存器。
下面是从文档的相关报价:
- 如果类SSE,下一个可用的向量寄存器时,寄存器 采取的顺序从%xmm0到%xmm7。
- 如果类是SSEUP,则在最后一个使用的向量寄存器的下一个可用的8字节 块中传递该八字节。
的SSEUP类先前在ABI推出,它今天仍然存在。
您可以快速查阅Version 0.9以查看差异:例如,_m256
和_m512
类型不存在。
对于编译器不与_m256
类型或编译器确实支持它,但没有支持AVX目标处理器支持新的ABI,该类型通常为an aggregate of two _m128
,因此通过后述的规则(特别是后合并规则)它在内存中传递:
- 如果一个物体的尺寸是多于两个eightbytes更大,或在C++中,是一个nonPOD结构或联合型,或包含未对齐字段,它具有 类记忆。
对于如果总的尺寸超过2个eightbytes和第一eightbyte 不是SSE或任何其他eightbyte不SSEUP使用旧ABI
编译器,整个论点 是记忆中传递。
对于使用新ABI
该标准承认混淆主要是由于需要解决向后兼容,SSE和SSEUP分类编译器是在一个体系结构方便的分类,其中矢量寄存器不断扩大,不同大小的广泛范围已经出现在那里。