gpt4 book ai didi

gcc - 如何强制 GCC 将 128 位/256 位结构作为 xmm/ymm 寄存器中的函数参数传递?

转载 作者:行者123 更新时间:2023-12-04 21:43:22 24 4
gpt4 key购买 nike

如何强制 GCC 将 128 位/256 位结构作为 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 ) {
....
}

最佳答案

TL;博士 :似乎调用约定明确提到 __m256 和 friend 要放在 umm regs 中。

X86-64 System V ABI ,点3.2.3,可以查看参数是如何传递的。我的阅读是只有__m256参数将变成一个 SSE 和 3 个 SSEUP 8 字节块,这允许它们在 ymm 寄存器中传递。

这将使您的参数在内存中传递,这就是我们在 clang、gcc 和 icc 中看到的:Test program on godbolt

为了将它作为寄存器传递,当我阅读调用约定时,似乎您必须将它作为 __m256 (或其变体)传递。

关于gcc - 如何强制 GCC 将 128 位/256 位结构作为 xmm/ymm 寄存器中的函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com