我希望能够使用 NEON 向量指令来完成相对简单的任务:
给定一个 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
),但没有相应的内置函数。
这很奇怪。这是一个非常微不足道的操作,所以一定是可以的。问题是:如何实现?
编辑:参考@Jake的答案,使用godbolt
的结果为:
https://godbolt.org/z/ueJ6nB。
没有vswp
,但vext
效果很好。
gcc
。 - Cyan