gpt4 book ai didi

c - 用 C/gcc 内在函数 : no intrinsic for VSWP? 交换 NEON vector 的一半

转载 作者:行者123 更新时间:2023-12-01 15:10:06 31 4
gpt4 key购买 nike

我正在尝试使用 NEON vector 指令做一些相对简单的事情:给定一个 uint64x2_t,我想交换 64 位成员的位置。

好吧,如果这是一个简单的普通代码:

typedef struct {
U64 u[2];
} u64x2;


u64x2 swap(u64x2 in)
{
u64x2 out;
out.u[0] = in.u[1];
out.u[1] = in.u[0];
return out;
}

令人惊讶的是,我找不到它的内在函数。显然有一个汇编指令( VSWP ),但没有相应的内在函数。

这很奇怪。这是一个尽可能微不足道的操作,所以它必须是可能的。问题是:如何?

edit :作为引用,godbolt 结果使用@Jake 回答: https://godbolt.org/z/ueJ6nB .没有 vswp,但 vext 效果很好。

最佳答案

你说得对,NEON 内部函数不支持 VSWP 指令。

但是,您可以使用 VEXT 指令代替,该指令也可以在内部函数中使用。

out = vextq_u64(in, in, 1);


或者,您可以使用 vcombine (并祈祷编译器不会搞砸):

out = vcombine_U64(vget_high_u64(in), vget_low_u64(in));

但请注意,编译器在看到 vcombine 和/或 vget 时往往会生成 FUBAR 机器代码。

坚持前者,这是我的建议。

关于c - 用 C/gcc 内在函数 : no intrinsic for VSWP? 交换 NEON vector 的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207397/

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