【发布时间】:2013-12-25 05:43:07
【问题描述】:
如何强制 GCC 将 128bits/256bits 结构作为函数参数传递到 xmm/ymm 寄存器中? IE。如果我的结构是 256 位宽(UnsignedLongLongStruct 下面)
(我知道如果我使用内在函数来制作压缩整数,gcc 足够聪明,可以将它放入 %ymm 寄存器,但我可以用 struct 来做吗?)
typedef struct {
unsigned long long ull1;
unsigned long long ull2;
unsigned long long ull3;
unsigned long long ull4;
} UnsignedLongLongStruct;
void func1( UnsignedLongLongStruct unsignedLongLongStruct ) {
....
}
【问题讨论】:
-
先对齐上个世纪,用C++!
-
你确定这是个好主意吗?如果函数需要将值作为单独的标量,将它们放入调用者中的 ymm reg 并在被调用者中再次取出将比以正常方式传递它们更昂贵,即使这意味着它们必须进入堆栈,因为使用所有可用的参数传递寄存器。
标签: gcc struct 64-bit parameter-passing avx